Epson-Support
Epson-Support läßt die Herzen eines jeden FX/RX-80-Besitzers höher schlagen. Mit einfachen Befehlen und kurzen Programmen können Sie jetzt komplizierte Grafiken auf Ihrem Drucker erstellen. Und das mit einer Auflösung, die fast siebenmal so hoch ist wie die des C 64, nämlich bis zu 800 mal 552 Punkten.
Epson-Support ist eine Basic-Erweiterung und belegt den Speicherbereich ab $C000 (49152). Der Programmstart erfolgt durch SYS 49152; jetzt stehen einige leistungsfähige Befehle zur Verfügung, um Grafiken zu erstellen und auf den Epson FX/RX-Druckern auszugeben. Die Grafiken liegen im Speicher des Commodore 64 ab $2000 (8192). Wegen des enormen Speicherplatzbedarfs wird auch das RAM unter dem Basic, dem Betriebssystem und unter dem Zeichen-ROM verwendet. Die Bitmap wird über Koordinaten adressiert, dabei liegt der Punkt (0,0) in der linken Ecke oben wie bei den normalen HiRes-Grafiken auf dem Bildschirm. Die X-Werte laufen von 0 bis 799, die Y-Werte von 0 bis 551, so daß 800x 552 = 441600 Dots adressiert werden können. Die Bitmap ist so organisiert, daß der Ausdruck relativ schnell geht.
Die Ausgabe mit dem Drucker läuft über ein User-Port-Kabel, die nötige Treibersoftware ist im Epson-Support schon enthalten. Der Ausdruck erfolgt in der sogenannten doppelten Zeichendichte, also mit 960 Punkten pro Zeile, aus Speichermangel können aber nur 800 Punkte pro Zeile verwendet werden. Listing 1 und Listing 2 sind zwei Beispielprogramme. Als Ergebnis liefern sie Bild 1 und Bild 2. Bevor Sie diese Beispiele probieren, muß das Listing 3 mit dem MSE (siehe Seite 7) eingegeben werden und mit SYS 49152 initialisiert werden.


