
;
;       TDL BASED Z80 DISASSEMBLER
;       BASED ON A Z80-ZAP DISASSEMBLER FROM
;       DDJ, MAY, 1979 BY B.W. LEE
;       ADAPTED FOR CPM BY TIM BURKE
;       SEPTEMBER, 1979.
;
        .TITLE  "Z80 DISASSEMBLER"
        .SBTTL  "TIM BURKE, SEPT., 1979"
        .LADDR
        .LALL
        .PABS
;
;       SYSTEM EQUATES
;
MSIZE   =       47      ;56K-DRIVERS(4K)-I/O(1K)
;	MSIZE WAS 56 FOR TIMS VERSION
BIASC   =       (MSIZE-16)*1024
PRSIZE  =       PREND-PRBEG
LOCATE  =       3100H+BIASC-PRSIZE
PRLOC   =       9000H
SYCOUN  =       900     ;NUMBER OF SYMBOLS
SYMNUM  =       SYCOUN*7
;
;
BDOSV   =       5       ;DOS ENTRY
WBOOTV  =       0       ;WARM BOOT
WTFN    =       9       ;CONSOLE BUFF. WRITE
RDFN    =       10      ;BUFF. READ
COFN    =       2       ;CONSOLE CHAR. WRITE
FCB     =       5CH     ;READ FCB ADD.
OPENF   =       15      ;FILE OPEN
BUFF    =       80H     ;READ BUFF. ADD.
READF   =       20      ;READ SECTOR
LOGIN   =       14      ;LOG IN DISK
SEARCH  =       17      ;SEARCH FOR FILE
DELETE  =       19      ;ERASE FILE
MAKEF   =       22      ;CREATE FILE
SDMA    =       26      ;SET DMA ADD.
DWRIT   =       21      ;WRITE SECTOR
CLSFN   =       16      ;CLOSE FILE
CR      =       0DH
LF      =       0AH
TAB     =       'I'-40H
TRUE    =       0FFH
FALSE   =       0
;
;
        .LOC    PRLOC
;
;
PRBEG:  LXI     SP,STKTOP
        LHLD    BDOSV+1
        SHLD    BDOS+1
        LHLD    WBOOTV+1
        SHLD    WBOOT+1
        XRA     A
        STA     CBYTE
        STA     KBYTE
        STA     FCBW+32
        STA     FCBW+12
        JMPR    ENTRE
BDOS:   JMP     BDOSV
WBOOT:  JMP     WBOOTV
ENTRE:  LXI     D,HERALD
        MVI     C,WTFN
        CALL    BDOS
EXPR:   LXI     SP,STKTOP
        LXI     D,ENMES
        MVI     C,WTFN
        CALL    BDOS
        LXI     D,RDBUF
        MVI     C,RDFN
        CALL    BDOS
        LDA     RDCNT
        CPI     0
        JRZ     EXPR
        LXI     H,COMAND
        LDA     RDCNT
        MOV     B,A
UCON1:  MOV     A,M
        CPI     91
        JM      UCON2
        SUI     32
UCON2:  MOV     M,A
        INX     H
        DJNZ    UCON1
        LXI     X,COMAND
POINT:  MOV     A,0(X)
        INX     X
        CPI     ' '
        JRNZ    TST1
        LDA     RDCNT
        DCR     A
        STA     RDCNT
        JMPR    POINT
TST1:   CPI     'D'
        JRNZ    TST2
        JMP     DISASM
TST2:   CPI     'H'
        JRNZ    TST3
        JMP     HEXMAT
TST3:   CPI     'R'
        JRNZ    TST4
        JMP     RDFILE
TST4:   CPI     'O'
        JRNZ    TST5
        JMP     OPTION
TST5:   CPI     'M'
        JRNZ    TST6
        JMP     MOVEM
TST6:   CPI     'Q'
        JRNZ    TST7
        CALL    CRLF
        LXI     D,FINMES
        MVI     C,WTFN
        CALL    BDOS
        LHLD    SYMBC
        CALL    LADR
        CALL    CRLF
        JMP     WBOOT
TST7:   CPI     'S'
        JRNZ    TST8
        JMP     SHOW
TST8:   CPI     'T'
        JNZ     TST9
        JMP     TYPEIT
TST9:   CPI     'C'
        JNZ     EXPR
        LDA     FCBW+32
        ORA     A
        JRNZ    VERDI
        LDA     FCBW+12
        ORA     A
        JZ      EXPR
VERDI:  XRA     A
        STA     TABC
        LXI     H,ESFSG
        MVI     B,ESFSL
AFTERA: MOV     C,M
        CALL    PO
        INX     H
        DJNZ    AFTERA
        JMP     CDKF
;
;
HEXMAT: CALL    CRLF
        CALL    CRLF
        CALL    PARAM
        LHLD    BIAS
        LDED    RELO
        PUSH    H
        DAD     D
        CALL    LADR
        MVI     C,' '
        CALL    CO
        POP     H
        ORA     A
        DSBC    D
        CALL    LADR
        CALL    CRLF
        JMP     EXPR
;
;
TYPEIT: CALL    CRLF
        CALL    PARAM
        LHLD    BIAS
        LDED    RELO
..T0D:  CALL    LFADR
        MVI     B,16
..T1D:  MOV     A,M
        ANI     7FH
        CPI     ' '
        JRNC    ..T3D
..T2D:  MVI     A,'.'
..T3D:  CPI     07CH
        JRNC    ..T2D
        MOV     C,A
        CALL    CO
        CALL    HILOX
        DJNZ    ..T1D
        JMPR    ..T0D
MOVEM:  CALL    CRLF
        CALL    PARAM
        LHLD    BIAS
        LDED    RELO
        LBCD    OFFST
..M:    MOV     A,M
        STAX    B
        INX     B
        CALL    HILOX
        JMPR    ..M
HILOX:  CALL    HILO
        RNC
        JMP     EXPR
HILO:   INX     H
        MOV     A,H
        ORA     L
        STC
        RZ
        MOV     A,E
        SUB     L
        MOV     A,D
        SBB     H
        RET
;
;
SHOW:   CALL    CRLF
        CALL    PARAM
        LHLD    BIAS
        LDED    RELO
..D0:   CALL    LFADR
..D1:   CALL    BLK
        MOV     A,M
        CALL    LBYTE
        CALL    HILOX
        MOV     A,L
        ANI     0FH
        JRNZ    ..D1
        JMPR    ..D0
;
;
RDFILE: LXI     Y,FCB
        CALL    BLANK
        LXI     Y,FCB
        CALL    FORMIT
        CALL    CRLF
        LXI     B,3
        LXI     H,COMEX
        LXI     D,FCB+9
        LDIR
        LXI     D,FCB
        MVI     C,OPENF
        CALL    BDOS
        CPI     255
        JRNZ    OPNOK
        CALL    CRLF
        LXI     D,OPNM
        MVI     C,WTFN
        CALL    BDOS
        JMP     EXPR
