C 64
Tips und Tricks

Basic-Start-Generator

Maschinenroutinen laden wie Basic-Programme und mit RUN starten, bleibt nicht länger ein Wunschtraum. Dieses Programm macht es möglich.

Wie war noch die Startadresse für den Monitor? Sie haben bestimmt auch schon öfter die Einsprungadresse eines Maschinenprogramms vergessen, wenn Sie viel mit Assembler-Programmen arbeiten. Abhilfe schafft diese kleine Routine, die Sie mit dem MSE eingeben müssen.

Das Programm macht aus einem im Speicher befindlichen Maschinenprogramm ein Programm, das einen normalen Basic-Start besitzt. Es braucht lediglich noch auf den Datenträger gespeichert zu werden — fertig! Das speichern geschieht mit SAVE"name",8(1). Damit entfällt die leidige Frage nach dem SYS-Befehl, was bei einer großen Programmsammlung schon lästig sein kann. Das so präparierte Programm kann normal (mit »,8« oder »,1«) geladen und mit RUN gestartet werden.

Ausgenommen sind Programme, die im Bereich von $0800 bis $09af und unter dem Basic- und Kernal-ROM liegen, da hier entweder der Basic-Start-Generator oder von ihm verwendete Routinen liegen.

Tips zur Bedienung

  1. Laden des zu bearbeitenden Maschinenprogramms
  2. NEW eingeben
  3. Laden des Basic-Start-Generators mit LOAD"name",8
  4. Starten mit RUN
  5. Eingabe von SYS 2089,[anfang],[ende+1],[einsprung]
    • [anfang]: Beginn des Maschinenprogramms im Speicher
    • [ende]: Ende des Maschinenprogramms im Speicher
    • [einsprung]: Einsprungadresse, also der SYS-Wert, mit dem normalerweise das Programm gestartet wurde.

    Alle Parameter müssen in dezimaler Schreibweise eingegeben werden, wobei der korrekte Bereich (0 bis 65535) selbst überprüft werden muß. Es wird ein »ILLEGAL QUANTITY ERROR« ausgegeben, falls [anfang] > = [ende] ist.

  6. Speichern des erzeugten Programms mit SAVE "name",8

Funktion

Nach der Eingabe und Umrechnung der Parameter in das 16-Bit-Format wird das Quellprogramm direkt hinter den Start-Generator kopiert (ab $08af). Dem Quellprogramm ist nun sein späterer Programmkopf vorgelagert. Des weiteren wird nun ein Teil des Start-Generators nach $C000 kopiert, der die weitere Arbeit übernimmt.

Jetzt werden der Programmkopf und das dahinter liegende Quellprogramm nach $0800, also dem Basic-Start, kopiert. Anschließend werden die Basic-Pointer (Anfang/Ende des Basic-Programms) und im Programmkopf die Adressen gesetzt. Nach der Meldung »READY TO SAVE« kann das bearbeitete Programm abgespeichert werden.

Nun eine nähere Erläuterung zum Programmkopf: Im Basic-ROM gibt es eine Unterroutine, die Speicherinhalte verschieben kann und deren Einsprungpunkt bei $A3BF liegt.

Diese Verschieberoutine macht sich der Basic-Start-Generator im Programmkopf zunutze, so daß das Quellprogramm wieder in seinen Ursprungsbereich kopiert werden kann. Die Übergabe der Kopierparameter erfolgt in den Adressen:

Nach dem Start des mit einem Basic-Start versehenen Programms wird die Blockverschieberoutine aktiviert und das Programm in seinen Bereich kopiert und gestartet.

Soll das Programm nach RUN nur an seinen ursprünglichen Start verschoben werden, müssen Sie als Einsprungadresse eine Adresse wählen, bei der ein RTS (return to subroutine) steht. Beispielsweise 64922, eine Adresse im Betriebssystem des C 64. RTS entspricht einem RETURN in Basic. Es bewirkt, daß das Programm zwar verschoben, aber nicht gestartet wird. Haben Sie zum Beispiel den SMON mit dem Start-Generator behandelt, meldet sich der SMON nach RUN mit der Registeranzeige, wenn Sie als Einsprungadresse 49152 angegeben haben. Haben Sie 64922 angegeben, kommt die READY-Meldung. Mit SYS49152 können Sie dann den SMON starten.

