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 | Breite | 1 <= 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. |
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 |
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
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
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
