inline equ * read filename into fcb clr b inloop pshs b jsr cinput get data puls b anda #$7f cmpa #del beq backc cmpa #bs beq backc cmpa #ctrlx beq dellin cmpa #cr beq endc fini jsr couts echo char sta 0,x save in buffer inx inc b cmp b #$1e end of buffer? beq endc yes force finish bra inloop dellin ldx #query jsr pstr bra inline start again backc cmp b #0 beq inloop already at start of buffer dex decb back up 1 locn lda #bs jsr couts back up console bra inloop and continue endc clr a sta 0,x rts set terminator and exit ****************************************** * line int handler***************** ****************************************** int equ * interrupt lda line bita #1 beq ret1 not rxd lda line+1 rxd int ldb count cmpb #max beq ret que is totally full ! ldx inp sta 0,x+ save char in buffer que cpx #end bne int1 ldx #startq int1 stx inp inc b stb count cmpb #xlev bne ret lda #xoff xoff level cmpa lastf already sent? beq ret yesd sta lastf sta fcs send an xoff lda #%10110101 turn on line tx sta line ret rti ret1 bit a #$80 beq ret2 not line tx tst fcs beq txs nothing to send lda lastf sta line+1 send flow code txs lda #%10010101 sta line stop tx int ret2 rti *DESPATCH ROUTINE HERE FOR RECEVE AND SEND KERMIT EQU * RETURN FROM KERMIT DRIVERS *any error handling and status report ldx #noerr cmpa #true beq kdone kermit ended succesfully jsr fmscls close files on flex lda errcod get error code lsl a ldx #errtab look up error message ldx a,x kdone jsr pstr error message/complete message jmp main errtab equ * lookup error message fdb err0 fdb err1 fdb err2 fdb err3 fdb err4 fdb err5 fdb err6 fdb err7 err0 fcc 'error 0' fcb 4 err1 fcc 'Cannot receive init' fcb 4 err2 fcc 'Cannot receive file header' fcb 4 err3 fcc 'Cannot receive data' fcb 4 err4 fcc 'Maximum retry exceeded' fcb 4 err5 fcc 'Bad checksum' fcb 4 err6 fcc 'Checksum incorrect, resending packet' fcb $0d,$0a fcb 4 err7 fcc 'Program error' fcb 4 noerr fcc 'Transfer completed succesfully' fcb 4 ttl KL10 Error-free Reciprocol Micro-interface Transfer STTL Character and string definitions prom equ * nul EQU $00 * soh EQU $01 * bs EQU $08 * tab EQU $09 * (ctrl/I) lf EQU $0a * ffd EQU $0c * Form feed cr EQU $0d * ctrlu EQU $15 * ctrlx EQU $18 *[0] esc EQU $1b * sp EQU $20 * del EQU $7f * STTL Kermit defaults for operational parameters * * The following are the defaults which this Kermit uses for * the protocol * dquote EQU '# * The quote character dpakln EQU $5f * The packet length dpadch EQU nul * The padding character dpadln EQU 0 * The padding length dmaxtr EQU 6 * The maximum number of tries debq EQU '& * The eight-bit-quote character deol EQU cr * The end-of-line character dtime equ 5 *timeout interval STTL Kermit data * * The following is data storage used by Kermit * mxpack EQU dpakln * Maximum packet size eof EQU $01 * This is the value for End-of-file buflen EQU $ff * Buffer length for received data true EQU $01 * Symbol for true return code false EQU $00 * Symbol for false return code on EQU $01 * Symbol for value of 'on' keyword off EQU $00 * Symbol for value of 'off' keyword yes EQU $01 * Symbol for value of 'yes' keyword no EQU $00 * Symbol for value of 'no' keyword fbsbit EQU $01 * Value for SEVEN-BIT FILE-BYTE-SIZE fbebit EQU $00 * Value for EIGHT-BIT FILE-BYTE-SIZE errcri EQU $01 * Error code - cannot receive init errcrf EQU $02 * Error code - cannot receive file-header errcrd EQU $03 * Error code - cannot receive data errmrc EQU $04 * Error code - maximum retry count exceeded errbch EQU $05 * Error code - bad checksum org ram kerbf1 rmb 2 fcb1 rmb 20 fcb rmb 400 file spec fcb2 rmb 20 remote file spec pdbuf RMB mxpack+20 * Packet buffer JUST TO MAKE SURE ENOUGH ROOM pdlen RMB 1 * Common area to place data length ptype RMB 1 * Common area to place current packet type pnum RMB 1 * Common area to put packet number received rstat RMB 1 * Return status delay RMB 1 * Amount of delay before first send ebqmod RMB 1 * Eight-bit-quoting mode datind RMB 1 * Data index into packet buffer chebo RMB 1 * Switch to tell if 8th-bit was on kerchr RMB 1 * Current character read off port fld RMB 1 * State of receive in rpak routine n RMB 1 * Message # numtry RMB 1 * Number of tries for this packet oldtry RMB 1 * Number of tries for previous packet maxtry RMB 1 * Maximum tries allowed for a packet state RMB 1 * Current state of system size RMB 1 * Size of present data chksum RMB 1 * Checksum for packet rtot RMB 2 * Total number of characters received stot RMB 2 * Total number of characters sent rchr RMB 2 * Number characters received, current file schr RMB 2 * Number of characters sent, current file eofinp RMB 1 * End-of-file on input indicator errcod RMB 1 * Error indicator filend rmb 1 *end of file code rcvd saddr rmb 2 * * These fields are set parameters and should be kept in this * order to insure integrity when setting and showing values * srind RMB 1 * Switch to indicate which parm to print ebq RMB 1 debq * Eight-bit quote character (rec. and send) RMB 1 debq * ... pad RMB 1 dpadln * Number of padding characters (rec. and send) RMB 1 dpadln * ... padch RMB 1 dpadch * Padding character (receive and send) RMB 1 dpaddh * ... eol RMB 1 deol * End-of-line character (recevie and send) RMB 1 deol * ... psiz RMB 1 dpakln * Packet size (receive and send) RMB 1 dpakln * ... time RMB 2 $0000 * Time out interval (receive and send) quote RMB 1 dquote * Quote character (receive and send) RMB 1 dquote * ... * * Some definitions to make life easier when referencing the above * fields * rebq EQU ebq * Receive eight-bit-quote char sebq EQU ebq+1 * Send eight-bit-quote char rpad EQU pad * Receive padding amount spad EQU pad+1 * Send padding amount rpadch EQU padch * Receive padding character spadch EQU padch+1 * Send padding character reol EQU eol * Receive end-of-line character seol EQU eol+1 * Send end-of-line character rpsiz EQU psiz * Receive packet length spsiz EQU psiz+1 * Send packet length rtime EQU time * Receive time out interval stime EQU time+1 * Send time out interval rquote EQU quote * Receive quote character squote EQU quote+1 * Send quote character org prom ************************* close equ * close down server lda #$00 sta numtry closen lda numtry inc numtry cmpa maxtry bne closec lda #errmrc to many tries sta errcod lda #false exit to menu with error jmp kermit closec lda #'G sta ptype set up close packet ldx #pdbuf stx kerbf1 lda #'F sta 0,x lda #1 sta pdlen clr a sta n packet #0 for closing sta pnum jsr spak send it jsr rpak get back an ack? lda ptype cmpa #'Y bne closen no lda n cmpa pnum right one? bne closen no lda #true jmp term