C 64
DATA-Erzeuger

DATA-Erzeuger

Dieses Programm dient, wie der Name schon sagt, zum automatischen Erzeugen von DATA-Zeilen. Da das Programm in Maschinensprache geschrieben ist, ist die Ausführungszeit entsprechend kurz. Der Inhalt von 10000 Speicherzellen wird in weniger als 4 Sekunden in DATA-Zeilen umgewandelt!

Es kommt immer wieder vor, daß der Inhalt von Speicherzellen in DATA-Zeilen umgewandelt werden muß. Verschiedene Lösungen habe ich aus irgendwelchen Büchern oder Zeitschriften abgetippt. Da ich keine dieser Programme als befriedigend empfand, begann ich, einen DATA-Erzeuger in Basic zu programmieren. Auch dieses Programm war zu unflexibel und vor allem zu langsam. Da ich zwischenzeitlich verstärkt in Maschinensprache programmiere, bestand ein noch größerer Bedarf an einem leistungsfähigen DATA-Erzeuger. Also beschloß ich, einen solchen in Maschinensprache zu erstellen.

Leicht zu bedienen

Durch eine umfangreiche Fehlerprüfung ist das Programm sehr anwendungssicher. Die DATA-Zeilen können, falls gewünscht, an ein Basic-Programm angehängt werden, und das beliebig oft.

Eingabe-Format:
SYS49152,ANFADR,ENDADR,ANFZNR,SCHRITTWEITE
ANFADR: Adresse der ersten Speicherzelle, aus deren Inhalt DATA-Zeilen erzeugt werden sollen.
ENDADR: Adresse der letzten Speicherzelle für die DATA-Zeilen-Erzeugung.
ANFZNR: Zeilennummer der ersten DATA-Zeile (muß größer sein als die letzte Zeilennummer im Basic-Programm, falls eines im Speicher ist).
SCHRITTWEITE: Um diese Zahl wird die Zeilennummer bei der DATA-Erzeugung jeweils erhöht.

Fehlermeldungen

Für ANFADR, ENDADR, ANFZNR dürfen nur ganze, positive Zahlen von 0-65536 eingegeben werden. Die SCHRITTWEITE darf zwischen 1 und 255 liegen. Werden Zahlen eingegeben, die außerhalb des oben genannten Bereichs liegen, so kommt es zur Fehlermeldung »? ILLEGAL QUANTITY ERROR«. Weitere Fehlermeldungen sind:

Beim Auftreten eines Fehlers wird die DATA-Erzeugung, falls schon begonnen, sofort abgebrochen. Die bis dahin erzeugten DATA-Zeilen werden wieder gelöscht. Die Programmzeiger werden wieder so eingestellt, wie es vor dem Aufruf des DATA-Erzeugers der Fall war.

War die DATA-Zeilen-Erzeugung erfolgreich, so erscheint die Meldung »DATA ERZEUGER FERTIG! © J. MATERNA«. Jetzt befinden sich die DATA-Zeilen und die Schleife zum Lesen und ZurückPOKE der DATAs im Speicher. Das Basic-Programm kann wie gewohnt gelistet, gestartet oder gespeichert werden.

Wenn man möchte, kann man noch beliebige weitere DATA-Zeilen erzeugen. Sie werden automatisch an die bereits vorhandenen angehängt. Wichtig: Die neue Anfangszeilennummer muß größer sein als die letzte im Programm verwendete. Am besten LISTet man das Programm erst auf, um die höchste Zeilennummer festzustellen. Möchte man die DATA-Blöcke als Unterprogramme aufrufen, muß natürlich noch am Ende des DATA-Blocks eine Zeilennummer mit »RETURN« eingegeben werden.

Tips und Beispiele

Bei allen Bereichen wird vorausgesetzt, daß sich der DATA-Erzeuger lauffähig im Speicher befindet, ebenso die Daten, aus denen DATA-Zeilen erzeugt werden sollen.

Sprite-Blöcke übernehmen

Nach dem oben beschriebenen Verfahren kann man natürlich nicht nur Sprites übernehmen, sondern auch Maschinenprogramme und neue Zeichensätze. Insbesondere kann man auch sehr gut Maschinenprogramme, die von einem Assembler erzeugt wurden, an ein Basic-Programm anhängen.

