0100 ; MODIFIED PRINTER HANDLER›0102 ; BY BOB MARTIN›0104 ; (c)1989, ANTIC PUBLISHING›0110 ;INITIALIZATION ROUTINE FOR›0120 ; SPECIAL PRINTER HANDLER›0140 HATABS = $031A›0150 ZPAGE1 = $CD›0160 ;›0170 *= $0600›0190 ;PRINTER HANDLER TABLE›0210 NPTBL›0220 .WORD 0,0,0›0230 NPTBLPC›0240 .WORD 0,0,0,0,0›0260 ;OLD PRINTER PUT BYTE›0280 OLDPNT›0290 JMP OLDPNT›0300 ;›0320 ;INITIALIZE NEW PRINTER HANDLER›0340 INSERT›0350 LDX #0 :FIND P: HANDLER›0360 PLOOP›0370 LDA HATABS,X›0380 CMP #'P›0390 BEQ PFND›0400 INX ›0410 INX ›0420 INX ›0430 BNE PLOOP›0440 ;›0450 ;MOVE P: HANDLER TABLE TO NEW›0460 ; LOCATION›0480 PFND›0490 LDA HATABS+1,X›0500 STA ZPAGE1›0510 LDA HATABS+2,X›0520 STA ZPAGE1+1›0530 LDA #NPTBL&$FF›0540 STA HATABS+1,X›0550 LDA #NPTBL/$0100›0560 STA HATABS+2,X›0570 LDY #15›0580 PMVLP›0590 LDA (ZPAGE1),Y›0600 STA NPTBL,Y›0610 DEY ›0620 BPL PMVLP›0630 ;›0640 ;STORE OLD PUT BYTE ADDRESS THEN›0650 ; CHANGE PUT BYTE ADDRESS TO›0660 ; POINT TO MODIFIED PUT BYTE›0670 ; ROUTINE›0690 CLC ›0700 LDA NPTBLPC›0710 ADC #1›0720 STA OLDPNT+1›0730 LDA NPTBLPC+1›0740 ADC #0›0750 STA OLDPNT+2›0760 LDA #[NPUTCH-1]&$FF›0770 STA NPTBLPC›0780 LDA #[NPUTCH-1]/$0100›0790 STA NPTBLPC+1›0800 RTS ›0810 ;›0820 *= $02E2›0830 .WORD INSERT›0850 ;›0860 ;MODIFIED PRINTER HANDLER›0870 ;›0880 ;INTERCEPTS THE PRINTER HANDLER›0890 ; AND SENDS UNPRINTABLE›0900 ; CHARACTERS AS DOT GRAPHICS›0910 ; OTHER CHARACTERS ARE SENT AS›0920 ; NORMAL MODE CHARACTERS›0940 ;›0950 ;POKE 1791 ($6FF) WITH A "0"›0960 ; TO ENABLE. ANY OTHER VALUE›0970 ; WILL DISABLE THIS OPTION.›0980 ;›0990 *= INSERT›1000 ;›1010 ;JUMP TO OLD PRINTER PUT BYTE›1020 ;›1030 PNTPUT›1040 LDA HA›1050 PNTPUT2›1060 LDY HY›1070 LDX HX›1080 JSR OLDPNT›1090 TYA ›1100 BMI ERROR›1110 STX RX›1120 STY RY›1130 RTS ›1140 ERROR›1150 PLA ›1160 PLA ›1170 RTS ›1180 ;›1190 ;MODIFIED PRINTER PUT BYTE›1210 NPUTCH›1220 STA HA ;CK FOR›1230 STY HY ;UNPRINTABLE›1240 STX HX ;CHARACTERS›1250 LDX $06FF›1260 BEQ PNTOK›1270 LDX $06FE›1280 BNE CRGR›1290 CMP #155›1300 BEQ PNTOK›1310 CRGR›1315 CMP #96›1320 BEQ NOPNT›1330 CMP #32›1340 BCC NOPNT›1350 CMP #123›1360 BCS NOPNT›1370 PNTOK›1380 JSR PNTPUT›1390 RTS ›1400 ;›1410 ;HANDLER FOR UNPRINTABLE›1420 ; CHARACTERS›1430 ;›1440 NOPNT›1450 LDX #0›1460 GRLOOP›1470 STX HBIT›1480 LDA GRCODE,X›1490 JSR PNTPUT2›1500 LDX HBIT›1510 INX ›1520 CPX CODELN›1530 BCC GRLOOP›1550 ;›1560 LDA HA ;GET INTERNAL›1570 JSR ASC2SCN ;CODE # AND›1580 STA $CC ;CALC ADDR›1590 LDA #0 ;OF FONT›1600 STA ZPAGE1›1610 STA ZPAGE1+1›1620 LDX #2›1630 ALOOP›1635 CLC ›1640 ROL $CC›1650 ROL ZPAGE1›1660 DEX ›1670 BPL ALOOP›1680 CLC ›1690 LDA #$E0›1700 ADC ZPAGE1›1710 STA ZPAGE1›1730 ;›1740 LDX #$80 ;CALC THE 8›1750 STX HBIT ;BYTES›1760 BLOOP›1770 JSR SLICE›1780 JSR PNTPUT2›1790 LDA #0›1800 STA ZPAGE1+1›1810 LSR HBIT›1820 LDX HBIT›1830 BNE BLOOP›1840 LDX RX›1850 LDY RY›1860 TYA ›1870 RTS ›1880 ;›1890 ;CONVERT ASCII TO DISPLAY›1900 ; MEMORY VALUE›1910 ;›1920 ASC2SCN›1930 AND #$7F›1940 CMP #96›1950 BCS OUT›1960 CMP #32›1970 BCC GRCHR›1980 SEC ›1990 SBC #32›2000 SEC ›2010 BCS OUT›2020 GRCHR›2030 CLC ›2040 ADC #64›2050 OUT›2060 RTS ›2070 HBIT›2075 .BYTE 0›2080 HA .BYTE 0›2090 HY .BYTE 0›2100 HX .BYTE 0›2110 RX .BYTE 0›2120 RY .BYTE 0›2130 ;›2140 ;CALCULATES THE VERTICAL-BYTE›2150 ; FROM THE CHARACTER FONT›2160 ;›2170 ;ADDRESS OF CHARACTER›2180 ; IN $CC & ZPAGE1›2190 ;›2200 ;BIT TO BE SENT TO PRINTER›2210 ; IN X REGISTER›2220 ;›2230 ;RESULTING "SLICED" BYTE IS›2240 ; RETURNED IN A AND HELD IN›2250 ; #CE›2260 ;›2270 SLICE›2280 LDA #$01 ;C.ITOH LDA #$80›2290 STA $CB›2300 LDY #$07›2310 LOOP›2320 TXA ›2330 AND ($CC),Y›2340 BEQ NOTSET›2350 LDA $CB›2360 ORA ZPAGE1+1›2370 STA ZPAGE1+1›2380 NOTSET›2390 ASL $CB ;C.ITOH LSR $CB›2400 DEY ›2410 BPL LOOP›2420 LDA ZPAGE1+1›2430 BIT HA ;CK FOR INVID›2440 BPL NOTINV›2450 EOR #$FF›2460 STA ZPAGE1+1›2470 NOTINV›2480 RTS ›2490 ;›2500 ;PUT THE CONTROL CODE TO CAUSE›2510 ; YOUR PRINTER TO ACCEPT 8›2520 ; DOT GRAPHICS BYTES HERE›2530 ;›2540 ;C.ITOH CONTROL CODE›2550 ; GRCODE .BYTE 27,"S0008"›2560 ;›2570 GRCODE .BYTE 27,76,8,0›2580 ;›2590 CODELN .BYTE CODELN-GRCODE›2600 ;›2610 .END ›