Tips und Tricks zu Vizawrite (Teil 10)
Hochauflösende Grafik in Vizawrite 64-Texten verwenden — ein Wunschtraum? Nicht mehr, denn das Vizawrite-Grafik-System ermöglicht das Einbinden beliebiger HiRes-Grafiken in Ihre Briefe und Schriftstücke. Außerdem druckt der CP80X im Epson-Modus mit Vizawrite 64
Was noch vor wenigen Monaten unmöglich schien, ist nun Realität geworden: Allen Vizawrite 64-Besitzern die Möglichkeit zu bieten, in Ihren Texten fast beliebigen Gebrauch von hochaufgelösten Grafiken zu machen, gleich welcher Art diese Bilder sind. So ist es beispielsweise möglich, Giga-CAD-Bilder, »Apfelmänner«-Grafiken, digitalisierte, konstruierte oder einfach mit einem Grafikprogramm erstellte hochaufgelöste Bilder zu verwenden, um Briefköpfe optisch aufzuwerten, erläuterndes Bildmaterial in den Text mit einzubinden oder beliebige Spezialeffekte zu erzielen.
Das Vizawrite Grafik-System
Dieses Grafik-System wurde geschaffen, um hochauflösende Grafiken in Vizawrite 64-Texte einzubauen. Das Programmpaket setzt den ESC/*-Befehl von Epson- und kompatiblen Druckern voraus, eine Spezialversion für den Drucker CP80X (ESC/K-Befehl) ist ebenfalls enthalten (Listings 5 und 6). Die Grafik, die Sie in ein Vizawrite 64-Dokument übernehmen wollen, muß sich auf Diskette befinden. Dabei ist es gleichgültig, um welche Art von Grafik es sich handelt. Zur Gestaltung von optisch ansprechenden Briefköpfen eignen sich besonders Programme, wie etwa der »Print-Shop«. Die Grafiken können in beliebigen Speicherbereichen gestanden haben, bevor sie auf Diskette gespeichert wurden (Print-Shop-Bilder beispielsweise ab $4000). Multi-Color-Grafiken sollten Sie vorher mit einem dafür ausgelegten Programm bearbeiten. Für diese Zwecke besonders geeignet ist das Programm »Hardmaker« aus der 64er, Ausgabe 4/86 (T«-Befehl zum Umwandeln von Multi-Color-Grafiken in HiRes-Format). Es ist also durchaus möglich, »Apfelmännchen«-Grafiken in Vizawrite 64-Texte einzuarbeiten.
Um Grafiken für Vizawrite 64 aufzubereiten, laden Sie das Basic-Programm (Listing 1) von Diskette mit
LOAD "VG-CONVERTER",8 und starten es mit »RUN«. Das Programm lädt nun automatisch die benötigten Maschinen-Unterprogramme (Listing 2) nach. Nach dem Programmstart geben Sie den Namen des Bildes ein, das bearbeitet werden soll. Wenn Sie sich nicht ganz sicher sind, ob und unter welchem Namen sich das Bild auf der Diskette befindet, so geben Sie anstelle des Namens ein »$« ein, wodurch das Inhaltsverzeichnis auf dem Bildschirm ausgegeben wird. Sie können dabei die Ausgabe mit <SPACE> beliebig oft anhalten/fortsetzen und mit der Pfeil-nach-links-Taste abbrechen. Wenn Sie sich für ein Bild entschieden haben, werden Sie aufgefordert, die Diskette, auf der sich das zu bearbeitende Bild, befindet, ins Laufwerk zu legen. Nachdem Sie dies getan und die <RETURN>-Taste gedrückt haben, wird das Bild nach $2000 geladen, unabhängig davon, in welchem Bereich es vorher gestanden hat.
Nach dem Laden erscheint folgendes Auswahl-Menü:
1 Bild ansehen
2 ganzes Bild konvertieren
3 Ausschnitt konvertieren
4 Neues Bild laden
5 Disk-Befehl senden
6 Directory
7 Programmende
Sie können nun durch Drücken einer Taste zwischen 1 und 7 die gewünschte Funktion aufrufen. Alle anderen Tasten werden ignoriert.
Zu Punkt 1: Hiermit wird das Bild, das geladen wurde, angezeigt, wie es auch hinterher auf dem Papier erscheint: gesetzte Punkte sind schwarz, der Hintergrund weiß. Sie haben nun die Möglichkeit, das Bild durch <I> zu invertieren, durch <RETURN> gelangen Sie wieder ins Hauptmenü. Zu Punkt 2:
Zu Punkt 2:
Hier wird das Bild angezeigt und umgewandelt. Beim Konvertieren wird jeder 8 x 8-Pixel-Block um 90 Grad nach rechts gedreht. Dies können Sie auch auf dem Bildschirm verfolgen. Zu Punkt 3:
Zu Punkt 3:
Mit diesem Menüpunkt haben Sie die Möglichkeit, nur Ausschnitte des Bildes in Vizawrite 64 zu verwenden. Die Breite der Grafik beträgt immer 320 Pixel, also die ganze Bildbreite, die Höhe können Sie jedoch beliebig verändern. Das Bild wird angezeigt und am oberen Bildschirmrand erscheint eine rot punktierte Linie. Diese Linie ist Ihr Zeiger und besteht aus sieben Sprites. Mit dieser Linie können Sie den Beginn des Ausschnittes festlegen. Der Zeiger läßt sich mit den Cursor-Tasten beliebig auf- und abbewegen. Zusätzlich besteht die Möglichkeit das Bild mit <I> zu invertieren. Wenn Sie die <HOME>-Taste drücken, wird der Zeiger wieder ganz nach oben gebracht.
Ist der gewünschte Bereich durch die Sprites markiert, so wird nach Drücken der <RETURN>-Taste der Bereich über dem Zeiger gelöscht. Anschließend befindet sich der Zeiger in der vorletzten Zeile und Sie bestimmen analog die untere Grenze des Ausschnitts. Nachdem Sie die <RETURN>-Taste gedrückt haben, wird der Bereich unter dem Zeiger gelöscht. Alles, was nun noch von dem Bild sichtbar ist, wird später auf Diskette gespeichert. Nachdem Sie das Bild oder auch nur einen Ausschnitt konvertiert haben, werden Sie gefragt, unter welchem Namen das Bild abgespeichert werden soll. Diesem Namen wird automatisch ein »/G« (für Vizawrite-Grafik) vorangestellt. Anschließend werden Sie — wie beim Laden auch — aufgefordert, die Diskette einzulegen, auf die das Bild gespeichert werden soll. Danach wird das Bild auf Diskette geschrieben. Wenn Sie ein ganzes Bild konvertiert haben, dauert das Speichern etwas länger, da eine 64 Blocks lange sequentielle Datei auf Diskette geschrieben werden muß. Sie haben nun die Möglichkeit, weitere Bilder umzusetzen oder das Programm zu beenden.
Zu Punkt 4:
Sofern Ihnen das geladene Bild nicht gefällt, können Sie durch diese Option eine andere Grafik einladen.
Zu Punkt 5:
An dieser Stelle können Sie Floppy-Befehle senden, ohne die umständliche OPEN- und CLOSE-Prozedur hinter sich bringen zu müssen (bei VALIDATE beispielsweise lediglich <V> und <RETURN>; die verfügbaren Befehle können dem Floppy-Handbuch entnommen werden) Nach dem Diskettenzugriff wird der Fehlerkanal abgefragt. Zu Punkt 6: :
Zu Punkt 6:
Die Directory-Option kann analog der gleichen Option bei der Eingabe des Bildnamens verwendet werden. Zu Punkt 7:
Zu Punkt 7:
Haben Sie das Programm versehentlich verlassen, so können Sie es durch »RUN« erneut starten.
Um die Grafiken mit Vizawrite benutzen zu können, laden Sie nun das Objektprogramm von Vizawrite-Grafik-Print (Listing 4) mit
LOAD "VG-PRINT $0365",8,1.
Danach geben Sie »NEW« ein und initialisieren Vizawrite-Grafik-Print mit
SYS 869
(das, Quellprogramm im Profi-Ass-Format finden Sie als Listing 3). Jetzt laden Sie wie gewohnt Vizawrite 64 und verfügen über die zusätzliche Grafikoption.
Geben Sie jetzt Ihren Text ganz normal ein. Wenn Sie die konvertierte Grafik in den Text einbauen wollen, geben Sie an der gewünschten Stelle den »Merge«-Befehl ein. Tragen sie nach »Merge:«den Namen des Bildes ein. Dabei dürfen Sie jedoch nicht vergessen, das »VG.« vor den Namen zu setzen. Nach »Page:« geben Sie ein »S« für sequentiellen Dateneinzug ein und drücken die <RETURN>-Taste. Das Bild wird jetzt geladen. Kurze Zeit später befindet sich das Bild im Speicher. Das Ganze sieht auf dem Bildschirm recht seltsam aus, je Grafikzeile befinden sich 640 Buchstaben im Speicher. Es ist ganz wichtig, daß Sie in diesem konfus aussehenden Buchstabensalat nichts ändern. Damit nicht soviele Zeilen benötigt werden, können Sie die Zeilenlänge auf 240 Zeichen in der Formatzeile ausdehnen (am besten vor Erstellen des Textes und Einlesen der Grafik, da es sonst sehr schleppend vonstatten gehen kann).
Den linken Rand der Grafik bestimmen Sie ganz normal, wie beim Text auch, mit der Formatzeile. Dabei müssen Sie darauf achten, daß Sie den Rand nicht zu weit nach rechts legen, da sonst die Grafik nicht mehr auf das Blatt paßt und in die nächste Zeile übernommen wird.
Nun müssen Sie noch den Zeilenabstand festlegen, der zwischen den einzelnen Grafikzeilen gedruckt werden soll. Dazu definieren Sie in der Formatzeile die entsprechenden Steuerzeichen (siehe Druckerhandbuch). Die ideale Einstellung ist 24 6 inch (CHR$@T);CHR$ (52); CHR$(24)). Nach der Grafik müssen Sie den Zeilenabstand wieder für die Textausgabe einstellen zum Beispiel % oder % inch.
Es ist ratsam, den Steuerzeichen im Text jeweits eine eigene Zeile zu widmen und diese durch <RETURN> abzuschließen.
Bei voraussichtlich häufigerer Nutzung eines Bildes ist es ratsam, das Bild jetzt, da es im Speicher steht, auch gleich als Vizawrite-Datei zu speichern. Das Ganze ist leider eine speicherplatzintensive Angelegenheit. Ein komplettes Bild belegt 16000 Zeichen. Dies ist aber nicht weiter schlimm, da der Textspeicher von Vizawrite 64 sehr groß ist und sich ohne weiteres Bilder mit der »GLOBAL«-Funktion beim Drucken in den Text einbinden lassen.
Wenn Sie möchten, können Sie ohne weiteres Text in die Grafik einarbeiten. Am einfachsten ist es, Text rechts der Grafik zu verwenden. Dazu gehen Sie mit dem Cursor an das Ende einer Grafikzeile (= Return-Zeichen, zeigt in der Blinkphase »R« auf dem Bildschirm). Wenn der Cursor auf dem <RETURN>-Symbol steht, drücken Sie <F7>, um eine Einfügung zu ermöglichen. Geben Sie nun den gewünschten Text ein, alserstesjedoch ein Leerzeichen, um den Text von der Grafik zu trennen. Dabei sollten Sie beachten, daß Sie nicht zu viele Buchstaben einfügen (abhängig vom linken Rand der Grafik), damit alles in eine Zeile paßt. Ebenso verfahren Sie in den anderen Zeilen, in denen Sie Text wünschen. Da Sie den Zeilenabstand der Grafik entsprechend kleiner eingestellt haben (das sollten Sie jedenfalls), ist es nicht besonders sinnvoll, in jeder Zeile Text einzufügen. Begnügt man sich jedoch mit jeder zweiten Zeile, so erhält man ein recht gutes Ergebnis. Bei oben angegebenen Texteingaben sollten Sie beachten, daß der rechte Rand von Vizawrite 64 beim Ausdruck nicht justiert wird, es entsteht also »Flattersatz«, wenn Sie nicht jede Zeile »von Hand« auf die gleiche Länge bringen. Wollen Sie Text links der Grafik einfügen, so müssen Sie in der Formatzeile einen Tabulator für den linken Rand der Grafik setzen und diese mit <CONTROL+I> einrücken. Den gewünschten Text schreiben Sie jetzt links neben die Grafik, indem Sie zum Anfang der Zeile gehen und <F7> für Einfügen drücken. . Weitere Informationen zur Eingabe von Text links der Grafik können Sie dem Beispielausdruck (Bild 1) entnehmen.

Eines sollten Sie noch beachten: Durch die Grafikausgabe kommt der Zeilenzähler Vizawrites etwas durcheinander. Daher sollten Sie im Print-Menü bei »Single Sheet« ein <Y> eingeben und das Papier nach jeder gedruckten Seite neu justieren.
Allgemeine Hinweise
Die Spezialversion für den CP80X (Listing 5) wird analog geladen und gestartet. Es steht Ihnen jedoch nicht nur die Möglichkeit des Ausdruckens hochauflösender Grafiken zur Verfügung, sondern sind auch alle Umlaute, »ß« und Schmalschrift in Vizawrite 64 vollständig verwendbar. Sie haben weiterhin die Möglichkeit, im Epson-Modus von Vizawrite 64 alle Möglichkeiten des Druckers zu verwenden, die Schmalschrift kann mit dem Code 21 (in der Formatzeile definiert) ein- und ausgeschaltet werden.
Bei der Epson-Version des Grafik-Prints kann durch
POKE 977, Wert(0-6)
die Art der Grafikausgabe beeinflußt werden. Der voreingestellte Modus ist »6«, vielleicht finden Sie aber auch unter einem der anderen Modi Ihren Favoriten. Ich glaube, daß man den nötigen Aufwand in Kauf nehmen kann, wenn man sich das Ergebnis ansieht.
(Ralf Lenz/bj)10 ifpeek(49152)=32 and peek(49153)=84then210
20 load"grconv.code.obj",8,1
30 rem ********************************
40 rem * *
50 rem * vizawrite-grafik-converter *
60 rem * *
70 rem * (c) 1986 markt&technik verlag*
80 rem * *
90 rem * written by *
100 rem* *
110 rem* ralf lenz *
120 rem* *
130 rem* am landgraben 12 *
140 rem* *
150 rem* 4290 bocholt-barlo *
160 rem* *
170 rem* *
180 rem* *
190 rem********************************
200 :
210 vic=53248:rem startadresse vic-chip
220 laden = 12*4096:rem bild laden
230 hires= laden+20:rem umschalten auf hires
240 lres= laden+53:rem umschalten auf lores
250 lcol= laden+65:rem farbe textbildschirm
260 colr= laden+76 :rem farbe hires
270 invert= laden+103:rem bild invertieren
280 speichern= laden+127:rem bild speichern
290 cnvert= laden+276:rem bild convertieren
300 setsprite= laden+349:rem sprites initialisieren
310 down= laden+436:rem sprites nach untenbewegen
320 up=laden+453:rem sprites nach oben bewegen
330 :
340 sys lcol:printchr$(14):rem farbe setzen und umschalten auf kleinschrift
350 printchr$(30):rem schriftfarbe blau
360 print"{clr}****************************************"
370 print" {$a0}{$a0} Vizawrite-Grafik-Converter"
380 print"{down} (c) 1986 Markt&Technik Verlag"
390 print" by
400 print" Ralf Lenz
410 print" Am Landgraben 12
420 print" 4290 Bocholt-Barlo
430 print
440 print"{down}****************************************"
450 name$=""
460 print"{down}{down}Name des Bildes ('$' fuer Directory): ";
470 inputname$:ifname$=""then340
480 ifname$="$"thengosub1650:goto340
490 print"{down}Legen Sie die Diskette mit dem Bild ins Laufwerk und druecken Sie ";
500 print"{rvon}RETURN{rvof}"
510 gosub980
520 sys laden,name$:rem bild nach $2000 laden
530 gosub1080
540 ifa=0then590
550 print"{down}{rvon}Disk Fehler!{rvof} ";
560 print"Druecken Sie {rvon}RETURN{rvof}";
570 gosub 980
580 goto340
590 gosub1010
600 print"{down}{rvon}1{rvof} Bild ansehen"
610 print"{rvon}2{rvof} Ganzes Bild convertieren"
620 print"{rvon}3{rvof} Ausschnitt convertieren"
630 print"{rvon}4{rvof} Neues Bild laden"
640 print"{rvon}5{rvof} Disc-Befehl senden"
650 print"{rvon}6{rvof} Directory"
660 print"{rvon}7{rvof} Programmende"
670 print"{down}{down}Ihre Wahl (1-7) ? ";
680 geta$:ifa$<"1" or a$>"7"then 680
690 printa$:on val(a$) gosub 1160,1230,1290
700 if a$="4"then340
710 if a$="5"thengosub1910:goto590
720 if a$="6"thengosub1680:goto590
730 if a$="7"thenprint"{clr}";:end
740 iff3then 760:rem flag fuer ende des convertierens
750 goto590
760 syslres:pokevic+21,0:rem sprites aus
770 gosub1010
780 name$=""
790 print"{down}{down}Unter welchem Namen soll das Bild"
800 print"{down}gespeichert werden?"
810 input"{down}";name$:ifname$=""then900
820 name$="vg."+na$+",s,w"
830 print"{down}{down}Legen Sie die Diskette, auf die das Bildgespeichert werden soll ";
840 print"ins Laufwerk und";
850 print"druecken Sie {rvon}RETURN{rvof}"
860 gosub980
870 sys speichern,name$,oben,unten
880 gosub1080:ifa<>0then770
890 gosub1010
900 print"{down}{down}Wollen Sie noch ein Bild convertieren?"
910 print"{down}Falls ja, druecken Sie {rvon}RETURN{rvof}"
920 geta$:ifa$=""then920
930 ifa$=chr$(13)thenrun210
940 print"{clr}":end
950 :
960 rem wartet auf returntaste
970 :
980 geta$:ifa$<>chr$(13)then 980
990 return
1000 :
1010 print"{clr}****************************************"
1020 print" {$a0}{$a0} Vizawrite-Grafik-Converter "
1030 print"****************************************"
1040 return
1050 :
1060 rem fehlerkanal abfragen
1070 :
1080 open15,8,15:input#15,a,b$,c,d:print:printb$:close15:return
1090 :
1100 print"{down}Zum Ausfuehren druecken Sie {rvon}RETURN{rvof}"
1110 print"{down}Rueckkehr zum Menue mit {rvon}RETURN{rvof}"
1120 gosub 980:return
1130 :
1140 rem bild ansehen
1150 :
1160 gosub1100:syscolr,1:syshires
1170 geta$:ifa$="i"then sys invert
1180 ifa$=chr$(13)then syslres :return
1190 goto1170
1200 :
1210 rem ganzes bild convertieren
1220 :
1230 f3=-1:syscolr,1:sys hires:sys cnvert:sys lres
1240 oben=8192:unten=8192+8000
1250 return
1260 :
1270 rem ausschnitt convertieren
1280 :
1290 print"{clr}{down}{down}{down}Bewegen Sie den Zeiger mit den Cursor- Tasten auf und ab"
1300 print"Zuerst legen Sie die obere Grenze fest. Wenn Sie die gewuenschte Zeile"
1310 print"erreicht haben, druecken Sie die Return-Taste. Analog verfahren Sie mit"
1320 print"der unteren Grenze."
1330 print"{rvon}HOME{rvof} bringt den Zeiger nach oben und"
1340 print"{rvon}I{rvof} invertiert die Grafik"
1350 print"Zum Start druecken Sie {rvon}RETURN{rvof}":gosub 980
1360 syshires:syscolr,1:sys setsprite
1370 geta$:ifa$=""then 1370
1380 ifa$=chr$(13)thengosub1470 :iff3thenreturn
1390 ifa$="{down}"then sys down
1400 ifa$="{up}"then sys up
1410 ifa$="i"then sys invert:fori=1to200:next
1420 ifa$="{home}"thenfori=vic+1 to vic+14step2:pokei,50:next
1430 goto 1370
1440 :
1450 rem obere grenze berechnen
1460 :
1470 iff2then1580 :rem untere grenze
1480 f2=-1
1490 oz=int((peek(vic+1)-50)/8):rem bildschirmzeilennummer des sprites
1500 ifoz=0then1520 :rem sprite ist ganz oben
1510 fori=1024to1023+oz*40:pokei,0:next:rem im farbram loeschen
1520 oben=8192+oz*320
1530 fori=vic+1 to vic+14step2:pokei,242:next:rem alle sprites nach unten
1540 return
1550 :
1560 rem untere grenze berechnen
1570 :
1580 uz=int((peek(vic+1)-50)/8):rem bildschrimzeilennummer des sprites
1590 ifuz=250then 1610 :rem sprite ist ganz unten
1600 fori=1024+uz*40to 2023:pokei,0:next:rem im farbram loeschen
1610 unten=8192+uz*320
1620 f3=-1:fori=1to800:next
1630 syscnvert
1640 return
1650 :
1660 rem inhaltsverzeichnis anzeigen
1670 :
1680 print"{clr}";
1690 open1,8,0,"$0"
1700 get#1,u$,v$
1710 get#1,u$,v$
1720 get#1,u$,v$
1730 bl=0
1740 ifu$<>""thenbl=asc(u$)
1750 ifv$<>""thenbl=bl+asc(v$)*256
1760 printmid$(str$(bl),2);tab(4);
1770 get#1,v$:ifst<>0then1890
1780 ifv$<>chr$(34)then1770
1790 get#1,v$:ifv$<>chr$(34)thenprintv$;:goto1790
1800 get#1,v$:ifv$=chr$(32)then1800
1810 ifv$=chr$(42)thenv$="{left}*"
1820 printtab(22);:w$=""
1830 w$=w$+v$:get#1,v$:ifv$<>""then1830
1840 printleft$(w$,5)
1850 getx$
1860 ifx$="_"thenclose1:return
1870 ifx$=" "thenpoke198,0:wait198,1:poke198,0
1880 ifst=0then1710
1890 print"blocks free"
1900 close1:poke198,0:wait198,1:poke198,0:return
1910 open15,8,15:print"Befehl: ";:poke631,34:poke198,1:inputdb$
1920 print#15,db$:close15:gosub1080
1930 poke198,0:wait198,1:poke198,0:return
PROGRAMM : GRCONV.CODE.OBJ C000 C1E2 ----------------------------------- C000 : 20 54 E2 A2 08 A0 00 20 1D C008 : BA FF A9 00 A2 00 A0 20 19 C010 : 20 D5 FF 60 AD 11 D0 8D E8 C018 : D6 C1 A9 3B 8D 11 D0 AD A1 C020 : 18 D0 8D D7 C1 A9 18 8D E3 C028 : 18 D0 A9 00 8D 20 D0 A9 83 C030 : 01 8D 21 D0 60 AD D6 C1 AD C038 : 8D 11 D0 AD D7 C1 8D 18 29 C040 : D0 A9 03 8D 20 D0 A9 01 89 C048 : 8D 21 D0 60 20 F1 B7 8A 2B C050 : A2 04 A0 00 84 FB A0 04 CF C058 : 84 FC A0 00 91 FB C8 D0 40 C060 : FB E6 FC CA D0 F6 60 A2 F2 C068 : 20 8A A0 00 84 FB 85 FC 2E C070 : B1 FB 49 FF 91 FB C8 D0 2F C078 : F7 E6 FC CA D0 F2 60 20 E1 C080 : 54 E2 A9 02 A2 08 A0 02 E1 C088 : 20 BA FF 20 C0 FF 20 FD 92 C090 : AE 20 8A AD 20 F7 B7 A5 92 C098 : 14 A4 15 85 FB 84 FC 20 0C C0A0 : FD AE 20 8A AD 20 F7 B7 79 C0A8 : A5 14 A4 15 85 FD 84 FE 7B C0B0 : A2 02 20 C9 FF A9 40 8D FE C0B8 : DF C1 A9 01 8D E0 C1 A5 34 C0C0 : FB C5 FD D0 0F A5 FC C5 D5 C0C8 : FE D0 09 20 CC FF A9 02 EC C0D0 : 20 C3 FF 60 A9 A8 20 D2 E4 C0D8 : FF A0 00 B1 FB 48 29 0F 22 C0E0 : 20 0D C1 68 4A 4A 4A 4A B9 C0E8 : 20 0D C1 18 A5 FB 69 01 E4 C0F0 : 85 FB 90 02 E6 FC CE DF 28 C0F8 : C1 D0 E0 CE E0 C1 10 DB 47 C100 : A9 A8 20 D2 FF A9 0D 20 21 C108 : D2 FF 4C B5 C0 18 69 40 97 C110 : 20 D2 FF 60 A9 00 A0 20 03 C118 : 8D 29 C1 8D 37 C1 8C 2A 64 C120 : C1 8C 38 C1 A0 07 A2 07 48 C128 : 5E 00 20 6A CA 10 F9 48 81 C130 : 88 10 F3 A2 00 68 9D 00 CB C138 : 20 E8 E0 08 D0 F7 18 AD 8E C140 : 29 C1 69 08 8D 29 C1 8D E9 C148 : 37 C1 AD 2A C1 69 00 8D 93 C150 : 2A C1 8D 38 C1 AD 38 C1 B3 C158 : C9 40 D0 C8 60 A2 03 A9 09 C160 : AA 9D BF 02 CA D0 FA A2 6D C168 : 3C A9 00 9D C2 02 CA D0 36 C170 : FA A2 07 A9 0B 9D F7 07 3E C178 : CA D0 FA A9 7F 8D 15 D0 F8 C180 : 8D 1D D0 A2 07 A9 02 9D 25 C188 : 26 D0 CA D0 FA A0 00 A2 DD C190 : 00 B9 D8 C1 9D 00 D0 E8 CA C198 : E8 C8 C0 07 D0 F3 A9 60 09 C1A0 : 8D 10 D0 A0 00 A2 01 A9 EA C1A8 : 32 9D 00 D0 E8 E8 C8 C0 3D C1B0 : 07 D0 F6 60 AD 01 D0 C9 A3 C1B8 : FA F0 F8 18 69 08 A0 00 C5 C1C0 : A2 01 4C A9 C1 AD 01 D0 5A C1C8 : C9 32 F0 E7 38 E9 08 A0 18 C1D0 : 00 A2 01 4C A9 C1 00 00 94 C1D8 : 14 44 74 A4 D4 04 34 00 FE C1E0 : 00 FF 84
50 sys9*4096 100 ; 110 ; 120 ; 130 ;vizawrite grafikprint 140 ; version 3.0 150 ; 160 ;(c) 1986 markt&technik 170 ; 180 ; written by 190 ; ralf lenz 200 ; am landgraben 12 210 ; 4290 bocholt-barlo 220 ; 230 .opt oo 240 ; 250 *= $0365;startadresse des programms 260 ; 270 print = $f1ca;ausgabe eines zeichens 280 graphcode = $a8;code fuer grafik 290 cr = $0d;carriage return 300 ; 310 init lda #<newout;outputvektor auf 320 sta $0326;eigene routine verstellen 330 lda #>newout 340 sta $0327 350 rts 360 ; 370 newout pha;zu druckendes byte auf stapel 380 lda $9a;pruefen, ob ausgabe auf drucker 390 cmp #4 400 bne noprinter;ausgabe nicht auf drucker 410 pla;druckbyte zurueckholen 420 cmp #graphcode;pruefen, ob grafikzeile 430 bne nographik;normaler textausdruck 440 sty yzw;y-register zwischenspeichern 450 ldy #0 460 sty flag;flag fuer nibble 470 bin320 lda tabelle1,y;drucker auf 320 binaer- 480 jsr print;daten einstellen 490 iny 500 cpy #5 510 bne bin320 520 ldy yzw;y-register zurueckholen 530 lda #<graphout;outputvektor erneut 540 sta $0326;verstellen fuer ausgabe von 550 lda #>graphout;grafik 560 sta $0327;outputvektor erneut verstellen 570 exit clc 580 rts 590 noprinter pla;druckbyte zurueckholen 600 nographic jmp print;normale output-routine 610 ; 620 graphout cmp #graphcode;pruefen, ob zeilenende 630 bne g1 640 clc;ende der grafikzeile erreicht. 650 jmp init;output-vektor zurueckstellen 660 g1 cmp #63;pruefen, ob illegaler code (0-63) 670 bcc exit 680 and #%00001111;nur unteres nibble verwenden 690 pha; und auf stapel 700 lda flag;oberes oder unteres nibble 710 bne nibble2 720 ; 730 nibble1 inc flag;flag=1 740 pla;nibble zurueckholen 750 sta store;und zwischenspeichern 760 clc 770 rts 780 ; 790 nibble2 dec flag;flag=0 800 pla;nibble zurueckholen 810 asl;und um 4 bit nach links schieben 820 asl:asl:asl 830 ora store;verknuepfen mit unterem nibble 840 jsr print;und ausgeben 850 rts 860 ; 870 yzw .byte 00;zwischenspeicher fuer y-register 880 tabelle1 .byte $1b;escape senden 881 .byte $2a;'*' fuer 8-nadel-bitmuster-modus 882 .byte $06;modus 0-6 anwaehlen,hier 6 voreingestellt 883 .byte $40,$01;320-punkte-dichte 890 store .byte 00;speicher fuer grafikbyte 900 flag .byte 00;flag fuer oberes/unteres nibble 910 ; 920 ; 930 ;
PROGRAMM : VG-PRINT $0365 0365 03D6 ----------------------------------- 0365 : A9 70 8D 26 03 A9 03 8D 13 036D : 27 03 60 48 A5 9A C9 04 95 0375 : D0 27 68 C9 A8 D0 23 8C E3 037D : CE 03 A0 00 8C D5 03 B9 EC 0385 : CF 03 20 CA F1 C8 C0 05 AA 038D : D0 F5 AC CE 03 A9 A2 8D 80 0395 : 26 03 A9 03 8D 27 03 18 56 039D : 60 68 4C CA F1 C9 A8 D0 4F 03A5 : 04 18 4C 65 03 C9 3F 90 12 03AD : EE 29 0F 48 AD D5 03 D0 34 03B5 : 09 EE D5 03 68 8D D4 03 57 03BD : 18 60 CE D5 03 68 0A 0A 23 03C5 : 0A 0A 0D D4 03 20 CA F1 F2 03CD : 60 00 1B 2A 06 40 01 00 A0 03D5 : 00 AC
PROGRAMM : VG-PRINT CP80X 02A7 03EE ----------------------------------- 02A7 : 8C E5 03 A0 00 8C ED 03 1D 02AF : B9 E8 03 20 CA F1 C8 C0 82 02B7 : 04 D0 F5 AC E5 03 A9 C9 E7 02BF : 8D 26 03 A9 02 8D 27 03 85 02C7 : 18 60 C9 A8 D0 04 18 4C BD 02CF : 65 03 C9 3F 90 F2 29 0F 73 02D7 : 48 AD ED 03 D0 09 EE ED BE 02DF : 03 68 8D EC 03 18 60 CE 27 02E7 : ED 03 68 0A 0A 0A 0A 0D E4 02EF : EC 03 20 CA F1 60 00 00 E0 02F7 : 00 00 00 00 00 00 00 00 F8 02FF : 00 8B E3 83 A4 7C A5 1A 27 0307 : A7 E4 A7 86 AE 00 00 00 C6 030F : 00 4C 48 B2 00 31 EA E6 A1 0317 : 8F 47 FE 4A F3 91 F2 0E 06 031F : F2 50 F2 33 F3 57 F1 CA B4 0327 : F1 ED F6 3E F1 2F F3 66 C9 032F : FE A5 F4 ED F5 00 00 00 5A 0337 : 00 00 00 00 00 00 00 00 38 033F : 00 00 00 00 00 00 00 00 40 0347 : 00 00 00 00 00 00 00 00 48 034F : 00 00 00 00 00 00 00 00 50 0357 : 00 00 00 00 00 00 00 00 58 035F : 00 00 00 00 00 00 A9 70 E7 0367 : 8D 26 03 A9 03 8D 27 03 3D 036F : 60 48 A5 9A C9 04 D0 57 5F 0377 : 68 C9 A8 D0 03 4C A7 02 3D 037F : 48 8C E5 03 A0 07 D9 D5 3C 0387 : 03 F0 05 88 10 F8 D0 08 71 038F : 68 B9 DD 03 48 18 90 34 9C 0397 : 68 C9 0F D0 0F AC E7 03 BE 039F : F0 05 09 80 A0 00 2C A0 60 03A7 : 01 8C E7 03 48 AD E6 03 DC 03AF : C9 1B F0 18 68 C9 41 90 40 03B7 : 12 C9 5B B0 04 09 80 90 46 03BF : 0A C9 61 90 06 C9 7B B0 16 03C7 : 02 29 DF 48 AC E5 03 68 36 03CF : 8D E6 03 4C CA F1 5B 5C 7C 03D7 : 5D 7E 7B 7C 7D 40 DB DC E5 03DF : DD 5E 5B 5C 5D C0 00 00 2A 03E7 : 00 1B 4B 40 01 00 00 30
50 sys9*4096
100 ;
110 ;
120 .opt oo
130 ;anpassung von cp 80x an vizawrite
140 ;umlaute und steuercodes werden
150 ;vom cp 80x richtig ausgegeben, wenn
160 ;er als epson-drucker (e) angesteuert
170 ;wird
180 ;zusaetzlich ist es moeglich grafiken zu drucken!
190 ;
200 ;version 2.2
210 ;
220 ;(c) 1986 markt&technik
230 ;
240 ; written by
250 ; ralf lenz
260 ; am landgraben 12
270 ; 4290 bocholt-barlo
280 ;
290 ;
300 print = $f1ca;ausgabe eines zeichens
310 graphcode = $a8;code fuer grafik
320 cr = $0d;carriage return
330 ;
340 ;
350 *= $02a7
360 ;
370 grafik sty yzw;y-register zwischenspeichern
380 ldy #0
390 sty flag;flag fuer nibble
400 bin320 lda tabelle3,y;drucker auf 320 binaer-
410 jsr print;daten einstellen
420 iny
430 cpy #4
440 bne bin320
450 ldy yzw;y-register zurueckholen
460 lda #<graphout;outputvektor erneut
470 sta $0326;verstellen fuer ausgabe von
480 lda #>graphout;grafik
490 sta $0327;outputvektor erneut verstellen
500 exit2 clc
510 rts
540 ;
550 graphout cmp #graphcode;pruefen, ob zeilenende
560 bne g1
570 clc;ende der grafikzeile erreicht.
580 jmp init;output-vektor zurueckstellen
590 g1 cmp #63;pruefen, ob illegaler code (0-63)
600 bcc exit2
610 and #%00001111;nur unteres nibble verwenden
620 pha; und auf stapel
630 lda flag;oberes oder unteres nibble
640 bne nibble2
650 ;
660 nibble1 inc flag;flag=1
670 pla;nibble zurueckholen
680 sta store;und zwischenspeichern
690 clc
700 rts
710 ;
720 nibble2 dec flag;flag=0
730 pla;nibble zurueckholen
740 asl;und um 4 bit nach links schieben
750 asl:asl:asl
760 ora store;verknuepfen mit unterem nibble
770 jsr print;und ausgeben
780 rts
790 ;
800 ;
810 ;
820 *= $0365
830 init lda #<start ;output-vektor aendern
840 sta $0326
850 lda #>start
860 sta $0327
870 rts
880 ;
890 start pha;druckbyte auf stapel retten
900 lda $9a ;pruefen ob
910 cmp #$04;ausgabe auf drucker
920 bne ende ;nein
930 pla ;wenn ja, druckbyte zurueckholen
940 cmp #graphcode
950 bne s1
960 jmp grafik
970 s1 pha ;und sofort wieder auf stapel
980 sty yzw ;yregister zwischenspeichern
990 ldy #$07
1000 such cmp tabelle1,y;druckbyte mit zu aendernden
1010 ; zeichen vergleichen
1020 beq tausch1;zeichen gefunden
1030 dey
1040 bpl such ;weitersuchen
1050 bne smalltest;kein umlaut gefunden
1060 tausch1 pla;druckbyte vom stapel holen
1070 lda tabelle2,y ;ersatzbyte aus tabelle holen
1080 pha;und als neues druckbyte zum stapel
1090 clc
1100 bcc ende1;esctest kann entfallen, da umlaut
1110 smalltest pla;druckbyte vom stapel holen
1120 cmp #15; mit code fuer schmalschrift vergleichen
1130 bne nosmall
1140 ldy smallflg;flag pruefen
1150 beq smallon
1160 ora #128; bit 7 setzen fuer schmalschrift aus
1170 smalloff ldy #0
1180 .byte $2c; die folgenden 2 bytes ueberspringen
1190 smallon ldy #1
1200 sty smallflg
1210 nosmall pha;druckbyte wieder auf stapel
1220 esctest lda test
1230 cmp #27;escapecode
1240 beq ende1;vorhergegangener code war escape
1250 ; ===> byte nicht aendern
1260 tausch2 pla
1270 cmp #65
1280 bcc exit ;kleiner als 65 (a)
1290 cmp #91
1300 bcs weiter;groesser als 90 (z)
1310 ora #%10000000 ;bit 7 setzen
1320 bcc exit ;springt hier immer
1330 weiter cmp #97
1340 bcc exit;kleiner als 97 ({$61})
1350 cmp #123
1360 bcs exit;groesser als 122 ({$7a})
1370 and #%11011111;bit 5 loeschen
1380 exit pha
1390 ende1 ldy yzw;yregister zurueckholen
1400 ende pla;druckbyte zurueckholen
1410 sta test;und fuer esctest beim naechsten
1420 ; einsprung speichern
1430 jmp print;sprung zum normalen output-vektor
1440 ;
1450 tabelle1 .byte 91,92,93,126,123,124,125,64
1460 ; sollen getauscht werden
1470 tabelle2 .byte 219,220,221,94,91,92,93,192
1480 ; sollen dafuer gedruckt werden
1490 yzw .byte 00 ;zwischenspeicher fuer yregister
1500 test .byte 00;zwischenspeicher fuer esctest
1510 smallflg .byte 00;flag fuer smalltest
1520 tabelle3 .byte $1b,$4b,$40,$01;escape k 320
1530 store .byte 00;speicher fuer grafikbyte
1540 flag .byte 00;flag fuer oberes/unteres nibble
1550 ;
1560 ;