home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Columbia Kermit
/
kermit.zip
/
flex1
/
flxpt3.txt
< prev
next >
Wrap
Text File
|
2020-01-01
|
9KB
|
297 lines
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 * <null>
soh EQU $01 * <soh>
bs EQU $08 * <bs>
tab EQU $09 * <tab> (ctrl/I)
lf EQU $0a * <lf>
ffd EQU $0c * Form feed
cr EQU $0d * <cr>
ctrlu EQU $15 * <ctrl/U>
ctrlx EQU $18 *[0] <ctrl/X>
esc EQU $1b * <esc>
sp EQU $20 * <space>
del EQU $7f * <del>
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