1121 lines
14 KiB
Plaintext
1121 lines
14 KiB
Plaintext
; kutil.z - kermit utilities, and all the data storage
|
||
|
||
.incl "c:kermit"
|
||
|
||
|
||
.var EOF -1
|
||
.var PACK -2
|
||
|
||
.extern spack
|
||
spack:
|
||
ld hl,packet
|
||
push hl
|
||
push af
|
||
ld a,(pad)
|
||
or a
|
||
jr z,nospad
|
||
push bc
|
||
ld b,a
|
||
padlp: ld a,(padchr)
|
||
push bc
|
||
call modopc
|
||
pop bc
|
||
djnz padlp
|
||
pop bc
|
||
nospad: ld a,SOH
|
||
call cputc
|
||
xor a
|
||
ld h,a
|
||
ld l,a
|
||
ld (hdchk),a
|
||
ld (chksum),hl
|
||
dec b
|
||
inc b
|
||
jr nz,sxthdr
|
||
ld a,(cktyp) ; '1' '2' or '3'
|
||
add a,e
|
||
add a,0xf2 - ' '
|
||
sxthdr: call cputcs ; len
|
||
ld a,c
|
||
call cputcs ; number
|
||
pop af
|
||
call cputc ; type
|
||
ld a,b
|
||
or a
|
||
jr z,nolhdr
|
||
push de
|
||
ex de,hl
|
||
ld a,(cktyp)
|
||
sub '0'
|
||
setxpl: inc hl
|
||
dec a
|
||
jr nz,setxpl
|
||
ld de,-95
|
||
ld a,d
|
||
div95: inc a
|
||
add hl,de
|
||
jr c,div95
|
||
sbc hl,de
|
||
push hl
|
||
call cputcs
|
||
pop de
|
||
ld a,e
|
||
call cputcs
|
||
ld hl,hdchk
|
||
call finchk
|
||
call cputcs
|
||
pop de
|
||
ld a,d
|
||
nolhdr: or e
|
||
jr z,scksum
|
||
sdatlp: pop hl
|
||
ld a,(hl)
|
||
inc hl
|
||
push hl
|
||
call cputc
|
||
dec de
|
||
ld a,d
|
||
or e
|
||
jr nz,sdatlp
|
||
scksum: pop hl
|
||
call fincrc
|
||
ld a,(cktyp)
|
||
cp '3'
|
||
jr nz,sck2
|
||
ld a,(chksum + 1)
|
||
rrca
|
||
rrca
|
||
rrca
|
||
rrca
|
||
and 0x0f
|
||
add a,' '
|
||
call modopc
|
||
ld a,'2'
|
||
sck2: cp '2'
|
||
jr nz,sck1
|
||
ld hl,(chksum)
|
||
add hl,hl
|
||
add hl,hl
|
||
ld a,h
|
||
and 0x3f
|
||
add a,' '
|
||
call modopc
|
||
sck1: ld a,(chksum)
|
||
and 0x3f
|
||
add a,' '
|
||
call modopc
|
||
call flsrng
|
||
ld a,(eol)
|
||
call modopc
|
||
ld a,'q' & 0x1f
|
||
jp modopc
|
||
|
||
.extern rpack
|
||
rpack:
|
||
call kgettc
|
||
jr c,retf3
|
||
cp SOH
|
||
jr nz,rpack
|
||
recplp: xor a
|
||
ld h,a
|
||
ld l,a
|
||
ld (chksum),hl
|
||
ld (hdchk),a
|
||
call cinchr
|
||
jr c,retf3
|
||
cp SOH
|
||
jr z,recplp
|
||
ld hl,cktyp
|
||
sub (hl)
|
||
sub 0xf2
|
||
ld e,a ; length to de
|
||
ld d,0
|
||
call cinchr
|
||
jr c,retf3
|
||
cp SOH
|
||
jr z,recplp
|
||
sub ' '
|
||
ld c,a ; number to c
|
||
call cinchr
|
||
jr c,retf3
|
||
cp SOH
|
||
jr z,recplp
|
||
ld b,a ; type to b
|
||
ld a,e
|
||
and 0x80 ; extended packet?
|
||
jr z,indat
|
||
call rxthdr
|
||
retf2: jr c,retf3
|
||
jr z,recplp
|
||
ld a,(cktyp)
|
||
sub '0'
|
||
setlpl: dec de
|
||
dec a
|
||
jr nz,setlpl
|
||
indat: ld a,e
|
||
or d
|
||
ld hl,packet
|
||
jr z,nodat
|
||
push de
|
||
gdatlp: call cinchr
|
||
jr c,retf3
|
||
cp SOH
|
||
recpl1: jr z,recplp
|
||
ld (hl),a
|
||
inc hl
|
||
dec de
|
||
ld a,d
|
||
or e
|
||
jr nz,gdatlp
|
||
pop de
|
||
nodat: ld (hl),a
|
||
call fincrc
|
||
ld a,(cktyp)
|
||
cp '3'
|
||
jr nz,rck2
|
||
call kgettc
|
||
retf3: jr c,retf
|
||
cp SOH
|
||
jr z,recpl1
|
||
ld e,a
|
||
ld a,(chksum + 1)
|
||
rrca
|
||
rrca
|
||
rrca
|
||
rrca
|
||
and 0x0f
|
||
add a,' '
|
||
xor e
|
||
and 0x7f
|
||
jr nz,csmerr
|
||
ld a,'2'
|
||
rck2: cp '2'
|
||
jr nz,rck1
|
||
call kgettc
|
||
jr c,retf
|
||
cp SOH
|
||
jr z,recpl1
|
||
ld e,a
|
||
ld hl,(chksum)
|
||
add hl,hl
|
||
add hl,hl
|
||
ld a,h
|
||
and 0x3f
|
||
add a,' '
|
||
xor e
|
||
and 0x7f
|
||
jr nz,csmerr
|
||
rck1: call kgettc
|
||
jr c,retf
|
||
cp SOH
|
||
jr z,recpl1
|
||
ld e,a
|
||
ld a,(chksum)
|
||
and 0x3f
|
||
add a,' '
|
||
xor e
|
||
and 0x7f
|
||
jr z,cksmok
|
||
csmerr: call dcheck
|
||
retf1: ld b,0
|
||
adjsiz: ld hl,(cspsiz)
|
||
ld a,h
|
||
or a
|
||
ld de,-16
|
||
jr nz,decsiz
|
||
ld a,l
|
||
cp MINPSIZ + 5
|
||
jr c,nodec
|
||
ld e,-4
|
||
decsiz: add hl,de
|
||
ld (cspsiz),hl
|
||
nodec: ld a,b
|
||
ret
|
||
retf: call dtime
|
||
jr retf1
|
||
cksmok: call flsrng
|
||
ld a,b
|
||
cp 'Y'
|
||
jr nz,adjsiz
|
||
ld de,(cspsiz)
|
||
ld hl,(spsiz)
|
||
sbc hl,de
|
||
ret z
|
||
inc de
|
||
ld (cspsiz),de
|
||
ret
|
||
|
||
rxthdr: call cinchr
|
||
ret c
|
||
cp SOH
|
||
ret z
|
||
sub ' '
|
||
ld e,a
|
||
call cinchr
|
||
ret c
|
||
cp SOH
|
||
ret z
|
||
sub ' '
|
||
call mul95
|
||
ex de,hl
|
||
ld hl,hdchk
|
||
call finchk
|
||
push af
|
||
call cinchr
|
||
sub ' '
|
||
pop hl
|
||
cp h
|
||
jr nz,rxerr
|
||
xor a
|
||
inc a
|
||
ret
|
||
rxerr: pop hl
|
||
jr csmerr
|
||
|
||
cinchr: push de
|
||
push hl
|
||
call kgettc
|
||
push af
|
||
call kcrcch
|
||
pop af
|
||
pop hl
|
||
pop de
|
||
ret
|
||
|
||
cputcs: add a,' '
|
||
cputc: push de
|
||
push bc
|
||
push af
|
||
call modopc
|
||
pop af
|
||
pop bc
|
||
pop de
|
||
|
||
kcrcch: push bc
|
||
ld c,a
|
||
ld hl,hdchk
|
||
add a,(hl)
|
||
ld (hl),a
|
||
ld a,(cktyp)
|
||
cp '3'
|
||
jr z,kcrc3
|
||
ld hl,(chksum)
|
||
ld b,0
|
||
add hl,bc
|
||
ld (chksum),hl
|
||
pop bc
|
||
ret
|
||
|
||
kcrc3: push de
|
||
call dou1
|
||
ld a,c
|
||
rrca
|
||
rrca
|
||
rrca
|
||
rrca
|
||
ld c,a
|
||
call dou1
|
||
pop de
|
||
pop bc
|
||
ret
|
||
|
||
dou1: ld hl,chksum + 1
|
||
xor a
|
||
rrd
|
||
dec hl
|
||
rrd
|
||
xor c
|
||
and 0x0f
|
||
add a,a
|
||
push hl
|
||
ld l,a
|
||
ld h,0
|
||
ld de,kctab
|
||
add hl,de
|
||
ex de,hl
|
||
pop hl
|
||
ld a,(de)
|
||
inc de
|
||
xor (hl)
|
||
ld (hl),a
|
||
inc hl
|
||
ld a,(de)
|
||
xor (hl)
|
||
ld (hl),a
|
||
ret
|
||
|
||
fincrc: ld a,(cktyp)
|
||
cp '1'
|
||
ret nz
|
||
ld hl,chksum
|
||
finchk: ld a,(hl)
|
||
rlca
|
||
rlca
|
||
and 3
|
||
add a,(hl)
|
||
and 0x3f
|
||
ld (hl),a
|
||
ret
|
||
|
||
.extern bufill
|
||
bufill: ld bc,0
|
||
ld hl,packet
|
||
bufilp: call getpc
|
||
jr nc,nopack
|
||
cp EOF
|
||
jr nz,noteof
|
||
ld a,b
|
||
or c
|
||
ret nz
|
||
dec a
|
||
ret
|
||
noteof: ld a,(pack)
|
||
ld (hl),a
|
||
inc hl
|
||
inc bc
|
||
call getpc
|
||
ld (hl),a
|
||
inc hl
|
||
inc bc
|
||
call getpc
|
||
nopack: ld e,a
|
||
ld a,(use8)
|
||
or a
|
||
jr nz,nohib
|
||
ld a,(hibit)
|
||
or a
|
||
jr z,nohib1
|
||
bit 7,e
|
||
jr z,nohib
|
||
ld (hl),a
|
||
inc hl
|
||
inc bc
|
||
nohib1: res 7,e
|
||
nohib: ld a,e
|
||
and 0x7f
|
||
cp ' '
|
||
jr c,xorqt
|
||
cp DEL
|
||
jr z,xorqt
|
||
ld a,(quote)
|
||
cp e
|
||
jr z,doquot
|
||
ld a,(hibit)
|
||
cp e
|
||
jr z,doquot
|
||
ld a,(pack)
|
||
cp e
|
||
jr z,doquot
|
||
jr noquot
|
||
xorqt: ld a,e
|
||
xor 64
|
||
ld e,a
|
||
doquot: ld a,(quote)
|
||
ld (hl),a
|
||
inc hl
|
||
inc bc
|
||
noquot: ld (hl),e
|
||
inc hl
|
||
inc bc
|
||
push hl
|
||
ld hl,(cspsiz)
|
||
xor a
|
||
sbc hl,bc
|
||
ex de,hl
|
||
pop hl
|
||
or d
|
||
jr nz,bufilp
|
||
ld a,e
|
||
cp 6
|
||
jr nc,bufilp
|
||
ld a,(status)
|
||
dec a
|
||
jr z,bufilp
|
||
dec a
|
||
jr z,bufilp
|
||
ret
|
||
|
||
.extern getpc
|
||
getpc:
|
||
push hl
|
||
push bc
|
||
ld a,(pack)
|
||
or a
|
||
jr nz,canpak
|
||
call kgw2
|
||
jr poprt1
|
||
canpak: ld hl,status
|
||
ld a,(hl)
|
||
or a
|
||
jr nz,stsnz
|
||
ld (hl),3
|
||
ld de,data
|
||
ld b,6
|
||
fildat: push de
|
||
push bc
|
||
call kgw2
|
||
pop bc
|
||
pop de
|
||
ld (de),a
|
||
inc de
|
||
sbc a,a
|
||
ld (de),a
|
||
inc de
|
||
djnz fildat
|
||
stsnz: ld hl,status
|
||
ld a,(hl)
|
||
cp 3
|
||
jr z,stsno3
|
||
dec (hl)
|
||
reteof: add a,a
|
||
ld l,a
|
||
ld h,0
|
||
ld de,data + 1
|
||
add hl,de
|
||
ld a,(hl)
|
||
add a,a
|
||
dec hl
|
||
ld a,(hl)
|
||
poprt1: jr popret
|
||
stsno3: ld hl,(data)
|
||
ld a,h
|
||
rlca
|
||
jr c,popret
|
||
ld a,l
|
||
ld hl,data + 2
|
||
ld b,5
|
||
ckpk: cp (hl)
|
||
jr nz,nopak
|
||
inc hl
|
||
bit 7,(hl)
|
||
jr nz,nopak
|
||
inc hl
|
||
djnz ckpk
|
||
ld a,2
|
||
ld (status),a
|
||
ld bc,[MAXPSIZ - 6 << 8] + 6
|
||
packlp: push bc
|
||
call kgw2
|
||
pop bc
|
||
jr c,packed
|
||
ld hl,data
|
||
cp (hl)
|
||
jr z,nopkef
|
||
call gw2pb
|
||
jr packed
|
||
nopkef: inc c
|
||
djnz packlp
|
||
packed: ld a,c
|
||
add a,' '
|
||
ld (data + 4),a
|
||
scf
|
||
ld a,PACK
|
||
jr popret
|
||
nopak: ld de,data + 1
|
||
ld hl,data + 2
|
||
ld bc,10
|
||
ld a,(de)
|
||
add a,a
|
||
dec de
|
||
ld a,(de)
|
||
push af
|
||
ldir
|
||
call kgw2
|
||
ld l,a
|
||
sbc a,a
|
||
ld h,a
|
||
ld (data + 10),hl
|
||
pop af
|
||
popret: pop bc
|
||
pop hl
|
||
ret
|
||
|
||
kgw2: call getw2c
|
||
jr c,kgeof
|
||
ld hl,(ktxt)
|
||
inc l
|
||
dec l
|
||
ret nz
|
||
cp 0x1a
|
||
jr nz,clcra
|
||
scf
|
||
kgeof: sbc a,a
|
||
ret
|
||
clcra: or a
|
||
ret
|
||
|
||
.extern kresgp
|
||
kresgp:
|
||
xor a
|
||
ld (status),a
|
||
ret
|
||
|
||
.extern bufemp
|
||
bufemp:
|
||
ld hl,packet
|
||
bufmpl: ld a,(hl)
|
||
inc hl
|
||
or a
|
||
ret z
|
||
ld bc,0x0100
|
||
ld e,a
|
||
ld a,(pack)
|
||
or a
|
||
jr z,nobepk
|
||
cp e
|
||
jr nz,nobepk
|
||
ld a,(hl)
|
||
inc hl
|
||
sub ' '
|
||
ld b,a
|
||
ld e,(hl)
|
||
inc hl
|
||
nobepk: ld d,0xff
|
||
ld a,(use8)
|
||
or a
|
||
jr nz,nobehb
|
||
ld d,0x7f
|
||
ld a,(hibit)
|
||
cp e
|
||
jr nz,nobehb
|
||
ld c,0x80
|
||
ld e,(hl)
|
||
inc hl
|
||
nobehb: ld a,e
|
||
and d
|
||
cp MYQUOTE
|
||
jr nz,nobeqt
|
||
ld a,(hl)
|
||
and d
|
||
ld e,a
|
||
and 0x7f
|
||
ld d,a
|
||
inc hl
|
||
cp MYQUOTE
|
||
ld a,e
|
||
jr z,nobeqt
|
||
ld a,(hibit)
|
||
cp d
|
||
ld a,e
|
||
jr z,nobeqt
|
||
ld a,(pack)
|
||
cp d
|
||
ld a,e
|
||
jr z,nobeqt
|
||
xor 64
|
||
nobeqt: or c
|
||
push hl
|
||
oplp: push af
|
||
push bc
|
||
call putw2c
|
||
pop bc
|
||
pop af
|
||
djnz oplp
|
||
pop hl
|
||
jr bufmpl
|
||
.dseg
|
||
mydata: db MAXPSIZ + ' '
|
||
db MYTIME + ' '
|
||
db MYPAD + ' '
|
||
db MYPCHAR ^ 64
|
||
db MYEOL + ' '
|
||
db MYQUOTE
|
||
hba: db MYHIBIT
|
||
cka: db '3'
|
||
pka: db MYPACK
|
||
capas: db '"' ; just long packets
|
||
windo: db ' ' ; no windowing
|
||
maxl1: db ' ' + [1015 / 95] ; packet length == 1015
|
||
maxl2: db ' ' + [1015 % 95] ; packet length == 1015
|
||
emdat:
|
||
.cseg
|
||
|
||
.extern spar
|
||
spar:
|
||
ld de,packet
|
||
ld hl,mydata
|
||
ld bc,{emdat - mydata}
|
||
ldir
|
||
ld a,(ksflg) ; receive mode?
|
||
or a
|
||
jr z,sparr ; yes - handle spar stuff differently
|
||
ld a,(use8)
|
||
or a
|
||
ld a,'N'
|
||
jr z,sps7
|
||
setss6: ld (packet + {hba - mydata}),a
|
||
sps7: ld a,(try2)
|
||
or a
|
||
jr z,splp
|
||
ld hl,packet + {cka - mydata}
|
||
dec (hl)
|
||
jr splp
|
||
sparr: ld a,(hibit)
|
||
or a
|
||
ld hl,use8
|
||
ld de,hispfx
|
||
jr nz,useh
|
||
ld a,(de)
|
||
xor 'Y'
|
||
or (hl)
|
||
ld a,'N'
|
||
jr nz,setd6
|
||
useh: ld (hl),0
|
||
ex de,hl
|
||
ld a,'Y'
|
||
cp (hl)
|
||
jr nz,setd6
|
||
ld a,MYHIBIT
|
||
ld (hibit),a
|
||
setd6: ld (packet + {hba - mydata}),a
|
||
|
||
ld hl,cktypq
|
||
ld a,(hl)
|
||
and 0xfe
|
||
cp '2'
|
||
jr z,ckok
|
||
ld (hl),'1'
|
||
ckok: ld a,(hl)
|
||
ld (packet + {cka - mydata}),a
|
||
|
||
ld a,(pack)
|
||
or a
|
||
jr nz,ispack
|
||
ld a,' '
|
||
ispack: ld (packet + {pka - mydata}),a
|
||
|
||
splp: ld a,(longpk)
|
||
or a
|
||
ret nz
|
||
ld hl,[' ' << 8] + ' '
|
||
ld (packet + {capas - mydata}),hl
|
||
ld (packet + {capas - mydata} + 2),hl
|
||
ret
|
||
|
||
.extern rpar
|
||
rpar:
|
||
ld hl,packet
|
||
push hl
|
||
ld b,16
|
||
fillit: ld a,(hl)
|
||
or a
|
||
jr nz,filnxt
|
||
ld (hl),' '
|
||
inc hl
|
||
ld (hl),0
|
||
dec hl
|
||
filnxt: inc hl
|
||
djnz fillit
|
||
pop hl
|
||
ld a,(hl)
|
||
sub ' '
|
||
cp MAXPSIZ
|
||
jr c,psizok
|
||
ld a,MAXPSIZ
|
||
psizok: ld (spsiz),a
|
||
ld (cspsiz),a
|
||
inc hl
|
||
ld a,(hl)
|
||
sub ' '
|
||
cp MINTIM
|
||
jr nc,timok1
|
||
ld a,MINTIM
|
||
timok1: cp MAXTIM
|
||
jr c,timok2
|
||
ld a,MAXTIM
|
||
timok2: ld (timint),a
|
||
inc hl
|
||
ld a,(hl)
|
||
sub ' '
|
||
ld (pad),a
|
||
inc hl
|
||
ld a,(hl)
|
||
xor 64
|
||
ld (padchr),a
|
||
inc hl
|
||
ld a,(hl)
|
||
sub ' '
|
||
or a
|
||
jr nz,eolok
|
||
ld a,MYEOL
|
||
eolok: ld (eol),a
|
||
inc hl
|
||
ld a,(hl)
|
||
call validq
|
||
jr nc,quotok
|
||
ld a,MYQUOTE
|
||
quotok: ld (quote),a
|
||
inc hl
|
||
ld a,(hl)
|
||
cp ' '
|
||
ld (hispfx),a
|
||
jr z,clru8
|
||
call validq
|
||
jr c,notvq
|
||
ld a,(ksflg)
|
||
or a
|
||
jr z,usehis
|
||
ld a,(use8)
|
||
or a
|
||
jr nz,clru8
|
||
ld a,(hispfx)
|
||
cp MYHIBIT
|
||
jr nz,clru8
|
||
usehis: ld a,(hispfx)
|
||
jr sethib
|
||
notvq: ld a,(hispfx)
|
||
cp 'Y'
|
||
jr nz,rpr7
|
||
ld a,(use8)
|
||
or a
|
||
jr nz,rpr7
|
||
sethmy: ld a,MYHIBIT
|
||
sethib: ld (hibit),a
|
||
clru8: xor a
|
||
ld (use8),a
|
||
rpr7: inc hl
|
||
ld a,(ksflg)
|
||
or a
|
||
ld a,(hl)
|
||
jr nz,rpr7s
|
||
cp '2'
|
||
jr z,setct
|
||
cp '3'
|
||
jr z,setct
|
||
ld a,'1'
|
||
jr setct
|
||
rpr7s: ld a,(try2)
|
||
or a
|
||
ld a,'2'
|
||
jr nz,ckrtyp
|
||
inc a
|
||
ckrtyp: cp (hl)
|
||
jr z,setct
|
||
ld a,'1'
|
||
setct: ld (cktypq),a
|
||
rpr8: inc hl
|
||
ld a,(ksflg)
|
||
or a
|
||
ld a,(hl)
|
||
jr nz,rpr8s
|
||
call validq
|
||
jr c,rpr9
|
||
jr rp8sp
|
||
rpr8s: cp MYPACK
|
||
jr nz,rpr9
|
||
rp8sp: ld (pack),a
|
||
rpr9: ld a,(longpk)
|
||
or a
|
||
ret z
|
||
inc hl
|
||
ld a,(hl)
|
||
and 2
|
||
ret z
|
||
skipcp: ld a,(hl)
|
||
inc hl
|
||
rrca
|
||
jr c,skipcp
|
||
inc hl
|
||
ld a,(hl)
|
||
sub ' '
|
||
ld e,a
|
||
inc hl
|
||
ld a,(hl)
|
||
sub ' '
|
||
call mul95
|
||
ld a,h
|
||
and ~ [1023 / 256]
|
||
jr z,rpszok
|
||
ld hl,1023
|
||
rpszok: ld a,h
|
||
or a
|
||
jr z,cksml
|
||
sub10: ld de,-10 ; trim off some size for breathing room
|
||
add hl,de
|
||
jr spsz
|
||
cksml: ld a,l
|
||
cp MAXPSIZ + 1
|
||
jr nc,sub10
|
||
or a
|
||
ld hl,500
|
||
jr z,spsz
|
||
ld hl,MINPSIZ
|
||
cp l
|
||
jr c,spsz
|
||
ld l,a
|
||
spsz: ld (spsiz),hl
|
||
ld (cspsiz),hl
|
||
ret
|
||
|
||
validq: cp '!'
|
||
ret c
|
||
cp '<' + 1
|
||
ccf
|
||
ret nc
|
||
cp '`'
|
||
ret c
|
||
cp '~' + 1
|
||
ccf
|
||
ret
|
||
|
||
mul95: ld l,e
|
||
ld d,0
|
||
ld h,d
|
||
add hl,hl ; * 2
|
||
add hl,de ; * 3
|
||
add hl,hl ; * 6
|
||
add hl,hl ; * 12
|
||
add hl,hl ; * 24
|
||
add hl,hl ; * 48
|
||
add hl,hl ; * 96
|
||
sbc hl,de ; * 95
|
||
ld e,a
|
||
add hl,de ; + a
|
||
ret
|
||
|
||
.extern kinit
|
||
kinit:
|
||
ld a,MYEOL
|
||
ld (eol),a
|
||
ld a,MYQUOTE
|
||
ld (quote),a
|
||
ld a,MYTIME
|
||
ld (timint),a
|
||
ld a,'1'
|
||
ld (cktyp),a
|
||
call clrflg
|
||
|
||
kflp: ld a,(hl)
|
||
or 0x20
|
||
cp 0x20
|
||
jr z,donekf
|
||
cp 'b'
|
||
jr nz,nokfb
|
||
ld (ktxt),a
|
||
jr kflpi
|
||
nokfb: cp 'g'
|
||
jr nz,nokfg
|
||
ld (getflg),a
|
||
jr kflpi
|
||
nokfg: cp '8'
|
||
jr nz,nokf8
|
||
ld (use8),a
|
||
jr kflpi
|
||
nokf8: cp '2'
|
||
jr nz,nokf2
|
||
ld (try2),a
|
||
jr kflpi
|
||
nokf2: cp 'q'
|
||
jr nz,nokfq
|
||
ex de,hl
|
||
ld hl,qcount
|
||
inc (hl)
|
||
ex de,hl
|
||
jr kflpi
|
||
nokfq: cp 'a'
|
||
jr nz,nokfa
|
||
ld (beep),a
|
||
jr kflpi
|
||
nokfa: cp 'l'
|
||
jr z,savser
|
||
cp 'f'
|
||
jr nz,nokff
|
||
savser: ld (sercmd),a
|
||
jr kflpi
|
||
nokff: cp 'x'
|
||
jr nz,kflpi
|
||
ld (longpk),a
|
||
kflpi: inc hl
|
||
jr kflp
|
||
donekf: ld a,(getflg)
|
||
or a
|
||
jr z,noget
|
||
call byp
|
||
or a
|
||
jr nz,savget
|
||
call ilprt
|
||
db 'Need filename for get option\0'
|
||
jp jexit
|
||
savget: ld (getnam),hl
|
||
noget: ld hl,kabort
|
||
ld (abortf),hl
|
||
ld hl,kstr
|
||
jp initsc
|
||
.dseg
|
||
kstr: db 'Kermit\0'
|
||
.cseg
|
||
|
||
.extern kerror
|
||
kerror:
|
||
ld a,e
|
||
ld de,(nn)
|
||
ld d,a
|
||
ld a,'E'
|
||
push hl
|
||
call spack
|
||
call mtprt
|
||
dw [14 << 8] + 10
|
||
db 'Local error: \0'
|
||
phlpsl: pop hl
|
||
jp prtslp
|
||
|
||
.extern prerrp
|
||
prerrp:
|
||
ld hl,packet
|
||
push hl
|
||
call mtprt
|
||
dw [14 << 8] + 10
|
||
db 'Error from remote: \0'
|
||
jr phlpsl
|
||
|
||
.extern scnfil
|
||
scnfil:
|
||
ld a,(de)
|
||
inc de
|
||
and 0x7f
|
||
cp ' '
|
||
jr z,isspc
|
||
ld (hl),a
|
||
inc hl
|
||
isspc: djnz scnfil
|
||
ret
|
||
|
||
.extern dbadp
|
||
dbadp: call diag
|
||
db 'Invalid packet type\0'
|
||
ret
|
||
|
||
kabort: call gettc3
|
||
jr nc,kabort ; let the line cool down
|
||
ld a,(ksflg)
|
||
ld de,(nn)
|
||
or a
|
||
jr z,nnok
|
||
inc e
|
||
nnok: ld d,0
|
||
ld a,'A'
|
||
call spack
|
||
|
||
.extern dabort
|
||
dabort: call diag
|
||
db 'Transfer aborted\0'
|
||
jexit: call crlf
|
||
ld sp,(ressp)
|
||
ret
|
||
|
||
.extern exprp
|
||
exprp:
|
||
ld a,(pack)
|
||
cp (hl)
|
||
jr z,gotexp
|
||
ld a,(hl)
|
||
ldi
|
||
or a
|
||
jr nz,exprp
|
||
ret
|
||
gotexp: inc hl
|
||
ld a,(hl)
|
||
sub ' '
|
||
ld b,a
|
||
inc hl
|
||
ld a,(hl)
|
||
inc hl
|
||
expfl: ld (de),a
|
||
inc de
|
||
djnz expfl
|
||
jr exprp
|
||
|
||
.extern clrflg
|
||
clrflg:
|
||
push hl
|
||
ld hl,fill
|
||
ld de,fill + 1
|
||
ld bc,{endfill - fill} - 1
|
||
ld (hl),b
|
||
ldir
|
||
pop hl
|
||
ret
|
||
|
||
.useg
|
||
|
||
fill:
|
||
.extern mdm7b
|
||
mdm7b: ; modem 7 batch enabled
|
||
.extern hibit
|
||
hibit: ds 1 ; high bit quote char, or zero if none
|
||
.extern pack
|
||
pack: ds 1 ; repeat char pack flag, or zero if none
|
||
.extern longpk
|
||
longpk: ds 1 ; long packets requested
|
||
.extern pad
|
||
pad: ds 1 ; number of pad chars needed
|
||
.extern errors
|
||
errors: ; xmodem error count
|
||
.extern padchr
|
||
padchr: ds 1 ; what sort of padding needed
|
||
.extern crcerc
|
||
crcerc:
|
||
ktxt: ds 1 ; text mode (how do we do end of file?)
|
||
.extern crcmod
|
||
crcmod:
|
||
use8: ds 1 ; are we actually doing 8 bit transfers
|
||
.extern beep
|
||
beep: ds 1 ; beep when done
|
||
.extern ymdmb
|
||
ymdmb: ; y modem batch transfer
|
||
try2: ds 1 ; type 2 checksum requested
|
||
.extern qcount
|
||
qcount: ds 1 ; quiet value
|
||
|
||
|
||
spsiz: ds 2 ; max send packet size
|
||
cspsiz: ds 2 ; current send packet size
|
||
.extern getflg
|
||
getflg: ds 1 ; server get requested
|
||
.extern getnam
|
||
getnam: ds 1 ; string for names to get - overlays sercmd
|
||
.extern sercmd
|
||
sercmd: ds 1
|
||
|
||
endfill:
|
||
|
||
.extern ressp
|
||
ressp: ds 2
|
||
.extern size
|
||
size: ds 2
|
||
.extern nn
|
||
nn: ds 1
|
||
.extern timint
|
||
timint: ds 1
|
||
.extern numtry
|
||
numtry: ds 1
|
||
.extern oldtry
|
||
oldtry: ds 1
|
||
.extern state
|
||
state: ds 1
|
||
.extern eol
|
||
eol: ds 1
|
||
.extern quote
|
||
quote: ds 1
|
||
hispfx: ds 1 ; char he sent in prefix position
|
||
.extern cktyp
|
||
cktyp: ds 1 ; checksum type we're actually using
|
||
.extern cktypq
|
||
cktypq: ds 1 ; checksum type proposed
|
||
status: ds 1
|
||
data: ds 12
|
||
.extern ksflg
|
||
ksflg: ds 1
|
||
hdchk: ds 1 ; checksum used for header
|
||
|
||
.dseg
|
||
kctab:
|
||
dw 0x0000, 0x1081
|
||
dw 0x2102, 0x3183
|
||
dw 0x4204, 0x5285
|
||
dw 0x6306, 0x7387
|
||
dw 0x8408, 0x9489
|
||
dw 0xa50a, 0xb58b
|
||
dw 0xc60c, 0xd68d
|
||
dw 0xe70e, 0xf78f
|
||
|