home *** CD-ROM | disk | FTP | other *** search
/ Columbia Kermit / kermit.zip / pub / trs80coco / ccprot.asm < prev    next >
Assembly Source File  |  2020-01-01  |  21KB  |  933 lines

  1. 00010 * COLOR COMPUTER KERMIT VERSION 1.1 03/85
  2. 00020 * COPYRIGHT (C) 1985 BY WES HUBERT
  3. 00030 * 3020 STEVEN DRIVE, LAWRENCE, KS 66044
  4. 00040 *
  5. 00050 * THIS IS AN IMPLEMENTATION OF THE KERMIT
  6. 00060 * PROTOCOL DEVELOPED BY FRANK DA CRUZ AND
  7. 00070 * BILL CATCHINGS AT THE COLUMBIA UNIVERSITY
  8. 00080 * CENTER FOR COMPUTING ACTIVITIES.
  9. 00090 *
  10. 00100 * THE USUAL KERMIT PERMISSIONS APPLY:
  11. 00110 * THE PROGRAM MAY BE COPIED FOR PRIVATE USE
  12. 00120 * OR NON-PROFIT DISTRIBUTION, BUT CANNOT BE
  13. 00130 * SOLD OR INCORPORATED INTO OTHER SOFTWARE
  14. 00140 * SOLD FOR PROFIT.
  15. 00150 *
  16. 00160 * THIS VERSION OF KERMIT RUNS ON THE TRS-80
  17. 00170 * COLOR COMPUTER.  IT SHOULD WORK WITH BOTH
  18. 00180 * VERSION 1.0 AND 1.1 DISK ROM.
  19. 00190 * MINIMUM SYSTEM IS 16K WITH ONE DISK.
  20. 00200 *
  21. 00210 * THIS PORTION OF THE CODE PERFORMS KERMIT
  22. 00220 * PROTOCOL TRANSFERS.  IT REQUIRES PRIOR
  23. 00230 * LOADING OF A SEPARATE PROGRAM FOR
  24. 00240 * KERMIT-COCO GENERAL TERMINAL FUNCTIONS.
  25. 00250 *
  26. 00260 * THIS CODE IS SUITABLE FOR THE RADIO SHACK
  27. 00270 * EDTASM ASSEMBLER.  IT WAS PREPARED FROM THE
  28. 00280 * ROM-PACK VERSION WITH THE DISK I/O MODS
  29. 00290 * FROM RAINBOW MAGAZINE.
  30. 00300 *
  31. 00310 * SINCE THIS IS AN IN-MEMORY ASSMBLER
  32. 00320 * (ASSEMBLER, CODE AND SYMBOL TABLES
  33. 00330 * ALL RESIDE IN MEMORY) COMMENTS ARE
  34. 00340 * SKETCHY.  THESE COMMENTS DOWN TO
  35. 00350 * THE ORG MUST BE DELETED TO GET
  36. 00360 * ENOUGH MEMORY TO ASSEMBLE.
  37. 00370 *
  38. 00380 * 1. ASSEMBLE BOTH TERMINAL & PROTOCOL CODE.
  39. 00390 * 2. PCLEAR 1: CLEAR 10,&H1FFF
  40. 00400 * 3. LOADM"COCOTERM"
  41. 00410 * 4. LOADM"COCOPROT"
  42. 00420 * 5. SAVEM"CCKERMIT",&H2000,&H2FFF,&H2000
  43. 00430 *
  44. 00440 * THIS VERSION OF KERMIT SENDS OR RECEIVES
  45. 00450 * ONLY ONE FILE AT A TIME.  THE NAME MUST
  46. 00460 * BE EXPLICITLY GIVEN BY THE USER.  THIS
  47. 00470 * IS TO PLACE RESPONSIBILITY TO AVOID
  48. 00480 * OVERWRITING EXISTING FILES ON THE USER.
  49. 00490 *
  50. 00500 *************************
  51. 00510 * KERMIT-COCO ENTRIES    *
  52. 00520 *************************
  53. 00530 *
  54. 00540     ORG    $2800    (ADDRESS KNOWN TO TERMINAL CODE)
  55. 00550     BRA    LRCV    (RECEIVE)
  56. 00560     BRA    LSEND    (SEND)
  57. 00570     BRA    LSET    (SET-UP)
  58. 00580 LRCV    LBRA    KRCV
  59. 00590 LSEND    LBRA    KSEND
  60. 00600 LSET    LBRA    KSET
  61. 00610 *
  62. 00620 *************************
  63. 00630 * TERMINAL ENTRY POINTS    *
  64. 00640 *************************
  65. 00650 *
  66. 00660 RS232I    EQU    $2002    (RS232 INPUT)
  67. 00670 RS232O    EQU    $2004    (RS232 OUTPUT)
  68. 00680 KEYIN    EQU    $2006    (KEYBOARD INPUT)
  69. 00690 CHROUT    EQU    $2008    (DISPLAY OUTPUT)
  70. 00700 INNAME    EQU    $200A    (OPEN INPUT FILE)
  71. 00710 OTNAME    EQU    $200C    (OPEN OUTPUT FILE)
  72. 00720 FCLOSE    EQU    $200E    (CLOSE FILE)
  73. 00730 WAIT    EQU    $2010    (PAUSE 1 BIT TIME)
  74. 00740 QEOF    EQU    $2012    (TEST FILE EOF)
  75. 00750 FNAME    EQU    $2014    (FILENAME BUFFER)
  76. 00760 *
  77. 00770 *************************
  78. 00780 * COCO DEFINITIONS    *
  79. 00790 *************************
  80. 00800 *
  81. 00810 UNIT    EQU    $6F    (I/O UNIT#)
  82. 00820 SCRPTR    EQU    $88    (SCREEN POINTER)
  83. 00830 SCREEN    EQU    $400    (SCREEN MEMORY)
  84. 00840 RTYPE    EQU    $957    (TYPE/MODE)
  85. 00850 PUTCHR    EQU    $A002    (PUT CHAR, INDIRECT)
  86. 00860 GETCHR    EQU    $A176    (READ SINGLE CHAR)
  87. 00870 INPIA    EQU    $FF22    (INPUT PIA)
  88. 00880 *
  89. 00890 HEADER    FCC    'KERMIT-COCO 1.1'
  90. 00900     FCB    0
  91. 00910 *
  92. 00920 *************************
  93. 00930 * KERMIT INIT PACKET    *
  94. 00940 *************************
  95. 00950 *
  96. 00960 INPAK    RMB    0
  97. 00970 INLNG    FCB    44    (LENGTH+32)
  98. 00980     FCB    32    (PACKNO+32)
  99. 00990 INTYPE    FCC    'S'    (SEND INIT)
  100. 01000 MYMAXL    FCB    126    (MAX PACKET SIZE+32)
  101. 01010 MYTIME    FCB    47    (15 SECOND TIMEOUT)
  102. 01020 MYPADN    FCB    33    (1 PAD CHAR)
  103. 01030 MYPADC    FCB    $40    (NULL)
  104. 01040 MYEOLI    FCB    45    (EOL=CARRIAGE RETURN)
  105. 01050 MYQCTL    FCC    '#'    (CONTROL QUOTE)
  106. 01060 MYQBIN    FCC    '&'    (BINARY QUOTE)
  107. 01070 MYCHKT    FCC    '1'    (1-BYTE CHECKSUM)
  108. 01080 MYREPT    FCB    32    (NO REPEATS)
  109. 01090     RMB    1    (PLACE FOR CHECKSUM)
  110. 01100 MYEOL    FCB    13    (MYEOLI-32)
  111. 01110 *
  112. 01120 *************************
  113. 01130 * REMOTE CHARACTERISTICS*
  114. 01140 *************************
  115. 01150 *
  116. 01160 MAXL    FCB    94    (MAY BE
  117. 01170 PADN    FCB    0     REVISED
  118. 01180 PADC    FCB    0     BY THE
  119. 01190 QCTL    FCC    '#'     REMOTE INIT
  120. 01200 QBIN    FCC    '&'     PACKET)
  121. 01210 *
  122. 01220 *************************
  123. 01230 * SETABLE PARAMETERS    *
  124. 01240 *************************
  125. 01250 *
  126. 01260 FTYPE    FCB    0    (FILE TYPE=BASIC)
  127. 01270 FMODE    FCB    $FF    (FILE MODE=ASCII)
  128. 01280 EOL    FCB    13    (C.R.)
  129. 01290 MAXTRY    FCB    5    (# OF RETRIES)
  130. 01300 SOH    FCB    1    (PACKET HEADER)
  131. 01310 QDEBUG    FCB    0    (0=NODEBUG)
  132. 01320 *
  133. 01330 *************************
  134. 01340 * FILE NAME PACKET    *
  135. 01350 *************************
  136. 01360 *
  137. 01370 FBUFF    FCB    0    (LENGTH)
  138. 01380     FCB    33    (PACKET #)
  139. 01390     FCC    'F'    (TYPE)
  140. 01400 FBN    RMB    12    (NAME)
  141. 01410     RMB    1    (CHECKSUM)
  142. 01420 *
  143. 01430 *************************
  144. 01440 * SCRATCH VARIABLES    *
  145. 01450 *************************
  146. 01460 *
  147. 01470 NPACK    RMB    2    (CURRENT PACKET)
  148. 01480 NTRY    RMB    1    (REMAINING RETRIES)
  149. 01490 SNUM    RMB    1    (PACKET MOD 64)
  150. 01500 QCR    RMB    1    (CR PENDING)
  151. 01510 FBIN    RMB    1    (HIGH BIT FLAG)
  152. 01520 NEEDAK    RMB    1    (ACK PENDING)
  153. 01530 *
  154. 01540 *************************
  155. 01550 * READ CHAR FROM FILE 1 *
  156. 01560 * RETURN CHAR IN A    *
  157. 01570 * CLEAR Z FLAG ON EOF    *
  158. 01580 *************************
  159. 01590 *
  160. 01600 FGET    LDA    #1    (UNIT #1)
  161. 01610     STA    UNIT
  162. 01620     JSR    [QEOF]
  163. 01630     BNE    FGETE
  164. 01640     JSR    GETCHR    (BASIC ROM)
  165. 01650     CLR    UNIT
  166. 01660     CLRB
  167. 01670     RTS
  168. 01680 FGETE    CLR    UNIT
  169. 01690     LDB    #1    (FLAG EOF)
  170. 01700     RTS
  171. 01710 *
  172. 01720 *************************
  173. 01730 * PUT CHAR INTO FILE 1  *
  174. 01740 * RECEIVE CHAR IN A    *
  175. 01750 *************************
  176. 01760 *
  177. 01770 FPUT    PSHS    X,B
  178. 01780     LDB    #1    (UNIT #1)
  179. 01790     STB    UNIT
  180. 01800     JSR    [PUTCHR]
  181. 01810     PULS    X,B
  182. 01820     CLR    UNIT    (BACK TO SCREEN)
  183. 01830     RTS
  184. 01840 *
  185. 01850 *************************
  186. 01860 * SYNC AFTER RS232 INPUT*
  187. 01870 *************************
  188. 01880 *
  189. 01890 SYNC    PSHS    A    (SAVE INCHAR)
  190. 01900     JSR    [WAIT]    (ONE BIT-TIME)
  191. 01910 SYNC1    LDA    INPIA
  192. 01920     LSRA
  193. 01930     BCC    SYNC1    (WAIT FOR STOP BIT)
  194. 01940     PULS    A
  195. 01950     RTS
  196. 01960 *
  197. 01970 *************************
  198. 01980 * PRINT STRING [X]    *
  199. 01990 * STRING ENDS WITH NULL    *
  200. 02000 *************************
  201. 02010 *
  202. 02020 PRINT    LDA    ,X+    (CHAR FROM STRING)
  203. 02030     BEQ    PRINTX    (NULL MARKS END)
  204. 02040     JSR    [CHROUT]
  205. 02050     BRA    PRINT
  206. 02060 PRINTX    RTS
  207. 02070 *
  208. 02080 *************************
  209. 02090 * CURSOR TO LINE=A,COL=B*
  210. 02100 *************************
  211. 02110 *
  212. 02120 AT    PSHS    D
  213. 02130     LDB    #32    (LINE 0-15)
  214. 02140     MUL
  215. 02150     CLR    ,S
  216. 02160     ADDD    ,S++    (ADD COL 0-31)
  217. 02170     ADDD    #SCREEN    (SCREEN ORIGIN)
  218. 02180     STD    SCRPTR
  219. 02190     RTS
  220. 02200 *
  221. 02210 *************************
  222. 02220 * BINARY VALUE TO HEX    *
  223. 02230 *************************
  224. 02240 *
  225. 02250 TOHEX    PSHS    A    (BINARY VALUE)
  226. 02260     CLRB
  227. 02270     LSLA        (HIGH 4 BITS TO B)
  228. 02280     ROLB
  229. 02290     LSLA
  230. 02300     ROLB
  231. 02310     LSLA
  232. 02320     ROLB
  233. 02330     LSLA
  234. 02340     ROLB
  235. 02350     PULS    A
  236. 02360     ANDA    #$F    (ORIGINAL LOW 4)
  237. 02370     ADDD    #$3030    (ASCII EXCESS)
  238. 02380     CMPA    #$39
  239. 02390     BLE    THX2
  240. 02400     ADDA    #7
  241. 02410 THX2    CMPB    #$39
  242. 02420     BLE    THX4
  243. 02430     ADDB    #7
  244. 02440 THX4    EXG    A,B
  245. 02450     RTS
  246. 02460 *
  247. 02470 *************************
  248. 02480 * OUTPUT VAL(A) IN HEX  *
  249. 02490 *************************
  250. 02500 *
  251. 02510 HEXOUT    BSR    TOHEX    (VAL(A) TO HEX(D))
  252. 02520     PSHS    B
  253. 02530     JSR    [CHROUT]
  254. 02540     PULS    A
  255. 02550     JSR    [CHROUT]
  256. 02560     RTS
  257. 02570 *
  258. 02580 *************************
  259. 02590 * CLEAR SCREEN        *
  260. 02600 *************************
  261. 02610 *
  262. 02620 CLEAR    LDD    #SCREEN
  263. 02630     STD    SCRPTR    (HOME CURSOR)
  264. 02640     LDX    #SCREEN+$80
  265. 02650     LDY    #SCREEN+$180
  266. 02660     LDD    #$6000    (60=SCREEN BLANK)
  267. 02670 CLR2    STA    B,X
  268. 02680     STA    B,Y
  269. 02690     INCB
  270. 02700     BNE    CLR2    (256 TIMES)
  271. 02710     RTS
  272. 02720 *
  273. 02730 *************************
  274. 02740 * SHOW CURRENT PACKET #    *
  275. 02750 *************************
  276. 02760 *
  277. 02770 SNDSTS    LDD    SCRPTR    (SAVE SCREEN LOC)
  278. 02780     PSHS    X,D
  279. 02790     LDD    #$0308    (LINE 4, COL 9)
  280. 02800     LBSR    AT    (MOVE CURSOR)
  281. 02810     LDA    NPACK,PCR
  282. 02820     BSR    HEXOUT
  283. 02830     LDA    1+NPACK,PCR
  284. 02840     BSR    HEXOUT
  285. 02850     PULS    X,D
  286. 02860     STD    SCRPTR
  287. 02870     RTS
  288. 02880 *
  289. 02890 *************************
  290. 02900 * ECHO PACKET TO SCREEN *
  291. 02910 * RECEIVE A=LINE, B=CHR    *
  292. 02920 * FOR START OF DISPLAY    *
  293. 02930 *************************
  294. 02940 *
  295. 02950 ECHO    LDY    SCRPTR    (SAVE SCREEN LOC)
  296. 02960     PSHS    Y
  297. 02970     LBSR    AT
  298. 02980     LDA    ,X+    (LENGTH)
  299. 02990     SUBA    #32
  300. 03000     ANDA    #$7F    (128 CHAR MAX)
  301. 03010     PSHS    A
  302. 03020 ECHO2    LDA    ,X+
  303. 03030     JSR    [CHROUT]
  304. 03040     DEC    ,S
  305. 03050     BNE    ECHO2
  306. 03060     LDA    #'     (ADD BLANKS)
  307. 03070 ECHO4    JSR    [CHROUT]
  308. 03080     LDB    1+SCRPTR
  309. 03090     INCB
  310. 03100     ANDB    #$7F    (TO EVEN 128 BYTES)
  311. 03110     BNE    ECHO4
  312. 03120     PULS    A
  313. 03130     PULS    D    (SCREEN LOC)
  314. 03140     STD    SCRPTR
  315. 03150     RTS
  316. 03160 *
  317. 03170 *************************
  318. 03180 * PREPARE TO SEND PACKET*
  319. 03190 *************************
  320. 03200 *
  321. 03210 NEWPAK    LDA    MAXTRY,PCR
  322. 03220     STA    NTRY,PCR (SET # RETRIES)
  323. 03230     LDD    NPACK,PCR
  324. 03240     ADDD    #1    (BUMP PACKET #)
  325. 03250     STD    NPACK,PCR
  326. 03260     RTS
  327. 03270 *
  328. 03280 *************************
  329. 03290 *  COMPUTE CHECKSUM    *
  330. 03300 * PACKET ADDRESS IN X    *
  331. 03310 * RETURN CHECKSUM IN A    *
  332. 03320 * CHECKSUM ADDRESS IN X    *
  333. 03330 *************************
  334. 03340 *
  335. 03350 CHKSUM    CLRB
  336. 03360     LDA    ,X    (LENGTH)
  337. 03370     SUBA    #32
  338. 03380     BEQ    CHKX
  339. 03390 CHK2    ADDB    ,X+
  340. 03400     DECA
  341. 03410     BNE    CHK2    (SUM ALL BYTES)
  342. 03420     TFR    B,A
  343. 03430     ROLB        (MOVE HIGH 2 BITS
  344. 03440     ROLB         TO LOW BITS
  345. 03450     ROLB         THROUGH CARRY)
  346. 03460     ANDB    #3    (2 BITS ONLY)
  347. 03470     PSHS    B
  348. 03480     ADDA    ,S+    (ADD INTO LOW 6)
  349. 03490     ANDA    #$3F    (KEEP 6 BITS)
  350. 03500 CHKX    ADDA    #32    (PRINTING ASCII)
  351. 03510     RTS
  352. 03520 *
  353. 03530 *************************
  354. 03540 * GET PARAMS FROM S PAK *
  355. 03550 *************************
  356. 03560 *
  357. 03570 REMINI    LEAX    RBUFF,PCR
  358. 03580     CLR    QBIN,PCR    (CLEAR 8TH-BIT QUOTE)
  359. 03590     LDB    ,X    (LENGTH)
  360. 03600     SUBB    #35    (LESS SEQ,TYPE,CHKSUM,32)
  361. 03610     BEQ    REMX
  362. 03620     LDA    3,X
  363. 03630     SUBA    #32
  364. 03640     STA    MAXL,PCR
  365. 03650     DECB
  366. 03660     BEQ    REMX
  367. 03670     DECB        (CAN'T TIME OUT)
  368. 03680     BEQ    REMX
  369. 03690     LDA    5,X
  370. 03700     SUBA    #32
  371. 03710     STA    PADN,PCR
  372. 03720     DECB
  373. 03730     BEQ    REMX
  374. 03740     LDA    6,X
  375. 03750     EORA    #$40
  376. 03760     STA    PADC,PCR
  377. 03770     DECB
  378. 03780     BEQ    REMX
  379. 03790     DECB
  380. 03800     BEQ    REMX
  381. 03810     LDA    8,X
  382. 03820     STA    QCTL,PCR
  383. 03830     DECB
  384. 03840     BEQ    REMX
  385. 03850     LDA    9,X
  386. 03860     CMPA    #'Y    (Y=& IF REQUESTED)
  387. 03870     BNE    REM4
  388. 03880     LDA    #'&
  389. 03890 REM4    STA    QBIN,PCR
  390. 03900 REMX    RTS
  391. 03910 *
  392. 03920 *************************
  393. 03930 * PUT CHAR INTO PACKET    *
  394. 03940 * RECEIVE CHAR IN A    *
  395. 03950 * PACKET ADDRESS IN X    *
  396. 03960 * CLEAR Z IF PACKET FULL*
  397. 03970 *************************
  398. 03980 *
  399. 03990 KRMPUT    PSHS    X    (PACKET ADDRESS)
  400. 04000     LDB    ,X    (CURRENT LENGTH)
  401. 04010     SUBB    #32    (TOCHAR OFFSET)
  402. 04020     ABX        (CURRENT CHAR)
  403. 04030     LDB    QBIN,PCR  (CHECK 8-BIT QUOTE)
  404. 04040     CMPB    MYQBIN,PCR
  405. 04050     BEQ    KRMP0     
  406. 04060     ANDA    #$7F  (IGNORE HIGH BIT)
  407. 04070     BRA    KRMP1
  408. 04080 KRMP0    TSTA        (CHECK HIGH BIT)
  409. 04090     BPL    KRMP1
  410. 04100     LDB    MYQBIN,PCR
  411. 04110     STB    ,X+
  412. 04120     ANDA    #$7F
  413. 04130     BRA    KRMP2
  414. 04140 KRMP1    CMPA    #$0D    (CR INTO CR,LF)
  415. 04150     BNE    KRMP2
  416. 04160     TST    FMODE,PCR
  417. 04170     BEQ    KRMP2    (UNLESS BINARY)
  418. 04180     LDB    MYQCTL,PCR
  419. 04190     STB    ,X+
  420. 04200     EORA    #$40
  421. 04210     STA    ,X+
  422. 04220     STB    ,X+
  423. 04230     LDA    #$0A
  424. 04240     EORA    #$40
  425. 04250     BRA    KRMP6
  426. 04260 KRMP2    CMPA    MYQCTL,PCR  (SEE IF CTL FLAG)
  427. 04270     BNE    KRMP3
  428. 04280     EORA    #$40    (TEMPORARY SHIFT)
  429. 04290     BRA    KRMP5
  430. 04300 KRMP3    CMPA    MYQBIN,PCR  (SEE IF BIN FLAG)
  431. 04310     BNE    KRMP4
  432. 04320     CMPA    QBIN,PCR  (CHECK 8TH-BIT QUOTE)
  433. 04330     BNE    KRMP4
  434. 04340     EORA    #$40    (TEMPORARY SHIFT)
  435. 04350     BRA    KRMP5
  436. 04360 KRMP4    CMPA    #32    (SEE IF CONTROL)
  437. 04370     BMI    KRMP5
  438. 04380     CMPA    #$7F    (RUBOUT)
  439. 04390     BNE    KRMP6
  440. 04400 KRMP5    LDB    MYQCTL,PCR
  441. 04410     STB    ,X+
  442. 04420     EORA    #$40
  443. 04430 KRMP6    STA    ,X+
  444. 04440 *
  445. 04450     TFR    X,D    (NEW NEXT POSITION)
  446. 04460     SUBD    ,S    (LESS PACKET ORIGIN)
  447. 04470     PULS    X
  448. 04480     ADDB    #32
  449. 04490     STB    ,X    (LENGTH)
  450. 04500     SUBB    #28    (NEED UP TO 4 MORE)
  451. 04510     CMPB    MAXL,PCR
  452. 04520     BMI    KRMP9
  453. 04530     LDB    #1    (FLAG END OF PACKET)
  454. 04540     RTS
  455. 04550 KRMP9    CLRB
  456. 04560     RTS
  457. 04570 *
  458. 04580 *************************
  459. 04590 * SEND PACKET        *
  460. 04600 * PACKET ADDRESS IN X    *
  461. 04610 *************************
  462. 04620 *
  463. 04630 SNDPAK    PSHS    X    (HOLD ADDRESS)
  464. 04640     LBSR    CHKSUM
  465. 04650     STA    ,X
  466. 04660     TST    QDEBUG,PCR
  467. 04670     BEQ    SND2
  468. 04680     LDD    #$0800    (LINE 9)
  469. 04690     LDX    ,S
  470. 04700     LBSR    ECHO
  471. 04710 SND2    LDB    PADN,PCR
  472. 04720     PSHS    B
  473. 04730 SND3    DEC    ,S
  474. 04740     BMI    SND4
  475. 04750     LDA    PADC,PCR
  476. 04760     JSR    [RS232O] (SEND PAD)
  477. 04770     BRA    SND3
  478. 04780 SND4    PULS    B
  479. 04790     LBSR    SNDSTS    (SHOW PACKET #)
  480. 04800     LDA    SOH,PCR
  481. 04810     JSR    [RS232O] (SEND SOH)
  482. 04820     LDX    ,S    (ADDRESS)
  483. 04830     LDB    ,X    (LENGTH)
  484. 04840     SUBB    #32
  485. 04850     PSHS    B
  486. 04860 SND6    LDA    ,X+
  487. 04870     JSR    [RS232O]
  488. 04880     DEC    ,S
  489. 04890     BPL    SND6
  490. 04900     PULS    B
  491. 04910     LDA    EOL,PCR
  492. 04920     JSR    [RS232O]
  493. 04930     PULS    X
  494. 04940     RTS
  495. 04950 *
  496. 04960 *************************
  497. 04970 * SEND EMPTY PACKET    *
  498. 04980 * PACKET TYPE IN A    *
  499. 04990 *************************
  500. 05000 *
  501. 05010 SEND1    LEAX    SBUFF,PCR
  502. 05020     STA    2,X    (TYPE)
  503. 05030     LDA    #35
  504. 05040     STA    ,X
  505. 05050     LDB    1+NPACK,PCR
  506. 05060     ANDB    #$3F
  507. 05070     ADDB    #32
  508. 05080     STB    1,X
  509. 05090     LBSR    CHKSUM
  510. 05100     STA    ,X
  511. 05110     LDX    #$8000    (PAUSE)
  512. 05120 SEND1P    LEAX    -1,X
  513. 05130     BNE    SEND1P
  514. 05140     LEAX    SBUFF,PCR
  515. 05150     BSR    SNDPAK
  516. 05160     RTS
  517. 05170 *
  518. 05180 *************************
  519. 05190 * GET PACKET FROM REMOTE*
  520. 05200 * CLEAR Z IF FAIL    *
  521. 05210 *************************
  522. 05220 *
  523. 05230 GETPAK    LEAX    RBUFF,PCR
  524. 05240     PSHS    X
  525. 05250 GETP1    JSR    [KEYIN]    (ALLOW INTERRUPTION)
  526. 05260     BEQ    GETP2
  527. 05270     CMPA    #$0D    (BY C.R.)
  528. 05280     BEQ    GETPB
  529. 05290 GETP2    JSR    [RS232I]
  530. 05300     BEQ    GETP1
  531. 05310     LBSR    SYNC    (WAIT FOR STOP BIT)
  532. 05320     CMPA    SOH,PCR
  533. 05330     BNE    GETP1    (IGNORE UNTIL SOH)
  534. 05340 GETP3    LDX    ,S    (BUFFER LOC)
  535. 05350 GETP4    JSR    [KEYIN]
  536. 05360     BEQ    GETP5
  537. 05370     CMPA    #$0D
  538. 05380     BEQ    GETPB
  539. 05390 GETP5    JSR    [RS232I]
  540. 05400     BEQ    GETP4
  541. 05410     LBSR    SYNC    (WAIT FOR STOP BIT)
  542. 05420     CMPA    SOH,PCR
  543. 05430     BEQ    GETP3
  544. 05440     STA    ,X+
  545. 05450     CMPA    MYEOL,PCR
  546. 05460     BNE    GETP4
  547. 05470 GETP6    TST    QDEBUG,PCR
  548. 05480     BEQ    GETP7
  549. 05490     LDX    ,S    (SHOW PACKET)
  550. 05500     LDD    #$0C00    (LINE 13)
  551. 05510     LBSR    ECHO
  552. 05520 GETP7    PULS    X
  553. 05530     LBSR    CHKSUM
  554. 05540     CMPA    ,X
  555. 05550     RTS
  556. 05560 GETPB    PULS    X
  557. 05570     LDA    #1
  558. 05580     RTS
  559. 05590 *
  560. 05600 *************************
  561. 05610 * RECEIVE A PACKET.    *
  562. 05620 * FIRST ACK PREVIOUS IF    *
  563. 05630 * NOT YET ACKNOWLEDGED.    *
  564. 05640 * LEAVE DATA LENGTH IN B*
  565. 05650 * DATA ADDRESS IN X    *
  566. 05660 * Z SET IF TYPE IS DATA    *
  567. 05670 *************************
  568. 05680 *
  569. 05690 RGET    LDA    MAXTRY,PCR
  570. 05700     STA    NTRY,PCR
  571. 05710     TST    NEEDAK,PCR
  572. 05720     BEQ    RGET2
  573. 05730     LDA    #'Y
  574. 05740     LBSR    SEND1    (ACK LAST PACKET)
  575. 05750     LDD    NPACK,PCR
  576. 05760     ADDD    #1
  577. 05770     STD    NPACK,PCR
  578. 05780     CLR    NEEDAK,PCR
  579. 05790 RGET2    DEC    NTRY,PCR
  580. 05800     BMI    RFAIL
  581. 05810     LEAX    RBUFF,PCR
  582. 05820     LBSR    GETPAK
  583. 05830     BEQ    RGET4
  584. 05840     LDA    #'N    (NAK)
  585. 05850     LBSR    SEND1
  586. 05860     BRA    RGET2
  587. 05870 RGET4    LEAX    RBUFF,PCR
  588. 05880     LDD    NPACK,PCR
  589. 05890     BNE    RGET5
  590. 05900     LBSR    REMINI
  591. 05910     LEAX    INPAK,PCR    (SPECIAL ACK FOR INIT)
  592. 05920     LDA    #'Y
  593. 05930     STA    2,X
  594. 05940     LBSR    CHKSUM
  595. 05950     STA    ,X
  596. 05960     LEAX    INPAK,PCR
  597. 05970     LBSR    SNDPAK
  598. 05980     LDD    #1
  599. 05990     STD    NPACK,PCR
  600. 06000     LDA    #'S
  601. 06010     RTS
  602. 06020 RGET5    ANDB    #$3F
  603. 06030     ADDB    #32
  604. 06040     CMPB    1,X
  605. 06050     BEQ    RGET8
  606. 06060     LDA    #'N    (NAK)
  607. 06070     LBSR    SEND1
  608. 06080     BRA    RGET2
  609. 06090 RGET8    DEC    NEEDAK,PCR
  610. 06100     LEAX    RBUFF,PCR
  611. 06110     LDB    ,X
  612. 06120     SUBB    #35
  613. 06130     LEAX    3,X
  614. 06140     LDA    -1,X    (TYPE)
  615. 06150     CMPA    #'D
  616. 06160     RTS
  617. 06170 RFAIL    LDA    #'Q
  618. 06180     RTS
  619. 06190 *
  620. 06200 *************************
  621. 06210 * GET NEXT DATA CHAR    *
  622. 06220 * VIEWS DATA AS STREAM    *
  623. 06230 * B=CHARS LEFT IN PACKET*
  624. 06240 * X=CURRENT DATA ADDRESS*
  625. 06250 * RETURN CHAR IN A    *
  626. 06260 * ON END OF DATA, SET Z    *
  627. 06270 * LEAVE PACKET TYPE IN A*
  628. 06280 *************************
  629. 06290 *
  630. 06300 GETCHP    TSTB
  631. 06310     BNE    GETC2
  632. 06320     LBSR    RGET
  633. 06330     BNE    GETC4
  634. 06340 GETC2    DECB    
  635. 06350     LDA    ,X+
  636. 06360     RTS
  637. 06370 GETC4    CLRB
  638. 06380     RTS
  639. 06390 *
  640. 06400 *************************
  641. 06410 * RECEIVE DATA         *
  642. 06420 * COPY DATA TO FILE 'TIL*
  643. 06430 * NON-DATA PACKET.    *
  644. 06440 *************************
  645. 06450 *
  646. 06460 KGET    CLR    QCR,PCR    (NO CR PENDING)
  647. 06470     CLR    FBIN,PCR  (NO HIGH BIT)
  648. 06480     CLRB
  649. 06490 KGET1    LBSR    GETCHP
  650. 06500     BEQ    KGETX
  651. 06510     CMPA    QBIN,PCR
  652. 06520     BNE    KGET4
  653. 06530     INC    FBIN,PCR  (FLAG HIGH BIT)
  654. 06540     LBSR    GETCHP
  655. 06550     BEQ    KGETX
  656. 06560 KGET4    CMPA    QCTL,PCR
  657. 06570     BNE    KGET8
  658. 06580     LBSR    GETCHP
  659. 06590     BEQ    KGETX
  660. 06600     CMPA    QBIN,PCR
  661. 06610     BEQ    KGET8
  662. 06620     CMPA    QCTL,PCR
  663. 06630     BEQ    KGET8
  664. 06640     EORA    #$40
  665. 06650     TST    FBIN,PCR
  666. 06660     BNE    KGET8
  667. 06670     TST    FMODE,PCR (0=BINARY)
  668. 06680     BEQ    KGET8
  669. 06690     TST    QCR,PCR    (0=NO CR PENDING)
  670. 06700     BEQ    KGET8
  671. 06710     CMPA    #$0A
  672. 06720     BNE    KGET8
  673. 06730     CLR    QCR,PCR
  674. 06740     BRA    KGET9    (SKIP LF AFTER CR)
  675. 06750 KGET8    TST    FBIN,PCR
  676. 06760     BEQ    KGET8A
  677. 06770     ADDA    #$80
  678. 06780 KGET8A    CLR    QCR,PCR
  679. 06790     CMPA    #$0D
  680. 06800     BNE    KGET8C
  681. 06810     INC    QCR,PCR
  682. 06820 KGET8C    LBSR    FPUT    (INTO FILE)
  683. 06830 KGET9    CLR    FBIN,PCR
  684. 06840     BRA    KGET1
  685. 06850 KGETX    RTS
  686. 06860 *
  687. 06870 *************************
  688. 06880 * SHOW/SET PARAMETERS    *
  689. 06890 * ENTERED FROM ATEP    *
  690. 06900 *************************
  691. 06910 *
  692. 06920 KSET    LBSR    CLEAR
  693. 06930     LEAX    HEADER,PCR
  694. 06940     LBSR    PRINT
  695. 06950     LEAX    HDRSET,PCR
  696. 06960     LBSR    PRINT
  697. 06970     LEAX    FTYPE,PCR
  698. 06980     LDA    #6    (# PARAMS)
  699. 06990     PSHS    A
  700. 07000 KREP1    LDA    #'
  701. 07010     JSR    [CHROUT]
  702. 07020     JSR    [CHROUT]
  703. 07030     JSR    [CHROUT]
  704. 07040     LDA    ,X+
  705. 07050     LBSR    HEXOUT
  706. 07060     DEC    ,S
  707. 07070     BNE    KREP1
  708. 07080     PULS    A
  709. 07090     LDA    #$0A
  710. 07100     JSR    [CHROUT]
  711. 07110 * NEW PARAMETERS
  712. 07120     LDB    #6    (# PARAMS)
  713. 07130     PSHS    B
  714. 07140     LEAX    FTYPE,PCR
  715. 07150 KNEW1    LDA    #'
  716. 07160     JSR    [CHROUT]
  717. 07170     JSR    [CHROUT]
  718. 07180     JSR    [CHROUT]
  719. 07190 KNEW2    JSR    [KEYIN]
  720. 07200     BEQ    KNEW2
  721. 07210     LDB    ,S
  722. 07220     CMPB    #6    (SEE IF FIRST)
  723. 07230     BNE    KNEW2A
  724. 07240     CMPA    #$0D    (EXIT ON CR IF SO)
  725. 07250     BEQ    KNEW5
  726. 07260 KNEW2A    CMPA    #'     (LEAVE ASIS)
  727. 07270     BEQ    KNEW3
  728. 07280     STA    ,X+
  729. 07290     BRA    KNEW4
  730. 07300 KNEW3    LDA    ,X+    (GET OLD)
  731. 07310 KNEW4    LBSR    HEXOUT
  732. 07320     DEC    ,S
  733. 07330     BNE    KNEW1
  734. 07340 KNEW5    PULS    B
  735. 07350     LDA    #$0A
  736. 07360     JSR    [CHROUT]
  737. 07370     RTS
  738. 07380 *
  739. 07390 *************************
  740. 07400 * SEND FILE - MAIN ENTRY*
  741. 07410 *************************
  742. 07420 *
  743. 07430 KSEND    LBSR    CLEAR    (CLEAR SCREEN)
  744. 07440     LEAX    HEADER,PCR
  745. 07450     LBSR    PRINT
  746. 07460     LEAX    HDRSND,PCR
  747. 07470     LBSR    PRINT
  748. 07480     JSR    [INNAME]
  749. 07490     TST    FNAME    (NOTE NOT PCR)
  750. 07500     BNE    KSEND2
  751. 07510     RTS
  752. 07520 KSEND2    LDD    RTYPE    (TYPE/MODE)
  753. 07530     STD    FTYPE,PCR
  754. 07540     LDD    #0
  755. 07550     STD    NPACK,PCR
  756. 07560     LDD    #$0300
  757. 07570     LBSR    AT
  758. 07580     LEAX    HDRPAK,PCR
  759. 07590     LBSR    PRINT
  760. 07600 *** SEND INIT PACKET ***
  761. 07610     LDA    #'S
  762. 07620     LEAX    INPAK,PCR
  763. 07630     STA    2,X
  764. 07640     LDA    MAXTRY,PCR
  765. 07650     STA    NTRY,PCR
  766. 07660 SISND    DEC    NTRY,PCR
  767. 07670     LBMI    SFAIL
  768. 07680     LEAX    INPAK,PCR
  769. 07690     LBSR    SNDPAK
  770. 07700     LBSR    GETPAK
  771. 07710     BNE    SISND
  772. 07720     LDA    2+RBUFF,PCR
  773. 07730     CMPA    #'Y
  774. 07740     BNE    SISND
  775. 07750     LBSR    REMINI
  776. 07760 *** SEND FILE HEADER PACKET ***
  777. 07770     LDY    #FNAME
  778. 07780     LEAX    FBN,PCR
  779. 07790     CLRB
  780. 07800 FNCOPY    LDA    B,Y
  781. 07810     BEQ    FNGOT
  782. 07820     STA    B,X
  783. 07830     INCB
  784. 07840     BRA    FNCOPY
  785. 07850 FNGOT    ADDB    #35    (TOCHAR)
  786. 07860     LEAX    FBUFF,PCR
  787. 07870     STB    ,X
  788. 07880     LBSR    NEWPAK
  789. 07890 FNSND    DEC    NTRY,PCR
  790. 07900     LBMI    SFAIL
  791. 07910     LEAX    FBUFF,PCR
  792. 07920     LBSR    SNDPAK
  793. 07930     LBSR    GETPAK
  794. 07940     BNE    FNSND
  795. 07950     LDA    2+RBUFF,PCR
  796. 07960     CMPA    #'Y
  797. 07970     BNE    FNSND
  798. 07980 *** SEND DATA PACKETS ***
  799. 07990 SHDR    JSR    [QEOF]
  800. 08000     BNE    SCLOSE
  801. 08010     LBSR    NEWPAK
  802. 08020     LEAX    SBUFF,PCR
  803. 08030     ANDB    #$3F        (MOD 64)
  804. 08040     STB    SNUM,PCR    (FOR ACK)
  805. 08050     ADDB    #32        (TOCHAR)
  806. 08060     STB    1,X
  807. 08070     LDB    #'D        (DATA)
  808. 08080     STB    2,X
  809. 08090     LDA    #35        (SIZE)
  810. 08100     STA    ,X
  811. 08110 SBUILD    JSR    [QEOF]        (SEE IF EOF)
  812. 08120     BNE    SSEND
  813. 08130     LBSR    FGET
  814. 08140     LEAX    SBUFF,PCR
  815. 08150     LBSR    KRMPUT        (INTO PACKET)
  816. 08160     BEQ    SBUILD        (FILL PACKET)
  817. 08170 SSEND    DEC    NTRY,PCR
  818. 08180     LBMI    SFAIL
  819. 08190     LEAX    SBUFF,PCR
  820. 08200     LBSR    SNDPAK
  821. 08210     LBSR    GETPAK
  822. 08220     BNE    SSEND
  823. 08230     LEAX    RBUFF,PCR    (CHECK ACK)
  824. 08240     LDD    1,X
  825. 08250     SUBA    #32        (PACK#)
  826. 08260     CMPB    #'Y
  827. 08270     BEQ    SACK
  828. 08280     CMPB    #'N
  829. 08290     LBNE    SFAIL
  830. 08300     DECA            (NAK NEXT?)
  831. 08310     ANDA    #$3F
  832. 08320 SACK    CMPA    SNUM,PCR
  833. 08330     BNE    SSEND        (FAILURE)
  834. 08340     BRA    SHDR
  835. 08350 SCLOSE    JSR    [FCLOSE]
  836. 08360 *** SEND END OF FILE PACKET ***
  837. 08370     LBSR    NEWPAK
  838. 08380 SNDEOF    DEC    NTRY,PCR
  839. 08390     LBMI    SFAIL
  840. 08400     LDA    #'Z    (EOF)
  841. 08410     LBSR    SEND1
  842. 08420     LBSR    GETPAK
  843. 08430     BNE    SNDEOF
  844. 08440 *** SEND END OF TRANSMISSION PACKET ***
  845. 08450     LBSR    NEWPAK
  846. 08460 SNDEOT    DEC    NTRY,PCR
  847. 08470     LBMI    SFAIL
  848. 08480     LDA    #'B    (EOT)
  849. 08490     LBSR    SEND1
  850. 08500     LBSR    GETPAK
  851. 08510     BNE    SNDEOT
  852. 08520 SOK    LEAX    SFINI,PCR
  853. 08530     LBSR    PRINT
  854. 08540     RTS
  855. 08550 SFAIL    JSR    [FCLOSE]
  856. 08560     LDA    #'B
  857. 08570     LBSR    SEND1
  858. 08580     LEAX    SERR,PCR
  859. 08590     LBSR    PRINT
  860. 08600     RTS
  861. 08610 *
  862. 08620 *************************
  863. 08630 * MAIN RECEIVE ROUTINE  *
  864. 08640 *************************
  865. 08650 *
  866. 08660 KRCV    LBSR    CLEAR
  867. 08670     LEAX    HEADER,PCR
  868. 08680     LBSR    PRINT
  869. 08690     LEAX    HDRREC,PCR
  870. 08700     LBSR    PRINT
  871. 08710     LDD    #0
  872. 08720     STD    NPACK,PCR
  873. 08730     LDD    FTYPE,PCR
  874. 08740     STD    RTYPE
  875. 08750     JSR    [OTNAME]
  876. 08760     TST    FNAME    (NOTE NOT PCR)
  877. 08770     BNE    KRCV2
  878. 08780     RTS        (NO NAME, EXIT)
  879. 08790 KRCV2    LDD    #$0300
  880. 08800     LBSR    AT
  881. 08810     LEAX    HDRPAK,PCR
  882. 08820     LBSR    PRINT
  883. 08830     CLR    NEEDAK,PCR
  884. 08840     LBSR    RGET    (INIT)
  885. 08850     CMPA    #'S
  886. 08860     BNE    KRFAIL
  887. 08870     LBSR    RGET
  888. 08880     CMPA    #'F
  889. 08890     BNE    KRFAIL
  890. 08900     LBSR    KGET    (RECEIVE DATA)
  891. 08910     CMPA    #'Z    (EOF?)
  892. 08920     BNE    KRFAIL
  893. 08930     LBSR    RGET
  894. 08940     CMPA    #'B    (EOT)
  895. 08950     BNE    KRFAIL
  896. 08960     LDA    #'Y
  897. 08970     LBSR    SEND1
  898. 08980     JSR    [FCLOSE]
  899. 08990     LBRA    SOK
  900. 09000 KRFAIL    LBRA    SFAIL
  901. 09010 *
  902. 09020 HDRSET    FDB    $0A0A
  903. 09030     FCC    'ALL PARAMETERS SHOWN IN HEX'
  904. 09040     FCB    $0A
  905. 09050     FCC    'ENTER NEW VALUES BY KEY CODE'
  906. 09060     FCB    $0A
  907. 09070     FCC    'BLANK=NO CHANGE, BREAK=FF'
  908. 09080     FDB    $0A0A
  909. 09090     FCC    '  TYPE MODE  EOL NTRY  SOH DBUG'
  910. 09100     FDB    $0A00
  911. 09110 HDRSND    FCB    $0A
  912. 09120     FCC    'SEND FILE'
  913. 09130     FDB    $0A00
  914. 09140 HDRREC    FCB    $0A
  915. 09150     FCC    'RECEIVE FILE'
  916. 09160     FDB    $0A00
  917. 09170 HDRPAK    FCC    'PACKET #0000 (HEX)'
  918. 09180     FDB    $0A00
  919. 09190 SFINI    FDB    $0A07
  920. 09200     FCC    'TRANSFER COMPLETE'
  921. 09210     FDB    $0707
  922. 09220     FDB    $0A00
  923. 09230 SERR    FDB    $0A07
  924. 09240     FCC    'TRANSFER FAILED'
  925. 09250     FDB    $0707
  926. 09260     FDB    $0A00
  927. 09270 *
  928. 09280 ZZZBUF    RMB    0    (TOP EXCEPT BUFFER)
  929. 09290 SBUFF    RMB    98    (SEND BUFFER)
  930. 09300 RBUFF    RMB    98    (RECEIVE BUFFER)
  931. 09310 ZZZTOP    RMB    0
  932. 09320     END    $2000    (ATEP ENTRY)
  933.