home *** CD-ROM | disk | FTP | other *** search
- 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
-