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 ›