home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Columbia Kermit
/
kermit.zip
/
archives
/
i8051.tar.gz
/
i8051.tar
/
i51recv.asm
< prev
next >
Wrap
Assembly Source File
|
1996-06-30
|
3KB
|
126 lines
$mod51
$nosymbols
$nolist
$include(i51ctrl.inc)
$list
$include(i51hedr.inc)
org codeaddr
start: jmp main
$include(i51init.asm) ; initialization
$include(i51misc.asm) ; misc functions
$include(i51sprm.asm) ; parameters
$include(i51file.asm) ; file i/o routines
$include(i51strf.asm) ; string functions
$include(i51spck.asm) ; send packet
$include(i51rpck.asm) ; receive packet
$include(i51getv.asm)
$include(i51sakn.asm)
main: call initialize
;=========================================
RECV: call getvp ; get valid packet
mov a,TYP
cjne a,#'S',L2035
sjmp L2040
L2035: mov flags,#0ffh
mov dptr,#GDA
mov a,TYP
movx @dptr,a
inc dptr
clr a
movx @dptr,a
call strcat
db ' Packet in S State',0
jmp L9500
;
; here on correct packet type
L2040: mov dptr,#pktdat
call strlen
push acc ; save packet length
;
; if pktlen > 4 then EOL=asc(mid$(pktdat,5,1) else EOL=13
cjne a,#4,L2042
L2042: jc L2044 ; > 4
mov dpl,#4
movx a,@dptr
unchar
mov EOL,a
sjmp L2050
L2044: mov EOL,#13 ; <= 4
L2050: pop acc ; get packet length
; if pktlen > 5 then CTL=asc(mid$(pktdat,5,1) else CTL="#"
cjne a,#5,L2052
L2052: jc L2054
mov dpl,#5
movx a,@dptr
mov CTL,a
sjmp L2070
L2054: mov CTL,#'#'
;
L2070: mov TYP,#'Y'
call send ; send local parameters
;=========================================
; get a File Header packet. If a B packet comes, we're all done
L3000: call getvp
mov a,TYP
cjne a,#'B',L3030
call sakn ; send acknowledge
jmp L9900
L3030: cjne a,#'F',L3035
sjmp L3040
L3035: mov dptr,#GDA
mov a,TYP
movx @dptr,a
inc dptr
clr a
movx @dptr,a
call strcat
db ' Packet in F State',0
jmp L9500
L3040: call fopen ; open the file
L3060: call sakn ; send acknowledge
;=========================================
; get data packets. If a Z packet comes, the file is complete.
L4000: call getvp
L4020: mov a,TYP
cjne a,#'Z',L4030
call fclose ; close the file
call sakn ; send acknowledge
jmp L3000
L4030: cjne a,#'D',L4035
sjmp L4040 ; we have data !
L4035: mov dptr,#GDA
mov a,TYP
movx @dptr,a
inc dptr
clr a
movx @dptr,a
call strcat
db ' Packet in D State',0
jmp L9500
L4040: call fwrite ; write to file
L4060: call sakn ; send acknowledge
L4070: jmp L4000
; Error handler
L9000:
;=========================================
; Error packet sender
L9500: mov dptr,#GDA
call strlen
mov TYP,#'E'
call spack ; send packet
; Normal exit point
L9900: call fclose
jmp sys_warm
;
;=========================================
;
$include(i51data.asm) ; ram data
;
end