Hardcopy-Routinen

Hardcopy mit dem Seikosha GP-550

Über den seriellen Bus des C 64 können mit dieser Routine durch einen SYS-Befehl Grafiken in einfacher und in doppelter Größe zu Papier gebracht werden.

Tippen Sie zunächst den Basic-Lader (Listing 1) ab und speichern ihn auf Diskette. Anschließend ist das Programm mit RUN <Return> zu starten. Es wird ein Maschinenprogramm ab Speicherzelle 49152 erzeugt und nach korrekter DATA-Summenkontrolle unter dem Namen »M/HCOPY GP-550A« abgespeichert. Tritt bei der DATA-Summenkontrolle kein Fehler auf, kann das Maschinenprogramm wie folgt aufgerufen werden:

Syntax der Hardcopyroutine:

SYS49152⟨(Pg)⟩⟨,M,(L-1)*4+Br,LM⟩⟨;⟩

Hierbei bedeuten:

⟨...⟩ Ein in spitzen Klammern stehender Ausdruck ist optional, kann also weggelassen werden.
Pg Grafikseitennummer 0 < Pg <= 7.
Durch die Angabe dieser Grafikspeicherkennziffer wird grundsätzlich der RAM-Bereich angesprochen!
Zum Beispiel: (0):nicht erlaubt (illegal quantity error), da dieser Bereich die Zeropage beinhaltet.
(1):Standardgrafikspeicher (8192 bis 16383); wird auch angesprochen, wenn keine Angabe zu Pg gemacht worden ist.
(5):spricht das RAM unter dem Basic-ROM an.
(7):Hardcopy einer Simons-Basic-Grafik, die unter dem Kernal-ROM liegt.
M Moduskennzahl M = 0 (128): 8-bit normal (revers)
M = 1 (129): 16-bit normal (revers)
L Länge L = 1 : einfache Länge / L = 2 : doppelte Länge
Beachten Sie, daß die Zahl (L-1) einzugeben ist.
Br Breite1 <= Br <= 3
LM Linker Randabstand (siehe Druckeranleitung)
Der größtmögliche Wert des Randabstandes ist von der Breite abhängig. Eine Überschreitung des erlaubten Wertes ergibt jedoch »illegal quantity error«, so daß kein Fehlausdruck durch Zeilenüberlauf entstehen kann.
Zusätzlich stellt Ihnen die Routine eine Zentrierungsautomatik zur Verfügung, die Sie durch »LM=1« aktivieren können.
sperrt Blattvorschub nach erfolgtem Ausdruck, so daß Sie mehrere Hardcopies abstandsfrei koppeln können.

Beispiele:
(1) SYS49152
Ausdruck der Standard-Bitmap (8192-16383) mit Normalbelegung der Parameter. (8-Bit normale, doppelte Breite, einfache Länge, mittenzentriert, Seitenvorschub)
(2) SYS49152(7);
Hardcopy einer Simons Basic-Grafik wie oben, aber ohne Seitenvorschub.
(3) SYS49152,1,1,0
Kleinstformat in 16-Bit-Auflösung ohne Randabstand.
(4) SYS49152(3),128,6,5;
Darstellung der Bitmap von 24576 bis 32767 im 8-Bit-Revers-Modus. Die Breite beträgt wie die Länge zwei, der linke Rand fünf Einheiten.

Um dem Anwender eine möglichst flexible Nutzungsmöglichkeit anbieten zu können, stehen neben derüblichen, oben dargestellten Parameterübergabe zusätzliche POKE-Optionen zur Verfügung, die zum Beispiel die Rahmenerstellung oder das Druckbild beeinflussen.

Alle Möglichkeiten sind inden Tabellen 1 und 2 aufgeführt.
Wichtig dabei ist:

Sämtliche in Tabelle 1 aufgelisteten POKE-Optionen sind nur für die aktuelle Hardcopy gültig und werden nach Beendigung des Druckvorganges automatisch abgeschaltet!

Hingegen sind die Programmeingriffe, die in Tabelle 2 stehen, dauerhaft, uhd müssen explizit zurückgesetzt werden.

Adresse Wert
49686 96 Rahmen ausschalten
49741 0 oberen ... } Rahmenteil weglassen
49731 0 unteren ...
49705 11 linken ...
49699 11 rechten ...
49515 0 Druckbild auflockern (M=0, BR = 2)
49531 96 Steuerung der Zeilenausgabe in Basic ermöglichen
Einsprungadressen:
49532 (*) nächste Grafikzeile bearbeiten; Fortsetzung: mit CHR$(13)
49537 (*) ohne CHR$(13)
49398 (**) alternativen Grafikbereich in Druckerpuffer bringen (siehe Listing 3)
(*) Im Unterschied zu (**) werden zunächst interne Variablen angepaßt und dann nach (**) verzweigt.
Tabelle 1. Einmalig wirksame POKE-Optionen sowie Einsprungadressen
Adresse beeinflußt Funktion
49260 Geräteadresse Anpassen an zweiten Drucker
49262 Sekundäradresse Einschalten des Groß-/Kleinschriftmodus des Druckers (7); Anwendung wie Listing 1.
49764 LF-Spacing (siehe Druckeranleitung) Zeilenabstand verringern (56); Komprimierte Darstellung
49384 Zeilenanzahl Grafikbildschirm nur teilweise reproduzieren.
49399 Spaltenanzahl
Tabelle 2. Adressen für dauerhafte Veränderungen durch POKE-Befehle

