Hello, Guest the thread was called960 times and contains 33 replays

last post from kinzi at the

Laden eines Assembler-Programms aus Basic

  • 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

    2x C64 (Brotkasten), 1x C64 II, 1x C64 g, 2x 1541, 4x 1541 II,

    1x C128, 1x C128d, 2x 1571

    1x Amiga 500, 2x Amiga 500Plus (in der Restauration), 2x Amiga600, 1x Amiga 1200, 2x Amiga 2000, 1x Amiga 4000 (jeweils mit diversem Zubehör)

    1x 1802, 4x 1084s, 1x 1901

    1x Atari ST, 1x Atari MegaST

  • 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.

  • 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! 8o

  • Sowas. Generationen von C64-Programmieren haben sich geirrt! 8o

    An welcher Stelle?

    2x C64 (Brotkasten), 1x C64 II, 1x C64 g, 2x 1541, 4x 1541 II,

    1x C128, 1x C128d, 2x 1571

    1x Amiga 500, 2x Amiga 500Plus (in der Restauration), 2x Amiga600, 1x Amiga 1200, 2x Amiga 2000, 1x Amiga 4000 (jeweils mit diversem Zubehör)

    1x 1802, 4x 1084s, 1x 1901

    1x Atari ST, 1x Atari MegaST

  • Sowas. Generationen von C64-Programmieren haben sich geirrt! 8o

    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.

    "Wenn du überredet, ermahnt, unter Druck gesetzt, belogen, durch Anreize gelockt, gezwungen, gemobbt, bloßgestellt, beschuldigt, bedroht, bestraft und kriminalisiert werden musst. Wenn all dies als notwendig erachtet wird, um deine Zustimmung zu erlangen, dann kannst du absolut sicher sein, dass das, was angepriesen wird, nicht zu deinem Besten ist." - Quelle unbekannt.


    "Steve Jobs hat User hervorgebracht, Jack Tramiel Experten." - Quelle unbekannt.

    "Mein Herr, ich teile Ihre Meinung nicht, aber ich würde mein Leben dafür einsetzen, dass Sie sie äußern dürfen." - Voltaire.

    "Diskutiere nie mit einem Idioten - er zieht dich auf sein Niveau hinunter und schlägt dich dort mit seiner Erfahrung!" - Volksweisheit.


  • Sowas. Generationen von C64-Programmieren haben sich geirrt! 8o

    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

    2x C64 (Brotkasten), 1x C64 II, 1x C64 g, 2x 1541, 4x 1541 II,

    1x C128, 1x C128d, 2x 1571

    1x Amiga 500, 2x Amiga 500Plus (in der Restauration), 2x Amiga600, 1x Amiga 1200, 2x Amiga 2000, 1x Amiga 4000 (jeweils mit diversem Zubehör)

    1x 1802, 4x 1084s, 1x 1901

    1x Atari ST, 1x Atari MegaST

    Edited once, last by DasDirch ().

  • 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!!"

    "Wenn du überredet, ermahnt, unter Druck gesetzt, belogen, durch Anreize gelockt, gezwungen, gemobbt, bloßgestellt, beschuldigt, bedroht, bestraft und kriminalisiert werden musst. Wenn all dies als notwendig erachtet wird, um deine Zustimmung zu erlangen, dann kannst du absolut sicher sein, dass das, was angepriesen wird, nicht zu deinem Besten ist." - Quelle unbekannt.


    "Steve Jobs hat User hervorgebracht, Jack Tramiel Experten." - Quelle unbekannt.

    "Mein Herr, ich teile Ihre Meinung nicht, aber ich würde mein Leben dafür einsetzen, dass Sie sie äußern dürfen." - Voltaire.

    "Diskutiere nie mit einem Idioten - er zieht dich auf sein Niveau hinunter und schlägt dich dort mit seiner Erfahrung!" - Volksweisheit.


    Edited once, last by kinzi ().