Basic-Erweiterung

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.

Bild 1. Listing 1 liefert dieses Bild (hier verkleinert)
Bild 2. Listing 2 erzeugt dieses Bild (hier verkleinert)

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.

&PRINT

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
Listing 1. Demo-Programm »Schnecke«
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
Listing 2. Demo-Programm »Interferrenz«
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
Listing 3. Epson-Support muß mit dem MSE eingegeben werden.
          .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.
Listing 4. Der Source-Code zum Epson-Support
PDF Diesen Artikel als PDF herunterladen
Mastodon Diesen Artikel auf Mastodon teilen
← Vorheriger ArtikelNächster Artikel →