home *** CD-ROM | disk | FTP | other *** search
/ Columbia Kermit / kermit.zip / c / coco.jar < prev    next >
Text File  |  2020-01-01  |  76KB  |  2,741 lines

  1. This is a text archive of the files for Tandy Color Computer (CoCo) Kermit.
  2. Each file is preceded by a line <<< name >>>, where "name" is the name of
  3. the file.  The files begin on the next line.
  4. <<< ccexbin.bas >>>
  5. 110 ' EXBIN - CONVERT S-RECORD FORMAT TO BINARY
  6. 120 '
  7. 130 PCLEAR 1
  8. 140 CLEAR 200,&H1FFF
  9. 150 DIM V(50)
  10. 160 AL=64*1024 ' LOWEST ADDRESS
  11. 170 AU=0       ' HIGHEST ADDRESS
  12. 180 AX=0       ' EXEC ADDRESS
  13. 190 AM=&H2000  ' MIN ALLOWED
  14. 200 SF=1
  15. 210 CLS
  16. 220 PRINT"EXBIN"
  17. 230 PRINT"CONVERT S-RECORD FILE TO BINARY"
  18. 240 '
  19. 250 INPUT"S-FILE";NM$
  20. 260 OPEN"I",SF,NM$
  21. 270 '
  22. 280 NREC=0
  23. 290 '
  24. 300 ' MAIN LOOP - READ RECORD AND CONVERT IT
  25. 310 INPUT#SF,DL$: NREC=NREC+1
  26. 320 IF LEFT$(DL$,1)="S" THEN 380
  27. 330 PRINT "FILE IS NOT IN S-RECORD FORMAT."
  28. 340 PRINT "LINE";NREC
  29. 350 PRINT DL$
  30. 360 STOP
  31. 370 ' RECORD TYPE (0,1 OR 9)
  32. 380 TYPE=VAL(MID$(DL$,2,1))
  33. 390 ' RECORD LENGTH
  34. 400 LN=VAL("&H"+MID$(DL$,3,2))
  35. 410 ' ADDRESS FIELD
  36. 420 ADR=VAL("&H"+MID$(DL$,5,4))
  37. 430 ' COMPUTE CHECKSUM
  38. 440 CK=LN+INT(ADR/256)+ADR-256*INT(ADR/256)
  39. 450 ' DATA BYTES
  40. 460 IF LN<=3 THEN 510
  41. 470 FOR I=1 TO LN-3
  42. 480 V(I)=VAL("&H"+MID$(DL$,7+2*I,2))
  43. 490 CK=CK+V(I)
  44. 500 NEXT I
  45. 510 CK=255-(CK-256*INT(CK/256))
  46. 520 CS=VAL("&H"+RIGHT$(DL$,2))
  47. 530 IF CK=CS THEN 580
  48. 540 PRINT"CHECKSUM ERROR AT LINE";NREC
  49. 550 PRINT DL$
  50. 560 PRINT "COMPUTED ";HEX$(CK);" FOUND ";HEX$(CS)
  51. 570 STOP
  52. 580 IF TYPE=9 THEN TYPE=2
  53. 590 IF TYPE<0 OR TYPE>2 THEN PRINT"UNKNOWN RECORD TYPE ";TYPE:PRINT DL$:STOP
  54. 600 ON TYPE+1 GOSUB 640,720,840
  55. 610 IF TYPE<2 THEN GOTO 310
  56. 620 END
  57. 630 '
  58. 640 ' FILE NAME RECORD
  59. 650 BN$=""
  60. 660 FOR I=1 TO LN-3
  61. 670 BN$=BN$+CHR$(V(I))
  62. 680 NEXT I
  63. 690 PRINT"OUTPUT FILE = ";BN$
  64. 700 RETURN
  65. 710 '
  66. 720 ' DATA RECORD
  67. 730 IF ADR>=AM THEN 770
  68. 740 PRINT"ADDRESS ";HEX$(ADR);" LESS THAN ";HEX$(AM)
  69. 750 PRINT"AT LINE ";NREC
  70. 760 STOP
  71. 770 FOR I=0 TO LN-4
  72. 780 POKE ADR+I,V(I+1)
  73. 790 NEXT I
  74. 800 IF ADR<AL THEN AL=ADR
  75. 810 IF ADR+LN-4>AU THEN AU=ADR+LN-4
  76. 820 RETURN
  77. 830 '
  78. 840 ' EXECUTION ENTRY RECORD
  79. 850 AX=ADR
  80. 860 PRINT"BINARY FILE  = ";BN$
  81. 870 PRINT"LOW  ADDRESS = &H";HEX$(AL)
  82. 880 PRINT"HIGH ADDRESS = &H";HEX$(AU)
  83. 890 PRINT"EXEC ADDRESS = &H";HEX$(AX)
  84. 900 SAVEM BN$,AL,AU,AX
  85. 910 RETURN
  86. <<< cckermit.bwr >>>
  87. 26-Jul-86 20:09:12-EDT,1243;000000000001
  88. Return-Path: <blarson@usc-oberon>
  89. Received: from usc-oberon.ARPA by CU20B.COLUMBIA.EDU with TCP; Sat 26 Jul 86 20:09:07-EDT
  90. Received: by usc-oberon.ARPA (4.12/5.5) id AA15164; 
  91.                 Sat, 26 Jul 86 17:10:10 pdt
  92. Date: Sat, 26 Jul 86 17:10:10 pdt
  93. From: Bob Larson <blarson@usc-oberon>
  94. Message-Id: <8607270010.AA15164@usc-oberon.ARPA>
  95. To: info-kermit@cu20b.columbia.edu
  96. Subject: Re: CoCo Kermit
  97. Newsgroups: net.micro.6809
  98. In-Reply-To: <273@vaxb.calgary.UUCP>
  99. Organization: U of Southern CA, Computer Services, Los Angeles
  100.  
  101. This should probablby go the the beware file for coco kermit:
  102.  
  103. In article <273@vaxb.calgary.UUCP> ingoldsby@calgary.UUCP writes:
  104. >I previously reported having some problems with getting V1.1 of CoCo
  105. >Kermit by Wes Hubert to work with our VAX UNIX Kermit.  I found that
  106. >for some reason, someone had set the default number of pad chars on
  107. >the Coco Kermit to 1.  The Vax didn't seem to care for this value and
  108. >when the Coco Kermit # of pad chars was set to 0, everything worked
  109. >fine.
  110. >
  111. >Terry Ingoldsby
  112. >...ihnp4!alberta!calgary!ingoldsby
  113.  
  114.  
  115. -- 
  116. I'm having a brainstorm and I forgot my umbrella.  (xg)
  117.  
  118. Bob Larson
  119. Arpa: Blarson@Usc-Ecl.Arpa
  120. Uucp: ihnp4!sdcrdcf!usc-oberon!blarson
  121. <<< cckermit.doc >>>
  122.  
  123.  
  124.  
  125.  
  126.  
  127.  
  128. 1.0. TRS-80* Color Computer Kermit
  129.      Version 1.1, March 1985
  130.  
  131.  
  132. Kermit-CoCo is a program that implements the KERMIT file transfer
  133. protocol  for  the TRS-80 Color Computer.  The minimum system re-
  134. quirements are a Color Computer with 16K memory, one disk  drive,
  135. and a 300 baud (Bell 103/113 compatible) modem.  Kermit-CoCo runs
  136. under the Radio Shack disk operating system and uses the built-in
  137. RS-232  port.   It  therefore does not require OS-9, the "deluxe"
  138. RS-232 pack, or any other hardware or software add-ons.  It  uses
  139. the  disk  ROM  for file I/O and is compatible with both versions
  140. 1.0 and 1.1 of the Radio Shack ROM.
  141.  
  142. Kermit-CoCo lets  your  Color  Computer  communicate  with  other
  143. systems  in  three  ways.  First, it is a terminal program.  Your
  144. computer can function as a terminal connected to  a  remote  com-
  145. puter.   Second,  it  permits uploading (sending) and downloading
  146. (receiving) text files to and from a remote computer.  Third,  it
  147. provides  KERMIT  protocol file transfers of both text and binary
  148. files to and from a remote computer running KERMIT.
  149.  
  150. KERMIT is a protocol designed for reliable file transfer.  It was
  151. developed  at  the  Columbia  University Center for Computing Ac-
  152. tivities in 1981-82  where  Bill  Catchings  and  Frank  da  Cruz
  153. designed the protocol and implemented it for DEC-20 and CP/M com-
  154. puters.  The two computers exchange information in small packets.
  155. The  sending  computer  transmits  a  packet,  then  waits for an
  156. acknowledgement before sending another.  Each packet includes in-
  157. formation  used  to validate the packet contents.  If a packet is
  158. received incorrectly, the receiving system  requests  retransmis-
  159. sion of the packet.
  160.  
  161. In addition to reliability, an advantage of Kermit over raw  data
  162. transfer is that it permits transfer of binary files.  This means
  163. Kermit can transfer Color  Computer  machine  language  programs,
  164. even over 7-bit connections.
  165.  
  166. Kermit-CoCo  implements  only  basic  functions  of  the   Kermit
  167. protocol.  It does not provide time out, multiple file transfers,
  168. or server mode communication and the user  interface  is  not  as
  169. sophisticated  as  in  many versions.  It is, however, sufficient
  170. for simple, reliable file transfers.
  171.  
  172.  
  173.  
  174.  
  175.  
  176.  
  177.  
  178. ____________
  179.  
  180.   TRS-80 is a trademark of Tandy Corp., Fort Worth, Texas
  181.  
  182.  
  183. Kermit-CoCo                   - 1 -                         03/85
  184.  
  185.  
  186.  
  187.  
  188.  
  189.  
  190.  
  191.  
  192.  
  193.  
  194. 1.1. Running Kermit-CoCo
  195.  
  196. Kermit-CoCo consists of two files.  CCKERMIT.BAS contains a short
  197. BASIC  program to configure memory, load, and execute the machine
  198. code file.  CCKERMIT.BIN contains the actual Kermit machine code.
  199. If  you  have  obtained  Kermit-CoCo  in some way other than on a
  200. diskette, see section 1.6, Bootstrapping Kermit-CoCo.
  201.  
  202. Make sure your modem is connected, place the Kermit-CoCo disk  in
  203. your machine, and type:
  204.  
  205.         RUN"CCKERMIT"
  206.  
  207. This runs the BASIC driver program, which loads and executes  the
  208. machine language code.
  209.  
  210. You can exit  from  Kermit-CoCo,  execute  other  commands,  then
  211. return to Kermit-CoCo with an EXEC command.
  212.  
  213. Kermit-CoCo initially displays the following summary  of  command
  214. codes and parameter settings.
  215.  
  216.                  KERMIT-COCO 1.1
  217.             (PREFIX CONTROL OR COMMANDS
  218.              WITH DOWN-ARROW)
  219.               0 EXIT,  ? PRINT MENU
  220.               1 LOCAL ECHO (N)
  221.               2 PARITY     (E)
  222.               3 AUTO LF    (N)
  223.               4 JOURNALIZE (N)
  224.               5 WRITE BUFFER TO FILE
  225.               6 READ FILE INTO BUFFER
  226.               7 UPLOAD BUFFER
  227.               8 ERASE BUFFER
  228.               9 DEF CHAR/LINE DELETE (08,18)
  229.              KERMIT: = SET, < RECEIVE, > SEND
  230.               ()!-# BRACES BAR TILDE DEL
  231.  
  232. The current settings are shown in parentheses, where Y=yes, N=no,
  233. and  E=even.   The  character  and line delete codes are shown as
  234. hexadecimal values.  If the default settings are correct for  the
  235. system  you  are  calling,  continue  with  your  normal  sign-on
  236. procedure.  First, however, the are a  few  things  you  need  to
  237. know.
  238.  
  239. 1.2. Multi-key Sequences
  240.  
  241. The Color Computer keyboard has only 53 keys.  It lacks  some  of
  242. the  keys  found on terminals; the most important of these is the
  243. CONTROL key.  Since CONTROL is normally located to  the  left  of
  244. the  letter   A,  Kermit-CoCo  uses the key in this position, the
  245. DOWN-ARROW, to indicate control codes.
  246.  
  247.  
  248.  
  249. 03/85                         - 2 -                   Kermit-CoCo
  250.  
  251.  
  252.  
  253.  
  254.  
  255.  
  256.  
  257.  
  258.  
  259.  
  260. Several other keys not shown on the keyboard  are  documented  in
  261. the  BASIC  manual  that  came with your computer.  These include
  262. using SHIFT-0 as a caps  lock,  SHIFT-DOWN-ARROW  for  [,  SHIFT-
  263. RIGHT-ARROW  for ], SHIFT-CLEAR for \, and SHIFT-UP-ARROW for un-
  264. derscore (underscore prints as a LEFT-ARROW).
  265.  
  266. 1.2.1. ASCII Control Characters
  267.  
  268. Unlike terminals, on which you press some other key while holding
  269. down  the  control  key,  in Kermit-CoCo you press the DOWN-ARROW
  270. first, release it, then press the key you want it to modify.  For
  271. example, DOWN-ARROW followed by A generates the hexadecimal value
  272. 01 which  is  the  ASCII  code  for  control-A.   Throughout  the
  273. remainder  of  this  document,  control  sequences are printed as
  274. "CTL-character"; for example, CTL-A for DOWN-ARROW followed by A.
  275.  
  276. ASCII control codes (hexadecimal 00 through 1F) are generated  by
  277. the  standard combinations: CTL-@ for 00, CTL-A for 01, CTL-B for
  278. 02, ...  CTL-Z for 1A, CTL-[ for 1B, CTL-\ for 1C, CTL-] for  1D,
  279. CTL-^ for 1E, and CTL-_ (SHIFT-UP-ARROW) for 1F.
  280.  
  281. 1.2.2. Other Special Characters
  282.  
  283. A second use of the DOWN-ARROW prefix is to generate other  ASCII
  284. characters not on the keyboard.  These are:
  285.  
  286.         `        CTL '  (Prints as inverse @)
  287.         {        CTL (  (Prints as inverse [)
  288.         |        CTL !  (Prints as inverse \)
  289.         }        CTL )  (Prints as inverse ])
  290.         Tilde    CTL -  (Prints as inverse ^)
  291.         Rubout   CTL #  (Prints as
  292.                           inverse LEFT-ARROW)
  293.  
  294. To help you remember these, they are shown at the bottom  of  the
  295. menu display.
  296.  
  297. Some terminals have a special key for the ASCII escape code.   It
  298. simply generates CTL-[ with a single key.
  299.  
  300. Another key on many terminals is LINE-FEED.  Use either CTL-DOWN-
  301. ARROW or CTL-J to generate the ASCII line feed character.  On the
  302. Kermit-CoCo screen, LINE-FEED moves the cursor to  the  beginning
  303. of the next line.
  304.  
  305. The BREAK key generates a break by  sending  a  long  (about  1/4
  306. second) series of 0 bits.
  307.  
  308. When CTL-G (bell)  is  received  or  typed  on  the  keyboard  it
  309. generates a tone through the speaker on your monitor.
  310.  
  311. The LEFT-ARROW key backspaces the cursor  and  transmits  a  user
  312. selectable character deletion code.  SHIFT-LEFT-ARROW transmits a
  313. user selectable line deletion code.
  314.  
  315. Kermit-CoCo                   - 3 -                         03/85
  316.  
  317.  
  318.  
  319.  
  320.  
  321.  
  322.  
  323.  
  324.  
  325.  
  326. The CLEAR key clears the screen and moves the cursor to the upper
  327. left corner.  It does not transmit any character.
  328.  
  329. 1.2.3. Kermit-CoCo Commands
  330.  
  331. A final use of the DOWN-ARROW key is  for  Kermit-CoCo  commands.
  332. These  include modifying parameter settings and beginning special
  333. actions such as KERMIT file transfers.
  334.  
  335. CTL-? displays the main  menu  with  current  parameter  settings
  336. shown in parentheses.
  337.  
  338. CTL-0 terminates Kermit-CoCo and returns control to  BASIC.   You
  339. can restart Kermit-CoCo by entering EXEC.
  340.  
  341. Modify control parameters by pressing the  DOWN-ARROW  key,  then
  342. the  number  of  the  option you want to change.  For example, if
  343. local echo is on (Yes), pressing CTL-1 changes it  to  off  (No).
  344. Pressing CTL-1 again turns local echo back on.
  345.  
  346. CTL-2 toggles the parity setting between even and none.   Kermit-
  347. CoCo  cannot  communicate  with systems that require other parity
  348. settings.  Although Kermit-CoCo can generate even  parity  output
  349. it  always  ignores  the parity bit of incoming data.  The bit is
  350. not used for either parity checking or 8-bit data values.
  351.  
  352. CTL-3 toggles local line-feed generation.  When it is set to Yes,
  353. Kermit-CoCo  adds  a line-feed to the display after each carriage
  354. return.  It does not transmit the added line-feed.
  355.  
  356. After modifying parameters, you can verify the  new  settings  by
  357. pressing CTL-? to display the menu with the new values.
  358.  
  359. Setting character and line delete codes is similar, but  requires
  360. a  series  of  keystrokes.  These codes, displayed as hexadecimal
  361. values on the menu, are transmitted by the LEFT-ARROW and  SHIFT-
  362. LEFT-ARROW  keys.   To change the settings, press CTL-9, then the
  363. keys for the values to transmit.  For example,
  364.  
  365.         CTL-9 @ CTL-X
  366.  
  367. sets the character delete symbol to "@" (hexadecimal 40), and the
  368. line delete symbol to control-X (hexadecimal 18).
  369.  
  370. You are now ready to use Kermit-CoCo as  a  terminal.   The  fol-
  371. lowing sections describe file transfer.
  372.  
  373. 1.3. KERMIT File Transfers
  374.  
  375. Kermit file transfers require a copy of Kermit on the remote com-
  376. puter  as  well  as  Kermit-CoCo  on your system.  The remote can
  377. range from another Color Computer to a large mainframe.
  378.  
  379.  
  380.  
  381. 03/85                         - 4 -                   Kermit-CoCo
  382.  
  383.  
  384.  
  385.  
  386.  
  387.  
  388.  
  389.  
  390.  
  391.  
  392. Before beginning a transfer, configure any  necessary  parameters
  393. using the CTL-= command described below.  The default settings of
  394. EOL, SOH, etc. are appropriate for  Kermit-CoCo  and  many  other
  395. systems, but check documentation for the remote Kermit in case it
  396. requires other values.  These must be correct or no communication
  397. can take place.
  398.  
  399. 1.3.1. KERMIT Parameter Settings
  400.  
  401. Typing DOWN-ARROW followed by an equal sign displays the  current
  402. KERMIT  parameter settings and leaves the cursor under the first.
  403. Pressing ENTER leaves all settings unchanged and returns to  ter-
  404. minal  mode.   Any  other  key  indicates  a  new  value  for the
  405. parameter above the cursor.   To  leave  a  parameter  unchanged,
  406. press  the  space  bar.   Pressing  any  other  key  changes  the
  407. parameter to the ASCII value of that key.  The cursor then  moves
  408. to  the  next  parameter  until  you have responded for each one.
  409. Kermit-CoCo then returns to normal terminal mode.  Note that  for
  410. any  parameter  except  the  first, ENTER is taken as a parameter
  411. setting.
  412.  
  413. Parameters that can be set are:
  414.     TYPE  COCO File Type: 0=BASIC, 1=TEXT, 2=Machine Code
  415.     MODE  COCO File Mode: 0=Binary, FF=ASCII
  416.     EOL   End-of-line required by the remote system when
  417.           receiving Kermit packets.
  418.     NTRY  Maximum number for transmission attempts for
  419.           each packet.
  420.     SOH   Start of packet character required by the remote
  421.           Kermit.
  422.     DBUG  Debug flag: 0=Off, anything else=On
  423.           When the debug flag is on, each packet sent is
  424.           displayed on lines 9-11 of the screen and each
  425.           packet received is displayed on lines 13-15.
  426.  
  427. For example, to change the  number  of  retransmission  attempts,
  428. press CTL-=.  Kermit-CoCo displays:
  429.  
  430.             TYPE MODE  EOL NTRY  SOH DBUG
  431.               00   FF   0D   05   01   00
  432.  
  433. Press the space bar three times to leave TYPE, MODE, and EOL  un-
  434. changed,  then  type DOWN-ARROW and J to change the retry setting
  435. to 10 (10 is the decimal value of control-J).   Press  the  space
  436. bar  two more times to leave SOH and DBUG unchanged.  The display
  437. now shows:
  438.  
  439.             TYPE MODE  EOL NTRY  SOH DBUG
  440.               00   FF   0D   05   01   00
  441.               00   FF   0D   0A   01   00
  442.  
  443. The second line of settings appeared  as  options  were  changed.
  444. Kermit-CoCo is now back in terminal mode.
  445.  
  446.  
  447. Kermit-CoCo                   - 5 -                         03/85
  448.  
  449.  
  450.  
  451.  
  452.  
  453.  
  454.  
  455.  
  456.  
  457.  
  458. To prepare to receive a machine code file, set TYPE to 2  (CTL-B)
  459. and  MODE to 0 (CTL-@).  Type and mode are automatically set when
  460. sending a file.  They must be manually set  for  receiving.   One
  461. reason that the distinction between binary and ASCII files is im-
  462. portant is that the Color Computer indicates end-of-line  with  a
  463. carriage return.  When transmitting ASCII files, Kermit-CoCo adds
  464. a line-feed after each one.  When receiving ASCII files,  Kermit-
  465. CoCo replaces each carriage return followed by a line-feed with a
  466. single return.  It does not insert  or  delete  line  feeds  when
  467. processing  binary  files.   Also,  the operating system requires
  468. certain file types for certain types of processing.   LOADM,  for
  469. example, requires that a file be declared as machine code binary.
  470. Setting the type  and  mode  parameters  permits  Kermit-CoCo  to
  471. create the proper type of file.
  472.  
  473. In addition to the space bar for leaving  values  unchanged,  and
  474. ASCII  codes  for setting other values, the BREAK key can be used
  475. to set a parameter to hexadecimal FF.
  476.  
  477. Several Kermit parameter settings are defined internally, with no
  478. provision for change.  These include # for control quoting, & for
  479. 8th-bit (binary) quoting, and hexadecimal  0D  (carriage  return)
  480. for end of incoming packet.
  481.  
  482. 1.3.2. Sending A File With KERMIT
  483.  
  484. Before transmitting a file, the remote KERMIT must  be  ready  to
  485. receive it.  This is done through a RECEIVE command to the remote
  486. KERMIT.  Press CTL-> on your keyboard.  Kermit-CoCo requests  the
  487. name  of  the  file to transmit.  Enter the name, and Kermit-CoCo
  488. begins sending.  As  each packet is sent, the  packet  number  is
  489. shown  as  a  hexadecimal  value.   If  debug mode is active, the
  490. packets are also displayed on the screen.  When the  transfer  is
  491. complete, the message TRANSFER COMPLETE appears on the screen and
  492. the ""bell"  beeps.   If  the  transmission  fails,  the  message
  493. TRANSFER  FAILED appears.  In either case, Kermit-CoCo returns to
  494. terminal mode.
  495.  
  496. If a "deadlock" occurs-- both KERMITs waiting for a message  from
  497. the  other,  the  packet number will stop changing.  To break the
  498. deadlock and resume transmission, press the  ENTER  key.   Before
  499. doing  this, wait long enough to make sure that a deadlock really
  500. does exist.
  501.  
  502. 1.3.3. Receiving A File With KERMIT
  503.  
  504. Before attempting to receive a file, make sure that the file mode
  505. and  type parameters are set correctly.  Issue a SEND command for
  506. the remote Kermit, then press CTL-<.  Kermit-CoCo will request  a
  507. name for the incoming file.  Unlike most KERMITs, Kermit-CoCo ig-
  508. nores the name in the incoming transmission, and writes the  data
  509. to the file you specify.
  510.  
  511.  
  512.  
  513. 03/85                         - 6 -                   Kermit-CoCo
  514.  
  515.  
  516.  
  517.  
  518.  
  519.  
  520.  
  521.  
  522.  
  523.  
  524. The display while receiving is similar to that  during  transmis-
  525. sion.   A  hexadecimal  packet number display keeps you posted on
  526. the status of the transmission.  If a deadlock  occurs,  you  can
  527. break  it  by  pressing  ENTER.   Kermit-CoCo  will signal either
  528. TRANSFER COMPLETE or TRANSFER FAILED at the end of the  transfer,
  529. and return to terminal mode.
  530.  
  531. Some remote Kermits can transmit multiple files.  Do not use this
  532. capability  with  Kermit-CoCo.  It can receive only one file at a
  533. time.
  534.  
  535. 1.4. Journalizing A Session
  536.  
  537. Kermit-CoCo can use all memory above the high end of the  program
  538. (&H2FFF)  as  a  buffer  to keep a copy of all characters sent or
  539. received.  This facility is used primarily  for  raw  ASCII  file
  540. transfers,  but  can  also be used to journalize (keep a copy of)
  541. your terminal session.
  542.  
  543. CTL-4 turns on session logging when it is off, turns it off  when
  544. it is on.
  545.  
  546. CTL-5 prompts for a file name and saves the buffer onto the file.
  547.  
  548. CTL-8 erases the buffer by resetting the buffer  pointer  to  the
  549. beginning of the buffer.
  550.  
  551. Note that the buffer cannot be used for both  raw  file  transfer
  552. and session logging at the same time.
  553.  
  554. 1.5. Raw ASCII File Transfer
  555.  
  556. Kermit transfers are more reliable than raw data transfers.  They
  557. also permit transfer of binary (8-bit) data.  However, since such
  558. transfers require  Kermit  on  both  the  sending  and  receiving
  559. systems, Kermit-CoCo also provides raw ASCII file transfer.
  560.  
  561. 1.5.1. Downloading Files
  562.  
  563. CTL-R (Hex 12) places the system in download mode.  Actually,  it
  564. turns  on  the  session  logging buffer regardless of its current
  565. state.  It can be entered at the keyboard or transmitted from the
  566. host  system.   Characters  received following it are placed into
  567. the buffer.  This mode ends when CTL-T is received or entered  at
  568. the keyboard or when the buffer is filled.
  569.  
  570. On a 16K system the buffer holds 4K bytes.  On larger systems  it
  571. hold 20K bytes.
  572.  
  573. The pointer to the current buffer position can be  reset  by  en-
  574. tering CTL-8 from the keyboard.  This is a local signal only.  It
  575. is not transmitted.   If  multiple  downloads  are  done  without
  576. reseting  the  buffer  pointer,  they  will  be  stored one after
  577. another in the buffer.
  578.  
  579. Kermit-CoCo                   - 7 -                         03/85
  580.  
  581.  
  582.  
  583.  
  584.  
  585.  
  586.  
  587.  
  588.  
  589.  
  590. 1.5.2. Uploading Files
  591.  
  592. Entering CTL-7 from  the  keyboard  begins  transmission  of  the
  593. buffer.   As the upload takes place, the text is displayed on the
  594. screen.  To prevent overprinting, you should turn on  local  line
  595. feed (CTL-3), then turn it off after the transfer is complete.
  596.  
  597. While uploading, all keys except BREAK are  ignored.   The  BREAK
  598. key  can  be  used  to  stop the upload process.  The upload ends
  599. automatically when the portion of the buffer currently in use has
  600. been transmitted.
  601.  
  602. Before the buffer is transmitted, the  remote  computer  must  be
  603. prepared  to  receive its contents.  To do this, enter the neces-
  604. sary commands (these depend on the remote system) using  terminal
  605. mode before starting the upload.
  606.  
  607. 1.5.3. Reading and Writing the Buffer
  608.  
  609. CTL-5 writes the contents of the buffer to a  disk  file.   CTL-6
  610. reads  a  file  into the buffer.  For either function Kermit-CoCo
  611. will prompt for a file name.
  612.  
  613. 1.6. Bootstrapping Kermit-CoCo
  614.  
  615. The easiest way to get Kermit-CoCo is on  a  diskette.   However,
  616. Kermit  is also distributed in other ways which permit ASCII-only
  617. transfer.  To support such transfer  mechanisms,  Kermit-CoCo  is
  618. available  in  Motorola  S-record format, along with a program to
  619. convert S-records to a binary file.   It  is  also  available  in
  620. ASCII source format for input to the EDTASM+ assembler.
  621.  
  622. 1.6.1.  Using the S-record File
  623.  
  624. To convert the S-record code to  binary,  you  need  to  transfer
  625. files  "CCEXBIN.BAS" and "CCKERMIT.S" to your diskette.  Running
  626. "CCEXBIN" generates file "CCKERMIT.BIN", the executable  version
  627. of Kermit-CoCo.  Each S-record contains checksum information.  If
  628. you did not receive the S-record  file  properly,  CCEXBIN  will
  629. stop  with  an  error message.  Transfer a new copy of CCKERM.S
  630. and try again.
  631.  
  632. After you have CCKERMIT.BIN, create CCKERMIT.BAS  with  the  fol-
  633. lowing program:
  634.  
  635.         10 PCLEAR 1:  CLEAR 200,&H1FFF
  636.         20 LOADM"CCKERMIT":  EXEC
  637.  
  638. You are now ready to run Kermit-CoCo.
  639.  
  640.  
  641.  
  642.  
  643.  
  644.  
  645. 03/85                         - 8 -                   Kermit-CoCo
  646.  
  647.  
  648.  
  649.  
  650.  
  651.  
  652.  
  653.  
  654.  
  655.  
  656. 1.6.2.  Assembling the Kermit-CoCo Source
  657.  
  658. The  source  for  Kermit-CoCo  is  in  two  parts.   The   first,
  659. COCOTERM.ASM,  contains  all  of  the  terminal functions and raw
  660. ASCII file upload and download.  The second,  COCOPROT.ASM,  con-
  661. tains the Kermit protocol source.
  662.  
  663. The source files were prepared  and  assembled  using  the  Radio
  664. Shack  EDTASM+  ROM  pack  assembler,  modified for disk I/O.  It
  665. should be usable as is with the standard  disk-based  version  of
  666. EDTASM+.   For  other  assemblers minor changes may be necessary.
  667. Comments at the beginning of  each  file  describe  assembly  and
  668. loading.
  669.  
  670. No linker program is necessary to combine the two  modules.   As-
  671. semble  the files to COCOTERM.BIN and COCOPROT.BIN, respectively.
  672. Load COCOTERM.BIN then load COCOPROT.BIN and SAVEM the code  from
  673. address  &H2000  through the end of COCOPROT.BIN.  This is &H2EFE
  674. as distributed, but may vary with different versions of  the  as-
  675. sembler and with user modifications.
  676.  
  677. Create CCKERMIT.BAS as described above.
  678.  
  679. ORG pseudo-ops enable the separately assembled  modules  to  com-
  680. municate;  however,  these  require  some care when modifying the
  681. code.   Note  that  COCOPROT  code  begins  loading  at   &H2800.
  682. Modifications  to  COCOTERM must not make the address of ZZTOP go
  683. beyond &H27FF.  Such modifications would require changing the ORG
  684. statement ahead of KERMR in COCOTERM and the ORG statement at the
  685. beginning of COCOPROT.  Increasing the size of COCOPROT  so  that
  686. address ZZZTOP is greater than &H2FFF would required changing the
  687. EQU statement for TOP in COCOTERM to place the origin of the  raw
  688. data buffer beyond the end of the Kermit packet buffers.
  689.  
  690.  
  691.  
  692.  
  693.  
  694.  
  695.  
  696.  
  697.  
  698.  
  699.  
  700.  
  701.  
  702.  
  703.  
  704.  
  705.  
  706.  
  707.  
  708.  
  709.  
  710.  
  711. Kermit-CoCo                   - 9 -                         03/85
  712. <<< cckermit.s >>>
  713. S00F000043434B45524D49542E42494E97
  714. S1232000204220D7210E214224562634266C271320B725CC4B45524D49542D434F434F202C
  715. S123202000434F50595249474854202843292031393835180800FF0030007FFF300000013A
  716. S1232040A312146010EF8D0749328D07AB1704FB170206308D0FA9AF8CDE9E74AF8CDB8D8E
  717. S12320603F17007327051703ED8D351700D427F181FF26048D3120E781FE260F6D8CB627A2
  718. S12320800586081703D0A68CAB201181FD2605A68CA120086D8C9E27031703BA8D7020BF9C
  719. S12320A0B6FF224424FA397FFF208E6100301F26FC8602B7FF20393406EC8C838300012636
  720. S12320C0FB358634108E00075F4624015C301F26F8465646351039B6FF224424024F39ECC5
  721. S12320E08DFF5C44568300012EFBC6073406EC8DFF4D83000126FB12F6FF225466606A612E
  722. S123210026EC66603506847F817F26014F396D8DFF2427028DADC60834067FFF20EC8DFF58
  723. S12321201E83000126FB64605959F7FF206A6126EC326217FF81C602F7FF2017FF7917FFC1
  724. S123214076393404E69F00882B04E78DFEF5C6FFE79F00883504AD9FA000260139810326EF
  725. S12321600386FF398108260386FE398115260386FD39810C260934341703D035344F398130
  726. S12321800A270139AD9FA00027FA81402505841FC60139813F26041700BF398130250481E1
  727. S12321A03E2F283414308D0015E680A18527065A2AF9351439308D000CA685351439052712
  728. S12321C02821292D23607B7C7D7E7F81302608351010EE8D05BC3981312606638DFE564F4E
  729. S12321E03981322606638DFE4D4F3981332606638DFE444F3981342606638DFE414F39814D
  730. S12322003526051704D44F39813626051704954F39813726051703004F398138260AEC8DE2
  731. S1232220FE16ED8DFE164F398139261417FF1327FBA78DFDFF17FF0A27FBA78DFDF54F3911
  732. S1232240813C2604BD280039813E2604BD280239813D2604BD2804393934361702ED308DFC
  733. S12322600062A68DFDCF4CA686A78D00CB3002A68DFDC34CA686A78D00D13002A68DFDB7C7
  734. S12322804CA686A78D00D73002A68DFDB14CA686A78D00DDA68DFD9C1704D6ED8D0145A6F8
  735. S12322A08DFD901704CBED8D013D308D001EEC81C30400DD88A68027F52B051702A420F5AA
  736. S12322C035364F39594E454E594E594E00084B45524D49542D434F434F20312E3100002288
  737. S12322E02850524546495820434F4E54524F4C204F5220434F4D4D414E44530000422057B7
  738. S123230049544820444F574E2D4152524F57290000623020455849542C20203F20505249F9
  739. S12323204E54204D454E5500008231204C4F43414C204543484F20283F290000A232205031
  740. S123234041524954592020202020283F290000C233204155544F204C4620202020283F29B0
  741. S12323600000E234204A4F55524E414C495A4520283F2900010235205752495445204255D6
  742. S12323804646455220544F2046494C450001223620524541442046494C4520494E544F20C4
  743. S12323A0425546464552000142372055504C4F414420425546464552000162382045524193
  744. S12323C0534520425546464552000182392044454620434841522F4C494E452044454C450D
  745. S12323E05445202858582C5858290001A04B45524D49543A203D205345542C203C205245F4
  746. S123240043454956452C203E2053454E440001C22829212D2320425241434553204241522E
  747. S12324202054494C44452044454C0DFFB6FF0184F7B7FF01B6FF0384F7B7FF03B6FF238ACF
  748. S123244008B7FF23CC06F2F7FF208300081083000226F4860739A18DFBE7260A86FFA78DC4
  749. S1232460FBDC17FC5239A18DFBD826066F8DFBCE20F0810726048DB4205C810C26071700A1
  750. S1232480CA860C205181082606C660E79F0088810D261F6D8DFBA0263AE68DFBA6E79F0020
  751. S12324A088C660E78DFB9CD689C4E0D78917FC072024810A261DE68DFB89E79F0088C660A5
  752. S12324C0E78DFB7F860DD689CA1FD789170093860A200317008C6D8DFB64260139AE8DFBE0
  753. S12324E05BAC8DFB552B076F8DFB538D0839A780AF8DFB48393402308D000FA68027051760
  754. S1232500FF5420F717FBA0350239076275666665722066756C6C0A0010AE8DFB1B10AC8D23
  755. S1232520FB1A2720A6A417FBE517FC16270481FF2712A6A017FF1F810D26E28E8000301F7F
  756. S123254026FC20D9C6FFE79F008839CC0400DD888E0480108E0580CC6000A785A7A55C26C0
  757. S1232560F93934165F9E888108260B8C040027538660A7822027810D260E9E888660A78047
  758. S12325801F10C51F26F62015812025374D2B0C814025068160250484DF8840A7809F885F84
  759. S12325A08C05FF231E8E0400EC8820EE8822ED81EF818C05E025F19F88CC6060ED818C0670
  760. S12325C00025F9C160270317FAED359634709EA6F6018EFE018F3454C67E338D0028F7011E
  761. S12325E08EFF018F10EF8D002F308D00219FA6A6841CFEBDADC686013554F7018EFF018F43
  762. S12326009FA635704D3910EE8D000D4F20EA58B331AEFF8C2831290000003402B6C0058429
  763. S1232620014833C635026ED4C8A4C952C468C48DCA3BCAE91700E97D2014272F8E094C86AF
  764. S123264020A7808C095725F9C6FF308DF9C65CA68526FB338D000A34406FE2CE26287E26ED
  765. S12326601A8649C601CE262CBD261A391700B17D2014272F8E094C8620A7808C095725F9C7
  766. S1232680C6FF308DF98E5CA68526FB338D000A34406FE2CE26287E261A864FC601CE262C60
  767. S12326A0BD261A3917FF8D7D2014272D8601976F17FF19261CBDA176AE8DF980AC8DF97A06
  768. S12326C02A08A780AF8DF97420E617FE286F8DF96DCE263017FF430F6F39CC00FFFD0957F3
  769. S12326E017FF897D094C272A8601976F10AE8DF94710AC8DF9462708A6A0AD9FA00220F100
  770. S1232700810D2706860DAD9FA002CE263017FF0A0F6F398601976FCE263017FEFD0F6F3904
  771. S1232720308D003EA680270517FE3720F7308DF8E35F17FA0D27FB810D272181FE26115DC5
  772. S123274027F08660A79F0088860817FE155A20E2C10C27DEA78517FE095C20D617FE036FA1
  773. S1232760853946494C454E414D452E4558543F200034025F48594859485948593502840FF5
  774. S1232780C3303081392F028B07C1392F02CB071E8939FF00FF02FD00FF00FF00FF00FF00BF
  775. S12327A0FF02FF00FF00FD00FF00FF00FF00FF00FF02FF02FF00FF00FF02FF00FD02FF001F
  776. S12327C0FF00FF00FF00FF00FF00FF00FF00FF02FF00FF00FF00FF00FF00FF00FF00FF0003
  777. S12327E0FF00FF00FF00FF00FF00FF00FD00FF00FF00FF00FF00FF000000FF00FF00FF00E6
  778. S12328002004200520061605BE1604741603F94B45524D49542D434F434F20312E31002CD3
  779. S123282020537E2F21402D23263120410D5E0000232600FF0D050100002146FF00FF00FFE1
  780. S123284000FF00FF00FF00FF00FF00FF00FF008601976FAD9F20122607BDA1760F6F5F3959
  781. S12328600F6FC601393414C601D76FAD9FA00235140F6F393402AD9F2010B6FF224424FAA8
  782. S1232880350239A6802706AD9F200820F6393406C6203D6FE4E3E1C30400DD883934025F40
  783. S12328A048594859485948593502840FC3303081392F028B07C1392F02CB071E89398DDDDF
  784. S12328C03404AD9F20083502AD9F200839CC0400DD888E0480108E0580CC6000A785A7A556
  785. S12328E05C26F939DC883416CC030817FFA0A68DFF568DCAA68DFF518DC43516DD88391039
  786. S12329009E88342017FF87A6808020847F3402A680AD9F20086AE426F68620AD9F2008D6A9
  787. S1232920895CC47F26F535023506DD8839A68DFF04A78DFF15EC8DFF0FC30001ED8DFF08F6
  788. S1232940395FA68480202712EB804A26FB1F98595959C4033404ABE0843F8B2039308D054D
  789. S1232960FF6F8DFECCE684C023273CA6038020A78DFEBA5A27315A272EA6058020A78DFECB
  790. S1232980AD5A2723A6068840A78DFEA35A27185A2715A608A78DFE985A270CA609815926B6
  791. S12329A0028626A78DFE8A393410E684C0203AE68DFE7EE18DFE712704847F200D4D2A0A00
  792. S12329C0E68DFE64E780847F201C810D26186D8DFE612712E68DFE4FE7808840A780E7809D
  793. S12329E0860A8840202AA18DFE3D260488402018A18DFE34260AA18DFE3726048840200891
  794. S1232A0081202B04817F2608E68DFE1BE7808840A7801F10A3E43510CB20E784C01CE18D37
  795. S1232A20FE0B2B03C601395F39341017FF13A7846D8DFE032708CC0800AEE417FEC1E68D52
  796. S1232A40FDEC34046AE42B0AA68DFDE3AD9F200420F2350417FE8DA68DFDDBAD9F2004AE35
  797. S1232A60E4E684C0203404A680AD9F20046AE42AF63504A68DFDBDAD9F2004351039308D17
  798. S1232A80047CA7028623A784E68DFDBDC43FCB20E70117FEACA7848E8000301F26FC308D0A
  799. S1232AA0045C8D8539308D04B73410AD9F20062704810D2748AD9F200227F017FDB6A18D94
  800. S1232AC0FD7426E7AEE4AD9F20062704810D272DAD9F200227F017FD9BA18DFD5927E5A7F8
  801. S1232AE080A18DFD4726DF6D8DFD4C2708AEE4CC0C0017FE0A351017FE47A1843935108616
  802. S1232B000139A68DFD2FA78DFD406D8DFD402714865917FF69EC8DFD2FC30001ED8DFD28CF
  803. S1232B206F8DFD2A6A8DFD222B5D308D043217FF742707864E17FF4620EA308D0422EC8D8F
  804. S1232B40FD06262117FE16308DFCD48659A70217FDEFA784308DFCC717FECECC0001ED8D0F
  805. S1232B60FCE6865339C43FCB20E1012707864E17FF0C20B06A8DFCD6308D03E4E684C023DF
  806. S1232B803003A61F8144398651395D260517FF7226045AA680395F396F8DFCB06F8DFCAD53
  807. S1232BA05F17FFE62761A18DFC8726096C8DFC9D17FFD72752A18DFC77262F17FFCC274710
  808. S1232BC0A18DFC6D2724A18DFC66271E88406D8DFC7B26166D8DFC5B27106D8DFC6E270AA8
  809. S1232BE0810A26066F8DFC6420176D8DFC5F27028B806F8DFC56810D26046C8DFC4E17FCA2
  810. S1232C00646F8DFC48209A3917FCC2308DFC0017FC71308D021617FC6A308DFC1586063427
  811. S1232C20028620AD9F2008AD9F2008AD9F2008A68017FC8A6AE426E93502860AAD9F200831
  812. S1232C40C6063404308DFBEA8620AD9F2008AD9F2008AD9F2008AD9F200627FAE6E4C106A4
  813. S1232C602604810D271181202704A7802002A68017FC4B6AE426D13504860AAD9F2008390C
  814. S1232C8017FC4A308DFB8817FBF9308D021517FBF2AD9F200A7D2014260139FC0957ED8D53
  815. S1232CA0FB90CC0000ED8DFB9FCC030017FBDF308D020B17FBCD8653308DFB63A702A68D6C
  816. S1232CC0FB73A78DFB846A8DFB80102B00E8308DFB4D17FD5417FDCD26ECA68D0284815947
  817. S1232CE026E417FC78108E2014308DFB4E5FA6A52705A7855C20F7CB23308DFB3BE784178B
  818. S1232D00FC2B6A8DFB44102B00AC308DFB2A17FD1817FD9126ECA68D0248815926E4AD9FF9
  819. S1232D202012265C17FC06308D01D3C43FE78DFB1ACB20E701C644E7028623A784AD9F209F
  820. S1232D4012260C17FB09308D01B417FC5B27EE6A8DFAF7102B005F308D01A317FCCB17FD46
  821. S1232D604426EC308D01F9EC018020C1592709C14E102600414A843FA18DFACF26D1209E2C
  822. S1232D80AD9F200E17FBA66A8DFABF102B0027865A17FCEA17FD0E26EE17FB916A8DFAAA9A
  823. S1232DA0102B0012864217FCD517FCF926EE308D012017FACE39AD9F200E864217FCBF30B8
  824. S1232DC08D012617FABD3917FB03308DFA4117FAB2308D00DA17FAABCC0000ED8DFA69EC7C
  825. S1232DE08DFA4FFD0957AD9F200C7D2014260139CC030017FA98308D00C417FA866F8DFA8D
  826. S1232E004D17FCFE8153262117FCF78146261A17FD86815A261317FCE98142260C8659178F
  827. S1232E20FC5CAD9F200E16FF8516FF8A0A0A414C4C20504152414D45544552532053484F78
  828. S1232E40574E20494E204845580A454E544552204E45572056414C554553204259204B4520
  829. S1232E605920434F44450A424C414E4B3D4E4F204348414E47452C20425245414B3D46462E
  830. S1232E800A0A202054595045204D4F44452020454F4C204E5452592020534F4820444255A1
  831. S1232EA0470A000A53454E442046494C450A000A524543454956452046494C450A00504157
  832. S1232EC0434B45542023303030302028484558290A000A075452414E5346455220434F4DEF
  833. S1222EE0504C45544507070A000A075452414E53464552204641494C454407070A00FFEB
  834. S9032000DC
  835. <<< ccprot.asm >>>
  836. 00010 * COLOR COMPUTER KERMIT VERSION 1.1 03/85
  837. 00020 * COPYRIGHT (C) 1985 BY WES HUBERT
  838. 00030 * 3020 STEVEN DRIVE, LAWRENCE, KS 66044
  839. 00040 *
  840. 00050 * THIS IS AN IMPLEMENTATION OF THE KERMIT
  841. 00060 * PROTOCOL DEVELOPED BY FRANK DA CRUZ AND
  842. 00070 * BILL CATCHINGS AT THE COLUMBIA UNIVERSITY
  843. 00080 * CENTER FOR COMPUTING ACTIVITIES.
  844. 00090 *
  845. 00100 * THE USUAL KERMIT PERMISSIONS APPLY:
  846. 00110 * THE PROGRAM MAY BE COPIED FOR PRIVATE USE
  847. 00120 * OR NON-PROFIT DISTRIBUTION, BUT CANNOT BE
  848. 00130 * SOLD OR INCORPORATED INTO OTHER SOFTWARE
  849. 00140 * SOLD FOR PROFIT.
  850. 00150 *
  851. 00160 * THIS VERSION OF KERMIT RUNS ON THE TRS-80
  852. 00170 * COLOR COMPUTER.  IT SHOULD WORK WITH BOTH
  853. 00180 * VERSION 1.0 AND 1.1 DISK ROM.
  854. 00190 * MINIMUM SYSTEM IS 16K WITH ONE DISK.
  855. 00200 *
  856. 00210 * THIS PORTION OF THE CODE PERFORMS KERMIT
  857. 00220 * PROTOCOL TRANSFERS.  IT REQUIRES PRIOR
  858. 00230 * LOADING OF A SEPARATE PROGRAM FOR
  859. 00240 * KERMIT-COCO GENERAL TERMINAL FUNCTIONS.
  860. 00250 *
  861. 00260 * THIS CODE IS SUITABLE FOR THE RADIO SHACK
  862. 00270 * EDTASM ASSEMBLER.  IT WAS PREPARED FROM THE
  863. 00280 * ROM-PACK VERSION WITH THE DISK I/O MODS
  864. 00290 * FROM RAINBOW MAGAZINE.
  865. 00300 *
  866. 00310 * SINCE THIS IS AN IN-MEMORY ASSMBLER
  867. 00320 * (ASSEMBLER, CODE AND SYMBOL TABLES
  868. 00330 * ALL RESIDE IN MEMORY) COMMENTS ARE
  869. 00340 * SKETCHY.  THESE COMMENTS DOWN TO
  870. 00350 * THE ORG MUST BE DELETED TO GET
  871. 00360 * ENOUGH MEMORY TO ASSEMBLE.
  872. 00370 *
  873. 00380 * 1. ASSEMBLE BOTH TERMINAL & PROTOCOL CODE.
  874. 00390 * 2. PCLEAR 1: CLEAR 10,&H1FFF
  875. 00400 * 3. LOADM"COCOTERM"
  876. 00410 * 4. LOADM"COCOPROT"
  877. 00420 * 5. SAVEM"CCKERMIT",&H2000,&H2FFF,&H2000
  878. 00430 *
  879. 00440 * THIS VERSION OF KERMIT SENDS OR RECEIVES
  880. 00450 * ONLY ONE FILE AT A TIME.  THE NAME MUST
  881. 00460 * BE EXPLICITLY GIVEN BY THE USER.  THIS
  882. 00470 * IS TO PLACE RESPONSIBILITY TO AVOID
  883. 00480 * OVERWRITING EXISTING FILES ON THE USER.
  884. 00490 *
  885. 00500 *************************
  886. 00510 * KERMIT-COCO ENTRIES    *
  887. 00520 *************************
  888. 00530 *
  889. 00540     ORG    $2800    (ADDRESS KNOWN TO TERMINAL CODE)
  890. 00550     BRA    LRCV    (RECEIVE)
  891. 00560     BRA    LSEND    (SEND)
  892. 00570     BRA    LSET    (SET-UP)
  893. 00580 LRCV    LBRA    KRCV
  894. 00590 LSEND    LBRA    KSEND
  895. 00600 LSET    LBRA    KSET
  896. 00610 *
  897. 00620 *************************
  898. 00630 * TERMINAL ENTRY POINTS    *
  899. 00640 *************************
  900. 00650 *
  901. 00660 RS232I    EQU    $2002    (RS232 INPUT)
  902. 00670 RS232O    EQU    $2004    (RS232 OUTPUT)
  903. 00680 KEYIN    EQU    $2006    (KEYBOARD INPUT)
  904. 00690 CHROUT    EQU    $2008    (DISPLAY OUTPUT)
  905. 00700 INNAME    EQU    $200A    (OPEN INPUT FILE)
  906. 00710 OTNAME    EQU    $200C    (OPEN OUTPUT FILE)
  907. 00720 FCLOSE    EQU    $200E    (CLOSE FILE)
  908. 00730 WAIT    EQU    $2010    (PAUSE 1 BIT TIME)
  909. 00740 QEOF    EQU    $2012    (TEST FILE EOF)
  910. 00750 FNAME    EQU    $2014    (FILENAME BUFFER)
  911. 00760 *
  912. 00770 *************************
  913. 00780 * COCO DEFINITIONS    *
  914. 00790 *************************
  915. 00800 *
  916. 00810 UNIT    EQU    $6F    (I/O UNIT#)
  917. 00820 SCRPTR    EQU    $88    (SCREEN POINTER)
  918. 00830 SCREEN    EQU    $400    (SCREEN MEMORY)
  919. 00840 RTYPE    EQU    $957    (TYPE/MODE)
  920. 00850 PUTCHR    EQU    $A002    (PUT CHAR, INDIRECT)
  921. 00860 GETCHR    EQU    $A176    (READ SINGLE CHAR)
  922. 00870 INPIA    EQU    $FF22    (INPUT PIA)
  923. 00880 *
  924. 00890 HEADER    FCC    'KERMIT-COCO 1.1'
  925. 00900     FCB    0
  926. 00910 *
  927. 00920 *************************
  928. 00930 * KERMIT INIT PACKET    *
  929. 00940 *************************
  930. 00950 *
  931. 00960 INPAK    RMB    0
  932. 00970 INLNG    FCB    44    (LENGTH+32)
  933. 00980     FCB    32    (PACKNO+32)
  934. 00990 INTYPE    FCC    'S'    (SEND INIT)
  935. 01000 MYMAXL    FCB    126    (MAX PACKET SIZE+32)
  936. 01010 MYTIME    FCB    47    (15 SECOND TIMEOUT)
  937. 01020 MYPADN    FCB    33    (1 PAD CHAR)
  938. 01030 MYPADC    FCB    $40    (NULL)
  939. 01040 MYEOLI    FCB    45    (EOL=CARRIAGE RETURN)
  940. 01050 MYQCTL    FCC    '#'    (CONTROL QUOTE)
  941. 01060 MYQBIN    FCC    '&'    (BINARY QUOTE)
  942. 01070 MYCHKT    FCC    '1'    (1-BYTE CHECKSUM)
  943. 01080 MYREPT    FCB    32    (NO REPEATS)
  944. 01090     RMB    1    (PLACE FOR CHECKSUM)
  945. 01100 MYEOL    FCB    13    (MYEOLI-32)
  946. 01110 *
  947. 01120 *************************
  948. 01130 * REMOTE CHARACTERISTICS*
  949. 01140 *************************
  950. 01150 *
  951. 01160 MAXL    FCB    94    (MAY BE
  952. 01170 PADN    FCB    0     REVISED
  953. 01180 PADC    FCB    0     BY THE
  954. 01190 QCTL    FCC    '#'     REMOTE INIT
  955. 01200 QBIN    FCC    '&'     PACKET)
  956. 01210 *
  957. 01220 *************************
  958. 01230 * SETABLE PARAMETERS    *
  959. 01240 *************************
  960. 01250 *
  961. 01260 FTYPE    FCB    0    (FILE TYPE=BASIC)
  962. 01270 FMODE    FCB    $FF    (FILE MODE=ASCII)
  963. 01280 EOL    FCB    13    (C.R.)
  964. 01290 MAXTRY    FCB    5    (# OF RETRIES)
  965. 01300 SOH    FCB    1    (PACKET HEADER)
  966. 01310 QDEBUG    FCB    0    (0=NODEBUG)
  967. 01320 *
  968. 01330 *************************
  969. 01340 * FILE NAME PACKET    *
  970. 01350 *************************
  971. 01360 *
  972. 01370 FBUFF    FCB    0    (LENGTH)
  973. 01380     FCB    33    (PACKET #)
  974. 01390     FCC    'F'    (TYPE)
  975. 01400 FBN    RMB    12    (NAME)
  976. 01410     RMB    1    (CHECKSUM)
  977. 01420 *
  978. 01430 *************************
  979. 01440 * SCRATCH VARIABLES    *
  980. 01450 *************************
  981. 01460 *
  982. 01470 NPACK    RMB    2    (CURRENT PACKET)
  983. 01480 NTRY    RMB    1    (REMAINING RETRIES)
  984. 01490 SNUM    RMB    1    (PACKET MOD 64)
  985. 01500 QCR    RMB    1    (CR PENDING)
  986. 01510 FBIN    RMB    1    (HIGH BIT FLAG)
  987. 01520 NEEDAK    RMB    1    (ACK PENDING)
  988. 01530 *
  989. 01540 *************************
  990. 01550 * READ CHAR FROM FILE 1 *
  991. 01560 * RETURN CHAR IN A    *
  992. 01570 * CLEAR Z FLAG ON EOF    *
  993. 01580 *************************
  994. 01590 *
  995. 01600 FGET    LDA    #1    (UNIT #1)
  996. 01610     STA    UNIT
  997. 01620     JSR    [QEOF]
  998. 01630     BNE    FGETE
  999. 01640     JSR    GETCHR    (BASIC ROM)
  1000. 01650     CLR    UNIT
  1001. 01660     CLRB
  1002. 01670     RTS
  1003. 01680 FGETE    CLR    UNIT
  1004. 01690     LDB    #1    (FLAG EOF)
  1005. 01700     RTS
  1006. 01710 *
  1007. 01720 *************************
  1008. 01730 * PUT CHAR INTO FILE 1  *
  1009. 01740 * RECEIVE CHAR IN A    *
  1010. 01750 *************************
  1011. 01760 *
  1012. 01770 FPUT    PSHS    X,B
  1013. 01780     LDB    #1    (UNIT #1)
  1014. 01790     STB    UNIT
  1015. 01800     JSR    [PUTCHR]
  1016. 01810     PULS    X,B
  1017. 01820     CLR    UNIT    (BACK TO SCREEN)
  1018. 01830     RTS
  1019. 01840 *
  1020. 01850 *************************
  1021. 01860 * SYNC AFTER RS232 INPUT*
  1022. 01870 *************************
  1023. 01880 *
  1024. 01890 SYNC    PSHS    A    (SAVE INCHAR)
  1025. 01900     JSR    [WAIT]    (ONE BIT-TIME)
  1026. 01910 SYNC1    LDA    INPIA
  1027. 01920     LSRA
  1028. 01930     BCC    SYNC1    (WAIT FOR STOP BIT)
  1029. 01940     PULS    A
  1030. 01950     RTS
  1031. 01960 *
  1032. 01970 *************************
  1033. 01980 * PRINT STRING [X]    *
  1034. 01990 * STRING ENDS WITH NULL    *
  1035. 02000 *************************
  1036. 02010 *
  1037. 02020 PRINT    LDA    ,X+    (CHAR FROM STRING)
  1038. 02030     BEQ    PRINTX    (NULL MARKS END)
  1039. 02040     JSR    [CHROUT]
  1040. 02050     BRA    PRINT
  1041. 02060 PRINTX    RTS
  1042. 02070 *
  1043. 02080 *************************
  1044. 02090 * CURSOR TO LINE=A,COL=B*
  1045. 02100 *************************
  1046. 02110 *
  1047. 02120 AT    PSHS    D
  1048. 02130     LDB    #32    (LINE 0-15)
  1049. 02140     MUL
  1050. 02150     CLR    ,S
  1051. 02160     ADDD    ,S++    (ADD COL 0-31)
  1052. 02170     ADDD    #SCREEN    (SCREEN ORIGIN)
  1053. 02180     STD    SCRPTR
  1054. 02190     RTS
  1055. 02200 *
  1056. 02210 *************************
  1057. 02220 * BINARY VALUE TO HEX    *
  1058. 02230 *************************
  1059. 02240 *
  1060. 02250 TOHEX    PSHS    A    (BINARY VALUE)
  1061. 02260     CLRB
  1062. 02270     LSLA        (HIGH 4 BITS TO B)
  1063. 02280     ROLB
  1064. 02290     LSLA
  1065. 02300     ROLB
  1066. 02310     LSLA
  1067. 02320     ROLB
  1068. 02330     LSLA
  1069. 02340     ROLB
  1070. 02350     PULS    A
  1071. 02360     ANDA    #$F    (ORIGINAL LOW 4)
  1072. 02370     ADDD    #$3030    (ASCII EXCESS)
  1073. 02380     CMPA    #$39
  1074. 02390     BLE    THX2
  1075. 02400     ADDA    #7
  1076. 02410 THX2    CMPB    #$39
  1077. 02420     BLE    THX4
  1078. 02430     ADDB    #7
  1079. 02440 THX4    EXG    A,B
  1080. 02450     RTS
  1081. 02460 *
  1082. 02470 *************************
  1083. 02480 * OUTPUT VAL(A) IN HEX  *
  1084. 02490 *************************
  1085. 02500 *
  1086. 02510 HEXOUT    BSR    TOHEX    (VAL(A) TO HEX(D))
  1087. 02520     PSHS    B
  1088. 02530     JSR    [CHROUT]
  1089. 02540     PULS    A
  1090. 02550     JSR    [CHROUT]
  1091. 02560     RTS
  1092. 02570 *
  1093. 02580 *************************
  1094. 02590 * CLEAR SCREEN        *
  1095. 02600 *************************
  1096. 02610 *
  1097. 02620 CLEAR    LDD    #SCREEN
  1098. 02630     STD    SCRPTR    (HOME CURSOR)
  1099. 02640     LDX    #SCREEN+$80
  1100. 02650     LDY    #SCREEN+$180
  1101. 02660     LDD    #$6000    (60=SCREEN BLANK)
  1102. 02670 CLR2    STA    B,X
  1103. 02680     STA    B,Y
  1104. 02690     INCB
  1105. 02700     BNE    CLR2    (256 TIMES)
  1106. 02710     RTS
  1107. 02720 *
  1108. 02730 *************************
  1109. 02740 * SHOW CURRENT PACKET #    *
  1110. 02750 *************************
  1111. 02760 *
  1112. 02770 SNDSTS    LDD    SCRPTR    (SAVE SCREEN LOC)
  1113. 02780     PSHS    X,D
  1114. 02790     LDD    #$0308    (LINE 4, COL 9)
  1115. 02800     LBSR    AT    (MOVE CURSOR)
  1116. 02810     LDA    NPACK,PCR
  1117. 02820     BSR    HEXOUT
  1118. 02830     LDA    1+NPACK,PCR
  1119. 02840     BSR    HEXOUT
  1120. 02850     PULS    X,D
  1121. 02860     STD    SCRPTR
  1122. 02870     RTS
  1123. 02880 *
  1124. 02890 *************************
  1125. 02900 * ECHO PACKET TO SCREEN *
  1126. 02910 * RECEIVE A=LINE, B=CHR    *
  1127. 02920 * FOR START OF DISPLAY    *
  1128. 02930 *************************
  1129. 02940 *
  1130. 02950 ECHO    LDY    SCRPTR    (SAVE SCREEN LOC)
  1131. 02960     PSHS    Y
  1132. 02970     LBSR    AT
  1133. 02980     LDA    ,X+    (LENGTH)
  1134. 02990     SUBA    #32
  1135. 03000     ANDA    #$7F    (128 CHAR MAX)
  1136. 03010     PSHS    A
  1137. 03020 ECHO2    LDA    ,X+
  1138. 03030     JSR    [CHROUT]
  1139. 03040     DEC    ,S
  1140. 03050     BNE    ECHO2
  1141. 03060     LDA    #'     (ADD BLANKS)
  1142. 03070 ECHO4    JSR    [CHROUT]
  1143. 03080     LDB    1+SCRPTR
  1144. 03090     INCB
  1145. 03100     ANDB    #$7F    (TO EVEN 128 BYTES)
  1146. 03110     BNE    ECHO4
  1147. 03120     PULS    A
  1148. 03130     PULS    D    (SCREEN LOC)
  1149. 03140     STD    SCRPTR
  1150. 03150     RTS
  1151. 03160 *
  1152. 03170 *************************
  1153. 03180 * PREPARE TO SEND PACKET*
  1154. 03190 *************************
  1155. 03200 *
  1156. 03210 NEWPAK    LDA    MAXTRY,PCR
  1157. 03220     STA    NTRY,PCR (SET # RETRIES)
  1158. 03230     LDD    NPACK,PCR
  1159. 03240     ADDD    #1    (BUMP PACKET #)
  1160. 03250     STD    NPACK,PCR
  1161. 03260     RTS
  1162. 03270 *
  1163. 03280 *************************
  1164. 03290 *  COMPUTE CHECKSUM    *
  1165. 03300 * PACKET ADDRESS IN X    *
  1166. 03310 * RETURN CHECKSUM IN A    *
  1167. 03320 * CHECKSUM ADDRESS IN X    *
  1168. 03330 *************************
  1169. 03340 *
  1170. 03350 CHKSUM    CLRB
  1171. 03360     LDA    ,X    (LENGTH)
  1172. 03370     SUBA    #32
  1173. 03380     BEQ    CHKX
  1174. 03390 CHK2    ADDB    ,X+
  1175. 03400     DECA
  1176. 03410     BNE    CHK2    (SUM ALL BYTES)
  1177. 03420     TFR    B,A
  1178. 03430     ROLB        (MOVE HIGH 2 BITS
  1179. 03440     ROLB         TO LOW BITS
  1180. 03450     ROLB         THROUGH CARRY)
  1181. 03460     ANDB    #3    (2 BITS ONLY)
  1182. 03470     PSHS    B
  1183. 03480     ADDA    ,S+    (ADD INTO LOW 6)
  1184. 03490     ANDA    #$3F    (KEEP 6 BITS)
  1185. 03500 CHKX    ADDA    #32    (PRINTING ASCII)
  1186. 03510     RTS
  1187. 03520 *
  1188. 03530 *************************
  1189. 03540 * GET PARAMS FROM S PAK *
  1190. 03550 *************************
  1191. 03560 *
  1192. 03570 REMINI    LEAX    RBUFF,PCR
  1193. 03580     CLR    QBIN,PCR    (CLEAR 8TH-BIT QUOTE)
  1194. 03590     LDB    ,X    (LENGTH)
  1195. 03600     SUBB    #35    (LESS SEQ,TYPE,CHKSUM,32)
  1196. 03610     BEQ    REMX
  1197. 03620     LDA    3,X
  1198. 03630     SUBA    #32
  1199. 03640     STA    MAXL,PCR
  1200. 03650     DECB
  1201. 03660     BEQ    REMX
  1202. 03670     DECB        (CAN'T TIME OUT)
  1203. 03680     BEQ    REMX
  1204. 03690     LDA    5,X
  1205. 03700     SUBA    #32
  1206. 03710     STA    PADN,PCR
  1207. 03720     DECB
  1208. 03730     BEQ    REMX
  1209. 03740     LDA    6,X
  1210. 03750     EORA    #$40
  1211. 03760     STA    PADC,PCR
  1212. 03770     DECB
  1213. 03780     BEQ    REMX
  1214. 03790     DECB
  1215. 03800     BEQ    REMX
  1216. 03810     LDA    8,X
  1217. 03820     STA    QCTL,PCR
  1218. 03830     DECB
  1219. 03840     BEQ    REMX
  1220. 03850     LDA    9,X
  1221. 03860     CMPA    #'Y    (Y=& IF REQUESTED)
  1222. 03870     BNE    REM4
  1223. 03880     LDA    #'&
  1224. 03890 REM4    STA    QBIN,PCR
  1225. 03900 REMX    RTS
  1226. 03910 *
  1227. 03920 *************************
  1228. 03930 * PUT CHAR INTO PACKET    *
  1229. 03940 * RECEIVE CHAR IN A    *
  1230. 03950 * PACKET ADDRESS IN X    *
  1231. 03960 * CLEAR Z IF PACKET FULL*
  1232. 03970 *************************
  1233. 03980 *
  1234. 03990 KRMPUT    PSHS    X    (PACKET ADDRESS)
  1235. 04000     LDB    ,X    (CURRENT LENGTH)
  1236. 04010     SUBB    #32    (TOCHAR OFFSET)
  1237. 04020     ABX        (CURRENT CHAR)
  1238. 04030     LDB    QBIN,PCR  (CHECK 8-BIT QUOTE)
  1239. 04040     CMPB    MYQBIN,PCR
  1240. 04050     BEQ    KRMP0     
  1241. 04060     ANDA    #$7F  (IGNORE HIGH BIT)
  1242. 04070     BRA    KRMP1
  1243. 04080 KRMP0    TSTA        (CHECK HIGH BIT)
  1244. 04090     BPL    KRMP1
  1245. 04100     LDB    MYQBIN,PCR
  1246. 04110     STB    ,X+
  1247. 04120     ANDA    #$7F
  1248. 04130     BRA    KRMP2
  1249. 04140 KRMP1    CMPA    #$0D    (CR INTO CR,LF)
  1250. 04150     BNE    KRMP2
  1251. 04160     TST    FMODE,PCR
  1252. 04170     BEQ    KRMP2    (UNLESS BINARY)
  1253. 04180     LDB    MYQCTL,PCR
  1254. 04190     STB    ,X+
  1255. 04200     EORA    #$40
  1256. 04210     STA    ,X+
  1257. 04220     STB    ,X+
  1258. 04230     LDA    #$0A
  1259. 04240     EORA    #$40
  1260. 04250     BRA    KRMP6
  1261. 04260 KRMP2    CMPA    MYQCTL,PCR  (SEE IF CTL FLAG)
  1262. 04270     BNE    KRMP3
  1263. 04280     EORA    #$40    (TEMPORARY SHIFT)
  1264. 04290     BRA    KRMP5
  1265. 04300 KRMP3    CMPA    MYQBIN,PCR  (SEE IF BIN FLAG)
  1266. 04310     BNE    KRMP4
  1267. 04320     CMPA    QBIN,PCR  (CHECK 8TH-BIT QUOTE)
  1268. 04330     BNE    KRMP4
  1269. 04340     EORA    #$40    (TEMPORARY SHIFT)
  1270. 04350     BRA    KRMP5
  1271. 04360 KRMP4    CMPA    #32    (SEE IF CONTROL)
  1272. 04370     BMI    KRMP5
  1273. 04380     CMPA    #$7F    (RUBOUT)
  1274. 04390     BNE    KRMP6
  1275. 04400 KRMP5    LDB    MYQCTL,PCR
  1276. 04410     STB    ,X+
  1277. 04420     EORA    #$40
  1278. 04430 KRMP6    STA    ,X+
  1279. 04440 *
  1280. 04450     TFR    X,D    (NEW NEXT POSITION)
  1281. 04460     SUBD    ,S    (LESS PACKET ORIGIN)
  1282. 04470     PULS    X
  1283. 04480     ADDB    #32
  1284. 04490     STB    ,X    (LENGTH)
  1285. 04500     SUBB    #28    (NEED UP TO 4 MORE)
  1286. 04510     CMPB    MAXL,PCR
  1287. 04520     BMI    KRMP9
  1288. 04530     LDB    #1    (FLAG END OF PACKET)
  1289. 04540     RTS
  1290. 04550 KRMP9    CLRB
  1291. 04560     RTS
  1292. 04570 *
  1293. 04580 *************************
  1294. 04590 * SEND PACKET        *
  1295. 04600 * PACKET ADDRESS IN X    *
  1296. 04610 *************************
  1297. 04620 *
  1298. 04630 SNDPAK    PSHS    X    (HOLD ADDRESS)
  1299. 04640     LBSR    CHKSUM
  1300. 04650     STA    ,X
  1301. 04660     TST    QDEBUG,PCR
  1302. 04670     BEQ    SND2
  1303. 04680     LDD    #$0800    (LINE 9)
  1304. 04690     LDX    ,S
  1305. 04700     LBSR    ECHO
  1306. 04710 SND2    LDB    PADN,PCR
  1307. 04720     PSHS    B
  1308. 04730 SND3    DEC    ,S
  1309. 04740     BMI    SND4
  1310. 04750     LDA    PADC,PCR
  1311. 04760     JSR    [RS232O] (SEND PAD)
  1312. 04770     BRA    SND3
  1313. 04780 SND4    PULS    B
  1314. 04790     LBSR    SNDSTS    (SHOW PACKET #)
  1315. 04800     LDA    SOH,PCR
  1316. 04810     JSR    [RS232O] (SEND SOH)
  1317. 04820     LDX    ,S    (ADDRESS)
  1318. 04830     LDB    ,X    (LENGTH)
  1319. 04840     SUBB    #32
  1320. 04850     PSHS    B
  1321. 04860 SND6    LDA    ,X+
  1322. 04870     JSR    [RS232O]
  1323. 04880     DEC    ,S
  1324. 04890     BPL    SND6
  1325. 04900     PULS    B
  1326. 04910     LDA    EOL,PCR
  1327. 04920     JSR    [RS232O]
  1328. 04930     PULS    X
  1329. 04940     RTS
  1330. 04950 *
  1331. 04960 *************************
  1332. 04970 * SEND EMPTY PACKET    *
  1333. 04980 * PACKET TYPE IN A    *
  1334. 04990 *************************
  1335. 05000 *
  1336. 05010 SEND1    LEAX    SBUFF,PCR
  1337. 05020     STA    2,X    (TYPE)
  1338. 05030     LDA    #35
  1339. 05040     STA    ,X
  1340. 05050     LDB    1+NPACK,PCR
  1341. 05060     ANDB    #$3F
  1342. 05070     ADDB    #32
  1343. 05080     STB    1,X
  1344. 05090     LBSR    CHKSUM
  1345. 05100     STA    ,X
  1346. 05110     LDX    #$8000    (PAUSE)
  1347. 05120 SEND1P    LEAX    -1,X
  1348. 05130     BNE    SEND1P
  1349. 05140     LEAX    SBUFF,PCR
  1350. 05150     BSR    SNDPAK
  1351. 05160     RTS
  1352. 05170 *
  1353. 05180 *************************
  1354. 05190 * GET PACKET FROM REMOTE*
  1355. 05200 * CLEAR Z IF FAIL    *
  1356. 05210 *************************
  1357. 05220 *
  1358. 05230 GETPAK    LEAX    RBUFF,PCR
  1359. 05240     PSHS    X
  1360. 05250 GETP1    JSR    [KEYIN]    (ALLOW INTERRUPTION)
  1361. 05260     BEQ    GETP2
  1362. 05270     CMPA    #$0D    (BY C.R.)
  1363. 05280     BEQ    GETPB
  1364. 05290 GETP2    JSR    [RS232I]
  1365. 05300     BEQ    GETP1
  1366. 05310     LBSR    SYNC    (WAIT FOR STOP BIT)
  1367. 05320     CMPA    SOH,PCR
  1368. 05330     BNE    GETP1    (IGNORE UNTIL SOH)
  1369. 05340 GETP3    LDX    ,S    (BUFFER LOC)
  1370. 05350 GETP4    JSR    [KEYIN]
  1371. 05360     BEQ    GETP5
  1372. 05370     CMPA    #$0D
  1373. 05380     BEQ    GETPB
  1374. 05390 GETP5    JSR    [RS232I]
  1375. 05400     BEQ    GETP4
  1376. 05410     LBSR    SYNC    (WAIT FOR STOP BIT)
  1377. 05420     CMPA    SOH,PCR
  1378. 05430     BEQ    GETP3
  1379. 05440     STA    ,X+
  1380. 05450     CMPA    MYEOL,PCR
  1381. 05460     BNE    GETP4
  1382. 05470 GETP6    TST    QDEBUG,PCR
  1383. 05480     BEQ    GETP7
  1384. 05490     LDX    ,S    (SHOW PACKET)
  1385. 05500     LDD    #$0C00    (LINE 13)
  1386. 05510     LBSR    ECHO
  1387. 05520 GETP7    PULS    X
  1388. 05530     LBSR    CHKSUM
  1389. 05540     CMPA    ,X
  1390. 05550     RTS
  1391. 05560 GETPB    PULS    X
  1392. 05570     LDA    #1
  1393. 05580     RTS
  1394. 05590 *
  1395. 05600 *************************
  1396. 05610 * RECEIVE A PACKET.    *
  1397. 05620 * FIRST ACK PREVIOUS IF    *
  1398. 05630 * NOT YET ACKNOWLEDGED.    *
  1399. 05640 * LEAVE DATA LENGTH IN B*
  1400. 05650 * DATA ADDRESS IN X    *
  1401. 05660 * Z SET IF TYPE IS DATA    *
  1402. 05670 *************************
  1403. 05680 *
  1404. 05690 RGET    LDA    MAXTRY,PCR
  1405. 05700     STA    NTRY,PCR
  1406. 05710     TST    NEEDAK,PCR
  1407. 05720     BEQ    RGET2
  1408. 05730     LDA    #'Y
  1409. 05740     LBSR    SEND1    (ACK LAST PACKET)
  1410. 05750     LDD    NPACK,PCR
  1411. 05760     ADDD    #1
  1412. 05770     STD    NPACK,PCR
  1413. 05780     CLR    NEEDAK,PCR
  1414. 05790 RGET2    DEC    NTRY,PCR
  1415. 05800     BMI    RFAIL
  1416. 05810     LEAX    RBUFF,PCR
  1417. 05820     LBSR    GETPAK
  1418. 05830     BEQ    RGET4
  1419. 05840     LDA    #'N    (NAK)
  1420. 05850     LBSR    SEND1
  1421. 05860     BRA    RGET2
  1422. 05870 RGET4    LEAX    RBUFF,PCR
  1423. 05880     LDD    NPACK,PCR
  1424. 05890     BNE    RGET5
  1425. 05900     LBSR    REMINI
  1426. 05910     LEAX    INPAK,PCR    (SPECIAL ACK FOR INIT)
  1427. 05920     LDA    #'Y
  1428. 05930     STA    2,X
  1429. 05940     LBSR    CHKSUM
  1430. 05950     STA    ,X
  1431. 05960     LEAX    INPAK,PCR
  1432. 05970     LBSR    SNDPAK
  1433. 05980     LDD    #1
  1434. 05990     STD    NPACK,PCR
  1435. 06000     LDA    #'S
  1436. 06010     RTS
  1437. 06020 RGET5    ANDB    #$3F
  1438. 06030     ADDB    #32
  1439. 06040     CMPB    1,X
  1440. 06050     BEQ    RGET8
  1441. 06060     LDA    #'N    (NAK)
  1442. 06070     LBSR    SEND1
  1443. 06080     BRA    RGET2
  1444. 06090 RGET8    DEC    NEEDAK,PCR
  1445. 06100     LEAX    RBUFF,PCR
  1446. 06110     LDB    ,X
  1447. 06120     SUBB    #35
  1448. 06130     LEAX    3,X
  1449. 06140     LDA    -1,X    (TYPE)
  1450. 06150     CMPA    #'D
  1451. 06160     RTS
  1452. 06170 RFAIL    LDA    #'Q
  1453. 06180     RTS
  1454. 06190 *
  1455. 06200 *************************
  1456. 06210 * GET NEXT DATA CHAR    *
  1457. 06220 * VIEWS DATA AS STREAM    *
  1458. 06230 * B=CHARS LEFT IN PACKET*
  1459. 06240 * X=CURRENT DATA ADDRESS*
  1460. 06250 * RETURN CHAR IN A    *
  1461. 06260 * ON END OF DATA, SET Z    *
  1462. 06270 * LEAVE PACKET TYPE IN A*
  1463. 06280 *************************
  1464. 06290 *
  1465. 06300 GETCHP    TSTB
  1466. 06310     BNE    GETC2
  1467. 06320     LBSR    RGET
  1468. 06330     BNE    GETC4
  1469. 06340 GETC2    DECB    
  1470. 06350     LDA    ,X+
  1471. 06360     RTS
  1472. 06370 GETC4    CLRB
  1473. 06380     RTS
  1474. 06390 *
  1475. 06400 *************************
  1476. 06410 * RECEIVE DATA         *
  1477. 06420 * COPY DATA TO FILE 'TIL*
  1478. 06430 * NON-DATA PACKET.    *
  1479. 06440 *************************
  1480. 06450 *
  1481. 06460 KGET    CLR    QCR,PCR    (NO CR PENDING)
  1482. 06470     CLR    FBIN,PCR  (NO HIGH BIT)
  1483. 06480     CLRB
  1484. 06490 KGET1    LBSR    GETCHP
  1485. 06500     BEQ    KGETX
  1486. 06510     CMPA    QBIN,PCR
  1487. 06520     BNE    KGET4
  1488. 06530     INC    FBIN,PCR  (FLAG HIGH BIT)
  1489. 06540     LBSR    GETCHP
  1490. 06550     BEQ    KGETX
  1491. 06560 KGET4    CMPA    QCTL,PCR
  1492. 06570     BNE    KGET8
  1493. 06580     LBSR    GETCHP
  1494. 06590     BEQ    KGETX
  1495. 06600     CMPA    QBIN,PCR
  1496. 06610     BEQ    KGET8
  1497. 06620     CMPA    QCTL,PCR
  1498. 06630     BEQ    KGET8
  1499. 06640     EORA    #$40
  1500. 06650     TST    FBIN,PCR
  1501. 06660     BNE    KGET8
  1502. 06670     TST    FMODE,PCR (0=BINARY)
  1503. 06680     BEQ    KGET8
  1504. 06690     TST    QCR,PCR    (0=NO CR PENDING)
  1505. 06700     BEQ    KGET8
  1506. 06710     CMPA    #$0A
  1507. 06720     BNE    KGET8
  1508. 06730     CLR    QCR,PCR
  1509. 06740     BRA    KGET9    (SKIP LF AFTER CR)
  1510. 06750 KGET8    TST    FBIN,PCR
  1511. 06760     BEQ    KGET8A
  1512. 06770     ADDA    #$80
  1513. 06780 KGET8A    CLR    QCR,PCR
  1514. 06790     CMPA    #$0D
  1515. 06800     BNE    KGET8C
  1516. 06810     INC    QCR,PCR
  1517. 06820 KGET8C    LBSR    FPUT    (INTO FILE)
  1518. 06830 KGET9    CLR    FBIN,PCR
  1519. 06840     BRA    KGET1
  1520. 06850 KGETX    RTS
  1521. 06860 *
  1522. 06870 *************************
  1523. 06880 * SHOW/SET PARAMETERS    *
  1524. 06890 * ENTERED FROM ATEP    *
  1525. 06900 *************************
  1526. 06910 *
  1527. 06920 KSET    LBSR    CLEAR
  1528. 06930     LEAX    HEADER,PCR
  1529. 06940     LBSR    PRINT
  1530. 06950     LEAX    HDRSET,PCR
  1531. 06960     LBSR    PRINT
  1532. 06970     LEAX    FTYPE,PCR
  1533. 06980     LDA    #6    (# PARAMS)
  1534. 06990     PSHS    A
  1535. 07000 KREP1    LDA    #'
  1536. 07010     JSR    [CHROUT]
  1537. 07020     JSR    [CHROUT]
  1538. 07030     JSR    [CHROUT]
  1539. 07040     LDA    ,X+
  1540. 07050     LBSR    HEXOUT
  1541. 07060     DEC    ,S
  1542. 07070     BNE    KREP1
  1543. 07080     PULS    A
  1544. 07090     LDA    #$0A
  1545. 07100     JSR    [CHROUT]
  1546. 07110 * NEW PARAMETERS
  1547. 07120     LDB    #6    (# PARAMS)
  1548. 07130     PSHS    B
  1549. 07140     LEAX    FTYPE,PCR
  1550. 07150 KNEW1    LDA    #'
  1551. 07160     JSR    [CHROUT]
  1552. 07170     JSR    [CHROUT]
  1553. 07180     JSR    [CHROUT]
  1554. 07190 KNEW2    JSR    [KEYIN]
  1555. 07200     BEQ    KNEW2
  1556. 07210     LDB    ,S
  1557. 07220     CMPB    #6    (SEE IF FIRST)
  1558. 07230     BNE    KNEW2A
  1559. 07240     CMPA    #$0D    (EXIT ON CR IF SO)
  1560. 07250     BEQ    KNEW5
  1561. 07260 KNEW2A    CMPA    #'     (LEAVE ASIS)
  1562. 07270     BEQ    KNEW3
  1563. 07280     STA    ,X+
  1564. 07290     BRA    KNEW4
  1565. 07300 KNEW3    LDA    ,X+    (GET OLD)
  1566. 07310 KNEW4    LBSR    HEXOUT
  1567. 07320     DEC    ,S
  1568. 07330     BNE    KNEW1
  1569. 07340 KNEW5    PULS    B
  1570. 07350     LDA    #$0A
  1571. 07360     JSR    [CHROUT]
  1572. 07370     RTS
  1573. 07380 *
  1574. 07390 *************************
  1575. 07400 * SEND FILE - MAIN ENTRY*
  1576. 07410 *************************
  1577. 07420 *
  1578. 07430 KSEND    LBSR    CLEAR    (CLEAR SCREEN)
  1579. 07440     LEAX    HEADER,PCR
  1580. 07450     LBSR    PRINT
  1581. 07460     LEAX    HDRSND,PCR
  1582. 07470     LBSR    PRINT
  1583. 07480     JSR    [INNAME]
  1584. 07490     TST    FNAME    (NOTE NOT PCR)
  1585. 07500     BNE    KSEND2
  1586. 07510     RTS
  1587. 07520 KSEND2    LDD    RTYPE    (TYPE/MODE)
  1588. 07530     STD    FTYPE,PCR
  1589. 07540     LDD    #0
  1590. 07550     STD    NPACK,PCR
  1591. 07560     LDD    #$0300
  1592. 07570     LBSR    AT
  1593. 07580     LEAX    HDRPAK,PCR
  1594. 07590     LBSR    PRINT
  1595. 07600 *** SEND INIT PACKET ***
  1596. 07610     LDA    #'S
  1597. 07620     LEAX    INPAK,PCR
  1598. 07630     STA    2,X
  1599. 07640     LDA    MAXTRY,PCR
  1600. 07650     STA    NTRY,PCR
  1601. 07660 SISND    DEC    NTRY,PCR
  1602. 07670     LBMI    SFAIL
  1603. 07680     LEAX    INPAK,PCR
  1604. 07690     LBSR    SNDPAK
  1605. 07700     LBSR    GETPAK
  1606. 07710     BNE    SISND
  1607. 07720     LDA    2+RBUFF,PCR
  1608. 07730     CMPA    #'Y
  1609. 07740     BNE    SISND
  1610. 07750     LBSR    REMINI
  1611. 07760 *** SEND FILE HEADER PACKET ***
  1612. 07770     LDY    #FNAME
  1613. 07780     LEAX    FBN,PCR
  1614. 07790     CLRB
  1615. 07800 FNCOPY    LDA    B,Y
  1616. 07810     BEQ    FNGOT
  1617. 07820     STA    B,X
  1618. 07830     INCB
  1619. 07840     BRA    FNCOPY
  1620. 07850 FNGOT    ADDB    #35    (TOCHAR)
  1621. 07860     LEAX    FBUFF,PCR
  1622. 07870     STB    ,X
  1623. 07880     LBSR    NEWPAK
  1624. 07890 FNSND    DEC    NTRY,PCR
  1625. 07900     LBMI    SFAIL
  1626. 07910     LEAX    FBUFF,PCR
  1627. 07920     LBSR    SNDPAK
  1628. 07930     LBSR    GETPAK
  1629. 07940     BNE    FNSND
  1630. 07950     LDA    2+RBUFF,PCR
  1631. 07960     CMPA    #'Y
  1632. 07970     BNE    FNSND
  1633. 07980 *** SEND DATA PACKETS ***
  1634. 07990 SHDR    JSR    [QEOF]
  1635. 08000     BNE    SCLOSE
  1636. 08010     LBSR    NEWPAK
  1637. 08020     LEAX    SBUFF,PCR
  1638. 08030     ANDB    #$3F        (MOD 64)
  1639. 08040     STB    SNUM,PCR    (FOR ACK)
  1640. 08050     ADDB    #32        (TOCHAR)
  1641. 08060     STB    1,X
  1642. 08070     LDB    #'D        (DATA)
  1643. 08080     STB    2,X
  1644. 08090     LDA    #35        (SIZE)
  1645. 08100     STA    ,X
  1646. 08110 SBUILD    JSR    [QEOF]        (SEE IF EOF)
  1647. 08120     BNE    SSEND
  1648. 08130     LBSR    FGET
  1649. 08140     LEAX    SBUFF,PCR
  1650. 08150     LBSR    KRMPUT        (INTO PACKET)
  1651. 08160     BEQ    SBUILD        (FILL PACKET)
  1652. 08170 SSEND    DEC    NTRY,PCR
  1653. 08180     LBMI    SFAIL
  1654. 08190     LEAX    SBUFF,PCR
  1655. 08200     LBSR    SNDPAK
  1656. 08210     LBSR    GETPAK
  1657. 08220     BNE    SSEND
  1658. 08230     LEAX    RBUFF,PCR    (CHECK ACK)
  1659. 08240     LDD    1,X
  1660. 08250     SUBA    #32        (PACK#)
  1661. 08260     CMPB    #'Y
  1662. 08270     BEQ    SACK
  1663. 08280     CMPB    #'N
  1664. 08290     LBNE    SFAIL
  1665. 08300     DECA            (NAK NEXT?)
  1666. 08310     ANDA    #$3F
  1667. 08320 SACK    CMPA    SNUM,PCR
  1668. 08330     BNE    SSEND        (FAILURE)
  1669. 08340     BRA    SHDR
  1670. 08350 SCLOSE    JSR    [FCLOSE]
  1671. 08360 *** SEND END OF FILE PACKET ***
  1672. 08370     LBSR    NEWPAK
  1673. 08380 SNDEOF    DEC    NTRY,PCR
  1674. 08390     LBMI    SFAIL
  1675. 08400     LDA    #'Z    (EOF)
  1676. 08410     LBSR    SEND1
  1677. 08420     LBSR    GETPAK
  1678. 08430     BNE    SNDEOF
  1679. 08440 *** SEND END OF TRANSMISSION PACKET ***
  1680. 08450     LBSR    NEWPAK
  1681. 08460 SNDEOT    DEC    NTRY,PCR
  1682. 08470     LBMI    SFAIL
  1683. 08480     LDA    #'B    (EOT)
  1684. 08490     LBSR    SEND1
  1685. 08500     LBSR    GETPAK
  1686. 08510     BNE    SNDEOT
  1687. 08520 SOK    LEAX    SFINI,PCR
  1688. 08530     LBSR    PRINT
  1689. 08540     RTS
  1690. 08550 SFAIL    JSR    [FCLOSE]
  1691. 08560     LDA    #'B
  1692. 08570     LBSR    SEND1
  1693. 08580     LEAX    SERR,PCR
  1694. 08590     LBSR    PRINT
  1695. 08600     RTS
  1696. 08610 *
  1697. 08620 *************************
  1698. 08630 * MAIN RECEIVE ROUTINE  *
  1699. 08640 *************************
  1700. 08650 *
  1701. 08660 KRCV    LBSR    CLEAR
  1702. 08670     LEAX    HEADER,PCR
  1703. 08680     LBSR    PRINT
  1704. 08690     LEAX    HDRREC,PCR
  1705. 08700     LBSR    PRINT
  1706. 08710     LDD    #0
  1707. 08720     STD    NPACK,PCR
  1708. 08730     LDD    FTYPE,PCR
  1709. 08740     STD    RTYPE
  1710. 08750     JSR    [OTNAME]
  1711. 08760     TST    FNAME    (NOTE NOT PCR)
  1712. 08770     BNE    KRCV2
  1713. 08780     RTS        (NO NAME, EXIT)
  1714. 08790 KRCV2    LDD    #$0300
  1715. 08800     LBSR    AT
  1716. 08810     LEAX    HDRPAK,PCR
  1717. 08820     LBSR    PRINT
  1718. 08830     CLR    NEEDAK,PCR
  1719. 08840     LBSR    RGET    (INIT)
  1720. 08850     CMPA    #'S
  1721. 08860     BNE    KRFAIL
  1722. 08870     LBSR    RGET
  1723. 08880     CMPA    #'F
  1724. 08890     BNE    KRFAIL
  1725. 08900     LBSR    KGET    (RECEIVE DATA)
  1726. 08910     CMPA    #'Z    (EOF?)
  1727. 08920     BNE    KRFAIL
  1728. 08930     LBSR    RGET
  1729. 08940     CMPA    #'B    (EOT)
  1730. 08950     BNE    KRFAIL
  1731. 08960     LDA    #'Y
  1732. 08970     LBSR    SEND1
  1733. 08980     JSR    [FCLOSE]
  1734. 08990     LBRA    SOK
  1735. 09000 KRFAIL    LBRA    SFAIL
  1736. 09010 *
  1737. 09020 HDRSET    FDB    $0A0A
  1738. 09030     FCC    'ALL PARAMETERS SHOWN IN HEX'
  1739. 09040     FCB    $0A
  1740. 09050     FCC    'ENTER NEW VALUES BY KEY CODE'
  1741. 09060     FCB    $0A
  1742. 09070     FCC    'BLANK=NO CHANGE, BREAK=FF'
  1743. 09080     FDB    $0A0A
  1744. 09090     FCC    '  TYPE MODE  EOL NTRY  SOH DBUG'
  1745. 09100     FDB    $0A00
  1746. 09110 HDRSND    FCB    $0A
  1747. 09120     FCC    'SEND FILE'
  1748. 09130     FDB    $0A00
  1749. 09140 HDRREC    FCB    $0A
  1750. 09150     FCC    'RECEIVE FILE'
  1751. 09160     FDB    $0A00
  1752. 09170 HDRPAK    FCC    'PACKET #0000 (HEX)'
  1753. 09180     FDB    $0A00
  1754. 09190 SFINI    FDB    $0A07
  1755. 09200     FCC    'TRANSFER COMPLETE'
  1756. 09210     FDB    $0707
  1757. 09220     FDB    $0A00
  1758. 09230 SERR    FDB    $0A07
  1759. 09240     FCC    'TRANSFER FAILED'
  1760. 09250     FDB    $0707
  1761. 09260     FDB    $0A00
  1762. 09270 *
  1763. 09280 ZZZBUF    RMB    0    (TOP EXCEPT BUFFER)
  1764. 09290 SBUFF    RMB    98    (SEND BUFFER)
  1765. 09300 RBUFF    RMB    98    (RECEIVE BUFFER)
  1766. 09310 ZZZTOP    RMB    0
  1767. 09320     END    $2000    (ATEP ENTRY)
  1768. <<< ccterm.asm >>>
  1769. 00010 * KERMIT-COCO: COLOR COMPUTER KERMIT
  1770. 00020 * VERSION 1.1 : 03/85
  1771. 00030 * COPYRIGHT (C) 1985 BY WES HUBERT
  1772. 00040 * 3020 STEVEN DRIVE, LAWRENCE KS 66044
  1773. 00050 *
  1774. 00060 * THIS PROGRAM IS BOTH A STAND-ALONE
  1775. 00070 * TERMINAL PROGRAM AND THE BASE FOR
  1776. 00080 * A COLOR COMPUTER IMPLEMENTATION OF
  1777. 00090 * THE KERMIT FILE TRANSFER PROTOCOL.
  1778. 00100 *
  1779. 00110 * PERMISSION IS GRANTED FOR NON-PROFIT USE AND
  1780. 00120 * DISTRIBUTION AS PART OF THE COLOR COMPUTER
  1781. 00130 * KERMIT SYSTEM PROVIDED THAT THIS NOTICE IS
  1782. 00140 * NOT REMOVED.
  1783. 00150 *
  1784. 00160 * KERMIT IS A FILE TRANSFER PROTOCOL DEVELOPED
  1785. 00170 * BY FRANK DA CRUZ AND BILL CATCHINGS
  1786. 00180 * AT THE COLUMBIA UNIVERSITY CENTER FOR
  1787. 00190 * COMPUTING ACTIVITIES.
  1788. 00200 *
  1789. 00210 * THIS PORTION OF KERMIT-C0C0 PROVIDES
  1790. 00220 * TERMINAL FACILITIES INCLUDING EVEN/NO
  1791. 00230 * PARITY, LOCAL/REMOTE ECHO, AND SIMPLE
  1792. 00240 * NO PROTOCOL FILE UPLOAD/DOWNLOAD.
  1793. 00250 * PARITY IS ALWAYS IGNORED ON INPUT.
  1794. 00260 * THE PARITY BIT TIME IS USED FOR SCREEN
  1795. 00270 * SCROLLING WHEN NECESSARY.
  1796. 00280 *
  1797. 00290 * CHROUT CODE ADAPTED FROM CC TERM
  1798. 00300 * BY RICHARD CAMPBELL.
  1799. 00310 * (COLOR COMPUTER MAGAZINE, MARCH 1984)
  1800. 00320 *
  1801. 00330 * DISK OPEN/CLOSE CODE ADAPTED FROM TAPE TO
  1802. 00340 * DISK FILE TRANSFER BY ROGER SCHRAG.
  1803. 00350 * (RAINBOW MAGAZINE, JANUARY 1984)
  1804. 00360 *
  1805. 00370 * THE CODE FOR KERMIT PROTOCOL TRANSFERS
  1806. 00380 * IS ASSEMBLED AND LOADED SEPARATELY
  1807. 00390 * AFTER ASSEMBLY AND LOADING OF THIS
  1808. 00400 * ROUTINE.  SEE THE PROTOCOL CODE FOR
  1809. 00410 * MORE INFORMATION.
  1810. 00420 *
  1811. 00430 * THIS PORTION OF THE CODE RESIDES IN
  1812. 00440 * (HEX) 2000-27FF, THE PROTOCOL CODE
  1813. 00450 * FROM 2800-2FFF.  MEMORY BELOW 2000
  1814. 00460 * IS AVAILABLE FOR BASIC PROGRAMS, AND
  1815. 00470 * MEMORY ABOVE 2FFF IS USED FOR THE
  1816. 00480 * JOURNALIZATION / RAW ASCII TRANSFER
  1817. 00490 * BUFFER.
  1818. 00500 *
  1819. 00510 * NOTE THAT ALTHOUGH EACH PART IS
  1820. 00520 * WRITTEN IN POSITION INDEPENDENT FORM
  1821. 00530 * THE COMBINATION IS NOT POSITION INDEPENDENT
  1822. 00540 * BECAUSE OF FIXED ADDRESSES USED FOR
  1823. 00550 * COMMUNICATION BETWEEN THE PROGRAMS.  TO
  1824. 00560 * RELOCATE THE PROGRAM, THESE ADDRESSES
  1825. 00570 * MUST BE MODIFIED.
  1826. 00580 *
  1827. 00590     ORG    $2000
  1828. 00600 TERM    BRA    START
  1829. 00610 *
  1830. 00620 *************************
  1831. 00630 * ENTRIES FOR PROTOCOL    *
  1832. 00640 *************************
  1833. 00650 *
  1834. 00660     FDB    RS232I
  1835. 00670     FDB    RS232O
  1836. 00680     FDB    KEYIN
  1837. 00690     FDB    OTCHAR
  1838. 00700     FDB    INNAME
  1839. 00710     FDB    OTNAME
  1840. 00720     FDB    FCLOSE
  1841. 00730     FDB    WAIT
  1842. 00740     FDB    QEOF
  1843. 00750 FILNAM    FCC    'KERMIT-COCO '
  1844. 00760     FCB    0    (END OF STRING)
  1845. 00770     FCC    'COPYRIGHT (C) 1985'
  1846. 00780 *
  1847. 00790 *******************************************
  1848. 00800 *
  1849. 00810 *************************
  1850. 00820 * STANDARD COCO DEFS    *
  1851. 00830 *************************
  1852. 00840 *
  1853. 00850 SYSMEM    EQU    $74    HIGH MEMORY ADDRESS
  1854. 00860 SCRPTR    EQU    $88    SCREEN CURSOR PTR
  1855. 00870 SCREEN    EQU    $400    SCREEN MEMORY
  1856. 00880 FNAME    EQU    $94C    FILE NAME
  1857. 00890 FTYPE    EQU    $957    FILE TYPE
  1858. 00900 TOP    EQU    $3000    END OF KERMIT
  1859. 00910 POLCAT    EQU    $A000    KEYBOARD POLL ROUTNE
  1860. 00920 PUTCHR    EQU    $A002    CHARACTER OUTPUT
  1861. 00930 OUTPIA    EQU    $FF20    MODEM PIA LOC
  1862. 00940 INPIA    EQU    $FF22    IN MODEM PIA
  1863. 00950 *
  1864. 00960 *************************
  1865. 00970 * DEFAULT CONFIGURATION    *
  1866. 00980 *************************
  1867. 00990 *
  1868. 01000 CAN    FCB    $18    (XMIT SHFT<- AS CAN)
  1869. 01010 DEL    FCB    $08    (XMIT <- AS BKSP)
  1870. 01020 LECHO    FCB    0    (-1=HALF/0=FULL)
  1871. 01030 PARITY    FCB    -1    (-1=EVEN/0=NONE)
  1872. 01040 AUTOLF    FCB    0    (-1=YES/0=NO)
  1873. 01050 CPYMIN    FDB    TOP    (BUFFER ORIGIN)
  1874. 01060 CPYMAX    FDB    $7FFF    (32K SYSTEM)
  1875. 01070 CPYPTR    FDB    TOP    (BUFFER POINTER)
  1876. 01080 COPY    FCB    0    (-1=BUFFER/0=DON'T)
  1877. 01090 SPEED    FDB    419    (419=300 BAUD)
  1878. 01100 DC2    FCB    $12    (TURN ON BUFFER)
  1879. 01110 DC4    FCB    $14    (TURN OFF BUFFER)
  1880. 01120 CURCHR    FCB    $60    (PLACE FOR CHAR
  1881. 01130 *             UNDER CURSOR)
  1882. 01140 *
  1883. 01150 *************************
  1884. 01160 * EXECUTION ENTRY    *
  1885. 01170 *************************
  1886. 01180 *
  1887. 01190 START    STS    ISTACK,PCR
  1888. 01200     LEAS    TOPSTK,PCR
  1889. 01210     LBSR    CLEAR    (CLEAR SCREEN)
  1890. 01220     LBSR    MENU    (PRINT MENU)
  1891. 01230     LEAX    TOP,PCR    (LOCATE BUFFER)
  1892. 01240     STX    CPYMIN,PCR
  1893. 01250     LDX    SYSMEM    (SIZE)
  1894. 01260     STX    CPYMAX,PCR (TOP OF BUFFER)
  1895. 01270 *
  1896. 01280 ******************************************
  1897. 01290 *  TOP OF MAIN LOOP             *
  1898. 01300 *  ALTERNATELY POLL RS232  INPUT AND     *
  1899. 01310 *  KEYBOARD.                 *
  1900. 01320 ******************************************
  1901. 01330 *
  1902. 01340 CHKMN    BSR    RSSYNC    (WAIT FOR CARRIER)
  1903. 01350 CHKRSI    LBSR    RS232I    (POLL RS232 PORT)
  1904. 01360     BEQ    CHKKBI
  1905. 01370     LBSR    OTCHAR
  1906. 01380     BSR    RSSYNC
  1907. 01390 CHKKBI    LBSR    KEYIN    (POLL KEYBOARD)
  1908. 01400     BEQ    CHKRSI
  1909. 01410 *
  1910. 01420 CHKBRK    CMPA    #$FF    (BREAK)
  1911. 01430     BNE    CHKDEL
  1912. 01440     BSR    BREAK
  1913. 01450     BRA    CHKMN
  1914. 01460 *
  1915. 01470 CHKDEL    CMPA    #$FE    (LEFT ARROW)
  1916. 01480     BNE    CHKCAN
  1917. 01490     TST    LECHO,PCR
  1918. 01500     BEQ    CHKD2
  1919. 01510     LDA    #08    (PRINT BACKSPACE)
  1920. 01520     LBSR    OTCHAR
  1921. 01530 CHKD2    LDA    DEL,PCR    (SEND DELETE CHAR)
  1922. 01540     BRA    CHKOUT
  1923. 01550 *
  1924. 01560 CHKCAN    CMPA    #$FD    (SHIFT LEFT ARROW)
  1925. 01570     BNE    CHKDUP
  1926. 01580     LDA    CAN,PCR    (SEND LINE DELETE)
  1927. 01590     BRA    CHKOUT
  1928. 01600 *
  1929. 01610 CHKDUP    TST    LECHO,PCR
  1930. 01620     BEQ    CHKOUT
  1931. 01630     LBSR    OTCHAR (ECHO PRINT CHAR)
  1932. 01640 *
  1933. 01650 CHKOUT    BSR    RS232O    (TRANSMIT CHAR)
  1934. 01660     BRA    CHKMN
  1935. 01670 *
  1936. 01680 *************************
  1937. 01690 *  WAIT FOR STOP BIT    *
  1938. 01700 *************************
  1939. 01710 *
  1940. 01720 RSSYNC    LDA    INPIA    (READ MODEM)
  1941. 01730     LSRA
  1942. 01740     BCC    RSSYNC    (LOOP UNTIL SET)
  1943. 01750     RTS
  1944. 01760 *
  1945. 01770 ************************
  1946. 01780 *  SEND LINE BREAK     *
  1947. 01790 ************************
  1948. 01800 *
  1949. 01810 BREAK    CLR    OUTPIA    (SEND ZERO BITS)
  1950. 01820     LDX    #$6100    (ABOUT .25 SECONDS)
  1951. 01830 BRK2    LEAX    -1,X
  1952. 01840     BNE    BRK2
  1953. 01850     LDA    #2
  1954. 01860     STA    OUTPIA    (SEND STOP BIT)
  1955. 01870     RTS
  1956. 01880 *
  1957. 01890 ************************
  1958. 01900 * PAUSE ABOUT 1 BIT    *
  1959. 01910 ************************
  1960. 01920 *
  1961. 01930 WAIT    PSHS    D    (WAIT BIT TIME)
  1962. 01940     LDD    SPEED,PCR
  1963. 01950 WT2    SUBD    #1
  1964. 01960     BNE    WT2
  1965. 01970     PULS    D,PC
  1966. 01980 *
  1967. 01990 ************************
  1968. 02000 *  SET EVEN PARITY     *
  1969. 02010 ************************
  1970. 02020 *
  1971. 02030 EVEN    PSHS    X    (PRESERVE X)
  1972. 02040     LDX    #7    (SEVEN DATA BITS)
  1973. 02050     CLRB
  1974. 02060 EVEN2    RORA
  1975. 02070     BCC    EVEN4
  1976. 02080     INCB        (COUNT 1 BITS)
  1977. 02090 EVEN4    LEAX    -1,X
  1978. 02100     BNE    EVEN2
  1979. 02110     RORA
  1980. 02120     RORB        (PARITY BIT)
  1981. 02130     RORA
  1982. 02140     PULS    X    (RESTORE X)
  1983. 02150     RTS
  1984. 02160 *
  1985. 02170 ************************
  1986. 02180 *  READ FROM MODEM     *
  1987. 02190 ************************
  1988. 02200 *
  1989. 02210 RS232I    LDA    INPIA    (READ MODEM)
  1990. 02220     LSRA
  1991. 02230     BCC    RSI2  (LOOK FOR START BIT)
  1992. 02240     CLRA
  1993. 02250     RTS
  1994. 02260 RSI2    LDD    SPEED,PCR
  1995. 02270     LSRA        (HALF BIT)
  1996. 02280     RORB
  1997. 02290 RSI4    SUBD    #1    (PPAUSE)
  1998. 02300     BGT    RSI4
  1999. 02310     LDB    #7    (7 DATA BITS)
  2000. 02320     PSHS    A,B
  2001. 02330 RSI5    LDD    SPEED,PCR  (WAIT FOR NEXT)
  2002. 02340 RSI6    SUBD    #1
  2003. 02350     BNE    RSI6
  2004. 02360     NOP
  2005. 02370     LDB    INPIA    (GET DATA BIT)
  2006. 02380     LSRB
  2007. 02390     ROR    0,S
  2008. 02400     DEC    1,S
  2009. 02410     BNE    RSI5
  2010. 02420     ROR    0,S
  2011. 02430     PULS    A,B
  2012. 02440     ANDA    #$7F    (DROP PARITY)
  2013. 02450     CMPA    #$7F    (IGNORE RUBOUT)
  2014. 02460     BNE    RSI7
  2015. 02470     CLRA
  2016. 02480 RSI7    RTS
  2017. 02490 *
  2018. 02500 ************************
  2019. 02510 *  WRITE TO MODEM      *
  2020. 02520 ************************
  2021. 02530 *
  2022. 02540 RS232O    TST    PARITY,PCR
  2023. 02550     BEQ    RSO1
  2024. 02560     BSR    EVEN    (SET PARITY BIT)
  2025. 02570 RSO1    LDB    #8    (BIT COUNT)
  2026. 02580     PSHS    A,B    (BYTE TO SEND,COUNT)
  2027. 02590     CLR    OUTPIA    (START BIT)
  2028. 02600 RSO2    LDD    SPEED,PCR
  2029. 02610 RSO4    SUBD    #1
  2030. 02620     BNE    RSO4
  2031. 02630     LSR    0,S    (GET DATA BIT)
  2032. 02640     ROLB        (SHIFT FOR PIA)
  2033. 02650     ROLB        (BIT TWO)
  2034. 02660     STB    OUTPIA    (SEND IT)
  2035. 02670     DEC    1,S    (COUNT THE BIT)
  2036. 02680     BNE    RSO2
  2037. 02690     LEAS    2,S    (DROP WORK/COUNT)
  2038. 02700     LBSR    WAIT
  2039. 02710     LDB    #2
  2040. 02720     STB    OUTPIA    (STOP BIT)
  2041. 02730     LBSR    WAIT
  2042. 02740     LBSR    WAIT
  2043. 02750     RTS
  2044. 02760 *
  2045. 02770 ************************
  2046. 02780 *  READ FROM KEYBOARD  *
  2047. 02790 ************************
  2048. 02800 *
  2049. 02810 KEYIN    PSHS    B    (CHAR FROM SCREEN)
  2050. 02820     LDB    [SCRPTR]
  2051. 02830     BMI    KI0    (SKIP IF CURSOR)
  2052. 02840     STB    CURCHR,PCR (ELSE REMEMBER)
  2053. 02850 KI0    LDB    #$FF    (CURSOR CHAR)
  2054. 02860     STB    [SCRPTR]  (ONTO SCREEN)
  2055. 02870     PULS    B
  2056. 02880     JSR    [POLCAT]  (POLL KEYBOARD)
  2057. 02890     BNE    KI1
  2058. 02900     RTS        (NO INPUT)
  2059. 02910 *
  2060. 02920 KI1    CMPA    #$03    (BREAK)
  2061. 02930     BNE    KI1A
  2062. 02940     LDA    #$FF    (CODE BREAK)
  2063. 02950     RTS
  2064. 02960 KI1A    CMPA    #$08    (BACKSPACE)
  2065. 02970     BNE    KI1B
  2066. 02980     LDA    #$FE
  2067. 02990     RTS
  2068. 03000 KI1B    CMPA    #$15    (SHIFT LEFT ARROW)
  2069. 03010     BNE    KI2
  2070. 03020     LDA    #$FD
  2071. 03030     RTS
  2072. 03040 KI2    CMPA    #$0C    (CLEAR)
  2073. 03050     BNE    KI2A
  2074. 03060     PSHS    X,Y,B
  2075. 03070     LBSR    CLEAR
  2076. 03080     PULS    X,Y,B
  2077. 03090     CLRA
  2078. 03100     RTS
  2079. 03110 KI2A    CMPA    #$0A    (DOWN-ARROW)
  2080. 03120     BEQ    KI3
  2081. 03130     RTS        (NORMAL CHARACTER)
  2082. 03140 KI3    JSR    [POLCAT]  (GET CONTROL CHAR)
  2083. 03150     BEQ    KI3
  2084. 03160     CMPA    #$40    (@)
  2085. 03170     BLO    KI4
  2086. 03180     ANDA    #$1F    (MAKE CONTROL)
  2087. 03190     LDB    #1
  2088. 03200     RTS
  2089. 03210 KI4    CMPA    #'?    (MENU?)
  2090. 03220     BNE    KI5
  2091. 03230     LBSR    MENU
  2092. 03240     RTS
  2093. 03250 KI5    CMPA    #'0    (0-9 LOCAL CONTROL
  2094. 03260     BLO    KI6
  2095. 03270     CMPA    #'>
  2096. 03280     BLE    OP0
  2097. 03290 KI6    PSHS    X,B    (TRANSLATE
  2098. 03300     LEAX    SPCTAB,PCR
  2099. 03310     LDB    ,X+
  2100. 03320 SPC2    CMPA    B,X
  2101. 03330     BEQ    SPC4
  2102. 03340     DECB
  2103. 03350     BPL    SPC2
  2104. 03360     PULS    X,B    (LEAVE ASIS)
  2105. 03370     RTS
  2106. 03380 SPC4    LEAX    OUTTAB,PCR
  2107. 03390     LDA    B,X    (CHANGE)
  2108. 03400     PULS    X,B
  2109. 03410     RTS
  2110. 03420 SPCTAB    FCB    5    (# SPECIAL-1)
  2111. 03430     FCC    /'(!)-#/
  2112. 03440 OUTTAB    FDB    $607B
  2113. 03450     FDB    $7C7D
  2114. 03460     FDB    $7E7F
  2115. 03470 *
  2116. 03480 ***********************
  2117. 03490 *  PROCESS OPTIONS    *
  2118. 03500 ***********************
  2119. 03510 *
  2120. 03520 OP0    CMPA    #$30    0=EXIT
  2121. 03530     BNE    OP1
  2122. 03540     PULS    X    (DROP RETURN
  2123. 03550     LDS    ISTACK,PCR
  2124. 03560     RTS
  2125. 03570 OP1    CMPA    #$31    1=LOCAL ECHO
  2126. 03580     BNE    OP2
  2127. 03590     COM    LECHO,PCR
  2128. 03600     CLRA
  2129. 03610     RTS
  2130. 03620 OP2    CMPA    #$32    2=PARITY
  2131. 03630     BNE    OP3
  2132. 03640     COM    PARITY,PCR
  2133. 03650     CLRA
  2134. 03660     RTS
  2135. 03670 OP3    CMPA    #$33    3=AUTO L.F.
  2136. 03680     BNE    OP4
  2137. 03690     COM    AUTOLF,PCR
  2138. 03700     CLRA
  2139. 03710     RTS
  2140. 03720 OP4    CMPA    #$34    4=BUFFER ON/OFF
  2141. 03730     BNE    OP5
  2142. 03740     COM    COPY,PCR
  2143. 03750     CLRA
  2144. 03760     RTS
  2145. 03770 OP5    CMPA    #$35    5=WRITE FILE
  2146. 03780     BNE    OP6
  2147. 03790     LBSR    WRITEF
  2148. 03800     CLRA
  2149. 03810     RTS
  2150. 03820 OP6    CMPA    #$36    6=READ FILE
  2151. 03830     BNE    OP7
  2152. 03840     LBSR    READF
  2153. 03850     CLRA
  2154. 03860     RTS
  2155. 03870 OP7    CMPA    #$37    7=UPLOAD
  2156. 03880     BNE    OP8
  2157. 03890     LBSR    UPLOAD
  2158. 03900     CLRA
  2159. 03910     RTS
  2160. 03920 OP8    CMPA    #$38    8=RESET POINTER
  2161. 03930     BNE    OP9
  2162. 03940     LDD    CPYMIN,PCR
  2163. 03950     STD    CPYPTR,PCR
  2164. 03960     CLRA
  2165. 03970     RTS
  2166. 03980 OP9    CMPA    #$39    9=SET DELETE CHARS
  2167. 03990     BNE    OPR
  2168. 04000 OP91    LBSR    KEYIN
  2169. 04010     BEQ    OP91
  2170. 04020     STA    DEL,PCR
  2171. 04030 OP9A    LBSR    KEYIN
  2172. 04040     BEQ    OP9A
  2173. 04050     STA    CAN,PCR
  2174. 04060     CLRA
  2175. 04070     RTS
  2176. 04080 OPR    CMPA    #'<    <=KERMIT RECEIVE
  2177. 04090     BNE    OPS
  2178. 04100     JSR    KERMR
  2179. 04110     RTS
  2180. 04120 OPS    CMPA    #'>    >=KERMIT SEND
  2181. 04130     BNE    OPT
  2182. 04140     JSR    KERMS
  2183. 04150     RTS
  2184. 04160 OPT    CMPA    #'=    ==KERMIT SETUP
  2185. 04170     BNE    OPX
  2186. 04180     JSR    KERMT
  2187. 04190     RTS
  2188. 04200 OPX    RTS    ** NOT SPECIAL
  2189. 04210 *
  2190. 04220 *************************
  2191. 04230 *  PRINT MENU        *
  2192. 04240 *************************
  2193. 04250 *
  2194. 04260 MENU    PSHS    X,Y,D
  2195. 04270     LBSR    CLEAR
  2196. 04280     LEAX    MCHARS,PCR  (SHOW CURRENT STATUS)
  2197. 04290     LDA    LECHO,PCR
  2198. 04300     INCA
  2199. 04310     LDA    A,X
  2200. 04320     STA    MDUP,PCR
  2201. 04330     LEAX    2,X
  2202. 04340     LDA    PARITY,PCR
  2203. 04350     INCA
  2204. 04360     LDA    A,X
  2205. 04370     STA    MPAR,PCR
  2206. 04380     LEAX    2,X
  2207. 04390     LDA    AUTOLF,PCR
  2208. 04400     INCA
  2209. 04410     LDA    A,X
  2210. 04420     STA    MLF,PCR
  2211. 04430     LEAX    2,X
  2212. 04440     LDA    COPY,PCR
  2213. 04450     INCA
  2214. 04460     LDA    A,X
  2215. 04470     STA    MJRNL,PCR
  2216. 04480     LDA    DEL,PCR
  2217. 04490     LBSR    TOHEX
  2218. 04500     STD    MDEL,PCR
  2219. 04510     LDA    CAN,PCR
  2220. 04520     LBSR    TOHEX
  2221. 04530     STD    MCAN,PCR
  2222. 04540     LEAX    MTEXT,PCR
  2223. 04550 MEN2    LDD    ,X++
  2224. 04560     ADDD    #SCREEN
  2225. 04570     STD    <SCRPTR
  2226. 04580 MEN4    LDA    ,X+
  2227. 04590     BEQ    MEN2
  2228. 04600     BMI    MENX
  2229. 04610     LBSR    CHROUT
  2230. 04620     BRA    MEN4
  2231. 04630 MENX    PULS    X,Y,D
  2232. 04640     CLRA
  2233. 04650     RTS
  2234. 04660 MCHARS    FCC    'YNENYNYN'
  2235. 04670 MTEXT    FDB    8
  2236. 04680     FCC    'KERMIT-COCO 1.1'
  2237. 04690     FCB    0
  2238. 04700     FDB    34
  2239. 04710     FCC    '(PREFIX CONTROL OR COMMANDS'
  2240. 04720     FCB    0
  2241. 04730     FDB    66
  2242. 04740     FCC    ' WITH DOWN-ARROW)'
  2243. 04750     FCB    0
  2244. 04760     FDB    98
  2245. 04770     FCC    '0 EXIT,  ? PRINT MENU'
  2246. 04780     FCB    0
  2247. 04790     FDB    130
  2248. 04800     FCC    '1 LOCAL ECHO ('
  2249. 04810 MDUP    FCC    '?)'
  2250. 04820     FCB    0
  2251. 04830     FDB    162
  2252. 04840     FCC    '2 PARITY     ('
  2253. 04850 MPAR    FCC    '?)'
  2254. 04860     FCB    0
  2255. 04870     FDB    194
  2256. 04880     FCC    '3 AUTO LF    ('
  2257. 04890 MLF    FCC    '?)'
  2258. 04900     FCB    0
  2259. 04910     FDB    226
  2260. 04920     FCC    '4 JOURNALIZE ('
  2261. 04930 MJRNL    FCC    '?)'
  2262. 04940     FCB    0
  2263. 04950     FDB    258
  2264. 04960     FCC    '5 WRITE BUFFER TO FILE'
  2265. 04970     FCB    0
  2266. 04980     FDB    290
  2267. 04990     FCC    '6 READ FILE INTO BUFFER'
  2268. 05000     FCB    0
  2269. 05010     FDB    322
  2270. 05020     FCC    '7 UPLOAD BUFFER'
  2271. 05030     FCB    0
  2272. 05040     FDB    354
  2273. 05050     FCC    '8 ERASE BUFFER'
  2274. 05060     FCB    0
  2275. 05070     FDB    386
  2276. 05080     FCC    '9 DEF CHAR/LINE DELETE ('
  2277. 05090 MDEL    FCC    'XX,'
  2278. 05100 MCAN    FCC    'XX)'
  2279. 05110     FCB    0
  2280. 05120     FDB    416
  2281. 05130     FCC    'KERMIT: = SET, < RECEIVE, > SEND'
  2282. 05140     FCB    0
  2283. 05150     FDB    450
  2284. 05160     FCC    '()!-# BRACES BAR TILDE DEL'
  2285. 05170     FDB    $0DFF
  2286. 05180 *
  2287. 05190 *************************
  2288. 05200 *  SOUND BELL        *
  2289. 05210 *************************
  2290. 05220 *
  2291. 05230 BELL    LDA    $FF01    (CONFIGURE FOR
  2292. 05240     ANDA    #$F7
  2293. 05250     STA    $FF01
  2294. 05260     LDA    $FF03     SIX BIT
  2295. 05270     ANDA    #$F7
  2296. 05280     STA    $FF03
  2297. 05290     LDA    $FF23
  2298. 05300     ORA    #$08
  2299. 05310     STA    $FF23     SOUND)
  2300. 05320     LDD    #$06F2    (INITIAL TONE)
  2301. 05330 BELL4    STB    OUTPIA    (OUTPUT SOUND)
  2302. 05340     SUBD    #$08    (CHANGE TONE)
  2303. 05350     CMPD    #$0002
  2304. 05360     BNE    BELL4
  2305. 05370     LDA    #$07    (RESTORE "BELL")
  2306. 05380     RTS
  2307. 05390 *
  2308. 05400 *************************
  2309. 05410 *  WRITE TO SCREEN    *
  2310. 05420 *************************
  2311. 05430 *
  2312. 05440 OTCHAR    CMPA    DC2,PCR    (DOWNLOAD FLAG)
  2313. 05450     BNE    OT1
  2314. 05460     LDA    #$FF    (SET FLAG)
  2315. 05470     STA    COPY,PCR
  2316. 05480 OTCX    LBSR    WAIT
  2317. 05490     RTS
  2318. 05500 OT1    CMPA    DC4,PCR    (END DOWNLOAD)
  2319. 05510     BNE    OT2
  2320. 05520     CLR    COPY,PCR
  2321. 05530     BRA    OTCX
  2322. 05540 OT2    CMPA    #$07    (BELL)
  2323. 05550     BNE    OT2A
  2324. 05560     BSR    BELL
  2325. 05570     BRA    OTX
  2326. 05580 OT2A    CMPA    #$0C    (CLEAR)
  2327. 05590     BNE    OT3
  2328. 05600     LBSR    CLEAR
  2329. 05610     LDA    #$0C
  2330. 05620     BRA    OTX
  2331. 05630 OT3    CMPA    #$08    (BACKSPACE)
  2332. 05640     BNE    OT4
  2333. 05650     LDB    #$60
  2334. 05660     STB    [SCRPTR]
  2335. 05670 OT4    CMPA    #$0D    (RETURN/ENTER)
  2336. 05680     BNE    OT5
  2337. 05690     TST    AUTOLF,PCR
  2338. 05700     BNE    OT6
  2339. 05710     LDB    CURCHR,PCR
  2340. 05720     STB    [SCRPTR]
  2341. 05730     LDB    #$60
  2342. 05740     STB    CURCHR,PCR
  2343. 05750     LDB    SCRPTR+1
  2344. 05760     ANDB    #$E0
  2345. 05770     STB    SCRPTR+1
  2346. 05780     LBSR    WAIT
  2347. 05790     BRA    OTX
  2348. 05800 OT5    CMPA    #$0A    (LINE FEED)
  2349. 05810     BNE    OT6
  2350. 05820     LDB    CURCHR,PCR
  2351. 05830     STB    [SCRPTR]
  2352. 05840     LDB    #$60
  2353. 05850     STB    CURCHR,PCR
  2354. 05860     LDA    #$0D    (PRINT C.R)
  2355. 05870     LDB    SCRPTR+1
  2356. 05880     ORB    #$1F    (AT END OF LINE)
  2357. 05890     STB    SCRPTR+1
  2358. 05900     LBSR    CHROUT
  2359. 05910     LDA    #$0A    (RESTORE L.F.)
  2360. 05920     BRA    OTX
  2361. 05930 OT6    LBSR    CHROUT  (NORMAL CHAR)
  2362. 05940 OTX    TST    COPY,PCR
  2363. 05950     BNE    OTCOPY
  2364. 05960     RTS
  2365. 05970 *
  2366. 05980 ************************
  2367. 05990 *  "WRITE" TO BUFFER   *
  2368. 06000 ************************
  2369. 06010 *
  2370. 06020 OTCOPY    LDX    CPYPTR,PCR (BUFFER PTR)
  2371. 06030     CMPX    CPYMAX,PCR
  2372. 06040     BMI    CPY2
  2373. 06050     CLR    COPY,PCR (TURN OFF)
  2374. 06060     BSR    CPYERR
  2375. 06070     RTS
  2376. 06080 CPY2    STA    ,X+    (STORE CHARACTER)
  2377. 06090     STX    CPYPTR,PCR
  2378. 06100     RTS
  2379. 06110 CPYERR    PSHS    A
  2380. 06120     LEAX    CEM,PCR
  2381. 06130 CE2    LDA    ,X+
  2382. 06140     BEQ    CEX
  2383. 06150     LBSR    OTCHAR
  2384. 06160     BRA    CE2
  2385. 06170 CEX    LBSR    BREAK
  2386. 06180     PULS    A
  2387. 06190     RTS
  2388. 06200 CEM    FCB    $07
  2389. 06210     FCC    'buffer full'
  2390. 06220     FDB    $0A00
  2391. 06230 *
  2392. 06240 ************************
  2393. 06250 *  UPLOAD FROM BUFFER  *
  2394. 06260 ************************
  2395. 06270 *
  2396. 06280 UPLOAD    LDY    CPYMIN,PCR
  2397. 06290 UP2    CMPY    CPYPTR,PCR
  2398. 06300     BEQ    UP8
  2399. 06310     LDA    ,Y
  2400. 06320     LBSR    RS232O
  2401. 06330     LBSR    KEYIN    (ALLOW BREAK)
  2402. 06340     BEQ    UP4
  2403. 06350     CMPA    #$FF
  2404. 06360     BEQ    UP8
  2405. 06370 UP4    LDA    ,Y+
  2406. 06380     LBSR    OTCHAR
  2407. 06390     CMPA    #$0D
  2408. 06400     BNE    UP2
  2409. 06410     LDX    #$8000    (PAUSE AFTER LINE)
  2410. 06420 UP6    LEAX    -1,X
  2411. 06430     BNE    UP6
  2412. 06440     BRA    UP2
  2413. 06450 UP8    LDB    #$FF    (RESTORE CURSOR)
  2414. 06460     STB    [SCRPTR]
  2415. 06470     RTS
  2416. 06480 *
  2417. 06490 ***********************
  2418. 06500 *  CLEAR SCREEN       *
  2419. 06510 ***********************
  2420. 06520 *
  2421. 06530 CLEAR    LDD    #SCREEN
  2422. 06540     STD    SCRPTR
  2423. 06550     LDX    #SCREEN+$80
  2424. 06560     LDY    #SCREEN+$180
  2425. 06570     LDD    #$6000
  2426. 06580 CLR2    STA    B,X
  2427. 06590     STA    B,Y
  2428. 06600     INCB
  2429. 06610     BNE    CLR2
  2430. 06620     RTS
  2431. 06630 *
  2432. 06640 ************************
  2433. 06650 *  DISPLAY CHAR        *
  2434. 06660 ************************
  2435. 06670 *
  2436. 06680 CHROUT    PSHS    A,B,X
  2437. 06690     CLRB
  2438. 06700     LDX    <SCRPTR
  2439. 06710     CMPA    #8    (BACKSPACE)
  2440. 06720     BNE    CO1
  2441. 06730     CMPX    #SCREEN
  2442. 06740     BEQ    CO9    (DONE IF TOP)
  2443. 06750 *
  2444. 06760     LDA    #$60    (SPACE)
  2445. 06770     STA    ,-X
  2446. 06780     BRA    CO6
  2447. 06790 CO1    CMPA    #$0D    (ENTER)
  2448. 06800     BNE    CO3
  2449. 06810     LDX    <SCRPTR
  2450. 06820 *
  2451. 06830 CO2    LDA    #$60    (BLANK)
  2452. 06840     STA    ,X+
  2453. 06850     TFR    X,D
  2454. 06860     BITB    #$1F    (END OF LINE?)
  2455. 06870     BNE    CO2
  2456. 06880     BRA    CO6
  2457. 06890 CO3    CMPA    #$20    (CONTROL?)
  2458. 06900     BLO    CO9
  2459. 06910     TSTA
  2460. 06920     BMI    CO5    (GRAPHICS?)
  2461. 06930     CMPA    #$40
  2462. 06940     BLO    CO4
  2463. 06950     CMPA    #$60    (UPPER?)
  2464. 06960     BLO    CO5
  2465. 06970     ANDA    #$DF
  2466. 06980 CO4    EORA    #$40
  2467. 06990 *
  2468. 07000 CO5    STA    ,X+
  2469. 07010 CO6    STX    <SCRPTR
  2470. 07020     CLRB
  2471. 07030     CMPX    #$5FF    (END?)
  2472. 07040     BLS    CO9
  2473. 07050 *
  2474. 07060     LDX    #SCREEN    (SCROLL)
  2475. 07070 CO7    LDD    $20,X
  2476. 07080     LDU    $22,X
  2477. 07090     STD    ,X++
  2478. 07100     STU    ,X++
  2479. 07110     CMPX    #$5E0
  2480. 07120     BLO    CO7
  2481. 07130     STX    <SCRPTR
  2482. 07140 *
  2483. 07150     LDD    #$6060
  2484. 07160 CO8    STD    ,X++    (CLEAR LAST LINE)
  2485. 07170     CMPX    #SCREEN+512
  2486. 07180     BLO    CO8
  2487. 07190 *
  2488. 07200 CO9    CMPB    #$60
  2489. 07210     BEQ    CRS
  2490. 07220     LBSR    WAIT    (WAIT IF NO SCROLL)
  2491. 07230 CRS    PULS    A,B,X,PC
  2492. 07240 *
  2493. 07250 ************************
  2494. 07260 *  DETECT DISK EOF     *
  2495. 07270 ************************
  2496. 07280 *
  2497. 07290 QEOF    PSHS    X,Y,U
  2498. 07300     LDX    <$A6    BASIC POINTER
  2499. 07310     LDB    $18E
  2500. 07320     LDU    $18F    ERROR VECTOR
  2501. 07330     PSHS    U,X,B
  2502. 07340     LDB    #$7E    (A REAL KLUDGE)
  2503. 07350     LEAU    QEOF3,PCR
  2504. 07360     STB    $18E    (BUT--
  2505. 07370     STU    $18F     THAT'S LIFE)
  2506. 07380     STS    QEOF5,PCR
  2507. 07390     LEAX    QEOF4,PCR
  2508. 07400     STX    <$A6    (AND IT WORKS)
  2509. 07410     LDA    ,X
  2510. 07420     ANDCC    #$FE    (GET SOMETHING
  2511. 07430     JSR    $ADC6     BETTER LATER)
  2512. 07440 QEOF1    LDA    #1
  2513. 07450 QEOF2    PULS    U,X,B
  2514. 07460     STB    $18E
  2515. 07470     STU    $18F
  2516. 07480     STX    <$A6
  2517. 07490     PULS    U,X,Y
  2518. 07500     TSTA
  2519. 07510     RTS
  2520. 07520 QEOF3    LDS    QEOF5,PCR
  2521. 07530     CLRA
  2522. 07540     BRA    QEOF2
  2523. 07550 QEOF4    FDB    $58B3    (TOKENIZED
  2524. 07560     FDB    $31AE     X=1/EOF(1)
  2525. 07570     FDB    $FF8C
  2526. 07580     FDB    $2831
  2527. 07590     FDB    $2900
  2528. 07600 QEOF5    FDB    0
  2529. 07610 *
  2530. 07620 ************************
  2531. 07630 *  DISK OPEN/CLOSE     *
  2532. 07640 ************************
  2533. 07650 *
  2534. 07660 USEROM    PSHS    A
  2535. 07670     LDA    $C005    (ROM VERSION)
  2536. 07680     ANDA    #1    (1.0=0, 1.1=1)
  2537. 07690     LSLA
  2538. 07700     LEAU    A,U
  2539. 07710     PULS    A
  2540. 07720     JMP    [,U]
  2541. 07730 DFNAME    FDB    $C8A4    (1.0 LOC)
  2542. 07740     FDB    $C952    (1.1 LOC)
  2543. 07750 DOPEN    FDB    $C468    (ETC.)
  2544. 07760     FDB    $C48D
  2545. 07770 DCLOSE    FDB    $CA3B
  2546. 07780     FDB    $CAE9
  2547. 07790 *
  2548. 07800 INNAME    LBSR    GETNAM    (OPEN INPUT)
  2549. 07810     TST    FILNAM    (NOT PCR)
  2550. 07820     BEQ    NAME7
  2551. 07830     LDX    #FNAME
  2552. 07840     LDA    #$20
  2553. 07850 NAME1    STA    ,X+
  2554. 07860     CMPX    #FTYPE
  2555. 07870     BLO    NAME1
  2556. 07880     LDB    #$FF
  2557. 07890     LEAX    FILNAM,PCR
  2558. 07900 NAME3    INCB
  2559. 07910     LDA    B,X
  2560. 07920     BNE    NAME3
  2561. 07930     LEAU    NAME5,PCR
  2562. 07940     PSHS    U
  2563. 07950     CLR    ,-S
  2564. 07960     LDU    #DFNAME
  2565. 07970     JMP    USEROM
  2566. 07980 NAME5    LDA    #'I
  2567. 07990     LDB    #1
  2568. 08000     LDU    #DOPEN
  2569. 08010     JSR    USEROM
  2570. 08020 NAME7    RTS
  2571. 08030 *
  2572. 08040 OTNAME    LBSR    GETNAM    (OPEN OUTPUT)
  2573. 08050     TST    FILNAM    (NOT PCR)
  2574. 08060     BEQ    OTN7
  2575. 08070     LDX    #FNAME
  2576. 08080     LDA    #$20
  2577. 08090 OTN1    STA    ,X+
  2578. 08100     CMPX    #FTYPE
  2579. 08110     BLO    OTN1
  2580. 08120     LDB    #$FF
  2581. 08130     LEAX    FILNAM,PCR
  2582. 08140 OTN3    INCB
  2583. 08150     LDA    B,X
  2584. 08160     BNE    OTN3
  2585. 08170     LEAU    OTN5,PCR
  2586. 08180     PSHS    U
  2587. 08190     CLR    ,-S
  2588. 08200     LDU    #DFNAME
  2589. 08210     JMP    USEROM
  2590. 08220 OTN5    LDA    #'O
  2591. 08230     LDB    #1
  2592. 08240     LDU    #DOPEN
  2593. 08250     JSR    USEROM
  2594. 08260 OTN7    RTS
  2595. 08270 *
  2596. 08280 ************************
  2597. 08290 *  LOAD FROM FILE      *
  2598. 08300 ************************
  2599. 08310 *
  2600. 08320 READF    LBSR    INNAME
  2601. 08330     TST    FILNAM    (NOT PCR)
  2602. 08340     BEQ    READX2
  2603. 08350     LDA    #1
  2604. 08360     STA    $6F    (BUFFER #1)
  2605. 08370 READ2    LBSR    QEOF
  2606. 08380     BNE    READX
  2607. 08390     JSR    $A176    (GET 1 CHAR.)
  2608. 08400     LDX    CPYPTR,PCR
  2609. 08410     CMPX    CPYMAX,PCR
  2610. 08420     BPL    RERR
  2611. 08430     STA    ,X+    (PLACE IN BUFFER)
  2612. 08440     STX    CPYPTR,PCR
  2613. 08450     BRA    READ2
  2614. 08460 RERR    LBSR    CPYERR    (BUFFER FULL)
  2615. 08470     CLR    COPY,PCR
  2616. 08480 READX    LDU    #DCLOSE    (CLOSE)
  2617. 08490     LBSR    USEROM
  2618. 08500     CLR    $6F    (BACK TO SCREEN)
  2619. 08510 READX2    RTS
  2620. 08520 *
  2621. 08530 ************************
  2622. 08540 * WRITE BUFFER TO FILE *
  2623. 08550 ************************
  2624. 08560 *
  2625. 08570 WRITEF    LDD    #$00FF    (BASIC, ASCII)
  2626. 08580     STD    FTYPE
  2627. 08590     LBSR    OTNAME
  2628. 08600     TST    FNAME
  2629. 08610     BEQ    WRITX4
  2630. 08620     LDA    #1
  2631. 08630     STA    $6F    (BUFFER #1)
  2632. 08640     LDY    CPYMIN,PCR
  2633. 08650 WRITE2    CMPY    CPYPTR,PCR
  2634. 08660     BEQ    WRITEX
  2635. 08670     LDA    ,Y+    (CHAR FROM BUFFER)
  2636. 08680     JSR    [PUTCHR] (WRITE IT)
  2637. 08690     BRA    WRITE2
  2638. 08700 WRITEX    CMPA    #$0D    (END WITH C.R.)
  2639. 08710     BEQ    WRITX2
  2640. 08720     LDA    #$0D
  2641. 08730     JSR    [PUTCHR]
  2642. 08740 WRITX2    LDU    #DCLOSE
  2643. 08750     LBSR    USEROM
  2644. 08760     CLR    $6F
  2645. 08770 WRITX4    RTS
  2646. 08780 *
  2647. 08790 *************************
  2648. 08800 *  CLOSE FILE #01       *
  2649. 08810 *************************
  2650. 08820 *
  2651. 08830 FCLOSE    LDA    #1
  2652. 08840     STA    $6F
  2653. 08850     LDU    #DCLOSE
  2654. 08860     LBSR    USEROM
  2655. 08870     CLR    $6F
  2656. 08880     RTS
  2657. 08890 *
  2658. 08900 *************************
  2659. 08910 *  READ NAME OF FILE    *
  2660. 08920 *************************
  2661. 08930 *
  2662. 08940 GETNAM    LEAX    GETPMP,PCR
  2663. 08950 GET0    LDA    ,X+
  2664. 08960     BEQ    GET1
  2665. 08970     LBSR    CHROUT
  2666. 08980     BRA    GET0
  2667. 08990 GET1    LEAX    FILNAM,PCR
  2668. 09000     CLRB
  2669. 09010 GET2    LBSR    KEYIN
  2670. 09020     BEQ    GET2
  2671. 09030     CMPA    #$0D
  2672. 09040     BEQ    GETX
  2673. 09050     CMPA    #$FE    (BACKSPACE)
  2674. 09060     BNE    GET4
  2675. 09070     TSTB
  2676. 09080     BEQ    GET2
  2677. 09090     LDA    #$60
  2678. 09100     STA    [SCRPTR]
  2679. 09110     LDA    #$08
  2680. 09120     LBSR    CHROUT
  2681. 09130     DECB
  2682. 09140     BRA    GET2
  2683. 09150 GET4    CMPB    #12
  2684. 09160     BEQ    GET2
  2685. 09170     STA    B,X
  2686. 09180     LBSR    CHROUT
  2687. 09190     INCB
  2688. 09200     BRA    GET2
  2689. 09210 GETX    LBSR    CHROUT
  2690. 09220     CLR    B,X
  2691. 09230     RTS
  2692. 09240 GETPMP    FCC    'FILENAME.EXT? '
  2693. 09250     FCB    0
  2694. 09260 *
  2695. 09270 *************************
  2696. 09280 * CONVERT A TO HEX IN D *
  2697. 09290 *************************
  2698. 09300 *
  2699. 09310 TOHEX    PSHS    A
  2700. 09320     CLRB
  2701. 09330     LSLA
  2702. 09340     ROLB
  2703. 09350     LSLA
  2704. 09360     ROLB
  2705. 09370     LSLA
  2706. 09380     ROLB
  2707. 09390     LSLA
  2708. 09400     ROLB
  2709. 09410     PULS    A
  2710. 09420     ANDA    #$F
  2711. 09430     ADDD    #$3030
  2712. 09440     CMPA    #$39
  2713. 09450     BLE    THX2
  2714. 09460     ADDA    #7
  2715. 09470 THX2    CMPB    #$39
  2716. 09480     BLE    THX4
  2717. 09490     ADDB    #7
  2718. 09500 THX4    EXG    A,B
  2719. 09510     RTS
  2720. 09520 *
  2721. 09530 ISTACK    RMB    2
  2722. 09540 STACK    RMB    100
  2723. 09550 TOPSTK    FDB    0
  2724. 09560 ZZTOP    RMB    0
  2725. 09570 *
  2726. 09580     ORG    $2800    (KERMIT ORIGIN)
  2727. 09590 KERMR    BRA    KERMX    (RECEIVE STUB)
  2728. 09600 KERMS    BRA    KERMX    (SEND STUB)
  2729. 09610 KERMT    BRA    KERMX    (SETUP STUB)
  2730. 09620 KERMX    LEAX    KRMSTB,PCR
  2731. 09630 KERMX0    LDA    ,X+
  2732. 09640     BEQ    KERMX1
  2733. 09650     LBSR    CHROUT
  2734. 09660     BRA    KERMX0
  2735. 09670 KERMX1    RTS
  2736. 09680 KRMSTB    FCB    13
  2737. 09690     FCC    'KERMIT PROTOCOL NOT LOADED.'
  2738. 09700     FDB    $0D00
  2739. 09710 ZZZTOP    RMB    0
  2740. 09720     END    TERM
  2741.