Maschinenprogramm für Datenfernübertragung vorbereiten

Da die Daten im ASCII-Format übertragen werden, müssen sie vorher umgewandelt werden.

Beispiel: Das zu übertragende Programm ist 8000 Bytes lang und wird normal ab Basic-Anfang geladen.

Nun muß das Programm nur noch als Datei gespeichert werden und kann dann von einem Terminal-Programm gesendet werden.

Ein Monitor-Programm ($9000 — $9FFF) in DATA-Zeilen verwandeln.

Bildschirminhalt in DATA-Zeilen verwandeln

SYS 49152,1024,2023,100,2
Das Programm kann sofort gestartet werden.

Programmierte DATA-Erzeugung

Der DATA-Erzeuger läßt sich auch von Basic-Programmen aus aufrufen. Dabei dürfen die Parameter natürlich in Variablen übergeben werden. Doch Achtung: Wenn der DATA-Erzeuger fertig ist, wird ein CLR ausgeführt und zum Basic-Warmstart gesprungen. Dabei wird das Basic-Programm verlassen.

Um wieder ins Basic-Programm zurückzukommen, empfehle ich folgenden Trick, den ich am besten durch ein Beispiel demonstriere:

10 A=900:Z=100
20 A=A+100:Z=Z+20:IF Z=200 THEN END
30 PRINT CHR$(147);:PRINT CHR$(17):PRINT CHR$(17)
40 PRINT"A=";A;":Z=";Z;":GOTO 20";CHR$(19)
50 POKE 631,13:POKE 198,1
60 SYS 49152,A,A+100,Z,2:END

Dieses Programm hält in Zeile 60 an und startet sich so lange wieder automatisch, bis in Zeile 20 Z=200 ist. Dabei werden die Variablen, die in Zeile 40 auf dem Bildschirm ausgegeben werden, mit übernommen. Für den Auto-Start des Programms ist die Zeile 50 verantwortlich. Dort wird ein RETURN (POKE 631,13) in den Tastaturpuffer gePOKEt und die Länge des Tastaturpuffers (POKE 198,1) auf 1 gesetzt.

Anhand dieses Beispiels sollte jeder in der Lage sein, dieses Problem zu lösen.

Ich hoffe, daß ich durch meine Beispiele genug Anregungen für den Einsatz des DATA-Erzeugers gegeben habe.

Die Programmeingabe

Nachdem das Programm in den C64 eingegeben ist, kann es bedenkenlos gestartet werden.

Falls dann die Meldung «DATA-FEHLER« erscheint, müssen die DATA-Zeilen noch einmal überprüft werden. Wenn die Meldung «PROGRAMM OK« erscheint, speichert man das Programm am besten ab, bevor man den DATA-Erzeuger aufruft. Vor dem Programmstart mit »SYS« löscht man am besten den Speicher mit »NEW« oder lädt das Programm, für das DATAs erzeugt werden sollen.

Möchte man den DATA-Erzeuger als Maschinenprogramm direkt speichern, so sind folgende Befehle einzugeben:
POKE 43,0:POKE 44,192:POKE 45,66:POKE 46,195:SAVE "MP-DATA-ERZEUGER",8,1

Für die Datasette muß statt der 8 natürlich eine 1 eingegeben werden.
Das so gespeicherte Programm lädt man mit »LOAD "MP-DATA-ERZEUGER",8,1«.

Nachdem man NEW eingegeben hat, ist das Programm sofort einsatzbereit.

