home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD1.mdf / magazine / drdobbs / 1986 / 01 / cathey.jan < prev    next >
Text File  |  1986-01-31  |  38KB  |  1,710 lines

  1. *************************************************************************
  2. *                                    *
  3. *    This file contains the target processor (8080) simulation    *
  4. *    routines.                            *
  5. *                                    *
  6. *************************************************************************
  7.  
  8. *************************************************************************
  9. *                                    *
  10. *    Opcode dispatch table.  One longword entry per opcode of the     *
  11. *    target (8080) processor, including illegals.            *
  12. *                                    *
  13. *************************************************************************
  14.  
  15.  
  16.     globl optabl,flags,nop00
  17.     xdef mloop,illegl,service,preED,outspec
  18.  
  19. diskio     equ 0        ; Non-zero for special HDC/DMA support.
  20.  
  21. return     equ @16,r    ; JMP (return) is fast return to MLOOP.
  22. pseudopc equ @15,r    ; 8080's PC is register A5.
  23. opptr    equ @14,r    ; Pointer to opcode dispatch table.
  24. pseudosp equ @13,r    ; 8080's SP is register A3.
  25. flagptr  equ @12,r    ; Pointer to 8080's flag lookup table is A2.
  26. targbase equ @11,r    ; Pointer to 8080's address space is A1.
  27. regs     equ @11,r    ; Base pointer to 8080's registers is A1.
  28.  
  29. regcon0e equ 7,r    ; Register based constant #$E (for speed).
  30. regcon01 equ 6,r    ; Register based constant #$1.
  31. regcon0f equ 5,r    ; Register based constant #$F.
  32. regconff equ 4,r    ; Register based constant #$FF.
  33. *            ;  Often used constants #0 & #8 are predominantly
  34. *            ;  used by instructions that have 'quick' modes
  35. *            ;  which encompass these values -- no register
  36. *            ;  needed (or available, either).
  37. regf     equ 3,r    ; 8080's Flags
  38. rega     equ 2,r    ; 8080's Accumulator
  39.  
  40. regop3    equ -9        ; Operand 3 for DAA storage.
  41. regb    equ -8        ; Offsets from register base pointer for
  42. regc    equ -7        ; 8080's pseudo-registers.
  43. regd    equ -6        ; A & F are in Data Registers.
  44. rege    equ -5        ; Pseudo-PC is kept in an Address Register.
  45. regh    equ -4
  46. regl    equ -3
  47. regop1    equ -2        ; Operand 1 for DAA storage.
  48. regop2    equ -1        ;    "    2  "   "     "
  49.  
  50.     data
  51.     page
  52.     even
  53. optabl    dc.l nop00,lxib,staxb,inxb,inrb,dcrb,mvib,rlca
  54.     dc.l nop08,dadb,ldaxb,dcxb,inrc,dcrc,mvic,rrca
  55.     dc.l nop10,lxid,staxd,inxd,inrd,dcrd,mvid,ral
  56.     dc.l nop18,dadd,ldaxd,dcxd,inre,dcre,mvie,rar
  57.     dc.l nop20,lxih,shld,inxh,inrh,dcrh,mvih,daa
  58.     dc.l nop28,dadh,lhld,dcxh,inrl,dcrl,mvil,cma
  59.     dc.l nop30,lxis,sta,inxs,inrm,dcrm,mvim,stc
  60.     dc.l nop38,dads,lda,dcxs,inra,dcra,mvia,cmc
  61.     dc.l movebb,movebc,movebd,movebe,movebh,movebl,movebm,moveba
  62.     dc.l movecb,movecc,movecd,movece,movech,movecl,movecm,moveca
  63.     dc.l movedb,movedc,movedd,movede,movedh,movedl,movedm,moveda
  64.     dc.l moveeb,moveec,moveed,moveee,moveeh,moveel,moveem,moveea
  65.     dc.l movehb,movehc,movehd,movehe,movehh,movehl,movehm,moveha
  66.     dc.l movelb,movelc,moveld,movele,movelh,movell,movelm,movela
  67.     dc.l movemb,movemc,movemd,moveme,movemh,moveml,halt,movema
  68.     dc.l moveab,moveac,movead,moveae,moveah,moveal,moveam,moveaa
  69.     dc.l addb,addc,addd,adde,addh,addl,addm,addaa
  70.     dc.l adcb,adcc,adcd,adce,adch,adcl,adcm,adca
  71.     dc.l subb,subc,subd,sube,subh,subl,subm,subaa
  72.     dc.l sbbb,sbbc,sbbd,sbbe,sbbh,sbbl,sbbm,sbba
  73.     dc.l andb,andc,andd,ande,andh,andl,andm,anda
  74.     dc.l xrab,xrac,xrad,xrae,xrah,xral,xram,xraa
  75.     dc.l orab,orac,orad,orae,orah,oral,oram,oraa
  76.     dc.l cmpb,cmpc,cmpd,cmpe,cmph,cmpl,cmpam,cmpaa
  77.     dc.l rnz,popb,jnz,jmpa,cnz,pushb,adi,rst0
  78.     dc.l rz,ret,jz,nopCB,cz,call,aci,rst8
  79.     dc.l rnc,popd,jnc,out,cnc,pushd,sui,rst10
  80.     dc.l rc,nopD9,jc,in,cc,nopDD,sbi,rst18
  81.     dc.l rpo,poph,jpo,xthl,cpo,pushh,ani,rst20
  82.     dc.l rpe,pchl,jpe,xchg,cpe,preED,xri,rst28
  83.     dc.l rp,popp,jp,di,cp,pushp,oria,rst30
  84.     dc.l rm,sphl,jm,ei,cm,nopFD,cpi,rst38
  85.  
  86.     page
  87. *************************************************************************
  88. *                                    *
  89. *    Flag register lookup tables.                    *
  90. *                                    *
  91. *************************************************************************
  92.  
  93. flags    dc.b $00,$01,$04,$05,$40,$41,$44,$45,$80,$81,$84,$85,$C0,$C1,$C4,$C5
  94.  
  95.     dc.b $44,$00,$00,$04,$00,$04,$04,$00,$00,$04,$04,$00,$04,$00,$00,$04
  96.     dc.b $00,$04,$04,$00,$04,$00,$00,$04,$04,$00,$00,$04,$00,$04,$04,$00
  97.     dc.b $00,$04,$04,$00,$04,$00,$00,$04,$04,$00,$00,$04,$00,$04,$04,$00
  98.     dc.b $04,$00,$00,$04,$00,$04,$04,$00,$00,$04,$04,$00,$04,$00,$00,$04
  99.     dc.b $00,$04,$04,$00,$04,$00,$00,$04,$04,$00,$00,$04,$00,$04,$04,$00
  100.     dc.b $04,$00,$00,$04,$00,$04,$04,$00,$00,$04,$04,$00,$04,$00,$00,$04
  101.     dc.b $04,$00,$00,$04,$00,$04,$04,$00,$00,$04,$04,$00,$04,$00,$00,$04
  102.     dc.b $00,$04,$04,$00,$04,$00,$00,$04,$04,$00,$00,$04,$00,$04,$04,$00
  103.     dc.b $80,$84,$84,$80,$84,$80,$80,$84,$84,$80,$80,$84,$80,$84,$84,$80
  104.     dc.b $84,$80,$80,$84,$80,$84,$84,$80,$80,$84,$84,$80,$84,$80,$80,$84
  105.     dc.b $84,$80,$80,$84,$80,$84,$84,$80,$80,$84,$84,$80,$84,$80,$80,$84
  106.     dc.b $80,$84,$84,$80,$84,$80,$80,$84,$84,$80,$80,$84,$80,$84,$84,$80
  107.     dc.b $84,$80,$80,$84,$80,$84,$84,$80,$80,$84,$84,$80,$84,$80,$80,$84
  108.     dc.b $80,$84,$84,$80,$84,$80,$80,$84,$84,$80,$80,$84,$80,$84,$84,$80
  109.     dc.b $80,$84,$84,$80,$84,$80,$80,$84,$84,$80,$80,$84,$80,$84,$84,$80
  110.     dc.b $84,$80,$80,$84,$80,$84,$84,$80,$80,$84,$84,$80,$84,$80,$80,$84
  111.  
  112.     page
  113. *************************************************************************
  114. *                                    *
  115. *    Opcode simulation subroutines.                    *
  116. *                                    *
  117. *    Note:   I/O instructions are based at 68000 address $FF0000    *
  118. *        as is appropriate for the CompuPro CPU-68K card.    *
  119. *                                    *
  120. *    Also, all routines assume that the high word of D0 = 0!        *
  121. *                                    *
  122. *************************************************************************
  123.  
  124.     text
  125.     even
  126.  
  127. nop00    jmp (return)                ; 00 Nop
  128.  
  129. lxib    move.b (pseudopc)+,regc(regs)        ; 01 Lxi BC,nnnn
  130.     move.b (pseudopc)+,regb(regs)
  131.     jmp (return)
  132.  
  133. staxb    move.w regb(regs),d0            ; 02 Stax B
  134.     move.b rega,0(targbase,d0.l)
  135.     jmp (return)
  136.  
  137. inxb    inc.w regb(regs)            ; 03 Inx B
  138.     jmp (return)
  139.  
  140. inrb    inc.b regb(regs)            ; 04 Inr B
  141.     move sr,d0
  142.     and.w regcon0e,d0
  143.     and.w regcon01,regf
  144.     or.b 0(flagptr,d0.w),regf
  145.     jmp (return)
  146.  
  147. dcrb    dec.b regb(regs)            ; 05 Dcr B
  148.     move sr,d0
  149.     and.w regcon0e,d0
  150.     and.w regcon01,regf
  151.     or.b 0(flagptr,d0.w),regf
  152.     jmp (return)
  153.  
  154. mvib    move.b (pseudopc)+,regb(regs)        ; 06 Mvi b,nn
  155.     jmp (return)
  156.  
  157. rlca    rol.b #1,rega                ; 07 Rlc
  158. docyf    bcs rlc1
  159.     bclr #0,regf
  160.     jmp (return)
  161. rlc1    bset #0,regf
  162.     jmp (return)
  163.  
  164. nop08    bra illegl                ; 08 Illegal for 8080
  165.  
  166. dadb    move.w regb(regs),d0            ; 09 Dad B
  167.     add.w d0,regh(regs)
  168.     bra docyf
  169.  
  170. ldaxb    move.w regb(regs),d0            ; 0A Ldax B
  171.     move.b 0(targbase,d0.l),rega
  172.     jmp (return)
  173.  
  174. dcxb    dec.w regb(regs)            ; 0B Dcx B
  175.     jmp (return)
  176.  
  177. inrc    inc.b regc(regs)            ; 0C Inr C
  178.     move sr,d0
  179.     and.w regcon0e,d0
  180.     and.w regcon01,regf
  181.     or.b 0(flagptr,d0.w),regf
  182.     jmp (return)
  183.  
  184. dcrc    dec.b regc(regs)            ; 0D Dcr C
  185.     move sr,d0
  186.     and.w regcon0e,d0
  187.     and.w regcon01,regf
  188.     or.b 0(flagptr,d0.w),regf
  189.     jmp (return)
  190.  
  191. mvic    move.b (pseudopc)+,regc(regs)        ; 0E Mvi C
  192.     jmp (return)
  193.  
  194. rrca    ror.b #1,rega                ; 0F Rrc
  195.     bra docyf
  196.  
  197. nop10    bra illegl                ; 10 Illegal for 8080
  198.  
  199.  
  200. lxid    move.b (pseudopc)+,rege(regs)        ; 11 Lxi DE,nnnn
  201.     move.b (pseudopc)+,regd(regs)
  202.     jmp (return)
  203.  
  204.  
  205. staxd    move.w regd(regs),d0            ; 12 Stax D
  206.     move.b rega,0(targbase,d0.l)
  207.     jmp (return)
  208.  
  209.  
  210. inxd    inc.w regd(regs)            ; 13 Inx D
  211.     jmp (return)
  212.  
  213. inrd    inc.b regd(regs)            ; 14 Inr D
  214.     move sr,d0
  215.     and.w regcon0e,d0
  216.     and.w regcon01,regf
  217.     or.b 0(flagptr,d0.w),regf
  218.     jmp (return)
  219.  
  220. dcrd    dec.b regd(regs)            ; 15 Dcr D
  221.     move sr,d0
  222.     and.w regcon0e,d0
  223.     and.w regcon01,regf
  224.     or.b 0(flagptr,d0.w),regf
  225.     jmp (return)
  226.  
  227. mvid    move.b (pseudopc)+,regd(regs)        ; 16 Mvi D,nn
  228.     jmp (return)
  229.  
  230. ral    roxr.b #1,regf                ; 17 Ral
  231.     roxl.b #1,rega
  232.     roxl.b #1,regf
  233.     jmp (return)
  234.  
  235. nop18    bra illegl                ; 18 Illegal for 8080
  236.  
  237. dadd    move.w regd(regs),d0            ; 19 Dad D
  238.     add.w d0,regh(regs)
  239.     bra docyf
  240.  
  241. ldaxd    move.w regd(regs),d0            ; 1A Ldax D
  242.     move.b 0(targbase,d0.l),rega
  243.     jmp (return)
  244.  
  245. dcxd    dec.w regd(regs)            ; 1B Dcx D
  246.     jmp (return)
  247.  
  248. inre    inc.b rege(regs)            ; 1C Inr E
  249.     move sr,d0
  250.     and.w regcon0e,d0
  251.     and.w regcon01,regf
  252.     or.b 0(flagptr,d0.w),regf
  253.     jmp (return)
  254.  
  255. dcre    dec.b rege(regs)            ; 1D Dcr E
  256.     move sr,d0
  257.     and.w regcon0e,d0
  258.     and.w regcon01,regf
  259.     or.b 0(flagptr,d0.w),regf
  260.     jmp (return)
  261.  
  262. mvie    move.b (pseudopc)+,rege(regs)        ; 1E Mvi E,nn
  263.     jmp (return)
  264.  
  265. rar    roxr.b #1,regf                ; 1F Rar
  266.     roxr.b #1,rega
  267.     roxl.b #1,regf
  268.     jmp (return)
  269.  
  270. nop20    bra illegl                ; 20 Illegal for 8080
  271.  
  272. lxih    move.b (pseudopc)+,regl(regs)        ; 21 Lxi H,nnnn
  273.     move.b (pseudopc)+,regh(regs)
  274.     jmp (return)
  275.  
  276. shld    move.b 1(pseudopc),d0            ; 22 Shld addr
  277.     rol.w #8,d0
  278.     move.b (pseudopc),d0
  279.     addq.l #2,pseudopc
  280.     move.l d0,a0
  281.     adda.l targbase,a0
  282.     move.b regl(regs),(a0)+
  283.     move.b regh(regs),(a0)
  284.     jmp (return)
  285.  
  286. inxh    inc.w regh(regs)            ; 23 Inx H
  287.     jmp (return)
  288.  
  289. inrh    inc.b regh(regs)            ; 24 Inr H
  290.     move sr,d0
  291.     and.w regcon0e,d0
  292.     and.w regcon01,regf
  293.     or.b 0(flagptr,d0.w),regf
  294.     jmp (return)
  295.  
  296. dcrh    dec.b regh(regs)            ; 25 Dcr H
  297.     move sr,d0
  298.     and.w regcon0e,d0
  299.     and.w regcon01,regf
  300.     or.b 0(flagptr,d0.w),regf
  301.     jmp (return)
  302.  
  303. mvih    move.b (pseudopc)+,regh(regs)        ; 26 Mvi H,nn
  304.     jmp (return)
  305.  
  306. daa    move.b regop3(regs),d0            ; 27 Daa
  307.     roxr.b d0
  308.     move.b regop2(regs),d0
  309.     move.b regop1(regs),d1
  310.     swap regcon0e
  311.     move.b rega,regcon0e
  312.     and.b regcon0f,regcon0e
  313.     cmp.b #9,regcon0e
  314.     bhi halfcy
  315.     and.b regcon0f,d0
  316.     and.b regcon0f,d1
  317.     ori.b #$f0,d1
  318.     addx.b d0,d1
  319.     bcc nohalf
  320. halfcy    add.b #6,rega
  321.     bcs fullcy
  322. nohalf    btst #0,regf
  323.     bnz fullcy
  324.     move.b rega,regcon0e
  325.     and.b #$f0,regcon0e
  326.     cmp.b #$90,regcon0e
  327.     bls nofull
  328. fullcy    add.b #$60,rega
  329.     ori #1,ccr
  330. enddaa    move sr,regf
  331.     swap regcon0e
  332.     and.w regcon0f,regf
  333.     move.b 0(flagptr,regf.w),regf
  334.     jmp (return)
  335. nofull    tst.b rega
  336.     bra enddaa
  337.  
  338. nop28    bra illegl                ; 28 Illegal for 8080
  339.  
  340.  
  341. dadh    move.w regh(regs),d0            ; 29 Dad H
  342.     add.w d0,regh(regs)
  343.     bra docyf
  344.  
  345. lhld    move.b 1(pseudopc),d0            ; 2A Lhld addr
  346.     rol.w #8,d0
  347.     move.b (pseudopc),d0
  348.     addq.l #2,pseudopc
  349.     move.l d0,a0
  350.     adda.l targbase,a0
  351.     move.b (a0)+,regl(regs)
  352.     move.b (a0),regh(regs)
  353.     jmp (return)
  354.  
  355. dcxh    dec.w regh(regs)            ; 2B Dcx H
  356.     jmp (return)
  357.  
  358. inrl    inc.b regl(regs)            ; 2C Inr L
  359.     move sr,d0
  360.     and.w regcon0e,d0
  361.     and.w regcon01,regf
  362.     or.b 0(flagptr,d0.w),regf
  363.     jmp (return)
  364.  
  365. dcrl    dec.b regl(regs)            ; 2D Dcr L
  366.     move sr,d0
  367.     and.w regcon0e,d0
  368.     and.w regcon01,regf
  369.     or.b 0(flagptr,d0.w),regf
  370.     jmp (return)
  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. nop30    bra illegl                ; 30 Illegal for 8080
  379.  
  380. lxis    move.b 1(pseudopc),d0            ; 31 Lxi S,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 S
  396.     jmp (return)
  397.  
  398. inrm    move.w regh(regs),d0            ; 34 Inr M
  399.     inc.b 0(targbase,d0.l)
  400.     move sr,d0
  401.     and.w regcon0e,d0
  402.     and.w regcon01,regf
  403.     or.b 0(flagptr,d0.w),regf
  404.     jmp (return)
  405.  
  406. dcrm    move.w regh(regs),d0            ; 35 Dcr M
  407.     dec.b 0(targbase,d0.l)
  408.     move sr,d0
  409.     and.w regcon0e,d0
  410.     and.w regcon01,regf
  411.     or.b 0(flagptr,d0.w),regf
  412.     jmp (return)
  413.  
  414. mvim    move.w regh(regs),d0            ; 36 Mvi M,nn
  415.     move.b (pseudopc)+,0(targbase,d0.l)
  416.     jmp (return)
  417.  
  418. stc    bset #0,regf                ; 37 Stc
  419.     jmp (return)
  420.  
  421. nop38    bra illegl                ; 38 Illegal for 8080
  422.  
  423. dads    move.l pseudosp,d0            ; 39 Dad S
  424.     sub.l targbase,d0
  425.     add.w d0,regh(regs)
  426.     bra docyf
  427.  
  428. lda    move.b 1(pseudopc),d0            ; 3A Lda addr
  429.     rol.w #8,d0
  430.     move.b (pseudopc),d0
  431.     addq.l #2,pseudopc
  432.     move.b 0(targbase,d0.l),rega
  433.     jmp (return)
  434.  
  435. dcxs    subq.l #1,pseudosp            ; 3B Dcx S
  436.     jmp (return)
  437.  
  438. inra    move.b rega,regop1(regs)        ; 3C Inr A
  439.     move.b regcon01,regop2(regs)
  440.     move.b regcon0e,regop3(regs)
  441.     inc.b rega
  442.     move sr,d0
  443.     and.w regcon0e,d0
  444.     and.w regcon01,regf
  445.     or.b 0(flagptr,d0.w),regf
  446.     jmp (return)
  447.  
  448. dcra    dec.b rega                ; 3D Dcr A
  449.     move sr,d0
  450.     and.w regcon0e,d0
  451.     and.w regcon01,regf
  452.     or.b 0(flagptr,d0.w),regf
  453.     jmp (return)
  454.  
  455. mvia    move.b (pseudopc)+,rega            ; 3E Mvi A,nn
  456.     jmp (return)
  457.  
  458. cmc    bchg #0,regf                ; 3F Cmc
  459.     jmp (return)
  460.  
  461. movebb    move.b regb(regs),regb(regs)        ; 40 Mov B,B
  462.     jmp (return)
  463.  
  464. movebc    move.b regc(regs),regb(regs)        ; 41 Mov B,C
  465.     jmp (return)
  466.  
  467. movebd    move.b regd(regs),regb(regs)        ; 42 Mov B,D
  468.     jmp (return)
  469.  
  470. movebe    move.b rege(regs),regb(regs)        ; 43 Mov B,E
  471.     jmp (return)
  472.  
  473. movebh    move.b regh(regs),regb(regs)        ; 44 Mov B,H
  474.     jmp (return)
  475.  
  476. movebl    move.b regl(regs),regb(regs)        ; 45 Mov B,L
  477.     jmp (return)
  478.  
  479. movebm    move.w regh(regs),d0            ; 46 Mov B,M
  480.     move.b 0(targbase,d0.l),regb(regs)
  481.     jmp (return)
  482.  
  483. moveba    move.b rega,regb(regs)            ; 47 Mov B,A
  484.     jmp (return)
  485.  
  486. movecb    move.b regb(regs),regc(regs)        ; 48 Mov C,B
  487.     jmp (return)
  488.  
  489. movecc    move.b regc(regs),regc(regs)        ; 49 Mov C,C
  490.     jmp (return)
  491.  
  492. movecd    move.b regd(regs),regc(regs)        ; 4A Mov C,D
  493.     jmp (return)
  494.  
  495. movece    move.b rege(regs),regc(regs)        ; 4B Mov C,E
  496.     jmp (return)
  497.  
  498. movech    move.b regh(regs),regc(regs)        ; 4C Mov C,H
  499.     jmp (return)
  500.  
  501. movecl    move.b regl(regs),regc(regs)        ; 4D Mov C,L
  502.     jmp (return)
  503.  
  504. movecm    move.w regh(regs),d0            ; 4E Mov C,M
  505.     move.b 0(targbase,d0.l),regc(regs)
  506.     jmp (return)
  507.  
  508. moveca    move.b rega,regc(regs)            ; 4F Mov C,A
  509.     jmp (return)
  510.  
  511. movedb    move.b regb(regs),regd(regs)        ; 50 Mov D,B
  512.     jmp (return)
  513.  
  514. movedc    move.b regc(regs),regd(regs)        ; 51 Mov D,C
  515.     jmp (return)
  516.  
  517. movedd    move.b regd(regs),regd(regs)        ; 52 Mov D,D
  518.     jmp (return)
  519.  
  520. movede    move.b rege(regs),regd(regs)        ; 53 Mov D,E
  521.     jmp (return)
  522.  
  523. movedh    move.b regh(regs),regd(regs)        ; 54 Mov D,H
  524.     jmp (return)
  525.  
  526. movedl    move.b regl(regs),regd(regs)        ; 55 Mov D,L
  527.     jmp (return)
  528.  
  529. movedm    move.w regh(regs),d0            ; 56 Mov D,M
  530.     move.b 0(targbase,d0.l),regd(regs)
  531.     jmp (return)
  532.  
  533. moveda    move.b rega,regd(regs)            ; 57 Mov D,A
  534.     jmp (return)
  535.  
  536. moveeb    move.b regb(regs),rege(regs)        ; 58 Mov E,B
  537.     jmp (return)
  538.  
  539. moveec    move.b regc(regs),rege(regs)        ; 59 Mov E,C
  540.     jmp (return)
  541.  
  542. moveed    move.b regd(regs),rege(regs)        ; 5A Mov E,D
  543.     jmp (return)
  544.  
  545. moveee    move.b rege(regs),rege(regs)        ; 5B Mov E,E
  546.     jmp (return)
  547.  
  548. moveeh    move.b regh(regs),rege(regs)        ; 5C Mov E,H
  549.     jmp (return)
  550.  
  551. moveel    move.b regl(regs),rege(regs)        ; 5D Mov E,L
  552.     jmp (return)
  553.  
  554. moveem    move.w regh(regs),d0            ; 5E Mov E,M
  555.     move.b 0(targbase,d0.l),rege(regs)
  556.     jmp (return)
  557.  
  558. moveea    move.b rega,rege(regs)            ; 5F Mov E,A
  559.     jmp (return)
  560.  
  561. movehb    move.b regb(regs),regh(regs)        ; 60 Mov H,B
  562.     jmp (return)
  563.  
  564. movehc    move.b regc(regs),regh(regs)        ; 61 Mov H,C
  565.     jmp (return)
  566.  
  567. movehd    move.b regd(regs),regh(regs)        ; 62 Mov H,D
  568.     jmp (return)
  569.  
  570. movehe    move.b rege(regs),regh(regs)        ; 63 Mov H,E
  571.     jmp (return)
  572.  
  573. movehh    move.b regh(regs),regh(regs)        ; 64 Mov H,H
  574.     jmp (return)
  575.  
  576. movehl    move.b regl(regs),regh(regs)        ; 65 Mov H,L
  577.     jmp (return)
  578.  
  579. movehm    move.w regh(regs),d0            ; 66 Mov H,M
  580.     move.b 0(targbase,d0.l),regh(regs)
  581.     jmp (return)
  582.  
  583. moveha    move.b rega,regh(regs)            ; 67 Mov H,A
  584.     jmp (return)
  585.  
  586. movelb    move.b regb(regs),regl(regs)        ; 68 Mov L,B
  587.     jmp (return)
  588.  
  589. movelc    move.b regc(regs),regl(regs)        ; 69 Mov L,C
  590.     jmp (return)
  591.  
  592. moveld    move.b regd(regs),regl(regs)        ; 6A Mov L,D
  593.     jmp (return)
  594.  
  595. movele    move.b rege(regs),regl(regs)        ; 6B Mov L,E
  596.     jmp (return)
  597.  
  598. movelh    move.b regh(regs),regl(regs)        ; 6C Mov L,H
  599.     jmp (return)
  600.  
  601. movell    move.b regl(regs),regl(regs)        ; 6D Mov L,L
  602.     jmp (return)
  603.  
  604. movelm    move.w regh(regs),d0            ; 6E Mov L,M
  605.     move.b 0(targbase,d0.l),regl(regs)
  606.     jmp (return)
  607.  
  608. movela    move.b rega,regl(regs)            ; 6F Mov L,A
  609.     jmp (return)
  610.  
  611. movemb    move.w regh(regs),d0            ; 70 Mov M,B
  612.     move.b regb(regs),0(targbase,d0.l)
  613.     jmp (return)
  614.  
  615. movemc    move.w regh(regs),d0            ; 71 Mov M,C
  616.     move.b regc(regs),0(targbase,d0.l)
  617.     jmp (return)
  618.  
  619. movemd    move.w regh(regs),d0            ; 72 Mov M,D
  620.     move.b regd(regs),0(targbase,d0.l)
  621.     jmp (return)
  622.  
  623. moveme    move.w regh(regs),d0            ; 73 Mov M,E
  624.     move.b rege(regs),0(targbase,d0.l)
  625.     jmp (return)
  626.  
  627. movemh    move.w regh(regs),d0            ; 74 Mov M,H
  628.     move.b regh(regs),0(targbase,d0.l)
  629.     jmp (return)
  630.  
  631. moveml    move.w regh(regs),d0            ; 75 Mov M,L
  632.     move.b regl(regs),0(targbase,d0.l)
  633.     jmp (return)
  634.  
  635. halt    bsr service                ; 76 Hlt
  636.     jmp (return)
  637.  
  638. movema    move.w regh(regs),d0            ; 77 Mov M,A
  639.     move.b rega,0(targbase,d0.l)
  640.     jmp (return)
  641.  
  642. moveab    move.b regb(regs),rega            ; 78 Mov A,B
  643.     jmp (return)
  644.  
  645. moveac    move.b regc(regs),rega            ; 79 Mov A,C
  646.     jmp (return)
  647.  
  648. movead    move.b regd(regs),rega            ; 7A Mov A,D
  649.     jmp (return)
  650.  
  651. moveae    move.b rege(regs),rega            ; 7B Mov A,E
  652.     jmp (return)
  653.  
  654. moveah    move.b regh(regs),rega            ; 7C Mov A,H
  655.     jmp (return)
  656.  
  657. moveal    move.b regl(regs),rega            ; 7D Mov A,L
  658.     jmp (return)
  659.  
  660. moveam    move.w regh(regs),d0            ; 7E Mov A,M
  661.     move.b 0(targbase,d0.l),rega
  662.     jmp (return)
  663.  
  664. moveaa    jmp (return)                ; 7F Mov A,A
  665.  
  666. addb    move.b regb(regs),d0            ; 80 Add B
  667.     move.b d0,regop1(regs)
  668.     move.b rega,regop2(regs)
  669.     move.b regcon0e,regop3(regs)
  670.     add.b d0,rega
  671.     move sr,d0
  672.     and.w regcon0f,d0
  673.     move.b 0(flagptr,d0.w),regf
  674.     jmp (return)
  675.  
  676. addc    move.b regc(regs),d0            ; 81 Add C
  677.     move.b d0,regop1(regs)
  678.     move.b rega,regop2(regs)
  679.     move.b regcon0e,regop3(regs)
  680.     add.b d0,rega
  681.     move sr,d0
  682.     and.w regcon0f,d0
  683.     move.b 0(flagptr,d0.w),regf
  684.     jmp (return)
  685.  
  686. addd    move.b regd(regs),d0            ; 82 Add D
  687.     move.b d0,regop1(regs)
  688.     move.b rega,regop2(regs)
  689.     move.b regcon0e,regop3(regs)
  690.     add.b d0,rega
  691.     move sr,d0
  692.     and.w regcon0f,d0
  693.     move.b 0(flagptr,d0.w),regf
  694.     jmp (return)
  695.  
  696. adde    move.b rege(regs),d0            ; 83 Add E
  697.     move.b d0,regop1(regs)
  698.     move.b rega,regop2(regs)
  699.     move.b regcon0e,regop3(regs)
  700.     add.b d0,rega
  701.     move sr,d0
  702.     and.w regcon0f,d0
  703.     move.b 0(flagptr,d0.w),regf
  704.     jmp (return)
  705.  
  706. addh    move.b regh(regs),d0            ; 84 Add H
  707.     move.b d0,regop1(regs)
  708.     move.b rega,regop2(regs)
  709.     move.b regcon0e,regop3(regs)
  710.     add.b d0,rega
  711.     move sr,d0
  712.     and.w regcon0f,d0
  713.     move.b 0(flagptr,d0.w),regf
  714.     jmp (return)
  715.  
  716. addl    move.b regl(regs),d0            ; 85 Add L
  717.     move.b d0,regop1(regs)
  718.     move.b rega,regop2(regs)
  719.     move.b regcon0e,regop3(regs)
  720.     add.b d0,rega
  721.     move sr,d0
  722.     and.w regcon0f,d0
  723.     move.b 0(flagptr,d0.w),regf
  724.     jmp (return)
  725.  
  726. addm    move.w regh(regs),d0            ; 86 Add M
  727.     move.b 0(targbase,d0.l),d0
  728.     move.b d0,regop1(regs)
  729.     move.b rega,regop2(regs)
  730.     move.b regcon0e,regop3(regs)
  731.     add.b d0,rega
  732.     move sr,d0
  733.     and.w regcon0f,d0
  734.     move.b 0(flagptr,d0.w),regf
  735.     jmp (return)
  736.  
  737. addaa    move.b rega,regop1(regs)        ; 87 Add A
  738.     move.b rega,regop2(regs)
  739.     move.b regcon0e,regop3(regs)
  740.     add.b rega,rega
  741.     move sr,d0
  742.     and.w regcon0f,d0
  743.     move.b 0(flagptr,d0.w),regf
  744.     jmp (return)
  745.  
  746. adcb    move.b regf,regop3(regs)        ; 88 Adc B
  747.     asr.b #1,regf
  748.     move.b regb(regs),d0
  749.     move.b d0,regop1(regs)
  750.     move.b rega,regop2(regs)
  751.     moveq #0,d1
  752.     addx.b d0,rega
  753.     move sr,d0
  754.     and.w regcon0f,d0
  755.     move.b 0(flagptr,d0.w),regf
  756.     jmp (return)
  757.  
  758. adcc    move.b regf,regop3(regs)        ; 89 Adc C
  759.     asr.b #1,regf
  760.     move.b regc(regs),d0
  761.     move.b d0,regop1(regs)
  762.     move.b rega,regop2(regs)
  763.     moveq #0,d1
  764.     addx.b d0,rega
  765.     move sr,d0
  766.     and.w regcon0f,d0
  767.     move.b 0(flagptr,d0.w),regf
  768.     jmp (return)
  769.  
  770. adcd    move.b regf,regop3(regs)        ; 8A Adc D
  771.     asr.b #1,regf
  772.     move.b regd(regs),d0
  773.     move.b d0,regop1(regs)
  774.     move.b rega,regop2(regs)
  775.     moveq #0,d1
  776.     addx.b d0,rega
  777.     move sr,d0
  778.     and.w regcon0f,d0
  779.     move.b 0(flagptr,d0.w),regf
  780.     jmp (return)
  781.  
  782. adce    move.b regf,regop3(regs)        ; 8B Adc E
  783.     asr.b #1,regf
  784.     move.b rege(regs),d0
  785.     move.b d0,regop1(regs)
  786.     move.b rega,regop2(regs)
  787.     moveq #0,d1
  788.     addx.b d0,rega
  789.     move sr,d0
  790.     and.w regcon0f,d0
  791.     move.b 0(flagptr,d0.w),regf
  792.     jmp (return)
  793.  
  794. adch    move.b regf,regop3(regs)        ; 8C Adc H
  795.     asr.b #1,regf
  796.     move.b regh(regs),d0
  797.     move.b d0,regop1(regs)
  798.     move.b rega,regop2(regs)
  799.     moveq #0,d1
  800.     addx.b d0,rega
  801.     move sr,d0
  802.     and.w regcon0f,d0
  803.     move.b 0(flagptr,d0.w),regf
  804.     jmp (return)
  805.  
  806. adcl    move.b regf,regop3(regs)        ; 8D Adc L
  807.     asr.b #1,regf
  808.     move.b regl(regs),d0
  809.     move.b d0,regop1(regs)
  810.     move.b rega,regop2(regs)
  811.     moveq #0,d1
  812.     addx.b d0,rega
  813.     move sr,d0
  814.     and.w regcon0f,d0
  815.     move.b 0(flagptr,d0.w),regf
  816.     jmp (return)
  817.  
  818. adcm    move.b regf,regop3(regs)        ; 8E Adc M
  819.     move.w regh(regs),d0
  820.     move.l d0,a0
  821.     adda.l targbase,a0
  822.     asr.b #1,regf
  823.     move.b (a0),d0
  824.     move.b d0,regop1(regs)
  825.     move.b rega,regop2(regs)
  826.     moveq #0,d1
  827.     addx.b d0,rega
  828.     move sr,d0
  829.     and.w regcon0f,d0
  830.     move.b 0(flagptr,d0.w),regf
  831.     jmp (return)
  832.  
  833. adca    move.b regf,regop3(regs)        ; 8F Adc A
  834.     asr.b #1,regf
  835.     move.b rega,d0
  836.     move.b d0,regop1(regs)
  837.     move.b rega,regop2(regs)
  838.     moveq #0,d1
  839.     addx.b d0,rega
  840.     move sr,d0
  841.     and.w regcon0f,d0
  842.     move.b 0(flagptr,d0.w),regf
  843.     jmp (return)
  844.  
  845. subb    move.b regb(regs),d0            ; 90 Sub B
  846.     sub.b d0,rega
  847.     move sr,d0
  848.     and.w regcon0f,d0
  849.     move.b 0(flagptr,d0.w),regf
  850.     jmp (return)
  851.  
  852. subc    move.b regc(regs),d0            ; 91 Sub C
  853.     sub.b d0,rega
  854.     move sr,d0
  855.     and.w regcon0f,d0
  856.     move.b 0(flagptr,d0.w),regf
  857.     jmp (return)
  858.  
  859. subd    move.b regd(regs),d0            ; 92 Sub D
  860.     sub.b d0,rega
  861.     move sr,d0
  862.     and.w regcon0f,d0
  863.     move.b 0(flagptr,d0.w),regf
  864.     jmp (return)
  865.  
  866. sube    move.b rege(regs),d0            ; 93 Sub E
  867.     sub.b d0,rega
  868.     move sr,d0
  869.     and.w regcon0f,d0
  870.     move.b 0(flagptr,d0.w),regf
  871.     jmp (return)
  872.  
  873. subh    move.b regh(regs),d0            ; 94 Sub H
  874.     sub.b d0,rega
  875.     move sr,d0
  876.     and.w regcon0f,d0
  877.     move.b 0(flagptr,d0.w),regf
  878.     jmp (return)
  879.  
  880. subl    move.b regl(regs),d0            ; 95 Sub L
  881.     sub.b d0,rega
  882.     move sr,d0
  883.     and.w regcon0f,d0
  884.     move.b 0(flagptr,d0.w),regf
  885.     jmp (return)
  886.  
  887. subm    move.w regh(regs),d0            ; 96 Sub M
  888.     move.b 0(targbase,d0.l),d0
  889.     sub.b d0,rega
  890.     move sr,d0
  891.     and.w regcon0f,d0
  892.     move.b 0(flagptr,d0.w),regf
  893.     jmp (return)
  894.  
  895. subaa    move.b rega,d0                ; 97 Sub A
  896.     sub.b d0,rega
  897.     move sr,d0
  898.     and.w regcon0f,d0
  899.     move.b 0(flagptr,d0.w),regf
  900.     jmp (return)
  901.  
  902. sbbb    asr.b #1,regf                ; 98 Sbb B
  903.     move.b regb(regs),d0
  904.     moveq #0,d1
  905.     subx.b d0,rega
  906.     move sr,d0
  907.     and.w regcon0f,d0
  908.     move.b 0(flagptr,d0.w),regf
  909.     jmp (return)
  910.  
  911. sbbc    asr.b #1,regf                ; 99 Sbb C
  912.     move.b regc(regs),d0
  913.     moveq #0,d1
  914.     subx.b d0,rega
  915.     move sr,d0
  916.     and.w regcon0f,d0
  917.     move.b 0(flagptr,d0.w),regf
  918.     jmp (return)
  919.  
  920. sbbd    asr.b #1,regf                ; 9A Sbb D
  921.     move.b regd(regs),d0
  922.     moveq #0,d1
  923.     subx.b d0,rega
  924.     move sr,d0
  925.     and.w regcon0f,d0
  926.     move.b 0(flagptr,d0.w),regf
  927.     jmp (return)
  928.  
  929. sbbe    asr.b #1,regf                ; 9B Sbb E
  930.     move.b rege(regs),d0
  931.     moveq #0,d1
  932.     subx.b d0,rega
  933.     move sr,d0
  934.     and.w regcon0f,d0
  935.     move.b 0(flagptr,d0.w),regf
  936.     jmp (return)
  937.  
  938. sbbh    asr.b #1,regf                ; 9C Sbb H
  939.     move.b regh(regs),d0
  940.     moveq #0,d1
  941.     subx.b d0,rega
  942.     move sr,d0
  943.     and.w regcon0f,d0
  944.     move.b 0(flagptr,d0.w),regf
  945.     jmp (return)
  946.  
  947. sbbl    asr.b #1,regf                ; 9D Sbb L
  948.     move.b regl(regs),d0
  949.     moveq #0,d1
  950.     subx.b d0,rega
  951.     move sr,d0
  952.     and.w regcon0f,d0
  953.     move.b 0(flagptr,d0.w),regf
  954.     jmp (return)
  955.  
  956. sbbm    move.w regh(regs),d0            ; 9E Sbb M
  957.     move.l d0,a0
  958.     adda.l targbase,a0
  959.     asr.b #1,regf
  960.     move.b (a0),d0
  961.     moveq #0,d1
  962.     subx.b d0,rega
  963.     move sr,d0
  964.     and.w regcon0f,d0
  965.     move.b 0(flagptr,d0.w),regf
  966.     jmp (return)
  967.  
  968. sbba    asr.b #1,regf                ; 9F Sbb A
  969.     move.b rega,d0
  970.     moveq #0,d1
  971.     subx.b d0,rega
  972.     move sr,d0
  973.     and.w regcon0f,d0
  974.     move.b 0(flagptr,d0.w),regf
  975.     jmp (return)
  976.  
  977. andb    move.b regb(regs),d0            ; A0 Ana B
  978.     and.b rega,d0
  979.     move.b d0,rega
  980.     and.w regconff,d0
  981.     move.b 16(flagptr,d0.w),regf
  982.     jmp (return)
  983.  
  984. andc    move.b regc(regs),d0            ; A1 Ana C
  985.     and.b rega,d0
  986.     move.b d0,rega
  987.     and.w regconff,d0
  988.     move.b 16(flagptr,d0.w),regf
  989.     jmp (return)
  990.  
  991. andd    move.b regd(regs),d0            ; A2 Ana D
  992.     and.b rega,d0
  993.     move.b d0,rega
  994.     and.w regconff,d0
  995.     move.b 16(flagptr,d0.w),regf
  996.     jmp (return)
  997.  
  998. ande    move.b rege(regs),d0            ; A3 Ana E
  999.     and.b rega,d0
  1000.     move.b d0,rega
  1001.     and.w regconff,d0
  1002.     move.b 16(flagptr,d0.w),regf
  1003.     jmp (return)
  1004.  
  1005. andh    move.b regh(regs),d0            ; A4 Ana H
  1006.     and.b rega,d0
  1007.     move.b d0,rega
  1008.     and.w regconff,d0
  1009.     move.b 16(flagptr,d0.w),regf
  1010.     jmp (return)
  1011.  
  1012. andl    move.b regl(regs),d0            ; A5 Ana L
  1013.     and.b rega,d0
  1014.     move.b d0,rega
  1015.     and.w regconff,d0
  1016.     move.b 16(flagptr,d0.w),regf
  1017.     jmp (return)
  1018.  
  1019. andm    move.w regh(regs),d0            ; A6 Ana M
  1020.     move.b 0(targbase,d0.l),d0
  1021.     and.b rega,d0
  1022.     move.b d0,rega
  1023.     and.w regconff,d0
  1024.     move.b 16(flagptr,d0.w),regf
  1025.     jmp (return)
  1026.  
  1027. anda    move.b rega,d0                ; A7 Ana A
  1028.     and.w regconff,d0
  1029.     move.b 16(flagptr,d0.w),regf
  1030.     jmp (return)
  1031.  
  1032. xrab    move.b regb(regs),d0            ; A8 Xra B
  1033.     eor.b d0,rega
  1034.     move.b rega,d0
  1035.     and.w regconff,d0
  1036.     move.b 16(flagptr,d0.w),regf
  1037.     jmp (return)
  1038.  
  1039. xrac    move.b regc(regs),d0            ; AA Xra C
  1040.     eor.b d0,rega
  1041.     move.b rega,d0
  1042.     and.w regconff,d0
  1043.     move.b 16(flagptr,d0.w),regf
  1044.     jmp (return)
  1045.  
  1046. xrad    move.b regd(regs),d0            ; AA Xra D
  1047.     eor.b d0,rega
  1048.     move.b rega,d0
  1049.     and.w regconff,d0
  1050.     move.b 16(flagptr,d0.w),regf
  1051.     jmp (return)
  1052.  
  1053. xrae    move.b rege(regs),d0            ; AB Xra E
  1054.     eor.b d0,rega
  1055.     move.b rega,d0
  1056.     and.w regconff,d0
  1057.     move.b 16(flagptr,d0.w),regf
  1058.     jmp (return)
  1059.  
  1060. xrah    move.b regh(regs),d0            ; AC Xra H
  1061.     eor.b d0,rega
  1062.     move.b rega,d0
  1063.     and.w regconff,d0
  1064.     move.b 16(flagptr,d0.w),regf
  1065.     jmp (return)
  1066.  
  1067. xral    move.b regl(regs),d0            ; AD Xra L
  1068.     eor.b d0,rega
  1069.     move.b rega,d0
  1070.     and.w regconff,d0
  1071.     move.b 16(flagptr,d0.w),regf
  1072.     jmp (return)
  1073.  
  1074. xram    move.w regh(regs),d0            ; AE Xra M
  1075.     move.b 0(targbase,d0.l),d0
  1076.     eor.b d0,rega
  1077.     move.b rega,d0
  1078.     and.w regconff,d0
  1079.     move.b 16(flagptr,d0.w),regf
  1080.     jmp (return)
  1081.  
  1082. xraa    moveq #0,rega                ; AF Xra A
  1083.     move.b 16(flagptr),regf
  1084.     jmp (return)
  1085.  
  1086. orab    move.b regb(regs),d0            ; B0 Ora B
  1087.     or.b rega,d0
  1088.     move.b d0,rega
  1089.     and.w regconff,d0
  1090.     move.b 16(flagptr,d0.w),regf
  1091.     jmp (return)
  1092.  
  1093. orac    move.b regc(regs),d0            ; B1 Ora C
  1094.     or.b rega,d0
  1095.     move.b d0,rega
  1096.     and.w regconff,d0
  1097.     move.b 16(flagptr,d0.w),regf
  1098.     jmp (return)
  1099.  
  1100. orad    move.b regd(regs),d0            ; B2 Ora D
  1101.     or.b rega,d0
  1102.     move.b d0,rega
  1103.     and.w regconff,d0
  1104.     move.b 16(flagptr,d0.w),regf
  1105.     jmp (return)
  1106.  
  1107. orae    move.b rege(regs),d0            ; B3 Ora E
  1108.     or.b rega,d0
  1109.     move.b d0,rega
  1110.     and.w regconff,d0
  1111.     move.b 16(flagptr,d0.w),regf
  1112.     jmp (return)
  1113.  
  1114. orah    move.b regh(regs),d0            ; B4 Ora H
  1115.     or.b rega,d0
  1116.     move.b d0,rega
  1117.     and.w regconff,d0
  1118.     move.b 16(flagptr,d0.w),regf
  1119.     jmp (return)
  1120.  
  1121. oral    move.b regl(regs),d0            ; B5 Ora L
  1122.     or.b rega,d0
  1123.     move.b d0,rega
  1124.     and.w regconff,d0
  1125.     move.b 16(flagptr,d0.w),regf
  1126.     jmp (return)
  1127.  
  1128. oram    move.w regh(regs),d0            ; B6 Ora M
  1129.     move.b 0(targbase,d0.l),d0
  1130.     or.b rega,d0
  1131.     move.b d0,rega
  1132.     and.w regconff,d0
  1133.     move.b 16(flagptr,d0.w),regf
  1134.     jmp (return)
  1135.  
  1136. oraa    move.b rega,d0                ; B7 Ora A
  1137.     and.w regconff,d0
  1138.     move.b 16(flagptr,d0.w),regf
  1139.     jmp (return)
  1140.  
  1141.  
  1142. cmpb    cmp.b regb(regs),rega            ; B8 Cmp B
  1143.     move sr,d0
  1144.     and.w regcon0f,d0
  1145.     move.b 0(flagptr,d0.w),regf
  1146.     jmp (return)
  1147.  
  1148. cmpc    cmp.b regc(regs),rega            ; BB Cmp C
  1149.     move sr,d0
  1150.     and.w regcon0f,d0
  1151.     move.b 0(flagptr,d0.w),regf
  1152.     jmp (return)
  1153.  
  1154. cmpd    cmp.b regd(regs),rega            ; BA Cmp D
  1155.     move sr,d0
  1156.     and.w regcon0f,d0
  1157.     move.b 0(flagptr,d0.w),regf
  1158.     jmp (return)
  1159.  
  1160. cmpe    cmp.b rege(regs),rega            ; BB Cmp E
  1161.     move sr,d0
  1162.     and.w regcon0f,d0
  1163.     move.b 0(flagptr,d0.w),regf
  1164.     jmp (return)
  1165.  
  1166. cmph    cmp.b regh(regs),rega            ; BC Cmp H
  1167.     move sr,d0
  1168.     and.w regcon0f,d0
  1169.     move.b 0(flagptr,d0.w),regf
  1170.     jmp (return)
  1171.  
  1172. cmpl    cmp.b regl(regs),rega            ; BD Cmp L
  1173.     move sr,d0
  1174.     and.w regcon0f,d0
  1175.     move.b 0(flagptr,d0.w),regf
  1176.     jmp (return)
  1177.  
  1178. cmpam    move.w regh(regs),d0            ; BE Cmp M
  1179.     move.l d0,a0
  1180.     adda.l targbase,a0
  1181.     cmp.b (a0),rega
  1182.     move sr,d0
  1183.     and.w regcon0f,d0
  1184.     move.b 0(flagptr,d0.w),regf
  1185.     jmp (return)
  1186.  
  1187. cmpaa    cmp.b rega,rega                ; BF Cmp A
  1188.     move sr,d0
  1189.     and.w regcon0f,d0
  1190.     move.b 0(flagptr,d0.w),regf
  1191.     jmp (return)
  1192.  
  1193. rnz    btst #6,regf                ; C0 Rnz
  1194.     bne mloop
  1195. ret    move.b 1(pseudosp),d0            ; C9 Ret
  1196.     rol.w #8,d0
  1197.     move.b (pseudosp),d0
  1198.     addq.l #2,pseudosp
  1199.     lea.l 0(targbase,d0.l),pseudopc
  1200.     jmp (return)
  1201.  
  1202.  
  1203. popb    move.b (pseudosp)+,regc(regs)        ; C1 Pop B
  1204.     move.b (pseudosp)+,regb(regs)
  1205.     jmp (return)
  1206.  
  1207. jnz    move.b 1(pseudopc),d0            ; C2 Jnz addr
  1208.     rol.w #8,d0
  1209.     move.b (pseudopc),d0
  1210.     addq.l #2,pseudopc
  1211.     btst #6,regf
  1212.     bne mloop
  1213.     lea.l 0(targbase,d0.l),pseudopc
  1214.     jmp (return)
  1215.  
  1216. jmpa    move.b 1(pseudopc),d0            ; C3 Jmp addr
  1217.     rol.w #8,d0
  1218.     move.b (pseudopc),d0
  1219.     addq.l #2,pseudopc
  1220.     lea.l 0(targbase,d0.l),pseudopc
  1221.     jmp (return)
  1222.  
  1223. cnz    move.b 1(pseudopc),d0            ; C4 Cnz addr
  1224.     rol.w #8,d0
  1225.     move.b (pseudopc),d0
  1226.     addq.l #2,pseudopc
  1227.     btst #6,regf
  1228.     bne mloop
  1229.     move.l pseudopc,d1
  1230.     sub.l targbase,d1
  1231.     move.b d1,-2(pseudosp)
  1232.     rol.w #8,d1
  1233.     move.b d1,-1(pseudosp)
  1234.     subq.l #2,pseudosp
  1235.     lea.l 0(targbase,d0.l),pseudopc
  1236.     jmp (return)
  1237.  
  1238. pushb    move.b regb(regs),-(pseudosp)        ; C5 Push B
  1239.     move.b regc(regs),-(pseudosp)
  1240.     jmp (return)
  1241.  
  1242. adi    move.b (pseudopc)+,d0            ; C6 Adi nn
  1243.     move.b d0,regop1(regs)
  1244.     move.b rega,regop2(regs)
  1245.     move.b regcon0e,regop3(regs)
  1246.     add.b d0,rega
  1247.     move sr,d0
  1248.     and.w regcon0f,d0
  1249.     move.b 0(flagptr,d0.w),regf
  1250.     jmp (return)
  1251.  
  1252. rst0    move.l pseudopc,d1            ; C7 Rst 0
  1253.     sub.l targbase,d1
  1254.     move.b d1,-2(pseudosp)
  1255.     rol.w #8,d1
  1256.     move.b d1,-1(pseudosp)
  1257.     subq.l #2,pseudosp
  1258.     move.l targbase,pseudopc
  1259.     jmp (return)
  1260.  
  1261. rz    btst #6,regf                ; C8 Rz
  1262.     beq mloop
  1263.     move.b 1(pseudosp),d0
  1264.     rol.w #8,d0
  1265.     move.b (pseudosp),d0
  1266.     addq.l #2,pseudosp
  1267.     lea.l 0(targbase,d0.l),pseudopc
  1268.     jmp (return)
  1269.  
  1270. jz    move.b 1(pseudopc),d0            ; CA Jz addr
  1271.     rol.w #8,d0
  1272.     move.b (pseudopc),d0
  1273.     addq.l #2,pseudopc
  1274.     btst #6,regf
  1275.     beq mloop
  1276.     lea.l 0(targbase,d0.l),pseudopc
  1277.     jmp (return)
  1278.  
  1279. nopCB    bra illegl                ; CB Illegal for 8080
  1280.  
  1281.  
  1282. cz    move.b 1(pseudopc),d0            ; CC Cz addr
  1283.     rol.w #8,d0
  1284.     move.b (pseudopc),d0
  1285.     addq.l #2,pseudopc
  1286.     btst #6,regf
  1287.     beq mloop
  1288.     move.l pseudopc,d1
  1289.     sub.l targbase,d1
  1290.     move.b d1,-2(pseudosp)
  1291.     rol.w #8,d1
  1292.     move.b d1,-1(pseudosp)
  1293.     subq.l #2,pseudosp
  1294.     lea.l 0(targbase,d0.l),pseudopc
  1295.     jmp (return)
  1296.  
  1297. call    move.b 1(pseudopc),d0            ; CD Call addr
  1298.     rol.w #8,d0
  1299.     move.b (pseudopc),d0
  1300.     addq.l #2,pseudopc
  1301.     move.l pseudopc,d1
  1302.     sub.l targbase,d1
  1303.     move.b d1,-2(pseudosp)
  1304.     rol.w #8,d1
  1305.     move.b d1,-1(pseudosp)
  1306.     subq.l #2,pseudosp
  1307.     lea.l 0(targbase,d0.l),pseudopc
  1308.     jmp (return)
  1309.  
  1310. aci    move.b regf,regop3(regs)        ; CE Aci nn
  1311.     asr.b #1,regf
  1312.     move.b (pseudopc)+,d0
  1313.     move.b d0,regop1(regs)
  1314.     move.b rega,regop2(regs)
  1315.     moveq #0,d1
  1316.     addx.b d0,rega
  1317.     move sr,d0
  1318.     and.w regcon0f,d0
  1319.     move.b 0(flagptr,d0.w),regf
  1320.     jmp (return)
  1321.  
  1322. rst8    move.l pseudopc,d1            ; CF Rst 8
  1323.     sub.l targbase,d1
  1324.     move.b d1,-2(pseudosp)
  1325.     rol.w #8,d1
  1326.     move.b d1,-1(pseudosp)
  1327.     subq.l #2,pseudosp
  1328.     lea.l $8(targbase),pseudopc
  1329.     jmp (return)
  1330.  
  1331. rnc    btst #0,regf                ; D0 Rnc
  1332.     bne mloop
  1333.     move.b 1(pseudosp),d0
  1334.     rol.w #8,d0
  1335.     move.b (pseudosp),d0
  1336.     addq.l #2,pseudosp
  1337.     lea.l 0(targbase,d0.l),pseudopc
  1338.     jmp (return)
  1339.  
  1340. popd    move.b (pseudosp)+,rege(regs)        ; D1 Pop D
  1341.     move.b (pseudosp)+,regd(regs)
  1342.     jmp (return)
  1343.  
  1344. jnc    move.b 1(pseudopc),d0            ; D2 Jnc addr
  1345.     rol.w #8,d0
  1346.     move.b (pseudopc),d0
  1347.     addq.l #2,pseudopc
  1348.     btst #0,regf
  1349.     bne mloop
  1350.     lea.l 0(targbase,d0.l),pseudopc
  1351.     jmp (return)
  1352.  
  1353. out    moveq #0,d0                ; D3 Out nn
  1354.     move.b (pseudopc)+,d0
  1355.  
  1356.     ifne diskio
  1357.     cmp.b #$54,d0
  1358.     beq outspec
  1359.     cmp.b #$55,d0
  1360.     beq outspec
  1361.     endc
  1362.  
  1363.     move.l #$ff0000,a0
  1364.     move.b rega,0(a0,d0.l)
  1365.     jmp (return)
  1366.  
  1367. cnc    move.b 1(pseudopc),d0            ; D4 Cnc addr
  1368.     rol.w #8,d0
  1369.     move.b (pseudopc),d0
  1370.     addq.l #2,pseudopc
  1371.     btst #0,regf
  1372.     bne mloop
  1373.     move.l pseudopc,d1
  1374.     sub.l targbase,d1
  1375.     move.b d1,-2(pseudosp)
  1376.     rol.w #8,d1
  1377.     move.b d1,-1(pseudosp)
  1378.     subq.l #2,pseudosp
  1379.     lea.l 0(targbase,d0.l),pseudopc
  1380.     jmp (return)
  1381.  
  1382. pushd    move.b regd(regs),-(pseudosp)        ; D5 Push D
  1383.     move.b rege(regs),-(pseudosp)
  1384.     jmp (return)
  1385.  
  1386. sui    move.b (pseudopc)+,d0            ; D6 Sui nn
  1387.     sub.b d0,rega
  1388.     move sr,d0
  1389.     and.w regcon0f,d0
  1390.     move.b 0(flagptr,d0.w),regf
  1391.     jmp (return)
  1392.  
  1393. rst10    move.l pseudopc,d1            ; D7 Rst 10
  1394.     sub.l targbase,d1
  1395.     move.b d1,-2(pseudosp)
  1396.     rol.w #8,d1
  1397.     move.b d1,-1(pseudosp)
  1398.     subq.l #2,pseudosp
  1399.     lea.l $10(targbase),pseudopc
  1400.     jmp (return)
  1401.  
  1402. rc    btst #0,regf                ; D8 Rc
  1403.     beq mloop
  1404.     move.b 1(pseudosp),d0
  1405.     rol.w #8,d0
  1406.     move.b (pseudosp),d0
  1407.     addq.l #2,pseudosp
  1408.     lea.l 0(targbase,d0.l),pseudopc
  1409.     jmp (return)
  1410.  
  1411. nopD9    bra illegl                ; D9 Illegal for 8080
  1412.  
  1413. jc    move.b 1(pseudopc),d0            ; DA Jc addr
  1414.     rol.w #8,d0
  1415.     move.b (pseudopc),d0
  1416.     addq.l #2,pseudopc
  1417.     btst #0,regf
  1418.     beq mloop
  1419.     lea.l 0(targbase,d0.l),pseudopc
  1420.     jmp (return)
  1421.  
  1422. in    moveq #0,d0                ; DB In nn
  1423.     move.b (pseudopc)+,d0
  1424.     move.l #$ff0000,a0
  1425.     move.b 0(a0,d0.l),rega
  1426.     jmp (return)
  1427.  
  1428. cc    move.b 1(pseudopc),d0            ; DC Cc addr
  1429.     rol.w #8,d0
  1430.     move.b (pseudopc),d0
  1431.     addq.l #2,pseudopc
  1432.     btst #0,regf
  1433.     beq mloop
  1434.     move.l pseudopc,d1
  1435.     sub.l targbase,d1
  1436.     move.b d1,-2(pseudosp)
  1437.     rol.w #8,d1
  1438.     move.b d1,-1(pseudosp)
  1439.     subq.l #2,pseudosp
  1440.     lea.l 0(targbase,d0.l),pseudopc
  1441.     jmp (return)
  1442.  
  1443. nopDD    bra illegl                ; DD Illegal for 8080
  1444.  
  1445. sbi    asr.b #1,regf                ; DE Sbi nn
  1446.     move.b (pseudopc)+,d0
  1447.     moveq #0,d1
  1448.     subx.b d0,rega
  1449.     move sr,d0
  1450.     and.w regcon0f,d0
  1451.     move.b 0(flagptr,d0.w),regf
  1452.     jmp (return)
  1453.  
  1454. rst18    move.l pseudopc,d1            ; DF Rst 18
  1455.     sub.l targbase,d1
  1456.     move.b d1,-2(pseudosp)
  1457.     rol.w #8,d1
  1458.     move.b d1,-1(pseudosp)
  1459.     subq.l #2,pseudosp
  1460.     lea.l $18(targbase),pseudopc
  1461.     jmp (return)
  1462.  
  1463. rpo    btst #2,regf                ; E0 Rpo
  1464.     bne mloop
  1465.     move.b 1(pseudosp),d0
  1466.     rol.w #8,d0
  1467.     move.b (pseudosp),d0
  1468.     addq.l #2,pseudosp
  1469.     lea.l 0(targbase,d0.l),pseudopc
  1470.     jmp (return)
  1471.  
  1472. poph    move.b (pseudosp)+,regl(regs)        ; E1 Pop H
  1473.     move.b (pseudosp)+,regh(regs)
  1474.     jmp (return)
  1475.  
  1476. jpo    move.b 1(pseudopc),d0            ; E2 Jpo addr
  1477.     rol.w #8,d0
  1478.     move.b (pseudopc),d0
  1479.     addq.l #2,pseudopc
  1480.     btst #2,regf
  1481.     bne mloop
  1482.     lea.l 0(targbase,d0.l),pseudopc
  1483.     jmp (return)
  1484.  
  1485. xthl    move.b regl(regs),d0            ; E3 Xthl
  1486.     move.b (pseudosp),regl(regs)
  1487.     move.b d0,(pseudosp)
  1488.     move.b regh(regs),d0
  1489.     move.b 1(pseudosp),regh(regs)
  1490.     move.b d0,1(pseudosp)
  1491.     jmp (return)
  1492.  
  1493. cpo    move.b 1(pseudopc),d0            ; E4 Cpo addr
  1494.     rol.w #8,d0
  1495.     move.b (pseudopc),d0
  1496.     addq.l #2,pseudopc
  1497.     btst #2,regf
  1498.     bne mloop
  1499.     move.l pseudopc,d1
  1500.     sub.l targbase,d1
  1501.     move.b d1,-2(pseudosp)
  1502.     rol.w #8,d1
  1503.     move.b d1,-1(pseudosp)
  1504.     subq.l #2,pseudosp
  1505.     lea.l 0(targbase,d0.l),pseudopc
  1506.     jmp (return)
  1507.  
  1508.  
  1509. pushh    move.b regh(regs),-(pseudosp)        ; E5 Push H
  1510.     move.b regl(regs),-(pseudosp)
  1511.     jmp (return)
  1512.  
  1513. ani    and.b (pseudopc)+,rega            ; E6 Ani nn
  1514.     move.b rega,d0
  1515.     and.w regconff,d0
  1516.     move.b 16(flagptr,d0.w),regf
  1517.     jmp (return)
  1518.  
  1519. rst20    move.l pseudopc,d1            ; E7 Rst 20
  1520.     sub.l targbase,d1
  1521.     move.b d1,-2(pseudosp)
  1522.     rol.w #8,d1
  1523.     move.b d1,-1(pseudosp)
  1524.     subq.l #2,pseudosp
  1525.     lea.l $20(targbase),pseudopc
  1526.     jmp (return)
  1527.  
  1528. rpe    btst #2,regf                ; E8 Rpe
  1529.     beq mloop
  1530.     move.b 1(pseudosp),d0
  1531.     rol.w #8,d0
  1532.     move.b (pseudosp),d0
  1533.     addq.l #2,pseudosp
  1534.     lea.l 0(targbase,d0.l),pseudopc
  1535.     jmp (return)
  1536.  
  1537. pchl    move.w regh(regs),d0            ; E9 Pchl
  1538.     lea.l 0(targbase,d0.l),pseudopc
  1539.     jmp (return)
  1540.  
  1541. jpe    move.b 1(pseudopc),d0            ; EA Jpe addr
  1542.     rol.w #8,d0
  1543.     move.b (pseudopc),d0
  1544.     addq.l #2,pseudopc
  1545.     btst #2,regf
  1546.     beq mloop
  1547.     lea.l 0(targbase,d0.l),pseudopc
  1548.     jmp (return)
  1549.  
  1550. xchg    move.w regd(regs),d0            ; EB Xchg
  1551.     move.w regh(regs),regd(regs)
  1552.     move.w d0,regh(regs)
  1553.     jmp (return)
  1554.  
  1555. cpe    move.b 1(pseudopc),d0            ; EC Cpe addr
  1556.     rol.w #8,d0
  1557.     move.b (pseudopc),d0
  1558.     addq.l #2,pseudopc
  1559.     btst #2,regf
  1560.     beq mloop
  1561.     move.l pseudopc,d1
  1562.     sub.l targbase,d1
  1563.     move.b d1,-2(pseudosp)
  1564.     rol.w #8,d1
  1565.     move.b d1,-1(pseudosp)
  1566.     subq.l #2,pseudosp
  1567.     lea.l 0(targbase,d0.l),pseudopc
  1568.     jmp (return)
  1569.  
  1570. *preED    bra illegl                ; ED Illegal for 8080
  1571.  
  1572. *    ED is a prefix for the popular Z-80 instructions.  Some support
  1573. *    for them is provided by the minimal Z-80 simulation routines in
  1574. *    the next file.
  1575.  
  1576. xri    move.b (pseudopc)+,d0            ; EE Xri nn
  1577.     eor.b d0,rega
  1578.     move.b rega,d0
  1579.     and.w regconff,d0
  1580.     move.b 16(flagptr,d0.w),regf
  1581.     jmp (return)
  1582.  
  1583. rst28    move.l pseudopc,d1            ; EF Rst 28
  1584.     sub.l targbase,d1
  1585.     move.b d1,-2(pseudosp)
  1586.     rol.w #8,d1
  1587.     move.b d1,-1(pseudosp)
  1588.     subq.l #2,pseudosp
  1589.     lea.l $28(targbase),pseudopc
  1590.     jmp (return)
  1591.  
  1592. rp    btst #7,regf                ; F0 Rp
  1593.     bne mloop
  1594.     move.b 1(pseudosp),d0
  1595.     rol.w #8,d0
  1596.     move.b (pseudosp),d0
  1597.     addq.l #2,pseudosp
  1598.     lea.l 0(targbase,d0.l),pseudopc
  1599.     jmp (return)
  1600.  
  1601. popp    move.b (pseudosp)+,regf            ; F1 Pop P
  1602.     move.b (pseudosp)+,rega
  1603.     jmp (return)
  1604.  
  1605. jp    move.b 1(pseudopc),d0            ; F2 Jp addr
  1606.     rol.w #8,d0
  1607.     move.b (pseudopc),d0
  1608.     addq.l #2,pseudopc
  1609.     btst #7,regf
  1610.     bne mloop
  1611.     lea.l 0(targbase,d0.l),pseudopc
  1612.     jmp (return)
  1613.  
  1614. di    jmp (return)                ; F3 Di
  1615.  
  1616. cp    move.b 1(pseudopc),d0            ; F4 Cp addr
  1617.     rol.w #8,d0
  1618.     move.b (pseudopc),d0
  1619.     addq.l #2,pseudopc
  1620.     btst #7,regf
  1621.     bne mloop
  1622.     move.l pseudopc,d1
  1623.     sub.l targbase,d1
  1624.     move.b d1,-2(pseudosp)
  1625.     rol.w #8,d1
  1626.     move.b d1,-1(pseudosp)
  1627.     subq.l #2,pseudosp
  1628.     lea.l 0(targbase,d0.l),pseudopc
  1629.     jmp (return)
  1630.  
  1631. pushp    move.b rega,-(pseudosp)            ; F5 Push P
  1632.     move.b regf,-(pseudosp)
  1633.     jmp (return)
  1634.  
  1635. oria    or.b (pseudopc)+,rega            ; F6 Ori nn
  1636.     move.b rega,d0
  1637.     and.w regconff,d0
  1638.     move.b 16(flagptr,d0.w),regf
  1639.     jmp (return)
  1640.  
  1641. rst30    move.l pseudopc,d1            ; F7 Rst 30
  1642.     sub.l targbase,d1
  1643.     move.b d1,-2(pseudosp)
  1644.     rol.w #8,d1
  1645.     move.b d1,-1(pseudosp)
  1646.     subq.l #2,pseudosp
  1647.     lea.l $30(targbase),pseudopc
  1648.     jmp (return)
  1649.  
  1650. rm    btst #7,regf                ; F8 Rm
  1651.     beq mloop
  1652.     move.b 1(pseudosp),d0
  1653.     rol.w #8,d0
  1654.     move.b (pseudosp),d0
  1655.     addq.l #2,pseudosp
  1656.     lea.l 0(targbase,d0.l),pseudopc
  1657.     jmp (return)
  1658.  
  1659. sphl    move.w regh(regs),d0            ; F9 Sphl
  1660.     lea.l 0(targbase,d0.l),pseudosp
  1661.     jmp (return)
  1662.  
  1663. jm    move.b 1(pseudopc),d0            ; FA Jm addr
  1664.     rol.w #8,d0
  1665.     move.b (pseudopc),d0
  1666.     addq.l #2,pseudopc
  1667.     btst #7,regf
  1668.     beq mloop
  1669.     lea.l 0(targbase,d0.l),pseudopc
  1670.     jmp (return)
  1671.  
  1672. ei    jmp (return)                ; FB Ei
  1673.  
  1674. cm    move.b 1(pseudopc),d0            ; FC Cm addr
  1675.     rol.w #8,d0
  1676.     move.b (pseudopc),d0
  1677.     addq.l #2,pseudopc
  1678.     btst #7,regf
  1679.     beq mloop
  1680.     move.l pseudopc,d1
  1681.     sub.l targbase,d1
  1682.     move.b d1,-2(pseudosp)
  1683.     rol.w #8,d1
  1684.     move.b d1,-1(pseudosp)
  1685.     subq.l #2,pseudosp
  1686.     lea.l 0(targbase,d0.l),pseudopc
  1687.     jmp (return)
  1688.  
  1689. nopFD    bra illegl                ; FD Illegal for 8080
  1690.  
  1691. cpi    cmp.b (pseudopc)+,rega            ; FE Cpi nn
  1692.     move sr,d0
  1693.     and.w regcon0f,d0
  1694.     move.b 0(flagptr,d0.w),regf
  1695.     jmp (return)
  1696.  
  1697. rst38    move.l pseudopc,d1            ; FF Rst 38
  1698.     sub.l targbase,d1
  1699.     move.b d1,-2(pseudosp)
  1700.     rol.w #8,d1
  1701.     move.b d1,-1(pseudosp)
  1702.     subq.l #2,pseudosp
  1703.     lea.l $38(targbase),pseudopc
  1704.     jmp (return)
  1705.  
  1706.  
  1707.     .end
  1708. seudosp)
  1709.     rol.w #8,d1
  1710.     move.b d