home *** CD-ROM | disk | FTP | other *** search
/ 8bitfiles.net/archives / archives.tar / archives / genie-commodore-file-library / C64-128Toolkit / XMODEM-ML.ARC / APPEND2.PAL (.txt) < prev   
Encoding:
Commodore BASIC  |  2019-04-13  |  8.1 KB  |  639 lines

  1. 10 REM CB10 IS 51984 DECIMAL
  2. 20 OPEN2,8,2,"@:APPEND2.ML,P,W"
  3. 30 SYS700
  4. 40 .OPT O2
  5. 50 CHKIN = $FFC6
  6. 60 CHKOUT = $FFC9
  7. 70 CHRIN = $FFCF
  8. 80 CHROUT = $FFD2
  9. 90 RDTIM = $FFDE
  10. 100 GETIN = $FFE4
  11. 110 CLRCHN = $FFCC
  12. 120 ;
  13. 130 NUMBYTES = $2B0
  14. 140 ;
  15. 150 AREG = 780
  16. 160 XREG = 781
  17. 170 YREG = 782
  18. 180 ;
  19. 190 RSSTAT = 663
  20. 200 RIDBE = 667
  21. 210 RIDBS = 668
  22. 220 ;
  23. 230 STATUS = $90
  24. 240 ;
  25. 250 ;
  26. 260 ; XMODEM CODES
  27. 270 ;
  28. 280 ACK = 6
  29. 290 NAK = 21
  30. 300 EOT = 4
  31. 310 CAN = 24
  32. 312 XOFF = 19
  33. 314 XON = 17
  34. 320 ;
  35. 330 ; TIMES FOR CLOCK
  36. 340 MINUTE = 3600
  37. 350 TENSEC = 600
  38. 360 ;
  39. 370 ;
  40. 380 ;
  41. 390 ; JUMP TABLE
  42. 400 ;
  43. 410 *= $CB10
  44. 440 JMP UPLOAD
  45. 450 JMP DOWNLOAD
  46. 470 JMP ASCUPLOAD
  47. 480 ;
  48. 490 MINUSONE .BYT $81,$80,0,0,0
  49. 500 DATA = $C900
  50. 510 SOH  = $C900
  51. 520 BLK  = $C901
  52. 530 COMPBLK = $C902
  53. 540 HALFBLOCK = $C903
  54. 550 ;
  55. 560 CKSUM = $C983
  56. 570 ;
  57. 580 DSOH = $C800
  58. 590 DBLK = $C801
  59. 600 DCOMPBLK = $C802
  60. 610 DCKSUM = $C804
  61. 620 ;
  62. 630 NTIMES = $C880
  63. 640 YTEMP = $C881
  64. 650 ;
  65. 660 ;
  66. 670 BUFF = $C810
  67. 680 COUNT = $C882
  68. 690 BLOCK = $C884
  69. 700 CHECK = $C886
  70. 710 YCOUNT = $C888
  71. 720 LASBLOCK = $C88A
  72. 730 ;
  73. 740 ;
  74. 750 EF .BYT 0
  75. 760 ;
  76. 770 POINTER .BYT 0
  77. 780 ;
  78. 790 CLOCK *=*+3
  79. 800 ;
  80. 810 INIT LDA #0
  81. 820 STA BLK
  82. 830 STA DBLK
  83. 840 STA CKSUM
  84. 850 STA CKSUM+1
  85. 860 STA DCKSUM
  86. 870 STA DCKSUM+1
  87. 880 STA EF
  88. 890 LDA #255
  89. 900 STA COMPBLK
  90. 910 STA DCOMPBLK
  91. 920 LDA #1
  92. 930 STA SOH
  93. 940 STA DSOH
  94. 950 RTS
  95. 960 ;
  96. 970 ;
  97. 980 XMODOUT = *
  98. 990 JSR CLRCHN
  99. 1000 LDX #2
  100. 1010 JSR CHKIN ;LOOK AT DISK
  101. 1020 LDY #0
  102. 1030 UPLDLOOP = *
  103. 1040 TYA
  104. 1050 ASL
  105. 1060 BCS XMIT
  106. 1070 JSR CHRIN
  107. 1080 TAX
  108. 1090 LDA STATUS
  109. 1100 BNE ENFILE
  110. 1110 TXA
  111. 1120 STA HALFBLOCK,Y
  112. 1130 INY
  113. 1140 CLC
  114. 1150 BCC UPLDLOOP
  115. 1160 ;
  116. 1170 ;
  117. 1180 ;
  118. 1190 ENFILE = *
  119. 1200 AND #64
  120. 1210 STA EF
  121. 1220 BEQ UPLDLOOP
  122. 1230 ; EOF REACHED, FILL WITH ZEROES
  123. 1240 TXA
  124. 1250 STA HALFBLOCK,Y
  125. 1260 LOOP2 INY
  126. 1270 TYA
  127. 1280 ASL
  128. 1290 BCS XMIT
  129. 1300 LDA #0
  130. 1310 STA HALFBLOCK,Y
  131. 1320 CLC
  132. 1330 BCC LOOP2
  133. 1340 ;
  134. 1350 ;
  135. 1360 ;
  136. 1370 XMIT = *
  137. 1380 STY NUMBYTES
  138. 1390 INC BLK
  139. 1400 DEC COMPBLK
  140. 1410 JSR CLRCHN
  141. 1420 LDX #5
  142. 1430 JSR CHKOUT
  143. 1440 LDX #0
  144. 1450 STX CKSUM
  145. 1460 ADDSUM = *
  146. 1470 LDA CKSUM
  147. 1480 CLC
  148. 1490 ADC DATA,X
  149. 1500 STA CKSUM
  150. 1510 INX
  151. 1520 CPX #131
  152. 1530 BNE ADDSUM
  153. 1540 XMITAGIN = *
  154. 1550 LDX #0
  155. 1560 SEND = *
  156. 1570 LDA DATA,X
  157. 1580 JSR CHROUT
  158. 1590 INX
  159. 1600 CPX #132
  160. 1610 BNE SEND
  161. 1620 JSR CLRCHN
  162. 1630 RTS
  163. 1640 ;
  164. 1650 ;
  165. 1660 ;
  166. 1670 EXIT = *
  167. 1680 JSR CLRCHN
  168. 1690 LDA $0810
  169. 1700 CMP #$14
  170. 1710 BEQ TOBASIC
  171. 1720 ; IF BLITZ, SIMPLY EXIT
  172. 1730 ; OTHERWISE, CHANGE VAR EOF
  173. 1740 LDA #"E"
  174. 1750 STA $45
  175. 1760 LDA #"O"
  176. 1770 STA $46
  177. 1780 JSR $B0E7
  178. 1790 LDY #0
  179. 1800 LDA NUMBYTES
  180. 1810 CMP #$80
  181. 1820 BEQ TRUE
  182. 1830 LDA #0
  183. 1840 ZRO = *
  184. 1850 STA ($47),Y
  185. 1860 INY
  186. 1870 CPY #5
  187. 1880 BCC ZRO
  188. 1890 RTS
  189. 1900 TRUE = *
  190. 1910 LDA MINUSONE,Y
  191. 1920 STA ($47),Y
  192. 1930 INY
  193. 1940 CPY #5
  194. 1950 BCC TRUE
  195. 1960 TOBASIC RTS
  196. 1970 ;
  197. 1980 ;
  198. 1990 ;
  199. 2000 INITCLOCK = *
  200. 2010 JSR RDTIM
  201. 2020 STY CLOCK
  202. 2030 STX CLOCK+1
  203. 2040 STA CLOCK+2
  204. 2050 RTS
  205. 2060 ;
  206. 2070 ;
  207. 2080 ;
  208. 2090 SETMINUTE = *
  209. 2100 LDA AREG
  210. 2110 LDX XREG
  211. 2120 LDY YREG
  212. 2130 JSR INITCLOCK
  213. 2140 LDA #<MINUTE
  214. 2150 CLC
  215. 2160 ADC CLOCK+2
  216. 2170 STA CLOCK+2
  217. 2180 LDA #>MINUTE
  218. 2190 ADC CLOCK+1
  219. 2200 STA CLOCK+1
  220. 2210 LDA #0
  221. 2220 ADC CLOCK
  222. 2230 STA CLOCK
  223. 2240 LDA AREG
  224. 2250 LDX XREG
  225. 2260 LDY YREG
  226. 2270 RTS
  227. 2280 ;
  228. 2290 ;
  229. 2300 ;
  230. 2310 SETTENSEC = *
  231. 2320 STA AREG
  232. 2330 STX XREG
  233. 2340 STY YREG
  234. 2350 JSR INITCLOCK
  235. 2360 LDA #<TENSEC
  236. 2370 CLC
  237. 2380 ADC CLOCK+2
  238. 2390 STA CLOCK+2
  239. 2400 LDA #>TENSEC
  240. 2410 ADC CLOCK+1
  241. 2420 STA CLOCK+1
  242. 2430 LDA #0
  243. 2440 ADC CLOCK
  244. 2450 STA CLOCK
  245. 2460 LDA AREG
  246. 2470 LDX XREG
  247. 2480 LDY YREG
  248. 2490 RTS
  249. 2500 ;
  250. 2510 ;
  251. 2520 ;
  252. 2530 CHEKTIME = *
  253. 2540 ; ALL REGISTERS SAVED
  254. 2550 ; SET TIME WITH ONE OF ROUTINES
  255. 2560 ; ABOVE--IF CARRY IS SET, THEN
  256. 2570 ; TIME WAS EXCEEDED, ELSE CARRY
  257. 2580 ; IS CLEAR
  258. 2590 STA AREG
  259. 2600 STX XREG
  260. 2610 STY YREG
  261. 2620 JSR RDTIM
  262. 2630 CMP CLOCK+2
  263. 2640 TXA
  264. 2650 SBC CLOCK+1
  265. 2660 TYA
  266. 2670 SBC CLOCK
  267. 2680 PHP
  268. 2690 LDA AREG
  269. 2700 LDX XREG
  270. 2710 LDY YREG
  271. 2720 PLP
  272. 2730 RTS
  273. 2740 ;
  274. 2750 ;
  275. 2760 ;
  276. 2770 UPLOAD = *
  277. 2780 JSR CLRCHN
  278. 2790 JSR INIT
  279. 2800 LDX #5
  280. 2810 JSR CHKIN
  281. 2820 JSR SETMINUTE
  282. 2830 NAKLOOP = *
  283. 2840 JSR GETIN
  284. 2850 CMP #NAK
  285. 2860 BEQ NEXTUP
  286. 2870 JSR CHEKTIME
  287. 2880 BCC NAKLOOP
  288. 2890 LDA #0
  289. 2900 STA NUMBYTES
  290. 2910 JMP EXIT
  291. 2920 ;
  292. 2930 ;
  293. 2940 ;
  294. 2950 NEXTUP = *
  295. 2960 JSR XMODOUT
  296. 2970 LOOPAGIN = *
  297. 2980 JSR SETMINUTE
  298. 2990 LDX #5
  299. 3000 JSR CHKIN
  300. 3010 ;
  301. 3020 ;
  302. 3030 ;
  303. 3040 BLKLOOP = *
  304. 3050 JSR GETIN
  305. 3060 CMP #ACK
  306. 3070 BEQ CHEKEOF
  307. 3080 CMP #CAN
  308. 3090 BNE NAKCHEK
  309. 3100 JSR CLRCHN
  310. 3110 LDA #"[166]"
  311. 3120 JSR CHROUT
  312. 3130 LDA #0 : STA NUMBYTES : JMP EXIT
  313. 3140 NAKCHEK = *
  314. 3150 CMP #NAK
  315. 3160 BNE TIM
  316. 3170 JSR CLRCHN
  317. 3180 LDA #":"
  318. 3190 JSR CHROUT
  319. 3200 LDX #5
  320. 3210 JSR CHKOUT
  321. 3220 JSR XMITAGIN
  322. 3230 JMP LOOPAGIN
  323. 3240 TIM = *
  324. 3250 JSR CHEKTIME
  325. 3260 BCC BLKLOOP
  326. 3270 LDA #0 :  STA NUMBYTES : JMP EXIT
  327. 3280 ;
  328. 3290 ;
  329. 3300 ;
  330. 3310 CHEKEOF = *
  331. 3320 LDA EF
  332. 3330 BNE SENDEOT
  333. 3340 JSR CLRCHN
  334. 3350 LDA #"-"
  335. 3360 JSR CHROUT
  336. 3370 JMP NEXTUP
  337. 3380 SENDEOT = *
  338. 3390 JSR CLRCHN
  339. 3400 LDX #5
  340. 3410 JSR CHKOUT
  341. 3420 LDA #EOT
  342. 3430 JSR CHROUT
  343. 3440 JSR CLRCHN
  344. 3450 LDA #"*"
  345. 3460 JSR CHROUT
  346. 3470 LDA #$80 : STA NUMBYTES : JMP EXIT
  347. 3480 ; END OF XMODEM XMIT ROUTINE. NOW
  348. 3490 ; WE NEED STRING XMIT CODES
  349. 3500 ;
  350. 3510 ;
  351. 3520 ;
  352. 3530 ;
  353. 3540 DOWNLOAD = *
  354. 3550 TSX
  355. 3560 STX POINTER
  356. 3570 ;
  357. 3580 JSR INIT
  358. 3590 JSR CLRCHN
  359. 3600 LDA RIDBE
  360. 3610 STA RIDBS
  361. 3620 ;
  362. 3630 LDX #5
  363. 3640 JSR CHKOUT
  364. 3650 LDA #NAK
  365. 3660 JSR CHROUT
  366. 3670 ;
  367. 3680 LDA #0
  368. 3690 STA YTEMP
  369. 3700 STA NTIMES
  370. 3710 ;
  371. 3720 ;
  372. 3730 ;
  373. 3740 NEWBLK = *
  374. 3750 JSR SETTENSEC
  375. 3760 ;
  376. 3770 INC DBLK
  377. 3780 DEC DCOMPBLK
  378. 3790 ;
  379. 3800 JSR CLRCHN
  380. 3810 LDX #5
  381. 3820 JSR CHKIN
  382. 3830 ;
  383. 3840 ;
  384. 3850 ;
  385. 3860 ;
  386. 3870 DLOOP = *
  387. 3880 JSR GETIN
  388. 3890 PHA
  389. 3900 LDA RSSTAT
  390. 3910 BEQ STORBYTE
  391. 3920 AND #8
  392. 3930 BEQ STORBYTE
  393. 3940 PLA
  394. 3950 JSR CHEKTIME
  395. 3960 BCC DLOOP
  396. 3970 JMP SENDNAK
  397. 3980 ;
  398. 3990 ;
  399. 4000 ;
  400. 4010 STORBYTE = *
  401. 4020 JSR SETTENSEC
  402. 4030 LDY YTEMP
  403. 4040 PLA
  404. 4050 STA DATA,Y
  405. 4060 INY
  406. 4070 STY YTEMP
  407. 4080 CPY #132
  408. 4090 BNE DLOOP
  409. 4100 ;
  410. 4110 ;
  411. 4120 ;
  412. 4130 CHEKDATA = *
  413. 4140 ; CHECK BLK, CKSUMS ETC FOR CORRECTNESS
  414. 4150 LDA SOH
  415. 4160 CMP #1
  416. 4170 BNE SENDNAK
  417. 4180 ;
  418. 4190 LDA BLK
  419. 4200 CMP DBLK
  420. 4210 BNE SENDNAK
  421. 4220 ;
  422. 4230 LDA COMPBLK
  423. 4240 CMP DCOMPBLK
  424. 4250 BNE SENDNAK
  425. 4260 ;
  426. 4270 LDA #0
  427. 4280 STA DCKSUM
  428. 4290 ;
  429. 4300 ;
  430. 4310 ;
  431. 4320 LDY #0
  432. 4330 CKLOOP = *
  433. 4340 LDA DATA,Y
  434. 4350 CLC
  435. 4360 ADC DCKSUM
  436. 4370 STA DCKSUM
  437. 4380 INY
  438. 4390 CPY #131
  439. 4400 BNE CKLOOP
  440. 4410 CMP CKSUM
  441. 4420 BNE SENDNAK
  442. 4430 ;
  443. 4440 ;
  444. 4450 ;
  445. 4460 ; DATA OK TO WRITE TO DISK
  446. 4470 ;
  447. 4480 JSR CLRCHN
  448. 4490 LDX #2
  449. 4500 JSR CHKOUT
  450. 4510 LDY #$FF
  451. 4520 WRITDISK = *
  452. 4530 INY
  453. 4540 LDA HALFBLOCK,Y
  454. 4550 JSR CHROUT
  455. 4560 CPY #$7F
  456. 4570 BCC WRITDISK
  457. 4580 JSR CLRCHN
  458. 4590 LDA #"-"
  459. 4600 JSR CHROUT
  460. 4610 JMP CHEKEOT
  461. 4620 ;
  462. 4630 ; THREE ROUTINES LEFT -- CHEKEOT,
  463. 4640 ; SENDNAK, AND TERMINATE
  464. 4650 ;
  465. 4660 SENDNAK = *
  466. 4670 JSR CLRCHN
  467. 4680 LDA RIDBE
  468. 4690 STA RIDBS
  469. 4700 LDA #":"
  470. 4710 JSR CHROUT
  471. 4720 LDX #5
  472. 4730 JSR CHKOUT
  473. 4740 INC NTIMES
  474. 4750 LDX NTIMES
  475. 4760 CPX #10
  476. 4770 BCS TERMINATE
  477. 4780 LDA #NAK
  478. 4790 JSR CHROUT
  479. 4800 ;
  480. 4810 ; SETTING DLOOP FOR ANOTHER DLOAD
  481. 4820 ; WITHOUT INCREMENTING BLK ETC
  482. 4830 ;
  483. 4840 LDY #0
  484. 4850 STY YTEMP
  485. 4860 JSR CLRCHN
  486. 4870 LDX #5
  487. 4880 JSR CHKIN
  488. 4890 JSR SETTENSEC
  489. 4900 JMP DLOOP
  490. 4910 ;
  491. 4920 ;
  492. 4930 ;
  493. 4940 TERMINATE = *
  494. 4950 TSX
  495. 4960 CPX POINTER
  496. 4970 BEQ TCONT
  497. 4980 INX
  498. 4990 TXS
  499. 5000 CLC
  500. 5010 BCC TERMINATE
  501. 5020 TCONT = *
  502. 5030 JSR CLRCHN
  503. 5040 LDA #"[166]"
  504. 5050 JSR CHROUT
  505. 5060 LDX #5
  506. 5070 JSR CHKOUT
  507. 5080 LDA #CAN
  508. 5090 JSR CHROUT
  509. 5100 LDA #0 : LDA NUMBYTES : JMP EXIT
  510. 5110 ;
  511. 5120 ;
  512. 5130 ;
  513. 5140 CHEKEOT = *
  514. 5150 LDA #0
  515. 5160 STA NTIMES
  516. 5170 JSR CLRCHN
  517. 5180 LDX #5
  518. 5190 JSR CHKOUT
  519. 5200 LDA #ACK
  520. 5210 JSR CHROUT
  521. 5220 JSR CLRCHN
  522. 5230 LDX #5
  523. 5240 JSR CHKIN
  524. 5250 JSR SETTENSEC
  525. 5260 EOTLOOP = *
  526. 5270 JSR GETIN
  527. 5280 PHA
  528. 5290 LDA RSSTAT
  529. 5300 AND #8
  530. 5310 BEQ EOTOUT
  531. 5320 PLA
  532. 5330 JSR CHEKTIME
  533. 5340 BCC EOTLOOP
  534. 5350 JMP SENDNAK
  535. 5360 EOTOUT = *
  536. 5370 PLA
  537. 5380 CMP #EOT
  538. 5390 BEQ FILEEND
  539. 5400 STA DATA
  540. 5410 LDY #1
  541. 5420 STY YTEMP
  542. 5430 JMP NEWBLK
  543. 5440 FILEEND = *
  544. 5450 JSR CLRCHN
  545. 5460 LDA #"*"
  546. 5470 JSR CHROUT
  547. 5480 LDX #5
  548. 5490 JSR CHKOUT
  549. 5500 LDA #ACK
  550. 5510 JSR CHROUT
  551. 5520 JSR CLRCHN
  552. 5530 LDA #$80 : STA NUMBYTES : JMP EXIT
  553. 5540 ;
  554. 5550 ;
  555. 5560 ;
  556. 7230 ;
  557. 7240 ASCUPLOAD = *
  558. 7250 TEXTLOOP JSR CLRCHN
  559. 7260 LDX #2
  560. 7270 JSR CHKIN
  561. 7280 JSR CHRIN
  562. 7290 LDX $90
  563. 7300 BNE LEAVE
  564. 7310 PHA
  565. 7320 JSR CHROUT
  566. 7330 LDX #5
  567. 7340 JSR CHKOUT
  568. 7350 PLA
  569. 7360 JSR PETASCII
  570. 7370 JSR CHROUT
  571. 7380 JSR CLRCHN
  572. 7390 LDX #5
  573. 7400 JSR CHKIN
  574. 7410 JSR GETIN
  575. 7420 CMP #XOFF
  576. 7430 BEQ ASCWAIT
  577. 7440 CLC
  578. 7450 BCC TEXTLOOP
  579. 7460 LEAVE JSR CLRCHN
  580. 7470 RTS
  581. 7480 ASCWAIT = *
  582. 7490 JSR SETMINUTE
  583. 7500 WAITMORE = *
  584. 7510 JSR GETIN
  585. 7520 CMP #XON
  586. 7530 BEQ TEXTLOOP
  587. 7540 JSR CHEKTIME
  588. 7550 BCS WAITMORE
  589. 7560 BCC TEXTLOOP
  590. 7570 PETASCII = *
  591. 7580 CMP #13
  592. 7590 BNE PA1
  593. 7600 RTS
  594. 7610 PA1 = *
  595. 7620 CMP #20
  596. 7630 BNE PA2
  597. 7640 LDA #8
  598. 7650 RTS
  599. 7660 PA2 = *
  600. 7670 CMP #65
  601. 7680 BCS PA3
  602. 7690 RTS
  603. 7700 PA3 = *
  604. 7710 CMP #91
  605. 7720 BCS PA4
  606. 7730 ORA #$20
  607. 7740 RTS
  608. 7750 PA4 = *
  609. 7760 CMP #96
  610. 7770 BCS PA5
  611. 7780 RTS
  612. 7790 PA5 = *
  613. 7800 CMP #141
  614. 7810 BNE PA6
  615. 7820 LDA #13
  616. 7830 RTS
  617. 7840 PA6 = *
  618. 7850 CMP #147
  619. 7860 BNE PA7
  620. 7870 LDA #12
  621. 7880 RTS
  622. 7890 PA7 = *
  623. 7900 CMP #160
  624. 7910 BNE PA8
  625. 7920 LDA #32
  626. 7930 RTS
  627. 7940 PA8 = *
  628. 7950 CMP #193
  629. 7960 BCS PA9
  630. 7970 PA10 = *
  631. 7980 LDA #0
  632. 7990 RTS
  633. 8000 PA9 = *
  634. 8010 CMP #219
  635. 8020 BCS PA10
  636. 8030 AND #$7F
  637. 8040 RTS
  638. 8050 .END
  639.