(Jörg Materna / ev)
10 rem ********************************
15 rem *                              *
20 rem *          data-maker          *
30 rem *                              *
40 rem *        joerg materna         *
50 rem *        beckumer str.91       *
60 rem *        4730 ahlen            *
65 rem *                              *
70 rem ********************************
75 rem
80 print chr$(147)
100 for a=49152 to 49986:read x:poke a,x:su=su+x:next
105 if su<>102090 then print "data-fehler"
106 print "programm ok"
110 data169,0,141,65,195,32,233,193,132,251,133,252,32,233,193,140,54,195,141,55
120 data195,32,233,193,140,59,195,141,60,195,32,253,174,32,158,183,142,63,195,138
130 data208,3,76,58,194,165,252,205,55,195,144,12,208,7,165,251,205,54,195,144
140 data3,76,68,194,56,165,45,233,2,141,61,195,133,253,165,46,233,0,141,62,195
150 data133,254,160,2,173,59,195,145,253,200,173,60,195,145,253,200,169,129,145
160 data253,200,169,65,145,253,200,169,178,145,253,200,152,72,165,251,166,252,32
170 data243,193,141,64,195,104,168,32,7,194,169,164,145,253,200,152,72,173,54,195
180 data174,55,195,32,243,193,141,64,195,104,168,32,7,194,169,58,145,253,200,169
190 data135,145,253,200,169,88,145,253,200,169,58,145,253,200,169,151,145,253,200
200 data169,65,145,253,200,169,44,145,253,200,169,88,145,253,200,169,58,145,253
210 data200,169,130,145,253,76,52,193,160,2,173,59,195,145,253,200,173,60,195,145
220 data253,200,169,131,145,253,200,152,72,160,0,177,251,32,160,193,104,168,173
230 data56,195,201,48,240,3,145,253,200,173,57,195,201,48,208,10,173,56,195,201
240 data48,240,6,173,57,195,145,253,200,173,58,195,145,253,165,251,205,54,195,208
250 data13,165,252,205,55,195,208,6,238,65,195,76,52,193,230,251,208,2,230,252
260 data192,74,176,8,200,169,44,145,253,76,223,192,200,169,0,145,253,200,140,64
270 data195,160,0,24,165,253,109,64,195,145,253,141,64,195,165,254,105,0,200,145
280 data253,133,254,197,56,208,3,76,45,194,173,64,195,133,253,173,65,195,208,28
290 data24,173,59,195,109,63,195,141,59,195,144,13,238,60,195,173,60,195,201,250
300 data208,3,76,32,194,76,205,192,24,165,253,105,2,133,45,165,254,133,46,144,2
310 data230,46,160,0,152,145,253,200,145,253,32,78,194,32,96,166,76,134,227,162
320 data0,142,56,195,142,57,195,142,58,195,201,100,144,8,233,100,238,56,195,76
330 data171,193,201,10,144,8,233,10,238,57,195,76,183,193,201,0,240,8,238,58,195
340 data233,1,76,195,193,24,169,48,109,56,195,141,56,195,169,48,109,57,195,141
350 data57,195,169,48,109,58,195,141,58,195,96,32,253,174,32,138,173,32,247,183
360 data96,133,99,134,98,162,144,56,32,73,188,32,223,189,32,135,180,32,166,182
370 data96,162,0,165,34,141,20,194,165,35,141,21,194,189,0,1,145,253,200,232,206
380 data64,195,208,244,96,32,86,194,169,120,160,194,32,30,171,76,154,193,32,86
390 data194,169,155,160,194,32,30,171,76,154,193,169,192,160,194,32,30,171,76,154
400 data193,169,229,160,194,32,30,171,76,154,193,169,11,160,195,32,30,171,96,173
410 data61,195,133,253,173,62,195,133,254,160,0,152,145,253,200,145,253,24,173
420 data61,195,105,2,133,45,173,62,195,105,0,133,46,96,18,90,69,73,76,69,78,78
430 data85,77,77,69,82,32,71,82,79,69,83,83,69,82,32,65,76,83,32,54,51,57,57,57
440 data33,146,0,18,70,82,69,73,69,82,32,83,80,69,73,67,72,69,82,80,76,65,84,90
450 data32,82,69,73,67,72,84,32,78,73,67,72,84,33,146,0,18,48,32,65,76,83,32,83
460 data67,72,82,73,84,84,87,69,73,84,69,32,78,73,67,72,84,32,77,79,69,71,76,73
470 data67,72,33,146,0,18,65,78,70,65,78,71,83,65,68,82,69,83,83,69,32,62,32,69
480 data78,68,65,68,82,69,83,83,69,46,70,69,72,76,69,82,33,146,0,18,42,32,68,65
490 data84,65,32,69,82,90,69,85,71,69,82,32,70,69,82,84,73,71,33,32,40,67,41,32
500 data74,46,77,65,84,69,82,78,65,46,32,42,146,0,66,195,49,52,50,244,1,1,8,10
510 data48,0,0
PDF Diesen Artikel als PDF herunterladen
Mastodon Diesen Artikel auf Mastodon teilen
← Vorheriger ArtikelNächster Artikel →