Super Line — 80 Zeichen für den C 64
Ein kleiner Basic-Lader realisiert, wofür man sonst viel Geld ausgeben muß: 80 Zeichen pro Zeile
Es werden 4 neue Befehle definiert, die das Darstellen von 80 Zeichen möglich machen. Und das, ohne daß man lange programmieren muß.
Beginnen wir mit dem Einfachsten: dem Eingeben. Dies dürfte keine Schwierigkeiten bereiten. Bevor man das Quellenprogramm jedoch startet, sollte man es abspeichern, da es sich, vorausgesetzt, man hat keinen Fehler gemacht, selbst löscht. Anschließend kann man es mit RUN laufen lassen und wenn die Prüfsumme stimmt, erscheint nach einigen Sekunden einfach READY. Die neuen Befehle sind nun definiert und können angewendet werden.
Diese Befehle lauten:
O (für »ON«): | dieser Befehl bewirkt ein Einschalten des 80-Zeichen Modus. Dabei wird auf hochauflösende Grafik umgeschaltet. |
C (für »CLEAR«): | der 80-Zeichen Bildschirm wird gelöscht. |
W x,y,a$ (für »WRITE«): | der String A$ wird an Spalte x Zeile y geschrieben. x geht von 0 bis 79, y geht von 0 bis 24. |
F (für »OFF«): | Abschalten des 80-Zeichen Modus. |
So bewirkt zum Beispiel das kurze Programm:
10 O
20 C
30 W 0,0, "64’ER DAS MAGAZIN FÜR COMPUTER-FANS"
daß der in Anführungsstrichen stehende Satz in die linke obere Ecke geschrieben wird. Anschließend rührt sich nichts mehr und man kann durch die ’blinde’ Eingabe von ’F’ wieder zum normalen Bildschirm zurückkehren.
A$ läßt sich auch durch einzelne Stringvariable ersetzen, die mit + verknüpft werden, oder man kann auch eine normale numerische Variable verwenden. Allerdings dürfen keine Variable mit dem Namen O,C,W oder F verwendet werden. So ist zum Beispiel O$,CG,WR$ oder ähnliches verboten.
Nun einige detaillierte Angaben zum Programm selbst. Das Maschinenprogramm liegt im Bereich von $ 9000 bis $ 928F. Wer im Besitz eines Monitors ist, kann es direkt abspeichern und von der Diskette mit ,8,1 laden (danach »NEW« eingeben). Gestartet wird es dann mit SYS 36864. Wer das nicht will, der lädt einfach den Basic-Lader, der das Maschinenprogramm in den Speicher ’POKEt’. Zwischen $ 9000 und $ 902D wird zunächst der Basic-Vektor umgesetzt, und der Anfang des Basic-Speichers hochgelegt. Zwischen $ 902E und $ 9044 beginnt nun die Befehlsdekodierung. Bei Erkennen eines Befehls wird verzweigt, ansonsten in die normale Interpreterroutine gesprungen. Bei dem Befehl ’O’ wird zunächst in der Unterroutine von $ 9233 bis 928E der Zeichensatz aus dem verdeckten Bereich $ D000 in den offenen Bereich $ 0000 übertragen. Der Bereich von $ 0400 bis $ 0800 wird mit dem Code für die Hintergrundfarbe gefüllt. Außerdem wird bei $ 9057 das Register # 648 umgesetzt, damit es auf dem Bildschirm kein farbliches Durcheinander gibt. Weiterhin wird selbstverständlich der hochauflösende Grafik-Modus eingeschalten. Die Routine für den Befehl ’C’ liegt zwischen $ 9081 und $ 90A3. Der Bereich der Bit-Map wird einfach mit 00 gefüllt.
Der Befehl ’F’ wird zwischen $ 906C und $ 907E ausgeführt. Das Register 648 wird zurückgesetzt, der hochauflösende Grafik-Modus ausgeschaltet und der normale Bildschirm gelöscht.
Der Befehl, dessen Routine am längsten ist, ist der Befehl ’W’. Er wird zwischen $ 90A6 und $ 9230 bearbeitet. Zunächst werden die beiden Koordinaten x und y geholt und aus ihnen die Adresse der Bit Map berechnet, an der das erste Byte gesetzt wird. Dies geschieht zwischen $ 90A6 und 9135. Dann werden die einzelnen Zeichen des zu schreibenden Satzes geholt und ihr Code wird so umgerechnet, daß er mit der Stelle übereinstimmt, an der das jeweilige Zeichen in dem nach $ C000 verschobenen Zeichen ROM steht. Anschließend durchläuft jedes der 8 Bytes, aus denen ein Zeichen definiert ist, die gleiche Prozedur. Das Byte wird geholt, jedes zweite Bit ausgefiltert, und die verbliebenen 4 Bits zusammengeschoben. Das Zeichen ist jetzt nur noch durch 4 x 8 Punkte definiert. Jetzt müssen die entstandenen Nibbles noch in die Bytes der Bit Map gebracht werden. Dies geschieht mit einer EXOR-Verknüpfung. Dabei steuert ein Flag, das in $ 9300 steht, ob das Nibble in die linke oder die rechte Hälfte des Bytes geschrieben wird.
(Andreas Zell / rg) +