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
       L
HLD     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