LX400 ASM ; Centronics-Treiber LX400.KCC ; ;- USER-Kanal 1 (BASIC: #2) ;- Mit Grauwert-Druck ;- f}r KC85/2 bis KC85/4 ! ;- verschieblich ;- F}r Modul M021 (Joy+Cen) ;- gleichzeitiger Joystickbetrieb ; m|glich mit neuem JOYS.KCC ;- Adressen: 0000 04B0 000A ; ;Aufruf: ;------- ; %LX400 (ohne Ver{nderung) ; %LX400 p ; ; mit p=Reaktion auf SHIFT-CLR: ; 0 -> keine Reaktion ; 1 -> Protokollfunktion ; 2 -> Screencopy mit Pseudograf. ; 3 -> Hardcopy klein positiv ; 4 -> Hardcopy klein negativ ; 5 -> Hardcopy s/w positiv ; 6 -> Hardcopy s/w negativ ; 7 -> Hardcopy grau positiv ; 8 -> Hardcopy grau negativ ; ;LX400.ASM ` ml 21.03.93 ;--------------------------------------- ARGN EQU 0B781H HCADR EQU 0B799H STBT EQU 0B7A2H CCTL0 EQU 0B7A6H CCTL1 EQU 0B7A8H CCTL2 EQU 0B7AAH CCTL3 EQU 0B7ACH OUTAB EQU 0B7B9H UOUT1 EQU 0B7BEH VRAM EQU 0B7CBH HCPZ EQU 0B7E1H PV1 EQU 0F003H CRT EQU 00H UOT1 EQU 02H WAIT EQU 14H ERRM EQU 19H MODU EQU 26H PADR EQU 34H UREL EQU 0F00FH ;------- PIOAD EQU 90H ;PIO A Daten PIOBD EQU 91H ;PIO B Daten PIOAS EQU 92H ;PIO A Steuer PIOBS EQU 93H ;PIO B Steuer ;------- LF EQU 0AH CR EQU 0DH ESC EQU 1BH ;------- ORG 0 ; ;Initialisierungsdaten PIO-A ; INTAB: DB 0CFH ;Bitbetrieb DB 7FH ;Bit 7 Ausg. ; ;Initialisierungsdaten PIO-B ; DB 0CFH ;Bitbetrieb DB 0 ;alles Ausg. DB 3 ;DI ; NOP ;frei ; ;Initialisierungswert f}r HCPZ: ; HCIN: DB 1 ;Protokoll ;Einstellung: ;----------- ;Bit 0 Protokoll ein/aus ;Bit 1 Screencopy ein/aus ;Bit 2 Hardcopy ein/aus ;Bit 3 Zeichen Psedografik/ ; Druckercode ;Bit 4 Z.>80H Druckercode/ ; Pseudografik ;Bit 5 mit/ohne Grauwerte ;Bit 6 Druck positiv/negativ ;Bit 7 Gro~- / Kleinformat ; LAST: DB 0 ;letztes Zeich. ; NULL: DB CRT ZWEI: DB UOT1 ;------- START: LD HL,HCIN-#-8 CALL UREL DW RELAD-#-2 LD A,(HL) JR INIT ;------- DW 7F7FH DB 'LX400' DB 1 LD A,(ARGN) AND A JR Z,LX4 ;0 ARG DEC A JR Z,LX1 ;1 ARG ERR: CALL PV1 DB ERRM RET LX1: LD A,(HCPZ) LD B,18H AND B ;Reset LD B,A ;Option LD A,L ;ARG1 CP 9 JR NC,ERR ;>8 -> ERROR AND A JR Z,LX3 ;0 -> keine Fkt. SET 0,B DEC A JR Z,LX3 ;1 -> Protokoll SET 1,B DEC A JR Z,LX3 ;2 -> Screencopy SET 2,B DEC A SRL A JR NC,LX2 SET 6,B ;negativ LX2: AND A JR Z,LX3 ;3,4 -> HC klein SET 7,B ;gro~ DEC A JR Z,LX3 ;5,6 -> HC s/w SET 5,B ;grau LX3: LD A,B INIT: LD (HCPZ),A LX4: CALL UREL ;Pointer DW PTR-#-2 ;setzen LD A,(HCPZ) BIT 0,A ;aktiv? JR Z,LX5 LD HL,HCOPY-#-8 CALL UREL DW RELAD-#-2 LD (HCADR),HL ;SH-CLR LX5: LD HL,INTAB-#-8 CALL UREL DW RELAD-#-2 DI LD B,2 LD C,PIOAS ;Init. OTIR ;PIO-A LD B,3 LD C,PIOBS ;Init. OTIR ;PIO-B LD A,80H ;STROBE OUT (PIOAD),A ;passiv EI IN A,(PIOAD) BIT 6,A ;BUSY? RET NZ ;ja LD B,6 CALL UREL ;Drucker DW PRZK-#-2 ;init. LD B,8 CALL UREL ;Cancel DW PRZK-#-2 RET ;------- ;Pointer r}cksetzen, kein Protokoll: ;VR: HL,DE ; PTR: LD HL,PRINT-#-8 CALL UREL DW RELAD-#-2 LD (UOUT1),HL LD HL,NULL-#-8 ;CRT CALL UREL DW RELAD-#-2 LD (OUTAB),HL RET ;------- ;Drucken einer Zeichenkette: ;PE: B Nummer der Kette ;VR: HL,DE,B,AF ; PRZK: LD HL,DTAB-#-8 CALL UREL DW RELAD-#-2 PRZ1: LD A,(HL) INC HL CP 0FFH ;Trennz? JR NZ,PRZ1 DJNZ PRZ1 PRZ2: LD A,(HL) INC HL CP 0FFH ;Trennz? RET Z CALL UREL DW PRCHR-#-2 JR PRZ2 ;------- ;Druckerausgabe ein Zeichen: ; PROTO: CALL PV1 DB CRT ;erst anzeigen PRINT: PUSH AF PUSH BC PUSH DE PUSH HL LD L,A LD A,(HCPZ) BIT 3,A ;Pseudografik ? JR Z,PRI1 ;nein LD A,L JR PRI4 PRI1: BIT 4,A ;>80H Pseudogr.? LD A,L JR NZ,PRI2 ;nein CP 80H JR NC,PRI4 ;>7FH PRI2: CP 20H JR C,PRI4 ;<20H LD HL,NTAB-#-8 CALL UREL DW RELAD-#-2 LD B,A PRI3: CP (HL) JR Z,PRI4 ;Pseudografik LD A,(HL) INC HL CP 0 LD A,B JR NZ,PRI3 JR PRI6 ;Druck Zeichen PRI4: CP 20H JR NC,PRI8 ;>1FH LD L,A LD A,(STBT) BIT 3,A ;ausf}hren ? LD A,L JR NZ,PRI7 ;anzeig. CP 9 JR NZ,PRI5 LD A,20H ;9->20H JR PRI6 ;Druck Zeichen PRI5: CP 0FH JR NZ,PRI6 LD HL,LAST-#-8 CALL UREL DW RELAD-#-2 LD A,M ;letzt. Zeichen CP ESC LD A,0FH JR Z,PRI6 ;ESC+0FH drucken POP AF POP HL POP DE POP BC RET PRI6: JR PRI19 ;Druck Zeichen ;Pseudografikzeichen drucken: PRI7: CP 20H JR NC,PRI8 ;>1FH LD DE,(CCTL1) LD B,0 JR PRI13 PRI8: CP 60H JR NC,PRI9 ;>5FH LD DE,(CCTL0) LD B,20H JR PRI13 PRI9: CP 80H JR NC,PRI10 LD DE,(CCTL1) LD B,40H JR PRI13 PRI10: CP 0A0H JR NC,PRI11 LD DE,(CCTL3) LD B,80H JR PRI13 PRI11: CP 0E0H JR NC,PRI12 LD DE,(CCTL2) LD B,0A0H JR PRI13 PRI12: LD DE,(CCTL3) LD B,0C0H JR PRI13 PRI13: EX DE,HL LD DE,8 SUB B JR Z,PRI15 PRI14: ADD HL,DE DEC A JR NZ,PRI14 PRI15: LD DE,0B700H LD BC,8 LDIR LD B,4 ;Init. CALL UREL ;Pseudo- DW PRZK-#-2 LD L,80H PRI16: LD DE,0B700H LD B,0 PRI17: LD A,(DE) AND L JR Z,PRI18 SCF PRI18: RL B INC DE LD A,8 CP E JR NZ,PRI17 LD A,B CALL UREL DW PRCHR-#-2 RRC L BIT 7,L JR Z,PRI16 XOR A PRI19: CALL UREL DW PRCHR-#-2 POP HL POP DE POP BC POP AF RET ;------- ;Ausgabe ein Zeichen zum M021: ;PE: A Code ;VR: - ; PRCHR: PUSH HL PUSH DE PUSH BC PUSH AF PRC1: IN A,(PIOAD) BIT 6,A ;BUSY? JR Z,PRC2 ;nein LD A,(HCADR+1) CP 80H ;IRM? JR C,PRC1 ;nein LD A,1 CALL PV1 DB WAIT JR PRC1 PRC2: POP AF PUSH AF OUT (PIOBD),A ;Zeichen LD HL,LAST-#-8 CALL UREL DW RELAD-#-2 LD M,A ;letzt. Zeichen XOR A OUT (PIOAD),A ;STROBE- LD A,80H OUT (PIOAD),A ;Impuls POP AF POP BC POP DE POP HL RET ;------- ;Aufruf durch SHIFT-CLR: ; HCOPY: PUSH HL PUSH DE PUSH BC PUSH AF EX AF,AF' PUSH AF LD A,(HCPZ) BIT 0,A JR Z,END1B BIT 1,A JR NZ,COPY ;------- ;Protokollfunktion: ; LD HL,(OUTAB) XOR A OR (HL) JR Z,PON ;-> ein CALL UREL DW PTR-#-2 ;-> aus JR END1B PON: LD HL,PROTO-#-8 CALL UREL DW RELAD-#-2 PUSH HL LD HL,ZWEI-RX CALL UREL DW RELAD-#-2 RX: POP DE LD (UOUT1),DE LD (OUTAB),HL END1B: JR END1 COPY: BIT 2,A JR NZ,HCPY ;Hardcopy ;------- ;Screencopy: ; LD A,(STBT) SET 3,A LD (STBT),A LD HL,0 LD D,0E0H PUSH DE CALL PV1 DB PADR POP AF CP D LD HL,0B200H ;KC85/3 JR NZ,SCR1 LD HL,(VRAM) ;KC85/4 SCR1: LD B,20H ;Zeilen SCR2: LD C,28H ;Spalten SCR3: LD A,(HL) INC HL AND A JR NZ,SCR4 ;00H LD A,20H SCR4: CALL UREL DW PRINT-#-2 DEC C JR NZ,SCR3 PUSH BC PUSH HL LD B,3 CALL UREL ;CR,LF DW PRZK-#-2 POP HL POP BC LD A,(IX+13) ;Taste CP 3 ;BRK? JR Z,SCR5 DJNZ SCR2 SCR5: LD A,(STBT) RES 3,A LD (STBT),A END2: LD B,6 CALL UREL ;Drucker DW PRZK-#-2 END1: POP AF EX AF,AF' POP AF POP BC POP DE POP HL RET HCPY: BIT 7,A JR NZ,HCGR1 ;gro~ ;------- ;Hardcopy klein: ; LD H,0 ;Pixelzeile 0 HCK1: PUSH HL LD B,2 CALL UREL DW PRZK-#-2 LD B,7 CALL UREL DW PRZK-#-2 POP HL LD L,0 ;Spalte 0 JR HCK2 END2B: JR END2 HCGR1: JR HCGR2 HCK2: LD B,8 PUSH HL LD DE,0B700H HCK3: PUSH HL PUSH DE LD D,0E0H CALL PV1 DB PADR ;Berechnen Padr. LD E,(HL) LD A,D CP 0E0H JR NZ,HCK4 ;kein KC85/4 BIT 3,(IX+1) JR NZ,HCK4 ;kein hi-res LD A,(IX+1) OR 2 OUT 84H,A ;Pixel LD A,(HL) OR E LD E,A LD A,(IX+1) OUT 84H,A ;original HCK4: LD A,E POP DE LD (DE),A INC DE POP HL INC H ;+1 Pixelzeile DJNZ HCK3 LD C,8 HCK5: LD B,8 LD HL,0B700H HCK6: RL (HL) RLA INC HL DJNZ HCK6 ;Wandlung LD HL,HCPZ BIT 6,(HL) ;negativ? JR Z,HCK7 CPL HCK7: CALL UREL DW PRCHR-#-2 ;Druck Z DEC C JR NZ,HCK5 POP HL INC L ;+1 Spalte LD A,28H CP L ;Zeilenende ? JR NZ,HCK2 LD A,(IX+13) CP 3 ;Taste BRK ? JR Z,HCK8 LD A,H ADD 8 ;+8 Pixelzeilen LD H,A JR NC,HCK1 HCK8: LD B,3 CALL UREL DW PRZK-#-2 END2C: JR END2B ;------- ;Hardcopy gro~: ; HCGR2: LD B,5 ;Drucker CALL UREL ;init. DW PRZK-#-2 LD (IX+0),33H LD E,0 HCG1: LD D,0FFH PUSH DE LD B,1 ;Drucker CALL UREL ;Grafik DW PRZK-#-2 POP DE HCG2: PUSH DE EX DE,HL LD D,0E0H SRL L EX AF,AF' CALL PV1 DB PADR PUSH DE CALL UREL DW PIX-#-2 POP DE LD C,A LD A,(HCPZ) BIT 5,A ;grau? LD A,D JR NZ,HCG5 CP 0E0H ;KC85/4? JR NZ,HCG3 BIT 3,(IX+1) ;hi-res? JR NZ,HCG3 LD A,(IX+1) OR 2 OUT 84H,A ;Pixel PUSH BC CALL UREL DW PIX-#-2 POP BC PUSH AF LD A,(IX+1) OUT 84H,A ;origin. POP AF OR C LD C,A HCG3: LD A,(HCPZ) BIT 6,A ;invers? LD A,C JR Z,HCG4 CPL HCG4: LD E,A JR HCG10B END2D: JR END2C HCG5: CP 0E0H ;KC85/4? LD A,(DE) LD B,A JR NZ,HCG8 ;KC85/3 LD A,(IX+1) OR 2 ;Pixel OUT 84H,A AND 8 JR NZ,HCG7 ;hi-res? PUSH BC CALL UREL DW PIX-#-2 POP BC LD E,A LD A,(IX+1) OUT 84H,A ;origin. LD A,55H AND E PUSH AF LD A,0AAH AND C LD C,A POP AF JR HCG6 HCG1B: JR HCG1 HCG2B: JR HCG2 HCG6: OR C LD C,A LD A,(HCPZ) BIT 6,A ;posit.? LD A,C JR NZ,HCG10 CPL PUSH AF LD A,E CPL LD E,A POP AF HCG10B: JR HCG10 HCG7: LD B,(HL) LD A,(IX+1) OUT 84H,A ;origin. JR HCG8 END2E: JR END2D HCG1C: JR HCG1B HCG8: LD A,(HCPZ) BIT 6,A LD A,B JR Z,HCG9 CPL HCG9: LD B,A LD HL,CTAB-#-8 CALL UREL DW RELAD-#-2 EX DE,HL AND 7 ADD A ADD A RRC (IX) LD H,0 LD L,A ADC HL,DE PUSH HL LD A,B AND 38H RRCA RRC (IX) LD H,0 LD L,A ADC HL,DE LD A,C AND (HL) LD E,A INC HL INC HL LD A,C AND (HL) LD D,A POP HL LD A,C CPL AND (HL) OR E LD E,A INC HL INC HL LD A,C CPL AND (HL) OR D HCG10: PUSH AF LD A,E CALL UREL ;Druck DW PRCHR-#-2 POP AF CALL UREL ;Druck DW PRCHR-#-2 POP DE XOR A CP D JR NC,HCG11 DEC D JR HCG2B HCG11: LD B,2 PUSH DE CALL UREL DW PRZK-#-2 POP DE INC E LD A,4FH CP E JR C,END2E LD A,(IX+13) ;Taste CP 3 ;BRK? JR NZ,HCG1C JR END2E ;------- ;Pixel zum Ausdruck vorbereiten: ; PIX: EX AF,AF' JR C,PIX1 RLD LD C,A RRD JR PIX2 PIX1: RRD LD C,A RLD PIX2: EX AF,AF' LD B,4 PIX3: RR C RRA SRA A DJNZ PIX3 RET ;------- ;rel. Adresse berechnen: ;PE: HL rel. Adresse ;PA: HL abs. Adresse ;VR: HL,DE ; RELAD: POP DE ;rel. Adresse PUSH DE ;berechnen ADD HL,DE RET ;------- DS 450H-$ ;frei ;------- ;Farbrastertabelle: ; CTAB: DW 0FFFFH ;Schwarz DW 0FFFFH DW 0BBEEH ;Blau DW 0FFFFH DW 0AAAAH ;Rot DW 077DDH DW 05555H ;Purpur DW 0AAAAH DW 0AAAAH ;Gr}n DW 01144H DW 0AAAAH ;T}rkis DW 00000H DW 02288H ;Gelb DW 00000H DW 00000H ;Wei~ DW 00000H ;------- ;Druckersteuerzeichenfolgen: ; DTAB: DB 0FFH ;Trennzeichen DB ESC DB '*' ;Grafik DB 5 ;72 Punkte/" DB 0 ;512 Sprossen DB 2 ;(Hardcopy gr.) ;2 DB 0FFH ;Trennzeichen DB CR ;neue Grafik- DB ESC ;Zeile DB 'J' ;Zeilenvorsch. DB 24 ;24/216" ;3 DB 0FFH ;Trennzeichen DB CR ;neue Text- DB LF ;Zeile ;4 DB 0FFH ;Trennzeichen DB ESC DB '*' ;Grafik DB 6 ;90 Punkte/" DB 9 ;9 Sprossen DB 0 ;(Pseudogr.) ;5 DB 0FFH ;Trennzeichen DB ESC DB '@' ;Druckerinit. ;6 DB 0FFH ;Trennzeichen DB ESC DB '@' ;Druckerinit. DB ESC DB 'l' ;linker Rand: DB 10 ;10 Zeichen DB ESC DB 'R' ;Zeichensatz DB 2 ;deutsch ;7 DB 0FFH ;Trennzeichen DB ESC DB '*' ;Grafik DB 5 ;72 Punkte/" DB 64 ;320 Sprossen DB 1 ;(Hardcopy kl.) ;8 DB 0FFH ;Trennzeichen DB 18H ;Cancel DB 7 ;Bell ; DB 0FFH ;Trennzeichen ;------- DS 4A0H-$ ;frei ;------- ;Tabelle der nicht im Druckerzeichen- ;satz enthaltenen Zeichen: ; NTAB: DB '@' ;40H DB '[' ;5BH DB '\' ;5CH DB ']' ;5DH DB '`' ;60H DB '' ;7FH DB 0 ;Abschlu~ ;---------------------- DS 4B0H-$ ;frei   NTA5BH DB '\' ;5CH DB ']' ;5DH DB '`' ;60H DB '' ;7FH DB 0 ;Abschlu~ ;---------------------- DS 4B0H-$ ;frei   NTA