OPNOK:  XRA     A
        STA     FCB+32
        LXI     D,100H
LOOP:   LXI     H,BUFF
        CALL    DISKR
        MVI     B,128
CONTE:  MOV     A,M
        XCHG
        MOV     M,A
        XCHG
        INX     H
        INX     D
        DJNZ    CONTE
        JMPR    LOOP
DISKR:  PUSH    H
        PUSH    D
        PUSH    B
        LXI     D,FCB
        MVI     C,READF
        CALL    BDOS
        POP     B
        POP     D
        POP     H
        CPI     0
        RZ
        CPI     1
        JZ      FINAL
        CALL    CRLF
        LXI     D,RDERRM
        MVI     C,WTFN
        CALL    BDOS
        JMP     EXPR
FINAL:  CALL    CRLF
        LXI     D,MESA3
        MVI     C,WTFN
        CALL    BDOS
        LDA     FCB+12
        MOV     H,A
        LDA     FCB+32
        MOV     L,A
        CALL    LADR
        MVI     B,7
SHIT:   SLAR    L
        RALR    H
        DJNZ    SHIT
        LXI     B,100H
        DAD     B
        PUSH    H
        CALL    CRLF
        LXI     D,MESA4
        MVI     C,WTFN
        CALL    BDOS
        POP     H
        CALL    LADR
        JMP     EXPR
;
;
OPTION: CALL    CRLF
        CALL    CRLF
        XRA     A
        STA     CBYTE
        STA     KBYTE
        MOV     D,A
        MOV     E,A
        LDA     RDCNT
        DCR     A
        JZ      EXPR
        PUSH    D
        LXI     D,OPTMES
        MVI     C,WTFN
        CALL    BDOS
        POP     D
        LDA     RDCNT
        MOV     H,A
LOPIT:  MOV     A,0(X)
        MOV     C,A
        INX     X
        DCR     H
        JRZ     NOWPT
        CPI     'A'
        JRNZ    TMT1
        SET     0,D
        CALL    CO
        JMPR    LOPIT
TMT1:   CPI     'B'
        JRNZ    TMT2
        SET     1,D
        CALL    CO
        JMPR    LOPIT
TMT2:   CPI     'C'
        JRNZ    TMT3
        SET     2,D
        CALL    CO
        JMPR    LOPIT
TMT3:   CPI     'D'
        JRNZ    TMT4
        SET     3,D
        CALL    CO
        JMPR    LOPIT
TMT4:   CPI     'E'
        JRNZ    TMT5
        SET     4,D
        CALL    CO
        JMPR    LOPIT
TMT5:   CPI     'F'
        JRNZ    TMT6
        SET     5,D
        CALL    CO
        JMPR    LOPIT
TMT6:   CPI     'G'
        JRNZ    TMT7
        SET     6,D
        CALL    CO
        JMPR    LOPIT
TMT7:   CPI     'H'
        JRNZ    TMT8
        SET     7,D
        CALL    CO
        JMPR    LOPIT
TMT8:   CPI     'I'
        JRNZ    TMT9
        SET     0,E
        CALL    CO
        JMPR    LOPIT
TMT9:   CPI     'J'
        JRNZ    TMT10
        SET     1,E
        CALL    CO
        JMPR    LOPIT
TMT10:  CPI     'K'
        JRNZ    LOPIT
        SET     2,E
        CALL    CO
        JMP     LOPIT
NOWPT:  CALL    CRLF
        CALL    CRLF
        MOV     A,D
        STA     CBYTE
        MOV     A,E
        STA     KBYTE
        JMP     EXPR
;
;
;       SUBROUTINES
;
CRLF:   MVI     C,CR
        CALL    CO
        MVI     C,LF
        CALL    CO
        RET
LFADR:  CALL    CRLF
HLSP:   CALL    LADR
BLK:    MVI     C,' '
CO:     PUSH    B
        PUSH    H
        PUSH    D
        MVI     D,0
        MOV     E,C
        MVI     C,COFN
        CALL    BDOS
        POP     D
        POP     H
        POP     B
        MOV     A,C
        RET
PARAM:  LXI     H,0
        SHLD    BIAS
        SHLD    RELO
        SHLD    OFFST
        LDA     RDCNT
        DCR     A
        RZ
        MOV     C,A
DREN:   MOV     A,0(X)
        CPI     ' '
        JRNZ    BRA2
        DCR     C
        INX     X
        RZ
        JMPR    DREN
BRA2:   CALL    CONVER
        JRC     ..EX1
        DAD     H
        DAD     H
        DAD     H
        DAD     H
        ORA     L
        MOV     L,A
        DCR     C
        JRNZ    BRA2
        SHLD    BIAS
        RET
..EX1:  SHLD    BIAS
        MOV     A,B
        CPI     ' '
        JRZ     CONT
        CPI     ','
        JRZ     CONT
        JMP     EXPR
CONT:   LXI     H,0
        DCR     C
        RZ
BRA1:   CALL    CONVER
        JRC     ..EX2
        DAD     H
        DAD     H
        DAD     H
        DAD     H
        ORA     L
        MOV     L,A
        DCR     C
        JRNZ    BRA1
        SHLD    RELO
        RET
..EX2:  SHLD    RELO
        MOV     A,B
        CPI     ' '
        JRZ     CONT1
        CPI     ','
        JRZ     CONT1
        JMP     EXPR
CONT1:  LXI     H,0
        DCR     C
        RZ
BRA3:   CALL    CONVER
        JC      EXPR
        DAD     H
        DAD     H
        DAD     H
        DAD     H
        ORA     L
        MOV     L,A
        DCR     C
        JRNZ    BRA3
        SHLD    OFFST
        RET
CONVER: MOV     A,0(X)
        INX     X
        MOV     B,A
CONV:   SUI     '0'
        RC
        CPI     'G'-'0'
        CMC
        RC
        CPI     10
        CMC
        RNC
        SUI     'A'-'9'-1
        CPI     0AH
        RET
LADR:   MOV     A,H
        CALL    LBYTE
        MOV     A,L
LBYTE:  PUSH    PSW
        RRC
        RRC
        RRC
        RRC
        CALL    ..2
        POP     PSW
..2:    CALL    ZONV
        JMP     CO
ZONV:   ANI     0FH
        ADI     90H
        DAA
        ACI     40H
        DAA
        MOV     C,A
        RET
BLANK:  MVI     A,1
        MOV     0(Y),A
        MVI     B,11
        MVI     A,' '
LPAGE:  INX     Y
        MOV     0(Y),A
        DCR     B
        JRNZ    LPAGE
        XRA     A
        MVI     B,21
