10 ;CODEWRITER III›20 ;BY STEVE STUNTZ›30 ;(c) 1985, ANTIC PUBLISHING›40 ;›50       *=  $8000›55 START›60 MEM   =   $B0›70 VTBASE =  $E400›80 SETVBV =  $E45C›90 PACTL =   $D302›0100 PORTA = $D300›0110 AUDC1 = $D201›0120 CH  =   $02FC›0130 CDTMA1 = $0226›0140 ROWCRS = $54›0150 COLCRS = $55›0160 VDSLST = $0200›0170 NMIEN = $D40E›0180 SDLSTL = $0230›0185 ATRACT = $4D›0190 MEMINT = $B4›0200 MEMRX = $B2›0210     JSR HEAD1›0220     LDA #$38›0230     STA PACTL›0240     LDA #$01›0250     STA PORTA›0260     LDA #$3C›0270     STA PACTL›0280     LDA #$01›0290     STA PORTA›0300     LDA SDLSTL›0310     STA MEMINT›0320     LDA SDLSTL+1›0330     STA MEMINT+1›0340     LDA #$82›0350     LDY #12›0360     STA (MEMINT),Y›0370     LDY #28›0380     STA (MEMINT),Y›0390     LDA #RXLOOP&255›0400     STA VDSLST›0410     LDA #RXLOOP/256›0420     STA VDSLST+1›0430     LDA #$FF›0440     STA POINTRI›0450     STA POINTRO›0460     LDA #$20›0470     STA CWSPC›0480     LDA #$40›0490     STA CWMAX›0500     LDA #$0F›0510     STA CWAVG›0520     LDA #$00›0530     STA I23X37›0540     STA HILO›0550     STA NBITS›0560     STA RXCW›0570     STA IAMREDI›0580     STA CTAVG›0590     STA CWTOT›0600     STA CWTOT+1›0610     LDA #2›0620     STA PREVHILO›0630     LDA MRX›0640     STA MEMRX›0650     LDA MRX+1›0660     STA MEMRX+1›0670     LDA #$C0›0680     STA NMIEN›0690 ;›0700 ;SEARCH FOR KEYBOARD CHARACTER›0710 LP1 JSR RXCH›0720     JMP LP1›0730 ;›0740 ; DEVICE HANDLER›0750 GOVEC CPX #6›0760     BNE GOV1›0770     LDY ROWCRS›0780     CPY #23›0790     BNE GOV1›0800     LDY COLCRS›0810     CPY #39›0820     BNE GOV1›0830     LDY #1›0840     STY I23X37›0850 GOV1 TAY ›0860     LDA VTBASE+1,X›0870     PHA ›0880     LDA VTBASE,X›0890     PHA ›0900     TYA ›0910     RTS ›0920 ;›0930 ; SCROLL›0940 SCROLL LDY I23X37›0950     CPY #1›0960     BNE SCROL1›0970     JSR HEAD3›0980     LDY #0›0990     STY I23X37›1000 SCROL1 RTS ›1010 ;›1020 ; RX WORD WRAP›1030 RXWRA LDY COLCRS›1040     CPY #34›1050     BCC RXWR9›1060     CPY #39›1070     BEQ RXWR9›1080 RXWR1 LDA #$A0›1090     JSR RXPNT›1100     LDY COLCRS›1110     CPY #39›1120     BNE RXWR1›1130 RXWR9 RTS ›1140 ;›1150 ;SET PIN1 AND SOUND›1160 ONOFF CMP #$02›1170     BNE OFF›1180     LDY #$00›1190     STY PORTA   SET PIN1 LOW›1200     LDY #$2F›1210     STY AUDC1   TURN SOUND ON›1220     JMP ONOF1›1230 OFF LDY #$01›1240     STY PORTA   SET PIN1 HIGH›1250     LDY #$00›1260     STY AUDC1   TURN SOUND OFF›1270 ONOF1 RTS ›1280 ;›1290 ;HEADING›1300 HEAD LDY #$00›1310     STY COPYI›1320 CR1 LDA COPYR,Y›1330     LDX #6›1340     JSR GOVEC›1350     INC COPYI›1360     LDY COPYI›1370     CPY #38›1380     BNE CR1›1390     RTS ›1400 ;›1410 ;SET CURSOR AT 0,0›1420 HEAD00 LDA ROWCRS›1430     STA ROW›1440     LDA COLCRS›1450     STA COL›1460     LDA #$00›1470     STA ROWCRS›1480     LDA #$02›1490     STA COLCRS›1500     RTS ›1510 ;›1520 ;SET CURSOR AT ORIGINAL POSITION›1530 HEADORG LDA ROW›1540     STA ROWCRS›1550     LDA COL›1560     STA COLCRS›1570     LDA #$1E›1580     LDX #6›1590     JSR GOVEC›1600     LDA #$1F›1610     LDX #6›1620     JSR GOVEC›1630     RTS ›1640 ;›1650 ;KEYBOARD HEADING›1660 HEAD1 JSR HEADCLR›1670     JSR HEAD›1680     RTS ›1690 ;›1700 ;CHANGE SPEED HEADING›1710 HEAD3 JSR HEAD00›1720     JSR HEAD›1730     JSR HEADORG›1740     RTS ›1750 ;›1760 ;›1770 HEADCLR LDA #$7D›1780     LDX #6›1790     JSR GOVEC›1800     RTS ›1810 ;›1820 ; RX INTERRUPT LOOP›1830 RXLOOP = *›1840     PHA ›1850     TYA ›1860     PHA ›1870     JSR CWCOUNT›1872     LDA #0›1874     STA ATRACT›1880     LDA PORTA›1890     AND #$02›1900     CMP PREVHILO›1910     BNE RI1›1920     JMP RI2›1930 RI1 JSR CHANGE›1940 RI2 PLA ›1950     TAY ›1960     PLA ›1970     RTI ›1980 ;›1990 ; RX CW COUNT BY 1›2000 CWCOUNT LDY POINTRI›2010     LDA (MEMRX),Y›2020     CMP CWMAX›2030     BEQ RC1›2040     CLC ›2050     ADC #$01›2060     STA (MEMRX),Y›2070 RC1 RTS ›2080 ;›2090 ; DETECT CW CHANGE›2100 CHANGE INC POINTRI›2110     LDA PREVHILO›2120     JSR ONOFF›2130     EOR #$02›2140     STA PREVHILO›2150     LDY POINTRI›2160     LDA #0›2170     STA (MEMRX),Y›2180     RTS ›2190 ;›2200 ;›2210 ; RX CHARACTER FROM PIN 2›2220 RXCH JSR READY›2230     LDA IAMREDI›2240     CMP #1›2250     BNE RX02›2260     INC POINTRO›2270     JSR COUNTAVG›2280     LDA #1›2290     EOR HILO›2300     STA HILO›2310     CMP #1›2320     BNE RX01›2330     JSR SHIFT›2340     JMP RX02›2350 RX01 JSR FINDCH›2360 RX02 RTS ›2370 ;›2380 ; SHIFT ROR BUILD NBITS›2390 SHIFT LDA NBITS›2400     CMP #7›2410     BEQ SHIFT9›2420     INC NBITS›2430     LDY POINTRO›2440     LDA (MEMRX),Y›2450     CMP CWAVG›2460     BCC SHIFT1›2470     SEC         ;DASH›2480     JMP SHIFT2›2490 SHIFT1 CLC      ;DOT›2500 SHIFT2 ROR RXCW›2510 SHIFT9 RTS ›2520 ;›2530 ; READY TO READ COUNT›2540 READY LDX POINTRO›2550     CPX POINTRI›2560     BEQ READY1›2570     INX ›2580     CPX POINTRI›2590     BNE READY2›2600     LDY POINTRI›2610     LDA (MEMRX),Y›2620     CMP CWMAX›2630     BEQ READY2›2640 READY1 LDA #0›2650     JMP READY3›2660 READY2 LDA #1›2670 READY3 STA IAMREDI›2680     RTS ›2690 ;›2700 ; FIND CW CHARACTER›2710 FINDCH LDY POINTRO›2720     LDA (MEMRX),Y›2730     CMP CWAVG›2740     BCC FIND09›2750     JSR FINISHCH›2760     JSR LOOKASCI›2770     LDY POINTRO›2780     LDA (MEMRX),Y›2790     CMP CWSPC›2800     BCC FIND09›2810     JSR RXWRA›2820     LDA #$A0›2830     JSR RXPNT›2840 FIND09 RTS ›2850 ;›2860 ; PRINT RECEIVED DATA›2870 RXPNT LDX #6›2880     JSR GOVEC›2890     JSR SCROLL›2900 RXPN1 RTS ›2910 ;›2920 ; FINISH RXC2 CHARACTER›2930 FINISHCH SEC ›2940     ROR RXCW›2950     INC NBITS›2960 FINISH1 LDA NBITS›2970     CMP #8›2980     BCS FINISH9›2990     CLC ›3000     ROR RXCW›3010     INC NBITS›3020     JMP FINISH1›3030 FINISH9 LDA #0›3040     STA NBITS›3050     RTS ›3060 ;›3070 ; LOOKUP AND PRINT CHARACTER›3080 LOOKASCI LDX #40›3090 LOOK1 LDA CWCHA,X›3100     CMP RXCW›3110     BEQ LOOK3›3120     INX ›3130     CPX #91›3140     BEQ LOOK2›3150     JMP LOOK1›3160 LOOK2 LDA #63›3170     JMP LOOK4›3180 LOOK3 TXA ›3190 LOOK4 EOR #$80›3200     JSR RXPNT›3210     RTS ›3220 ;›3230 ; COUNT FOR AVERAGE›3240 COUNTAVG LDX CTAVG›3250     INX ›3260     CPX #16›3270     BEQ COUNTA1›3280     INC CTAVG›3290     LDY POINTRO›3300     LDA (MEMRX),Y›3310     CLC ›3320     ADC CWTOT›3330     STA CWTOT›3340     LDA #0›3350     ADC CWTOT+1›3360     STA CWTOT+1›3370     JMP COUNTA2›3380 COUNTA1 JSR CALCAVG›3390 COUNTA2 RTS ›3400 ;›3410 ; CALCULATE AVERAGE›3420 CALCAVG CLC ›3430     ROR CWTOT+1›3440     ROR CWTOT›3450     CLC ›3460     ROR CWTOT+1›3470     ROR CWTOT›3480     LDA CWTOT›3490     STA CWMAX›3500     CLC ›3510     ROR CWTOT›3520     LDA CWTOT›3530     STA CWSPC›3540     CLC ›3550     ROR CWTOT›3560     LDA CWTOT›3570     STA CWAVG›3580     CLC ›3590     ROR CWTOT›3600     LDA CWTOT›3610     CLC ›3620     ADC CWSPC›3630     STA CWSPC›3640     LDA #0›3650     STA CWTOT›3660     STA CWTOT+1›3670     STA CTAVG›3680     RTS ›3690 ;›3700 ;ROM DATA›3710 COPYR›3720     .BYTE "  Codewriter III      BY STEVE STUNTZ "›3730 MRX .WORD MEMRX1›3740 CWCHA›3750     .BYTE 0,0,0,0,0,0,0,0›3760     .BYTE 0,0,0,0,0,0,0,0›3770     .BYTE 0,0,0,0,0,0,0,0›3780     .BYTE 0,0,0,0,0,0,0,0›3790     .BYTE $FE,$00›3800     .BYTE $00,$00,$00,$00,$00,$00›3810     .BYTE $6D,$6D,$22,$2A,$73,$68›3820     .BYTE $6A,$29,$3F,$3E,$3C,$38›3830     .BYTE $30,$20,$21,$23,$27,$2F›3840     .BYTE $47,$55,$FF,$31,$FF,$4C›3850     .BYTE $00,$06,$11,$15,$09,$02›3860     .BYTE $14,$0B,$10,$04,$1E,$0D›3870     .BYTE $12,$07,$05,$0F,$16,$1B›3880     .BYTE $0A,$08,$03,$0C,$18,$0E›3890     .BYTE $19,$1D,$13›3900     *=  CWCHA+$0100›3910 ;›3920 PND =   *       ; END OF BOOT FILE›3930 ;*=$1000›3940 COPYI *= *+1›3950 ROW *=  *+1›3960 COL *=  *+1›3970 MEMRX1 = *›3980     *=  *+$0100›3990 POINTRI *= *+1›4000 POINTRO *= *+1›4010 CWMAX *= *+1›4020 CWSPC *= *+1›4030 CWAVG *= *+1›4040 PREVHILO *= *+1›4050 HILO *= *+1›4060 NBITS *= *+1›4070 RXCW *= *+1›4080 IAMREDI *= *+1›4090 CTAVG *= *+1›4100 CWTOT *= *+2›4110 I23X37 *= *+1›4120 RXINDX *= *+1›4122     *=  $02E0›4124     .WORD START›4130     .END ›