home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
CP/M
/
CPM_CDROM.iso
/
simtel
/
sigm
/
vols000
/
vol067
/
rez7-31.asm
< prev
next >
Wrap
Assembly Source File
|
1984-04-29
|
34KB
|
2,830 lines
TITLE 'Z-80 Disassembler for 8080A'
ORG 0100H
BDOS EQU 05H
CTLTBL EQU 1C00H
FCB EQU 5CH
STACK EQU 1BFDH
SYMTBL EQU 2200H
TBUF EQU 80H
;
START: CALL ENTRY
DB 'RESOURCE by Ward Christensen'
DB 0DH,0AH,'(AS OF 07/31/80)'
DB 0DH,0AH,'Z-80 Version 2'
DB 0DH,0AH,'$Copyright 1980'
ENTRY: POP D
MVI C,9
CALL BDOS
LXI H,0
DAD SP
SHLD STACK
LXI SP,STACK
CALL PRTSTR
DB 0DH,0AH,'Memory open to '
DB 0
LHLD 6
DCX H
CALL PRWORD
CALL CRLF
CALL CRLF
L0174: CALL INITBL
NXCMD: XRA A
STA WFIFLG
STA QUIFLG
LXI SP,STACK
CALL GTCMD
L0184: LXI H,CMDBUF+2
MOV A,M
CPI 0DH
JZ NXCMD
CPI ';'
JZ CMCMNT
CPI 'A'
JZ CMATMT
CPI 'B'
JZ CMBLD
CPI 'C'
JZ CMCTL
CPI 'D'
JZ CMDUMP
CPI 'E'
JZ CMENTR
CPI 'F'
JZ CMFIND
CPI 'K'
JZ CMKILL
CPI 'L'
JZ CMLIST
CPI 'O'
JZ CMOFST
CPI 'P'
JZ CMPRLG
CPI 'Q'
JZ CMQIET
CPI 'R'
JZ CMREAD
CPI 'S'
JZ CMSAVE
CPI 'T'
JZ CMTRIM
CPI 'U'
JZ CMUSEC
CPI 'X'
JZ CMPURG
CPI 'Z'
JZ CMEOF
CPI '?'
JZ CMSTTS
CMERR: XRA A
STA WFIFLG
STA QUIFLG
CALL PRTSTR
DB '?',0DH,0AH,0
JMP NXCMD
;
CMTRIM: LDA TRMFLG
CMA
STA TRMFLG
ORA A
JZ TRMOF
CALL PRTSTR
DB 'Trim On',0DH,0AH,0
JMP NXCMD
;
TRMOF: CALL PRTSTR
DB 'Trim Off',0DH,0AH,0
JMP NXCMD
;
CMPURG: CALL PRTSTR
DB 'Y/N purge all symbols & '
DB 'CTL?',0
CALL GTCMD
LDA CMDBUF+2
CPI 'Y'
JZ L0174
CPI 'N'
JZ NXCMD
JMP CMPURG
;
CMPRLG: LXI H,CMDBUF+3
MOV A,M
CPI 0DH
JZ CMERR
CALL GTVAL
CPI ' '
JZ L0241
CPI ','
JNZ CMERR
L0241: INX H
PUSH D
PUSH H
MVI A,1
STA WFIFLG
CALL L1A7E
DB 9,'.LOC',9,0
POP H
POP D
MOV A,D
CALL XO0
MOV A,E
CALL XO
MVI A,'H'
CALL TYPE
CALL CRLF
PUSH D
CALL GTVAL
CPI 0DH
JNZ CMERR
POP B
LXI H,SYMTBL
L0272: INX H
INX H
MOV A,M
ORA A
JZ NXCMD
DCX H
DCX H
MOV A,M
SUB C
INX H
MOV A,M
SBB B
JC L028C
DCX H
MOV A,M
SUB E
INX H
MOV A,M
SBB D
JC L02D9
L028C: PUSH H
PUSH B
INX H
MOV B,M
PUSH H
INX H
MOV A,M
DCX H
CPI 'A'
JC L02E5
L0299: INX H
MOV A,M
CPI '+'
JZ L02E5
CPI '-'
JZ L02E5
DCR B
JNZ L0299
POP H
MOV B,M
MVI A,1
STA WFIFLG
L02B0: INX H
MOV A,M
CALL TYPE
DCR B
JNZ L02B0
CALL L1A7E
DB 9,'=',9,0
POP B
POP H
MOV A,M
ORA A
CNZ XO0
DCX H
MOV A,M
CALL XO
MVI A,'H'
CALL TYPE
CALL CRLF
XRA A
STA WFIFLG
INX H
L02D9: INX H
MOV A,M
CALL ADDF
INX H
CALL L1ABF
JMP L0272
;
L02E5: POP H
POP B
POP H
JMP L02D9
;
CMQIET: MVI A,1
STA QUIFLG
LXI D,CMDBUF+2
LXI H,CMDBUF+3
L02F6: MOV A,M
STAX D
INX H
INX D
CPI 0DH
JNZ L02F6
JMP L0184
;
DB 'Congratulations, you found '
DB 'the patch area!'
CMDUMP: LHLD L1B1B
PUSH H
XCHG
LHLD DMPCNT
DAD D
SHLD L1B1D
POP D
LXI H,CMDBUF+3
MOV A,M
CPI 0DH
JZ L038B
CPI 'S'
JZ DUSYMT
CPI '='
JZ SDUCNT
CPI ','
JZ L035D
L0351: CALL GTVAL
PUSH H
LHLD DMPCNT
DAD D
SHLD L1B1D
POP H
L035D: CPI 0DH
JZ L0376
CPI ' '
JZ L036C
CPI ','
JNZ CMERR
L036C: INX H
PUSH D
CALL GTVAL
XCHG
SHLD L1B1D
POP D
L0376: LHLD OFFSET
PUSH H
DAD D
SHLD L1B1B
LHLD L1B1D
POP D
DAD D
SHLD L1B1D
CPI 0DH
JNZ CMERR
L038B: LHLD L1B1B
L038E: CALL L1ABF
PUSH H
CALL L087C
CALL PRWORD
POP H
PUSH H
CALL PRSPC
L039D: MOV A,M
CALL XO
INX H
MOV A,L
ANI 3
CZ PRSPC
MOV A,L
ANI 7
CZ PRSPC
MOV A,L
ANI 0FH
JNZ L039D
CALL PSTAR
POP H
L03B8: MOV A,M
CPI ' '
JC L03C3
CPI 7FH
JC L03C5
L03C3: MVI A,'.'
L03C5: CALL TYPE
INX H
MOV A,L
ANI 0FH
JZ L03D7
ANI 7
CZ PRSPC
JMP L03B8
;
L03D7: CALL PSTAR
CALL CRLF
SHLD L1B1B
LDA L1B1D
SUB L
LDA L1B1D+1
SBB H
JNC L038E
JMP NXCMD
;
SDUCNT: INX H
CALL GTVAL
INX H
DCX D
XCHG
SHLD DMPCNT
XCHG
CPI ','
JZ L0351
CPI ' '
JZ L0351
CPI 0DH
JZ NXCMD
JMP CMERR
;
DUSYMT: LXI H,CMDBUF+4
MOV A,M
CPI '.'
JNZ L0423
CALL L1872
CALL L1798
JNC L0426
LHLD L1B4B
JMP L0426
;
L0423: LXI H,SYMTBL
L0426: MOV E,M
INX H
MOV D,M
INX H
MOV A,M
ORA A
JZ NXCMD
XCHG
CALL PRWORD
XCHG
MOV B,M
INX H
L0436: MOV A,M
CALL TYPE
INX H
DCR B
JNZ L0436
CALL CRLF
CALL L1ABF
JMP L0426
;
L0448: LHLD OFFSET
CALL PRWORD
CALL CRLF
JMP NXCMD
;
CMOFST: LXI H,CMDBUF+3
MOV A,M
CPI 0DH
JZ L0448
CALL GTVAL
CPI 0DH
JNZ CMERR
XCHG
SHLD OFFSET
JMP NXCMD
;
GFNAM: LDA WRTFLG
ORA A
JNZ RRQERR
STA FCB
STA FCB+12
LXI H,CMDBUF+3
LDA CMDBUF+4
CPI ' '
JZ CMERR
CPI ':'
JNZ L0493
LDA CMDBUF+3
SUI '@'
STA FCB
INX H
INX H
L0493: LXI D,FCB+1
MVI B,8
CALL L04A1
MVI B,3
CALL L04A1
RET
;
L04A1: MOV A,M
CPI 0DH
JZ L04BE
INX H
CPI '.'
JZ L04BE
STAX D
INX D
DCR B
JNZ L04A1
L04B3: MOV A,M
CPI 0DH
RZ
CPI '.'
INX H
RZ
JMP L04B3
;
L04BE: MVI A,' '
STAX D
INX D
DCR B
JNZ L04BE
RET
;
CMATMT: MVI A,1
STA L1B4F
XRA A
STA SYBFLG
JMP L04E2
;
CMBLD: MVI A,1
STA SYBFLG
JMP L04E2
;
CMLIST: XRA A
STA SYBFLG
STA L1B4F
L04E2: XRA A
STA WFIFLG
LDA LISCNT
STA LISCNT+1
STA L1B35
LXI H,CMDBUF+3
MOV A,M
CPI 0DH
JZ L052A
CPI ','
JZ L051E
CPI ' '
JZ L051E
CPI '='
JZ SLICNT
L0507: CALL GTVAL
XCHG
SHLD PCNTR
XCHG
CPI 0DH
JZ L052A
CPI ' '
JZ L051E
CPI ','
JNZ CMERR
L051E: INX H
CALL GTVAL
XCHG
SHLD L1B25
XRA A
STA L1B35
L052A: CALL L1ABF
LDA L1B35
ORA A
JZ L053E
LDA LISCNT+1
DCR A
JM NXCMD
JMP L054C
;
L053E: LHLD L1B25
LDA PCNTR
SUB L
LDA PCNTR+1
SBB H
JNC NXCMD
L054C: LDA L1B4F
ORA A
JZ L0586
LHLD PCNTR
XCHG
LHLD OFFSET
DAD D
MVI B,8
L055D: MOV A,M
CALL L1AFE
JC L0586
INX H
DCR B
JNZ L055D
L0569: MOV A,M
CALL L1AFE
INX H
JNC L0569
DCX H
CALL L087C
XCHG
PUSH D
LHLD PCNTR
XCHG
MVI A,'B'
CALL L0B9E
POP D
MVI A,'I'
CALL L0B9E
L0586: LHLD DOCTBL
MOV A,H
ORA L
JZ L05C0
LHLD PCNTR
XCHG
CALL L0D87
JC L05C0
INX H
INX H
MOV B,M
L059B: MVI A,1
STA WFIFLG
CALL SEMIC
XRA A
ORA B
JZ L05BD
L05A8: INX H
MOV A,M
CPI 5CH
JNZ L05B6
CALL CRLF
DCR B
JMP L059B
;
L05B6: CALL TYPE
DCR B
JNZ L05A8
L05BD: CALL CRLF
L05C0: LHLD PCNTR
XCHG
CALL L0C51
DCX H
JC L05CE
INX H
INX H
INX H
L05CE: MOV A,M
CPI 'I'
JZ L061E
CPI 'E'
JZ CMEOF
PUSH PSW
INX H
MOV E,M
INX H
MOV D,M
PUSH D
LHLD PCNTR
XCHG
CALL L0EB4
POP H
SHLD L1B48
XCHG
XRA A
STA WFIFLG
POP PSW
CPI 'S'
JZ L0648
CPI 'B'
JZ L06A9
CPI 'W'
JZ L067B
CALL TYPE
CALL PRTSTR
DB ': INVALID CTL ENTRY'
DB 0DH,0AH,0
JMP NXCMD
;
L061E: CALL DLINE
XRA A
STA WFIFLG
JMP L052A
;
SLICNT: INX H
CALL GTVAL
MOV A,E
ORA A
JZ CMERR
STA LISCNT
MOV A,M
INX H
CPI ','
JZ L0507
CPI ' '
JZ L0507
CPI 0DH
JZ NXCMD
JMP CMERR
;
L0648: PUSH D
LDA PCNTR
CMA
MOV L,A
LDA PCNTR+1
CMA
MOV H,A
INX H
DAD D
MVI A,1
STA WFIFLG
CALL L1A7E
DB '.BLKB',9,0
MOV A,H
CALL XO0
MOV A,L
CALL XO
MVI A,'H'
CALL TYPE
CALL CRLF
POP H
SHLD PCNTR
JMP L052A
;
L067B: MVI A,1
STA WFIFLG
CALL L1A7E
DB '.WORD',9,0
LHLD PCNTR
XCHG
LHLD OFFSET
DAD D
MOV E,M
INX H
MOV D,M
CALL L106E
LHLD PCNTR
INX H
INX H
SHLD PCNTR
JMP L052A
;
L06A3: CALL CRLF
JMP L052A
;
L06A9: MVI A,1
STA WFIFLG
L06BB: LHLD PCNTR
XCHG
LHLD OFFSET
DAD D
MOV A,M
CPI ' '
JC NPRTC ;NOT PRINTABLE
CPI 7FH
JC L0722 ;VISIBLE ASCII
NPRTC: CALL L1A7E
DB '.BYTE',9,0
XRA A
STA L1B4A
MORINV: MOV A,M ;RESTORE BYTE
CPI 0AH
JC L06E6
L06D3: CALL XO0
MVI A,'H'
CALL TYPE
LDA L1B4A
ADI 2
STA L1B4A
JMP L06EB
;
L06E6: ORI '0'
CALL TYPE
L06EB: INX H
XCHG
LHLD PCNTR
INX H
SHLD PCNTR
XCHG
L06F5: LDA L1B48
CMP E
JNZ L0703
LDA L1B49
CMP D
JZ L078D
L0703: LHLD PCNTR
XCHG
CALL L17EA
JNC L06A3
LDA L1B4A
ADI 2
STA L1B4A
CPI 19H
JNC L06A3
LHLD PCNTR
XCHG
LHLD OFFSET
DAD D
MOV A,M
CPI ' '
JC NXINV
CPI 7FH
JC L06A3
NXINV: MVI A,','
CALL TYPE
JMP MORINV
;
L0722: CALL L1A7E
DB '.ASCII',9,0
XRA A
STA L1B4A
MVI A,27H
CALL TYPE
LDA L1B4A
INR A
STA L1B4A
MOV A,M
L072F: CALL TYPE
MOV A,M
CPI 27H
CZ TYPE
INX H
XCHG
LHLD PCNTR
INX H
SHLD PCNTR
XCHG
LDA L1B48
CMP E
JNZ L0750
LDA L1B49
CMP D
JZ L0788
L0750: PUSH H
LHLD PCNTR
XCHG
CALL L17EA
POP H
JNC L0788
LDA L1B4A
INR A
STA L1B4A
CPI '#'
JNC L0780
CPI 19H
JC L0775
DCX H
MOV A,M
INX H
CPI ' '
JZ L0788
L0775: MOV A,M
CPI ' '
JC L0780
CPI 7FH
JC L072F
L0780: MVI A,27H
CALL TYPE
JMP L06A3
;
L0788: MVI A,27H
CALL TYPE
L078D: CALL CRLF
JMP L052A
;
CMSTTS: CALL PRTSTR
DB 'SYMTBL=',0
LXI H,SYMTBL
CALL PRWORD
LHLD SYMTP
CALL PRWORD
CALL CRLF
CALL PRTSTR
DB 'PC =',0
LHLD PCNTR
CALL PRWORD
CALL CRLF
CALL PRTSTR
DB 'OFFSET=',0
LHLD OFFSET
CALL PRWORD
CALL CRLF
LHLD DOCTBL
MOV A,H
ORA L
JZ NODOCT
CALL PRTSTR
DB 'COMNTS=',0
LHLD DOCTBL
CALL PRWORD
LHLD DOCEND
CALL PRWORD
CALL CRLF
NODOCT: CALL PRTSTR
DB 'CTLTBL=',0
LXI H,CTLTBL
CALL PRWORD
L0808: MOV A,M
INX H
ANA M
INX H
INX H
INR A
JNZ L0808
DCX H
DCX H
DCX H
CALL PRWORD
CALL CRLF
JMP NXCMD
;
CMFIND: LXI H,CMDBUF+3
MOV A,M
CPI 0DH
JZ L0853
CALL GTVAL
XCHG
SHLD L1B2F
LHLD OFFSET
SHLD L1B2D
XCHG
CPI 0DH
JZ L0853
CPI ' '
JZ L0843
CPI ','
JNZ CMERR
L0843: INX H
CALL GTVAL
CPI 0DH
JNZ CMERR
LHLD OFFSET
DAD D
SHLD L1B2D
L0853: LHLD L1B2F
XCHG
L0857: CALL L1ABF
LHLD L1B2D
MOV A,M
INX H
SHLD L1B2D
CMP E
JNZ L0857
MOV A,M
CMP D
JNZ L0857
PUSH H
PUSH D
CALL L087C
DCX H
CALL PRWORD
POP D
POP H
CALL PRSPC
JMP L0857
;
L087C: LDA OFFSET
CMA
MOV E,A
LDA OFFSET+1
CMA
MOV D,A
INX D
DAD D
RET
;
CMEOF: CALL L0EB4
MVI A,1
STA WFIFLG
CALL L1A7E
DB '.END',0DH,0AH,0
XRA A
STA WFIFLG
LDA WRTFLG
ORA A
JZ NXCMD
MVI A,1AH
CALL L19E6
CALL L19A7
XRA A
STA WRTFLG
CALL PRTSTR
DB '++ASM FILE CLOSED++',0DH
LDAX B
NOP
JMP NXCMD
;
CMREAD: CALL GFNAM
LDA WRTFLG
ORA A
JNZ RRQERR
LXI H,FCB+9
LXI D,SYMLIT
MVI C,3
CALL CMPSTR
JNZ L08F6
LXI H,SYMTBL
CALL L09C9
SHLD SYMTP
INX H
INX H
MVI M,0
JMP CMSTTS
;
L08F6: LXI H,FCB+9
LXI D,COMLIT
MVI C,3
CALL CMPSTR
JNZ L0947
CALL FOPEN
LHLD OFFSET
MOV A,H
CPI 1EH
JC L097A
LXI D,START
DAD D
L0914: PUSH H
XCHG
MVI C,1AH
CALL BDOS
LXI D,FCB
MVI C,14H
CALL BDOS
ORA A
JNZ L092F
POP H
LXI D,TBUF
DAD D
JMP L0914
;
L092F: POP H
CALL PRWORD
CALL L087C
CALL PRWORD
CALL CRLF
LXI D,TBUF
MVI C,1AH
CALL BDOS
JMP NXCMD
;
L0947: LXI H,FCB+9
LXI D,CTLLIT
MVI C,3
CALL CMPSTR
JNZ L0958
JMP L0CF1
;
L0958: LXI H,FCB+9
LXI D,DOCLIT
MVI C,3
CALL CMPSTR
JNZ CMERR
CALL L0DFB
LHLD DOCTBL
CALL L09C9
SHLD DOCEND
MVI M,0FFH
INX H
MVI M,0FFH
JMP CMSTTS
;
L097A: CALL PRTSTR
DB '++NO, THAT WOULD OVERLAY '
DB 'THE DISASSEMBLER',0DH,0AH
DB 'BECAUSE OFFSET IS TOO SMALL: '
DB 0
JMP L0448
;
L09C9: CALL FOPEN
L09CC: CALL RDFCHR
CPI 1AH
RZ
CPI 9
JZ L09CC
CPI 0DH
JZ L09CC
CPI 0AH
JZ L09CC
CALL L0A05
MOV M,E
INX H
MOV M,D
INX H
PUSH H
INX H
MVI B,0
L09EC: CALL RDFCHR
CPI 9
JZ L09FF
CPI 0DH
JZ L09FF
MOV M,A
INX H
INR B
JMP L09EC
;
L09FF: XTHL
MOV M,B
POP H
JMP L09CC
;
L0A05: LXI D,0
L0A08: CPI ' '
RZ
CPI 1AH
L0A0D: JZ L0B62
CPI ':'
JC L0A17
SUI 7
L0A17: SUI '0'
XCHG
DAD H
DAD H
DAD H
DAD H
ADD L
MOV L,A
XCHG
CALL RDFCHR
CPI 1AH
JZ L0B62
JMP L0A08
;
CMSAVE: CALL GFNAM
LDA WRTFLG
ORA A
JNZ RRQERR
LXI H,FCB+9
LXI D,SYMLIT
MVI C,3
CALL CMPSTR
JNZ L0A9A
LXI H,SYMTBL
L0A47: CALL L1986
L0A4A: MOV E,M
INX H
MOV D,M
INX H
MOV A,M
INX H
MOV B,A
ORA A
JZ L0A73
CALL L0A7E
MVI A,' '
CALL L19E6
L0A5D: MOV A,M
CALL L19E6
INX H
DCR B
JNZ L0A5D
MVI A,0DH
CALL L19E6
MVI A,0AH
CALL L19E6
JMP L0A4A
;
L0A73: MVI A,1AH
CALL L19E6
CALL L19A7
JMP NXCMD
;
L0A7E: MOV A,D
CALL HEXL
CALL L19E6
MOV A,D
CALL HEXR
CALL L19E6
MOV A,E
CALL HEXL
CALL L19E6
MOV A,E
CALL HEXR
JMP L19E6
;
L0A9A: LXI H,FCB+9
LXI D,CTLLIT
MVI C,3
CALL CMPSTR
JZ SAVCTL
LXI H,FCB+9
LXI D,DOCLIT
MVI C,3
CALL CMPSTR
JZ SAVDOC
LXI H,FCB+9
LXI D,ASMLIT
MVI C,3
CALL CMPSTR
JNZ CMERR
MVI A,1
STA WRTFLG
XRA A
STA WFIFLG
CALL L1986
CALL PRTSTR
DB '++WRITING .ASM ENABLED'
DB 0DH,0AH,'USE Z COMMAND OR '
DB 'E CONTROL TO CLOSE FILE++'
DB 0DH,0AH,0
JMP NXCMD
;
SAVDOC: CALL L0DFB
LHLD DOCEND
INX H
INX H
MVI M,0
LHLD DOCTBL
JMP L0A47
;
RRQERR: CALL PRTSTR
DB '++NO FILE ACCESSES PERMITTED '
DB 'UNTIL .ASM CLOSED',0DH,0AH
DB 0
JMP NXCMD
;
L0B62: CALL PRTSTR
DB '++UNEXPECTED EOF',0DH,0AH
DB 0
JMP NXCMD
;
CMCTL: LXI H,CMDBUF+3
MOV A,M
CPI 0DH
JZ L0C73
CALL GTVAL
CPI 0DH
JZ L0C6D
CPI ' '
JZ L0B96
CPI ','
JNZ CMERR
L0B96: INX H
MOV A,M
CALL L0BB0
JMP NXCMD
;
L0B9E: PUSH H
PUSH D
PUSH PSW
CALL L0C51
DCX H
JC L0BAB
INX H
INX H
INX H
L0BAB: POP PSW
POP D
CMP M
POP H
RZ
L0BB0: STA INTYP
CALL L0C51
JC L0BFB
LDA INTYP
CPI 'I'
JZ L0C4D
CPI 'W'
JZ L0C4D
CPI 'B'
JZ L0C4D
CPI 'S'
JZ L0C4D
CPI 'E'
JZ L0C4D
CPI 'K'
JNZ CMERR
XCHG
LXI H,3
DAD D
XCHG
L0BE0: MOV A,M
INX H
ANA M
DCX H
INR A
JZ L0BF5
MVI B,3
L0BEA: LDAX D
MOV M,A
INX D
INX H
DCR B
JNZ L0BEA
JMP L0BE0
;
L0BF5: DCX H
DCX H
DCX H
JMP NODOCT
;
L0BFB: LDA INTYP
CPI 'K'
JZ CMERR
CPI 'E'
JZ L0C1C
CPI 'B'
JZ L0C1C
CPI 'W'
JZ L0C1C
CPI 'I'
JZ L0C1C
CPI 'S'
JNZ CMERR
L0C1C: PUSH D
PUSH H
LXI H,CTLTBL
L0C21: MOV A,M
INX H
ANA M
INX H
INX H
INR A
JNZ L0C21
INX H
INX H
INX H
XCHG
LXI H,-3
DAD D
POP B
L0C33: DCX H
DCX D
MOV A,M
STAX D
MOV A,E
CMP C
JNZ L0C33
MOV A,D
CMP B
JNZ L0C33
MOV H,B
MOV L,C
POP D
MOV M,E
INX H
MOV M,D
INX H
LDA INTYP
MOV M,A
RET
;
L0C4D: INX H
INX H
MOV M,A
RET
;
L0C51: LXI H,CTLTBL
L0C54: MOV A,M
INX H
ANA M
DCX H
INR A
STC
RZ
INX H
MOV A,D
CMP M
DCX H
RC
JNZ L0C67
MOV A,E
CMP M
RZ
RC
L0C67: INX H
INX H
INX H
JMP L0C54
;
L0C6D: CALL L0C51
JMP L0C76
;
L0C73: LXI H,CTLTBL
L0C76: CALL L1ABF
MOV E,M
INX H
MOV D,M
INX H
MOV A,D
ANA E
INR A
JNZ L0C86
JMP NODOCT
;
L0C86: PUSH D
PUSH H
CALL L17EA
JC L0C9F
L0C8E: MOV A,M
CALL TYPE
INX H
DCR B
JNZ L0C8E
MVI A,':'
CALL TYPE
CALL CRLF
L0C9F: POP H
POP D
CALL PRSPC
CALL PRSPC
XCHG
CALL PRWORD
MVI A,','
CALL TYPE
XCHG
MOV A,M
CALL TYPE
CALL CRLF
INX H
JMP L0C76
;
SAVCTL: CALL L1986
LXI H,CTLTBL
L0CC2: MOV E,M
INX H
MOV D,M
INX H
MOV A,D
ANA E
INR A
JZ L0CE6
CALL L0A7E
MVI A,','
CALL L19E6
MOV A,M
CALL L19E6
MVI A,0DH
CALL L19E6
MVI A,0AH
CALL L19E6
INX H
JMP L0CC2
;
L0CE6: MVI A,1AH
CALL L19E6
CALL L19A7
JMP NXCMD
;
L0CF1: CALL FOPEN
LXI H,CTLTBL
L0CF7: CALL RDFCHR
LXI D,0
L0CFD: CPI 1AH
JZ L0D2A
CPI ','
JZ L0D1E
CPI ':'
JC L0D0E
SUI 7
L0D0E: SUI '0'
XCHG
DAD H
DAD H
DAD H
DAD H
ADD L
MOV L,A
XCHG
CALL RDFCHR
JMP L0CFD
;
L0D1E: MOV M,E
INX H
MOV M,D
INX H
CALL RDFCHR
MOV M,A
INX H
JMP L0CF7
;
L0D2A: MVI M,0FFH
INX H
MVI M,0FFH
JMP NODOCT
;
CMCMNT: CALL L0DFB
LXI H,CMDBUF+3
MOV A,M
CPI 0DH
JZ L0DAB
CALL GTVAL
INX H
CPI 0DH
JZ L0DA5
CPI ' '
JZ L0D51
CPI ','
JNZ CMERR
L0D51: PUSH H
CALL L0D87
JC L0D63
CALL L0DD6
POP H
PUSH H
MOV A,M
CPI 0DH
JZ NXCMD
L0D63: LHLD DOCEND
MOV M,E
INX H
MOV M,D
INX H
POP D
MVI B,0
PUSH H
L0D6E: INX H
LDAX D
MOV M,A
INX D
INR B
LDAX D
CPI 0DH
JNZ L0D6E
INX H
SHLD DOCEND
MVI M,0FFH
INX H
MVI M,0FFH
POP H
MOV M,B
JMP NXCMD
;
L0D87: LHLD DOCTBL
L0D8A: MOV A,M
INX H
ANA M
DCX H
INR A
STC
RZ
INX H
MOV A,D
CMP M
DCX H
JNZ L0D9B
MOV A,E
CMP M
RZ
L0D9B: INX H
INX H
MOV A,M
CALL ADDF
INX H
JMP L0D8A
;
L0DA5: CALL L0D87
JMP L0DAE
;
L0DAB: LHLD DOCTBL
L0DAE: CALL L1ABF
MOV E,M
INX H
MOV D,M
INX H
MOV A,D
ANA E
INR A
JZ NXCMD
XCHG
CALL PRWORD
XCHG
MVI A,';'
CALL TYPE
MOV B,M
L0DC6: INX H
MOV A,M
CALL TYPE
DCR B
JNZ L0DC6
CALL CRLF
INX H
JMP L0DAE
;
L0DD6: MOV A,M
INX H
ANA M
INR A
RZ
DCX H
PUSH D
MOV D,H
MOV E,L
INX H
INX H
MOV A,M
CALL ADDF
INX H
MVI B,0
L0DE8: MOV A,M
STAX D
INX H
INX D
MOV C,A
ANA B
INR A
MOV B,C
JNZ L0DE8
XCHG
DCX H
DCX H
SHLD DOCEND
POP D
RET
;
L0DFB: LHLD DOCTBL
MOV A,H
ORA L
RNZ
CALL PRTSTR
DB '++COMMAND IGNORED++',0DH
DB 0AH,'++Issue ''UNNNN'' to tell '
DB 'RESOURCE to use address '
DB 'NNNN',0DH,0AH,'as the start '
DB 'of the comments table',0DH
DB 0AH,0
JMP NXCMD
;
CMUSEC: LXI H,CMDBUF+3
MOV A,M
CPI 0DH
JZ CMERR
CPI '.'
JZ CMERR
CALL GTVAL
XCHG
MOV A,H
CPI 1FH
JC L0E9D
SHLD DOCTBL
SHLD DOCEND
MVI M,0FFH
INX H
MVI M,0FFH
JMP NXCMD
;
L0E9D: CALL PRTSTR
DB '++NO!! <2300H!',0DH,0AH
DB 0
JMP NXCMD
;
L0EB4: PUSH D
PUSH H
MVI A,1
STA WFIFLG
LHLD PCNTR
XCHG
CALL L17EA
JC L0EF6
MOV C,B
PUSH H
L0EC7: MOV A,M
CPI '+'
JZ L0EF5
CPI '-'
JZ L0EF5
INX H
DCR C
JNZ L0EC7
POP H
CALL PSTRG
MVI A,':'
CALL TYPE
LDA TRMFLG
ORA A
JNZ L0EF6
CALL TABC
CALL TABC
CALL SEMIC
LHLD PCNTR
CALL PRWORD
CALL CRLF
JMP L0EF6
;
L0EF5: POP H
L0EF6: XRA A
STA WFIFLG
CALL PRSPC
CALL PRSPC
LHLD PCNTR
CALL PRWORD
MVI A,1
STA WFIFLG
CALL TABC
POP H
POP D
RET
;
DLINE: CALL L0EB4
XRA A
STA INDX
LHLD PCNTR
XCHG
LHLD OFFSET
DAD D
SHLD PGPTR
XCHG
INX H ;COUNT OVER SINGLE BYTE
SHLD PCNTR
XCHG
MOV B,M
LXI H,OPCT-7
L0F2D: LXI D,7
ULP: DAD D
MOV A,M
ORA A
JZ PRDB
ANA B
MOV C,A
INX H
MOV A,M
CMP C
JNZ ULP
INX H
MOV A,M
STA INTYP
MVI B,5
PROLP: INX H
MOV A,M
CPI 1 ;INDX VALUE FLAG
JNZ PRO2
LDA INDX
ORA A
JMP PRO1
;
PRO2: CPI '.'
PRO1: CNZ TYPE
DCR B
JNZ PROLP
LHLD PCNTR
LDA INTYP
ANI 3FH
CPI 4
JC FOUND
CPI 9
JNC FOUND
INX H ;2 BYTE AT LEAST
CPI 6
JC L0F75
INX H ;3 BYTE INSTR
L0F75: SHLD PCNTR
FOUND: MOV E,A
MVI D,0
LXI H,JMPTBL
;
DAD D
DAD D
DAD D
PUSH H
LHLD PGPTR
RET
;
INCPC: PUSH H
LHLD PCNTR
INX H
SHLD PCNTR
POP H
RET
; LGTH OPRND EXMPL
JMPTBL: JMP TYPE0 ;1 NONE DAA
JMP TYPE1 ;1 REG ADD
JMP TYPE2 ;1 REG INR
JMP TYPE3 ;1 XR STAX
JMP TYPE4 ;2 R,DATA MVI
JMP TYPE5 ;2 DATA OUT
JMP TYPE6 ;3 XR,ADDR LXI
JMP TYPE7 ;3 ADDR LHLD
JMP TYPE8 ;3 ADDR JZ
JMP TYPE9 ;1 NONE RZ
JMP TYP10 ;1 NR. RST
JMP TYP11 ;1 R,R MOV
JMP TYP12 ;2 "CB" BIT
JMP TYP13 ;2/4 "ED" LDI
JMP TYP14 ;2/4 "DD" SRL
JMP TYP15 ;2/4 "FD" RL
JMP TYP16 ;2 NONE JR
JMP TYP17 ;2 FLAG JR C
JMP TYP18 ;2 N,R BIT
JMP TYP19 ;X/Y INDEX
JMP TYP20 ;4 X/Y,ADD LXI
JMP TYP21 ;3 D(),R MOV
JMP TYP22 ;3 REG ADD
JMP TYP23 ;3
JMP TYP24 ;4
;
TYPE0: JMP CRLF
;
TYP22: CALL INCPC ;FOR DD/FD INSTRS
TYPE1: CALL TABC
T1B: CALL REG
JMP CRLF
;
TYP23: CALL INCPC
TYPE2: CALL TABC
CALL REGM
JMP CRLF
;
TYPE3: CALL TABC
CALL XR
JMP CRLF
;
TYP24: CALL INCPC
CALL INCPC
TYPE4: CALL TABC
CALL REGM
CALL COMMA
JMP T52
;
TYPE5: CALL TABC
T52: LHLD PGPTR
INX H
LDA INDX
ORA A
JZ T52A
INX H
T52A: SHLD PGPTR
L1017: LHLD PGPTR
MOV A,M
CPI ' '
JC PHEXB
CPI 5BH
JNC PHEXB
LDA INTYP
CPI 4
JC PHEXB
CPI 6
JNC PHEXB
MOV A,M
CALL QCHAR
MVI A,27H
CALL TYPE
CALL TABC
CALL SEMIC
PHEXB: MOV A,M
CPI 0AH
JC NO2CH
CALL XO0
MVI A,'H'
CALL TYPE
JMP CRLF
;
NO2CH: ADI '0'
CALL TYPE
JMP CRLF
;
TYPE6: CALL TABC
LHLD PGPTR
MOV A,M
CALL XR
CALL COMMA
PRT2X: LHLD PGPTR
INX H
MOV E,M
INX H
MOV D,M
L106E: PUSH D
CALL L17EA
JNC L1084
LDA SYBFLG
ORA A
JZ L108D
POP D
PUSH D
CALL L173A
JMP L108D
;
L1084: CALL PSTRG
LDA TRMFLG
ORA A
JZ TRMLB2
POP D
JMP CRLF
TRMLB2: CALL TABC
CALL SEMIC
L108D: POP D
MOV A,D
ORA E
MVI A,'0'
JZ L10A3
MOV A,D
ORA A
JZ L10A9
CALL XO0
MOV A,E
CALL XO
L10A1: MVI A,'H'
L10A3: CALL TYPE
JMP CRLF
;
L10A9: MOV A,E
CPI 0AH
JC L10B5
CALL XO0
JMP L10A1
;
L10B5: ADI '0'
JMP L10A3
;
TYPE7: CALL TABC
JMP PRT2X
;
TYPE8: CALL GETCC
JMP TYPE7
;
TYPE9: CALL GETCC
JMP CRLF
;
TYP10: CALL TABC
LHLD PGPTR
MOV A,M
RAR
RAR
RAR
ANI 7
ORI '0'
CALL TYPE
JMP CRLF
;
TYP21: CALL INCPC ;THEN FALL THRU
;
TYP11: CALL TABC
CALL REGM
CMREG: CALL COMMA
JMP T1B
;
PRTRL: MOV C,L
MOV A,H
JMP PRT2X
;
TYP13: INX H
SHLD PGPTR
MOV B,M
LXI H,EDTBL-7
CALL INCPC
JMP L0F2D
;
TYP14: MVI A,'X'
JMP IXIYC
;
TYP15: MVI A,'Y'
;
IXIYC: STA INDX
CALL INCPC ;ACCNT FOR PREFIX BYTE
INX H ;SKIP DD/FD
MOV A,M ;BYTE 2 MAY BE OPCODE
CPI 0CBH
JNZ IXIYT
INX H
MOV A,M
STA DISPL ;FROM THIRD BYTE
TYP12: INX H
MOV B,M ;ACTUAL OPCODE HERE
SHLD PGPTR
CALL INCPC
LXI H,CBTBL-7
JMP L0F2D
;
IXIYT: PUSH PSW
SHLD PGPTR ;SAVE OPCODE PNTR
INX H
MOV A,M
STA DISPL ;FROM THIRD BYTE
POP PSW ;RECOV OPCODE
MOV B,A
LXI H,DDTBL-7
JMP L0F2D
;
TYP16: CALL TABC
INX H
MOV A,M
CALL INCPC
LHLD PCNTR
MOV E,A
MVI D,0
CMP D
JP NTNEG
DCR D
NTNEG: DAD D
XCHG
JMP L106E
;
TYP17: MOV A,M
RAR
RAR
ANI 6
PUSH H
CALL PCC
POP H
JMP TYP16
;
TYP18: CALL TABC
MOV A,M
RAR
RAR
RAR
ANI 7
ORI '0'
CALL TYPE
JMP CMREG
;
TYP19: CALL TABC
LDA INDX
CALL TYPE
JMP CRLF
;
TYP20: SHLD PGPTR
CALL TABC
LDA INDX
CALL TYPE
CALL COMMA
CALL INCPC
CALL INCPC
JMP PRT2X
;
XADSP: LDA INDX
ORA A
MVI A,'M'
JZ TYPE
INX H
MOV A,M
PUSH H
LDA DISPL
MOV H,A
ORA A
JP POSIT
MVI A,'-'
CALL TYPE
MOV A,H
CMA
INR A
POSIT: CPI 64H
JC LT100
SBI 64H
MOV H,A
MVI A,'1'
CALL TYPE
MOV A,H
LT100: MVI L,0
TENLP: SUI 0AH
JM TENOK
INR L
JMP TENLP
;
TENOK: ADI 0AH
MOV H,A
MVI A,'0'
ADD L
CALL TYPE
MOV A,H
ADI '0'
POP H
CALL TYPE
LXI H,INDX-1
MVI B,3
JMP PSTRG
;
COMMA: MVI A,','
JMP TYPE
;
TABC: MVI A,9
JMP TYPE
;
SEMIC: MVI A,';'
JMP TYPE
;
PRDB: CALL L1A7E
DB '.BYTE',9,0
LDA INDX
ORA A
JZ DB1PR
LHLD PGPTR
DCX H
MOV A,M
CALL XO0
MVI A,'H'
CALL TYPE
CALL COMMA
DB1PR: MVI A,4
STA INTYP
JMP L1017
;
GETCC: LHLD PGPTR
MOV A,M
RAR
RAR
ANI 0EH
PCC: LXI H,CCTAB
CALL ADDF
MOV A,M
CALL TYPE
INX H
MOV A,M
CPI '.'
CNZ TYPE
RET
;
QCHAR: PUSH PSW
MVI A,27H
CALL TYPE
POP PSW
CPI 27H
JNZ TYPE
PUSH PSW
CALL TYPE
POP PSW
JMP TYPE
;
XR: LHLD PGPTR
MOV A,M
RAR
RAR
RAR
ANI 6
CPI 6
JNZ L127A
MOV A,M
ANI 0CFH
CPI 0C1H
JZ L1264
CPI 0C5H
JZ L1264
MVI A,'S'
CALL TYPE
MVI A,'P'
JMP TYPE
;
L1264: CALL L1A7E
MOV D,B
MOV D,E
MOV D,A
NOP
RET
;
REGM: LHLD PGPTR
MOV A,M
RAR
RAR
RAR
JMP L127A
;
REG: LHLD PGPTR
MOV A,M
L127A: LXI H,REGTBL
ANI 7
CALL ADDF
MOV A,M
CPI 'M'
JZ XADSP
JMP TYPE
;
ADDF: ADD L
MOV L,A
RNC
INR H
RET
;
XO0: CPI 0A0H
JC XO
PUSH PSW
MVI A,'0'
CALL TYPE
POP PSW
JMP XO
;
PSTRG: MOV A,M
CALL TYPE
INX H
DCR B
JNZ PSTRG
RET
;
CCTAB: DB 'NZ'
DB 'Z.'
DB 'NC'
DB 'C.'
DB 'PO'
DB 'PE'
DB 'P.'
DB 'M.'
;
REGTBL: DB 'BCDE'
DB 'HLMA'
;
OPCT: DB 0FFH,0CBH,12,'.....'
DB 0FFH,0EDH,13,'.....'
DB 0FFH,0DDH,14,'.....'
DB 0FFH,0FDH,15,'.....'
DB 0FFH,0CEH,5,'ACI..'
DB 0F8H,88H,1,'ADC..'
DB 0F8H,80H,1,'ADD..'
DB 0FFH,0C6H,5,'ADI..'
DB 0F8H,0A0H,1,'ANA..'
DB 0FFH,0E6H,5,'ANI..'
DB 0C7H,0C4H,8,'C....'
DB 0FFH,0CDH,7,'CALL.'
DB 0FFH,2FH,0,'CMA..'
DB 0FFH,3FH,0,'CMC..'
DB 0F8H,0B8H,1,'CMP..'
DB 0FFH,0FEH,5,'CPI..'
DB 0FFH,27H,0,'DAA..'
DB 0CFH,9,3,'DAD..'
DB 0C7H,5,2,'DCR..'
DB 0CFH,0BH,3,'DCX..'
DB 0FFH,0F3H,0,'DI...'
DB 0FFH,10H,16,'DJNZ.'
DB 0FFH,0FBH,0,'EI...'
DB 0FFH,8,40H,'EXAF.'
DB 0FFH,0D9H,40H,'EXX..'
DB 0FFH,76H,0,'HLT..'
DB 0FFH,0DBH,5,'IN...'
DB 0C7H,4,2,'INR..'
DB 0CFH,3,3,'INX..'
DB 0C7H,0C2H,8,'J....'
DB 0FFH,0C3H,7,'JMP..'
DB 0FFH,18H,16,'JMPR.'
DB 0E7H,20H,17,'JR...'
DB 0FFH,3AH,7,'LDA..'
DB 0EFH,0AH,3,'LDAX.'
DB 0FFH,2AH,7,'LHLD.'
DB 0CFH,1,6,'LXI..'
DB 0C0H,40H,11,'MOV..'
DB 0C7H,6,4,'MVI..'
DB 0FFH,0,0,'NOP..'
DB 0F8H,0B0H,1,'ORA..'
DB 0FFH,0F6H,5,'ORI..'
DB 0FFH,0D3H,5,'OUT..'
DB 0FFH,0E9H,0,'PCHL.'
DB 0CFH,0C1H,3,'POP..'
DB 0CFH,0C5H,3,'PUSH.'
DB 0C7H,0C0H,9,'R....'
DB 0FFH,17H,0,'RAL..'
DB 0FFH,1FH,0,'RAR..'
DB 0FFH,0C9H,0,'RET..'
DB 0FFH,0FH,0,'RRC..'
DB 0FFH,7,0,'RLC..'
DB 0C7H,0C7H,10,'RST..'
DB 0F8H,98H,1,'SBB..'
DB 0FFH,0DEH,5,'SBI..'
DB 0FFH,22H,7,'SHLD.'
DB 0FFH,0F9H,0,'SPHL.'
DB 0FFH,32H,7,'STA..'
DB 0EFH,2,3,'STAX.'
DB 0FFH,37H,0,'STC..'
DB 0F8H,90H,1,'SUB..'
DB 0FFH,0D6H,5,'SUI..'
DB 0FFH,0EBH,0,'XCHG.'
DB 0F8H,0A8H,1,'XRA..'
DB 0FFH,0EEH,5,'XRI..'
DB 0FFH,0E3H,0,'XTHL.'
DB 0
;
CBTBL: DB 0C0H,40H,18,'BIT..'
DB 0C0H,80H,18,'RES..'
DB 0C0H,0C0H,18,'SET..'
DB 0F8H,0,1,'RLCR.'
DB 0F8H,8,1,'RRCR.'
DB 0F8H,10H,1,'RALR.'
DB 0F8H,18H,1,'RARR.'
DB 0F8H,20H,1,'SLAR.'
DB 0F8H,28H,1,'SRAR.'
DB 0F8H,38H,1,'SRLR.'
DB 0
;
EDTBL: DB 0FFH,43H,7,'SBCD.'
DB 0FFH,53H,7,'SDED.'
DB 0FFH,73H,7,'SSPD.'
DB 0FFH,4BH,7,'LBCD.'
DB 0FFH,5BH,7,'LDED.'
DB 0FFH,4FH,0,'STAR.'
DB 0FFH,5FH,0,'LDAR.'
DB 0FFH,47H,0,'STAI.'
DB 0FFH,57H,0,'LDAI.'
DB 0FFH,7BH,7,'LSPD.'
DB 0FFH,44H,0,'NEG..'
DB 0FFH,45H,0,'RETN.'
DB 0FFH,4DH,0,'RETI.'
DB 0FFH,46H,0,'IM0..'
DB 0FFH,56H,0,'IM1..'
DB 0FFH,5EH,0,'IM2..'
DB 0FFH,0A0H,0,'LDI..'
DB 0FFH,0B0H,0,'LDIR.'
DB 0FFH,0A8H,0,'LDD..'
DB 0FFH,0B8H,0,'LDDR.'
DB 0FFH,0A1H,0,'CCI..'
DB 0FFH,0B1H,0,'CCIR.'
DB 0FFH,0A9H,0,'CCD..'
DB 0FFH,0B9H,0,'CCDR.'
DB 0FFH,0A2H,0,'INI..'
DB 0FFH,0B2H,0,'INIR.'
DB 0FFH,0AAH,0,'IND..'
DB 0FFH,0BAH,0,'INDR.'
DB 0FFH,0A3H,0,'OUTI.'
DB 0FFH,0B3H,0,'OUTIR'
DB 0FFH,0ABH,0,'OUTD.'
DB 0FFH,0BBH,0,'OUTDR'
DB 0CFH,42H,3,'DSBC.'
DB 0CFH,4AH,3,'DADC.'
DB 0FFH,67H,0,'RRD..'
DB 0FFH,6FH,0,'RLD..'
DB 0C7H,40H,2,'INP..'
DB 0C7H,41H,2,'OUTP.'
DB 0CFH,42H,3,'DSBC.'
DB 0CFH,4AH,3,'DADC.'
DB 0
;
DDTBL: DB 0FFH,29H,19,'DAD',1,'.'
DB 0CFH,9,3,'DAD',1,'.'
DB 0FFH,0E1H,19,'POP..'
DB 0FFH,0E5H,19,'PUSH.'
DB 0FFH,22H,7,'SI',1,'D.'
DB 0FFH,2AH,7,'LI',1,'D.'
DB 0FFH,23H,19,'INX..'
DB 0FFH,2BH,19,'DCX..'
DB 0C7H,46H,21,'MOV..'
DB 0F8H,70H,21,'MOV..'
DB 0FFH,86H,22,'ADD..'
DB 0FFH,8EH,22,'ADC..'
DB 0FFH,96H,22,'SUB..'
DB 0FFH,9EH,22,'SBB..'
DB 0FFH,0A6H,22,'ANA..'
DB 0FFH,0AEH,22,'XRA..'
DB 0FFH,0B6H,22,'ORA..'
DB 0FFH,0BEH,22,'CMP..'
DB 0FFH,34H,23,'INR..'
DB 0FFH,35H,23,'DCR..'
DB 0FFH,36H,24,'MVI..'
DB 0FFH,21H,20,'LXI..'
DB 0FFH,0F9H,0,'SPI',1,'.'
DB 0FFH,0E3H,0,'XTI',1,'.'
DB 0FFH,0E9H,0,'PCI',1,'.'
DB 0
;
L173A: LXI H,CMDBUF
MVI M,'L'
INX H
MOV A,D
CALL L189F
MOV A,E
CALL L189F
LXI H,CMDBUF
MVI B,5
L174D: CALL L1798
JC L1757
MOV M,E
INX H
MOV M,D
RET
;
L1757: PUSH H
PUSH D
PUSH B
LHLD SYMTP
MOV D,H
MOV E,L
MOV A,B
ADI 3
ADD L
MOV L,A
MOV A,H
ACI 0
MOV H,A
SHLD SYMTP
INX H
INX H
MVI M,0
DCX H
DCX H
MOV B,H
MOV C,L
LHLD L1B4B
L1776: MOV A,E
CMP L
JNZ L1780
MOV A,D
CMP H
JZ L1787
L1780: DCX D
DCX B
LDAX D
STAX B
JMP L1776
;
L1787: POP B
POP D
MOV M,E
INX H
MOV M,D
INX H
MOV M,B
POP D
L178F: INX H
LDAX D
MOV M,A
INX D
DCR B
JNZ L178F
RET
;
L1798: PUSH D
PUSH H
LXI H,SYMTBL
L179D: POP D
PUSH D
INX H
INX H
PUSH H
MOV A,M
INX H
ORA A
JZ L17E0
CMP B
JC L17CC
JNZ L17D6
MOV C,A
CALL CMPSTR
JZ L17C5
JC L17E0
L17B9: POP H
MOV A,M
INX H
ADD L
MOV L,A
JNC L179D
INR H
JMP L179D
;
L17C5: POP H
DCX H
DCX H
POP D
POP D
ORA A
RET
;
L17CC: MOV C,A
CALL CMPSTR
JNC L17B9
JMP L17E0
;
L17D6: MOV C,B
CALL CMPSTR
JZ L17E0
JNC L17B9
L17E0: POP H
DCX H
DCX H
SHLD L1B4B
POP H
POP D
STC
RET
;
L17EA: LXI H,SYMTBL
L17ED: MOV A,M
INX H
CMP E
JNZ L17F8
MOV A,M
CMP D
JZ L1807
L17F8: INX H
MOV A,M
ORA A
STC
RZ
INX H
ADD L
MOV L,A
JNC L17ED
INR H
JMP L17ED
;
L1807: INX H
MOV A,M
INX H
MOV B,A
ORA A
RNZ
STC
RET
;
CMENTR: LXI H,CMDBUF+3
CALL GTVAL
MOV A,M
CPI ' '
JZ L1820
CPI ','
JNZ CMERR
L1820: INX H
MOV A,M
CPI '.'
JNZ CMERR
PUSH D
CALL L1872
POP D
CALL L174D
JMP NXCMD
;
RET
;
CMKILL: LXI H,CMDBUF+3
MOV A,M
CPI '.'
JNZ CMERR
CALL L1872
CALL L1798
JC CMERR
MOV B,H
MOV C,L
INX H
INX H
MOV A,M
ADD L
MOV L,A
MOV A,H
ACI 0
MOV H,A
INX H
XCHG
LHLD SYMTP
L1855: MOV A,E
CMP L
JNZ L185F
MOV A,D
CMP H
JZ L1866
L185F: LDAX D
STAX B
INX B
INX D
JMP L1855
;
L1866: MOV H,B
MOV L,C
SHLD SYMTP
INX H
INX H
MVI M,0
JMP NXCMD
;
L1872: INX H
MVI B,0
PUSH H
L1876: MOV A,M
INX H
INR B
CPI '+'
JZ L1876
CPI '-'
JZ L1876
CPI '0'
JC L1897
CPI ':'
JC L1876
CPI 'A'
JC L1897
CPI 5BH
JC L1876
L1897: DCR B
JZ CMERR
DCX H
XCHG
POP H
RET
;
L189F: PUSH PSW
CALL HEXL
MOV M,A
INX H
POP PSW
CALL HEXR
MOV M,A
INX H
RET
;
HEXL: RAR
RAR
RAR
RAR
HEXR: ANI 0FH
CPI 0AH
JC HEXRN
ADI 7
HEXRN: ADI '0'
RET
;
XO: PUSH PSW
CALL HEXL
CALL TYPE
POP PSW
CALL HEXR
JMP TYPE
;
PRWORD: MOV A,H
CALL XO
MOV A,L
CALL XO
PRSPC: MVI A,' '
JMP TYPE
;
GTVAL: MOV A,M
CPI '.'
JZ GTSYMB
LXI D,0
HEXBI: MOV A,M
CPI '0'
RC
CPI ':'
JC CVNUM
CPI 'A'
RC
CPI 'G'
RNC
SUI 7
CVNUM: SUI '0'
XCHG
DAD H
DAD H
DAD H
DAD H
ADD L
MOV L,A
XCHG
INX H
JMP HEXBI
;
GTSYMB: CALL L1872
PUSH D
CALL L1798
JC CMERR
MOV E,M
INX H
MOV D,M
POP H
MOV A,M
RET
;
FOPEN: PUSH H
LXI H,START
SHLD OFIPTR
XRA A
STA FCB+32
LXI D,FCB
MVI C,0FH
CALL BDOS
POP H
INR A
RNZ
CALL PRTSTR
DB '++FILE NOT FOUND',0DH,0AH
DB 0
JMP NXCMD
;
RDFCHR: PUSH H
LHLD OFIPTR
MOV A,H
CPI 1
JNZ L195B
PUSH B
PUSH D
LXI D,FCB
MVI C,14H
CALL BDOS
ORA A
POP D
POP B
LXI H,TBUF
JNZ L1962
L195B: MOV A,M
INX H
SHLD OFIPTR
POP H
RET
;
L1962: CPI 3
JC L1980
CALL PRTSTR
DB '++UNEXPECTED EOF',0DH,0AH
DB 0
JMP NXCMD
;
L1980: MVI A,1AH
MOV M,A
JMP L195B
;
L1986: PUSH H
LXI D,FCB
MVI C,13H
CALL BDOS
LXI D,FCB
MVI C,16H
CALL BDOS
INR A
JZ CMERR
XRA A
STA FCB+32
LXI H,TBUF
SHLD OFIPTR
POP H
RET
;
L19A7: LXI D,FCB
MVI C,15H
CALL BDOS
ORA A
JNZ L19D3
LXI D,FCB
MVI C,10H
CALL BDOS
INR A
RNZ
CALL PRTSTR
DB '++CLOSE ERROR',0DH,0AH
NOP
JMP NXCMD
;
L19D3: CALL PRTSTR
DB '++WRITE ERROR',0DH,0AH
NOP
L19E6: PUSH H
LHLD OFIPTR
MOV M,A
INR L
SHLD OFIPTR
POP H
RNZ
PUSH B
PUSH D
PUSH H
LXI D,FCB
MVI C,15H
CALL BDOS
ORA A
JNZ L19D3
LXI H,TBUF
SHLD OFIPTR
POP H
POP D
POP B
RET
;
CRLF: MVI A,0DH
CALL TYPE
MVI A,0AH
JMP TYPE
;
PSTAR: MVI A,'*'
TYPE: PUSH B
PUSH D
PUSH H
MOV E,A
PUSH D
MVI C,2
LDA QUIFLG
ORA A
CZ BDOS
POP D
LDA WRTFLG
LXI H,WFIFLG
ANA M
MOV A,E
CNZ L19E6
MOV A,E
CPI 0AH
JNZ L1A41
LDA L1B35
ORA A
JZ L1A41
LXI H,LISCNT+1
DCR M
L1A41: POP H
POP D
POP B
RET
;
GTCMD: CALL PSTAR
LXI D,CMDBUF
MVI A,'N'
STAX D
MVI C,0AH
CALL BDOS
LXI H,CMDBUF+1
MOV E,M
MVI D,0
DAD D
INX H
MVI M,0DH
LXI H,CMDBUF+1
LTUCNV: INX H
MOV A,M
CPI 0DH
JZ CRLF
CPI 61H
JC LTUCNV
CPI 7BH
JNC LTUCNV
ANI 5FH
MOV M,A
JMP LTUCNV
;
PRTSTR: XRA A
STA WFIFLG
STA QUIFLG
L1A7E: XTHL
L1A7F: MOV A,M
CALL TYPE
INX H
MOV A,M
ORA A
JNZ L1A7F
INX H
XTHL
RET
;
INITBL: XRA A
STA SYMTBL+2
LXI H,SYMTBL
SHLD SYMTP
MVI A,0DH
STA CMDBUF+3
LXI H,0FFFFH
SHLD CTLTBL
MVI A,'I'
STA CTLTBL-1
LHLD DOCTBL
MOV A,H
ORA L
RZ
SHLD DOCEND
MVI M,0FFH
INX H
MVI M,0FFH
RET
;
CMPSTR: LDAX D
CMP M
RNZ
INX D
INX H
DCR C
JNZ CMPSTR
RET
;
L1ABF: PUSH B
PUSH D
PUSH H
MVI C,0BH
CALL BDOS
ORA A
JZ L1AFA
MVI C,1
CALL BDOS
CPI 3
JZ ABORT
CALL CRLF
JMP NXCMD
;
ABORT: CALL PRTSTR
DB 0DH,0AH,'ABORT Y/N '
NOP
MVI C,1
CALL BDOS
ANI 5FH
CPI 'Y'
JZ 0
JMP NXCMD
;
L1AFA: POP H
POP D
POP B
RET
;
L1AFE: CPI 0DH
RZ
CPI 0AH
RZ
ORA A
RZ
CPI ' '
RC
CPI 7FH
CMC
RET
;
DB '('
INDX: DB 0,')',0
DISPL: DB 0
TRMFLG: DB 0
L1B1B: DW START
L1B1D: DW 0180H
OFFSET: DW 0
SYMTP: DW SYMTBL
PCNTR: DW START
L1B25: DW START
PGPTR: DW START
DOCTBL: DW 0
DOCEND: DW 0
L1B2D: DW 0
L1B2F: DW 0
DMPCNT: DW 0FFH
LISCNT: DW 0A16H
L1B35: DB 1
ASMLIT: DB 'ASM'
COMLIT: DB 'COM'
CTLLIT: DB 'CTL'
SYMLIT: DB 'SYM'
DOCLIT: DB 'DOC'
WFIFLG: DB 0
WRTFLG: DB 0
QUIFLG: DB 0
L1B48: DB 0
L1B49: DB 0
L1B4A: DB 0
L1B4B: DW 0
OFIPTR: DW 0
L1B4F: DB 0
SYBFLG: DB 0
INTYP: DB 0,0,0
CMDBUF: DS 002CH
END