OVAGP:  INX     Y
        MOV     0(Y),A
        DCR     B
        JRNZ    OVAGP
        RET
FORMIT: LDA     RDCNT
        DCR     A
        JZ      EXPR
        MOV     C,A
ALTOS:  MOV     A,0(X)
        CPI     ' '
        JRNZ    NITS
        DCR     C
        INX     X
        JZ      EXPR
        JMPR    ALTOS
NITS:   MOV     A,1(X)
        CPI     ':'
        JRZ     FOUND1
        JMPR    FORT2
FOUND1: MOV     A,0(X)
        INX     X
        INX     X
        DCR     C
        DCR     C
        SUI     64
        MOV     0(Y),A
FORT2:  INX     Y
        MOV     A,0(X)
        CPI     '.'
        RZ
        MOV     0(Y),A
        INX     X
        DCR     C
        JRNZ    FORT2
        RET
TOM1:   MOV     C,M
        INX     H
        CALL    CO
        DJNZ    TOM1
        RET
RSDF:   LXI     D,OFCMD
        MVI     C,WTFN
        CALL    BDOS
        LXI     D,RDBUF
        MVI     C,RDFN
        CALL    BDOS
        LDA     RDCNT
        CPI     0
        JRZ     RSDF
        LXI     H,COMAND
        LDA     RDCNT
        MOV     B,A
ACON1:  MOV     A,M
        CPI     91
        JM      ACON2
        SUI     32
ACON2:  MOV     M,A
        INX     H
        DCR     B
        JRNZ    ACON1
        LXI     X,COMAND
POINTA: MOV     A,0(X)
        INX     X
        CPI     ' '
        JRNZ    OKNDT
        LDA     RDCNT
        DCR     A
        STA     RDCNT
        JMPR    POINTA
OKNDT:  LXI     Y,FCBW
        LDA     RDCNT
        INR     A
        STA     RDCNT
        DCX     X
        CALL    BLANK
        LXI     Y,FCBW
        CALL    FORMIT
        LXI     B,3
        LXI     H,TDLT
        LXI     D,FCBW+9
        LDIR
        LDA     FCBW
        DCR     A
        MVI     D,0
        MOV     E,A
        MVI     C,LOGIN
        CALL    BDOS
        LXI     D,FCBW
        MVI     C,SEARCH
        CALL    BDOS
        CPI     255
        JRZ     MAKE
        LXI     D,FCBW
        MVI     C,DELETE
        CALL    BDOS
MAKE:   LXI     D,FCBW
        MVI     C,MAKEF
        CALL    BDOS
        CPI     255
        JRNZ    OPEN
        CALL    CRLF
        LXI     D,DIREM
        MVI     C,WTFN
        CALL    BDOS
OPEN:   LXI     D,FCBW
        MVI     C,OPENF
        CALL    BDOS
        CPI     255
        JRNZ    OOKK
        CALL    CRLF
        LXI     D,OPNM
        MVI     C,WTFN
        CALL    BDOS
        JMP     EXPR
OOKK:   XRA     A
        STA     FCBW+32
        STA     WTPTR
        RET
PEOL:   MVI     C,CR
        CALL    PO
        MVI     C,LF
PO:     PUSH    X
        LXI     X,FCBW
        CALL    WDSKF
        POP     X
        RET
WDSKF:  PUSH    H
        PUSH    D
        PUSH    B
        LDA     WTPTR
        CPI     80H
        JRNZ    WTBYT
        CALL    DISKWR
        XRA     A
WTBYT:  MOV     E,A
        MVI     D,0
        INR     A
        STA     WTPTR
        LXI     H,WTBUF
        DAD     D
        MOV     M,C
        POP     B
        POP     D
        POP     H
        MOV     A,C
        RET
DISKWR: PUSH    B
        LXI     D,WTBUF
        MVI     C,SDMA
        CALL    BDOS
        PUSH    X
        POP     D
        MVI     C,DWRIT
        CALL    BDOS
        PUSH    PSW
        LXI     D,BUFF
        MVI     C,SDMA
        CALL    BDOS
        POP     PSW
        CPI     0
        JRZ     BNC2
        CALL    CRLF
        LXI     D,WEMS1
        MVI     C,WTFN
        CALL    BDOS
        POP     H
        POP     H
        POP     H
        POP     H
        CALL    LADR
        CALL    CRLF
        JMP     ABTRR
BNC2:   POP     B
        RET
CONSTA: PUSH    H
        PUSH    D
        PUSH    B
        MVI     C,11
        CALL    BDOS
        ANI     1
        JRNZ    TRUX
        XRA     A
        JMPR    EXST1
TRUX:   MVI     A,TRUE
EXST1:  POP     B
        POP     D
        POP     H
        RET
CI:     PUSH    H
        PUSH    D
        PUSH    B
        MVI     C,1
        CALL    BDOS
        ANI     7FH
        POP     B
        POP     D
        POP     H
        RET
CDKF:   MVI     C,'Z'-40H
        CALL    PO
        LXI     X,FCBW
        CALL    DISKWR
ABTRR:  LXI     D,FCBW
        MVI     C,CLSFN
        CALL    BDOS
        CPI     255
        JNZ     EXPR
        CALL    CRLF
        LXI     D,CLEER
        MVI     C,WTFN
        CALL    BDOS
        CALL    CRLF
        JMP     EXPR
;
;       MAIN PROGRAM
;
DISASM: CALL    CRLF
        CALL    PARAM
        LHLD    BIAS
        LDED    RELO
        SHLD    BBUF
        SDED    EBUF
        LXI     H,SGNMG
        MVI     B,SNMGL
        CALL    TOM1
        .RADIX  16
BEGIN:  LDA     CBYTE
        ANI     2
        JRNZ    APNFL
NEWFL:  LDA     CBYTE
        ANI     04
        JRZ     KSFIN
        XRA     A
        STA     SYMTB
        LXI     H,0
        SHLD    SYMBC
        LXI     H,SYMNUM
        SHLD    SYMBC1
KSFIN:  LDA     CBYTE
        ANI     80
        JRZ     START
        CALL    RSDF
        CALL    PEOL
START:  LHLD    BBUF
DISAM:  CALL    LINE
        CALL    ENDCK
        JMPR    DISAM
APNFL:  LDA     KBYTE
        ANI     01
        JRNZ    KSFIN
        JMPR    START
LINE:   LDA     KBYTE
        ANI     04
        CZ      LADR
        MVI     A,0FC
        STA     TABC
        MVI     A,TAB
        CALL    TYPE
        MOV     B,H
        MOV     C,L
        LDA     CBYTE
        ANI     01
        CNZ     PRTLB
        JRNC    ..A0
        MVI     A,':'
        CALL    ZTYPE
