home *** CD-ROM | disk | FTP | other *** search
/ Columbia Kermit / kermit.zip / flex1 / flxpt3.txt < prev    next >
Text File  |  2020-01-01  |  9KB  |  297 lines

  1.  
  2. inline equ * read filename into fcb
  3.  clr b
  4. inloop pshs b
  5.  jsr cinput get data
  6.  puls b
  7.  anda #$7f
  8.  cmpa #del
  9.  beq backc
  10.  cmpa #bs
  11.  beq backc
  12.  cmpa #ctrlx
  13.  beq dellin
  14.  cmpa #cr
  15.  beq endc fini
  16.  jsr couts echo char
  17.  sta 0,x save in buffer
  18.  inx
  19.  inc b
  20.  cmp b #$1e end of buffer?
  21.  beq endc yes force finish
  22.  bra inloop
  23.  
  24. dellin ldx #query
  25.  jsr pstr
  26.  bra inline start again
  27.  
  28. backc cmp b #0
  29.  beq inloop already at start of buffer
  30.  dex
  31.  decb back up 1 locn
  32.  lda #bs
  33.  jsr couts back up console
  34.  bra inloop and continue
  35.  
  36. endc clr a
  37.  sta 0,x
  38.  rts set terminator and exit
  39.  
  40. ******************************************
  41. * line int handler*****************
  42. ******************************************
  43. int equ * interrupt
  44.  lda line
  45.  bita #1
  46.  beq ret1 not rxd
  47.  lda line+1 rxd int
  48.  ldb count
  49.  cmpb #max
  50.  beq ret que is totally full !
  51.  ldx inp
  52.  sta 0,x+ save char in buffer que
  53.  cpx #end
  54.  bne int1
  55.  ldx #startq
  56. int1 stx inp
  57.  inc b
  58.  stb count
  59.  cmpb #xlev
  60.  bne ret
  61.  lda #xoff xoff level
  62.  cmpa lastf already sent?
  63.  beq ret yesd
  64.  sta lastf
  65.  sta fcs send an xoff
  66.  lda #%10110101 turn on line tx
  67.  sta line
  68. ret rti
  69.  
  70. ret1 bit a #$80
  71.  beq ret2 not line tx
  72.  tst fcs
  73.  beq txs nothing to send
  74.  lda lastf
  75.  sta line+1 send flow code
  76. txs lda #%10010101
  77.  sta line stop tx int
  78. ret2 rti
  79.  
  80.  
  81.  
  82. *DESPATCH ROUTINE HERE FOR RECEVE AND SEND
  83.  
  84. KERMIT EQU * RETURN FROM KERMIT DRIVERS
  85.  
  86. *any error handling and status report
  87.  ldx #noerr
  88.  cmpa #true
  89.  beq kdone kermit ended succesfully
  90.  jsr fmscls close files on flex
  91.  lda errcod get error code
  92.  lsl a
  93.  ldx #errtab look up error message
  94.  ldx a,x
  95.  
  96. kdone jsr pstr error message/complete message
  97.  jmp main
  98.  
  99. errtab equ * lookup error message
  100.  fdb err0
  101.  fdb err1
  102.  fdb err2
  103.  fdb err3
  104.  fdb err4
  105.  fdb err5
  106.  fdb err6
  107.  fdb err7
  108.  
  109. err0 fcc 'error 0'
  110.  fcb 4
  111. err1 fcc 'Cannot receive init'
  112.  fcb 4
  113. err2 fcc 'Cannot receive file header'
  114.  fcb 4
  115. err3 fcc 'Cannot receive data'
  116.  fcb 4
  117. err4 fcc 'Maximum retry exceeded'
  118.  fcb 4
  119. err5 fcc 'Bad checksum'
  120.  fcb 4
  121. err6 fcc 'Checksum incorrect, resending packet'
  122.  fcb $0d,$0a
  123.  fcb 4
  124. err7 fcc 'Program error'
  125.  fcb 4
  126. noerr fcc 'Transfer completed succesfully'
  127.  fcb 4
  128.  ttl       KL10 Error-free Reciprocol Micro-interface Transfer
  129.  STTL  Character and string definitions
  130.  
  131. prom equ *
  132. nul     EQU       $00             * <null>
  133. soh     EQU       $01             * <soh>
  134. bs      EQU       $08             * <bs>
  135. tab     EQU       $09             * <tab> (ctrl/I)
  136. lf      EQU       $0a             * <lf>
  137. ffd     EQU       $0c             * Form feed
  138. cr      EQU       $0d             * <cr>
  139. ctrlu   EQU       $15             * <ctrl/U>
  140. ctrlx   EQU       $18             *[0] <ctrl/X>
  141. esc     EQU       $1b             * <esc>
  142. sp      EQU       $20             * <space>
  143. del     EQU       $7f             * <del>
  144.  
  145.  STTL  Kermit defaults for operational parameters
  146.  
  147. *
  148. *       The following are the defaults which this Kermit uses for
  149. *       the protocol
  150. *
  151.  
  152. dquote  EQU       '#              * The quote character
  153. dpakln  EQU       $5f             * The packet length
  154. dpadch  EQU       nul             * The padding character
  155. dpadln  EQU       0               * The padding length
  156. dmaxtr  EQU       6             * The maximum number of tries
  157. debq    EQU       '&              * The eight-bit-quote character
  158. deol    EQU       cr              * The end-of-line character
  159. dtime equ 5 *timeout interval
  160.  
  161.  
  162.  STTL  Kermit data
  163.  
  164. *
  165. *       The following is data storage used by Kermit
  166. *
  167.  
  168. mxpack  EQU       dpakln          * Maximum packet size
  169. eof     EQU       $01             * This is the value for End-of-file
  170. buflen  EQU       $ff             * Buffer length for received data
  171. true    EQU       $01             * Symbol for true return code
  172. false   EQU       $00             * Symbol for false return code
  173. on      EQU       $01             * Symbol for value of 'on' keyword
  174. off     EQU       $00             * Symbol for value of 'off' keyword
  175. yes     EQU       $01             * Symbol for value of 'yes' keyword
  176. no      EQU       $00             * Symbol for value of 'no' keyword
  177. fbsbit  EQU       $01             * Value for SEVEN-BIT FILE-BYTE-SIZE
  178. fbebit  EQU       $00             * Value for EIGHT-BIT FILE-BYTE-SIZE
  179. errcri  EQU       $01             * Error code - cannot receive init
  180. errcrf  EQU       $02             * Error code - cannot receive file-header
  181. errcrd  EQU       $03             * Error code - cannot receive data
  182. errmrc  EQU       $04             * Error code - maximum retry count exceeded
  183. errbch  EQU       $05             * Error code - bad checksum
  184.  
  185.  org ram
  186. kerbf1 rmb 2
  187. fcb1 rmb 20
  188. fcb rmb 400 file spec
  189. fcb2 rmb 20 remote file spec
  190. pdbuf  RMB   mxpack+20      * Packet buffer JUST TO MAKE SURE ENOUGH ROOM
  191. pdlen  RMB 1                   * Common area to place data length
  192. ptype  RMB 1                   * Common area to place current packet type
  193. pnum   RMB 1                   * Common area to put packet number received
  194. rstat  RMB 1                   * Return status
  195. delay  RMB 1                   * Amount of delay before first send
  196. ebqmod RMB 1                   * Eight-bit-quoting mode
  197. datind RMB 1                   * Data index into packet buffer
  198. chebo  RMB 1                   * Switch to tell if 8th-bit was on
  199. kerchr RMB 1                   * Current character read off port
  200. fld    RMB 1                   * State of receive in rpak routine
  201. n      RMB 1                   * Message #
  202. numtry RMB 1                   * Number of tries for this packet
  203. oldtry RMB 1                   * Number of tries for previous packet
  204. maxtry RMB 1                   * Maximum tries allowed for a packet
  205. state  RMB 1                   * Current state of system
  206. size   RMB 1                   * Size of present data
  207. chksum RMB 1                   * Checksum for packet
  208. rtot   RMB 2                   * Total number of characters received
  209. stot   RMB 2                   * Total number of characters sent
  210. rchr   RMB 2                   * Number characters received, current file
  211. schr   RMB 2                   * Number of characters sent, current file
  212. eofinp RMB 1                   * End-of-file on input indicator
  213. errcod RMB 1                   * Error indicator
  214. filend rmb 1 *end of file code rcvd
  215.  
  216. saddr rmb 2
  217. *
  218. *       These fields are set parameters and should be kept in this
  219. *       order to insure integrity when setting and showing values
  220. *
  221.  
  222. srind  RMB 1                   * Switch to indicate which parm to print
  223. ebq    RMB 1   debq            * Eight-bit quote character (rec. and send)
  224.         RMB 1   debq            *               ...
  225. pad    RMB 1   dpadln          * Number of padding characters (rec. and send)
  226.         RMB 1   dpadln          *               ...
  227. padch  RMB 1   dpadch          * Padding character (receive and send)
  228.         RMB 1   dpaddh          *               ...
  229. eol    RMB 1   deol            * End-of-line character (recevie and send)
  230.         RMB 1   deol            *               ...
  231. psiz   RMB 1   dpakln          * Packet size (receive and send)
  232.         RMB 1   dpakln          *               ...
  233. time   RMB 2   $0000           * Time out interval (receive and send)
  234. quote  RMB 1   dquote          * Quote character (receive and send)
  235.         RMB 1   dquote          *               ...
  236.  
  237. *
  238. *       Some definitions to make life easier when referencing the above
  239. *       fields
  240. *
  241.  
  242. rebq    EQU       ebq             * Receive eight-bit-quote char
  243. sebq    EQU       ebq+1           * Send eight-bit-quote char
  244. rpad    EQU       pad             * Receive padding amount
  245. spad    EQU       pad+1           * Send padding amount
  246. rpadch  EQU       padch           * Receive padding character
  247. spadch  EQU       padch+1         * Send padding character
  248. reol    EQU       eol             * Receive end-of-line character
  249. seol    EQU       eol+1           * Send end-of-line character
  250. rpsiz   EQU       psiz            * Receive packet length
  251. spsiz   EQU       psiz+1          * Send packet length
  252. rtime   EQU       time            * Receive time out interval
  253. stime   EQU       time+1          * Send time out interval
  254. rquote  EQU       quote           * Receive quote character
  255. squote  EQU       quote+1         * Send quote character
  256.  
  257.  
  258.  org prom
  259.  
  260.  
  261. *************************
  262. close equ * close down server
  263.  lda #$00
  264.  sta numtry
  265. closen lda numtry
  266.  inc numtry
  267.  cmpa maxtry
  268.  bne closec
  269.  lda #errmrc to many tries
  270.  sta errcod
  271.  lda #false exit to menu with error
  272.  jmp kermit
  273.  
  274. closec lda #'G
  275.  sta ptype set up close packet
  276.  ldx #pdbuf
  277.  stx kerbf1
  278.  lda #'F
  279.  sta 0,x
  280.  lda #1
  281.  sta pdlen
  282.  clr a
  283.  sta n packet #0 for closing
  284.  sta pnum
  285.  jsr spak send it
  286.  jsr rpak get back an ack?
  287.  lda ptype
  288.  cmpa #'Y
  289.  bne closen no
  290.  lda n
  291.  cmpa pnum right one?
  292.  bne closen no
  293.  lda #true
  294.  jmp term
  295.  
  296.  
  297.