home *** CD-ROM | disk | FTP | other *** search
- 10 REM CB10 IS 51984 DECIMAL
- 20 OPEN2,8,2,"@:APPEND2.ML,P,W"
- 30 SYS700
- 40 .OPT O2
- 50 CHKIN = $FFC6
- 60 CHKOUT = $FFC9
- 70 CHRIN = $FFCF
- 80 CHROUT = $FFD2
- 90 RDTIM = $FFDE
- 100 GETIN = $FFE4
- 110 CLRCHN = $FFCC
- 120 ;
- 130 NUMBYTES = $2B0
- 140 ;
- 150 AREG = 780
- 160 XREG = 781
- 170 YREG = 782
- 180 ;
- 190 RSSTAT = 663
- 200 RIDBE = 667
- 210 RIDBS = 668
- 220 ;
- 230 STATUS = $90
- 240 ;
- 250 ;
- 260 ; XMODEM CODES
- 270 ;
- 280 ACK = 6
- 290 NAK = 21
- 300 EOT = 4
- 310 CAN = 24
- 312 XOFF = 19
- 314 XON = 17
- 320 ;
- 330 ; TIMES FOR CLOCK
- 340 MINUTE = 3600
- 350 TENSEC = 600
- 360 ;
- 370 ;
- 380 ;
- 390 ; JUMP TABLE
- 400 ;
- 410 *= $CB10
- 440 JMP UPLOAD
- 450 JMP DOWNLOAD
- 470 JMP ASCUPLOAD
- 480 ;
- 490 MINUSONE .BYT $81,$80,0,0,0
- 500 DATA = $C900
- 510 SOH = $C900
- 520 BLK = $C901
- 530 COMPBLK = $C902
- 540 HALFBLOCK = $C903
- 550 ;
- 560 CKSUM = $C983
- 570 ;
- 580 DSOH = $C800
- 590 DBLK = $C801
- 600 DCOMPBLK = $C802
- 610 DCKSUM = $C804
- 620 ;
- 630 NTIMES = $C880
- 640 YTEMP = $C881
- 650 ;
- 660 ;
- 670 BUFF = $C810
- 680 COUNT = $C882
- 690 BLOCK = $C884
- 700 CHECK = $C886
- 710 YCOUNT = $C888
- 720 LASBLOCK = $C88A
- 730 ;
- 740 ;
- 750 EF .BYT 0
- 760 ;
- 770 POINTER .BYT 0
- 780 ;
- 790 CLOCK *=*+3
- 800 ;
- 810 INIT LDA #0
- 820 STA BLK
- 830 STA DBLK
- 840 STA CKSUM
- 850 STA CKSUM+1
- 860 STA DCKSUM
- 870 STA DCKSUM+1
- 880 STA EF
- 890 LDA #255
- 900 STA COMPBLK
- 910 STA DCOMPBLK
- 920 LDA #1
- 930 STA SOH
- 940 STA DSOH
- 950 RTS
- 960 ;
- 970 ;
- 980 XMODOUT = *
- 990 JSR CLRCHN
- 1000 LDX #2
- 1010 JSR CHKIN ;LOOK AT DISK
- 1020 LDY #0
- 1030 UPLDLOOP = *
- 1040 TYA
- 1050 ASL
- 1060 BCS XMIT
- 1070 JSR CHRIN
- 1080 TAX
- 1090 LDA STATUS
- 1100 BNE ENFILE
- 1110 TXA
- 1120 STA HALFBLOCK,Y
- 1130 INY
- 1140 CLC
- 1150 BCC UPLDLOOP
- 1160 ;
- 1170 ;
- 1180 ;
- 1190 ENFILE = *
- 1200 AND #64
- 1210 STA EF
- 1220 BEQ UPLDLOOP
- 1230 ; EOF REACHED, FILL WITH ZEROES
- 1240 TXA
- 1250 STA HALFBLOCK,Y
- 1260 LOOP2 INY
- 1270 TYA
- 1280 ASL
- 1290 BCS XMIT
- 1300 LDA #0
- 1310 STA HALFBLOCK,Y
- 1320 CLC
- 1330 BCC LOOP2
- 1340 ;
- 1350 ;
- 1360 ;
- 1370 XMIT = *
- 1380 STY NUMBYTES
- 1390 INC BLK
- 1400 DEC COMPBLK
- 1410 JSR CLRCHN
- 1420 LDX #5
- 1430 JSR CHKOUT
- 1440 LDX #0
- 1450 STX CKSUM
- 1460 ADDSUM = *
- 1470 LDA CKSUM
- 1480 CLC
- 1490 ADC DATA,X
- 1500 STA CKSUM
- 1510 INX
- 1520 CPX #131
- 1530 BNE ADDSUM
- 1540 XMITAGIN = *
- 1550 LDX #0
- 1560 SEND = *
- 1570 LDA DATA,X
- 1580 JSR CHROUT
- 1590 INX
- 1600 CPX #132
- 1610 BNE SEND
- 1620 JSR CLRCHN
- 1630 RTS
- 1640 ;
- 1650 ;
- 1660 ;
- 1670 EXIT = *
- 1680 JSR CLRCHN
- 1690 LDA $0810
- 1700 CMP #$14
- 1710 BEQ TOBASIC
- 1720 ; IF BLITZ, SIMPLY EXIT
- 1730 ; OTHERWISE, CHANGE VAR EOF
- 1740 LDA #"E"
- 1750 STA $45
- 1760 LDA #"O"
- 1770 STA $46
- 1780 JSR $B0E7
- 1790 LDY #0
- 1800 LDA NUMBYTES
- 1810 CMP #$80
- 1820 BEQ TRUE
- 1830 LDA #0
- 1840 ZRO = *
- 1850 STA ($47),Y
- 1860 INY
- 1870 CPY #5
- 1880 BCC ZRO
- 1890 RTS
- 1900 TRUE = *
- 1910 LDA MINUSONE,Y
- 1920 STA ($47),Y
- 1930 INY
- 1940 CPY #5
- 1950 BCC TRUE
- 1960 TOBASIC RTS
- 1970 ;
- 1980 ;
- 1990 ;
- 2000 INITCLOCK = *
- 2010 JSR RDTIM
- 2020 STY CLOCK
- 2030 STX CLOCK+1
- 2040 STA CLOCK+2
- 2050 RTS
- 2060 ;
- 2070 ;
- 2080 ;
- 2090 SETMINUTE = *
- 2100 LDA AREG
- 2110 LDX XREG
- 2120 LDY YREG
- 2130 JSR INITCLOCK
- 2140 LDA #<MINUTE
- 2150 CLC
- 2160 ADC CLOCK+2
- 2170 STA CLOCK+2
- 2180 LDA #>MINUTE
- 2190 ADC CLOCK+1
- 2200 STA CLOCK+1
- 2210 LDA #0
- 2220 ADC CLOCK
- 2230 STA CLOCK
- 2240 LDA AREG
- 2250 LDX XREG
- 2260 LDY YREG
- 2270 RTS
- 2280 ;
- 2290 ;
- 2300 ;
- 2310 SETTENSEC = *
- 2320 STA AREG
- 2330 STX XREG
- 2340 STY YREG
- 2350 JSR INITCLOCK
- 2360 LDA #<TENSEC
- 2370 CLC
- 2380 ADC CLOCK+2
- 2390 STA CLOCK+2
- 2400 LDA #>TENSEC
- 2410 ADC CLOCK+1
- 2420 STA CLOCK+1
- 2430 LDA #0
- 2440 ADC CLOCK
- 2450 STA CLOCK
- 2460 LDA AREG
- 2470 LDX XREG
- 2480 LDY YREG
- 2490 RTS
- 2500 ;
- 2510 ;
- 2520 ;
- 2530 CHEKTIME = *
- 2540 ; ALL REGISTERS SAVED
- 2550 ; SET TIME WITH ONE OF ROUTINES
- 2560 ; ABOVE--IF CARRY IS SET, THEN
- 2570 ; TIME WAS EXCEEDED, ELSE CARRY
- 2580 ; IS CLEAR
- 2590 STA AREG
- 2600 STX XREG
- 2610 STY YREG
- 2620 JSR RDTIM
- 2630 CMP CLOCK+2
- 2640 TXA
- 2650 SBC CLOCK+1
- 2660 TYA
- 2670 SBC CLOCK
- 2680 PHP
- 2690 LDA AREG
- 2700 LDX XREG
- 2710 LDY YREG
- 2720 PLP
- 2730 RTS
- 2740 ;
- 2750 ;
- 2760 ;
- 2770 UPLOAD = *
- 2780 JSR CLRCHN
- 2790 JSR INIT
- 2800 LDX #5
- 2810 JSR CHKIN
- 2820 JSR SETMINUTE
- 2830 NAKLOOP = *
- 2840 JSR GETIN
- 2850 CMP #NAK
- 2860 BEQ NEXTUP
- 2870 JSR CHEKTIME
- 2880 BCC NAKLOOP
- 2890 LDA #0
- 2900 STA NUMBYTES
- 2910 JMP EXIT
- 2920 ;
- 2930 ;
- 2940 ;
- 2950 NEXTUP = *
- 2960 JSR XMODOUT
- 2970 LOOPAGIN = *
- 2980 JSR SETMINUTE
- 2990 LDX #5
- 3000 JSR CHKIN
- 3010 ;
- 3020 ;
- 3030 ;
- 3040 BLKLOOP = *
- 3050 JSR GETIN
- 3060 CMP #ACK
- 3070 BEQ CHEKEOF
- 3080 CMP #CAN
- 3090 BNE NAKCHEK
- 3100 JSR CLRCHN
- 3110 LDA #"[166]"
- 3120 JSR CHROUT
- 3130 LDA #0 : STA NUMBYTES : JMP EXIT
- 3140 NAKCHEK = *
- 3150 CMP #NAK
- 3160 BNE TIM
- 3170 JSR CLRCHN
- 3180 LDA #":"
- 3190 JSR CHROUT
- 3200 LDX #5
- 3210 JSR CHKOUT
- 3220 JSR XMITAGIN
- 3230 JMP LOOPAGIN
- 3240 TIM = *
- 3250 JSR CHEKTIME
- 3260 BCC BLKLOOP
- 3270 LDA #0 : STA NUMBYTES : JMP EXIT
- 3280 ;
- 3290 ;
- 3300 ;
- 3310 CHEKEOF = *
- 3320 LDA EF
- 3330 BNE SENDEOT
- 3340 JSR CLRCHN
- 3350 LDA #"-"
- 3360 JSR CHROUT
- 3370 JMP NEXTUP
- 3380 SENDEOT = *
- 3390 JSR CLRCHN
- 3400 LDX #5
- 3410 JSR CHKOUT
- 3420 LDA #EOT
- 3430 JSR CHROUT
- 3440 JSR CLRCHN
- 3450 LDA #"*"
- 3460 JSR CHROUT
- 3470 LDA #$80 : STA NUMBYTES : JMP EXIT
- 3480 ; END OF XMODEM XMIT ROUTINE. NOW
- 3490 ; WE NEED STRING XMIT CODES
- 3500 ;
- 3510 ;
- 3520 ;
- 3530 ;
- 3540 DOWNLOAD = *
- 3550 TSX
- 3560 STX POINTER
- 3570 ;
- 3580 JSR INIT
- 3590 JSR CLRCHN
- 3600 LDA RIDBE
- 3610 STA RIDBS
- 3620 ;
- 3630 LDX #5
- 3640 JSR CHKOUT
- 3650 LDA #NAK
- 3660 JSR CHROUT
- 3670 ;
- 3680 LDA #0
- 3690 STA YTEMP
- 3700 STA NTIMES
- 3710 ;
- 3720 ;
- 3730 ;
- 3740 NEWBLK = *
- 3750 JSR SETTENSEC
- 3760 ;
- 3770 INC DBLK
- 3780 DEC DCOMPBLK
- 3790 ;
- 3800 JSR CLRCHN
- 3810 LDX #5
- 3820 JSR CHKIN
- 3830 ;
- 3840 ;
- 3850 ;
- 3860 ;
- 3870 DLOOP = *
- 3880 JSR GETIN
- 3890 PHA
- 3900 LDA RSSTAT
- 3910 BEQ STORBYTE
- 3920 AND #8
- 3930 BEQ STORBYTE
- 3940 PLA
- 3950 JSR CHEKTIME
- 3960 BCC DLOOP
- 3970 JMP SENDNAK
- 3980 ;
- 3990 ;
- 4000 ;
- 4010 STORBYTE = *
- 4020 JSR SETTENSEC
- 4030 LDY YTEMP
- 4040 PLA
- 4050 STA DATA,Y
- 4060 INY
- 4070 STY YTEMP
- 4080 CPY #132
- 4090 BNE DLOOP
- 4100 ;
- 4110 ;
- 4120 ;
- 4130 CHEKDATA = *
- 4140 ; CHECK BLK, CKSUMS ETC FOR CORRECTNESS
- 4150 LDA SOH
- 4160 CMP #1
- 4170 BNE SENDNAK
- 4180 ;
- 4190 LDA BLK
- 4200 CMP DBLK
- 4210 BNE SENDNAK
- 4220 ;
- 4230 LDA COMPBLK
- 4240 CMP DCOMPBLK
- 4250 BNE SENDNAK
- 4260 ;
- 4270 LDA #0
- 4280 STA DCKSUM
- 4290 ;
- 4300 ;
- 4310 ;
- 4320 LDY #0
- 4330 CKLOOP = *
- 4340 LDA DATA,Y
- 4350 CLC
- 4360 ADC DCKSUM
- 4370 STA DCKSUM
- 4380 INY
- 4390 CPY #131
- 4400 BNE CKLOOP
- 4410 CMP CKSUM
- 4420 BNE SENDNAK
- 4430 ;
- 4440 ;
- 4450 ;
- 4460 ; DATA OK TO WRITE TO DISK
- 4470 ;
- 4480 JSR CLRCHN
- 4490 LDX #2
- 4500 JSR CHKOUT
- 4510 LDY #$FF
- 4520 WRITDISK = *
- 4530 INY
- 4540 LDA HALFBLOCK,Y
- 4550 JSR CHROUT
- 4560 CPY #$7F
- 4570 BCC WRITDISK
- 4580 JSR CLRCHN
- 4590 LDA #"-"
- 4600 JSR CHROUT
- 4610 JMP CHEKEOT
- 4620 ;
- 4630 ; THREE ROUTINES LEFT -- CHEKEOT,
- 4640 ; SENDNAK, AND TERMINATE
- 4650 ;
- 4660 SENDNAK = *
- 4670 JSR CLRCHN
- 4680 LDA RIDBE
- 4690 STA RIDBS
- 4700 LDA #":"
- 4710 JSR CHROUT
- 4720 LDX #5
- 4730 JSR CHKOUT
- 4740 INC NTIMES
- 4750 LDX NTIMES
- 4760 CPX #10
- 4770 BCS TERMINATE
- 4780 LDA #NAK
- 4790 JSR CHROUT
- 4800 ;
- 4810 ; SETTING DLOOP FOR ANOTHER DLOAD
- 4820 ; WITHOUT INCREMENTING BLK ETC
- 4830 ;
- 4840 LDY #0
- 4850 STY YTEMP
- 4860 JSR CLRCHN
- 4870 LDX #5
- 4880 JSR CHKIN
- 4890 JSR SETTENSEC
- 4900 JMP DLOOP
- 4910 ;
- 4920 ;
- 4930 ;
- 4940 TERMINATE = *
- 4950 TSX
- 4960 CPX POINTER
- 4970 BEQ TCONT
- 4980 INX
- 4990 TXS
- 5000 CLC
- 5010 BCC TERMINATE
- 5020 TCONT = *
- 5030 JSR CLRCHN
- 5040 LDA #"[166]"
- 5050 JSR CHROUT
- 5060 LDX #5
- 5070 JSR CHKOUT
- 5080 LDA #CAN
- 5090 JSR CHROUT
- 5100 LDA #0 : LDA NUMBYTES : JMP EXIT
- 5110 ;
- 5120 ;
- 5130 ;
- 5140 CHEKEOT = *
- 5150 LDA #0
- 5160 STA NTIMES
- 5170 JSR CLRCHN
- 5180 LDX #5
- 5190 JSR CHKOUT
- 5200 LDA #ACK
- 5210 JSR CHROUT
- 5220 JSR CLRCHN
- 5230 LDX #5
- 5240 JSR CHKIN
- 5250 JSR SETTENSEC
- 5260 EOTLOOP = *
- 5270 JSR GETIN
- 5280 PHA
- 5290 LDA RSSTAT
- 5300 AND #8
- 5310 BEQ EOTOUT
- 5320 PLA
- 5330 JSR CHEKTIME
- 5340 BCC EOTLOOP
- 5350 JMP SENDNAK
- 5360 EOTOUT = *
- 5370 PLA
- 5380 CMP #EOT
- 5390 BEQ FILEEND
- 5400 STA DATA
- 5410 LDY #1
- 5420 STY YTEMP
- 5430 JMP NEWBLK
- 5440 FILEEND = *
- 5450 JSR CLRCHN
- 5460 LDA #"*"
- 5470 JSR CHROUT
- 5480 LDX #5
- 5490 JSR CHKOUT
- 5500 LDA #ACK
- 5510 JSR CHROUT
- 5520 JSR CLRCHN
- 5530 LDA #$80 : STA NUMBYTES : JMP EXIT
- 5540 ;
- 5550 ;
- 5560 ;
- 7230 ;
- 7240 ASCUPLOAD = *
- 7250 TEXTLOOP JSR CLRCHN
- 7260 LDX #2
- 7270 JSR CHKIN
- 7280 JSR CHRIN
- 7290 LDX $90
- 7300 BNE LEAVE
- 7310 PHA
- 7320 JSR CHROUT
- 7330 LDX #5
- 7340 JSR CHKOUT
- 7350 PLA
- 7360 JSR PETASCII
- 7370 JSR CHROUT
- 7380 JSR CLRCHN
- 7390 LDX #5
- 7400 JSR CHKIN
- 7410 JSR GETIN
- 7420 CMP #XOFF
- 7430 BEQ ASCWAIT
- 7440 CLC
- 7450 BCC TEXTLOOP
- 7460 LEAVE JSR CLRCHN
- 7470 RTS
- 7480 ASCWAIT = *
- 7490 JSR SETMINUTE
- 7500 WAITMORE = *
- 7510 JSR GETIN
- 7520 CMP #XON
- 7530 BEQ TEXTLOOP
- 7540 JSR CHEKTIME
- 7550 BCS WAITMORE
- 7560 BCC TEXTLOOP
- 7570 PETASCII = *
- 7580 CMP #13
- 7590 BNE PA1
- 7600 RTS
- 7610 PA1 = *
- 7620 CMP #20
- 7630 BNE PA2
- 7640 LDA #8
- 7650 RTS
- 7660 PA2 = *
- 7670 CMP #65
- 7680 BCS PA3
- 7690 RTS
- 7700 PA3 = *
- 7710 CMP #91
- 7720 BCS PA4
- 7730 ORA #$20
- 7740 RTS
- 7750 PA4 = *
- 7760 CMP #96
- 7770 BCS PA5
- 7780 RTS
- 7790 PA5 = *
- 7800 CMP #141
- 7810 BNE PA6
- 7820 LDA #13
- 7830 RTS
- 7840 PA6 = *
- 7850 CMP #147
- 7860 BNE PA7
- 7870 LDA #12
- 7880 RTS
- 7890 PA7 = *
- 7900 CMP #160
- 7910 BNE PA8
- 7920 LDA #32
- 7930 RTS
- 7940 PA8 = *
- 7950 CMP #193
- 7960 BCS PA9
- 7970 PA10 = *
- 7980 LDA #0
- 7990 RTS
- 8000 PA9 = *
- 8010 CMP #219
- 8020 BCS PA10
- 8030 AND #$7F
- 8040 RTS
- 8050 .END
-