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)1 rem ********************************* 2 rem **** super line **** 3 rem **** andreas zell **** 4 rem **** segebergerstr. 27 **** 5 rem **** 8500 nuernberg 90 **** 6 rem **** tel 0911/31 47 90 **** 7 rem ********************************* 12 fort=36864to37518:read a:poket,a:b=b+a:next 13 ifb<>87028thenprint"fehler in den data zeilen":end 14 sys36864:end 100 data 169, 46, 141, 8, 3, 169, 144, 141, 9, 3 110 data 169, 1, 133, 43, 133, 45, 133, 47, 133, 49 120 data 169, 68, 133, 44, 133, 46, 133, 48, 133, 50 130 data 169, 0, 141, 0, 68, 141, 1, 68, 141, 2 140 data 68, 169, 143, 133, 56, 96, 32, 115, 0, 201 150 data 79, 240, 15, 201, 70, 240, 14, 201, 87, 240 160 data 13, 201, 67, 240, 12, 76, 231, 167, 76, 81 170 data 144, 76, 108, 144, 76, 166, 144, 76, 129, 144 180 data 234, 32, 51, 146, 234, 234, 234, 169, 64, 141 190 data 136, 2, 32, 68, 229, 169, 59, 141, 17, 208 200 data 169, 24, 141, 24, 208, 76, 228, 167, 169, 4 210 data 141, 136, 2, 169, 27, 141, 17, 208, 169, 21 220 data 141, 24, 208, 32, 68, 229, 76, 228, 167, 169 230 data 32, 133, 252, 169, 0, 133, 251, 162, 0, 169 240 data 0, 129, 251, 24, 165, 251, 105, 1, 133, 251 250 data 165, 252, 105, 0, 133, 252, 201, 64, 240, 3 260 data 76, 137, 144, 76, 228, 167, 32, 155, 183, 224 270 data 80, 144, 3, 76, 72, 178, 138, 74, 133, 251 280 data 138, 41, 1, 240, 11, 234, 234, 234, 234, 169 290 data 1, 141, 0, 147, 208, 5, 169, 0, 141, 0 300 data 147, 32, 253, 174, 24, 32, 158, 183, 134, 252 310 data 224, 25, 176, 3, 76, 220, 144, 76, 72, 178 320 data 169, 0, 133, 253, 133, 254, 165, 252, 133, 253 330 data 162, 0, 6, 253, 38, 254, 232, 224, 5, 208 340 data 247, 162, 0, 142, 1, 149, 165, 252, 141, 0 350 data 149, 14, 0, 149, 46, 1, 149, 232, 224, 3 360 data 208, 245, 24, 165, 253, 109, 0, 149, 133, 253 370 data 165, 254, 109, 1, 149, 133, 254, 24, 165, 253 380 data 101, 251, 133, 251, 165, 254, 105, 0, 133, 252 390 data 24, 162, 0, 6, 251, 38, 252, 232, 224, 3 400 data 208, 247, 24, 165, 252, 105, 32, 133, 252, 32 410 data 253, 174, 32, 158, 173, 36, 13, 48, 6, 32 420 data 221, 189, 32, 135, 180, 32, 166, 182, 134, 253 430 data 132, 254, 133, 255, 160, 0, 177, 253, 201, 191 440 data 144, 6, 56, 233, 128, 76, 109, 145, 201, 63 450 data 144, 6, 56, 233, 64, 76, 109, 145, 234, 234 460 data 234, 234, 234, 234, 234, 153, 0, 148, 200, 198 470 data 255, 240, 3, 76, 80, 145, 169, 0, 153, 0 480 data 148, 234, 234, 234, 234, 234, 160, 0, 185, 0 490 data 148, 208, 8, 234, 234, 234, 234, 234, 76, 174 500 data 167, 133, 253, 169, 0, 133, 254, 6, 253, 38 510 data 254, 6, 253, 38, 254, 6, 253, 38, 254, 24 520 data 165, 254, 105, 192, 133, 254, 162, 0, 142, 1 530 data 147, 161, 253, 41, 1, 133, 255, 161, 253, 41 540 data 4, 74, 69, 255, 133, 255, 161, 253, 41, 16 550 data 74, 74, 69, 255, 133, 255, 161, 253, 41, 64 560 data 74, 74, 74, 69, 255, 133, 255, 173, 0, 147 570 data 201, 1, 240, 8, 6, 255, 6, 255, 6, 255 580 data 6, 255, 165, 255, 65, 251, 129, 251, 238, 1 590 data 147, 24, 165, 251, 105, 1, 133, 251, 165, 252 600 data 105, 0, 133, 252, 24, 165, 253, 105, 1, 133 610 data 253, 165, 254, 105, 0, 133, 254, 173, 1, 147 620 data 201, 8, 240, 3, 76, 175, 145, 173, 0, 147 630 data 201, 1, 208, 7, 200, 142, 0, 147, 76, 132 640 data 145, 169, 1, 141, 0, 147, 56, 165, 251, 233 650 data 8, 133, 251, 165, 252, 233, 0, 133, 252, 200 660 data 76, 132, 145, 120, 169, 0, 133, 251, 133, 253 670 data 169, 208, 133, 252, 169, 192, 133, 254, 169, 51 680 data 133, 1, 162, 0, 161, 251, 129, 253, 24, 165 690 data 251, 105, 1, 133, 251, 165, 252, 105, 0, 133 700 data 252, 24, 165, 253, 105, 1, 133, 253, 165, 254 710 data 105, 0, 133, 254, 201, 200, 208, 222, 169, 55 720 data 133, 1, 88, 169, 0, 133, 251, 169, 4, 133 730 data 252, 162, 0, 169, 1, 129, 251, 24, 165, 251 740 data 105, 1, 133, 251, 165, 252, 105, 0, 133, 252 750 data 201, 8, 208, 235, 96