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:
- ANFANGSADRESSE GROESSER ALS ENDADRESSE.
FEHLER! Logischerweise muß die Anfangsadresse kleiner sein als die Endadresse. - 0 ALS SCHRITTWEITE NICHT MOEGLICH!
Würde 0 als Schrittweite akzeptiert werden, so hätten alle erzeugten DATA-Zeilen die gleiche Zeilennummer. - ZEILENNUMMEH GROESSER ALS 63999!
Bei der Erzeugung der DATA-Zeilen wurde eine Zeilennummer erzeugt, die größer als 63999 war. Da der C 64 nur Zeilennummern bis 63999 zuläßt, würden größere Zeilennummern Probleme der Art aufwerfen, daß sie sich nicht mehr löschen oder ändern ließen. Man sollte eine kleinere Anfangs-Zeilennummer oder Schrittweite wählen, um den Fehler zu beseitigen. - FREIER SPEICHERPLATZ REICHT NICHT!
Bei der DATA-Erzeugung wurde festgestellt, daß der freie RAM-Bereich nicht ausreicht.
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
- Das Programm, das die Sprites erzeugt, laden und starten. Wenn die Sprites erzeugt sind, das Programm abbrechen und die Adressen der Sprites aufschreiben.
- Das Programm mit NEW löschen.
- Das eigene Programm, das die Sprites verwenden soll, laden und die höchste Zeilennummer feststellen.
- Beispielsweise SYS 49152, Anfangsadresse der Sprites, Endadresse der Sprites, höchste Zeilennummer des eigenen Programms plus 10, sowie beliebige Schrittweite eingeben.
- Den letzten Punkt beliebig oft wiederholen, bis alle Sprites in DATA-Zeilen umgewandelt sind. Dabei darf nicht vergessen werden, stets erneut die höchste Zeilennummer festzustellen.
- Es ist sinnvoll, am Ende der DATA-Blöcke jeweils eine Zeile mit »RETURN« einzugeben. Danach können die Sprites irgendwo vom Hauptprogramm aus mit einem GOSUB-Befehl aufgerufen werden.
- Programm testen und speichern.
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.
- Das zu übertragende Programm laden.
- POKE 44,40 : POKE 40 * 256,0 : NEW
Damit ist das Programm vor dem Überschreiben geschützt. Wenn das Maschinenprogramm am Speicherende liegt, dann muß natürlich der Zeiger für das Basic-Ende herabgesetzt werden. - SYS 49152,2049,10049,100,2
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.
- Monitor laden.
- SYS 49152,36864,40959,100,2.
- Abspeichern
Das Programm kann nun normal geladen und gestartet werden. Danach kann der Monitor mit der entsprechenden SYS-Adresse aufgerufen werden.
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)