C 64
Grafik

Hardcopy MPS 801/VC 1515

Mit dem Programm kann in knapp drei Minuten der Grafikbildschirm des C 64 ausgedruckt werden. Dabei wird Bit für Bit der Inhalt des Grafikspeichers auf die Druckernadel übertragen. Es arbeitet mit dem MPS801 und läuft auch mit dem VC 1515. Allerdings muß dann der Bildschirm während des Druckens abgeschaltet werden.

Der Basic-Lader kann auch in eigenen Grafik-Programmen verwendet werden. Sie können den Bereich 8192 bis 49151 als Grafikspeicher benutzen.

Um passende Bits für jede Druckernadel im Grafikspeicher zu finden, habe ich den Ausdruck BYTEADRESSE = 8192 + 8 * X + Y + INT(Y/8) * 312 verwendet. Er läßt sich aus den Angaben im »Commodore 64-Programmers Reference Guide« (Seiten 124 bis 12 6) ableiten. X und Y sind dabei die Koordinaten eines Grafikpunktes (gezählt von der oberen, linken Ecke des Bildschirms). Die Gleichung gibt zu jedem Bildpunkt die Adresse des Bytes, in dem das entsprechende Bit gesetzt (Bildpunkt an) oder gelöscht (Bildpunkt aus) ist.

Diese Adressen müssen für den MPS 801-Drucker in Siebener-Blöcke sortiert werden, da der Druckkopf nur über sieben Nadeln verfügt. Jeder Siebener-Block steuert dann achtmal (einmal für jedes Bit) die sieben Druckernadeln.

Insgesamt ist der Grafikbildschirm 320 Punkte entsprechend – 320 : 8 = 40 Bytes – breit. Eine Druckzeile enthält also 40 * 7 = 280 Bytes. Das Programm sortiert jeweils 280 Bytes (1 Druckzeile) in Siebener-Blöcke und speichert sie im Bereich 49920 bis 50199. Von dort werden die Bitmuster auf den Druckkopf übertragen.

Das Sortieren erfolgt mit der Formel POKE(49920+7 *X+Y-INT(Y/7) * 7),PEEK(BYTEADRESSE).

Mit Hilfe der Additions-, Multiplikations- und Divisionsroutinen aus R. Zaks »Programmierung des 6502« und LA. Leventhal :»6502 Programmieren in Assembler« habe ich diesen Ausdruck in Maschinensprache übersetzt.

Benutzung des Programms

CHR$(8) schaltet den Grafik-Modus des Druckers ein.
Die drei folgenden CHR$(13) bewirken einen Papiervorschub. Er sorgt für ein sauberes Drucken der ersten Grafik-Zeilen (Zeile 450). Aufgerufen wird die Druckroutine mit SYS 49525,LF (Zeile 460). Dabei ist LF die logische Filenummer des geöffneten Drucker-Files (Zeile 450). Mit CHR$(15) wird der Drucker wieder auf den Normal-Modus eingestellt (Zeile 470).

In den Zeilen 410 bis 430 wird die Anfangsadresse des Grafikspeichers ermittelt und in Zeile 440 der Hardcopy-Routine mitgeteilt. Dadurch läßt sich zum Beispiel auch der RAM-Bereich unter dem Basic-Interpreter als Grafikspeicher nutzen. Der ganze Basic-Bereich (2048 bis 40959) ist dann für Programme frei.

Nicht benutzt werden darf das RAM unter dem Betriebssystem, da es zur Ausgabe der Zeichen auf den Drucker gebraucht wird (BSOUT=$FFD2). Ebenfalls nicht benutzbar als Grafikspeicher ist der Bereich 49152 bis 57343, da sonst das Programm von der Grafik überschrieben wird.

Die Zeilen 410 bis 440 können weggelassen werden, wenn der Grafikspeicher bei 8192 bis 16191 liegt.

(Rainer Kracht/rg)
320 rem ***********************
330 rem *  hardcopy-loader    *
340 rem *                     *
350 rem *  rainer kracht      *
360 rem *  gaertnertwiete 9   *
370 rem *  2085 quickborn     *
380 rem *                     *
390 rem *  maerz 1984         *
400 rem ***********************
410 :
420 :
430 data 0,32,253,174,32,158,183,32,201,255,162,29,142,116,193,169,0,133,251
440 data 133,255,169,8,32,210,255,32,233,193,169,0,160,195,133,176,132,177
450 data 169,13,32,210,255,169,40,133,21,169,128,133,151,169,0,133,20,160
460 data 6,177,176,37,151,240,7,165,20,25,226,193,133,20,136,16,240,165,20
470 data 9,128,32,210,255,70,151,144,223,165,176,105,6,133,176,144,2,230,177
480 data 198,21,208,205,206,116,193,208,180,169,13,32,210,255,76,204,255,1
490 data 2,4,8,16,32,64,160,39,132,252,169,0,133,248,162,8,10,38,248,6,252
500 data 144,7,24,105,7,144,2,230,248,202,208,239,133,247,24,165,255,101,247
510 data 133,247,169,195,101,248,133,248,169,0,133,250,152,201,32,48,2,230
520 data 250,10,10,10,133,249,24,165,251,101,249,133,249,169,0,101,250,133
530 data 250,24,169,32,101,250,133,250,165,251,74,74,74,133,252,133,253,169
540 data 0,133,254,162,8,10,38,254,6,253,144,7,24,105,56,144,2,230,254,202
550 data 208,239,133,253,24,165,252,101,254,133,254,24,165,253,101,249,133
560 data 249,165,254,101,250,133,250,162,0,165,1,133,2,169,54,133,1,161,249
570 data 129,247,165,2,133,1,136,48,3,76,235,193,165,251,201,199,240,18,230
580 data 251,230,255,165,255,201,7,240,3,76,233,193,169,0,133,255,96,169,195
590 data 133,248,169,4,133,247,162,40,169,0,160,2,145,247,136,16,251,165,247
600 data 24,105,7,133,247,144,2,230,248,202,208,233,96
610 fori=49524to49854:reada:pokei,a:b=b+a:next
620 ifb<>45611thenprint"fehler in datenzeile !"
Basic-Lader »Hardcopy MPS 801/VC 1515«
PDF Diesen Artikel als PDF herunterladen
Mastodon Diesen Artikel auf Mastodon teilen
← Vorheriger ArtikelNächster Artikel →