..A0:   MVI     A,TAB
        CALL    ZTYPE
        LDA     CBYTE
        ANI     20
        JNZ     PRDB
        PUSH    H
        MOV     H,M
        LXI     B,OTABM
;
;       OPCODE TABLE LOOKUP
;
ULP:    LDAX    B
        ORA     A
        JZ      SFRET
        ANA     H
        MOV     L,A
        INX     B
        LDAX    B
        CMP     L
        JZ      FOUND
        MOV     A,C
        ADI     06
        MOV     C,A
        JRNC    ULP
        INR     B
        JMPR    ULP
;
FOUND:  INX     B
        LDAX    B
        STA     TYFLG
        PUSH    D
        MOV     E,A
        MVI     D,00
        LXI     H,JMTBL
        DAD     D
        DAD     D
        MOV     D,M
        INX     H
        MOV     H,M
        MOV     L,D
        POP     D
        XTHL
        RET
;
TYPE0:  CALL    PROP
IXHRT:  INX     H
        JMP     RET
;
TYPE1:  CALL    PROP
T1B:    CALL    REG
        JMPR    IXHRT
;
TYPE2:  CALL    PROP
        CALL    REGM
        JMPR    IXHRT
;
TYPE3:  CALL    PROP
        CALL    XR
        JMPR    IXHRT
;
TYPE4:  CALL    PROP
        CALL    REGM
T4B:    CALL    COMMA
        JMPR    T52
;
TYPE5:  CALL    PROP
T52:    INX     H
T53:    MOV     A,M
        CALL    X00
T54:    MVI     A,'H'
        CALL    ZTYPE
        MOV     A,M
        INX     H
        PUSH    B
        MOV     B,A
        LDA     CBYTE
        ANI     10
        MOV     A,B
        POP     B
        JZ      RET
        CPI     ' '
        JC      RET
        CPI     'Z'+1
        JNC     RET
        LDA     TYFLG
        CPI     04
        JC      RET
        CPI     06
        JNC     RET
        MVI     A,TAB
        CALL    ZTYPE
        MVI     A,';'
        CALL    ZTYPE
        DCX     H
        MOV     A,M
        INX     H
QCHAR:  PUSH    PSW
        CALL    OQ
        POP     PSW
        MVI     A,27
        CALL    ZTYPE
        JMP     RET
;
TYPE6:  CALL    PROP
        CALL    XR
T6B:    CALL    COMMA
        LDA     CBYTE
        ANI     40
        JRZ     TYP6H
PRT2X:  CALL    SYMBO
        JC      RET
TYP6H:  INX     H
        MOV     B,M
        INX     H
        MOV     A,M
        CALL    X00
        MOV     A,B
        CALL    X0
        JMPR    T54
;
TYPREL: CALL    PROP
        INX     H
        MOV     A,M
        CALL    X21
        JMP     T54
;
TYPE7:  CALL    PROP
        CALL    SYMBO
        JC      RET
        LDA     CBYTE
        ANI     08
        JRZ     TYP6H
        MVI     A,'L'
        CALL    ZTYPE
        INX     H
        MOV     B,M
        INX     H
        MOV     A,M
        CALL    X00
        MOV     A,B
        CALL    X0
        JMP     IXHRT
;
TYPE8:  INX     B
        LDAX    B
        STA     CC1
        CALL    GETCC
        JMPR    TYPE7
;
TYPE9:  MVI     A,'R'
        STA     CC1
        CALL    GETCC
        JMP     TYPE0
;
TYPEA:  CALL    PROP
        RAR
        RAR
        RAR
        ANI     07
        ADI     '0'
        CALL    ZTYPE
        JMP     IXHRT
;
TYPEB:  CALL    PROP
        CALL    REGM
        CALL    COMMA
        MOV     A,M
        JMP     T1B
;
TYPEC   =       TYPREL
;
TYPED:  INX     B
        LDAX    B
        STA     CC1-1
        INX     B
        LDAX    B
        STA     CC1
        MOV     A,M
        ANI     0DF
        CALL    GETC
        DCX     B
        JMP     TYPREL
;
TYPEE:  INX     H
        PUSH    H
        MOV     H,M
        LXI     B,OTABC
ULP1:   MVI     A,21
ULP2:   STA     TYFLG
        JMP     ULP
;
TYPEF:  INX     H
        PUSH    H
        MOV     H,M
        LXI     B,OTABE
        JMPR    ULP1
;
TYP10:  INX     B
        PUSH    B
        INX     H
        PUSH    H
        MOV     H,M
        MVI     A,0CB
        CMP     H
        JZ      TY10C
        LXI     B,OTBIR
        MVI     A,41
        JMPR    ULP2
;
TY10C:  POP     H
        INX     H
        INX     H
        PUSH    H
        MOV     H,M
        LXI     B,OTBIC
        MVI     A,43
        JMPR    ULP2
;
TYP11:  CALL    GRSCC
        JMP     TYPE1
;
TYP12:  CALL    PROP
        CALL    POTLM
        CALL    COMMA
        MOV     A,M
        JMP     T1B
;
TYP13:  INX     B
        LDAX    B
        STA     CC1
        INX     B
        INX     B
        INX     B
        LDAX    B
        STA     CCB
        CALL    GETXR
        JMP     TYPE7
;
TYP14:  INX     B
        LDAX    B
        STA     CC1
        INX     B
        LDAX    B
        STA     CC1+1
        CALL    GETBX
        JMP     TYPE0
;
TYP15:  MVI     A,'O'
        CALL    ZTYPE
        JMPR    TYP14
;
TYP16:  INX     B
        LDAX    B
        STA     CC1
        INX     B
        LDAX    B
        STA     CC1+1
        POP     B
        MVI     A,'I'
        STA     CC1+2
        INX     B
        LDAX    B
        STA     CCB
        LXI     B,CC1-1
        JMP     TYPE0
;
TYP17:  CALL    PROP
        POP     B
        CALL    PRIR
        JMP     IXHRT
;
TYP18:  CALL    PROP
        INX     H
        MOV     A,M
        CALL    X00
        POP     B
        CALL    PRIRP
        MVI     A,04
        STA     TYFLG
        JMP     T4B
;
TYP19:  CALL    PROP
        POP     B
        CALL    PRIR
        JMP     T6B
;
TYP1A:  INX     B
        LDAX    B
        STA     CC1
        INX     B
        INX     B
        INX     B
        LDAX    B
        STA     CCB
        POP     B
        MVI     A,'I'
        STA     CC1+1
        INX     B
        LDAX    B
        STA     CC1+2
        LXI     B,CC1-1
        JMP     TYPE7
;
TYP1B:  CALL    PROP
        INX     H
        MOV     A,M
        CALL    X00
        POP     B
        CALL    PRIRP
        DCX     H
        CALL    COMMA
        MOV     A,M
        CALL    REG
