C 64
Tips und Tricks

Programm-Generator für den C 64

Diese Routine kann Basic-Zeilen innerhalb eines Basic-Programms erzeugen, löschen und in einen String einlesen, ohne Variablen zu zerstören.

Das Programm (Listing 1) ist vollständig in Maschinensprache geschrieben und belegt den Speicherbereich von $C800 bis $CA70. Nach dem Laden ist eine Initialisierung nicht notwendig. Um die Basic-Zeiger zurückzusetzen, ist nur ein NEW <RETURN> einzugeben.

Zum Erzeugen einer Basic-Zeile ist die Zeile selbst in einem String abzulegen. Anschließend kann dieser String mit SYS51200, String in das Basic-Programm eingebunden werden. Zum Beispiel: A$="100 S=SQR (2):PRINTS,S+100":SYS 51200,A$

Mit dem Befehl SYS 51442, Zeilennummer, läßt sich eine Basic-Zeile innerhalb eines Basic-Programms löschen.

Der Befehl SYS 51442,100 löscht zum Beispiel die Zeile 100. Beim Generieren oder Löschen ergeben sich folgende Einschränkungen:

  1. Der Aufruf (SYS 51200,A$ oder SYS 51442,100) darf nicht innerhalb einer FOR-NEXT-Schleife stehen.
  2. SYS 51200,A$ oder SYS51442,100 darf nicht in einem Unterprogramm stehen, falls sich die neue oder die zu löschende Zeile vor diesem Unterprogramm befindet.

Auch kann der Programm-Generator Zeilen in einen String einlesen. Dazu muß der String vorher jedoch mit beliebigen Zeichen gefüllt werden. Dabei gilt: Anzahl der Zeichen >= Anzahl der Zeichen in der zu erwartenden Zeile.

Es bietet sich natürlich an, den String mit Leerzeichen (CHR$(32)) zu belegen.

Anschließend kann die Zeile mit SYS 51642, String, Zeilennummer eingelesen werden.

Beispiel:

100 S=SQR(2):PRINTS,S + 100 110 A$=” 120 SYS51642,A$,100 130 PRINT A$

Nach dem Start dieses Beispiels mit RUN <RETURN> erscheint auf dem Bildschirm die Zeile 100: S=SQR(2): PRINT S, S+100 READY.

Für dieses Programm gibt es nun eine Anzahl von Anwendungsmöglichkeiten. Es läßt sich zum Beispiel ein nur acht Zeilen langes Basic-Programm schreiben, das ein Maschinenprogramm in DATA-Zeilen ablegt (Listing 2).

Dabei wird etwa die Geschwindigkeit erreicht, die die entsprechende Routine im SMON hat. Außerdem wäre ein »intelligentes« Programm vorstellbar, das sich selbst verändert. Typische Maschinenroutinen wie RENUMBER, FIND und AUTO sind natürlich auch denkbar. Sie sehen, die Möglichkeiten dieses Programm-Generators sind nahezu unbegrenzt.

