Aus dem 64'er
Heft - 1/87
|
Basic-Programm in BANK 0 verschieben
Um ein im Speicher befindliches Basic-Programm innerhalb von BANK 0 an eine andere Stelle zu befördern, kann man sich einer Routine des Basic 7.0-Interpreters bedienen, die beim Einschalten der hochauflösenden Grafik zum Transport des Programms zur neuen Anfangsadresse 16385 ($4001) dient. Da es sich um eine Maschinenroutine handelt, geht das Verschieben selbst bei extrem langen Programmen in Sekundenschnelle vonstatten. Allerdings ist die Routine nur für den Transport von 7183 ($1C01) nach 16385 ($4001) ausgelegt, weshalb bei der Verwendung anderer Adressen Einschränkungen unvermeidlich sind:
- Das Low-Byte der neuen Startadresse muß »l« sein.
- Das Programm muß vor dem Kopieren bei 7182 ($1C01) liegen.
- Die neue Anfangsadresse muß größer sein als die alte (7183 = $1C01).
Wie man dann vorgeht, soll am Beispiel der Zieladresse 32769 ($8001) gezeigt werden:
1. High-Byte bestimmen: PRINT (32769-l)/256 Ergebnis 128 (merken!)
2. Offset-High-Byte ermitteln: PRINT 128-28 Ergebnis 100 (merken!) 28 ist hierbei immer konstant.
3. Verschieberoutine aufrufen: SYS DEC("9F5C"),PEEK (4625)+ 100
(100 ist das Ergebnis aus Schritt 2.)
Wenn das Programm so lang ist, daß ab der Zieladresse nicht ausreichend Platz vorhanden ist, erfolgt die Meldung »OUT OF MEMORY«. Sie müssen also nicht mit einem Absturz oder sonstigem Fehlverhalten rechnen.
4. Neue Adresse einstellen: POKE 46,128 (128 ist das High-Byte aus Schritt 1.)
5. Programm löschen: NEW
6. Programm wiederherstellen, damit alle Basic-Zeiger richtig gesetzt werden (was nach Schritt 4. nicht der Fall ist): POKE 1 + 256*128,1:RENUMBER
(128 ist das High-Byte (Schritt L), l und 256 sind unabhängig von der Zieladresse)
Dann kann das Programm gelistet, gespeichert, editiert oder gestartet werden. Mit GRAPHIC CLR wird jetzt allerdings nicht mehr der normale Basic-Start eingestellt, sondern einfach das Programm um 9 KByte nach unten verschoben, was nur bei einer Anfangsadresse von 16385 ($4001), also dem Zustand nach GRAPHIC1, das gewünschte Ergebnis ist.
Diskette zum Heft und damit auch die
genannten Listings, gibt's hier
|
|
|