Kaum mehr Aufwand als die Hochzählerei mit Variablen,
... es sei denn, man hat vorher ein anderes Programm benutzt, welches exakt den gleichen Mechanismus benutzt.
You are about to leave Forum64 to get redirected to the following address:
Please note, that the target website is not operated by us. We are not responsible for it's content nor does our privacy policy apply there.
Kaum mehr Aufwand als die Hochzählerei mit Variablen,
... es sei denn, man hat vorher ein anderes Programm benutzt, welches exakt den gleichen Mechanismus benutzt.
Kaum mehr Aufwand als die Hochzählerei mit Variablen,
... es sei denn, man hat vorher ein anderes Programm benutzt, welches exakt den gleichen Mechanismus benutzt.
Natürlich, man kann beliebige Schwachpunkte ausfindig machen, wo es Probleme geben kann. Relevant ist, was wirklich praxistauglich ist und welche "Risiko" man gewillt ist in Kauf zu nehmen.
10 if a=1 then goto 30
20 a=1:load "Programm",8,1
30 sys Startadresse
Das kann nicht funktionieren da das Programm zwar in den Speicher geladen wird, aber der Sys-Befehl niemals erreicht wird. Sobald das neue Programm geladen wird, wird das Alte aus dem Speicher geworfen, der Sys-Befehl ist dann nicht mehr vorhanden
Sobald das neue Programm geladen wird, wird das Alte aus dem Speicher geworfen, der Sys-Befehl ist dann nicht mehr vorhanden
Klar, wenn man dämlich genug ist, "Programm" an den BASIC-Start zu laden.
Das kann nicht funktionieren da das Programm zwar in den Speicher geladen wird, aber der Sys-Befehl niemals erreicht wird.
Doch, das ist das übliche Prozedere, um Maschinensprache-Programme zu laden, die nicht an den BASIC-Start geladen werden (z.B. in den Kassettenpuffer oder nach 49152 = $C000).
Der Witz ist, dass das Programm geladen wird, danach das BASIC-Programm neu gestartet wird, aber OHNE, dass die Variablen gelöscht werden. Auch das BASIC-Ende wird nicht angefasst. Daher funktioniert das gerade sehr gut.
Natürlich, man kann beliebige Schwachpunkte ausfindig machen, wo es Probleme geben kann.
Du hast gesagt, dass du IMMER diese Signatur verwendest. D.h., mit deinen eigenen Programmen kann es sehr einfach zu dieser Kollision kommen.
Daher halte ich das nicht für einen "beliebigen" Schwachpunkt, sondern für einen sehr reellen.
Natürlich, man kann beliebige Schwachpunkte ausfindig machen, wo es Probleme geben kann.
Du hast gesagt, dass du IMMER diese Signatur verwendest. D.h., mit deinen eigenen Programmen kann es sehr einfach zu dieser Kollision kommen.
Er hat gesagt, dass er immer "eine bestimmte Signatur" verwendet. Ich gehe mal stark davon aus, dass das nicht immer dieselbe ist.
Ich gehe mal stark davon aus, dass das nicht immer dieselbe ist.
Gut, dann hätte ich da zu viel hineininterpretiert. Ich hatte ihn anders verstanden, aber ich sehe ein, dass deine Interpretation genauso valide ist.
10 if a=1 then goto 30
20 a=1:load "Programm",8,1
30 sys Startadresse
Das kann nicht funktionieren da das Programm zwar in den Speicher geladen wird, aber der Sys-Befehl niemals erreicht wird. Sobald das neue Programm geladen wird, wird das Alte aus dem Speicher geworfen, der Sys-Befehl ist dann nicht mehr vorhanden
Sowas. Generationen von C64-Programmieren haben sich geirrt!
Sowas. Generationen von C64-Programmieren haben sich geirrt!
An welcher Stelle?
Sowas. Generationen von C64-Programmieren haben sich geirrt!
An welcher Stelle?
Weil sie das 40 Jahre lang so gemacht haben und ihnen keiner gesagt hat, dass das gar nicht geht. Aber nun ist das ja geklärt.
Sowas. Generationen von C64-Programmieren haben sich geirrt!
An welcher Stelle?
Weil sie das 40 Jahre lang so gemacht haben und ihnen keiner gesagt hat, dass das gar nicht geht. Aber nun ist das ja geklärt.
ok
Sobald ein über LOAD geladenes Programm eine Basiczeile enthält, wird der Basicspeicher neu beschrieben.
Nein, selbst das ist so allgemein formuliert nicht richtig. Wenn das LOAD mit ,8,1 ausgeführt wird, dann kann sogar ein BASIC-Programm geladen werden, wenn es einen anderen Startbereich hat, ohne des vorliegende Programm zu überschreiben.
Das kann man z.B. gut nutzen, um quasi "Module" nachzuladen.
Beispiel: Ab $0801 - $1FFF steht das BASIS-Modul, also etwas, was für alle Module gilt.
Alle Module beginnen ab $2000 (laut eigener Ladeadresse!). Nun kann ich mit ,8,1 die Module nachladen und ersetzen, ohne das Basismodul ab $0801 zu stören.
Da muss man natürlich noch einiges beachten (so muss man dafür sorgen, dass auch wirklich ein "BASIC-Linker" auf $2000 zeigt, damit die Module mit GOTO, GOSUB usw. auch gefunden werden.
Es kommt nicht darauf an, was der nachgeladene Inhalt ist, sondern darauf, was die Startadresse sagt (bei ",8,1", wohlgemerkt! Beim Laden mit ",8" oder ",8,0" sieht das anders aus!)
Steht schon in den Handbüchern...
Handbücher neigen manchmal zur Vereinfachung...
Sobald ein über LOAD geladenes Programm eine Basiczeile enthält, wird der Basicspeicher neu beschrieben. Steht schon in den Handbüchern...
Blödsinn.
Ein mit LOAD xxx ,8,1 geladenes Programm wird dorthin geladen, wo es die im File gespeicherte Ladeadresse (erste zwei Bytes) vorgibt. Wenn das ein Programm wäre mit Ladeadresse $0801 (i. A. ein BASIC-Programm, das "normal" mit SAVE xxx,8 gespeichert wurde), dann - und nur dann! - würde das laufende Programm, das den LOAD-Befehl enthält, überschrieben. Ob da eine BASIC-Zeile drin ist oder nur "Binärmüll", ist völlig unerheblich.
Hier geht es aber darum, ein Maschinenspracheprogramm nachzuladen, das von einer bestimmten Adresse weg gespeichert wurde, und die beschriebene Methode funktioniert perfekt seit 40 Jahren.
"Achtung Autofahrer! Auf der A14 kommt Ihnen ein Geisterfahrer entgegen!"
"Was einer?? HUNDERTE!!"