IXHHR:  INX     H
        JMP     IXHRT
;
TYP1C:  CALL    PROP
        CALL    REGM
        CALL    COMMA
        INX     H
        MOV     A,M
        CALL    X00
        POP     B
        CALL    PRIRP
        JMP     IXHRT
;
TYP1D:  CALL    PROP
        CALL    POTLM
        CALL    COMMA
TY1DB:  DCX     H
        MOV     A,M
        CALL    X00
        POP     B
        CALL    PRIRP
        JMPR    IXHHR
;
TYP1E:  CALL    GRSCC
        CALL    PROP
        JMPR    TY1DB
;
TYP1F:  CALL    PROP
        INX     H
        MOV     A,M
        CALL    X00
        POP     B
        CALL    PRIRP
        JMP     IXHRT
;
TYP20:  INX     B
        LDAX    B
        STA     CC1
        INX     B
        LDAX    B
        STA     CC1+1
        POP     B
        MVI     A,'D'
        STA     CC1+2
        INX     B
        LDAX    B
        STA     CCB
        LXI     B,CC1-1
        CALL    PROP
        CALL    TST20
        MOV     A,B
        CALL    ZTYPE
        JMP     IXHRT
TST20:  CPI     09
        MVI     B,'B'
        RZ
        CPI     19
        MVI     B,'D'
        RZ
        CPI     39
        JRNZ    ATST1
        MVI     A,'S'
        CALL    ZTYPE
        MVI     B,'P'
        RET
ATST1:  DCX     H
        MOV     A,M
        CPI     0DD
        JRNZ    YTST1
        MVI     B,'X'
        INX     H
        RET
YTST1:  INX     H
        MVI     B,'Y'
        RET
;
SFRET:  LDA     TYFLG
        CPI     20
        POP     H
        JC      PRDB
        CPI     40
        JRC     BKUPH
        POP     B
BKUPH:  ANI     0F
        MOV     B,A
        XRA     A
        STA     TYFLG
BUHLP:  DCX     H
        DJNZ    BUHLP
        JMP     PRDB
;
;       DISASSEMBLER SUBROUTINES
;
COMMA:  MVI     A,','
        JMP     ZTYPE
;
PRDB:   PUSH    H
        LXI     H,BYTSG
        MVI     B,BYSGL
PRDB1:  MOV     A,M
        CALL    ZTYPE
        INX     H
        DJNZ    PRDB1
        MVI     A,TAB
        CALL    ZTYPE
        POP     H
        LDA     CBYTE
        ANI     30
        CPI     30
        JNZ     T53
        MOV     A,M
        CPI     ' '
        JC      T53
        CPI     'Z'+1
        JNC     T53
        INX     H
        JMP     QCHAR
;
GETCC:  MOV     A,M
GETC:   RAR
        RAR
        ANI     0E
        PUSH    H
        LXI     H,CCTAB
        CALL    ADD
        MOV     A,M
        STA     CC1+1
        INX     H
        MOV     A,M
        STA     CC1+2
        POP     H
        LXI     B,CC1-1
        MVI     A,' '
        STA     CCB
        RET
;
HEXL:   RAR
        RAR
        RAR
        RAR
HEXR:   ANI     0F
        CPI     0A
        JC      HEXRN
        ADI     07
HEXRN:  ADI     '0'
        RET
;
X0:     PUSH    PSW
        CALL    HEXL
        CALL    ZTYPE
        POP     PSW
        CALL    HEXR
        JMP     ZTYPE
;
OQ:     PUSH    PSW
        MVI     A,' '
        CALL    ZTYPE
        MVI     A,27
        CALL    ZTYPE
        POP     PSW
        JMP     ZTYPE
;
PROP:   PUSH    D
        MVI     D,4
PROPL:  INX     B
        LDAX    B
        CALL    ZTYPE
        DCR     D
        JRNZ    PROPL
        MVI     A,TAB
        CALL    ZTYPE
        POP     D
        MOV     A,M
        RET
;
XR:     RAR
        RAR
        RAR
        ANI     06
        CPI     06
        JRNZ    REG
        MOV     A,M
        ORA     A
        JM      PRPSW
PRTSP:  MVI     A,'S'
        CALL    ZTYPE
        MVI     A,'P'
        JMP     ZTYPE
PRPSW:  MVI     A,'P'
        CALL    ZTYPE
        MVI     A,'S'
        CALL    ZTYPE
        MVI     A,'W'
        JMP     ZTYPE
;
REGM:   RAR
        RAR
        RAR
;
REG:    PUSH    H
        LXI     H,RTAB
        ANI     07
        CALL    ADD
        MOV     A,M
        POP     H
        JMP     ZTYPE
;
ADD:    ADD     L
        MOV     L,A
        RNC
        INR     H
        RET
;
X21:    PUSH    H
        PUSH    PSW
        DCX     H
        MOV     A,M
        CPI     10
        JZ      RELADD
        CPI     38
        JZ      RELADD
        CPI     18
        JZ      RELADD
        CPI     30
        JZ      RELADD
        CPI     20
        JZ      RELADD
        CPI     28
        JZ      RELADD
X000:   POP     PSW
        POP     H
X00:    CPI     0A0
        JC      X0
        PUSH    PSW
        MVI     A,'0'
        CALL    ZTYPE
        POP     PSW
        JMP     X0
RELADD: PUSH    D
        MVI     D,0
        INX     H
        MOV     A,M
        INX     H
        ORA     A
        JM      SUBIT
        MOV     E,A
        DAD     D
        SHLD    TEMHL
        JMPR    ZIPIT
SUBIT:  CMA
        ADI     01
        MOV     E,A
        SLAR    D
        DSBC    D
        SHLD    TEMHL
ZIPIT:  LXI     H,TEMHL-1
        CALL    SYMBO
        POP     D
        JNC     X000
        POP     PSW
        POP     H
        SHLD    TEMHL
        POP     H
        LHLD    TEMHL
        JMP     IXHRT
TEMHL:  .WORD   0
;
RET:    MVI     A,CR
;
ZTYPE:  PUSH    B
        MOV     B,A
        LDA     CBYTE
        RAL
        MOV     A,B
        JRNC    TYPEP
DFOUT:  MOV     C,A
        CALL    PO
TYPEP:  POP     B
TYPE:   PUSH    B
        CPI     TAB
        JRZ     TABX
        MOV     C,A
        LDA     KBYTE
        ANI     04
        MOV     A,C
        JRNZ    FFFFD
        CALL    CO
FFFFD:  MOV     B,A
        LDA     TABC
        DCR     A
        STA     TABC
        MOV     A,B
        POP     B
        CPI     CR
        RNZ
EOL:    MVI     A,LF
        JMPR    ZTYPE
