HP500C ASM; ;Centronics-Treiber nach Handbuch M001 ; ;+Druckertreiber f}r HP 500C ; ; von Hendrik Wagenknecht ; Ro~bachstra~e 55 ; 06112 Halle/Saale ; ` Oktober 1994 ; ;*************************************** ;Parameter bei HP500C ;HP500C bn ze sp af qu fa ; bn=Bildnummer bei bn=FF Eurolp ; ze=Bild ab Zeile ze ; sp=Bild ab Spalte sp ; af= 1..4 Aufl|sung ; 1 = 75 dpi ; 2 = 100 dpi ; 3 = 150 dpi ; 4 = 300 dpi ; qu=Qualit{t, 1=Draft, 0=Letter ; fa= 1, dann Farbdruck ; = 0, nur Pixeldruck s/w ;*************************************** ; ORG 01000H ;Systemadressen ARGN EQU 0B781H ARG1 EQU 0B782H ARG2 EQU 0B784H ARG3 EQU 0B786H ARG4 EQU 0B788H ARG5 EQU 0B78AH ARG6 EQU 0B78CH STBT EQU 0B7A2H OUTAB EQU 0B7B9H UOUT1 EQU 0B7BEH UOUT2 EQU 0B7C4H HCADR EQU 0B799H CRR EQU 0DH ; MKENN EQU 0EFH PIOA EQU 4 ;PIO A Daten PIOAC EQU 6 ;PIO A Steuerw. PIOB EQU 5 PIOBC EQU 7 REG EQU 0C000H REG7 EQU 0C749H ;Konstanten FARIY DW 02000H ;Farblagensp. HCPZ DEFB 0 ;USER Kanal 1 MOD DEFB 0CH ;Schacht 0C RAM DB 14H ;RAM-Schacht ;Variablen BIYT DB 0 ; BIT 0 = 1 Druckerres. vorh. ; BIT 1 = ; BIT 2 = ; BIT 3 = ; ; DEFW 07F7FH DEFM 'CENTRON' DEFB 1 CP 0 JR Z,START ; LD A,L LD (MOD),A LD A,E SUB 2 JR C,ERROR AND 1 LD (HCPZ),A ;Selbststartadresse ;*************************************** START LD A,(MOD) LD B,A LD C,80H IN A,(C) CP MKENN JR Z,ST1 ; ERROR CALL 0F003H DEFB 19H RET ; ST1 LD L,B LD D,1 LD A,2 CALL 0F003H DEFB 26H LD A,0FFH OUT PIOAC,A LD A,0 OUT PIOAC,A LD A,0FFH OUT PIOBC,A LD A,4 OUT PIOBC,A LD A,1 OUT PIOB,A LD A,(ARGN) CP 3 JR NZ,SA ; LD HL,(ARG3) LD A,L CP 1 JR NZ,SB ; SA LD HL,HCOP LD (HCADR),HL SB PUSH HL PUSH DE JR HACO1 ; ZWEI DEFB 2 DREI DEFB 3 ; ;HCOP ;Protokoll }ber SHIFT+CLR ;Bildschirmausdruck HCOP PUSH HL PUSH DE LD HL,(OUTAB) INC (HL) DEC (HL) JR NZ,HACO1 ; LD DE,PROT LD HL,ZWEI LD A,(HCPZ) AND A JR Z,HACO3 ; LD HL,DREI HACO3 LD A,(HCPZ) AND A JR Z,HACO2 LD (UOUT2),DE JR HACO4 ; HACO2 LD (UOUT1),DE HACO4 LD (OUTAB),HL HAPOP POP DE POP HL RET ; HACO1 LD HL,ZCRT LD DE,SDD JR HACO3 ;Protokollausgabe PROT PUSH AF CALL 0F003H ZCRT DEFB 0 POP AF ;Zeichenausgabe Zeichen in A SDD PUSH AF LD A,(STBT) BIT 3,A JR Z,SD9 POP AF CP 7FH JR NZ,SD1 SD4 LD A,20H JR SD1 ; SD9 POP AF ; ;Direkte Byteausgabe SD1 PUSH BC PUSH AF ; SDA IN A,PIOB BIT 2,A JR NZ,SDA ; SDB POP AF PUSH AF OUT PIOA,A LD A,0 OUT PIOB,A LD A,1 OUT PIOB,A POP AF POP BC RET ; ;Testprogramm f}r HP500C ;Grafikmodus ; - ohne Initialisierung des M001 ; DRAM DEFW 08000H PRAM DEFW 08000H BITS DEFW 07F37H ;Speicheradresse CLSB DEFB 0 ;{userste linke Drukposition LPGON DEFM '*r1A' DEFB 0 ;Ende des Grafikmodus GOFF DEFM '*rbC' DEFB 0 ;Aufl|sung 75dpi A75 DEFM '*t75R' DEFB 0 ;100dpi A2 DEFM '*t100R' DEFB 0 ;150dpi A3 DEFM '*t150R' DEFB 0 ;300dpi A4 DEFM '*t300R' DEFB 0 ;3 Farbebenen RGB-Palette RGB DEFM '*r3U' DB 0 ;schwarz/wei~ Grafiken SW DEFM '*r1U' DB 0 ;}bertragen von Grafiken ;Achtung! Die Daten m}ssen im Anschlu~ ;folgen GUB DEFM '*b40W' DEFB 0 ;Grafikdaten in Lagen (f}r Farbe!) ;Achtung! Die Daten m}ssen im Anschlu~ ;folgen! LAG DEFM '*b40V' DB 0 ;Anzahl der Pixel in einer Zeile BREIT DEFM '*r320S' DB 0 ;Qualit{t DRAF DEFM '*r1Q' DB 0 ; LETT DEFM '*r2Q' DB 0 ;Grafik versetzt GVER DEFM '*o2Q' DB 0 ; GVER0 DEFM '*o0Q' DB 0 ;Grafik heller GHEL DEFM '*o4Q' DB 0 ; GHEL0 DEFM '*o0Q' DB 0 ; STOUT LD A,1BH PUSH HL CALL 0F003H DB 2 POP HL STOA LD A,M CP 0 RET Z PUSH AF PUSH HL CALL 0F003H DEFB 2 POP HL POP AF INC HL JR STOA ; ;UOUT UOUT PUSH BC PUSH HL CALL 0F003H DEFB 2 POP HL POP BC RET ; DOUT LD HL,(PRAM) LD B,40 DOUA LD A,M CALL UOUT PUSH BC POP BC INC H DJNZ DOUA ; DOUB PUSH DE EX DE,HL LD HL,(DRAM) LD D,H EX DE,HL POP DE INC L LD (PRAM),HL RET ; GD LD B,0 LD HL,(DRAM) LD (PRAM),HL ; GDA PUSH BC LD HL,GUB CALL STOUT CALL DOUT POP BC DJNZ GDA RET ;ZEI ;Bild ab Zeile n ; E=n ZEI LD A,(ARGN) AND 2 CP 2 RET NZ ; ZE LD B,E LD A,0 CP B RET Z LD C,0AH ZEA LD A,C CP 0 RET Z PUSH BC CALL 0F003H DEFB 2 POP BC DJNZ ZEA RET ;SPA ;Bild ab Spalte n ; C=n SPA LD A,(ARGN) AND 3 CP 3 RET NZ ; SPB LD B,C LD A,0 CP B RET Z LD C,20H JR ZEA ; RESET LD A,27 CALL 0F003H DEFB 2 LD A,45H CALL 0F003H DEFB 2 RET ; ;DR1 DR1 AND 1 CP 1 JR NZ,DD LD (DRAM),HL ; DD PUSH BC PUSH DE CALL RESET POP DE CALL ZEI POP BC CALL SPA RET ;DR2 DR2 CALL STOUT LD HL,SW CALL STOUT LD HL,LPGON CALL STOUT CALL GD LD HL,GOFF CALL STOUT RET ; CLS LD A,12 CALL 0F003H DEFB 2 CALL 0F003H DEFB 23H DEFW 0A0DH DEFB 0 RET ; DW 07F7FH DEFM 'IRMSAVE' DB 1 IRMS DI IN A,(88H) RES 2,A SET 5,A OUT (88H),A LD HL,4000H LD DE,8000H LD BC,27FFH LDIR IN A,(88H) SET 2,A RES 5,A OUT (88H),A EI RET ; DW 07F7FH DEFM 'IRMLOAD' DB 1 IRML DI IN A,(88H) RES 2,A SET 5,A OUT (88H),A LD HL,8000H LD DE,4000H LD BC,27FFH LDIR IN A,(88H) SET 2,A RES 5,A OUT (88H),A EI RET ; ULD LD HL,8000H LD DE,4000H LD BC,27FFH LDIR RET ; BILDT2 CALL 0F003H DEFB 23H DEFB 0DH DEFM 'Neue Folie einlegen. ' DEFM '>RETURN<' DEFB 0 BTXT CALL 0F003H DEFB 0EH JR NC,BTXT RET ; ; HPEURO CALL START CALL 0F003H DEFB 23H DEFM 'Bild 1' DEFB 0DH DEFB 27 DEFB '3' DEFB 0 ;Bild 1 CALL ULD LD HL,4000H LD E,5 LD C,10H LD A,3 LD (ARGN),A CALL DR1 LD HL,A75 CALL DR2 CALL 0F003H DEFB 23H DEFB 27 DEFM '1' DEFB 0 ;Bild 2 BILD2 CALL 0F003H DEFB 23H DEFM 'Bild 2' DEFB 0DH DEFB 0 LD L,3 LD D,L LD A,2 CALL 0F003H DB 26H ; CALL IRML LD HL,A75 CALL DR2 LD A,12 CALL 0F003H DEFB 2 CALL BILDT2 ;Bild 3 LD L,4 LD D,0 LD A,2 CALL 0F003H DEFB 26H LD L,14H LD D,41H LD A,2 CALL 0F003H DEFB 26H CALL 0F003H DEFB 23H DEFW 0A0DH DEFM 'Bild 3' DEFB 0DH DEFB 0 ; LD HL,4000H LD E,5 LD C,10H LD A,3 LD (ARGN),A CALL DR1 LD HL,A75 CALL DR2 ;Bild 4 LD L,14H LD D,0C1H LD A,2 CALL 0F003H DEFB 26H CALL 0F003H DEFB 23H DEFM 'Bild 4' DEFW 0A0DH DEFB 0 ; LD HL,A75 CALL DR2 CALL CLS ; LD L,14H LD D,0 LD A,2 CALL 0F003H DEFB 26H LD L,0CH LD D,0 LD A,2 CALL 0F003H DEFB 26H LD L,4 LD D,3 LD A,2 CALL 0F003H DEFB 26H LD L,3 LD D,0 LD A,2 CALL 0F003H DB 26H RET ;NORM ;normale Daten FFH senden. NORM PUSH AF PUSH BC LD HL,GUB CALL STOUT LD B,40 LD A,0FFH NORMA CALL UOUT DJNZ NORMA POP BC POP AF RET ;LAGE0 LAGE0 PUSH BC PUSH AF LD HL,LAG CALL STOUT LD B,40 POP AF PUSH AF LAGA CALL UOUT DJNZ LAGA POP AF POP BC RET ; ESC9 CALL 0F003H DB 23H,1BH,39H,0 RET ;COL ;lesen Byte von Color-RAM ;PE: HL=Adresse ;PA: A=Byte ;VR: AF COL CALL ESC9 LD A,M PUSH AF CALL ESC9 POP AF RET ;Farbe FARDR CALL STOUT LD HL,BREIT CALL STOUT LD HL,RGB CALL STOUT LD HL,LPGON CALL STOUT LD B,0 FRDR PUSH BC CALL RGBT CALL LAGE POP BC DJNZ FRDR LD HL,GOFF CALL STOUT RET ; ;RGBT ;Erstellung einer RGB-Tabelle ;PE: (FARIY)=Tabellenanfang ; HL=Speicheradresse ;PA: (FARIY) bis (FARIY+120)=RGB-Tab. ; HL+1 ;VR: AF,BC,D,HL RGBT PUSH IY LD IY,(FARIY) LD HL,(PRAM) LD B,40 ;Anzahl der Sp. ; RGBA CALL COL LD C,A LD A,M INC H PUSH BC PUSH HL LD B,8 ;Pixelbyte LD H,A RGBB RLC H ;rot PUSH AF JR C,ROA BIT 1,C JR NZ,ROB ROD AND A JR ROC ROB SCF JR ROC ROA BIT 4,C JR NZ,ROB JR ROD ROC RL D POP AF ;gruen PUSH AF JR C,GRA BIT 2,C JR NZ,GRB GRD AND A JR GRC GRB SCF JR GRC GRA BIT 5,C JR NZ,GRB JR GRD GRC RL E POP AF ;blau PUSH AF JR C,BLA BIT 0,C JR NZ,BLB BLD AND A JR BLC BLB SCF JR BLC BLA BIT 3,C JR NZ,BLB JR BLD BLC RL L POP AF ; DJNZ RAAA LD (IY+0),D LD (IY+40),E LD (IY+80),L INC IY POP HL POP BC DJNZ RBBB LD HL,(PRAM) INC L LD (PRAM),HL POP IY RET ; RAAA JP RGBB RBBB JP RGBA ; ;LAGE LAGE PUSH HL PUSH BC PUSH AF ;rot LD HL,LAG CALL STOUT LD HL,(FARIY) LD B,40 LROT LD A,M CALL UOUT INC HL DJNZ LROT ;gr}n LD HL,LAG CALL STOUT LD HL,(FARIY) LD DE,40 ADD HL,DE LD B,40 LGR LD A,M CALL UOUT INC HL DJNZ LGR ;blau LD HL,LAG CALL STOUT LD HL,(FARIY) LD DE,80 ADD HL,DE LD B,40 LBL LD A,M CALL UOUT INC HL DJNZ LBL CALL NORM ; POP AF POP BC POP HL RET ;DEF26 DEF26 LD A,2 CALL 0F003H DB 26H RET ;Bildload von 4000H BILDL LD HL,4000H LD DE,8000H LD BC,27FFH LDIR CALL ESC9 RET ; DW 0B1B1H DEFM 'HP500C' DB 1 CP 6 JR Z,HPA LD A,L CP 0FFH JP Z,HPEURO ;ERROR ERROO CALL 0F003H DB 19H RET ; HPA PUSH AF PUSH HL LD HL,8000H LD (DRAM),HL LD (PRAM),HL CALL START POP HL POP AF LD A,L CP 1 JR NZ,HPB CALL 0F003H DB 23H,1BH,32H,0 JP HPEN ; HPB CP 2 JR NZ,HPC LD L,3 LD D,L CALL DEF26 CALL IRML CALL BILDL LD L,3 LD D,7 CALL DEF26 CALL IRML CALL BILDL JR HPEN ; HPC CP 3 JR NZ,HPD LD L,3 LD D,0 CALL DEF26 LD A,(RAM) LD L,A LD D,81H PUSH HL CALL DEF26 CALL IRML CALL BILDL POP HL LD D,0C1H CALL DEF26 CALL IRML CALL BILDL JR HPEN ; HPD LD L,3 LD D,0 CALL DEF26 LD A,(RAM) LD L,A LD D,1 PUSH HL CALL DEF26 CALL IRML CALL BILDL POP HL LD D,41H CALL DEF26 CALL IRML CALL BILDL ; HPEN LD A,(BIYT) BIT 0,A JR NZ,HPE SET 0,A LD (BIYT),A CALL RESET HPE LD A,(ARG2) LD E,A CALL ZE LD A,(ARG3) LD C,A CALL SPB ;Qualit{t LD A,(ARG5) CP 1 JR NZ,HPF LD HL,DRAF JR HPG HPF LD HL,LETT HPG CALL STOUT ;Aufl|sung LD A,(ARG4) CP 1 JR NZ,HPH LD HL,A75 JR HPI ; HPH CP 2 JR NZ,HPJ LD HL,A2 JR HPI ; HPJ CP 3 JR NZ,HPK LD HL,A3 JR HPI HPK LD HL,A4 HPI LD A,(ARG6) CP 1 PUSH AF CALL NZ,DR2 POP AF CALL Z,FARDR LD A,(ARG1) CP 1 JR NZ,HPL CALL 0F003H DB 23H,1BH,31H,0 ; HPL LD L,3 LD D,0 CALL DEF26 LD A,(RAM) LD L,A LD D,0 CALL DEF26 CALL 0F003H DB 23H,12,0AH DEFM 'Papierauswurf?(Y)' DB 0 CALL 0F003H DB 4 CP 59H JR Z,HPM CP 79H JR NZ,HPN HPM LD A,(BIYT) RES 0,A LD (BIYT),A LD A,12 CALL 0F003H DB 2 ; ;HPN POP AF HPN LD A,(MOD) LD L,A LD D,0 CALL DEF26 CALL 0F003H DB 23H,0AH,0DH,0 RET ç HPNALL 0F003H DB 2 ; ;HPN POP AF HPN LD A,(MOD) LD L,A LD D,0 CALL DEF26 CALL 0F003H DB 23H,0AH,0DH,0 RET ç HPN