home *** CD-ROM | disk | FTP | other *** search
/ Frozen Fish 2: PC / frozenfish_august_1995.bin / bbs / d01xx / d0165.lha / CPM / Source / zek.a < prev    next >
Text File  |  1988-11-22  |  50KB  |  2,852 lines

  1. ;    z80 emulator kernel
  2.  
  3. zekver:     dc.b    'Zek   Ver: 00041   Date: 25-Sep-88 21:11:05 ',0
  4.  
  5. ;    This source code is released into the public domain for
  6. ;    non-profit use only.
  7. ;    Copyright (C) 1988, Ulf Nordquist. All Rights Reserved !
  8. ;    Ulf Nordquist
  9. ;    Brunnehagen 36
  10. ;    417 47 Gothenburg
  11. ;    Sweden
  12.  
  13. ;    move.w sr,dn is used, I am sorry
  14. ;    self modifying code is used
  15.  
  16. ;    mbasic test loop
  17. ;    10 for i%=1 to 1000
  18. ;    20 next i%
  19. ;    880714 : 9.2s, 8.2s
  20.  
  21. ;    history
  22. ;    871018 : moved from ze
  23. ;    871025 : remove word access at odd bytes
  24. ;    871105 : mode z80opced to zeked
  25. ;         change pc and sp to be relative to z80pgmptr during
  26. ;           emulation
  27. ;    871113 : emuret
  28. ;    871120 : exit when unimplemented opcodes
  29. ;    871122 : emuret checks for errors
  30. ;    871218 : bug1 in ex (sp),hl
  31. ;         bug2 in ld hl,(nn)
  32. ;    871220 : bug3 in ld (nn),hl
  33. ;    871221 : bug4 in nop (embarrassing)
  34. ;         bug5 in inc h,d,b  dec h,d,b  djnz
  35. ;         bug6 in adc sbc
  36. ;    871223 : bug7 in daa
  37. ;         $dd & $fd two byte opcodes emulated
  38. ;    880109 : bug8 sign extension in pc & sp
  39. ;         bug9 in adc sbc
  40. ;    880110 : bug10 in inc h,d,b  dec h,d,b
  41. ;         bug11 in djnz
  42. ;    880120 : bug12 in setfflgnc, always clr cy
  43. ;    880221 : displacement in $dd & $fd opcodes
  44. ;    880222 : move emulation of $cb to zekcb
  45. ;         move emulation of $dd and $fd to zekdd
  46. ;    880430 : ver 00001
  47. ;    880710 : startcnt
  48. ;         modify code in main emu loop when debug count
  49. ;         stopcnt
  50. ;         savecnt, only as direct memory image
  51. ;    880711 : emulation macros
  52. ;    880713 : starttrc, stoptrc
  53. ;         setflgl with partab to set v flag after logical inst
  54. ;         mbasic works now
  55. ;    880714 : no zero option in emuloop counter
  56. ;         rearrange top of emuloop
  57. ;         give loop time 8.2s
  58. ;    880819 : move macros to zekmc
  59. ;    880821 : use addhlrr, ldindrr, ldrrind macros
  60.  
  61. ;    globals from this module
  62.  
  63.         xdef    bdosoffs
  64.         xdef    biosoffs
  65.         xdef    cboffs
  66.         xdef    cntbuf
  67.         xdef    ddoffs
  68.         xdef    edoffs
  69.         xdef    emuinit
  70.         xdef    emuret
  71.         xdef    fdoffs
  72.         xdef    setflg
  73.         xdef    setflgl
  74.         xdef    setflgnc
  75.         xdef    savecnt
  76.         xdef    startcnt
  77.         xdef    starttrc
  78.         xdef    stopcnt
  79.         xdef    stoptrc
  80.         xdef    z80emu
  81.         xdef    z80emu1
  82.         xdef    zekver
  83.  
  84. ;    externals from zeked
  85.  
  86.         xref    z80opced
  87.         xref    edinit
  88.         xref    edstart
  89.         xref    edstop
  90.  
  91. ;    externals from zekcb
  92.  
  93.         xref    z80opccb
  94.         xref    cbinit
  95.         xref    cbstart
  96.         xref    cbstop
  97.  
  98. ;    externals from zekdd
  99.  
  100.         xref    z80opcdd
  101.         xref    z80opcfd
  102.         xref    ddinit
  103.         xref    ddstart
  104.         xref    ddstop
  105.  
  106. ;    externals from ce
  107.  
  108.         xref    inpbuftab
  109.         xref    inppmttab
  110.         xref    reqstr
  111.  
  112. ;    externals from cz
  113.  
  114.         xref    bth16
  115.         xref    error4
  116.         xref    glflgs
  117.         xref    oserr
  118.         xref    xalloc
  119.         xref    z80pgmsiz
  120.         xref    z80opc2ni
  121.         xref    z80opcni
  122.         xref    _DOSBase
  123.  
  124. ;    externals from dos.library
  125.  
  126.         xref    _LVOClose
  127.         xref    _LVOOpen
  128.         xref    _LVOWrite
  129.  
  130. ;    equates
  131.  
  132. ;    from intuition.i
  133.  
  134. MODE_NEWFILE    equ    1006
  135.  
  136. ;    for debug
  137.  
  138. strbufsiz    equ    31        ;max string gadget len+1, total
  139.  
  140. ;    count
  141.  
  142. bdosoffs    equ    5*256        ;offset to bdos buffer
  143. biosoffs    equ    bdosoffs+128    ;bios
  144. cntsiz        equ    256+4*256+256    ;total buffer size
  145. cboffs        equ    1*256        ;offset to cb buffer
  146. ddoffs        equ    2*256        ;dd
  147. edoffs        equ    3*256        ;ed
  148. fdoffs        equ    4*256        ;fd
  149.  
  150. ;    trace
  151.  
  152. trcsiz        equ    1024        ;trace buffer size
  153.  
  154. ;    forward references
  155.  
  156. cntfilesize    equ    strbufsiz    ;length of savefile name string
  157. trcfilesize    equ    strbufsiz    ;length of savefile name string
  158. maxtrccnt    equ    trcsiz-10    ;max count in trace buffer
  159.  
  160. ;    ascii
  161.  
  162. lf        equ    10
  163.  
  164. ;    macros
  165.  
  166.         include zekmc.i
  167.  
  168.         ds.w    0            ;alignment
  169.  
  170. ;    emuinit
  171. ;    initialize emulation parameters, only called once as init
  172. ;    also toggle bra <-> addq
  173.  
  174. emuinit:    move.l    #z80emusw,a6
  175.         move.w    (a6),d1                 ;get bra.s
  176.         move.w    cntinst,(a6)            ;put addq
  177.         move.w    d1,cntinst        ;save bra.s
  178.         jsr    cbinit
  179.         jsr    ddinit
  180.         jmp    edinit
  181.  
  182. ;    z80emu
  183. ;    entry : d0.l=fa'fa, d1.l=hl'hl, d2.l=de'de, d3.l=bc'bc
  184. ;        d4.w=ix, d5.w=iy
  185. ;        d7.l=number of instructions to run
  186. ;        a0.w=pc, a1.w=sp, a4.l=ptr z80 program area start
  187. ;        the program area must be configured as this:
  188. ;        relative start    0      $8000    $ffff
  189. ;                |________|________|
  190. ;        pc          $8000     0    $7fff
  191. ;        d0 flags 15 14 13 12 11 10  9  8
  192. ;              s  z    -  h  -  v  n  c
  193. ;    internal use : d4.l=iyix
  194. ;               a2.l=ptr to scratch, a3.l=z80opctab,
  195. ;               a4.l=ptr middle of z80 pgm area
  196. ;    scratch use : d5.l, d6.l, a5.l, a6.l
  197. ;    exit :    d0.l=fa'fa, d1.l=hl'hl, d2.l=de'de, d3.l=bc'bc
  198. ;        d4.w=ix, d5.w=iy
  199. ;        a0.w=pc, a1.w=sp
  200. ;    limitations
  201. ;    1.  flags : h and n flag is always 0
  202. ;    2.  nops  : $d3nn out (n),a, $f3 di, $fb ei
  203. ;    3.  $76   halt exits emulator, but nothing more
  204. ;    4.  $dbnn in a,(n) always inputs 0
  205. ;    5.  $cb   limitations found in module zekcb
  206. ;    6.  $dd   limitations found in module zekdd
  207. ;    7.  $ed   limitations found in module zeked
  208. ;    8.  $fd   limitations found in module zekdd
  209.  
  210. z80emu:     move.l    #z80opctab,a3        ;ptr to opcode tab
  211.         move.l    #scratch,a2
  212.         move.l    #z80pgmsiz,d6
  213.         lsr.l    #1,d6            ;/2
  214.         add.l    d6,a4            ;ptr middle of pgm
  215.         swap    d4
  216.         move.w    d5,d4            ;iy
  217.         swap    d4            ;set up iyix
  218.         bra.s    z80emu2         ;skip after inst part
  219.  
  220. ;    after instruction
  221.  
  222. z80emu1:    subq.l    #1,d7
  223.         beq.s    z80opc76        ;if halt
  224.  
  225. ;    decode instruction
  226.  
  227. z80emu2:    moveq.l #0,d6
  228.         move.b    0(a4,a0.w),d6           ;opcode
  229. z80emusw:    bra.s    count            ;replaced with addq.l #1,a0
  230. z80emu3:    asl.w    #2,d6            ;4 bytes per entry
  231.         move.l    0(a3,d6.l),a5
  232.         jmp    (a5)                    ;do instruction
  233.  
  234. ;    exit emulation, halt
  235.  
  236. z80opc76:    swap    d4
  237.         move.w    d4,d5            ;iy
  238.         swap    d4            ;ix
  239.         rts
  240.  
  241. ;    if debug count or trace mode
  242.  
  243. count:        btst.b    #5,glflgs
  244.         beq.s    count1            ;if no cnt
  245.  
  246. ;    count
  247.  
  248.         move.l    cntbuf,a5
  249.         addq.b    #1,0(a5,d6.w)           ;inc cnt
  250.         bne.s    count1            ;if not max cnt
  251.         subq.b    #1,0(a5,d6.w)           ;restore max cnt
  252. count1:     tst.l    handle3
  253.         beq.s    count2            ;if no trace
  254.  
  255. ;    trace
  256.  
  257.         movem.l d0-d3/a0-a1,-(a7)
  258.         move.w    a0,d0            ;pc
  259.         move.l    trcptr,a0
  260.         jsr    bth16
  261.         move.b    #lf,(a0)+               ;line end
  262.         move.l    a0,trcptr
  263.         move.l    trccnt,d0
  264.         addq.l    #5,d0            ;hex no + lf
  265.         move.l    d0,trccnt
  266.         cmp.w    #maxtrccnt,d0
  267.         blt.s    count3            ;if buffer not full
  268.  
  269. ;    buffer full, write to file
  270.  
  271.         move.l    handle3,d1
  272.         move.l    trcbuf,d2
  273.         move.l    trccnt,d3
  274.         move.l    _DOSBase,a6
  275.         jsr    _LVOWrite(a6)
  276.         move.l    trcbuf,trcptr
  277.         clr.l    trccnt            ;reinit
  278. count3:     movem.l (a7)+,d0-d3/a0-a1
  279. count2:     addq.l    #1,a0            ;pc
  280.         bra    z80emu3         ;cont emu
  281.  
  282. ;    start/stop/savecnt and start/stoptrc
  283. ;    is called by minpeh and can *only*
  284. ;    chg : d0,d1,d2,d3
  285. ;          a0,a1,a2,a3,a6
  286. ;    it is furthermore called by a menu handling routine and can *only*
  287. ;    chg : d3
  288. ;          a0,a1,a2,a3,a6
  289.  
  290. ;    startcnt
  291. ;    initialize for count of opcode, bdos & bios
  292. ;    exit : z=success
  293.  
  294. startcnt:    btst.b    #5,glflgs
  295.         bne.s    startcnt3        ;if already counting
  296.         movem.l d0-d2,-(a7)
  297.         tst.l    handle3
  298.         bne.s    startcnt4        ;if trace on
  299.  
  300. ;    insert jump into emulator loop
  301.  
  302.         bsr    emuinit
  303.  
  304. ;    rest of start code
  305.  
  306. startcnt4:    move.l    cntbuf,d0
  307.         bne.s    startcnt1        ;if alloc
  308.         move.l    #cntsiz,d0
  309.         jsr    xalloc
  310.         bne.s    startcnt1        ;if we got memory
  311.         jmp    error4
  312. startcnt1:    bset.b    #5,glflgs        ;flg counting
  313.         move.l    d0,cntbuf        ;ptr
  314.         move.w    #cntsiz-1,d1
  315.         move.l    d0,a0            ;cntbuf
  316. startcnt2:    clr.b    (a0)+
  317.         dbra    d1,startcnt2        ;clr cntbuf
  318.         movem.l (a7)+,d0-d2
  319. startcnt3:    rts
  320.  
  321. ;    stopcnt
  322. ;    stop count of opcode, bdos & bios
  323. ;    exit : z=already stopped
  324.  
  325. stopcnt:    btst.b    #5,glflgs
  326.         beq.s    stopcnt1        ;if already stopped
  327.         bclr.b    #5,glflgs        ;flg stopped
  328.         tst.l    handle3
  329.         bne.s    stopcnt1        ;if trace on
  330.         movem.l d1,-(a7)
  331.         bsr    emuinit
  332.         movem.l (a7)+,d1
  333. stopcnt1:    rts
  334.  
  335. ;    savecnt
  336. ;    save count of opcode, bdos & bios
  337.  
  338. savecnt:    movem.l d0-d4/a4-a5,-(a7)
  339.  
  340. ;    set up buffer and prompt tables and get file name
  341.  
  342.         move.l    #inpbuftab,a0
  343.         move.l    a0,a2
  344.         move.w    #cntfilesize,(a0)+      ;size
  345.         move.l    #cntfile,(a0)+          ;ptr buf
  346.         move.w    #0,(a0)                 ;end
  347.         move.l    #inppmttab,a0
  348.         move.l    a0,a4
  349.         move.l    #cntpmt,(a0)+           ;prompt
  350.         move.l    #0,(a0)                 ;end
  351.         jsr    reqstr
  352.         cmp.b    #2,d2
  353.         beq.s    savecnt1        ;if cancel
  354.  
  355. ;    open file
  356.  
  357.         move.l    #cntfile,d1        ;buf
  358.         move.l    #MODE_NEWFILE,d2
  359.         move.l    _DOSBase,a6
  360.         jsr    _LVOOpen(a6)
  361.         move.l    d0,d4            ;handle
  362.         beq.s    savecnt1        ;if failure
  363.  
  364. ;    write buffer and close file
  365.  
  366.         move.l    d4,d1            ;handle
  367.         move.l    cntbuf,d2
  368.         move.l    #cntsiz,d3
  369.         move.l    _DOSBase,a6
  370.         jsr    _LVOWrite(a6)
  371.         move.l    d4,d1            ;handle
  372.         jsr    _LVOClose(a6)
  373. savecnt1:    movem.l (a7)+,d0-d4/a4-a5
  374.         rts
  375.  
  376. ;    starttrc
  377. ;    start trace of execution
  378. ;    exit : z=no start
  379.  
  380. starttrc:    movem.l d0-d4/a4-a5,-(a7)
  381.         btst.b    #5,glflgs
  382.         bne.s    starttrc3        ;if debug count
  383.         bsr    emuinit
  384.  
  385. ;    set up buffer and prompt tables and get file name
  386.  
  387. starttrc3:    move.l    #inpbuftab,a0
  388.         move.l    a0,a2
  389.         move.w    #trcfilesize,(a0)+      ;size
  390.         move.l    #trcfile,(a0)+          ;ptr buf
  391.         move.w    #0,(a0)                 ;end
  392.         move.l    #inppmttab,a0
  393.         move.l    a0,a4
  394.         move.l    #trcpmt,(a0)+           ;prompt
  395.         move.l    #0,(a0)                 ;end
  396.         jsr    reqstr
  397.         cmp.b    #2,d2
  398.         beq.s    starttrc1        ;if cancel
  399.  
  400. ;    open file
  401.  
  402.         move.l    #trcfile,d1        ;buf
  403.         move.l    #MODE_NEWFILE,d2
  404.         move.l    _DOSBase,a6
  405.         jsr    _LVOOpen(a6)
  406.         move.l    d0,handle3        ;handle
  407.         beq.s    starttrc1        ;if failure
  408.  
  409. ;    sucessful open of file
  410.  
  411.         move.l    trcbuf,d0
  412.         bne.s    starttrc2        ;if alloc
  413.         move.l    #trcsiz,d0
  414.         jsr    xalloc
  415.         bne.s    starttrc2        ;if we got memory
  416.         jmp    error4
  417. starttrc2:    clr.l    trccnt
  418.         move.l    d0,trcbuf        ;ptr start
  419.         move.l    d0,trcptr        ;ptr current
  420. starttrc1:    movem.l (a7)+,d0-d4/a4-a5
  421.         rts
  422.  
  423. ;    stoptrc
  424. ;    stop trace of execution and close file
  425. ;    exit : z=no close
  426.  
  427. stoptrc:    movem.l d0-d2,-(a7)
  428.         move.l    handle3,d1
  429.         beq.s    stoptrc1        ;if no log file open
  430.         btst.b    #5,glflgs
  431.         bne.s    stoptrc3        ;if debug count
  432.         bsr    emuinit
  433.  
  434. ;    write buffer and close file
  435.  
  436. stoptrc3:    move.l    trcbuf,d2
  437.         move.l    trccnt,d3
  438.         beq.s    stoptrc2        ;if buffer empty
  439.         move.l    _DOSBase,a6
  440.         jsr    _LVOWrite(a6)
  441. stoptrc2:    move.l    handle3,d1
  442.         jsr    _LVOClose(a6)
  443.         clr.l    handle3         ;flg no trace
  444.         move.l    #1,d0            ;flg success
  445. stoptrc1:    movem.l (a7)+,d0-d2
  446.         rts
  447.  
  448. ;    not implemented opcode
  449.  
  450. z80emuni:    swap    d4
  451.         move.w    d4,d5            ;iy
  452.         swap    d4            ;ix
  453.         addq.l    #4,a7            ;ret addr
  454.         jmp    z80opcni
  455.  
  456. ;    emuret
  457. ;    return from cpm system calls
  458.  
  459. emuret:     or.b    d6,d6
  460.         beq    z80opcc9        ;if no error
  461.         swap    d4
  462.         move.w    d4,d5            ;iy
  463.         swap    d4            ;ix
  464.         addq.l    #4,a7            ;ret addr
  465.         jmp    oserr
  466.  
  467. ;    routines for each opcode
  468.  
  469. ;    $00 nop
  470. ;    $40 ld b,b
  471. ;    $49 ld c,c
  472. ;    $52 ld d,d
  473. ;    $5b ld e,e
  474. ;    $64 ld h,h
  475. ;    $6d ld l,l
  476. ;    $7f ld a,a
  477. ;    $f3 di
  478. ;    $fb ei
  479.  
  480. z80opcfb:
  481. z80opcf3:
  482. z80opc7f:
  483. z80opc6d:
  484. z80opc64:
  485. z80opc5b:
  486. z80opc52:
  487. z80opc49:
  488. z80opc40:
  489. z80opc00:    bra    z80emu1
  490.  
  491. ;    $01 ld bc,nn
  492.  
  493. z80opc01:    ldrrimm d3
  494.         bra    z80emu1
  495.  
  496. ;    $02 ld (bc),a
  497.  
  498. z80opc02:    move.b    d0,0(a4,d3.w)           ;a
  499.         bra    z80emu1
  500.  
  501. ;    $03 inc bc
  502.  
  503. z80opc03:    addq.w    #1,d3
  504.         bra    z80emu1
  505.  
  506. ;    $04 inc b
  507.  
  508. z80opc04:    inchr    d3
  509.         bra    z80emu1
  510.  
  511. ;    $05 dec b
  512.  
  513. z80opc05:    dechr    d3
  514.         bra    z80emu1
  515.  
  516. ;    $06 ld b,n
  517.  
  518. z80opc06:    ldhrimm d3
  519.         bra    z80emu1
  520.  
  521. ;    $07 rlca
  522.  
  523. z80opc07:    rol.b    #1,d0
  524.         bset.l    #8,d0            ;set c
  525.         bcs    z80emu1         ;if c set
  526.         bclr.l    #8,d0            ;clr c
  527.         bra    z80emu1
  528.  
  529. ;    $08 ex af,af'
  530.  
  531. z80opc08:    swap    d0
  532.         bra    z80emu1
  533.  
  534. ;    $09 add hl,bc
  535.  
  536. z80opc09:    addhlrr d3
  537.         bra    z80emu1
  538.  
  539. ;    $0a ld a,(bc)
  540.  
  541. z80opc0a:    move.b    0(a4,d3.w),d0           ;a
  542.         bra    z80emu1
  543.  
  544. ;    $ob dec bc
  545.  
  546. z80opc0b:    subq.w    #1,d3
  547.         bra    z80emu1
  548.  
  549. ;    $0c inc c
  550.  
  551. z80opc0c:    addq.b    #1,d3
  552.         bsr    setflgnc
  553.         bra    z80emu1
  554.  
  555. ;    $0d dec c
  556.  
  557. z80opc0d:    subq.b    #1,d3
  558.         bsr    setflgnc
  559.         bra    z80emu1
  560.  
  561. ;    $0e ld c,n
  562.  
  563. z80opc0e:    move.b    0(a4,a0.w),d3           ;new b
  564.         addq.l    #1,a0
  565.         bra    z80emu1
  566.  
  567. ;    $0f rrca
  568.  
  569. z80opc0f:    ror.b    #1,d0
  570.         bset.l    #8,d0            ;set c
  571.         bcs.s    z80opc0f1        ;if c set
  572.         bclr.l    #8,d0            ;clr c
  573. z80opc0f1:    bra    z80emu1
  574.  
  575. ;    $10 djnz e
  576.  
  577. z80opc10:    addq.l    #1,a0            ;pc
  578.         move.b    d3,d6
  579.         clr.b    d3
  580.         sub.w    #$0100,d3
  581.         bne.s    z80opc101        ;if b<>0
  582.         move.b    d6,d3            ;restore c
  583.         bra    z80emu1
  584. z80opc101:    move.b    d6,d3            ;restore c
  585.         move.b    -1(a4,a0.w),d6          ;offset
  586.         ext.w    d6
  587.         add.w    d6,a0            ;jump
  588.         bra    z80emu1
  589.  
  590. ;    $11 ld de,nn
  591.  
  592. z80opc11:    ldrrimm d2
  593.         bra    z80emu1
  594.  
  595. ;    $12 ld (de),a
  596.  
  597. z80opc12:    move.b    d0,0(a4,d2.w)           ;a
  598.         bra    z80emu1
  599.  
  600. ;    $13 inc de
  601.  
  602. z80opc13:    addq.w    #1,d2
  603.         bra    z80emu1
  604.  
  605. ;    $14 inc d
  606.  
  607. z80opc14:    inchr    d2
  608.         bra    z80emu1
  609.  
  610. ;    $15 dec d
  611.  
  612. z80opc15:    dechr    d2
  613.         bra    z80emu1
  614.  
  615. ;    $16 ld d,n
  616.  
  617. z80opc16:    ldhrimm d2
  618.         bra    z80emu1
  619.  
  620. ;    $17 rla
  621.  
  622. z80opc17:    and.b    #%11101111,ccr        ;clr x
  623.         btst.l    #8,d0
  624.         beq.s    z80opc171        ;if c=0
  625.         or.b    #%00010000,ccr        ;set x
  626. z80opc171:    roxl.b    #1,d0
  627.         bset.l    #8,d0            ;set c
  628.         bcs    z80emu1         ;if c set
  629.         bclr.l    #8,d0            ;clr c
  630.         bra    z80emu1
  631.  
  632. ;    $18 jr e
  633.  
  634. z80opc18:    move.b    0(a4,a0.w),d6           ;offset
  635.         addq.l    #1,a0
  636.         ext.w    d6
  637.         add.w    d6,a0            ;jump
  638.         bra    z80emu1
  639.  
  640. ;    $19 add hl,de
  641.  
  642. z80opc19:    addhlrr d2
  643.         bra    z80emu1
  644.  
  645. ;    $1a ld a,(de)
  646.  
  647. z80opc1a:    move.b    0(a4,d2.w),d0           ;a
  648.         bra    z80emu1
  649.  
  650. ;    $1b dec de
  651.  
  652. z80opc1b:    subq.w    #1,d2
  653.         bra    z80emu1
  654.  
  655. ;    $1c inc e
  656.  
  657. z80opc1c:    addq.b    #1,d2
  658.         bsr    setflgnc
  659.         bra    z80emu1
  660.  
  661. ;    $1d dec e
  662.  
  663. z80opc1d:    subq.b    #1,d2
  664.         bsr    setflgnc
  665.         bra    z80emu1
  666.  
  667. ;    $1e ld e,n
  668.  
  669. z80opc1e:    move.b    0(a4,a0.w),d2           ;new e
  670.         addq.l    #1,a0
  671.         bra    z80emu1
  672.  
  673. ;    $1f rra
  674.  
  675. z80opc1f:    and.b    #0,ccr            ;clr x
  676.         btst.l    #8,d0
  677.         beq.s    z80opc1f1        ;if c=0
  678.         or.b    #$ff,ccr        ;set x
  679. z80opc1f1:    roxr.b    #1,d0
  680.         bset.l    #8,d0            ;set c
  681.         bcs.s    z80opc1f2        ;if c set
  682.         bclr.l    #8,d0            ;clr c
  683. z80opc1f2:    bra    z80emu1
  684.  
  685. ;    $20 jr nz,e
  686.  
  687. z80opc20:    move.b    0(a4,a0.w),d6           ;offset
  688.         addq.l    #1,a0
  689.         btst.l    #14,d0
  690.         bne    z80emu1         ;if z=1
  691.         ext.w    d6
  692.         add.w    d6,a0            ;jump
  693.         bra    z80emu1
  694.  
  695. ;    $21 ld hl,nn
  696.  
  697. z80opc21:    ldrrimm d1
  698.         bra    z80emu1
  699.  
  700. ;    $22 ld (nn),hl
  701.  
  702. z80opc22:    ldindrr d1
  703.         bra    z80emu1
  704.  
  705. ;    $23 inc hl
  706.  
  707. z80opc23:    addq.w    #1,d1
  708.         bra    z80emu1
  709.  
  710. ;    $24 inc h
  711.  
  712. z80opc24:    inchr    d1
  713.         bra    z80emu1
  714.  
  715. ;    $25 dec h
  716.  
  717. z80opc25:    dechr    d1
  718.         bra    z80emu1
  719.  
  720. ;    $26 ld h,n
  721.  
  722. z80opc26:    ldhrimm d1
  723.         bra    z80emu1
  724.  
  725. ;    $27 daa
  726.  
  727. z80opc27:    and.b    #0,ccr            ;clr x
  728.         moveq.l #0,d6
  729.         abcd.b    d6,d0            ;bcd add 0
  730.         bsr    setflg
  731.         bra    z80emu1
  732.  
  733. ;    $28 jr z,e
  734.  
  735. z80opc28:    move.b    0(a4,a0.w),d6           ;offset
  736.         addq.l    #1,a0
  737.         btst.l    #14,d0
  738.         beq    z80emu1         ;if z=0
  739.         ext.w    d6            ;make word
  740.         add.w    d6,a0            ;jump
  741.         bra    z80emu1
  742.  
  743. ;    $29 add hl,hl
  744.  
  745. z80opc29:    addhlrr d1
  746.         bra    z80emu1
  747.  
  748. ;    $2a ld hl,(nn)
  749.  
  750. z80opc2a:    ldrrind d1
  751.         bra    z80emu1
  752.  
  753. ;    $2b dec hl
  754.  
  755. z80opc2b:    subq.w    #1,d1
  756.         bra    z80emu1
  757.  
  758. ;    $2c inc l
  759.  
  760. z80opc2c:    addq.b    #1,d1
  761.         bsr    setflgnc
  762.         bra    z80emu1
  763.  
  764. ;    $2d dec l
  765.  
  766. z80opc2d:    subq.b    #1,d1
  767.         bsr    setflgnc
  768.         bra    z80emu1
  769.  
  770. ;    $2e ld l,n
  771.  
  772. z80opc2e:    move.b    0(a4,a0.w),d1           ;new l
  773.         addq.l    #1,a0
  774.         bra    z80emu1
  775.  
  776. ;    $2f cpl
  777.  
  778. z80opc2f:    eor.b    #$ff,d0
  779.         bra    z80emu1
  780.  
  781. ;    $30 jr nc,e
  782.  
  783. z80opc30:    move.b    0(a4,a0.w),d6           ;offset
  784.         addq.l    #1,a0
  785.         btst.l    #8,d0
  786.         bne    z80emu1         ;if c=1
  787.         ext.w    d6            ;make word
  788.         add.w    d6,a0            ;jump
  789.         bra    z80emu1
  790.  
  791. ;    $31 ld sp,nn
  792.  
  793. z80opc31:    ldrrimm d6
  794.         move.w    d6,a1            ;sp
  795.         bra    z80emu1
  796.  
  797. ;    $32 ld (nn),a
  798.  
  799. z80opc32:    ldrrimm d6
  800.         move.b    d0,0(a4,d6.w)           ;a
  801.         bra    z80emu1
  802.  
  803. ;    $33 inc sp
  804.  
  805. z80opc33:    addq.l    #1,a1
  806.         bra    z80emu1
  807.  
  808. ;    $34 inc (hl)
  809.  
  810. z80opc34:    addq.b    #1,0(a4,d1.w)
  811.         bsr    setflgnc
  812.         bra    z80emu1
  813.  
  814. ;    $35 dec (hl)
  815.  
  816. z80opc35:    subq.b    #1,0(a4,d1.w)
  817.         bsr    setflgnc
  818.         bra    z80emu1
  819.  
  820. ;    $36 ld (hl),n
  821.  
  822. z80opc36:    move.b    0(a4,a0.w),d6           ;n
  823.         addq.l    #1,a0
  824.         move.b    d6,0(a4,d1.w)
  825.         bra    z80emu1
  826.  
  827. ;    $37 scf
  828.  
  829. z80opc37:    bset.l    #8,d0
  830.         bra    z80emu1
  831.  
  832. ;    $38 jr c,e
  833.  
  834. z80opc38:    move.b    0(a4,a0.w),d6           ;offset
  835.         addq.l    #1,a0
  836.         btst.l    #8,d0
  837.         beq    z80emu1         ;if c=0
  838.         ext.w    d6            ;make word
  839.         add.w    d6,a0            ;jump
  840.         bra    z80emu1
  841.  
  842. ;    $39 add hl,sp
  843.  
  844. z80opc39:    move.w    a1,d6            ;sp
  845.         addhlrr d6
  846.         bra    z80emu1
  847.  
  848. ;    $3a ld a,(nn)
  849.  
  850. z80opc3a:    ldrrimm d6
  851.         move.b    0(a4,d6.w),d0           ;a
  852.         bra    z80emu1
  853.  
  854. ;    $3b dec sp
  855.  
  856. z80opc3b:    subq.l    #1,a1
  857.         bra    z80emu1
  858.  
  859. ;    $3c inc a
  860.  
  861. z80opc3c:    addq.b    #1,d0
  862.         bsr    setflgnc
  863.         bra    z80emu1
  864.  
  865. ;    $3d dec a
  866.  
  867. z80opc3d:    subq.b    #1,d0
  868.         bsr    setflgnc
  869.         bra    z80emu1
  870.  
  871. ;    $3e ld a,n
  872.  
  873. z80opc3e:    move.b    0(a4,a0.w),d0           ;new a
  874.         addq.l    #1,a0
  875.         bra    z80emu1
  876.  
  877. ;    $3f ccf
  878.  
  879. z80opc3f:    bchg.l    #8,d0
  880.         bra    z80emu1
  881.  
  882. ;    $40 ld b,b is nop
  883.  
  884. ;    $41 ld b,c
  885.  
  886. z80opc41:    move.b    d3,d6
  887.         rol.w    #8,d3            ;b<->c
  888.         move.b    d6,d3            ;restore c
  889.         bra    z80emu1
  890.  
  891. ;    $42 ld b,d
  892.  
  893. z80opc42:    move.b    d3,d6
  894.         move.w    d2,d3            ;d->b
  895.         move.b    d6,d3            ;restore c
  896.         bra    z80emu1
  897.  
  898. ;    $43 ld b,e
  899.  
  900. z80opc43:    rol.w    #8,d3            ;b<->c
  901.         move.b    d2,d3            ;e->b
  902.         rol.w    #8,d3            ;b<->c, restore
  903.         bra    z80emu1
  904.  
  905. ;    $44 ld b,h
  906.  
  907. z80opc44:    move.b    d3,d6
  908.         move.w    d1,d3            ;h->b
  909.         move.b    d6,d3            ;restore c
  910.         bra    z80emu1
  911.  
  912. ;    $45 ld b,l
  913.  
  914. z80opc45:    rol.w    #8,d3            ;b<->c
  915.         move.b    d1,d3            ;l->b
  916.         rol.w    #8,d3            ;b<->c, restore
  917.         bra    z80emu1
  918.  
  919. ;    $46 ld b,(hl)
  920.  
  921. z80opc46:    rol.w    #8,d3            ;b<->c
  922.         move.b    0(a4,d1.w),d3           ;b
  923.         rol.w    #8,d3            ;b<->c, restore
  924.         bra    z80emu1
  925.  
  926. ;    $47 ld b,a
  927.  
  928. z80opc47:    rol.w    #8,d3            ;b<->c
  929.         move.b    d0,d3            ;a->b
  930.         rol.w    #8,d3            ;b<->c, restore
  931.         bra    z80emu1
  932.  
  933. ;    $48 ld c,b
  934.  
  935. z80opc48:    move.w    d3,(a2)
  936.         move.b    (a2),d3                 ;b->c
  937.         bra    z80emu1
  938.  
  939. ;    $49 ld c,c is nop
  940.  
  941. ;    $4a ld c,d
  942.  
  943. z80opc4a:    move.w    d2,(a2)
  944.         move.b    (a2),d3                 ;d->c
  945.         bra    z80emu1
  946.  
  947. ;    $4b ld c,e
  948.  
  949. z80opc4b:    move.b    d2,d3            ;e->c
  950.         bra    z80emu1
  951.  
  952. ;    $4c ld c,h
  953.  
  954. z80opc4c:    move.w    d1,(a2)
  955.         move.b    (a2),d3                 ;h->c
  956.         bra    z80emu1
  957.  
  958. ;    $4d ld c,l
  959.  
  960. z80opc4d:    move.b    d1,d3            ;l->c
  961.         bra    z80emu1
  962.  
  963. ;    $4e ld c,(hl)
  964.  
  965. z80opc4e:    move.b    0(a4,d1.w),d3           ;c
  966.         bra    z80emu1
  967.  
  968. ;    $4f ld c,a
  969.  
  970. z80opc4f:    move.b    d0,d3            ;a->c
  971.         bra    z80emu1
  972.  
  973. ;    $50 ld d,b
  974.  
  975. z80opc50:    move.b    d2,d6
  976.         move.w    d3,d2            ;b->d
  977.         move.b    d6,d2            ;restore e
  978.         bra    z80emu1
  979.  
  980. ;    $51 ld d,c
  981.  
  982. z80opc51:    rol.w    #8,d2            ;d<->e
  983.         move.b    d3,d2            ;c->d
  984.         rol.w    #8,d2            ;d<->e, restore
  985.         bra    z80emu1
  986.  
  987. ;    $52 ld d,d is nop
  988.  
  989. ;    $53 ld d,e
  990.  
  991. z80opc53:    move.b    d2,d6
  992.         rol.w    #8,d2            ;d<->e
  993.         move.b    d6,d2            ;restore e
  994.         bra    z80emu1
  995.  
  996. ;    $54 ld d,h
  997.  
  998. z80opc54:    move.b    d2,d6
  999.         move.w    d1,d2            ;h->d
  1000.         move.b    d6,d2            ;restore e
  1001.         bra    z80emu1
  1002.  
  1003. ;    $55 ld d,l
  1004.  
  1005. z80opc55:    rol.w    #8,d2            ;d<->e
  1006.         move.b    d1,d2            ;l->d
  1007.         rol.w    #8,d2            ;d<->e, restore
  1008.         bra    z80emu1
  1009.  
  1010. ;    $56 ld d,(hl)
  1011.  
  1012. z80opc56:    rol.w    #8,d2            ;d<->e
  1013.         move.b    0(a4,d1.w),d2           ;d
  1014.         rol.w    #8,d2            ;d<->e, restore
  1015.         bra    z80emu1
  1016.  
  1017. ;    $57 ld d,a
  1018.  
  1019. z80opc57:    rol.w    #8,d2            ;d<->e
  1020.         move.b    d0,d2            ;a->d
  1021.         rol.w    #8,d2            ;d<->e, restore
  1022.         bra    z80emu1
  1023.  
  1024. ;    $58 ld e,b
  1025.  
  1026. z80opc58:    move.w    d3,(a2)
  1027.         move.b    (a2),d2                 ;b->e
  1028.         bra    z80emu1
  1029.  
  1030. ;    $59 ld e,c
  1031.  
  1032. z80opc59:    move.b    d3,d2            ;c->e
  1033.         bra    z80emu1
  1034.  
  1035. ;    $5a ld e,d
  1036.  
  1037. z80opc5a:    move.w    d2,(a2)
  1038.         move.b    (a2),d2                 ;d->e
  1039.         bra    z80emu1
  1040.  
  1041. ;    $5b ld e,e is nop
  1042.  
  1043. ;    $5c ld e,h
  1044.  
  1045. z80opc5c:    move.w    d1,(a2)
  1046.         move.b    (a2),d2                 ;h->e
  1047.         bra    z80emu1
  1048.  
  1049. ;    $5d ld e,l
  1050.  
  1051. z80opc5d:    move.b    d1,d2            ;l->e
  1052.         bra    z80emu1
  1053.  
  1054. ;    $5e ld e,(hl)
  1055.  
  1056. z80opc5e:    move.b    0(a4,d1.w),d2           ;e
  1057.         bra    z80emu1
  1058.  
  1059. ;    $5f ld e,a
  1060.  
  1061. z80opc5f:    move.b    d0,d2            ;a->e
  1062.         bra    z80emu1
  1063.  
  1064. ;    $60 ld h,b
  1065.  
  1066. z80opc60:    move.b    d1,d6
  1067.         move.w    d3,d1            ;b->h
  1068.         move.b    d6,d1            ;restore l
  1069.         bra    z80emu1
  1070.  
  1071. ;    $61 ld h,c
  1072.  
  1073. z80opc61:    rol.w    #8,d1            ;h<->l
  1074.         move.b    d3,d1            ;c->h
  1075.         rol.w    #8,d1            ;h<->l, restore
  1076.         bra    z80emu1
  1077.  
  1078. ;    $62 ld h,d
  1079.  
  1080. z80opc62:    move.b    d1,d6
  1081.         move.w    d2,d1            ;d->h
  1082.         move.b    d6,d1            ;restore l
  1083.         bra    z80emu1
  1084.  
  1085. ;    $63 ld h,e
  1086.  
  1087. z80opc63:    rol.w    #8,d1            ;h<->l
  1088.         move.b    d2,d1            ;e->h
  1089.         rol.w    #8,d1            ;h<->l, restore
  1090.         bra    z80emu1
  1091.  
  1092. ;    $64 ld h,h is nop
  1093.  
  1094. ;    $65 ld h,l
  1095.  
  1096. z80opc65:    move.b    d1,d6
  1097.         rol.w    #8,d1            ;h<->l
  1098.         move.b    d6,d1            ;restore l
  1099.         bra    z80emu1
  1100.  
  1101. ;    $66 ld h,(hl)
  1102.  
  1103. z80opc66:    move.b    d1,d6
  1104.         move.b    0(a4,d1.w),d1           ;h
  1105.         rol.w    #8,d1            ;h<->l
  1106.         move.b    d6,d1            ;resore l
  1107.         bra    z80emu1
  1108.  
  1109. ;    $67 ld h,a
  1110.  
  1111. z80opc67:    rol.w    #8,d1            ;h<->l
  1112.         move.b    d0,d1            ;a->h
  1113.         rol.w    #8,d1            ;h<->l, restore
  1114.         bra    z80emu1
  1115.  
  1116. ;    $68 ld l,b
  1117.  
  1118. z80opc68:    move.w    d3,(a2)
  1119.         move.b    (a2),d1                 ;b->l
  1120.         bra    z80emu1
  1121.  
  1122. ;    $69 ld l,c
  1123.  
  1124. z80opc69:    move.b    d3,d1            ;c->l
  1125.         bra    z80emu1
  1126.  
  1127. ;    $6a ld l,d
  1128.  
  1129. z80opc6a:    move.w    d2,(a2)
  1130.         move.b    (a2),d1                 ;d->l
  1131.         bra    z80emu1
  1132.  
  1133. ;    $6b ld l,e
  1134.  
  1135. z80opc6b:    move.b    d2,d1            ;e->l
  1136.         bra    z80emu1
  1137.  
  1138. ;    $6c ld l,h
  1139.  
  1140. z80opc6c:    move.w    d1,(a2)
  1141.         move.b    (a2),d1                 ;h->l
  1142.         bra    z80emu1
  1143.  
  1144. ;    $6d ld l,l is nop
  1145.  
  1146. ;    $6e ld l,(hl)
  1147.  
  1148. z80opc6e:    move.b    0(a4,d1.w),d1           ;l
  1149.         bra    z80emu1
  1150.  
  1151. ;    $6f ld l,a
  1152.  
  1153. z80opc6f:    move.b    d0,d1            ;a->l
  1154.         bra    z80emu1
  1155.  
  1156. ;    $70 ld (hl),b
  1157.  
  1158. z80opc70:    move.w    d3,d6
  1159.         rol.w    #8,d6
  1160.         move.b    d6,0(a4,d1.w)           ;b
  1161.         bra    z80emu1
  1162.  
  1163. ;    $71 ld (hl),c
  1164.  
  1165. z80opc71:    move.b    d3,0(a4,d1.w)           ;c
  1166.         bra    z80emu1
  1167.  
  1168. ;    $72 ld (hl),d
  1169.  
  1170. z80opc72:    move.w    d2,d6
  1171.         rol.w    #8,d6
  1172.         move.b    d6,0(a4,d1.w)           ;d
  1173.         bra    z80emu1
  1174.  
  1175. ;    $73 ld (hl),e
  1176.  
  1177. z80opc73:    move.b    d2,0(a4,d1.w)           ;e
  1178.         bra    z80emu1
  1179.  
  1180. ;    $74 ld (hl),h
  1181.  
  1182. z80opc74:    move.w    d1,d6
  1183.         rol.w    #8,d6
  1184.         move.b    d6,0(a4,d1.w)           ;h
  1185.         bra    z80emu1
  1186.  
  1187. ;    $75 ld (hl),l
  1188.  
  1189. z80opc75:    move.b    d1,0(a4,d1.w)           ;l
  1190.         bra    z80emu1
  1191.  
  1192. ;    $76 halt is exit
  1193.  
  1194. ;    $77 ld (hl),a
  1195.  
  1196. z80opc77:    move.b    d0,0(a4,d1.w)           ;a
  1197.         bra    z80emu1
  1198.  
  1199. ;    $78 ld a,b
  1200.  
  1201. z80opc78:    move.w    d3,(a2)
  1202.         move.b    (a2),d0                 ;b->a
  1203.         bra    z80emu1
  1204.  
  1205. ;    $79 ld a,c
  1206.  
  1207. z80opc79:    move.b    d3,d0            ;c->a
  1208.         bra    z80emu1
  1209.  
  1210. ;    $7a ld a,d
  1211.  
  1212. z80opc7a:    move.w    d2,(a2)
  1213.         move.b    (a2),d0                 ;d->a
  1214.         bra    z80emu1
  1215.  
  1216. ;    $7b ld a,e
  1217.  
  1218. z80opc7b:    move.b    d2,d0            ;e->a
  1219.         bra    z80emu1
  1220.  
  1221. ;    $7c ld a,h
  1222.  
  1223. z80opc7c:    move.w    d1,(a2)
  1224.         move.b    (a2),d0                 ;h->a
  1225.         bra    z80emu1
  1226.  
  1227. ;    $7d ld a,l
  1228.  
  1229. z80opc7d:    move.b    d1,d0            ;l->a
  1230.         bra    z80emu1
  1231.  
  1232. ;    $7e ld a,(hl)
  1233.  
  1234. z80opc7e:    move.b    0(a4,d1.w),d0           ;a
  1235.         bra    z80emu1
  1236.  
  1237. ;    $7f ld a,a is nop
  1238.  
  1239. ;    $80 add a,b
  1240.  
  1241. z80opc80:    move.w    d3,(a2)
  1242.         add.b    (a2),d0                 ;a+b->a
  1243.         bsr    setflg
  1244.         bra    z80emu1
  1245.  
  1246. ;    $81 add a,c
  1247.  
  1248. z80opc81:    add.b    d3,d0            ;a+c->a
  1249.         bsr    setflg
  1250.         bra    z80emu1
  1251.  
  1252. ;    $82 add a,d
  1253.  
  1254. z80opc82:    move.w    d2,(a2)
  1255.         add.b    (a2),d0                 ;a+d->a
  1256.         bsr    setflg
  1257.         bra    z80emu1
  1258.  
  1259. ;    $83 add a,e
  1260.  
  1261. z80opc83:    add.b    d2,d0            ;a+e->a
  1262.         bsr    setflg
  1263.         bra    z80emu1
  1264.  
  1265. ;    $84 add a,h
  1266.  
  1267. z80opc84:    move.w    d1,(a2)
  1268.         add.b    (a2),d0                 ;a+h->a
  1269.         bsr    setflg
  1270.         bra    z80emu1
  1271.  
  1272. ;    $85 add a,l
  1273.  
  1274. z80opc85:    add.b    d1,d0            ;a+l->a
  1275.         bsr    setflg
  1276.         bra    z80emu1
  1277.  
  1278. ;    $86 add a,(hl)
  1279.  
  1280. z80opc86:    add.b    0(a4,d1.w),d0           ;a+(hl)->a
  1281.         bsr    setflg
  1282.         bra    z80emu1
  1283.  
  1284. ;    $87 add a,a
  1285.  
  1286. z80opc87:    add.b    d0,d0            ;a+a->a
  1287.         bsr    setflg
  1288.         bra    z80emu1
  1289.  
  1290. ;    $88 adc a,b
  1291.  
  1292. z80opc88:    and.b    #%11101111,ccr        ;clr x
  1293.         btst.l    #8,d0
  1294.         beq.s    z80opc881        ;if no cy
  1295.         or.b    #%00010000,ccr        ;set x
  1296. z80opc881:    move.w    d3,d6
  1297.         rol.w    #8,d6            ;b to lo
  1298.         addx.b    d6,d0            ;a+b->a
  1299.         bsr    setflg
  1300.         bra    z80emu1
  1301.  
  1302. ;    $89 adc a,c
  1303.  
  1304. z80opc89:    and.b    #%11101111,ccr        ;clr x
  1305.         btst.l    #8,d0
  1306.         beq.s    z80opc891        ;if no cy
  1307.         or.b    #%00010000,ccr        ;set x
  1308. z80opc891:    addx.b    d3,d0            ;a+c->a
  1309.         bsr    setflg
  1310.         bra    z80emu1
  1311.  
  1312. ;    $8a adc a,d
  1313.  
  1314. z80opc8a:    move.w    d2,d6
  1315.         rol.w    #8,d6            ;d to lo
  1316.         and.b    #%11101111,ccr        ;clr x
  1317.         btst.l    #8,d0
  1318.         beq.s    z80opc8a1        ;if no cy
  1319.         or.b    #%00010000,ccr        ;set x
  1320. z80opc8a1:    addx.b    d6,d0            ;a+d->a
  1321.         bsr    setflg
  1322.         bra    z80emu1
  1323.  
  1324. ;    $8b adc a,e
  1325.  
  1326. z80opc8b:    and.b    #%11101111,ccr        ;clr x
  1327.         btst.l    #8,d0
  1328.         beq.s    z80opc8b1        ;if no cy
  1329.         or.b    #%00010000,ccr        ;set x
  1330. z80opc8b1:    addx.b    d2,d0            ;a+e->a
  1331.         bsr    setflg
  1332.         bra    z80emu1
  1333.  
  1334. ;    $8c adc a,h
  1335.  
  1336. z80opc8c:    move.w    d1,d6
  1337.         rol.w    #8,d6            ;h to lo
  1338.         and.b    #%11101111,ccr        ;clr x
  1339.         btst.l    #8,d0
  1340.         beq.s    z80opc8c1        ;if no cy
  1341.         or.b    #%00010000,ccr        ;set x
  1342. z80opc8c1:    addx.b    d6,d0            ;a+h->a
  1343.         bsr    setflg
  1344.         bra    z80emu1
  1345.  
  1346. ;    $8d adc a,l
  1347.  
  1348. z80opc8d:    and.b    #%11101111,ccr        ;clr x
  1349.         btst.l    #8,d0
  1350.         beq.s    z80opc8d1        ;if no cy
  1351.         or.b    #%00010000,ccr        ;set x
  1352. z80opc8d1:    addx.b    d1,d0            ;a+l->a
  1353.         bsr    setflg
  1354.         bra    z80emu1
  1355.  
  1356. ;    $8e adc a,(hl)
  1357.  
  1358. z80opc8e:    and.b    #%11101111,ccr        ;clr x
  1359.         btst.l    #8,d0
  1360.         beq.s    z80opc8e1        ;if no cy
  1361.         or.b    #%00010000,ccr        ;set x
  1362. z80opc8e1:    move.b    0(a4,d1.w),d6           ;(hl)
  1363.         addx.b    d6,d0            ;a+(hl)->a
  1364.         bsr    setflg
  1365.         bra    z80emu1
  1366.  
  1367. ;    $8f adc a,a
  1368.  
  1369. z80opc8f:    and.b    #%11101111,ccr        ;clr x
  1370.         btst.l    #8,d0
  1371.         beq.s    z80opc8f1        ;if no cy
  1372.         or.b    #%00010000,ccr        ;set x
  1373. z80opc8f1:    addx.b    d0,d0            ;a+a->a
  1374.         bsr    setflg
  1375.         bra    z80emu1
  1376.  
  1377. ;    $90 sub b
  1378.  
  1379. z80opc90:    move.w    d3,(a2)
  1380.         sub.b    (a2),d0                 ;a-b->a
  1381.         bsr    setflg
  1382.         bra    z80emu1
  1383.  
  1384. ;    $91 sub c
  1385.  
  1386. z80opc91:    sub.b    d3,d0            ;a-c->a
  1387.         bsr    setflg
  1388.         bra    z80emu1
  1389.  
  1390. ;    $92 sub d
  1391.  
  1392. z80opc92:    move.w    d2,(a2)
  1393.         sub.b    (a2),d0                 ;a-d->a
  1394.         bsr    setflg
  1395.         bra    z80emu1
  1396.  
  1397. ;    $93 sub e
  1398.  
  1399. z80opc93:    sub.b    d2,d0            ;a-e->a
  1400.         bsr    setflg
  1401.         bra    z80emu1
  1402.  
  1403. ;    $94 sub h
  1404.  
  1405. z80opc94:    move.w    d1,(a2)
  1406.         sub.b    (a2),d0                 ;a-h->a
  1407.         bsr    setflg
  1408.         bra    z80emu1
  1409.  
  1410. ;    $95 sub l
  1411.  
  1412. z80opc95:    sub.b    d1,d0            ;a-l->a
  1413.         bsr    setflg
  1414.         bra    z80emu1
  1415.  
  1416. ;    $96 sub (hl)
  1417.  
  1418. z80opc96:    sub.b    0(a4,d1.w),d0           ;a-(hl)->a
  1419.         bsr    setflg
  1420.         bra    z80emu1
  1421.  
  1422. ;    $97 sub a
  1423.  
  1424. z80opc97:    sub.b    d0,d0            ;a-a->a
  1425.         bsr    setflg
  1426.         bra    z80emu1
  1427.  
  1428. ;    $98 sbc a,b
  1429.  
  1430. z80opc98:    move.w    d3,d6
  1431.         rol.w    #8,d6            ;b to lo
  1432.         and.b    #%11101111,ccr        ;clr x
  1433.         btst.l    #8,d0
  1434.         beq.s    z80opc981        ;if no cy
  1435.         or.b    #%00010000,ccr        ;set x
  1436. z80opc981:    subx.b    d6,d0            ;a-b->a
  1437.         bsr    setflg
  1438.         bra    z80emu1
  1439.  
  1440. ;    $99 sbc a,c
  1441.  
  1442. z80opc99:    and.b    #%11101111,ccr        ;clr x
  1443.         btst.l    #8,d0
  1444.         beq.s    z80opc991        ;if no cy
  1445.         or.b    #%00010000,ccr        ;set x
  1446. z80opc991:    subx.b    d3,d0            ;a-c->a
  1447.         bsr    setflg
  1448.         bra    z80emu1
  1449.  
  1450. ;    $9a sbc a,d
  1451.  
  1452. z80opc9a:    move.w    d2,d6
  1453.         rol.w    #8,d6            ;d to lo
  1454.         and.b    #%11101111,ccr        ;clr x
  1455.         btst.l    #8,d0
  1456.         beq.s    z80opc9a1        ;if no cy
  1457.         or.b    #%00010000,ccr        ;set x
  1458. z80opc9a1:    subx.b    d6,d0            ;a-d->a
  1459.         bsr    setflg
  1460.         bra    z80emu1
  1461.  
  1462. ;    $9b sbc a,e
  1463.  
  1464. z80opc9b:    and.b    #%11101111,ccr        ;clr x
  1465.         btst.l    #8,d0
  1466.         beq.s    z80opc9b1        ;if no cy
  1467.         or.b    #%00010000,ccr        ;set x
  1468. z80opc9b1:    subx.b    d2,d0            ;a-e->a
  1469.         bsr    setflg
  1470.         bra    z80emu1
  1471.  
  1472. ;    $9c sbc a,h
  1473.  
  1474. z80opc9c:    move.w    d1,d6
  1475.         rol.w    #8,d6            ;h to lo
  1476.         and.b    #%11101111,ccr        ;clr x
  1477.         btst.l    #8,d0
  1478.         beq.s    z80opc9c1        ;if no cy
  1479.         or.b    #%00010000,ccr        ;set x
  1480. z80opc9c1:    subx.b    d6,d0            ;a-h->a
  1481.         bsr    setflg
  1482.         bra    z80emu1
  1483.  
  1484. ;    $9d sbc a,l
  1485.  
  1486. z80opc9d:    and.b    #%11101111,ccr        ;clr x
  1487.         btst.l    #8,d0
  1488.         beq.s    z80opc9d1        ;if no cy
  1489.         or.b    #%00010000,ccr        ;set x
  1490. z80opc9d1:    subx.b    d1,d0            ;a-l->a
  1491.         bsr    setflg
  1492.         bra    z80emu1
  1493.  
  1494. ;    $9e sbc a,(hl)
  1495.  
  1496. z80opc9e:    and.b    #%11101111,ccr        ;clr x
  1497.         btst.l    #8,d0
  1498.         beq.s    z80opc9e1        ;if no cy
  1499.         or.b    #%00010000,ccr        ;set x
  1500. z80opc9e1:    move.b    0(a4,d1.w),d6           ;(hl)
  1501.         subx.b    d6,d0            ;a-(hl)->a
  1502.         bsr    setflg
  1503.         bra    z80emu1
  1504.  
  1505. ;    $9f sbc a,a
  1506.  
  1507. z80opc9f:    and.b    #%11101111,ccr        ;clr x
  1508.         btst.l    #8,d0
  1509.         beq.s    z80opc9f1        ;if no cy
  1510.         or.b    #%00010000,ccr        ;set x
  1511. z80opc9f1:    subx.b    d0,d0            ;a-a->a
  1512.         bsr    setflg
  1513.         bra    z80emu1
  1514.  
  1515. ;    $a0 and b
  1516.  
  1517. z80opca0:    move.w    d3,(a2)
  1518.         and.b    (a2),d0                 ;a and b->a
  1519.         bsr    setflgl
  1520.         bra    z80emu1
  1521.  
  1522. ;    $a1 and c
  1523.  
  1524. z80opca1:    and.b    d3,d0            ;a and c->a
  1525.         bsr    setflgl
  1526.         bra    z80emu1
  1527.  
  1528. ;    $a2 and d
  1529.  
  1530. z80opca2:    move.w    d2,(a2)
  1531.         and.b    (a2),d0                 ;a and d->a
  1532.         bsr    setflgl
  1533.         bra    z80emu1
  1534.  
  1535. ;    $a3 and e
  1536.  
  1537. z80opca3:    and.b    d2,d0            ;a and e->a
  1538.         bsr    setflgl
  1539.         bra    z80emu1
  1540.  
  1541. ;    $a4 and h
  1542.  
  1543. z80opca4:    move.w    d1,(a2)
  1544.         and.b    (a2),d0                 ;a and h->a
  1545.         bsr    setflgl
  1546.         bra    z80emu1
  1547.  
  1548. ;    $a5 and l
  1549.  
  1550. z80opca5:    and.b    d1,d0            ;a and l->a
  1551.         bsr    setflgl
  1552.         bra    z80emu1
  1553.  
  1554. ;    $a6 and (hl)
  1555.  
  1556. z80opca6:    and.b    0(a4,d1.w),d0           ;a and (hl)->a
  1557.         bsr    setflgl
  1558.         bra    z80emu1
  1559.  
  1560. ;    $a7 and a
  1561.  
  1562. z80opca7:    and.b    d0,d0            ;a and a->a
  1563.         bsr    setflgl
  1564.         bra    z80emu1
  1565.  
  1566. ;    $a8 xor b
  1567.  
  1568. z80opca8:    move.w    d3,(a2)
  1569.         move.b    (a2),d6
  1570.         eor.b    d6,d0            ;a xor b->a
  1571.         bsr    setflgl
  1572.         bra    z80emu1
  1573.  
  1574. ;    $a9 xor c
  1575.  
  1576. z80opca9:    eor.b    d3,d0            ;a xor c->a
  1577.         bsr    setflgl
  1578.         bra    z80emu1
  1579.  
  1580. ;    $aa xor d
  1581.  
  1582. z80opcaa:    move.w    d2,(a2)
  1583.         move.b    (a2),d6
  1584.         eor.b    d6,d0            ;a xor d->a
  1585.         bsr    setflgl
  1586.         bra    z80emu1
  1587.  
  1588. ;    $ab xor e
  1589.  
  1590. z80opcab:    eor.b    d2,d0            ;a xor e->a
  1591.         bsr    setflgl
  1592.         bra    z80emu1
  1593.  
  1594. ;    $ac xor h
  1595.  
  1596. z80opcac:    move.w    d1,(a2)
  1597.         move.b    (a2),d6
  1598.         eor.b    d6,d0            ;a xor h->a
  1599.         bsr    setflgl
  1600.         bra    z80emu1
  1601.  
  1602. ;    $ad xor l
  1603.  
  1604. z80opcad:    eor.b    d1,d0            ;a xor l->a
  1605.         bsr    setflgl
  1606.         bra    z80emu1
  1607.  
  1608. ;    $ae xor (hl)
  1609.  
  1610. z80opcae:    move.b    0(a4,d1.w),d6           ;(hl)
  1611.         eor.b    d6,d0            ;a xor (hl)->a
  1612.         bsr    setflgl
  1613.         bra    z80emu1
  1614.  
  1615. ;    $af xor a
  1616.  
  1617. z80opcaf:    eor.b    d0,d0            ;a xor a->a
  1618.         bsr    setflgl
  1619.         bra    z80emu1
  1620.  
  1621. ;    $b0 or b
  1622.  
  1623. z80opcb0:    move.w    d3,(a2)
  1624.         or.b    (a2),d0                 ;a or b->a
  1625.         bsr    setflgl
  1626.         bra    z80emu1
  1627.  
  1628. ;    $b1 or c
  1629.  
  1630. z80opcb1:    or.b    d3,d0            ;a or c->a
  1631.         bsr    setflgl
  1632.         bra    z80emu1
  1633.  
  1634. ;    $b2 or d
  1635.  
  1636. z80opcb2:    move.w    d2,(a2)
  1637.         or.b    (a2),d0                 ;a or d->a
  1638.         bsr    setflgl
  1639.         bra    z80emu1
  1640.  
  1641. ;    $b3 or e
  1642.  
  1643. z80opcb3:    or.b    d2,d0            ;a or e->a
  1644.         bsr    setflgl
  1645.         bra    z80emu1
  1646.  
  1647. ;    $b4 or h
  1648.  
  1649. z80opcb4:    move.w    d1,(a2)
  1650.         or.b    (a2),d0                 ;a or h->a
  1651.         bsr    setflgl
  1652.         bra    z80emu1
  1653.  
  1654. ;    $b5 or l
  1655.  
  1656. z80opcb5:    or.b    d1,d0            ;a or l->a
  1657.         bsr    setflgl
  1658.         bra    z80emu1
  1659.  
  1660. ;    $b6 or (hl)
  1661.  
  1662. z80opcb6:    or.b    0(a4,d1.w),d0           ;a or (hl)->a
  1663.         bsr    setflgl
  1664.         bra    z80emu1
  1665.  
  1666. ;    $b7 or a
  1667.  
  1668. z80opcb7:    or.b    d0,d0            ;a or a->a
  1669.         bsr    setflgl
  1670.         bra    z80emu1
  1671.  
  1672. ;    $b8 cp b
  1673.  
  1674. z80opcb8:    move.w    d3,(a2)
  1675.         cmp.b    (a2),d0                 ;a-b
  1676.         bsr    setflg
  1677.         bra    z80emu1
  1678.  
  1679. ;    $b9 cp c
  1680.  
  1681. z80opcb9:    cmp.b    d3,d0            ;a-c
  1682.         bsr    setflg
  1683.         bra    z80emu1
  1684.  
  1685. ;    $ba cp d
  1686.  
  1687. z80opcba:    move.w    d2,(a2)
  1688.         cmp.b    (a2),d0                 ;a-d
  1689.         bsr    setflg
  1690.         bra    z80emu1
  1691.  
  1692. ;    $bb cp e
  1693.  
  1694. z80opcbb:    cmp.b    d2,d0            ;a-e
  1695.         bsr    setflg
  1696.         bra    z80emu1
  1697.  
  1698. ;    $bc cp h
  1699.  
  1700. z80opcbc:    move.w    d1,(a2)
  1701.         cmp.b    (a2),d0                 ;a-h
  1702.         bsr    setflg
  1703.         bra    z80emu1
  1704.  
  1705. ;    $bd cp l
  1706.  
  1707. z80opcbd:    cmp.b    d1,d0            ;a-l
  1708.         bsr    setflg
  1709.         bra    z80emu1
  1710.  
  1711. ;    $be cp (hl)
  1712.  
  1713. z80opcbe:    cmp.b    0(a4,d1.w),d0           ;a-(hl)
  1714.         bsr    setflg
  1715.         bra    z80emu1
  1716.  
  1717. ;    $bf cp a
  1718.  
  1719. z80opcbf:    cmp.b    d0,d0            ;a-a
  1720.         bsr    setflg
  1721.         bra    z80emu1
  1722.  
  1723. ;    $c0 ret nz
  1724.  
  1725. z80opcc0:    btst.l    #14,d0
  1726.         bne    z80emu1         ;if z=1
  1727.         ret
  1728.         bra    z80emu1
  1729.  
  1730. ;    $c1 pop bc
  1731.  
  1732. z80opcc1:    pop    d3
  1733.         bra    z80emu1
  1734.  
  1735. ;    $c2 jp nz,nn
  1736.  
  1737. z80opcc2:    ldrrimm d6
  1738.         btst.l    #14,d0
  1739.         bne    z80emu1         ;if z=1
  1740.         move.w    d6,a0            ;jump
  1741.         bra    z80emu1
  1742.  
  1743. ;    $c3 jp nn
  1744.  
  1745. z80opcc3:    ldrrimm d6
  1746.         move.w    d6,a0            ;jump
  1747.         bra    z80emu1
  1748.  
  1749. ;    $c4 call nz,nn
  1750.  
  1751. z80opcc4:    ldrrimm d6
  1752.         btst.l    #14,d0
  1753.         bne    z80emu1         ;if z=1
  1754.         call
  1755.         bra    z80emu1
  1756.  
  1757. ;    $c5 push bc
  1758.  
  1759. z80opcc5:    push    d3
  1760.         bra    z80emu1
  1761.  
  1762. ;    $c6 add a,n
  1763.  
  1764. z80opcc6:    add.b    0(a4,a0.w),d0           ;a+n->a
  1765.         addq.l    #1,a0
  1766.         bsr    setflg
  1767.         bra    z80emu1
  1768.  
  1769. ;    $c7 rst 0
  1770.  
  1771. z80opcc7:    move.w    a0,d6            ;pc
  1772.         subq.l    #2,a1
  1773.         move.b    d6,0(a4,a1.w)           ;pc lo
  1774.         rol.w    #8,d6            ;move hi to lo
  1775.         addq.l    #1,a1
  1776.         move.b    d6,0(a4,a1.w)           ;pc hi
  1777.         subq.l    #1,a1            ;set sp
  1778.         move.l    #0,a0            ;reset
  1779.         bra    z80emu1
  1780.  
  1781. ;    $c8 ret z
  1782.  
  1783. z80opcc8:    btst.l    #14,d0
  1784.         beq    z80emu1         ;if z=0
  1785.         ret
  1786.         bra    z80emu1
  1787.  
  1788. ;    $c9 ret, return for cpm emulator
  1789.  
  1790. z80opcc9:    ret
  1791.         bra    z80emu1
  1792.  
  1793. ;    $ca jp z,nn
  1794.  
  1795. z80opcca:    ldrrimm d6
  1796.         btst.l    #14,d0
  1797.         beq    z80emu1         ;if z=0
  1798.         move.w    d6,a0            ;jump
  1799.         bra    z80emu1
  1800.  
  1801. ;    $cb 1:st byte in rotate, shift, and bit manipulation
  1802. ;    is found in module zekcb
  1803.  
  1804. ;    $cc call z,nn
  1805.  
  1806. z80opccc:    ldrrimm d6
  1807.         btst.l    #14,d0
  1808.         beq    z80emu1         ;if z=0
  1809.         call
  1810.         bra    z80emu1
  1811.  
  1812. ;    $cd call nn
  1813.  
  1814. z80opccd:    ldrrimm d6
  1815.         call
  1816.         bra    z80emu1
  1817.  
  1818. ;    $ce adc a,n
  1819.  
  1820. z80opcce:    and.b    #%11101111,ccr        ;clr x
  1821.         btst.l    #8,d0
  1822.         beq.s    z80opcce1        ;if no cy
  1823.         or.b    #%00010000,ccr        ;set x
  1824. z80opcce1:    move.b    0(a4,a0.w),d6           ;n
  1825.         addx.b    d6,d0            ;a+n->a
  1826.         addq.l    #1,a0
  1827.         bsr    setflg
  1828.         bra    z80emu1
  1829.  
  1830. ;    $cf rst 8
  1831.  
  1832. z80opccf:    move.w    a0,d6            ;pc
  1833.         subq.l    #2,a1
  1834.         move.b    d6,0(a4,a1.w)           ;pc lo
  1835.         rol.w    #8,d6            ;move hi to lo
  1836.         addq.l    #1,a1
  1837.         move.b    d6,(a1)                 ;pc hi
  1838.         subq.l    #1,a1            ;set sp
  1839.         move.l    #8,a0            ;jump
  1840.         bra    z80emu1
  1841.  
  1842. ;    $d0 ret nc
  1843.  
  1844. z80opcd0:    btst.l    #8,d0
  1845.         bne    z80emu1         ;if c=1
  1846.         ret
  1847.         bra    z80emu1
  1848.  
  1849. ;    $d1 pop de
  1850.  
  1851. z80opcd1:    pop    d2
  1852.         bra    z80emu1
  1853.  
  1854. ;    $d2 jp nc,nn
  1855.  
  1856. z80opcd2:    ldrrimm d6
  1857.         btst.l    #8,d0
  1858.         bne    z80emu1         ;if c=1
  1859.         move.w    d6,a0            ;jump
  1860.         bra    z80emu1
  1861.  
  1862. ;    $d3 out (n),a is nop
  1863.  
  1864. z80opcd3:    addq.l    #1,a0            ;skip n
  1865.         bra    z80emu1
  1866.  
  1867. ;    $d4 call nc,nn
  1868.  
  1869. z80opcd4:    ldrrimm d6
  1870.         btst.l    #8,d0
  1871.         bne    z80emu1         ;if c=1
  1872.         call
  1873.         bra    z80emu1
  1874.  
  1875. ;    $d5 push de
  1876.  
  1877. z80opcd5:    push    d2
  1878.         bra    z80emu1
  1879.  
  1880. ;    $d6 sub n
  1881.  
  1882. z80opcd6:    sub.b    0(a4,a0.w),d0           ;a+n->a
  1883.         addq.l    #1,a0
  1884.         bsr    setflg
  1885.         bra    z80emu1
  1886.  
  1887. ;    $d7 rst 16
  1888.  
  1889. z80opcd7:    move.w    a0,d6            ;pc
  1890.         subq.l    #2,a1
  1891.         move.b    d6,0(a4,a1.w)           ;pc lo
  1892.         rol.w    #8,d6            ;move hi to lo
  1893.         addq.l    #1,a1
  1894.         move.b    d6,0(a4,a1.w)           ;pc hi
  1895.         subq.l    #1,a1            ;set sp
  1896.         move.l    #16,a0            ;jump
  1897.         bra    z80emu1
  1898.  
  1899. ;    $d8 ret c
  1900.  
  1901. z80opcd8:    btst.l    #8,d0
  1902.         beq    z80emu1         ;if c=0
  1903.         ret
  1904.         bra    z80emu1
  1905.  
  1906. ;    $d9 exx
  1907.  
  1908. z80opcd9:    swap    d1            ;hl
  1909.         swap    d2            ;de
  1910.         swap    d3            ;bc
  1911.         bra    z80emu1
  1912.  
  1913. ;    $da jp c,nn
  1914.  
  1915. z80opcda:    ldrrimm d6
  1916.         btst.l    #8,d0
  1917.         beq    z80emu1         ;if c=0
  1918.         move.w    d6,a0            ;jump
  1919.         bra    z80emu1
  1920.  
  1921. ;    $db in a,(n)
  1922.  
  1923. z80opcdb:    clr.b    d0            ;0->a
  1924.         addq.l    #1,a0            ;skip n
  1925.         bra    z80emu1
  1926.  
  1927. ;    $dc call c,nn
  1928.  
  1929. z80opcdc:    ldrrimm d6
  1930.         btst.l    #8,d0
  1931.         beq    z80emu1         ;if c=0
  1932.         call
  1933.         bra    z80emu1
  1934.  
  1935. ;    $dd 1:st byte in ix
  1936. ;    is found in module zekdd
  1937.  
  1938. ;    $de sbc a,n
  1939.  
  1940. z80opcde:    and.b    #%11101111,ccr        ;clr x
  1941.         btst.l    #8,d0
  1942.         beq.s    z80opcde1        ;if no cy
  1943.         or.b    #%00010000,ccr        ;set x
  1944. z80opcde1:    move.b    0(a4,a0.w),d6           ;n
  1945.         subx.b    d6,d0            ;a+n->a
  1946.         addq.l    #1,a0
  1947.         bsr    setflg
  1948.         bra    z80emu1
  1949.  
  1950. ;    $df rst 24
  1951.  
  1952. z80opcdf:    move.w    a0,d6            ;pc
  1953.         subq.l    #2,a1
  1954.         move.b    d6,0(a4,a1.w)           ;pc lo
  1955.         rol.w    #8,d6            ;move hi to lo
  1956.         addq.l    #1,a1
  1957.         move.b    d6,0(a4,a1.w)           ;pc hi
  1958.         subq.l    #1,a1            ;set sp
  1959.         move.l    #24,a0            ;jump
  1960.         bra    z80emu1
  1961.  
  1962. ;    $e0 ret po
  1963.  
  1964. z80opce0:    btst.l    #10,d0            ;po = v=0
  1965.         bne    z80emu1         ;if v=1
  1966.         ret
  1967.         bra    z80emu1
  1968.  
  1969. ;    $e1 pop hl
  1970.  
  1971. z80opce1:    pop    d1
  1972.         bra    z80emu1
  1973.  
  1974. ;    $e2 jp po,nn
  1975.  
  1976. z80opce2:    ldrrimm d6
  1977.         btst.l    #10,d0            ;po = v=0
  1978.         bne    z80emu1         ;if v=1
  1979.         move.w    d6,a0            ;jump
  1980.         bra    z80emu1
  1981.  
  1982. ;    $e3 ex (sp),hl
  1983.  
  1984. z80opce3:    move.b    1(a4,a1.w),d6           ;hi from stack
  1985.         rol.w    #8,d6            ;move to hi
  1986.         move.b    0(a4,a1.w),d6           ;lo from stack
  1987.         move.w    d6,a5
  1988.         move.w    d1,d6            ;hl
  1989.         move.b    d6,0(a4,a1.w)           ;l to stack
  1990.         rol.w    #8,d6            ;move hi to lo
  1991.         move.b    d6,1(a4,a1.w)           ;h to stack
  1992.         move.w    a5,d1            ;to hl
  1993.         bra    z80emu1
  1994.  
  1995. ;    $e4 call po,nn
  1996.  
  1997. z80opce4:    ldrrimm d6
  1998.         btst.l    #10,d0            ;po = v=0
  1999.         bne    z80emu1         ;if v=1
  2000.         call
  2001.         bra    z80emu1
  2002.  
  2003. ;    $e5 push hl
  2004.  
  2005. z80opce5:    push    d1
  2006.         bra    z80emu1
  2007.  
  2008. ;    $e6 and n
  2009.  
  2010. z80opce6:    and.b    0(a4,a0.w),d0           ;a and n->a
  2011.         addq.l    #1,a0
  2012.         bsr    setflgl
  2013.         bra    z80emu1
  2014.  
  2015. ;    $e7 rst 32
  2016.  
  2017. z80opce7:    move.w    a0,d6            ;pc
  2018.         subq.l    #2,a1
  2019.         move.b    d6,0(a4,a1.w)           ;pc lo
  2020.         rol.w    #8,d6            ;move hi to lo
  2021.         addq.l    #1,a1
  2022.         move.b    d6,0(a4,a1.w)           ;pc hi
  2023.         subq.l    #1,a1            ;set sp
  2024.         move.l    #32,a0            ;jump
  2025.         bra    z80emu1
  2026.  
  2027. ;    $e8 ret pe
  2028.  
  2029. z80opce8:    btst.l    #10,d0            ;pe = v=1
  2030.         beq    z80emu1         ;if v=0
  2031.         ret
  2032.         bra    z80emu1
  2033.  
  2034. ;    $e9 jp (hl)
  2035.  
  2036. z80opce9:    move.w    d1,a0
  2037.         bra    z80emu1
  2038.  
  2039. ;    $ea jp pe,nn
  2040.  
  2041. z80opcea:    ldrrimm d6
  2042.         btst.l    #10,d0            ;pe = v=1
  2043.         beq    z80emu1         ;if v=0
  2044.         move.w    d6,a0            ;jump
  2045.         bra    z80emu1
  2046.  
  2047. ;    $eb ex de,hl
  2048.  
  2049.  
  2050. z80opceb:    move.w    d2,d6            ;de
  2051.         move.w    d1,d2            ;hl to de
  2052.         move.w    d6,d1            ;de to hl
  2053.         bra    z80emu1
  2054.  
  2055. ;    $ec call pe,nn
  2056.  
  2057. z80opcec:    ldrrimm d6
  2058.         btst.l    #10,d0            ;po = v=0
  2059.         beq    z80emu1         ;if v=0
  2060.         call
  2061.         bra    z80emu1
  2062.  
  2063. ;    $ed 1:st byte in 2 byte opcode
  2064. ;    is found in module zeked
  2065.  
  2066. ;    $ee xor n
  2067.  
  2068. z80opcee:    move.b    0(a4,a0.w),d6           ;n
  2069.         addq.l    #1,a0
  2070.         eor.b    d6,d0            ;a xor n->a
  2071.         bsr    setflgl
  2072.         bra    z80emu1
  2073.  
  2074. ;    $ef rst 40
  2075.  
  2076. z80opcef:    move.w    a0,d6            ;pc
  2077.         subq.l    #2,a1
  2078.         move.b    d6,0(a4,a1.w)           ;pc lo
  2079.         rol.w    #8,d6            ;move hi to lo
  2080.         addq.l    #1,a1
  2081.         move.b    d6,0(a4,a1.w)           ;pc hi
  2082.         subq.l    #1,a1            ;set sp
  2083.         move.l    #40,a0            ;jump
  2084.         bra    z80emu1
  2085.  
  2086. ;    $f0 ret p
  2087.  
  2088. z80opcf0:    btst.l    #15,d0
  2089.         bne    z80emu1         ;if s=1
  2090.         ret
  2091.         bra    z80emu1
  2092.  
  2093. ;    $f1 pop af
  2094.  
  2095.  
  2096. z80opcf1:    move.b    0(a4,a1.w),d0           ;f
  2097.         rol.w    #8,d0            ;move to hi
  2098.         move.b    1(a4,a1.w),d0           ;a
  2099.         addq.l    #2,a1            ;set sp
  2100.         bra    z80emu1
  2101.  
  2102. ;    $f2 jp p,nn
  2103.  
  2104. z80opcf2:    ldrrimm d6
  2105.         btst.l    #15,d0
  2106.         bne    z80emu1         ;if s=1
  2107.         move.w    d6,a0            ;jump
  2108.         bra    z80emu1
  2109.  
  2110. ;    $f3 di is nop
  2111.  
  2112. ;    $f4 call p,nn
  2113.  
  2114. z80opcf4:    ldrrimm d6
  2115.         btst.l    #15,d0
  2116.         bne    z80emu1         ;if s=1
  2117.         call
  2118.         bra    z80emu1
  2119.  
  2120. ;    $f5 push af
  2121.  
  2122. z80opcf5:    move.w    d0,d6
  2123.         subq.l    #1,a1
  2124.         move.b    d6,0(a4,a1.w)           ;a
  2125.         rol.w    #8,d6            ;move hi to lo
  2126.         subq.l    #1,a1
  2127.         move.b    d6,0(a4,a1.w)           ;f
  2128.         bra    z80emu1
  2129.  
  2130. ;    $f6 or n
  2131.  
  2132. z80opcf6:    or.b    0(a4,a0.w),d0           ;a or n->a
  2133.         addq.l    #1,a0
  2134.         bsr    setflgl
  2135.         bra    z80emu1
  2136.  
  2137. ;    $f7 rst 48
  2138.  
  2139. z80opcf7:    move.w    a0,d6            ;pc
  2140.         subq.l    #2,a1
  2141.         move.b    d6,0(a4,a1.w)           ;pc lo
  2142.         rol.w    #8,d6            ;move hi to lo
  2143.         addq.l    #1,a1
  2144.         move.b    d6,0(a4,a1.w)           ;pc hi
  2145.         subq.l    #1,a1            ;set sp
  2146.         move.l    #48,a0            ;jump
  2147.         bra    z80emu1
  2148.  
  2149. ;    $f8 ret m
  2150.  
  2151. z80opcf8:    btst.l    #15,d0
  2152.         beq    z80emu1         ;if s=0
  2153.         ret
  2154.         bra    z80emu1
  2155.  
  2156. ;    $f9 ld sp,hl
  2157.  
  2158. z80opcf9:    move.w    d1,a1
  2159.         bra    z80emu1
  2160.  
  2161. ;    $fa jp m,nn
  2162.  
  2163. z80opcfa:    ldrrimm d6
  2164.         btst.l    #15,d0
  2165.         beq    z80emu1         ;if s=0
  2166.         move.w    d6,a0            ;jump
  2167.         bra    z80emu1
  2168.  
  2169. ;    $fb ei is nop
  2170.  
  2171. ;    $fc call m,nn
  2172.  
  2173. z80opcfc:    ldrrimm d6
  2174.         btst.l    #15,d0
  2175.         beq    z80emu1         ;if s=0
  2176.         call
  2177.         bra    z80emu1
  2178.  
  2179. ;    $fd 1:st byte in iy
  2180. ;    is found in module zekdd
  2181.  
  2182. ;    $fe cp n
  2183.  
  2184. z80opcfe:    cmp.b    0(a4,a0.w),d0           ;a-n
  2185.         addq.l    #1,a0
  2186.         bsr    setflg
  2187.         bra    z80emu1
  2188.  
  2189. ;    $ff rst 56
  2190.  
  2191. z80opcff:    move.w    a0,d6            ;pc
  2192.         subq.l    #2,a1
  2193.         move.b    d6,0(a4,a1.w)           ;pc lo
  2194.         rol.w    #8,d6            ;move hi to lo
  2195.         addq.l    #1,a1
  2196.         move.b    d6,0(a4,a1.w)           ;pc hi
  2197.         subq.l    #1,a1            ;set sp
  2198.         move.l    #56,a0            ;jump
  2199.         bra    z80emu1
  2200.  
  2201. ;    setflg
  2202. ;    set flags in d0 bit 15-8 15 14 13 12 11 10  9  8  always n=h=0
  2203. ;                  s  z    -  h  -  v  n  c
  2204. ;    from flags in sr bit 7-0  7  6    5  4  3  2  1  0
  2205. ;                  -  -    -  x  n  z  v  c
  2206. ;    chg : d6,a5
  2207.  
  2208. setflg:     move.w     sr,d6            ;6
  2209.         and.w     #$000f,d6        ;8 clr unwanted
  2210.         lsl.b     #1,d6            ;8 tab is words
  2211.         move.l     #flgtab,a5        ;12 ptr translation tab
  2212.         move.w     0(a5,d6),d6            ;14 translated flags
  2213.         and.w     #%0010100011111111,d0    ;8 clr flags
  2214.         or.w     d6,d0            ;4 merge  =60
  2215.         rts
  2216.  
  2217. ;    setflgnc
  2218. ;    does not effect c flg
  2219. ;    set flags in d0 bit 15-8 15 14 13 12 11 10  9  8  always n=h=0
  2220. ;                  s  z    -  h  -  v  n  c
  2221. ;    from flags in sr bit 7-0  7  6    5  4  3  2  1  0
  2222. ;                  -  -    -  x  n  z  v  c
  2223. ;    chg : d6,a5
  2224.  
  2225. setflgnc:    move.w     sr,d6            ;6
  2226.         and.w     #%0000000000001110,d6    ;8 clr unwanted
  2227.         move.l     #flgtabnc,a5        ;12 ptr translation tab
  2228.         move.w     0(a5,d6),d6            ;14 translated flags
  2229.         and.w     #%0010100111111111,d0    ;8 clr flags
  2230.         or.w     d6,d0            ;4 merge  =60
  2231.         rts
  2232.  
  2233. ;    setflgl
  2234. ;    same as setflg but for logical instructions
  2235. ;    use v flag as parity flag, 1=even 0=odd
  2236. ;    v flag operate operate on d0.b (a reg)
  2237. ;    set v flag in d0 bit 15-8 15 14 13 12 11 10  9    8
  2238. ;                   s  z  -  h  -  v  n    c
  2239. ;    chg : d6,a5
  2240.  
  2241. setflgl:    bsr    setflg            ;normal flgs
  2242.         moveq.l #0,d6
  2243.         move.b    d0,d6            ;a reg
  2244.         move.l    #partab,a5        ;ptr parity tab
  2245.         move.b    0(a5,d6.w),d6           ;parity bit
  2246.         and.w    #%1111101111111111,d0    ;clr v flg
  2247.         asl.w    #8,d6            ;move to hi
  2248.         or.w    d6,d0            ;merge
  2249.         rts
  2250.  
  2251. ;    data area
  2252. ;    initialized data area
  2253. ;    flgtab
  2254. ;    translation table for 68000 flags to z80 flags
  2255. ;              sz-h-vnc< areg >     nzvc
  2256.  
  2257. flgtab:     dc.w     %0000000000000000    ;0000
  2258.         dc.w     %0000000100000000    ;0001
  2259.         dc.w     %0000010000000000    ;0010
  2260.         dc.w     %0000010100000000    ;0011
  2261.         dc.w     %0100000000000000    ;0100
  2262.         dc.w     %0100000100000000    ;0101
  2263.         dc.w     %0100010000000000    ;0110
  2264.         dc.w     %0100010100000000    ;0111
  2265.         dc.w     %1000000000000000    ;1000
  2266.         dc.w     %1000000100000000    ;1001
  2267.         dc.w     %1000010000000000    ;1010
  2268.         dc.w     %1000010100000000    ;1011
  2269.         dc.w     %1100000000000000    ;1100
  2270.         dc.w     %1100000100000000    ;1101
  2271.         dc.w     %1100010000000000    ;1110
  2272.         dc.w     %1100010100000000    ;1111
  2273.  
  2274. ;    flgtabnc
  2275. ;    translation table for 68000 flags to z80 flags, no carry
  2276. ;              sz-h-vnc< areg >     nzvc
  2277.  
  2278. flgtabnc:    dc.w     %0000000000000000    ;0000
  2279.         dc.w     %0000010000000000    ;0010
  2280.         dc.w     %0100000000000000    ;0100
  2281.         dc.w     %0100010000000000    ;0110
  2282.         dc.w     %1000000000000000    ;1000
  2283.         dc.w     %1000010000000000    ;1010
  2284.         dc.w     %1100000000000000    ;1100
  2285.         dc.w     %1100010000000000    ;1110
  2286.  
  2287. ;    partab
  2288. ;    look up table for v flag values, even=00000100b=4, odd=0
  2289.  
  2290. partab:     dc.b    4    ;00000000  00
  2291.         dc.b    0    ;00000001  01
  2292.         dc.b    0    ;00000010  02
  2293.         dc.b    4    ;00000011  03
  2294.         dc.b    0    ;00000100  04
  2295.         dc.b    4    ;00000101  05
  2296.         dc.b    4    ;00000110  06
  2297.         dc.b    0    ;00000111  07
  2298.         dc.b    0    ;00001000  08
  2299.         dc.b    4    ;00001001  09
  2300.         dc.b    4    ;00001010  0a
  2301.         dc.b    0    ;00001011  0b
  2302.         dc.b    4    ;00001100  0c
  2303.         dc.b    0    ;00001101  0d
  2304.         dc.b    0    ;00001110  0e
  2305.         dc.b    4    ;00001111  0f
  2306.  
  2307.         dc.b    0    ;00000000  00 0001 plus 1 bit : invert 0000
  2308.         dc.b    4    ;00000001  01 10
  2309.         dc.b    4    ;00000010  02
  2310.         dc.b    0    ;00000011  03
  2311.         dc.b    4    ;00000100  04
  2312.         dc.b    0    ;00000101  05
  2313.         dc.b    0    ;00000110  06
  2314.         dc.b    4    ;00000111  07
  2315.         dc.b    4    ;00001000  08
  2316.         dc.b    0    ;00001001  09
  2317.         dc.b    0    ;00001010  0a
  2318.         dc.b    4    ;00001011  0b
  2319.         dc.b    0    ;00001100  0c
  2320.         dc.b    4    ;00001101  0d
  2321.         dc.b    4    ;00001110  0e
  2322.         dc.b    0    ;00001111  0f
  2323.  
  2324.         dc.b    0    ;00000000  00 0010 plus 1 bit : invert 0000
  2325.         dc.b    4    ;00000001  01 20
  2326.         dc.b    4    ;00000010  02
  2327.         dc.b    0    ;00000011  03
  2328.         dc.b    4    ;00000100  04
  2329.         dc.b    0    ;00000101  05
  2330.         dc.b    0    ;00000110  06
  2331.         dc.b    4    ;00000111  07
  2332.         dc.b    4    ;00001000  08
  2333.         dc.b    0    ;00001001  09
  2334.         dc.b    0    ;00001010  0a
  2335.         dc.b    4    ;00001011  0b
  2336.         dc.b    0    ;00001100  0c
  2337.         dc.b    4    ;00001101  0d
  2338.         dc.b    4    ;00001110  0e
  2339.         dc.b    0    ;00001111  0f
  2340.  
  2341.         dc.b    4    ;00000000  00 0011 plus 2 bit : same as 0000
  2342.         dc.b    0    ;00000001  01 30
  2343.         dc.b    0    ;00000010  02
  2344.         dc.b    4    ;00000011  03
  2345.         dc.b    0    ;00000100  04
  2346.         dc.b    4    ;00000101  05
  2347.         dc.b    4    ;00000110  06
  2348.         dc.b    0    ;00000111  07
  2349.         dc.b    0    ;00001000  08
  2350.         dc.b    4    ;00001001  09
  2351.         dc.b    4    ;00001010  0a
  2352.         dc.b    0    ;00001011  0b
  2353.         dc.b    4    ;00001100  0c
  2354.         dc.b    0    ;00001101  0d
  2355.         dc.b    0    ;00001110  0e
  2356.         dc.b    4    ;00001111  0f
  2357.  
  2358.         dc.b    0    ;00000000  00 0100 plus 1 bit : invert 0000
  2359.         dc.b    4    ;00000001  01 40
  2360.         dc.b    4    ;00000010  02
  2361.         dc.b    0    ;00000011  03
  2362.         dc.b    4    ;00000100  04
  2363.         dc.b    0    ;00000101  05
  2364.         dc.b    0    ;00000110  06
  2365.         dc.b    4    ;00000111  07
  2366.         dc.b    4    ;00001000  08
  2367.         dc.b    0    ;00001001  09
  2368.         dc.b    0    ;00001010  0a
  2369.         dc.b    4    ;00001011  0b
  2370.         dc.b    0    ;00001100  0c
  2371.         dc.b    4    ;00001101  0d
  2372.         dc.b    4    ;00001110  0e
  2373.         dc.b    0    ;00001111  0f
  2374.  
  2375.         dc.b    4    ;00000000  00 0101 plus 2 bit : same as 0000
  2376.         dc.b    0    ;00000001  01 50
  2377.         dc.b    0    ;00000010  02
  2378.         dc.b    4    ;00000011  03
  2379.         dc.b    0    ;00000100  04
  2380.         dc.b    4    ;00000101  05
  2381.         dc.b    4    ;00000110  06
  2382.         dc.b    0    ;00000111  07
  2383.         dc.b    0    ;00001000  08
  2384.         dc.b    4    ;00001001  09
  2385.         dc.b    4    ;00001010  0a
  2386.         dc.b    0    ;00001011  0b
  2387.         dc.b    4    ;00001100  0c
  2388.         dc.b    0    ;00001101  0d
  2389.         dc.b    0    ;00001110  0e
  2390.         dc.b    4    ;00001111  0f
  2391.  
  2392.         dc.b    4    ;00000000  00 0110 plus 2 bit : same as 0000
  2393.         dc.b    0    ;00000001  01 60
  2394.         dc.b    0    ;00000010  02
  2395.         dc.b    4    ;00000011  03
  2396.         dc.b    0    ;00000100  04
  2397.         dc.b    4    ;00000101  05
  2398.         dc.b    4    ;00000110  06
  2399.         dc.b    0    ;00000111  07
  2400.         dc.b    0    ;00001000  08
  2401.         dc.b    4    ;00001001  09
  2402.         dc.b    4    ;00001010  0a
  2403.         dc.b    0    ;00001011  0b
  2404.         dc.b    4    ;00001100  0c
  2405.         dc.b    0    ;00001101  0d
  2406.         dc.b    0    ;00001110  0e
  2407.         dc.b    4    ;00001111  0f
  2408.  
  2409.         dc.b    0    ;00000000  00 0111 plus 3 bit : invert 0000
  2410.         dc.b    4    ;00000001  01 70
  2411.         dc.b    4    ;00000010  02
  2412.         dc.b    0    ;00000011  03
  2413.         dc.b    4    ;00000100  04
  2414.         dc.b    0    ;00000101  05
  2415.         dc.b    0    ;00000110  06
  2416.         dc.b    4    ;00000111  07
  2417.         dc.b    4    ;00001000  08
  2418.         dc.b    0    ;00001001  09
  2419.         dc.b    0    ;00001010  0a
  2420.         dc.b    4    ;00001011  0b
  2421.         dc.b    0    ;00001100  0c
  2422.         dc.b    4    ;00001101  0d
  2423.         dc.b    4    ;00001110  0e
  2424.         dc.b    0    ;00001111  0f
  2425.  
  2426.         dc.b    0    ;00000000  00 1000 plus 1 bit : invert 0000
  2427.         dc.b    4    ;00000001  01 80
  2428.         dc.b    4    ;00000010  02
  2429.         dc.b    0    ;00000011  03
  2430.         dc.b    4    ;00000100  04
  2431.         dc.b    0    ;00000101  05
  2432.         dc.b    0    ;00000110  06
  2433.         dc.b    4    ;00000111  07
  2434.         dc.b    4    ;00001000  08
  2435.         dc.b    0    ;00001001  09
  2436.         dc.b    0    ;00001010  0a
  2437.         dc.b    4    ;00001011  0b
  2438.         dc.b    0    ;00001100  0c
  2439.         dc.b    4    ;00001101  0d
  2440.         dc.b    4    ;00001110  0e
  2441.         dc.b    0    ;00001111  0f
  2442.  
  2443.         dc.b    4    ;00000000  00 1001 plus 2 bit : same as 0000
  2444.         dc.b    0    ;00000001  01 90
  2445.         dc.b    0    ;00000010  02
  2446.         dc.b    4    ;00000011  03
  2447.         dc.b    0    ;00000100  04
  2448.         dc.b    4    ;00000101  05
  2449.         dc.b    4    ;00000110  06
  2450.         dc.b    0    ;00000111  07
  2451.         dc.b    0    ;00001000  08
  2452.         dc.b    4    ;00001001  09
  2453.         dc.b    4    ;00001010  0a
  2454.         dc.b    0    ;00001011  0b
  2455.         dc.b    4    ;00001100  0c
  2456.         dc.b    0    ;00001101  0d
  2457.         dc.b    0    ;00001110  0e
  2458.         dc.b    4    ;00001111  0f
  2459.  
  2460.         dc.b    4    ;00000000  00 1010 plus 2 bit : same as 0000
  2461.         dc.b    0    ;00000001  01 a0
  2462.         dc.b    0    ;00000010  02
  2463.         dc.b    4    ;00000011  03
  2464.         dc.b    0    ;00000100  04
  2465.         dc.b    4    ;00000101  05
  2466.         dc.b    4    ;00000110  06
  2467.         dc.b    0    ;00000111  07
  2468.         dc.b    0    ;00001000  08
  2469.         dc.b    4    ;00001001  09
  2470.         dc.b    4    ;00001010  0a
  2471.         dc.b    0    ;00001011  0b
  2472.         dc.b    4    ;00001100  0c
  2473.         dc.b    0    ;00001101  0d
  2474.         dc.b    0    ;00001110  0e
  2475.         dc.b    4    ;00001111  0f
  2476.  
  2477.         dc.b    0    ;00000000  00 1011 plus 3 bit : invert 0000
  2478.         dc.b    4    ;00000001  01 b0
  2479.         dc.b    4    ;00000010  02
  2480.         dc.b    0    ;00000011  03
  2481.         dc.b    4    ;00000100  04
  2482.         dc.b    0    ;00000101  05
  2483.         dc.b    0    ;00000110  06
  2484.         dc.b    4    ;00000111  07
  2485.         dc.b    4    ;00001000  08
  2486.         dc.b    0    ;00001001  09
  2487.         dc.b    0    ;00001010  0a
  2488.         dc.b    4    ;00001011  0b
  2489.         dc.b    0    ;00001100  0c
  2490.         dc.b    4    ;00001101  0d
  2491.         dc.b    4    ;00001110  0e
  2492.         dc.b    0    ;00001111  0f
  2493.  
  2494.         dc.b    4    ;00000000  00 1100 plus 2 bit : same as 0000
  2495.         dc.b    0    ;00000001  01 c0
  2496.         dc.b    0    ;00000010  02
  2497.         dc.b    4    ;00000011  03
  2498.         dc.b    0    ;00000100  04
  2499.         dc.b    4    ;00000101  05
  2500.         dc.b    4    ;00000110  06
  2501.         dc.b    0    ;00000111  07
  2502.         dc.b    0    ;00001000  08
  2503.         dc.b    4    ;00001001  09
  2504.         dc.b    4    ;00001010  0a
  2505.         dc.b    0    ;00001011  0b
  2506.         dc.b    4    ;00001100  0c
  2507.         dc.b    0    ;00001101  0d
  2508.         dc.b    0    ;00001110  0e
  2509.         dc.b    4    ;00001111  0f
  2510.  
  2511.         dc.b    0    ;00000000  00 1101 plus 3 bit : invert 0000
  2512.         dc.b    4    ;00000001  01 d0
  2513.         dc.b    4    ;00000010  02
  2514.         dc.b    0    ;00000011  03
  2515.         dc.b    4    ;00000100  04
  2516.         dc.b    0    ;00000101  05
  2517.         dc.b    0    ;00000110  06
  2518.         dc.b    4    ;00000111  07
  2519.         dc.b    4    ;00001000  08
  2520.         dc.b    0    ;00001001  09
  2521.         dc.b    0    ;00001010  0a
  2522.         dc.b    4    ;00001011  0b
  2523.         dc.b    0    ;00001100  0c
  2524.         dc.b    4    ;00001101  0d
  2525.         dc.b    4    ;00001110  0e
  2526.         dc.b    0    ;00001111  0f
  2527.  
  2528.         dc.b    0    ;00000000  00 1110 plus 3 bit : invert 0000
  2529.         dc.b    4    ;00000001  01 e0
  2530.         dc.b    4    ;00000010  02
  2531.         dc.b    0    ;00000011  03
  2532.         dc.b    4    ;00000100  04
  2533.         dc.b    0    ;00000101  05
  2534.         dc.b    0    ;00000110  06
  2535.         dc.b    4    ;00000111  07
  2536.         dc.b    4    ;00001000  08
  2537.         dc.b    0    ;00001001  09
  2538.         dc.b    0    ;00001010  0a
  2539.         dc.b    4    ;00001011  0b
  2540.         dc.b    0    ;00001100  0c
  2541.         dc.b    4    ;00001101  0d
  2542.         dc.b    4    ;00001110  0e
  2543.         dc.b    0    ;00001111  0f
  2544.  
  2545.         dc.b    4    ;00000000  00 1111 plus 4 bit : same as 0000
  2546.         dc.b    0    ;00000001  01 f0
  2547.         dc.b    0    ;00000010  02
  2548.         dc.b    4    ;00000011  03
  2549.         dc.b    0    ;00000100  04
  2550.         dc.b    4    ;00000101  05
  2551.         dc.b    4    ;00000110  06
  2552.         dc.b    0    ;00000111  07
  2553.         dc.b    0    ;00001000  08
  2554.         dc.b    4    ;00001001  09
  2555.         dc.b    4    ;00001010  0a
  2556.         dc.b    0    ;00001011  0b
  2557.         dc.b    4    ;00001100  0c
  2558.         dc.b    0    ;00001101  0d
  2559.         dc.b    0    ;00001110  0e
  2560.         dc.b    4    ;00001111  0f
  2561.  
  2562. ;    address table for z80 first opcode
  2563.  
  2564. z80opctab:    dc.l  z80opc00
  2565.         dc.l  z80opc01
  2566.         dc.l  z80opc02
  2567.         dc.l  z80opc03
  2568.         dc.l  z80opc04
  2569.         dc.l  z80opc05
  2570.         dc.l  z80opc06
  2571.         dc.l  z80opc07
  2572.         dc.l  z80opc08
  2573.         dc.l  z80opc09
  2574.         dc.l  z80opc0a
  2575.         dc.l  z80opc0b
  2576.         dc.l  z80opc0c
  2577.         dc.l  z80opc0d
  2578.         dc.l  z80opc0e
  2579.         dc.l  z80opc0f
  2580.         dc.l  z80opc10
  2581.         dc.l  z80opc11
  2582.         dc.l  z80opc12
  2583.         dc.l  z80opc13
  2584.         dc.l  z80opc14
  2585.         dc.l  z80opc15
  2586.         dc.l  z80opc16
  2587.         dc.l  z80opc17
  2588.         dc.l  z80opc18
  2589.         dc.l  z80opc19
  2590.         dc.l  z80opc1a
  2591.         dc.l  z80opc1b
  2592.         dc.l  z80opc1c
  2593.         dc.l  z80opc1d
  2594.         dc.l  z80opc1e
  2595.         dc.l  z80opc1f
  2596.         dc.l  z80opc20
  2597.         dc.l  z80opc21
  2598.         dc.l  z80opc22
  2599.         dc.l  z80opc23
  2600.         dc.l  z80opc24
  2601.         dc.l  z80opc25
  2602.         dc.l  z80opc26
  2603.         dc.l  z80opc27
  2604.         dc.l  z80opc28
  2605.         dc.l  z80opc29
  2606.         dc.l  z80opc2a
  2607.         dc.l  z80opc2b
  2608.         dc.l  z80opc2c
  2609.         dc.l  z80opc2d
  2610.         dc.l  z80opc2e
  2611.         dc.l  z80opc2f
  2612.         dc.l  z80opc30
  2613.         dc.l  z80opc31
  2614.         dc.l  z80opc32
  2615.         dc.l  z80opc33
  2616.         dc.l  z80opc34
  2617.         dc.l  z80opc35
  2618.         dc.l  z80opc36
  2619.         dc.l  z80opc37
  2620.         dc.l  z80opc38
  2621.         dc.l  z80opc39
  2622.         dc.l  z80opc3a
  2623.         dc.l  z80opc3b
  2624.         dc.l  z80opc3c
  2625.         dc.l  z80opc3d
  2626.         dc.l  z80opc3e
  2627.         dc.l  z80opc3f
  2628.         dc.l  z80opc40
  2629.         dc.l  z80opc41
  2630.         dc.l  z80opc42
  2631.         dc.l  z80opc43
  2632.         dc.l  z80opc44
  2633.         dc.l  z80opc45
  2634.         dc.l  z80opc46
  2635.         dc.l  z80opc47
  2636.         dc.l  z80opc48
  2637.         dc.l  z80opc49
  2638.         dc.l  z80opc4a
  2639.         dc.l  z80opc4b
  2640.         dc.l  z80opc4c
  2641.         dc.l  z80opc4d
  2642.         dc.l  z80opc4e
  2643.         dc.l  z80opc4f
  2644.         dc.l  z80opc50
  2645.         dc.l  z80opc51
  2646.         dc.l  z80opc52
  2647.         dc.l  z80opc53
  2648.         dc.l  z80opc54
  2649.         dc.l  z80opc55
  2650.         dc.l  z80opc56
  2651.         dc.l  z80opc57
  2652.         dc.l  z80opc58
  2653.         dc.l  z80opc59
  2654.         dc.l  z80opc5a
  2655.         dc.l  z80opc5b
  2656.         dc.l  z80opc5c
  2657.         dc.l  z80opc5d
  2658.         dc.l  z80opc5e
  2659.         dc.l  z80opc5f
  2660.         dc.l  z80opc60
  2661.         dc.l  z80opc61
  2662.         dc.l  z80opc62
  2663.         dc.l  z80opc63
  2664.         dc.l  z80opc64
  2665.         dc.l  z80opc65
  2666.         dc.l  z80opc66
  2667.         dc.l  z80opc67
  2668.         dc.l  z80opc68
  2669.         dc.l  z80opc69
  2670.         dc.l  z80opc6a
  2671.         dc.l  z80opc6b
  2672.         dc.l  z80opc6c
  2673.         dc.l  z80opc6d
  2674.         dc.l  z80opc6e
  2675.         dc.l  z80opc6f
  2676.         dc.l  z80opc70
  2677.         dc.l  z80opc71
  2678.         dc.l  z80opc72
  2679.         dc.l  z80opc73
  2680.         dc.l  z80opc74
  2681.         dc.l  z80opc75
  2682.         dc.l  z80opc76
  2683.         dc.l  z80opc77
  2684.         dc.l  z80opc78
  2685.         dc.l  z80opc79
  2686.         dc.l  z80opc7a
  2687.         dc.l  z80opc7b
  2688.         dc.l  z80opc7c
  2689.         dc.l  z80opc7d
  2690.         dc.l  z80opc7e
  2691.         dc.l  z80opc7f
  2692.         dc.l  z80opc80
  2693.         dc.l  z80opc81
  2694.         dc.l  z80opc82
  2695.         dc.l  z80opc83
  2696.         dc.l  z80opc84
  2697.         dc.l  z80opc85
  2698.         dc.l  z80opc86
  2699.         dc.l  z80opc87
  2700.         dc.l  z80opc88
  2701.         dc.l  z80opc89
  2702.         dc.l  z80opc8a
  2703.         dc.l  z80opc8b
  2704.         dc.l  z80opc8c
  2705.         dc.l  z80opc8d
  2706.         dc.l  z80opc8e
  2707.         dc.l  z80opc8f
  2708.         dc.l  z80opc90
  2709.         dc.l  z80opc91
  2710.         dc.l  z80opc92
  2711.         dc.l  z80opc93
  2712.         dc.l  z80opc94
  2713.         dc.l  z80opc95
  2714.         dc.l  z80opc96
  2715.         dc.l  z80opc97
  2716.         dc.l  z80opc98
  2717.         dc.l  z80opc99
  2718.         dc.l  z80opc9a
  2719.         dc.l  z80opc9b
  2720.         dc.l  z80opc9c
  2721.         dc.l  z80opc9d
  2722.         dc.l  z80opc9e
  2723.         dc.l  z80opc9f
  2724.         dc.l  z80opca0
  2725.         dc.l  z80opca1
  2726.         dc.l  z80opca2
  2727.         dc.l  z80opca3
  2728.         dc.l  z80opca4
  2729.         dc.l  z80opca5
  2730.         dc.l  z80opca6
  2731.         dc.l  z80opca7
  2732.         dc.l  z80opca8
  2733.         dc.l  z80opca9
  2734.         dc.l  z80opcaa
  2735.         dc.l  z80opcab
  2736.         dc.l  z80opcac
  2737.         dc.l  z80opcad
  2738.         dc.l  z80opcae
  2739.         dc.l  z80opcaf
  2740.         dc.l  z80opcb0
  2741.         dc.l  z80opcb1
  2742.         dc.l  z80opcb2
  2743.         dc.l  z80opcb3
  2744.         dc.l  z80opcb4
  2745.         dc.l  z80opcb5
  2746.         dc.l  z80opcb6
  2747.         dc.l  z80opcb7
  2748.         dc.l  z80opcb8
  2749.         dc.l  z80opcb9
  2750.         dc.l  z80opcba
  2751.         dc.l  z80opcbb
  2752.         dc.l  z80opcbc
  2753.         dc.l  z80opcbd
  2754.         dc.l  z80opcbe
  2755.         dc.l  z80opcbf
  2756.         dc.l  z80opcc0
  2757.         dc.l  z80opcc1
  2758.         dc.l  z80opcc2
  2759.         dc.l  z80opcc3
  2760.         dc.l  z80opcc4
  2761.         dc.l  z80opcc5
  2762.         dc.l  z80opcc6
  2763.         dc.l  z80opcc7
  2764.         dc.l  z80opcc8
  2765.         dc.l  z80opcc9
  2766.         dc.l  z80opcca
  2767.         dc.l  z80opccb
  2768.         dc.l  z80opccc
  2769.         dc.l  z80opccd
  2770.         dc.l  z80opcce
  2771.         dc.l  z80opccf
  2772.         dc.l  z80opcd0
  2773.         dc.l  z80opcd1
  2774.         dc.l  z80opcd2
  2775.         dc.l  z80opcd3
  2776.         dc.l  z80opcd4
  2777.         dc.l  z80opcd5
  2778.         dc.l  z80opcd6
  2779.         dc.l  z80opcd7
  2780.         dc.l  z80opcd8
  2781.         dc.l  z80opcd9
  2782.         dc.l  z80opcda
  2783.         dc.l  z80opcdb
  2784.         dc.l  z80opcdc
  2785.         dc.l  z80opcdd
  2786.         dc.l  z80opcde
  2787.         dc.l  z80opcdf
  2788.         dc.l  z80opce0
  2789.         dc.l  z80opce1
  2790.         dc.l  z80opce2
  2791.         dc.l  z80opce3
  2792.         dc.l  z80opce4
  2793.         dc.l  z80opce5
  2794.         dc.l  z80opce6
  2795.         dc.l  z80opce7
  2796.         dc.l  z80opce8
  2797.         dc.l  z80opce9
  2798.         dc.l  z80opcea
  2799.         dc.l  z80opceb
  2800.         dc.l  z80opcec
  2801.         dc.l  z80opced
  2802.         dc.l  z80opcee
  2803.         dc.l  z80opcef
  2804.         dc.l  z80opcf0
  2805.         dc.l  z80opcf1
  2806.         dc.l  z80opcf2
  2807.         dc.l  z80opcf3
  2808.         dc.l  z80opcf4
  2809.         dc.l  z80opcf5
  2810.         dc.l  z80opcf6
  2811.         dc.l  z80opcf7
  2812.         dc.l  z80opcf8
  2813.         dc.l  z80opcf9
  2814.         dc.l  z80opcfa
  2815.         dc.l  z80opcfb
  2816.         dc.l  z80opcfc
  2817.         dc.l  z80opcfd
  2818.         dc.l  z80opcfe
  2819.         dc.l  z80opcff
  2820.  
  2821. ;    debug count instruction
  2822.  
  2823. cntinst:    addq.l    #1,a0
  2824.  
  2825. ;    prompts
  2826.  
  2827. trcpmt:
  2828. cntpmt:     dc.b    'Enter name of file',0
  2829.  
  2830. ;    various
  2831.  
  2832. cntbuf        dc.l    0        ;ptr to debug counter area
  2833. cntfile:    dc.b    'a:cpm.count',0 ;default string
  2834. cntfend:
  2835.         ds.b    cntfilesize-(cntfend-cntfile) ;fill out
  2836. handle3:    dc.l    0        ;handle to trace file
  2837. trcbuf        dc.l    0        ;ptr to trace buffer start
  2838. trcfile:    dc.b    'a:cpm.trace',0 ;default string
  2839. trcfend:
  2840.         ds.b    trcfilesize-(trcfend-trcfile) ;fill out
  2841. trcptr        dc.l    0        ;current ptr into trace buffer
  2842.  
  2843. ;    uninitialized data area
  2844. ;    various
  2845.  
  2846. scratch:    ds.l    1        ;scratch use by z80 emulator
  2847. trccnt:     ds.l    1        ;trace buffer byte count
  2848.  
  2849.         end
  2850.  
  2851.  
  2852.