★ APPLICATIONS ★ DIVERS ★ Der Datagenerator für den CPC 464 ★ |
Datagenerator (Computer Schau) | Applications Divers |
Um Maschinenprogramme für den Schneider CPC 464 abdrucken bzw. als Listing weitergeben zu können, müssen diese in eine (für Nichtassemblerbesitzer) eingebbare Form gebracht werden. Eine Methode hierzu ist beispielsweise die Maschinencoderoutinen in sogenannte Datastatements eines Basic-Programmes abzulegen, um sie dann in die entsprechenden Speicherzellen zu poken. Auch andere Methoden, wie z. B. die Erzeugung von REM-Routinen sind denkbar. Durchgesetzt aber haben sich vor allem Listings mit den nicht immer beliebten Datazeilen. Um den Schreibaufwand für ein derartiges Vorhaben aber möglichst gering zu halten, bedient man sich im Regelfälle irgendwelcher Hilfsprogramme, die diesen Vorgang automatisch durchführen. Viele dieser Hilfsprogramme, die allgemein Datageneratoren genannt werden und für andere Computer bereits in ausreichender Menge veröffentlicht wurden, bedienen sich des Tastaturpuffers. So auch dieses Programm. In unseren letzten Ausgaben haben wir uns bereits näher mit dem Schneider CPC 464 beschäftigt. Wer unsere Artikel über diesen Computer verfolgt hat, weiß, daß wir bereits gezeigt haben, wie der Tastaturpuffer manipuliert werden kann (5/65). Diese Beeinflussung diente in unserer letzten Ausgabe der Computerschau dazu, den Computer zu veranlassen, daß er nach dem eigentlichen Programmlauf noch vom manipulierten Tastaturpuffer den Befehl „run 500“ bekam. Dieser Artikel, sowie auch das Listing des Programms „Keycode“ sollte dazu dienen, Sie in die Lage zu versetzen, mit dieser Technik zu arbeiten. Gleichzeitig hatten wir Ihnen mitgeteilt, daß wir in dieser Ausgabe auch den Datagenerator bringen werden. Die Erklärungen über die Manipulation selbst, sollten Sie in unserer letzten Ausgabe nachlesen. Das Verständnis über diese Technik können Sie sich vor allem durch Experimentieren erarbeiten, wenn Sie sie für eigene Anwendungen einsetzen wollen. Für den Einsatz des Datagenerators selbst, ist das Verständnis nicht erforderlich. Die Tastaturpuffer-Manipulation selbst bereitete uns keinerlei Probleme mehr, nachdem wir das Prinzip erkannt hatten. Aber wie sollten wir von Basic aus die erzeugten Zeilen übernehmen? Der CPC 464 hat ja keinen Fullscreen-Editor. Die Methode den Bildschirm zu löschen, den Cursor auf die Zeile zu stellen, um diese dann mittels simulierten „Returns“ bzw. „Enter“ zu übernehmen, kam deshalb nicht in Frage. Aber wir fanden einen praktikablen Ausweg aus diesem kleinen Dilemma. Der CPC 464 bietet die Möglichkeit Funktionstasten frei zu definieren. Was lag also näher, als diese Möglichkeit einmal hierzu zu mißbrauchen? Wir möchten ausdrücklich darauf hinweisen, daß uns zu diesem Zeitpunkt noch kein Firmwarehandbuch oder ähnliche Literatur zur Verfügung stand. Dies erwähnen wir deshalb, weil es aufzeigt, daß man, wenn man sich mit einem Computer eingehend beschäftigt, viele Dinge auch selbst erarbeiten kann. Voraussetzung für derartige Problemlösungen sind auch kleine Hilfsprogramme, die man sich eben ausdenken und programmieren muß, wie beispielsweise den ASCII-Hexpeeker , das Programm Keycode usw. Nachdem wir einmal die Idee hatten, mußte diese nur noch in die Tat umgesetzt werden. Das Programm kann bestimmt noch weiter verbessert werden, aber die wichtigsten „Grundfunktionen“ sind alle vorhanden. Im Heft 4/85 hatten wir beim Bild 8 bereits angedeutet, daß ab &B446 anscheinend Interessantes für den CPC 464 steht. Ab dieser Adresse beginnt nämlich der Speicherbereich, in dem die definierten Funktionstastencodes abgelegt sind, und genau in diesem Bereich legen wir unsere generierten Zeilen ab. Allerdings nicht durch „Poken“, sondern ganz normal über die Basicfunktion „KEY“. Der Datagenerator Doch nun gleich zur Programmbeschreibung selbst, wobei wir uns allerdings auf das Wesentliche beschränken. Die Zeile 100 bewirkt, daß in den Mode 2 (80 Zeichen pro Zeile) geschaltet wird. Weiterhin erfolgt die Zuweisung des Basiswertes für die neu zu erzeugenden Zeilennummern. Dieser Wert wird der Stringvariablen n$ zugewiesen. Der Callbefehl in Zeile 100 bewirkt, daß die Tastatur initialisiert wird, das heißt, daß bereits festgelegte Keydefinitionen zurückgesetzt bzw. gelöscht werden. Diesen Befehl konnten wir dem zwischenzeitlich vorliegenden Firmwarehandbuch entnehmen. Durch Zeile 120 wird der Beginn und das Ende des zu übernehmenden Bereiches über den Inputbefehl festgelegt. Außerdem erfolgt noch die Umwandlung in später benötigte Stringvariablen. In Zeile 130 wird g$ „zusammengebastelt“, diese Stringvariable erzeugt die Zeile 410. Durch Zeile 140 wird nach Zeile 260 gesprungen. Die Zeilen nach diesem Sprungziel bewirken die Ausgabe und Übernahme der neuen Zeile 410. In Zeile 150 (diese wird nach dem Programmende durch die Manipulation angesprungen) werden verschiedenen Variablen Werte zugewiesen, wie z. B. cr$ = carriage return, oder az$ = Anführungszeichen. Ähnliches gilt für die Zeile Die Zeilen 190 bis 240 dienen zur Erzeugung der jeweiligen neuen Zeilennummer. Die Zeile 270 weist der Funktionstaste Null den Gesamtstring (g$) zu. Dieser enthält die Zeilennummer, das Basicbefehlswort Data, die Datas selbst und die Zeilenprüfsumme. In den Zeilen 280 und 290 erfolgt die Abfrage, ob das Programmlaufende erreicht ist und es erfolgen je nachdem die entsprechenden Zuweisungen. Die Zeilen 310 bis 340 bewirken die Tastaturmanipulation. Die Zeile 370 stellt die Aussprungzeile dar, wobei durch den Befehl „delete -400“ die Zeilen 100 bis einschließlich 400 gelöscht werden. Außerdem wird durch diese Zeile die Tastatur neu initialisiert. Nach dem kompletten Programmlauf verbleiben somit alle Zeilen ab 410, und damit der „Pokegenerator“, mit dem das Datalisting wieder zurückgepokt werden kann. Damit Sie das abgetippte Programm auch überprüfen können, haben wir uns entschlossen, auch noch ein kleines Hilfsprogramm abzudrucken, welches die Aufgabe hat, den Speicherbereich (HIMEM) zu begrenzen, und die Zeichenfolge nr,0-255 zu erzeugen. Dadurch können Sie dann beim Programmlauf des Datagenerators überprüfen, ob dieser korrekt arbeitet. Hilfsprogramm Durch die Basiczeile 150 wird der RAM-Bereich mit seiner obersten Speicherstelle auf &6FFF begrenzt und die Adresse sowie der Byte-und Blockzähler vordefiniert. Das Programm schreibt im Speicherbereich von &7000 bis &76ff jeweils die nachfolgend angeführte Zahlenreihe: Block-Nummer, 1...255. Durch die Zeilen 280 und 290 wird die momentane Adresse und der Inhalt des Bytezählers (in hexadezimaler Form) auf dem Bildschirm ausgegeben. Nach dem Programmlauf dieses Hilfsprogrammes kann nun der Datagenerator wieder geladen werden. Um dessen Fehlerfreiheit zu überprüfen, sollte auf die Frage nach dem Anfang folgende Eingabe gemacht werden: &7000. Auf die Frage nach dem Ende sollte die Eingabe &76FF erfolgen. Danach erfolgt der Programmlauf, und es verbleibt anschließend nur noch der Poketeil ab der Zeilennummer 410. Das „Arbeiten“ des Programmes selbst, können Sie am Bildschirm verfolgen. Die Überprüfung kann nun folgendermaßen geschehen: In Zeile 1001 muß als erstes Statement „00“ stehen. Danach in hexadezimaler Darstellung die Zahlenfolge von 01 bis FF, wobei am Ende jeder Basiczeile die Prüfsumme (Summe der jeweiligen Datas) steht. In Zeile 1033 ist als erster Wert 01 (Blocknummer) und dann wieder die Hexfolge 01 bis FF zu finden usw. Lothar Miedel , ComputerSchau Listing „Digitaluhr für den CPC 464“ auf der folgenden Seite.
|