Epson-Support Bedienungsanleitung
Das Programm Epson-Support wird absolut geladen mit LOAD"EPSON-SUPPORT",8,1 und durch SYS 49152 gestartet. Dem Basic-Programmierer stehen dann einige neue Befehle zur Verfügung, um die grafischen Fähigkeiten des Epson-Druckers besser auszunutzen, denn im Speicher des C 64 wird eine Grafik-Bitmap von 800 x 552 Punkten verwaltet. Die Auflösung ist also wesentlich höher als bei normalen Bildschirm-Grafiken.
Die einzelnen Befehle werden im folgenden erläutert:
&CLEAR**
Damit wird die Grafik-Bitmap gelöscht. Dieser Befehl sollte unbedingt am Anfang eines jeden Programms stehen, sonst stehen in der Bitmap wirre Muster.
&DOTX,Y
Dieser Befehl setzt einen Punkt an der Position (X,Y). Der X-Wert liegt zwischen 0 (links) und799 (rechts), der Y-Wert zwischen 0(oben) und551 (unten). Für X und Y kann ein beliebiger numerischer Basic-Ausdruck stehen;
&RESETDOTX,Y
Dieser Befehl löscht einen Punkt an der Position (X,Y). Der X-Wert liegt zwischen 0 (links) und 799 (rechts), der Y-Wert zwischen 0 (oben) und 551 (unten). Für X und Y kann ein beliebiger numerischer Basic-Ausdruck stehen.
&INVDOT X,Y
Dieser Befehl invertiert einen Punkt an der Position (X,Y). Der X-Wert liegt zwischen 0 (links) und 799 (rechts), der Y-Wert zwischen 0 (oben) und 551 (unten). Für X und Y kann ein beliebiger numerischer Basic-Ausdruck stehen.
&LINE X1,Y1,X2,Y2
Dieser Befehl zieht eine Linie zwischen den Punkten (X1 ,Y1) und (X2,Y2). Der Wertebereich der Koordinaten ist der gleiche wie bei den Dot-Befehlen. Für die Parameter können beliebige Basic-Ausdrücke stehen.
&RESETLINE X1,Y1,X2,Y2
Dieser Befehl löscht eine Linie zwischen den Punkten (X1,Y1) und (X2,Y2). Der Wertbereich der Koordination ist der gleiche wie bei den Dot-Befehlen. Für die Parameter können beliebige Basic-Ausdrücke stehen.
&INVLINE X1,Y1,X2,Y2
Dieser Befehl invertiert die Punkte einer Linie zwischen den Punkten (X1,Y1) und (X2,Y2). Der Wertebereich der Koordinaten ist wiederum der gleiche wie bei den Dot-Befehlen. Für die Parameter können beliebige Basic-Ausdrücke stehen.
&SCANLINE X1,Y1,X2,Y2
Dieser Befehl setzt eine Linie zwischen den Punkten (X1,Y1) und (X2,Y2). Falls jedoch auf einen schon gesetzten Punkt auf dem Linienzug getroffen wird, so wird nicht mehr weitergezeichnet. Der Wertebereich der Koordinaten ist der gleiche wie bei den Dot-Befehlen. Für die Parameter können beliebige Basic-Ausdrücke stehen.
Durch diesen Befehl wird die HiRes-Bitmap auf dem Drucker ausgegeben. Das Programm ist für Epson FX/RX-80-Drucker ausgelegt. Bei Verwendung eines anderen Druckers müssen einige Stellen im Assemblerlisting (Listing 4) beim &PRINT-Befehl geändert werden. Siehe dazu auch die Kommentare im Listing bei diesem Befehl.
&EXIT
Führt zum Verlassen von Epson-Support und bewirkt danach einen Basic-Neustart. Basic-Programme sollten vorher unbedingt abgespeichert sein, weil sie sonst gelöscht werden.
&TEXT X,Y,"blablabla…"
Dieser Befehl setzt den Text, welcher in Anführungszeichen steht, in die Bitmap an der Position (X,Y). Diese Position gibt die Koordinaten der linken unteren Ecke des ersten Buchstabens an.
&RESETTEXT, X,Y,"blablabla…"
Dieser Befehl löscht den Text, welcher in Anführungszeichen steht, in die Bitmap an der Position (X,Y). Diese Position gibt die Koordinaten der linken unteren Ecke des ersten Buchstabens an.
&INVTEXT X,Y,"blablabla…"
Dieser Befehl invertiert den Text, welcher in Anführungszeichen steht, in die Bitmap an der Position (X,Y). Diese Position gibt die Koordinaten der linken unteren Ecke des ersten Buchstabens an.
(Alexander Del Pino/gk)5 rem 6 rem demo1 - schnecke 7 rem (c)1985 by a.del pino 8 rem 10 &clear 15 d=~/120:dx=400:dy=276 16 sx=400/240:sy=276/240 20 fori=0to4*~step~/60 30 x1=sin(i)*dx:y1=cos(i)*dy 35 x2=sin(i+d)*dx:y2=cos(i+d)*dy 36 x1=x1+400:x2=x2+400:y1=y1+276:y2=y2+276 40 &line400,276,x1,y1 50 &linex1,y1,x2,y2 60 &linex2,y2,400,276 70 dx=dx-sx:dy=dy-sy 75 print"."; 80 next 90 &print:end
6 rem 7 rem demo2 - interferenz 8 rem (c)1985 by a.del pino 9 rem 10 &clear 20 fori=0to799step7 22 print"."; 30 &line400,0,i,552 35 &line400,552,i,0 40 next 50 fori=0to552step9 55 print"."; 60 &invtext356,i,"interferenz" 70 next 80 &print:end
PROGRAMM : EPSON SUPPORT C000 C54E ----------------------------------- C000 : A9 1D A0 C0 8D 08 03 8C B6 C008 : 09 03 A9 FE A0 1F 85 33 5C C010 : 84 34 85 37 84 38 A9 A4 F1 C018 : A0 C4 4C 1E AB 20 73 00 7B C020 : C9 26 F0 06 20 79 00 4C 60 C028 : E7 A7 A2 FF A0 00 8C 62 8C C030 : 03 E8 C8 BD D7 C4 F0 17 27 C038 : D1 7A F0 F5 E8 BD D7 C4 A6 C040 : D0 FA EE 62 03 A0 00 BD 46 C048 : D8 C4 D0 E5 4C 08 AF 88 48 C050 : 18 98 65 7A 85 7A 90 02 CF C058 : E6 7B A9 A7 48 A9 E9 48 65 C060 : AD 62 03 0A AA BD 31 C5 29 C068 : 48 BD 30 C5 48 4C 73 00 08 C070 : A9 00 A0 20 85 FB 84 FC 8A C078 : 78 A9 34 85 01 A0 00 98 C9 C080 : 91 FB C8 D0 FB E6 FC A6 93 C088 : FC E0 C0 D0 F3 A2 C8 86 C3 C090 : FC 91 FB C8 D0 FB E6 FC EF C098 : D0 F7 A9 37 85 01 58 60 38 C0A0 : A9 00 8D 62 03 20 4E C3 EB C0A8 : 8D 3C 03 8C 3D 03 20 4B A9 C0B0 : C3 C0 02 90 05 C9 28 90 C6 C0B8 : 01 60 8D 3E 03 8C 3F 03 AC C0C0 : A0 03 18 4E 3F 03 6E 3E F4 C0C8 : 03 88 D0 F6 18 AD 3E 03 10 C0D0 : 69 20 85 FC AD 3E 03 85 2E C0D8 : FB 0A 65 FC 85 FC A9 00 B8 C0E0 : 06 FB 2A 06 FB 2A 06 FB 50 C0E8 : 2A 06 FB 2A 06 FB 2A 65 0D C0F0 : FC 85 FC A5 14 29 07 AA 9F C0F8 : BD 88 C4 8D 63 03 AD 3C 5A C100 : 03 AC 3D 03 C0 03 90 05 7A C108 : C9 20 90 01 60 65 FB 85 52 C110 : FB 98 65 FC C9 C0 90 02 39 C118 : 69 07 85 FC 78 A9 34 85 B6 C120 : 01 A0 00 2C 62 03 10 1C AE C128 : 50 10 AD 63 03 A2 00 31 00 C130 : FB F0 01 CA 8E 62 03 4C DE C138 : 59 C1 AD 63 03 51 FB 91 17 C140 : FB 4C 59 C1 50 0C AD 63 D3 C148 : 03 49 FF 31 FB 91 FB 4C EB C150 : 59 C1 AD 63 03 11 FB 91 2D C158 : FB A9 37 85 01 58 60 78 EC C160 : A9 FF 8D 03 DD AD 02 DD DC C168 : 09 04 8D 02 DD AD 00 DD 1E C170 : 09 04 8D 00 DD A9 10 8D 65 C178 : 0D DD AD 0D DD 58 A2 05 B6 C180 : BD 90 C4 20 F1 C1 CA 10 33 C188 : F7 A9 00 A0 20 85 FB 84 8F C190 : FC A9 00 85 FD A2 00 BD 82 C198 : 96 C4 20 F1 C1 E8 E0 0E DA C1A0 : D0 F5 A2 00 20 C7 C1 E8 2D C1A8 : D0 FA 20 C7 C1 E8 D0 FA 93 C1B0 : 20 C7 C1 E8 D0 FA 20 C7 36 C1B8 : C1 E8 E0 20 D0 F8 E6 FD 96 C1C0 : A5 FD C9 45 D0 CF 60 78 7D C1C8 : A9 34 85 01 18 A5 FB 69 7E C1D0 : 00 85 FE A5 FC 69 08 85 4D C1D8 : FF A0 00 A5 FC C9 C0 B0 5F C1E0 : 03 B1 FB 2C B1 FE E6 FB E7 C1E8 : D0 02 E6 FC A0 37 84 01 EA C1F0 : 58 8D 01 DD AD 00 DD 29 AF C1F8 : FB 8D 00 DD 09 04 8D 00 5D C200 : DD AD 0D DD 29 10 F0 F9 7E C208 : 18 60 A9 00 8D 62 03 A9 06 C210 : 00 8D 6B 03 20 4E C3 8D B1 C218 : 50 03 8C 51 03 20 4B C3 1D C220 : 8D 52 03 8C 53 03 20 4B 8D C228 : C3 8D 54 03 8C 55 03 20 E7 C230 : 4B C3 8D 56 03 8C 57 03 83 C238 : A2 01 A0 00 38 AD 54 03 CB C240 : ED 50 03 8D 5C 03 AD 55 07 C248 : 03 ED 51 03 8D 5D 03 10 E7 C250 : 18 CA CA 88 49 FF 8D 5D 16 C258 : 03 AD 5C 03 49 FF 8D 5C 2D C260 : 03 EE 5C 03 D0 03 EE 5D ED C268 : 03 8E 58 03 8C 59 03 A2 0E C270 : 01 A0 00 38 AD 56 03 ED 3E C278 : 52 03 8D 5E 03 AD 57 03 7C C280 : ED 53 03 8D 5F 03 10 18 08 C288 : CA CA 88 49 FF 8D 5F 03 F2 C290 : AD 5E 03 49 FF 8D 5E 03 42 C298 : EE 5E 03 D0 03 EE 5F 03 BB C2A0 : 8E 5A 03 8C 5B 03 A0 00 FE C2A8 : AD 5C 03 0D 5D 03 D0 01 19 C2B0 : 88 8C 60 03 8C 61 03 AD 32 C2B8 : 50 03 AC 51 03 8D 3C 03 73 C2C0 : 8C 3D 03 AD 52 03 AC 53 F8 C2C8 : 03 85 14 84 15 20 5F C4 7D C2D0 : 20 B1 C0 AD 50 03 CD 54 AC C2D8 : 03 D0 19 AD 51 03 CD 55 4E C2E0 : 03 D0 11 AD 52 03 CD 56 66 C2E8 : 03 D0 09 AD 53 03 CD 57 7F C2F0 : 03 D0 01 60 2C 61 03 10 A2 C2F8 : 29 18 AD 52 03 6D 5A 03 EE C300 : 8D 52 03 AD 53 03 6D 5B E7 C308 : 03 8D 53 03 18 AD 60 03 7E C310 : 6D 5C 03 8D 60 03 AD 61 B5 C318 : 03 6D 5D 03 8D 61 03 4C 12 C320 : B7 C2 18 AD 50 03 6D 58 78 C328 : 03 8D 50 03 AD 51 03 6D B3 C330 : 59 03 8D 51 03 38 AD 60 02 C338 : 03 ED 5E 03 8D 60 03 AD 6D C340 : 61 03 ED 5F 03 8D 61 03 B2 C348 : 4C B7 C2 20 FD AE 20 8A 0F C350 : AD 20 F7 B7 A5 14 A4 15 BA C358 : 60 A9 40 4C A2 C0 A9 80 FE C360 : 4C A2 C0 A9 40 4C 0C C2 7F C368 : A9 80 4C 0C C2 A0 A7 A9 09 C370 : E4 8D 08 03 8C 09 03 38 0B C378 : 20 99 FF 86 37 84 38 4C 47 C380 : 9A E3 A9 80 2C A9 40 2C F0 C388 : A9 00 8D 62 03 20 4E C3 D3 C390 : 8D 50 03 8C 51 03 20 4B DC C398 : C3 8D 52 03 8C 53 03 20 C7 C3A0 : 40 C4 D0 01 60 8D 6A 03 B9 C3A8 : 8C 69 03 AC 69 03 B1 64 7D C3B0 : C9 20 90 0B C9 40 90 09 02 C3B8 : C9 60 B0 03 29 1F 2C A9 CD C3C0 : 20 85 02 A9 1A 06 02 2A 87 C3C8 : 06 02 2A 06 02 2A 85 03 A8 C3D0 : 78 A9 31 85 01 A0 07 B1 AE C3D8 : 02 99 00 02 88 10 F8 A9 27 C3E0 : 37 85 01 58 A9 00 8D 67 C5 C3E8 : 03 A9 07 8D 68 03 AE 68 5E C3F0 : 03 BD 00 02 AE 67 03 3D BF C3F8 : 88 C4 F0 1E AD 50 03 AC A5 C400 : 51 03 8D 3C 03 8C 3D 03 4D C408 : AC 53 03 AD 68 03 18 6D AE C410 : 52 03 85 14 90 01 C8 20 3C C418 : B1 C0 CE 68 03 10 CF EE B8 C420 : 50 03 D0 03 EE 51 03 EE EA C428 : 67 03 AE 67 03 E0 08 D0 A2 C430 : B8 EE 69 03 AD 69 03 CD E8 C438 : 6A 03 D0 01 60 4C AB C3 17 C440 : 20 FD AE 20 9E AD 20 A3 2E C448 : B6 A0 00 B1 64 85 63 C8 16 C450 : B1 64 AA C8 B1 64 85 65 16 C458 : 86 64 A0 00 A5 63 60 2C 88 C460 : 6B 03 30 01 60 A2 F0 8E 75 C468 : 62 03 20 B1 C0 AD 52 03 53 C470 : AC 53 03 85 14 2C 62 03 6A C478 : 10 03 68 68 60 A2 00 8E 69 C480 : 62 03 60 A9 FF 4C 11 C2 DD C488 : 80 40 20 10 08 04 02 01 DD C490 : 0D 08 41 1B 38 1B 0A 0D F4 C498 : 20 20 20 20 20 20 20 1B 8E C4A0 : 2A 01 20 03 45 50 53 4F 76 C4A8 : 4E 2D 53 55 50 50 4F 52 76 C4B0 : 54 20 20 56 31 2E 37 20 89 C4B8 : 20 2A 2A 2A 0D 20 20 31 72 C4C0 : 39 38 35 20 56 4F 4E 20 C0 C4C8 : 41 4C 45 58 20 44 45 4C 5E C4D0 : 20 50 49 4E 4F 0D 00 43 18 C4D8 : 4C 45 41 52 00 44 4F 54 6A C4E0 : 00 52 45 53 45 54 44 4F 6C C4E8 : 54 00 49 4E 56 44 4F 54 C6 C4F0 : 00 4C 49 4E 45 00 52 45 5B C4F8 : 53 45 54 4C 49 4E 45 00 A9 C500 : 49 4E 56 4C 49 4E 45 00 AC C508 : 99 00 45 58 49 54 00 54 DE C510 : 45 58 54 00 49 4E 56 54 A0 C518 : 45 58 54 00 52 45 53 45 C6 C520 : 54 54 45 58 54 00 53 43 14 C528 : 41 4E 4C 49 4E 45 00 00 DC C530 : 6F C0 9F C0 58 C3 5D C3 A0 C538 : 09 C2 62 C3 67 C3 5E C1 45 C540 : 6C C3 87 C3 81 C3 84 C3 B8 C548 : 82 C4 00 00 C9 00 73
.BA $C000 ;PC SETZEN
;***********************************
; E P S O N - S U P P O R T
;
;VERSION 1.7 (C)1984 BY A.DEL PINO
;
;***********************************
;
;VARIABLEN & SYSTEMADRESSEN
;
HELP = $033C
YVALUE = $14
XVALUE = $033C
X1 = $0350
Y1 = X1+2
X2 = X1+4
Y2 = X1+6
XSTEP = X1+8
YSTEP = X1+10
XDIFF = X1+12
YDIFF = X1+14
SUM = X1+16
XMAX = 800
YMAX = 552
DISABLE = $34 ;ROM AUSBLENDEN
ENABLE = 55 ;ROM EINBLENDEN
FLAG = X1+18
BITPOS = X1+19
FLAG1 = X1+23
FLAG2 = X1+24
FLAG3 = X1+25
LENGH = X1+26
LINETYP = X1+27
;
;PROGRAMMSTART, ZEIGER VERBIEGEN
;
LDA #<ESUP
LDY #>ESUP
STA $0308
STY $0309
LDA #<8190
LDY #>8190
STA $33
STY $34
STA $37
STY $38
;
;PROMPT AUSGEBEN
;
LDA #<PROMPT
LDY #>PROMPT
JMP $AB1E
;
;BASIC-TOKEN ERKENNEN
;
ESUP JSR $73
CMP #'&'
BEQ SUPPORT
JSR $79
JMP $A7E7
SUPPORT LDX #$FF
LDY #0
STY FLAG
SLOOP INX
INY
LDA @STMTAB,X
BEQ NEWSTMT
CMP ($7A),Y
BEQ SLOOP
NXT INX
LDA @STMTAB,X
BNE NXT
INC FLAG
LDY #0
LDA @STMTAB+1,X
BNE SLOOP
JMP $AF08
NEWSTMT DEY
CLC
TYA
ADC $7A
STA $7A
BCC L1
INC $7B
;
;RETURN-ADRESSE AUF DEN STACK
;
L1 LDA #$A7
PHA
LDA #$E9
PHA
LDA FLAG
ASL
TAX
LDA @ENTRY+1,X
;
;ADRESSE DES NEUEN BEFEHLS AUF DEN STACK
PHA
LDA @ENTRY,X
PHA
JMP $73
;
;HIER SIND DIE NEUEN BEFEHLE...
;
;**************************
;
; &CLEAR
;
;**************************
CLEAR LDA #<8192
LDY #>8192
STA $FB
STY $FC
SEI
LDA #DISABLE
STA 1
LDY #0
TYA
CL1 STA ($FB),Y
INY
BNE CL1
INC $FC
LDX $FC
CPX #$C0
BNE CL1
LDX #$C8
STX $FC
CL2 STA ($FB),Y
INY
BNE CL2
INC $FC
BNE CL2
LDA #ENABLE
STA 1
CLI
RTS
;**************************
;
; DOT - BEFEHLE
;
;**************************
DOT LDA #0
STA FLAG
JSR VALUE+3
STA XVALUE
STY XVALUE+1
JSR VALUE
WORKDOT CPY #>YMAX
BCC SE1
CMP #<YMAX
BCC SE1
RTS
;
;ADRESSE DES PUNKTES BERECHNEN
;
SE1 STA @HELP+2
STY @HELP+3
LDY #3
SE2 CLC
LSR @HELP+3
ROR @HELP+2
DEY
BNE SE2
CLC
LDA @HELP+2
ADC #>8192
STA $FC
LDA @HELP+2
STA $FB
ASL
ADC $FC
STA $FC
LDA #0
ASL $FB
ROL
ASL $FB
ROL
ASL $FB
ROL
ASL $FB
ROL
ASL $FB
ROL
ADC $FC
STA $FC
SE4 LDA $14
AND #7
TAX
LDA @BIT,X
STA BITPOS
LDA XVALUE
LDY XVALUE+1
CPY #>XMAX
BCC SE5
CMP #<XMAX
BCC SE5
RTS
SE5 ADC $FB
STA $FB
TYA
ADC $FC
CMP #$C0
BCC SE6
ADC #7
SE6 STA $FC
SEI
;
;ROM AUSBLENDEN
;
LDA #DISABLE
STA 1
LDY #0
BIT FLAG
BPL DOT0X
BVC INVERT
;
;PUNKT TESTEN 'BITTEST'
;
LDA BITPOS
LDX #0
AND ($FB),Y
BEQ TS1
DEX
TS1 STX FLAG
JMP ENDDOT
;
;PUNKT INVERTIEREN
;
INVERT LDA BITPOS
EOR ($FB),Y
STA ($FB),Y
JMP ENDDOT
DOT0X BVC SET
;
;PUNKT ZURUECKSETZEN
;
LDA BITPOS
EOR #$FF
AND ($FB),Y
STA ($FB),Y
JMP ENDDOT
;
;PUNKT SETZEN
;
SET LDA BITPOS
ORA ($FB),Y
STA ($FB),Y
ENDDOT LDA #ENABLE
STA 1
CLI
RTS
;**************************
;
; &PRINT
;
;**************************
;USERPORT-INTERFACE DURCH GEEIGNTES
;SETZEN DER PORTBAUSTEIN-REGISTER
;INITIALISIEREN. BEI DRUCKERN AM SERIELLEN BUS MUSS
;HIER EIN FILE AUF DEN DRUCKER EROEFFNET WERDEN.
HARDCOPY SEI
LDA #$FF
STA $DD03
LDA $DD02
ORA #4
STA $DD02
LDA $DD00
ORA #4
STA $DD00
LDA #$10
STA $DD0D
LDA $DD0D
CLI
;STEUERCODES FUER EPSON RX-80 AUSGEBEN
LDX #5
HC0 LDA @TABLE1,X
JSR CWROUT
DEX
BPL HC0
LDA #<8192
LDY #>8192
STA $FB
STY $FC
LDA #0
STA $FD
;STEUERCODES FUER NEUE GRAFIKZEILE AUSGEBEN
HC1 LDX #0
LDA @TABLE2,X
JSR CWROUT
INX
CPX #14
BNE HC1+2
;EINE GRAFIKZEILE (8*800 DOTS) AUSGEBEN
LDX #0
HC2 JSR WROUT
INX
BNE HC2
HC3 JSR WROUT
INX
BNE HC3
HC4 JSR WROUT
INX
BNE HC4
HC5 JSR WROUT
INX
CPX #<XMAX
BNE HC5
INC $FD
LDA $FD
CMP #69
BNE HC1
RTS
;ROM AUSBLENDEN
WROUT SEI
LDA #DISABLE
STA 1
;ADRESSE DES AUSZUGEBENDEN PUNKTES BERECHNEN
CLC
LDA $FB
ADC #<$800
STA $FE
LDA $FC
ADC #>$800
STA $FF
LDY #0
LDA $FC
CMP #$C0
BCS WR1
LDA ($FB),Y
.BY $2C
WR1 LDA ($FE),Y
INC $FB
BNE WR2
INC $FC
;ROM WIEDER EINBLENDEN
WR2 LDY #ENABLE
STY 1
CLI
;GEBE ASCII-ZEICHEN IM ACCU AUS
;BEI DRUCKERN MIT SERIELLER SCHNITTSTELLE
;MUSS HIER 'JMP $FFD2' STEHEN
;UND DANACH AUCH EIN 'RTS'
CWROUT STA $DD01
LDA $DD00
AND #$FB
STA $DD00
ORA #4
STA $DD00
WAIT LDA $DD0D
AND #$10
BEQ WAIT
CLC
RTS
;**************************
;
; LINE-BEFEHLE
;
;**************************
LINE LDA #0
STA FLAG
LDA #0
STA LINETYP
JSR VALUE+3
STA X1
STY X1+1
JSR VALUE
STA Y1
STY Y1+1
JSR VALUE
STA X2
STY X2+1
JSR VALUE
STA Y2
STY Y2+1
LDX #1
LDY #0
SEC
LDA X2
SBC X1
STA XDIFF
LDA X2+1
SBC X1+1
STA XDIFF+1
BPL LI1
DEX
DEX
DEY
EOR #$FF
STA XDIFF+1
LDA XDIFF
EOR #$FF
STA XDIFF
INC XDIFF
BNE LI1
INC XDIFF+1
LI1 STX XSTEP
STY XSTEP+1
LDX #1
LDY #0
SEC
LDA Y2
SBC Y1
STA YDIFF
LDA Y2+1
SBC Y1+1
STA YDIFF+1
BPL LI2
DEX
DEX
DEY
EOR #$FF
STA YDIFF+1
LDA YDIFF
EOR #$FF
STA YDIFF
INC YDIFF
BNE LI2
INC YDIFF+1
LI2 STX YSTEP
STY YSTEP+1
LDY #0
LDA XDIFF
ORA XDIFF+1
BNE LI3
DEY
LI3 STY SUM
STY SUM+1
LI4 LDA X1
LDY X1+1
STA XVALUE
STY XVALUE+1
LDA Y1
LDY Y1+1
STA YVALUE
STY YVALUE+1
JSR SCANN
JSR WORKDOT
LDA X1
CMP X2
BNE LI5
LDA X1+1
CMP X2+1
BNE LI5
LDA Y1
CMP Y2
BNE LI5
LDA Y1+1
CMP Y2+1
BNE LI5
RTS
LI5 BIT SUM+1
BPL LI6
CLC
LDA Y1
ADC YSTEP
STA Y1
LDA Y1+1
ADC YSTEP+1
STA Y1+1
CLC
LDA SUM
ADC XDIFF
STA SUM
LDA SUM+1
ADC XDIFF+1
STA SUM+1
JMP LI4
LI6 CLC
LDA X1
ADC XSTEP
STA X1
LDA X1+1
ADC XSTEP+1
STA X1+1
SEC
LDA SUM
SBC YDIFF
STA SUM
LDA SUM+1
SBC YDIFF+1
STA SUM+1
JMP LI4
VALUE JSR $AEFD
JSR $AD8A
JSR $B7F7
LDA $14
LDY $15
RTS
;FLAG SETZEN FUER MODIFIZIERTEN PUNKT- UND LINIEN-FUNKTIONEN
RESETDOT LDA #$40
JMP DOT+2
INVERTDOT LDA #$80
JMP DOT+2
RESETLINE LDA #$40
JMP LINE+2
INVERTLINELDA #$80
JMP LINE+2
;**************************
;
; &EXIT
;
;**************************
;ZEIGER WIEDER 'GERADEBIEGEN'
EXIT LDY #$A7
LDA #$E4
STA $0308
STY $0309
SEC
JSR $FF99
STX $37
STY $38
JMP $E39A ;SYSTEM AUFRUFEN
; TEXT-BEFEHLE, FLAG SETZEN
INVTEXT LDA #$80
.BY $2C
RESTEXT LDA #$40
.BY $2C
TEXT LDA #0
STA FLAG
JSR VALUE+3
STA X1
STY X1+1
JSR VALUE
STA Y1
STY Y1+1
JSR STRING
BNE TXT1
RTS
TXT1 STA LENGH
STY FLAG3
TXT2 LDY FLAG3
LDA ($64),Y
CMP #$20
BCC TXT3
CMP #$40
BCC TXT3+2
CMP #$60
BCS TXT3
AND #$1F
.BY $2C
TXT3 LDA #$20
STA 2
LDA #$1A
ASL 2
ROL
ASL 2
ROL
ASL 2
ROL
STA 3
SEI
LDA #$31
STA 1
LDY #7
TXT4 LDA (2),Y
STA $200,Y
DEY
BPL TXT4
LDA #ENABLE
STA 1
CLI
LDA #0
STA FLAG1
TXT5 LDA #7
STA FLAG2
TXT6 LDX FLAG2
LDA $200,X
LDX FLAG1
AND @BIT,X
BEQ TXT8
LDA X1
LDY X1+1
STA XVALUE
STY XVALUE+1
LDY Y1+1
LDA FLAG2
CLC
ADC Y1
STA $14
BCC TXT7
INY
TXT7 JSR WORKDOT
TXT8 DEC FLAG2
BPL TXT6
INC X1
BNE TXT9
INC X1+1
TXT9 INC FLAG1
LDX FLAG1
CPX #8
BNE TXT5
INC FLAG3
LDA FLAG3
CMP LENGH
BNE TXT10
RTS
TXT10 JMP TXT2
STRING JSR $AEFD
JSR $AD9E
JSR $B6A3
LDY #0
LDA ($64),Y
STA $63
INY
LDA ($64),Y
TAX
INY
LDA ($64),Y
STA $65
STX $64
LDY #0
LDA $63
RTS
SCANN BIT LINETYP
BMI SCA1
RTS
SCA1 LDX #$F0
STX FLAG
JSR WORKDOT
LDA Y1
LDY Y1+1
STA $14
BIT FLAG
BPL SCA2
PLA
PLA
RTS
SCA2 LDX #0
STX FLAG
RTS
SCANNLN LDA #$FF
JMP LINE+7
;**************************
;
; D A T E N B E R E I C H
;
;**************************
BIT .BY 128 64 32 16 8 4 2 1
TABLE1 .BY 13 8 'A' 27 '8' 27
TABLE2 .BY 10 13 ' ' 27 '*' 1 XMAX
PROMPT .BY 'EPSON-SUPPORT V1.7 ***' 13
.BY '(C)1984 BY ALEX DEL PINO' 13 0
STMTAB .BY 'CLEAR' 0
.BY 'DOT' 0
.BY 'RESETDOT' 0
.BY 'INVDOT' 0
.BY 'LINE' 0
.BY 'RESETLINE' 0
.BY 'INVLINE' 0
.BY 153 0
.BY 'EXIT' 0
.BY 'TEXT' 0
.BY 'INVTEXT' 0
.BY 'RESETTEXT' 0
.BY 'SCANLINE' 0 0
ENTRY .BY CLEAR-1 DOT-1 RESETDOT-1 INVERTDOT-1
.BY LINE-1 RESETLINE-1 INVERTLINE-1 HARDCOPY-1 EXIT-1
.BY TEXT-1 INVTEXT-1 RESTEXT-1 SCANNLN-1
.EN ;END OF SOURCE-FILE
READY.