1126 lines
14 KiB
Z80 Assembly
1126 lines
14 KiB
Z80 Assembly
; Z80 to 8086 Translator version 1.0
|
|
; Runs on the Z80 under CP/M
|
|
; by Tim Paterson
|
|
;
|
|
ORG 100H
|
|
EOF: EQU 1AH ;End of file
|
|
EOL: EQU 0DH
|
|
FCB: EQU 5CH
|
|
SYSTEM: EQU 5
|
|
OPEN: EQU 15
|
|
CLOSE: EQU 16
|
|
SETDMA: EQU 26
|
|
CREATE: EQU 22
|
|
DELETE: EQU 19
|
|
READ: EQU 20
|
|
WRITE: EQU 21
|
|
PRNBUF: EQU 9
|
|
LD SP,STACK
|
|
LD DE,HEADER
|
|
LD C,9
|
|
CALL SYSTEM
|
|
LD HL,FCB+12
|
|
XOR A
|
|
LD B,4
|
|
CLRFCB:
|
|
LD (HL),A
|
|
INC HL
|
|
DJNZ CLRFCB
|
|
LD (FCB+32),A
|
|
LD HL,FCB
|
|
LD DE,PUTFCB
|
|
LD BC,16
|
|
LDIR
|
|
LD (PUTFCB+32),A
|
|
LD HL,'A'+3800H ;"A8"
|
|
LD (PUTFCB+9),HL
|
|
LD A,'6'
|
|
LD (PUTFCB+11),A
|
|
LD DE,FCB
|
|
LD C,OPEN
|
|
CALL SYSTEM
|
|
INC A
|
|
LD DE,NOFILE
|
|
JR Z,ABORTJ
|
|
LD DE,PUTFCB
|
|
LD C,DELETE
|
|
CALL SYSTEM
|
|
LD DE,PUTFCB
|
|
LD C,CREATE
|
|
CALL SYSTEM
|
|
INC A
|
|
LD DE,NOROOM
|
|
ABORTJ:
|
|
JR Z,ABORT
|
|
LD DE,PUTFCB
|
|
LD C,OPEN
|
|
CALL SYSTEM
|
|
LD HL,PUTBUF
|
|
LD (PUTPT),HL
|
|
LD HL,GETBUF+80H
|
|
LD (GETPT),HL
|
|
TRANLN:
|
|
XOR A
|
|
LD (OP1),A
|
|
LD (OP2),A
|
|
LD HL,OPCODE
|
|
CALL LOAD
|
|
LD HL,OP1
|
|
CALL GETOP
|
|
LD (HL),0
|
|
LD HL,OP2
|
|
CALL GETOP
|
|
DOLIN:
|
|
LD (HL),0
|
|
CALL FINDOP
|
|
ENLIN:
|
|
LD SP,STACK
|
|
LD A,(CHAR)
|
|
CP ';'
|
|
JR NZ,NOCOM
|
|
LD A,9
|
|
CALL PUTCH
|
|
LD A,';'
|
|
NOCOM:
|
|
CALL PUTCH
|
|
PUTLIN:
|
|
CP EOF
|
|
JR Z,END
|
|
CALL GETCH
|
|
CALL PUTCH
|
|
CP 10
|
|
JR NZ,PUTLIN
|
|
JR TRANLN
|
|
END:
|
|
LD B,127
|
|
LD A,1AH
|
|
FILL:
|
|
CALL PUTCH
|
|
DJNZ FILL
|
|
LD DE,PUTFCB
|
|
LD C,CLOSE
|
|
CALL SYSTEM
|
|
LD DE,ENDMES
|
|
ABORT:
|
|
LD C,PRNBUF
|
|
CALL SYSTEM
|
|
JP 0
|
|
DELIM:
|
|
CALL GETCH
|
|
DELCHK:
|
|
CP EOL
|
|
JR Z,DOLIN
|
|
CP EOF
|
|
JR Z,DOLIN
|
|
CP ';'
|
|
JR Z,DOLIN
|
|
CP ' '
|
|
RET Z
|
|
CP ':'
|
|
RET Z
|
|
CP ','
|
|
RET Z
|
|
CP 9
|
|
RET
|
|
HEX:
|
|
AND 0FH
|
|
ADD A,90H
|
|
DAA
|
|
ADC A,40H
|
|
DAA
|
|
PUTCH:
|
|
PUSH HL
|
|
PUSH DE
|
|
PUSH BC
|
|
PUSH AF
|
|
AND 7FH
|
|
LD HL,(PUTPT)
|
|
LD (HL),A
|
|
INC HL
|
|
LD (PUTPT),HL
|
|
PUSH DE
|
|
PUSH HL
|
|
LD DE,PUTBUF+80H
|
|
OR A
|
|
SBC HL,DE
|
|
POP HL
|
|
POP DE
|
|
JR NZ,POPRET
|
|
LD DE,PUTBUF
|
|
LD (PUTPT),DE
|
|
LD C,SETDMA
|
|
CALL SYSTEM
|
|
LD DE,PUTFCB
|
|
LD C,WRITE
|
|
CALL SYSTEM
|
|
OR A
|
|
LD DE,WRTERR
|
|
JR NZ,ABORT
|
|
POPRET:
|
|
POP AF
|
|
NOTAF:
|
|
POP BC
|
|
POP DE
|
|
POP HL
|
|
RET
|
|
;
|
|
; Get character from source file.
|
|
;
|
|
GETCH:
|
|
PUSH HL
|
|
PUSH DE
|
|
PUSH BC
|
|
LD HL,(GETPT) ; Get buffer pointer.
|
|
PUSH DE
|
|
PUSH HL
|
|
LD DE,GETBUF+80H
|
|
OR A
|
|
SBC HL,DE ; Past end-of-buffer?
|
|
POP HL
|
|
POP DE
|
|
JR NZ,GETIT ; Jump if not.
|
|
LD DE,GETBUF ; Set `DMA address'.
|
|
LD C,SETDMA
|
|
CALL SYSTEM
|
|
LD DE,FCB ; Read the next record from source file.
|
|
LD C,READ
|
|
CALL SYSTEM
|
|
OR A ; Entire record read OK?
|
|
LD A,EOF ; Force end-of-file character in case
|
|
JR NZ,TESEND ; there is nothing in the record.
|
|
LD HL,GETBUF ; Reset buffer pointer.
|
|
GETIT:
|
|
LD A,(HL) ; Get next character from buffer.
|
|
INC HL ; Point to next character.
|
|
LD (GETPT),HL ; Save new pointer.
|
|
TESEND:
|
|
LD (CHAR),A
|
|
JR NOTAF ; Pop registers and return.
|
|
LOAD:
|
|
CALL DELIM
|
|
JR Z,LOADOP
|
|
EATLAB:
|
|
CALL PUTCH
|
|
CALL DELIM
|
|
JR NZ,EATLAB
|
|
ENLAB:
|
|
LD A,':'
|
|
CALL PUTCH
|
|
LOADOP:
|
|
LD HL,OPCODE
|
|
EATEM:
|
|
CALL DELIM
|
|
JR Z,EATEM
|
|
LOADLP:
|
|
CALL IDCHK
|
|
JP C,OPERR
|
|
LD (HL),A
|
|
INC HL
|
|
CALL DELIM
|
|
JR NZ,LOADLP
|
|
LD (HL),0
|
|
CP ':'
|
|
RET NZ
|
|
LD HL,OPCODE
|
|
CALL TRANS
|
|
JR ENLAB
|
|
GETOP:
|
|
XOR A
|
|
EX AF,AF'
|
|
GETLP:
|
|
CALL DELIM
|
|
JR Z,GETLP
|
|
OPCHAR:
|
|
CP '('
|
|
JR NZ,NOTLEF
|
|
EX AF,AF'
|
|
INC A
|
|
EX AF,AF'
|
|
LD (HL),'['
|
|
JR NEXCH
|
|
NOTLEF:
|
|
CP ')'
|
|
JR NZ,NOTRIT
|
|
EX AF,AF'
|
|
DEC A
|
|
EX AF,AF'
|
|
LD (HL),']'
|
|
JR NEXCH
|
|
NOTRIT:
|
|
LD (HL),A
|
|
CP ''''
|
|
JR Z,EATQUO
|
|
CALL IDCHK
|
|
JR NC,GETID
|
|
NEXCH:
|
|
INC HL
|
|
CALL GETCH
|
|
IDRET:
|
|
CALL DELCHK
|
|
JR NZ,OPCHAR
|
|
CP ' '
|
|
JR Z,OPCHAR
|
|
RET
|
|
EATQUO:
|
|
INC HL
|
|
CALL GETCH
|
|
LD (HL),A
|
|
CP ';'
|
|
CALL NZ,DELCHK
|
|
CP ''''
|
|
JR NZ,EATQUO
|
|
JR NEXCH
|
|
IDCHK:
|
|
CP '0'
|
|
RET C
|
|
CP '9'+1
|
|
CCF
|
|
RET NC
|
|
CP 40H
|
|
RET C
|
|
AND 5FH
|
|
CP 'A'
|
|
RET C
|
|
CP 'Z'+1
|
|
CCF
|
|
RET
|
|
GETID:
|
|
LD (HL),A
|
|
LD B,1
|
|
LODID:
|
|
INC HL
|
|
CALL GETCH
|
|
CALL IDCHK
|
|
JR C,RWCHK
|
|
LD (HL),A
|
|
INC B
|
|
JR LODID
|
|
RWCHK:
|
|
PUSH AF
|
|
PUSH HL
|
|
DEC HL
|
|
DEC B
|
|
LD E,B
|
|
JR Z,LOOKRW
|
|
LD E,(HL)
|
|
DEC HL
|
|
DJNZ NORW
|
|
LOOKRW:
|
|
LD A,(HL)
|
|
LD D,A
|
|
PUSH HL
|
|
LD HL,RWTAB
|
|
LD BC,LENRW
|
|
RWLK:
|
|
CPIR
|
|
JR NZ,NOTRW
|
|
PUSH HL
|
|
PUSH BC
|
|
LD BC,LENRW-1
|
|
ADD HL,BC
|
|
LD A,(HL)
|
|
POP BC
|
|
POP HL
|
|
CP E
|
|
JR Z,HAVRW
|
|
LD A,C
|
|
OR A
|
|
LD A,D
|
|
JR NZ,RWLK
|
|
NOTRW:
|
|
POP HL
|
|
NORW:
|
|
POP HL
|
|
ENDRW:
|
|
POP AF
|
|
JR IDRET
|
|
HAVRW:
|
|
POP HL
|
|
INC C
|
|
LD (HL),C
|
|
INC HL
|
|
POP DE
|
|
PUSH HL
|
|
LD A,C
|
|
LD HL,IXSI
|
|
CP RSI
|
|
JR Z,IXIY
|
|
LD HL,IYDI
|
|
CP RDI
|
|
JR NZ,NORW
|
|
IXIY:
|
|
EX AF,AF'
|
|
JR Z,NOTENC
|
|
EX AF,AF'
|
|
CALL OUTSTR
|
|
JR NORW
|
|
NOTENC:
|
|
EX AF,AF'
|
|
POP HL
|
|
DEC HL
|
|
LD (HL),'['
|
|
INC HL
|
|
ADD A,RIX-1
|
|
LD (HL),A
|
|
INC HL
|
|
LD (HL),']'
|
|
INC HL
|
|
JR ENDRW
|
|
RET
|
|
FINDOP:
|
|
LD HL,OPCODE
|
|
LD BC,5
|
|
XOR A
|
|
CPIR
|
|
JR NZ,OPERR
|
|
LD A,4
|
|
SUB C
|
|
RET Z
|
|
DEC A
|
|
JR Z,OPERR
|
|
LD C,A
|
|
DEC HL
|
|
DEC HL
|
|
SET 7,(HL)
|
|
LD A,(OPCODE)
|
|
SUB 'A'
|
|
JR C,OPERR
|
|
ADD A,A
|
|
LD E,A
|
|
LD D,0
|
|
LD HL,OPTAB
|
|
ADD HL,DE
|
|
LD E,(HL)
|
|
INC HL
|
|
LD D,(HL)
|
|
EX DE,HL
|
|
LD A,9
|
|
CALL PUTCH
|
|
LOOKOP:
|
|
LD A,(HL)
|
|
OR A
|
|
JR Z,OPERR
|
|
LD DE,OPCODE+1
|
|
LD B,C
|
|
LOOKLP:
|
|
LD A,(DE)
|
|
CP (HL)
|
|
JR NZ,NEXOP
|
|
INC DE
|
|
INC HL
|
|
DJNZ LOOKLP
|
|
LD E,(HL)
|
|
INC HL
|
|
LD D,(HL)
|
|
INC HL
|
|
PUSH DE
|
|
LD E,(HL)
|
|
INC HL
|
|
LD D,(HL)
|
|
LD H,D
|
|
LD L,E
|
|
POP DE
|
|
PUSH DE
|
|
POP IX
|
|
JP (IX)
|
|
NEXOP:
|
|
BIT 7,(HL)
|
|
INC HL
|
|
JR Z,NEXOP
|
|
LD DE,4
|
|
ADD HL,DE
|
|
JR LOOKOP
|
|
OPERR:
|
|
LD HL,OPCODE
|
|
CALL OUTSTR
|
|
CALL TWOOPS
|
|
LD HL,OPCDER
|
|
CALL OUTSTR
|
|
JP ENLIN
|
|
LD:
|
|
CALL OUTSTR
|
|
LD HL,OP1
|
|
LD DE,OP2+1
|
|
CALL LCHECK
|
|
JP Z,LDAX
|
|
EX DE,HL
|
|
DEC HL
|
|
INC DE
|
|
CALL LCHECK
|
|
JP Z,STAX
|
|
;If immediate move, check for byte memory reference
|
|
LD A,(OP1)
|
|
CP '[' ;Memory reference?
|
|
JR NZ,TWOOPS
|
|
LD A,(OP1+1) ;Referencing IX as a word?
|
|
CP RIX
|
|
JR Z,TWOOPS
|
|
CP RIY
|
|
JR Z,TWOOPS
|
|
LD A,(OP2)
|
|
CP 20H ;Could be immediate?
|
|
LD A,9
|
|
CALL NC,BFLAG ;Add "B,"
|
|
CALL TRAN1
|
|
JR TRNOP2
|
|
TWOOPS:
|
|
CALL TRNOP1
|
|
TRNOP2:
|
|
LD A,','
|
|
TRAN2:
|
|
LD HL,OP2
|
|
PTRANS:
|
|
CALL PUTCH
|
|
TRANS:
|
|
LD A,(HL)
|
|
INC HL
|
|
OR A
|
|
RET Z
|
|
CALL TRNTOK
|
|
JR TRANS
|
|
LCHECK:
|
|
LD A,(HL)
|
|
CP RAL
|
|
RET NZ
|
|
LD A,(DE)
|
|
CP RCX
|
|
RET Z
|
|
CP RDX
|
|
RET
|
|
|
|
ONEOP:
|
|
CALL OUTSTR
|
|
|
|
TRNOP1:
|
|
LD A,9
|
|
TRAN1:
|
|
LD HL,OP1
|
|
JR PTRANS
|
|
IN:
|
|
LD A,(OP1)
|
|
CP RAL
|
|
EX DE,HL
|
|
LD HL,OP2
|
|
JR Z,GETPORT
|
|
LD HL,SAVEAX
|
|
CALL OUTSTR
|
|
CALL OUTSTR
|
|
LD HL,OP2
|
|
CALL GETPORT
|
|
LD HL,MOV0
|
|
CALL ONEOP
|
|
LD A,','
|
|
CALL PUTCH
|
|
LD A,RAL
|
|
CALL TRNTOK
|
|
IODONE:
|
|
LD HL,RESTAX
|
|
JP OUTSTR
|
|
OUT:
|
|
LD A,(OP2)
|
|
EX DE,HL
|
|
LD HL,OP1
|
|
CP RAL
|
|
JR Z,GETOUT
|
|
LD HL,SAVEAX
|
|
CALL OUTSTR
|
|
LD HL,MOVAL
|
|
CALL OUTSTR
|
|
CALL TRNOP2
|
|
LD HL,CRLFTB
|
|
CALL OUTSTR
|
|
LD HL,OP1
|
|
CALL GETOUT
|
|
JR IODONE
|
|
GETPORT:
|
|
LD A,(HL)
|
|
CP '['
|
|
JR NZ,NOBRAK
|
|
INC HL
|
|
PUSH HL
|
|
LD BC,80
|
|
LD A,']'
|
|
CPIR
|
|
DEC HL
|
|
LD (HL),0
|
|
POP HL
|
|
NOBRAK:
|
|
LD A,(HL)
|
|
CP RGCL
|
|
JR NZ,FIXPOR
|
|
LD HL,IO1
|
|
CALL OUTSTR
|
|
EX DE,HL
|
|
CALL OUTSTR
|
|
LD A,RDX
|
|
CALL TRNTOK
|
|
LD HL,IO2
|
|
JR OUTSTR
|
|
GETOUT:
|
|
CALL GETPORT
|
|
RET NC
|
|
LD HL,BADIO
|
|
JR OUTSTR
|
|
FIXPOR:
|
|
EX DE,HL
|
|
CALL OUTSTR
|
|
EX DE,HL
|
|
JP TRANS
|
|
LDAX:
|
|
LD HL,LDAX1
|
|
LSAX:
|
|
CALL OUTSTR
|
|
LD A,(DE)
|
|
CALL TRNTOK
|
|
JR OUTSTR
|
|
STAX:
|
|
LD HL,STAX1
|
|
JR LSAX
|
|
TRNTOK:
|
|
CP ' '
|
|
JP NC,PUTCH
|
|
PUSH HL
|
|
PUSH BC
|
|
LD C,A
|
|
LD B,0
|
|
LD HL,TOKTAB-2
|
|
ADD HL,BC
|
|
ADD HL,BC
|
|
LD A,(HL)
|
|
CALL PUTCH
|
|
INC HL
|
|
LD A,(HL)
|
|
POP BC
|
|
POP HL
|
|
OR A
|
|
RET Z
|
|
JP PUTCH
|
|
PUSH:
|
|
LD DE,PUSHAF
|
|
JR AFCHK
|
|
POP:
|
|
LD DE,POPAF
|
|
AFCHK:
|
|
LD A,(OP1)
|
|
CP RAX
|
|
JP NZ,ONEOP
|
|
EX DE,HL
|
|
OUTSTR:
|
|
LD A,(HL)
|
|
OR A
|
|
CALL Z,NEWOP
|
|
CALL PUTCH
|
|
INC HL
|
|
ADD A,A
|
|
JR NC,OUTSTR
|
|
RET
|
|
NEWOP:
|
|
LD A,13
|
|
CALL PUTCH
|
|
LD A,10
|
|
CALL PUTCH
|
|
LD A,9
|
|
RET
|
|
LDDR:
|
|
CALL OUTSTR
|
|
LD HL,BLMOVE
|
|
JR OUTSTR
|
|
CPDR:
|
|
CALL OUTSTR
|
|
LD HL,CMPREP
|
|
JR OUTSTR
|
|
ADD:
|
|
LD A,(OP1)
|
|
CP RBX
|
|
JR Z,DAD
|
|
ARITH:
|
|
CALL OUTSTR
|
|
LD A,(OP2)
|
|
OR A
|
|
JP NZ,TWOOPS
|
|
LD A,9
|
|
CALL PUTCH
|
|
LD A,RAL
|
|
CALL TRNTOK
|
|
LD A,','
|
|
JP TRAN1
|
|
ACCUM:
|
|
CALL OUTSTR
|
|
LD A,9
|
|
CALL PUTCH
|
|
LD A,RAL
|
|
JP TRNTOK
|
|
JP ONEOP
|
|
|
|
DAD:
|
|
LD HL,DAD1
|
|
CALL OUTSTR
|
|
CALL TWOOPS
|
|
LD HL,DAD2
|
|
JR OUTSTR
|
|
|
|
INCDEC:
|
|
LD A,(OP1)
|
|
CP RCX+1 ;16-bit?
|
|
JP NC,ONEOP
|
|
LD HL,LAHF
|
|
CALL OUTSTR
|
|
EX DE,HL
|
|
LD HL,OPCODE-1
|
|
CALL ONEOP
|
|
EX DE,HL
|
|
JR OUTSTR
|
|
JUMP:
|
|
LD A,(OP1)
|
|
CP '['
|
|
JR NZ,DIRECT
|
|
LD A,(OP1+1)
|
|
LD (OP1),A
|
|
XOR A
|
|
LD (OP1+1),A
|
|
DIRECT:
|
|
LD A,(OP2)
|
|
OR A
|
|
JP Z,ONEOP
|
|
CALL FIXCON
|
|
LD HL,OP2
|
|
OUTCON:
|
|
LD B,A
|
|
LD A,'J'
|
|
CALL PUTCH
|
|
LD A,B
|
|
CALL TRNTOK
|
|
LD A,9
|
|
CALL PTRANS
|
|
LD A,B
|
|
CP ODDPAR
|
|
LD HL,WARNPA
|
|
JP Z,OUTSTR
|
|
CP EVEPAR
|
|
JP Z,OUTSTR
|
|
RET
|
|
FIXCON:
|
|
LD A,(OP1)
|
|
CP RGCL
|
|
RET NZ
|
|
LD A,CY
|
|
RET
|
|
RETURN:
|
|
LD A,(OP1)
|
|
OR A
|
|
JP Z,OUTSTR
|
|
LD HL,'R'+4500H ;"RE"
|
|
LD (OP2),HL
|
|
LD HL,'T'
|
|
LD (OP2+2),HL
|
|
JR DIRECT
|
|
JP ONEOP
|
|
DOCALL:
|
|
LD A,(OP2)
|
|
OR A
|
|
JP Z,ONEOP
|
|
CALL FIXCON
|
|
DEC A
|
|
XOR 1
|
|
INC A
|
|
LD HL,LABEL
|
|
CALL OUTCON
|
|
LD HL,OPCODE-1
|
|
CALL OUTSTR
|
|
LD A,(OP2)
|
|
OR A
|
|
LD A,9
|
|
LD HL,OP2
|
|
CALL NZ,PTRANS
|
|
LD HL,CRLF
|
|
CALL OUTSTR
|
|
CALL TRANS
|
|
CALL OUTSTR
|
|
LD HL,LABEL+4
|
|
NEXLAB:
|
|
INC (HL)
|
|
LD A,(HL)
|
|
CP '9'+1
|
|
RET NZ
|
|
LD (HL),'0'
|
|
DEC HL
|
|
JR NEXLAB
|
|
EX:
|
|
LD A,(OP1)
|
|
CP RAX
|
|
JP Z,OUTSTR
|
|
LD A,(OP1+1)
|
|
CP STP
|
|
JR Z,XTHL
|
|
LD HL,XCHG
|
|
CALL OUTSTR
|
|
JP TWOOPS
|
|
XTHL:
|
|
LD HL,XTHL1
|
|
CALL OUTSTR
|
|
CALL TRNOP2
|
|
LD HL,XTHL2
|
|
JP OUTSTR
|
|
PSEUDO:
|
|
CALL ONEOP
|
|
LD A,(OP2)
|
|
OR A
|
|
RET Z
|
|
JP TRNOP2
|
|
RET
|
|
BITSET:
|
|
LD C,0
|
|
JR SETRES
|
|
RES:
|
|
LD C,-1
|
|
SETRES:
|
|
CALL OUTSTR
|
|
PUSH HL
|
|
LD A,(OP2)
|
|
CP '['
|
|
LD A,9
|
|
CALL Z,BFLAG
|
|
CALL TRAN2
|
|
LD A,','
|
|
CALL PUTCH
|
|
CALL GETBIT
|
|
LD HL,BITERR
|
|
CALL C,OUTSTR
|
|
POP HL
|
|
JP OUTSTR
|
|
|
|
BFLAG:
|
|
CALL PUTCH
|
|
LD A,'B'
|
|
CALL PUTCH
|
|
LD A,','
|
|
RET
|
|
|
|
GETBIT:
|
|
LD A,(OP1+1)
|
|
OR A
|
|
SCF
|
|
RET NZ
|
|
LD A,(OP1)
|
|
SUB '0'
|
|
RET C
|
|
CP 8
|
|
CCF
|
|
RET C
|
|
LD B,A
|
|
INC B
|
|
XOR A
|
|
SCF
|
|
SHFT:
|
|
RLA
|
|
DJNZ SHFT
|
|
XOR C
|
|
LD B,A
|
|
LD A,'0'
|
|
CALL PUTCH
|
|
LD A,B
|
|
RRA
|
|
RRA
|
|
RRA
|
|
RRA
|
|
CALL HEX
|
|
LD A,B
|
|
CALL HEX
|
|
LD A,'H'
|
|
JP PUTCH
|
|
OPTAB:
|
|
DW AOPS,BOPS,COPS,DOPS,EOPS
|
|
DW FOPS,GOPS,HOPS,IOPS,JOPS
|
|
DW KOPS,LOPS,MOPS,NOPS,OOPS
|
|
DW POPS,QOPS,ROPS,SOPS,TOPS
|
|
DW UOPS,VOPS,WOPS,XOPS,YOPS
|
|
DW ZOPS
|
|
AOPS:
|
|
DM 'DD'
|
|
DW ADD,OPCODE
|
|
DM 'DC'
|
|
DW ARITH,OPCODE
|
|
DM 'ND'
|
|
DW ARITH,OPCODE
|
|
DB 0
|
|
BOPS:
|
|
DM 'IT'
|
|
DW BITSET,TESBIT
|
|
DB 0
|
|
COPS:
|
|
DM 'ALL'
|
|
DW DOCALL,OPCODE
|
|
DM 'P'
|
|
DW ARITH,CMP
|
|
DM 'PL'
|
|
DW ACCUM,NOT
|
|
DM 'PIR'
|
|
DW OUTSTR,CPIR
|
|
DM 'PDR'
|
|
DW CPDR,DOWN
|
|
DM 'CF'
|
|
DW OUTSTR,CMC
|
|
DB 0
|
|
DOPS:
|
|
DM 'EC'
|
|
DW INCDEC,OPCODE
|
|
DM 'JNZ'
|
|
DW ONEOP,DJNZ
|
|
DM 'AA'
|
|
DW OUTSTR,OPCODE
|
|
DM 'I'
|
|
DW OUTSTR,OPCODE
|
|
DM 'W'
|
|
DW PSEUDO,OPCODE
|
|
DM 'B'
|
|
DW PSEUDO,OPCODE
|
|
DM 'M'
|
|
DW PSEUDO,OPCODE
|
|
DM 'S'
|
|
DW ONEOP,OPCODE
|
|
DB 0
|
|
EOPS:
|
|
DM 'X'
|
|
DW EX,EXAF
|
|
DM 'I'
|
|
DW OUTSTR,OPCODE
|
|
DM 'XX'
|
|
DW OUTSTR,EXX
|
|
DM 'QU'
|
|
DW ONEOP,OPCODE
|
|
DM 'NDIF'
|
|
DW OUTSTR,OPCODE
|
|
DB 0
|
|
FOPS:
|
|
DB 0
|
|
GOPS:
|
|
DB 0
|
|
HOPS:
|
|
DM 'ALT'
|
|
DW OUTSTR,HLT
|
|
DB 0
|
|
IOPS:
|
|
DM 'NC'
|
|
DW INCDEC,OPCODE
|
|
DM 'N'
|
|
DW IN,INB
|
|
DM 'F'
|
|
DW ONEOP,OPCODE
|
|
DB 0
|
|
JOPS:
|
|
DM 'R'
|
|
DW JUMP,JR
|
|
DM 'P'
|
|
DW JUMP,JMP
|
|
DB 0
|
|
KOPS:
|
|
DB 0
|
|
LOPS:
|
|
DM 'D'
|
|
DW LD,MOV
|
|
DM 'DIR'
|
|
DW OUTSTR,UP
|
|
DM 'DDR'
|
|
DW LDDR,DOWN
|
|
DB 0
|
|
MOPS:
|
|
DB 0
|
|
NOPS:
|
|
DM 'EG'
|
|
DW ACCUM,OPCODE
|
|
DB 0
|
|
OOPS:
|
|
DM 'R'
|
|
DW ARITH,OPCODE
|
|
DM 'UT'
|
|
DW OUT,OUTB
|
|
DM 'RG'
|
|
DW ONEOP,OPCODE
|
|
DB 0
|
|
POPS:
|
|
DM 'OP'
|
|
DW POP,OPCODE
|
|
DM 'USH'
|
|
DW PUSH,OPCODE
|
|
DB 0
|
|
QOPS:
|
|
DB 0
|
|
ROPS:
|
|
DM 'ET'
|
|
DW RETURN,OPCODE
|
|
DM 'LA'
|
|
DW ACCUM,RCL
|
|
DM 'RA'
|
|
DW ACCUM,RCR
|
|
DM 'LCA'
|
|
DW ACCUM,ROL
|
|
DM 'RCA'
|
|
DW ACCUM,ROR
|
|
DM 'L'
|
|
DW ONEOP,RCL
|
|
DM 'R'
|
|
DW ONEOP,RCR
|
|
DM 'LC'
|
|
DW ONEOP,ROL
|
|
DM 'RC'
|
|
DW ONEOP,ROR
|
|
DM 'ES'
|
|
DW RES,RESBIT
|
|
DM 'ETI'
|
|
DW OUTSTR,IRET
|
|
DM 'ETN'
|
|
DW OUTSTR,IRET
|
|
DM 'ST'
|
|
DW ONEOP,CALL
|
|
DB 0
|
|
SOPS:
|
|
DM 'UB'
|
|
DW ARITH,OPCODE
|
|
DM 'BC'
|
|
DW ARITH,SBB
|
|
DM 'LA'
|
|
DW ONEOP,SAL
|
|
DM 'RA'
|
|
DW ONEOP,SAR
|
|
DM 'RL'
|
|
DW ONEOP,SHR
|
|
DM 'CF'
|
|
DW OUTSTR,STC
|
|
DM 'ET'
|
|
DW BITSET,SETBIT
|
|
DB 0
|
|
TOPS:
|
|
DB 0
|
|
UOPS:
|
|
DB 0
|
|
VOPS:
|
|
DB 0
|
|
WOPS:
|
|
DB 0
|
|
XOPS:
|
|
DM 'OR'
|
|
DW ARITH,OPCODE
|
|
DB 0
|
|
YOPS:
|
|
DB 0
|
|
ZOPS:
|
|
DB 0
|
|
LDAX1: DM 9,'SI,'
|
|
DM 0,'LODB'
|
|
STAX1: DM 9,'DI,'
|
|
DM 0,'STOB'
|
|
PUSHAF: DB 'LAHF',0,'XCHG',9,'AH,AL',0,'PUSH',9,'AX',0
|
|
DM 'XCHG',9,'AH,AL'
|
|
POPAF: DM 'POP',9,'AX',0,'XCHG',9,'AH,AL',0,'SAHF'
|
|
DOWN: DM 'DOWN'
|
|
UP: DB 'UP'
|
|
BLMOVE: DB 0,'MOV',9,'SI,BX',0,'MOV',9,'DI,DX'
|
|
DB 0,'REP',0,'MOVB',0,'MOV',9,'DX,DI'
|
|
DM 0,'MOV',9,'BX,SI'
|
|
CPIR: DB 'UP'
|
|
CMPREP: DB 0,'MOV',9,'DI,BX',0,'REPNZ',0,'SCAB'
|
|
DM 0,'MOV',9,'BX,DI'
|
|
DAD1: DM 'LAHF',0,'ADD'
|
|
DAD2: DM 0,'RCR',9,'SI',0,'SAHF',0,'RCL',9,'SI'
|
|
LAHF: DM 'LAHF'
|
|
DM 0,'SAHF'
|
|
DJNZ: DB 'DEC',9,'CH',13,10
|
|
DB '; *** WARNING: DJNZ does not affect flags - DEC does.',0
|
|
DM 'JNZ'
|
|
WARNPA: DM 13,10,'; *** WARNING: Parity flag not always same as Z80.'
|
|
IO1: DB 'MOV',9,'DI,DX',0,'MOV',9,'DL,CL',0
|
|
DM 'XOR',9,'DH,DH',13,10,9
|
|
IO2: DM 0,'MOV',9,'DX,DI'
|
|
BADIO: DM 13,10,'; *** WARNING: Flags not same as Z80.'
|
|
BITERR: DM 13,10,' *** ERROR: Cannot determine bit number.'
|
|
SETBIT: DM 'LAHF',0,'OR'
|
|
DM 0,'SAHF'
|
|
RESBIT: DM 'LAHF',0,'AND'
|
|
DM 0,'SAHF'
|
|
TESBIT: DM 'RCR',9,'SI',0,'TEST'
|
|
DM 0,'RCL',9,'SI'
|
|
XTHL1: DM 'POP',9,'SI',0,'XCHG',9,'SI'
|
|
XTHL2: DM 0,'PUSH',9,'SI'
|
|
EXX: DB 'XCHG',9,'BX,[HL]',0,'XCHG',9,'DX,[DE]',0
|
|
DM 'XCHG',9,'CX,[BC]'
|
|
EXAF: DM 'LAHF',0,'XCHG',9,'AX,BP',0,'SAHF'
|
|
MOVAL: DM 0,'MOV',9,'AL'
|
|
IXSI: DM 9,'MOV',9,'SI,[IX]',13,10
|
|
IYDI: DM 9,'MOV',9,'DI,[IY]',13,10
|
|
RESTAX: DB 0
|
|
SAVEAX: DM 'XCHG',9,'AX,SI'
|
|
CRLFTB: DM 13,10,9
|
|
INB: DM 'INB',9
|
|
OUTB: DM 'OUTB',9
|
|
XCHG: DM 'XCHG'
|
|
JMP: DM 'JMP'
|
|
JR: DM 'JP'
|
|
RCL: DM 'RCL'
|
|
RCR: DM 'RCR'
|
|
ROL: DM 'ROL'
|
|
ROR: DM 'ROR'
|
|
SAL: DM 'SAL'
|
|
SAR: DM 'SAR'
|
|
SHR: DM 'SHR'
|
|
STC: DM 'STC'
|
|
IRET: DM 'IRET'
|
|
HLT: DM 'HLT'
|
|
CMC: DM 'CMC'
|
|
NOT: DM 'NOT'
|
|
MOV0: DB 0
|
|
MOV: DM 'MOV'
|
|
CMP: DM 'CMP'
|
|
SBB: DM 'SBB'
|
|
CALL: DM 'CALL'
|
|
TOKTAB:
|
|
DB 'SIDI'
|
|
DB 'PEPOS',0,'NSNZZ',0,'NCC',0
|
|
DB 'AXSPBXDXCX'
|
|
DB 'BLBHDLDHCLCHALIXIY'
|
|
RWTAB:
|
|
DB 'ABCDEHLBDHSACNZNPMPPII'
|
|
LENRW: EQU $-RWTAB
|
|
DB 0,0,0,0,0,0,0,'CELPF',0,'C',0,'Z',0,0,'OEYX'
|
|
HEADER: DB 13,10,'Z80 to 8086 Translator version 1.0',13,10,'$'
|
|
NOROOM: DB 13,10,'Insufficient directory space to create file',13,10,'$'
|
|
NOFILE: DB 13,10,'File not found',13,10,'$'
|
|
ENDMES: DB 13,10,'Translation complete',13,10,'$'
|
|
WRTERR: DB 13,10,'Out of disk space',13,10,'$'
|
|
OPCDER: DM 13,10,'*** Opcode Error '
|
|
CRLF: DM 13,10
|
|
LABEL: DB 'L0000',0
|
|
DM ':',9
|
|
PUTPT: DS 2
|
|
GETPT: DS 2
|
|
CHAR: DS 1
|
|
DB 0
|
|
OPCODE: DS 80
|
|
OP1: DS 80
|
|
OP2: DS 80
|
|
PUTBUF: DS 128
|
|
GETBUF: DS 128
|
|
PUTFCB: DS 33
|
|
DS 50
|
|
STACK: EQU $
|
|
ORG 1 ;This is really just for equates without EQU
|
|
RSI: DS 1
|
|
RDI: DS 1
|
|
ODDPAR: DS 1
|
|
EVEPAR: DS 1
|
|
DS 5 ;MINUS,PLUS,NOT ZERO,ZERO,NOT CARRY
|
|
CY: DS 1
|
|
RAX: DS 1
|
|
STP: DS 1
|
|
RBX: DS 1
|
|
RDX: DS 1
|
|
RCX: DS 1
|
|
RBL: DS 1
|
|
RBH: DS 1
|
|
RDL: DS 1
|
|
RDH: DS 1
|
|
RGCL: DS 1
|
|
RCH: DS 1
|
|
RAL: DS 1
|
|
RIX: DS 1
|
|
RIY: DS 1
|
|
|