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
  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 FOR T=36864 TO37518:READ A:POKE T,A:B=B+A:NEXT 
 13 IF B<>87028 THENPRINT"FEHLER IN DEN DATA ZEILEN":END 
 14 SYS 36864: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 →