Der Trick mit dem Autostart

Oft ist es beim Laden von Maschinenprogrammen lästig, sich die verschiedenen SYS-Adressen zum Start zu merken oder sie in dem Berg von Notizen ausfindig zu machen. Da empfiehlt sich ein Starter, der mit »LOAD"name",8,1« geladen wird, sich selbst startet, das Maschinenprogramm auf die richtige Adresse lädt und ebenfalls startet.

Dazu muß man wissen, daß das Betriebssystem nach Ausführung der Loadroutine ($FFD5) indirekt in den Basic-Warmstart springt ($0302/$0303). Also wird dieser Vektor auf die Startadresse des Ladeprogramms gesetzt. Um auf der Diskette nur einen Block für den Lader zu belegen, wählt man für ihn den Bereich, der für Sprite 11 reserviert ist ($02C0-$02FE).

Dieses einfache Maschinenprogramm erfüllt die geforderten Bedingungen als Lader für das Programm »HESMON« mit Start $Cff8. Der Anwender muß für ein anderes Hauptprogramm nur die Länge des Namens ändern ($02Cl); den Zeiger auf den Filenamen ($02Cf/ $02D2), den Namen und die Adresse des Hauptprogramms ($02D7/$02DC & $02E7/$02E8). Dann wird der Bereich von $02C0 bis $0303 vom Monitor aus abgespeichert: »S”LOADER”08 02C0 0303«.

Zum Test des Programms vollziehe man nun einen Kaltstart, und nach »LOAD”LOADER”,8,1« erscheint SEARCHING FOR LOADER, LOADING, SEARCHING FOR HESMON, LOADING, dann erfolgt der Start des Programms »HESMON«.

Der Teil des oben genannten Laders, der als Vorbereitung der Loadroutine die Zeropage beschreibt, kann auch durch die Routinen $FFBA und $FFBD ersetzt werden.

Der Basic-Lader POKEd das Maschinenprogramm direkt in die zugehörigen Speicherzellen. Achtung: Nach Ablauf des Basic-Laders startet das Maschinencode-Programm direkt. Das Programm wandelt die Hex-DATAs in Dezimalzahlen um und POKEd diese. Das Programm, das geladen werden soll, bestimmt man durch Umändern der jeweiligen Speicherzellen, wie oben beschrieben.

(Martin Heinz und Andreas von Lepel)
Der Monitorauszug und der disassemblierte Lader für den Autostart von Hesmon
10 rem *** martin heinz und andreas von lepel ***
100 ad=704
110 read qp$
120 gosub 500
130 poke ad,qp
140 ad=ad+1
150 if ad<>(704+72) then goto 110
160 end
500 ql$=left$(qp$,1):qr$=right$(qp$,1)
510 ql=val(ql$):if ql=0 and ql$<>"0" then ql=asc(ql$)-55
520 qr=val(qr$):if qr=0 and qr$<>"0" then qr=asc(qr$)-55
530 qp=ql*16+qr:return
1000 data a9,06,85,b7,a9,01,85,b8
1010 data 85,b9,a9,08,85,ba,a9,f8
1020 data 85,bb,a9,02,85,bc,a9,d8
1030 data 8d,02,03,a9,cf,8d,03,03
1040 data a9,00,a8,20,d5,ff,4c,d8
1050 data cf,00,00,00,00,00,00,00
1060 data 00,00,00,00,00,00,00,00
1070 data 48,45,53,4d,4f,4e,00,00
1080 data 8b,e3,c0,02,7c,a5,1a,a7
Der Basic-Lader
PDF Diesen Artikel als PDF herunterladen
Mastodon Diesen Artikel auf Mastodon teilen
← Vorheriger ArtikelNächster Artikel →