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 ›