Files
erkyrath.infocom-zcode-terps/cpm86/tftp.asm
Andrew Plotkin b642da811e Initial commit.
2023-11-16 18:19:54 -05:00

178 lines
1.8 KiB
NASM

ORG 100H
BDOS EQU 5H
FCB EQU 5CH
BUFF EQU 80H
COMIN EQU 3
COMOUT EQU 4
PSTRNG EQU 9
OPEN EQU 15
CLOSE EQU 16
DELETE EQU 19
READS EQU 20
WRITES EQU 21
MAKEF EQU 22
LPDL EQU 256
CMDBLK EQU 0
CMDACK EQU 2
CMDWAK EQU 3
CMDEOF EQU 4
CMDNAK EQU 5
START: LXI SP,PDL+LPDL
LXI D,FCB
MVI C,DELETE
CALL BDOS
LXI D,FCB
MVI C,MAKEF
CALL BDOS
LXI D,BADOPN
INR A
JZ FINISH
LOOP: CALL CMDGET
CPI CMDEOF
JZ EOF
CPI CMDBLK
JNZ LOOP
CALL GETWRD
SHLD COUNT
CALL GETWRD
LHLD COUNT
XCHG
LXI H,RBUF
LOOP1: CALL GETBYT
MOV M,A
INX H
DCX D
MOV A,D
ORA E
JNZ LOOP1
CALL GETWRD
PUSH H
LHLD COUNT
XCHG
LXI B,RBUF
LXI H,0
LOOP2: PUSH D
LDAX B
MVI D,0
MOV E,A
DAD D
POP D
INX B
DCX D
MOV A,D
ORA E
JNZ LOOP2
POP D
MOV A,D
CMP H
JNZ RETRAN
MOV A,E
CMP L
JNZ RETRAN
CALL WRTDSK
MVI B,CMDACK
CALL SNDCMD
JMP LOOP
RETRAN: LXI D,RETRNM
MVI C,PSTRNG
CALL BDOS
MVI B,CMDNAK
CALL SNDCMD
JMP LOOP
CMDGET: CALL GETBYT
ANI 7FH
CPI 7EH
JNZ CMDGET
JMP GETBYT
GETWRD: CALL GETBYT
MOV H,A
CALL GETBYT
MOV L,A
RET
GETBYT: MVI C,COMIN
PUSH B
PUSH D
PUSH H
CALL BDOS
POP H
POP D
POP B
RET
SNDCMD: MVI C,7EH
PUSH B
CALL SNDBYT
POP B
MOV C,B
SNDBYT: MOV E,C
MVI C,COMOUT
PUSH D
PUSH H
CALL BDOS
POP H
POP D
RET
EOF: LXI D,FCB
MVI C,CLOSE
CALL BDOS
MVI B,CMDACK
CALL SNDCMD
LXI D,GOOD
FINISH: MVI C,PSTRNG
CALL BDOS
JMP 0
WRTDSK: LXI D,RBUF
LXI H,BUFF
MVI C,128
CALL MOVIT
LXI D,FCB
MVI C,WRITES
CALL BDOS
LXI D,BADWRT
ORA A
JNZ FINISH
LXI D,RBUF+128
LXI H,BUFF
MVI C,128
CALL MOVIT
LXI D,FCB
MVI C,WRITES
CALL BDOS
LXI D,BADWRT
ORA A
JNZ FINISH
RET
MOVIT: LDAX D
MOV M,A
INX D
INX H
DCR C
JNZ MOVIT
RET
BADWRT: DB 0DH,0AH,'BAD WRITE$'
RETRNM: DB 0DH,0AH,'RETRANSMITTING$'
BADOPN: DB 0DH,0AH,'BAD OPEN$'
GOOD: DB 0DH,0AH,'COMPLETED$'
PDL: DS LPDL
COUNT: DW 0
RBUF: DS 256
END START