TABX:   PUSH    PSW
        LDA     TABC
        MOV     B,A
TABXL:  MVI     C,20
        LDA     KBYTE
        ANI     04
        JRNZ    AAAAF
        CALL    CO
AAAAF:  MOV     A,B
        ANI     07
        MOV     B,A
        DJNZ    TABXL
        XRA     A
        STA     TABC
        POP     PSW
        POP     B
        RET
;
SYMBO:  LDA     CBYTE
        ANI     05
        RZ
        ANI     01
        JRNZ    FRMTB
;
        CALL    SYBLD
        ORA     A
        RET
;
FRMTB:  INX     H
        MOV     C,M
        INX     H
        MOV     B,M
        INX     H
        CALL    PRTLB
        RC
        DCX     H
        DCX     H
        DCX     H
        ORA     A
        RET
PRTLB:  CALL    LOOKU
        CMC
        RNC
        MVI     B,5
SYPLP:  LDAX    D
        INX     D
        ORA     A
        JRZ     SYPEX
        CALL    ZTYPE
        DJNZ    SYPLP
SYPEX:  STC
        RET
;
SYBLD:  INX     H
        MOV     C,M
        INX     H
        MOV     B,M
        DCX     H
        DCX     H
        CALL    LOOKU
        RNC
        MVI     A,'L'
        STAX    D
        INX     D
        MOV     A,B
        CALL    SYSTX
        MOV     A,C
        CALL    SYSTX
        MOV     A,B
        STAX    D
        INX     D
        MOV     A,C
        STAX    D
        XRA     A
        INX     D
        STAX    D
        PUSH    H
        LHLD    SYMBC
        INX     H
        SHLD    SYMBC
        LHLD    SYMBC1
        DCX     H
        MOV     A,H
        ORA     L
        JRNZ    HITIT
        CALL    CRLF
        MVI     C,WTFN
        LXI     D,TERRM
        CALL    BDOS
        CALL    CRLF
        JMP     EXPR
HITIT:  SHLD    SYMBC1
        POP     H
        STC
        RET
;
SYSTX:  PUSH    PSW
        CALL    HEXL
        STAX    D
        INX     D
        POP     PSW
        CALL    HEXR
        STAX    D
        INX     D
        RET
;
LOOKU:  LXI     D,SYMTB
LULP:   LDAX    D
        ORA     A
        STC
        RZ
        INX     D
	INX	D
        INX     D
        INX     D
        INX     D
        LDAX    D
        CMP     B
        INX     D
        JRNZ    LUNO
        LDAX    D
        CMP     C
        JRNZ    LUNO
        DCX     D
        DCX     D
        DCX     D
        DCX     D
        DCX     D
        DCX     D
        ORA     A
        RET
LUNO:   INX     D
        JMPR    LULP
;
GRSCC:  MOV     A,M
        RAR
        ANI     1C
        PUSH    H
        LXI     H,RSTAB
        CALL    ADD
        MOV     A,M
        STA     CC1
        INX     H
        MOV     A,M
        STA     CC1+1
        INX     H
        MOV     A,M
        STA     CC1+2
        INX     H
        MOV     A,M
        STA     CCB
        POP     H
        LXI     B,CC1-1
        RET
;
POTLM:  RAR
        RAR
        RAR
POTL:   ANI     07
        ADI     30
        JMP     ZTYPE
;
GETXR:  MOV     A,M
        RAR
        RAR
        RAR
        ANI     06
        CPI     06
        JRNZ    GETRP
        MVI     A,'S'
        STA     CC1+1
        MVI     A,'P'
        STA     CC1+2
        LXI     B,CC1-1
        RET
;
GETRP:  PUSH    H
        LXI     H,RTAB
        CALL    ADD
        MOV     A,M
        STA     CC1+1
        INX     H
        MOV     A,M
        STA     CC1+2
        JMPR    GETEX
;
GETBX:  MOV     A,M
        RAR
        RAR
        ANI     06
        PUSH    H
        LXI     H,BXTAB
        CALL    ADD
        MOV     A,M
        STA     CC1+2
        INX     H
        MOV     A,M
        STA     CCB
GETEX:  POP     H
        LXI     B,CC1-1
        RET
;
PRIR:   INX     B
        LDAX    B
        CALL    ZTYPE
        RET
PRIRP:  MVI     A,'H'
        CALL    ZTYPE
        PUSH    D
        MVI     D,03
        DCX     B
PIRPL:  INX     B
        LDAX    B
        CALL    ZTYPE
        DCR     D
        JRNZ    PIRPL
        POP     D
        RET
;
ENDCK:  LDA     EBUF
        SUB     L
        LDA     EBUF+1
        SBB     H
        JRNC    CKCTC
END:    LDA     KBYTE
        ANI     02
        JZ      EXPR
ENDSF:  PUSH    H
        XRA     A
        STA     TABC
        LXI     H,ESFSG
        MVI     B,ESFSL
EDSFL:  MOV     A,M
        CALL    ZTYPE
        INX     H
        DJNZ    EDSFL
        POP     H
        JMP     CDKF
CKCTC:  CALL    CONSTA
        CPI     TRUE
        RNZ
        CALL    CI
        CPI     'K'-40
        JZ      EXPR
        CPI     'S'-40
        RNZ
        CALL    CI
        CPI     'K'-40
        JZ      EXPR
        RET
;
;       TABLES
;
JMTBL:  .WORD   TYPE0
        .WORD   TYPE1
        .WORD   TYPE2
        .WORD   TYPE3
        .WORD   TYPE4
        .WORD   TYPE5
        .WORD   TYPE6
        .WORD   TYPE7
        .WORD   TYPE8
        .WORD   TYPE9
        .WORD   TYPEA
        .WORD   TYPEB
        .WORD   TYPEC
        .WORD   TYPED
        .WORD   TYPEE
        .WORD   TYPEF
        .WORD   TYP10
        .WORD   TYP11
        .WORD   TYP12
        .WORD   TYP13
        .WORD   TYP14
        .WORD   TYP15
        .WORD   TYP16
        .WORD   TYP17
        .WORD   TYP18
        .WORD   TYP19
        .WORD   TYP1A
        .WORD   TYP1B
        .WORD   TYP1C
        .WORD   TYP1D
        .WORD   TYP1E
        .WORD   TYP1F
        .WORD   TYP20
        .WORD   PRDB
;
CCTAB:  .ASCII  'NZ'
        .ASCII  'Z '
        .ASCII  'NC'
        .ASCII  'C '
        .ASCII  'PO'
        .ASCII  'PE'
        .ASCII  'P '
        .ASCII  'M '
;
RTAB:   .ASCII  'BC'
        .ASCII  'DE'
        .ASCII  'HL'
        .ASCII  'MA'
