home *** CD-ROM | disk | FTP | other *** search
/ Frozen Fish 1: Amiga / FrozenFish-Apr94.iso / bbs / alib / d1xx / d157 / ecpm.lha / ECPM / ecpm2.asm < prev    next >
Assembly Source File  |  1988-10-02  |  65KB  |  2,151 lines

  1. *************************************************************************
  2. *                                                                       *
  3. *       This file contains the target processor (8080/Z80)              *
  4. *       simulation routines.                                            *
  5. *                                                                       *
  6. *************************************************************************
  7. * Last revised June 23, 1988.
  8.  
  9.         xdef    optabl,flags,mloop,traceit,tracesad,traceead,traceflg
  10.         xref    illegl,service,dump
  11.  
  12.         ifd     tracehd
  13. trace   equ     1               ;Include trace routines.
  14.         endc
  15.         ifnd    tracehd
  16. trace   equ     0               ;Don't include trace routines.
  17.         endc
  18.  
  19.         INCLUDE   "ecpmdefs.i"
  20.         page
  21. *************************************************************************
  22. *                                                                       *
  23. *       Macros used by opcode simulation routines                       *
  24. *                                                                       *
  25. *       These generate a lot of repetitive code sequences,              *
  26. *       but it's faster than doing subroutine calls.                    *
  27. *                                                                       *
  28. *************************************************************************
  29.  
  30. setflag macro                   ;Set 8080 flags from 68000 flags.
  31.         move    sr,d0
  32.         and.w   regcon0f,d0
  33.         move.b  0(flagptr,d0.w),regf
  34.         jmp     (return)
  35.         endm
  36.  
  37. inrflag macro                   ;Set flags after increment or decrement.
  38.         move    sr,d0
  39.         and.w   regcon0e,d0
  40.         and.w   regcon01,regf
  41.         or.b    0(flagptr,d0.w),regf
  42.         jmp     (return)
  43.         endm
  44.  
  45. addflag macro                   ;Add and set flags.
  46.         move.b  d0,regop1(regs)
  47.         move.b  rega,regop2(regs)
  48.         move.b  regcon0e,regop3(regs)
  49.         add.b   d0,rega
  50.         setflag
  51.         endm
  52.  
  53. adcflag macro                   ;Add with carry and set flags.
  54.         move.b  d0,regop1(regs)
  55.         move.b  rega,regop2(regs)
  56.         moveq   #0,d1           ;Set Zero flag for ADDX.
  57.         addx.b  d0,rega
  58.         setflag
  59.         endm
  60.  
  61. ashl    macro
  62.         asr.b   #1,regf
  63.         move.w  reg\2(regs),d0
  64.         move.w  regh(regs),d1
  65.         ori     #4,ccr
  66.         \1x.w  d0,d1
  67.         move    sr,d0
  68.         and.w   regcon0f,d0
  69.         move.b  0(flagptr,d0.w),regf
  70.         move.w  d1,regh(regs)
  71.         jmp     (return)
  72.         endm
  73.  
  74. sbbflag macro                   ;Subtract with borrow and set flags.
  75.         moveq   #0,d1           ;Set Zero flag for SUBX.
  76.         subx.b  d0,rega
  77.         setflag
  78.         endm
  79.  
  80. ret80   macro                   ;Return from subroutine.
  81.         move.b  1(pseudosp),d0
  82.         rol.w   #8,d0
  83.         move.b  (pseudosp),d0
  84.         addq.l  #2,pseudosp
  85.         lea     0(targbase,d0.l),pseudopc
  86.         jmp     (return)
  87.         endm
  88.  
  89. lsxxd   macro
  90.         move.b  1(pseudopc),d0
  91.         rol.w   #8,d0
  92.         move.b  (pseudopc),d0
  93.         addq.l  #2,pseudopc
  94.         move.l  d0,a0
  95.         adda.l  targbase,a0
  96.         endm
  97.  
  98. jmpaddr macro                   ;Get address for possible jump or call.
  99.         move.b  1(pseudopc),d0
  100.         rol.w   #8,d0
  101.         move.b  (pseudopc),d0
  102.         addq.l  #2,pseudopc
  103.         endm
  104.  
  105. call80  macro                   ;Call a subroutine
  106.         move.l  pseudopc,d1
  107.         sub.l   targbase,d1
  108.         move.b  d1,-2(pseudosp)
  109.         rol.w   #8,d1
  110.         move.b  d1,-1(pseudosp)
  111.         subq.l  #2,pseudosp
  112.         lea     0(targbase,d0.l),pseudopc
  113.         jmp     (return)
  114.         endm
  115.  
  116. rst80   macro                   ;8080 RST instruction
  117.         move.l  pseudopc,d1
  118.         sub.l   targbase,d1
  119.         move.b  d1,-2(pseudosp)
  120.         rol.w   #8,d1
  121.         move.b  d1,-1(pseudosp)
  122.         subq.l  #2,pseudosp
  123.         lea     \1(targbase),pseudopc
  124.         jmp     (return)
  125.         endm
  126.  
  127. docyf   macro                   ;Copy 68000's carry flag to 8080
  128.         bcs.s   1$
  129.         bclr    #0,regf
  130.         jmp     (return)
  131. 1$      bset    #0,regf
  132.         jmp     (return)
  133.         endm
  134.  
  135. jraddr  macro                   ;Set up relative address
  136.         move.b  (pseudopc)+,d0
  137.         ext.w   d0
  138.         ext.l   d0
  139.         endm
  140.  
  141. gopc    macro
  142.         add.l   d0,pseudopc
  143.         jmp     (return)
  144.         endm
  145.  
  146. calcind macro
  147.         move.b  (pseudopc)+,d1
  148.         ext.w   d1
  149.         move.w  regi\1(regs),d0
  150.         add.w   d1,d0
  151.         endm
  152.  
  153. rotflag macro
  154.         move    sr,d1
  155.         and.w   regcon0f,d1
  156.         move.b  0(flagptr,d1.w),regf
  157.         endm
  158.         page
  159. *************************************************************************
  160. *                                                                       *
  161. *       Opcode dispatcher                                               *
  162. *                                                                       *
  163. *************************************************************************
  164.         code
  165. mloop:
  166.         ifne    trace           ;Optional trace
  167.         tst.b   traceflg
  168.         bne.s   dotrace
  169.         cmpa.l  tracesad,pseudopc
  170.         bne.s   notrace
  171.         move.b  #1,traceflg
  172. dotrace jsr     dump
  173.         cmpa.l  traceead,pseudopc
  174.         bne.s   notrace
  175.         clr.b   traceflg
  176. notrace equ     *
  177.         endc
  178.  
  179.         moveq   #0,d0           ;Execute appropriate simulation subroutine.
  180.         move.b  (pseudopc)+,d0  ;Grab the next opcode.
  181.         asl     #2,d0           ;(D0 high word is still zero!)
  182.         move.l  0(opptr,d0.w),a0
  183.         jmp     (a0)            ;Do the subroutine.
  184.         page
  185. *************************************************************************
  186. *                                                                       *
  187. *       Opcode simulation routines                                      *
  188. *                                                                       *
  189. *       Note:  I/O instructions are based as 68000 address $FF0000      *
  190. *               as is appropriate for the Compupro CPU-68K card.        *
  191. *                                                                       *
  192. *       Also, all routines assume that the high word of D0 is zero!     *
  193. *                                                                       *
  194. *************************************************************************
  195.  
  196.         even
  197.  
  198. nop00   jmp     (return)                ;00 NOP
  199.  
  200. lxib    move.b  (pseudopc)+,regc(regs)  ;01 LXI B,nnnn
  201.         move.b  (pseudopc)+,regb(regs)
  202.         jmp     (return)
  203.  
  204. staxb   move.w  regb(regs),d0           ;02 STAX B
  205.         move.b  rega,0(targbase,d0.l)
  206.         jmp     (return)
  207.  
  208. inxb    addq.w  #1,regb(regs)           ;03 INX B
  209.         jmp     (return)
  210.  
  211. inrb    addq.b  #1,regb(regs)           ;04 INR B
  212.         inrflag
  213.  
  214. dcrb    subq.b  #1,regb(regs)           ;05 DCR B
  215.         inrflag
  216.  
  217. mvib    move.b  (pseudopc)+,regb(regs)  ;06 MVI B,nn
  218.         jmp     (return)
  219.  
  220. rlca    rol.b   #1,rega                 ;07 RLC
  221.         docyf
  222.  
  223. dadb    move.w  regb(regs),d0           ;09 DAD B
  224.         add.w   d0,regh(regs)
  225.         docyf
  226.  
  227. ldaxb   move.w  regb(regs),d0           ;0A LDAX B
  228.         move.b  0(targbase,d0.l),rega
  229.         jmp     (return)
  230.  
  231. dcxb    subq.w  #1,regb(regs)           ;0B DCX B
  232.         jmp     (return)
  233.  
  234. inrc    addq.b  #1,regc(regs)           ;0C INR C
  235.         inrflag
  236.  
  237. dcrc    subq.b  #1,regc(regs)           ;0D DCR C
  238.         inrflag
  239.  
  240. mvic    move.b  (pseudopc)+,regc(regs)  ;0E MVI C
  241.         jmp     (return)
  242.  
  243. rrca    ror.b   #1,rega                 ;0F RRC
  244.         docyf
  245.  
  246. lxid    move.b  (pseudopc)+,rege(regs)  ;11 LXI D,nnnn
  247.         move.b  (pseudopc)+,regd(regs)
  248.         jmp     (return)
  249.  
  250. staxd   move.w  regd(regs),d0           ;12 STAX D
  251.         move.b  rega,0(targbase,d0.l)
  252.         jmp     (return)
  253.  
  254. inxd    addq.w  #1,regd(regs)           ;13 INX D
  255.         jmp     (return)
  256.  
  257. inrd    addq.b  #1,regd(regs)           ;14 INR D
  258.         inrflag
  259.  
  260. dcrd    subq.b  #1,regd(regs)           ;15 DCR D
  261.         inrflag
  262.  
  263. mvid    move.b  (pseudopc)+,regd(regs)  ;16 MVI D,nn
  264.         jmp     (return)
  265.  
  266. ral     roxr.b  #1,regf                 ;17 RAL
  267.         roxl.b  #1,rega
  268.         roxl.b  #1,regf
  269.         jmp     (return)
  270.  
  271. ;18 JR (Z80 opcode)
  272.  
  273. dadd    move.w  regd(regs),d0           ;19 DAD D
  274.         add.w   d0,regh(regs)
  275.         docyf
  276.  
  277. ldaxd   move.w  regd(regs),d0           ;1A LDAX D
  278.         move.b  0(targbase,d0.l),rega
  279.         jmp     (return)
  280.  
  281. dcxd    subq.w  #1,regd(regs)           ;1B DCX D
  282.         jmp     (return)
  283.  
  284. inre    addq.b  #1,rege(regs)           ;1C INR E
  285.         inrflag
  286.  
  287. dcre    subq.b  #1,rege(regs)           ;1D DCR E
  288.         inrflag
  289.  
  290. mvie    move.b  (pseudopc)+,rege(regs)  ;1E MVI E
  291.         jmp     (return)
  292.  
  293. rar     roxr.b  #1,regf                 ;1F RAR
  294.         roxr.b  #1,rega
  295.         roxl.b  #1,regf
  296.         jmp     (return)
  297.  
  298. ;20 JRNZ (Z80 opcode)
  299.  
  300. lxih    move.b  (pseudopc)+,regl(regs)  ;21 LXI H,nnnn
  301.         move.b  (pseudopc)+,regh(regs)
  302.         jmp     (return)
  303.  
  304. shld    lsxxd                           ;22 SHLD addr
  305.         move.b  regl(regs),(a0)+
  306.         move.b  regh(regs),(a0)+
  307.         jmp     (return)
  308.  
  309. inxh    addq.w  #1,regh(regs)           ;23 INX H
  310.         jmp     (return)
  311.  
  312. inrh    addq.b  #1,regh(regs)           ;24 INR H
  313.         inrflag
  314.  
  315. dcrh    subq.b  #1,regh(regs)           ;25 DCR H
  316.         inrflag
  317.  
  318. mvih    move.b  (pseudopc)+,regh(regs)  ;26 MVI H,nn
  319.         jmp     (return)
  320.  
  321. daa     move.b  regop3(regs),d0         ;27 DAA
  322.         roxr.b  #1,d0
  323.         move.b  regop2(regs),d0
  324.         move.b  regop1(regs),d1
  325.         swap    regcon0e
  326.         move.b  rega,regcon0e
  327.         and.b   regcon0f,regcon0e
  328.         cmp.b   #9,regcon0e
  329.         bhi.s   halfcy
  330.         and.b   regcon0f,d0
  331.         and.b   regcon0f,d1
  332.         ori.b   #$F0,d1
  333.         addx.b  d0,d1
  334.         bcc.s   nohalf
  335. halfcy  add.b   #6,rega
  336.         bcs.s   fullcy
  337. nohalf  btst    #0,regf
  338.         bne.s   fullcy
  339.         move.b  rega,regcon0e
  340.         and.b   #$F0,regcon0e
  341.         cmp.b   #$90,regcon0e
  342.         bls.s   nofull
  343. fullcy  add.b   #$60,rega
  344.         ori     #1,ccr
  345. enddaa  move    sr,regf
  346.         swap    regcon0e
  347.         and.w   regcon0f,regf
  348.         move.b  0(flagptr,regf.w),regf
  349.         jmp     (return)
  350. nofull  tst.b   rega
  351.         bra.s   enddaa
  352.  
  353. ;28 JRZ (Z80 opcode)
  354.  
  355. dadh    asl.w   regh(regs)              ;29 DAD H (multiply by 2)
  356.         docyf
  357.  
  358. lhld    lsxxd                           ;2A LHLD addr
  359.         move.b  (a0)+,regl(regs)
  360.         move.b  (a0),regh(regs)
  361.         jmp     (return)
  362.  
  363. dcxh    subq.w  #1,regh(regs)           ;2B DCX H
  364.         jmp     (return)
  365.  
  366. inrl    addq.b  #1,regl(regs)           ;2C INR L
  367.         inrflag
  368.  
  369. dcrl    subq.b  #1,regl(regs)           ;2D DCR L
  370.         inrflag
  371.  
  372. mvil    move.b  (pseudopc)+,regl(regs)  ;2E MVI L,nn
  373.         jmp     (return)
  374.  
  375. cma     not.b   rega                    ;2F CMA
  376.         jmp     (return)
  377.  
  378. ;30 JRNC (Z80 opcode)
  379.  
  380. lxis    move.b  1(pseudopc),d0          ;31 LXI SP,nnnn
  381.         rol.w   #8,d0
  382.         move.b  (pseudopc),d0
  383.         addq.l  #2,pseudopc
  384.         move.l  d0,pseudosp
  385.         adda.l  targbase,pseudosp
  386.         jmp     (return)
  387.  
  388. sta     move.b  1(pseudopc),d0          ;32 STA addr
  389.         rol.w   #8,d0
  390.         move.b  (pseudopc),d0
  391.         addq.l  #2,pseudopc
  392.         move.b  rega,0(targbase,d0.l)
  393.         jmp     (return)
  394.  
  395. inxs    addq.l  #1,pseudosp             ;33 INX SP
  396.         jmp     (return)
  397.  
  398. inrm    move.w  regh(regs),d0           ;34 INR M
  399.         addq.b  #1,0(targbase,d0.l)
  400.         inrflag
  401.  
  402. dcrm    move.w  regh(regs),d0           ;35 DCR M
  403.         subq.b  #1,0(targbase,d0.l)
  404.         inrflag
  405.  
  406. mvim    move.w  regh(regs),d0           ;36 MVI M,nn
  407.         move.b  (pseudopc)+,0(targbase,d0.l)
  408.         jmp     (return)
  409.  
  410. stc     bset    #0,regf                 ;37 STC
  411.         jmp     (return)
  412.  
  413. ;38 JRC (Z80 opcode)
  414.  
  415. dads    move.l  pseudosp,d0             ;39 DAD SP
  416.         sub.l   targbase,d0
  417.         add.w   d0,regh(regs)
  418.         docyf
  419.  
  420. lda     move.b  1(pseudopc),d0          ;3A LDA addr
  421.         rol.w   #8,d0
  422.         move.b  (pseudopc),d0
  423.         addq.l  #2,pseudopc
  424.         move.b  0(targbase,d0.l),rega
  425.         jmp     (return)
  426.  
  427. dcxs    subq.l  #1,pseudosp             ;3B DCX SP
  428.         jmp     (return)
  429.  
  430. inra    move.b  rega,regop1(regs)       ;3C INR A
  431.         move.b  regcon01,regop2(regs)
  432.         move.b  regcon0e,regop3(regs)
  433.         addq.b  #1,rega
  434.         inrflag
  435.  
  436. dcra    subq.b  #1,rega                 ;3D DCR A
  437.         inrflag
  438.  
  439. mvia    move.b  (pseudopc)+,rega        ;3E MVI A
  440.         jmp     (return)
  441.  
  442. cmc     bchg    #0,regf                 ;3F CMC
  443.         jmp     (return)
  444.  
  445. movebb  move.b  regb(regs),regb(regs)   ;40 MOV B,B
  446.         jmp     (return)
  447.  
  448. movebc  move.b  regc(regs),regb(regs)   ;41 MOV B,C
  449.         jmp     (return)
  450.  
  451. movebd  move.b  regd(regs),regb(regs)   ;42 MOV B,D
  452.         jmp     (return)
  453.  
  454. movebe  move.b  rege(regs),regb(regs)   ;43 MOV B,E
  455.         jmp     (return)
  456.  
  457. movebh  move.b  regh(regs),regb(regs)   ;44 MOV B,H
  458.         jmp     (return)
  459.  
  460. movebl  move.b  regl(regs),regb(regs)   ;45 MOV B,L
  461.         jmp     (return)
  462.  
  463. movebm  move.w  regh(regs),d0           ;46 MOV B,M
  464.         move.b  0(targbase,d0.l),regb(regs)
  465.         jmp     (return)
  466.  
  467. moveba  move.b  rega,regb(regs)         ;47 MOV B,A
  468.         jmp     (return)
  469.  
  470. movecb  move.b  regb(regs),regc(regs)   ;48 MOV C,B
  471.         jmp     (return)
  472.  
  473. movecc  move.b  regc(regs),regc(regs)   ;49 MOV C,C
  474.         jmp     (return)
  475.  
  476. movecd  move.b  regd(regs),regc(regs)   ;4A MOV C,D
  477.         jmp     (return)
  478.  
  479. movece  move.b  rege(regs),regc(regs)   ;4B MOV C,E
  480.         jmp     (return)
  481.  
  482. movech  move.b  regh(regs),regc(regs)   ;4C MOV C,H
  483.         jmp     (return)
  484.  
  485. movecl  move.b  regl(regs),regc(regs)   ;4D MOV C,L
  486.         jmp     (return)
  487.  
  488. movecm  move.w  regh(regs),d0           ;4E MOV C,M
  489.         move.b  0(targbase,d0.l),regc(regs)
  490.         jmp     (return)
  491.  
  492. moveca  move.b  rega,regc(regs)         ;4F MOV C,A
  493.         jmp     (return)
  494.  
  495. movedb  move.b  regb(regs),regd(regs)   ;50 MOV D,B
  496.         jmp     (return)
  497.  
  498. movedc  move.b  regc(regs),regd(regs)   ;51 MOV D,C
  499.         jmp     (return)
  500.  
  501. movedd  move.b  regd(regs),regd(regs)   ;52 MOV D,D
  502.         jmp     (return)
  503.  
  504. movede  move.b  rege(regs),regd(regs)   ;53 MOV D,E
  505.         jmp     (return)
  506.  
  507. movedh  move.b  regh(regs),regd(regs)   ;54 MOV D,H
  508.         jmp     (return)
  509.  
  510. movedl  move.b  regl(regs),regd(regs)   ;55 MOV D,L
  511.         jmp     (return)
  512.  
  513. movedm  move.w  regh(regs),d0           ;56 MOV D,M
  514.         move.b  0(targbase,d0.l),regd(regs)
  515.         jmp     (return)
  516.  
  517. moveda  move.b  rega,regd(regs)         ;57 MOV D,A
  518.         jmp     (return)
  519.  
  520. moveeb  move.b  regb(regs),rege(regs)   ;58 MOV E,B
  521.         jmp     (return)
  522.  
  523. moveec  move.b  regc(regs),rege(regs)   ;59 MOV E,C
  524.         jmp     (return)
  525.  
  526. moveed  move.b  regd(regs),rege(regs)   ;5A MOV E,D
  527.         jmp     (return)
  528.  
  529. moveee  move.b  rege(regs),rege(regs)   ;5B MOV E,E
  530.         jmp     (return)
  531.  
  532. moveeh  move.b  regh(regs),rege(regs)   ;5C MOV E,H
  533.         jmp     (return)
  534.  
  535. moveel  move.b  regl(regs),rege(regs)   ;5D MOV E,L
  536.         jmp     (return)
  537.  
  538. moveem  move.w  regh(regs),d0           ;5E MOV E,M
  539.         move.b  0(targbase,d0.l),rege(regs)
  540.         jmp     (return)
  541.  
  542. moveea  move.b  rega,rege(regs)         ;5F MOV E,A
  543.         jmp     (return)
  544.  
  545. movehb  move.b  regb(regs),regh(regs)   ;60 MOV H,B
  546.         jmp     (return)
  547.  
  548. movehc  move.b  regc(regs),regh(regs)   ;61 MOV H,C
  549.         jmp     (return)
  550.  
  551. movehd  move.b  regd(regs),regh(regs)   ;62 MOV H,D
  552.         jmp     (return)
  553.  
  554. movehe  move.b  rege(regs),regh(regs)   ;63 MOV H,E
  555.         jmp     (return)
  556.  
  557. movehh  move.b  regh(regs),regh(regs)   ;64 MOV H,H
  558.         jmp     (return)
  559.  
  560. movehl  move.b  regl(regs),regh(regs)   ;65 MOV H,L
  561.         jmp     (return)
  562.  
  563. movehm  move.w  regh(regs),d0           ;66 MOV H,M
  564.         move.b  0(targbase,d0.l),regh(regs)
  565.         jmp     (return)
  566.  
  567. moveha  move.b  rega,regh(regs)         ;67 MOV H,A
  568.         jmp     (return)
  569.  
  570. movelb  move.b  regb(regs),regl(regs)   ;68 MOV L,B
  571.         jmp     (return)
  572.  
  573. movelc  move.b  regc(regs),regl(regs)   ;69 MOV L,C
  574.         jmp     (return)
  575.  
  576. moveld  move.b  regd(regs),regl(regs)   ;6A MOV L,D
  577.         jmp     (return)
  578.  
  579. movele  move.b  rege(regs),regl(regs)   ;6B MOV L,E
  580.         jmp     (return)
  581.  
  582. movelh  move.b  regh(regs),regl(regs)   ;6C MOV L,H
  583.         jmp     (return)
  584.  
  585. movell  move.b  regl(regs),regl(regs)   ;6D MOV L,L
  586.         jmp     (return)
  587.  
  588. movelm  move.w  regh(regs),d0           ;6E MOV L,M
  589.         move.b  0(targbase,d0.l),regl(regs)
  590.         jmp     (return)
  591.  
  592. movela  move.b  rega,regl(regs)         ;6F MOV L,A
  593.         jmp     (return)
  594.  
  595. movemb  move.w  regh(regs),d0           ;70 MOV M,B
  596.         move.b  regb(regs),0(targbase,d0.l)
  597.         jmp     (return)
  598.  
  599. movemc  move.w  regh(regs),d0           ;71 MOV M,C
  600.         move.b  regc(regs),0(targbase,d0.l)
  601.         jmp     (return)
  602.  
  603. movemd  move.w  regh(regs),d0           ;72 MOV M,D
  604.         move.b  regd(regs),0(targbase,d0.l)
  605.         jmp     (return)
  606.  
  607. moveme  move.w  regh(regs),d0           ;73 MOV M,E
  608.         move.b  rege(regs),0(targbase,d0.l)
  609.         jmp     (return)
  610.  
  611. movemh  move.w  regh(regs),d0           ;74 MOV M,H
  612.         move.b  regh(regs),0(targbase,d0.l)
  613.         jmp     (return)
  614.  
  615. moveml  move.w  regh(regs),d0           ;75 MOV M,L
  616.         move.b  regl(regs),0(targbase,d0.l)
  617.         jmp     (return)
  618.  
  619. halt    jsr     service                 ;76 HLT
  620.         jmp     (return)
  621.  
  622. movema  move.w  regh(regs),d0           ;77 MOV M,A
  623.         move.b  rega,0(targbase,d0.l)
  624.         jmp     (return)
  625.  
  626. moveab  move.b  regb(regs),rega         ;78 MOV A,B
  627.         jmp     (return)
  628.  
  629. moveac  move.b  regc(regs),rega         ;79 MOV A,C
  630.         jmp     (return)
  631.  
  632. movead  move.b  regd(regs),rega         ;7A MOV A,D
  633.         jmp     (return)
  634.  
  635. moveae  move.b  rege(regs),rega         ;7B MOV A,E
  636.         jmp     (return)
  637.  
  638. moveah  move.b  regh(regs),rega         ;7C MOV A,H
  639.         jmp     (return)
  640.  
  641. moveal  move.b  regl(regs),rega         ;7D MOV A,L
  642.         jmp     (return)
  643.  
  644. moveam  move.w  regh(regs),d0           ;7E MOV A,M
  645.         move.b  0(targbase,d0.l),rega
  646.         jmp     (return)
  647.  
  648. moveaa  jmp     (return)                ;7F MOV A,A
  649.  
  650. addb    move.b  regb(regs),d0           ;80 ADD B
  651.         addflag
  652.  
  653. addc    move.b  regc(regs),d0           ;81 ADD C
  654.         addflag
  655.  
  656. addd    move.b  regd(regs),d0           ;82 ADD D
  657.         addflag
  658.  
  659. adde    move.b  rege(regs),d0           ;83 ADD E
  660.         addflag
  661.  
  662. addh    move.b  regh(regs),d0           ;84 ADD H
  663.         addflag
  664.  
  665. addl    move.b  regl(regs),d0           ;85 ADD L
  666.         addflag
  667.  
  668. addm    move.w  regh(regs),d0           ;86 ADD M
  669.         move.b  0(targbase,d0.l),d0
  670.         addflag
  671.  
  672. adda    move.b  rega,regop1(regs)       ;87 ADD A
  673.         move.b  rega,regop2(regs)
  674.         move.b  regcon0e,regop3(regs)
  675.         add.b   rega,rega
  676.         setflag
  677.  
  678. adcb    move.b  regf,regop3(regs)       ;88 ADC B
  679.         asr.b   #1,regf
  680.         move.b  regb(regs),d0
  681.         adcflag
  682.  
  683. adcc    move.b  regf,regop3(regs)       ;89 ADC C
  684.         asr.b   #1,regf
  685.         move.b  regc(regs),d0
  686.         adcflag
  687.  
  688. adcd    move.b  regf,regop3(regs)       ;8A ADC D
  689.         asr.b   #1,regf
  690.         move.b  regd(regs),d0
  691.         adcflag
  692.  
  693. adce    move.b  regf,regop3(regs)       ;8B ADC E
  694.         asr.b   #1,regf
  695.         move.b  rege(regs),d0
  696.         adcflag
  697.  
  698. adch    move.b  regf,regop3(regs)       ;8C ADC H
  699.         asr.b   #1,regf
  700.         move.b  regh(regs),d0
  701.         adcflag
  702.  
  703. adcl    move.b  regf,regop3(regs)       ;8D ADC L
  704.         asr.b   #1,regf
  705.         move.b  regl(regs),d0
  706.         adcflag
  707.  
  708. adcm    move.b  regf,regop3(regs)       ;8E ADC M
  709.         move.w  regh(regs),d0
  710.         move.l  d0,a0
  711.         adda.l  targbase,a0
  712.         asr.b   #1,regf
  713.         move.b  (a0),d0
  714.         adcflag
  715.  
  716. adca    move.b  regf,regop3(regs)       ;8F ADC A
  717.         asr.b   #1,regf
  718.         move.b  rega,d0
  719.         adcflag
  720.  
  721. subb    sub.b   regb(regs),rega         ;90 SUB B
  722.         setflag
  723.  
  724. subc    sub.b   regc(regs),rega         ;91 SUB C
  725.         setflag
  726.  
  727. subd    sub.b   regd(regs),rega         ;92 SUB D
  728.         setflag
  729.  
  730. sube    sub.b   rege(regs),rega         ;93 SUB E
  731.         setflag
  732.  
  733. subh    sub.b   regh(regs),rega         ;94 SUB H
  734.         setflag
  735.  
  736. subl    sub.b   regl(regs),rega         ;95 SUB L
  737.         setflag
  738.  
  739. subm    move.w  regh(regs),d0           ;96 SUB M
  740.         sub.b   0(targbase,d0.l),rega
  741.         setflag
  742.  
  743. suba    sub.b   rega,rega               ;97 SUB A
  744.         setflag
  745.  
  746. sbbb    asr.b   #1,regf                 ;98 SBB B
  747.         move.b  regb(regs),d0
  748.         sbbflag
  749.  
  750. sbbc    asr.b   #1,regf                 ;99 SBB C
  751.         move.b  regc(regs),d0
  752.         sbbflag
  753.  
  754. sbbd    asr.b   #1,regf                 ;9A SBB D
  755.         move.b  regd(regs),d0
  756.         sbbflag
  757.  
  758. sbbe    asr.b   #1,regf                 ;9B SBB E
  759.         move.b  rege(regs),d0
  760.         sbbflag
  761.  
  762. sbbh    asr.b   #1,regf                 ;9C SBB H
  763.         move.b  regh(regs),d0
  764.         sbbflag
  765.  
  766. sbbl    asr.b   #1,regf                 ;9D SBB L
  767.         move.b  regl(regs),d0
  768.         sbbflag
  769.  
  770. sbbm    move.w  regh(regs),d0           ;9E SBB M
  771.         move.l  d0,a0
  772.         adda.l  targbase,a0
  773.         asr.b   #1,regf
  774.         move.b  (a0),d0
  775.         sbbflag
  776.  
  777. sbba    asr.b   #1,regf                 ;9F SBB A
  778.         move.b  rega,d0
  779.         sbbflag
  780.  
  781. andb    and.b   regb(regs),rega         ;A0 ANA B
  782.         move.b  16(flagptr,rega.w),regf
  783.         jmp     (return)
  784.  
  785. andc    and.b   regc(regs),rega         ;A1 ANA C
  786.         move.b  16(flagptr,rega.w),regf
  787.         jmp     (return)
  788.  
  789. andd    and.b   regd(regs),rega         ;A2 ANA D
  790.         move.b  16(flagptr,rega.w),regf
  791.         jmp     (return)
  792.  
  793. ande    and.b   rege(regs),rega         ;A3 ANA E
  794.         move.b  16(flagptr,rega.w),regf
  795.         jmp     (return)
  796.  
  797. andh    and.b   regh(regs),rega         ;A4 ANA H
  798.         move.b  16(flagptr,rega.w),regf
  799.         jmp     (return)
  800.  
  801. andl    and.b   regl(regs),rega         ;A5 ANA L
  802.         move.b  16(flagptr,rega.w),regf
  803.         jmp     (return)
  804.  
  805. andm    move.w  regh(regs),d0           ;A6 ANA M
  806.         and.b   0(targbase,d0.l),rega
  807.         move.b  16(flagptr,rega.w),regf
  808.         jmp     (return)
  809.  
  810. anda    move.b  16(flagptr,rega.w),regf ;A7 ANA A
  811.         jmp     (return)
  812.  
  813. xrab    move.b  regb(regs),d0           ;A8 XRA B
  814.         eor.b   d0,rega
  815.         move.b  16(flagptr,rega.w),regf
  816.         jmp     (return)
  817.  
  818. xrac    move.b  regc(regs),d0           ;A9 XRA C
  819.         eor.b   d0,rega
  820.         move.b  16(flagptr,rega.w),regf
  821.         jmp     (return)
  822.  
  823. xrad    move.b  regd(regs),d0           ;AA XRA D
  824.         eor.b   d0,rega
  825.         move.b  16(flagptr,rega.w),regf
  826.         jmp     (return)
  827.  
  828. xrae    move.b  rege(regs),d0           ;AB XRA E
  829.         eor.b   d0,rega
  830.         move.b  16(flagptr,rega.w),regf
  831.         jmp     (return)
  832.  
  833. xrah    move.b  regh(regs),d0           ;AC XRA H
  834.         eor.b   d0,rega
  835.         move.b  16(flagptr,rega.w),regf
  836.         jmp     (return)
  837.  
  838. xral    move.b  regl(regs),d0           ;AD XRA L
  839.         eor.b   d0,rega
  840.         move.b  16(flagptr,rega.w),regf
  841.         jmp     (return)
  842.  
  843. xram    move.w  regh(regs),d0           ;AE XRA M
  844.         move.b  0(targbase,d0.l),d0
  845.         eor.b   d0,rega
  846.         move.b  16(flagptr,rega.w),regf
  847.         jmp     (return)
  848.  
  849. xraa    moveq   #0,rega                 ;AF XRA A (clears accumulator)
  850.         move.b  16(flagptr),regf
  851.         jmp     (return)
  852.  
  853. orab    or.b    regb(regs),rega         ;B0 ORA B
  854.         move.b  16(flagptr,rega.w),regf
  855.         jmp     (return)
  856.  
  857. orac    or.b    regc(regs),rega         ;B1 ORA C
  858.         move.b  16(flagptr,rega.w),regf
  859.         jmp     (return)
  860.  
  861. orad    or.b    regd(regs),rega         ;B2 ORA D
  862.         move.b  16(flagptr,rega.w),regf
  863.         jmp     (return)
  864.  
  865. orae    or.b    rege(regs),rega         ;B3 ORA E
  866.         move.b  16(flagptr,rega.w),regf
  867.         jmp     (return)
  868.  
  869. orah    or.b    regh(regs),rega         ;B4 ORA H
  870.         move.b  16(flagptr,rega.w),regf
  871.         jmp     (return)
  872.  
  873. oral    or.b    regl(regs),rega         ;B5 ORA L
  874.         move.b  16(flagptr,rega.w),regf
  875.         jmp     (return)
  876.  
  877. oram    move.w  regh(regs),d0           ;B6 ORA M
  878.         or.b    0(targbase,d0.l),rega
  879.         move.b  16(flagptr,rega.w),regf
  880.         jmp     (return)
  881.  
  882. oraa    move.b  16(flagptr,rega.w),regf ;B7 ORA A
  883.         jmp     (return)
  884.  
  885. cmpb    cmp.b   regb(regs),rega         ;B8 CMP B
  886.         setflag
  887.  
  888. cmpc    cmp.b   regc(regs),rega         ;B9 CMP C
  889.         setflag
  890.  
  891. cmpd    cmp.b   regd(regs),rega         ;BA CMP D
  892.         setflag
  893.  
  894. cmpe    cmp.b   rege(regs),rega         ;BB CMP E
  895.         setflag
  896.  
  897. cmph    cmp.b   regh(regs),rega         ;BC CMP H
  898.         setflag
  899.  
  900. cmpl    cmp.b   regl(regs),rega         ;BD CMP L
  901.         setflag
  902.  
  903. cmpam   move.w  regh(regs),d0           ;BE CMP M
  904.         cmp.b   0(targbase,d0.l),rega
  905.         setflag
  906.  
  907. cmpaa   cmp.b   rega,rega               ;BF CMP A
  908.         setflag
  909.  
  910. rnz     btst    #6,regf                 ;C0 RNZ
  911.         bne     mloop
  912.         ret80
  913.  
  914. popb    move.b  (pseudosp)+,regc(regs)  ;C1 POP B
  915.         move.b  (pseudosp)+,regb(regs)
  916.         jmp     (return)
  917.  
  918. jnz:                                    ;C2 JNZ addr
  919.         jmpaddr
  920.         btst    #6,regf
  921.         bne     mloop
  922.         lea     0(targbase,d0.l),pseudopc
  923.         jmp     (return)
  924.  
  925. jmpa:                                   ;C3 JMP addr
  926.         jmpaddr
  927.         lea     0(targbase,d0.l),pseudopc
  928.         jmp     (return)
  929.  
  930. cnz:                                    ;C4 CNZ addr
  931.         jmpaddr
  932.         btst    #6,regf
  933.         bne     mloop
  934.         call80
  935.  
  936. pushb   move.b  regb(regs),-(pseudosp)  ;C5 PUSH B
  937.         move.b  regc(regs),-(pseudosp)
  938.         jmp     (return)
  939.  
  940. adi     move.b  (pseudopc)+,d0          ;C6 ADI nn
  941.         addflag
  942.  
  943. rst0:                                   ;C7 RST 0
  944.         rst80   $0
  945.  
  946. rz      btst    #6,regf                 ;C8 RZ
  947.         beq     mloop
  948. ret:                                    ;C9 RET
  949.         ret80
  950.  
  951. jz:                                     ;CA JZ addr
  952.         jmpaddr
  953.         btst    #6,regf
  954.         beq     mloop
  955.         lea     0(targbase,d0.l),pseudopc
  956.         jmp     (return)
  957.  
  958. cz:                                     ;CC CZ addr
  959.         jmpaddr
  960.         btst    #6,regf
  961.         beq     mloop
  962.         call80
  963.  
  964. call:                                   ;CD CALL addr
  965.         jmpaddr
  966.         call80
  967.  
  968. aci:    move.b  regf,regop3(regs)       ;CE ACI nn
  969.         asr.b   #1,regf
  970.         move.b  (pseudopc)+,d0
  971.         adcflag
  972.  
  973. rst1:                                   ;CF RST 1
  974.         rst80   $8
  975.  
  976. rnc     btst    #0,regf                 ;D0 RNC
  977.         bne     mloop
  978.         ret80
  979.  
  980. popd    move.b  (pseudosp)+,rege(regs)  ;D1 POP D
  981.         move.b  (pseudosp)+,regd(regs)
  982.         jmp     (return)
  983.  
  984. jnc:                                    ;D2 JNC addr
  985.         jmpaddr
  986.         btst    #0,regf
  987.         bne     mloop
  988.         lea     0(targbase,d0.l),pseudopc
  989.         jmp     (return)
  990.  
  991. out     moveq   #0,d0                   ;D3 OUT nn
  992. *       move.b  (pseudopc)+,d0
  993. *       move.l  #$ff0000,a0
  994. *       move.b  rega,0(a0,d0.l)
  995.         jmp     (return)
  996.  
  997. cnc                                     ;D4 CNC addr
  998.         jmpaddr
  999.         btst    #0,regf
  1000.         bne     mloop
  1001.         call80
  1002.  
  1003. pushd   move.b  regd(regs),-(pseudosp)  ;D5 PUSH D
  1004.         move.b  rege(regs),-(pseudosp)
  1005.         jmp     (return)
  1006.  
  1007. sui     move.b  (pseudopc)+,d0          ;D6 SUI nn
  1008.         sub.b   d0,rega
  1009.         setflag
  1010.  
  1011. rst2:                                   ;D7 RST 2
  1012.         rst80   $10
  1013.  
  1014. rc      btst    #0,regf                 ;D8 RC
  1015.         beq     mloop
  1016.         ret80
  1017.  
  1018. jc:                                     ;DA JC addr
  1019.         jmpaddr
  1020.         btst    #0,regf
  1021.         beq     mloop
  1022.         lea     0(targbase,d0.l),pseudopc
  1023.         jmp     (return)
  1024.  
  1025. in      moveq   #0,d0                   ;DB IN nn
  1026. *       move.b  (pseudopc)+,d0
  1027. *       move.l  #$FF0000,a0
  1028. *       move.b  0(a0,d0.l),rega
  1029.         jmp     (return)
  1030.  
  1031. cc:                                     ;DC CC addr
  1032.         jmpaddr
  1033.         btst    #0,regf
  1034.         beq     mloop
  1035.         call80
  1036.  
  1037. sbi     asr.b   #1,regf                 ;DE SBI nn
  1038.         move.b  (pseudopc)+,d0
  1039.         sbbflag
  1040.  
  1041. rst3:                                   ;DF RST 3
  1042.         rst80   $18
  1043.  
  1044. rpo     btst    #2,regf                 ;E0 RPO
  1045.         bne     mloop
  1046.         ret80
  1047.  
  1048. poph    move.b  (pseudosp)+,regl(regs)  ;E1 POP H
  1049.         move.b  (pseudosp)+,regh(regs)
  1050.         jmp     (return)
  1051.  
  1052. jpo:                                    ;E2 JPO addr
  1053.         jmpaddr
  1054.         btst    #2,regf
  1055.         bne     mloop
  1056.         lea     0(targbase,d0.l),pseudopc
  1057.         jmp     (return)
  1058.  
  1059. xthl    move.b  regl(regs),d0           ;E3 XTHL
  1060.         move.b  (pseudosp),regl(regs)
  1061.         move.b  d0,(pseudosp)
  1062.         move.b  regh(regs),d0
  1063.         move.b  1(pseudosp),regh(regs)
  1064.         move.b  d0,1(pseudosp)
  1065.         jmp     (return)
  1066.  
  1067. cpo     jmpaddr                         ;E4 CPO addr
  1068.         btst    #2,regf
  1069.         bne     mloop
  1070.         call80
  1071.  
  1072. pushh   move.b  regh(regs),-(pseudosp)  ;E5 PUSH H
  1073.         move.b  regl(regs),-(pseudosp)
  1074.         jmp     (return)
  1075.  
  1076. ani     and.b   (pseudopc)+,rega        ;E6 ANI nn
  1077.         move.b  16(flagptr,rega.w),regf
  1078.         jmp     (return)
  1079.  
  1080. rst4:                                   ;E7 RST 4
  1081.         rst80   $20
  1082.  
  1083. rpe     btst    #2,regf                 ;E8 RPE
  1084.         beq     mloop
  1085.         ret80
  1086.  
  1087. pchl    move.w  regh(regs),d0           ;E9 PCHL
  1088.         lea     0(targbase,d0.l),pseudopc
  1089.         jmp     (return)
  1090.  
  1091. jpe:                                    ;EA JPE addr
  1092.         jmpaddr
  1093.         btst    #2,regf
  1094.         beq     mloop
  1095.         lea     0(targbase,d0.l),pseudopc
  1096.         jmp     (return)
  1097.  
  1098. xchg    move.w  regd(regs),d0           ;EB XCHG
  1099.         move.w  regh(regs),regd(regs)
  1100.         move.w  d0,regh(regs)
  1101.         jmp     (return)
  1102.  
  1103. cpe:                                    ;EC CPE addr
  1104.         jmpaddr
  1105.         btst    #2,regf
  1106.         beq     mloop
  1107.         call80
  1108.  
  1109. * ED-prefix Z80 instructions are simulated in the next module.
  1110.  
  1111. xri     move.b  (pseudopc)+,d0          ;EE XRI nn
  1112.         eor.b   d0,rega
  1113.         move.b  16(flagptr,rega.w),regf
  1114.         jmp     (return)
  1115.  
  1116. rst5:                                   ;EF RST 5
  1117.         rst80   $28
  1118.  
  1119. rp      btst    #7,regf                 ;F0 RP
  1120.         bne     mloop
  1121.         ret80
  1122.  
  1123. popp    move.b  (pseudosp)+,regf        ;F1 POP P
  1124.         move.b  (pseudosp)+,rega
  1125.         jmp     (return)
  1126.  
  1127. jp:                                     ;F2 JP addr
  1128.         jmpaddr
  1129.         btst    #7,regf
  1130.         bne     mloop
  1131.         lea     0(targbase,d0.l),pseudopc
  1132.         jmp     (return)
  1133.  
  1134. di      jmp     (return)                ;F3 DI (treated as no-op)
  1135.  
  1136. cp:                                     ;F4 CP addr
  1137.         jmpaddr
  1138.         btst    #7,regf
  1139.         bne     mloop
  1140.         call80
  1141.  
  1142. pushp   move.b  rega,-(pseudosp)        ;F5 PUSH PSW
  1143.         move.b  regf,-(pseudosp)
  1144.         jmp     (return)
  1145.  
  1146. oria    or.b    (pseudopc)+,rega        ;F6 ORI nn
  1147.         move.b  16(flagptr,rega.w),regf
  1148.         jmp     (return)
  1149.  
  1150. rst6:                                   ;F7 RST 6
  1151.         rst80   $30
  1152.  
  1153. rm      btst    #7,regf                 ;F8 RM
  1154.         beq     mloop
  1155.         ret80
  1156.  
  1157. sphl    move.w  regh(regs),d0           ;F9 SPHL
  1158.         lea     0(targbase,d0.l),pseudosp
  1159.         jmp     (return)
  1160.  
  1161. jm:                                     ;FA JM addr
  1162.         jmpaddr
  1163.         btst    #7,regf
  1164.         beq     mloop
  1165.         lea     0(targbase,d0.l),pseudopc
  1166.         jmp     (return)
  1167.  
  1168. ei      jmp     (return)                ;FB EI (treated as a no-op)
  1169.  
  1170. cm:                                     ;FC CM addr
  1171.         jmpaddr
  1172.         btst    #7,regf
  1173.         beq     mloop
  1174.         call80
  1175.  
  1176. cpi     cmp.b   (pseudopc)+,rega        ;FE CPI nn
  1177.         setflag
  1178.  
  1179. rst7:                                   ;FF RST 7
  1180.         rst80   $38
  1181.         page
  1182. *************************************************************************
  1183. *                                                                       *
  1184. *       Z-80 opcode simulation routines                                 *
  1185. *                                                                       *
  1186. *************************************************************************
  1187.  
  1188. exaf    move.b   regaaf(regs),d0           ;08
  1189.         move.b   regaaf+1(regs),d1
  1190.         move.b   rega,regaaf(regs)
  1191.         move.b   regf,regaaf+1(regs)
  1192.         move.b   d0,rega
  1193.         move.b   d1,regf
  1194.         jmp      (return)
  1195.  
  1196. djnz    jraddr                             ;10 DJNZ extension
  1197.         subq.b   #1,regb(regs)
  1198.         beq      mloop
  1199.         gopc
  1200.  
  1201. jr      jraddr                             ;18 JR extension
  1202.         gopc
  1203.  
  1204. jrnz    jraddr                             ;20 JR NZ,extension
  1205.         btst     #6,regf
  1206.         bne      mloop
  1207.         gopc
  1208.  
  1209. jrz     jraddr                             ;28 JR Z,extension
  1210.         btst     #6,regf
  1211.         beq      mloop
  1212.         gopc
  1213.  
  1214. jrnc    jraddr                             ;30 JR NC,extension
  1215.         btst     #0,regf
  1216.         bne      mloop
  1217.         gopc
  1218.  
  1219. jrc     jraddr                             ;38 JR C,extension
  1220.         btst     #0,regf
  1221.         beq      mloop
  1222.         gopc
  1223.  
  1224. preCB   clr.l   d0
  1225.         move.b  (pseudopc)+,d0
  1226.         move.l  d0,d1
  1227.         andi.b  #%11000000,d1
  1228.         bne     1$
  1229.         lea     CBtable1,a0
  1230.         asl     #2,d0
  1231.         move.l  0(a0,d0.w),-(sp)
  1232.         beq     illg2b
  1233.         rts
  1234. 1$      lsr     #4,d1
  1235.         lea     CBtable2,a0
  1236.         move.l  0(a0,d1.w),d1
  1237.         movea.l d1,a0
  1238.         move.l  d0,d1
  1239.         andi.b  #%00000111,d1
  1240.         asl     #2,d1
  1241.         move.l  0(a0,d1.w),-(sp)
  1242.         beq     illg2b
  1243.         andi.b  #%00111000,d0
  1244.         lsr     #3,d0
  1245.         rts
  1246.  
  1247. ddcb    calcind x
  1248.         bra     xDCB
  1249. fdcb    calcind y
  1250. xDCB    clr.l   d1
  1251.         move.b  (pseudopc),d1
  1252.         andi.b  #%11000000,d1
  1253.         lsr     #4,d1
  1254.         lea     xDCBtbl,a0
  1255.         move.l  0(a0,d1.w),-(sp)
  1256.         move.b  (pseudopc)+,d1
  1257.         andi.b  #%00111000,d1
  1258.         lsr     #3,d1
  1259.         rts
  1260.  
  1261. cb10    roxr.b  #1,regf                    ;CB10 RL B
  1262.         move.b  regb(regs),d0
  1263.         roxl.b  #1,d0
  1264.         rotflag
  1265.         move.b  d0,regb(regs)
  1266.         jmp     (return)
  1267.  
  1268. cb11    roxr.b  #1,regf                    ;CB11 RL C
  1269.         move.b  regc(regs),d0
  1270.         roxl.b  #1,d0
  1271.         rotflag
  1272.         move.b  d0,regc(regs)
  1273.         jmp     (return)
  1274.  
  1275. cb12    roxr.b  #1,regf                    ;CB12 RL D
  1276.         move.b  regd(regs),d0
  1277.         roxl.b  #1,d0
  1278.         rotflag
  1279.         move.b  d0,regd(regs)
  1280.         jmp     (return)
  1281.  
  1282. cb13    roxr.b  #1,regf                    ;CB13 RL E
  1283.         move.b  rege(regs),d0
  1284.         roxl.b  #1,d0
  1285.         rotflag
  1286.         move.b  d0,rege(regs)
  1287.         jmp     (return)
  1288.  
  1289. cb14    roxr.b  #1,regf                    ;CB14 RL H
  1290.         move.b  regh(regs),d0
  1291.         roxl.b  #1,d0
  1292.         rotflag
  1293.         move.b  d0,regh(regs)
  1294.         jmp     (return)
  1295.  
  1296. cb15    roxr.b  #1,regf                    ;CB15 RL L
  1297.         move.b  regl(regs),d0
  1298.         roxl.b  #1,d0
  1299.         rotflag
  1300.         move.b  d0,regl(regs)
  1301.         jmp     (return)
  1302.  
  1303. cb18    roxr.b  #1,regf                    ;CB18 RR B
  1304.         move.b  regb(regs),d0
  1305.         roxr.b  #1,d0
  1306.         rotflag
  1307.         move.b  d0,regb(regs)
  1308.         jmp     (return)
  1309.  
  1310. cb19    roxr.b  #1,regf                    ;CB19 RR C
  1311.         move.b  regc(regs),d0
  1312.         roxr.b  #1,d0
  1313.         rotflag
  1314.         move.b  d0,regc(regs)
  1315.         jmp     (return)
  1316.  
  1317. cb1a    roxr.b  #1,regf                    ;CB1A RR D
  1318.         move.b  regd(regs),d0
  1319.         roxr.b  #1,d0
  1320.         rotflag
  1321.         move.b  d0,regd(regs)
  1322.         jmp     (return)
  1323.  
  1324. cb1b    roxr.b  #1,regf                    ;CB1B RR E
  1325.         move.b  rege(regs),d0
  1326.         roxr.b  #1,d0
  1327.         rotflag
  1328.         move.b  d0,rege(regs)
  1329.         jmp     (return)
  1330.  
  1331. cb1c    roxr.b  #1,regf                    ;CB1C RR H
  1332.         move.b  regh(regs),d0
  1333.         roxr.b  #1,d0
  1334.         rotflag
  1335.         move.b  d0,regh(regs)
  1336.         jmp     (return)
  1337.  
  1338. cb1d    roxr.b  #1,regf                    ;CB1D RR L
  1339.         move.b  regl(regs),d0
  1340.         roxr.b  #1,d0
  1341.         rotflag
  1342.         move.b  d0,regl(regs)
  1343.         jmp     (return)
  1344.  
  1345. cb25    move.b  regl(regs),d0              ;CB25 SLA L
  1346.         asl.b   #1,d0
  1347.         rotflag
  1348.         move.b  d0,regl(regs)
  1349.         jmp     (return)
  1350.  
  1351. cb2f    asr.b   #1,rega                    ;CB2F SRA A
  1352.         setflag
  1353.  
  1354. cb39    move.b  regc(regs),d0              ;CB39 SRL C
  1355.         lsr.b   #1,d0
  1356.         rotflag
  1357.         move.b  d0,regc(regs)
  1358.         jmp     (return)
  1359.  
  1360. cb3c    move.b  regh(regs),d0              ;CB3C SRL H
  1361.         lsr.b   #1,d0
  1362.         rotflag
  1363.         move.b  d0,regh(regs)
  1364.         jmp     (return)
  1365.  
  1366. cb3f    lsr.b   #1,rega                    ;CB3F SRL A
  1367.         setflag
  1368.  
  1369. bitb    btst    d0,regb(regs)              ;CB40, 48, 50, 58, 60, 68, 70, 78
  1370.         beq     setit
  1371.         bra     clrit
  1372.  
  1373. bitc    btst    d0,regc(regs)              ;CB41, 49, 51, 59, 61, 69, 71, 79
  1374.         beq     setit
  1375.         bra     clrit
  1376.  
  1377. bitd    btst    d0,regd(regs)              ;CB42, 4A, 52, 5A, 62, 6A, 72, 7A
  1378.         beq     setit
  1379.         bra     clrit
  1380.  
  1381. bite    btst    d0,rege(regs)              ;CB43, 4B, 53, 5B, 63, 6B, 73, 7B
  1382.         beq     setit
  1383.         bra     clrit
  1384.  
  1385. bith    btst    d0,regh(regs)              ;CB44
  1386.         beq     setit
  1387.         bra     clrit
  1388.  
  1389. bitl    btst    d0,regl(regs)              ;CB45
  1390.         beq     setit
  1391.         bra     clrit
  1392.  
  1393. bitm    clr.l   d1
  1394.         move.w  regh(regs),d1
  1395.         btst    d0,0(targbase,d1.l)
  1396.         beq     setit
  1397.         bra     clrit
  1398.  
  1399. bita    btst    d0,rega                    ;CB47, 4F, 57, 5F, 67, 6F, 77, 7F
  1400.         beq     setit
  1401.         bra     clrit
  1402.  
  1403. bitx    btst    d1,0(targbase,d0.l)
  1404.         beq     setit
  1405. *       bra     clrit
  1406. clrit   andi.b  #%10111111,regf
  1407.         jmp     (return)
  1408. setit   ori.b   #%01000000,regf
  1409.         jmp     (return)
  1410.  
  1411. resb    bclr    d0,regb(regs)
  1412.         jmp     (return)
  1413.  
  1414. resc    bclr    d0,regc(regs)
  1415.         jmp     (return)
  1416.  
  1417. resd    bclr    d0,regd(regs)
  1418.         jmp     (return)
  1419.  
  1420. rese    bclr    d0,rege(regs)
  1421.         jmp     (return)
  1422.  
  1423. resh    bclr    d0,regh(regs)
  1424.         jmp     (return)
  1425.  
  1426. resl    bclr    d0,regl(regs)
  1427.         jmp     (return)
  1428.  
  1429. resm    clr.l   d1
  1430.         move.w  regh(regs),d1
  1431.         bclr    d0,0(targbase,d1.l)
  1432.         jmp     (return)
  1433.  
  1434. resa    bclr    d0,rega
  1435.         jmp     (return)
  1436.  
  1437. resx    bclr    d1,0(targbase,d0.l)
  1438.         jmp     (return)
  1439.  
  1440. setb    bset    d0,regb(regs)
  1441.         jmp     (return)
  1442.  
  1443. setc    bset    d0,regc(regs)
  1444.         jmp     (return)
  1445.  
  1446. setd    bset    d0,regd(regs)
  1447.         jmp     (return)
  1448.  
  1449. sete    bset    d0,rege(regs)
  1450.         jmp     (return)
  1451.  
  1452. seth    bset    d0,regh(regs)
  1453.         jmp     (return)
  1454.  
  1455. setl    bset    d0,regl(regs)
  1456.         jmp     (return)
  1457.  
  1458. setm    clr.l   d1
  1459.         move.w  regh(regs),d1
  1460.         bset    d0,0(targbase,d1.l)
  1461.         jmp     (return)
  1462.  
  1463. seta    bset    d0,rega
  1464.         jmp     (return)
  1465.  
  1466. setx    bset    d1,0(targbase,d0.l)
  1467.         jmp     (return)
  1468.  
  1469. exx     move.w  regabc(regs),d0            ;D9 EXX
  1470.         move.w  regb(regs),regabc(regs)
  1471.         move.w  d0,regb(regs)
  1472.         move.w  regade(regs),d0
  1473.         move.w  regd(regs),regade(regs)
  1474.         move.w  d0,regd(regs)
  1475.         move.w  regahl(regs),d0
  1476.         move.w  regh(regs),regahl(regs)
  1477.         move.w  d0,regh(regs)
  1478.         jmp     (return)
  1479.  
  1480. preDD   lea     DDoptab,a0
  1481.         bra     twobyte
  1482. preED   lea     EDoptab,a0
  1483.         bra     twobyte
  1484. preFD   lea     FDoptab,a0
  1485. twobyte clr.l   d1                         ;Zero-fill high bits.
  1486.         move.b  (pseudopc)+,d1             ;Grab next opcode.
  1487.         asl     #2,d1
  1488.         move.l  0(a0,d1.w),-(sp)           ;Do the operation.
  1489.         beq     illg2b
  1490.         rts
  1491.  
  1492. illg2b  move.l  (sp)+,d1                   ;Trash the address.
  1493. ng2b    subq.l  #1,pseudopc                ;Fix PPC for ILLEGAL.
  1494.         jmp     illegl
  1495.  
  1496. dd09    move.w  regb(regs),d0              ;DD09 ADD IX,BC
  1497.         add.w   d0,regix(regs)
  1498.         docyf
  1499.  
  1500. dd19    move.w  regd(regs),d0              ;DD19 ADD IX,DE
  1501.         add.w   d0,regix(regs)
  1502.         docyf
  1503.  
  1504. dd21    move.b  (pseudopc)+,regix+1(regs)  ;DD21 LXI IX,nnnn
  1505.         move.b  (pseudopc)+,regix(regs)
  1506.         jmp     (return)
  1507.  
  1508. sixd    lsxxd                              ;DD22 SIXD addr
  1509.         move.b  regix+1(regs),(a0)+
  1510.         move.b  regix(regs),(a0)
  1511.         jmp     (return)
  1512.  
  1513. dd23    addq.w  #1,regix(regs)             ;DD23 INC IX
  1514.         jmp     (return)
  1515.  
  1516. dd29    asl.w   regix(regs)                ;DD29 ADD IX,IX
  1517.         docyf
  1518.  
  1519. lixd    lsxxd                              ;DD2A LIXD addr
  1520.         move.b  (a0)+,regix+1(regs)
  1521.         move.b  (a0),regix(regs)
  1522.         jmp     (return)
  1523.  
  1524. dd2b    subq.w  #1,regix(regs)             ;DD2B
  1525.         jmp     (return)
  1526.  
  1527. dd34    calcind x                          ;DD34
  1528.         addq.b  #1,0(targbase,d0.l)
  1529.         inrflag
  1530.  
  1531. dd35    calcind x                          ;DD35
  1532.         subq.b  #1,0(targbase,d0.l)
  1533.         inrflag
  1534.  
  1535. dd36    calcind x                          ;DD36
  1536.         move.b  (pseudopc)+,0(targbase,d0.l)
  1537.         jmp     (return)
  1538.  
  1539. dd39    move.l  pseudosp,d0                ;DD39 ADD IX,SP
  1540.         sub.l   targbase,d0
  1541.         add.w   d0,regix(regs)
  1542.         docyf
  1543.  
  1544. dd46    calcind x                          ;DD46
  1545.         move.b  0(targbase,d0.l),regb(regs)
  1546.         jmp     (return)
  1547.  
  1548. dd4e    calcind x                          ;DD4E
  1549.         move.b  0(targbase,d0.l),regc(regs)
  1550.         jmp     (return)
  1551.  
  1552. dd56    calcind x                          ;DD56
  1553.         move.b  0(targbase,d0.l),regd(regs)
  1554.         jmp     (return)
  1555.  
  1556. dd5e    calcind x                          ;DD5E
  1557.         move.b  0(targbase,d0.l),rege(regs)
  1558.         jmp     (return)
  1559.  
  1560. dd66    calcind x                          ;DD66
  1561.         move.b  0(targbase,d0.l),regh(regs)
  1562.         jmp     (return)
  1563.  
  1564. dd6e    calcind x                          ;DD6E
  1565.         move.b  0(targbase,d0.l),regl(regs)
  1566.         jmp     (return)
  1567.  
  1568. dd70    calcind x                          ;DD70
  1569.         move.b  regb(regs),0(targbase,d0.l)
  1570.         jmp     (return)
  1571.  
  1572. dd71    calcind x                          ;DD71
  1573.         move.b  regc(regs),0(targbase,d0.l)
  1574.         jmp     (return)
  1575.  
  1576. dd72    calcind x                          ;DD72
  1577.         move.b  regd(regs),0(targbase,d0.l)
  1578.         jmp     (return)
  1579.  
  1580. dd73    calcind x                          ;DD73
  1581.         move.b  rege(regs),0(targbase,d0.l)
  1582.         jmp     (return)
  1583.  
  1584. dd74    calcind x                          ;DD74
  1585.         move.b  regh(regs),0(targbase,d0.l)
  1586.         jmp     (return)
  1587.  
  1588. dd75    calcind x                          ;DD75
  1589.         move.b  regl(regs),0(targbase,d0.l)
  1590.         jmp     (return)
  1591.  
  1592. dd77    calcind x                          ;DD77
  1593.         move.b  rega,0(targbase,d0.l)
  1594.         jmp     (return)
  1595.  
  1596. dd7e    calcind x                          ;DD7E
  1597.         move.b  0(targbase,d0.l),rega
  1598.         jmp     (return)
  1599.  
  1600. dd86    calcind x                          ;DD86
  1601.         move.b  0(targbase,d0.l),d0
  1602.         addflag
  1603.  
  1604. dd96    calcind x                          ;DD96
  1605.         sub.b   0(targbase,d0.l),rega
  1606.         jmp     (return)
  1607.  
  1608. ddbe    calcind x                          ;DDBE
  1609.         cmp.b   0(targbase,d0.l),rega
  1610.         setflag
  1611.  
  1612. popix   move.b  (pseudosp)+,regix+1(regs)  ;DDE1
  1613.         move.b  (pseudosp)+,regix(regs)
  1614.         jmp     (return)
  1615.  
  1616. dde3    move.b  regix+1(regs),d0           ;DDE3
  1617.         move.b  (pseudosp),regix+1(regs)
  1618.         move.b  d0,(pseudosp)
  1619.         move.b  regix(regs),d0
  1620.         move.b  1(pseudosp),regix(regs)
  1621.         move.b  d0,1(pseudosp)
  1622.         jmp     (return)
  1623.  
  1624. pushix  move.b  regix(regs),-(pseudosp)    ;DDE5
  1625.         move.b  regix+1(regs),-(pseudosp)
  1626.         jmp     (return)
  1627.  
  1628. dde9    move.w  regix(regs),d0             ;DDE9
  1629.         lea     0(targbase,d0.l),pseudopc
  1630.         jmp     (return)
  1631.  
  1632. ddf9    move.w  regix(regs),d0             ;DDF9
  1633.         lea     0(targbase,d0.l),pseudosp
  1634.         jmp     (return)
  1635.  
  1636. shlbc   ashl    sub,b                      ;ED42
  1637.  
  1638. sbcd    lsxxd                              ;ED43 SBCD addr
  1639.         move.b  regc(regs),(a0)+
  1640.         move.b  regb(regs),(a0)+
  1641.         jmp     (return)
  1642.  
  1643. ed44    neg.b   rega                       ;ED44 NEG
  1644.         setflag
  1645.  
  1646. ahlbc   ashl    add,b                      ;ED4A
  1647.  
  1648. lbcd    lsxxd                              ;ED4B LD BC,M
  1649.         move.b  (a0)+,regc(regs)
  1650.         move.b  (a0),regb(regs)
  1651.         jmp     (return)
  1652.  
  1653. shlde   ashl    sub,d                      ;ED52
  1654.  
  1655. sded    lsxxd                              ;ED53 SDED addr
  1656.         move.b  rege(regs),(a0)+
  1657.         move.b  regd(regs),(a0)+
  1658.         jmp     (return)
  1659.  
  1660. ahlde   ashl    add,d                      ;ED5A
  1661.  
  1662. lded    lsxxd                              ;ED5B LDED addr
  1663.         move.b  (a0)+,rege(regs)
  1664.         move.b  (a0),regd(regs)
  1665.         jmp     (return)
  1666.  
  1667. shlhl   ashl    sub,h                      ;ED62
  1668.  
  1669. ahlhl   ashl    add,h                      ;ED6A
  1670.  
  1671. ed6f    move.w  regh(regs),d0              ;ED6F RLD
  1672.         clr.w   d1
  1673.         move.b  0(targbase,d0.w),d1
  1674.         lsl.w   #4,d1
  1675.         move.b  rega,d0
  1676.         andi.b  #%00001111,d0
  1677.         or.b    d0,d1
  1678.         move.w  regh(regs),d0
  1679.         move.b  d1,0(targbase,d0.w)
  1680.         lsr.w   #8,d1
  1681.         andi.b  #%11110000,rega
  1682.         or.b    d1,rega
  1683.         jmp     (return)
  1684.  
  1685. sspd    lsxxd                              ;ED73 SSPD addr
  1686.         move.l  pseudosp,d0
  1687.         sub.l   targbase,d0
  1688.         move.b  d0,(a0)+
  1689.         lsr.w   #8,d0
  1690.         move.b  d0,(a0)
  1691.         jmp     (return)
  1692.  
  1693. lspd    lsxxd                              ;ED7B LSPD addr
  1694.         clr.l   d0
  1695.         move.b  1(a0),d0
  1696.         lsl.w   #8,d0
  1697.         move.b  (a0),d0
  1698.         movea.l d0,pseudosp
  1699.         adda.l  targbase,pseudosp
  1700.         jmp     (return)
  1701.  
  1702. ldi     clr.l   d1                         ;EDA0
  1703.         move.w  regh(regs),d1
  1704.         move.b  0(targbase,d1.l),d0
  1705.         move.w  regd(regs),d1
  1706.         move.b  d0,0(targbase,d1.l)
  1707.         addq.w  #1,regd(regs)
  1708.         addq.w  #1,regh(regs)
  1709.         subq.w  #1,regb(regs)
  1710.         beq     1$
  1711.         ori.b   #%00000100,regf
  1712.         jmp     (return)
  1713. 1$      andi.b  #%11111011,regf
  1714.         jmp     (return)
  1715.  
  1716. ldir    movem.l d2/a5,-(sp)                ;EDB0
  1717.         move.w  regb(regs),d0              ;Grab count,
  1718.         subq.w  #1,d0                      ; adjust for DBRA.
  1719.         clr.l   d1
  1720.         move.w  regh(regs),d1              ;Source
  1721.         lea     0(targbase,d1.l),a0
  1722.         clr.l   d2
  1723.         move.w  regd(regs),d2              ;Destination
  1724.         lea     0(targbase,d2.l),a5
  1725. ldirlop move.b  (a0)+,(a5)+
  1726.         addq.w  #1,d1
  1727.         addq.w  #1,d2
  1728.         dbra    d0,ldirlop
  1729.         move.w  d1,regh(regs)              ;Update 8080 registers.
  1730.         move.w  d2,regd(regs)
  1731.         move.w  #0,regb(regs)
  1732.         moveq   #0,regf
  1733.         movem.l (sp)+,d2/a5
  1734.         jmp     (return)
  1735.  
  1736. lddr    movem.l d2/a5,-(sp)                ;EDC0
  1737.         move.w  regb(regs),d0              ;Grab count,
  1738.         subq.w  #1,d0                      ; adjust for DBRA.
  1739.         clr.l   d1
  1740.         move.w  regh(regs),d1              ;Source
  1741.         lea     1(targbase,d1.l),a0
  1742.         clr.l   d2
  1743.         move.w  regd(regs),d2              ;Destination
  1744.         lea     1(targbase,d2.l),a5
  1745. lddrlop move.b  -(a0),-(a5)
  1746.         subq.w  #1,d1
  1747.         subq.w  #1,d2
  1748.         dbra    d0,lddrlop
  1749.         move.w  d1,regh(regs)              ;Update 8080 registers.
  1750.         move.w  d2,regd(regs)
  1751.         move.w  #0,regb(regs)
  1752.         moveq   #0,regf
  1753.         movem.l (sp)+,d2/a5
  1754.         jmp     (return)
  1755.         page
  1756. cpir    move.w  regb(regs),d0              ;EDB1
  1757.         subq.w  #1,d0
  1758.         moveq   #0,d1
  1759.         move.w  regh(regs),d1              ;Source
  1760.         lea     0(targbase,d1.l),a0
  1761. cpirlop addq.w  #1,d1
  1762.         cmp.b   (a0)+,rega
  1763.         dbeq    d0,cpirlop
  1764.         bne     nomatch
  1765.         move.w  d1,regh(regs)              ;Restore 8080 registers.
  1766.         move.w  d0,regb(regs)
  1767.         tst.w   d0
  1768.         beq     1$
  1769.         moveq   #%01000100,regf            ;Found, in the string.
  1770.         jmp     (return)
  1771. 1$      moveq   #%01000000,regf            ;Found, but at last place.
  1772.         jmp     (return)
  1773. nomatch move.w  d1,regh(regs)              ;Restore 8080 registers.
  1774.         addq.w  #1,d0
  1775.         move.w  d0,regb(regs)
  1776.         tst.w   d0
  1777.         beq     2$
  1778.         moveq   #%00000100,regf
  1779.         jmp     (return)
  1780. 2$      moveq   #%00000000,regf
  1781.         jmp     (return)
  1782.  
  1783. fd09    move.w  regb(regs),d0              ;FD09 ADD IY,BC
  1784.         add.w   d0,regiy(regs)
  1785.         docyf
  1786.  
  1787. fd19    move.w  regd(regs),d0              ;FD19 ADD IY,DE
  1788.         add.w   d0,regiy(regs)
  1789.         docyf
  1790.  
  1791. fd21    move.b  (pseudopc)+,regiy+1(regs)  ;FD21 LXI IY,nnnn
  1792.         move.b  (pseudopc)+,regiy(regs)
  1793.         jmp     (return)
  1794.  
  1795. siyd    lsxxd                              ;FD22 SIYD addr
  1796.         move.b  regiy+1(regs),(a0)+
  1797.         move.b  regiy(regs),(a0)
  1798.         jmp     (return)
  1799.  
  1800. fd23    addq.w  #1,regiy(regs)             ;FD23
  1801.         jmp     (return)
  1802.  
  1803. fd29    asl.w   regiy(regs)                ;FD29 ADD IY,IY
  1804.         docyf
  1805.  
  1806. liyd    lsxxd                              ;FD2A LIYD addr
  1807.         move.b  (a0)+,regiy+1(regs)
  1808.         move.b  (a0),regiy(regs)
  1809.         jmp     (return)
  1810.  
  1811. fd2b    subq.w  #1,regiy(regs)             ;FD2B
  1812.         jmp     (return)
  1813.  
  1814. fd34    calcind y                          ;FD34
  1815.         addq.b  #1,0(targbase,d0.l)
  1816.         inrflag
  1817.  
  1818. fd35    calcind y                          ;FD35
  1819.         subq.b  #1,0(targbase,d0.l)
  1820.         inrflag
  1821.  
  1822. fd36    calcind y                          ;FD36
  1823.         move.b  (pseudopc)+,0(targbase,d0.l)
  1824.         jmp     (return)
  1825.  
  1826. fd39    move.l  pseudosp,d0                ;FD39 ADD IY,SP
  1827.         sub.l   targbase,d0
  1828.         add.w   d0,regiy(regs)
  1829.         docyf
  1830.  
  1831. fd46    calcind y                          ;FD46
  1832.         move.b  0(targbase,d0.l),regb(regs)
  1833.         jmp     (return)
  1834.  
  1835. fd4e    calcind y                          ;FD4E
  1836.         move.b  0(targbase,d0.l),regc(regs)
  1837.         jmp     (return)
  1838.  
  1839. fd56    calcind y                          ;FD56
  1840.         move.b  0(targbase,d0.l),regd(regs)
  1841.         jmp     (return)
  1842.  
  1843. fd5e    calcind y                          ;FD5E
  1844.         move.b  0(targbase,d0.l),rege(regs)
  1845.         jmp     (return)
  1846.  
  1847. fd66    calcind y                          ;FD66
  1848.         move.b  0(targbase,d0.l),regh(regs)
  1849.         jmp     (return)
  1850.  
  1851. fd6e    calcind y                          ;FD6E
  1852.         move.b  0(targbase,d0.l),regl(regs)
  1853.         jmp     (return)
  1854.  
  1855. fd70    calcind y                          ;FD70
  1856.         move.b  regb(regs),0(targbase,d0.l)
  1857.         jmp     (return)
  1858.  
  1859. fd71    calcind y                          ;FD71
  1860.         move.b  regc(regs),0(targbase,d0.l)
  1861.         jmp     (return)
  1862.  
  1863. fd72    calcind y                          ;FD72
  1864.         move.b  regd(regs),0(targbase,d0.l)
  1865.         jmp     (return)
  1866.  
  1867. fd73    calcind y                          ;FD73
  1868.         move.b  rege(regs),0(targbase,d0.l)
  1869.         jmp     (return)
  1870.  
  1871. fd74    calcind y                          ;FD74
  1872.         move.b  regh(regs),0(targbase,d0.l)
  1873.         jmp     (return)
  1874.  
  1875. fd75    calcind y                          ;FD75
  1876.         move.b  regl(regs),0(targbase,d0.l)
  1877.         jmp     (return)
  1878.  
  1879. fd77    calcind y                          ;FD77
  1880.         move.b  rega,0(targbase,d0.l)
  1881.         jmp     (return)
  1882.  
  1883. fd7e    calcind y                          ;FD7E
  1884.         move.b  0(targbase,d0.l),rega
  1885.         jmp     (return)
  1886.  
  1887. fd86    calcind y                          ;FD86
  1888.         move.b  0(targbase,d0.l),d0
  1889.         addflag
  1890.  
  1891. fd96    calcind y                          ;FD96
  1892.         sub.b   0(targbase,d0.l),rega
  1893.         jmp     (return)
  1894.  
  1895. fdbe    calcind y                          ;FDBE
  1896.         cmp.b   0(targbase,d0.l),rega
  1897.         setflag
  1898.  
  1899. popiy   move.b  (pseudosp)+,regiy+1(regs)  ;FDE1
  1900.         move.b  (pseudosp)+,regiy(regs)
  1901.         jmp     (return)
  1902.  
  1903. fde3    move.b  regiy+1(regs),d0           ;FDE3
  1904.         move.b  (pseudosp),regiy+1(regs)
  1905.         move.b  d0,(pseudosp)
  1906.         move.b  regiy(regs),d0
  1907.         move.b  1(pseudosp),regiy(regs)
  1908.         move.b  d0,1(pseudosp)
  1909.         jmp     (return)
  1910.  
  1911. pushiy  move.b  regiy(regs),-(pseudosp)    ;FDE5
  1912.         move.b  regiy+1(regs),-(pseudosp)
  1913.         jmp     (return)
  1914.  
  1915. fde9    move.w  regiy(regs),d0             ;FDE9
  1916.         lea     0(targbase,d0.l),pseudopc
  1917.         jmp     (return)
  1918.  
  1919. fdf9    move.w  regiy(regs),d0             ;FDF9
  1920.         lea     0(targbase,d0.l),pseudosp
  1921.         jmp     (return)
  1922.         page
  1923. *************************************************************************
  1924. *                                                                       *
  1925. *       Opcode dispatch table                                           *
  1926. *                                                                       *
  1927. *************************************************************************
  1928.         data    data
  1929.  
  1930.         even
  1931. optabl  dc.l    nop00,lxib,staxb,inxb,inrb,dcrb,mvib,rlca
  1932.         dc.l    exaf,dadb,ldaxb,dcxb,inrc,dcrc,mvic,rrca
  1933.         dc.l    djnz,lxid,staxd,inxd,inrd,dcrd,mvid,ral
  1934.         dc.l    jr,dadd,ldaxd,dcxd,inre,dcre,mvie,rar
  1935.         dc.l    jrnz,lxih,shld,inxh,inrh,dcrh,mvih,daa
  1936.         dc.l    jrz,dadh,lhld,dcxh,inrl,dcrl,mvil,cma
  1937.         dc.l    jrnc,lxis,sta,inxs,inrm,dcrm,mvim,stc
  1938.         dc.l    jrc,dads,lda,dcxs,inra,dcra,mvia,cmc
  1939.         dc.l    movebb,movebc,movebd,movebe,movebh,movebl,movebm,moveba
  1940.         dc.l    movecb,movecc,movecd,movece,movech,movecl,movecm,moveca
  1941.         dc.l    movedb,movedc,movedd,movede,movedh,movedl,movedm,moveda
  1942.         dc.l    moveeb,moveec,moveed,moveee,moveeh,moveel,moveem,moveea
  1943.         dc.l    movehb,movehc,movehd,movehe,movehh,movehl,movehm,moveha
  1944.         dc.l    movelb,movelc,moveld,movele,movelh,movell,movelm,movela
  1945.         dc.l    movemb,movemc,movemd,moveme,movemh,moveml,halt,movema
  1946.         dc.l    moveab,moveac,movead,moveae,moveah,moveal,moveam,moveaa
  1947.         dc.l    addb,addc,addd,adde,addh,addl,addm,adda
  1948.         dc.l    adcb,adcc,adcd,adce,adch,adcl,adcm,adca
  1949.         dc.l    subb,subc,subd,sube,subh,subl,subm,suba
  1950.         dc.l    sbbb,sbbc,sbbd,sbbe,sbbh,sbbl,sbbm,sbba
  1951.         dc.l    andb,andc,andd,ande,andh,andl,andm,anda
  1952.         dc.l    xrab,xrac,xrad,xrae,xrah,xral,xram,xraa
  1953.         dc.l    orab,orac,orad,orae,orah,oral,oram,oraa
  1954.         dc.l    cmpb,cmpc,cmpd,cmpe,cmph,cmpl,cmpam,cmpaa
  1955.         dc.l    rnz,popb,jnz,jmpa,cnz,pushb,adi,rst0
  1956.         dc.l    rz,ret,jz,preCB,cz,call,aci,rst1
  1957.         dc.l    rnc,popd,jnc,out,cnc,pushd,sui,rst2
  1958.         dc.l    rc,exx,jc,in,cc,preDD,sbi,rst3
  1959.         dc.l    rpo,poph,jpo,xthl,cpo,pushh,ani,rst4
  1960.         dc.l    rpe,pchl,jpe,xchg,cpe,preED,xri,rst5
  1961.         dc.l    rp,popp,jp,di,cp,pushp,oria,rst6
  1962.         dc.l    rm,sphl,jm,ei,cm,preFD,cpi,rst7
  1963.         page
  1964. *************************************************************************
  1965. *                                                                       *
  1966. *       Flag register lookup tables                                     *
  1967. *                                                                       *
  1968. *************************************************************************
  1969. flags   dc.b    $00,$01,$04,$05,$40,$41,$44,$45
  1970.         dc.b    $80,$81,$84,$85,$C0,$C1,$C4,$C5
  1971.         dc.b    $44,$00,$00,$04,$00,$04,$04,$00
  1972.         dc.b    $00,$04,$04,$00,$04,$00,$00,$04
  1973.         dc.b    $00,$04,$04,$00,$04,$00,$00,$04
  1974.         dc.b    $04,$00,$00,$04,$00,$04,$04,$00
  1975.         dc.b    $00,$04,$04,$00,$04,$00,$00,$04
  1976.         dc.b    $04,$00,$00,$04,$00,$04,$04,$00
  1977.         dc.b    $04,$00,$00,$04,$00,$04,$04,$00
  1978.         dc.b    $00,$04,$04,$00,$04,$00,$00,$04
  1979.         dc.b    $00,$04,$04,$00,$04,$00,$00,$04
  1980.         dc.b    $04,$00,$00,$04,$00,$04,$04,$00
  1981.         dc.b    $04,$00,$00,$04,$00,$04,$04,$00
  1982.         dc.b    $00,$04,$04,$00,$04,$00,$00,$04
  1983.         dc.b    $04,$00,$00,$04,$00,$04,$04,$00
  1984.         dc.b    $00,$04,$04,$00,$04,$00,$00,$04
  1985.         dc.b    $00,$04,$04,$00,$04,$00,$00,$04
  1986.         dc.b    $04,$00,$00,$04,$00,$04,$04,$00
  1987.         dc.b    $80,$84,$84,$80,$84,$80,$80,$84
  1988.         dc.b    $84,$80,$80,$84,$80,$84,$84,$80
  1989.         dc.b    $84,$80,$80,$84,$80,$84,$84,$80
  1990.         dc.b    $80,$84,$84,$80,$84,$80,$80,$84
  1991.         dc.b    $84,$80,$80,$84,$80,$84,$84,$80
  1992.         dc.b    $80,$84,$84,$80,$84,$80,$80,$84
  1993.         dc.b    $80,$84,$84,$80,$84,$80,$80,$84
  1994.         dc.b    $84,$80,$80,$84,$80,$84,$84,$80
  1995.         dc.b    $84,$80,$80,$84,$80,$84,$84,$80
  1996.         dc.b    $80,$84,$84,$80,$84,$80,$80,$84
  1997.         dc.b    $80,$84,$84,$80,$84,$80,$84,$80
  1998.         dc.b    $84,$80,$80,$84,$80,$84,$84,$80
  1999.         dc.b    $80,$84,$84,$80,$84,$80,$84,$80
  2000.         dc.b    $84,$80,$80,$84,$80,$84,$84,$80
  2001.         dc.b    $84,$80,$80,$84,$80,$84,$84,$80
  2002.         dc.b    $80,$84,$84,$80,$84,$80,$80,$84
  2003.         page
  2004. *************************************************************************
  2005. *                                                                       *
  2006. *       Z80 opcode dispatch tables.  One longword entry per opcode      *
  2007. *       of the target (Z-80) processor, including illegals.             *
  2008. *                                                                       *
  2009. *************************************************************************
  2010. *                                                                       *
  2011. *       Only a few of the most popular instructions are simulated.      *
  2012. *       Support for the Z-80 Block Move instructions is provided        *
  2013. *       as the flags for this simulation resemble those of the Z-80     *
  2014. *       rather than the 8080.  Certain packages (notably BDS C) check   *
  2015. *       the flags and mistakenly assume a Z-80, then use LDIR/LDDR.     *
  2016. *       Therefore, minimal Z-80 support is provided for these           *
  2017. *       instructions.  By no means is this a complete simulation        *
  2018. *       of the Z-80.                                                    *
  2019. *                                                                       *
  2020. *************************************************************************
  2021.  
  2022. CBtable1:
  2023.         dc.l    0,0,0,0,0,0,0,0                    ;CB00
  2024.         dc.l    0,0,0,0,0,0,0,0                    ;CB08
  2025.         dc.l    cb10,cb11,cb12,cb13,cb14,cb15,0,0  ;CB10
  2026.         dc.l    cb18,cb19,cb1a,cb1b,cb1c,cb1d,0,0  ;CB18
  2027.         dc.l    0,0,0,0,0,cb25,0,0                 ;CB20
  2028.         dc.l    0,0,0,0,0,0,0,cb2f                 ;CB28
  2029.         dc.l    0,0,0,0,0,0,0,0                    ;CB30
  2030.         dc.l    0,cb39,0,0,cb3c,0,0,cb3f           ;CB38
  2031. CBtable2:
  2032.         dc.l    0,bittbl,restbl,settbl
  2033. bittbl  dc.l    bitb,bitc,bitd,bite,bith,bitl,bitm,bita
  2034. restbl  dc.l    resb,resc,resd,rese,resh,resl,resm,resa
  2035. settbl  dc.l    setb,setc,setd,sete,seth,setl,setm,seta
  2036. *xDCBtbl dc.l    rotsx,bitx,resx,setx
  2037. xDCBtbl dc.l    ng2b,bitx,resx,setx
  2038.  
  2039. DDoptab:
  2040.         dc.l    0,0,0,0,0,0,0,0                       ;DD00
  2041.         dc.l    0,dd09,0,0,0,0,0,0                    ;DD08
  2042.         dc.l    0,0,0,0,0,0,0,0                       ;DD10
  2043.         dc.l    0,dd19,0,0,0,0,0,0                    ;DD18
  2044.         dc.l    0,dd21,sixd,dd23,0,0,0,0              ;DD20
  2045.         dc.l    0,dd29,lixd,dd2b,0,0,0,0              ;DD28
  2046.         dc.l    0,0,0,0,dd34,dd35,dd36,0              ;DD30
  2047.         dc.l    0,dd39,0,0,0,0,0,0                    ;DD38
  2048.         dc.l    0,0,0,0,0,0,dd46,0                    ;DD40
  2049.         dc.l    0,0,0,0,0,0,dd4e,0                    ;DD48
  2050.         dc.l    0,0,0,0,0,0,dd56,0                    ;DD50
  2051.         dc.l    0,0,0,0,0,0,dd5e,0                    ;DD58
  2052.         dc.l    0,0,0,0,0,0,dd66,0                    ;DD60
  2053.         dc.l    0,0,0,0,0,0,dd6e,0                    ;DD68
  2054.         dc.l    dd70,dd71,dd72,dd73,dd74,dd75,0,dd77  ;DD70
  2055.         dc.l    0,0,0,0,0,0,dd7e,0                    ;DD78
  2056.         dc.l    0,0,0,0,0,0,dd86,0                    ;DD80
  2057.         dc.l    0,0,0,0,0,0,0,0                       ;DD88
  2058.         dc.l    0,0,0,0,0,0,dd96,0                    ;DD90
  2059.         dc.l    0,0,0,0,0,0,0,0                       ;DD98
  2060.         dc.l    0,0,0,0,0,0,0,0                       ;DDA0
  2061.         dc.l    0,0,0,0,0,0,0,0                       ;DDA8
  2062.         dc.l    0,0,0,0,0,0,0,0                       ;DDB0
  2063.         dc.l    0,0,0,0,0,0,ddbe,0                    ;DDB8
  2064.         dc.l    0,0,0,0,0,0,0,0                       ;DDC0
  2065.         dc.l    0,0,0,ddcb,0,0,0,0                    ;DDC8
  2066.         dc.l    0,0,0,0,0,0,0,0                       ;DDD0
  2067.         dc.l    0,0,0,0,0,0,0,0                       ;DDD8
  2068.         dc.l    0,popix,0,dde3,0,pushix,0,0           ;DDE0
  2069.         dc.l    0,dde9,0,0,0,0,0,0                    ;DDE8
  2070.         dc.l    0,0,0,0,0,0,0,0                       ;DDF0
  2071.         dc.l    0,ddf9,0,0,0,0,0,0                    ;DDF8
  2072.  
  2073. EDoptab:                                               
  2074.         dc.l    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0       ;ED00
  2075.         dc.l    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0       ;ED10
  2076.         dc.l    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0       ;ED20
  2077.         dc.l    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0       ;ED30
  2078.         dc.l    0,0,shlbc,sbcd,ed44,0,0,0             ;ED40
  2079.         dc.l    0,0,ahlbc,lbcd,0,0,0,0                ;ED48
  2080.         dc.l    0,0,shlde,sded,0,0,0,0                ;ED50
  2081.         dc.l    0,0,ahlde,lded,0,0,0,0                ;ED58
  2082.         dc.l    0,0,shlhl,0,0,0,0,0                   ;ED60
  2083.         dc.l    0,0,ahlhl,0,0,0,0,ed6f                ;ED68
  2084.         dc.l    0,0,0,sspd,0,0,0,0                    ;ED70
  2085.         dc.l    0,0,0,lspd,0,0,0,0                    ;ED78
  2086.         dc.l    0,0,0,0,0,0,0,0                       ;ED80
  2087.         dc.l    0,0,0,0,0,0,0,0                       ;ED88
  2088.         dc.l    0,0,0,0,0,0,0,0                       ;ED90
  2089.         dc.l    0,0,0,0,0,0,0,0                       ;ED98
  2090.         dc.l    ldi,0,0,0,0,0,0,0                     ;EDA0
  2091.         dc.l    0,0,0,0,0,0,0,0                       ;EDA8
  2092.         dc.l    ldir,cpir,0,0,0,0,0,0                 ;EDB0
  2093.         dc.l    lddr,0,0,0,0,0,0,0                    ;EDB8
  2094.         dc.l    0,0,0,0,0,0,0,0                       ;EDC0
  2095.         dc.l    0,0,0,0,0,0,0,0                       ;EDC8
  2096.         dc.l    0,0,0,0,0,0,0,0                       ;EDD0
  2097.         dc.l    0,0,0,0,0,0,0,0                       ;EDD8
  2098.         dc.l    0,0,0,0,0,0,0,0                       ;EDE0
  2099.         dc.l    0,0,0,0,0,0,0,0                       ;EDE8
  2100.         dc.l    0,0,0,0,0,0,0,0                       ;EDF0
  2101.         dc.l    0,0,0,0,0,0,0,0                       ;EDF8
  2102.  
  2103. FDoptab:
  2104.         dc.l    0,0,0,0,0,0,0,0                       ;FD00
  2105.         dc.l    0,fd09,0,0,0,0,0,0                    ;FD08
  2106.         dc.l    0,0,0,0,0,0,0,0                       ;FD10
  2107.         dc.l    0,fd19,0,0,0,0,0,0                    ;FD18
  2108.         dc.l    0,fd21,siyd,fd23,0,0,0,0              ;FD20
  2109.         dc.l    0,fd29,liyd,fd2b,0,0,0,0              ;FD28
  2110.         dc.l    0,0,0,0,fd34,fd35,fd36,0              ;FD30
  2111.         dc.l    0,fd39,0,0,0,0,0,0                    ;FD38
  2112.         dc.l    0,0,0,0,0,0,fd46,0                    ;FD40
  2113.         dc.l    0,0,0,0,0,0,fd4e,0                    ;FD48
  2114.         dc.l    0,0,0,0,0,0,fd56,0                    ;FD50
  2115.         dc.l    0,0,0,0,0,0,fd5e,0                    ;FD58
  2116.         dc.l    0,0,0,0,0,0,fd66,0                    ;FD60
  2117.         dc.l    0,0,0,0,0,0,fd6e,0                    ;FD68
  2118.         dc.l    fd70,fd71,fd72,fd73,fd74,fd75,0,fd77  ;FD70
  2119.         dc.l    0,0,0,0,0,0,fd7e,0                    ;FD78
  2120.         dc.l    0,0,0,0,0,0,fd86,0                    ;FD80
  2121.         dc.l    0,0,0,0,0,0,0,0                       ;FD88
  2122.         dc.l    0,0,0,0,0,0,fd96,0                    ;FD90
  2123.         dc.l    0,0,0,0,0,0,0,0                       ;FD98
  2124.         dc.l    0,0,0,0,0,0,0,0                       ;FDA0
  2125.         dc.l    0,0,0,0,0,0,0,0                       ;FDA8
  2126.         dc.l    0,0,0,0,0,0,0,0                       ;FDB0
  2127.         dc.l    0,0,0,0,0,0,fdbe,0                    ;FDB8
  2128.         dc.l    0,0,0,0,0,0,0,0                       ;FDC0
  2129.         dc.l    0,0,0,fdcb,0,0,0,0                    ;FDC8
  2130.         dc.l    0,0,0,0,0,0,0,0                       ;FDD0
  2131.         dc.l    0,0,0,0,0,0,0,0                       ;FDD8
  2132.         dc.l    0,popiy,fde3,0,0,pushiy,0,0           ;FDE0
  2133.         dc.l    0,fde9,0,0,0,0,0,0                    ;FDE8
  2134.         dc.l    0,0,0,0,0,0,0,0                       ;FDF0
  2135.         dc.l    0,fdf9,0,0,0,0,0,0                    ;FDF8
  2136.  
  2137.  
  2138. traceit dc.b    trace           ;Trace option is available - used by SIMCPM1.
  2139.  
  2140.  
  2141.         bss     bss
  2142.  
  2143.         even
  2144.  
  2145. tracesad ds.l   1               ;Start address for trace
  2146. traceead ds.l   1               ;End address for trace
  2147. traceflg ds.b   1               ;Trace activity flag
  2148.  
  2149.         end
  2150.  
  2151.