(Michael Dietz/ah)
PROGRAMM : PROGRAMM GEN   C800 CA64
-----------------------------------
C800 : 20 FD AE 20 9E AD 20 A3   EE
C808 : B6 A0 00 85 57 B1 22 99   7E
C810 : 00 02 C8 C4 57 D0 F6 A9   07
C818 : 00 99 00 02 A5 7A 8D 70   6A
C820 : CA A5 7B 8D 71 CA A9 FF   61
C828 : 85 7A A9 01 85 7B 20 73   10
C830 : 00 20 6B A9 20 79 A5 84   BE
C838 : 0B 8C 72 CA 20 13 A6 18   E5
C840 : A5 31 85 57 6D 72 CA 85   6B
C848 : 59 A5 32 85 58 69 00 85   8D
C850 : 5A 38 A5 5F E9 01 8D 73   DF
C858 : CA A5 60 E9 00 8D 74 CA   1E
C860 : A0 00 B1 57 91 59 38 A5   68
C868 : 57 E9 01 85 57 A5 58 E9   7D
C870 : 00 85 58 38 A5 59 E9 01   1F
C878 : 85 59 A5 5A E9 00 85 5A   C8
C880 : AD 74 CA C5 58 D0 DB AD   A9
C888 : 73 CA C5 57 D0 D4 A2 00   FB
C890 : 18 B5 2D 6D 72 CA 95 2D   AA
C898 : E8 B5 2D 69 00 95 2D E8   07
C8A0 : E0 08 D0 EC A0 00 A5 5F   B5
C8A8 : 91 5F C8 A5 60 91 5F C8   71
C8B0 : A5 14 91 5F C8 A5 15 91   E1
C8B8 : 5F C8 B9 FC 01 91 5F C8   35
C8C0 : CC 72 CA D0 F5 A0 00 18   27
C8C8 : B1 5F 6D 72 CA 91 5F 8D   A4
C8D0 : 73 CA C8 B1 5F 69 00 91   75
C8D8 : 5F 8D 74 CA AD 73 CA 85   21
C8E0 : 5F AD 74 CA 85 60 B1 5F   6D
C8E8 : D0 DB A9 00 8D 73 CA 4C   48
C8F0 : 79 C9 20 FD AE 20 8A AD   87
C8F8 : 20 F7 B7 A5 7A 8D 70 CA   22
C900 : A5 7B 8D 71 CA 20 13 A6   3C
C908 : B0 01 60 A0 00 38 B1 5F   AC
C910 : 85 57 E5 5F 8D 72 CA C8   CF
C918 : B1 5F 85 58 88 A5 5F 85   23
C920 : 59 A5 60 85 5A B1 57 91   C8
C928 : 59 18 A5 57 69 01 85 57   45
C930 : A5 58 69 00 85 58 18 A5   22
C938 : 59 69 01 85 59 A5 5A 69   36
C940 : 00 85 5A A5 32 C5 58 D0   A2
C948 : DC A5 31 C5 57 D0 D6 A0   94
C950 : 00 38 B1 5F ED 72 CA 91   85
C958 : 5F 8D 73 CA C8 B1 5F E9   1F
C960 : 00 91 5F 8D 74 CA AD 73   EE
C968 : CA 85 5F AD 74 CA 85 60   F7
C970 : B1 5F D0 DB A9 FF 8D 73   38
C978 : CA A5 9D D0 32 38 A5 14   3A
C980 : E5 39 A5 15 E5 3A B0 27   4F
C988 : AD 73 CA D0 11 18 AD 70   25
C990 : CA 6D 72 CA 85 7A AD 71   CC
C998 : CA 69 00 85 7B 60 38 AD   BF
C9A0 : 70 CA ED 72 CA 85 7A AD   5D
C9A8 : 71 CA E9 00 85 7B 60 AD   0A
C9B0 : 70 CA 85 7A AD 71 CA 85   D3
C9B8 : 7B 60 20 FD AE 20 9E AD   ED
C9C0 : 20 A3 B6 A5 22 85 59 A5   13
C9C8 : 23 85 5A 20 FD AE 20 9E   5B
C9D0 : AD 20 F7 B7 20 13 A6 B0   19
C9D8 : 03 4C 61 CA A5 14 85 63   8B
C9E0 : A5 15 85 62 A2 90 38 20   8D
C9E8 : 49 BC 20 DF BD A0 FF C8   06
C9F0 : B9 00 01 91 59 D0 F8 A9   6F
C9F8 : 20 91 59 C8 84 57 A0 03   DC
CA00 : 84 58 E6 58 A4 58 B1 5F   08
CA08 : F0 57 C9 22 D0 19 A4 57   72
CA10 : 91 59 E6 57 E6 58 A4 58   67
CA18 : B1 5F C9 22 F0 0D A4 57   E8
CA20 : 91 59 E6 57 4C 14 CA C9   26
CA28 : 80 10 09 A4 57 91 59 E6   BC
CA30 : 57 4C 02 CA C9 FF F0 F3   CF
CA38 : 38 E9 7F AA A0 FF CA F0   B1
CA40 : 08 C8 B9 9E A0 10 FA 30   C5
CA48 : F5 C8 B9 9E A0 30 0D 84   AC
CA50 : 5B A4 57 91 59 E6 57 A4   79
CA58 : 5B 4C 49 CA 29 7F 4C 2B   9B
CA60 : CA 60 00 31               19
Listing 1 »Programm-Generator«. Bitte beachten Sie die Eingabehinweise auf Seite 54.
10 z=100:a=10:i=51200:e=51810
20 a$=str$(z)+"data ":z=z+a
30 s$=str$(peek(i)):a$=a$+right$(s$,len(s$)-1)+","
40 if len(a$)<35 then i=i+1:if i<e then 30
50 a$=left$(a$,len(a$)-1)
60 sys 51200,a$:print a$:i=i+1:if i<e then 20
70 i=10:goto 50000
50000 sys 51442,i:i=i+10:if i<71 then 50000
Listing 2. Mit nur acht Basic-Zeilen lassen sich Maschinenprogramme in DATA-Zeilen ablegen.
PDF Diesen Artikel als PDF herunterladen
Mastodon Diesen Artikel auf Mastodon teilen
← Vorheriger ArtikelNächster Artikel →