(Hermann-Josef Rottkemper/hm)
0990 a9 2c
LDA #2C > Blockanfang ($082C)
0992 a0 08
LDY #08
0994 85 5f
STA5F > Übergabeadresse
0996 84 60
STY 60
0998 a9 ff
LDA #?? > Blockende+1
(wird qesetzt)
099A a0 ff
LDY #??
099C 85 5a
STA5A > Übergabeadresse
099E 84 5b
STY 5B
09A0 a9 ff
LDA #?? > neues Blockende+1 (wird gesetzt)
09A2 a0 ff
LDY #??
09A4 85 58
STA58 > Übergabeadresse
09A6 84 59
STY 59
09A8 20 bf a3 JSR A3BF > Sprung in Verschieberoutine
09AA 4C ff ff JMP FFFF > Einsprungadresse (wird gesetzt)
Assemblerlisting des Programmkopfes
PROGRAMM : STARTGENERATOR 0801 09B0
-----------------------------------
0801 : 0B 08 0A 00 9E 32 30 36   3C
0809 : 31 00 00 00 A9 37 85 01   A7
0811 : A9 09 8D 20 D0 8D 21 D0   46
0819 : A2 00 BD A2 08 20 D2 FF   4C
0821 : E8 E0 57 D0 F5 4C 74 A4   46
0829 : 20 90 08 86 FA 85 FB 20   70
0831 : 90 08 86 FC 85 FD 20 90   F0
0839 : 08 86 FE 85 FF A5 FB C5   9D
0841 : FD 90 0B D0 06 A5 FA C5   68
0849 : FC 90 03 4C 48 B2 A9 AF   F8
0851 : 85 39 A9 09 85 3A A5 FA   B5
0859 : 85 3B A5 FB 85 3C 20 F9   13
0861 : 08 A5 FC 85 2B A5 FD 85   0E
0869 : 2C A5 39 85 FA A5 3A 85   38
0871 : FB A9 00 85 39 A9 C0 85   E1
0879 : 3A A9 F9 85 3B A9 08 85   E3
0881 : 3C A9 83 85 FC A9 09 85   70
0889 : FD 20 F9 08 4C 1F C0 A9   2A
0891 : 00 85 0D 20 FD AE 20 9E   AE
0899 : AD 20 9B BC A5 64 A6 65   B8
08A1 : 60 0E 12 93 9E 20 20 20   AB
08A9 : C2 C1 D3 D4 C1 D2 D4 20   21
08B1 : 2D 20 20 28 43 29 20 31   5C
08B9 : 39 38 35 20 C8 2D CA 20   C1
08C1 : D2 4F 54 54 4B 45 4D 50   8F
08C9 : 45 52 20 20 20 92 11 11   40
08D1 : 20 D3 59 4E 54 41 58 3A   20
08D9 : 20 D3 D9 D3 32 30 38 39   CC
08E1 : 2C C1 4E 46 41 4E 47 2C   46
08E9 : C5 4E 44 45 2B 31 2C CA   12
08F1 : 4D 50 2D C9 4E 11 11 99   D0
08F9 : A2 00 A1 3B 81 39 E6 39   5B
0901 : D0 02 E6 3A E6 3B D0 02   63
0909 : E6 3C A5 3B C5 FC D0 E8   37
0911 : A5 3C C5 FD D0 E2 60 A9   FE
0919 : 83 85 3B A9 09 85 3C A5   5C
0921 : FA 85 FC A5 FB 85 FD A9   09
0929 : 00 85 39 A9 08 85 3A 20   45
0931 : 00 C0 A5 39 85 2D A5 3A   EF
0939 : 85 2E A5 2D 8D 16 08 A5   D9
0941 : 2E 8D 18 08 A5 2B 8D 1E   63
0949 : 08 A5 2C 8D 20 08 A5 FE   B7
0951 : 8D 29 08 A5 FF 8D 2A 08   4F
0959 : A2 00 BD 78 C0 20 D2 FF   D2
0961 : E8 E0 12 D0 F5 A9 01 85   14
0969 : 2B A9 08 85 2C 4C 74 A4   5C
0971 : 11 11 12 52 45 41 44 59   FC
0979 : 20 54 4F 20 53 41 56 45   BE
0981 : 92 11 00 0B 08 C1 07 9E   E5
0989 : 32 30 36 31 00 00 00 A9   DA
0991 : 2C A0 08 85 5F 84 60 A9   AF
0999 : FF A0 FF 85 5A 84 5B A9   23
09A1 : FF A0 FF 85 58 84 59 20   F0
09A9 : BF A3 4C FF FF 00 00      27
Listing zum Basic-Start-Generator.
PDF Diesen Artikel als PDF herunterladen
Mastodon Diesen Artikel auf Mastodon teilen
← Vorheriger ArtikelNächster Artikel →