Die Option POKE49531,96 trägt wesentlich dazu bei, die Hardcopyroutine um interessante Aspekte zu bereichern. Sie sorgt dafür, daß jedesmal, wenn eine Grafikzeile abgearbeitet worden ist, die Kontrolle zwischenzeitlich an Basic zurückgegeben wird.

Dies eröffnet die Möglichkeit, vor oder hinter jeder Grafikzeile einen Text zu senden. Mit einem kleinen Trick sind zwei oder drei Grafikseiten nebeneinander zu erstellen, vorausgesetzt, die maximale Zeichenanzahl wird nicht überschritten.

Die prinzipielle Vorgehensweise dabei zeigen die Listings 2 und 3. Dort verwendete Adressen finden sich auch in Tabelle (1).

Listing 3 läßt sich noch effektvoll erweitern, indem geschickt der Elongation-Modus durch »PRINTCHR$(14);« zum Beispiel in Zeile 240 beziehungsweise »…CHR$(15);« in Zeile 210 ein- oder ausgeschaltet wird. Man erhält so zwei nebeneinander gedruckte Hardcopies mit einfacher und doppelter Breite.

In diesem Zusammenhang sei noch erwähnt, daß nach dem ersten Aufruf der Hardcopy-Routine alle Druckerbefehle nur noch mit einem normalen PRINT-Befehl gesendet werden dürfen, solange der Ausdruck nicht vollständig abgeschlossen ist.

