C 64
80 Zeichen

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
+
PDF Diesen Artikel als PDF herunterladen
Mastodon Diesen Artikel auf Mastodon teilen
← Vorheriger ArtikelNächster Artikel →