home *** CD-ROM | disk | FTP | other *** search
/ kermit.columbia.edu / kermit.columbia.edu.tar / kermit.columbia.edu / trs80coco / ccterm.asm < prev   
Assembly Source File  |  1985-03-20  |  21KB  |  973 lines

  1. 00010 * KERMIT-COCO: COLOR COMPUTER KERMIT
  2. 00020 * VERSION 1.1 : 03/85
  3. 00030 * COPYRIGHT (C) 1985 BY WES HUBERT
  4. 00040 * 3020 STEVEN DRIVE, LAWRENCE KS 66044
  5. 00050 *
  6. 00060 * THIS PROGRAM IS BOTH A STAND-ALONE
  7. 00070 * TERMINAL PROGRAM AND THE BASE FOR
  8. 00080 * A COLOR COMPUTER IMPLEMENTATION OF
  9. 00090 * THE KERMIT FILE TRANSFER PROTOCOL.
  10. 00100 *
  11. 00110 * PERMISSION IS GRANTED FOR NON-PROFIT USE AND
  12. 00120 * DISTRIBUTION AS PART OF THE COLOR COMPUTER
  13. 00130 * KERMIT SYSTEM PROVIDED THAT THIS NOTICE IS
  14. 00140 * NOT REMOVED.
  15. 00150 *
  16. 00160 * KERMIT IS A FILE TRANSFER PROTOCOL DEVELOPED
  17. 00170 * BY FRANK DA CRUZ AND BILL CATCHINGS
  18. 00180 * AT THE COLUMBIA UNIVERSITY CENTER FOR
  19. 00190 * COMPUTING ACTIVITIES.
  20. 00200 *
  21. 00210 * THIS PORTION OF KERMIT-C0C0 PROVIDES
  22. 00220 * TERMINAL FACILITIES INCLUDING EVEN/NO
  23. 00230 * PARITY, LOCAL/REMOTE ECHO, AND SIMPLE
  24. 00240 * NO PROTOCOL FILE UPLOAD/DOWNLOAD.
  25. 00250 * PARITY IS ALWAYS IGNORED ON INPUT.
  26. 00260 * THE PARITY BIT TIME IS USED FOR SCREEN
  27. 00270 * SCROLLING WHEN NECESSARY.
  28. 00280 *
  29. 00290 * CHROUT CODE ADAPTED FROM CC TERM
  30. 00300 * BY RICHARD CAMPBELL.
  31. 00310 * (COLOR COMPUTER MAGAZINE, MARCH 1984)
  32. 00320 *
  33. 00330 * DISK OPEN/CLOSE CODE ADAPTED FROM TAPE TO
  34. 00340 * DISK FILE TRANSFER BY ROGER SCHRAG.
  35. 00350 * (RAINBOW MAGAZINE, JANUARY 1984)
  36. 00360 *
  37. 00370 * THE CODE FOR KERMIT PROTOCOL TRANSFERS
  38. 00380 * IS ASSEMBLED AND LOADED SEPARATELY
  39. 00390 * AFTER ASSEMBLY AND LOADING OF THIS
  40. 00400 * ROUTINE.  SEE THE PROTOCOL CODE FOR
  41. 00410 * MORE INFORMATION.
  42. 00420 *
  43. 00430 * THIS PORTION OF THE CODE RESIDES IN
  44. 00440 * (HEX) 2000-27FF, THE PROTOCOL CODE
  45. 00450 * FROM 2800-2FFF.  MEMORY BELOW 2000
  46. 00460 * IS AVAILABLE FOR BASIC PROGRAMS, AND
  47. 00470 * MEMORY ABOVE 2FFF IS USED FOR THE
  48. 00480 * JOURNALIZATION / RAW ASCII TRANSFER
  49. 00490 * BUFFER.
  50. 00500 *
  51. 00510 * NOTE THAT ALTHOUGH EACH PART IS
  52. 00520 * WRITTEN IN POSITION INDEPENDENT FORM
  53. 00530 * THE COMBINATION IS NOT POSITION INDEPENDENT
  54. 00540 * BECAUSE OF FIXED ADDRESSES USED FOR
  55. 00550 * COMMUNICATION BETWEEN THE PROGRAMS.  TO
  56. 00560 * RELOCATE THE PROGRAM, THESE ADDRESSES
  57. 00570 * MUST BE MODIFIED.
  58. 00580 *
  59. 00590     ORG    $2000
  60. 00600 TERM    BRA    START
  61. 00610 *
  62. 00620 *************************
  63. 00630 * ENTRIES FOR PROTOCOL    *
  64. 00640 *************************
  65. 00650 *
  66. 00660     FDB    RS232I
  67. 00670     FDB    RS232O
  68. 00680     FDB    KEYIN
  69. 00690     FDB    OTCHAR
  70. 00700     FDB    INNAME
  71. 00710     FDB    OTNAME
  72. 00720     FDB    FCLOSE
  73. 00730     FDB    WAIT
  74. 00740     FDB    QEOF
  75. 00750 FILNAM    FCC    'KERMIT-COCO '
  76. 00760     FCB    0    (END OF STRING)
  77. 00770     FCC    'COPYRIGHT (C) 1985'
  78. 00780 *
  79. 00790 *******************************************
  80. 00800 *
  81. 00810 *************************
  82. 00820 * STANDARD COCO DEFS    *
  83. 00830 *************************
  84. 00840 *
  85. 00850 SYSMEM    EQU    $74    HIGH MEMORY ADDRESS
  86. 00860 SCRPTR    EQU    $88    SCREEN CURSOR PTR
  87. 00870 SCREEN    EQU    $400    SCREEN MEMORY
  88. 00880 FNAME    EQU    $94C    FILE NAME
  89. 00890 FTYPE    EQU    $957    FILE TYPE
  90. 00900 TOP    EQU    $3000    END OF KERMIT
  91. 00910 POLCAT    EQU    $A000    KEYBOARD POLL ROUTNE
  92. 00920 PUTCHR    EQU    $A002    CHARACTER OUTPUT
  93. 00930 OUTPIA    EQU    $FF20    MODEM PIA LOC
  94. 00940 INPIA    EQU    $FF22    IN MODEM PIA
  95. 00950 *
  96. 00960 *************************
  97. 00970 * DEFAULT CONFIGURATION    *
  98. 00980 *************************
  99. 00990 *
  100. 01000 CAN    FCB    $18    (XMIT SHFT<- AS CAN)
  101. 01010 DEL    FCB    $08    (XMIT <- AS BKSP)
  102. 01020 LECHO    FCB    0    (-1=HALF/0=FULL)
  103. 01030 PARITY    FCB    -1    (-1=EVEN/0=NONE)
  104. 01040 AUTOLF    FCB    0    (-1=YES/0=NO)
  105. 01050 CPYMIN    FDB    TOP    (BUFFER ORIGIN)
  106. 01060 CPYMAX    FDB    $7FFF    (32K SYSTEM)
  107. 01070 CPYPTR    FDB    TOP    (BUFFER POINTER)
  108. 01080 COPY    FCB    0    (-1=BUFFER/0=DON'T)
  109. 01090 SPEED    FDB    419    (419=300 BAUD)
  110. 01100 DC2    FCB    $12    (TURN ON BUFFER)
  111. 01110 DC4    FCB    $14    (TURN OFF BUFFER)
  112. 01120 CURCHR    FCB    $60    (PLACE FOR CHAR
  113. 01130 *             UNDER CURSOR)
  114. 01140 *
  115. 01150 *************************
  116. 01160 * EXECUTION ENTRY    *
  117. 01170 *************************
  118. 01180 *
  119. 01190 START    STS    ISTACK,PCR
  120. 01200     LEAS    TOPSTK,PCR
  121. 01210     LBSR    CLEAR    (CLEAR SCREEN)
  122. 01220     LBSR    MENU    (PRINT MENU)
  123. 01230     LEAX    TOP,PCR    (LOCATE BUFFER)
  124. 01240     STX    CPYMIN,PCR
  125. 01250     LDX    SYSMEM    (SIZE)
  126. 01260     STX    CPYMAX,PCR (TOP OF BUFFER)
  127. 01270 *
  128. 01280 ******************************************
  129. 01290 *  TOP OF MAIN LOOP             *
  130. 01300 *  ALTERNATELY POLL RS232  INPUT AND     *
  131. 01310 *  KEYBOARD.                 *
  132. 01320 ******************************************
  133. 01330 *
  134. 01340 CHKMN    BSR    RSSYNC    (WAIT FOR CARRIER)
  135. 01350 CHKRSI    LBSR    RS232I    (POLL RS232 PORT)
  136. 01360     BEQ    CHKKBI
  137. 01370     LBSR    OTCHAR
  138. 01380     BSR    RSSYNC
  139. 01390 CHKKBI    LBSR    KEYIN    (POLL KEYBOARD)
  140. 01400     BEQ    CHKRSI
  141. 01410 *
  142. 01420 CHKBRK    CMPA    #$FF    (BREAK)
  143. 01430     BNE    CHKDEL
  144. 01440     BSR    BREAK
  145. 01450     BRA    CHKMN
  146. 01460 *
  147. 01470 CHKDEL    CMPA    #$FE    (LEFT ARROW)
  148. 01480     BNE    CHKCAN
  149. 01490     TST    LECHO,PCR
  150. 01500     BEQ    CHKD2
  151. 01510     LDA    #08    (PRINT BACKSPACE)
  152. 01520     LBSR    OTCHAR
  153. 01530 CHKD2    LDA    DEL,PCR    (SEND DELETE CHAR)
  154. 01540     BRA    CHKOUT
  155. 01550 *
  156. 01560 CHKCAN    CMPA    #$FD    (SHIFT LEFT ARROW)
  157. 01570     BNE    CHKDUP
  158. 01580     LDA    CAN,PCR    (SEND LINE DELETE)
  159. 01590     BRA    CHKOUT
  160. 01600 *
  161. 01610 CHKDUP    TST    LECHO,PCR
  162. 01620     BEQ    CHKOUT
  163. 01630     LBSR    OTCHAR (ECHO PRINT CHAR)
  164. 01640 *
  165. 01650 CHKOUT    BSR    RS232O    (TRANSMIT CHAR)
  166. 01660     BRA    CHKMN
  167. 01670 *
  168. 01680 *************************
  169. 01690 *  WAIT FOR STOP BIT    *
  170. 01700 *************************
  171. 01710 *
  172. 01720 RSSYNC    LDA    INPIA    (READ MODEM)
  173. 01730     LSRA
  174. 01740     BCC    RSSYNC    (LOOP UNTIL SET)
  175. 01750     RTS
  176. 01760 *
  177. 01770 ************************
  178. 01780 *  SEND LINE BREAK     *
  179. 01790 ************************
  180. 01800 *
  181. 01810 BREAK    CLR    OUTPIA    (SEND ZERO BITS)
  182. 01820     LDX    #$6100    (ABOUT .25 SECONDS)
  183. 01830 BRK2    LEAX    -1,X
  184. 01840     BNE    BRK2
  185. 01850     LDA    #2
  186. 01860     STA    OUTPIA    (SEND STOP BIT)
  187. 01870     RTS
  188. 01880 *
  189. 01890 ************************
  190. 01900 * PAUSE ABOUT 1 BIT    *
  191. 01910 ************************
  192. 01920 *
  193. 01930 WAIT    PSHS    D    (WAIT BIT TIME)
  194. 01940     LDD    SPEED,PCR
  195. 01950 WT2    SUBD    #1
  196. 01960     BNE    WT2
  197. 01970     PULS    D,PC
  198. 01980 *
  199. 01990 ************************
  200. 02000 *  SET EVEN PARITY     *
  201. 02010 ************************
  202. 02020 *
  203. 02030 EVEN    PSHS    X    (PRESERVE X)
  204. 02040     LDX    #7    (SEVEN DATA BITS)
  205. 02050     CLRB
  206. 02060 EVEN2    RORA
  207. 02070     BCC    EVEN4
  208. 02080     INCB        (COUNT 1 BITS)
  209. 02090 EVEN4    LEAX    -1,X
  210. 02100     BNE    EVEN2
  211. 02110     RORA
  212. 02120     RORB        (PARITY BIT)
  213. 02130     RORA
  214. 02140     PULS    X    (RESTORE X)
  215. 02150     RTS
  216. 02160 *
  217. 02170 ************************
  218. 02180 *  READ FROM MODEM     *
  219. 02190 ************************
  220. 02200 *
  221. 02210 RS232I    LDA    INPIA    (READ MODEM)
  222. 02220     LSRA
  223. 02230     BCC    RSI2  (LOOK FOR START BIT)
  224. 02240     CLRA
  225. 02250     RTS
  226. 02260 RSI2    LDD    SPEED,PCR
  227. 02270     LSRA        (HALF BIT)
  228. 02280     RORB
  229. 02290 RSI4    SUBD    #1    (PPAUSE)
  230. 02300     BGT    RSI4
  231. 02310     LDB    #7    (7 DATA BITS)
  232. 02320     PSHS    A,B
  233. 02330 RSI5    LDD    SPEED,PCR  (WAIT FOR NEXT)
  234. 02340 RSI6    SUBD    #1
  235. 02350     BNE    RSI6
  236. 02360     NOP
  237. 02370     LDB    INPIA    (GET DATA BIT)
  238. 02380     LSRB
  239. 02390     ROR    0,S
  240. 02400     DEC    1,S
  241. 02410     BNE    RSI5
  242. 02420     ROR    0,S
  243. 02430     PULS    A,B
  244. 02440     ANDA    #$7F    (DROP PARITY)
  245. 02450     CMPA    #$7F    (IGNORE RUBOUT)
  246. 02460     BNE    RSI7
  247. 02470     CLRA
  248. 02480 RSI7    RTS
  249. 02490 *
  250. 02500 ************************
  251. 02510 *  WRITE TO MODEM      *
  252. 02520 ************************
  253. 02530 *
  254. 02540 RS232O    TST    PARITY,PCR
  255. 02550     BEQ    RSO1
  256. 02560     BSR    EVEN    (SET PARITY BIT)
  257. 02570 RSO1    LDB    #8    (BIT COUNT)
  258. 02580     PSHS    A,B    (BYTE TO SEND,COUNT)
  259. 02590     CLR    OUTPIA    (START BIT)
  260. 02600 RSO2    LDD    SPEED,PCR
  261. 02610 RSO4    SUBD    #1
  262. 02620     BNE    RSO4
  263. 02630     LSR    0,S    (GET DATA BIT)
  264. 02640     ROLB        (SHIFT FOR PIA)
  265. 02650     ROLB        (BIT TWO)
  266. 02660     STB    OUTPIA    (SEND IT)
  267. 02670     DEC    1,S    (COUNT THE BIT)
  268. 02680     BNE    RSO2
  269. 02690     LEAS    2,S    (DROP WORK/COUNT)
  270. 02700     LBSR    WAIT
  271. 02710     LDB    #2
  272. 02720     STB    OUTPIA    (STOP BIT)
  273. 02730     LBSR    WAIT
  274. 02740     LBSR    WAIT
  275. 02750     RTS
  276. 02760 *
  277. 02770 ************************
  278. 02780 *  READ FROM KEYBOARD  *
  279. 02790 ************************
  280. 02800 *
  281. 02810 KEYIN    PSHS    B    (CHAR FROM SCREEN)
  282. 02820     LDB    [SCRPTR]
  283. 02830     BMI    KI0    (SKIP IF CURSOR)
  284. 02840     STB    CURCHR,PCR (ELSE REMEMBER)
  285. 02850 KI0    LDB    #$FF    (CURSOR CHAR)
  286. 02860     STB    [SCRPTR]  (ONTO SCREEN)
  287. 02870     PULS    B
  288. 02880     JSR    [POLCAT]  (POLL KEYBOARD)
  289. 02890     BNE    KI1
  290. 02900     RTS        (NO INPUT)
  291. 02910 *
  292. 02920 KI1    CMPA    #$03    (BREAK)
  293. 02930     BNE    KI1A
  294. 02940     LDA    #$FF    (CODE BREAK)
  295. 02950     RTS
  296. 02960 KI1A    CMPA    #$08    (BACKSPACE)
  297. 02970     BNE    KI1B
  298. 02980     LDA    #$FE
  299. 02990     RTS
  300. 03000 KI1B    CMPA    #$15    (SHIFT LEFT ARROW)
  301. 03010     BNE    KI2
  302. 03020     LDA    #$FD
  303. 03030     RTS
  304. 03040 KI2    CMPA    #$0C    (CLEAR)
  305. 03050     BNE    KI2A
  306. 03060     PSHS    X,Y,B
  307. 03070     LBSR    CLEAR
  308. 03080     PULS    X,Y,B
  309. 03090     CLRA
  310. 03100     RTS
  311. 03110 KI2A    CMPA    #$0A    (DOWN-ARROW)
  312. 03120     BEQ    KI3
  313. 03130     RTS        (NORMAL CHARACTER)
  314. 03140 KI3    JSR    [POLCAT]  (GET CONTROL CHAR)
  315. 03150     BEQ    KI3
  316. 03160     CMPA    #$40    (@)
  317. 03170     BLO    KI4
  318. 03180     ANDA    #$1F    (MAKE CONTROL)
  319. 03190     LDB    #1
  320. 03200     RTS
  321. 03210 KI4    CMPA    #'?    (MENU?)
  322. 03220     BNE    KI5
  323. 03230     LBSR    MENU
  324. 03240     RTS
  325. 03250 KI5    CMPA    #'0    (0-9 LOCAL CONTROL
  326. 03260     BLO    KI6
  327. 03270     CMPA    #'>
  328. 03280     BLE    OP0
  329. 03290 KI6    PSHS    X,B    (TRANSLATE
  330. 03300     LEAX    SPCTAB,PCR
  331. 03310     LDB    ,X+
  332. 03320 SPC2    CMPA    B,X
  333. 03330     BEQ    SPC4
  334. 03340     DECB
  335. 03350     BPL    SPC2
  336. 03360     PULS    X,B    (LEAVE ASIS)
  337. 03370     RTS
  338. 03380 SPC4    LEAX    OUTTAB,PCR
  339. 03390     LDA    B,X    (CHANGE)
  340. 03400     PULS    X,B
  341. 03410     RTS
  342. 03420 SPCTAB    FCB    5    (# SPECIAL-1)
  343. 03430     FCC    /'(!)-#/
  344. 03440 OUTTAB    FDB    $607B
  345. 03450     FDB    $7C7D
  346. 03460     FDB    $7E7F
  347. 03470 *
  348. 03480 ***********************
  349. 03490 *  PROCESS OPTIONS    *
  350. 03500 ***********************
  351. 03510 *
  352. 03520 OP0    CMPA    #$30    0=EXIT
  353. 03530     BNE    OP1
  354. 03540     PULS    X    (DROP RETURN
  355. 03550     LDS    ISTACK,PCR
  356. 03560     RTS
  357. 03570 OP1    CMPA    #$31    1=LOCAL ECHO
  358. 03580     BNE    OP2
  359. 03590     COM    LECHO,PCR
  360. 03600     CLRA
  361. 03610     RTS
  362. 03620 OP2    CMPA    #$32    2=PARITY
  363. 03630     BNE    OP3
  364. 03640     COM    PARITY,PCR
  365. 03650     CLRA
  366. 03660     RTS
  367. 03670 OP3    CMPA    #$33    3=AUTO L.F.
  368. 03680     BNE    OP4
  369. 03690     COM    AUTOLF,PCR
  370. 03700     CLRA
  371. 03710     RTS
  372. 03720 OP4    CMPA    #$34    4=BUFFER ON/OFF
  373. 03730     BNE    OP5
  374. 03740     COM    COPY,PCR
  375. 03750     CLRA
  376. 03760     RTS
  377. 03770 OP5    CMPA    #$35    5=WRITE FILE
  378. 03780     BNE    OP6
  379. 03790     LBSR    WRITEF
  380. 03800     CLRA
  381. 03810     RTS
  382. 03820 OP6    CMPA    #$36    6=READ FILE
  383. 03830     BNE    OP7
  384. 03840     LBSR    READF
  385. 03850     CLRA
  386. 03860     RTS
  387. 03870 OP7    CMPA    #$37    7=UPLOAD
  388. 03880     BNE    OP8
  389. 03890     LBSR    UPLOAD
  390. 03900     CLRA
  391. 03910     RTS
  392. 03920 OP8    CMPA    #$38    8=RESET POINTER
  393. 03930     BNE    OP9
  394. 03940     LDD    CPYMIN,PCR
  395. 03950     STD    CPYPTR,PCR
  396. 03960     CLRA
  397. 03970     RTS
  398. 03980 OP9    CMPA    #$39    9=SET DELETE CHARS
  399. 03990     BNE    OPR
  400. 04000 OP91    LBSR    KEYIN
  401. 04010     BEQ    OP91
  402. 04020     STA    DEL,PCR
  403. 04030 OP9A    LBSR    KEYIN
  404. 04040     BEQ    OP9A
  405. 04050     STA    CAN,PCR
  406. 04060     CLRA
  407. 04070     RTS
  408. 04080 OPR    CMPA    #'<    <=KERMIT RECEIVE
  409. 04090     BNE    OPS
  410. 04100     JSR    KERMR
  411. 04110     RTS
  412. 04120 OPS    CMPA    #'>    >=KERMIT SEND
  413. 04130     BNE    OPT
  414. 04140     JSR    KERMS
  415. 04150     RTS
  416. 04160 OPT    CMPA    #'=    ==KERMIT SETUP
  417. 04170     BNE    OPX
  418. 04180     JSR    KERMT
  419. 04190     RTS
  420. 04200 OPX    RTS    ** NOT SPECIAL
  421. 04210 *
  422. 04220 *************************
  423. 04230 *  PRINT MENU        *
  424. 04240 *************************
  425. 04250 *
  426. 04260 MENU    PSHS    X,Y,D
  427. 04270     LBSR    CLEAR
  428. 04280     LEAX    MCHARS,PCR  (SHOW CURRENT STATUS)
  429. 04290     LDA    LECHO,PCR
  430. 04300     INCA
  431. 04310     LDA    A,X
  432. 04320     STA    MDUP,PCR
  433. 04330     LEAX    2,X
  434. 04340     LDA    PARITY,PCR
  435. 04350     INCA
  436. 04360     LDA    A,X
  437. 04370     STA    MPAR,PCR
  438. 04380     LEAX    2,X
  439. 04390     LDA    AUTOLF,PCR
  440. 04400     INCA
  441. 04410     LDA    A,X
  442. 04420     STA    MLF,PCR
  443. 04430     LEAX    2,X
  444. 04440     LDA    COPY,PCR
  445. 04450     INCA
  446. 04460     LDA    A,X
  447. 04470     STA    MJRNL,PCR
  448. 04480     LDA    DEL,PCR
  449. 04490     LBSR    TOHEX
  450. 04500     STD    MDEL,PCR
  451. 04510     LDA    CAN,PCR
  452. 04520     LBSR    TOHEX
  453. 04530     STD    MCAN,PCR
  454. 04540     LEAX    MTEXT,PCR
  455. 04550 MEN2    LDD    ,X++
  456. 04560     ADDD    #SCREEN
  457. 04570     STD    <SCRPTR
  458. 04580 MEN4    LDA    ,X+
  459. 04590     BEQ    MEN2
  460. 04600     BMI    MENX
  461. 04610     LBSR    CHROUT
  462. 04620     BRA    MEN4
  463. 04630 MENX    PULS    X,Y,D
  464. 04640     CLRA
  465. 04650     RTS
  466. 04660 MCHARS    FCC    'YNENYNYN'
  467. 04670 MTEXT    FDB    8
  468. 04680     FCC    'KERMIT-COCO 1.1'
  469. 04690     FCB    0
  470. 04700     FDB    34
  471. 04710     FCC    '(PREFIX CONTROL OR COMMANDS'
  472. 04720     FCB    0
  473. 04730     FDB    66
  474. 04740     FCC    ' WITH DOWN-ARROW)'
  475. 04750     FCB    0
  476. 04760     FDB    98
  477. 04770     FCC    '0 EXIT,  ? PRINT MENU'
  478. 04780     FCB    0
  479. 04790     FDB    130
  480. 04800     FCC    '1 LOCAL ECHO ('
  481. 04810 MDUP    FCC    '?)'
  482. 04820     FCB    0
  483. 04830     FDB    162
  484. 04840     FCC    '2 PARITY     ('
  485. 04850 MPAR    FCC    '?)'
  486. 04860     FCB    0
  487. 04870     FDB    194
  488. 04880     FCC    '3 AUTO LF    ('
  489. 04890 MLF    FCC    '?)'
  490. 04900     FCB    0
  491. 04910     FDB    226
  492. 04920     FCC    '4 JOURNALIZE ('
  493. 04930 MJRNL    FCC    '?)'
  494. 04940     FCB    0
  495. 04950     FDB    258
  496. 04960     FCC    '5 WRITE BUFFER TO FILE'
  497. 04970     FCB    0
  498. 04980     FDB    290
  499. 04990     FCC    '6 READ FILE INTO BUFFER'
  500. 05000     FCB    0
  501. 05010     FDB    322
  502. 05020     FCC    '7 UPLOAD BUFFER'
  503. 05030     FCB    0
  504. 05040     FDB    354
  505. 05050     FCC    '8 ERASE BUFFER'
  506. 05060     FCB    0
  507. 05070     FDB    386
  508. 05080     FCC    '9 DEF CHAR/LINE DELETE ('
  509. 05090 MDEL    FCC    'XX,'
  510. 05100 MCAN    FCC    'XX)'
  511. 05110     FCB    0
  512. 05120     FDB    416
  513. 05130     FCC    'KERMIT: = SET, < RECEIVE, > SEND'
  514. 05140     FCB    0
  515. 05150     FDB    450
  516. 05160     FCC    '()!-# BRACES BAR TILDE DEL'
  517. 05170     FDB    $0DFF
  518. 05180 *
  519. 05190 *************************
  520. 05200 *  SOUND BELL        *
  521. 05210 *************************
  522. 05220 *
  523. 05230 BELL    LDA    $FF01    (CONFIGURE FOR
  524. 05240     ANDA    #$F7
  525. 05250     STA    $FF01
  526. 05260     LDA    $FF03     SIX BIT
  527. 05270     ANDA    #$F7
  528. 05280     STA    $FF03
  529. 05290     LDA    $FF23
  530. 05300     ORA    #$08
  531. 05310     STA    $FF23     SOUND)
  532. 05320     LDD    #$06F2    (INITIAL TONE)
  533. 05330 BELL4    STB    OUTPIA    (OUTPUT SOUND)
  534. 05340     SUBD    #$08    (CHANGE TONE)
  535. 05350     CMPD    #$0002
  536. 05360     BNE    BELL4
  537. 05370     LDA    #$07    (RESTORE "BELL")
  538. 05380     RTS
  539. 05390 *
  540. 05400 *************************
  541. 05410 *  WRITE TO SCREEN    *
  542. 05420 *************************
  543. 05430 *
  544. 05440 OTCHAR    CMPA    DC2,PCR    (DOWNLOAD FLAG)
  545. 05450     BNE    OT1
  546. 05460     LDA    #$FF    (SET FLAG)
  547. 05470     STA    COPY,PCR
  548. 05480 OTCX    LBSR    WAIT
  549. 05490     RTS
  550. 05500 OT1    CMPA    DC4,PCR    (END DOWNLOAD)
  551. 05510     BNE    OT2
  552. 05520     CLR    COPY,PCR
  553. 05530     BRA    OTCX
  554. 05540 OT2    CMPA    #$07    (BELL)
  555. 05550     BNE    OT2A
  556. 05560     BSR    BELL
  557. 05570     BRA    OTX
  558. 05580 OT2A    CMPA    #$0C    (CLEAR)
  559. 05590     BNE    OT3
  560. 05600     LBSR    CLEAR
  561. 05610     LDA    #$0C
  562. 05620     BRA    OTX
  563. 05630 OT3    CMPA    #$08    (BACKSPACE)
  564. 05640     BNE    OT4
  565. 05650     LDB    #$60
  566. 05660     STB    [SCRPTR]
  567. 05670 OT4    CMPA    #$0D    (RETURN/ENTER)
  568. 05680     BNE    OT5
  569. 05690     TST    AUTOLF,PCR
  570. 05700     BNE    OT6
  571. 05710     LDB    CURCHR,PCR
  572. 05720     STB    [SCRPTR]
  573. 05730     LDB    #$60
  574. 05740     STB    CURCHR,PCR
  575. 05750     LDB    SCRPTR+1
  576. 05760     ANDB    #$E0
  577. 05770     STB    SCRPTR+1
  578. 05780     LBSR    WAIT
  579. 05790     BRA    OTX
  580. 05800 OT5    CMPA    #$0A    (LINE FEED)
  581. 05810     BNE    OT6
  582. 05820     LDB    CURCHR,PCR
  583. 05830     STB    [SCRPTR]
  584. 05840     LDB    #$60
  585. 05850     STB    CURCHR,PCR
  586. 05860     LDA    #$0D    (PRINT C.R)
  587. 05870     LDB    SCRPTR+1
  588. 05880     ORB    #$1F    (AT END OF LINE)
  589. 05890     STB    SCRPTR+1
  590. 05900     LBSR    CHROUT
  591. 05910     LDA    #$0A    (RESTORE L.F.)
  592. 05920     BRA    OTX
  593. 05930 OT6    LBSR    CHROUT  (NORMAL CHAR)
  594. 05940 OTX    TST    COPY,PCR
  595. 05950     BNE    OTCOPY
  596. 05960     RTS
  597. 05970 *
  598. 05980 ************************
  599. 05990 *  "WRITE" TO BUFFER   *
  600. 06000 ************************
  601. 06010 *
  602. 06020 OTCOPY    LDX    CPYPTR,PCR (BUFFER PTR)
  603. 06030     CMPX    CPYMAX,PCR
  604. 06040     BMI    CPY2
  605. 06050     CLR    COPY,PCR (TURN OFF)
  606. 06060     BSR    CPYERR
  607. 06070     RTS
  608. 06080 CPY2    STA    ,X+    (STORE CHARACTER)
  609. 06090     STX    CPYPTR,PCR
  610. 06100     RTS
  611. 06110 CPYERR    PSHS    A
  612. 06120     LEAX    CEM,PCR
  613. 06130 CE2    LDA    ,X+
  614. 06140     BEQ    CEX
  615. 06150     LBSR    OTCHAR
  616. 06160     BRA    CE2
  617. 06170 CEX    LBSR    BREAK
  618. 06180     PULS    A
  619. 06190     RTS
  620. 06200 CEM    FCB    $07
  621. 06210     FCC    'buffer full'
  622. 06220     FDB    $0A00
  623. 06230 *
  624. 06240 ************************
  625. 06250 *  UPLOAD FROM BUFFER  *
  626. 06260 ************************
  627. 06270 *
  628. 06280 UPLOAD    LDY    CPYMIN,PCR
  629. 06290 UP2    CMPY    CPYPTR,PCR
  630. 06300     BEQ    UP8
  631. 06310     LDA    ,Y
  632. 06320     LBSR    RS232O
  633. 06330     LBSR    KEYIN    (ALLOW BREAK)
  634. 06340     BEQ    UP4
  635. 06350     CMPA    #$FF
  636. 06360     BEQ    UP8
  637. 06370 UP4    LDA    ,Y+
  638. 06380     LBSR    OTCHAR
  639. 06390     CMPA    #$0D
  640. 06400     BNE    UP2
  641. 06410     LDX    #$8000    (PAUSE AFTER LINE)
  642. 06420 UP6    LEAX    -1,X
  643. 06430     BNE    UP6
  644. 06440     BRA    UP2
  645. 06450 UP8    LDB    #$FF    (RESTORE CURSOR)
  646. 06460     STB    [SCRPTR]
  647. 06470     RTS
  648. 06480 *
  649. 06490 ***********************
  650. 06500 *  CLEAR SCREEN       *
  651. 06510 ***********************
  652. 06520 *
  653. 06530 CLEAR    LDD    #SCREEN
  654. 06540     STD    SCRPTR
  655. 06550     LDX    #SCREEN+$80
  656. 06560     LDY    #SCREEN+$180
  657. 06570     LDD    #$6000
  658. 06580 CLR2    STA    B,X
  659. 06590     STA    B,Y
  660. 06600     INCB
  661. 06610     BNE    CLR2
  662. 06620     RTS
  663. 06630 *
  664. 06640 ************************
  665. 06650 *  DISPLAY CHAR        *
  666. 06660 ************************
  667. 06670 *
  668. 06680 CHROUT    PSHS    A,B,X
  669. 06690     CLRB
  670. 06700     LDX    <SCRPTR
  671. 06710     CMPA    #8    (BACKSPACE)
  672. 06720     BNE    CO1
  673. 06730     CMPX    #SCREEN
  674. 06740     BEQ    CO9    (DONE IF TOP)
  675. 06750 *
  676. 06760     LDA    #$60    (SPACE)
  677. 06770     STA    ,-X
  678. 06780     BRA    CO6
  679. 06790 CO1    CMPA    #$0D    (ENTER)
  680. 06800     BNE    CO3
  681. 06810     LDX    <SCRPTR
  682. 06820 *
  683. 06830 CO2    LDA    #$60    (BLANK)
  684. 06840     STA    ,X+
  685. 06850     TFR    X,D
  686. 06860     BITB    #$1F    (END OF LINE?)
  687. 06870     BNE    CO2
  688. 06880     BRA    CO6
  689. 06890 CO3    CMPA    #$20    (CONTROL?)
  690. 06900     BLO    CO9
  691. 06910     TSTA
  692. 06920     BMI    CO5    (GRAPHICS?)
  693. 06930     CMPA    #$40
  694. 06940     BLO    CO4
  695. 06950     CMPA    #$60    (UPPER?)
  696. 06960     BLO    CO5
  697. 06970     ANDA    #$DF
  698. 06980 CO4    EORA    #$40
  699. 06990 *
  700. 07000 CO5    STA    ,X+
  701. 07010 CO6    STX    <SCRPTR
  702. 07020     CLRB
  703. 07030     CMPX    #$5FF    (END?)
  704. 07040     BLS    CO9
  705. 07050 *
  706. 07060     LDX    #SCREEN    (SCROLL)
  707. 07070 CO7    LDD    $20,X
  708. 07080     LDU    $22,X
  709. 07090     STD    ,X++
  710. 07100     STU    ,X++
  711. 07110     CMPX    #$5E0
  712. 07120     BLO    CO7
  713. 07130     STX    <SCRPTR
  714. 07140 *
  715. 07150     LDD    #$6060
  716. 07160 CO8    STD    ,X++    (CLEAR LAST LINE)
  717. 07170     CMPX    #SCREEN+512
  718. 07180     BLO    CO8
  719. 07190 *
  720. 07200 CO9    CMPB    #$60
  721. 07210     BEQ    CRS
  722. 07220     LBSR    WAIT    (WAIT IF NO SCROLL)
  723. 07230 CRS    PULS    A,B,X,PC
  724. 07240 *
  725. 07250 ************************
  726. 07260 *  DETECT DISK EOF     *
  727. 07270 ************************
  728. 07280 *
  729. 07290 QEOF    PSHS    X,Y,U
  730. 07300     LDX    <$A6    BASIC POINTER
  731. 07310     LDB    $18E
  732. 07320     LDU    $18F    ERROR VECTOR
  733. 07330     PSHS    U,X,B
  734. 07340     LDB    #$7E    (A REAL KLUDGE)
  735. 07350     LEAU    QEOF3,PCR
  736. 07360     STB    $18E    (BUT--
  737. 07370     STU    $18F     THAT'S LIFE)
  738. 07380     STS    QEOF5,PCR
  739. 07390     LEAX    QEOF4,PCR
  740. 07400     STX    <$A6    (AND IT WORKS)
  741. 07410     LDA    ,X
  742. 07420     ANDCC    #$FE    (GET SOMETHING
  743. 07430     JSR    $ADC6     BETTER LATER)
  744. 07440 QEOF1    LDA    #1
  745. 07450 QEOF2    PULS    U,X,B
  746. 07460     STB    $18E
  747. 07470     STU    $18F
  748. 07480     STX    <$A6
  749. 07490     PULS    U,X,Y
  750. 07500     TSTA
  751. 07510     RTS
  752. 07520 QEOF3    LDS    QEOF5,PCR
  753. 07530     CLRA
  754. 07540     BRA    QEOF2
  755. 07550 QEOF4    FDB    $58B3    (TOKENIZED
  756. 07560     FDB    $31AE     X=1/EOF(1)
  757. 07570     FDB    $FF8C
  758. 07580     FDB    $2831
  759. 07590     FDB    $2900
  760. 07600 QEOF5    FDB    0
  761. 07610 *
  762. 07620 ************************
  763. 07630 *  DISK OPEN/CLOSE     *
  764. 07640 ************************
  765. 07650 *
  766. 07660 USEROM    PSHS    A
  767. 07670     LDA    $C005    (ROM VERSION)
  768. 07680     ANDA    #1    (1.0=0, 1.1=1)
  769. 07690     LSLA
  770. 07700     LEAU    A,U
  771. 07710     PULS    A
  772. 07720     JMP    [,U]
  773. 07730 DFNAME    FDB    $C8A4    (1.0 LOC)
  774. 07740     FDB    $C952    (1.1 LOC)
  775. 07750 DOPEN    FDB    $C468    (ETC.)
  776. 07760     FDB    $C48D
  777. 07770 DCLOSE    FDB    $CA3B
  778. 07780     FDB    $CAE9
  779. 07790 *
  780. 07800 INNAME    LBSR    GETNAM    (OPEN INPUT)
  781. 07810     TST    FILNAM    (NOT PCR)
  782. 07820     BEQ    NAME7
  783. 07830     LDX    #FNAME
  784. 07840     LDA    #$20
  785. 07850 NAME1    STA    ,X+
  786. 07860     CMPX    #FTYPE
  787. 07870     BLO    NAME1
  788. 07880     LDB    #$FF
  789. 07890     LEAX    FILNAM,PCR
  790. 07900 NAME3    INCB
  791. 07910     LDA    B,X
  792. 07920     BNE    NAME3
  793. 07930     LEAU    NAME5,PCR
  794. 07940     PSHS    U
  795. 07950     CLR    ,-S
  796. 07960     LDU    #DFNAME
  797. 07970     JMP    USEROM
  798. 07980 NAME5    LDA    #'I
  799. 07990     LDB    #1
  800. 08000     LDU    #DOPEN
  801. 08010     JSR    USEROM
  802. 08020 NAME7    RTS
  803. 08030 *
  804. 08040 OTNAME    LBSR    GETNAM    (OPEN OUTPUT)
  805. 08050     TST    FILNAM    (NOT PCR)
  806. 08060     BEQ    OTN7
  807. 08070     LDX    #FNAME
  808. 08080     LDA    #$20
  809. 08090 OTN1    STA    ,X+
  810. 08100     CMPX    #FTYPE
  811. 08110     BLO    OTN1
  812. 08120     LDB    #$FF
  813. 08130     LEAX    FILNAM,PCR
  814. 08140 OTN3    INCB
  815. 08150     LDA    B,X
  816. 08160     BNE    OTN3
  817. 08170     LEAU    OTN5,PCR
  818. 08180     PSHS    U
  819. 08190     CLR    ,-S
  820. 08200     LDU    #DFNAME
  821. 08210     JMP    USEROM
  822. 08220 OTN5    LDA    #'O
  823. 08230     LDB    #1
  824. 08240     LDU    #DOPEN
  825. 08250     JSR    USEROM
  826. 08260 OTN7    RTS
  827. 08270 *
  828. 08280 ************************
  829. 08290 *  LOAD FROM FILE      *
  830. 08300 ************************
  831. 08310 *
  832. 08320 READF    LBSR    INNAME
  833. 08330     TST    FILNAM    (NOT PCR)
  834. 08340     BEQ    READX2
  835. 08350     LDA    #1
  836. 08360     STA    $6F    (BUFFER #1)
  837. 08370 READ2    LBSR    QEOF
  838. 08380     BNE    READX
  839. 08390     JSR    $A176    (GET 1 CHAR.)
  840. 08400     LDX    CPYPTR,PCR
  841. 08410     CMPX    CPYMAX,PCR
  842. 08420     BPL    RERR
  843. 08430     STA    ,X+    (PLACE IN BUFFER)
  844. 08440     STX    CPYPTR,PCR
  845. 08450     BRA    READ2
  846. 08460 RERR    LBSR    CPYERR    (BUFFER FULL)
  847. 08470     CLR    COPY,PCR
  848. 08480 READX    LDU    #DCLOSE    (CLOSE)
  849. 08490     LBSR    USEROM
  850. 08500     CLR    $6F    (BACK TO SCREEN)
  851. 08510 READX2    RTS
  852. 08520 *
  853. 08530 ************************
  854. 08540 * WRITE BUFFER TO FILE *
  855. 08550 ************************
  856. 08560 *
  857. 08570 WRITEF    LDD    #$00FF    (BASIC, ASCII)
  858. 08580     STD    FTYPE
  859. 08590     LBSR    OTNAME
  860. 08600     TST    FNAME
  861. 08610     BEQ    WRITX4
  862. 08620     LDA    #1
  863. 08630     STA    $6F    (BUFFER #1)
  864. 08640     LDY    CPYMIN,PCR
  865. 08650 WRITE2    CMPY    CPYPTR,PCR
  866. 08660     BEQ    WRITEX
  867. 08670     LDA    ,Y+    (CHAR FROM BUFFER)
  868. 08680     JSR    [PUTCHR] (WRITE IT)
  869. 08690     BRA    WRITE2
  870. 08700 WRITEX    CMPA    #$0D    (END WITH C.R.)
  871. 08710     BEQ    WRITX2
  872. 08720     LDA    #$0D
  873. 08730     JSR    [PUTCHR]
  874. 08740 WRITX2    LDU    #DCLOSE
  875. 08750     LBSR    USEROM
  876. 08760     CLR    $6F
  877. 08770 WRITX4    RTS
  878. 08780 *
  879. 08790 *************************
  880. 08800 *  CLOSE FILE #01       *
  881. 08810 *************************
  882. 08820 *
  883. 08830 FCLOSE    LDA    #1
  884. 08840     STA    $6F
  885. 08850     LDU    #DCLOSE
  886. 08860     LBSR    USEROM
  887. 08870     CLR    $6F
  888. 08880     RTS
  889. 08890 *
  890. 08900 *************************
  891. 08910 *  READ NAME OF FILE    *
  892. 08920 *************************
  893. 08930 *
  894. 08940 GETNAM    LEAX    GETPMP,PCR
  895. 08950 GET0    LDA    ,X+
  896. 08960     BEQ    GET1
  897. 08970     LBSR    CHROUT
  898. 08980     BRA    GET0
  899. 08990 GET1    LEAX    FILNAM,PCR
  900. 09000     CLRB
  901. 09010 GET2    LBSR    KEYIN
  902. 09020     BEQ    GET2
  903. 09030     CMPA    #$0D
  904. 09040     BEQ    GETX
  905. 09050     CMPA    #$FE    (BACKSPACE)
  906. 09060     BNE    GET4
  907. 09070     TSTB
  908. 09080     BEQ    GET2
  909. 09090     LDA    #$60
  910. 09100     STA    [SCRPTR]
  911. 09110     LDA    #$08
  912. 09120     LBSR    CHROUT
  913. 09130     DECB
  914. 09140     BRA    GET2
  915. 09150 GET4    CMPB    #12
  916. 09160     BEQ    GET2
  917. 09170     STA    B,X
  918. 09180     LBSR    CHROUT
  919. 09190     INCB
  920. 09200     BRA    GET2
  921. 09210 GETX    LBSR    CHROUT
  922. 09220     CLR    B,X
  923. 09230     RTS
  924. 09240 GETPMP    FCC    'FILENAME.EXT? '
  925. 09250     FCB    0
  926. 09260 *
  927. 09270 *************************
  928. 09280 * CONVERT A TO HEX IN D *
  929. 09290 *************************
  930. 09300 *
  931. 09310 TOHEX    PSHS    A
  932. 09320     CLRB
  933. 09330     LSLA
  934. 09340     ROLB
  935. 09350     LSLA
  936. 09360     ROLB
  937. 09370     LSLA
  938. 09380     ROLB
  939. 09390     LSLA
  940. 09400     ROLB
  941. 09410     PULS    A
  942. 09420     ANDA    #$F
  943. 09430     ADDD    #$3030
  944. 09440     CMPA    #$39
  945. 09450     BLE    THX2
  946. 09460     ADDA    #7
  947. 09470 THX2    CMPB    #$39
  948. 09480     BLE    THX4
  949. 09490     ADDB    #7
  950. 09500 THX4    EXG    A,B
  951. 09510     RTS
  952. 09520 *
  953. 09530 ISTACK    RMB    2
  954. 09540 STACK    RMB    100
  955. 09550 TOPSTK    FDB    0
  956. 09560 ZZTOP    RMB    0
  957. 09570 *
  958. 09580     ORG    $2800    (KERMIT ORIGIN)
  959. 09590 KERMR    BRA    KERMX    (RECEIVE STUB)
  960. 09600 KERMS    BRA    KERMX    (SEND STUB)
  961. 09610 KERMT    BRA    KERMX    (SETUP STUB)
  962. 09620 KERMX    LEAX    KRMSTB,PCR
  963. 09630 KERMX0    LDA    ,X+
  964. 09640     BEQ    KERMX1
  965. 09650     LBSR    CHROUT
  966. 09660     BRA    KERMX0
  967. 09670 KERMX1    RTS
  968. 09680 KRMSTB    FCB    13
  969. 09690     FCC    'KERMIT PROTOCOL NOT LOADED.'
  970. 09700     FDB    $0D00
  971. 09710 ZZZTOP    RMB    0
  972. 09720     END    TERM
  973.