mirror of
https://github.com/erkyrath/infocom-zcode-terps.git
synced 2026-02-09 09:41:46 +00:00
178 lines
1.8 KiB
NASM
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
|