;
RSTAB:  .ASCII  'RLCR'
        .ASCII  'RRCR'
        .ASCII  'RALR'
        .ASCII  'RARR'
        .ASCII  'SLAR'
        .ASCII  'SRAR'
        .ASCII  'UNDF'
        .ASCII  'SRLR'
;
BXTAB:  .ASCII  'I '
        .ASCII  'D '
        .ASCII  'IR'
        .ASCII  'DR'
;
;       OPCODE TABLES
;
OTABM:  .BYTE   0FF
        .WORD   0000
        .ASCII  'NOP '
        .BYTE   0FF
        .WORD   0007
        .ASCII  'RLC '
        .BYTE   0FF
        .WORD   000F
        .ASCII  'RRC '
        .BYTE   0FF
        .WORD   0017
        .ASCII  'RAL '
        .BYTE   0FF
        .WORD   00EB
        .ASCII  'XCHG'
        .BYTE   0FF
        .WORD   001F
        .ASCII  'RAR '
        .BYTE   0FF
        .WORD   0722
        .ASCII  'SHLD'
        .BYTE   0FF
        .WORD   0027
        .ASCII  'DAA '
        .BYTE   0FF
        .WORD   072A
        .ASCII  'LHLD'
        .BYTE   0FF
        .WORD   002F
        .ASCII  'CMA '
        .BYTE   0FF
        .WORD   0732
        .ASCII  'STA '
        .BYTE   0FF
        .WORD   0037
        .ASCII  'STC '
        .BYTE   0FF
        .WORD   073A
        .ASCII  'LDA '
        .BYTE   0FF
        .WORD   003F
        .ASCII  'CMC '
        .BYTE   0FF
        .WORD   0076
        .ASCII  'HLT '
        .BYTE   0C0
        .WORD   0B40
        .ASCII  'MOV '
        .BYTE   0FF
        .WORD   07C3
        .ASCII  'JMP '
        .BYTE   0FF
        .WORD   00C9
        .ASCII  'RET '
        .BYTE   0FF
        .WORD   07CD
        .ASCII  'CALL'
        .BYTE   0FF
        .WORD   05D3
        .ASCII  'OUT '
        .BYTE   0FF
        .WORD   05DB
        .ASCII  'IN  '
        .BYTE   0FF
        .WORD   00E3
        .ASCII  'XTHL'
        .BYTE   0FF
        .WORD   00E9
        .ASCII  'PCHL'
        .BYTE   0FF
        .WORD   00F3
        .ASCII  'DI  '
        .BYTE   0FF
        .WORD   00FB
        .ASCII  'EI  '
        .BYTE   0FF
        .WORD   00F9
        .ASCII  'SPHL'
        .BYTE   0FF
        .WORD   05C6
        .ASCII  'ADI '
        .BYTE   0FF
        .WORD   05CE
        .ASCII  'ACI '
        .BYTE   0FF
        .WORD   05D6
        .ASCII  'SUI '
        .BYTE   0FF
        .WORD   05DE
        .ASCII  'SBI '
        .BYTE   0FF
        .WORD   05E6
        .ASCII  'ANI '
        .BYTE   0FF
        .WORD   05EE
        .ASCII  'XRI '
        .BYTE   0FF
        .WORD   05F6
        .ASCII  'ORI '
        .BYTE   0FF
        .WORD   05FE
        .ASCII  'CPI '
        .BYTE   0FF
        .WORD   0008
        .ASCII  'EXAF'
        .BYTE   0FF
        .WORD   0C10
        .ASCII  'DJNZ'
        .BYTE   0FF
        .WORD   0C18
        .ASCII  'JMPR'
        .BYTE   0FF
        .WORD   00D9
        .ASCII  'EXX '
        .BYTE   0FF
        .WORD   0ECB
        .ASCII  '....'
        .BYTE   0FF
        .WORD   0FED
        .ASCII  '....'
        .BYTE   0FF
        .WORD   10DD
        .ASCII  '(X).'
        .BYTE   0FF
        .WORD   10FD
        .ASCII  '(Y).'
        .BYTE   0E7
        .WORD   0D20
        .ASCII  'JR..'
        .BYTE   0F8
        .WORD   0180
        .ASCII  'ADD '
        .BYTE   0F8
        .WORD   0188
        .ASCII  'ADC '
        .BYTE   0F8
        .WORD   0190
        .ASCII  'SUB '
        .BYTE   0F8
        .WORD   0198
        .ASCII  'SBB '
        .BYTE   0F8
        .WORD   01A0
        .ASCII  'ANA '
        .BYTE   0F8
        .WORD   01A8
        .ASCII  'XRA '
        .BYTE   0F8
        .WORD   01B0
        .ASCII  'ORA '
        .BYTE   0F8
        .WORD   01B8
        .ASCII  'CMP '
        .BYTE   0C7
        .WORD   0204
        .ASCII  'INR '
        .BYTE   0C7
        .WORD   0205
        .ASCII  'DCR '
        .BYTE   0EF
        .WORD   0302
        .ASCII  'STAX'
        .BYTE   0EF
        .WORD   030A
        .ASCII  'LDAX'
        .BYTE   0CF
        .WORD   03C1
        .ASCII  'POP '
        .BYTE   0CF
        .WORD   03C5
        .ASCII  'PUSH'
        .BYTE   0C7
        .WORD   0406
        .ASCII  'MVI '
        .BYTE   0CF
        .WORD   0303
        .ASCII  'INX '
        .BYTE   0CF
        .WORD   0309
        .ASCII  'DAD '
        .BYTE   0CF
        .WORD   030B
        .ASCII  'DCX '
        .BYTE   0C7
        .WORD   08C2
        .ASCII  'J...'
        .BYTE   0C7
        .WORD   08C4
        .ASCII  'C...'
        .BYTE   0CF
        .WORD   0601
        .ASCII  'LXI '
        .BYTE   0C7
        .WORD   09C0
        .ASCII  'R...'
        .BYTE   0C7
        .WORD   0AC7
        .ASCII  'RST '
        .BYTE   00
;
;
OTABC:  .BYTE   0C0
        .WORD   1100
        .ASCII  '....'
        .BYTE   0C0
        .WORD   1240
        .ASCII  'BIT '
        .BYTE   0C0
        .WORD   1280
        .ASCII  'RES '
        .BYTE   0C0
        .WORD   12C0
        .ASCII  'SET '
        .BYTE   00
