home *** CD-ROM | disk | FTP | other *** search
/ CP/M / CPM_CDROM.iso / simtel / sigm / vols000 / vol091 / dasmzlg.mac < prev    next >
Text File  |  1984-04-29  |  15KB  |  1,009 lines

  1. ;
  2. ;DASMZLG.MAC from DASM.ZLG (ver. >= 3.0)
  3. ;This routine is the ZILOG mnemonic disassembler module for DASM.MAC.
  4. ;It is included into DASM during assembly under M80.
  5. ;
  6.     IF1
  7.     .PRINTX    /DASM with ZILOG-Standard Mnemonics/
  8.     ENDIF
  9. ;
  10. ;  This is the Header to be printed for this module
  11. ;
  12. HEADER:
  13.     DEFB    'DASM for ZILOG-Standard Mnemonics',0dh,0ah
  14.     DEFB    '    Derived from ZZSOURCE/RESOURCE',0dh,0ah
  15.     DEFB    '$',0
  16. ;
  17. ;  This is the Disassembler Module -- Instruction to be disassembled
  18. ;    is pted to by PC
  19. ;
  20. DASM:
  21.     CALL    HSYM        ;WRITE A SYMBOL IF IT EXISTS
  22.     ;.. AND PUT PC ON THE CRT
  23.     LD    HL,(RPLPTR)    ;SEE IF THIS LINE IS REPLACED
  24.     LD    A,H
  25.     OR    L
  26.     JR    Z,DASM1
  27.     LD    B,(HL)
  28.     INC    HL        ;SKIP THE '*'
  29.     DEC    B
  30.     CALL    NWLN0        ;PRINT THE REPLACING LINE AS A COMMENT
  31. DASM1:
  32.     LD    HL,(PC)    
  33.     EX    DE,HL
  34.     LD    HL,(OFFSET)
  35.     ADD    HL,DE        ;HL IS NOW THE BIASED PC
  36.     LD    (BIASED),HL
  37.     EX    DE,HL        ;DE IS NOW THE BIASED PC
  38.     INC    HL
  39.     LD    (PC),HL        ;THE NEW PC (NEXT BYTE)
  40.     EX    DE,HL        ;DE IS THE BYTE AFTER THE INSTRUCTION
  41.     LD    B,(HL)
  42.     LD    HL,OPC-4
  43.     CALL    GTCD
  44.     CALL    TYPEOC
  45.     CP    0AH        ;TYPES 0 THRU 9 ARE 1 BYTE
  46.     JR    C,OLDPC        ; .. SO DON'T CHANGE THE PC
  47.     LD    HL,(PC)
  48.     INC    HL
  49.     CP    10H        ;TYPES 0A THRU 0FH ARE 2-BYTERS
  50.     JR    C,NEWPC
  51.     CP    16H        ;TYPES 10H THRU 15H ARE 3 BYTES
  52.     JR    NC,NEWPC
  53.     INC    HL
  54. NEWPC:
  55.     LD    (PC),HL
  56. OLDPC:
  57.     PUSH    DE        ;SAVE THE 'E' REGISTER (MAY BE 'X' OR 'Y')
  58.     LD    E,A
  59.     LD    D,0
  60.     LD    HL,JMPTBL
  61.     ADD    HL,DE        ;ADD 2*OPCODE TYPE TO JMPTBL TO GET
  62.     ADD    HL,DE        ;.. ROUTINE ADDRESS
  63.     LD    E,(HL)
  64.     INC    HL
  65.     LD    D,(HL)
  66.     EX    DE,HL        ;HL NOW CONTAINS THE ROUTINE ADDRESS
  67.     POP    DE
  68.     PUSH    HL
  69.     LD    HL,(BIASED)
  70.     RET            ;'RETURN' TO THE ROUTINE
  71. ;
  72. GTCD:
  73.     LD    DE,4
  74. NXTCD:
  75.     ADD    HL,DE
  76. NXTCD1:
  77.     LD    A,(HL)
  78.     OR    A        ;SEE IF WE'RE AT THE NEXT MASK YET
  79.     INC    HL
  80.     JP    P,NXTCD1    ;JUMP IF NOT
  81.     AND    B        ;MASK OUT VARIABLES IN THE INSTRUCTION
  82.     CP    (HL)        ;CHECK THE GENERIC INSTRUCTION TYPE
  83.     JR    NZ,NXTCD
  84.     INC    HL
  85.     LD    A,(HL)        ;AFTER A MATCH, GET THE OPCODE TYPE
  86.     LD    (OPCTP),A
  87.     RET    
  88. ;
  89. TOC2:
  90.     CP    20H        ;CONVERT SPACES IN THE TABLE TO TABS
  91.     JR    NZ,TOC1
  92.     LD    A,9
  93. TOC1:
  94.     CALL    COUT
  95. TYPEOC:
  96.     INC    HL        ;TYPE THE OPCODE THAT HL IS POINTING TO
  97.     LD    A,(HL)
  98.     OR    A
  99.     JR    Z,TYPEOC
  100.     JP    P,TOC2
  101.     LD    HL,(PC)
  102.     LD    A,(OPCTP)
  103.     RET    
  104. ;
  105. JMPTBL:
  106.     DEFW    T0        ;SIMPLE 1 BYTE INSTRUCTIONS
  107.     DEFW    T1        ;8 BIT, REGISTER ARITHMETIC & LOGICAL
  108.     DEFW    T2        ;DEC & INC
  109.     DEFW    T3        ;DOUBLE REGISTER SINGLE BYTE ARITHMETIC
  110.     DEFW    T4        ;8 BIT LOAD FROM MEMORY
  111.     DEFW    T5        ;8 BIT LOAD TO MEMORY
  112.     DEFW    T6        ;POP's AND PUSH's
  113.     DEFW    T7        ;CONDITIONAL RETURNS
  114.     DEFW    T8        ;THE RST INSTRUCTIONS
  115.     DEFW    T9        ;REGISTER TO REGISTER LOADS
  116. ;2 BYTE INSTRUCTIONS
  117.     DEFW    TA        ;8 BIT LOAD IMMEDIATES
  118.     DEFW    TB        ;8 BIT IMMEDIATE ARITH. & LOGICAL
  119.     DEFW    TC        ;IN A,(n)
  120.     DEFW    TD        ;OUT (n),A
  121.     DEFW    TE        ;CONDITIONAL, RELATIVE JUMPS
  122.     DEFW    TF        ;OTHER RELATIVE JUMPS
  123. ;3 BYTE INSTRUCTIONS
  124.     DEFW    T10        ;16 BIT LOADS
  125.     DEFW    T11        ;JUMPS & CALLS
  126.     DEFW    T12        ;DIRECT LOADS
  127.     DEFW    T13        ;DIRECT STORES
  128.     DEFW    T14        ;LD (nn),A
  129.     DEFW    T15        ;CONDITIONAL JUMPS & CALLS
  130. ;MULTI-BYTE OPCODES
  131.     DEFW    T16        ;THE 'CB' SERIES {1, 1A, 2A}
  132.     DEFW    T17        ;THE 'DD' SERIES {1B thru 25 & 2A}
  133.     DEFW    T18        ;THE 'FD' SERIES {1B thru 25 & 2A}
  134.     DEFW    T19        ;THE 'ED' SERIES {0, 2, 3, 26 thru 2A}
  135. ;1 BYTE
  136.     DEFW    T1A        ;THE BIT, RES & SET FOR 'CB'
  137.     DEFW    T1B        ;INDEX REGISTER LOADS
  138.     DEFW    T1C        ;JUMP INDIRECT INDEX REGISTER
  139.     DEFW    T1D        ;INDEX REGISTER ADD
  140. ;2 BYTE
  141.     DEFW    T1E        ;INDEX REGISTER ARITH. AND LOGICAL
  142.     DEFW    T1F        ;INDEXED LOAD TO REGISTER
  143.     DEFW    T20        ;INDEXED REGISTER STORE
  144. ;3 BYTES AFTER 'DD' OR 'FE'
  145.     DEFW    T21        ;LD xx,nn
  146.     DEFW    T22        ;LD (nn),n
  147.     DEFW    T23        ;LD xx,(nn)
  148.     DEFW    T24        ;LD (xx+d),n
  149.     DEFW    T25        ;THE 'CB' EXTENSIONS TO 'DD' OR 'FD'
  150. ;1 BYTE AFTER 'ED'
  151.     DEFW    T26        ;IN r,(C)
  152.     DEFW    T27        ;BLOCK MOVES
  153. ;3 BYTES AFTER 'ED'
  154.     DEFW    T28        ;LD (nn),dd
  155.     DEFW    T29        ;LD dd,(nn)
  156. ;WHATEVER IS LEFT
  157.     DEFW    T2A        ;INDEFINED OPCODES    
  158. ;
  159. ;ONE BYTE INSTRUCTIONS, SIMPLE
  160. ;
  161. T0:
  162.     JP    DCRLF
  163. ;
  164. ;ARITHMETIC & LOGICAL, 8 BIT, REGISTER
  165. ;
  166. T1:
  167.     CALL    PSREG        ;PRINT THE SOURCE REGISTER
  168.     JP    DCRLF
  169. ;
  170. ;DEC AND INC INSTRUCTIONS
  171. ;
  172. T2:
  173.     CALL    PDREG        ;PRINT THE DESTINATION REGISTER
  174.     JP    DCRLF
  175. ;
  176. ;DOUBLE REGISTER SINGLE BYTE
  177. ;
  178. T3:
  179.     CALL    PXSREG        ;PRINT HL, DE, BC, OR SP
  180.     JP    DCRLF
  181. T4:
  182.     CALL    LPAR        ;  LD A,(BC or DE)
  183.     CALL    PXSREG
  184.     CALL    RPAR
  185.     JP    DCRLF
  186. T5:
  187.     CALL    LPAR        ;  LD (BC or DE),A
  188.     CALL    PXSREG
  189.     CALL    RPAR
  190.     CALL    PCMAA
  191.     JP    DCRLF
  192. ;
  193. ;POP AND PUSH
  194. ;
  195. T6:
  196.     CALL    PXQREG        ;PRINT HL, DE, BC, OR AF
  197.     JP    DCRLF
  198. ;
  199. ;CONDITIONAL RETURNS
  200. ;
  201. T7:
  202.     CALL    PRCND
  203.     JP    DCRLF
  204. ;
  205. ;THE RST INSTRUCTIONS
  206. ;
  207. T8:
  208.     LD    A,(HL)
  209.     AND    38H
  210.     CALL    PRST
  211.     JP    DCRLF
  212. ;
  213. ;REGISTER TO REGISTER LOADS
  214. ;
  215. T9:
  216.     CALL    PDREG
  217.     CALL    COMMA
  218.     LD    HL,(BIASED)
  219.     CALL    PSREG
  220.     JP    DCRLF
  221. ;
  222. ;TWO BYTE INSTRUCTIONS
  223. ; 8 BIT IMMEDIATE LOADS
  224. ;
  225. TA:
  226.     CALL    PDREG
  227.     CALL    COMMA
  228.     LD    HL,(BIASED)
  229. ;ARITHMETIC & LOGICAL IMMEDIATES
  230. TB:
  231.     INC    HL
  232. DTABYT:
  233.     LD    A,(HL)
  234.     CP    ' '
  235.     JR    C,NOTASC
  236.     CP    5BH
  237.     JR    NC,NOTASC
  238.     CALL    PASCII
  239.     LD    A,''''
  240.     CALL    COUT
  241.     LD    A,(XCSW)    ;WANT SYMBOL COMMENTS?
  242.     OR    A
  243.     JP    Z,DCRLF
  244.     CALL    TAB
  245.     CALL    SEMI
  246. NOTASC:
  247.     LD    A,(HL)
  248.     CP    0AH
  249.     JR    C,NTSC0
  250.     CALL    PASHEX
  251.     LD    A,'H'
  252.     CALL    COUT
  253.     JP    DCRLF
  254. NTSC0:
  255.     ADD    A,'0'
  256.     CALL    COUT
  257.     JP    DCRLF
  258. ;
  259. ;IN
  260. ;
  261. TC:
  262.     CALL    LPAR        ;FOR 'IN A,(C)'
  263.     INC    HL
  264.     LD    A,(HL)
  265.     CALL    PASHEX
  266.     LD    A,'H'
  267.     CALL    COUT
  268.     CALL    RPAR
  269.     JP    DCRLF
  270. ;OUT
  271. TD:
  272.     CALL    LPAR
  273.     INC    HL
  274.     LD    A,(HL)
  275.     CALL    PASHEX
  276.     LD    A,'H'
  277.     CALL    COUT
  278.     CALL    RPAR
  279.     CALL    COMMA
  280.     LD    A,'A'
  281.     CALL    COUT
  282.     JP    DCRLF
  283. ;
  284. ;CONDITIONAL RELATIVE JUMPS
  285. ;
  286. TE:
  287.     CALL    PRCND1        ;THE SPECIAL CC LIST
  288.     LD    HL,(BIASED)
  289.     CALL    COMMA
  290. ;OTHER RELATIVE INSTRUCTIONS
  291. TF:
  292.     INC    HL
  293.     LD    A,(HL)
  294.     LD    E,A
  295.     LD    D,0
  296.     LD    HL,(PC)
  297.     OR    A
  298.     JP    P,PSTV
  299.     DEC    D
  300. PSTV:
  301.     ADD    HL,DE
  302.     EX    DE,HL
  303.     CALL    PRNTDE
  304.     CALL    C,PDERTN
  305.     JP    DCRLF
  306. ;
  307. ;THREE BYTE INSTRUCTIONS
  308. ;16 BIT LOADS
  309. ;
  310. T10:
  311.     CALL    PXSREG
  312.     CALL    COMMA
  313.     LD    HL,(BIASED)
  314. ;JUMPS AND CALLS
  315. T11:
  316.     CALL    PRNN
  317.     CALL    C,PDERTN
  318.     JP    DCRLF
  319. ;
  320. ;LOAD DIRECT
  321. ;
  322. T12:
  323.     CALL    DRADR
  324.     CALL    C,PDERTN
  325.     JP    DCRLF
  326. DRADR:
  327.     CALL    LPAR        ;PRINT THE VALUE FOR DE IN PARENTHESIS
  328.     CALL    PRNN
  329.     PUSH    AF
  330.     CALL    RPAR
  331.     POP    AF
  332.     RET    
  333. ;
  334. ;STORE DIRECT
  335. ;
  336. T13:
  337.     CALL    DRADR
  338.     PUSH    AF
  339.     CALL    COMMA
  340.     LD    A,'H'
  341.     CALL    COUT
  342.     LD    A,'L'
  343.     CALL    COUT
  344.     POP    AF
  345.     CALL    C,PDERTN
  346.     JP    DCRLF
  347. ;
  348. ;STORE ACCUMULATOR DIRECT
  349. ;
  350. T14:
  351.     CALL    DRADR
  352.     PUSH    AF
  353.     CALL    PCMAA
  354.     POP    AF
  355.     CALL    C,PDERTN
  356.     JP    DCRLF
  357. ;
  358. ;CONDITIONAL JUMPS & CALLS
  359. ;
  360. T15:
  361.     CALL    PRCND
  362.     CALL    COMMA
  363.     LD    HL,(BIASED)
  364.     CALL    PRNN
  365.     CALL    C,PDERTN
  366.     JP    DCRLF
  367. ;
  368. ;THE 'CB' SERIES LEAD IN
  369. ;
  370. T16:
  371.     INC    HL
  372.     LD    B,(HL)        ;THE SECOND BYTE OF THE INSTRUCTION
  373.     LD    (BIASED),HL
  374.     LD    HL,OPC2-4
  375.     CALL    GTCD        ;FIND THE TYPE OF THE 'CB' INSTRUCTION
  376.     CALL    TYPEOC
  377.     JP    OLDPC
  378. ;
  379. ;THE 'DD' SERIES LEAD IN
  380. ;
  381. T17:
  382.     LD    E,'X'        ;FOR THE 'IX' INSTRUCTIONS
  383. T170:
  384.     PUSH    DE
  385.     INC    HL
  386.     LD    (BIASED),HL
  387.     LD    B,(HL)
  388.     LD    HL,OPC3-4
  389.     CALL    GTCD
  390.     CALL    TYPEOC
  391.     POP    DE
  392.     CP    1EH
  393.     JP    C,OLDPC
  394.     CP    2AH
  395.     JP    Z,OLDPC
  396.     CP    21H
  397.     INC    HL
  398.     JP    C,NEWPC
  399.     INC    HL
  400.     JP    NEWPC
  401. ;
  402. ;THE 'FD' SERIES LEAD IN
  403. ;
  404. T18:
  405.     LD    E,'Y'
  406.     JR    T170
  407. ;
  408. ;THE 'ED' SERIES LEAD IN
  409. ;
  410. T19:
  411.     INC    HL
  412.     LD    (BIASED),HL
  413.     LD    B,(HL)
  414.     LD    HL,OPC4-4
  415.     CALL    GTCD
  416.     CALL    TYPEOC
  417.     CP    28H
  418.     JP    C,OLDPC
  419.     CP    2AH
  420.     JP    Z,OLDPC
  421.     INC    HL
  422.     INC    HL
  423.     JP    NEWPC
  424. ;
  425. ;BIT, RES AND SET
  426. ;
  427. T1A:
  428.     CALL    PBIT
  429.     CALL    COMMA
  430.     CALL    PSREG
  431.     JP    DCRLF
  432. ;
  433. ;INDEX REGISTER MOVES
  434. ;
  435. T1B:
  436.     CALL    PRXX        ;TO TYPE EITHER 'IX' OR 'IY'
  437.     JP    DCRLF
  438. ;
  439. ;JUMP INDIRECT TO INDEX REGISTER
  440. ;
  441. T1C:
  442.     CALL    LPAR
  443.     CALL    PRXX
  444.     CALL    RPAR
  445.     JP    DCRLF
  446. ;
  447. ;INDEX REGISTER ADDITION
  448. ;
  449. T1D:
  450.     CALL    PRXX
  451.     CALL    COMMA
  452.     LD    A,E
  453.     CP    'X'
  454.     LD    A,(HL)
  455.     LD    HL,IXREGS
  456.     JR    Z,T1D0
  457.     LD    HL,IYREGS
  458. T1D0:
  459.     CALL    PXREG
  460.     JP    DCRLF
  461. ;
  462. ;INDEX REGISTER ARITHMETIC AND LOGICAL
  463. ;
  464. T1E:
  465.     INC    HL
  466.     CALL    PDISP        ;PRINT '(IX(Y)+d)
  467.     JP    DCRLF
  468. ;
  469. ;INDEXED LOAD TO REGISTER
  470. ;
  471. T1F:
  472.     CALL    PDREG
  473.     CALL    COMMA
  474.     LD    HL,(BIASED)
  475.     INC    HL
  476.     CALL    PDISP
  477.     JP    DCRLF
  478. ;
  479. ;INDEXED REGISTER STORE
  480. ;
  481. T20:
  482.     INC    HL
  483.     CALL    PDISP
  484.     CALL    COMMA
  485.     LD    HL,(BIASED)
  486.     CALL    PSREG        
  487.     JP    DCRLF
  488. ;
  489. ; LD xx,nn
  490. ;
  491. T21:
  492.     CALL    PRXX
  493.     CALL    COMMA
  494.     CALL    PRNN
  495.     CALL    C,PDERTN
  496.     JP    DCRLF
  497. ;
  498. ; LD (nn),xx
  499. ;
  500. T22:
  501.     CALL    LPAR
  502.     PUSH    DE
  503.     CALL    PRNN
  504.     EX    DE,HL        ;HL NOW CONTAINS THE NUMBER
  505.     POP    DE        ;RECOVER THE 'E' REG.  ('X' OR 'Y')
  506.     PUSH    AF        ;SAVE THE CARRY FOR A LATER 'PEDRTN'
  507.     CALL    RPAR
  508.     CALL    COMMA
  509.     CALL    PRXX
  510.     POP    AF        ;THE CARRY FLAG IS RESTORED
  511.     EX    DE,HL        ;DE AGAIN CONTAINS THE VALUE FOR nn
  512.     CALL    C,PDERTN
  513.     JP    DCRLF
  514. ;
  515. ; LD xx,(nn)
  516. ;
  517. T23:
  518.     CALL    PRXX
  519.     CALL    COMMA
  520.     CALL    LPAR
  521.     CALL    PRNN
  522.     PUSH    AF        ;SAVE Cy VALUE
  523.     CALL    RPAR
  524.     POP    AF
  525.     CALL    C,PDERTN
  526.     JP    DCRLF
  527. ;
  528. ; LD (xx+d),n
  529. ;
  530. T24:
  531.     INC    HL
  532.     CALL    PDISP
  533.     CALL    COMMA
  534.     JP    TB
  535. ;
  536. ;THE 'CB' EXTENSIONS TO 'DD' OR 'FD'
  537. ;
  538. T25:
  539.     INC    HL
  540.     INC    HL
  541.     LD    B,(HL)
  542.     LD    HL,OPC2-4
  543.     PUSH    DE        ;SAVE 'X' OR 'Y'
  544.     CALL    GTCD
  545.     CALL    TYPEOC
  546.     POP    DE
  547.     LD    A,B        ;GET THE O.C.
  548.     AND    7
  549.     CP    6
  550.     JR    NZ,ILLEG
  551.     LD    A,(OPCTP)
  552.     LD    HL,(BIASED)
  553.     CP    1AH
  554.     JP    C,T1E
  555.     JR    Z,DD12
  556. ILLEG:
  557.     LD    HL,(PC)
  558.     DEC    HL
  559.     DEC    HL
  560.     LD    (PC),HL
  561.     JP    T2A
  562. DD12:
  563.     INC    HL
  564.     INC    HL
  565.     CALL    PBIT
  566.     CALL    COMMA
  567.     DEC    HL
  568.     DEC    HL
  569.     JP    T1E
  570. ;
  571. ; IN r,(C)
  572. ;
  573. T26:
  574.     CALL    PDREG
  575.     CALL    COMMA
  576.     CALL    LPAR
  577.     LD    A,'C'
  578.     CALL    COUT
  579.     CALL    RPAR
  580.     JP    DCRLF
  581. ;
  582. ;THE BLOCK MOVES AND I/O
  583. ;
  584. T27:
  585.     LD    A,(HL)
  586.     AND    8
  587.     LD    A,'I'        ;AN INCREMENTING TYPE OF INSTRUCTION?
  588.     JP    Z,T270
  589.     LD    A,'D'        ;NO, IT WAS DECREMENTING
  590. T270:
  591.     CALL    COUT
  592.     LD    A,(HL)
  593.     AND    10H
  594.     JP    Z,DCRLF
  595.     LD    A,'R'        ;A REPEATING INSTRUCTION TYPE
  596.     CALL    COUT
  597.     JP    DCRLF
  598. ;
  599. ; LD (nn),dd
  600. ;
  601. T28:
  602.     CALL    LPAR
  603.     CALL    PRNN
  604.     PUSH    AF        ;SAVE Cy VALUE
  605.     PUSH    DE        ;SAVE THE 'NN' VALUE
  606.     CALL    RPAR
  607.     CALL    COMMA
  608.     LD    HL,(BIASED)
  609.     CALL    PXSREG
  610.     POP    DE
  611.     POP    AF
  612.     CALL    C,PDERTN
  613.     JP    DCRLF
  614. ;
  615. ; LD dd,(nn)
  616. ;
  617. T29:
  618.     CALL    PXSREG
  619.     CALL    COMMA
  620.     LD    HL,(BIASED)
  621.     CALL    LPAR
  622.     CALL    PRNN
  623.     PUSH    AF
  624.     CALL    RPAR
  625.     POP    AF
  626.     CALL    C,PDERTN
  627.     JP    DCRLF
  628. ;
  629. ;ALL UNDEFINED OPCODES COME HERE FOR A 'DB VALUE' TREATMENT
  630. ;
  631. T2A:
  632.     LD    HL,(PC)
  633.     DEC    HL
  634.     LD    (PC),HL
  635.     LD    HL,(BIASED)
  636.     DEC    HL
  637.     CALL    PSTG
  638.     DEFB    'DB',9,0
  639.     JP    DTABYT
  640. ;
  641. ;  VARIOUS CHARACTERS TO PRINT
  642. ;
  643. COMMA:
  644.     LD    A,','
  645.     JP    COUT
  646. TAB:
  647.     LD    A,9
  648.     JP    COUT
  649. SEMI:
  650.     LD    A,';'
  651.     JP    COUT
  652. LPAR:
  653.     LD    A,'('
  654.     JP    COUT
  655. RPAR:
  656.     LD    A,')'
  657.     JP    COUT
  658. PCMAA:
  659.     CALL    COMMA
  660.     LD    A,'A'
  661.     JP    COUT
  662. ;
  663. ;  PRINT THE CONDITION CODE LETTERS FOR THIS INSTRUCTION.
  664. ;
  665. PRCND:
  666.     LD    A,(HL)
  667.     AND    38H        ;FOR A FULL SET OF CONDITION CODES
  668. PRC:
  669.     RRCA    
  670.     RRCA    
  671.     LD    HL,CNDTAB
  672.     CALL    SKIP
  673.     LD    A,(HL)
  674.     CALL    COUT
  675.     INC    HL
  676.     LD    A,(HL)
  677.     CP    '.'
  678.     CALL    NZ,COUT
  679.     RET    
  680. PRCND1:
  681.     LD    A,(HL)
  682.     AND    18H
  683.     JR    PRC
  684. CNDTAB:
  685.     DEFB    'NZZ.NCC.POPEP.M.'
  686. ;
  687. ;  PRINT THE SOURCE REGISTER FOR A BYTE
  688. ;
  689. PSREG:
  690.     LD    A,(HL)
  691. PREG:
  692.     LD    HL,REGTAB
  693.     AND    7
  694.     CP    6        ;MUST CATCH THE (HL) REFERENCES
  695.     JP    Z,PHLREG
  696.     CALL    SKIP
  697.     LD    A,(HL)
  698.     JP    COUT
  699. PHLREG:
  700.     CALL    LPAR
  701.     LD    A,'H'
  702.     CALL    COUT
  703.     LD    A,'L'
  704.     CALL    COUT
  705.     JP    RPAR
  706. PDREG:
  707.     LD    A,(HL)        ;PRINT THE DESTINATION REGISTER FOR A BYTE
  708.     RRA    
  709.     RRA    
  710.     RRA    
  711.     JP    PREG
  712. ;
  713. ;  ADVANCE H&L BY (A)
  714. ;
  715. SKIP:
  716.     ADD    A,L
  717.     LD    L,A
  718.     RET    NC
  719.     INC    H
  720.     RET    
  721. REGTAB:
  722.     DEFB    'BCDEHLMA'    ;'M' IS NEVER PRINTED - '(HL)' IS INSTEAD
  723. ;
  724. ;  PRINT A DOUBLE REGISTER PAIR
  725. ;
  726. PXSREG:
  727.     LD    A,(HL)
  728.     LD    HL,DREGS
  729.     JR    PXREG
  730. PXQREG:
  731.     LD    A,(HL)
  732.     LD    HL,DREGQ
  733. PXREG:
  734.     RRA    
  735.     RRA    
  736.     RRA    
  737.     AND    6
  738.     CALL    SKIP
  739.     LD    A,(HL)
  740.     CALL    COUT
  741.     INC    HL
  742.     LD    A,(HL)
  743.     JP    COUT
  744. DREGS:
  745.     DEFB    'BCDEHLSP'
  746. DREGQ:
  747.     DEFB    'BCDEHLAF'
  748. IXREGS:
  749.     DEFB    'BCDEIXSP'
  750. IYREGS:
  751.     DEFB    'BCDEIYSP'
  752. ;
  753. PBIT:
  754.     LD    A,(HL)
  755.     RRA    
  756.     RRA    
  757.     RRA    
  758.     AND    7
  759.     ADD    A,'0'
  760.     JP    COUT
  761. PRXX:
  762.     LD    A,'I'
  763.     CALL    COUT
  764.     LD    A,E
  765.     JP    COUT
  766. ;
  767. ;PRINT A LEADING QUOTE AND THEN THE ASCII
  768. ;.. (PRINT '' FOR ').
  769. ;
  770. PASCII:
  771.     PUSH    AF
  772.     LD    A,''''
  773.     CALL    COUT
  774.     POP    AF
  775.     CP    ''''
  776.     JP    NZ,COUT
  777.     PUSH    AF
  778.     CALL    COUT
  779.     POP    AF
  780.     JP    COUT
  781. ;PRINT THE VALUE IN A AS HEX
  782. ;  WITH A LEADING ZERO IF NECESSARY
  783. PASHEX:
  784.     CP    0A0H
  785.     JP    C,PHEX
  786.     PUSH    AF
  787.     LD    A,'0'
  788.     CALL    COUT
  789.     POP    AF
  790.     JP    PHEX
  791. ;PRINT THE STRING AT (HL) FOR (B) CHARACTERS.
  792. PRNT:
  793.     LD    A,(HL)
  794.     CALL    COUT
  795.     INC    HL
  796.     DEC    B
  797.     JP    NZ,PRNT
  798.     RET    
  799. ;
  800. ;PRINT A DISPLACEMENT IN THE FORM '(IX+d)'
  801. PDISP:
  802.     CALL    LPAR
  803.     CALL    PRXX
  804.     LD    A,'+'
  805.     CALL    COUT
  806.     LD    A,(HL)
  807.     CALL    PASHEX
  808.     LD    A,'H'
  809.     CALL    COUT
  810.     JP    RPAR
  811. ;
  812. ;PRINT THE NEXT 2 BYTES AS A SYMBOL (AND RETURN Cy=1) IF POSSIBLE
  813. ;
  814. PRNN:
  815.     INC    HL
  816.     LD    E,(HL)
  817.     INC    HL
  818.     LD    D,(HL)
  819. PRNTDE:
  820.     PUSH    DE
  821.     CALL    SYMSCH
  822.     JP    C,NOMTCH
  823.     CALL    PRNT        ;GOT ONE, SO PRINT IT
  824.     POP    DE
  825.     SCF            ;INDICATE THAT A SYMBOL WAS PRINTED
  826.     RET    
  827. NOMTCH:
  828.     LD    A,(BUILD)    ;DO WE BUILD A SYMBOL?
  829.     OR    A
  830.     POP    DE
  831.     JR    Z,NOBLD        ;JUST PRINT THE HEX VALUE
  832.     PUSH    DE
  833.     CALL    BLDSYM
  834.     POP    DE
  835.     JR    NOBLD
  836. PDERTN:
  837.     LD    A,(XCSW)
  838.     OR    A
  839.     RET    Z        ;DON'T PRINT THE SYMBOL AS A COMMENT
  840.     CALL    TAB        ;WE'LL PRINT A VALUE AS A COMMENT
  841.     CALL    SEMI
  842. NOBLD:
  843.     LD    A,D
  844.     OR    E
  845.     LD    A,'0'
  846.     JR    Z,NOBLD1
  847.     LD    A,D
  848.     OR    A
  849.     JR    Z,NOBLD2
  850.     CALL    PASHEX        ;PRINT THE HIGH ORDER BYTE
  851.     LD    A,E
  852.     CALL    PHEX
  853. NOBLD0:
  854.     LD    A,'H'
  855. NOBLD1:
  856.     CALL    COUT
  857.     OR    A        ;CLEAR THE CARRY
  858.     RET    
  859. NOBLD2:
  860.     LD    A,E
  861. PRST:
  862.     CP    0AH
  863.     JR    C,NOBLD3
  864.     CALL    PASHEX
  865.     JR    NOBLD0
  866. NOBLD3:
  867.     ADD    A,'0'
  868.     JR    NOBLD1
  869. ;
  870. ;  OPCODE TABLES
  871. ;
  872. OPC:
  873.     DEFB    0FFH,0EBH,0,'EX DE,HL'
  874.     DEFB    0FFH,008H,0,'EX AF,AF'''
  875.     DEFB    0FFH,0D9H,0,'EXX'
  876.     DEFB    0FFH,0E3H,0,'EX (SP),HL'
  877.     DEFB    0FFH,027H,0,'DAA'
  878.     DEFB    0FFH,0F3H,0,'DI'
  879.     DEFB    0FFH,0FBH,0,'EI'
  880.     DEFB    0FFH,076H,0,'HALT'
  881.     DEFB    0FFH,02FH,0,'CPL'
  882.     DEFB    0FFH,03FH,0,'CCF'
  883.     DEFB    0FFH,000H,0,'NOP'
  884.     DEFB    0FFH,037H,0,'SCF'
  885.     DEFB    0FFH,0E9H,0,'JP (HL)'
  886.     DEFB    0FFH,007H,0,'RLCA'
  887.     DEFB    0FFH,017H,0,'RLA'
  888.     DEFB    0FFH,00FH,0,'RRCA'
  889.     DEFB    0FFH,01FH,0,'RRA'
  890.     DEFB    0FFH,0C9H,0,'RET'
  891.     DEFB    0FFH,0F9H,0,'LD SP,HL'
  892.     DEFB    0F8H,088H,1,'ADC A,'
  893.     DEFB    0F8H,080H,1,'ADD A,'
  894.     DEFB    0F8H,0A0H,1,'AND '
  895.     DEFB    0F8H,0B8H,1,'CP '
  896.     DEFB    0F8H,0B0H,1,'OR '
  897.     DEFB    0F8H,098H,1,'SBC A,'
  898.     DEFB    0F8H,090H,1,'SUB '
  899.     DEFB    0F8H,0A8H,1,'XOR '
  900.     DEFB    0C7H,005H,2,'DEC '
  901.     DEFB    0C7H,004H,2,'INC '
  902.     DEFB    0CFH,009H,3,'ADD HL,'
  903.     DEFB    0CFH,00BH,3,'DEC '
  904.     DEFB    0CFH,003H,3,'INC '
  905.     DEFB    0EFH,00AH,4,'LD A,'
  906.     DEFB    0EFH,002H,5,'LD '
  907.     DEFB    0CFH,0C1H,6,'POP '
  908.     DEFB    0CFH,0C5H,6,'PUSH '
  909.     DEFB    0C7H,0C0H,7,'RET '
  910.     DEFB    0C7H,0C7H,8,'RST '
  911.     DEFB    0C0H,040H,9,'LD '
  912.     DEFB    0C7H,006H,0AH,'LD '
  913.     DEFB    0FFH,0C6H,0BH,'ADD A,'
  914.     DEFB    0FFH,0CEH,0BH,'ADC A,'
  915.     DEFB    0FFH,0E6H,0BH,'AND '
  916.     DEFB    0FFH,0FEH,0BH,'CP '
  917.     DEFB    0FFH,0F6H,0BH,'OR '
  918.     DEFB    0FFH,0D6H,0BH,'SUB '
  919.     DEFB    0FFH,0DEH,0BH,'SBC A,'
  920.     DEFB    0FFH,0EEH,0BH,'XOR '
  921.     DEFB    0FFH,0DBH,0CH,'IN A,'
  922.     DEFB    0FFH,0D3H,0DH,'OUT '
  923.     DEFB    0E7H,020H,0EH,'JR '
  924.     DEFB    0FFH,010H,0FH,'DJNZ '
  925.     DEFB    0FFH,018H,0FH,'JR '
  926.     DEFB    0CFH,001H,10H,'LD '
  927.     DEFB    0FFH,0C3H,11H,'JP '
  928.     DEFB    0FFH,0CDH,11H,'CALL '
  929.     DEFB    0FFH,03AH,12H,'LD A,'
  930.     DEFB    0FFH,02AH,12H,'LD HL,'
  931.     DEFB    0FFH,022H,13H,'LD '
  932.     DEFB    0FFH,032H,14H,'LD '
  933.     DEFB    0C7H,0C4H,15H,'CALL '
  934.     DEFB    0C7H,0C2H,15H,'JP '
  935.     DEFB    0FFH,0CBH,16H,0,0
  936.     DEFB    0FFH,0DDH,17H,0,0
  937.     DEFB    0FFH,0FDH,18H,0,0
  938.     DEFB    0FFH,0EDH,19H
  939. OPC2:
  940.     DEFB    0F8H,000H,01H,'RLC '
  941.     DEFB    0F8H,008H,01H,'RRC '
  942.     DEFB    0F8H,010H,01H,'RL '
  943.     DEFB    0F8H,018H,01H,'RR '
  944.     DEFB    0F8H,020H,01H,'SLA '
  945.     DEFB    0F8H,028H,01H,'SRA '
  946.     DEFB    0F8H,038H,01H,'SRL '
  947.     DEFB    0C0H,040H,1AH,'BIT '
  948.     DEFB    0C0H,080H,1AH,'RES '
  949.     DEFB    0C0H,0C0H,1AH,'SET '
  950.     DEFB    080H,000H,2AH
  951. OPC3:
  952.     DEFB    0FFH,0E3H,1BH,'EX (SP),'
  953.     DEFB    0FFH,0E9H,1CH,'JP '
  954.     DEFB    0FFH,0F9H,1BH,'LD SP,'
  955.     DEFB    0FFH,0E1H,1BH,'POP '
  956.     DEFB    0FFH,0E5H,1BH,'PUSH '
  957.     DEFB    0CFH,009H,1DH,'ADD '
  958.     DEFB    0FFH,023H,1BH,'INC '
  959.     DEFB    0FFH,02BH,1BH,'DEC '
  960.     DEFB    0FFH,034H,1EH,'INC '
  961.     DEFB    0FFH,035H,1EH,'DEC '
  962.     DEFB    0FFH,086H,1EH,'ADD A,'
  963.     DEFB    0FFH,08EH,1EH,'ADC A,'
  964.     DEFB    0FFH,096H,1EH,'SUB '
  965.     DEFB    0FFH,09EH,1EH,'SBC A,'
  966.     DEFB    0FFH,0A6H,1EH,'AND '
  967.     DEFB    0FFH,0AEH,1EH,'XOR '
  968.     DEFB    0FFH,0B6H,1EH,'OR '
  969.     DEFB    0FFH,0BEH,1EH,'CP '
  970.     DEFB    0C7H,046H,1FH,'LD '
  971.     DEFB    0F8H,070H,20H,'LD '
  972.     DEFB    0FFH,021H,21H,'LD '
  973.     DEFB    0FFH,022H,22H,'LD '
  974.     DEFB    0FFH,02AH,23H,'LD '
  975.     DEFB    0FFH,036H,24H,'LD '
  976.     DEFB    0FFH,0CBH,25H,0,0
  977.     DEFB    080H,000H,2AH,0,0
  978.     DEFB    080H,080H,2AH
  979. OPC4:
  980.     DEFB    0FEH,070H,2AH,0,0;PREVENTS 'IN (HL),(C)'
  981.     DEFB    0FFH,044H,00H,'NEG'
  982.     DEFB    0FFH,045H,00H,'RETN'
  983.     DEFB    0FFH,046H,00H,'IM 0'
  984.     DEFB    0FFH,056H,00H,'IM 1'
  985.     DEFB    0FFH,05EH,00H,'IM 2'
  986.     DEFB    0FFH,047H,00H,'LD I,A'
  987.     DEFB    0FFH,04DH,00H,'RETI'
  988.     DEFB    0FFH,04FH,00H,'LD R,A'
  989.     DEFB    0FFH,057H,00H,'LD A,I'
  990.     DEFB    0FFH,05FH,00H,'LD A,R'
  991.     DEFB    0FFH,067H,00H,'RRD'
  992.     DEFB    0FFH,06FH,00H,'RLD'
  993.     DEFB    0CFH,042H,03H,'SBC HL,'
  994.     DEFB    0CFH,04AH,03H,'ADC HL,'
  995.     DEFB    0C7H,040H,26H,'IN '
  996.     DEFB    0C7H,041H,02H,'OUT (C),'
  997.     DEFB    0E7H,0A0H,27H,'LD'
  998.     DEFB    0E7H,0A1H,27H,'CP'
  999.     DEFB    0E7H,0A2H,27H,'IN'
  1000.     DEFB    0F7H,0A3H,27H,'OUT'
  1001.     DEFB    0F7H,0B3H,27H,'OT'
  1002.     DEFB    0CFH,043H,28H,'LD '
  1003.     DEFB    0CFH,04BH,29H,'LD '
  1004.     DEFB    080H,000H,2AH,0,0
  1005.     DEFB    080H,080H,2AH
  1006. ;
  1007. ;  END OF OPCODE TABLE
  1008. ;
  1009.