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
 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 DATA 169,0,141,65,195,32,233,193,132,251,133,252,32,233,193,140,54,195,141,55 
 120 DATA 195,32,233,193,140,59,195,141,60,195,32,253,174,32,158,183,142,63,195,138 
 130 DATA 208,3,76,58,194,165,252,205,55,195,144,12,208,7,165,251,205,54,195,144 
 140 DATA 3,76,68,194,56,165,45,233,2,141,61,195,133,253,165,46,233,0,141,62,195 
 150 DATA 133,254,160,2,173,59,195,145,253,200,173,60,195,145,253,200,169,129,145 
 160 DATA 253,200,169,65,145,253,200,169,178,145,253,200,152,72,165,251,166,252,32 
 170 DATA 243,193,141,64,195,104,168,32,7,194,169,164,145,253,200,152,72,173,54,195 
 180 DATA 174,55,195,32,243,193,141,64,195,104,168,32,7,194,169,58,145,253,200,169 
 190 DATA 135,145,253,200,169,88,145,253,200,169,58,145,253,200,169,151,145,253,200 
 200 DATA 169,65,145,253,200,169,44,145,253,200,169,88,145,253,200,169,58,145,253 
 210 DATA 200,169,130,145,253,76,52,193,160,2,173,59,195,145,253,200,173,60,195,145 
 220 DATA 253,200,169,131,145,253,200,152,72,160,0,177,251,32,160,193,104,168,173 
 230 DATA 56,195,201,48,240,3,145,253,200,173,57,195,201,48,208,10,173,56,195,201 
 240 DATA 48,240,6,173,57,195,145,253,200,173,58,195,145,253,165,251,205,54,195,208 
 250 DATA 13,165,252,205,55,195,208,6,238,65,195,76,52,193,230,251,208,2,230,252 
 260 DATA 192,74,176,8,200,169,44,145,253,76,223,192,200,169,0,145,253,200,140,64 
 270 DATA 195,160,0,24,165,253,109,64,195,145,253,141,64,195,165,254,105,0,200,145 
 280 DATA 253,133,254,197,56,208,3,76,45,194,173,64,195,133,253,173,65,195,208,28 
 290 DATA 24,173,59,195,109,63,195,141,59,195,144,13,238,60,195,173,60,195,201,250 
 300 DATA 208,3,76,32,194,76,205,192,24,165,253,105,2,133,45,165,254,133,46,144,2 
 310 DATA 230,46,160,0,152,145,253,200,145,253,32,78,194,32,96,166,76,134,227,162 
 320 DATA 0,142,56,195,142,57,195,142,58,195,201,100,144,8,233,100,238,56,195,76 
 330 DATA 171,193,201,10,144,8,233,10,238,57,195,76,183,193,201,0,240,8,238,58,195 
 340 DATA 233,1,76,195,193,24,169,48,109,56,195,141,56,195,169,48,109,57,195,141 
 350 DATA 57,195,169,48,109,58,195,141,58,195,96,32,253,174,32,138,173,32,247,183 
 360 DATA 96,133,99,134,98,162,144,56,32,73,188,32,223,189,32,135,180,32,166,182 
 370 DATA 96,162,0,165,34,141,20,194,165,35,141,21,194,189,0,1,145,253,200,232,206 
 380 DATA 64,195,208,244,96,32,86,194,169,120,160,194,32,30,171,76,154,193,32,86 
 390 DATA 194,169,155,160,194,32,30,171,76,154,193,169,192,160,194,32,30,171,76,154 
 400 DATA 193,169,229,160,194,32,30,171,76,154,193,169,11,160,195,32,30,171,96,173 
 410 DATA 61,195,133,253,173,62,195,133,254,160,0,152,145,253,200,145,253,24,173 
 420 DATA 61,195,105,2,133,45,173,62,195,105,0,133,46,96,18,90,69,73,76,69,78,78 
 430 DATA 85,77,77,69,82,32,71,82,79,69,83,83,69,82,32,65,76,83,32,54,51,57,57,57 
 440 DATA 33,146,0,18,70,82,69,73,69,82,32,83,80,69,73,67,72,69,82,80,76,65,84,90 
 450 DATA 32,82,69,73,67,72,84,32,78,73,67,72,84,33,146,0,18,48,32,65,76,83,32,83 
 460 DATA 67,72,82,73,84,84,87,69,73,84,69,32,78,73,67,72,84,32,77,79,69,71,76,73 
 470 DATA 67,72,33,146,0,18,65,78,70,65,78,71,83,65,68,82,69,83,83,69,32,62,32,69 
 480 DATA 78,68,65,68,82,69,83,83,69,46,70,69,72,76,69,82,33,146,0,18,42,32,68,65 
 490 DATA 84,65,32,69,82,90,69,85,71,69,82,32,70,69,82,84,73,71,33,32,40,67,41,32 
 500 DATA 74,46,77,65,84,69,82,78,65,46,32,42,146,0,66,195,49,52,50,244,1,1,8,10 
 510 DATA 48,0,0 
PDF Diesen Artikel als PDF herunterladen
Mastodon Diesen Artikel auf Mastodon teilen
← Vorheriger ArtikelNächster Artikel →