;
;
OTABE:  .BYTE   0FF
        .WORD   0044
        .ASCII  'NEG '
        .BYTE   0FF
        .WORD   0045
        .ASCII  'RETN'
        .BYTE   0FF
        .WORD   004D
        .ASCII  'RETI'
        .BYTE   0FF
        .WORD   0046
        .ASCII  'IM0 '
        .BYTE   0FF
        .WORD   0056
        .ASCII  'IM1 '
        .BYTE   0FF
        .WORD   005E
        .ASCII  'IM2 '
        .BYTE   0FF
        .WORD   0067
        .ASCII  'RRD '
        .BYTE   0FF
        .WORD   006F
        .ASCII  'RLD '
        .BYTE   0FF
        .WORD   0047
        .ASCII  'STAI'
        .BYTE   0FF
        .WORD   004F
        .ASCII  'STAR'
        .BYTE   0FF
        .WORD   0057
        .ASCII  'LDAI'
        .BYTE   0FF
        .WORD   005F
        .ASCII  'LDAR'
        .BYTE   0CF
        .WORD   1343
        .ASCII  'S..D'
        .BYTE   0CF
        .WORD   134B
        .ASCII  'L..D'
        .BYTE   0E7
        .WORD   14A0
        .ASCII  'LD..'
        .BYTE   0E7
        .WORD   14A1
        .ASCII  'CC..'
        .BYTE   0E7
        .WORD   14A2
        .ASCII  'IN..'
        .BYTE   0E7
        .WORD   15A3
        .ASCII  'UT..'
        .BYTE   0C7
        .WORD   0240
        .ASCII  'INP '
        .BYTE   0C7
        .WORD   0241
        .ASCII  'OUTP'
        .BYTE   0CF
        .WORD   034A
        .ASCII  'DADC'
        .BYTE   0CF
        .WORD   0342
        .ASCII  'DSBC'
	.BYTE	00
;
;
OTBIR:  .BYTE   0FF
        .WORD   16E9
        .ASCII  'PC..'
        .BYTE   0C9
        .WORD   2009
        .ASCII  'DA..'
        .BYTE   0FF
        .WORD   16F9
        .ASCII  'SP..'
        .BYTE   0FF
        .WORD   16E3
        .ASCII  'XT..'
        .BYTE   0FF
        .WORD   17E1
        .ASCII  'POP '
        .BYTE   0FF
        .WORD   17E5
        .ASCII  'PUSH'
        .BYTE   0FF
        .WORD   1723
        .ASCII  'INX '
        .BYTE   0FF
        .WORD   172B
        .ASCII  'DCX '
        .BYTE   0FF
        .WORD   1836
        .ASCII  'MVI '
        .BYTE   0FF
        .WORD   1921
        .ASCII  'LXI '
        .BYTE   0FF
        .WORD   1A22
        .ASCII  'S..D'
        .BYTE   0FF
        .WORD   1A2A
        .ASCII  'L..D'
        .BYTE   0F8
        .WORD   1B70
        .ASCII  'MOV '
        .BYTE   0C7
        .WORD   1C46
        .ASCII  'MOV '
        .BYTE   0FF
        .WORD   1F86
        .ASCII  'ADD '
        .BYTE   0FF
        .WORD   1F34
        .ASCII  'INR '
        .BYTE   0FF
        .WORD   1F35
        .ASCII  'DCR '
        .BYTE   0FF
        .WORD   1F8E
        .ASCII  'ADC '
        .BYTE   0FF
        .WORD   1F96
        .ASCII  'SUB '
        .BYTE   0FF
        .WORD   1F9E
        .ASCII  'SBB '
        .BYTE   0FF
        .WORD   1FA6
        .ASCII  'ANA '
        .BYTE   0FF
        .WORD   1FB6
        .ASCII  'ORA '
        .BYTE   0FF
        .WORD   1FAE
        .ASCII  'XRA '
        .BYTE   0FF
        .WORD   1FBE
        .ASCII  'CMP '
        .BYTE   00
;
;
OTBIC:  .BYTE   0C7
        .WORD   1D46
        .ASCII  'BIT '
        .BYTE   0C7
        .WORD   1D86
        .ASCII  'RES '
        .BYTE   0C7
        .WORD   1DC6
        .ASCII  'SET '
        .BYTE   0C6
        .WORD   1E06
        .ASCII  '....'
        .BYTE   00
;
;
;
;
        .RADIX  10
;
;       STORAGE
;
RDBUF:  .BYTE   30
RDCNT:  .BYTE   0
COMAND: .BLKB   28
BIAS:   .WORD   0
RELO:   .WORD   0
OFFST:  .WORD   0
KBYTE:  .BYTE   0
CBYTE:  .BYTE   0
BBUF:   .WORD   0
EBUF:   .WORD   0
SYMBC:  .WORD   0
SYMBC1: .WORD   SYMNUM
FCBW:   .BLKB   33
WTPTR:  .BYTE   0
WTBUF:  .BLKB   128
TYFLG:  .BLKB   2
CC1:    .BLKB   3
CCB:    .BLKB   1
TABC:   .BYTE   0
STACK:  .BLKB   64
STKTOP  =       .
HERALD: .BYTE   126,28
        .ASCII  "CPM Z-80 DISASSEMBLER VER 1.0"
        .BYTE   CR,LF
        .ASCII  "ADAPTED FROM DDJ BY T.M.B., SEPT. 1979."
        .BYTE   CR,LF,CR,LF
        .ASCII  "$"
ENMES:  .BYTE   CR,LF
        .ASCII  "Command (c,d,m,o,r,q,h,s,t) ==> $"
COMEX:  .ASCII  "COM"
OPNM:   .ASCII  "ERROR ON opening FILE$"
MESA3:  .ASCII  "SECTORS READ = $"
MESA4:  .ASCII  "NEXT ADDRESS = $"
RDERRM: .ASCII  "ERROR ON reading SECTOR$"
ESFSG:  .BYTE   TAB
        .ASCII  ".END"
        .BYTE   CR,'Z'-40H
ESFSL   =       .-ESFSG
BYTSG:  .ASCII  ".BYTE"
BYSGL   =       .-BYTSG
SGNMG:  .ASCII  "DISASSEMBLER"
        .BYTE   CR,LF
SNMGL   =       .-SGNMG
OFCMD:  .BYTE   CR,LF
        .ASCII  "Output Filename ==> $"
DIREM:  .ASCII  "No more directory space $"
WEMS1:  .ASCII  "ERROR ON writing SECTOR...NOW CLOSING."
        .BYTE   CR,LF
        .ASCII  "LAST ADDRESS DISASSEMBLED ==> $"
TDLT:   .ASCII  "TDL"
CLEER:  .ASCII  "ERROR ON closing FILE$"
OPTMES: .ASCII  "OPTIONS SELECTED = $"
FINMES: .ASCII  "NUMBER OF ENTRIES IN SYMBOL TABLE = $"
TERRM:  .ASCII  ">>> WARNING <<< SYMBOL TABLE EXCEDED.$"
SYMTB:  .BLKB   SYMNUM
;
PREND   =       .
        .END
