In message <c771831756.cms@xxxxxxxxxxxxxxxxxxxxxx>
Carlos Michael Santillan <ml-archimedes@xxxxxxxxxx> wrote:
Zusächlich ist die Methode irgendwelche Bytes in den Speicher zu
schreiben um das dann auszuführen nicht gerade transparent. Was macht
eigentlich der Wert 123 oder 85?
Da ist es besser Assembler zu benutzen das beim BBC BASIC schon
vorbereitet ist. In BASIC schreibst Du das ab der Adresse 49192. Das
kann man in C genauso und schon hast Du die Startadresse.
Mit DATA hinterlegt man die Dezimalwerte, welche ein Programm oder Daten
beschreiben, also z. B.
100 DATA 123, 85, 38, 3, 80, 89, ...
usw.
READ liest diese Daten nacheinander aus..
POKE schreibt Daten in den Speicher. PEEK liest Daten aus dem Speicher
aus.
Will man z. B. ab Adresse 49192 ein Programm oder Daten in den Speicher
klopfen, macht man folgendes:
10 FOR a = 49192 TO ...
20 READ d
30 POKE 49192 + a
Das sollte wohl nur a stehen. :-)
40 NEXT a
100 DATA 123, 85, 38, 3, 80, 89, ...
BTW: Man muss für die FOR Schleife wissen wieviele Daten in DATA liegen.
Muss man bei C aber auch.
Man könnte vielleicht hergehen und mit Hilfe von C einen Datenblock in
den Speicher klopfen, der Entsprechendes enthält (Code + Daten).
int a[2000];
a[0] = 123;
a[1] = 85;
[a2] = 38;
Das wäre eine Lösungsmöglichkeit. Ein Array ist nur einen andere
Schreibweise für Zeiger. Nebenbei gilt das auch für BASIC.
Dann weiß ich aber immer noch nicht, was der C-Compiler tatsächlich
macht. Denn vermutlich macht er mehr. Wo startet also das Programm? Und
Bei BASIC weiß ich es auch nicht.
was ist mit der Main-Schleife (welche der Compiler anscheinend
blödsinnigerweise erwartet, obwohl die kein Mensch braucht, denn sonst
bricht er ab)? Die Main-Schleife ist auch ein Hauptproblem bei den
Modulen; denn diese kennen keine.
C Programme besteht aus Funktionen und main() ist halt die wo alles
anfängt. Das Module kein main() haben ist durchaus richtig. Es sind
keine Programme, sondern nur einen Samlung von Funktionen. Das
eingentliche Programm hat die Funktion main() und ruft die eine oder
andere Funktion aus dem einen oder anderen Modul auf.
Wenn ich die Daten mit Hilfe von C in den Speicher klopfe, dann aber mit
Hilfe eines Editors wie StrongEd den übersetzten Code von überflüssigem
Zeug "bereinigen" muss, dann kann ich auch hergehen und den Code gleich
mit Hilfe von StrongEd direkt einklopfen. Das ist nicht sinnvoll.
Du meinst direkt Maschinensprache?
Weil ich nicht weiß, wie ich dort die entsprechenden
Programm-Bibliotheken nutzen kann. Neue Programm-Bibliotheken zu
portieren dürfte auch etwas schwierig sein. Die meisten Bibliotheken
sind leider nur im grauenhaften C-Quellcode verfügbar. Dies ist der
einzige Grund. Sonst würde ich mir C gar nicht erst antun.
Problem ist, dass man heutzutage nicht mehr alles neu schreibt, sondern
auf Bestehendes zurückgreifen muss. Weil man bei der Komplexität der
Programme sonst nicht mehr fertig wird. Siehe Webbrowser. Andernfalls
hätte ich auch !POP3S und !SMTPS nicht fertig gebracht.
Warum soll man auch immer wieder das Rad neu erfinden, wenn es schon
erfunden wurde. Warum schreibt nicht jeder für ein Programm ein neues
Betriebssystem?
*) Hinweis: Bei moderneren Betriebsystemen als das vom C64 kann man
nicht im gesamten Speicher lesen und schreiben.
Jow. Da sagt einem der Rechner, was man machen soll und darf. Habe ich
aba nicht so gerne... weil, ich bin ja ein Dickschädel. Und lasse mir
nicht gerne etwas sagen. Sondern möchte dem Rechner sagen, was er zu tun
hat.
Viel Spaß wenn Du in Deinen Programm in dem Speicher eines anderen
Programms rumschreibst. War das nicht das Problem von Windows bis Me?
Bei NT ging das nicht und schon war Windows stabiler - wenn auch immer
noch sch....