home *** CD-ROM | disk | FTP | other *** search
/ ftp.barnyard.co.uk / 2015.02.ftp.barnyard.co.uk.tar / ftp.barnyard.co.uk / cpm / walnut-creek-CDROM / SIMTEL / CPMUG / CPMUG042.ARK / DIS.ASM < prev    next >
Assembly Source File  |  1984-04-29  |  44KB  |  2,156 lines

  1.  
  2. ;
  3. ;       TDL BASED Z80 DISASSEMBLER
  4. ;       BASED ON A Z80-ZAP DISASSEMBLER FROM
  5. ;       DDJ, MAY, 1979 BY B.W. LEE
  6. ;       ADAPTED FOR CPM BY TIM BURKE
  7. ;       SEPTEMBER, 1979.
  8. ;
  9.         .TITLE  "Z80 DISASSEMBLER"
  10.         .SBTTL  "TIM BURKE, SEPT., 1979"
  11.         .LADDR
  12.         .LALL
  13.         .PABS
  14. ;
  15. ;       SYSTEM EQUATES
  16. ;
  17. MSIZE   =       47      ;56K-DRIVERS(4K)-I/O(1K)
  18. ;    MSIZE WAS 56 FOR TIMS VERSION
  19. BIASC   =       (MSIZE-16)*1024
  20. PRSIZE  =       PREND-PRBEG
  21. LOCATE  =       3100H+BIASC-PRSIZE
  22. PRLOC   =       9000H
  23. SYCOUN  =       900     ;NUMBER OF SYMBOLS
  24. SYMNUM  =       SYCOUN*7
  25. ;
  26. ;
  27. BDOSV   =       5       ;DOS ENTRY
  28. WBOOTV  =       0       ;WARM BOOT
  29. WTFN    =       9       ;CONSOLE BUFF. WRITE
  30. RDFN    =       10      ;BUFF. READ
  31. COFN    =       2       ;CONSOLE CHAR. WRITE
  32. FCB     =       5CH     ;READ FCB ADD.
  33. OPENF   =       15      ;FILE OPEN
  34. BUFF    =       80H     ;READ BUFF. ADD.
  35. READF   =       20      ;READ SECTOR
  36. LOGIN   =       14      ;LOG IN DISK
  37. SEARCH  =       17      ;SEARCH FOR FILE
  38. DELETE  =       19      ;ERASE FILE
  39. MAKEF   =       22      ;CREATE FILE
  40. SDMA    =       26      ;SET DMA ADD.
  41. DWRIT   =       21      ;WRITE SECTOR
  42. CLSFN   =       16      ;CLOSE FILE
  43. CR      =       0DH
  44. LF      =       0AH
  45. TAB     =       'I'-40H
  46. TRUE    =       0FFH
  47. FALSE   =       0
  48. ;
  49. ;
  50.         .LOC    PRLOC
  51. ;
  52. ;
  53. PRBEG:  LXI     SP,STKTOP
  54.         LHLD    BDOSV+1
  55.         SHLD    BDOS+1
  56.         LHLD    WBOOTV+1
  57.         SHLD    WBOOT+1
  58.         XRA     A
  59.         STA     CBYTE
  60.         STA     KBYTE
  61.         STA     FCBW+32
  62.         STA     FCBW+12
  63.         JMPR    ENTRE
  64. BDOS:   JMP     BDOSV
  65. WBOOT:  JMP     WBOOTV
  66. ENTRE:  LXI     D,HERALD
  67.         MVI     C,WTFN
  68.         CALL    BDOS
  69. EXPR:   LXI     SP,STKTOP
  70.         LXI     D,ENMES
  71.         MVI     C,WTFN
  72.         CALL    BDOS
  73.         LXI     D,RDBUF
  74.         MVI     C,RDFN
  75.         CALL    BDOS
  76.         LDA     RDCNT
  77.         CPI     0
  78.         JRZ     EXPR
  79.         LXI     H,COMAND
  80.         LDA     RDCNT
  81.         MOV     B,A
  82. UCON1:  MOV     A,M
  83.         CPI     91
  84.         JM      UCON2
  85.         SUI     32
  86. UCON2:  MOV     M,A
  87.         INX     H
  88.         DJNZ    UCON1
  89.         LXI     X,COMAND
  90. POINT:  MOV     A,0(X)
  91.         INX     X
  92.         CPI     ' '
  93.         JRNZ    TST1
  94.         LDA     RDCNT
  95.         DCR     A
  96.         STA     RDCNT
  97.         JMPR    POINT
  98. TST1:   CPI     'D'
  99.         JRNZ    TST2
  100.         JMP     DISASM
  101. TST2:   CPI     'H'
  102.         JRNZ    TST3
  103.         JMP     HEXMAT
  104. TST3:   CPI     'R'
  105.         JRNZ    TST4
  106.         JMP     RDFILE
  107. TST4:   CPI     'O'
  108.         JRNZ    TST5
  109.         JMP     OPTION
  110. TST5:   CPI     'M'
  111.         JRNZ    TST6
  112.         JMP     MOVEM
  113. TST6:   CPI     'Q'
  114.         JRNZ    TST7
  115.         CALL    CRLF
  116.         LXI     D,FINMES
  117.         MVI     C,WTFN
  118.         CALL    BDOS
  119.         LHLD    SYMBC
  120.         CALL    LADR
  121.         CALL    CRLF
  122.         JMP     WBOOT
  123. TST7:   CPI     'S'
  124.         JRNZ    TST8
  125.         JMP     SHOW
  126. TST8:   CPI     'T'
  127.         JNZ     TST9
  128.         JMP     TYPEIT
  129. TST9:   CPI     'C'
  130.         JNZ     EXPR
  131.         LDA     FCBW+32
  132.         ORA     A
  133.         JRNZ    VERDI
  134.         LDA     FCBW+12
  135.         ORA     A
  136.         JZ      EXPR
  137. VERDI:  XRA     A
  138.         STA     TABC
  139.         LXI     H,ESFSG
  140.         MVI     B,ESFSL
  141. AFTERA: MOV     C,M
  142.         CALL    PO
  143.         INX     H
  144.         DJNZ    AFTERA
  145.         JMP     CDKF
  146. ;
  147. ;
  148. HEXMAT: CALL    CRLF
  149.         CALL    CRLF
  150.         CALL    PARAM
  151.         LHLD    BIAS
  152.         LDED    RELO
  153.         PUSH    H
  154.         DAD     D
  155.         CALL    LADR
  156.         MVI     C,' '
  157.         CALL    CO
  158.         POP     H
  159.         ORA     A
  160.         DSBC    D
  161.         CALL    LADR
  162.         CALL    CRLF
  163.         JMP     EXPR
  164. ;
  165. ;
  166. TYPEIT: CALL    CRLF
  167.         CALL    PARAM
  168.         LHLD    BIAS
  169.         LDED    RELO
  170. ..T0D:  CALL    LFADR
  171.         MVI     B,16
  172. ..T1D:  MOV     A,M
  173.         ANI     7FH
  174.         CPI     ' '
  175.         JRNC    ..T3D
  176. ..T2D:  MVI     A,'.'
  177. ..T3D:  CPI     07CH
  178.         JRNC    ..T2D
  179.         MOV     C,A
  180.         CALL    CO
  181.         CALL    HILOX
  182.         DJNZ    ..T1D
  183.         JMPR    ..T0D
  184. MOVEM:  CALL    CRLF
  185.         CALL    PARAM
  186.         LHLD    BIAS
  187.         LDED    RELO
  188.         LBCD    OFFST
  189. ..M:    MOV     A,M
  190.         STAX    B
  191.         INX     B
  192.         CALL    HILOX
  193.         JMPR    ..M
  194. HILOX:  CALL    HILO
  195.         RNC
  196.         JMP     EXPR
  197. HILO:   INX     H
  198.         MOV     A,H
  199.         ORA     L
  200.         STC
  201.         RZ
  202.         MOV     A,E
  203.         SUB     L
  204.         MOV     A,D
  205.         SBB     H
  206.         RET
  207. ;
  208. ;
  209. SHOW:   CALL    CRLF
  210.         CALL    PARAM
  211.         LHLD    BIAS
  212.         LDED    RELO
  213. ..D0:   CALL    LFADR
  214. ..D1:   CALL    BLK
  215.         MOV     A,M
  216.         CALL    LBYTE
  217.         CALL    HILOX
  218.         MOV     A,L
  219.         ANI     0FH
  220.         JRNZ    ..D1
  221.         JMPR    ..D0
  222. ;
  223. ;
  224. RDFILE: LXI     Y,FCB
  225.         CALL    BLANK
  226.         LXI     Y,FCB
  227.         CALL    FORMIT
  228.         CALL    CRLF
  229.         LXI     B,3
  230.         LXI     H,COMEX
  231.         LXI     D,FCB+9
  232.         LDIR
  233.         LXI     D,FCB
  234.         MVI     C,OPENF
  235.         CALL    BDOS
  236.         CPI     255
  237.         JRNZ    OPNOK
  238.         CALL    CRLF
  239.         LXI     D,OPNM
  240.         MVI     C,WTFN
  241.         CALL    BDOS
  242.         JMP     EXPR
  243. OPNOK:  XRA     A
  244.         STA     FCB+32
  245.         LXI     D,100H
  246. LOOP:   LXI     H,BUFF
  247.         CALL    DISKR
  248.         MVI     B,128
  249. CONTE:  MOV     A,M
  250.         XCHG
  251.         MOV     M,A
  252.         XCHG
  253.         INX     H
  254.         INX     D
  255.         DJNZ    CONTE
  256.         JMPR    LOOP
  257. DISKR:  PUSH    H
  258.         PUSH    D
  259.         PUSH    B
  260.         LXI     D,FCB
  261.         MVI     C,READF
  262.         CALL    BDOS
  263.         POP     B
  264.         POP     D
  265.         POP     H
  266.         CPI     0
  267.         RZ
  268.         CPI     1
  269.         JZ      FINAL
  270.         CALL    CRLF
  271.         LXI     D,RDERRM
  272.         MVI     C,WTFN
  273.         CALL    BDOS
  274.         JMP     EXPR
  275. FINAL:  CALL    CRLF
  276.         LXI     D,MESA3
  277.         MVI     C,WTFN
  278.         CALL    BDOS
  279.         LDA     FCB+12
  280.         MOV     H,A
  281.         LDA     FCB+32
  282.         MOV     L,A
  283.         CALL    LADR
  284.         MVI     B,7
  285. SHIT:   SLAR    L
  286.         RALR    H
  287.         DJNZ    SHIT
  288.         LXI     B,100H
  289.         DAD     B
  290.         PUSH    H
  291.         CALL    CRLF
  292.         LXI     D,MESA4
  293.         MVI     C,WTFN
  294.         CALL    BDOS
  295.         POP     H
  296.         CALL    LADR
  297.         JMP     EXPR
  298. ;
  299. ;
  300. OPTION: CALL    CRLF
  301.         CALL    CRLF
  302.         XRA     A
  303.         STA     CBYTE
  304.         STA     KBYTE
  305.         MOV     D,A
  306.         MOV     E,A
  307.         LDA     RDCNT
  308.         DCR     A
  309.         JZ      EXPR
  310.         PUSH    D
  311.         LXI     D,OPTMES
  312.         MVI     C,WTFN
  313.         CALL    BDOS
  314.         POP     D
  315.         LDA     RDCNT
  316.         MOV     H,A
  317. LOPIT:  MOV     A,0(X)
  318.         MOV     C,A
  319.         INX     X
  320.         DCR     H
  321.         JRZ     NOWPT
  322.         CPI     'A'
  323.         JRNZ    TMT1
  324.         SET     0,D
  325.         CALL    CO
  326.         JMPR    LOPIT
  327. TMT1:   CPI     'B'
  328.         JRNZ    TMT2
  329.         SET     1,D
  330.         CALL    CO
  331.         JMPR    LOPIT
  332. TMT2:   CPI     'C'
  333.         JRNZ    TMT3
  334.         SET     2,D
  335.         CALL    CO
  336.         JMPR    LOPIT
  337. TMT3:   CPI     'D'
  338.         JRNZ    TMT4
  339.         SET     3,D
  340.         CALL    CO
  341.         JMPR    LOPIT
  342. TMT4:   CPI     'E'
  343.         JRNZ    TMT5
  344.         SET     4,D
  345.         CALL    CO
  346.         JMPR    LOPIT
  347. TMT5:   CPI     'F'
  348.         JRNZ    TMT6
  349.         SET     5,D
  350.         CALL    CO
  351.         JMPR    LOPIT
  352. TMT6:   CPI     'G'
  353.         JRNZ    TMT7
  354.         SET     6,D
  355.         CALL    CO
  356.         JMPR    LOPIT
  357. TMT7:   CPI     'H'
  358.         JRNZ    TMT8
  359.         SET     7,D
  360.         CALL    CO
  361.         JMPR    LOPIT
  362. TMT8:   CPI     'I'
  363.         JRNZ    TMT9
  364.         SET     0,E
  365.         CALL    CO
  366.         JMPR    LOPIT
  367. TMT9:   CPI     'J'
  368.         JRNZ    TMT10
  369.         SET     1,E
  370.         CALL    CO
  371.         JMPR    LOPIT
  372. TMT10:  CPI     'K'
  373.         JRNZ    LOPIT
  374.         SET     2,E
  375.         CALL    CO
  376.         JMP     LOPIT
  377. NOWPT:  CALL    CRLF
  378.         CALL    CRLF
  379.         MOV     A,D
  380.         STA     CBYTE
  381.         MOV     A,E
  382.         STA     KBYTE
  383.         JMP     EXPR
  384. ;
  385. ;
  386. ;       SUBROUTINES
  387. ;
  388. CRLF:   MVI     C,CR
  389.         CALL    CO
  390.         MVI     C,LF
  391.         CALL    CO
  392.         RET
  393. LFADR:  CALL    CRLF
  394. HLSP:   CALL    LADR
  395. BLK:    MVI     C,' '
  396. CO:     PUSH    B
  397.         PUSH    H
  398.         PUSH    D
  399.         MVI     D,0
  400.         MOV     E,C
  401.         MVI     C,COFN
  402.         CALL    BDOS
  403.         POP     D
  404.         POP     H
  405.         POP     B
  406.         MOV     A,C
  407.         RET
  408. PARAM:  LXI     H,0
  409.         SHLD    BIAS
  410.         SHLD    RELO
  411.         SHLD    OFFST
  412.         LDA     RDCNT
  413.         DCR     A
  414.         RZ
  415.         MOV     C,A
  416. DREN:   MOV     A,0(X)
  417.         CPI     ' '
  418.         JRNZ    BRA2
  419.         DCR     C
  420.         INX     X
  421.         RZ
  422.         JMPR    DREN
  423. BRA2:   CALL    CONVER
  424.         JRC     ..EX1
  425.         DAD     H
  426.         DAD     H
  427.         DAD     H
  428.         DAD     H
  429.         ORA     L
  430.         MOV     L,A
  431.         DCR     C
  432.         JRNZ    BRA2
  433.         SHLD    BIAS
  434.         RET
  435. ..EX1:  SHLD    BIAS
  436.         MOV     A,B
  437.         CPI     ' '
  438.         JRZ     CONT
  439.         CPI     ','
  440.         JRZ     CONT
  441.         JMP     EXPR
  442. CONT:   LXI     H,0
  443.         DCR     C
  444.         RZ
  445. BRA1:   CALL    CONVER
  446.         JRC     ..EX2
  447.         DAD     H
  448.         DAD     H
  449.         DAD     H
  450.         DAD     H
  451.         ORA     L
  452.         MOV     L,A
  453.         DCR     C
  454.         JRNZ    BRA1
  455.         SHLD    RELO
  456.         RET
  457. ..EX2:  SHLD    RELO
  458.         MOV     A,B
  459.         CPI     ' '
  460.         JRZ     CONT1
  461.         CPI     ','
  462.         JRZ     CONT1
  463.         JMP     EXPR
  464. CONT1:  LXI     H,0
  465.         DCR     C
  466.         RZ
  467. BRA3:   CALL    CONVER
  468.         JC      EXPR
  469.         DAD     H
  470.         DAD     H
  471.         DAD     H
  472.         DAD     H
  473.         ORA     L
  474.         MOV     L,A
  475.         DCR     C
  476.         JRNZ    BRA3
  477.         SHLD    OFFST
  478.         RET
  479. CONVER: MOV     A,0(X)
  480.         INX     X
  481.         MOV     B,A
  482. CONV:   SUI     '0'
  483.         RC
  484.         CPI     'G'-'0'
  485.         CMC
  486.         RC
  487.         CPI     10
  488.         CMC
  489.         RNC
  490.         SUI     'A'-'9'-1
  491.         CPI     0AH
  492.         RET
  493. LADR:   MOV     A,H
  494.         CALL    LBYTE
  495.         MOV     A,L
  496. LBYTE:  PUSH    PSW
  497.         RRC
  498.         RRC
  499.         RRC
  500.         RRC
  501.         CALL    ..2
  502.         POP     PSW
  503. ..2:    CALL    ZONV
  504.         JMP     CO
  505. ZONV:   ANI     0FH
  506.         ADI     90H
  507.         DAA
  508.         ACI     40H
  509.         DAA
  510.         MOV     C,A
  511.         RET
  512. BLANK:  MVI     A,1
  513.         MOV     0(Y),A
  514.         MVI     B,11
  515.         MVI     A,' '
  516. LPAGE:  INX     Y
  517.         MOV     0(Y),A
  518.         DCR     B
  519.         JRNZ    LPAGE
  520.         XRA     A
  521.         MVI     B,21
  522. OVAGP:  INX     Y
  523.         MOV     0(Y),A
  524.         DCR     B
  525.         JRNZ    OVAGP
  526.         RET
  527. FORMIT: LDA     RDCNT
  528.         DCR     A
  529.         JZ      EXPR
  530.         MOV     C,A
  531. ALTOS:  MOV     A,0(X)
  532.         CPI     ' '
  533.         JRNZ    NITS
  534.         DCR     C
  535.         INX     X
  536.         JZ      EXPR
  537.         JMPR    ALTOS
  538. NITS:   MOV     A,1(X)
  539.         CPI     ':'
  540.         JRZ     FOUND1
  541.         JMPR    FORT2
  542. FOUND1: MOV     A,0(X)
  543.         INX     X
  544.         INX     X
  545.         DCR     C
  546.         DCR     C
  547.         SUI     64
  548.         MOV     0(Y),A
  549. FORT2:  INX     Y
  550.         MOV     A,0(X)
  551.         CPI     '.'
  552.         RZ
  553.         MOV     0(Y),A
  554.         INX     X
  555.         DCR     C
  556.         JRNZ    FORT2
  557.         RET
  558. TOM1:   MOV     C,M
  559.         INX     H
  560.         CALL    CO
  561.         DJNZ    TOM1
  562.         RET
  563. RSDF:   LXI     D,OFCMD
  564.         MVI     C,WTFN
  565.         CALL    BDOS
  566.         LXI     D,RDBUF
  567.         MVI     C,RDFN
  568.         CALL    BDOS
  569.         LDA     RDCNT
  570.         CPI     0
  571.         JRZ     RSDF
  572.         LXI     H,COMAND
  573.         LDA     RDCNT
  574.         MOV     B,A
  575. ACON1:  MOV     A,M
  576.         CPI     91
  577.         JM      ACON2
  578.         SUI     32
  579. ACON2:  MOV     M,A
  580.         INX     H
  581.         DCR     B
  582.         JRNZ    ACON1
  583.         LXI     X,COMAND
  584. POINTA: MOV     A,0(X)
  585.         INX     X
  586.         CPI     ' '
  587.         JRNZ    OKNDT
  588.         LDA     RDCNT
  589.         DCR     A
  590.         STA     RDCNT
  591.         JMPR    POINTA
  592. OKNDT:  LXI     Y,FCBW
  593.         LDA     RDCNT
  594.         INR     A
  595.         STA     RDCNT
  596.         DCX     X
  597.         CALL    BLANK
  598.         LXI     Y,FCBW
  599.         CALL    FORMIT
  600.         LXI     B,3
  601.         LXI     H,TDLT
  602.         LXI     D,FCBW+9
  603.         LDIR
  604.         LDA     FCBW
  605.         DCR     A
  606.         MVI     D,0
  607.         MOV     E,A
  608.         MVI     C,LOGIN
  609.         CALL    BDOS
  610.         LXI     D,FCBW
  611.         MVI     C,SEARCH
  612.         CALL    BDOS
  613.         CPI     255
  614.         JRZ     MAKE
  615.         LXI     D,FCBW
  616.         MVI     C,DELETE
  617.         CALL    BDOS
  618. MAKE:   LXI     D,FCBW
  619.         MVI     C,MAKEF
  620.         CALL    BDOS
  621.         CPI     255
  622.         JRNZ    OPEN
  623.         CALL    CRLF
  624.         LXI     D,DIREM
  625.         MVI     C,WTFN
  626.         CALL    BDOS
  627. OPEN:   LXI     D,FCBW
  628.         MVI     C,OPENF
  629.         CALL    BDOS
  630.         CPI     255
  631.         JRNZ    OOKK
  632.         CALL    CRLF
  633.         LXI     D,OPNM
  634.         MVI     C,WTFN
  635.         CALL    BDOS
  636.         JMP     EXPR
  637. OOKK:   XRA     A
  638.         STA     FCBW+32
  639.         STA     WTPTR
  640.         RET
  641. PEOL:   MVI     C,CR
  642.         CALL    PO
  643.         MVI     C,LF
  644. PO:     PUSH    X
  645.         LXI     X,FCBW
  646.         CALL    WDSKF
  647.         POP     X
  648.         RET
  649. WDSKF:  PUSH    H
  650.         PUSH    D
  651.         PUSH    B
  652.         LDA     WTPTR
  653.         CPI     80H
  654.         JRNZ    WTBYT
  655.         CALL    DISKWR
  656.         XRA     A
  657. WTBYT:  MOV     E,A
  658.         MVI     D,0
  659.         INR     A
  660.         STA     WTPTR
  661.         LXI     H,WTBUF
  662.         DAD     D
  663.         MOV     M,C
  664.         POP     B
  665.         POP     D
  666.         POP     H
  667.         MOV     A,C
  668.         RET
  669. DISKWR: PUSH    B
  670.         LXI     D,WTBUF
  671.         MVI     C,SDMA
  672.         CALL    BDOS
  673.         PUSH    X
  674.         POP     D
  675.         MVI     C,DWRIT
  676.         CALL    BDOS
  677.         PUSH    PSW
  678.         LXI     D,BUFF
  679.         MVI     C,SDMA
  680.         CALL    BDOS
  681.         POP     PSW
  682.         CPI     0
  683.         JRZ     BNC2
  684.         CALL    CRLF
  685.         LXI     D,WEMS1
  686.         MVI     C,WTFN
  687.         CALL    BDOS
  688.         POP     H
  689.         POP     H
  690.         POP     H
  691.         POP     H
  692.         CALL    LADR
  693.         CALL    CRLF
  694.         JMP     ABTRR
  695. BNC2:   POP     B
  696.         RET
  697. CONSTA: PUSH    H
  698.         PUSH    D
  699.         PUSH    B
  700.         MVI     C,11
  701.         CALL    BDOS
  702.         ANI     1
  703.         JRNZ    TRUX
  704.         XRA     A
  705.         JMPR    EXST1
  706. TRUX:   MVI     A,TRUE
  707. EXST1:  POP     B
  708.         POP     D
  709.         POP     H
  710.         RET
  711. CI:     PUSH    H
  712.         PUSH    D
  713.         PUSH    B
  714.         MVI     C,1
  715.         CALL    BDOS
  716.         ANI     7FH
  717.         POP     B
  718.         POP     D
  719.         POP     H
  720.         RET
  721. CDKF:   MVI     C,'Z'-40H
  722.         CALL    PO
  723.         LXI     X,FCBW
  724.         CALL    DISKWR
  725. ABTRR:  LXI     D,FCBW
  726.         MVI     C,CLSFN
  727.         CALL    BDOS
  728.         CPI     255
  729.         JNZ     EXPR
  730.         CALL    CRLF
  731.         LXI     D,CLEER
  732.         MVI     C,WTFN
  733.         CALL    BDOS
  734.         CALL    CRLF
  735.         JMP     EXPR
  736. ;
  737. ;       MAIN PROGRAM
  738. ;
  739. DISASM: CALL    CRLF
  740.         CALL    PARAM
  741.         LHLD    BIAS
  742.         LDED    RELO
  743.         SHLD    BBUF
  744.         SDED    EBUF
  745.         LXI     H,SGNMG
  746.         MVI     B,SNMGL
  747.         CALL    TOM1
  748.         .RADIX  16
  749. BEGIN:  LDA     CBYTE
  750.         ANI     2
  751.         JRNZ    APNFL
  752. NEWFL:  LDA     CBYTE
  753.         ANI     04
  754.         JRZ     KSFIN
  755.         XRA     A
  756.         STA     SYMTB
  757.         LXI     H,0
  758.         SHLD    SYMBC
  759.         LXI     H,SYMNUM
  760.         SHLD    SYMBC1
  761. KSFIN:  LDA     CBYTE
  762.         ANI     80
  763.         JRZ     START
  764.         CALL    RSDF
  765.         CALL    PEOL
  766. START:  LHLD    BBUF
  767. DISAM:  CALL    LINE
  768.         CALL    ENDCK
  769.         JMPR    DISAM
  770. APNFL:  LDA     KBYTE
  771.         ANI     01
  772.         JRNZ    KSFIN
  773.         JMPR    START
  774. LINE:   LDA     KBYTE
  775.         ANI     04
  776.         CZ      LADR
  777.         MVI     A,0FC
  778.         STA     TABC
  779.         MVI     A,TAB
  780.         CALL    TYPE
  781.         MOV     B,H
  782.         MOV     C,L
  783.         LDA     CBYTE
  784.         ANI     01
  785.         CNZ     PRTLB
  786.         JRNC    ..A0
  787.         MVI     A,':'
  788.         CALL    ZTYPE
  789. ..A0:   MVI     A,TAB
  790.         CALL    ZTYPE
  791.         LDA     CBYTE
  792.         ANI     20
  793.         JNZ     PRDB
  794.         PUSH    H
  795.         MOV     H,M
  796.         LXI     B,OTABM
  797. ;
  798. ;       OPCODE TABLE LOOKUP
  799. ;
  800. ULP:    LDAX    B
  801.         ORA     A
  802.         JZ      SFRET
  803.         ANA     H
  804.         MOV     L,A
  805.         INX     B
  806.         LDAX    B
  807.         CMP     L
  808.         JZ      FOUND
  809.         MOV     A,C
  810.         ADI     06
  811.         MOV     C,A
  812.         JRNC    ULP
  813.         INR     B
  814.         JMPR    ULP
  815. ;
  816. FOUND:  INX     B
  817.         LDAX    B
  818.         STA     TYFLG
  819.         PUSH    D
  820.         MOV     E,A
  821.         MVI     D,00
  822.         LXI     H,JMTBL
  823.         DAD     D
  824.         DAD     D
  825.         MOV     D,M
  826.         INX     H
  827.         MOV     H,M
  828.         MOV     L,D
  829.         POP     D
  830.         XTHL
  831.         RET
  832. ;
  833. TYPE0:  CALL    PROP
  834. IXHRT:  INX     H
  835.         JMP     RET
  836. ;
  837. TYPE1:  CALL    PROP
  838. T1B:    CALL    REG
  839.         JMPR    IXHRT
  840. ;
  841. TYPE2:  CALL    PROP
  842.         CALL    REGM
  843.         JMPR    IXHRT
  844. ;
  845. TYPE3:  CALL    PROP
  846.         CALL    XR
  847.         JMPR    IXHRT
  848. ;
  849. TYPE4:  CALL    PROP
  850.         CALL    REGM
  851. T4B:    CALL    COMMA
  852.         JMPR    T52
  853. ;
  854. TYPE5:  CALL    PROP
  855. T52:    INX     H
  856. T53:    MOV     A,M
  857.         CALL    X00
  858. T54:    MVI     A,'H'
  859.         CALL    ZTYPE
  860.         MOV     A,M
  861.         INX     H
  862.         PUSH    B
  863.         MOV     B,A
  864.         LDA     CBYTE
  865.         ANI     10
  866.         MOV     A,B
  867.         POP     B
  868.         JZ      RET
  869.         CPI     ' '
  870.         JC      RET
  871.         CPI     'Z'+1
  872.         JNC     RET
  873.         LDA     TYFLG
  874.         CPI     04
  875.         JC      RET
  876.         CPI     06
  877.         JNC     RET
  878.         MVI     A,TAB
  879.         CALL    ZTYPE
  880.         MVI     A,';'
  881.         CALL    ZTYPE
  882.         DCX     H
  883.         MOV     A,M
  884.         INX     H
  885. QCHAR:  PUSH    PSW
  886.         CALL    OQ
  887.         POP     PSW
  888.         MVI     A,27
  889.         CALL    ZTYPE
  890.         JMP     RET
  891. ;
  892. TYPE6:  CALL    PROP
  893.         CALL    XR
  894. T6B:    CALL    COMMA
  895.         LDA     CBYTE
  896.         ANI     40
  897.         JRZ     TYP6H
  898. PRT2X:  CALL    SYMBO
  899.         JC      RET
  900. TYP6H:  INX     H
  901.         MOV     B,M
  902.         INX     H
  903.         MOV     A,M
  904.         CALL    X00
  905.         MOV     A,B
  906.         CALL    X0
  907.         JMPR    T54
  908. ;
  909. TYPREL: CALL    PROP
  910.         INX     H
  911.         MOV     A,M
  912.         CALL    X21
  913.         JMP     T54
  914. ;
  915. TYPE7:  CALL    PROP
  916.         CALL    SYMBO
  917.         JC      RET
  918.         LDA     CBYTE
  919.         ANI     08
  920.         JRZ     TYP6H
  921.         MVI     A,'L'
  922.         CALL    ZTYPE
  923.         INX     H
  924.         MOV     B,M
  925.         INX     H
  926.         MOV     A,M
  927.         CALL    X00
  928.         MOV     A,B
  929.         CALL    X0
  930.         JMP     IXHRT
  931. ;
  932. TYPE8:  INX     B
  933.         LDAX    B
  934.         STA     CC1
  935.         CALL    GETCC
  936.         JMPR    TYPE7
  937. ;
  938. TYPE9:  MVI     A,'R'
  939.         STA     CC1
  940.         CALL    GETCC
  941.         JMP     TYPE0
  942. ;
  943. TYPEA:  CALL    PROP
  944.         RAR
  945.         RAR
  946.         RAR
  947.         ANI     07
  948.         ADI     '0'
  949.         CALL    ZTYPE
  950.         JMP     IXHRT
  951. ;
  952. TYPEB:  CALL    PROP
  953.         CALL    REGM
  954.         CALL    COMMA
  955.         MOV     A,M
  956.         JMP     T1B
  957. ;
  958. TYPEC   =       TYPREL
  959. ;
  960. TYPED:  INX     B
  961.         LDAX    B
  962.         STA     CC1-1
  963.         INX     B
  964.         LDAX    B
  965.         STA     CC1
  966.         MOV     A,M
  967.         ANI     0DF
  968.         CALL    GETC
  969.         DCX     B
  970.         JMP     TYPREL
  971. ;
  972. TYPEE:  INX     H
  973.         PUSH    H
  974.         MOV     H,M
  975.         LXI     B,OTABC
  976. ULP1:   MVI     A,21
  977. ULP2:   STA     TYFLG
  978.         JMP     ULP
  979. ;
  980. TYPEF:  INX     H
  981.         PUSH    H
  982.         MOV     H,M
  983.         LXI     B,OTABE
  984.         JMPR    ULP1
  985. ;
  986. TYP10:  INX     B
  987.         PUSH    B
  988.         INX     H
  989.         PUSH    H
  990.         MOV     H,M
  991.         MVI     A,0CB
  992.         CMP     H
  993.         JZ      TY10C
  994.         LXI     B,OTBIR
  995.         MVI     A,41
  996.         JMPR    ULP2
  997. ;
  998. TY10C:  POP     H
  999.         INX     H
  1000.         INX     H
  1001.         PUSH    H
  1002.         MOV     H,M
  1003.         LXI     B,OTBIC
  1004.         MVI     A,43
  1005.         JMPR    ULP2
  1006. ;
  1007. TYP11:  CALL    GRSCC
  1008.         JMP     TYPE1
  1009. ;
  1010. TYP12:  CALL    PROP
  1011.         CALL    POTLM
  1012.         CALL    COMMA
  1013.         MOV     A,M
  1014.         JMP     T1B
  1015. ;
  1016. TYP13:  INX     B
  1017.         LDAX    B
  1018.         STA     CC1
  1019.         INX     B
  1020.         INX     B
  1021.         INX     B
  1022.         LDAX    B
  1023.         STA     CCB
  1024.         CALL    GETXR
  1025.         JMP     TYPE7
  1026. ;
  1027. TYP14:  INX     B
  1028.         LDAX    B
  1029.         STA     CC1
  1030.         INX     B
  1031.         LDAX    B
  1032.         STA     CC1+1
  1033.         CALL    GETBX
  1034.         JMP     TYPE0
  1035. ;
  1036. TYP15:  MVI     A,'O'
  1037.         CALL    ZTYPE
  1038.         JMPR    TYP14
  1039. ;
  1040. TYP16:  INX     B
  1041.         LDAX    B
  1042.         STA     CC1
  1043.         INX     B
  1044.         LDAX    B
  1045.         STA     CC1+1
  1046.         POP     B
  1047.         MVI     A,'I'
  1048.         STA     CC1+2
  1049.         INX     B
  1050.         LDAX    B
  1051.         STA     CCB
  1052.         LXI     B,CC1-1
  1053.         JMP     TYPE0
  1054. ;
  1055. TYP17:  CALL    PROP
  1056.         POP     B
  1057.         CALL    PRIR
  1058.         JMP     IXHRT
  1059. ;
  1060. TYP18:  CALL    PROP
  1061.         INX     H
  1062.         MOV     A,M
  1063.         CALL    X00
  1064.         POP     B
  1065.         CALL    PRIRP
  1066.         MVI     A,04
  1067.         STA     TYFLG
  1068.         JMP     T4B
  1069. ;
  1070. TYP19:  CALL    PROP
  1071.         POP     B
  1072.         CALL    PRIR
  1073.         JMP     T6B
  1074. ;
  1075. TYP1A:  INX     B
  1076.         LDAX    B
  1077.         STA     CC1
  1078.         INX     B
  1079.         INX     B
  1080.         INX     B
  1081.         LDAX    B
  1082.         STA     CCB
  1083.         POP     B
  1084.         MVI     A,'I'
  1085.         STA     CC1+1
  1086.         INX     B
  1087.         LDAX    B
  1088.         STA     CC1+2
  1089.         LXI     B,CC1-1
  1090.         JMP     TYPE7
  1091. ;
  1092. TYP1B:  CALL    PROP
  1093.         INX     H
  1094.         MOV     A,M
  1095.         CALL    X00
  1096.         POP     B
  1097.         CALL    PRIRP
  1098.         DCX     H
  1099.         CALL    COMMA
  1100.         MOV     A,M
  1101.         CALL    REG
  1102. IXHHR:  INX     H
  1103.         JMP     IXHRT
  1104. ;
  1105. TYP1C:  CALL    PROP
  1106.         CALL    REGM
  1107.         CALL    COMMA
  1108.         INX     H
  1109.         MOV     A,M
  1110.         CALL    X00
  1111.         POP     B
  1112.         CALL    PRIRP
  1113.         JMP     IXHRT
  1114. ;
  1115. TYP1D:  CALL    PROP
  1116.         CALL    POTLM
  1117.         CALL    COMMA
  1118. TY1DB:  DCX     H
  1119.         MOV     A,M
  1120.         CALL    X00
  1121.         POP     B
  1122.         CALL    PRIRP
  1123.         JMPR    IXHHR
  1124. ;
  1125. TYP1E:  CALL    GRSCC
  1126.         CALL    PROP
  1127.         JMPR    TY1DB
  1128. ;
  1129. TYP1F:  CALL    PROP
  1130.         INX     H
  1131.         MOV     A,M
  1132.         CALL    X00
  1133.         POP     B
  1134.         CALL    PRIRP
  1135.         JMP     IXHRT
  1136. ;
  1137. TYP20:  INX     B
  1138.         LDAX    B
  1139.         STA     CC1
  1140.         INX     B
  1141.         LDAX    B
  1142.         STA     CC1+1
  1143.         POP     B
  1144.         MVI     A,'D'
  1145.         STA     CC1+2
  1146.         INX     B
  1147.         LDAX    B
  1148.         STA     CCB
  1149.         LXI     B,CC1-1
  1150.         CALL    PROP
  1151.         CALL    TST20
  1152.         MOV     A,B
  1153.         CALL    ZTYPE
  1154.         JMP     IXHRT
  1155. TST20:  CPI     09
  1156.         MVI     B,'B'
  1157.         RZ
  1158.         CPI     19
  1159.         MVI     B,'D'
  1160.         RZ
  1161.         CPI     39
  1162.         JRNZ    ATST1
  1163.         MVI     A,'S'
  1164.         CALL    ZTYPE
  1165.         MVI     B,'P'
  1166.         RET
  1167. ATST1:  DCX     H
  1168.         MOV     A,M
  1169.         CPI     0DD
  1170.         JRNZ    YTST1
  1171.         MVI     B,'X'
  1172.         INX     H
  1173.         RET
  1174. YTST1:  INX     H
  1175.         MVI     B,'Y'
  1176.         RET
  1177. ;
  1178. SFRET:  LDA     TYFLG
  1179.         CPI     20
  1180.         POP     H
  1181.         JC      PRDB
  1182.         CPI     40
  1183.         JRC     BKUPH
  1184.         POP     B
  1185. BKUPH:  ANI     0F
  1186.         MOV     B,A
  1187.         XRA     A
  1188.         STA     TYFLG
  1189. BUHLP:  DCX     H
  1190.         DJNZ    BUHLP
  1191.         JMP     PRDB
  1192. ;
  1193. ;       DISASSEMBLER SUBROUTINES
  1194. ;
  1195. COMMA:  MVI     A,','
  1196.         JMP     ZTYPE
  1197. ;
  1198. PRDB:   PUSH    H
  1199.         LXI     H,BYTSG
  1200.         MVI     B,BYSGL
  1201. PRDB1:  MOV     A,M
  1202.         CALL    ZTYPE
  1203.         INX     H
  1204.         DJNZ    PRDB1
  1205.         MVI     A,TAB
  1206.         CALL    ZTYPE
  1207.         POP     H
  1208.         LDA     CBYTE
  1209.         ANI     30
  1210.         CPI     30
  1211.         JNZ     T53
  1212.         MOV     A,M
  1213.         CPI     ' '
  1214.         JC      T53
  1215.         CPI     'Z'+1
  1216.         JNC     T53
  1217.         INX     H
  1218.         JMP     QCHAR
  1219. ;
  1220. GETCC:  MOV     A,M
  1221. GETC:   RAR
  1222.         RAR
  1223.         ANI     0E
  1224.         PUSH    H
  1225.         LXI     H,CCTAB
  1226.         CALL    ADD
  1227.         MOV     A,M
  1228.         STA     CC1+1
  1229.         INX     H
  1230.         MOV     A,M
  1231.         STA     CC1+2
  1232.         POP     H
  1233.         LXI     B,CC1-1
  1234.         MVI     A,' '
  1235.         STA     CCB
  1236.         RET
  1237. ;
  1238. HEXL:   RAR
  1239.         RAR
  1240.         RAR
  1241.         RAR
  1242. HEXR:   ANI     0F
  1243.         CPI     0A
  1244.         JC      HEXRN
  1245.         ADI     07
  1246. HEXRN:  ADI     '0'
  1247.         RET
  1248. ;
  1249. X0:     PUSH    PSW
  1250.         CALL    HEXL
  1251.         CALL    ZTYPE
  1252.         POP     PSW
  1253.         CALL    HEXR
  1254.         JMP     ZTYPE
  1255. ;
  1256. OQ:     PUSH    PSW
  1257.         MVI     A,' '
  1258.         CALL    ZTYPE
  1259.         MVI     A,27
  1260.         CALL    ZTYPE
  1261.         POP     PSW
  1262.         JMP     ZTYPE
  1263. ;
  1264. PROP:   PUSH    D
  1265.         MVI     D,4
  1266. PROPL:  INX     B
  1267.         LDAX    B
  1268.         CALL    ZTYPE
  1269.         DCR     D
  1270.         JRNZ    PROPL
  1271.         MVI     A,TAB
  1272.         CALL    ZTYPE
  1273.         POP     D
  1274.         MOV     A,M
  1275.         RET
  1276. ;
  1277. XR:     RAR
  1278.         RAR
  1279.         RAR
  1280.         ANI     06
  1281.         CPI     06
  1282.         JRNZ    REG
  1283.         MOV     A,M
  1284.         ORA     A
  1285.         JM      PRPSW
  1286. PRTSP:  MVI     A,'S'
  1287.         CALL    ZTYPE
  1288.         MVI     A,'P'
  1289.         JMP     ZTYPE
  1290. PRPSW:  MVI     A,'P'
  1291.         CALL    ZTYPE
  1292.         MVI     A,'S'
  1293.         CALL    ZTYPE
  1294.         MVI     A,'W'
  1295.         JMP     ZTYPE
  1296. ;
  1297. REGM:   RAR
  1298.         RAR
  1299.         RAR
  1300. ;
  1301. REG:    PUSH    H
  1302.         LXI     H,RTAB
  1303.         ANI     07
  1304.         CALL    ADD
  1305.         MOV     A,M
  1306.         POP     H
  1307.         JMP     ZTYPE
  1308. ;
  1309. ADD:    ADD     L
  1310.         MOV     L,A
  1311.         RNC
  1312.         INR     H
  1313.         RET
  1314. ;
  1315. X21:    PUSH    H
  1316.         PUSH    PSW
  1317.         DCX     H
  1318.         MOV     A,M
  1319.         CPI     10
  1320.         JZ      RELADD
  1321.         CPI     38
  1322.         JZ      RELADD
  1323.         CPI     18
  1324.         JZ      RELADD
  1325.         CPI     30
  1326.         JZ      RELADD
  1327.         CPI     20
  1328.         JZ      RELADD
  1329.         CPI     28
  1330.         JZ      RELADD
  1331. X000:   POP     PSW
  1332.         POP     H
  1333. X00:    CPI     0A0
  1334.         JC      X0
  1335.         PUSH    PSW
  1336.         MVI     A,'0'
  1337.         CALL    ZTYPE
  1338.         POP     PSW
  1339.         JMP     X0
  1340. RELADD: PUSH    D
  1341.         MVI     D,0
  1342.         INX     H
  1343.         MOV     A,M
  1344.         INX     H
  1345.         ORA     A
  1346.         JM      SUBIT
  1347.         MOV     E,A
  1348.         DAD     D
  1349.         SHLD    TEMHL
  1350.         JMPR    ZIPIT
  1351. SUBIT:  CMA
  1352.         ADI     01
  1353.         MOV     E,A
  1354.         SLAR    D
  1355.         DSBC    D
  1356.         SHLD    TEMHL
  1357. ZIPIT:  LXI     H,TEMHL-1
  1358.         CALL    SYMBO
  1359.         POP     D
  1360.         JNC     X000
  1361.         POP     PSW
  1362.         POP     H
  1363.         SHLD    TEMHL
  1364.         POP     H
  1365.         LHLD    TEMHL
  1366.         JMP     IXHRT
  1367. TEMHL:  .WORD   0
  1368. ;
  1369. RET:    MVI     A,CR
  1370. ;
  1371. ZTYPE:  PUSH    B
  1372.         MOV     B,A
  1373.         LDA     CBYTE
  1374.         RAL
  1375.         MOV     A,B
  1376.         JRNC    TYPEP
  1377. DFOUT:  MOV     C,A
  1378.         CALL    PO
  1379. TYPEP:  POP     B
  1380. TYPE:   PUSH    B
  1381.         CPI     TAB
  1382.         JRZ     TABX
  1383.         MOV     C,A
  1384.         LDA     KBYTE
  1385.         ANI     04
  1386.         MOV     A,C
  1387.         JRNZ    FFFFD
  1388.         CALL    CO
  1389. FFFFD:  MOV     B,A
  1390.         LDA     TABC
  1391.         DCR     A
  1392.         STA     TABC
  1393.         MOV     A,B
  1394.         POP     B
  1395.         CPI     CR
  1396.         RNZ
  1397. EOL:    MVI     A,LF
  1398.         JMPR    ZTYPE
  1399. TABX:   PUSH    PSW
  1400.         LDA     TABC
  1401.         MOV     B,A
  1402. TABXL:  MVI     C,20
  1403.         LDA     KBYTE
  1404.         ANI     04
  1405.         JRNZ    AAAAF
  1406.         CALL    CO
  1407. AAAAF:  MOV     A,B
  1408.         ANI     07
  1409.         MOV     B,A
  1410.         DJNZ    TABXL
  1411.         XRA     A
  1412.         STA     TABC
  1413.         POP     PSW
  1414.         POP     B
  1415.         RET
  1416. ;
  1417. SYMBO:  LDA     CBYTE
  1418.         ANI     05
  1419.         RZ
  1420.         ANI     01
  1421.         JRNZ    FRMTB
  1422. ;
  1423.         CALL    SYBLD
  1424.         ORA     A
  1425.         RET
  1426. ;
  1427. FRMTB:  INX     H
  1428.         MOV     C,M
  1429.         INX     H
  1430.         MOV     B,M
  1431.         INX     H
  1432.         CALL    PRTLB
  1433.         RC
  1434.         DCX     H
  1435.         DCX     H
  1436.         DCX     H
  1437.         ORA     A
  1438.         RET
  1439. PRTLB:  CALL    LOOKU
  1440.         CMC
  1441.         RNC
  1442.         MVI     B,5
  1443. SYPLP:  LDAX    D
  1444.         INX     D
  1445.         ORA     A
  1446.         JRZ     SYPEX
  1447.         CALL    ZTYPE
  1448.         DJNZ    SYPLP
  1449. SYPEX:  STC
  1450.         RET
  1451. ;
  1452. SYBLD:  INX     H
  1453.         MOV     C,M
  1454.         INX     H
  1455.         MOV     B,M
  1456.         DCX     H
  1457.         DCX     H
  1458.         CALL    LOOKU
  1459.         RNC
  1460.         MVI     A,'L'
  1461.         STAX    D
  1462.         INX     D
  1463.         MOV     A,B
  1464.         CALL    SYSTX
  1465.         MOV     A,C
  1466.         CALL    SYSTX
  1467.         MOV     A,B
  1468.         STAX    D
  1469.         INX     D
  1470.         MOV     A,C
  1471.         STAX    D
  1472.         XRA     A
  1473.         INX     D
  1474.         STAX    D
  1475.         PUSH    H
  1476.         LHLD    SYMBC
  1477.         INX     H
  1478.         SHLD    SYMBC
  1479.         LHLD    SYMBC1
  1480.         DCX     H
  1481.         MOV     A,H
  1482.         ORA     L
  1483.         JRNZ    HITIT
  1484.         CALL    CRLF
  1485.         MVI     C,WTFN
  1486.         LXI     D,TERRM
  1487.         CALL    BDOS
  1488.         CALL    CRLF
  1489.         JMP     EXPR
  1490. HITIT:  SHLD    SYMBC1
  1491.         POP     H
  1492.         STC
  1493.         RET
  1494. ;
  1495. SYSTX:  PUSH    PSW
  1496.         CALL    HEXL
  1497.         STAX    D
  1498.         INX     D
  1499.         POP     PSW
  1500.         CALL    HEXR
  1501.         STAX    D
  1502.         INX     D
  1503.         RET
  1504. ;
  1505. LOOKU:  LXI     D,SYMTB
  1506. LULP:   LDAX    D
  1507.         ORA     A
  1508.         STC
  1509.         RZ
  1510.         INX     D
  1511.     INX    D
  1512.         INX     D
  1513.         INX     D
  1514.         INX     D
  1515.         LDAX    D
  1516.         CMP     B
  1517.         INX     D
  1518.         JRNZ    LUNO
  1519.         LDAX    D
  1520.         CMP     C
  1521.         JRNZ    LUNO
  1522.         DCX     D
  1523.         DCX     D
  1524.         DCX     D
  1525.         DCX     D
  1526.         DCX     D
  1527.         DCX     D
  1528.         ORA     A
  1529.         RET
  1530. LUNO:   INX     D
  1531.         JMPR    LULP
  1532. ;
  1533. GRSCC:  MOV     A,M
  1534.         RAR
  1535.         ANI     1C
  1536.         PUSH    H
  1537.         LXI     H,RSTAB
  1538.         CALL    ADD
  1539.         MOV     A,M
  1540.         STA     CC1
  1541.         INX     H
  1542.         MOV     A,M
  1543.         STA     CC1+1
  1544.         INX     H
  1545.         MOV     A,M
  1546.         STA     CC1+2
  1547.         INX     H
  1548.         MOV     A,M
  1549.         STA     CCB
  1550.         POP     H
  1551.         LXI     B,CC1-1
  1552.         RET
  1553. ;
  1554. POTLM:  RAR
  1555.         RAR
  1556.         RAR
  1557. POTL:   ANI     07
  1558.         ADI     30
  1559.         JMP     ZTYPE
  1560. ;
  1561. GETXR:  MOV     A,M
  1562.         RAR
  1563.         RAR
  1564.         RAR
  1565.         ANI     06
  1566.         CPI     06
  1567.         JRNZ    GETRP
  1568.         MVI     A,'S'
  1569.         STA     CC1+1
  1570.         MVI     A,'P'
  1571.         STA     CC1+2
  1572.         LXI     B,CC1-1
  1573.         RET
  1574. ;
  1575. GETRP:  PUSH    H
  1576.         LXI     H,RTAB
  1577.         CALL    ADD
  1578.         MOV     A,M
  1579.         STA     CC1+1
  1580.         INX     H
  1581.         MOV     A,M
  1582.         STA     CC1+2
  1583.         JMPR    GETEX
  1584. ;
  1585. GETBX:  MOV     A,M
  1586.         RAR
  1587.         RAR
  1588.         ANI     06
  1589.         PUSH    H
  1590.         LXI     H,BXTAB
  1591.         CALL    ADD
  1592.         MOV     A,M
  1593.         STA     CC1+2
  1594.         INX     H
  1595.         MOV     A,M
  1596.         STA     CCB
  1597. GETEX:  POP     H
  1598.         LXI     B,CC1-1
  1599.         RET
  1600. ;
  1601. PRIR:   INX     B
  1602.         LDAX    B
  1603.         CALL    ZTYPE
  1604.         RET
  1605. PRIRP:  MVI     A,'H'
  1606.         CALL    ZTYPE
  1607.         PUSH    D
  1608.         MVI     D,03
  1609.         DCX     B
  1610. PIRPL:  INX     B
  1611.         LDAX    B
  1612.         CALL    ZTYPE
  1613.         DCR     D
  1614.         JRNZ    PIRPL
  1615.         POP     D
  1616.         RET
  1617. ;
  1618. ENDCK:  LDA     EBUF
  1619.         SUB     L
  1620.         LDA     EBUF+1
  1621.         SBB     H
  1622.         JRNC    CKCTC
  1623. END:    LDA     KBYTE
  1624.         ANI     02
  1625.         JZ      EXPR
  1626. ENDSF:  PUSH    H
  1627.         XRA     A
  1628.         STA     TABC
  1629.         LXI     H,ESFSG
  1630.         MVI     B,ESFSL
  1631. EDSFL:  MOV     A,M
  1632.         CALL    ZTYPE
  1633.         INX     H
  1634.         DJNZ    EDSFL
  1635.         POP     H
  1636.         JMP     CDKF
  1637. CKCTC:  CALL    CONSTA
  1638.         CPI     TRUE
  1639.         RNZ
  1640.         CALL    CI
  1641.         CPI     'K'-40
  1642.         JZ      EXPR
  1643.         CPI     'S'-40
  1644.         RNZ
  1645.         CALL    CI
  1646.         CPI     'K'-40
  1647.         JZ      EXPR
  1648.         RET
  1649. ;
  1650. ;       TABLES
  1651. ;
  1652. JMTBL:  .WORD   TYPE0
  1653.         .WORD   TYPE1
  1654.         .WORD   TYPE2
  1655.         .WORD   TYPE3
  1656.         .WORD   TYPE4
  1657.         .WORD   TYPE5
  1658.         .WORD   TYPE6
  1659.         .WORD   TYPE7
  1660.         .WORD   TYPE8
  1661.         .WORD   TYPE9
  1662.         .WORD   TYPEA
  1663.         .WORD   TYPEB
  1664.         .WORD   TYPEC
  1665.         .WORD   TYPED
  1666.         .WORD   TYPEE
  1667.         .WORD   TYPEF
  1668.         .WORD   TYP10
  1669.         .WORD   TYP11
  1670.         .WORD   TYP12
  1671.         .WORD   TYP13
  1672.         .WORD   TYP14
  1673.         .WORD   TYP15
  1674.         .WORD   TYP16
  1675.         .WORD   TYP17
  1676.         .WORD   TYP18
  1677.         .WORD   TYP19
  1678.         .WORD   TYP1A
  1679.         .WORD   TYP1B
  1680.         .WORD   TYP1C
  1681.         .WORD   TYP1D
  1682.         .WORD   TYP1E
  1683.         .WORD   TYP1F
  1684.         .WORD   TYP20
  1685.         .WORD   PRDB
  1686. ;
  1687. CCTAB:  .ASCII  'NZ'
  1688.         .ASCII  'Z '
  1689.         .ASCII  'NC'
  1690.         .ASCII  'C '
  1691.         .ASCII  'PO'
  1692.         .ASCII  'PE'
  1693.         .ASCII  'P '
  1694.         .ASCII  'M '
  1695. ;
  1696. RTAB:   .ASCII  'BC'
  1697.         .ASCII  'DE'
  1698.         .ASCII  'HL'
  1699.         .ASCII  'MA'
  1700. ;
  1701. RSTAB:  .ASCII  'RLCR'
  1702.         .ASCII  'RRCR'
  1703.         .ASCII  'RALR'
  1704.         .ASCII  'RARR'
  1705.         .ASCII  'SLAR'
  1706.         .ASCII  'SRAR'
  1707.         .ASCII  'UNDF'
  1708.         .ASCII  'SRLR'
  1709. ;
  1710. BXTAB:  .ASCII  'I '
  1711.         .ASCII  'D '
  1712.         .ASCII  'IR'
  1713.         .ASCII  'DR'
  1714. ;
  1715. ;       OPCODE TABLES
  1716. ;
  1717. OTABM:  .BYTE   0FF
  1718.         .WORD   0000
  1719.         .ASCII  'NOP '
  1720.         .BYTE   0FF
  1721.         .WORD   0007
  1722.         .ASCII  'RLC '
  1723.         .BYTE   0FF
  1724.         .WORD   000F
  1725.         .ASCII  'RRC '
  1726.         .BYTE   0FF
  1727.         .WORD   0017
  1728.         .ASCII  'RAL '
  1729.         .BYTE   0FF
  1730.         .WORD   00EB
  1731.         .ASCII  'XCHG'
  1732.         .BYTE   0FF
  1733.         .WORD   001F
  1734.         .ASCII  'RAR '
  1735.         .BYTE   0FF
  1736.         .WORD   0722
  1737.         .ASCII  'SHLD'
  1738.         .BYTE   0FF
  1739.         .WORD   0027
  1740.         .ASCII  'DAA '
  1741.         .BYTE   0FF
  1742.         .WORD   072A
  1743.         .ASCII  'LHLD'
  1744.         .BYTE   0FF
  1745.         .WORD   002F
  1746.         .ASCII  'CMA '
  1747.         .BYTE   0FF
  1748.         .WORD   0732
  1749.         .ASCII  'STA '
  1750.         .BYTE   0FF
  1751.         .WORD   0037
  1752.         .ASCII  'STC '
  1753.         .BYTE   0FF
  1754.         .WORD   073A
  1755.         .ASCII  'LDA '
  1756.         .BYTE   0FF
  1757.         .WORD   003F
  1758.         .ASCII  'CMC '
  1759.         .BYTE   0FF
  1760.         .WORD   0076
  1761.         .ASCII  'HLT '
  1762.         .BYTE   0C0
  1763.         .WORD   0B40
  1764.         .ASCII  'MOV '
  1765.         .BYTE   0FF
  1766.         .WORD   07C3
  1767.         .ASCII  'JMP '
  1768.         .BYTE   0FF
  1769.         .WORD   00C9
  1770.         .ASCII  'RET '
  1771.         .BYTE   0FF
  1772.         .WORD   07CD
  1773.         .ASCII  'CALL'
  1774.         .BYTE   0FF
  1775.         .WORD   05D3
  1776.         .ASCII  'OUT '
  1777.         .BYTE   0FF
  1778.         .WORD   05DB
  1779.         .ASCII  'IN  '
  1780.         .BYTE   0FF
  1781.         .WORD   00E3
  1782.         .ASCII  'XTHL'
  1783.         .BYTE   0FF
  1784.         .WORD   00E9
  1785.         .ASCII  'PCHL'
  1786.         .BYTE   0FF
  1787.         .WORD   00F3
  1788.         .ASCII  'DI  '
  1789.         .BYTE   0FF
  1790.         .WORD   00FB
  1791.         .ASCII  'EI  '
  1792.         .BYTE   0FF
  1793.         .WORD   00F9
  1794.         .ASCII  'SPHL'
  1795.         .BYTE   0FF
  1796.         .WORD   05C6
  1797.         .ASCII  'ADI '
  1798.         .BYTE   0FF
  1799.         .WORD   05CE
  1800.         .ASCII  'ACI '
  1801.         .BYTE   0FF
  1802.         .WORD   05D6
  1803.         .ASCII  'SUI '
  1804.         .BYTE   0FF
  1805.         .WORD   05DE
  1806.         .ASCII  'SBI '
  1807.         .BYTE   0FF
  1808.         .WORD   05E6
  1809.         .ASCII  'ANI '
  1810.         .BYTE   0FF
  1811.         .WORD   05EE
  1812.         .ASCII  'XRI '
  1813.         .BYTE   0FF
  1814.         .WORD   05F6
  1815.         .ASCII  'ORI '
  1816.         .BYTE   0FF
  1817.         .WORD   05FE
  1818.         .ASCII  'CPI '
  1819.         .BYTE   0FF
  1820.         .WORD   0008
  1821.         .ASCII  'EXAF'
  1822.         .BYTE   0FF
  1823.         .WORD   0C10
  1824.         .ASCII  'DJNZ'
  1825.         .BYTE   0FF
  1826.         .WORD   0C18
  1827.         .ASCII  'JMPR'
  1828.         .BYTE   0FF
  1829.         .WORD   00D9
  1830.         .ASCII  'EXX '
  1831.         .BYTE   0FF
  1832.         .WORD   0ECB
  1833.         .ASCII  '....'
  1834.         .BYTE   0FF
  1835.         .WORD   0FED
  1836.         .ASCII  '....'
  1837.         .BYTE   0FF
  1838.         .WORD   10DD
  1839.         .ASCII  '(X).'
  1840.         .BYTE   0FF
  1841.         .WORD   10FD
  1842.         .ASCII  '(Y).'
  1843.         .BYTE   0E7
  1844.         .WORD   0D20
  1845.         .ASCII  'JR..'
  1846.         .BYTE   0F8
  1847.         .WORD   0180
  1848.         .ASCII  'ADD '
  1849.         .BYTE   0F8
  1850.         .WORD   0188
  1851.         .ASCII  'ADC '
  1852.         .BYTE   0F8
  1853.         .WORD   0190
  1854.         .ASCII  'SUB '
  1855.         .BYTE   0F8
  1856.         .WORD   0198
  1857.         .ASCII  'SBB '
  1858.         .BYTE   0F8
  1859.         .WORD   01A0
  1860.         .ASCII  'ANA '
  1861.         .BYTE   0F8
  1862.         .WORD   01A8
  1863.         .ASCII  'XRA '
  1864.         .BYTE   0F8
  1865.         .WORD   01B0
  1866.         .ASCII  'ORA '
  1867.         .BYTE   0F8
  1868.         .WORD   01B8
  1869.         .ASCII  'CMP '
  1870.         .BYTE   0C7
  1871.         .WORD   0204
  1872.         .ASCII  'INR '
  1873.         .BYTE   0C7
  1874.         .WORD   0205
  1875.         .ASCII  'DCR '
  1876.         .BYTE   0EF
  1877.         .WORD   0302
  1878.         .ASCII  'STAX'
  1879.         .BYTE   0EF
  1880.         .WORD   030A
  1881.         .ASCII  'LDAX'
  1882.         .BYTE   0CF
  1883.         .WORD   03C1
  1884.         .ASCII  'POP '
  1885.         .BYTE   0CF
  1886.         .WORD   03C5
  1887.         .ASCII  'PUSH'
  1888.         .BYTE   0C7
  1889.         .WORD   0406
  1890.         .ASCII  'MVI '
  1891.         .BYTE   0CF
  1892.         .WORD   0303
  1893.         .ASCII  'INX '
  1894.         .BYTE   0CF
  1895.         .WORD   0309
  1896.         .ASCII  'DAD '
  1897.         .BYTE   0CF
  1898.         .WORD   030B
  1899.         .ASCII  'DCX '
  1900.         .BYTE   0C7
  1901.         .WORD   08C2
  1902.         .ASCII  'J...'
  1903.         .BYTE   0C7
  1904.         .WORD   08C4
  1905.         .ASCII  'C...'
  1906.         .BYTE   0CF
  1907.         .WORD   0601
  1908.         .ASCII  'LXI '
  1909.         .BYTE   0C7
  1910.         .WORD   09C0
  1911.         .ASCII  'R...'
  1912.         .BYTE   0C7
  1913.         .WORD   0AC7
  1914.         .ASCII  'RST '
  1915.         .BYTE   00
  1916. ;
  1917. ;
  1918. OTABC:  .BYTE   0C0
  1919.         .WORD   1100
  1920.         .ASCII  '....'
  1921.         .BYTE   0C0
  1922.         .WORD   1240
  1923.         .ASCII  'BIT '
  1924.         .BYTE   0C0
  1925.         .WORD   1280
  1926.         .ASCII  'RES '
  1927.         .BYTE   0C0
  1928.         .WORD   12C0
  1929.         .ASCII  'SET '
  1930.         .BYTE   00
  1931. ;
  1932. ;
  1933. OTABE:  .BYTE   0FF
  1934.         .WORD   0044
  1935.         .ASCII  'NEG '
  1936.         .BYTE   0FF
  1937.         .WORD   0045
  1938.         .ASCII  'RETN'
  1939.         .BYTE   0FF
  1940.         .WORD   004D
  1941.         .ASCII  'RETI'
  1942.         .BYTE   0FF
  1943.         .WORD   0046
  1944.         .ASCII  'IM0 '
  1945.         .BYTE   0FF
  1946.         .WORD   0056
  1947.         .ASCII  'IM1 '
  1948.         .BYTE   0FF
  1949.         .WORD   005E
  1950.         .ASCII  'IM2 '
  1951.         .BYTE   0FF
  1952.         .WORD   0067
  1953.         .ASCII  'RRD '
  1954.         .BYTE   0FF
  1955.         .WORD   006F
  1956.         .ASCII  'RLD '
  1957.         .BYTE   0FF
  1958.         .WORD   0047
  1959.         .ASCII  'STAI'
  1960.         .BYTE   0FF
  1961.         .WORD   004F
  1962.         .ASCII  'STAR'
  1963.         .BYTE   0FF
  1964.         .WORD   0057
  1965.         .ASCII  'LDAI'
  1966.         .BYTE   0FF
  1967.         .WORD   005F
  1968.         .ASCII  'LDAR'
  1969.         .BYTE   0CF
  1970.         .WORD   1343
  1971.         .ASCII  'S..D'
  1972.         .BYTE   0CF
  1973.         .WORD   134B
  1974.         .ASCII  'L..D'
  1975.         .BYTE   0E7
  1976.         .WORD   14A0
  1977.         .ASCII  'LD..'
  1978.         .BYTE   0E7
  1979.         .WORD   14A1
  1980.         .ASCII  'CC..'
  1981.         .BYTE   0E7
  1982.         .WORD   14A2
  1983.         .ASCII  'IN..'
  1984.         .BYTE   0E7
  1985.         .WORD   15A3
  1986.         .ASCII  'UT..'
  1987.         .BYTE   0C7
  1988.         .WORD   0240
  1989.         .ASCII  'INP '
  1990.         .BYTE   0C7
  1991.         .WORD   0241
  1992.         .ASCII  'OUTP'
  1993.         .BYTE   0CF
  1994.         .WORD   034A
  1995.         .ASCII  'DADC'
  1996.         .BYTE   0CF
  1997.         .WORD   0342
  1998.         .ASCII  'DSBC'
  1999.     .BYTE    00
  2000. ;
  2001. ;
  2002. OTBIR:  .BYTE   0FF
  2003.         .WORD   16E9
  2004.         .ASCII  'PC..'
  2005.         .BYTE   0C9
  2006.         .WORD   2009
  2007.         .ASCII  'DA..'
  2008.         .BYTE   0FF
  2009.         .WORD   16F9
  2010.         .ASCII  'SP..'
  2011.         .BYTE   0FF
  2012.         .WORD   16E3
  2013.         .ASCII  'XT..'
  2014.         .BYTE   0FF
  2015.         .WORD   17E1
  2016.         .ASCII  'POP '
  2017.         .BYTE   0FF
  2018.         .WORD   17E5
  2019.         .ASCII  'PUSH'
  2020.         .BYTE   0FF
  2021.         .WORD   1723
  2022.         .ASCII  'INX '
  2023.         .BYTE   0FF
  2024.         .WORD   172B
  2025.         .ASCII  'DCX '
  2026.         .BYTE   0FF
  2027.         .WORD   1836
  2028.         .ASCII  'MVI '
  2029.         .BYTE   0FF
  2030.         .WORD   1921
  2031.         .ASCII  'LXI '
  2032.         .BYTE   0FF
  2033.         .WORD   1A22
  2034.         .ASCII  'S..D'
  2035.         .BYTE   0FF
  2036.         .WORD   1A2A
  2037.         .ASCII  'L..D'
  2038.         .BYTE   0F8
  2039.         .WORD   1B70
  2040.         .ASCII  'MOV '
  2041.         .BYTE   0C7
  2042.         .WORD   1C46
  2043.         .ASCII  'MOV '
  2044.         .BYTE   0FF
  2045.         .WORD   1F86
  2046.         .ASCII  'ADD '
  2047.         .BYTE   0FF
  2048.         .WORD   1F34
  2049.         .ASCII  'INR '
  2050.         .BYTE   0FF
  2051.         .WORD   1F35
  2052.         .ASCII  'DCR '
  2053.         .BYTE   0FF
  2054.         .WORD   1F8E
  2055.         .ASCII  'ADC '
  2056.         .BYTE   0FF
  2057.         .WORD   1F96
  2058.         .ASCII  'SUB '
  2059.         .BYTE   0FF
  2060.         .WORD   1F9E
  2061.         .ASCII  'SBB '
  2062.         .BYTE   0FF
  2063.         .WORD   1FA6
  2064.         .ASCII  'ANA '
  2065.         .BYTE   0FF
  2066.         .WORD   1FB6
  2067.         .ASCII  'ORA '
  2068.         .BYTE   0FF
  2069.         .WORD   1FAE
  2070.         .ASCII  'XRA '
  2071.         .BYTE   0FF
  2072.         .WORD   1FBE
  2073.         .ASCII  'CMP '
  2074.         .BYTE   00
  2075. ;
  2076. ;
  2077. OTBIC:  .BYTE   0C7
  2078.         .WORD   1D46
  2079.         .ASCII  'BIT '
  2080.         .BYTE   0C7
  2081.         .WORD   1D86
  2082.         .ASCII  'RES '
  2083.         .BYTE   0C7
  2084.         .WORD   1DC6
  2085.         .ASCII  'SET '
  2086.         .BYTE   0C6
  2087.         .WORD   1E06
  2088.         .ASCII  '....'
  2089.         .BYTE   00
  2090. ;
  2091. ;
  2092. ;
  2093. ;
  2094.         .RADIX  10
  2095. ;
  2096. ;       STORAGE
  2097. ;
  2098. RDBUF:  .BYTE   30
  2099. RDCNT:  .BYTE   0
  2100. COMAND: .BLKB   28
  2101. BIAS:   .WORD   0
  2102. RELO:   .WORD   0
  2103. OFFST:  .WORD   0
  2104. KBYTE:  .BYTE   0
  2105. CBYTE:  .BYTE   0
  2106. BBUF:   .WORD   0
  2107. EBUF:   .WORD   0
  2108. SYMBC:  .WORD   0
  2109. SYMBC1: .WORD   SYMNUM
  2110. FCBW:   .BLKB   33
  2111. WTPTR:  .BYTE   0
  2112. WTBUF:  .BLKB   128
  2113. TYFLG:  .BLKB   2
  2114. CC1:    .BLKB   3
  2115. CCB:    .BLKB   1
  2116. TABC:   .BYTE   0
  2117. STACK:  .BLKB   64
  2118. STKTOP  =       .
  2119. HERALD: .BYTE   126,28
  2120.         .ASCII  "CPM Z-80 DISASSEMBLER VER 1.0"
  2121.         .BYTE   CR,LF
  2122.         .ASCII  "ADAPTED FROM DDJ BY T.M.B., SEPT. 1979."
  2123.         .BYTE   CR,LF,CR,LF
  2124.         .ASCII  "$"
  2125. ENMES:  .BYTE   CR,LF
  2126.         .ASCII  "Command (c,d,m,o,r,q,h,s,t) ==> $"
  2127. COMEX:  .ASCII  "COM"
  2128. OPNM:   .ASCII  "ERROR ON opening FILE$"
  2129. MESA3:  .ASCII  "SECTORS READ = $"
  2130. MESA4:  .ASCII  "NEXT ADDRESS = $"
  2131. RDERRM: .ASCII  "ERROR ON reading SECTOR$"
  2132. ESFSG:  .BYTE   TAB
  2133.         .ASCII  ".END"
  2134.         .BYTE   CR,'Z'-40H
  2135. ESFSL   =       .-ESFSG
  2136. BYTSG:  .ASCII  ".BYTE"
  2137. BYSGL   =       .-BYTSG
  2138. SGNMG:  .ASCII  "DISASSEMBLER"
  2139.         .BYTE   CR,LF
  2140. SNMGL   =       .-SGNMG
  2141. OFCMD:  .BYTE   CR,LF
  2142.         .ASCII  "Output Filename ==> $"
  2143. DIREM:  .ASCII  "No more directory space $"
  2144. WEMS1:  .ASCII  "ERROR ON writing SECTOR...NOW CLOSING."
  2145.         .BYTE   CR,LF
  2146.         .ASCII  "LAST ADDRESS DISASSEMBLED ==> $"
  2147. TDLT:   .ASCII  "TDL"
  2148. CLEER:  .ASCII  "ERROR ON closing FILE$"
  2149. OPTMES: .ASCII  "OPTIONS SELECTED = $"
  2150. FINMES: .ASCII  "NUMBER OF ENTRIES IN SYMBOL TABLE = $"
  2151. TERRM:  .ASCII  ">>> WARNING <<< SYMBOL TABLE EXCEDED.$"
  2152. SYMTB:  .BLKB   SYMNUM
  2153. ;
  2154. PREND   =       .
  2155.         .END
  2156.