(Frank Jörgens/ah)
PROGRAMM : HCOPY GP550    C000 C275
-----------------------------------
C000 : 20 79 00 C9 28 D0 18 20   C0
C008 : F1 AE 20 A1 B7 CA 30 56   CC
C010 : F0 0D CA E0 06 B0 4F 48   09
C018 : BD 6F C2 8D E1 C0 68 C9   48
C020 : 2C F0 04 A2 01 D0 35 20   C5
C028 : 9B B7 8E 52 C2 A0 00 20   FE
C030 : F1 B7 8A 29 03 F0 2F 8D   54
C038 : 54 C2 8A 29 0C 4A 4A AA   47
C040 : 86 02 F0 08 AD 52 C2 29   CF
C048 : 80 8D 52 C2 E8 8E 53 C2   52
C050 : 20 F1 B7 8A A8 AE 54 C2   7F
C058 : CA 88 D0 03 BD 5B C2 85   C8
C060 : 60 DD 5E C2 90 03 4C 48   82
C068 : B2 A9 7F A2 04 A0 86 20   C3
C070 : BA FF 20 C0 FF A2 7F 20   9D
C078 : C9 FF A2 06 BD 61 C2 20   DC
C080 : DD ED CA 10 F7 A4 60 C0   B0
C088 : 0A 08 20 A2 B3 A0 00 20   73
C090 : DF BD 28 B0 0B AD 00 01   8E
C098 : 8D 01 01 A9 30 8D 00 01   8D
C0A0 : AD 00 01 20 DD ED AD 01   98
C0A8 : 01 20 DD ED 20 79 00 C9   50
C0B0 : 3B D0 06 8D 55 C2 20 73   59
C0B8 : 00 A9 47 20 F2 C1 90 02   E6
C0C0 : A9 49 8D 59 C2 A9 30 AA   2C
C0C8 : AC 54 C2 18 69 03 E8 E8   76
C0D0 : 88 D0 F8 8D 58 C2 8E 57   35
C0D8 : C2 A9 00 85 D1 8D 50 C2   70
C0E0 : A9 20 85 D2 8D 51 C2 A9   17
C0E8 : 19 8D 4F C2 AC 50 C2 84   55
C0F0 : D1 AC 51 C2 84 D2 A9 28   9A
C0F8 : 85 D7 A2 04 BD 56 C2 20   6C
C100 : DD ED CA 10 F7 A2 07 A0   7A
C108 : 07 84 9B 78 A5 01 48 29   1D
C110 : FC 85 01 B1 D1 95 19 CA   09
C118 : 88 10 F8 68 85 01 A5 D1   8E
C120 : 18 69 08 85 D1 90 02 E6   17
C128 : D2 A2 07 16 19 08 2A AC   A4
C130 : 53 C2 C0 02 F0 05 20 F2   F2
C138 : C1 90 0C 28 08 2A E0 04   A7
C140 : D0 05 20 09 C2 85 09 28   89
C148 : CA 10 E0 20 09 C2 AC 53   56
C150 : C2 88 F0 07 A4 02 88 F0   D2
C158 : 02 A5 09 AC 54 C2 C0 02   67
C160 : 90 0E F0 05 48 20 FC C1   D1
C168 : 68 48 29 FF 20 FC C1 68   00
C170 : 20 FC C1 C6 9B 10 B2 C6   EA
C178 : D7 D0 8A EA A9 0D 20 DD   F6
C180 : ED AC 53 C2 88 F0 07 C6   AA
C188 : 02 D0 03 4C EC C0 84 02   28
C190 : A4 D1 8C 50 C2 A4 D2 8C   00
C198 : 51 C2 CE 4F C2 F0 03 4C   40
C1A0 : F6 C0 AC 55 C2 D0 05 A9   E6
C1A8 : 0C 20 DD ED A2 06 BD 68   1B
C1B0 : C2 20 DD ED CA 10 F7 A9   18
C1B8 : 7F 20 C3 FF A2 FF 8E 6B   73
C1C0 : C1 E8 8E 52 C2 8E 55 C2   5F
C1C8 : E8 8E 53 C2 8E 4D C2 E8   55
C1D0 : 8E 54 C2 A2 80 8E 43 C2   9C
C1D8 : A2 07 8E 29 C2 A9 08 8D   7B
C1E0 : 23 C2 A9 20 8D E1 C0 A9   11
C1E8 : EA 8D 7B C1 8D 16 C2 4C   DD
C1F0 : CC FF AC 52 C2 4E 52 C2   9F
C1F8 : 8C 52 C2 60 20 DD ED 20   53
C200 : F2 C1 90 F7 A5 09 4C DD   85
C208 : ED AC 52 C2 0E 52 C2 8C   D0
C210 : 52 C2 90 02 49 FF EA A4   B1
C218 : D7 C0 28 F0 09 88 D0 0F   AE
C220 : A4 9B F0 08 D0 09 A4 9B   EE
C228 : C0 07 D0 03 A9 FF 60 AC   76
C230 : 4F C2 88 D0 0F 20 F2 C1   5E
C238 : 90 04 E0 04 D0 F0 A4 02   AE
C240 : D0 EC 09 80 E0 04 F0 E6   98
C248 : C0 18 D0 E2 09 01 60 00   BF
C250 : 00 00 00 01 02 00 30 34   BA
C258 : 36 47 1B 1A 0D 00 36 1B   1C
C260 : 01 30 4C 1B 39 1B 18 1B   F3
C268 : 30 30 30 4C 1B 36 1B 40   96
C270 : 60 80 A0 C0 E0            EC
Listing 1. Basic-Lader zur Hardcopy-Routine mit dem GP-550.
100 rem ****************************
110 rem *    beispiel fuer die     *
120 rem *     kombination von      *
130 rem *   graphik und schrift    *
140 rem *    in einer hardcopy     *
150 rem * mit dem seikosha gp-550a *
160 rem ****************************
170 rem
180 dimt$(25)
185 lmax=25:rem maximale textlaenge pro zeile (hier beispielhaft 25)
190 rem  text zeilenweise abfragen
200 print"{clr}";:fort=0to24
210 printt+1chr$(157);
220 input". zeile ";t$(t)
230 iflen(t$(t))>lmaxthenprint"{up}{up}":goto210
240 t$(t)="     "+t$(t): rem abstand schaffen
245 nextt
250 print"{clr}{down}{down}{down}hardcopy erfolgt !"
260 rem zeilenoption einschalten
270 poke49531,96
280 rem hardcopy starten
290 sys49152(1),0,1,0;:rem beispielsweise
300 rem zeilen einzeln aus graphik und text zusammensetzen
310 fori=1to25
320 printt$(i-1):rem text und chr$(13)
330 sys49537:rem naechste graphikzeile berechnen
340 nexti
350 end
Listing 2. Mischen von Grafik und Textausdruck
100 rem *******************************
110 rem * beisp.fuer paralellausdruck *
120 rem *    zweier graphikseiten     *
130 rem * mit dem seikosha gp-550avc  *
140 rem * (erweiterbar auf drei       *
150 rem *      grafikseiten           *
160 rem *******************************
165 :
170 poke49531,96 : rem zeilenoption einschalten
180 pg=7:m3=0 : m4 = pg*2*16 : rem pg = grpahikseitenkennziffer
185 sys49152,0,1,0 : rem hardcopy starten
190 forz=1to25 : rem 25 zeilen (einfache laenge)
200 rem zeiger auf die erste graphikseite zwischenspeichern
210 m1=peek(209) : m2=peek(210)
220 rem auf zweite graphikseite umschalten
230 poke209,m3 : poke210,m4
240 sys49398 : rem hardcopy-einsprungadresse
250 rem zeiger auf zweite graphikseite zwischenspeichern
260 m3 = peek(209) : m4 = peek(210)
270 poke209,m1 : poke210,m2 : rem auf erste gr.seite zurueck
280 sys49532 : rem ausdrucken
290 nextz
300 end
Listing 3. Parallelausdruck zweier Grafiken
PDF Diesen Artikel als PDF herunterladen
Mastodon Diesen Artikel auf Mastodon teilen
← Vorheriger ArtikelNächster Artikel →