From 70357ce52578dee0dd3b3663902cf872c3d34258 Mon Sep 17 00:00:00 2001 From: notaz Date: Sun, 21 Oct 2007 10:20:56 +0000 Subject: [PATCH] FAME + some random stuff added git-svn-id: file:///home/notaz/opt/svn/PicoDrive@276 be3aeb3a-fb24-0410-a615-afba39da0efa --- Pico/Draw.c | 46 +- Pico/Draw_.s | 1423 -- Pico/Draw_amips.s | 42 + Pico/Draw_sh.c | 1301 - Pico/Draw_sh.s | 1527 -- Pico/Memory.c | 56 +- Pico/Misc.c | 32 + Pico/Pico.c | 14 +- Pico/PicoInt.h | 46 +- Pico/Sek.c | 115 +- cpu/fame/fame.h | 186 + cpu/fame/famec.c | 5095 ++++ cpu/fame/famec_opcodes.h | 39792 +++++++++++++++++++++++++++++ platform/common/lprintf.h | 2 +- platform/linux/Makefile | 12 +- platform/psp/Makefile | 21 +- platform/psp/emu.c | 12 + platform/psp/menu.c | 12 + platform/psp/port_config.h | 1 + platform/psp/psp.c | 17 +- platform/psp/psp.h | 2 + platform/psp/skin/background.png | Bin 84002 -> 76001 bytes 22 files changed, 45359 insertions(+), 4395 deletions(-) delete mode 100644 Pico/Draw_.s create mode 100644 Pico/Draw_amips.s delete mode 100644 Pico/Draw_sh.c delete mode 100644 Pico/Draw_sh.s create mode 100644 cpu/fame/fame.h create mode 100644 cpu/fame/famec.c create mode 100644 cpu/fame/famec_opcodes.h diff --git a/Pico/Draw.c b/Pico/Draw.c index 20a18de1..1c562f6b 100644 --- a/Pico/Draw.c +++ b/Pico/Draw.c @@ -1186,35 +1186,49 @@ static void FinalizeLineRGB555(int sh) unsigned short *pal=HighPal; int len, i, t, dirtyPal = Pico.m.dirtyPal; - if(dirtyPal) { - unsigned short *ppal=Pico.cram; - for(i = 0x3f; i >= 0; i--) - pal[i] = (unsigned short) (((ppal[i]&0x00f)<<12)|((ppal[i]&0x0f0)<<3)|((ppal[i]&0xf00)>>7)); + if (dirtyPal) + { + unsigned int *spal=(void *)Pico.cram; + unsigned int *dpal=(void *)HighPal; + for (i = 0x3f/2; i >= 0; i--) +#ifdef USE_BGR555 + dpal[i] = ((spal[i]&0x000f000f)<< 1)|((spal[i]&0x00f000f0)<<3)|((spal[i]&0x0f000f00)<<4); +#else + dpal[i] = ((spal[i]&0x000f000f)<<12)|((spal[i]&0x00f000f0)<<3)|((spal[i]&0x0f000f00)>>7); +#endif Pico.m.dirtyPal = 0; } - if (Pico.video.reg[12]&1) { - len = 320; - } else { - if(!(PicoOpt&0x100)) pd+=32; - len = 256; - } - - if(sh) { - if(dirtyPal) { + if (sh) + { + if (dirtyPal) { // shadowed pixels - for(i = 0x3f; i >= 0; i--) + for (i = 0x3f; i >= 0; i--) pal[0x40|i] = pal[0xc0|i] = (unsigned short)((pal[i]>>1)&0x738e); // hilighted pixels - for(i = 0x3f; i >= 0; i--) { + for (i = 0x3f; i >= 0; i--) { t=pal[i]&0xe71c;t+=0x4208;if(t&0x20)t|=0x1c;if(t&0x800)t|=0x700;if(t&0x10000)t|=0xe000;t&=0xe71c; pal[0x80|i]=(unsigned short)t; } } } - for(i = 0; i < len; i++) + if (Pico.video.reg[12]&1) { + len = 320; + } else { + if (!(PicoOpt&0x100)) pd+=32; + len = 256; + } + +#ifndef PSP + for (i = 0; i < len; i++) pd[i] = pal[ps[i]]; +#else + { + extern void amips_clut(unsigned short *dst, unsigned char *src, unsigned short *pal, int count); + amips_clut(pd, ps, pal, len); + } +#endif } #endif diff --git a/Pico/Draw_.s b/Pico/Draw_.s deleted file mode 100644 index ccfdbe24..00000000 --- a/Pico/Draw_.s +++ /dev/null @@ -1,1423 +0,0 @@ -@ assembly "optimized" version of some funtions from draw.c -@ this is highly specialized, be careful if changing related C code! - -@ (c) Copyright 2006, notaz -@ All Rights Reserved - - -.extern Pico -.extern PicoOpt -.extern HighCol -.extern Scanline -.extern HighSprZ -.extern rendstatus -.extern DrawLineDest -.extern DrawStripVSRam -.extern DrawStripInterlace - - -@ helper -.macro TilePixel pat lsrr offs -.if !\lsrr - ands r4, \pat, r2 -.else - ands r4, \pat, r2, lsr #\lsrr -.endif - orrne r4, r3, r4 - strneb r4, [r1,#\offs] -.endm - -@ TileNorm (r1=pdest, r2=pixels8, r3=pal) r4: scratch, pat: register with helper pattern 0xf -.macro TileNorm pat - TilePixel \pat, 12, 0 @ #0x0000f000 - TilePixel \pat, 8, 1 @ #0x00000f00 - TilePixel \pat, 4, 2 @ #0x000000f0 - TilePixel \pat, 0, 3 @ #0x0000000f - TilePixel \pat, 28, 4 @ #0xf0000000 - TilePixel \pat, 24, 5 @ #0x0f000000 - TilePixel \pat, 20, 6 @ #0x00f00000 - TilePixel \pat, 16, 7 @ #0x000f0000 -.endm - -@ TileFlip (r1=pdest, r2=pixels8, r3=pal) r4: scratch, pat: register with helper pattern 0xf -.macro TileFlip pat - TilePixel \pat, 16, 0 @ #0x000f0000 - TilePixel \pat, 20, 1 @ #0x00f00000 - TilePixel \pat, 24, 2 @ #0x0f000000 - TilePixel \pat, 28, 3 @ #0xf0000000 - TilePixel \pat, 0, 4 @ #0x0000000f - TilePixel \pat, 4, 5 @ #0x000000f0 - TilePixel \pat, 8, 6 @ #0x00000f00 - TilePixel \pat, 12, 7 @ #0x0000f000 -.endm - -@ shadow/hilight mode - -@ this one is for hi priority layer -.macro TilePixelShHP pat lsrr offs - TilePixel \pat, \lsrr, \offs - ldreqb r4, [r1,#\offs] - tsteq r4, #0x80 - andeq r4, r4, #0x3f - streqb r4, [r1,#\offs] -.endm - -@ TileNorm (r1=pdest, r2=pixels8, r3=pal) r4: scratch, pat: register with helper pattern 0xf -.macro TileNormShHP pat - TilePixelShHP \pat, 12, 0 @ #0x0000f000 - TilePixelShHP \pat, 8, 1 @ #0x00000f00 - TilePixelShHP \pat, 4, 2 @ #0x000000f0 - TilePixelShHP \pat, 0, 3 @ #0x0000000f - TilePixelShHP \pat, 28, 4 @ #0xf0000000 - TilePixelShHP \pat, 24, 5 @ #0x0f000000 - TilePixelShHP \pat, 20, 6 @ #0x00f00000 - TilePixelShHP \pat, 16, 7 @ #0x000f0000 -.endm - -@ TileFlip (r1=pdest, r2=pixels8, r3=pal) r4: scratch, pat: register with helper pattern 0xf -.macro TileFlipShHP pat - TilePixelShHP \pat, 16, 0 @ #0x000f0000 - TilePixelShHP \pat, 20, 1 @ #0x00f00000 - TilePixelShHP \pat, 24, 2 @ #0x0f000000 - TilePixelShHP \pat, 28, 3 @ #0xf0000000 - TilePixelShHP \pat, 0, 4 @ #0x0000000f - TilePixelShHP \pat, 4, 5 @ #0x000000f0 - TilePixelShHP \pat, 8, 6 @ #0x00000f00 - TilePixelShHP \pat, 12, 7 @ #0x0000f000 -.endm - - -@ TileSingleSh (r1=pdest, r2=pixels8, r3=pal) r4,r7: scratch, r0=sx; r12: helper pattern 0xf -.macro TileSingleSh - tst r0, #1 @ not aligned? - mov r7, #0x00c000 - orr r7, r7, #0xc0 - ldrneb r4, [r1] - ldreqh r4, [r1] - orr r4, r4, r7 - strneb r4, [r1], #1 - streqh r4, [r1], #2 - ldrh r4, [r1] - orr r4, r4, r7 - strh r4, [r1], #2 - ldrh r4, [r1] - orr r4, r4, r7 - strh r4, [r1], #2 - ldrh r4, [r1] - orr r4, r4, r7 - strh r4, [r1], #2 - ldrneb r4, [r1] - orr r4, r4, r7 - strneb r4, [r1], #1 -.endm - -@ TileSingleHi (r1=pdest, r2=pixels8, r3=pal) r4,r7: scratch, r0=sx, r12: register with helper pattern 0xf -.macro TileSingleHi - tst r1, #1 @ not aligned? - mov r7, #0x008000 - orr r7, r7, #0x80 - ldrneb r4, [r1] - ldreqh r4, [r1] - bic r4, r4, r7, lsr #1 - orr r4, r4, r7 - strneb r4, [r1], #1 - streqh r4, [r1], #2 - ldrh r4, [r1] - bic r4, r4, r7, lsr #1 - orr r4, r4, r7 - strh r4, [r1], #2 - ldrh r4, [r1] - bic r4, r4, r7, lsr #1 - orr r4, r4, r7 - strh r4, [r1], #2 - ldrh r4, [r1] - bic r4, r4, r7, lsr #1 - orr r4, r4, r7 - strh r4, [r1], #2 - ldrneb r4, [r1] - bic r4, r4, r7, lsr #1 - orr r4, r4, r7 - strneb r4, [r1], #1 -.endm - -.macro TileDoShGenPixel shift ofs -.if \shift - ands r4, r12, r2, lsr #\shift -.else - ands r4, r12, r2 -.endif - beq 3f - cmp r4, #0xe - beq 2f - bgt 1f - orr r4, r3, r4 - strb r4, [r1,#\ofs] - b 3f -1: - ldrb r4, [r1,#\ofs] - orr r4, r4, #0xc0 - strb r4, [r1,#\ofs] - b 3f -2: - ldrb r4, [r1,#\ofs] - bic r4, r4, #0xc0 - orr r4, r4, #0x80 - strb r4, [r1,#\ofs] -3: -.endm - -@ TileFlipSh (r1=pdest, r2=pixels8, r3=pal) r4,r7: scratch, r0=sx, r12: register with helper pattern 0xf -.macro TileFlipSh - TileDoShGenPixel 16, 0 @ #0x000f0000 - TileDoShGenPixel 20, 1 @ #0x00f00000 - TileDoShGenPixel 24, 2 @ #0x0f000000 - TileDoShGenPixel 28, 3 @ #0xf0000000 - TileDoShGenPixel 0, 4 @ #0x0000000f - TileDoShGenPixel 4, 5 @ #0x000000f0 - TileDoShGenPixel 8, 6 @ #0x00000f00 - TileDoShGenPixel 12, 7 @ #0x0000f000 -.endm - -@ TileNormSh (r1=pdest, r2=pixels8, r3=pal) r4,r7: scratch, r0=sx, r12: register with helper pattern 0xf -.macro TileNormSh - TileDoShGenPixel 12, 0 @ #0x0000f000 - TileDoShGenPixel 8, 1 @ #0x00000f00 - TileDoShGenPixel 4, 2 @ #0x000000f0 - TileDoShGenPixel 0, 3 @ #0x0000000f - TileDoShGenPixel 28, 4 @ #0xf0000000 - TileDoShGenPixel 24, 5 @ #0x0f000000 - TileDoShGenPixel 20, 6 @ #0x00f00000 - TileDoShGenPixel 16, 7 @ #0x000f0000 -.endm - - -@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ - -@ struct TileStrip -@ { -@ int nametab; // 0x00 -@ int line; // 0x04 -@ int hscroll; // 0x08 -@ int xmask; // 0x0C -@ int *hc; // 0x10 (pointer to cache buffer) -@ int cells; // 0x14 -@ }; - -@ int DrawLayer(int plane, int *hcache, int maxcells, int sh) - -.global DrawLayer @ int plane, int *hcache, int maxcells, int sh - -DrawLayer: - stmfd sp!, {r4-r11,lr} - - ldr r11, =(Pico+0x22228) @ Pico.video - - mov r6, r1 @ hcache - orr r9, r2, r3, lsl #31 @ r9=maxcells|(sh<<31) - - ldrb r7, [r11, #16] @ ??hh??ww - - mov r1, r7, lsl #4 - orr r1, r1, #0x00ff - - and r10, r7, #3 - cmp r10, #1 - biclt r1, r1, #0xfc00 - biceq r1, r1, #0xfe00 - bicgt r1, r1, #0xff00 @ r1=ymask=(height<<8)|0xff; ...; // Y Mask in pixels - - add r10, r10, #5 - cmp r10, #7 - subge r10, r10, #1 @ r10=shift[width] (5,6,6,7) - - @ calculate xmask: - mov r8, #1 - mov r5, r8, lsl r10 - sub r5, r5, #1 @ r5=xmask - - @ Find name table: - tst r0, r0 - ldreqb r12, [r11, #2] - moveq r12, r12, lsl #10 - ldrneb r12, [r11, #4] - movne r12, r12, lsl #13 - and r12, r12, #(7<<13) @ r12=(ts->nametab<<1) (halfword compliant) - - ldr r2, =Scanline - ldr r2, [r2] - ldr lr, =(Pico+0x10000) @ lr=Pico.vram - - ldrh r8, [r11, #12] - mov r4, r8, lsr #8 @ pvid->reg[13] - mov r4, r4, lsl #10 @ htab=pvid->reg[13]<<9; (halfwords) - ldrb r7, [r11, #11] - tst r7, #2 - addne r4, r4, r2, lsl #2 @ htab+=Scanline<<1; // Offset by line - tst r7, #1 - biceq r4, r4, #0x1f @ htab&=~0xf; // Offset by tile - add r4, r4, r0, lsl #1 @ htab+=plane - bic r4, r4, #0x00ff0000 @ just in case - ldrh r3, [lr, r4] @ r3=hscroll - - tst r7, #4 - bne .DrawStrip_vsscroll - - @ Get vertical scroll value: - add r7, lr, #0x012000 - add r7, r7, #0x000180 @ r7=Pico.vsram (Pico+0x22180) - ldr r7, [r7] - - tst r8, #2 - tstne r8, #4 - bne .DrawStrip_interlace - - tst r0, r0 - movne r7, r7, lsr #16 - - @ Find the line in the name table - add r2, r2, r7 - and r2, r2, r1 - mov r4, r2, lsr #3 - add r10, r10, #1 @ shift[width]++ - add r12, r12, r4, lsl r10 @ nametab+=(ts.line>>3)<hscroll, r5=ts->xmask, r6=ts->hc, r9=ts->cells -@ mov r12,r1, lsl #1 @ r12=(ts->nametab<<1) (halfword compliant) - - and r10,r2, #7 - mov r10,r10, lsl #1 @ r10=ty=(ts->line&7)<<1; - orr r10,r10, r9, lsl #24 - - rsb r8, r3, #0 - mov r8, r8, lsr #3 @ r8=tilex=(-ts->hscroll)>>3 - - sub r1, r3, #1 - and r1, r1, #7 - add r7, r1, #1 @ r7=dx=((ts->hscroll-1)&7)+1 - - tst r9, #1<<31 - mov r3, #0 - orrne r10,r10, #1<<23 @ r10=(cells<<24|sh<<23|hi_not_empty<<22|ty) - movne r3, #0x40 @ default to shadowed pal on sh mode - - mvn r9, #0 @ r9=prevcode=-1 - - cmp r7, #8 - subeq r10,r10, #0x01000000 @ we will loop cells+1 times, so loop less when there is no scroll - - @ cache some stuff to avoid mem access - ldr r11,=HighCol - add r1, r11, r7 @ r1=pdest - mov r0, #0xf - b .dsloop_enter - - @ r4 & r7 are scratch in this loop -.dsloop: @ 40-41 times - add r1, r1, #8 -.dsloop_nor1: - subs r10,r10, #0x01000000 - add r8, r8, #1 - bmi .dsloop_exit - -.dsloop_enter: - and r7, r5, r8 - add r7, lr, r7, lsl #1 @ Pico.vram+((tilex&ts->xmask) as halfwords) - ldrh r7, [r7, r12] @ r7=code (int, but from unsigned, no sign extend) - - tst r7, #0x8000 - bne .DrawStrip_hiprio - - cmp r7, r9 - beq .DrawStrip_samecode @ we know stuff about this tile already - - mov r9, r7 @ remember code - - movs r2, r9, lsl #20 @ if (code&0x1000) - mov r2, r2, lsl #1 -@ bic r7, r10,#0xff000000 -@ add r2, r7, r2, lsr #17 @ r2=addr=(code&0x7ff)<<4; addr+=ty - add r2, r2, r10, lsl #17 - mov r2, r2, lsr #17 - eorcs r2, r2, #0x0e @ if (code&0x1000) addr^=0xe; - - bic r7, r3, #0x3f - and r3, r9, #0x6000 - add r3, r7, r3, lsr #9 @ r3=pal=((code&0x6000)>>9); - - ldr r2, [lr, r2, lsl #1] @ pack=*(unsigned int *)(Pico.vram+addr); // Get 8 pixels - -.DrawStrip_samecode: - tst r2, r2 - beq .dsloop @ tileline blank - - cmp r2, r2, ror #4 - beq .DrawStrip_SingleColor @ tileline singlecolor - - tst r9, #0x0800 - beq .DrawStrip_TileNorm - - @ (r1=pdest, r2=pixels8, r3=pal) r4: scratch, r0: helper pattern - TileFlip r0 - b .dsloop - -.DrawStrip_TileNorm: - TileNorm r0 - b .dsloop - -.DrawStrip_SingleColor: - and r4, r2, #0xf - orr r4, r3, r4 - orr r4, r4, r4, lsl #8 - tst r1, #1 @ not aligned? - strneb r4, [r1], #1 - streqh r4, [r1], #2 - strh r4, [r1], #2 - strh r4, [r1], #2 - strh r4, [r1], #2 - strneb r4, [r1], #1 @ have a remaining unaligned pixel? - b .dsloop_nor1 @ we incremeted r1 ourselves - -.DrawStrip_hiprio: - tst r10, #0x00c00000 - beq .DrawStrip_hiprio_maybempt - sub r0, r1, r11 - orr r7, r7, r0, lsl #16 - orr r7, r7, r10, lsl #25 @ (ty<<25) - tst r7, #0x1000 - eorne r7, r7, #7<<26 @ if(code&0x1000) cval^=7<<26; - str r7, [r6], #4 @ cache hi priority tile - mov r0, #0xf - b .dsloop - -.DrawStrip_hiprio_maybempt: - cmp r7, r9 - beq .dsloop @ must've been empty, otherwise we wouldn't get here - mov r9, r7 @ remember code - movs r2, r9, lsl #20 @ if (code&0x1000) - mov r2, r2, lsl #1 - add r2, r2, r10, lsl #17 - mov r2, r2, lsr #17 - eorcs r2, r2, #0x0e @ if (code&0x1000) addr^=0xe; - ldr r2, [lr, r2, lsl #1] @ pack=*(unsigned int *)(Pico.vram+addr); // Get 8 pixels - tst r2, r2 - orrne r10, r10, #1<<22 - bne .DrawStrip_hiprio - b .dsloop - -.dsloop_exit: - mov r0, #0 - str r0, [r6] @ terminate the cache list - - ldmfd sp!, {r4-r11,lr} - bx lr - - -.DrawStrip_vsscroll: - @ shit, we have 2-cell column based vscroll - @ let the c code handle this (for now) - - @ int nametab; // 0x00 - @ int line; // 0x04 - @ int hscroll; // 0x08 - @ int xmask; // 0x0C - @ int *hc; // 0x10 (pointer to cache buffer) - @ int cells; // 0x14 - - sub sp, sp, #6*4 - orr r2, r1, r10, lsl #24 @ ts.line=ymask|(shift[width]<<24); // save some stuff instead of line - mov r1, r0 @ plane - mov r0, r12, lsr #1 @ halfwords - and r9, r9, #0xff - stmia sp, {r0,r2,r3,r5,r6,r9} - - mov r0, sp - bl DrawStripVSRam @ struct TileStrip *ts, int plane - - add sp, sp, #6*4 - ldmfd sp!, {r4-r11,lr} - bx lr - -@ interlace mode 2? Sonic 2? -.DrawStrip_interlace: - tst r0, r0 - moveq r7, r7, lsl #21 - movne r7, r7, lsl #5 - - @ Find the line in the name table - add r2, r7, r2, lsl #22 @ r2=(vscroll+(Scanline<<1))<<21 (11 bits); - orr r1, r1, #0x80000000 - and r2, r2, r1, ror #10 @ &((ymask<<1)|1)<<21; - mov r2, r2, lsr #21 - mov r4, r2, lsr #4 - mov r12, r12, lsr #1 @ halfwords - add r0, r12, r4, lsl r10 @ nametab+=(ts.line>>4)<>9); - - ldr r2, [lr, r2, lsl #1] @ pack=*(unsigned int *)(Pico.vram+addr); // Get 8 pixels - -.dtfc_samecode: - tst r8, r8 - bne .dtfc_shadow - - tst r2, r2 - beq .dtfc_loop - - cmp r2, r2, ror #4 - beq .dtfc_SingleColor @ tileline singlecolor - - tst r5, #0x0800 - beq .dtfc_TileNorm - - @ (r1=pdest, r2=pixels8, r3=pal) r4: scratch, r12: helper pattern - TileFlip r12 - b .dtfc_loop - -.dtfc_TileNorm: - TileNorm r12 - b .dtfc_loop - -.dtfc_SingleColor: - and r4, r2, #0xf - orr r4, r3, r4 - orr r4, r4, r4, lsl #8 - tst r1, #1 @ not aligned? - strneb r4, [r1], #1 - streqh r4, [r1], #2 - strh r4, [r1], #2 - strh r4, [r1], #2 - strh r4, [r1], #2 - strneb r4, [r1], #1 @ have a remaining unaligned pixel? - b .dtfc_loop - -.dtfc_shadow: - tst r2, r2 - beq .dtfc_shadow_blank - - cmp r2, r2, ror #4 - beq .dtfc_SingleColor @ tileline singlecolor - - tst r5, #0x0800 - beq .dtfc_TileNormShHP - - @ (r1=pdest, r2=pixels8, r3=pal) r4: scratch, r12: helper pattern - TileFlipShHP r12 - b .dtfc_loop - -.dtfc_TileNormShHP: - TileNormShHP r12 - b .dtfc_loop - -.dtfc_shadow_blank: - ldrb r4, [r1] - tst r4, #0x80 - andeq r4, r4,#0x3f - streqb r4, [r1] - ldrb r4, [r1,#1] - tst r4, #0x80 - andeq r4, r4,#0x3f - streqb r4, [r1,#1] - ldrb r4, [r1,#2] - tst r4, #0x80 - andeq r4, r4,#0x3f - streqb r4, [r1,#2] - ldrb r4, [r1,#3] - tst r4, #0x80 - andeq r4, r4,#0x3f - streqb r4, [r1,#3] - ldrb r4, [r1,#4] - tst r4, #0x80 - andeq r4, r4,#0x3f - streqb r4, [r1,#4] - ldrb r4, [r1,#5] - tst r4, #0x80 - andeq r4, r4,#0x3f - streqb r4, [r1,#5] - ldrb r4, [r1,#6] - tst r4, #0x80 - andeq r4, r4,#0x3f - streqb r4, [r1,#6] - ldrb r4, [r1,#7] - tst r4, #0x80 - andeq r4, r4,#0x3f - streqb r4, [r1,#7] - b .dtfc_loop - -.pool - -@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ - - -.global DrawSpritesFromCache @ int *hc, int sh - -DrawSpritesFromCache: - stmfd sp!, {r4-r11,lr} - - @ cache some stuff to avoid mem access - ldr r11,=HighCol - ldr lr, =(Pico+0x10000) @ lr=Pico.vram - mov r6, r1, lsl #31 - orr r6, r6, #1<<30 - mov r12,#0xf - - mov r10, r0 - -.dsfc_loop: - ldr r9, [r10], #4 @ read code - tst r9, r9 - ldmeqfd sp!, {r4-r11,pc} - - mov r4, r9, lsl #28 - bic r6, r6, #7 - orr r6, r6, r4, lsr #30 - add r6, r6, #1 @ r6=s1cc???? ... ?????www (s=shadow/hilight, cc=pal, w=width) - - and r5, r9, #3 - add r5, r5, #1 @ r5=delta - tst r9, #0x10000 - rsbne r5, r5, #0 @ Flip X - mov r5, r5, lsl #4 - - mov r2, r9, lsr #17 - mov r8, r2, lsl #1 @ tile=((unsigned int)code>>17)<<1; - - and r3, r9, #0x30 @ r3=pal=(code&0x30); - - bic r6, r6, #3<<28 - orr r6, r6, r3, lsl #24 - - mov r0, r9, lsl #16 - mov r0, r0, asr #22 @ sx=(code<<16)>>22 - adds r0, r0, #0 @ set ZV - b .dsfc_inloop_enter - -@ scratch: r4, r7 -.dsfc_inloop: - sub r6, r6, #1 - tst r6, #7 - beq .dsfc_loop - adds r0, r0, #8 - add r8, r8, r5 - -.dsfc_inloop_enter: - ble .dsfc_inloop - cmp r0, #328 - bge .dsfc_loop - - mov r8, r8, lsl #17 - mov r8, r8, lsr #17 @ tile&=0x7fff; // Clip tile address - - ldr r2, [lr, r8, lsl #1] @ pack=*(unsigned int *)(Pico.vram+tile); // Get 8 pixels - tst r2, r2 - beq .dsfc_inloop - - add r1, r11, r0 @ r1=pdest - - cmp r12, r6, lsr #28 - beq .dsfc_shadow - - cmp r2, r2, ror #4 - beq .dsfc_SingleColor @ tileline singlecolor - - tst r9, #0x10000 - beq .dsfc_TileNorm - - @ TileFlip (r1=pdest, r2=pixels8, r3=pal) r4: scratch, r12: helper pattern - TileFlip r12 - b .dsfc_inloop - -.dsfc_TileNorm: - TileNorm r12 - b .dsfc_inloop - -.dsfc_SingleColor: - tst r0, #1 @ not aligned? - and r4, r2, #0xf - orr r4, r3, r4 - orr r4, r4, r4, lsl #8 - strneb r4, [r1], #1 - streqh r4, [r1], #2 - strh r4, [r1], #2 - strh r4, [r1], #2 - strh r4, [r1], #2 - strneb r4, [r1], #1 - b .dsfc_inloop - -.dsfc_shadow: - cmp r2, r2, ror #4 - beq .dsfc_singlec_sh - - tst r9, #0x10000 - beq .dsfc_TileNorm_sh - - @ (r1=pdest, r2=pixels8, r3=pal) r4: scratch, r12: helper pattern - TileFlipSh - b .dsfc_inloop - -.dsfc_TileNorm_sh: - TileNormSh - b .dsfc_inloop - -.dsfc_singlec_sh: - cmp r2, #0xe0000000 - bcc .dsfc_SingleColor @ normal singlecolor tileline (carry inverted in ARM) - tst r2, #0x10000000 - bne .dsfc_sh_sh - TileSingleHi - b .dsfc_inloop - -.dsfc_sh_sh: - TileSingleSh - b .dsfc_inloop - -.pool - -@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ - -@ + 0 : hhhhvvvv ab--hhvv yyyyyyyy yyyyyyyy // a: offscreen h, b: offs. v, h: horiz. size -@ + 4 : xxxxxxxx xxxxxxxx pccvhnnn nnnnnnnn // x: x coord + 8 - -.global DrawSprite @ unsigned int *sprite, int **hc, int sh - -DrawSprite: - stmfd sp!, {r4-r9,r11,lr} - - ldr r3, [r0] @ sprite[0] - mov r6, r3, lsr #28 - sub r6, r6, #1 @ r6=width-1 (inc later) - mov r5, r3, lsr #24 - and r5, r5, #7 @ r5=height - - mov r4, r3, lsl #16 @ r4=sy<<16 (tmp) - - ldr r7, =Scanline - ldr r7, [r7] - sub r7, r7, r4, asr #16 @ r7=row=Scanline-sy - - tst r2, r2 - ldr r9, [r0, #4] - mov r2, r9, asr #16 @ r2=sx - bic r9, r9, #0xfe000000 - orrne r9, r9, #1<<31 @ r9=code|(sh<<31) - - tst r9, #0x1000 - movne r4, r5, lsl #3 - subne r4, r4, #1 - subne r7, r4, r7 @ if (code&0x1000) row=(height<<3)-1-row; // Flip Y - - mov r8, r9, lsl #21 - mov r8, r8, lsr #21 - add r8, r8, r7, lsr #3 @ tile+=row>>3; // Tile number increases going down - - tst r9, #0x0800 - mlane r8, r5, r6, r8 @ if (code&0x0800) { tile+=delta*(width-1); - rsbne r5, r5, #0 @ delta=-delta; } // r5=delta now - - mov r8, r8, lsl #4 - and r7, r7, #7 - add r8, r8, r7, lsl #1 @ tile+=(row&7)<<1; // Tile address - - tst r9, #0x8000 - bne .dspr_cache @ if(code&0x8000) // high priority - cache it - - @ cache some stuff to avoid mem access - ldr r11,=HighCol - ldr lr, =(Pico+0x10000) @ lr=Pico.vram - mov r12,#0xf - - mov r5, r5, lsl #4 @ delta<<=4; // Delta of address - and r4, r9, #0x6000 - orr r9, r9, r4, lsl #16 - orr r9, r9, #0x10000000 @ r9=scc1 ???? ... (s=shadow/hilight, cc=pal) - - tst r9, #1<<31 - mov r3, r4, lsr #9 @ r3=pal=((code>>9)&0x30); - orrne r3, r3, #0x40 @ shadow by default - - add r6, r6, #1 @ inc now - adds r0, r2, #0 @ mov sx to r0 and set ZV flags - b .dspr_loop_enter - -.dspr_loop: - subs r6, r6, #1 @ width-- - ldmeqfd sp!, {r4-r9,r11,pc}@ return - adds r0, r0, #8 @ sx+=8 - add r8, r8, r5 @ tile+=delta - -.dspr_loop_enter: - ble .dspr_loop @ sx <= 0 - cmp r0, #328 - ldmgefd sp!, {r4-r9,r11,pc}@ return - - mov r8, r8, lsl #17 - mov r8, r8, lsr #17 @ tile&=0x7fff; // Clip tile address - - ldr r2, [lr, r8, lsl #1] @ pack=*(unsigned int *)(Pico.vram+addr); // Get 8 pixels - tst r2, r2 - beq .dspr_loop - - add r1, r11, r0 @ r1=pdest - - cmp r12, r9, lsr #28 - beq .dspr_shadow - - cmp r2, r2, ror #4 - beq .dspr_SingleColor @ tileline singlecolor - - tst r9, #0x0800 - beq .dspr_TileNorm - - @ (r1=pdest, r2=pixels8, r3=pal) r4: scratch, r12: helper pattern - TileFlip r12 - b .dspr_loop - -@ scratch: r4, r7 -.dspr_TileNorm: - TileNorm r12 - b .dspr_loop - -.dspr_SingleColor: - and r4, r2, #0xf - orr r4, r3, r4 - orr r4, r4, r4, lsl #8 - tst r0, #1 @ not aligned? - strneb r4, [r1], #1 - streqh r4, [r1], #2 - strh r4, [r1], #2 - strh r4, [r1], #2 - strh r4, [r1], #2 - strneb r4, [r1], #1 - b .dspr_loop - -.dspr_shadow: - cmp r2, r2, ror #4 - beq .dspr_singlec_sh - - tst r9, #0x0800 - beq .dspr_TileNorm_sh - - @ (r1=pdest, r2=pixels8, r3=pal) r4: scratch, r12: helper pattern - TileFlipSh - b .dspr_loop - -.dspr_TileNorm_sh: - TileNormSh - b .dspr_loop - -.dspr_singlec_sh: - cmp r2, #0xe0000000 - bcc .dspr_SingleColor @ normal tileline - tst r2, #0x10000000 - bne .dspr_sh_sh - TileSingleHi - b .dspr_loop - -.dspr_sh_sh: - TileSingleSh - b .dspr_loop - - -.dspr_cache: - @ *(*hc)++ = (tile<<16)|((code&0x0800)<<5)|((sx<<6)&0x0000ffc0)|((code>>9)&0x30)|((sprite[0]>>24)&0xf); - mov r4, r8, lsl #16 @ tile - tst r9, #0x0800 - orrne r4, r4, #0x10000 @ code&0x0800 - mov r2, r2, lsl #22 - orr r4, r4, r2, lsr #16 @ (sx<<6)&0x0000ffc0 - and r2, r9, #0x6000 - orr r4, r4, r2, lsr #9 @ (code>>9)&0x30 - mov r2, r3, lsl #12 - orr r4, r4, r2, lsr #28 @ (sprite[0]>>24)&0xf - - ldr r2, [r1] - str r4, [r2], #4 - str r2, [r1] - - ldmfd sp!, {r4-r9,r11,lr} - bx lr - -@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ - -.global DrawWindow @ int tstart, int tend, int prio, int sh // int *hcache - -DrawWindow: - stmfd sp!, {r4-r11,lr} - - ldr r11, =(Pico+0x22228) @ Pico.video - ldrb r12, [r11, #3] @ pvid->reg[3] - mov r12, r12, lsl #10 - - ldr r10, =Scanline - ldr r10, [r10] - mov r5, r10, lsr #3 - and r10, r10, #7 - mov r10, r10, lsl #1 @ r10=ty - - ldr r4, [r11, #12] - tst r4, #1 @ 40 cell mode? - andne r12, r12, #0xf000 @ 0x3c<<10 - andeq r12, r12, #0xf800 - addne r12, r12, r5, lsl #7 - addeq r12, r12, r5, lsl #6 @ nametab - add r12, r12, r0, lsl #2 @ +starttile - - ldr lr, =(Pico+0x10000) @ lr=Pico.vram - - @ fetch the first code now - ldrh r7, [lr, r12] - - ldr r6, =rendstatus - ldrb r6, [r6] - ands r6, r6, #2 @ we care about bit 1 only - orr r6, r6, r2 - bne .dw_no_sameprio - - cmp r2, r7, lsr #15 - ldmnefd sp!, {r4-r11,pc} @ assume that whole window uses same priority - -.dw_no_sameprio: - orr r6, r6, r3, lsl #8 @ shadow mode - - sub r8, r1, r0 - mov r8, r8, lsl #1 @ cells - - mvn r9, #0 @ r9=prevcode=-1 - - @ cache some stuff to avoid mem access - ldr r11,=(HighCol+8) - add r1, r11, r0, lsl #4 @ r1=pdest - mov r0, #0xf - b .dwloop_enter - - @ r4,r5 & r7 are scratch in this loop -.dwloop: - add r1, r1, #8 -.dwloop_nor1: - subs r8, r8, #1 - add r12, r12, #2 @ halfwords - beq .dwloop_end @ done - - ldrh r7, [lr, r12] @ r7=code (int, but from unsigned, no sign extend) - - eor r5, r6, r7, lsr #15 - tst r5, #1 - orrne r6, r6, #2 @ wrong pri - bne .dwloop - - cmp r7, r9 - beq .dw_samecode @ we know stuff about this tile already - -.dwloop_enter: - mov r9, r7 @ remember code - - movs r2, r9, lsl #20 @ if (code&0x1000) - mov r2, r2, lsl #1 - add r2, r10, r2, lsr #17 @ r2=addr=(code&0x7ff)<<4; addr+=ty - eorcs r2, r2, #0x0e @ if (code&0x1000) addr^=0xe; - - and r3, r9, #0x6000 - mov r3, r3, lsr #9 @ r3=pal=((code&0x6000)>>9); - - ldr r2, [lr, r2, lsl #1] @ pack=*(unsigned int *)(Pico.vram+addr); // Get 8 pixels - -.dw_samecode: - tst r6, #0x100 - bne .dw_shadow -.dw_shadow_done: - tst r2, r2 - beq .dwloop @ tileline blank - - cmp r2, r2, ror #4 - beq .dw_SingleColor @ tileline singlecolor - - tst r9, #0x0800 - beq .dw_TileNorm - - @ (r1=pdest, r2=pixels8, r3=pal) r4: scratch, r0: helper pattern - TileFlip r0 - b .dwloop - -.dw_TileNorm: - TileNorm r0 - b .dwloop - -.dw_SingleColor: - and r4, r0, r2 @ #0x0000000f - orr r4, r3, r4 - orr r4, r4, r4, lsl #8 - orr r4, r4, r4, lsl #16 - mov r5, r4 - stmia r1!, {r4,r5} - b .dwloop_nor1 @ we incremeted r1 ourselves - -.dw_shadow: - tst r6, #1 @ hi pri? - orreq r3, r3, #0x40 - beq .dw_shadow_done - ldr r4, [r1] - tst r4, #0x00000080 - biceq r4, r4, #0x000000c0 - tst r4, #0x00008000 - biceq r4, r4, #0x0000c000 - tst r4, #0x00800000 - biceq r4, r4, #0x00c00000 - tst r4, #0x80000000 - biceq r4, r4, #0xc0000000 - str r4, [r1] - ldr r4, [r1,#4] - tst r4, #0x00000080 - biceq r4, r4, #0x000000c0 - tst r4, #0x00008000 - biceq r4, r4, #0x0000c000 - tst r4, #0x00800000 - biceq r4, r4, #0x00c00000 - tst r4, #0x80000000 - biceq r4, r4, #0xc0000000 - str r4, [r1,#4] - b .dw_shadow_done - -.dwloop_end: - ldr r0, =rendstatus - ldr r1, [r0] - and r6, r6, #2 - orr r1, r1, r6 - str r1, [r0] - - ldmfd sp!, {r4-r11,r12} - bx r12 - - -@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ - - -@ hilights 2 pixels in RGB444/BGR444 format -.macro TileDoShHi2Pixels444 reg - mov \reg, \reg, ror #12 - adds \reg, \reg, #0x40000000 - orrcs \reg, \reg, #0xf0000000 - mov \reg, \reg, ror #28 - adds \reg, \reg, #0x40000000 - orrcs \reg, \reg, #0xf0000000 - mov \reg, \reg, ror #28 - adds \reg, \reg, #0x40000000 - orrcs \reg, \reg, #0xf0000000 - mov \reg, \reg, ror #24 - adds \reg, \reg, #0x40000000 - orrcs \reg, \reg, #0xf0000000 - mov \reg, \reg, ror #28 - adds \reg, \reg, #0x40000000 - orrcs \reg, \reg, #0xf0000000 - mov \reg, \reg, ror #28 - adds \reg, \reg, #0x40000000 - orrcs \reg, \reg, #0xf0000000 - mov \reg, \reg, ror #12 -.endm - - -.global FinalizeLineBGR444 @ int sh - -FinalizeLineBGR444: - stmfd sp!, {r4-r6,lr} - mov r6, r0 - ldr r0, =DrawLineDest - ldr r0, [r0] - ldr lr, =(Pico+0x22228) @ Pico.video - sub r3, lr, #0x128 @ r3=Pico.cram - - ldrb r12, [lr, #12] - tst r12, #1 - movne r2, #320/4 @ len - moveq r2, #256/4 - addeq r0, r0, #32*2 - ldreq r4, =PicoOpt - ldreq r4, [r4] - tsteq r4, #0x100 - addeq r0, r0, #32*2 - - tst r6, r6 - beq .fl_noshBGR444 - - ldr r4, =HighPal - - ldrb r12, [lr, #-0x1a] @ 0x2220e ~ dirtyPal - tst r12, r12 - moveq r3, r4 - beq .fl_noshBGR444 - mov r12, #0 - strb r12, [lr, #-0x1a] - - mov lr, #0x40/8 - @ copy pal: -.fl_loopcpBGR444: - subs lr, lr, #1 - ldmia r3!, {r1,r5,r6,r12} - stmia r4!, {r1,r5,r6,r12} - bne .fl_loopcpBGR444 - - @ shadowed pixels: - mov r12, #0x0077 - orr r12,r12,#0x0700 - orr r12,r12,r12,lsl #16 - sub r3, r3, #0x40*2 - add r5, r4, #0x80*2 - mov lr, #0x40/4 -.fl_loopcpBGR444_sh: - subs lr, lr, #1 - ldmia r3!, {r1,r6} - and r1, r12, r1, lsr #1 - and r6, r12, r6, lsr #1 - stmia r4!, {r1,r6} - stmia r5!, {r1,r6} - bne .fl_loopcpBGR444_sh - - @ hilighted pixels: - sub r3, r3, #0x40*2 - mov lr, #0x40/2 -.fl_loopcpBGR444_hi: - ldr r1, [r3], #4 - TileDoShHi2Pixels444 r1 - str r1, [r4], #4 - subs lr, lr, #1 - bne .fl_loopcpBGR444_hi - - sub r3, r4, #0x40*3*2 - - -.fl_noshBGR444: - ldr r1, =(HighCol+8) - mov lr, #0xff - mov lr, lr, lsl #1 - -.fl_loopBGR444: - subs r2, r2, #1 - - ldr r12, [r1], #4 - - and r4, lr, r12, lsl #1 - ldrh r4, [r3, r4] - and r5, lr, r12, lsr #7 - ldrh r5, [r3, r5] - orr r4, r4, r5, lsl #16 - - and r5, lr, r12, lsr #15 - ldrh r5, [r3, r5] - and r6, lr, r12, lsr #23 - ldrh r6, [r3, r6] - orr r5, r5, r6, lsl #16 - - stmia r0!, {r4,r5} - bne .fl_loopBGR444 - - - ldmfd sp!, {r4-r6,lr} - bx lr - - -@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ - - -@ hilights 2 pixels in RGB555/BGR555 format -.macro TileDoShHi2Pixels555 reg - adds \reg, \reg, #0x40000000 - orrcs \reg, \reg, #0xf0000000 - mov \reg, \reg, ror #27 - adds \reg, \reg, #0x40000000 - orrcs \reg, \reg, #0xf0000000 - mov \reg, \reg, ror #26 - adds \reg, \reg, #0x40000000 - orrcs \reg, \reg, #0xf0000000 - mov \reg, \reg, ror #27 - adds \reg, \reg, #0x40000000 - orrcs \reg, \reg, #0xf0000000 - mov \reg, \reg, ror #27 - adds \reg, \reg, #0x40000000 - orrcs \reg, \reg, #0xf0000000 - mov \reg, \reg, ror #26 - adds \reg, \reg, #0x40000000 - orrcs \reg, \reg, #0xf0000000 - mov \reg, \reg, ror #27 -.endm - - -@ Convert 0000bbb0 ggg0rrr0 -@ to rrrrrggg gggbbbbb - -@ r2,r3,r9 - scratch, lr = 0x001c001c, r8 = 0x00030003 -.macro convRGB565 reg - and r2, lr, \reg,lsl #1 - and r9, r8, \reg,lsr #2 - orr r2, r2, r9 @ r2=red - and r3, lr, \reg,lsr #7 - and r9, r8, \reg,lsr #10 - orr r3, r3, r9 @ r3=blue - and \reg, \reg, lr, lsl #3 - orr \reg, \reg, \reg,lsl #3 @ green - orr \reg, \reg, r2, lsl #11 @ add red back - orr \reg, \reg, r3 @ add blue back -.endm - -vidConvCpyRGB565: @ void *to, void *from, int pixels - stmfd sp!, {r4-r9,lr} - - mov r12, r2, lsr #3 @ repeats - mov lr, #0x001c0000 - orr lr, lr, #0x01c @ lr == pattern 0x001c001c - mov r8, #0x00030000 - orr r8, r8, #0x003 @ lr == pattern 0x001c001c - -.loopRGB565: - subs r12, r12, #1 - - ldmia r1!, {r4-r7} - convRGB565 r4 - str r4, [r0], #4 - convRGB565 r5 - str r5, [r0], #4 - convRGB565 r6 - str r6, [r0], #4 - convRGB565 r7 - str r7, [r0], #4 - - bgt .loopRGB565 - - ldmfd sp!, {r4-r9,lr} - bx lr - - - -.global FinalizeLineRGB555 @ int sh - -FinalizeLineRGB555: - stmfd sp!, {r4-r8,lr} - ldr r5, =(Pico+0x22228) @ Pico.video - ldr r4, =HighPal - mov r6, r0 - - ldrb r7, [r5, #-0x1a] @ 0x2220e ~ dirtyPal - tst r7, r7 - beq .fl_noconvRGB555 - mov r1, #0 - strb r1, [r5, #-0x1a] - sub r1, r5, #0x128 @ r1=Pico.cram - mov r0, r4 - mov r2, #0x40 - bl vidConvCpyRGB565 - -.fl_noconvRGB555: - ldr r0, =DrawLineDest - ldr r0, [r0] - - ldrb r12, [r5, #12] - tst r12, #1 - movne r2, #320/8 @ len - moveq r2, #256/8 - ldreq r3, =PicoOpt - ldreq r3, [r3] - tsteq r3, #0x100 - addeq r0, r0, #32*2 - - mov r3, r4 - tst r6, r6 - beq .fl_noshRGB555 - tst r7, r7 - beq .fl_noshRGB555 - - @ shadowed pixels: - mov r12, #0x008e - orr r12,r12,#0x7300 - orr r12,r12,r12,lsl #16 - add r4, r3, #0x40*2 - add r5, r3, #0xc0*2 - mov lr, #0x40/4 -.fl_loopcpRGB555_sh: - subs lr, lr, #1 - ldmia r3!, {r1,r6} - and r1, r12, r1, lsr #1 - and r6, r12, r6, lsr #1 - stmia r4!, {r1,r6} - stmia r5!, {r1,r6} - bne .fl_loopcpRGB555_sh - - @ hilighted pixels: - sub r3, r3, #0x40*2 - mov lr, #0x40/2 -.fl_loopcpRGB555_hi: - ldr r1, [r3], #4 - TileDoShHi2Pixels555 r1 - str r1, [r4], #4 - subs lr, lr, #1 - bne .fl_loopcpRGB555_hi - - sub r3, r3, #0x40*2 - - -.fl_noshRGB555: - ldr r1, =(HighCol+8) - mov lr, #0xff - mov lr, lr, lsl #1 - -.fl_loopRGB555: - subs r2, r2, #1 - - ldr r12, [r1], #4 - ldr r7, [r1], #4 - - and r4, lr, r12, lsl #1 - ldrh r4, [r3, r4] - and r5, lr, r12, lsr #7 - ldrh r5, [r3, r5] - orr r4, r4, r5, lsl #16 - - and r5, lr, r12, lsr #15 - ldrh r5, [r3, r5] - and r6, lr, r12, lsr #23 - ldrh r6, [r3, r6] - orr r5, r5, r6, lsl #16 - - and r8, lr, r7, lsl #1 - ldrh r8, [r3, r8] - and r6, lr, r7, lsr #7 - ldrh r6, [r3, r6] - orr r8, r8, r6, lsl #16 - - and r12,lr, r7, lsr #15 - ldrh r12,[r3, r12] - and r6, lr, r7, lsr #23 - ldrh r6, [r3, r6] - orr r12,r12, r6, lsl #16 - - stmia r0!, {r4,r5,r8,r12} - bne .fl_loopRGB555 - - - ldmfd sp!, {r4-r8,lr} - bx lr - -@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ - -@ utility -.global blockcpy @ void *dst, void *src, size_t n - -blockcpy: - stmfd sp!, {r4,r5} - mov r2, r2, lsr #4 -blockcpy_loop: - subs r2, r2, #1 - ldmia r1!, {r3-r5,r12} - stmia r0!, {r3-r5,r12} - bne blockcpy_loop - ldmfd sp!, {r4,r5} - bx lr - - -.global blockcpy_or @ void *dst, void *src, size_t n, int pat - -blockcpy_or: - stmfd sp!, {r4-r6} - orr r3, r3, r3, lsl #8 - orr r3, r3, r3, lsl #16 - mov r2, r2, lsr #4 -blockcpy_loop_or: - subs r2, r2, #1 - ldmia r1!, {r4-r6,r12} - orr r4, r4, r3 - orr r5, r5, r3 - orr r6, r6, r3 - orr r12,r12,r3 - stmia r0!, {r4-r6,r12} - bne blockcpy_loop_or - ldmfd sp!, {r4-r6} - bx lr - diff --git a/Pico/Draw_amips.s b/Pico/Draw_amips.s new file mode 100644 index 00000000..859534f4 --- /dev/null +++ b/Pico/Draw_amips.s @@ -0,0 +1,42 @@ +# vim:filetype=mips + +# only CLUT for now.. + +.set noreorder # don't reorder any instructions +.set noat # don't use $at + + +# void amips_clut(unsigned short *dst, unsigned char *src, unsigned short *pal, int count) + +.global amips_clut + +amips_clut: + srl $a3, 2 +amips_clut_loop: + lbu $t0, 0($a1) # tried lw here, no improvement noticed + lbu $t1, 1($a1) + lbu $t2, 2($a1) + lbu $t3, 3($a1) + sll $t0, 1 + sll $t1, 1 + sll $t2, 1 + sll $t3, 1 + addu $t0, $a2 + addu $t1, $a2 + addu $t2, $a2 + addu $t3, $a2 + lhu $t0, 0($t0) + lhu $t1, 0($t1) + lhu $t2, 0($t2) + lhu $t3, 0($t3) + ins $t0, $t1, 16, 16 # ins rt, rs, pos, size - Insert size bits starting + ins $t2, $t3, 16, 16 # from the LSB of rs into rt starting at position pos + sw $t0, 0($a0) + sw $t2, 4($a0) + addiu $a0, 8 + addiu $a3, -1 + bnez $a3, amips_clut_loop + addiu $a1, 4 + jr $ra + nop + diff --git a/Pico/Draw_sh.c b/Pico/Draw_sh.c deleted file mode 100644 index 2f05a69a..00000000 --- a/Pico/Draw_sh.c +++ /dev/null @@ -1,1301 +0,0 @@ -// This is part of Pico Library - -// (c) Copyright 2004 Dave, All rights reserved. -// (c) Copyright 2006 notaz, All rights reserved. -// Free for non-commercial use. - -// For commercial use, separate licencing terms must be obtained. - - -#include "PicoInt.h" -#ifndef __GNUC__ -#pragma warning (disable:4706) // Disable assignment within conditional -#endif - -int (*PicoScan)(unsigned int num, void *data)=NULL; - -//unsigned short DefOutBuff[320*2]; -unsigned char HighCol[320*2]; -static int HighCacheA[41+1]; // caches for high layers -static int HighCacheB[41+1]; -static int HighCacheS[80+1]; // and sprites -static int HighPreSpr[80*2+1]; // slightly preprocessed sprites -char HighSprZ[320+8+8]; // Z-buffer for accurate sprites and shadow/hilight mode - // (if bit 7 == 0, sh caused by tile; if bit 6 == 0 pixel must be shadowed, else hilighted, if bit5 == 1) -// lsb->msb: moved sprites, all window tiles don't use same priority, accurate sprites (copied from PicoOpt), interlace -// dirty sprites, sonic mode, 16bit mode -int rendstatus=0x40; -void *DrawLineDest=HighCol; // pointer to dest buffer where to draw this line to -unsigned char *DrawLineInt=HighCol; // dest for internal code -int Scanline=0; // Scanline - -static int SpriteBlocks; -//unsigned short ppt[] = { 0x0f11, 0x0ff1, 0x01f1, 0x011f, 0x01ff, 0x0f1f, 0x0f0e, 0x0e7c }; - -struct TileStrip -{ - int nametab; // Position in VRAM of name table (for this tile line) - int line; // Line number in pixels 0x000-0x3ff within the virtual tilemap - int hscroll; // Horizontal scroll value in pixels for the line - int xmask; // X-Mask (0x1f - 0x7f) for horizontal wraparound in the tilemap - int *hc; // cache for high tile codes and their positions - int cells; // cells (tiles) to draw (32 col mode doesn't need to update whole 320) -}; - -// stuff available in asm: -#ifdef _ASM_DRAW_C -void DrawWindow(int tstart, int tend, int prio, int sh); -void BackFill(int reg7, int sh); -void DrawSprite(int *sprite, int **hc, int sh); -void DrawTilesFromCache(int *hc, int sh); -void DrawSpritesFromCache(int *hc, int sh); -void DrawLayer(int plane, int *hcache, int maxcells, int sh); -void FinalizeLineBGR444(int sh); -void FinalizeLineRGB555(int sh); -void blockcpy_or(void *dst, void *src, size_t n, int pat); -#else -// utility -void blockcpy_or(void *dst, void *src, size_t n, int pat) -{ - unsigned char *pd = dst, *ps = src; - for (; n; n--) - *pd++ = (unsigned char) (*ps++ | pat); -} -#endif - - -static int TileNorm(int sx,int addr,int pal) -{ - unsigned char *pd = DrawLineInt+sx; - unsigned int pack=0; unsigned int t=0; - - pack=*(unsigned int *)(Pico.vram+addr); // Get 8 pixels - if (pack) - { - t=pack&0x0000f000; if (t) pd[0]=(unsigned char)(pal|(t>>12)); - t=pack&0x00000f00; if (t) pd[1]=(unsigned char)(pal|(t>> 8)); - t=pack&0x000000f0; if (t) pd[2]=(unsigned char)(pal|(t>> 4)); - t=pack&0x0000000f; if (t) pd[3]=(unsigned char)(pal|(t )); - t=pack&0xf0000000; if (t) pd[4]=(unsigned char)(pal|(t>>28)); - t=pack&0x0f000000; if (t) pd[5]=(unsigned char)(pal|(t>>24)); - t=pack&0x00f00000; if (t) pd[6]=(unsigned char)(pal|(t>>20)); - t=pack&0x000f0000; if (t) pd[7]=(unsigned char)(pal|(t>>16)); - return 0; - } - - return 1; // Tile blank -} - -static int TileFlip(int sx,int addr,int pal) -{ - unsigned char *pd = DrawLineInt+sx; - unsigned int pack=0; unsigned int t=0; - - pack=*(unsigned int *)(Pico.vram+addr); // Get 8 pixels - if (pack) - { - t=pack&0x000f0000; if (t) pd[0]=(unsigned char)(pal|(t>>16)); - t=pack&0x00f00000; if (t) pd[1]=(unsigned char)(pal|(t>>20)); - t=pack&0x0f000000; if (t) pd[2]=(unsigned char)(pal|(t>>24)); - t=pack&0xf0000000; if (t) pd[3]=(unsigned char)(pal|(t>>28)); - t=pack&0x0000000f; if (t) pd[4]=(unsigned char)(pal|(t )); - t=pack&0x000000f0; if (t) pd[5]=(unsigned char)(pal|(t>> 4)); - t=pack&0x00000f00; if (t) pd[6]=(unsigned char)(pal|(t>> 8)); - t=pack&0x0000f000; if (t) pd[7]=(unsigned char)(pal|(t>>12)); - return 0; - } - return 1; // Tile blank -} - - -// tile renderers for hacky operator sprite support -#define sh_pix(x) \ - if(!t); \ - else if(t==0xe) pd[x]=(unsigned char)((pd[x]&0x3f)|0x80); /* hilight */ \ - else if(t==0xf) pd[x]=(unsigned char)((pd[x]&0x3f)|0xc0); /* shadow */ \ - else pd[x]=(unsigned char)(pal|t); - -#ifndef _ASM_DRAW_C -static int TileNormSH(int sx,int addr,int pal) -{ - unsigned int pack=0; unsigned int t=0; - unsigned char *pd = DrawLineInt+sx; - - pack=*(unsigned int *)(Pico.vram+addr); // Get 8 pixels - if (pack) - { - t=(pack&0x0000f000)>>12; sh_pix(0); - t=(pack&0x00000f00)>> 8; sh_pix(1); - t=(pack&0x000000f0)>> 4; sh_pix(2); - t=(pack&0x0000000f) ; sh_pix(3); - t=(pack&0xf0000000)>>28; sh_pix(4); - t=(pack&0x0f000000)>>24; sh_pix(5); - t=(pack&0x00f00000)>>20; sh_pix(6); - t=(pack&0x000f0000)>>16; sh_pix(7); - return 0; - } - - return 1; // Tile blank -} - -static int TileFlipSH(int sx,int addr,int pal) -{ - unsigned int pack=0; unsigned int t=0; - unsigned char *pd = DrawLineInt+sx; - - pack=*(unsigned int *)(Pico.vram+addr); // Get 8 pixels - if (pack) - { - t=(pack&0x000f0000)>>16; sh_pix(0); - t=(pack&0x00f00000)>>20; sh_pix(1); - t=(pack&0x0f000000)>>24; sh_pix(2); - t=(pack&0xf0000000)>>28; sh_pix(3); - t=(pack&0x0000000f) ; sh_pix(4); - t=(pack&0x000000f0)>> 4; sh_pix(5); - t=(pack&0x00000f00)>> 8; sh_pix(6); - t=(pack&0x0000f000)>>12; sh_pix(7); - return 0; - } - return 1; // Tile blank -} -#endif - -static int TileNormZ(int sx,int addr,int pal,int zval) -{ - unsigned int pack=0; unsigned int t=0; - unsigned char *pd = DrawLineInt+sx; - char *zb = HighSprZ+sx; - int collision = 0, zb_s; - - pack=*(unsigned int *)(Pico.vram+addr); // Get 8 pixels - if (pack) - { - t=pack&0x0000f000; if(t) { zb_s=zb[0]; if(zb_s) collision=1; if(zval>zb_s) { pd[0]=(unsigned char)(pal|(t>>12)); zb[0]=(char)zval; } } - t=pack&0x00000f00; if(t) { zb_s=zb[1]; if(zb_s) collision=1; if(zval>zb_s) { pd[1]=(unsigned char)(pal|(t>> 8)); zb[1]=(char)zval; } } - t=pack&0x000000f0; if(t) { zb_s=zb[2]; if(zb_s) collision=1; if(zval>zb_s) { pd[2]=(unsigned char)(pal|(t>> 4)); zb[2]=(char)zval; } } - t=pack&0x0000000f; if(t) { zb_s=zb[3]; if(zb_s) collision=1; if(zval>zb_s) { pd[3]=(unsigned char)(pal|(t )); zb[3]=(char)zval; } } - t=pack&0xf0000000; if(t) { zb_s=zb[4]; if(zb_s) collision=1; if(zval>zb_s) { pd[4]=(unsigned char)(pal|(t>>28)); zb[4]=(char)zval; } } - t=pack&0x0f000000; if(t) { zb_s=zb[5]; if(zb_s) collision=1; if(zval>zb_s) { pd[5]=(unsigned char)(pal|(t>>24)); zb[5]=(char)zval; } } - t=pack&0x00f00000; if(t) { zb_s=zb[6]; if(zb_s) collision=1; if(zval>zb_s) { pd[6]=(unsigned char)(pal|(t>>20)); zb[6]=(char)zval; } } - t=pack&0x000f0000; if(t) { zb_s=zb[7]; if(zb_s) collision=1; if(zval>zb_s) { pd[7]=(unsigned char)(pal|(t>>16)); zb[7]=(char)zval; } } - if(collision) Pico.video.status|=0x20; - return 0; - } - - return 1; // Tile blank -} - -static int TileFlipZ(int sx,int addr,int pal,int zval) -{ - unsigned int pack=0; unsigned int t=0; - unsigned char *pd = DrawLineInt+sx; - char *zb = HighSprZ+sx; - int collision = 0, zb_s; - - pack=*(unsigned int *)(Pico.vram+addr); // Get 8 pixels - if (pack) - { - t=pack&0x000f0000; if(t) { zb_s=zb[0]&0x1f; if(zb_s) collision=1; if(zval>zb_s) { pd[0]=(unsigned char)(pal|(t>>16)); zb[0]=(char)zval; } } - t=pack&0x00f00000; if(t) { zb_s=zb[1]&0x1f; if(zb_s) collision=1; if(zval>zb_s) { pd[1]=(unsigned char)(pal|(t>>20)); zb[1]=(char)zval; } } - t=pack&0x0f000000; if(t) { zb_s=zb[2]&0x1f; if(zb_s) collision=1; if(zval>zb_s) { pd[2]=(unsigned char)(pal|(t>>24)); zb[2]=(char)zval; } } - t=pack&0xf0000000; if(t) { zb_s=zb[3]&0x1f; if(zb_s) collision=1; if(zval>zb_s) { pd[3]=(unsigned char)(pal|(t>>28)); zb[3]=(char)zval; } } - t=pack&0x0000000f; if(t) { zb_s=zb[4]&0x1f; if(zb_s) collision=1; if(zval>zb_s) { pd[4]=(unsigned char)(pal|(t )); zb[4]=(char)zval; } } - t=pack&0x000000f0; if(t) { zb_s=zb[5]&0x1f; if(zb_s) collision=1; if(zval>zb_s) { pd[5]=(unsigned char)(pal|(t>> 4)); zb[5]=(char)zval; } } - t=pack&0x00000f00; if(t) { zb_s=zb[6]&0x1f; if(zb_s) collision=1; if(zval>zb_s) { pd[6]=(unsigned char)(pal|(t>> 8)); zb[6]=(char)zval; } } - t=pack&0x0000f000; if(t) { zb_s=zb[7]&0x1f; if(zb_s) collision=1; if(zval>zb_s) { pd[7]=(unsigned char)(pal|(t>>12)); zb[7]=(char)zval; } } - if(collision) Pico.video.status|=0x20; - return 0; - } - return 1; // Tile blank -} - - -#define sh_pixZ(x) \ - if(t) { \ - if(zb[x]) collision=1; \ - if(zval>zb[x]) { \ - if (t==0xe) { pd[x]=(unsigned char)((pd[x]&0x3f)|0x80); /* hilight */ } \ - else if(t==0xf) { pd[x]=(unsigned char)((pd[x]&0x3f)|0xc0); /* shadow */ } \ - else { zb[x]=(char)zval; pd[x]=(unsigned char)(pal|t); } \ - } \ - } - -static int TileNormZSH(int sx,int addr,int pal,int zval) -{ - unsigned int pack=0; unsigned int t=0; - unsigned char *pd = DrawLineInt+sx; - char *zb = HighSprZ+sx; - int collision = 0; - - pack=*(unsigned int *)(Pico.vram+addr); // Get 8 pixels - if (pack) - { - t=(pack&0x0000f000)>>12; sh_pixZ(0); - t=(pack&0x00000f00)>> 8; sh_pixZ(1); - t=(pack&0x000000f0)>> 4; sh_pixZ(2); - t=(pack&0x0000000f) ; sh_pixZ(3); - t=(pack&0xf0000000)>>28; sh_pixZ(4); - t=(pack&0x0f000000)>>24; sh_pixZ(5); - t=(pack&0x00f00000)>>20; sh_pixZ(6); - t=(pack&0x000f0000)>>16; sh_pixZ(7); - if(collision) Pico.video.status|=0x20; - return 0; - } - - return 1; // Tile blank -} - -static int TileFlipZSH(int sx,int addr,int pal,int zval) -{ - unsigned int pack=0; unsigned int t=0; - unsigned char *pd = DrawLineInt+sx; - char *zb = HighSprZ+sx; - int collision = 0; - - pack=*(unsigned int *)(Pico.vram+addr); // Get 8 pixels - if (pack) - { - t=(pack&0x000f0000)>>16; sh_pixZ(0); - t=(pack&0x00f00000)>>20; sh_pixZ(1); - t=(pack&0x0f000000)>>24; sh_pixZ(2); - t=(pack&0xf0000000)>>28; sh_pixZ(3); - t=(pack&0x0000000f) ; sh_pixZ(4); - t=(pack&0x000000f0)>> 4; sh_pixZ(5); - t=(pack&0x00000f00)>> 8; sh_pixZ(6); - t=(pack&0x0000f000)>>12; sh_pixZ(7); - if(collision) Pico.video.status|=0x20; - return 0; - } - return 1; // Tile blank -} - -// -------------------------------------------- - -#ifndef _ASM_DRAW_C -static void DrawStrip(struct TileStrip *ts, int sh) -{ - int tilex=0,dx=0,ty=0,code=0,addr=0,cells; - int oldcode=-1,blank=-1; // The tile we know is blank - int pal=0; - - // Draw tiles across screen: - tilex=(-ts->hscroll)>>3; - ty=(ts->line&7)<<1; // Y-Offset into tile - dx=((ts->hscroll-1)&7)+1; - cells = ts->cells; - if(dx != 8) cells++; // have hscroll, need to draw 1 cell more - - for (; cells; dx+=8,tilex++,cells--) - { - int zero=0; - - code=Pico.vram[ts->nametab+(tilex&ts->xmask)]; - if (code==blank) continue; - if (code>>15) { // high priority tile - int cval = code | (dx<<16) | (ty<<25); - if(code&0x1000) cval^=7<<26; - *ts->hc++ = cval; // cache it - continue; - } - - if (code!=oldcode) { - oldcode = code; - // Get tile address/2: - addr=(code&0x7ff)<<4; - addr+=ty; - if (code&0x1000) addr^=0xe; // Y-flip - -// pal=Pico.cram+((code>>9)&0x30); - pal=((code>>9)&0x30)|(sh<<6); - } - - if (code&0x0800) zero=TileFlip(dx,addr,pal); - else zero=TileNorm(dx,addr,pal); - - if (zero) blank=code; // We know this tile is blank now - } - - // terminate the cache list - *ts->hc = 0; -} -#endif - -// this is messy -#ifndef _ASM_DRAW_C -static -#endif -void DrawStripVSRam(struct TileStrip *ts, int plane) -{ - int tilex=0,dx=0,ty=0,code=0,addr=0,cell=0,nametabadd=0; - int oldcode=-1,blank=-1; // The tile we know is blank - int pal=0,scan=Scanline; - - // Draw tiles across screen: - tilex=(-ts->hscroll)>>3; - dx=((ts->hscroll-1)&7)+1; - if(dx != 8) { - int vscroll, line; - cell--; // have hscroll, start with negative cell - // also calculate intial VS stuff - vscroll=Pico.vsram[plane]; - - // Find the line in the name table - line=(vscroll+scan)&ts->line&0xffff; // ts->line is really ymask .. - nametabadd=(line>>3)<<(ts->line>>24); // .. and shift[width] - ty=(line&7)<<1; // Y-Offset into tile - } - - for (; cell < ts->cells; dx+=8,tilex++,cell++) - { - int zero=0; - - if((cell&1)==0) { - int line,vscroll; - vscroll=Pico.vsram[plane+(cell&~1)]; - - // Find the line in the name table - line=(vscroll+scan)&ts->line&0xffff; // ts->line is really ymask .. - nametabadd=(line>>3)<<(ts->line>>24); // .. and shift[width] - ty=(line&7)<<1; // Y-Offset into tile - } - - code=Pico.vram[ts->nametab+nametabadd+(tilex&ts->xmask)]; - if (code==blank) continue; - if (code>>15) { // high priority tile - int cval = code | (dx<<16) | (ty<<25); - if(code&0x1000) cval^=7<<26; - *ts->hc++ = cval; // cache it - continue; - } - - if (code!=oldcode) { - oldcode = code; - // Get tile address/2: - addr=(code&0x7ff)<<4; - if (code&0x1000) addr+=14-ty; else addr+=ty; // Y-flip - -// pal=Pico.cram+((code>>9)&0x30); - pal=((code>>9)&0x30); - } - - if (code&0x0800) zero=TileFlip(dx,addr,pal); - else zero=TileNorm(dx,addr,pal); - - if (zero) blank=code; // We know this tile is blank now - } - - // terminate the cache list - *ts->hc = 0; -} - -#ifndef _ASM_DRAW_C -static -#endif -void DrawStripInterlace(struct TileStrip *ts) -{ - int tilex=0,dx=0,ty=0,code=0,addr=0,cells; - int oldcode=-1,blank=-1; // The tile we know is blank - int pal=0; - - // Draw tiles across screen: - tilex=(-ts->hscroll)>>3; - ty=(ts->line&15)<<1; // Y-Offset into tile - dx=((ts->hscroll-1)&7)+1; - cells = ts->cells; - if(dx != 8) cells++; // have hscroll, need to draw 1 cell more - - for (; cells; dx+=8,tilex++,cells--) - { - int zero=0; - - code=Pico.vram[ts->nametab+(tilex&ts->xmask)]; - if (code==blank) continue; - if (code>>15) { // high priority tile - int cval = (code&0xfc00) | (dx<<16) | (ty<<25); - cval|=(code&0x3ff)<<1; - if(code&0x1000) cval^=0xf<<26; - *ts->hc++ = cval; // cache it - continue; - } - - if (code!=oldcode) { - oldcode = code; - // Get tile address/2: - addr=(code&0x7ff)<<5; - if (code&0x1000) addr+=30-ty; else addr+=ty; // Y-flip - -// pal=Pico.cram+((code>>9)&0x30); - pal=((code>>9)&0x30); - } - - if (code&0x0800) zero=TileFlip(dx,addr,pal); - else zero=TileNorm(dx,addr,pal); - - if (zero) blank=code; // We know this tile is blank now - } - - // terminate the cache list - *ts->hc = 0; -} - -// -------------------------------------------- - -#ifndef _ASM_DRAW_C -static void DrawLayer(int plane, int *hcache, int maxcells, int sh) -{ - struct PicoVideo *pvid=&Pico.video; - const char shift[4]={5,6,5,7}; // 32,64 or 128 sized tilemaps (2 is invalid) - struct TileStrip ts; - int width, height, ymask; - int vscroll, htab; - - ts.hc=hcache; - ts.cells=maxcells; - - // Work out the TileStrip to draw - - // Work out the name table size: 32 64 or 128 tiles (0-3) - width=pvid->reg[16]; - height=(width>>4)&3; width&=3; - - ts.xmask=(1<1) ymask =0x0ff; - - // Find name table: - if (plane==0) ts.nametab=(pvid->reg[2]&0x38)<< 9; // A - else ts.nametab=(pvid->reg[4]&0x07)<<12; // B - - htab=pvid->reg[13]<<9; // Horizontal scroll table address - if ( pvid->reg[11]&2) htab+=Scanline<<1; // Offset by line - if ((pvid->reg[11]&1)==0) htab&=~0xf; // Offset by tile - htab+=plane; // A or B - - // Get horizontal scroll value, will be masked later - ts.hscroll=Pico.vram[htab&0x7fff]; - - if((pvid->reg[12]&6) == 6) { - // interlace mode 2 - vscroll=Pico.vsram[plane]; // Get vertical scroll value - - // Find the line in the name table - ts.line=(vscroll+(Scanline<<1))&((ymask<<1)|1); - ts.nametab+=(ts.line>>4)<reg[11]&4) { - // shit, we have 2-cell column based vscroll - // luckily this doesn't happen too often - ts.line=ymask|(shift[width]<<24); // save some stuff instead of line - DrawStripVSRam(&ts, plane); - } else { - vscroll=Pico.vsram[plane]; // Get vertical scroll value - - // Find the line in the name table - ts.line=(vscroll+Scanline)&ymask; - ts.nametab+=(ts.line>>3)<reg[12]&1) - { - nametab=(pvid->reg[3]&0x3c)<<9; // 40-cell mode - nametab+=(Scanline>>3)<<6; - } - else - { - nametab=(pvid->reg[3]&0x3e)<<9; // 32-cell mode - nametab+=(Scanline>>3)<<5; - } - - tilex=tstart<<1; - tend<<=1; - - ty=(Scanline&7)<<1; // Y-Offset into tile - - if(!(rendstatus&2)) { - // check the first tile code - code=Pico.vram[nametab+tilex]; - // if the whole window uses same priority (what is often the case), we may be able to skip this field - if((code>>15) != prio) return; - } - - // Draw tiles across screen: - for (; tilex < tend; tilex++) - { - int addr=0,zero=0; - int pal; - - code=Pico.vram[nametab+tilex]; - if(code==blank) continue; - if((code>>15) != prio) { - rendstatus|=2; - continue; - } - - pal=((code>>9)&0x30); - - if(sh) { - int tmp, *zb = (int *)(DrawLineInt+8+(tilex<<3)); - if(prio) { - tmp = *zb; - if(!(tmp&0x00000080)) tmp&=~0x000000c0; if(!(tmp&0x00008000)) tmp&=~0x0000c000; - if(!(tmp&0x00800000)) tmp&=~0x00c00000; if(!(tmp&0x80000000)) tmp&=~0xc0000000; - *zb++=tmp; tmp = *zb; - if(!(tmp&0x00000080)) tmp&=~0x000000c0; if(!(tmp&0x00008000)) tmp&=~0x0000c000; - if(!(tmp&0x00800000)) tmp&=~0x00c00000; if(!(tmp&0x80000000)) tmp&=~0xc0000000; - *zb++=tmp; - } else { - pal |= 0x40; - } - } - - // Get tile address/2: - addr=(code&0x7ff)<<4; - if (code&0x1000) addr+=14-ty; else addr+=ty; // Y-flip - - if (code&0x0800) zero=TileFlip(8+(tilex<<3),addr,pal); - else zero=TileNorm(8+(tilex<<3),addr,pal); - - if (zero) blank=code; // We know this tile is blank now - } - - // terminate the cache list - //*hcache = 0; -} - -// -------------------------------------------- - -static void DrawTilesFromCache(int *hc, int sh) -{ - int code, addr, zero, dx; - int pal; - short blank=-1; // The tile we know is blank - - // *ts->hc++ = code | (dx<<16) | (ty<<25); // cache it - - while((code=*hc++)) { - if(!sh && (short)code == blank) continue; - - // Get tile address/2: - addr=(code&0x7ff)<<4; - addr+=(unsigned int)code>>25; // y offset into tile - dx=(code>>16)&0x1ff; - if(sh) { - unsigned char *zb = DrawLineInt+dx; - if(!(*zb&0x80)) *zb&=0x3f; zb++; if(!(*zb&0x80)) *zb&=0x3f; zb++; - if(!(*zb&0x80)) *zb&=0x3f; zb++; if(!(*zb&0x80)) *zb&=0x3f; zb++; - if(!(*zb&0x80)) *zb&=0x3f; zb++; if(!(*zb&0x80)) *zb&=0x3f; zb++; - if(!(*zb&0x80)) *zb&=0x3f; zb++; if(!(*zb&0x80)) *zb&=0x3f; zb++; - } - - pal=((code>>9)&0x30); - - if (code&0x0800) zero=TileFlip(dx,addr,pal); - else zero=TileNorm(dx,addr,pal); - - if(zero) blank=(short)code; - } -} - -// -------------------------------------------- - -// Index + 0 : hhhhvvvv ab--hhvv yyyyyyyy yyyyyyyy // a: offscreen h, b: offs. v, h: horiz. size -// Index + 4 : xxxxxxxx xxxxxxxx pccvhnnn nnnnnnnn // x: x coord + 8 - -static void DrawSprite(int *sprite, int **hc, int sh) -{ - int width=0,height=0; - int row=0,code=0; - int pal; - int tile=0,delta=0; - int sx, sy; - int (*fTileFunc)(int sx,int addr,int pal); - - // parse the sprite data - sy=sprite[0]; - code=sprite[1]; - sx=code>>16; // X - width=sy>>28; - height=(sy>>24)&7; // Width and height in tiles - sy=(sy<<16)>>16; // Y - - row=Scanline-sy; // Row of the sprite we are on - - if (code&0x1000) row=(height<<3)-1-row; // Flip Y - - tile=code&0x7ff; // Tile number - tile+=row>>3; // Tile number increases going down - delta=height; // Delta to increase tile by going right - if (code&0x0800) { tile+=delta*(width-1); delta=-delta; } // Flip X - - tile<<=4; tile+=(row&7)<<1; // Tile address - - if(code&0x8000) { // high priority - cache it - *(*hc)++ = (tile<<16)|((code&0x0800)<<5)|((sx<<6)&0x0000ffc0)|((code>>9)&0x30)|((sprite[0]>>16)&0xf); - } else { - delta<<=4; // Delta of address - pal=((code>>9)&0x30)|(sh<<6); - - if(sh && (code&0x6000) == 0x6000) { - if(code&0x0800) fTileFunc=TileFlipSH; - else fTileFunc=TileNormSH; - } else { - if(code&0x0800) fTileFunc=TileFlip; - else fTileFunc=TileNorm; - } - - for (; width; width--,sx+=8,tile+=delta) - { - if(sx<=0) continue; - if(sx>=328) break; // Offscreen - - tile&=0x7fff; // Clip tile address - fTileFunc(sx,tile,pal); - } - } -} -#endif - - -// Index + 0 : hhhhvvvv s---hhvv yyyyyyyy yyyyyyyy // s: skip flag, h: horiz. size -// Index + 4 : xxxxxxxx xxxxxxxx pccvhnnn nnnnnnnn // x: x coord + 8 - -static void DrawSpriteZ(int pack, int pack2, int shpri, int sprio) -{ - int width=0,height=0; - int row=0; - int pal; - int tile=0,delta=0; - int sx, sy; - int (*fTileFunc)(int sx,int addr,int pal,int zval); - - // parse the sprite data - sx=pack2>>16; // X - sy=(pack <<16)>>16; // Y - width=pack>>28; - height=(pack>>24)&7; // Width and height in tiles - - row=Scanline-sy; // Row of the sprite we are on - - if (pack2&0x1000) row=(height<<3)-1-row; // Flip Y - - tile=pack2&0x7ff; // Tile number - tile+=row>>3; // Tile number increases going down - delta=height; // Delta to increase tile by going right - if (pack2&0x0800) { tile+=delta*(width-1); delta=-delta; } // Flip X - - tile<<=4; tile+=(row&7)<<1; // Tile address - delta<<=4; // Delta of address - pal=((pack2>>9)&0x30); - if((shpri&1)&&!(shpri&2)) pal|=0x40; - - shpri&=1; - if((pack2&0x6000) != 0x6000) shpri = 0; - shpri |= (pack2&0x0800)>>10; - switch(shpri) { - default: - case 0: fTileFunc=TileNormZ; break; - case 1: fTileFunc=TileNormZSH; break; - case 2: fTileFunc=TileFlipZ; break; - case 3: fTileFunc=TileFlipZSH; break; - } - - for (; width; width--,sx+=8,tile+=delta) - { - if(sx<=0) continue; - if(sx>=328) break; // Offscreen - - tile&=0x7fff; // Clip tile address - fTileFunc(sx,tile,pal,sprio); - } -} - -static void DrawSpriteInterlace(unsigned int *sprite) -{ - int width=0,height=0; - int row=0,code=0; - int pal; - int tile=0,delta=0; - int sx, sy; - - // parse the sprite data - sy=sprite[0]; - height=sy>>24; - sy=(sy&0x3ff)-0x100; // Y - width=(height>>2)&3; height&=3; - width++; height++; // Width and height in tiles - - row=(Scanline<<1)-sy; // Row of the sprite we are on - - code=sprite[1]; - sx=((code>>16)&0x1ff)-0x78; // X - - if (code&0x1000) row^=(16<>4; // Tile number increases going down - delta=height; // Delta to increase tile by going right - if (code&0x0800) { tile+=delta*(width-1); delta=-delta; } // Flip X - - tile<<=5; tile+=(row&15)<<1; // Tile address - - delta<<=5; // Delta of address - pal=((code>>9)&0x30); // Get palette pointer - - for (; width; width--,sx+=8,tile+=delta) - { - if(sx<=0) continue; - if(sx>=328) break; // Offscreen - - tile&=0x7fff; // Clip tile address - if (code&0x0800) TileFlip(sx,tile,pal); - else TileNorm(sx,tile,pal); - } -} - - -static void DrawAllSpritesInterlace(int pri, int maxwidth) -{ - struct PicoVideo *pvid=&Pico.video; - int i,u,table,link=0,sline=Scanline<<1; - unsigned int *sprites[80]; // Sprite index - - table=pvid->reg[5]&0x7f; - if (pvid->reg[12]&1) table&=0x7e; // Lowest bit 0 in 40-cell mode - table<<=8; // Get sprite table address/2 - - for (i=u=0; u < 80 && i < 21; u++) - { - unsigned int *sprite; - int code, sx, sy, height; - - sprite=(unsigned int *)(Pico.vram+((table+(link<<2))&0x7ffc)); // Find sprite - - // get sprite info - code = sprite[0]; - sx = sprite[1]; - if(((sx>>15)&1) != pri) goto nextsprite; // wrong priority sprite - - // check if it is on this line - sy = (code&0x3ff)-0x100; - height = (((code>>24)&3)+1)<<4; - if(sline < sy || sline >= sy+height) goto nextsprite; // no - - // check if sprite is not hidden offscreen - sx = (sx>>16)&0x1ff; - sx -= 0x78; // Get X coordinate + 8 - if(sx <= -8*3 || sx >= maxwidth) goto nextsprite; - - // sprite is good, save it's pointer - sprites[i++]=sprite; - - nextsprite: - // Find next sprite - link=(code>>16)&0x7f; - if(!link) break; // End of sprites - } - - // Go through sprites backwards: - for (i-- ;i>=0; i--) - DrawSpriteInterlace(sprites[i]); -} - - -#ifndef _ASM_DRAW_C -static void DrawSpritesFromCache(int *hc, int sh) -{ - int code, tile, sx, delta, width; - int pal; - int (*fTileFunc)(int sx,int addr,int pal); - - // *(*hc)++ = (tile<<16)|((code&0x0800)<<5)|((sx<<6)&0x0000ffc0)|((code>>9)&0x30)|((sprite[0]>>24)&0xf); - - while((code=*hc++)) { - pal=(code&0x30); - delta=code&0xf; - width=delta>>2; delta&=3; - width++; delta++; // Width and height in tiles - if (code&0x10000) delta=-delta; // Flip X - delta<<=4; - tile=((unsigned int)code>>17)<<1; - sx=(code<<16)>>22; // sx can be negative (start offscreen), so sign extend - - if(sh && pal == 0x30) { // - if(code&0x10000) fTileFunc=TileFlipSH; - else fTileFunc=TileNormSH; - } else { - if(code&0x10000) fTileFunc=TileFlip; - else fTileFunc=TileNorm; - } - - for (; width; width--,sx+=8,tile+=delta) - { - if(sx<=0) continue; - if(sx>=328) break; // Offscreen - - tile&=0x7fff; // Clip tile address - fTileFunc(sx,tile,pal); - } - } -} -#endif - - -// Index + 0 : ----hhvv -lllllll -------y yyyyyyyy -// Index + 4 : -------x xxxxxxxx pccvhnnn nnnnnnnn -// v -// Index + 0 : hhhhvvvv ab--hhvv yyyyyyyy yyyyyyyy // a: offscreen h, b: offs. v, h: horiz. size -// Index + 4 : xxxxxxxx xxxxxxxx pccvhnnn nnnnnnnn // x: x coord + 8 - -static void PrepareSprites(int full) -{ - struct PicoVideo *pvid=&Pico.video; - int u=0,link=0,sblocks=0; - int table=0; - int *pd = HighPreSpr; - - table=pvid->reg[5]&0x7f; - if (pvid->reg[12]&1) table&=0x7e; // Lowest bit 0 in 40-cell mode - table<<=8; // Get sprite table address/2 - - if (!full) - { - int pack; - // updates: tilecode, sx - for (u=0; u < 80 && (pack = *pd); u++, pd+=2) - { - unsigned int *sprite; - int code, code2, sx, sy, skip=0; - - sprite=(unsigned int *)(Pico.vram+((table+(link<<2))&0x7ffc)); // Find sprite - - // parse sprite info - code = sprite[0]; - code2 = sprite[1]; - code2 &= ~0xfe000000; - code2 -= 0x00780000; // Get X coordinate + 8 in upper 16 bits - sx = code2>>16; - - if((sx <= 8-((pack>>28)<<3) && sx >= -0x76) || sx >= 328) skip=1<<23; - else if ((sy = (pack<<16)>>16) < 240 && sy > -32) { - int sbl = (2<<(pack>>28))-1; - sblocks |= sbl<<(sy>>3); - } - - *pd = (pack&~(1<<23))|skip; - *(pd+1) = code2; - - // Find next sprite - link=(code>>16)&0x7f; - if(!link) break; // End of sprites - } - SpriteBlocks |= sblocks; - } - else - { - for (; u < 80; u++) - { - unsigned int *sprite; - int code, code2, sx, sy, hv, height, width, skip=0, sx_min; - - sprite=(unsigned int *)(Pico.vram+((table+(link<<2))&0x7ffc)); // Find sprite - - // parse sprite info - code = sprite[0]; - sy = (code&0x1ff)-0x80; - hv = (code>>24)&0xf; - height = (hv&3)+1; - - if(sy > 240 || sy + (height<<3) <= 0) skip|=1<<22; - - width = (hv>>2)+1; - code2 = sprite[1]; - sx = (code2>>16)&0x1ff; - sx -= 0x78; // Get X coordinate + 8 - sx_min = 8-(width<<3); - - if((sx <= sx_min && sx >= -0x76) || sx >= 328) skip|=1<<23; - else if (sx > sx_min && !skip) { - int sbl = (2<>3; - if(shi < 0) shi=0; // negative sy - sblocks |= sbl<>16)&0x7f; - if(!link) break; // End of sprites - } - SpriteBlocks = sblocks; - *pd = 0; // terminate - } -} - -static void DrawAllSprites(int *hcache, int maxwidth, int prio, int sh) -{ - int i,u,n; - int sx1seen=0; // sprite with x coord 1 or 0 seen - int ntiles = 0; // tile counter for sprite limit emulation - int *sprites[40]; // Sprites to draw in fast mode - int *ps, pack, rs = rendstatus, scan=Scanline; - - if(rs&8) { - DrawAllSpritesInterlace(prio, maxwidth); - return; - } - if(rs&0x11) { - //dprintf("PrepareSprites(%i) [%i]", (rs>>4)&1, scan); - PrepareSprites(rs&0x10); - rendstatus=rs&~0x11; - } - if (!(SpriteBlocks & (1<<(scan>>3)))) return; - - if(((rs&4)||sh)&&prio==0) - memset(HighSprZ, 0, 328); - if(!(rs&4)&&prio) { - if(hcache[0]) DrawSpritesFromCache(hcache, sh); - return; - } - - ps = HighPreSpr; - - // Index + 0 : hhhhvvvv ab--hhvv yyyyyyyy yyyyyyyy // a: offscreen h, b: offs. v, h: horiz. size - // Index + 4 : xxxxxxxx xxxxxxxx pccvhnnn nnnnnnnn // x: x coord + 8 - - for(i=u=n=0; (pack = *ps) && n < 20; ps+=2, u++) - { - int sx, sy, row, pack2; - - if(pack & 0x00400000) continue; - - // get sprite info - pack2 = *(ps+1); - sx = pack2>>16; - sy = (pack <<16)>>16; - row = scan-sy; - - //dprintf("x: %i y: %i %ix%i", sx, sy, (pack>>28)<<3, (pack>>21)&0x38); - - if(sx == -0x77) sx1seen|=1; // for masking mode 2 - - // check if it is on this line - if(row < 0 || row >= ((pack>>21)&0x38)) continue; // no - n++; // number of sprites on this line (both visible and hidden, max is 20) [broken] - - // sprite limit - ntiles += pack>>28; - if(ntiles > 40) break; - - if(pack & 0x00800000) continue; - - // masking sprite? - if(sx == -0x78) { - if(!(sx1seen&1) || sx1seen==3) { - break; // this sprite is not drawn and remaining sprites are masked - } - if((sx1seen>>8) == 0) sx1seen=(i+1)<<8; - continue; - } - else if(sx == -0x77) { - // masking mode2 (Outrun, Galaxy Force II, Shadow of the beast) - if(sx1seen>>8) { i=(sx1seen>>8)-1; break; } // seen both 0 and 1 - sx1seen |= 2; - continue; - } - - // accurate sprites - //dprintf("P:%i",((sx>>15)&1)); - if(rs&4) { - // might need to skip this sprite - if((pack2&0x8000) ^ (prio<<15)) continue; - DrawSpriteZ(pack,pack2,sh|(prio<<1),(char)(0x1f-n)); - continue; - } - - // sprite is good, save it's pointer - sprites[i++]=ps; - } - - // Go through sprites backwards: - if(!(rs&4)) { - for (i--; i>=0; i--) - DrawSprite(sprites[i],&hcache,sh); - - // terminate cache list - *hcache = 0; - } -} - - -// -------------------------------------------- - -#ifndef _ASM_DRAW_C -static void BackFill(int reg7, int sh) -{ - unsigned int back=0; - unsigned int *pd=NULL,*end=NULL; - - // Start with a blank scanline (background colour): - back=reg7&0x3f; - back|=sh<<6; - back|=back<<8; - back|=back<<16; - - pd= (unsigned int *)(DrawLineInt+8); - end=(unsigned int *)(DrawLineInt+8+320); - - do { pd[0]=pd[1]=pd[2]=pd[3]=back; pd+=4; } while (pd= 0; i--) - pal[0x40|i] = pal[0xc0|i] = (unsigned short)((pal[i]>>1)&0x0777); - // hilighted pixels - for(i = 0x3f; i >= 0; i--) { - t=pal[i]&0xeee;t+=0x444;if(t&0x10)t|=0xe;if(t&0x100)t|=0xe0;if(t&0x1000)t|=0xe00;t&=0xeee; - pal[0x80|i]=(unsigned short)t; - } - Pico.m.dirtyPal = 0; - } - } - - for(i = 0; i < len; i++) - pd[i] = pal[ps[i]]; -} - - -static void FinalizeLineRGB555(int sh) -{ - unsigned short *pd=DrawLineDest; - unsigned char *ps=DrawLineInt+8; - unsigned short *pal=HighPal; - int len, i, t, dirtyPal = Pico.m.dirtyPal; - - if(dirtyPal) { - unsigned short *ppal=Pico.cram; - for(i = 0x3f; i >= 0; i--) - pal[i] = (unsigned short) (((ppal[i]&0x00f)<<12)|((ppal[i]&0x0f0)<<3)|((ppal[i]&0xf00)>>7)); - Pico.m.dirtyPal = 0; - } - - if (Pico.video.reg[12]&1) { - len = 320; - } else { - if(!(PicoOpt&0x100)) pd+=32; - len = 256; - } - - if(sh) { - if(dirtyPal) { - // shadowed pixels - for(i = 0x3f; i >= 0; i--) - pal[0x40|i] = pal[0xc0|i] = (unsigned short)((pal[i]>>1)&0x738e); - // hilighted pixels - for(i = 0x3f; i >= 0; i--) { - t=pal[i]&0xe71c;t+=0x4208;if(t&0x20)t|=0x1c;if(t&0x800)t|=0x700;if(t&0x10000)t|=0xe000;t&=0xe71c; - pal[0x80|i]=(unsigned short)t; - } - } - } - - for(i = 0; i < len; i++) - pd[i] = pal[ps[i]]; -} -#endif - -static void FinalizeLine8bit(int sh) -{ - unsigned char *pd=DrawLineDest; - int len, rs = rendstatus; - static int dirty_count; - - if (!sh && Pico.m.dirtyPal && Scanline < 222) { - // a hack for mid-frame palette changes - if (!(rs & 0x20)) - dirty_count = 1; - else dirty_count++; - rs |= 0x20; - rendstatus = rs; - if (dirty_count == 3) { - blockcpy(HighPal, Pico.cram, 0x40*2); - } else if (dirty_count == 11) { - blockcpy(HighPal+0x40, Pico.cram, 0x40*2); - } - } - - if (Pico.video.reg[12]&1) { - len = 320; - } else { - if(!(PicoOpt&0x100)) pd+=32; - len = 256; - } - -/* test - if (!sh && rs & 0x20) { - if (dirty_count >= 11) { - blockcpy_or(pd, HighCol+8, len, 0x80); - } else { - blockcpy_or(pd, HighCol+8, len, 0x40); - } - } else { - blockcpy(pd, HighCol+8, len); - } -*/ -} - -void (*FinalizeLine)(int sh) = FinalizeLineBGR444; - -// -------------------------------------------- - -static int DrawDisplay(int sh) -{ - struct PicoVideo *pvid=&Pico.video; - int win=0,edge=0,hvwind=0; - int maxw, maxcells; - - if(pvid->reg[12]&1) { - maxw = 328; maxcells = 40; - } else { - maxw = 264; maxcells = 32; - } - - // Find out if the window is on this line: - win=pvid->reg[0x12]; - edge=(win&0x1f)<<3; - - if (win&0x80) { if (Scanline>=edge) hvwind=1; } - else { if (Scanline< edge) hvwind=1; } - - if(!hvwind) { // we might have a vertical window here - win=pvid->reg[0x11]; - edge=win&0x1f; - if(win&0x80) { - if(!edge) hvwind=1; - else if(edge < (maxcells>>1)) hvwind=2; - } else { - if(!edge); - else if(edge < (maxcells>>1)) hvwind=2; - else hvwind=1; - } - } - - DrawLayer(1, HighCacheB, maxcells, sh); - if(hvwind == 1) - DrawWindow(0, maxcells>>1, 0, sh); // HighCacheAW - else if(hvwind == 2) { - // ahh, we have vertical window - DrawLayer(0, HighCacheA, (win&0x80) ? edge<<1 : maxcells, sh); - DrawWindow((win&0x80) ? edge : 0, (win&0x80) ? maxcells>>1 : edge, 0, sh); // HighCacheW - } else - DrawLayer(0, HighCacheA, maxcells, sh); - DrawAllSprites(HighCacheS, maxw, 0, sh); - - if(HighCacheB[0]) DrawTilesFromCache(HighCacheB, sh); - if(hvwind == 1) - DrawWindow(0, maxcells>>1, 1, sh); - else if(hvwind == 2) { - if(HighCacheA[0]) DrawTilesFromCache(HighCacheA, sh); - DrawWindow((win&0x80) ? edge : 0, (win&0x80) ? maxcells>>1 : edge, 1, sh); - } else - if(HighCacheA[0]) DrawTilesFromCache(HighCacheA, sh); - DrawAllSprites(HighCacheS, maxw, 1, sh); - - return 0; -} - - -void PicoFrameStart() -{ - // prepare to do this frame - rendstatus &= 0x40; - rendstatus |= (PicoOpt&0x80)>>5; // accurate sprites - if(rendstatus) - Pico.video.status &= ~0x0020; - else Pico.video.status |= 0x0020; // sprite collision - if((Pico.video.reg[12]&6) == 6) rendstatus |= 8; // interlace mode - - PrepareSprites(1); -} - -static int Skip=0; - -int PicoLine(int scan) -{ - int sh; - if (Skip>0) { Skip--; return 0; } // Skip rendering lines - - if(!(rendstatus&0x40)) - DrawLineInt = DrawLineDest; - - Scanline=scan; - sh=(Pico.video.reg[0xC]&8)>>3; // shadow/hilight? - - // Draw screen: - BackFill(Pico.video.reg[7], sh); - if (Pico.video.reg[1]&0x40) - DrawDisplay(sh); - - FinalizeLine(sh); - //if (SpriteBlocks & (1<<(scan>>3))) for (sh=0; sh < 30; sh++) DrawLineDest[sh] = 0xf; - - Skip=PicoScan(Scanline,DrawLineDest); - - return 0; -} - - -void DrawSetColorFormat(int which) -{ - rendstatus |= 0x40; - DrawLineInt = HighCol; - - if (which == 2) { - rendstatus &= ~0x40; - FinalizeLine = FinalizeLine8bit; - } else if (which == 1) - FinalizeLine = FinalizeLineRGB555; - else - FinalizeLine = FinalizeLineBGR444; -} diff --git a/Pico/Draw_sh.s b/Pico/Draw_sh.s deleted file mode 100644 index 7811b849..00000000 --- a/Pico/Draw_sh.s +++ /dev/null @@ -1,1527 +0,0 @@ -@ assembly "optimized" version of some funtions from draw.c -@ this is highly specialized, be careful if changing related C code! - -@ (c) Copyright 2006, notaz -@ All Rights Reserved - - -.extern Pico -.extern PicoOpt -.extern HighCol -.extern Scanline -.extern HighSprZ -.extern rendstatus -.extern DrawLineInt -.extern DrawLineDest -.extern DrawStripVSRam -.extern DrawStripInterlace - - -@ helper -.macro TilePixel pat lsrr offs -.if !\lsrr - ands r4, \pat, r2 -.else - ands r4, \pat, r2, lsr #\lsrr -.endif - orrne r4, r3, r4 - strneb r4, [r1,#\offs] -.endm - -@ TileNorm (r1=pdest, r2=pixels8, r3=pal) r4: scratch, pat: register with helper pattern 0xf -.macro TileNorm pat - TilePixel \pat, 12, 0 @ #0x0000f000 - TilePixel \pat, 8, 1 @ #0x00000f00 - TilePixel \pat, 4, 2 @ #0x000000f0 - TilePixel \pat, 0, 3 @ #0x0000000f - TilePixel \pat, 28, 4 @ #0xf0000000 - TilePixel \pat, 24, 5 @ #0x0f000000 - TilePixel \pat, 20, 6 @ #0x00f00000 - TilePixel \pat, 16, 7 @ #0x000f0000 -.endm - -@ TileFlip (r1=pdest, r2=pixels8, r3=pal) r4: scratch, pat: register with helper pattern 0xf -.macro TileFlip pat - TilePixel \pat, 16, 0 @ #0x000f0000 - TilePixel \pat, 20, 1 @ #0x00f00000 - TilePixel \pat, 24, 2 @ #0x0f000000 - TilePixel \pat, 28, 3 @ #0xf0000000 - TilePixel \pat, 0, 4 @ #0x0000000f - TilePixel \pat, 4, 5 @ #0x000000f0 - TilePixel \pat, 8, 6 @ #0x00000f00 - TilePixel \pat, 12, 7 @ #0x0000f000 -.endm - -@ shadow/hilight mode - -@ this one is for hi priority layer -.macro TilePixelShHP pat lsrr offs - TilePixel \pat, \lsrr, \offs - ldreqb r4, [r1,#\offs] - tsteq r4, #0x80 - andeq r4, r4, #0x3f - streqb r4, [r1,#\offs] -.endm - -@ TileNorm (r1=pdest, r2=pixels8, r3=pal) r4: scratch, pat: register with helper pattern 0xf -.macro TileNormShHP pat - TilePixelShHP \pat, 12, 0 @ #0x0000f000 - TilePixelShHP \pat, 8, 1 @ #0x00000f00 - TilePixelShHP \pat, 4, 2 @ #0x000000f0 - TilePixelShHP \pat, 0, 3 @ #0x0000000f - TilePixelShHP \pat, 28, 4 @ #0xf0000000 - TilePixelShHP \pat, 24, 5 @ #0x0f000000 - TilePixelShHP \pat, 20, 6 @ #0x00f00000 - TilePixelShHP \pat, 16, 7 @ #0x000f0000 -.endm - -@ TileFlip (r1=pdest, r2=pixels8, r3=pal) r4: scratch, pat: register with helper pattern 0xf -.macro TileFlipShHP pat - TilePixelShHP \pat, 16, 0 @ #0x000f0000 - TilePixelShHP \pat, 20, 1 @ #0x00f00000 - TilePixelShHP \pat, 24, 2 @ #0x0f000000 - TilePixelShHP \pat, 28, 3 @ #0xf0000000 - TilePixelShHP \pat, 0, 4 @ #0x0000000f - TilePixelShHP \pat, 4, 5 @ #0x000000f0 - TilePixelShHP \pat, 8, 6 @ #0x00000f00 - TilePixelShHP \pat, 12, 7 @ #0x0000f000 -.endm - - -@ TileSingleSh (r1=pdest, r2=pixels8, r3=pal) r4,r7: scratch, r0=sx; r12: helper pattern 0xf -.macro TileSingleSh - tst r0, #1 @ not aligned? - mov r7, #0x00c000 - orr r7, r7, #0xc0 - ldrneb r4, [r1] - ldreqh r4, [r1] - orr r4, r4, r7 - strneb r4, [r1], #1 - streqh r4, [r1], #2 - ldrh r4, [r1] - orr r4, r4, r7 - strh r4, [r1], #2 - ldrh r4, [r1] - orr r4, r4, r7 - strh r4, [r1], #2 - ldrh r4, [r1] - orr r4, r4, r7 - strh r4, [r1], #2 - ldrneb r4, [r1] - orr r4, r4, r7 - strneb r4, [r1], #1 -.endm - -@ TileSingleHi (r1=pdest, r2=pixels8, r3=pal) r4,r7: scratch, r0=sx, r12: register with helper pattern 0xf -.macro TileSingleHi - tst r1, #1 @ not aligned? - mov r7, #0x008000 - orr r7, r7, #0x80 - ldrneb r4, [r1] - ldreqh r4, [r1] - bic r4, r4, r7, lsr #1 - orr r4, r4, r7 - strneb r4, [r1], #1 - streqh r4, [r1], #2 - ldrh r4, [r1] - bic r4, r4, r7, lsr #1 - orr r4, r4, r7 - strh r4, [r1], #2 - ldrh r4, [r1] - bic r4, r4, r7, lsr #1 - orr r4, r4, r7 - strh r4, [r1], #2 - ldrh r4, [r1] - bic r4, r4, r7, lsr #1 - orr r4, r4, r7 - strh r4, [r1], #2 - ldrneb r4, [r1] - bic r4, r4, r7, lsr #1 - orr r4, r4, r7 - strneb r4, [r1], #1 -.endm - -.macro TileDoShGenPixel shift ofs -.if \shift - ands r4, r12, r2, lsr #\shift -.else - ands r4, r12, r2 -.endif - beq 3f - cmp r4, #0xe - beq 2f - bgt 1f - orr r4, r3, r4 - strb r4, [r1,#\ofs] - b 3f -1: - ldrb r4, [r1,#\ofs] - orr r4, r4, #0xc0 - strb r4, [r1,#\ofs] - b 3f -2: - ldrb r4, [r1,#\ofs] - bic r4, r4, #0xc0 - orr r4, r4, #0x80 - strb r4, [r1,#\ofs] -3: -.endm - -@ TileFlipSh (r1=pdest, r2=pixels8, r3=pal) r4,r7: scratch, r0=sx, r12: register with helper pattern 0xf -.macro TileFlipSh - TileDoShGenPixel 16, 0 @ #0x000f0000 - TileDoShGenPixel 20, 1 @ #0x00f00000 - TileDoShGenPixel 24, 2 @ #0x0f000000 - TileDoShGenPixel 28, 3 @ #0xf0000000 - TileDoShGenPixel 0, 4 @ #0x0000000f - TileDoShGenPixel 4, 5 @ #0x000000f0 - TileDoShGenPixel 8, 6 @ #0x00000f00 - TileDoShGenPixel 12, 7 @ #0x0000f000 -.endm - -@ TileNormSh (r1=pdest, r2=pixels8, r3=pal) r4,r7: scratch, r0=sx, r12: register with helper pattern 0xf -.macro TileNormSh - TileDoShGenPixel 12, 0 @ #0x0000f000 - TileDoShGenPixel 8, 1 @ #0x00000f00 - TileDoShGenPixel 4, 2 @ #0x000000f0 - TileDoShGenPixel 0, 3 @ #0x0000000f - TileDoShGenPixel 28, 4 @ #0xf0000000 - TileDoShGenPixel 24, 5 @ #0x0f000000 - TileDoShGenPixel 20, 6 @ #0x00f00000 - TileDoShGenPixel 16, 7 @ #0x000f0000 -.endm - - -@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ - -@ struct TileStrip -@ { -@ int nametab; // 0x00 -@ int line; // 0x04 -@ int hscroll; // 0x08 -@ int xmask; // 0x0C -@ int *hc; // 0x10 (pointer to cache buffer) -@ int cells; // 0x14 -@ }; - -@ int DrawLayer(int plane, int *hcache, int maxcells, int sh) - -.global DrawLayer @ int plane, int *hcache, int maxcells, int sh - -DrawLayer: - stmfd sp!, {r4-r11,lr} - - ldr r11, =(Pico+0x22228) @ Pico.video - - mov r6, r1 @ hcache - orr r9, r2, r3, lsl #31 @ r9=maxcells|(sh<<31) - - ldrb r7, [r11, #16] @ ??hh??ww - - mov r1, r7, lsl #4 - orr r1, r1, #0x00ff - - and r10, r7, #3 - cmp r10, #1 - biclt r1, r1, #0xfc00 - biceq r1, r1, #0xfe00 - bicgt r1, r1, #0xff00 @ r1=ymask=(height<<8)|0xff; ...; // Y Mask in pixels - - add r10, r10, #5 - cmp r10, #7 - subge r10, r10, #1 @ r10=shift[width] (5,6,6,7) - - @ calculate xmask: - mov r8, #1 - mov r5, r8, lsl r10 - sub r5, r5, #1 @ r5=xmask - - @ Find name table: - tst r0, r0 - ldreqb r12, [r11, #2] - moveq r12, r12, lsl #10 - ldrneb r12, [r11, #4] - movne r12, r12, lsl #13 - and r12, r12, #(7<<13) @ r12=(ts->nametab<<1) (halfword compliant) - - ldr r2, =Scanline - ldr r2, [r2] - ldr lr, =(Pico+0x10000) @ lr=Pico.vram - - ldrh r8, [r11, #12] - mov r4, r8, lsr #8 @ pvid->reg[13] - mov r4, r4, lsl #10 @ htab=pvid->reg[13]<<9; (halfwords) - ldrb r7, [r11, #11] - tst r7, #2 - addne r4, r4, r2, lsl #2 @ htab+=Scanline<<1; // Offset by line - tst r7, #1 - biceq r4, r4, #0x1f @ htab&=~0xf; // Offset by tile - add r4, r4, r0, lsl #1 @ htab+=plane - bic r4, r4, #0x00ff0000 @ just in case - ldrh r3, [lr, r4] @ r3=hscroll - - tst r7, #4 - bne .DrawStrip_vsscroll - - @ Get vertical scroll value: - add r7, lr, #0x012000 - add r7, r7, #0x000180 @ r7=Pico.vsram (Pico+0x22180) - ldr r7, [r7] - - tst r8, #2 - tstne r8, #4 - bne .DrawStrip_interlace - - tst r0, r0 - movne r7, r7, lsr #16 - - @ Find the line in the name table - add r2, r2, r7 - and r2, r2, r1 - mov r4, r2, lsr #3 - add r10, r10, #1 @ shift[width]++ - add r12, r12, r4, lsl r10 @ nametab+=(ts.line>>3)<hscroll, r5=ts->xmask, r6=ts->hc, r9=ts->cells -@ mov r12,r1, lsl #1 @ r12=(ts->nametab<<1) (halfword compliant) - - and r10,r2, #7 - mov r10,r10, lsl #1 @ r10=ty=(ts->line&7)<<1; - orr r10,r10, r9, lsl #24 - - rsb r8, r3, #0 - mov r8, r8, lsr #3 @ r8=tilex=(-ts->hscroll)>>3 - - sub r1, r3, #1 - and r1, r1, #7 - add r4, r1, #1 @ r4=dx=((ts->hscroll-1)&7)+1 - - tst r9, #1<<31 - mov r3, #0 - orrne r10,r10, #1<<23 @ r10=(cells<<24|sh<<23|hi_not_empty<<22|ty) - movne r3, #0x40 @ default to shadowed pal on sh mode - - mvn r9, #0 @ r9=prevcode=-1 - - @ cache some stuff to avoid mem access -@ ldr r11,=HighCol - ldr r11,=DrawLineInt - ldr r11,[r11] - add r1, r11, r4 @ r1=pdest - mov r0, #0xf - - cmp r4, #8 - subeq r10,r10, #0x01000000 @ we will loop cells+1 times, so loop less when there is no scroll - beq .dsloop_enter - - @ do first iteration with clipping - and r7, r5, r8 - add r7, lr, r7, lsl #1 @ Pico.vram+((tilex&ts->xmask) as halfwords) - ldrh r7, [r7, r12] @ r7=code (int, but from unsigned, no sign extend) - - tst r7, #0x8000 - bne .DrawStrip_hiprio - - mov r9, r7 @ remember code - - movs r2, r9, lsl #20 @ if (code&0x1000) - mov r2, r2, lsl #1 - add r2, r2, r10, lsl #17 - mov r2, r2, lsr #17 - eorcs r2, r2, #0x0e @ if (code&0x1000) addr^=0xe; - - ldr r2, [lr, r2, lsl #1] @ pack=*(unsigned int *)(Pico.vram+addr); // Get 8 pixels - - bic r7, r3, #0x3f - and r3, r9, #0x6000 - add r3, r7, r3, lsr #9 @ r3=pal=((code&0x6000)>>9); - - tst r2, r2 - beq .dsloop @ tileline blank - - tst r9, #0x0800 - addne r4, r4, #8 - - ldr pc, [pc, r4, lsl #2] - nop - .word .ds_tn1_px1 @ should not happen - .word .ds_tn1_px1 - .word .ds_tn1_px2 - .word .ds_tn1_px3 - .word .ds_tn1_px4 - .word .ds_tn1_px5 - .word .ds_tn1_px6 - .word .ds_tn1_px7 - .word .dsloop @ should not happen - - .word .ds_tf1_px1 @ ... - .word .ds_tf1_px1 - .word .ds_tf1_px2 - .word .ds_tf1_px3 - .word .ds_tf1_px4 - .word .ds_tf1_px5 - .word .ds_tf1_px6 - .word .ds_tf1_px7 - .word .dsloop @ ... - - @ (r1=pdest, r2=pixels8, r3=pal) r4: scratch, r0: helper pattern -.ds_tn1_px1: - TilePixel r0, 8, 1 @ #0x00000f00 -.ds_tn1_px2: - TilePixel r0, 4, 2 @ #0x000000f0 -.ds_tn1_px3: - TilePixel r0, 0, 3 @ #0x0000000f -.ds_tn1_px4: - TilePixel r0, 28, 4 @ #0xf0000000 -.ds_tn1_px5: - TilePixel r0, 24, 5 @ #0x0f000000 -.ds_tn1_px6: - TilePixel r0, 20, 6 @ #0x00f00000 -.ds_tn1_px7: - TilePixel r0, 16, 7 @ #0x000f0000 - b .dsloop - -.ds_tf1_px1: - TilePixel r0, 20, 1 @ #0x00f00000 -.ds_tf1_px2: - TilePixel r0, 24, 2 @ #0x0f000000 -.ds_tf1_px3: - TilePixel r0, 28, 3 @ #0xf0000000 -.ds_tf1_px4: - TilePixel r0, 0, 4 @ #0x0000000f -.ds_tf1_px5: - TilePixel r0, 4, 5 @ #0x000000f0 -.ds_tf1_px6: - TilePixel r0, 8, 6 @ #0x00000f00 -.ds_tf1_px7: - TilePixel r0, 12, 7 @ #0x0000f000 - - - @ r4 & r7 are scratch in this loop -.dsloop: @ 40-41 times - add r1, r1, #8 -.dsloop_nor1: - subs r10,r10, #0x01000000 - add r8, r8, #1 - bmi .dsloop_exit - -.dsloop_enter: - and r7, r5, r8 - add r7, lr, r7, lsl #1 @ Pico.vram+((tilex&ts->xmask) as halfwords) - ldrh r7, [r7, r12] @ r7=code (int, but from unsigned, no sign extend) - - tst r7, #0x8000 - bne .DrawStrip_hiprio - - cmp r7, r9 - beq .DrawStrip_samecode @ we know stuff about this tile already - - mov r9, r7 @ remember code - - movs r2, r9, lsl #20 @ if (code&0x1000) - mov r2, r2, lsl #1 -@ bic r7, r10,#0xff000000 -@ add r2, r7, r2, lsr #17 @ r2=addr=(code&0x7ff)<<4; addr+=ty - add r2, r2, r10, lsl #17 - mov r2, r2, lsr #17 - eorcs r2, r2, #0x0e @ if (code&0x1000) addr^=0xe; - - bic r7, r3, #0x3f - and r3, r9, #0x6000 - add r3, r7, r3, lsr #9 @ r3=pal=((code&0x6000)>>9); - - ldr r2, [lr, r2, lsl #1] @ pack=*(unsigned int *)(Pico.vram+addr); // Get 8 pixels - -.DrawStrip_samecode: - tst r2, r2 - beq .dsloop @ tileline blank - - cmp r2, r2, ror #4 - beq .DrawStrip_SingleColor @ tileline singlecolor - - tst r9, #0x0800 - beq .DrawStrip_TileNorm - - @ (r1=pdest, r2=pixels8, r3=pal) r4: scratch, r0: helper pattern - TileFlip r0 - b .dsloop - -.DrawStrip_TileNorm: - TileNorm r0 - b .dsloop - -.DrawStrip_SingleColor: - and r4, r2, #0xf - orr r4, r3, r4 - orr r4, r4, r4, lsl #8 - tst r1, #1 @ not aligned? - strneb r4, [r1], #1 - streqh r4, [r1], #2 - strh r4, [r1], #2 - strh r4, [r1], #2 - strh r4, [r1], #2 - strneb r4, [r1], #1 @ have a remaining unaligned pixel? - b .dsloop_nor1 @ we incremeted r1 ourselves - -.DrawStrip_hiprio: - tst r10, #0x00c00000 - beq .DrawStrip_hiprio_maybempt - sub r0, r1, r11 - orr r7, r7, r0, lsl #16 - orr r7, r7, r10, lsl #25 @ (ty<<25) - tst r7, #0x1000 - eorne r7, r7, #7<<26 @ if(code&0x1000) cval^=7<<26; - str r7, [r6], #4 @ cache hi priority tile - mov r0, #0xf - b .dsloop - -.DrawStrip_hiprio_maybempt: - cmp r7, r9 - beq .dsloop @ must've been empty, otherwise we wouldn't get here - mov r9, r7 @ remember code - movs r2, r9, lsl #20 @ if (code&0x1000) - mov r2, r2, lsl #1 - add r2, r2, r10, lsl #17 - mov r2, r2, lsr #17 - eorcs r2, r2, #0x0e @ if (code&0x1000) addr^=0xe; - ldr r2, [lr, r2, lsl #1] @ pack=*(unsigned int *)(Pico.vram+addr); // Get 8 pixels - tst r2, r2 - orrne r10, r10, #1<<22 - bne .DrawStrip_hiprio - b .dsloop - -.dsloop_exit: - mov r0, #0 - str r0, [r6] @ terminate the cache list - - ldmfd sp!, {r4-r11,lr} - bx lr - - -.DrawStrip_vsscroll: - @ shit, we have 2-cell column based vscroll - @ let the c code handle this (for now) - - @ int nametab; // 0x00 - @ int line; // 0x04 - @ int hscroll; // 0x08 - @ int xmask; // 0x0C - @ int *hc; // 0x10 (pointer to cache buffer) - @ int cells; // 0x14 - - sub sp, sp, #6*4 - orr r2, r1, r10, lsl #24 @ ts.line=ymask|(shift[width]<<24); // save some stuff instead of line - mov r1, r0 @ plane - mov r0, r12, lsr #1 @ halfwords - and r9, r9, #0xff - stmia sp, {r0,r2,r3,r5,r6,r9} - - mov r0, sp - bl DrawStripVSRam @ struct TileStrip *ts, int plane - - add sp, sp, #6*4 - ldmfd sp!, {r4-r11,lr} - bx lr - -@ interlace mode 2? Sonic 2? -.DrawStrip_interlace: - tst r0, r0 - moveq r7, r7, lsl #21 - movne r7, r7, lsl #5 - - @ Find the line in the name table - add r2, r7, r2, lsl #22 @ r2=(vscroll+(Scanline<<1))<<21 (11 bits); - orr r1, r1, #0x80000000 - and r2, r2, r1, ror #10 @ &((ymask<<1)|1)<<21; - mov r2, r2, lsr #21 - mov r4, r2, lsr #4 - mov r12, r12, lsr #1 @ halfwords - add r0, r12, r4, lsl r10 @ nametab+=(ts.line>>4)<>9); - - ldr r2, [lr, r2, lsl #1] @ pack=*(unsigned int *)(Pico.vram+addr); // Get 8 pixels - -.dtfc_samecode: - tst r8, r8 - bne .dtfc_shadow - - tst r2, r2 - beq .dtfc_loop - - cmp r2, r2, ror #4 - beq .dtfc_SingleColor @ tileline singlecolor - - tst r5, #0x0800 - beq .dtfc_TileNorm - - @ (r1=pdest, r2=pixels8, r3=pal) r4: scratch, r12: helper pattern - TileFlip r12 - b .dtfc_loop - -.dtfc_TileNorm: - TileNorm r12 - b .dtfc_loop - -.dtfc_SingleColor: - and r4, r2, #0xf - orr r4, r3, r4 - orr r4, r4, r4, lsl #8 - tst r1, #1 @ not aligned? - strneb r4, [r1], #1 - streqh r4, [r1], #2 - strh r4, [r1], #2 - strh r4, [r1], #2 - strh r4, [r1], #2 - strneb r4, [r1], #1 @ have a remaining unaligned pixel? - b .dtfc_loop - -.dtfc_shadow: - tst r2, r2 - beq .dtfc_shadow_blank - - cmp r2, r2, ror #4 - beq .dtfc_SingleColor @ tileline singlecolor - - tst r5, #0x0800 - beq .dtfc_TileNormShHP - - @ (r1=pdest, r2=pixels8, r3=pal) r4: scratch, r12: helper pattern - TileFlipShHP r12 - b .dtfc_loop - -.dtfc_TileNormShHP: - TileNormShHP r12 - b .dtfc_loop - -.dtfc_shadow_blank: - ldrb r4, [r1] - tst r4, #0x80 - andeq r4, r4,#0x3f - streqb r4, [r1] - ldrb r4, [r1,#1] - tst r4, #0x80 - andeq r4, r4,#0x3f - streqb r4, [r1,#1] - ldrb r4, [r1,#2] - tst r4, #0x80 - andeq r4, r4,#0x3f - streqb r4, [r1,#2] - ldrb r4, [r1,#3] - tst r4, #0x80 - andeq r4, r4,#0x3f - streqb r4, [r1,#3] - ldrb r4, [r1,#4] - tst r4, #0x80 - andeq r4, r4,#0x3f - streqb r4, [r1,#4] - ldrb r4, [r1,#5] - tst r4, #0x80 - andeq r4, r4,#0x3f - streqb r4, [r1,#5] - ldrb r4, [r1,#6] - tst r4, #0x80 - andeq r4, r4,#0x3f - streqb r4, [r1,#6] - ldrb r4, [r1,#7] - tst r4, #0x80 - andeq r4, r4,#0x3f - streqb r4, [r1,#7] - b .dtfc_loop - -.pool - -@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ - - -.global DrawSpritesFromCache @ int *hc, int sh - -DrawSpritesFromCache: - stmfd sp!, {r4-r11,lr} - - @ cache some stuff to avoid mem access -@ ldr r11,=HighCol - ldr r11,=DrawLineInt - ldr r11,[r11] - ldr lr, =(Pico+0x10000) @ lr=Pico.vram - mov r6, r1, lsl #31 - orr r6, r6, #1<<30 - mov r12,#0xf - - mov r10, r0 - -.dsfc_loop: - ldr r9, [r10], #4 @ read code - tst r9, r9 - ldmeqfd sp!, {r4-r11,pc} - - mov r4, r9, lsl #28 - bic r6, r6, #7 - orr r6, r6, r4, lsr #30 - add r6, r6, #1 @ r6=s1cc???? ... ?????www (s=shadow/hilight, cc=pal, w=width) - - and r5, r9, #3 - add r5, r5, #1 @ r5=delta - tst r9, #0x10000 - rsbne r5, r5, #0 @ Flip X - mov r5, r5, lsl #4 - - mov r2, r9, lsr #17 - mov r8, r2, lsl #1 @ tile=((unsigned int)code>>17)<<1; - - and r3, r9, #0x30 @ r3=pal=(code&0x30); - - bic r6, r6, #3<<28 - orr r6, r6, r3, lsl #24 - - mov r0, r9, lsl #16 - mov r0, r0, asr #22 @ sx=(code<<16)>>22 - adds r0, r0, #0 @ set ZV - b .dsfc_inloop_enter - -@ scratch: r4, r7 -.dsfc_inloop: - sub r6, r6, #1 - tst r6, #7 - beq .dsfc_loop - adds r0, r0, #8 - add r8, r8, r5 - -.dsfc_inloop_enter: - ble .dsfc_inloop - cmp r0, #328 - bge .dsfc_loop - - mov r8, r8, lsl #17 - mov r8, r8, lsr #17 @ tile&=0x7fff; // Clip tile address - - ldr r2, [lr, r8, lsl #1] @ pack=*(unsigned int *)(Pico.vram+tile); // Get 8 pixels - tst r2, r2 - beq .dsfc_inloop - - add r1, r11, r0 @ r1=pdest - - cmp r12, r6, lsr #28 - beq .dsfc_shadow - - cmp r2, r2, ror #4 - beq .dsfc_SingleColor @ tileline singlecolor - - tst r9, #0x10000 - beq .dsfc_TileNorm - - @ TileFlip (r1=pdest, r2=pixels8, r3=pal) r4: scratch, r12: helper pattern - TileFlip r12 - b .dsfc_inloop - -.dsfc_TileNorm: - TileNorm r12 - b .dsfc_inloop - -.dsfc_SingleColor: - tst r0, #1 @ not aligned? - and r4, r2, #0xf - orr r4, r3, r4 - orr r4, r4, r4, lsl #8 - strneb r4, [r1], #1 - streqh r4, [r1], #2 - strh r4, [r1], #2 - strh r4, [r1], #2 - strh r4, [r1], #2 - strneb r4, [r1], #1 - b .dsfc_inloop - -.dsfc_shadow: - cmp r2, r2, ror #4 - beq .dsfc_singlec_sh - - tst r9, #0x10000 - beq .dsfc_TileNorm_sh - - @ (r1=pdest, r2=pixels8, r3=pal) r4: scratch, r12: helper pattern - TileFlipSh - b .dsfc_inloop - -.dsfc_TileNorm_sh: - TileNormSh - b .dsfc_inloop - -.dsfc_singlec_sh: - cmp r2, #0xe0000000 - bcc .dsfc_SingleColor @ normal singlecolor tileline (carry inverted in ARM) - tst r2, #0x10000000 - bne .dsfc_sh_sh - TileSingleHi - b .dsfc_inloop - -.dsfc_sh_sh: - TileSingleSh - b .dsfc_inloop - -.pool - -@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ - -@ + 0 : hhhhvvvv ab--hhvv yyyyyyyy yyyyyyyy // a: offscreen h, b: offs. v, h: horiz. size -@ + 4 : xxxxxxxx xxxxxxxx pccvhnnn nnnnnnnn // x: x coord + 8 - -.global DrawSprite @ unsigned int *sprite, int **hc, int sh - -DrawSprite: - stmfd sp!, {r4-r9,r11,lr} - - ldr r3, [r0] @ sprite[0] - mov r6, r3, lsr #28 - sub r6, r6, #1 @ r6=width-1 (inc later) - mov r5, r3, lsr #24 - and r5, r5, #7 @ r5=height - - mov r4, r3, lsl #16 @ r4=sy<<16 (tmp) - - ldr r7, =Scanline - ldr r7, [r7] - sub r7, r7, r4, asr #16 @ r7=row=Scanline-sy - - tst r2, r2 - ldr r9, [r0, #4] - mov r2, r9, asr #16 @ r2=sx - bic r9, r9, #0xfe000000 - orrne r9, r9, #1<<31 @ r9=code|(sh<<31) - - tst r9, #0x1000 - movne r4, r5, lsl #3 - subne r4, r4, #1 - subne r7, r4, r7 @ if (code&0x1000) row=(height<<3)-1-row; // Flip Y - - mov r8, r9, lsl #21 - mov r8, r8, lsr #21 - add r8, r8, r7, lsr #3 @ tile+=row>>3; // Tile number increases going down - - tst r9, #0x0800 - mlane r8, r5, r6, r8 @ if (code&0x0800) { tile+=delta*(width-1); - rsbne r5, r5, #0 @ delta=-delta; } // r5=delta now - - mov r8, r8, lsl #4 - and r7, r7, #7 - add r8, r8, r7, lsl #1 @ tile+=(row&7)<<1; // Tile address - - tst r9, #0x8000 - bne .dspr_cache @ if(code&0x8000) // high priority - cache it - - @ cache some stuff to avoid mem access -@ ldr r11,=HighCol - ldr r11,=DrawLineInt - ldr r11,[r11] - ldr lr, =(Pico+0x10000) @ lr=Pico.vram - mov r12,#0xf - - mov r5, r5, lsl #4 @ delta<<=4; // Delta of address - and r4, r9, #0x6000 - orr r9, r9, r4, lsl #16 - orr r9, r9, #0x10000000 @ r9=scc1 ???? ... (s=shadow/hilight, cc=pal) - - tst r9, #1<<31 - mov r3, r4, lsr #9 @ r3=pal=((code>>9)&0x30); - orrne r3, r3, #0x40 @ shadow by default - - add r6, r6, #1 @ inc now - adds r0, r2, #0 @ mov sx to r0 and set ZV flags - b .dspr_loop_enter - -.dspr_loop: - subs r6, r6, #1 @ width-- - ldmeqfd sp!, {r4-r9,r11,pc}@ return - adds r0, r0, #8 @ sx+=8 - add r8, r8, r5 @ tile+=delta - -.dspr_loop_enter: - ble .dspr_loop @ sx <= 0 - cmp r0, #328 - ldmgefd sp!, {r4-r9,r11,pc}@ return - - mov r8, r8, lsl #17 - mov r8, r8, lsr #17 @ tile&=0x7fff; // Clip tile address - - ldr r2, [lr, r8, lsl #1] @ pack=*(unsigned int *)(Pico.vram+addr); // Get 8 pixels - tst r2, r2 - beq .dspr_loop - - add r1, r11, r0 @ r1=pdest - - cmp r12, r9, lsr #28 - beq .dspr_shadow - - cmp r2, r2, ror #4 - beq .dspr_SingleColor @ tileline singlecolor - - tst r9, #0x0800 - beq .dspr_TileNorm - - @ (r1=pdest, r2=pixels8, r3=pal) r4: scratch, r12: helper pattern - TileFlip r12 - b .dspr_loop - -@ scratch: r4, r7 -.dspr_TileNorm: - TileNorm r12 - b .dspr_loop - -.dspr_SingleColor: - and r4, r2, #0xf - orr r4, r3, r4 - orr r4, r4, r4, lsl #8 - tst r0, #1 @ not aligned? - strneb r4, [r1], #1 - streqh r4, [r1], #2 - strh r4, [r1], #2 - strh r4, [r1], #2 - strh r4, [r1], #2 - strneb r4, [r1], #1 - b .dspr_loop - -.dspr_shadow: - cmp r2, r2, ror #4 - beq .dspr_singlec_sh - - tst r9, #0x0800 - beq .dspr_TileNorm_sh - - @ (r1=pdest, r2=pixels8, r3=pal) r4: scratch, r12: helper pattern - TileFlipSh - b .dspr_loop - -.dspr_TileNorm_sh: - TileNormSh - b .dspr_loop - -.dspr_singlec_sh: - cmp r2, #0xe0000000 - bcc .dspr_SingleColor @ normal tileline - tst r2, #0x10000000 - bne .dspr_sh_sh - TileSingleHi - b .dspr_loop - -.dspr_sh_sh: - TileSingleSh - b .dspr_loop - - -.dspr_cache: - @ *(*hc)++ = (tile<<16)|((code&0x0800)<<5)|((sx<<6)&0x0000ffc0)|((code>>9)&0x30)|((sprite[0]>>24)&0xf); - mov r4, r8, lsl #16 @ tile - tst r9, #0x0800 - orrne r4, r4, #0x10000 @ code&0x0800 - mov r2, r2, lsl #22 - orr r4, r4, r2, lsr #16 @ (sx<<6)&0x0000ffc0 - and r2, r9, #0x6000 - orr r4, r4, r2, lsr #9 @ (code>>9)&0x30 - mov r2, r3, lsl #12 - orr r4, r4, r2, lsr #28 @ (sprite[0]>>24)&0xf - - ldr r2, [r1] - str r4, [r2], #4 - str r2, [r1] - - ldmfd sp!, {r4-r9,r11,lr} - bx lr - -@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ - -.global DrawWindow @ int tstart, int tend, int prio, int sh // int *hcache - -DrawWindow: - stmfd sp!, {r4-r11,lr} - - ldr r11, =(Pico+0x22228) @ Pico.video - ldrb r12, [r11, #3] @ pvid->reg[3] - mov r12, r12, lsl #10 - - ldr r10, =Scanline - ldr r10, [r10] - mov r5, r10, lsr #3 - and r10, r10, #7 - mov r10, r10, lsl #1 @ r10=ty - - ldr r4, [r11, #12] - tst r4, #1 @ 40 cell mode? - andne r12, r12, #0xf000 @ 0x3c<<10 - andeq r12, r12, #0xf800 - addne r12, r12, r5, lsl #7 - addeq r12, r12, r5, lsl #6 @ nametab - add r12, r12, r0, lsl #2 @ +starttile - - ldr lr, =(Pico+0x10000) @ lr=Pico.vram - - @ fetch the first code now - ldrh r7, [lr, r12] - - ldr r6, =rendstatus - ldrb r6, [r6] - ands r6, r6, #2 @ we care about bit 1 only - orr r6, r6, r2 - bne .dw_no_sameprio - - cmp r2, r7, lsr #15 - ldmnefd sp!, {r4-r11,pc} @ assume that whole window uses same priority - -.dw_no_sameprio: - orr r6, r6, r3, lsl #8 @ shadow mode - - sub r8, r1, r0 - mov r8, r8, lsl #1 @ cells - - mvn r9, #0 @ r9=prevcode=-1 - - @ cache some stuff to avoid mem access -@ ldr r11,=(HighCol+8) - ldr r11,=DrawLineInt - ldr r11,[r11] - add r11,r11, #8 - add r1, r11, r0, lsl #4 @ r1=pdest - mov r0, #0xf - b .dwloop_enter - - @ r4,r5 & r7 are scratch in this loop -.dwloop: - add r1, r1, #8 -.dwloop_nor1: - subs r8, r8, #1 - add r12, r12, #2 @ halfwords - beq .dwloop_end @ done - - ldrh r7, [lr, r12] @ r7=code (int, but from unsigned, no sign extend) - - eor r5, r6, r7, lsr #15 - tst r5, #1 - orrne r6, r6, #2 @ wrong pri - bne .dwloop - - cmp r7, r9 - beq .dw_samecode @ we know stuff about this tile already - -.dwloop_enter: - mov r9, r7 @ remember code - - movs r2, r9, lsl #20 @ if (code&0x1000) - mov r2, r2, lsl #1 - add r2, r10, r2, lsr #17 @ r2=addr=(code&0x7ff)<<4; addr+=ty - eorcs r2, r2, #0x0e @ if (code&0x1000) addr^=0xe; - - and r3, r9, #0x6000 - mov r3, r3, lsr #9 @ r3=pal=((code&0x6000)>>9); - - ldr r2, [lr, r2, lsl #1] @ pack=*(unsigned int *)(Pico.vram+addr); // Get 8 pixels - -.dw_samecode: - tst r6, #0x100 - bne .dw_shadow -.dw_shadow_done: - tst r2, r2 - beq .dwloop @ tileline blank - - cmp r2, r2, ror #4 - beq .dw_SingleColor @ tileline singlecolor - - tst r9, #0x0800 - beq .dw_TileNorm - - @ (r1=pdest, r2=pixels8, r3=pal) r4: scratch, r0: helper pattern - TileFlip r0 - b .dwloop - -.dw_TileNorm: - TileNorm r0 - b .dwloop - -.dw_SingleColor: - and r4, r0, r2 @ #0x0000000f - orr r4, r3, r4 - orr r4, r4, r4, lsl #8 - orr r4, r4, r4, lsl #16 - mov r5, r4 - stmia r1!, {r4,r5} - b .dwloop_nor1 @ we incremeted r1 ourselves - -.dw_shadow: - tst r6, #1 @ hi pri? - orreq r3, r3, #0x40 - beq .dw_shadow_done - ldr r4, [r1] - tst r4, #0x00000080 - biceq r4, r4, #0x000000c0 - tst r4, #0x00008000 - biceq r4, r4, #0x0000c000 - tst r4, #0x00800000 - biceq r4, r4, #0x00c00000 - tst r4, #0x80000000 - biceq r4, r4, #0xc0000000 - str r4, [r1] - ldr r4, [r1,#4] - tst r4, #0x00000080 - biceq r4, r4, #0x000000c0 - tst r4, #0x00008000 - biceq r4, r4, #0x0000c000 - tst r4, #0x00800000 - biceq r4, r4, #0x00c00000 - tst r4, #0x80000000 - biceq r4, r4, #0xc0000000 - str r4, [r1,#4] - b .dw_shadow_done - -.dwloop_end: - ldr r0, =rendstatus - ldr r1, [r0] - and r6, r6, #2 - orr r1, r1, r6 - str r1, [r0] - - ldmfd sp!, {r4-r11,r12} - bx r12 - - -@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ - - -@ hilights 2 pixels in RGB444/BGR444 format -.macro TileDoShHi2Pixels444 reg - mov \reg, \reg, ror #12 - adds \reg, \reg, #0x40000000 - orrcs \reg, \reg, #0xf0000000 - mov \reg, \reg, ror #28 - adds \reg, \reg, #0x40000000 - orrcs \reg, \reg, #0xf0000000 - mov \reg, \reg, ror #28 - adds \reg, \reg, #0x40000000 - orrcs \reg, \reg, #0xf0000000 - mov \reg, \reg, ror #24 - adds \reg, \reg, #0x40000000 - orrcs \reg, \reg, #0xf0000000 - mov \reg, \reg, ror #28 - adds \reg, \reg, #0x40000000 - orrcs \reg, \reg, #0xf0000000 - mov \reg, \reg, ror #28 - adds \reg, \reg, #0x40000000 - orrcs \reg, \reg, #0xf0000000 - mov \reg, \reg, ror #12 -.endm - - -.global FinalizeLineBGR444 @ int sh - -FinalizeLineBGR444: - stmfd sp!, {r4-r6,lr} - mov r6, r0 - ldr r0, =DrawLineDest - ldr r0, [r0] - ldr lr, =(Pico+0x22228) @ Pico.video - sub r3, lr, #0x128 @ r3=Pico.cram - - ldrb r12, [lr, #12] - tst r12, #1 - movne r2, #320/4 @ len - moveq r2, #256/4 - addeq r0, r0, #32*2 - ldreq r4, =PicoOpt - ldreq r4, [r4] - tsteq r4, #0x100 - addeq r0, r0, #32*2 - - tst r6, r6 - beq .fl_noshBGR444 - - ldr r4, =HighPal - - ldrb r12, [lr, #-0x1a] @ 0x2220e ~ dirtyPal - tst r12, r12 - moveq r3, r4 - beq .fl_noshBGR444 - mov r12, #0 - strb r12, [lr, #-0x1a] - - mov lr, #0x40/8 - @ copy pal: -.fl_loopcpBGR444: - subs lr, lr, #1 - ldmia r3!, {r1,r5,r6,r12} - stmia r4!, {r1,r5,r6,r12} - bne .fl_loopcpBGR444 - - @ shadowed pixels: - mov r12, #0x0077 - orr r12,r12,#0x0700 - orr r12,r12,r12,lsl #16 - sub r3, r3, #0x40*2 - add r5, r4, #0x80*2 - mov lr, #0x40/4 -.fl_loopcpBGR444_sh: - subs lr, lr, #1 - ldmia r3!, {r1,r6} - and r1, r12, r1, lsr #1 - and r6, r12, r6, lsr #1 - stmia r4!, {r1,r6} - stmia r5!, {r1,r6} - bne .fl_loopcpBGR444_sh - - @ hilighted pixels: - sub r3, r3, #0x40*2 - mov lr, #0x40/2 -.fl_loopcpBGR444_hi: - ldr r1, [r3], #4 - TileDoShHi2Pixels444 r1 - str r1, [r4], #4 - subs lr, lr, #1 - bne .fl_loopcpBGR444_hi - - sub r3, r4, #0x40*3*2 - - -.fl_noshBGR444: -@ ldr r1, =(HighCol+8) - ldr r1, =DrawLineInt - ldr r1, [r1] - add r1, r1, #8 - mov lr, #0xff - mov lr, lr, lsl #1 - -.fl_loopBGR444: - subs r2, r2, #1 - - ldr r12, [r1], #4 - - and r4, lr, r12, lsl #1 - ldrh r4, [r3, r4] - and r5, lr, r12, lsr #7 - ldrh r5, [r3, r5] - orr r4, r4, r5, lsl #16 - - and r5, lr, r12, lsr #15 - ldrh r5, [r3, r5] - and r6, lr, r12, lsr #23 - ldrh r6, [r3, r6] - orr r5, r5, r6, lsl #16 - - stmia r0!, {r4,r5} - bne .fl_loopBGR444 - - - ldmfd sp!, {r4-r6,lr} - bx lr - - -@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ - - -@ hilights 2 pixels in RGB555/BGR555 format -.macro TileDoShHi2Pixels555 reg - adds \reg, \reg, #0x40000000 - orrcs \reg, \reg, #0xf0000000 - mov \reg, \reg, ror #27 - adds \reg, \reg, #0x40000000 - orrcs \reg, \reg, #0xf0000000 - mov \reg, \reg, ror #26 - adds \reg, \reg, #0x40000000 - orrcs \reg, \reg, #0xf0000000 - mov \reg, \reg, ror #27 - adds \reg, \reg, #0x40000000 - orrcs \reg, \reg, #0xf0000000 - mov \reg, \reg, ror #27 - adds \reg, \reg, #0x40000000 - orrcs \reg, \reg, #0xf0000000 - mov \reg, \reg, ror #26 - adds \reg, \reg, #0x40000000 - orrcs \reg, \reg, #0xf0000000 - mov \reg, \reg, ror #27 -.endm - - -@ Convert 0000bbb0 ggg0rrr0 -@ to rrrrrggg gggbbbbb - -@ r2,r3,r9 - scratch, lr = 0x001c001c, r8 = 0x00030003 -.macro convRGB565 reg - and r2, lr, \reg,lsl #1 - and r9, r8, \reg,lsr #2 - orr r2, r2, r9 @ r2=red - and r3, lr, \reg,lsr #7 - and r9, r8, \reg,lsr #10 - orr r3, r3, r9 @ r3=blue - and \reg, \reg, lr, lsl #3 - orr \reg, \reg, \reg,lsl #3 @ green - orr \reg, \reg, r2, lsl #11 @ add red back - orr \reg, \reg, r3 @ add blue back -.endm - -vidConvCpyRGB565: @ void *to, void *from, int pixels - stmfd sp!, {r4-r9,lr} - - mov r12, r2, lsr #3 @ repeats - mov lr, #0x001c0000 - orr lr, lr, #0x01c @ lr == pattern 0x001c001c - mov r8, #0x00030000 - orr r8, r8, #0x003 @ lr == pattern 0x001c001c - -.loopRGB565: - subs r12, r12, #1 - - ldmia r1!, {r4-r7} - convRGB565 r4 - str r4, [r0], #4 - convRGB565 r5 - str r5, [r0], #4 - convRGB565 r6 - str r6, [r0], #4 - convRGB565 r7 - str r7, [r0], #4 - - bgt .loopRGB565 - - ldmfd sp!, {r4-r9,lr} - bx lr - - - -.global FinalizeLineRGB555 @ int sh - -FinalizeLineRGB555: - stmfd sp!, {r4-r8,lr} - ldr r5, =(Pico+0x22228) @ Pico.video - ldr r4, =HighPal - mov r6, r0 - - ldrb r7, [r5, #-0x1a] @ 0x2220e ~ dirtyPal - tst r7, r7 - beq .fl_noconvRGB555 - mov r1, #0 - strb r1, [r5, #-0x1a] - sub r1, r5, #0x128 @ r1=Pico.cram - mov r0, r4 - mov r2, #0x40 - bl vidConvCpyRGB565 - -.fl_noconvRGB555: - ldr r0, =DrawLineDest - ldr r0, [r0] - - ldrb r12, [r5, #12] - tst r12, #1 - movne r2, #320/8 @ len - moveq r2, #256/8 - ldreq r3, =PicoOpt - ldreq r3, [r3] - tsteq r3, #0x100 - addeq r0, r0, #32*2 - - mov r3, r4 - tst r6, r6 - beq .fl_noshRGB555 - tst r7, r7 - beq .fl_noshRGB555 - - @ shadowed pixels: - mov r12, #0x008e - orr r12,r12,#0x7300 - orr r12,r12,r12,lsl #16 - add r4, r3, #0x40*2 - add r5, r3, #0xc0*2 - mov lr, #0x40/4 -.fl_loopcpRGB555_sh: - subs lr, lr, #1 - ldmia r3!, {r1,r6} - and r1, r12, r1, lsr #1 - and r6, r12, r6, lsr #1 - stmia r4!, {r1,r6} - stmia r5!, {r1,r6} - bne .fl_loopcpRGB555_sh - - @ hilighted pixels: - sub r3, r3, #0x40*2 - mov lr, #0x40/2 -.fl_loopcpRGB555_hi: - ldr r1, [r3], #4 - TileDoShHi2Pixels555 r1 - str r1, [r4], #4 - subs lr, lr, #1 - bne .fl_loopcpRGB555_hi - - sub r3, r3, #0x40*2 - - -.fl_noshRGB555: -@ ldr r1, =(HighCol+8) - ldr r1, =DrawLineInt - ldr r1, [r1] - add r1, r1, #8 - mov lr, #0xff - mov lr, lr, lsl #1 - -.fl_loopRGB555: - subs r2, r2, #1 - - ldr r12, [r1], #4 - ldr r7, [r1], #4 - - and r4, lr, r12, lsl #1 - ldrh r4, [r3, r4] - and r5, lr, r12, lsr #7 - ldrh r5, [r3, r5] - orr r4, r4, r5, lsl #16 - - and r5, lr, r12, lsr #15 - ldrh r5, [r3, r5] - and r6, lr, r12, lsr #23 - ldrh r6, [r3, r6] - orr r5, r5, r6, lsl #16 - - and r8, lr, r7, lsl #1 - ldrh r8, [r3, r8] - and r6, lr, r7, lsr #7 - ldrh r6, [r3, r6] - orr r8, r8, r6, lsl #16 - - and r12,lr, r7, lsr #15 - ldrh r12,[r3, r12] - and r6, lr, r7, lsr #23 - ldrh r6, [r3, r6] - orr r12,r12, r6, lsl #16 - - stmia r0!, {r4,r5,r8,r12} - bne .fl_loopRGB555 - - - ldmfd sp!, {r4-r8,lr} - bx lr - -@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ - -@ utility -.global blockcpy @ void *dst, void *src, size_t n - -blockcpy: - stmfd sp!, {r4,r5} - mov r2, r2, lsr #4 -blockcpy_loop: - subs r2, r2, #1 - ldmia r1!, {r3-r5,r12} - stmia r0!, {r3-r5,r12} - bne blockcpy_loop - ldmfd sp!, {r4,r5} - bx lr - - -.global blockcpy_or @ void *dst, void *src, size_t n, int pat - -blockcpy_or: - stmfd sp!, {r4-r6} - orr r3, r3, r3, lsl #8 - orr r3, r3, r3, lsl #16 - mov r2, r2, lsr #4 -blockcpy_loop_or: - subs r2, r2, #1 - ldmia r1!, {r4-r6,r12} - orr r4, r4, r3 - orr r5, r5, r3 - orr r6, r6, r3 - orr r12,r12,r3 - stmia r0!, {r4-r6,r12} - bne blockcpy_loop_or - ldmfd sp!, {r4-r6} - bx lr - diff --git a/Pico/Memory.c b/Pico/Memory.c index aa15bef3..b0aa7afa 100644 --- a/Pico/Memory.c +++ b/Pico/Memory.c @@ -45,7 +45,7 @@ void log_io(unsigned int addr, int bits, int rw); #define log_io(...) #endif -#if defined(EMU_C68K) || defined(EMU_A68K) +#if defined(EMU_C68K) static __inline int PicoMemBase(u32 pc) { int membase=0; @@ -69,10 +69,6 @@ static __inline int PicoMemBase(u32 pc) #endif -#ifdef EMU_A68K -extern u8 *OP_ROM=NULL,*OP_RAM=NULL; -#endif - static u32 CPU_CALL PicoCheckPc(u32 pc) { u32 ret=0; @@ -90,11 +86,6 @@ static u32 CPU_CALL PicoCheckPc(u32 pc) PicoCpu.membase-=pc&0xff000000; ret = PicoCpu.membase+pc; -#elif defined(EMU_A68K) - OP_ROM=(u8 *)PicoMemBase(pc); - - // don't bother calling us back unless it's outside the 64k segment - M68000_regs.AsmBank=(pc>>16); #endif return ret; } @@ -498,8 +489,8 @@ static void CPU_CALL PicoWrite32(u32 a,u32 d) // ----------------------------------------------------------------- PICO_INTERNAL void PicoMemSetup(void) { -#ifdef EMU_C68K // Setup memory callbacks: +#ifdef EMU_C68K PicoCpu.checkpc=PicoCheckPc; PicoCpu.fetch8 =PicoCpu.read8 =PicoRead8; PicoCpu.fetch16=PicoCpu.read16=PicoRead16; @@ -508,43 +499,16 @@ PICO_INTERNAL void PicoMemSetup(void) PicoCpu.write16=PicoWrite16; PicoCpu.write32=PicoWrite32; #endif +#ifdef EMU_F68K + PicoCpuM68k.read_byte =PicoRead8; + PicoCpuM68k.read_word =PicoRead16; + PicoCpuM68k.read_long =PicoRead32; + PicoCpuM68k.write_byte=PicoWrite8; + PicoCpuM68k.write_word=PicoWrite16; + PicoCpuM68k.write_long=PicoWrite32; +#endif } -#ifdef EMU_A68K -struct A68KInter -{ - u32 unknown; - u8 (__fastcall *Read8) (u32 a); - u16 (__fastcall *Read16)(u32 a); - u32 (__fastcall *Read32)(u32 a); - void (__fastcall *Write8) (u32 a,u8 d); - void (__fastcall *Write16) (u32 a,u16 d); - void (__fastcall *Write32) (u32 a,u32 d); - void (__fastcall *ChangePc)(u32 a); - u8 (__fastcall *PcRel8) (u32 a); - u16 (__fastcall *PcRel16)(u32 a); - u32 (__fastcall *PcRel32)(u32 a); - u16 (__fastcall *Dir16)(u32 a); - u32 (__fastcall *Dir32)(u32 a); -}; - -struct A68KInter a68k_memory_intf= -{ - 0, - PicoRead8, - PicoRead16, - PicoRead32, - PicoWrite8, - PicoWrite16, - PicoWrite32, - PicoCheckPc, - PicoRead8, - PicoRead16, - PicoRead32, - PicoRead16, // unused - PicoRead32, // unused -}; -#endif #ifdef EMU_M68K unsigned int m68k_read_pcrelative_CD8 (unsigned int a); diff --git a/Pico/Misc.c b/Pico/Misc.c index 38c381dd..a458f4de 100644 --- a/Pico/Misc.c +++ b/Pico/Misc.c @@ -316,8 +316,30 @@ PICO_INTERNAL void SRAMUpdPending(unsigned int a, unsigned int d) #ifndef _ASM_MISC_C +typedef struct +{ + int b0; + int b1; + int b2; + int b3; + int b4; + int b5; + int b6; + int b7; +} intblock; + PICO_INTERNAL_ASM void memcpy16(unsigned short *dest, unsigned short *src, int count) { + if (((int)dest & (int)src & 3) == 0) + { + if (count >= 32) { + memcpy32((int *)dest, (int *)src, count/2); + count&=1; + } else { + for (; count >= 2; count -= 2, dest+=2, src+=2) + *(int *)dest = *(int *)src; + } + } while (count--) *dest++ = *src++; } @@ -334,6 +356,12 @@ PICO_INTERNAL_ASM void memcpy16bswap(unsigned short *dest, void *src, int count) PICO_INTERNAL_ASM void memcpy32(int *dest, int *src, int count) { + intblock *bd = (intblock *) dest, *bs = (intblock *) src; + + for (; count >= sizeof(*bd)/4; count -= sizeof(*bd)/4) + *bd++ = *bs++; + + dest = (int *)bd; src = (int *)bs; while (count--) *dest++ = *src++; } @@ -341,6 +369,10 @@ PICO_INTERNAL_ASM void memcpy32(int *dest, int *src, int count) PICO_INTERNAL_ASM void memset32(int *dest, int c, int count) { + for (; count >= 8; count -= 8, dest += 8) + dest[0] = dest[1] = dest[2] = dest[3] = + dest[4] = dest[5] = dest[6] = dest[7] = c; + while (count--) *dest++ = c; } diff --git a/Pico/Pico.c b/Pico/Pico.c index 5f90db38..b9fbfe61 100644 --- a/Pico/Pico.c +++ b/Pico/Pico.c @@ -212,12 +212,10 @@ static __inline void SekRunM68k(int cyc) PicoCpu.cycles=cyc_do; CycloneRun(&PicoCpu); SekCycleCnt+=cyc_do-PicoCpu.cycles; -#elif defined(EMU_A68K) - m68k_ICount=cyc_do; - M68000_RUN(); - SekCycleCnt+=cyc_do-m68k_ICount; #elif defined(EMU_M68K) SekCycleCnt+=m68k_execute(cyc_do); +#elif defined(EMU_F68K) + SekCycleCnt+=m68k_emulate(cyc_do); #endif } @@ -232,12 +230,10 @@ static __inline void SekStep(void) PicoCpu.cycles=1; CycloneRun(&PicoCpu); SekCycleCnt+=1-PicoCpu.cycles; -#elif defined(EMU_A68K) - m68k_ICount=1; - M68000_RUN(); - SekCycleCnt+=1-m68k_ICount; #elif defined(EMU_M68K) SekCycleCnt+=m68k_execute(1); +#elif defined(EMU_F68K) + SekCycleCnt+=m68k_emulate(1); #endif SekCycleAim=realaim; } @@ -677,6 +673,8 @@ char *debugString(void) } #elif defined(EMU_M68K) sprintf(dstrp, "M68k: PC: %06x, cycles: %u, irql: %i\n", SekPc, SekCyclesDoneT(), PicoM68kCPU.int_level>>8); dstrp+=strlen(dstrp); +#elif defined(EMU_F68K) + sprintf(dstrp, "M68k: PC: %06x, cycles: %u, irql: %i\n", SekPc, SekCyclesDoneT(), PicoCpuM68k.interrupts[0]); dstrp+=strlen(dstrp); #endif sprintf(dstrp, "z80Run: %i, pal: %i, frame#: %i\n", Pico.m.z80Run, Pico.m.pal, Pico.m.frame_count); dstrp+=strlen(dstrp); z80_debug(dstrp); dstrp+=strlen(dstrp); diff --git a/Pico/PicoInt.h b/Pico/PicoInt.h index 1fd7422e..a6fceff1 100644 --- a/Pico/PicoInt.h +++ b/Pico/PicoInt.h @@ -24,7 +24,7 @@ #define PICO_INTERNAL_ASM #endif -// to select core, define EMU_C68K, EMU_M68K or EMU_A68K in your makefile or project +// to select core, define EMU_C68K, EMU_M68K or EMU_F68K in your makefile or project #ifdef __cplusplus extern "C" { @@ -50,24 +50,28 @@ extern struct Cyclone PicoCpu, PicoCpuS68k; #define SekSetStopS68k(x) { PicoCpuS68k.state_flags&=~1; if (x) { PicoCpuS68k.state_flags|=1; PicoCpuS68k.cycles=0; } } #endif -#ifdef EMU_A68K -void __cdecl M68000_RUN(); -// The format of the data in a68k.asm (at the _M68000_regs location) -struct A68KContext -{ - unsigned int d[8],a[8]; - unsigned int isp,srh,ccr,xc,pc,irq,sr; - int (*IrqCallback) (int nIrq); - unsigned int ppc; - void *pResetCallback; - unsigned int sfc,dfc,usp,vbr; - unsigned int AsmBank,CpuVersion; -}; -struct A68KContext M68000_regs; -extern int m68k_ICount; -#define SekCyclesLeft m68k_ICount -#define SekSetCyclesLeft(c) m68k_ICount=c -#define SekPc M68000_regs.pc +#ifdef EMU_F68K +#include "../cpu/fame/fame.h" +M68K_CONTEXT PicoCpuM68k, PicoCpuS68k; +#define SekCyclesLeftNoMCD PicoCpuM68k.io_cycle_counter +#define SekCyclesLeft \ + (((PicoMCD&1) && (PicoOpt & 0x2000)) ? (SekCycleAim-SekCycleCnt) : SekCyclesLeftNoMCD) +#define SekCyclesLeftS68k \ + ((PicoOpt & 0x2000) ? (SekCycleAimS68k-SekCycleCntS68k) : PicoCpuS68k.io_cycle_counter) +#define SekSetCyclesLeftNoMCD(c) PicoCpuM68k.io_cycle_counter=c +#define SekSetCyclesLeft(c) { \ + if ((PicoMCD&1) && (PicoOpt & 0x2000)) SekCycleCnt=SekCycleAim-(c); else SekSetCyclesLeftNoMCD(c); \ +} +#define SekPc m68k_get_pc(&PicoCpuM68k) +#define SekPcS68k m68k_get_pc(&PicoCpuS68k) +#define SekSetStop(x) { \ + PicoCpuM68k.execinfo &= ~M68K_HALTED; \ + if (x) { PicoCpuM68k.execinfo |= M68K_HALTED; PicoCpuM68k.io_cycle_counter = 0; } \ +} +#define SekSetStopS68k(x) { \ + PicoCpuS68k.execinfo &= ~M68K_HALTED; \ + if (x) { PicoCpuS68k.execinfo |= M68K_HALTED; PicoCpuS68k.io_cycle_counter = 0; } \ +} #endif #ifdef EMU_M68K @@ -137,10 +141,10 @@ extern int SekCycleAimS68k; #define SekEndRun(c) #endif -extern int PicoMCD; - // --------------------------------------------------------- +extern int PicoMCD; + // main oscillator clock which controls timing #define OSC_NTSC 53693100 // seems to be accurate, see scans from http://www.hot.ee/tmeeco/ diff --git a/Pico/Sek.c b/Pico/Sek.c index 1f2316ee..f3af5319 100644 --- a/Pico/Sek.c +++ b/Pico/Sek.c @@ -14,33 +14,23 @@ int SekCycleCnt=0; // cycles done in this frame int SekCycleAim=0; // cycle aim unsigned int SekCycleCntT=0; + +/* context */ +// Cyclone 68000 #ifdef EMU_C68K -// ---------------------- Cyclone 68000 ---------------------- struct Cyclone PicoCpu; #endif - +// MUSASHI 68000 #ifdef EMU_M68K -// ---------------------- MUSASHI 68000 ---------------------- -m68ki_cpu_core PicoM68kCPU; // MD's CPU +m68ki_cpu_core PicoM68kCPU; #endif - -#ifdef EMU_A68K -// ---------------------- A68K ---------------------- - -void __cdecl M68000_RESET(); -int m68k_ICount=0; -unsigned int mem_amask=0xffffff; // 24-bit bus -unsigned int mame_debug=0,cur_mrhard=0,m68k_illegal_opcode=0,illegal_op=0,illegal_pc=0,opcode_entry=0; // filler - -static int IrqCallback(int i) { i; return -1; } -static int DoReset() { return 0; } -static int (*ResetCallback)()=DoReset; - -#pragma warning (disable:4152) +// FAME 68000 +#ifdef EMU_F68K +M68K_CONTEXT PicoCpuM68k; #endif - +/* callbacks */ #ifdef EMU_C68K // interrupt acknowledgment static int SekIntAck(int level) @@ -75,7 +65,6 @@ static int SekUnrecognizedOpcode() have_illegal = 1; } #endif - //exit(1); return 0; } #endif @@ -97,6 +86,35 @@ static int SekTasCallback(void) #endif +#ifdef EMU_F68K +static void setup_fame_fetchmap(void) +{ + int i; + + // be default, point everything to fitst 64k of ROM + for (i = 0; i < M68K_FETCHBANK1; i++) + PicoCpuM68k.Fetch[i] = (unsigned int)Pico.rom - (i<<(24-FAMEC_FETCHBITS)); + // now real ROM + for (i = 0; i < M68K_FETCHBANK1 && (i<<(24-FAMEC_FETCHBITS)) < Pico.romsize; i++) + PicoCpuM68k.Fetch[i] = (unsigned int)Pico.rom; + elprintf(EL_ANOMALY, "ROM end @ #%i %06x", i, (i<<(24-FAMEC_FETCHBITS))); + // .. and RAM (TODO) + for (i = M68K_FETCHBANK1*14/16; i < M68K_FETCHBANK1; i++) + PicoCpuM68k.Fetch[i] = (unsigned int)Pico.ram - (i<<(24-FAMEC_FETCHBITS)); + + elprintf(EL_ANOMALY, "rom = %p, ram = %p", Pico.rom, Pico.ram); + for (i = 0; i < M68K_FETCHBANK1; i++) + elprintf(EL_ANOMALY, "Fetch[%i] = %p", i, PicoCpuM68k.Fetch[i]); +} + +void SekIntAckF68K(unsigned level) +{ + if (level == 4) { Pico.video.pending_ints = 0; elprintf(EL_INTS, "hack: @ %06x [%i]", SekPc, SekCycleCnt); } + else if(level == 6) { Pico.video.pending_ints &= ~0x20; elprintf(EL_INTS, "vack: @ %06x [%i]", SekPc, SekCycleCnt); } + PicoCpuM68k.interrupts[0] = 0; +} +#endif + PICO_INTERNAL int SekInit() { @@ -107,12 +125,6 @@ PICO_INTERNAL int SekInit() PicoCpu.ResetCallback=SekResetAck; PicoCpu.UnrecognizedCallback=SekUnrecognizedOpcode; #endif -#ifdef EMU_A68K - memset(&M68000_regs,0,sizeof(M68000_regs)); - M68000_regs.IrqCallback=IrqCallback; - M68000_regs.pResetCallback=ResetCallback; - M68000_RESET(); // Init cpu emulator -#endif #ifdef EMU_M68K { void *oldcontext = m68ki_cpu_p; @@ -125,10 +137,21 @@ PICO_INTERNAL int SekInit() m68k_set_context(oldcontext); } #endif +#ifdef EMU_F68K + { + void *oldcontext = g_m68kcontext; + g_m68kcontext = &PicoCpuM68k; + memset(&PicoCpuM68k, 0, sizeof(PicoCpuM68k)); + m68k_init(); + PicoCpuM68k.iack_handler = SekIntAckF68K; + g_m68kcontext = oldcontext; + } +#endif return 0; } + // Reset the 68000: PICO_INTERNAL int SekReset() { @@ -144,19 +167,21 @@ PICO_INTERNAL int SekReset() PicoCpu.membase=0; PicoCpu.pc=PicoCpu.checkpc(PicoCpu.read32(4)); // Program Counter #endif -#ifdef EMU_A68K - // Reset CPU: fetch SP and PC - M68000_regs.srh=0x27; // Supervisor mode - M68000_regs.a[7]=PicoRead32(0); - M68000_regs.pc =PicoRead32(4); - PicoInitPc(M68000_regs.pc); -#endif #ifdef EMU_M68K m68k_set_context(&PicoM68kCPU); // if we ever reset m68k, we always need it's context to be set m68ki_cpu.sp[0]=0; m68k_set_irq(0); m68k_pulse_reset(); #endif +#ifdef EMU_F68K + { + unsigned ret; + g_m68kcontext = &PicoCpuM68k; + setup_fame_fetchmap(); + ret = m68k_reset(); + /*if (ret)*/ elprintf(EL_ANOMALY, "m68k_reset returned %u", ret); + } +#endif return 0; } @@ -174,9 +199,6 @@ PICO_INTERNAL int SekInterrupt(int irq) #ifdef EMU_C68K PicoCpu.irq=irq; #endif -#ifdef EMU_A68K - M68000_regs.irq=irq; // raise irq (gets lowered after taken) -#endif #ifdef EMU_M68K { void *oldcontext = m68ki_cpu_p; @@ -185,23 +207,23 @@ PICO_INTERNAL int SekInterrupt(int irq) m68k_set_context(oldcontext); } #endif +#ifdef EMU_F68K + PicoCpuM68k.interrupts[0]=irq; +#endif + return 0; } -//int SekPc() { return PicoCpu.pc-PicoCpu.membase; } -//int SekPc() { return M68000_regs.pc; } -//int SekPc() { return m68k_get_reg(NULL, M68K_REG_PC); } - PICO_INTERNAL void SekState(unsigned char *data) { #ifdef EMU_C68K memcpy(data,PicoCpu.d,0x44); -#elif defined(EMU_A68K) - memcpy(data, M68000_regs.d, 0x40); - memcpy(data+0x40,&M68000_regs.pc,0x04); #elif defined(EMU_M68K) - memcpy(data, PicoM68kCPU.dar,0x40); - memcpy(data+0x40,&PicoM68kCPU.pc, 0x04); + memcpy(data, PicoM68kCPU.dar, 0x40); + *(int *)(data+0x40) = PicoM68kCPU.pc; +#elif defined(EMU_F68K) + memcpy(data, PicoCpuM68k.dreg, 0x40); + *(int *)(data+0x40) = PicoCpuM68k.pc; #endif } @@ -210,5 +232,8 @@ PICO_INTERNAL void SekSetRealTAS(int use_real) #ifdef EMU_C68K CycloneSetRealTAS(use_real); #endif +#ifdef EMU_F68K + // TODO +#endif } diff --git a/cpu/fame/fame.h b/cpu/fame/fame.h new file mode 100644 index 00000000..11955939 --- /dev/null +++ b/cpu/fame/fame.h @@ -0,0 +1,186 @@ +/*****************************************************************************/ +/* FAME Fast and Accurate Motorola 68000 Emulation Core */ +/* (c) 2005 Oscar Orallo Pelaez */ +/* Version: 1.24 */ +/* Date: 08-20-2005 */ +/* See FAME.HTML for documentation and license information */ +/*****************************************************************************/ + +#ifndef __FAME_H__ +#define __FAME_H__ + +#ifdef __cplusplus +extern "C" { +#endif + +// PicoDrive hacks +#define FAMEC_FETCHBITS 8 +#define M68K_FETCHBANK1 (1 << FAMEC_FETCHBITS) + +//#define M68K_RUNNING 0x01 +#define M68K_HALTED 0x80 +#define M68K_WAITING 0x04 +#define M68K_DISABLE 0x20 +#define M68K_FAULTED 0x40 +#define M68K_EMULATE_GROUP_0 0x02 +#define M68K_EMULATE_TRACE 0x08 +#define M68K_DO_TRACE 0x10 + + +/************************************/ +/* General library defines */ +/************************************/ + +#ifndef M68K_OK + #define M68K_OK 0 +#endif +#ifndef M68K_RUNNING + #define M68K_RUNNING 1 +#endif +#ifndef M68K_NO_SUP_ADDR_SPACE + #define M68K_NO_SUP_ADDR_SPACE 2 +#endif +#ifndef M68K_DOUBLE_BUS_FAULT + #define M68K_DOUBLE_BUS_FAULT -1 +#endif +#ifndef M68K_INV_REG + #define M68K_INV_REG -1 +#endif + +/* Hardware interrupt state */ + +#ifndef M68K_IRQ_LEVEL_ERROR + #define M68K_IRQ_LEVEL_ERROR -1 +#endif +#ifndef M68K_IRQ_INV_PARAMS + #define M68K_IRQ_INV_PARAMS -2 +#endif + +/* Defines to specify hardware interrupt type */ + +#ifndef M68K_AUTOVECTORED_IRQ + #define M68K_AUTOVECTORED_IRQ -1 +#endif +#ifndef M68K_SPURIOUS_IRQ + #define M68K_SPURIOUS_IRQ -2 +#endif + +#ifndef M68K_AUTO_LOWER_IRQ + #define M68K_AUTO_LOWER_IRQ 1 +#endif +#ifndef M68K_MANUAL_LOWER_IRQ + #define M68K_MANUAL_LOWER_IRQ 0 +#endif + +/* Defines to specify address space */ + +#ifndef M68K_SUP_ADDR_SPACE + #define M68K_SUP_ADDR_SPACE 0 +#endif +#ifndef M68K_USER_ADDR_SPACE + #define M68K_USER_ADDR_SPACE 2 +#endif +#ifndef M68K_PROG_ADDR_SPACE + #define M68K_PROG_ADDR_SPACE 0 +#endif +#ifndef M68K_DATA_ADDR_SPACE + #define M68K_DATA_ADDR_SPACE 1 +#endif + + +/*******************/ +/* Data definition */ +/*******************/ + +/* M68K registers */ +typedef enum { + M68K_REG_D0=0, + M68K_REG_D1, + M68K_REG_D2, + M68K_REG_D3, + M68K_REG_D4, + M68K_REG_D5, + M68K_REG_D6, + M68K_REG_D7, + M68K_REG_A0, + M68K_REG_A1, + M68K_REG_A2, + M68K_REG_A3, + M68K_REG_A4, + M68K_REG_A5, + M68K_REG_A6, + M68K_REG_A7, + M68K_REG_ASP, + M68K_REG_PC, + M68K_REG_SR +} m68k_register; + +typedef union +{ + unsigned char B; + signed char SB; + unsigned short W; + signed short SW; + unsigned int D; + signed int SD; +} famec_union32; + +/* The memory blocks must be in native (Motorola) format */ +struct M68K_PROGRAM { + unsigned low_addr; + unsigned high_addr; + unsigned offset; +}; + +/* The memory blocks must be in native (Motorola) format */ +struct M68K_DATA { + unsigned low_addr; + unsigned high_addr; + void *mem_handler; + void *data; +}; + +/* M68K CPU CONTEXT */ +typedef struct +{ + unsigned int (*read_byte )(unsigned int a); + unsigned int (*read_word )(unsigned int a); + unsigned int (*read_long )(unsigned int a); + void (*write_byte)(unsigned int a,unsigned char d); + void (*write_word)(unsigned int a,unsigned short d); + void (*write_long)(unsigned int a,unsigned int d); + void (*reset_handler)(void); + void (*iack_handler)(unsigned level); + famec_union32 dreg[8]; + famec_union32 areg[8]; + unsigned asp; + unsigned pc; + unsigned char interrupts[8]; + unsigned short sr; + unsigned short execinfo; + // PD extension + int io_cycle_counter; // cycles left + unsigned int Fetch[M68K_FETCHBANK1]; +} M68K_CONTEXT; + +extern M68K_CONTEXT *g_m68kcontext; + +/************************/ +/* Function definition */ +/************************/ + +/* General purpose functions */ +void m68k_init(void); +int m68k_reset(void); +int m68k_emulate(int n); + +unsigned m68k_get_pc(M68K_CONTEXT *context); +unsigned m68k_get_register(M68K_CONTEXT *context, m68k_register reg); +unsigned m68k_set_register(M68K_CONTEXT *context, m68k_register reg, unsigned value); + + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/cpu/fame/famec.c b/cpu/fame/famec.c new file mode 100644 index 00000000..609b76fe --- /dev/null +++ b/cpu/fame/famec.c @@ -0,0 +1,5095 @@ +/****************************************************************************/ +/* FAME (Fast and Accurate Motorola 68000 Emulation Library) */ +/* Emulador de 68000 en C */ +/* Autor: Oscar Orallo Pelaez */ +/* Fecha de comienzo: 03-10-2006 */ +/* Ultima actualizacion: 08-10-2006 */ +/* Based on the excellent FAMEC emulator by Stèphane Dallongueville */ +/****************************************************************************/ + +#include +#include +#include + +#include "fame.h" + + +// Options // +#define FAMEC_ROLL_INLINE +#define FAMEC_EMULATE_TRACE +#define FAMEC_IRQ_CYCLES +#define FAMEC_CHECK_BRANCHES +// #define FAMEC_USE_DATA_BANKS +// #define FAMEC_EXTRA_INLINE +// #define FAMEC_DEBUG +#define FAMEC_NO_GOTOS +#define FAMEC_ADR_BITS 24 +// #define FAMEC_FETCHBITS 8 +#define FAMEC_DATABITS 8 + +#define USE_CYCLONE_TIMING +#define USE_CYCLONE_TIMING_DIV +// Options // + + +#undef INLINE +#ifndef INLINE +#define INLINE __inline__ +#endif + +#ifndef FAMEC_EXTRA_INLINE +#define FAMEC_EXTRA_INLINE +#else +#define FAMEC_EXTRA_INLINE INLINE +#endif + +#ifdef u8 +#undef u8 +#endif + +#ifdef s8 +#undef s8 +#endif + +#ifdef u16 +#undef u16 +#endif + +#ifdef s16 +#undef s16 +#endif + +#ifdef u32 +#undef u32 +#endif + +#ifdef s32 +#undef s32 +#endif + +#define u8 unsigned char +#define s8 signed char +#define u16 unsigned short +#define s16 signed short +#define u32 unsigned int +#define s32 signed int + +/* +typedef unsigned char u8; +typedef signed char s8; +typedef unsigned short u16; +typedef signed short s16; +typedef unsigned int u32; +typedef signed int s32; +*/ + +#ifdef FAMEC_EMULATE_TRACE +static u32 flag_T; +#endif +static u32 flag_C; +static u32 flag_V; +static u32 flag_NotZ; +static u32 flag_N; +static u32 flag_X; // 16 bytes aligned +static u32 flag_S; +static u32 flag_I; + +#ifndef M68K_OK + #define M68K_OK 0 +#endif + +#ifndef M68K_RUNNING + #define M68K_RUNNING 1 +#endif + +#ifndef M68K_NO_SUP_ADDR_SPACE + #define M68K_NO_SUP_ADDR_SPACE 2 +#endif + +#ifndef M68K_INV_REG + #define M68K_INV_REG -1 +#endif + +/* Hardware interrupt state */ + +#ifndef M68K_IRQ_LEVEL_ERROR + #define M68K_IRQ_LEVEL_ERROR -1 +#endif + +#ifndef M68K_IRQ_INV_PARAMS + #define M68K_IRQ_INV_PARAMS -2 +#endif + +/* Defines to specify hardware interrupt type */ + +#ifndef M68K_AUTOVECTORED_IRQ + #define M68K_AUTOVECTORED_IRQ -1 +#endif + +#ifndef M68K_SPURIOUS_IRQ + #define M68K_SPURIOUS_IRQ -2 +#endif + +/* Defines to specify address space */ + +#ifndef M68K_SUP_ADDR_SPACE + #define M68K_SUP_ADDR_SPACE 0 +#endif + +#ifndef M68K_USER_ADDR_SPACE + #define M68K_USER_ADDR_SPACE 2 +#endif + +#ifndef M68K_PROG_ADDR_SPACE + #define M68K_PROG_ADDR_SPACE 0 +#endif + +#ifndef M68K_DATA_ADDR_SPACE + #define M68K_DATA_ADDR_SPACE 1 +#endif + + + +/******************************/ +/* 68K core types definitions */ +/******************************/ + +#if FAMEC_ADR_BITS < 32 +#define M68K_ADR_MASK ((1 << FAMEC_ADR_BITS)-1) +#else +#define M68K_ADR_MASK 0xFFFFFFFF +#endif +#define M68K_FETCHSFT (FAMEC_ADR_BITS - FAMEC_FETCHBITS) +#define M68K_FETCHBANK (1 << FAMEC_FETCHBITS) +#define M68K_FETCHMASK (M68K_FETCHBANK - 1) + +#define M68K_DATASFT (FAMEC_ADR_BITS - FAMEC_DATABITS) +#define M68K_DATABANK (1 << FAMEC_DATABITS) +#define M68K_DATAMASK (M68K_DATABANK - 1) + +#define M68K_SR_C_SFT 8 +#define M68K_SR_V_SFT 7 +#define M68K_SR_Z_SFT 0 +#define M68K_SR_N_SFT 7 +#define M68K_SR_X_SFT 8 + +#define M68K_SR_S_SFT 13 +#define M68K_SR_T_SFT 15 + +#define M68K_SR_C (1 << M68K_SR_C_SFT) +#define M68K_SR_V (1 << M68K_SR_V_SFT) +#define M68K_SR_Z 0 +#define M68K_SR_N (1 << M68K_SR_N_SFT) +#define M68K_SR_X (1 << M68K_SR_X_SFT) + +#define M68K_SR_S (1 << M68K_SR_S_SFT) +#define M68K_SR_T (1 << M68K_SR_T_SFT) + +#define M68K_CCR_MASK 0x1F + +#ifdef FAMEC_EMULATE_TRACE +#define M68K_SR_MASK (M68K_SR_T | M68K_SR_S | 0x0700 | M68K_CCR_MASK) +#else +#define M68K_SR_MASK (M68K_SR_S | 0x0700 | M68K_CCR_MASK) +#endif + +// exception defines taken from musashi core +#define M68K_RESET_EX 1 +#define M68K_BUS_ERROR_EX 2 +#define M68K_ADDRESS_ERROR_EX 3 +#define M68K_ILLEGAL_INSTRUCTION_EX 4 +#define M68K_ZERO_DIVIDE_EX 5 +#define M68K_CHK_EX 6 +#define M68K_TRAPV_EX 7 +#define M68K_PRIVILEGE_VIOLATION_EX 8 +#define M68K_TRACE_EX 9 +#define M68K_1010_EX 10 +#define M68K_1111_EX 11 +#define M68K_FORMAT_ERROR_EX 14 +#define M68K_UNINITIALIZED_INTERRUPT_EX 15 +#define M68K_SPURIOUS_INTERRUPT_EX 24 +#define M68K_INTERRUPT_AUTOVECTOR_EX 24 +#define M68K_TRAP_BASE_EX 32 + +#define M68K_INT_ACK_AUTOVECTOR -1 + + +// internals core macros +///////////////////////// + +#define DREG(X) (m68kcontext.dreg[(X)].D) +#define DREGu32(X) (m68kcontext.dreg[(X)].D) +#define DREGs32(X) (m68kcontext.dreg[(X)].SD) +#define DREGu16(X) (m68kcontext.dreg[(X)].W) +#define DREGs16(X) (m68kcontext.dreg[(X)].SW) +#define DREGu8(X) (m68kcontext.dreg[(X)].B) +#define DREGs8(X) (m68kcontext.dreg[(X)].SB) + +#define AREG(X) (m68kcontext.areg[(X)].D) +#define AREGu32(X) (m68kcontext.areg[(X)].D) +#define AREGs32(X) (m68kcontext.areg[(X)].SD) +#define AREGu16(X) (m68kcontext.areg[(X)].W) +#define AREGs16(X) (m68kcontext.areg[(X)].SW) + +#define ASP (m68kcontext.asp) + +#define LSL(A, C) ((A) << (C)) +#define LSR(A, C) ((A) >> (C)) + +#define LSR_32(A, C) ((C) < 32 ? (A) >> (C) : 0) +#define LSL_32(A, C) ((C) < 32 ? (A) << (C) : 0) + +#define ROL_8(A, C) (LSL(A, C) | LSR(A, 8-(C))) +#define ROL_9(A, C) (LSL(A, C) | LSR(A, 9-(C))) +#define ROL_16(A, C) (LSL(A, C) | LSR(A, 16-(C))) +#define ROL_17(A, C) (LSL(A, C) | LSR(A, 17-(C))) +#define ROL_32(A, C) (LSL_32(A, C) | LSR_32(A, 32-(C))) +#define ROL_33(A, C) (LSL_32(A, C) | LSR_32(A, 33-(C))) + +#define ROR_8(A, C) (LSR(A, C) | LSL(A, 8-(C))) +#define ROR_9(A, C) (LSR(A, C) | LSL(A, 9-(C))) +#define ROR_16(A, C) (LSR(A, C) | LSL(A, 16-(C))) +#define ROR_17(A, C) (LSR(A, C) | LSL(A, 17-(C))) +#define ROR_32(A, C) (LSR_32(A, C) | LSL_32(A, 32-(C))) +#define ROR_33(A, C) (LSR_32(A, C) | LSL_32(A, 33-(C))) + +#ifndef FAMEC_NO_GOTOS +#define NEXT \ + FETCH_WORD(Opcode); \ + goto *JumpTable[Opcode]; + +#ifdef FAMEC_ROLL_INLINE +#define RET(A) \ + m68kcontext.io_cycle_counter -= (A); \ + if (m68kcontext.io_cycle_counter <= 0) goto famec_Exec_End; \ + NEXT +#else +#define RET(A) \ + m68kcontext.io_cycle_counter -= (A); \ + if (m68kcontext.io_cycle_counter <= 0) goto famec_Exec_End; \ + goto famec_Exec; +#endif + +#else + +#define NEXT \ + do{ \ + FETCH_WORD(Opcode); \ + JumpTable[Opcode](); \ + }while(m68kcontext.io_cycle_counter>0); + +#define RET(A) \ + m68kcontext.io_cycle_counter -= (A); \ + return; + +#endif + +#define M68K_PPL (m68kcontext.sr >> 8) & 7 + +#define GET_PC \ + (u32)PC - BasePC; + +#define SET_PC(A) \ + BasePC = g_m68kcontext->Fetch[((A) >> M68K_FETCHSFT) & M68K_FETCHMASK]; \ + /* BasePC -= (A) & 0xFF000000; */ \ + PC = (u16*)(((A) & M68K_ADR_MASK) + BasePC); + +#define SET_PC_BASE(P,B,A) \ + (B) = g_m68kcontext->Fetch[((A) >> M68K_FETCHSFT) & M68K_FETCHMASK]; \ + /* (B) -= (A) & 0xFF000000; */ \ + (P) = (u16*)(((A) & M68K_ADR_MASK) + (B)); + + +#define PRE_IO \ +// io_cycle_counter = CCnt; + +#define POST_IO \ +// CCnt = io_cycle_counter; + +#ifndef FAME_BIG_ENDIAN + + #define READ_BYTE_F(A, D) \ + D = m68kcontext.read_byte(A) & 0xFF; + + #define READ_WORD_F(A, D) \ + D = m68kcontext.read_word(A) & 0xFFFF; + + #define READ_LONG_F(A, D) \ + D = m68kcontext.read_word((A)) << 16; \ + D |= m68kcontext.read_word((A) + 2) & 0xFFFF; + + #define READSX_LONG_F(A, D) \ + D = m68kcontext.read_word((A)) << 16; \ + D |= m68kcontext.read_word((A) + 2) & 0xFFFF; + + #define WRITE_LONG_F(A, D) \ + m68kcontext.write_word((A), (D) >> 16); \ + m68kcontext.write_word((A) + 2, (D) & 0xFFFF); + + #define WRITE_LONG_DEC_F(A, D) \ + m68kcontext.write_word((A), (D) >> 16); \ + m68kcontext.write_word((A) + 2, (D) & 0xFFFF); + + #define FETCH_LONG(A) \ + (A) = PC[1] | (PC[0] << 16); \ + PC += 2; + + #define PUSH_32_F(D) \ + AREG(7) -= 4; \ + m68kcontext.write_word(AREG(7), (D) >> 16); \ + m68kcontext.write_word(AREG(7) + 2, (D) & 0xFFFF); + + #define POP_32_F(D) \ + D = m68kcontext.read_word(AREG(7)) << 16; \ + D |= m68kcontext.read_word(AREG(7) + 2) & 0xFFFF; \ + AREG(7) += 4; + + #define GET_SWORD \ + (s16)(*PC) + + #define FETCH_BYTE(A) \ + (A) = (*PC++) & 0xFF; + + #define FETCH_SBYTE(A) \ + (A) = (s8)((*PC++) & 0xFF); + + #define FETCH_WORD(A) \ + (A) = *PC++; + + #define FETCH_SWORD(A) \ + (A) = (s16)(*PC++); + + #define DECODE_EXT_WORD \ + { \ + u32 ext; \ + \ + ext = *PC++; \ + \ + adr += (s8)(ext); \ + if (ext & 0x0800) adr += DREGs32(ext >> 12); \ + else adr += DREGs16(ext >> 12); \ + } + +#else + + #define READ_BYTE_F(A, D) \ + D = m68kcontext.read_byte(A) & 0xFF; + + #define READ_WORD_F(A, D) \ + D = m68kcontext.read_word(A) & 0xFFFF; + + #define READ_LONG_F(A, D) \ + D = m68kcontext.read_long(A); + + #define READSX_LONG_F(A, D) \ + D = m68kcontext.read_long(A); + + #define WRITE_LONG_F(A, D) \ + m68kcontext.write_long(A, D); + + #define WRITE_LONG_DEC_F(A, D) \ + m68kcontext.write_word((A) + 2, (D) >> 16); \ + m68kcontext.write_word((A), (D) & 0xFFFF); + + #define FETCH_LONG(A) \ + (A) = PC[0] | (PC[1] << 16); \ + PC += 2; + + #define PUSH_32_F(D) \ + AREG(7) -= 4; \ + m68kcontext.write_long(AREG(7), D); + + #define POP_32_F(D) \ + D = m68kcontext.read_long(AREG(7)); \ + AREG(7) += 4; + + #define GET_SWORD \ + ((s16)(((*PC & 0xFF) << 8) | (*PC >> 8))) + + #define FETCH_BYTE(A) \ + (A) = (*PC++) >> 8; + + #define FETCH_SBYTE(A) \ + (A) = (s8)((*PC++) >> 8); + + #define FETCH_WORD(A) \ + (A) = ((*PC & 0xFF) << 8) | (*PC >> 8); \ + PC++; + + #define FETCH_SWORD(A) \ + (A) = (s16)(((*PC & 0xFF) << 8) | (*PC >> 8)); \ + PC++; + + #define DECODE_EXT_WORD \ + { \ + u32 ext; \ + \ + ext = *PC++; \ + \ + adr += (s8)(ext >> 8); \ + if (ext & 0x0008) adr += DREGs32((ext >> 4) & 0x000F); \ + else adr += DREGs16((ext >> 4) & 0x000F); \ + } + +#endif + +#define READSX_BYTE_F(A, D) \ + D = (s8)m68kcontext.read_byte(A); + +#define READSX_WORD_F(A, D) \ + D = (s16)m68kcontext.read_word(A); + + +#define WRITE_BYTE_F(A, D) \ + m68kcontext.write_byte(A, D); + +#define WRITE_WORD_F(A, D) \ + m68kcontext.write_word(A, D); + +#define PUSH_16_F(D) \ + m68kcontext.write_word(AREG(7) -= 2, D); \ + +#define POP_16_F(D) \ + D = (u16)m68kcontext.read_word(AREG(7)); \ + AREG(7) += 2; + +#define GET_CCR \ + (((flag_C >> (M68K_SR_C_SFT - 0)) & 1) | \ + ((flag_V >> (M68K_SR_V_SFT - 1)) & 2) | \ + (((!flag_NotZ) & 1) << 2) | \ + ((flag_N >> (M68K_SR_N_SFT - 3)) & 8) | \ + ((flag_X >> (M68K_SR_X_SFT - 4)) & 0x10)) + +#ifdef FAMEC_EMULATE_TRACE +#define GET_SR \ + ((flag_S << 0) | \ + (flag_I << 8) | \ + (flag_T ) | \ + GET_CCR) +#else +#define GET_SR \ + ((flag_S << 0) | \ + (flag_I << 8) | \ + GET_CCR) +#endif + +#define SET_CCR(A) \ + flag_C = (A) << (M68K_SR_C_SFT - 0); \ + flag_V = (A) << (M68K_SR_V_SFT - 1); \ + flag_NotZ = ~(A) & 4; \ + flag_N = (A) << (M68K_SR_N_SFT - 3); \ + flag_X = (A) << (M68K_SR_X_SFT - 4); + + +#ifdef FAMEC_EMULATE_TRACE +#define SET_SR(A) \ + SET_CCR(A) \ + flag_T = (A) & M68K_SR_T; \ + flag_S = (A) & M68K_SR_S; \ + flag_I = ((A) >> 8) & 7; +#else +#define SET_SR(A) \ + SET_CCR(A) \ + flag_S = (A) & M68K_SR_S; \ + flag_I = ((A) >> 8) & 7; +#endif + +#define CHECK_INT_TO_JUMP(CLK) \ + if (interrupt_chk__()) \ + { \ + cycles_needed=m68kcontext.io_cycle_counter-(CLK); \ + m68kcontext.io_cycle_counter= (CLK); \ + } + + +#ifdef FAMEC_CHECK_BRANCHES + +#ifdef FAMEC_NO_GOTOS +#define CHECK_BRANCH_EXCEPTION_GOTO_END m68kcontext.io_cycle_counter=0; return; +#else +#define CHECK_BRANCH_EXCEPTION_GOTO_END goto famec_Exec_End; +#endif + +#define CHECK_BRANCH_EXCEPTION(_PC_) \ + if ((_PC_)&1) \ + { \ + u32 pr_PC=GET_PC; \ + m68kcontext.execinfo |= M68K_EMULATE_GROUP_0; \ + execute_exception_group_0(M68K_ADDRESS_ERROR_EX, 0, pr_PC, 0x12 ); \ + CHECK_BRANCH_EXCEPTION_GOTO_END \ + } +#else +#define CHECK_BRANCH_EXCEPTION(_PC_) +#endif + + +static void init_jump_table(void); + +/* Custom function handler */ +typedef void (*icust_handler_func)(u32 vector); + +// global variable +/////////////////// + +/* Current CPU context */ +M68K_CONTEXT *g_m68kcontext; +#define m68kcontext (*g_m68kcontext) + +/* static s32 io_cycle_counter; */ +static s32 cycles_needed=0; +static u16 *PC; +static u32 BasePC; +// static u32 Fetch[M68K_FETCHBANK]; + +/* Custom function handler */ +typedef void (*opcode_func)(void); + +static opcode_func JumpTable[0x10000]; + + +static u32 initialised = 0; + +// exception cycle table (taken from musashi core) +static const s32 exception_cycle_table[256] = +{ + 4, // 0: Reset - Initial Stack Pointer + 4, // 1: Reset - Initial Program Counter + 50, // 2: Bus Error + 50, // 3: Address Error + 34, // 4: Illegal Instruction + 38, // 5: Divide by Zero + 40, // 6: CHK + 34, // 7: TRAPV + 34, // 8: Privilege Violation + 34, // 9: Trace + 4, // 10: + 4, // 11: + 4, // 12: RESERVED + 4, // 13: Coprocessor Protocol Violation + 4, // 14: Format Error + 44, // 15: Uninitialized Interrupt + 4, // 16: RESERVED + 4, // 17: RESERVED + 4, // 18: RESERVED + 4, // 19: RESERVED + 4, // 20: RESERVED + 4, // 21: RESERVED + 4, // 22: RESERVED + 4, // 23: RESERVED + 44, // 24: Spurious Interrupt + 44, // 25: Level 1 Interrupt Autovector + 44, // 26: Level 2 Interrupt Autovector + 44, // 27: Level 3 Interrupt Autovector + 44, // 28: Level 4 Interrupt Autovector + 44, // 29: Level 5 Interrupt Autovector + 44, // 30: Level 6 Interrupt Autovector + 44, // 31: Level 7 Interrupt Autovector + 34, // 32: TRAP #0 + 34, // 33: TRAP #1 + 34, // 34: TRAP #2 + 34, // 35: TRAP #3 + 34, // 36: TRAP #4 + 34, // 37: TRAP #5 + 34, // 38: TRAP #6 + 34, // 39: TRAP #7 + 34, // 40: TRAP #8 + 34, // 41: TRAP #9 + 34, // 42: TRAP #10 + 34, // 43: TRAP #11 + 34, // 44: TRAP #12 + 34, // 45: TRAP #13 + 34, // 46: TRAP #14 + 34, // 47: TRAP #15 + 4, // 48: FP Branch or Set on Unknown Condition + 4, // 49: FP Inexact Result + 4, // 50: FP Divide by Zero + 4, // 51: FP Underflow + 4, // 52: FP Operand Error + 4, // 53: FP Overflow + 4, // 54: FP Signaling NAN + 4, // 55: FP Unimplemented Data Type + 4, // 56: MMU Configuration Error + 4, // 57: MMU Illegal Operation Error + 4, // 58: MMU Access Level Violation Error + 4, // 59: RESERVED + 4, // 60: RESERVED + 4, // 61: RESERVED + 4, // 62: RESERVED + 4, // 63: RESERVED + // 64-255: User Defined + 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4, + 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4, + 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4, + 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4, + 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4, + 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4 +}; + + +/********************/ +/* helper functions */ +/********************/ + + +#if 0 +static void famec_SetFetch(u32 low_adr, u32 high_adr, u32 fetch_adr) +{ + u32 i, j; + + i = (low_adr >> M68K_FETCHSFT) & M68K_FETCHMASK; + j = (high_adr >> M68K_FETCHSFT) & M68K_FETCHMASK; + + while (i <= j) + g_m68kcontext->Fetch[i++] = fetch_adr; +} + +static void famec_SetBanks(void) +{ + u32 i=0; + while(m68kcontext.fetch[i].low_addr != (u32)-1) + { + famec_SetFetch(m68kcontext.fetch[i].low_addr,m68kcontext.fetch[i].high_addr,m68kcontext.fetch[i].offset); + i++; + } +} +#endif + + +/***********************/ +/* core main functions */ +/***********************/ + +/***************************************************************************/ +/* m68k_init() */ +/* Debe ser llamado para inicializar la tabla de saltos de instruccion */ +/* No recibe parametros y no devuelve nada */ +/***************************************************************************/ +void m68k_init(void) +{ +#ifdef FAMEC_DEBUG + puts("Initializing FAME..."); +#endif + + if (!initialised) + m68k_emulate(0); + +#ifdef FAMEC_DEBUG + puts("FAME initialized."); +#endif +} + +/******************************************************************************/ +/* m68k_reset() */ +/* Parametros: Ninguno */ +/* Retorno: Exito de la operacion */ +/* M68K_OK (0): La funcion se ha ejecutado satisfactoriamente */ +/* M68K_RUNNING (1): No se puede resetear porque la CPU esta en ejecucion */ +/* M68K_NO_SUP_ADDR_SPACE (2): No se puede resetear porque no hay mapa */ +/* de memoria supervisor de extraccion de opcodes */ +/******************************************************************************/ +int m68k_reset(void) +{ + if (!initialised) + m68k_emulate(0); + + // Si la CPU esta en ejecucion, salir con M68K_RUNNING + if (m68kcontext.execinfo & M68K_RUNNING) + return M68K_RUNNING; + + // Resetear registros + memset(&m68kcontext.dreg[0], 0, 16*4); + + // Resetear interrupts, execinfo y ASP + m68kcontext.interrupts[0] = 0; + m68kcontext.execinfo = 0; + ASP = 0; + + // Fijar registro de estado + m68kcontext.sr = 0x2700; + + // Obtener puntero de pila inicial y PC + AREG(7) = m68kcontext.read_long(0); + m68kcontext.pc = m68kcontext.read_long(4); + +#ifdef FAMEC_DEBUG + puts("Reset 68k done!\n"); + printf("PC = 0x%08X\n",m68kcontext.pc); +#endif + + return M68K_OK; +} + + +/****************************************************************************/ +/* m68k_get_pc() */ +/* No recibe parametros */ +/* Retorna 68k PC */ +/****************************************************************************/ +u32 m68k_get_pc(M68K_CONTEXT *context) +{ + return (context->execinfo & M68K_RUNNING)?(u32)PC-BasePC:context->pc; +} + + +/***************************************************************************/ +/* m68k_get_register(register) */ +/* Parametro: Registro a obtener valor (indice) */ +/* Retorno: Valor del registro requerido */ +/* Observacion: En caso de que el indice no sea correcto */ +/* la funcion devolvera -1 */ +/***************************************************************************/ +u32 m68k_get_register(M68K_CONTEXT *context, m68k_register reg) +{ + M68K_CONTEXT *oldcontext = g_m68kcontext; + s32 ret; + + g_m68kcontext = context; + + switch (reg) + { + case M68K_REG_D0: + case M68K_REG_D1: + case M68K_REG_D2: + case M68K_REG_D3: + case M68K_REG_D4: + case M68K_REG_D5: + case M68K_REG_D6: + case M68K_REG_D7: + ret = DREG(reg - M68K_REG_D0); + break; + + case M68K_REG_A0: + case M68K_REG_A1: + case M68K_REG_A2: + case M68K_REG_A3: + case M68K_REG_A4: + case M68K_REG_A5: + case M68K_REG_A6: + case M68K_REG_A7: + ret = AREG(reg - M68K_REG_A0); + break; + + case M68K_REG_ASP: + ret = ASP; + break; + + case M68K_REG_PC: + ret = m68k_get_pc(context); + break; + + case M68K_REG_SR: + ret = m68kcontext.sr; + break; + + default: + ret = M68K_INV_REG; + break; + } + + g_m68kcontext = oldcontext; + return ret; +} + +/***********************************************************************/ +/* m68k_set_register(register,value) */ +/* Parametros: Registro (indice) y valor a asignar */ +/* Retorno: Exito de la operacion */ +/* 0 La operacion se ha realizado satisfactoriamente */ +/* 1 El indice del registro no es valido (fuera de limites) */ +/***********************************************************************/ +u32 m68k_set_register(M68K_CONTEXT *context, m68k_register reg, u32 value) +{ + M68K_CONTEXT *oldcontext = g_m68kcontext; + s32 ret = M68K_OK; + + g_m68kcontext = context; + + switch (reg) + { + case M68K_REG_D0: + case M68K_REG_D1: + case M68K_REG_D2: + case M68K_REG_D3: + case M68K_REG_D4: + case M68K_REG_D5: + case M68K_REG_D6: + case M68K_REG_D7: + DREG(reg - M68K_REG_D0) = value; + break; + + case M68K_REG_A0: + case M68K_REG_A1: + case M68K_REG_A2: + case M68K_REG_A3: + case M68K_REG_A4: + case M68K_REG_A5: + case M68K_REG_A6: + case M68K_REG_A7: + AREG(reg - M68K_REG_A0) = value; + break; + + case M68K_REG_ASP: + ASP = value; + break; + + case M68K_REG_PC: + if (m68kcontext.execinfo & M68K_RUNNING) + { + SET_PC(value & M68K_ADR_MASK); + } + else + { + m68kcontext.pc = value; + } + break; + + case M68K_REG_SR: + m68kcontext.sr = value & 0xFFFF; + break; + + default: + ret = M68K_INV_REG; + break; + } + + g_m68kcontext = oldcontext; + return ret; +} + + +////////////////////////// +// Chequea las interrupciones y las inicia +static FAMEC_EXTRA_INLINE s32 interrupt_chk__(void) +{ + if (m68kcontext.interrupts[0] > flag_I) + return m68kcontext.interrupts[0]; + + return 0; +} + + +static FAMEC_EXTRA_INLINE void execute_exception(s32 vect) +{ + extern u32 flag_S; +#ifndef FAMEC_IRQ_CYCLES + if ((vect<24)||(vect>31)) +#endif + m68kcontext.io_cycle_counter -= exception_cycle_table[vect]; + { + u32 newPC; + u32 oldPC; + u32 oldSR = GET_SR; + + PRE_IO + + READ_LONG_F(vect * 4, newPC) + + /* swap A7 and USP */ + if (!flag_S) + { + u32 tmpSP; + + tmpSP = ASP; + ASP = AREG(7); + AREG(7) = tmpSP; + } + + oldPC = (u32)(PC) - BasePC; + PUSH_32_F(oldPC) + PUSH_16_F(oldSR) + + /* adjust SR */ + flag_S = M68K_SR_S; + + newPC&=M68K_ADR_MASK; + + SET_PC(newPC) + + POST_IO + } +} + +static FAMEC_EXTRA_INLINE void execute_exception_group_0(s32 vect, u16 inst_reg, s32 addr, u16 spec_info) +{ + execute_exception(vect); + //if (!(m68kcontext.icust_handler && m68kcontext.icust_handler[vect])) + { + PUSH_16_F(inst_reg); + PUSH_32_F(addr); + PUSH_16_F(spec_info); + } +} + + +static void setup_jumptable(void); +static u32 Opcode; + +#ifdef FAMEC_NO_GOTOS + +#define OPCODE(N_OP) static void OP_##N_OP(void) +#define CAST_OP(N_OP) (opcode_func)&OP_##N_OP +#include "famec_opcodes.h" +#endif + + +// main exec function +////////////////////// + +int m68k_emulate(s32 cycles) +{ + if (!initialised) + { + init_jump_table(); + return 0; + } + + /* Comprobar si la CPU esta detenida debido a un doble error de bus */ + if (m68kcontext.execinfo & M68K_FAULTED) return -1; + + if (m68kcontext.execinfo & M68K_HALTED) + { + if (interrupt_chk__() <= 0) + { + return cycles; + } + m68kcontext.execinfo &= ~M68K_HALTED; + } + +#ifdef FAMEC_DEBUG + printf("Ciclos a ejecutar: %d\n",cycles); +#endif + + /* Poner la CPU en estado de ejecucion */ + m68kcontext.execinfo |= M68K_RUNNING; + + // Cache SR + SET_SR(m68kcontext.sr) + + // Cache PPL + flag_I = M68K_PPL; + + // Fijar PC + SET_PC(m68kcontext.pc) + +#ifdef FAMEC_DEBUG + printf("PC: %p\n",PC); + printf("BasePC: 0x%08x\n",BasePC); +#endif + + /* guardar ciclos de ejecucion solicitados */ + m68kcontext.io_cycle_counter = cycles; + cycles_needed = 0; + +#ifdef FAMEC_EMULATE_TRACE + if (!(m68kcontext.execinfo & M68K_EMULATE_TRACE)) +#endif + { + s32 line=interrupt_chk__(); + if (line>0) + { + /* comprobar si hay rutina de acknowledge */ + if (m68kcontext.iack_handler != NULL) + m68kcontext.iack_handler(line); + else + m68kcontext.interrupts[0] = 0; + + execute_exception(line + 0x18); + flag_I = (u32)line; + } +#ifdef FAMEC_EMULATE_TRACE + else + if (flag_T) + { + m68kcontext.execinfo |= M68K_EMULATE_TRACE; + cycles_needed= m68kcontext.io_cycle_counter; + m68kcontext.io_cycle_counter=0; + } +#endif + } + + +#ifndef FAMEC_NO_GOTOS +famec_Exec: +#endif + +#ifdef FAMEC_DEBUG + printf("Antes de NEXT... PC = %p\n", PC); +#endif + + NEXT + +#ifndef FAMEC_NO_GOTOS + +#define OPCODE(N_OP) OP_##N_OP: +#define CAST_OP(N_OP) (opcode_func)&&OP_##N_OP +#include "famec_opcodes.h" + + famec_Exec_End: +#endif + +#ifdef FAMEC_EMULATE_TRACE + if (m68kcontext.execinfo & M68K_EMULATE_TRACE) + { + m68kcontext.io_cycle_counter= cycles_needed; + m68kcontext.execinfo &= ~M68K_EMULATE_TRACE; + m68kcontext.execinfo |= M68K_DO_TRACE; + execute_exception(M68K_TRACE_EX); + flag_T=0; + if (m68kcontext.io_cycle_counter > 0) + { + NEXT + } + } + else +#endif + if (cycles_needed>0) + { + s32 line=interrupt_chk__(); + m68kcontext.io_cycle_counter= cycles_needed; + if (line>0) + { + if (m68kcontext.iack_handler != NULL) + m68kcontext.iack_handler(line); + else + m68kcontext.interrupts[0] = 0; + + execute_exception(line + 0x18); + flag_I = (u32)line; + } +#ifdef FAMEC_EMULATE_TRACE + else if (!(flag_T)) +#endif + if (m68kcontext.io_cycle_counter > 0) + { + NEXT + } + } + + m68kcontext.sr = GET_SR; + m68kcontext.pc = GET_PC; + + m68kcontext.execinfo &= ~M68K_RUNNING; + +#ifdef FAMEC_DEBUG + printf("En really end...\n"); + printf("PC: %p\n",PC); + printf("BasePC: 0x%08x\n",BasePC); + printf("pc: 0x%08x\n",m68kcontext.pc); +#endif + + return cycles - m68kcontext.io_cycle_counter; +} + + + +static void init_jump_table(void) +{ + u32 i, j; + + for(i = 0x0000; i <= 0xFFFF; i += 0x0001) + JumpTable[0x0000 + i] = CAST_OP(0x4AFC); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x0000 + i] = CAST_OP(0x0000); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x0010 + i] = CAST_OP(0x0010); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + JumpTable[0x0018 + i] = CAST_OP(0x0018); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + JumpTable[0x0020 + i] = CAST_OP(0x0020); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x0028 + i] = CAST_OP(0x0028); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x0030 + i] = CAST_OP(0x0030); + JumpTable[0x0038] = CAST_OP(0x0038); + JumpTable[0x0039] = CAST_OP(0x0039); + JumpTable[0x001F] = CAST_OP(0x001F); + JumpTable[0x0027] = CAST_OP(0x0027); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x0040 + i] = CAST_OP(0x0040); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x0050 + i] = CAST_OP(0x0050); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + JumpTable[0x0058 + i] = CAST_OP(0x0058); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + JumpTable[0x0060 + i] = CAST_OP(0x0060); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x0068 + i] = CAST_OP(0x0068); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x0070 + i] = CAST_OP(0x0070); + JumpTable[0x0078] = CAST_OP(0x0078); + JumpTable[0x0079] = CAST_OP(0x0079); + JumpTable[0x005F] = CAST_OP(0x005F); + JumpTable[0x0067] = CAST_OP(0x0067); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x0080 + i] = CAST_OP(0x0080); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x0090 + i] = CAST_OP(0x0090); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + JumpTable[0x0098 + i] = CAST_OP(0x0098); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + JumpTable[0x00A0 + i] = CAST_OP(0x00A0); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x00A8 + i] = CAST_OP(0x00A8); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x00B0 + i] = CAST_OP(0x00B0); + JumpTable[0x00B8] = CAST_OP(0x00B8); + JumpTable[0x00B9] = CAST_OP(0x00B9); + JumpTable[0x009F] = CAST_OP(0x009F); + JumpTable[0x00A7] = CAST_OP(0x00A7); + JumpTable[0x003C] = CAST_OP(0x003C); + JumpTable[0x007C] = CAST_OP(0x007C); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x0200 + i] = CAST_OP(0x0200); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x0210 + i] = CAST_OP(0x0210); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + JumpTable[0x0218 + i] = CAST_OP(0x0218); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + JumpTable[0x0220 + i] = CAST_OP(0x0220); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x0228 + i] = CAST_OP(0x0228); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x0230 + i] = CAST_OP(0x0230); + JumpTable[0x0238] = CAST_OP(0x0238); + JumpTable[0x0239] = CAST_OP(0x0239); + JumpTable[0x021F] = CAST_OP(0x021F); + JumpTable[0x0227] = CAST_OP(0x0227); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x0240 + i] = CAST_OP(0x0240); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x0250 + i] = CAST_OP(0x0250); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + JumpTable[0x0258 + i] = CAST_OP(0x0258); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + JumpTable[0x0260 + i] = CAST_OP(0x0260); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x0268 + i] = CAST_OP(0x0268); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x0270 + i] = CAST_OP(0x0270); + JumpTable[0x0278] = CAST_OP(0x0278); + JumpTable[0x0279] = CAST_OP(0x0279); + JumpTable[0x025F] = CAST_OP(0x025F); + JumpTable[0x0267] = CAST_OP(0x0267); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x0280 + i] = CAST_OP(0x0280); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x0290 + i] = CAST_OP(0x0290); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + JumpTable[0x0298 + i] = CAST_OP(0x0298); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + JumpTable[0x02A0 + i] = CAST_OP(0x02A0); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x02A8 + i] = CAST_OP(0x02A8); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x02B0 + i] = CAST_OP(0x02B0); + JumpTable[0x02B8] = CAST_OP(0x02B8); + JumpTable[0x02B9] = CAST_OP(0x02B9); + JumpTable[0x029F] = CAST_OP(0x029F); + JumpTable[0x02A7] = CAST_OP(0x02A7); + JumpTable[0x023C] = CAST_OP(0x023C); + JumpTable[0x027C] = CAST_OP(0x027C); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x0A00 + i] = CAST_OP(0x0A00); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x0A10 + i] = CAST_OP(0x0A10); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + JumpTable[0x0A18 + i] = CAST_OP(0x0A18); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + JumpTable[0x0A20 + i] = CAST_OP(0x0A20); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x0A28 + i] = CAST_OP(0x0A28); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x0A30 + i] = CAST_OP(0x0A30); + JumpTable[0x0A38] = CAST_OP(0x0A38); + JumpTable[0x0A39] = CAST_OP(0x0A39); + JumpTable[0x0A1F] = CAST_OP(0x0A1F); + JumpTable[0x0A27] = CAST_OP(0x0A27); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x0A40 + i] = CAST_OP(0x0A40); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x0A50 + i] = CAST_OP(0x0A50); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + JumpTable[0x0A58 + i] = CAST_OP(0x0A58); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + JumpTable[0x0A60 + i] = CAST_OP(0x0A60); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x0A68 + i] = CAST_OP(0x0A68); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x0A70 + i] = CAST_OP(0x0A70); + JumpTable[0x0A78] = CAST_OP(0x0A78); + JumpTable[0x0A79] = CAST_OP(0x0A79); + JumpTable[0x0A5F] = CAST_OP(0x0A5F); + JumpTable[0x0A67] = CAST_OP(0x0A67); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x0A80 + i] = CAST_OP(0x0A80); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x0A90 + i] = CAST_OP(0x0A90); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + JumpTable[0x0A98 + i] = CAST_OP(0x0A98); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + JumpTable[0x0AA0 + i] = CAST_OP(0x0AA0); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x0AA8 + i] = CAST_OP(0x0AA8); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x0AB0 + i] = CAST_OP(0x0AB0); + JumpTable[0x0AB8] = CAST_OP(0x0AB8); + JumpTable[0x0AB9] = CAST_OP(0x0AB9); + JumpTable[0x0A9F] = CAST_OP(0x0A9F); + JumpTable[0x0AA7] = CAST_OP(0x0AA7); + JumpTable[0x0A3C] = CAST_OP(0x0A3C); + JumpTable[0x0A7C] = CAST_OP(0x0A7C); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x0400 + i] = CAST_OP(0x0400); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x0410 + i] = CAST_OP(0x0410); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + JumpTable[0x0418 + i] = CAST_OP(0x0418); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + JumpTable[0x0420 + i] = CAST_OP(0x0420); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x0428 + i] = CAST_OP(0x0428); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x0430 + i] = CAST_OP(0x0430); + JumpTable[0x0438] = CAST_OP(0x0438); + JumpTable[0x0439] = CAST_OP(0x0439); + JumpTable[0x041F] = CAST_OP(0x041F); + JumpTable[0x0427] = CAST_OP(0x0427); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x0440 + i] = CAST_OP(0x0440); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x0450 + i] = CAST_OP(0x0450); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + JumpTable[0x0458 + i] = CAST_OP(0x0458); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + JumpTable[0x0460 + i] = CAST_OP(0x0460); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x0468 + i] = CAST_OP(0x0468); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x0470 + i] = CAST_OP(0x0470); + JumpTable[0x0478] = CAST_OP(0x0478); + JumpTable[0x0479] = CAST_OP(0x0479); + JumpTable[0x045F] = CAST_OP(0x045F); + JumpTable[0x0467] = CAST_OP(0x0467); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x0480 + i] = CAST_OP(0x0480); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x0490 + i] = CAST_OP(0x0490); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + JumpTable[0x0498 + i] = CAST_OP(0x0498); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + JumpTable[0x04A0 + i] = CAST_OP(0x04A0); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x04A8 + i] = CAST_OP(0x04A8); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x04B0 + i] = CAST_OP(0x04B0); + JumpTable[0x04B8] = CAST_OP(0x04B8); + JumpTable[0x04B9] = CAST_OP(0x04B9); + JumpTable[0x049F] = CAST_OP(0x049F); + JumpTable[0x04A7] = CAST_OP(0x04A7); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x0600 + i] = CAST_OP(0x0600); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x0610 + i] = CAST_OP(0x0610); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + JumpTable[0x0618 + i] = CAST_OP(0x0618); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + JumpTable[0x0620 + i] = CAST_OP(0x0620); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x0628 + i] = CAST_OP(0x0628); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x0630 + i] = CAST_OP(0x0630); + JumpTable[0x0638] = CAST_OP(0x0638); + JumpTable[0x0639] = CAST_OP(0x0639); + JumpTable[0x061F] = CAST_OP(0x061F); + JumpTable[0x0627] = CAST_OP(0x0627); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x0640 + i] = CAST_OP(0x0640); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x0650 + i] = CAST_OP(0x0650); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + JumpTable[0x0658 + i] = CAST_OP(0x0658); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + JumpTable[0x0660 + i] = CAST_OP(0x0660); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x0668 + i] = CAST_OP(0x0668); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x0670 + i] = CAST_OP(0x0670); + JumpTable[0x0678] = CAST_OP(0x0678); + JumpTable[0x0679] = CAST_OP(0x0679); + JumpTable[0x065F] = CAST_OP(0x065F); + JumpTable[0x0667] = CAST_OP(0x0667); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x0680 + i] = CAST_OP(0x0680); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x0690 + i] = CAST_OP(0x0690); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + JumpTable[0x0698 + i] = CAST_OP(0x0698); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + JumpTable[0x06A0 + i] = CAST_OP(0x06A0); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x06A8 + i] = CAST_OP(0x06A8); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x06B0 + i] = CAST_OP(0x06B0); + JumpTable[0x06B8] = CAST_OP(0x06B8); + JumpTable[0x06B9] = CAST_OP(0x06B9); + JumpTable[0x069F] = CAST_OP(0x069F); + JumpTable[0x06A7] = CAST_OP(0x06A7); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x0C00 + i] = CAST_OP(0x0C00); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x0C10 + i] = CAST_OP(0x0C10); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + JumpTable[0x0C18 + i] = CAST_OP(0x0C18); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + JumpTable[0x0C20 + i] = CAST_OP(0x0C20); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x0C28 + i] = CAST_OP(0x0C28); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x0C30 + i] = CAST_OP(0x0C30); + JumpTable[0x0C38] = CAST_OP(0x0C38); + JumpTable[0x0C39] = CAST_OP(0x0C39); + JumpTable[0x0C1F] = CAST_OP(0x0C1F); + JumpTable[0x0C27] = CAST_OP(0x0C27); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x0C40 + i] = CAST_OP(0x0C40); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x0C50 + i] = CAST_OP(0x0C50); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + JumpTable[0x0C58 + i] = CAST_OP(0x0C58); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + JumpTable[0x0C60 + i] = CAST_OP(0x0C60); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x0C68 + i] = CAST_OP(0x0C68); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x0C70 + i] = CAST_OP(0x0C70); + JumpTable[0x0C78] = CAST_OP(0x0C78); + JumpTable[0x0C79] = CAST_OP(0x0C79); + JumpTable[0x0C5F] = CAST_OP(0x0C5F); + JumpTable[0x0C67] = CAST_OP(0x0C67); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x0C80 + i] = CAST_OP(0x0C80); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x0C90 + i] = CAST_OP(0x0C90); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + JumpTable[0x0C98 + i] = CAST_OP(0x0C98); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + JumpTable[0x0CA0 + i] = CAST_OP(0x0CA0); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x0CA8 + i] = CAST_OP(0x0CA8); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x0CB0 + i] = CAST_OP(0x0CB0); + JumpTable[0x0CB8] = CAST_OP(0x0CB8); + JumpTable[0x0CB9] = CAST_OP(0x0CB9); + JumpTable[0x0C9F] = CAST_OP(0x0C9F); + JumpTable[0x0CA7] = CAST_OP(0x0CA7); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x0800 + i] = CAST_OP(0x0800); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x0810 + i] = CAST_OP(0x0810); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + JumpTable[0x0818 + i] = CAST_OP(0x0818); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + JumpTable[0x0820 + i] = CAST_OP(0x0820); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x0828 + i] = CAST_OP(0x0828); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x0830 + i] = CAST_OP(0x0830); + JumpTable[0x0838] = CAST_OP(0x0838); + JumpTable[0x0839] = CAST_OP(0x0839); + JumpTable[0x083A] = CAST_OP(0x083A); + JumpTable[0x083B] = CAST_OP(0x083B); + JumpTable[0x081F] = CAST_OP(0x081F); + JumpTable[0x0827] = CAST_OP(0x0827); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x0840 + i] = CAST_OP(0x0840); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x0850 + i] = CAST_OP(0x0850); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + JumpTable[0x0858 + i] = CAST_OP(0x0858); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + JumpTable[0x0860 + i] = CAST_OP(0x0860); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x0868 + i] = CAST_OP(0x0868); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x0870 + i] = CAST_OP(0x0870); + JumpTable[0x0878] = CAST_OP(0x0878); + JumpTable[0x0879] = CAST_OP(0x0879); + JumpTable[0x085F] = CAST_OP(0x085F); + JumpTable[0x0867] = CAST_OP(0x0867); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x0880 + i] = CAST_OP(0x0880); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x0890 + i] = CAST_OP(0x0890); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + JumpTable[0x0898 + i] = CAST_OP(0x0898); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + JumpTable[0x08A0 + i] = CAST_OP(0x08A0); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x08A8 + i] = CAST_OP(0x08A8); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x08B0 + i] = CAST_OP(0x08B0); + JumpTable[0x08B8] = CAST_OP(0x08B8); + JumpTable[0x08B9] = CAST_OP(0x08B9); + JumpTable[0x089F] = CAST_OP(0x089F); + JumpTable[0x08A7] = CAST_OP(0x08A7); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x08C0 + i] = CAST_OP(0x08C0); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x08D0 + i] = CAST_OP(0x08D0); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + JumpTable[0x08D8 + i] = CAST_OP(0x08D8); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + JumpTable[0x08E0 + i] = CAST_OP(0x08E0); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x08E8 + i] = CAST_OP(0x08E8); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x08F0 + i] = CAST_OP(0x08F0); + JumpTable[0x08F8] = CAST_OP(0x08F8); + JumpTable[0x08F9] = CAST_OP(0x08F9); + JumpTable[0x08DF] = CAST_OP(0x08DF); + JumpTable[0x08E7] = CAST_OP(0x08E7); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x0100 + i + j] = CAST_OP(0x0100); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x0110 + i + j] = CAST_OP(0x0110); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x0118 + i + j] = CAST_OP(0x0118); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x0120 + i + j] = CAST_OP(0x0120); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x0128 + i + j] = CAST_OP(0x0128); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x0130 + i + j] = CAST_OP(0x0130); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x0138 + i] = CAST_OP(0x0138); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x0139 + i] = CAST_OP(0x0139); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x013A + i] = CAST_OP(0x013A); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x013B + i] = CAST_OP(0x013B); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x013C + i] = CAST_OP(0x013C); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x011F + i] = CAST_OP(0x011F); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x0127 + i] = CAST_OP(0x0127); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x0140 + i + j] = CAST_OP(0x0140); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x0150 + i + j] = CAST_OP(0x0150); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x0158 + i + j] = CAST_OP(0x0158); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x0160 + i + j] = CAST_OP(0x0160); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x0168 + i + j] = CAST_OP(0x0168); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x0170 + i + j] = CAST_OP(0x0170); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x0178 + i] = CAST_OP(0x0178); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x0179 + i] = CAST_OP(0x0179); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x015F + i] = CAST_OP(0x015F); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x0167 + i] = CAST_OP(0x0167); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x0180 + i + j] = CAST_OP(0x0180); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x0190 + i + j] = CAST_OP(0x0190); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x0198 + i + j] = CAST_OP(0x0198); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x01A0 + i + j] = CAST_OP(0x01A0); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x01A8 + i + j] = CAST_OP(0x01A8); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x01B0 + i + j] = CAST_OP(0x01B0); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x01B8 + i] = CAST_OP(0x01B8); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x01B9 + i] = CAST_OP(0x01B9); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x019F + i] = CAST_OP(0x019F); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x01A7 + i] = CAST_OP(0x01A7); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x01C0 + i + j] = CAST_OP(0x01C0); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x01D0 + i + j] = CAST_OP(0x01D0); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x01D8 + i + j] = CAST_OP(0x01D8); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x01E0 + i + j] = CAST_OP(0x01E0); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x01E8 + i + j] = CAST_OP(0x01E8); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x01F0 + i + j] = CAST_OP(0x01F0); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x01F8 + i] = CAST_OP(0x01F8); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x01F9 + i] = CAST_OP(0x01F9); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x01DF + i] = CAST_OP(0x01DF); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x01E7 + i] = CAST_OP(0x01E7); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x0108 + i + j] = CAST_OP(0x0108); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x0148 + i + j] = CAST_OP(0x0148); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x0188 + i + j] = CAST_OP(0x0188); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x01C8 + i + j] = CAST_OP(0x01C8); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x1000 + i + j] = CAST_OP(0x1000); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x1080 + i + j] = CAST_OP(0x1080); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0C00; j += 0x0200) + JumpTable[0x10C0 + i + j] = CAST_OP(0x10C0); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0C00; j += 0x0200) + JumpTable[0x1100 + i + j] = CAST_OP(0x1100); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x1140 + i + j] = CAST_OP(0x1140); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x1180 + i + j] = CAST_OP(0x1180); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x11C0 + i] = CAST_OP(0x11C0); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x13C0 + i] = CAST_OP(0x13C0); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x1EC0 + i] = CAST_OP(0x1EC0); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x1F00 + i] = CAST_OP(0x1F00); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x1008 + i + j] = CAST_OP(0x1008); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x1088 + i + j] = CAST_OP(0x1088); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0C00; j += 0x0200) + JumpTable[0x10C8 + i + j] = CAST_OP(0x10C8); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0C00; j += 0x0200) + JumpTable[0x1108 + i + j] = CAST_OP(0x1108); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x1148 + i + j] = CAST_OP(0x1148); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x1188 + i + j] = CAST_OP(0x1188); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x11C8 + i] = CAST_OP(0x11C8); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x13C8 + i] = CAST_OP(0x13C8); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x1EC8 + i] = CAST_OP(0x1EC8); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x1F08 + i] = CAST_OP(0x1F08); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x1010 + i + j] = CAST_OP(0x1010); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x1090 + i + j] = CAST_OP(0x1090); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0C00; j += 0x0200) + JumpTable[0x10D0 + i + j] = CAST_OP(0x10D0); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0C00; j += 0x0200) + JumpTable[0x1110 + i + j] = CAST_OP(0x1110); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x1150 + i + j] = CAST_OP(0x1150); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x1190 + i + j] = CAST_OP(0x1190); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x11D0 + i] = CAST_OP(0x11D0); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x13D0 + i] = CAST_OP(0x13D0); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x1ED0 + i] = CAST_OP(0x1ED0); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x1F10 + i] = CAST_OP(0x1F10); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x1018 + i + j] = CAST_OP(0x1018); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x1098 + i + j] = CAST_OP(0x1098); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + for(j = 0x0000; j <= 0x0C00; j += 0x0200) + JumpTable[0x10D8 + i + j] = CAST_OP(0x10D8); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + for(j = 0x0000; j <= 0x0C00; j += 0x0200) + JumpTable[0x1118 + i + j] = CAST_OP(0x1118); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x1158 + i + j] = CAST_OP(0x1158); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x1198 + i + j] = CAST_OP(0x1198); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + JumpTable[0x11D8 + i] = CAST_OP(0x11D8); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + JumpTable[0x13D8 + i] = CAST_OP(0x13D8); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + JumpTable[0x1ED8 + i] = CAST_OP(0x1ED8); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + JumpTable[0x1F18 + i] = CAST_OP(0x1F18); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x1020 + i + j] = CAST_OP(0x1020); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x10A0 + i + j] = CAST_OP(0x10A0); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + for(j = 0x0000; j <= 0x0C00; j += 0x0200) + JumpTable[0x10E0 + i + j] = CAST_OP(0x10E0); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + for(j = 0x0000; j <= 0x0C00; j += 0x0200) + JumpTable[0x1120 + i + j] = CAST_OP(0x1120); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x1160 + i + j] = CAST_OP(0x1160); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x11A0 + i + j] = CAST_OP(0x11A0); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + JumpTable[0x11E0 + i] = CAST_OP(0x11E0); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + JumpTable[0x13E0 + i] = CAST_OP(0x13E0); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + JumpTable[0x1EE0 + i] = CAST_OP(0x1EE0); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + JumpTable[0x1F20 + i] = CAST_OP(0x1F20); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x1028 + i + j] = CAST_OP(0x1028); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x10A8 + i + j] = CAST_OP(0x10A8); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0C00; j += 0x0200) + JumpTable[0x10E8 + i + j] = CAST_OP(0x10E8); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0C00; j += 0x0200) + JumpTable[0x1128 + i + j] = CAST_OP(0x1128); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x1168 + i + j] = CAST_OP(0x1168); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x11A8 + i + j] = CAST_OP(0x11A8); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x11E8 + i] = CAST_OP(0x11E8); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x13E8 + i] = CAST_OP(0x13E8); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x1EE8 + i] = CAST_OP(0x1EE8); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x1F28 + i] = CAST_OP(0x1F28); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x1030 + i + j] = CAST_OP(0x1030); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x10B0 + i + j] = CAST_OP(0x10B0); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0C00; j += 0x0200) + JumpTable[0x10F0 + i + j] = CAST_OP(0x10F0); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0C00; j += 0x0200) + JumpTable[0x1130 + i + j] = CAST_OP(0x1130); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x1170 + i + j] = CAST_OP(0x1170); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x11B0 + i + j] = CAST_OP(0x11B0); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x11F0 + i] = CAST_OP(0x11F0); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x13F0 + i] = CAST_OP(0x13F0); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x1EF0 + i] = CAST_OP(0x1EF0); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x1F30 + i] = CAST_OP(0x1F30); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x1038 + i] = CAST_OP(0x1038); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x10B8 + i] = CAST_OP(0x10B8); + for(i = 0x0000; i <= 0x0C00; i += 0x0200) + JumpTable[0x10F8 + i] = CAST_OP(0x10F8); + for(i = 0x0000; i <= 0x0C00; i += 0x0200) + JumpTable[0x1138 + i] = CAST_OP(0x1138); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x1178 + i] = CAST_OP(0x1178); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x11B8 + i] = CAST_OP(0x11B8); + JumpTable[0x11F8] = CAST_OP(0x11F8); + JumpTable[0x13F8] = CAST_OP(0x13F8); + JumpTable[0x1EF8] = CAST_OP(0x1EF8); + JumpTable[0x1F38] = CAST_OP(0x1F38); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x1039 + i] = CAST_OP(0x1039); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x10B9 + i] = CAST_OP(0x10B9); + for(i = 0x0000; i <= 0x0C00; i += 0x0200) + JumpTable[0x10F9 + i] = CAST_OP(0x10F9); + for(i = 0x0000; i <= 0x0C00; i += 0x0200) + JumpTable[0x1139 + i] = CAST_OP(0x1139); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x1179 + i] = CAST_OP(0x1179); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x11B9 + i] = CAST_OP(0x11B9); + JumpTable[0x11F9] = CAST_OP(0x11F9); + JumpTable[0x13F9] = CAST_OP(0x13F9); + JumpTable[0x1EF9] = CAST_OP(0x1EF9); + JumpTable[0x1F39] = CAST_OP(0x1F39); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x103A + i] = CAST_OP(0x103A); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x10BA + i] = CAST_OP(0x10BA); + for(i = 0x0000; i <= 0x0C00; i += 0x0200) + JumpTable[0x10FA + i] = CAST_OP(0x10FA); + for(i = 0x0000; i <= 0x0C00; i += 0x0200) + JumpTable[0x113A + i] = CAST_OP(0x113A); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x117A + i] = CAST_OP(0x117A); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x11BA + i] = CAST_OP(0x11BA); + JumpTable[0x11FA] = CAST_OP(0x11FA); + JumpTable[0x13FA] = CAST_OP(0x13FA); + JumpTable[0x1EFA] = CAST_OP(0x1EFA); + JumpTable[0x1F3A] = CAST_OP(0x1F3A); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x103B + i] = CAST_OP(0x103B); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x10BB + i] = CAST_OP(0x10BB); + for(i = 0x0000; i <= 0x0C00; i += 0x0200) + JumpTable[0x10FB + i] = CAST_OP(0x10FB); + for(i = 0x0000; i <= 0x0C00; i += 0x0200) + JumpTable[0x113B + i] = CAST_OP(0x113B); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x117B + i] = CAST_OP(0x117B); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x11BB + i] = CAST_OP(0x11BB); + JumpTable[0x11FB] = CAST_OP(0x11FB); + JumpTable[0x13FB] = CAST_OP(0x13FB); + JumpTable[0x1EFB] = CAST_OP(0x1EFB); + JumpTable[0x1F3B] = CAST_OP(0x1F3B); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x103C + i] = CAST_OP(0x103C); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x10BC + i] = CAST_OP(0x10BC); + for(i = 0x0000; i <= 0x0C00; i += 0x0200) + JumpTable[0x10FC + i] = CAST_OP(0x10FC); + for(i = 0x0000; i <= 0x0C00; i += 0x0200) + JumpTable[0x113C + i] = CAST_OP(0x113C); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x117C + i] = CAST_OP(0x117C); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x11BC + i] = CAST_OP(0x11BC); + JumpTable[0x11FC] = CAST_OP(0x11FC); + JumpTable[0x13FC] = CAST_OP(0x13FC); + JumpTable[0x1EFC] = CAST_OP(0x1EFC); + JumpTable[0x1F3C] = CAST_OP(0x1F3C); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x101F + i] = CAST_OP(0x101F); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x109F + i] = CAST_OP(0x109F); + for(i = 0x0000; i <= 0x0C00; i += 0x0200) + JumpTable[0x10DF + i] = CAST_OP(0x10DF); + for(i = 0x0000; i <= 0x0C00; i += 0x0200) + JumpTable[0x111F + i] = CAST_OP(0x111F); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x115F + i] = CAST_OP(0x115F); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x119F + i] = CAST_OP(0x119F); + JumpTable[0x11DF] = CAST_OP(0x11DF); + JumpTable[0x13DF] = CAST_OP(0x13DF); + JumpTable[0x1EDF] = CAST_OP(0x1EDF); + JumpTable[0x1F1F] = CAST_OP(0x1F1F); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x1027 + i] = CAST_OP(0x1027); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x10A7 + i] = CAST_OP(0x10A7); + for(i = 0x0000; i <= 0x0C00; i += 0x0200) + JumpTable[0x10E7 + i] = CAST_OP(0x10E7); + for(i = 0x0000; i <= 0x0C00; i += 0x0200) + JumpTable[0x1127 + i] = CAST_OP(0x1127); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x1167 + i] = CAST_OP(0x1167); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x11A7 + i] = CAST_OP(0x11A7); + JumpTable[0x11E7] = CAST_OP(0x11E7); + JumpTable[0x13E7] = CAST_OP(0x13E7); + JumpTable[0x1EE7] = CAST_OP(0x1EE7); + JumpTable[0x1F27] = CAST_OP(0x1F27); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x2000 + i + j] = CAST_OP(0x2000); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x2080 + i + j] = CAST_OP(0x2080); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0C00; j += 0x0200) + JumpTable[0x20C0 + i + j] = CAST_OP(0x20C0); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0C00; j += 0x0200) + JumpTable[0x2100 + i + j] = CAST_OP(0x2100); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x2140 + i + j] = CAST_OP(0x2140); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x2180 + i + j] = CAST_OP(0x2180); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x21C0 + i] = CAST_OP(0x21C0); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x23C0 + i] = CAST_OP(0x23C0); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x2EC0 + i] = CAST_OP(0x2EC0); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x2F00 + i] = CAST_OP(0x2F00); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x2008 + i + j] = CAST_OP(0x2008); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x2088 + i + j] = CAST_OP(0x2088); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0C00; j += 0x0200) + JumpTable[0x20C8 + i + j] = CAST_OP(0x20C8); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0C00; j += 0x0200) + JumpTable[0x2108 + i + j] = CAST_OP(0x2108); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x2148 + i + j] = CAST_OP(0x2148); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x2188 + i + j] = CAST_OP(0x2188); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x21C8 + i] = CAST_OP(0x21C8); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x23C8 + i] = CAST_OP(0x23C8); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x2EC8 + i] = CAST_OP(0x2EC8); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x2F08 + i] = CAST_OP(0x2F08); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x2010 + i + j] = CAST_OP(0x2010); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x2090 + i + j] = CAST_OP(0x2090); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0C00; j += 0x0200) + JumpTable[0x20D0 + i + j] = CAST_OP(0x20D0); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0C00; j += 0x0200) + JumpTable[0x2110 + i + j] = CAST_OP(0x2110); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x2150 + i + j] = CAST_OP(0x2150); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x2190 + i + j] = CAST_OP(0x2190); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x21D0 + i] = CAST_OP(0x21D0); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x23D0 + i] = CAST_OP(0x23D0); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x2ED0 + i] = CAST_OP(0x2ED0); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x2F10 + i] = CAST_OP(0x2F10); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x2018 + i + j] = CAST_OP(0x2018); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x2098 + i + j] = CAST_OP(0x2098); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + for(j = 0x0000; j <= 0x0C00; j += 0x0200) + JumpTable[0x20D8 + i + j] = CAST_OP(0x20D8); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + for(j = 0x0000; j <= 0x0C00; j += 0x0200) + JumpTable[0x2118 + i + j] = CAST_OP(0x2118); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x2158 + i + j] = CAST_OP(0x2158); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x2198 + i + j] = CAST_OP(0x2198); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + JumpTable[0x21D8 + i] = CAST_OP(0x21D8); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + JumpTable[0x23D8 + i] = CAST_OP(0x23D8); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + JumpTable[0x2ED8 + i] = CAST_OP(0x2ED8); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + JumpTable[0x2F18 + i] = CAST_OP(0x2F18); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x2020 + i + j] = CAST_OP(0x2020); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x20A0 + i + j] = CAST_OP(0x20A0); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + for(j = 0x0000; j <= 0x0C00; j += 0x0200) + JumpTable[0x20E0 + i + j] = CAST_OP(0x20E0); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + for(j = 0x0000; j <= 0x0C00; j += 0x0200) + JumpTable[0x2120 + i + j] = CAST_OP(0x2120); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x2160 + i + j] = CAST_OP(0x2160); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x21A0 + i + j] = CAST_OP(0x21A0); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + JumpTable[0x21E0 + i] = CAST_OP(0x21E0); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + JumpTable[0x23E0 + i] = CAST_OP(0x23E0); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + JumpTable[0x2EE0 + i] = CAST_OP(0x2EE0); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + JumpTable[0x2F20 + i] = CAST_OP(0x2F20); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x2028 + i + j] = CAST_OP(0x2028); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x20A8 + i + j] = CAST_OP(0x20A8); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0C00; j += 0x0200) + JumpTable[0x20E8 + i + j] = CAST_OP(0x20E8); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0C00; j += 0x0200) + JumpTable[0x2128 + i + j] = CAST_OP(0x2128); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x2168 + i + j] = CAST_OP(0x2168); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x21A8 + i + j] = CAST_OP(0x21A8); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x21E8 + i] = CAST_OP(0x21E8); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x23E8 + i] = CAST_OP(0x23E8); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x2EE8 + i] = CAST_OP(0x2EE8); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x2F28 + i] = CAST_OP(0x2F28); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x2030 + i + j] = CAST_OP(0x2030); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x20B0 + i + j] = CAST_OP(0x20B0); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0C00; j += 0x0200) + JumpTable[0x20F0 + i + j] = CAST_OP(0x20F0); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0C00; j += 0x0200) + JumpTable[0x2130 + i + j] = CAST_OP(0x2130); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x2170 + i + j] = CAST_OP(0x2170); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x21B0 + i + j] = CAST_OP(0x21B0); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x21F0 + i] = CAST_OP(0x21F0); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x23F0 + i] = CAST_OP(0x23F0); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x2EF0 + i] = CAST_OP(0x2EF0); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x2F30 + i] = CAST_OP(0x2F30); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x2038 + i] = CAST_OP(0x2038); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x20B8 + i] = CAST_OP(0x20B8); + for(i = 0x0000; i <= 0x0C00; i += 0x0200) + JumpTable[0x20F8 + i] = CAST_OP(0x20F8); + for(i = 0x0000; i <= 0x0C00; i += 0x0200) + JumpTable[0x2138 + i] = CAST_OP(0x2138); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x2178 + i] = CAST_OP(0x2178); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x21B8 + i] = CAST_OP(0x21B8); + JumpTable[0x21F8] = CAST_OP(0x21F8); + JumpTable[0x23F8] = CAST_OP(0x23F8); + JumpTable[0x2EF8] = CAST_OP(0x2EF8); + JumpTable[0x2F38] = CAST_OP(0x2F38); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x2039 + i] = CAST_OP(0x2039); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x20B9 + i] = CAST_OP(0x20B9); + for(i = 0x0000; i <= 0x0C00; i += 0x0200) + JumpTable[0x20F9 + i] = CAST_OP(0x20F9); + for(i = 0x0000; i <= 0x0C00; i += 0x0200) + JumpTable[0x2139 + i] = CAST_OP(0x2139); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x2179 + i] = CAST_OP(0x2179); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x21B9 + i] = CAST_OP(0x21B9); + JumpTable[0x21F9] = CAST_OP(0x21F9); + JumpTable[0x23F9] = CAST_OP(0x23F9); + JumpTable[0x2EF9] = CAST_OP(0x2EF9); + JumpTable[0x2F39] = CAST_OP(0x2F39); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x203A + i] = CAST_OP(0x203A); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x20BA + i] = CAST_OP(0x20BA); + for(i = 0x0000; i <= 0x0C00; i += 0x0200) + JumpTable[0x20FA + i] = CAST_OP(0x20FA); + for(i = 0x0000; i <= 0x0C00; i += 0x0200) + JumpTable[0x213A + i] = CAST_OP(0x213A); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x217A + i] = CAST_OP(0x217A); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x21BA + i] = CAST_OP(0x21BA); + JumpTable[0x21FA] = CAST_OP(0x21FA); + JumpTable[0x23FA] = CAST_OP(0x23FA); + JumpTable[0x2EFA] = CAST_OP(0x2EFA); + JumpTable[0x2F3A] = CAST_OP(0x2F3A); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x203B + i] = CAST_OP(0x203B); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x20BB + i] = CAST_OP(0x20BB); + for(i = 0x0000; i <= 0x0C00; i += 0x0200) + JumpTable[0x20FB + i] = CAST_OP(0x20FB); + for(i = 0x0000; i <= 0x0C00; i += 0x0200) + JumpTable[0x213B + i] = CAST_OP(0x213B); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x217B + i] = CAST_OP(0x217B); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x21BB + i] = CAST_OP(0x21BB); + JumpTable[0x21FB] = CAST_OP(0x21FB); + JumpTable[0x23FB] = CAST_OP(0x23FB); + JumpTable[0x2EFB] = CAST_OP(0x2EFB); + JumpTable[0x2F3B] = CAST_OP(0x2F3B); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x203C + i] = CAST_OP(0x203C); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x20BC + i] = CAST_OP(0x20BC); + for(i = 0x0000; i <= 0x0C00; i += 0x0200) + JumpTable[0x20FC + i] = CAST_OP(0x20FC); + for(i = 0x0000; i <= 0x0C00; i += 0x0200) + JumpTable[0x213C + i] = CAST_OP(0x213C); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x217C + i] = CAST_OP(0x217C); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x21BC + i] = CAST_OP(0x21BC); + JumpTable[0x21FC] = CAST_OP(0x21FC); + JumpTable[0x23FC] = CAST_OP(0x23FC); + JumpTable[0x2EFC] = CAST_OP(0x2EFC); + JumpTable[0x2F3C] = CAST_OP(0x2F3C); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x201F + i] = CAST_OP(0x201F); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x209F + i] = CAST_OP(0x209F); + for(i = 0x0000; i <= 0x0C00; i += 0x0200) + JumpTable[0x20DF + i] = CAST_OP(0x20DF); + for(i = 0x0000; i <= 0x0C00; i += 0x0200) + JumpTable[0x211F + i] = CAST_OP(0x211F); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x215F + i] = CAST_OP(0x215F); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x219F + i] = CAST_OP(0x219F); + JumpTable[0x21DF] = CAST_OP(0x21DF); + JumpTable[0x23DF] = CAST_OP(0x23DF); + JumpTable[0x2EDF] = CAST_OP(0x2EDF); + JumpTable[0x2F1F] = CAST_OP(0x2F1F); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x2027 + i] = CAST_OP(0x2027); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x20A7 + i] = CAST_OP(0x20A7); + for(i = 0x0000; i <= 0x0C00; i += 0x0200) + JumpTable[0x20E7 + i] = CAST_OP(0x20E7); + for(i = 0x0000; i <= 0x0C00; i += 0x0200) + JumpTable[0x2127 + i] = CAST_OP(0x2127); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x2167 + i] = CAST_OP(0x2167); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x21A7 + i] = CAST_OP(0x21A7); + JumpTable[0x21E7] = CAST_OP(0x21E7); + JumpTable[0x23E7] = CAST_OP(0x23E7); + JumpTable[0x2EE7] = CAST_OP(0x2EE7); + JumpTable[0x2F27] = CAST_OP(0x2F27); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x3000 + i + j] = CAST_OP(0x3000); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x3080 + i + j] = CAST_OP(0x3080); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0C00; j += 0x0200) + JumpTable[0x30C0 + i + j] = CAST_OP(0x30C0); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0C00; j += 0x0200) + JumpTable[0x3100 + i + j] = CAST_OP(0x3100); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x3140 + i + j] = CAST_OP(0x3140); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x3180 + i + j] = CAST_OP(0x3180); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x31C0 + i] = CAST_OP(0x31C0); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x33C0 + i] = CAST_OP(0x33C0); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x3EC0 + i] = CAST_OP(0x3EC0); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x3F00 + i] = CAST_OP(0x3F00); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x3008 + i + j] = CAST_OP(0x3008); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x3088 + i + j] = CAST_OP(0x3088); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0C00; j += 0x0200) + JumpTable[0x30C8 + i + j] = CAST_OP(0x30C8); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0C00; j += 0x0200) + JumpTable[0x3108 + i + j] = CAST_OP(0x3108); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x3148 + i + j] = CAST_OP(0x3148); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x3188 + i + j] = CAST_OP(0x3188); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x31C8 + i] = CAST_OP(0x31C8); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x33C8 + i] = CAST_OP(0x33C8); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x3EC8 + i] = CAST_OP(0x3EC8); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x3F08 + i] = CAST_OP(0x3F08); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x3010 + i + j] = CAST_OP(0x3010); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x3090 + i + j] = CAST_OP(0x3090); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0C00; j += 0x0200) + JumpTable[0x30D0 + i + j] = CAST_OP(0x30D0); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0C00; j += 0x0200) + JumpTable[0x3110 + i + j] = CAST_OP(0x3110); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x3150 + i + j] = CAST_OP(0x3150); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x3190 + i + j] = CAST_OP(0x3190); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x31D0 + i] = CAST_OP(0x31D0); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x33D0 + i] = CAST_OP(0x33D0); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x3ED0 + i] = CAST_OP(0x3ED0); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x3F10 + i] = CAST_OP(0x3F10); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x3018 + i + j] = CAST_OP(0x3018); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x3098 + i + j] = CAST_OP(0x3098); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + for(j = 0x0000; j <= 0x0C00; j += 0x0200) + JumpTable[0x30D8 + i + j] = CAST_OP(0x30D8); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + for(j = 0x0000; j <= 0x0C00; j += 0x0200) + JumpTable[0x3118 + i + j] = CAST_OP(0x3118); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x3158 + i + j] = CAST_OP(0x3158); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x3198 + i + j] = CAST_OP(0x3198); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + JumpTable[0x31D8 + i] = CAST_OP(0x31D8); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + JumpTable[0x33D8 + i] = CAST_OP(0x33D8); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + JumpTable[0x3ED8 + i] = CAST_OP(0x3ED8); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + JumpTable[0x3F18 + i] = CAST_OP(0x3F18); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x3020 + i + j] = CAST_OP(0x3020); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x30A0 + i + j] = CAST_OP(0x30A0); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + for(j = 0x0000; j <= 0x0C00; j += 0x0200) + JumpTable[0x30E0 + i + j] = CAST_OP(0x30E0); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + for(j = 0x0000; j <= 0x0C00; j += 0x0200) + JumpTable[0x3120 + i + j] = CAST_OP(0x3120); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x3160 + i + j] = CAST_OP(0x3160); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x31A0 + i + j] = CAST_OP(0x31A0); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + JumpTable[0x31E0 + i] = CAST_OP(0x31E0); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + JumpTable[0x33E0 + i] = CAST_OP(0x33E0); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + JumpTable[0x3EE0 + i] = CAST_OP(0x3EE0); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + JumpTable[0x3F20 + i] = CAST_OP(0x3F20); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x3028 + i + j] = CAST_OP(0x3028); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x30A8 + i + j] = CAST_OP(0x30A8); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0C00; j += 0x0200) + JumpTable[0x30E8 + i + j] = CAST_OP(0x30E8); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0C00; j += 0x0200) + JumpTable[0x3128 + i + j] = CAST_OP(0x3128); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x3168 + i + j] = CAST_OP(0x3168); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x31A8 + i + j] = CAST_OP(0x31A8); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x31E8 + i] = CAST_OP(0x31E8); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x33E8 + i] = CAST_OP(0x33E8); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x3EE8 + i] = CAST_OP(0x3EE8); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x3F28 + i] = CAST_OP(0x3F28); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x3030 + i + j] = CAST_OP(0x3030); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x30B0 + i + j] = CAST_OP(0x30B0); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0C00; j += 0x0200) + JumpTable[0x30F0 + i + j] = CAST_OP(0x30F0); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0C00; j += 0x0200) + JumpTable[0x3130 + i + j] = CAST_OP(0x3130); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x3170 + i + j] = CAST_OP(0x3170); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x31B0 + i + j] = CAST_OP(0x31B0); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x31F0 + i] = CAST_OP(0x31F0); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x33F0 + i] = CAST_OP(0x33F0); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x3EF0 + i] = CAST_OP(0x3EF0); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x3F30 + i] = CAST_OP(0x3F30); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x3038 + i] = CAST_OP(0x3038); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x30B8 + i] = CAST_OP(0x30B8); + for(i = 0x0000; i <= 0x0C00; i += 0x0200) + JumpTable[0x30F8 + i] = CAST_OP(0x30F8); + for(i = 0x0000; i <= 0x0C00; i += 0x0200) + JumpTable[0x3138 + i] = CAST_OP(0x3138); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x3178 + i] = CAST_OP(0x3178); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x31B8 + i] = CAST_OP(0x31B8); + JumpTable[0x31F8] = CAST_OP(0x31F8); + JumpTable[0x33F8] = CAST_OP(0x33F8); + JumpTable[0x3EF8] = CAST_OP(0x3EF8); + JumpTable[0x3F38] = CAST_OP(0x3F38); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x3039 + i] = CAST_OP(0x3039); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x30B9 + i] = CAST_OP(0x30B9); + for(i = 0x0000; i <= 0x0C00; i += 0x0200) + JumpTable[0x30F9 + i] = CAST_OP(0x30F9); + for(i = 0x0000; i <= 0x0C00; i += 0x0200) + JumpTable[0x3139 + i] = CAST_OP(0x3139); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x3179 + i] = CAST_OP(0x3179); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x31B9 + i] = CAST_OP(0x31B9); + JumpTable[0x31F9] = CAST_OP(0x31F9); + JumpTable[0x33F9] = CAST_OP(0x33F9); + JumpTable[0x3EF9] = CAST_OP(0x3EF9); + JumpTable[0x3F39] = CAST_OP(0x3F39); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x303A + i] = CAST_OP(0x303A); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x30BA + i] = CAST_OP(0x30BA); + for(i = 0x0000; i <= 0x0C00; i += 0x0200) + JumpTable[0x30FA + i] = CAST_OP(0x30FA); + for(i = 0x0000; i <= 0x0C00; i += 0x0200) + JumpTable[0x313A + i] = CAST_OP(0x313A); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x317A + i] = CAST_OP(0x317A); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x31BA + i] = CAST_OP(0x31BA); + JumpTable[0x31FA] = CAST_OP(0x31FA); + JumpTable[0x33FA] = CAST_OP(0x33FA); + JumpTable[0x3EFA] = CAST_OP(0x3EFA); + JumpTable[0x3F3A] = CAST_OP(0x3F3A); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x303B + i] = CAST_OP(0x303B); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x30BB + i] = CAST_OP(0x30BB); + for(i = 0x0000; i <= 0x0C00; i += 0x0200) + JumpTable[0x30FB + i] = CAST_OP(0x30FB); + for(i = 0x0000; i <= 0x0C00; i += 0x0200) + JumpTable[0x313B + i] = CAST_OP(0x313B); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x317B + i] = CAST_OP(0x317B); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x31BB + i] = CAST_OP(0x31BB); + JumpTable[0x31FB] = CAST_OP(0x31FB); + JumpTable[0x33FB] = CAST_OP(0x33FB); + JumpTable[0x3EFB] = CAST_OP(0x3EFB); + JumpTable[0x3F3B] = CAST_OP(0x3F3B); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x303C + i] = CAST_OP(0x303C); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x30BC + i] = CAST_OP(0x30BC); + for(i = 0x0000; i <= 0x0C00; i += 0x0200) + JumpTable[0x30FC + i] = CAST_OP(0x30FC); + for(i = 0x0000; i <= 0x0C00; i += 0x0200) + JumpTable[0x313C + i] = CAST_OP(0x313C); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x317C + i] = CAST_OP(0x317C); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x31BC + i] = CAST_OP(0x31BC); + JumpTable[0x31FC] = CAST_OP(0x31FC); + JumpTable[0x33FC] = CAST_OP(0x33FC); + JumpTable[0x3EFC] = CAST_OP(0x3EFC); + JumpTable[0x3F3C] = CAST_OP(0x3F3C); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x301F + i] = CAST_OP(0x301F); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x309F + i] = CAST_OP(0x309F); + for(i = 0x0000; i <= 0x0C00; i += 0x0200) + JumpTable[0x30DF + i] = CAST_OP(0x30DF); + for(i = 0x0000; i <= 0x0C00; i += 0x0200) + JumpTable[0x311F + i] = CAST_OP(0x311F); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x315F + i] = CAST_OP(0x315F); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x319F + i] = CAST_OP(0x319F); + JumpTable[0x31DF] = CAST_OP(0x31DF); + JumpTable[0x33DF] = CAST_OP(0x33DF); + JumpTable[0x3EDF] = CAST_OP(0x3EDF); + JumpTable[0x3F1F] = CAST_OP(0x3F1F); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x3027 + i] = CAST_OP(0x3027); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x30A7 + i] = CAST_OP(0x30A7); + for(i = 0x0000; i <= 0x0C00; i += 0x0200) + JumpTable[0x30E7 + i] = CAST_OP(0x30E7); + for(i = 0x0000; i <= 0x0C00; i += 0x0200) + JumpTable[0x3127 + i] = CAST_OP(0x3127); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x3167 + i] = CAST_OP(0x3167); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x31A7 + i] = CAST_OP(0x31A7); + JumpTable[0x31E7] = CAST_OP(0x31E7); + JumpTable[0x33E7] = CAST_OP(0x33E7); + JumpTable[0x3EE7] = CAST_OP(0x3EE7); + JumpTable[0x3F27] = CAST_OP(0x3F27); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x2040 + i + j] = CAST_OP(0x2040); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x2048 + i + j] = CAST_OP(0x2048); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x2050 + i + j] = CAST_OP(0x2050); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x2058 + i + j] = CAST_OP(0x2058); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x2060 + i + j] = CAST_OP(0x2060); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x2068 + i + j] = CAST_OP(0x2068); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x2070 + i + j] = CAST_OP(0x2070); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x2078 + i] = CAST_OP(0x2078); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x2079 + i] = CAST_OP(0x2079); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x207A + i] = CAST_OP(0x207A); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x207B + i] = CAST_OP(0x207B); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x207C + i] = CAST_OP(0x207C); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x205F + i] = CAST_OP(0x205F); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x2067 + i] = CAST_OP(0x2067); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x3040 + i + j] = CAST_OP(0x3040); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x3048 + i + j] = CAST_OP(0x3048); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x3050 + i + j] = CAST_OP(0x3050); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x3058 + i + j] = CAST_OP(0x3058); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x3060 + i + j] = CAST_OP(0x3060); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x3068 + i + j] = CAST_OP(0x3068); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x3070 + i + j] = CAST_OP(0x3070); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x3078 + i] = CAST_OP(0x3078); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x3079 + i] = CAST_OP(0x3079); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x307A + i] = CAST_OP(0x307A); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x307B + i] = CAST_OP(0x307B); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x307C + i] = CAST_OP(0x307C); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x305F + i] = CAST_OP(0x305F); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x3067 + i] = CAST_OP(0x3067); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x4000 + i] = CAST_OP(0x4000); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x4010 + i] = CAST_OP(0x4010); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + JumpTable[0x4018 + i] = CAST_OP(0x4018); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + JumpTable[0x4020 + i] = CAST_OP(0x4020); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x4028 + i] = CAST_OP(0x4028); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x4030 + i] = CAST_OP(0x4030); + JumpTable[0x4038] = CAST_OP(0x4038); + JumpTable[0x4039] = CAST_OP(0x4039); + JumpTable[0x401F] = CAST_OP(0x401F); + JumpTable[0x4027] = CAST_OP(0x4027); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x4040 + i] = CAST_OP(0x4040); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x4050 + i] = CAST_OP(0x4050); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + JumpTable[0x4058 + i] = CAST_OP(0x4058); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + JumpTable[0x4060 + i] = CAST_OP(0x4060); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x4068 + i] = CAST_OP(0x4068); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x4070 + i] = CAST_OP(0x4070); + JumpTable[0x4078] = CAST_OP(0x4078); + JumpTable[0x4079] = CAST_OP(0x4079); + JumpTable[0x405F] = CAST_OP(0x405F); + JumpTable[0x4067] = CAST_OP(0x4067); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x4080 + i] = CAST_OP(0x4080); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x4090 + i] = CAST_OP(0x4090); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + JumpTable[0x4098 + i] = CAST_OP(0x4098); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + JumpTable[0x40A0 + i] = CAST_OP(0x40A0); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x40A8 + i] = CAST_OP(0x40A8); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x40B0 + i] = CAST_OP(0x40B0); + JumpTable[0x40B8] = CAST_OP(0x40B8); + JumpTable[0x40B9] = CAST_OP(0x40B9); + JumpTable[0x409F] = CAST_OP(0x409F); + JumpTable[0x40A7] = CAST_OP(0x40A7); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x4200 + i] = CAST_OP(0x4200); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x4210 + i] = CAST_OP(0x4210); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + JumpTable[0x4218 + i] = CAST_OP(0x4218); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + JumpTable[0x4220 + i] = CAST_OP(0x4220); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x4228 + i] = CAST_OP(0x4228); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x4230 + i] = CAST_OP(0x4230); + JumpTable[0x4238] = CAST_OP(0x4238); + JumpTable[0x4239] = CAST_OP(0x4239); + JumpTable[0x421F] = CAST_OP(0x421F); + JumpTable[0x4227] = CAST_OP(0x4227); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x4240 + i] = CAST_OP(0x4240); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x4250 + i] = CAST_OP(0x4250); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + JumpTable[0x4258 + i] = CAST_OP(0x4258); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + JumpTable[0x4260 + i] = CAST_OP(0x4260); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x4268 + i] = CAST_OP(0x4268); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x4270 + i] = CAST_OP(0x4270); + JumpTable[0x4278] = CAST_OP(0x4278); + JumpTable[0x4279] = CAST_OP(0x4279); + JumpTable[0x425F] = CAST_OP(0x425F); + JumpTable[0x4267] = CAST_OP(0x4267); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x4280 + i] = CAST_OP(0x4280); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x4290 + i] = CAST_OP(0x4290); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + JumpTable[0x4298 + i] = CAST_OP(0x4298); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + JumpTable[0x42A0 + i] = CAST_OP(0x42A0); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x42A8 + i] = CAST_OP(0x42A8); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x42B0 + i] = CAST_OP(0x42B0); + JumpTable[0x42B8] = CAST_OP(0x42B8); + JumpTable[0x42B9] = CAST_OP(0x42B9); + JumpTable[0x429F] = CAST_OP(0x429F); + JumpTable[0x42A7] = CAST_OP(0x42A7); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x4400 + i] = CAST_OP(0x4400); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x4410 + i] = CAST_OP(0x4410); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + JumpTable[0x4418 + i] = CAST_OP(0x4418); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + JumpTable[0x4420 + i] = CAST_OP(0x4420); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x4428 + i] = CAST_OP(0x4428); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x4430 + i] = CAST_OP(0x4430); + JumpTable[0x4438] = CAST_OP(0x4438); + JumpTable[0x4439] = CAST_OP(0x4439); + JumpTable[0x441F] = CAST_OP(0x441F); + JumpTable[0x4427] = CAST_OP(0x4427); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x4440 + i] = CAST_OP(0x4440); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x4450 + i] = CAST_OP(0x4450); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + JumpTable[0x4458 + i] = CAST_OP(0x4458); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + JumpTable[0x4460 + i] = CAST_OP(0x4460); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x4468 + i] = CAST_OP(0x4468); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x4470 + i] = CAST_OP(0x4470); + JumpTable[0x4478] = CAST_OP(0x4478); + JumpTable[0x4479] = CAST_OP(0x4479); + JumpTable[0x445F] = CAST_OP(0x445F); + JumpTable[0x4467] = CAST_OP(0x4467); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x4480 + i] = CAST_OP(0x4480); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x4490 + i] = CAST_OP(0x4490); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + JumpTable[0x4498 + i] = CAST_OP(0x4498); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + JumpTable[0x44A0 + i] = CAST_OP(0x44A0); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x44A8 + i] = CAST_OP(0x44A8); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x44B0 + i] = CAST_OP(0x44B0); + JumpTable[0x44B8] = CAST_OP(0x44B8); + JumpTable[0x44B9] = CAST_OP(0x44B9); + JumpTable[0x449F] = CAST_OP(0x449F); + JumpTable[0x44A7] = CAST_OP(0x44A7); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x4600 + i] = CAST_OP(0x4600); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x4610 + i] = CAST_OP(0x4610); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + JumpTable[0x4618 + i] = CAST_OP(0x4618); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + JumpTable[0x4620 + i] = CAST_OP(0x4620); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x4628 + i] = CAST_OP(0x4628); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x4630 + i] = CAST_OP(0x4630); + JumpTable[0x4638] = CAST_OP(0x4638); + JumpTable[0x4639] = CAST_OP(0x4639); + JumpTable[0x461F] = CAST_OP(0x461F); + JumpTable[0x4627] = CAST_OP(0x4627); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x4640 + i] = CAST_OP(0x4640); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x4650 + i] = CAST_OP(0x4650); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + JumpTable[0x4658 + i] = CAST_OP(0x4658); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + JumpTable[0x4660 + i] = CAST_OP(0x4660); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x4668 + i] = CAST_OP(0x4668); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x4670 + i] = CAST_OP(0x4670); + JumpTable[0x4678] = CAST_OP(0x4678); + JumpTable[0x4679] = CAST_OP(0x4679); + JumpTable[0x465F] = CAST_OP(0x465F); + JumpTable[0x4667] = CAST_OP(0x4667); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x4680 + i] = CAST_OP(0x4680); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x4690 + i] = CAST_OP(0x4690); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + JumpTable[0x4698 + i] = CAST_OP(0x4698); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + JumpTable[0x46A0 + i] = CAST_OP(0x46A0); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x46A8 + i] = CAST_OP(0x46A8); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x46B0 + i] = CAST_OP(0x46B0); + JumpTable[0x46B8] = CAST_OP(0x46B8); + JumpTable[0x46B9] = CAST_OP(0x46B9); + JumpTable[0x469F] = CAST_OP(0x469F); + JumpTable[0x46A7] = CAST_OP(0x46A7); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x40C0 + i] = CAST_OP(0x40C0); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x40D0 + i] = CAST_OP(0x40D0); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + JumpTable[0x40D8 + i] = CAST_OP(0x40D8); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + JumpTable[0x40E0 + i] = CAST_OP(0x40E0); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x40E8 + i] = CAST_OP(0x40E8); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x40F0 + i] = CAST_OP(0x40F0); + JumpTable[0x40F8] = CAST_OP(0x40F8); + JumpTable[0x40F9] = CAST_OP(0x40F9); + JumpTable[0x40DF] = CAST_OP(0x40DF); + JumpTable[0x40E7] = CAST_OP(0x40E7); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x44C0 + i] = CAST_OP(0x44C0); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x44D0 + i] = CAST_OP(0x44D0); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + JumpTable[0x44D8 + i] = CAST_OP(0x44D8); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + JumpTable[0x44E0 + i] = CAST_OP(0x44E0); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x44E8 + i] = CAST_OP(0x44E8); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x44F0 + i] = CAST_OP(0x44F0); + JumpTable[0x44F8] = CAST_OP(0x44F8); + JumpTable[0x44F9] = CAST_OP(0x44F9); + JumpTable[0x44FA] = CAST_OP(0x44FA); + JumpTable[0x44FB] = CAST_OP(0x44FB); + JumpTable[0x44FC] = CAST_OP(0x44FC); + JumpTable[0x44DF] = CAST_OP(0x44DF); + JumpTable[0x44E7] = CAST_OP(0x44E7); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x46C0 + i] = CAST_OP(0x46C0); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x46D0 + i] = CAST_OP(0x46D0); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + JumpTable[0x46D8 + i] = CAST_OP(0x46D8); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + JumpTable[0x46E0 + i] = CAST_OP(0x46E0); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x46E8 + i] = CAST_OP(0x46E8); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x46F0 + i] = CAST_OP(0x46F0); + JumpTable[0x46F8] = CAST_OP(0x46F8); + JumpTable[0x46F9] = CAST_OP(0x46F9); + JumpTable[0x46FA] = CAST_OP(0x46FA); + JumpTable[0x46FB] = CAST_OP(0x46FB); + JumpTable[0x46FC] = CAST_OP(0x46FC); + JumpTable[0x46DF] = CAST_OP(0x46DF); + JumpTable[0x46E7] = CAST_OP(0x46E7); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x4800 + i] = CAST_OP(0x4800); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x4810 + i] = CAST_OP(0x4810); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + JumpTable[0x4818 + i] = CAST_OP(0x4818); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + JumpTable[0x4820 + i] = CAST_OP(0x4820); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x4828 + i] = CAST_OP(0x4828); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x4830 + i] = CAST_OP(0x4830); + JumpTable[0x4838] = CAST_OP(0x4838); + JumpTable[0x4839] = CAST_OP(0x4839); + JumpTable[0x481F] = CAST_OP(0x481F); + JumpTable[0x4827] = CAST_OP(0x4827); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x4850 + i] = CAST_OP(0x4850); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x4868 + i] = CAST_OP(0x4868); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x4870 + i] = CAST_OP(0x4870); + JumpTable[0x4878] = CAST_OP(0x4878); + JumpTable[0x4879] = CAST_OP(0x4879); + JumpTable[0x487A] = CAST_OP(0x487A); + JumpTable[0x487B] = CAST_OP(0x487B); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x4840 + i] = CAST_OP(0x4840); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x4890 + i] = CAST_OP(0x4890); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + JumpTable[0x48A0 + i] = CAST_OP(0x48A0); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x48A8 + i] = CAST_OP(0x48A8); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x48B0 + i] = CAST_OP(0x48B0); + JumpTable[0x48B8] = CAST_OP(0x48B8); + JumpTable[0x48B9] = CAST_OP(0x48B9); + JumpTable[0x48A7] = CAST_OP(0x48A7); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x48D0 + i] = CAST_OP(0x48D0); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + JumpTable[0x48E0 + i] = CAST_OP(0x48E0); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x48E8 + i] = CAST_OP(0x48E8); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x48F0 + i] = CAST_OP(0x48F0); + JumpTable[0x48F8] = CAST_OP(0x48F8); + JumpTable[0x48F9] = CAST_OP(0x48F9); + JumpTable[0x48E7] = CAST_OP(0x48E7); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x4880 + i] = CAST_OP(0x4880); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x48C0 + i] = CAST_OP(0x48C0); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x4A00 + i] = CAST_OP(0x4A00); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x4A10 + i] = CAST_OP(0x4A10); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + JumpTable[0x4A18 + i] = CAST_OP(0x4A18); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + JumpTable[0x4A20 + i] = CAST_OP(0x4A20); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x4A28 + i] = CAST_OP(0x4A28); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x4A30 + i] = CAST_OP(0x4A30); + JumpTable[0x4A38] = CAST_OP(0x4A38); + JumpTable[0x4A39] = CAST_OP(0x4A39); + JumpTable[0x4A1F] = CAST_OP(0x4A1F); + JumpTable[0x4A27] = CAST_OP(0x4A27); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x4A40 + i] = CAST_OP(0x4A40); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x4A50 + i] = CAST_OP(0x4A50); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + JumpTable[0x4A58 + i] = CAST_OP(0x4A58); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + JumpTable[0x4A60 + i] = CAST_OP(0x4A60); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x4A68 + i] = CAST_OP(0x4A68); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x4A70 + i] = CAST_OP(0x4A70); + JumpTable[0x4A78] = CAST_OP(0x4A78); + JumpTable[0x4A79] = CAST_OP(0x4A79); + JumpTable[0x4A5F] = CAST_OP(0x4A5F); + JumpTable[0x4A67] = CAST_OP(0x4A67); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x4A80 + i] = CAST_OP(0x4A80); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x4A90 + i] = CAST_OP(0x4A90); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + JumpTable[0x4A98 + i] = CAST_OP(0x4A98); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + JumpTable[0x4AA0 + i] = CAST_OP(0x4AA0); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x4AA8 + i] = CAST_OP(0x4AA8); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x4AB0 + i] = CAST_OP(0x4AB0); + JumpTable[0x4AB8] = CAST_OP(0x4AB8); + JumpTable[0x4AB9] = CAST_OP(0x4AB9); + JumpTable[0x4A9F] = CAST_OP(0x4A9F); + JumpTable[0x4AA7] = CAST_OP(0x4AA7); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x4AC0 + i] = CAST_OP(0x4AC0); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x4AD0 + i] = CAST_OP(0x4AD0); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + JumpTable[0x4AD8 + i] = CAST_OP(0x4AD8); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + JumpTable[0x4AE0 + i] = CAST_OP(0x4AE0); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x4AE8 + i] = CAST_OP(0x4AE8); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x4AF0 + i] = CAST_OP(0x4AF0); + JumpTable[0x4AF8] = CAST_OP(0x4AF8); + JumpTable[0x4AF9] = CAST_OP(0x4AF9); + JumpTable[0x4ADF] = CAST_OP(0x4ADF); + JumpTable[0x4AE7] = CAST_OP(0x4AE7); + JumpTable[0x4AFC] = CAST_OP(0x4AFC); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x4C90 + i] = CAST_OP(0x4C90); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + JumpTable[0x4C98 + i] = CAST_OP(0x4C98); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x4CA8 + i] = CAST_OP(0x4CA8); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x4CB0 + i] = CAST_OP(0x4CB0); + JumpTable[0x4CB8] = CAST_OP(0x4CB8); + JumpTable[0x4CB9] = CAST_OP(0x4CB9); + JumpTable[0x4CBA] = CAST_OP(0x4CBA); + JumpTable[0x4CBB] = CAST_OP(0x4CBB); + JumpTable[0x4C9F] = CAST_OP(0x4C9F); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x4CD0 + i] = CAST_OP(0x4CD0); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + JumpTable[0x4CD8 + i] = CAST_OP(0x4CD8); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x4CE8 + i] = CAST_OP(0x4CE8); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x4CF0 + i] = CAST_OP(0x4CF0); + JumpTable[0x4CF8] = CAST_OP(0x4CF8); + JumpTable[0x4CF9] = CAST_OP(0x4CF9); + JumpTable[0x4CFA] = CAST_OP(0x4CFA); + JumpTable[0x4CFB] = CAST_OP(0x4CFB); + JumpTable[0x4CDF] = CAST_OP(0x4CDF); + for(i = 0x0000; i <= 0x000F; i += 0x0001) + JumpTable[0x4E40 + i] = CAST_OP(0x4E40); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x4E50 + i] = CAST_OP(0x4E50); + JumpTable[0x4E57] = CAST_OP(0x4E57); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x4E58 + i] = CAST_OP(0x4E58); + JumpTable[0x4E5F] = CAST_OP(0x4E5F); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x4E60 + i] = CAST_OP(0x4E60); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x4E68 + i] = CAST_OP(0x4E68); + JumpTable[0x4E70] = CAST_OP(0x4E70); + JumpTable[0x4E71] = CAST_OP(0x4E71); + JumpTable[0x4E72] = CAST_OP(0x4E72); + JumpTable[0x4E73] = CAST_OP(0x4E73); + JumpTable[0x4E75] = CAST_OP(0x4E75); + JumpTable[0x4E76] = CAST_OP(0x4E76); + JumpTable[0x4E77] = CAST_OP(0x4E77); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x4E90 + i] = CAST_OP(0x4E90); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x4EA8 + i] = CAST_OP(0x4EA8); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x4EB0 + i] = CAST_OP(0x4EB0); + JumpTable[0x4EB8] = CAST_OP(0x4EB8); + JumpTable[0x4EB9] = CAST_OP(0x4EB9); + JumpTable[0x4EBA] = CAST_OP(0x4EBA); + JumpTable[0x4EBB] = CAST_OP(0x4EBB); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x4ED0 + i] = CAST_OP(0x4ED0); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x4EE8 + i] = CAST_OP(0x4EE8); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x4EF0 + i] = CAST_OP(0x4EF0); + JumpTable[0x4EF8] = CAST_OP(0x4EF8); + JumpTable[0x4EF9] = CAST_OP(0x4EF9); + JumpTable[0x4EFA] = CAST_OP(0x4EFA); + JumpTable[0x4EFB] = CAST_OP(0x4EFB); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x4180 + i + j] = CAST_OP(0x4180); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x4190 + i + j] = CAST_OP(0x4190); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x4198 + i + j] = CAST_OP(0x4198); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x41A0 + i + j] = CAST_OP(0x41A0); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x41A8 + i + j] = CAST_OP(0x41A8); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x41B0 + i + j] = CAST_OP(0x41B0); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x41B8 + i] = CAST_OP(0x41B8); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x41B9 + i] = CAST_OP(0x41B9); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x41BA + i] = CAST_OP(0x41BA); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x41BB + i] = CAST_OP(0x41BB); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x41BC + i] = CAST_OP(0x41BC); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x419F + i] = CAST_OP(0x419F); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x41A7 + i] = CAST_OP(0x41A7); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x41D0 + i + j] = CAST_OP(0x41D0); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x41E8 + i + j] = CAST_OP(0x41E8); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x41F0 + i + j] = CAST_OP(0x41F0); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x41F8 + i] = CAST_OP(0x41F8); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x41F9 + i] = CAST_OP(0x41F9); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x41FA + i] = CAST_OP(0x41FA); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x41FB + i] = CAST_OP(0x41FB); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x50C0 + i] = CAST_OP(0x50C0); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x51C0 + i] = CAST_OP(0x51C0); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x52C0 + i] = CAST_OP(0x52C0); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x53C0 + i] = CAST_OP(0x53C0); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x54C0 + i] = CAST_OP(0x54C0); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x55C0 + i] = CAST_OP(0x55C0); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x56C0 + i] = CAST_OP(0x56C0); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x57C0 + i] = CAST_OP(0x57C0); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x58C0 + i] = CAST_OP(0x58C0); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x59C0 + i] = CAST_OP(0x59C0); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x5AC0 + i] = CAST_OP(0x5AC0); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x5BC0 + i] = CAST_OP(0x5BC0); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x5CC0 + i] = CAST_OP(0x5CC0); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x5DC0 + i] = CAST_OP(0x5DC0); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x5EC0 + i] = CAST_OP(0x5EC0); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x5FC0 + i] = CAST_OP(0x5FC0); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x50D0 + i] = CAST_OP(0x50D0); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x51D0 + i] = CAST_OP(0x51D0); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x52D0 + i] = CAST_OP(0x52D0); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x53D0 + i] = CAST_OP(0x53D0); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x54D0 + i] = CAST_OP(0x54D0); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x55D0 + i] = CAST_OP(0x55D0); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x56D0 + i] = CAST_OP(0x56D0); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x57D0 + i] = CAST_OP(0x57D0); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x58D0 + i] = CAST_OP(0x58D0); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x59D0 + i] = CAST_OP(0x59D0); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x5AD0 + i] = CAST_OP(0x5AD0); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x5BD0 + i] = CAST_OP(0x5BD0); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x5CD0 + i] = CAST_OP(0x5CD0); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x5DD0 + i] = CAST_OP(0x5DD0); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x5ED0 + i] = CAST_OP(0x5ED0); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x5FD0 + i] = CAST_OP(0x5FD0); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + JumpTable[0x50D8 + i] = CAST_OP(0x50D8); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + JumpTable[0x51D8 + i] = CAST_OP(0x51D8); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + JumpTable[0x52D8 + i] = CAST_OP(0x52D8); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + JumpTable[0x53D8 + i] = CAST_OP(0x53D8); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + JumpTable[0x54D8 + i] = CAST_OP(0x54D8); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + JumpTable[0x55D8 + i] = CAST_OP(0x55D8); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + JumpTable[0x56D8 + i] = CAST_OP(0x56D8); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + JumpTable[0x57D8 + i] = CAST_OP(0x57D8); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + JumpTable[0x58D8 + i] = CAST_OP(0x58D8); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + JumpTable[0x59D8 + i] = CAST_OP(0x59D8); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + JumpTable[0x5AD8 + i] = CAST_OP(0x5AD8); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + JumpTable[0x5BD8 + i] = CAST_OP(0x5BD8); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + JumpTable[0x5CD8 + i] = CAST_OP(0x5CD8); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + JumpTable[0x5DD8 + i] = CAST_OP(0x5DD8); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + JumpTable[0x5ED8 + i] = CAST_OP(0x5ED8); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + JumpTable[0x5FD8 + i] = CAST_OP(0x5FD8); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + JumpTable[0x50E0 + i] = CAST_OP(0x50E0); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + JumpTable[0x51E0 + i] = CAST_OP(0x51E0); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + JumpTable[0x52E0 + i] = CAST_OP(0x52E0); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + JumpTable[0x53E0 + i] = CAST_OP(0x53E0); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + JumpTable[0x54E0 + i] = CAST_OP(0x54E0); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + JumpTable[0x55E0 + i] = CAST_OP(0x55E0); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + JumpTable[0x56E0 + i] = CAST_OP(0x56E0); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + JumpTable[0x57E0 + i] = CAST_OP(0x57E0); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + JumpTable[0x58E0 + i] = CAST_OP(0x58E0); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + JumpTable[0x59E0 + i] = CAST_OP(0x59E0); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + JumpTable[0x5AE0 + i] = CAST_OP(0x5AE0); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + JumpTable[0x5BE0 + i] = CAST_OP(0x5BE0); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + JumpTable[0x5CE0 + i] = CAST_OP(0x5CE0); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + JumpTable[0x5DE0 + i] = CAST_OP(0x5DE0); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + JumpTable[0x5EE0 + i] = CAST_OP(0x5EE0); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + JumpTable[0x5FE0 + i] = CAST_OP(0x5FE0); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x50E8 + i] = CAST_OP(0x50E8); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x51E8 + i] = CAST_OP(0x51E8); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x52E8 + i] = CAST_OP(0x52E8); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x53E8 + i] = CAST_OP(0x53E8); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x54E8 + i] = CAST_OP(0x54E8); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x55E8 + i] = CAST_OP(0x55E8); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x56E8 + i] = CAST_OP(0x56E8); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x57E8 + i] = CAST_OP(0x57E8); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x58E8 + i] = CAST_OP(0x58E8); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x59E8 + i] = CAST_OP(0x59E8); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x5AE8 + i] = CAST_OP(0x5AE8); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x5BE8 + i] = CAST_OP(0x5BE8); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x5CE8 + i] = CAST_OP(0x5CE8); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x5DE8 + i] = CAST_OP(0x5DE8); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x5EE8 + i] = CAST_OP(0x5EE8); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x5FE8 + i] = CAST_OP(0x5FE8); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x50F0 + i] = CAST_OP(0x50F0); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x51F0 + i] = CAST_OP(0x51F0); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x52F0 + i] = CAST_OP(0x52F0); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x53F0 + i] = CAST_OP(0x53F0); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x54F0 + i] = CAST_OP(0x54F0); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x55F0 + i] = CAST_OP(0x55F0); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x56F0 + i] = CAST_OP(0x56F0); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x57F0 + i] = CAST_OP(0x57F0); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x58F0 + i] = CAST_OP(0x58F0); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x59F0 + i] = CAST_OP(0x59F0); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x5AF0 + i] = CAST_OP(0x5AF0); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x5BF0 + i] = CAST_OP(0x5BF0); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x5CF0 + i] = CAST_OP(0x5CF0); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x5DF0 + i] = CAST_OP(0x5DF0); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x5EF0 + i] = CAST_OP(0x5EF0); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x5FF0 + i] = CAST_OP(0x5FF0); + JumpTable[0x50F8] = CAST_OP(0x50F8); + JumpTable[0x51F8] = CAST_OP(0x51F8); + JumpTable[0x52F8] = CAST_OP(0x52F8); + JumpTable[0x53F8] = CAST_OP(0x53F8); + JumpTable[0x54F8] = CAST_OP(0x54F8); + JumpTable[0x55F8] = CAST_OP(0x55F8); + JumpTable[0x56F8] = CAST_OP(0x56F8); + JumpTable[0x57F8] = CAST_OP(0x57F8); + JumpTable[0x58F8] = CAST_OP(0x58F8); + JumpTable[0x59F8] = CAST_OP(0x59F8); + JumpTable[0x5AF8] = CAST_OP(0x5AF8); + JumpTable[0x5BF8] = CAST_OP(0x5BF8); + JumpTable[0x5CF8] = CAST_OP(0x5CF8); + JumpTable[0x5DF8] = CAST_OP(0x5DF8); + JumpTable[0x5EF8] = CAST_OP(0x5EF8); + JumpTable[0x5FF8] = CAST_OP(0x5FF8); + JumpTable[0x50F9] = CAST_OP(0x50F9); + JumpTable[0x51F9] = CAST_OP(0x51F9); + JumpTable[0x52F9] = CAST_OP(0x52F9); + JumpTable[0x53F9] = CAST_OP(0x53F9); + JumpTable[0x54F9] = CAST_OP(0x54F9); + JumpTable[0x55F9] = CAST_OP(0x55F9); + JumpTable[0x56F9] = CAST_OP(0x56F9); + JumpTable[0x57F9] = CAST_OP(0x57F9); + JumpTable[0x58F9] = CAST_OP(0x58F9); + JumpTable[0x59F9] = CAST_OP(0x59F9); + JumpTable[0x5AF9] = CAST_OP(0x5AF9); + JumpTable[0x5BF9] = CAST_OP(0x5BF9); + JumpTable[0x5CF9] = CAST_OP(0x5CF9); + JumpTable[0x5DF9] = CAST_OP(0x5DF9); + JumpTable[0x5EF9] = CAST_OP(0x5EF9); + JumpTable[0x5FF9] = CAST_OP(0x5FF9); + JumpTable[0x50DF] = CAST_OP(0x50DF); + JumpTable[0x51DF] = CAST_OP(0x51DF); + JumpTable[0x52DF] = CAST_OP(0x52DF); + JumpTable[0x53DF] = CAST_OP(0x53DF); + JumpTable[0x54DF] = CAST_OP(0x54DF); + JumpTable[0x55DF] = CAST_OP(0x55DF); + JumpTable[0x56DF] = CAST_OP(0x56DF); + JumpTable[0x57DF] = CAST_OP(0x57DF); + JumpTable[0x58DF] = CAST_OP(0x58DF); + JumpTable[0x59DF] = CAST_OP(0x59DF); + JumpTable[0x5ADF] = CAST_OP(0x5ADF); + JumpTable[0x5BDF] = CAST_OP(0x5BDF); + JumpTable[0x5CDF] = CAST_OP(0x5CDF); + JumpTable[0x5DDF] = CAST_OP(0x5DDF); + JumpTable[0x5EDF] = CAST_OP(0x5EDF); + JumpTable[0x5FDF] = CAST_OP(0x5FDF); + JumpTable[0x50E7] = CAST_OP(0x50E7); + JumpTable[0x51E7] = CAST_OP(0x51E7); + JumpTable[0x52E7] = CAST_OP(0x52E7); + JumpTable[0x53E7] = CAST_OP(0x53E7); + JumpTable[0x54E7] = CAST_OP(0x54E7); + JumpTable[0x55E7] = CAST_OP(0x55E7); + JumpTable[0x56E7] = CAST_OP(0x56E7); + JumpTable[0x57E7] = CAST_OP(0x57E7); + JumpTable[0x58E7] = CAST_OP(0x58E7); + JumpTable[0x59E7] = CAST_OP(0x59E7); + JumpTable[0x5AE7] = CAST_OP(0x5AE7); + JumpTable[0x5BE7] = CAST_OP(0x5BE7); + JumpTable[0x5CE7] = CAST_OP(0x5CE7); + JumpTable[0x5DE7] = CAST_OP(0x5DE7); + JumpTable[0x5EE7] = CAST_OP(0x5EE7); + JumpTable[0x5FE7] = CAST_OP(0x5FE7); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x50C8 + i] = CAST_OP(0x50C8); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x51C8 + i] = CAST_OP(0x51C8); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x52C8 + i] = CAST_OP(0x52C8); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x53C8 + i] = CAST_OP(0x53C8); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x54C8 + i] = CAST_OP(0x54C8); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x55C8 + i] = CAST_OP(0x55C8); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x56C8 + i] = CAST_OP(0x56C8); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x57C8 + i] = CAST_OP(0x57C8); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x58C8 + i] = CAST_OP(0x58C8); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x59C8 + i] = CAST_OP(0x59C8); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x5AC8 + i] = CAST_OP(0x5AC8); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x5BC8 + i] = CAST_OP(0x5BC8); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x5CC8 + i] = CAST_OP(0x5CC8); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x5DC8 + i] = CAST_OP(0x5DC8); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x5EC8 + i] = CAST_OP(0x5EC8); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0x5FC8 + i] = CAST_OP(0x5FC8); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x5000 + i + j] = CAST_OP(0x5000); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x5010 + i + j] = CAST_OP(0x5010); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x5018 + i + j] = CAST_OP(0x5018); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x5020 + i + j] = CAST_OP(0x5020); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x5028 + i + j] = CAST_OP(0x5028); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x5030 + i + j] = CAST_OP(0x5030); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x5038 + i] = CAST_OP(0x5038); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x5039 + i] = CAST_OP(0x5039); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x501F + i] = CAST_OP(0x501F); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x5027 + i] = CAST_OP(0x5027); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x5040 + i + j] = CAST_OP(0x5040); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x5048 + i + j] = CAST_OP(0x5048); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x5050 + i + j] = CAST_OP(0x5050); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x5058 + i + j] = CAST_OP(0x5058); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x5060 + i + j] = CAST_OP(0x5060); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x5068 + i + j] = CAST_OP(0x5068); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x5070 + i + j] = CAST_OP(0x5070); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x5078 + i] = CAST_OP(0x5078); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x5079 + i] = CAST_OP(0x5079); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x505F + i] = CAST_OP(0x505F); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x5067 + i] = CAST_OP(0x5067); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x5080 + i + j] = CAST_OP(0x5080); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x5088 + i + j] = CAST_OP(0x5088); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x5090 + i + j] = CAST_OP(0x5090); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x5098 + i + j] = CAST_OP(0x5098); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x50A0 + i + j] = CAST_OP(0x50A0); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x50A8 + i + j] = CAST_OP(0x50A8); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x50B0 + i + j] = CAST_OP(0x50B0); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x50B8 + i] = CAST_OP(0x50B8); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x50B9 + i] = CAST_OP(0x50B9); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x509F + i] = CAST_OP(0x509F); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x50A7 + i] = CAST_OP(0x50A7); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x5100 + i + j] = CAST_OP(0x5100); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x5110 + i + j] = CAST_OP(0x5110); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x5118 + i + j] = CAST_OP(0x5118); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x5120 + i + j] = CAST_OP(0x5120); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x5128 + i + j] = CAST_OP(0x5128); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x5130 + i + j] = CAST_OP(0x5130); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x5138 + i] = CAST_OP(0x5138); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x5139 + i] = CAST_OP(0x5139); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x511F + i] = CAST_OP(0x511F); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x5127 + i] = CAST_OP(0x5127); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x5140 + i + j] = CAST_OP(0x5140); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x5148 + i + j] = CAST_OP(0x5148); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x5150 + i + j] = CAST_OP(0x5150); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x5158 + i + j] = CAST_OP(0x5158); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x5160 + i + j] = CAST_OP(0x5160); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x5168 + i + j] = CAST_OP(0x5168); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x5170 + i + j] = CAST_OP(0x5170); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x5178 + i] = CAST_OP(0x5178); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x5179 + i] = CAST_OP(0x5179); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x515F + i] = CAST_OP(0x515F); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x5167 + i] = CAST_OP(0x5167); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x5180 + i + j] = CAST_OP(0x5180); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x5188 + i + j] = CAST_OP(0x5188); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x5190 + i + j] = CAST_OP(0x5190); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x5198 + i + j] = CAST_OP(0x5198); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x51A0 + i + j] = CAST_OP(0x51A0); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x51A8 + i + j] = CAST_OP(0x51A8); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x51B0 + i + j] = CAST_OP(0x51B0); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x51B8 + i] = CAST_OP(0x51B8); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x51B9 + i] = CAST_OP(0x51B9); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x519F + i] = CAST_OP(0x519F); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x51A7 + i] = CAST_OP(0x51A7); + for(i = 0x0001; i <= 0x00FF; i += 0x0001) + JumpTable[0x6200 + i] = CAST_OP(0x6201); + for(i = 0x0001; i <= 0x00FF; i += 0x0001) + JumpTable[0x6300 + i] = CAST_OP(0x6301); + for(i = 0x0001; i <= 0x00FF; i += 0x0001) + JumpTable[0x6400 + i] = CAST_OP(0x6401); + for(i = 0x0001; i <= 0x00FF; i += 0x0001) + JumpTable[0x6500 + i] = CAST_OP(0x6501); + for(i = 0x0001; i <= 0x00FF; i += 0x0001) + JumpTable[0x6600 + i] = CAST_OP(0x6601); + for(i = 0x0001; i <= 0x00FF; i += 0x0001) + JumpTable[0x6700 + i] = CAST_OP(0x6701); + for(i = 0x0001; i <= 0x00FF; i += 0x0001) + JumpTable[0x6800 + i] = CAST_OP(0x6801); + for(i = 0x0001; i <= 0x00FF; i += 0x0001) + JumpTable[0x6900 + i] = CAST_OP(0x6901); + for(i = 0x0001; i <= 0x00FF; i += 0x0001) + JumpTable[0x6A00 + i] = CAST_OP(0x6A01); + for(i = 0x0001; i <= 0x00FF; i += 0x0001) + JumpTable[0x6B00 + i] = CAST_OP(0x6B01); + for(i = 0x0001; i <= 0x00FF; i += 0x0001) + JumpTable[0x6C00 + i] = CAST_OP(0x6C01); + for(i = 0x0001; i <= 0x00FF; i += 0x0001) + JumpTable[0x6D00 + i] = CAST_OP(0x6D01); + for(i = 0x0001; i <= 0x00FF; i += 0x0001) + JumpTable[0x6E00 + i] = CAST_OP(0x6E01); + for(i = 0x0001; i <= 0x00FF; i += 0x0001) + JumpTable[0x6F00 + i] = CAST_OP(0x6F01); + JumpTable[0x6200] = CAST_OP(0x6200); + JumpTable[0x6300] = CAST_OP(0x6300); + JumpTable[0x6400] = CAST_OP(0x6400); + JumpTable[0x6500] = CAST_OP(0x6500); + JumpTable[0x6600] = CAST_OP(0x6600); + JumpTable[0x6700] = CAST_OP(0x6700); + JumpTable[0x6800] = CAST_OP(0x6800); + JumpTable[0x6900] = CAST_OP(0x6900); + JumpTable[0x6A00] = CAST_OP(0x6A00); + JumpTable[0x6B00] = CAST_OP(0x6B00); + JumpTable[0x6C00] = CAST_OP(0x6C00); + JumpTable[0x6D00] = CAST_OP(0x6D00); + JumpTable[0x6E00] = CAST_OP(0x6E00); + JumpTable[0x6F00] = CAST_OP(0x6F00); + for(i = 0x0001; i <= 0x00FF; i += 0x0001) + JumpTable[0x6000 + i] = CAST_OP(0x6001); + JumpTable[0x6000] = CAST_OP(0x6000); + for(i = 0x0001; i <= 0x00FF; i += 0x0001) + JumpTable[0x6100 + i] = CAST_OP(0x6101); + JumpTable[0x6100] = CAST_OP(0x6100); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + for(j = 0x0000; j <= 0x00FF; j += 0x0001) + JumpTable[0x7000 + i + j] = CAST_OP(0x7000); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x8000 + i + j] = CAST_OP(0x8000); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x8010 + i + j] = CAST_OP(0x8010); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x8018 + i + j] = CAST_OP(0x8018); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x8020 + i + j] = CAST_OP(0x8020); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x8028 + i + j] = CAST_OP(0x8028); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x8030 + i + j] = CAST_OP(0x8030); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x8038 + i] = CAST_OP(0x8038); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x8039 + i] = CAST_OP(0x8039); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x803A + i] = CAST_OP(0x803A); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x803B + i] = CAST_OP(0x803B); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x803C + i] = CAST_OP(0x803C); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x801F + i] = CAST_OP(0x801F); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x8027 + i] = CAST_OP(0x8027); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x8040 + i + j] = CAST_OP(0x8040); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x8050 + i + j] = CAST_OP(0x8050); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x8058 + i + j] = CAST_OP(0x8058); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x8060 + i + j] = CAST_OP(0x8060); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x8068 + i + j] = CAST_OP(0x8068); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x8070 + i + j] = CAST_OP(0x8070); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x8078 + i] = CAST_OP(0x8078); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x8079 + i] = CAST_OP(0x8079); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x807A + i] = CAST_OP(0x807A); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x807B + i] = CAST_OP(0x807B); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x807C + i] = CAST_OP(0x807C); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x805F + i] = CAST_OP(0x805F); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x8067 + i] = CAST_OP(0x8067); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x8080 + i + j] = CAST_OP(0x8080); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x8090 + i + j] = CAST_OP(0x8090); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x8098 + i + j] = CAST_OP(0x8098); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x80A0 + i + j] = CAST_OP(0x80A0); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x80A8 + i + j] = CAST_OP(0x80A8); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x80B0 + i + j] = CAST_OP(0x80B0); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x80B8 + i] = CAST_OP(0x80B8); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x80B9 + i] = CAST_OP(0x80B9); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x80BA + i] = CAST_OP(0x80BA); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x80BB + i] = CAST_OP(0x80BB); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x80BC + i] = CAST_OP(0x80BC); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x809F + i] = CAST_OP(0x809F); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x80A7 + i] = CAST_OP(0x80A7); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x8110 + i + j] = CAST_OP(0x8110); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x8118 + i + j] = CAST_OP(0x8118); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x8120 + i + j] = CAST_OP(0x8120); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x8128 + i + j] = CAST_OP(0x8128); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x8130 + i + j] = CAST_OP(0x8130); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x8138 + i] = CAST_OP(0x8138); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x8139 + i] = CAST_OP(0x8139); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x811F + i] = CAST_OP(0x811F); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x8127 + i] = CAST_OP(0x8127); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x8150 + i + j] = CAST_OP(0x8150); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x8158 + i + j] = CAST_OP(0x8158); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x8160 + i + j] = CAST_OP(0x8160); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x8168 + i + j] = CAST_OP(0x8168); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x8170 + i + j] = CAST_OP(0x8170); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x8178 + i] = CAST_OP(0x8178); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x8179 + i] = CAST_OP(0x8179); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x815F + i] = CAST_OP(0x815F); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x8167 + i] = CAST_OP(0x8167); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x8190 + i + j] = CAST_OP(0x8190); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x8198 + i + j] = CAST_OP(0x8198); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x81A0 + i + j] = CAST_OP(0x81A0); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x81A8 + i + j] = CAST_OP(0x81A8); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x81B0 + i + j] = CAST_OP(0x81B0); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x81B8 + i] = CAST_OP(0x81B8); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x81B9 + i] = CAST_OP(0x81B9); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x819F + i] = CAST_OP(0x819F); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x81A7 + i] = CAST_OP(0x81A7); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x8100 + i + j] = CAST_OP(0x8100); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + for(j = 0x0000; j <= 0x0C00; j += 0x0200) + JumpTable[0x8108 + i + j] = CAST_OP(0x8108); + for(i = 0x0000; i <= 0x0C00; i += 0x0200) + JumpTable[0x810F + i] = CAST_OP(0x810F); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + JumpTable[0x8F08 + i] = CAST_OP(0x8F08); + JumpTable[0x8F0F] = CAST_OP(0x8F0F); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x80C0 + i + j] = CAST_OP(0x80C0); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x80D0 + i + j] = CAST_OP(0x80D0); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x80D8 + i + j] = CAST_OP(0x80D8); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x80E0 + i + j] = CAST_OP(0x80E0); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x80E8 + i + j] = CAST_OP(0x80E8); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x80F0 + i + j] = CAST_OP(0x80F0); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x80F8 + i] = CAST_OP(0x80F8); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x80F9 + i] = CAST_OP(0x80F9); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x80FA + i] = CAST_OP(0x80FA); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x80FB + i] = CAST_OP(0x80FB); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x80FC + i] = CAST_OP(0x80FC); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x80DF + i] = CAST_OP(0x80DF); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x80E7 + i] = CAST_OP(0x80E7); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x81C0 + i + j] = CAST_OP(0x81C0); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x81D0 + i + j] = CAST_OP(0x81D0); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x81D8 + i + j] = CAST_OP(0x81D8); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x81E0 + i + j] = CAST_OP(0x81E0); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x81E8 + i + j] = CAST_OP(0x81E8); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x81F0 + i + j] = CAST_OP(0x81F0); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x81F8 + i] = CAST_OP(0x81F8); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x81F9 + i] = CAST_OP(0x81F9); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x81FA + i] = CAST_OP(0x81FA); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x81FB + i] = CAST_OP(0x81FB); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x81FC + i] = CAST_OP(0x81FC); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x81DF + i] = CAST_OP(0x81DF); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x81E7 + i] = CAST_OP(0x81E7); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x9000 + i + j] = CAST_OP(0x9000); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x9008 + i + j] = CAST_OP(0x9008); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x9010 + i + j] = CAST_OP(0x9010); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x9018 + i + j] = CAST_OP(0x9018); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x9020 + i + j] = CAST_OP(0x9020); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x9028 + i + j] = CAST_OP(0x9028); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x9030 + i + j] = CAST_OP(0x9030); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x9038 + i] = CAST_OP(0x9038); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x9039 + i] = CAST_OP(0x9039); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x903A + i] = CAST_OP(0x903A); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x903B + i] = CAST_OP(0x903B); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x903C + i] = CAST_OP(0x903C); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x901F + i] = CAST_OP(0x901F); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x9027 + i] = CAST_OP(0x9027); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x9040 + i + j] = CAST_OP(0x9040); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x9048 + i + j] = CAST_OP(0x9048); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x9050 + i + j] = CAST_OP(0x9050); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x9058 + i + j] = CAST_OP(0x9058); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x9060 + i + j] = CAST_OP(0x9060); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x9068 + i + j] = CAST_OP(0x9068); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x9070 + i + j] = CAST_OP(0x9070); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x9078 + i] = CAST_OP(0x9078); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x9079 + i] = CAST_OP(0x9079); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x907A + i] = CAST_OP(0x907A); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x907B + i] = CAST_OP(0x907B); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x907C + i] = CAST_OP(0x907C); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x905F + i] = CAST_OP(0x905F); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x9067 + i] = CAST_OP(0x9067); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x9080 + i + j] = CAST_OP(0x9080); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x9088 + i + j] = CAST_OP(0x9088); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x9090 + i + j] = CAST_OP(0x9090); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x9098 + i + j] = CAST_OP(0x9098); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x90A0 + i + j] = CAST_OP(0x90A0); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x90A8 + i + j] = CAST_OP(0x90A8); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x90B0 + i + j] = CAST_OP(0x90B0); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x90B8 + i] = CAST_OP(0x90B8); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x90B9 + i] = CAST_OP(0x90B9); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x90BA + i] = CAST_OP(0x90BA); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x90BB + i] = CAST_OP(0x90BB); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x90BC + i] = CAST_OP(0x90BC); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x909F + i] = CAST_OP(0x909F); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x90A7 + i] = CAST_OP(0x90A7); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x9110 + i + j] = CAST_OP(0x9110); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x9118 + i + j] = CAST_OP(0x9118); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x9120 + i + j] = CAST_OP(0x9120); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x9128 + i + j] = CAST_OP(0x9128); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x9130 + i + j] = CAST_OP(0x9130); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x9138 + i] = CAST_OP(0x9138); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x9139 + i] = CAST_OP(0x9139); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x911F + i] = CAST_OP(0x911F); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x9127 + i] = CAST_OP(0x9127); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x9150 + i + j] = CAST_OP(0x9150); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x9158 + i + j] = CAST_OP(0x9158); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x9160 + i + j] = CAST_OP(0x9160); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x9168 + i + j] = CAST_OP(0x9168); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x9170 + i + j] = CAST_OP(0x9170); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x9178 + i] = CAST_OP(0x9178); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x9179 + i] = CAST_OP(0x9179); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x915F + i] = CAST_OP(0x915F); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x9167 + i] = CAST_OP(0x9167); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x9190 + i + j] = CAST_OP(0x9190); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x9198 + i + j] = CAST_OP(0x9198); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x91A0 + i + j] = CAST_OP(0x91A0); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x91A8 + i + j] = CAST_OP(0x91A8); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x91B0 + i + j] = CAST_OP(0x91B0); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x91B8 + i] = CAST_OP(0x91B8); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x91B9 + i] = CAST_OP(0x91B9); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x919F + i] = CAST_OP(0x919F); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x91A7 + i] = CAST_OP(0x91A7); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x9100 + i + j] = CAST_OP(0x9100); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x9140 + i + j] = CAST_OP(0x9140); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x9180 + i + j] = CAST_OP(0x9180); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + for(j = 0x0000; j <= 0x0C00; j += 0x0200) + JumpTable[0x9108 + i + j] = CAST_OP(0x9108); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + for(j = 0x0000; j <= 0x0C00; j += 0x0200) + JumpTable[0x9148 + i + j] = CAST_OP(0x9148); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + for(j = 0x0000; j <= 0x0C00; j += 0x0200) + JumpTable[0x9188 + i + j] = CAST_OP(0x9188); + for(i = 0x0000; i <= 0x0C00; i += 0x0200) + JumpTable[0x910F + i] = CAST_OP(0x910F); + for(i = 0x0000; i <= 0x0C00; i += 0x0200) + JumpTable[0x914F + i] = CAST_OP(0x914F); + for(i = 0x0000; i <= 0x0C00; i += 0x0200) + JumpTable[0x918F + i] = CAST_OP(0x918F); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + JumpTable[0x9F08 + i] = CAST_OP(0x9F08); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + JumpTable[0x9F48 + i] = CAST_OP(0x9F48); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + JumpTable[0x9F88 + i] = CAST_OP(0x9F88); + JumpTable[0x9F0F] = CAST_OP(0x9F0F); + JumpTable[0x9F4F] = CAST_OP(0x9F4F); + JumpTable[0x9F8F] = CAST_OP(0x9F8F); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x90C0 + i + j] = CAST_OP(0x90C0); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x90C8 + i + j] = CAST_OP(0x90C8); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x90D0 + i + j] = CAST_OP(0x90D0); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x90D8 + i + j] = CAST_OP(0x90D8); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x90E0 + i + j] = CAST_OP(0x90E0); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x90E8 + i + j] = CAST_OP(0x90E8); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x90F0 + i + j] = CAST_OP(0x90F0); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x90F8 + i] = CAST_OP(0x90F8); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x90F9 + i] = CAST_OP(0x90F9); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x90FA + i] = CAST_OP(0x90FA); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x90FB + i] = CAST_OP(0x90FB); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x90FC + i] = CAST_OP(0x90FC); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x90DF + i] = CAST_OP(0x90DF); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x90E7 + i] = CAST_OP(0x90E7); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x91C0 + i + j] = CAST_OP(0x91C0); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x91C8 + i + j] = CAST_OP(0x91C8); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x91D0 + i + j] = CAST_OP(0x91D0); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x91D8 + i + j] = CAST_OP(0x91D8); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x91E0 + i + j] = CAST_OP(0x91E0); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x91E8 + i + j] = CAST_OP(0x91E8); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x91F0 + i + j] = CAST_OP(0x91F0); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x91F8 + i] = CAST_OP(0x91F8); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x91F9 + i] = CAST_OP(0x91F9); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x91FA + i] = CAST_OP(0x91FA); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x91FB + i] = CAST_OP(0x91FB); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x91FC + i] = CAST_OP(0x91FC); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x91DF + i] = CAST_OP(0x91DF); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0x91E7 + i] = CAST_OP(0x91E7); + for(i = 0x0000; i <= 0x0FFF; i += 0x0001) + JumpTable[0xA000 + i] = CAST_OP(0xA000); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0xB000 + i + j] = CAST_OP(0xB000); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0xB008 + i + j] = CAST_OP(0xB008); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0xB010 + i + j] = CAST_OP(0xB010); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0xB018 + i + j] = CAST_OP(0xB018); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0xB020 + i + j] = CAST_OP(0xB020); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0xB028 + i + j] = CAST_OP(0xB028); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0xB030 + i + j] = CAST_OP(0xB030); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0xB038 + i] = CAST_OP(0xB038); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0xB039 + i] = CAST_OP(0xB039); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0xB03A + i] = CAST_OP(0xB03A); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0xB03B + i] = CAST_OP(0xB03B); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0xB03C + i] = CAST_OP(0xB03C); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0xB01F + i] = CAST_OP(0xB01F); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0xB027 + i] = CAST_OP(0xB027); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0xB040 + i + j] = CAST_OP(0xB040); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0xB048 + i + j] = CAST_OP(0xB048); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0xB050 + i + j] = CAST_OP(0xB050); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0xB058 + i + j] = CAST_OP(0xB058); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0xB060 + i + j] = CAST_OP(0xB060); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0xB068 + i + j] = CAST_OP(0xB068); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0xB070 + i + j] = CAST_OP(0xB070); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0xB078 + i] = CAST_OP(0xB078); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0xB079 + i] = CAST_OP(0xB079); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0xB07A + i] = CAST_OP(0xB07A); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0xB07B + i] = CAST_OP(0xB07B); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0xB07C + i] = CAST_OP(0xB07C); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0xB05F + i] = CAST_OP(0xB05F); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0xB067 + i] = CAST_OP(0xB067); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0xB080 + i + j] = CAST_OP(0xB080); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0xB088 + i + j] = CAST_OP(0xB088); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0xB090 + i + j] = CAST_OP(0xB090); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0xB098 + i + j] = CAST_OP(0xB098); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0xB0A0 + i + j] = CAST_OP(0xB0A0); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0xB0A8 + i + j] = CAST_OP(0xB0A8); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0xB0B0 + i + j] = CAST_OP(0xB0B0); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0xB0B8 + i] = CAST_OP(0xB0B8); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0xB0B9 + i] = CAST_OP(0xB0B9); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0xB0BA + i] = CAST_OP(0xB0BA); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0xB0BB + i] = CAST_OP(0xB0BB); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0xB0BC + i] = CAST_OP(0xB0BC); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0xB09F + i] = CAST_OP(0xB09F); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0xB0A7 + i] = CAST_OP(0xB0A7); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + for(j = 0x0000; j <= 0x0C00; j += 0x0200) + JumpTable[0xB108 + i + j] = CAST_OP(0xB108); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + for(j = 0x0000; j <= 0x0C00; j += 0x0200) + JumpTable[0xB148 + i + j] = CAST_OP(0xB148); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + for(j = 0x0000; j <= 0x0C00; j += 0x0200) + JumpTable[0xB188 + i + j] = CAST_OP(0xB188); + for(i = 0x0000; i <= 0x0C00; i += 0x0200) + JumpTable[0xB10F + i] = CAST_OP(0xB10F); + for(i = 0x0000; i <= 0x0C00; i += 0x0200) + JumpTable[0xB14F + i] = CAST_OP(0xB14F); + for(i = 0x0000; i <= 0x0C00; i += 0x0200) + JumpTable[0xB18F + i] = CAST_OP(0xB18F); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + JumpTable[0xBF08 + i] = CAST_OP(0xBF08); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + JumpTable[0xBF48 + i] = CAST_OP(0xBF48); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + JumpTable[0xBF88 + i] = CAST_OP(0xBF88); + JumpTable[0xBF0F] = CAST_OP(0xBF0F); + JumpTable[0xBF4F] = CAST_OP(0xBF4F); + JumpTable[0xBF8F] = CAST_OP(0xBF8F); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0xB100 + i + j] = CAST_OP(0xB100); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0xB110 + i + j] = CAST_OP(0xB110); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0xB118 + i + j] = CAST_OP(0xB118); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0xB120 + i + j] = CAST_OP(0xB120); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0xB128 + i + j] = CAST_OP(0xB128); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0xB130 + i + j] = CAST_OP(0xB130); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0xB138 + i] = CAST_OP(0xB138); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0xB139 + i] = CAST_OP(0xB139); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0xB11F + i] = CAST_OP(0xB11F); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0xB127 + i] = CAST_OP(0xB127); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0xB140 + i + j] = CAST_OP(0xB140); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0xB150 + i + j] = CAST_OP(0xB150); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0xB158 + i + j] = CAST_OP(0xB158); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0xB160 + i + j] = CAST_OP(0xB160); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0xB168 + i + j] = CAST_OP(0xB168); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0xB170 + i + j] = CAST_OP(0xB170); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0xB178 + i] = CAST_OP(0xB178); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0xB179 + i] = CAST_OP(0xB179); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0xB15F + i] = CAST_OP(0xB15F); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0xB167 + i] = CAST_OP(0xB167); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0xB180 + i + j] = CAST_OP(0xB180); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0xB190 + i + j] = CAST_OP(0xB190); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0xB198 + i + j] = CAST_OP(0xB198); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0xB1A0 + i + j] = CAST_OP(0xB1A0); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0xB1A8 + i + j] = CAST_OP(0xB1A8); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0xB1B0 + i + j] = CAST_OP(0xB1B0); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0xB1B8 + i] = CAST_OP(0xB1B8); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0xB1B9 + i] = CAST_OP(0xB1B9); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0xB19F + i] = CAST_OP(0xB19F); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0xB1A7 + i] = CAST_OP(0xB1A7); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0xB0C0 + i + j] = CAST_OP(0xB0C0); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0xB0C8 + i + j] = CAST_OP(0xB0C8); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0xB0D0 + i + j] = CAST_OP(0xB0D0); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0xB0D8 + i + j] = CAST_OP(0xB0D8); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0xB0E0 + i + j] = CAST_OP(0xB0E0); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0xB0E8 + i + j] = CAST_OP(0xB0E8); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0xB0F0 + i + j] = CAST_OP(0xB0F0); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0xB0F8 + i] = CAST_OP(0xB0F8); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0xB0F9 + i] = CAST_OP(0xB0F9); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0xB0FA + i] = CAST_OP(0xB0FA); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0xB0FB + i] = CAST_OP(0xB0FB); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0xB0FC + i] = CAST_OP(0xB0FC); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0xB0DF + i] = CAST_OP(0xB0DF); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0xB0E7 + i] = CAST_OP(0xB0E7); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0xB1C0 + i + j] = CAST_OP(0xB1C0); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0xB1C8 + i + j] = CAST_OP(0xB1C8); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0xB1D0 + i + j] = CAST_OP(0xB1D0); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0xB1D8 + i + j] = CAST_OP(0xB1D8); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0xB1E0 + i + j] = CAST_OP(0xB1E0); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0xB1E8 + i + j] = CAST_OP(0xB1E8); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0xB1F0 + i + j] = CAST_OP(0xB1F0); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0xB1F8 + i] = CAST_OP(0xB1F8); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0xB1F9 + i] = CAST_OP(0xB1F9); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0xB1FA + i] = CAST_OP(0xB1FA); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0xB1FB + i] = CAST_OP(0xB1FB); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0xB1FC + i] = CAST_OP(0xB1FC); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0xB1DF + i] = CAST_OP(0xB1DF); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0xB1E7 + i] = CAST_OP(0xB1E7); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0xC000 + i + j] = CAST_OP(0xC000); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0xC010 + i + j] = CAST_OP(0xC010); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0xC018 + i + j] = CAST_OP(0xC018); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0xC020 + i + j] = CAST_OP(0xC020); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0xC028 + i + j] = CAST_OP(0xC028); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0xC030 + i + j] = CAST_OP(0xC030); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0xC038 + i] = CAST_OP(0xC038); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0xC039 + i] = CAST_OP(0xC039); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0xC03A + i] = CAST_OP(0xC03A); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0xC03B + i] = CAST_OP(0xC03B); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0xC03C + i] = CAST_OP(0xC03C); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0xC01F + i] = CAST_OP(0xC01F); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0xC027 + i] = CAST_OP(0xC027); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0xC040 + i + j] = CAST_OP(0xC040); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0xC050 + i + j] = CAST_OP(0xC050); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0xC058 + i + j] = CAST_OP(0xC058); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0xC060 + i + j] = CAST_OP(0xC060); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0xC068 + i + j] = CAST_OP(0xC068); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0xC070 + i + j] = CAST_OP(0xC070); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0xC078 + i] = CAST_OP(0xC078); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0xC079 + i] = CAST_OP(0xC079); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0xC07A + i] = CAST_OP(0xC07A); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0xC07B + i] = CAST_OP(0xC07B); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0xC07C + i] = CAST_OP(0xC07C); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0xC05F + i] = CAST_OP(0xC05F); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0xC067 + i] = CAST_OP(0xC067); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0xC080 + i + j] = CAST_OP(0xC080); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0xC090 + i + j] = CAST_OP(0xC090); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0xC098 + i + j] = CAST_OP(0xC098); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0xC0A0 + i + j] = CAST_OP(0xC0A0); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0xC0A8 + i + j] = CAST_OP(0xC0A8); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0xC0B0 + i + j] = CAST_OP(0xC0B0); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0xC0B8 + i] = CAST_OP(0xC0B8); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0xC0B9 + i] = CAST_OP(0xC0B9); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0xC0BA + i] = CAST_OP(0xC0BA); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0xC0BB + i] = CAST_OP(0xC0BB); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0xC0BC + i] = CAST_OP(0xC0BC); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0xC09F + i] = CAST_OP(0xC09F); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0xC0A7 + i] = CAST_OP(0xC0A7); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0xC110 + i + j] = CAST_OP(0xC110); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0xC118 + i + j] = CAST_OP(0xC118); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0xC120 + i + j] = CAST_OP(0xC120); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0xC128 + i + j] = CAST_OP(0xC128); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0xC130 + i + j] = CAST_OP(0xC130); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0xC138 + i] = CAST_OP(0xC138); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0xC139 + i] = CAST_OP(0xC139); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0xC11F + i] = CAST_OP(0xC11F); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0xC127 + i] = CAST_OP(0xC127); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0xC150 + i + j] = CAST_OP(0xC150); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0xC158 + i + j] = CAST_OP(0xC158); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0xC160 + i + j] = CAST_OP(0xC160); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0xC168 + i + j] = CAST_OP(0xC168); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0xC170 + i + j] = CAST_OP(0xC170); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0xC178 + i] = CAST_OP(0xC178); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0xC179 + i] = CAST_OP(0xC179); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0xC15F + i] = CAST_OP(0xC15F); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0xC167 + i] = CAST_OP(0xC167); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0xC190 + i + j] = CAST_OP(0xC190); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0xC198 + i + j] = CAST_OP(0xC198); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0xC1A0 + i + j] = CAST_OP(0xC1A0); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0xC1A8 + i + j] = CAST_OP(0xC1A8); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0xC1B0 + i + j] = CAST_OP(0xC1B0); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0xC1B8 + i] = CAST_OP(0xC1B8); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0xC1B9 + i] = CAST_OP(0xC1B9); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0xC19F + i] = CAST_OP(0xC19F); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0xC1A7 + i] = CAST_OP(0xC1A7); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0xC100 + i + j] = CAST_OP(0xC100); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + for(j = 0x0000; j <= 0x0C00; j += 0x0200) + JumpTable[0xC108 + i + j] = CAST_OP(0xC108); + for(i = 0x0000; i <= 0x0C00; i += 0x0200) + JumpTable[0xC10F + i] = CAST_OP(0xC10F); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + JumpTable[0xCF08 + i] = CAST_OP(0xCF08); + JumpTable[0xCF0F] = CAST_OP(0xCF0F); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0xC0C0 + i + j] = CAST_OP(0xC0C0); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0xC0D0 + i + j] = CAST_OP(0xC0D0); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0xC0D8 + i + j] = CAST_OP(0xC0D8); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0xC0E0 + i + j] = CAST_OP(0xC0E0); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0xC0E8 + i + j] = CAST_OP(0xC0E8); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0xC0F0 + i + j] = CAST_OP(0xC0F0); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0xC0F8 + i] = CAST_OP(0xC0F8); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0xC0F9 + i] = CAST_OP(0xC0F9); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0xC0FA + i] = CAST_OP(0xC0FA); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0xC0FB + i] = CAST_OP(0xC0FB); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0xC0FC + i] = CAST_OP(0xC0FC); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0xC0DF + i] = CAST_OP(0xC0DF); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0xC0E7 + i] = CAST_OP(0xC0E7); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0xC1C0 + i + j] = CAST_OP(0xC1C0); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0xC1D0 + i + j] = CAST_OP(0xC1D0); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0xC1D8 + i + j] = CAST_OP(0xC1D8); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0xC1E0 + i + j] = CAST_OP(0xC1E0); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0xC1E8 + i + j] = CAST_OP(0xC1E8); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0xC1F0 + i + j] = CAST_OP(0xC1F0); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0xC1F8 + i] = CAST_OP(0xC1F8); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0xC1F9 + i] = CAST_OP(0xC1F9); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0xC1FA + i] = CAST_OP(0xC1FA); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0xC1FB + i] = CAST_OP(0xC1FB); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0xC1FC + i] = CAST_OP(0xC1FC); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0xC1DF + i] = CAST_OP(0xC1DF); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0xC1E7 + i] = CAST_OP(0xC1E7); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0xC140 + i + j] = CAST_OP(0xC140); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0xC148 + i + j] = CAST_OP(0xC148); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0xC188 + i + j] = CAST_OP(0xC188); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0xD000 + i + j] = CAST_OP(0xD000); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0xD008 + i + j] = CAST_OP(0xD008); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0xD010 + i + j] = CAST_OP(0xD010); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0xD018 + i + j] = CAST_OP(0xD018); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0xD020 + i + j] = CAST_OP(0xD020); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0xD028 + i + j] = CAST_OP(0xD028); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0xD030 + i + j] = CAST_OP(0xD030); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0xD038 + i] = CAST_OP(0xD038); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0xD039 + i] = CAST_OP(0xD039); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0xD03A + i] = CAST_OP(0xD03A); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0xD03B + i] = CAST_OP(0xD03B); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0xD03C + i] = CAST_OP(0xD03C); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0xD01F + i] = CAST_OP(0xD01F); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0xD027 + i] = CAST_OP(0xD027); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0xD040 + i + j] = CAST_OP(0xD040); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0xD048 + i + j] = CAST_OP(0xD048); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0xD050 + i + j] = CAST_OP(0xD050); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0xD058 + i + j] = CAST_OP(0xD058); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0xD060 + i + j] = CAST_OP(0xD060); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0xD068 + i + j] = CAST_OP(0xD068); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0xD070 + i + j] = CAST_OP(0xD070); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0xD078 + i] = CAST_OP(0xD078); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0xD079 + i] = CAST_OP(0xD079); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0xD07A + i] = CAST_OP(0xD07A); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0xD07B + i] = CAST_OP(0xD07B); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0xD07C + i] = CAST_OP(0xD07C); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0xD05F + i] = CAST_OP(0xD05F); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0xD067 + i] = CAST_OP(0xD067); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0xD080 + i + j] = CAST_OP(0xD080); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0xD088 + i + j] = CAST_OP(0xD088); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0xD090 + i + j] = CAST_OP(0xD090); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0xD098 + i + j] = CAST_OP(0xD098); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0xD0A0 + i + j] = CAST_OP(0xD0A0); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0xD0A8 + i + j] = CAST_OP(0xD0A8); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0xD0B0 + i + j] = CAST_OP(0xD0B0); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0xD0B8 + i] = CAST_OP(0xD0B8); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0xD0B9 + i] = CAST_OP(0xD0B9); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0xD0BA + i] = CAST_OP(0xD0BA); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0xD0BB + i] = CAST_OP(0xD0BB); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0xD0BC + i] = CAST_OP(0xD0BC); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0xD09F + i] = CAST_OP(0xD09F); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0xD0A7 + i] = CAST_OP(0xD0A7); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0xD110 + i + j] = CAST_OP(0xD110); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0xD118 + i + j] = CAST_OP(0xD118); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0xD120 + i + j] = CAST_OP(0xD120); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0xD128 + i + j] = CAST_OP(0xD128); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0xD130 + i + j] = CAST_OP(0xD130); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0xD138 + i] = CAST_OP(0xD138); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0xD139 + i] = CAST_OP(0xD139); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0xD11F + i] = CAST_OP(0xD11F); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0xD127 + i] = CAST_OP(0xD127); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0xD150 + i + j] = CAST_OP(0xD150); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0xD158 + i + j] = CAST_OP(0xD158); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0xD160 + i + j] = CAST_OP(0xD160); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0xD168 + i + j] = CAST_OP(0xD168); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0xD170 + i + j] = CAST_OP(0xD170); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0xD178 + i] = CAST_OP(0xD178); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0xD179 + i] = CAST_OP(0xD179); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0xD15F + i] = CAST_OP(0xD15F); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0xD167 + i] = CAST_OP(0xD167); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0xD190 + i + j] = CAST_OP(0xD190); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0xD198 + i + j] = CAST_OP(0xD198); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0xD1A0 + i + j] = CAST_OP(0xD1A0); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0xD1A8 + i + j] = CAST_OP(0xD1A8); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0xD1B0 + i + j] = CAST_OP(0xD1B0); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0xD1B8 + i] = CAST_OP(0xD1B8); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0xD1B9 + i] = CAST_OP(0xD1B9); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0xD19F + i] = CAST_OP(0xD19F); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0xD1A7 + i] = CAST_OP(0xD1A7); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0xD100 + i + j] = CAST_OP(0xD100); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0xD140 + i + j] = CAST_OP(0xD140); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0xD180 + i + j] = CAST_OP(0xD180); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + for(j = 0x0000; j <= 0x0C00; j += 0x0200) + JumpTable[0xD108 + i + j] = CAST_OP(0xD108); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + for(j = 0x0000; j <= 0x0C00; j += 0x0200) + JumpTable[0xD148 + i + j] = CAST_OP(0xD148); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + for(j = 0x0000; j <= 0x0C00; j += 0x0200) + JumpTable[0xD188 + i + j] = CAST_OP(0xD188); + for(i = 0x0000; i <= 0x0C00; i += 0x0200) + JumpTable[0xD10F + i] = CAST_OP(0xD10F); + for(i = 0x0000; i <= 0x0C00; i += 0x0200) + JumpTable[0xD14F + i] = CAST_OP(0xD14F); + for(i = 0x0000; i <= 0x0C00; i += 0x0200) + JumpTable[0xD18F + i] = CAST_OP(0xD18F); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + JumpTable[0xDF08 + i] = CAST_OP(0xDF08); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + JumpTable[0xDF48 + i] = CAST_OP(0xDF48); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + JumpTable[0xDF88 + i] = CAST_OP(0xDF88); + JumpTable[0xDF0F] = CAST_OP(0xDF0F); + JumpTable[0xDF4F] = CAST_OP(0xDF4F); + JumpTable[0xDF8F] = CAST_OP(0xDF8F); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0xD0C0 + i + j] = CAST_OP(0xD0C0); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0xD0C8 + i + j] = CAST_OP(0xD0C8); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0xD0D0 + i + j] = CAST_OP(0xD0D0); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0xD0D8 + i + j] = CAST_OP(0xD0D8); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0xD0E0 + i + j] = CAST_OP(0xD0E0); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0xD0E8 + i + j] = CAST_OP(0xD0E8); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0xD0F0 + i + j] = CAST_OP(0xD0F0); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0xD0F8 + i] = CAST_OP(0xD0F8); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0xD0F9 + i] = CAST_OP(0xD0F9); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0xD0FA + i] = CAST_OP(0xD0FA); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0xD0FB + i] = CAST_OP(0xD0FB); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0xD0FC + i] = CAST_OP(0xD0FC); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0xD0DF + i] = CAST_OP(0xD0DF); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0xD0E7 + i] = CAST_OP(0xD0E7); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0xD1C0 + i + j] = CAST_OP(0xD1C0); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0xD1C8 + i + j] = CAST_OP(0xD1C8); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0xD1D0 + i + j] = CAST_OP(0xD1D0); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0xD1D8 + i + j] = CAST_OP(0xD1D8); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0xD1E0 + i + j] = CAST_OP(0xD1E0); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0xD1E8 + i + j] = CAST_OP(0xD1E8); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0xD1F0 + i + j] = CAST_OP(0xD1F0); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0xD1F8 + i] = CAST_OP(0xD1F8); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0xD1F9 + i] = CAST_OP(0xD1F9); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0xD1FA + i] = CAST_OP(0xD1FA); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0xD1FB + i] = CAST_OP(0xD1FB); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0xD1FC + i] = CAST_OP(0xD1FC); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0xD1DF + i] = CAST_OP(0xD1DF); + for(i = 0x0000; i <= 0x0E00; i += 0x0200) + JumpTable[0xD1E7 + i] = CAST_OP(0xD1E7); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0xE000 + i + j] = CAST_OP(0xE000); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0xE040 + i + j] = CAST_OP(0xE040); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0xE080 + i + j] = CAST_OP(0xE080); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0xE008 + i + j] = CAST_OP(0xE008); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0xE048 + i + j] = CAST_OP(0xE048); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0xE088 + i + j] = CAST_OP(0xE088); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0xE010 + i + j] = CAST_OP(0xE010); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0xE050 + i + j] = CAST_OP(0xE050); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0xE090 + i + j] = CAST_OP(0xE090); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0xE018 + i + j] = CAST_OP(0xE018); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0xE058 + i + j] = CAST_OP(0xE058); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0xE098 + i + j] = CAST_OP(0xE098); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0xE100 + i + j] = CAST_OP(0xE100); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0xE140 + i + j] = CAST_OP(0xE140); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0xE180 + i + j] = CAST_OP(0xE180); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0xE108 + i + j] = CAST_OP(0xE108); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0xE148 + i + j] = CAST_OP(0xE148); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0xE188 + i + j] = CAST_OP(0xE188); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0xE110 + i + j] = CAST_OP(0xE110); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0xE150 + i + j] = CAST_OP(0xE150); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0xE190 + i + j] = CAST_OP(0xE190); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0xE118 + i + j] = CAST_OP(0xE118); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0xE158 + i + j] = CAST_OP(0xE158); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0xE198 + i + j] = CAST_OP(0xE198); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0xE020 + i + j] = CAST_OP(0xE020); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0xE060 + i + j] = CAST_OP(0xE060); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0xE0A0 + i + j] = CAST_OP(0xE0A0); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0xE028 + i + j] = CAST_OP(0xE028); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0xE068 + i + j] = CAST_OP(0xE068); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0xE0A8 + i + j] = CAST_OP(0xE0A8); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0xE030 + i + j] = CAST_OP(0xE030); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0xE070 + i + j] = CAST_OP(0xE070); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0xE0B0 + i + j] = CAST_OP(0xE0B0); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0xE038 + i + j] = CAST_OP(0xE038); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0xE078 + i + j] = CAST_OP(0xE078); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0xE0B8 + i + j] = CAST_OP(0xE0B8); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0xE120 + i + j] = CAST_OP(0xE120); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0xE160 + i + j] = CAST_OP(0xE160); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0xE1A0 + i + j] = CAST_OP(0xE1A0); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0xE128 + i + j] = CAST_OP(0xE128); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0xE168 + i + j] = CAST_OP(0xE168); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0xE1A8 + i + j] = CAST_OP(0xE1A8); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0xE130 + i + j] = CAST_OP(0xE130); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0xE170 + i + j] = CAST_OP(0xE170); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0xE1B0 + i + j] = CAST_OP(0xE1B0); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0xE138 + i + j] = CAST_OP(0xE138); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0xE178 + i + j] = CAST_OP(0xE178); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0xE1B8 + i + j] = CAST_OP(0xE1B8); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0xE0D0 + i] = CAST_OP(0xE0D0); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + JumpTable[0xE0D8 + i] = CAST_OP(0xE0D8); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + JumpTable[0xE0E0 + i] =CAST_OP(0xE0E0); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0xE0E8 + i] = CAST_OP(0xE0E8); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0xE0F0 + i] = CAST_OP(0xE0F0); + JumpTable[0xE0F8] = CAST_OP(0xE0F8); + JumpTable[0xE0F9] = CAST_OP(0xE0F9); + JumpTable[0xE0DF] = CAST_OP(0xE0DF); + JumpTable[0xE0E7] = CAST_OP(0xE0E7); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0xE2D0 + i] = CAST_OP(0xE2D0); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + JumpTable[0xE2D8 + i] = CAST_OP(0xE2D8); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + JumpTable[0xE2E0 + i] = CAST_OP(0xE2E0); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0xE2E8 + i] = CAST_OP(0xE2E8); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0xE2F0 + i] = CAST_OP(0xE2F0); + JumpTable[0xE2F8] = CAST_OP(0xE2F8); + JumpTable[0xE2F9] = CAST_OP(0xE2F9); + JumpTable[0xE2DF] = CAST_OP(0xE2DF); + JumpTable[0xE2E7] = CAST_OP(0xE2E7); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0xE4D0 + i] = CAST_OP(0xE4D0); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + JumpTable[0xE4D8 + i] = CAST_OP(0xE4D8); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + JumpTable[0xE4E0 + i] = CAST_OP(0xE4E0); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0xE4E8 + i] = CAST_OP(0xE4E8); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0xE4F0 + i] = CAST_OP(0xE4F0); + JumpTable[0xE4F8] = CAST_OP(0xE4F8); + JumpTable[0xE4F9] = CAST_OP(0xE4F9); + JumpTable[0xE4DF] = CAST_OP(0xE4DF); + JumpTable[0xE4E7] = CAST_OP(0xE4E7); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0xE6D0 + i] = CAST_OP(0xE6D0); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + JumpTable[0xE6D8 + i] = CAST_OP(0xE6D8); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + JumpTable[0xE6E0 + i] = CAST_OP(0xE6E0); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0xE6E8 + i] = CAST_OP(0xE6E8); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0xE6F0 + i] = CAST_OP(0xE6F0); + JumpTable[0xE6F8] = CAST_OP(0xE6F8); + JumpTable[0xE6F9] = CAST_OP(0xE6F9); + JumpTable[0xE6DF] = CAST_OP(0xE6DF); + JumpTable[0xE6E7] = CAST_OP(0xE6E7); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0xE1D0 + i] = CAST_OP(0xE1D0); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + JumpTable[0xE1D8 + i] = CAST_OP(0xE1D8); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + JumpTable[0xE1E0 + i] = CAST_OP(0xE1E0); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0xE1E8 + i] = CAST_OP(0xE1E8); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0xE1F0 + i] = CAST_OP(0xE1F0); + JumpTable[0xE1F8] = CAST_OP(0xE1F8); + JumpTable[0xE1F9] = CAST_OP(0xE1F9); + JumpTable[0xE1DF] = CAST_OP(0xE1DF); + JumpTable[0xE1E7] = CAST_OP(0xE1E7); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0xE3D0 + i] = CAST_OP(0xE3D0); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + JumpTable[0xE3D8 + i] = CAST_OP(0xE3D8); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + JumpTable[0xE3E0 + i] = CAST_OP(0xE3E0); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0xE3E8 + i] = CAST_OP(0xE3E8); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0xE3F0 + i] = CAST_OP(0xE3F0); + JumpTable[0xE3F8] = CAST_OP(0xE3F8); + JumpTable[0xE3F9] = CAST_OP(0xE3F9); + JumpTable[0xE3DF] = CAST_OP(0xE3DF); + JumpTable[0xE3E7] = CAST_OP(0xE3E7); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0xE5D0 + i] = CAST_OP(0xE5D0); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + JumpTable[0xE5D8 + i] = CAST_OP(0xE5D8); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + JumpTable[0xE5E0 + i] = CAST_OP(0xE5E0); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0xE5E8 + i] = CAST_OP(0xE5E8); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0xE5F0 + i] = CAST_OP(0xE5F0); + JumpTable[0xE5F8] = CAST_OP(0xE5F8); + JumpTable[0xE5F9] = CAST_OP(0xE5F9); + JumpTable[0xE5DF] = CAST_OP(0xE5DF); + JumpTable[0xE5E7] = CAST_OP(0xE5E7); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0xE7D0 + i] = CAST_OP(0xE7D0); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + JumpTable[0xE7D8 + i] = CAST_OP(0xE7D8); + for(i = 0x0000; i <= 0x0006; i += 0x0001) + JumpTable[0xE7E0 + i] = CAST_OP(0xE7E0); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0xE7E8 + i] = CAST_OP(0xE7E8); + for(i = 0x0000; i <= 0x0007; i += 0x0001) + JumpTable[0xE7F0 + i] = CAST_OP(0xE7F0); + JumpTable[0xE7F8] = CAST_OP(0xE7F8); + JumpTable[0xE7F9] = CAST_OP(0xE7F9); + JumpTable[0xE7DF] = CAST_OP(0xE7DF); + JumpTable[0xE7E7] = CAST_OP(0xE7E7); + for(i = 0x0000; i <= 0x0FFF; i += 0x0001) + JumpTable[0xF000 + i] = CAST_OP(0xF000); + + initialised = 1; +} + + diff --git a/cpu/fame/famec_opcodes.h b/cpu/fame/famec_opcodes.h new file mode 100644 index 00000000..a9cc9917 --- /dev/null +++ b/cpu/fame/famec_opcodes.h @@ -0,0 +1,39792 @@ + +// ORI +OPCODE(0x0000) +{ + u32 adr, res; + u32 src, dst; + + FETCH_BYTE(src); + res = DREGu8((Opcode >> 0) & 7); + res |= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + DREGu8((Opcode >> 0) & 7) = res; +RET(8) +} + +// ORI +OPCODE(0x0010) +{ + u32 adr, res; + u32 src, dst; + + FETCH_BYTE(src); + adr = AREG((Opcode >> 0) & 7); + PRE_IO + READ_BYTE_F(adr, res) + res |= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + WRITE_BYTE_F(adr, res) + POST_IO +RET(16) +} + +// ORI +OPCODE(0x0018) +{ + u32 adr, res; + u32 src, dst; + + FETCH_BYTE(src); + adr = AREG((Opcode >> 0) & 7); + AREG((Opcode >> 0) & 7) += 1; + PRE_IO + READ_BYTE_F(adr, res) + res |= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + WRITE_BYTE_F(adr, res) + POST_IO +RET(16) +} + +// ORI +OPCODE(0x0020) +{ + u32 adr, res; + u32 src, dst; + + FETCH_BYTE(src); + adr = AREG((Opcode >> 0) & 7) - 1; + AREG((Opcode >> 0) & 7) = adr; + PRE_IO + READ_BYTE_F(adr, res) + res |= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + WRITE_BYTE_F(adr, res) + POST_IO +RET(18) +} + +// ORI +OPCODE(0x0028) +{ + u32 adr, res; + u32 src, dst; + + FETCH_BYTE(src); + FETCH_SWORD(adr); + adr += AREG((Opcode >> 0) & 7); + PRE_IO + READ_BYTE_F(adr, res) + res |= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + WRITE_BYTE_F(adr, res) + POST_IO +RET(20) +} + +// ORI +OPCODE(0x0030) +{ + u32 adr, res; + u32 src, dst; + + FETCH_BYTE(src); + adr = AREG((Opcode >> 0) & 7); + DECODE_EXT_WORD + PRE_IO + READ_BYTE_F(adr, res) + res |= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + WRITE_BYTE_F(adr, res) + POST_IO +RET(22) +} + +// ORI +OPCODE(0x0038) +{ + u32 adr, res; + u32 src, dst; + + FETCH_BYTE(src); + FETCH_SWORD(adr); + PRE_IO + READ_BYTE_F(adr, res) + res |= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + WRITE_BYTE_F(adr, res) + POST_IO +RET(20) +} + +// ORI +OPCODE(0x0039) +{ + u32 adr, res; + u32 src, dst; + + FETCH_BYTE(src); + FETCH_LONG(adr); + PRE_IO + READ_BYTE_F(adr, res) + res |= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + WRITE_BYTE_F(adr, res) + POST_IO +RET(24) +} + +// ORI +OPCODE(0x001F) +{ + u32 adr, res; + u32 src, dst; + + FETCH_BYTE(src); + adr = AREG(7); + AREG(7) += 2; + PRE_IO + READ_BYTE_F(adr, res) + res |= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + WRITE_BYTE_F(adr, res) + POST_IO +RET(16) +} + +// ORI +OPCODE(0x0027) +{ + u32 adr, res; + u32 src, dst; + + FETCH_BYTE(src); + adr = AREG(7) - 2; + AREG(7) = adr; + PRE_IO + READ_BYTE_F(adr, res) + res |= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + WRITE_BYTE_F(adr, res) + POST_IO +RET(18) +} + +// ORI +OPCODE(0x0040) +{ + u32 adr, res; + u32 src, dst; + + FETCH_WORD(src); + res = DREGu16((Opcode >> 0) & 7); + res |= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + DREGu16((Opcode >> 0) & 7) = res; +RET(8) +} + +// ORI +OPCODE(0x0050) +{ + u32 adr, res; + u32 src, dst; + + FETCH_WORD(src); + adr = AREG((Opcode >> 0) & 7); + PRE_IO + READ_WORD_F(adr, res) + res |= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + WRITE_WORD_F(adr, res) + POST_IO +RET(16) +} + +// ORI +OPCODE(0x0058) +{ + u32 adr, res; + u32 src, dst; + + FETCH_WORD(src); + adr = AREG((Opcode >> 0) & 7); + AREG((Opcode >> 0) & 7) += 2; + PRE_IO + READ_WORD_F(adr, res) + res |= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + WRITE_WORD_F(adr, res) + POST_IO +RET(16) +} + +// ORI +OPCODE(0x0060) +{ + u32 adr, res; + u32 src, dst; + + FETCH_WORD(src); + adr = AREG((Opcode >> 0) & 7) - 2; + AREG((Opcode >> 0) & 7) = adr; + PRE_IO + READ_WORD_F(adr, res) + res |= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + WRITE_WORD_F(adr, res) + POST_IO +RET(18) +} + +// ORI +OPCODE(0x0068) +{ + u32 adr, res; + u32 src, dst; + + FETCH_WORD(src); + FETCH_SWORD(adr); + adr += AREG((Opcode >> 0) & 7); + PRE_IO + READ_WORD_F(adr, res) + res |= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + WRITE_WORD_F(adr, res) + POST_IO +RET(20) +} + +// ORI +OPCODE(0x0070) +{ + u32 adr, res; + u32 src, dst; + + FETCH_WORD(src); + adr = AREG((Opcode >> 0) & 7); + DECODE_EXT_WORD + PRE_IO + READ_WORD_F(adr, res) + res |= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + WRITE_WORD_F(adr, res) + POST_IO +RET(22) +} + +// ORI +OPCODE(0x0078) +{ + u32 adr, res; + u32 src, dst; + + FETCH_WORD(src); + FETCH_SWORD(adr); + PRE_IO + READ_WORD_F(adr, res) + res |= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + WRITE_WORD_F(adr, res) + POST_IO +RET(20) +} + +// ORI +OPCODE(0x0079) +{ + u32 adr, res; + u32 src, dst; + + FETCH_WORD(src); + FETCH_LONG(adr); + PRE_IO + READ_WORD_F(adr, res) + res |= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + WRITE_WORD_F(adr, res) + POST_IO +RET(24) +} + +// ORI +OPCODE(0x005F) +{ + u32 adr, res; + u32 src, dst; + + FETCH_WORD(src); + adr = AREG(7); + AREG(7) += 2; + PRE_IO + READ_WORD_F(adr, res) + res |= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + WRITE_WORD_F(adr, res) + POST_IO +RET(16) +} + +// ORI +OPCODE(0x0067) +{ + u32 adr, res; + u32 src, dst; + + FETCH_WORD(src); + adr = AREG(7) - 2; + AREG(7) = adr; + PRE_IO + READ_WORD_F(adr, res) + res |= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + WRITE_WORD_F(adr, res) + POST_IO +RET(18) +} + +// ORI +OPCODE(0x0080) +{ + u32 adr, res; + u32 src, dst; + + FETCH_LONG(src); + res = DREGu32((Opcode >> 0) & 7); + res |= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + DREGu32((Opcode >> 0) & 7) = res; +RET(16) +} + +// ORI +OPCODE(0x0090) +{ + u32 adr, res; + u32 src, dst; + + FETCH_LONG(src); + adr = AREG((Opcode >> 0) & 7); + PRE_IO + READ_LONG_F(adr, res) + res |= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + WRITE_LONG_F(adr, res) + POST_IO +RET(28) +} + +// ORI +OPCODE(0x0098) +{ + u32 adr, res; + u32 src, dst; + + FETCH_LONG(src); + adr = AREG((Opcode >> 0) & 7); + AREG((Opcode >> 0) & 7) += 4; + PRE_IO + READ_LONG_F(adr, res) + res |= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + WRITE_LONG_F(adr, res) + POST_IO +RET(28) +} + +// ORI +OPCODE(0x00A0) +{ + u32 adr, res; + u32 src, dst; + + FETCH_LONG(src); + adr = AREG((Opcode >> 0) & 7) - 4; + AREG((Opcode >> 0) & 7) = adr; + PRE_IO + READ_LONG_F(adr, res) + res |= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + WRITE_LONG_F(adr, res) + POST_IO +RET(30) +} + +// ORI +OPCODE(0x00A8) +{ + u32 adr, res; + u32 src, dst; + + FETCH_LONG(src); + FETCH_SWORD(adr); + adr += AREG((Opcode >> 0) & 7); + PRE_IO + READ_LONG_F(adr, res) + res |= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + WRITE_LONG_F(adr, res) + POST_IO +RET(32) +} + +// ORI +OPCODE(0x00B0) +{ + u32 adr, res; + u32 src, dst; + + FETCH_LONG(src); + adr = AREG((Opcode >> 0) & 7); + DECODE_EXT_WORD + PRE_IO + READ_LONG_F(adr, res) + res |= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + WRITE_LONG_F(adr, res) + POST_IO +RET(34) +} + +// ORI +OPCODE(0x00B8) +{ + u32 adr, res; + u32 src, dst; + + FETCH_LONG(src); + FETCH_SWORD(adr); + PRE_IO + READ_LONG_F(adr, res) + res |= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + WRITE_LONG_F(adr, res) + POST_IO +RET(32) +} + +// ORI +OPCODE(0x00B9) +{ + u32 adr, res; + u32 src, dst; + + FETCH_LONG(src); + FETCH_LONG(adr); + PRE_IO + READ_LONG_F(adr, res) + res |= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + WRITE_LONG_F(adr, res) + POST_IO +RET(36) +} + +// ORI +OPCODE(0x009F) +{ + u32 adr, res; + u32 src, dst; + + FETCH_LONG(src); + adr = AREG(7); + AREG(7) += 4; + PRE_IO + READ_LONG_F(adr, res) + res |= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + WRITE_LONG_F(adr, res) + POST_IO +RET(28) +} + +// ORI +OPCODE(0x00A7) +{ + u32 adr, res; + u32 src, dst; + + FETCH_LONG(src); + adr = AREG(7) - 4; + AREG(7) = adr; + PRE_IO + READ_LONG_F(adr, res) + res |= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + WRITE_LONG_F(adr, res) + POST_IO +RET(30) +} + +// ORICCR +OPCODE(0x003C) +{ + u32 adr, res; + u32 src, dst; + + FETCH_BYTE(res); + res &= M68K_CCR_MASK; + res |= GET_CCR; + SET_CCR(res) +RET(20) +} + +// ORISR +OPCODE(0x007C) +{ + u32 adr, res; + u32 src, dst; + + if (flag_S) + { + u32 res; + FETCH_WORD(res); + res &= M68K_SR_MASK; + res |= GET_SR; + SET_SR(res) + CHECK_INT_TO_JUMP(20) + } + else + { + u32 newPC = (u32)(PC) - BasePC; + SET_PC(newPC-2); + execute_exception(M68K_PRIVILEGE_VIOLATION_EX); +#ifdef USE_CYCLONE_TIMING + RET(0) +#else + RET(4) +#endif + } +RET(20) +} + +// ANDI +OPCODE(0x0200) +{ + u32 adr, res; + u32 src, dst; + + FETCH_BYTE(src); + res = DREGu8((Opcode >> 0) & 7); + res &= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + DREGu8((Opcode >> 0) & 7) = res; +RET(8) +} + +// ANDI +OPCODE(0x0210) +{ + u32 adr, res; + u32 src, dst; + + FETCH_BYTE(src); + adr = AREG((Opcode >> 0) & 7); + PRE_IO + READ_BYTE_F(adr, res) + res &= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + WRITE_BYTE_F(adr, res) + POST_IO +RET(16) +} + +// ANDI +OPCODE(0x0218) +{ + u32 adr, res; + u32 src, dst; + + FETCH_BYTE(src); + adr = AREG((Opcode >> 0) & 7); + AREG((Opcode >> 0) & 7) += 1; + PRE_IO + READ_BYTE_F(adr, res) + res &= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + WRITE_BYTE_F(adr, res) + POST_IO +RET(16) +} + +// ANDI +OPCODE(0x0220) +{ + u32 adr, res; + u32 src, dst; + + FETCH_BYTE(src); + adr = AREG((Opcode >> 0) & 7) - 1; + AREG((Opcode >> 0) & 7) = adr; + PRE_IO + READ_BYTE_F(adr, res) + res &= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + WRITE_BYTE_F(adr, res) + POST_IO +RET(18) +} + +// ANDI +OPCODE(0x0228) +{ + u32 adr, res; + u32 src, dst; + + FETCH_BYTE(src); + FETCH_SWORD(adr); + adr += AREG((Opcode >> 0) & 7); + PRE_IO + READ_BYTE_F(adr, res) + res &= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + WRITE_BYTE_F(adr, res) + POST_IO +RET(20) +} + +// ANDI +OPCODE(0x0230) +{ + u32 adr, res; + u32 src, dst; + + FETCH_BYTE(src); + adr = AREG((Opcode >> 0) & 7); + DECODE_EXT_WORD + PRE_IO + READ_BYTE_F(adr, res) + res &= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + WRITE_BYTE_F(adr, res) + POST_IO +RET(22) +} + +// ANDI +OPCODE(0x0238) +{ + u32 adr, res; + u32 src, dst; + + FETCH_BYTE(src); + FETCH_SWORD(adr); + PRE_IO + READ_BYTE_F(adr, res) + res &= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + WRITE_BYTE_F(adr, res) + POST_IO +RET(20) +} + +// ANDI +OPCODE(0x0239) +{ + u32 adr, res; + u32 src, dst; + + FETCH_BYTE(src); + FETCH_LONG(adr); + PRE_IO + READ_BYTE_F(adr, res) + res &= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + WRITE_BYTE_F(adr, res) + POST_IO +RET(24) +} + +// ANDI +OPCODE(0x021F) +{ + u32 adr, res; + u32 src, dst; + + FETCH_BYTE(src); + adr = AREG(7); + AREG(7) += 2; + PRE_IO + READ_BYTE_F(adr, res) + res &= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + WRITE_BYTE_F(adr, res) + POST_IO +RET(16) +} + +// ANDI +OPCODE(0x0227) +{ + u32 adr, res; + u32 src, dst; + + FETCH_BYTE(src); + adr = AREG(7) - 2; + AREG(7) = adr; + PRE_IO + READ_BYTE_F(adr, res) + res &= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + WRITE_BYTE_F(adr, res) + POST_IO +RET(18) +} + +// ANDI +OPCODE(0x0240) +{ + u32 adr, res; + u32 src, dst; + + FETCH_WORD(src); + res = DREGu16((Opcode >> 0) & 7); + res &= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + DREGu16((Opcode >> 0) & 7) = res; +RET(8) +} + +// ANDI +OPCODE(0x0250) +{ + u32 adr, res; + u32 src, dst; + + FETCH_WORD(src); + adr = AREG((Opcode >> 0) & 7); + PRE_IO + READ_WORD_F(adr, res) + res &= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + WRITE_WORD_F(adr, res) + POST_IO +RET(16) +} + +// ANDI +OPCODE(0x0258) +{ + u32 adr, res; + u32 src, dst; + + FETCH_WORD(src); + adr = AREG((Opcode >> 0) & 7); + AREG((Opcode >> 0) & 7) += 2; + PRE_IO + READ_WORD_F(adr, res) + res &= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + WRITE_WORD_F(adr, res) + POST_IO +RET(16) +} + +// ANDI +OPCODE(0x0260) +{ + u32 adr, res; + u32 src, dst; + + FETCH_WORD(src); + adr = AREG((Opcode >> 0) & 7) - 2; + AREG((Opcode >> 0) & 7) = adr; + PRE_IO + READ_WORD_F(adr, res) + res &= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + WRITE_WORD_F(adr, res) + POST_IO +RET(18) +} + +// ANDI +OPCODE(0x0268) +{ + u32 adr, res; + u32 src, dst; + + FETCH_WORD(src); + FETCH_SWORD(adr); + adr += AREG((Opcode >> 0) & 7); + PRE_IO + READ_WORD_F(adr, res) + res &= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + WRITE_WORD_F(adr, res) + POST_IO +RET(20) +} + +// ANDI +OPCODE(0x0270) +{ + u32 adr, res; + u32 src, dst; + + FETCH_WORD(src); + adr = AREG((Opcode >> 0) & 7); + DECODE_EXT_WORD + PRE_IO + READ_WORD_F(adr, res) + res &= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + WRITE_WORD_F(adr, res) + POST_IO +RET(22) +} + +// ANDI +OPCODE(0x0278) +{ + u32 adr, res; + u32 src, dst; + + FETCH_WORD(src); + FETCH_SWORD(adr); + PRE_IO + READ_WORD_F(adr, res) + res &= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + WRITE_WORD_F(adr, res) + POST_IO +RET(20) +} + +// ANDI +OPCODE(0x0279) +{ + u32 adr, res; + u32 src, dst; + + FETCH_WORD(src); + FETCH_LONG(adr); + PRE_IO + READ_WORD_F(adr, res) + res &= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + WRITE_WORD_F(adr, res) + POST_IO +RET(24) +} + +// ANDI +OPCODE(0x025F) +{ + u32 adr, res; + u32 src, dst; + + FETCH_WORD(src); + adr = AREG(7); + AREG(7) += 2; + PRE_IO + READ_WORD_F(adr, res) + res &= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + WRITE_WORD_F(adr, res) + POST_IO +RET(16) +} + +// ANDI +OPCODE(0x0267) +{ + u32 adr, res; + u32 src, dst; + + FETCH_WORD(src); + adr = AREG(7) - 2; + AREG(7) = adr; + PRE_IO + READ_WORD_F(adr, res) + res &= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + WRITE_WORD_F(adr, res) + POST_IO +RET(18) +} + +// ANDI +OPCODE(0x0280) +{ + u32 adr, res; + u32 src, dst; + + FETCH_LONG(src); + res = DREGu32((Opcode >> 0) & 7); + res &= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + DREGu32((Opcode >> 0) & 7) = res; +#ifdef USE_CYCLONE_TIMING +RET(14) +#else +RET(16) +#endif +} + +// ANDI +OPCODE(0x0290) +{ + u32 adr, res; + u32 src, dst; + + FETCH_LONG(src); + adr = AREG((Opcode >> 0) & 7); + PRE_IO + READ_LONG_F(adr, res) + res &= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + WRITE_LONG_F(adr, res) + POST_IO +RET(28) +} + +// ANDI +OPCODE(0x0298) +{ + u32 adr, res; + u32 src, dst; + + FETCH_LONG(src); + adr = AREG((Opcode >> 0) & 7); + AREG((Opcode >> 0) & 7) += 4; + PRE_IO + READ_LONG_F(adr, res) + res &= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + WRITE_LONG_F(adr, res) + POST_IO +RET(28) +} + +// ANDI +OPCODE(0x02A0) +{ + u32 adr, res; + u32 src, dst; + + FETCH_LONG(src); + adr = AREG((Opcode >> 0) & 7) - 4; + AREG((Opcode >> 0) & 7) = adr; + PRE_IO + READ_LONG_F(adr, res) + res &= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + WRITE_LONG_F(adr, res) + POST_IO +RET(30) +} + +// ANDI +OPCODE(0x02A8) +{ + u32 adr, res; + u32 src, dst; + + FETCH_LONG(src); + FETCH_SWORD(adr); + adr += AREG((Opcode >> 0) & 7); + PRE_IO + READ_LONG_F(adr, res) + res &= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + WRITE_LONG_F(adr, res) + POST_IO +RET(32) +} + +// ANDI +OPCODE(0x02B0) +{ + u32 adr, res; + u32 src, dst; + + FETCH_LONG(src); + adr = AREG((Opcode >> 0) & 7); + DECODE_EXT_WORD + PRE_IO + READ_LONG_F(adr, res) + res &= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + WRITE_LONG_F(adr, res) + POST_IO +RET(34) +} + +// ANDI +OPCODE(0x02B8) +{ + u32 adr, res; + u32 src, dst; + + FETCH_LONG(src); + FETCH_SWORD(adr); + PRE_IO + READ_LONG_F(adr, res) + res &= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + WRITE_LONG_F(adr, res) + POST_IO +RET(32) +} + +// ANDI +OPCODE(0x02B9) +{ + u32 adr, res; + u32 src, dst; + + FETCH_LONG(src); + FETCH_LONG(adr); + PRE_IO + READ_LONG_F(adr, res) + res &= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + WRITE_LONG_F(adr, res) + POST_IO +RET(36) +} + +// ANDI +OPCODE(0x029F) +{ + u32 adr, res; + u32 src, dst; + + FETCH_LONG(src); + adr = AREG(7); + AREG(7) += 4; + PRE_IO + READ_LONG_F(adr, res) + res &= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + WRITE_LONG_F(adr, res) + POST_IO +RET(28) +} + +// ANDI +OPCODE(0x02A7) +{ + u32 adr, res; + u32 src, dst; + + FETCH_LONG(src); + adr = AREG(7) - 4; + AREG(7) = adr; + PRE_IO + READ_LONG_F(adr, res) + res &= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + WRITE_LONG_F(adr, res) + POST_IO +RET(30) +} + +// ANDICCR +OPCODE(0x023C) +{ + u32 adr, res; + u32 src, dst; + + FETCH_BYTE(res); + res &= M68K_CCR_MASK; + res &= GET_CCR; + SET_CCR(res) +RET(20) +} + +// ANDISR +OPCODE(0x027C) +{ + u32 adr, res; + u32 src, dst; + + if (flag_S) + { + FETCH_WORD(res); + res &= M68K_SR_MASK; + res &= GET_SR; + SET_SR(res) + if (!flag_S) + { + res = AREG(7); + AREG(7) = ASP; + ASP = res; + } + CHECK_INT_TO_JUMP(20) + } + else + { + u32 newPC = (u32)(PC) - BasePC; + SET_PC(newPC-2); + execute_exception(M68K_PRIVILEGE_VIOLATION_EX); + RET(4) + } +RET(20) +} + +// EORI +OPCODE(0x0A00) +{ + u32 adr, res; + u32 src, dst; + + FETCH_BYTE(src); + res = DREGu8((Opcode >> 0) & 7); + res ^= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + DREGu8((Opcode >> 0) & 7) = res; +RET(8) +} + +// EORI +OPCODE(0x0A10) +{ + u32 adr, res; + u32 src, dst; + + FETCH_BYTE(src); + adr = AREG((Opcode >> 0) & 7); + PRE_IO + READ_BYTE_F(adr, res) + res ^= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + WRITE_BYTE_F(adr, res) + POST_IO +RET(16) +} + +// EORI +OPCODE(0x0A18) +{ + u32 adr, res; + u32 src, dst; + + FETCH_BYTE(src); + adr = AREG((Opcode >> 0) & 7); + AREG((Opcode >> 0) & 7) += 1; + PRE_IO + READ_BYTE_F(adr, res) + res ^= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + WRITE_BYTE_F(adr, res) + POST_IO +RET(16) +} + +// EORI +OPCODE(0x0A20) +{ + u32 adr, res; + u32 src, dst; + + FETCH_BYTE(src); + adr = AREG((Opcode >> 0) & 7) - 1; + AREG((Opcode >> 0) & 7) = adr; + PRE_IO + READ_BYTE_F(adr, res) + res ^= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + WRITE_BYTE_F(adr, res) + POST_IO +RET(18) +} + +// EORI +OPCODE(0x0A28) +{ + u32 adr, res; + u32 src, dst; + + FETCH_BYTE(src); + FETCH_SWORD(adr); + adr += AREG((Opcode >> 0) & 7); + PRE_IO + READ_BYTE_F(adr, res) + res ^= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + WRITE_BYTE_F(adr, res) + POST_IO +RET(20) +} + +// EORI +OPCODE(0x0A30) +{ + u32 adr, res; + u32 src, dst; + + FETCH_BYTE(src); + adr = AREG((Opcode >> 0) & 7); + DECODE_EXT_WORD + PRE_IO + READ_BYTE_F(adr, res) + res ^= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + WRITE_BYTE_F(adr, res) + POST_IO +RET(22) +} + +// EORI +OPCODE(0x0A38) +{ + u32 adr, res; + u32 src, dst; + + FETCH_BYTE(src); + FETCH_SWORD(adr); + PRE_IO + READ_BYTE_F(adr, res) + res ^= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + WRITE_BYTE_F(adr, res) + POST_IO +RET(20) +} + +// EORI +OPCODE(0x0A39) +{ + u32 adr, res; + u32 src, dst; + + FETCH_BYTE(src); + FETCH_LONG(adr); + PRE_IO + READ_BYTE_F(adr, res) + res ^= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + WRITE_BYTE_F(adr, res) + POST_IO +RET(24) +} + +// EORI +OPCODE(0x0A1F) +{ + u32 adr, res; + u32 src, dst; + + FETCH_BYTE(src); + adr = AREG(7); + AREG(7) += 2; + PRE_IO + READ_BYTE_F(adr, res) + res ^= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + WRITE_BYTE_F(adr, res) + POST_IO +RET(16) +} + +// EORI +OPCODE(0x0A27) +{ + u32 adr, res; + u32 src, dst; + + FETCH_BYTE(src); + adr = AREG(7) - 2; + AREG(7) = adr; + PRE_IO + READ_BYTE_F(adr, res) + res ^= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + WRITE_BYTE_F(adr, res) + POST_IO +RET(18) +} + +// EORI +OPCODE(0x0A40) +{ + u32 adr, res; + u32 src, dst; + + FETCH_WORD(src); + res = DREGu16((Opcode >> 0) & 7); + res ^= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + DREGu16((Opcode >> 0) & 7) = res; +RET(8) +} + +// EORI +OPCODE(0x0A50) +{ + u32 adr, res; + u32 src, dst; + + FETCH_WORD(src); + adr = AREG((Opcode >> 0) & 7); + PRE_IO + READ_WORD_F(adr, res) + res ^= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + WRITE_WORD_F(adr, res) + POST_IO +RET(16) +} + +// EORI +OPCODE(0x0A58) +{ + u32 adr, res; + u32 src, dst; + + FETCH_WORD(src); + adr = AREG((Opcode >> 0) & 7); + AREG((Opcode >> 0) & 7) += 2; + PRE_IO + READ_WORD_F(adr, res) + res ^= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + WRITE_WORD_F(adr, res) + POST_IO +RET(16) +} + +// EORI +OPCODE(0x0A60) +{ + u32 adr, res; + u32 src, dst; + + FETCH_WORD(src); + adr = AREG((Opcode >> 0) & 7) - 2; + AREG((Opcode >> 0) & 7) = adr; + PRE_IO + READ_WORD_F(adr, res) + res ^= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + WRITE_WORD_F(adr, res) + POST_IO +RET(18) +} + +// EORI +OPCODE(0x0A68) +{ + u32 adr, res; + u32 src, dst; + + FETCH_WORD(src); + FETCH_SWORD(adr); + adr += AREG((Opcode >> 0) & 7); + PRE_IO + READ_WORD_F(adr, res) + res ^= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + WRITE_WORD_F(adr, res) + POST_IO +RET(20) +} + +// EORI +OPCODE(0x0A70) +{ + u32 adr, res; + u32 src, dst; + + FETCH_WORD(src); + adr = AREG((Opcode >> 0) & 7); + DECODE_EXT_WORD + PRE_IO + READ_WORD_F(adr, res) + res ^= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + WRITE_WORD_F(adr, res) + POST_IO +RET(22) +} + +// EORI +OPCODE(0x0A78) +{ + u32 adr, res; + u32 src, dst; + + FETCH_WORD(src); + FETCH_SWORD(adr); + PRE_IO + READ_WORD_F(adr, res) + res ^= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + WRITE_WORD_F(adr, res) + POST_IO +RET(20) +} + +// EORI +OPCODE(0x0A79) +{ + u32 adr, res; + u32 src, dst; + + FETCH_WORD(src); + FETCH_LONG(adr); + PRE_IO + READ_WORD_F(adr, res) + res ^= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + WRITE_WORD_F(adr, res) + POST_IO +RET(24) +} + +// EORI +OPCODE(0x0A5F) +{ + u32 adr, res; + u32 src, dst; + + FETCH_WORD(src); + adr = AREG(7); + AREG(7) += 2; + PRE_IO + READ_WORD_F(adr, res) + res ^= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + WRITE_WORD_F(adr, res) + POST_IO +RET(16) +} + +// EORI +OPCODE(0x0A67) +{ + u32 adr, res; + u32 src, dst; + + FETCH_WORD(src); + adr = AREG(7) - 2; + AREG(7) = adr; + PRE_IO + READ_WORD_F(adr, res) + res ^= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + WRITE_WORD_F(adr, res) + POST_IO +RET(18) +} + +// EORI +OPCODE(0x0A80) +{ + u32 adr, res; + u32 src, dst; + + FETCH_LONG(src); + res = DREGu32((Opcode >> 0) & 7); + res ^= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + DREGu32((Opcode >> 0) & 7) = res; +RET(16) +} + +// EORI +OPCODE(0x0A90) +{ + u32 adr, res; + u32 src, dst; + + FETCH_LONG(src); + adr = AREG((Opcode >> 0) & 7); + PRE_IO + READ_LONG_F(adr, res) + res ^= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + WRITE_LONG_F(adr, res) + POST_IO +RET(28) +} + +// EORI +OPCODE(0x0A98) +{ + u32 adr, res; + u32 src, dst; + + FETCH_LONG(src); + adr = AREG((Opcode >> 0) & 7); + AREG((Opcode >> 0) & 7) += 4; + PRE_IO + READ_LONG_F(adr, res) + res ^= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + WRITE_LONG_F(adr, res) + POST_IO +RET(28) +} + +// EORI +OPCODE(0x0AA0) +{ + u32 adr, res; + u32 src, dst; + + FETCH_LONG(src); + adr = AREG((Opcode >> 0) & 7) - 4; + AREG((Opcode >> 0) & 7) = adr; + PRE_IO + READ_LONG_F(adr, res) + res ^= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + WRITE_LONG_F(adr, res) + POST_IO +RET(30) +} + +// EORI +OPCODE(0x0AA8) +{ + u32 adr, res; + u32 src, dst; + + FETCH_LONG(src); + FETCH_SWORD(adr); + adr += AREG((Opcode >> 0) & 7); + PRE_IO + READ_LONG_F(adr, res) + res ^= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + WRITE_LONG_F(adr, res) + POST_IO +RET(32) +} + +// EORI +OPCODE(0x0AB0) +{ + u32 adr, res; + u32 src, dst; + + FETCH_LONG(src); + adr = AREG((Opcode >> 0) & 7); + DECODE_EXT_WORD + PRE_IO + READ_LONG_F(adr, res) + res ^= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + WRITE_LONG_F(adr, res) + POST_IO +RET(34) +} + +// EORI +OPCODE(0x0AB8) +{ + u32 adr, res; + u32 src, dst; + + FETCH_LONG(src); + FETCH_SWORD(adr); + PRE_IO + READ_LONG_F(adr, res) + res ^= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + WRITE_LONG_F(adr, res) + POST_IO +RET(32) +} + +// EORI +OPCODE(0x0AB9) +{ + u32 adr, res; + u32 src, dst; + + FETCH_LONG(src); + FETCH_LONG(adr); + PRE_IO + READ_LONG_F(adr, res) + res ^= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + WRITE_LONG_F(adr, res) + POST_IO +RET(36) +} + +// EORI +OPCODE(0x0A9F) +{ + u32 adr, res; + u32 src, dst; + + FETCH_LONG(src); + adr = AREG(7); + AREG(7) += 4; + PRE_IO + READ_LONG_F(adr, res) + res ^= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + WRITE_LONG_F(adr, res) + POST_IO +RET(28) +} + +// EORI +OPCODE(0x0AA7) +{ + u32 adr, res; + u32 src, dst; + + FETCH_LONG(src); + adr = AREG(7) - 4; + AREG(7) = adr; + PRE_IO + READ_LONG_F(adr, res) + res ^= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + WRITE_LONG_F(adr, res) + POST_IO +RET(30) +} + +// EORICCR +OPCODE(0x0A3C) +{ + u32 adr, res; + u32 src, dst; + + FETCH_BYTE(res); + res &= M68K_CCR_MASK; + res ^= GET_CCR; + SET_CCR(res) +RET(20) +} + +// EORISR +OPCODE(0x0A7C) +{ + u32 adr, res; + u32 src, dst; + + if (flag_S) + { + FETCH_WORD(res); + res &= M68K_SR_MASK; + res ^= GET_SR; + SET_SR(res) + if (!flag_S) + { + res = AREG(7); + AREG(7) = ASP; + ASP = res; + } + CHECK_INT_TO_JUMP(20) + } + else + { + u32 newPC = (u32)(PC) - BasePC; + SET_PC(newPC-2); + execute_exception(M68K_PRIVILEGE_VIOLATION_EX); + RET(4) + } +RET(20) +} + +// SUBI +OPCODE(0x0400) +{ + u32 adr, res; + u32 src, dst; + + FETCH_BYTE(src); + dst = DREGu8((Opcode >> 0) & 7); + res = dst - src; + flag_N = flag_X = flag_C = res; + flag_V = (src ^ dst) & (res ^ dst); + flag_NotZ = res & 0xFF; + DREGu8((Opcode >> 0) & 7) = res; +RET(8) +} + +// SUBI +OPCODE(0x0410) +{ + u32 adr, res; + u32 src, dst; + + FETCH_BYTE(src); + adr = AREG((Opcode >> 0) & 7); + PRE_IO + READ_BYTE_F(adr, dst) + res = dst - src; + flag_N = flag_X = flag_C = res; + flag_V = (src ^ dst) & (res ^ dst); + flag_NotZ = res & 0xFF; + WRITE_BYTE_F(adr, res) + POST_IO +RET(16) +} + +// SUBI +OPCODE(0x0418) +{ + u32 adr, res; + u32 src, dst; + + FETCH_BYTE(src); + adr = AREG((Opcode >> 0) & 7); + AREG((Opcode >> 0) & 7) += 1; + PRE_IO + READ_BYTE_F(adr, dst) + res = dst - src; + flag_N = flag_X = flag_C = res; + flag_V = (src ^ dst) & (res ^ dst); + flag_NotZ = res & 0xFF; + WRITE_BYTE_F(adr, res) + POST_IO +RET(16) +} + +// SUBI +OPCODE(0x0420) +{ + u32 adr, res; + u32 src, dst; + + FETCH_BYTE(src); + adr = AREG((Opcode >> 0) & 7) - 1; + AREG((Opcode >> 0) & 7) = adr; + PRE_IO + READ_BYTE_F(adr, dst) + res = dst - src; + flag_N = flag_X = flag_C = res; + flag_V = (src ^ dst) & (res ^ dst); + flag_NotZ = res & 0xFF; + WRITE_BYTE_F(adr, res) + POST_IO +RET(18) +} + +// SUBI +OPCODE(0x0428) +{ + u32 adr, res; + u32 src, dst; + + FETCH_BYTE(src); + FETCH_SWORD(adr); + adr += AREG((Opcode >> 0) & 7); + PRE_IO + READ_BYTE_F(adr, dst) + res = dst - src; + flag_N = flag_X = flag_C = res; + flag_V = (src ^ dst) & (res ^ dst); + flag_NotZ = res & 0xFF; + WRITE_BYTE_F(adr, res) + POST_IO +RET(20) +} + +// SUBI +OPCODE(0x0430) +{ + u32 adr, res; + u32 src, dst; + + FETCH_BYTE(src); + adr = AREG((Opcode >> 0) & 7); + DECODE_EXT_WORD + PRE_IO + READ_BYTE_F(adr, dst) + res = dst - src; + flag_N = flag_X = flag_C = res; + flag_V = (src ^ dst) & (res ^ dst); + flag_NotZ = res & 0xFF; + WRITE_BYTE_F(adr, res) + POST_IO +RET(22) +} + +// SUBI +OPCODE(0x0438) +{ + u32 adr, res; + u32 src, dst; + + FETCH_BYTE(src); + FETCH_SWORD(adr); + PRE_IO + READ_BYTE_F(adr, dst) + res = dst - src; + flag_N = flag_X = flag_C = res; + flag_V = (src ^ dst) & (res ^ dst); + flag_NotZ = res & 0xFF; + WRITE_BYTE_F(adr, res) + POST_IO +RET(20) +} + +// SUBI +OPCODE(0x0439) +{ + u32 adr, res; + u32 src, dst; + + FETCH_BYTE(src); + FETCH_LONG(adr); + PRE_IO + READ_BYTE_F(adr, dst) + res = dst - src; + flag_N = flag_X = flag_C = res; + flag_V = (src ^ dst) & (res ^ dst); + flag_NotZ = res & 0xFF; + WRITE_BYTE_F(adr, res) + POST_IO +RET(24) +} + +// SUBI +OPCODE(0x041F) +{ + u32 adr, res; + u32 src, dst; + + FETCH_BYTE(src); + adr = AREG(7); + AREG(7) += 2; + PRE_IO + READ_BYTE_F(adr, dst) + res = dst - src; + flag_N = flag_X = flag_C = res; + flag_V = (src ^ dst) & (res ^ dst); + flag_NotZ = res & 0xFF; + WRITE_BYTE_F(adr, res) + POST_IO +RET(16) +} + +// SUBI +OPCODE(0x0427) +{ + u32 adr, res; + u32 src, dst; + + FETCH_BYTE(src); + adr = AREG(7) - 2; + AREG(7) = adr; + PRE_IO + READ_BYTE_F(adr, dst) + res = dst - src; + flag_N = flag_X = flag_C = res; + flag_V = (src ^ dst) & (res ^ dst); + flag_NotZ = res & 0xFF; + WRITE_BYTE_F(adr, res) + POST_IO +RET(18) +} + +// SUBI +OPCODE(0x0440) +{ + u32 adr, res; + u32 src, dst; + + FETCH_WORD(src); + dst = DREGu16((Opcode >> 0) & 7); + res = dst - src; + flag_V = ((src ^ dst) & (res ^ dst)) >> 8; + flag_N = flag_X = flag_C = res >> 8; + flag_NotZ = res & 0xFFFF; + DREGu16((Opcode >> 0) & 7) = res; +RET(8) +} + +// SUBI +OPCODE(0x0450) +{ + u32 adr, res; + u32 src, dst; + + FETCH_WORD(src); + adr = AREG((Opcode >> 0) & 7); + PRE_IO + READ_WORD_F(adr, dst) + res = dst - src; + flag_V = ((src ^ dst) & (res ^ dst)) >> 8; + flag_N = flag_X = flag_C = res >> 8; + flag_NotZ = res & 0xFFFF; + WRITE_WORD_F(adr, res) + POST_IO +RET(16) +} + +// SUBI +OPCODE(0x0458) +{ + u32 adr, res; + u32 src, dst; + + FETCH_WORD(src); + adr = AREG((Opcode >> 0) & 7); + AREG((Opcode >> 0) & 7) += 2; + PRE_IO + READ_WORD_F(adr, dst) + res = dst - src; + flag_V = ((src ^ dst) & (res ^ dst)) >> 8; + flag_N = flag_X = flag_C = res >> 8; + flag_NotZ = res & 0xFFFF; + WRITE_WORD_F(adr, res) + POST_IO +RET(16) +} + +// SUBI +OPCODE(0x0460) +{ + u32 adr, res; + u32 src, dst; + + FETCH_WORD(src); + adr = AREG((Opcode >> 0) & 7) - 2; + AREG((Opcode >> 0) & 7) = adr; + PRE_IO + READ_WORD_F(adr, dst) + res = dst - src; + flag_V = ((src ^ dst) & (res ^ dst)) >> 8; + flag_N = flag_X = flag_C = res >> 8; + flag_NotZ = res & 0xFFFF; + WRITE_WORD_F(adr, res) + POST_IO +RET(18) +} + +// SUBI +OPCODE(0x0468) +{ + u32 adr, res; + u32 src, dst; + + FETCH_WORD(src); + FETCH_SWORD(adr); + adr += AREG((Opcode >> 0) & 7); + PRE_IO + READ_WORD_F(adr, dst) + res = dst - src; + flag_V = ((src ^ dst) & (res ^ dst)) >> 8; + flag_N = flag_X = flag_C = res >> 8; + flag_NotZ = res & 0xFFFF; + WRITE_WORD_F(adr, res) + POST_IO +RET(20) +} + +// SUBI +OPCODE(0x0470) +{ + u32 adr, res; + u32 src, dst; + + FETCH_WORD(src); + adr = AREG((Opcode >> 0) & 7); + DECODE_EXT_WORD + PRE_IO + READ_WORD_F(adr, dst) + res = dst - src; + flag_V = ((src ^ dst) & (res ^ dst)) >> 8; + flag_N = flag_X = flag_C = res >> 8; + flag_NotZ = res & 0xFFFF; + WRITE_WORD_F(adr, res) + POST_IO +RET(22) +} + +// SUBI +OPCODE(0x0478) +{ + u32 adr, res; + u32 src, dst; + + FETCH_WORD(src); + FETCH_SWORD(adr); + PRE_IO + READ_WORD_F(adr, dst) + res = dst - src; + flag_V = ((src ^ dst) & (res ^ dst)) >> 8; + flag_N = flag_X = flag_C = res >> 8; + flag_NotZ = res & 0xFFFF; + WRITE_WORD_F(adr, res) + POST_IO +RET(20) +} + +// SUBI +OPCODE(0x0479) +{ + u32 adr, res; + u32 src, dst; + + FETCH_WORD(src); + FETCH_LONG(adr); + PRE_IO + READ_WORD_F(adr, dst) + res = dst - src; + flag_V = ((src ^ dst) & (res ^ dst)) >> 8; + flag_N = flag_X = flag_C = res >> 8; + flag_NotZ = res & 0xFFFF; + WRITE_WORD_F(adr, res) + POST_IO +RET(24) +} + +// SUBI +OPCODE(0x045F) +{ + u32 adr, res; + u32 src, dst; + + FETCH_WORD(src); + adr = AREG(7); + AREG(7) += 2; + PRE_IO + READ_WORD_F(adr, dst) + res = dst - src; + flag_V = ((src ^ dst) & (res ^ dst)) >> 8; + flag_N = flag_X = flag_C = res >> 8; + flag_NotZ = res & 0xFFFF; + WRITE_WORD_F(adr, res) + POST_IO +RET(16) +} + +// SUBI +OPCODE(0x0467) +{ + u32 adr, res; + u32 src, dst; + + FETCH_WORD(src); + adr = AREG(7) - 2; + AREG(7) = adr; + PRE_IO + READ_WORD_F(adr, dst) + res = dst - src; + flag_V = ((src ^ dst) & (res ^ dst)) >> 8; + flag_N = flag_X = flag_C = res >> 8; + flag_NotZ = res & 0xFFFF; + WRITE_WORD_F(adr, res) + POST_IO +RET(18) +} + +// SUBI +OPCODE(0x0480) +{ + u32 adr, res; + u32 src, dst; + + FETCH_LONG(src); + dst = DREGu32((Opcode >> 0) & 7); + res = dst - src; + flag_NotZ = res; + flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23; + flag_V = ((src ^ dst) & (res ^ dst)) >> 24; + flag_N = res >> 24; + DREGu32((Opcode >> 0) & 7) = res; +RET(16) +} + +// SUBI +OPCODE(0x0490) +{ + u32 adr, res; + u32 src, dst; + + FETCH_LONG(src); + adr = AREG((Opcode >> 0) & 7); + PRE_IO + READ_LONG_F(adr, dst) + res = dst - src; + flag_NotZ = res; + flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23; + flag_V = ((src ^ dst) & (res ^ dst)) >> 24; + flag_N = res >> 24; + WRITE_LONG_F(adr, res) + POST_IO +RET(28) +} + +// SUBI +OPCODE(0x0498) +{ + u32 adr, res; + u32 src, dst; + + FETCH_LONG(src); + adr = AREG((Opcode >> 0) & 7); + AREG((Opcode >> 0) & 7) += 4; + PRE_IO + READ_LONG_F(adr, dst) + res = dst - src; + flag_NotZ = res; + flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23; + flag_V = ((src ^ dst) & (res ^ dst)) >> 24; + flag_N = res >> 24; + WRITE_LONG_F(adr, res) + POST_IO +RET(28) +} + +// SUBI +OPCODE(0x04A0) +{ + u32 adr, res; + u32 src, dst; + + FETCH_LONG(src); + adr = AREG((Opcode >> 0) & 7) - 4; + AREG((Opcode >> 0) & 7) = adr; + PRE_IO + READ_LONG_F(adr, dst) + res = dst - src; + flag_NotZ = res; + flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23; + flag_V = ((src ^ dst) & (res ^ dst)) >> 24; + flag_N = res >> 24; + WRITE_LONG_F(adr, res) + POST_IO +RET(30) +} + +// SUBI +OPCODE(0x04A8) +{ + u32 adr, res; + u32 src, dst; + + FETCH_LONG(src); + FETCH_SWORD(adr); + adr += AREG((Opcode >> 0) & 7); + PRE_IO + READ_LONG_F(adr, dst) + res = dst - src; + flag_NotZ = res; + flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23; + flag_V = ((src ^ dst) & (res ^ dst)) >> 24; + flag_N = res >> 24; + WRITE_LONG_F(adr, res) + POST_IO +RET(32) +} + +// SUBI +OPCODE(0x04B0) +{ + u32 adr, res; + u32 src, dst; + + FETCH_LONG(src); + adr = AREG((Opcode >> 0) & 7); + DECODE_EXT_WORD + PRE_IO + READ_LONG_F(adr, dst) + res = dst - src; + flag_NotZ = res; + flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23; + flag_V = ((src ^ dst) & (res ^ dst)) >> 24; + flag_N = res >> 24; + WRITE_LONG_F(adr, res) + POST_IO +RET(34) +} + +// SUBI +OPCODE(0x04B8) +{ + u32 adr, res; + u32 src, dst; + + FETCH_LONG(src); + FETCH_SWORD(adr); + PRE_IO + READ_LONG_F(adr, dst) + res = dst - src; + flag_NotZ = res; + flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23; + flag_V = ((src ^ dst) & (res ^ dst)) >> 24; + flag_N = res >> 24; + WRITE_LONG_F(adr, res) + POST_IO +RET(32) +} + +// SUBI +OPCODE(0x04B9) +{ + u32 adr, res; + u32 src, dst; + + FETCH_LONG(src); + FETCH_LONG(adr); + PRE_IO + READ_LONG_F(adr, dst) + res = dst - src; + flag_NotZ = res; + flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23; + flag_V = ((src ^ dst) & (res ^ dst)) >> 24; + flag_N = res >> 24; + WRITE_LONG_F(adr, res) + POST_IO +RET(36) +} + +// SUBI +OPCODE(0x049F) +{ + u32 adr, res; + u32 src, dst; + + FETCH_LONG(src); + adr = AREG(7); + AREG(7) += 4; + PRE_IO + READ_LONG_F(adr, dst) + res = dst - src; + flag_NotZ = res; + flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23; + flag_V = ((src ^ dst) & (res ^ dst)) >> 24; + flag_N = res >> 24; + WRITE_LONG_F(adr, res) + POST_IO +RET(28) +} + +// SUBI +OPCODE(0x04A7) +{ + u32 adr, res; + u32 src, dst; + + FETCH_LONG(src); + adr = AREG(7) - 4; + AREG(7) = adr; + PRE_IO + READ_LONG_F(adr, dst) + res = dst - src; + flag_NotZ = res; + flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23; + flag_V = ((src ^ dst) & (res ^ dst)) >> 24; + flag_N = res >> 24; + WRITE_LONG_F(adr, res) + POST_IO +RET(30) +} + +// ADDI +OPCODE(0x0600) +{ + u32 adr, res; + u32 src, dst; + + FETCH_BYTE(src); + dst = DREGu8((Opcode >> 0) & 7); + res = dst + src; + flag_N = flag_X = flag_C = res; + flag_V = (src ^ res) & (dst ^ res); + flag_NotZ = res & 0xFF; + DREGu8((Opcode >> 0) & 7) = res; +RET(8) +} + +// ADDI +OPCODE(0x0610) +{ + u32 adr, res; + u32 src, dst; + + FETCH_BYTE(src); + adr = AREG((Opcode >> 0) & 7); + PRE_IO + READ_BYTE_F(adr, dst) + res = dst + src; + flag_N = flag_X = flag_C = res; + flag_V = (src ^ res) & (dst ^ res); + flag_NotZ = res & 0xFF; + WRITE_BYTE_F(adr, res) + POST_IO +RET(16) +} + +// ADDI +OPCODE(0x0618) +{ + u32 adr, res; + u32 src, dst; + + FETCH_BYTE(src); + adr = AREG((Opcode >> 0) & 7); + AREG((Opcode >> 0) & 7) += 1; + PRE_IO + READ_BYTE_F(adr, dst) + res = dst + src; + flag_N = flag_X = flag_C = res; + flag_V = (src ^ res) & (dst ^ res); + flag_NotZ = res & 0xFF; + WRITE_BYTE_F(adr, res) + POST_IO +RET(16) +} + +// ADDI +OPCODE(0x0620) +{ + u32 adr, res; + u32 src, dst; + + FETCH_BYTE(src); + adr = AREG((Opcode >> 0) & 7) - 1; + AREG((Opcode >> 0) & 7) = adr; + PRE_IO + READ_BYTE_F(adr, dst) + res = dst + src; + flag_N = flag_X = flag_C = res; + flag_V = (src ^ res) & (dst ^ res); + flag_NotZ = res & 0xFF; + WRITE_BYTE_F(adr, res) + POST_IO +RET(18) +} + +// ADDI +OPCODE(0x0628) +{ + u32 adr, res; + u32 src, dst; + + FETCH_BYTE(src); + FETCH_SWORD(adr); + adr += AREG((Opcode >> 0) & 7); + PRE_IO + READ_BYTE_F(adr, dst) + res = dst + src; + flag_N = flag_X = flag_C = res; + flag_V = (src ^ res) & (dst ^ res); + flag_NotZ = res & 0xFF; + WRITE_BYTE_F(adr, res) + POST_IO +RET(20) +} + +// ADDI +OPCODE(0x0630) +{ + u32 adr, res; + u32 src, dst; + + FETCH_BYTE(src); + adr = AREG((Opcode >> 0) & 7); + DECODE_EXT_WORD + PRE_IO + READ_BYTE_F(adr, dst) + res = dst + src; + flag_N = flag_X = flag_C = res; + flag_V = (src ^ res) & (dst ^ res); + flag_NotZ = res & 0xFF; + WRITE_BYTE_F(adr, res) + POST_IO +RET(22) +} + +// ADDI +OPCODE(0x0638) +{ + u32 adr, res; + u32 src, dst; + + FETCH_BYTE(src); + FETCH_SWORD(adr); + PRE_IO + READ_BYTE_F(adr, dst) + res = dst + src; + flag_N = flag_X = flag_C = res; + flag_V = (src ^ res) & (dst ^ res); + flag_NotZ = res & 0xFF; + WRITE_BYTE_F(adr, res) + POST_IO +RET(20) +} + +// ADDI +OPCODE(0x0639) +{ + u32 adr, res; + u32 src, dst; + + FETCH_BYTE(src); + FETCH_LONG(adr); + PRE_IO + READ_BYTE_F(adr, dst) + res = dst + src; + flag_N = flag_X = flag_C = res; + flag_V = (src ^ res) & (dst ^ res); + flag_NotZ = res & 0xFF; + WRITE_BYTE_F(adr, res) + POST_IO +RET(24) +} + +// ADDI +OPCODE(0x061F) +{ + u32 adr, res; + u32 src, dst; + + FETCH_BYTE(src); + adr = AREG(7); + AREG(7) += 2; + PRE_IO + READ_BYTE_F(adr, dst) + res = dst + src; + flag_N = flag_X = flag_C = res; + flag_V = (src ^ res) & (dst ^ res); + flag_NotZ = res & 0xFF; + WRITE_BYTE_F(adr, res) + POST_IO +RET(16) +} + +// ADDI +OPCODE(0x0627) +{ + u32 adr, res; + u32 src, dst; + + FETCH_BYTE(src); + adr = AREG(7) - 2; + AREG(7) = adr; + PRE_IO + READ_BYTE_F(adr, dst) + res = dst + src; + flag_N = flag_X = flag_C = res; + flag_V = (src ^ res) & (dst ^ res); + flag_NotZ = res & 0xFF; + WRITE_BYTE_F(adr, res) + POST_IO +RET(18) +} + +// ADDI +OPCODE(0x0640) +{ + u32 adr, res; + u32 src, dst; + + FETCH_WORD(src); + dst = DREGu16((Opcode >> 0) & 7); + res = dst + src; + flag_V = ((src ^ res) & (dst ^ res)) >> 8; + flag_N = flag_X = flag_C = res >> 8; + flag_NotZ = res & 0xFFFF; + DREGu16((Opcode >> 0) & 7) = res; +RET(8) +} + +// ADDI +OPCODE(0x0650) +{ + u32 adr, res; + u32 src, dst; + + FETCH_WORD(src); + adr = AREG((Opcode >> 0) & 7); + PRE_IO + READ_WORD_F(adr, dst) + res = dst + src; + flag_V = ((src ^ res) & (dst ^ res)) >> 8; + flag_N = flag_X = flag_C = res >> 8; + flag_NotZ = res & 0xFFFF; + WRITE_WORD_F(adr, res) + POST_IO +RET(16) +} + +// ADDI +OPCODE(0x0658) +{ + u32 adr, res; + u32 src, dst; + + FETCH_WORD(src); + adr = AREG((Opcode >> 0) & 7); + AREG((Opcode >> 0) & 7) += 2; + PRE_IO + READ_WORD_F(adr, dst) + res = dst + src; + flag_V = ((src ^ res) & (dst ^ res)) >> 8; + flag_N = flag_X = flag_C = res >> 8; + flag_NotZ = res & 0xFFFF; + WRITE_WORD_F(adr, res) + POST_IO +RET(16) +} + +// ADDI +OPCODE(0x0660) +{ + u32 adr, res; + u32 src, dst; + + FETCH_WORD(src); + adr = AREG((Opcode >> 0) & 7) - 2; + AREG((Opcode >> 0) & 7) = adr; + PRE_IO + READ_WORD_F(adr, dst) + res = dst + src; + flag_V = ((src ^ res) & (dst ^ res)) >> 8; + flag_N = flag_X = flag_C = res >> 8; + flag_NotZ = res & 0xFFFF; + WRITE_WORD_F(adr, res) + POST_IO +RET(18) +} + +// ADDI +OPCODE(0x0668) +{ + u32 adr, res; + u32 src, dst; + + FETCH_WORD(src); + FETCH_SWORD(adr); + adr += AREG((Opcode >> 0) & 7); + PRE_IO + READ_WORD_F(adr, dst) + res = dst + src; + flag_V = ((src ^ res) & (dst ^ res)) >> 8; + flag_N = flag_X = flag_C = res >> 8; + flag_NotZ = res & 0xFFFF; + WRITE_WORD_F(adr, res) + POST_IO +RET(20) +} + +// ADDI +OPCODE(0x0670) +{ + u32 adr, res; + u32 src, dst; + + FETCH_WORD(src); + adr = AREG((Opcode >> 0) & 7); + DECODE_EXT_WORD + PRE_IO + READ_WORD_F(adr, dst) + res = dst + src; + flag_V = ((src ^ res) & (dst ^ res)) >> 8; + flag_N = flag_X = flag_C = res >> 8; + flag_NotZ = res & 0xFFFF; + WRITE_WORD_F(adr, res) + POST_IO +RET(22) +} + +// ADDI +OPCODE(0x0678) +{ + u32 adr, res; + u32 src, dst; + + FETCH_WORD(src); + FETCH_SWORD(adr); + PRE_IO + READ_WORD_F(adr, dst) + res = dst + src; + flag_V = ((src ^ res) & (dst ^ res)) >> 8; + flag_N = flag_X = flag_C = res >> 8; + flag_NotZ = res & 0xFFFF; + WRITE_WORD_F(adr, res) + POST_IO +RET(20) +} + +// ADDI +OPCODE(0x0679) +{ + u32 adr, res; + u32 src, dst; + + FETCH_WORD(src); + FETCH_LONG(adr); + PRE_IO + READ_WORD_F(adr, dst) + res = dst + src; + flag_V = ((src ^ res) & (dst ^ res)) >> 8; + flag_N = flag_X = flag_C = res >> 8; + flag_NotZ = res & 0xFFFF; + WRITE_WORD_F(adr, res) + POST_IO +RET(24) +} + +// ADDI +OPCODE(0x065F) +{ + u32 adr, res; + u32 src, dst; + + FETCH_WORD(src); + adr = AREG(7); + AREG(7) += 2; + PRE_IO + READ_WORD_F(adr, dst) + res = dst + src; + flag_V = ((src ^ res) & (dst ^ res)) >> 8; + flag_N = flag_X = flag_C = res >> 8; + flag_NotZ = res & 0xFFFF; + WRITE_WORD_F(adr, res) + POST_IO +RET(16) +} + +// ADDI +OPCODE(0x0667) +{ + u32 adr, res; + u32 src, dst; + + FETCH_WORD(src); + adr = AREG(7) - 2; + AREG(7) = adr; + PRE_IO + READ_WORD_F(adr, dst) + res = dst + src; + flag_V = ((src ^ res) & (dst ^ res)) >> 8; + flag_N = flag_X = flag_C = res >> 8; + flag_NotZ = res & 0xFFFF; + WRITE_WORD_F(adr, res) + POST_IO +RET(18) +} + +// ADDI +OPCODE(0x0680) +{ + u32 adr, res; + u32 src, dst; + + FETCH_LONG(src); + dst = DREGu32((Opcode >> 0) & 7); + res = dst + src; + flag_NotZ = res; + flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23; + flag_V = ((src ^ res) & (dst ^ res)) >> 24; + flag_N = res >> 24; + DREGu32((Opcode >> 0) & 7) = res; +RET(16) +} + +// ADDI +OPCODE(0x0690) +{ + u32 adr, res; + u32 src, dst; + + FETCH_LONG(src); + adr = AREG((Opcode >> 0) & 7); + PRE_IO + READ_LONG_F(adr, dst) + res = dst + src; + flag_NotZ = res; + flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23; + flag_V = ((src ^ res) & (dst ^ res)) >> 24; + flag_N = res >> 24; + WRITE_LONG_F(adr, res) + POST_IO +RET(28) +} + +// ADDI +OPCODE(0x0698) +{ + u32 adr, res; + u32 src, dst; + + FETCH_LONG(src); + adr = AREG((Opcode >> 0) & 7); + AREG((Opcode >> 0) & 7) += 4; + PRE_IO + READ_LONG_F(adr, dst) + res = dst + src; + flag_NotZ = res; + flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23; + flag_V = ((src ^ res) & (dst ^ res)) >> 24; + flag_N = res >> 24; + WRITE_LONG_F(adr, res) + POST_IO +RET(28) +} + +// ADDI +OPCODE(0x06A0) +{ + u32 adr, res; + u32 src, dst; + + FETCH_LONG(src); + adr = AREG((Opcode >> 0) & 7) - 4; + AREG((Opcode >> 0) & 7) = adr; + PRE_IO + READ_LONG_F(adr, dst) + res = dst + src; + flag_NotZ = res; + flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23; + flag_V = ((src ^ res) & (dst ^ res)) >> 24; + flag_N = res >> 24; + WRITE_LONG_F(adr, res) + POST_IO +RET(30) +} + +// ADDI +OPCODE(0x06A8) +{ + u32 adr, res; + u32 src, dst; + + FETCH_LONG(src); + FETCH_SWORD(adr); + adr += AREG((Opcode >> 0) & 7); + PRE_IO + READ_LONG_F(adr, dst) + res = dst + src; + flag_NotZ = res; + flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23; + flag_V = ((src ^ res) & (dst ^ res)) >> 24; + flag_N = res >> 24; + WRITE_LONG_F(adr, res) + POST_IO +RET(32) +} + +// ADDI +OPCODE(0x06B0) +{ + u32 adr, res; + u32 src, dst; + + FETCH_LONG(src); + adr = AREG((Opcode >> 0) & 7); + DECODE_EXT_WORD + PRE_IO + READ_LONG_F(adr, dst) + res = dst + src; + flag_NotZ = res; + flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23; + flag_V = ((src ^ res) & (dst ^ res)) >> 24; + flag_N = res >> 24; + WRITE_LONG_F(adr, res) + POST_IO +RET(34) +} + +// ADDI +OPCODE(0x06B8) +{ + u32 adr, res; + u32 src, dst; + + FETCH_LONG(src); + FETCH_SWORD(adr); + PRE_IO + READ_LONG_F(adr, dst) + res = dst + src; + flag_NotZ = res; + flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23; + flag_V = ((src ^ res) & (dst ^ res)) >> 24; + flag_N = res >> 24; + WRITE_LONG_F(adr, res) + POST_IO +RET(32) +} + +// ADDI +OPCODE(0x06B9) +{ + u32 adr, res; + u32 src, dst; + + FETCH_LONG(src); + FETCH_LONG(adr); + PRE_IO + READ_LONG_F(adr, dst) + res = dst + src; + flag_NotZ = res; + flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23; + flag_V = ((src ^ res) & (dst ^ res)) >> 24; + flag_N = res >> 24; + WRITE_LONG_F(adr, res) + POST_IO +RET(36) +} + +// ADDI +OPCODE(0x069F) +{ + u32 adr, res; + u32 src, dst; + + FETCH_LONG(src); + adr = AREG(7); + AREG(7) += 4; + PRE_IO + READ_LONG_F(adr, dst) + res = dst + src; + flag_NotZ = res; + flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23; + flag_V = ((src ^ res) & (dst ^ res)) >> 24; + flag_N = res >> 24; + WRITE_LONG_F(adr, res) + POST_IO +RET(28) +} + +// ADDI +OPCODE(0x06A7) +{ + u32 adr, res; + u32 src, dst; + + FETCH_LONG(src); + adr = AREG(7) - 4; + AREG(7) = adr; + PRE_IO + READ_LONG_F(adr, dst) + res = dst + src; + flag_NotZ = res; + flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23; + flag_V = ((src ^ res) & (dst ^ res)) >> 24; + flag_N = res >> 24; + WRITE_LONG_F(adr, res) + POST_IO +RET(30) +} + +// CMPI +OPCODE(0x0C00) +{ + u32 adr, res; + u32 src, dst; + + FETCH_BYTE(src); + dst = DREGu8((Opcode >> 0) & 7); + res = dst - src; + flag_N = flag_C = res; + flag_V = (src ^ dst) & (res ^ dst); + flag_NotZ = res & 0xFF; +RET(8) +} + +// CMPI +OPCODE(0x0C10) +{ + u32 adr, res; + u32 src, dst; + + FETCH_BYTE(src); + adr = AREG((Opcode >> 0) & 7); + PRE_IO + READ_BYTE_F(adr, dst) + res = dst - src; + flag_N = flag_C = res; + flag_V = (src ^ dst) & (res ^ dst); + flag_NotZ = res & 0xFF; + POST_IO +RET(12) +} + +// CMPI +OPCODE(0x0C18) +{ + u32 adr, res; + u32 src, dst; + + FETCH_BYTE(src); + adr = AREG((Opcode >> 0) & 7); + AREG((Opcode >> 0) & 7) += 1; + PRE_IO + READ_BYTE_F(adr, dst) + res = dst - src; + flag_N = flag_C = res; + flag_V = (src ^ dst) & (res ^ dst); + flag_NotZ = res & 0xFF; + POST_IO +RET(12) +} + +// CMPI +OPCODE(0x0C20) +{ + u32 adr, res; + u32 src, dst; + + FETCH_BYTE(src); + adr = AREG((Opcode >> 0) & 7) - 1; + AREG((Opcode >> 0) & 7) = adr; + PRE_IO + READ_BYTE_F(adr, dst) + res = dst - src; + flag_N = flag_C = res; + flag_V = (src ^ dst) & (res ^ dst); + flag_NotZ = res & 0xFF; + POST_IO +RET(14) +} + +// CMPI +OPCODE(0x0C28) +{ + u32 adr, res; + u32 src, dst; + + FETCH_BYTE(src); + FETCH_SWORD(adr); + adr += AREG((Opcode >> 0) & 7); + PRE_IO + READ_BYTE_F(adr, dst) + res = dst - src; + flag_N = flag_C = res; + flag_V = (src ^ dst) & (res ^ dst); + flag_NotZ = res & 0xFF; + POST_IO +RET(16) +} + +// CMPI +OPCODE(0x0C30) +{ + u32 adr, res; + u32 src, dst; + + FETCH_BYTE(src); + adr = AREG((Opcode >> 0) & 7); + DECODE_EXT_WORD + PRE_IO + READ_BYTE_F(adr, dst) + res = dst - src; + flag_N = flag_C = res; + flag_V = (src ^ dst) & (res ^ dst); + flag_NotZ = res & 0xFF; + POST_IO +RET(18) +} + +// CMPI +OPCODE(0x0C38) +{ + u32 adr, res; + u32 src, dst; + + FETCH_BYTE(src); + FETCH_SWORD(adr); + PRE_IO + READ_BYTE_F(adr, dst) + res = dst - src; + flag_N = flag_C = res; + flag_V = (src ^ dst) & (res ^ dst); + flag_NotZ = res & 0xFF; + POST_IO +RET(16) +} + +// CMPI +OPCODE(0x0C39) +{ + u32 adr, res; + u32 src, dst; + + FETCH_BYTE(src); + FETCH_LONG(adr); + PRE_IO + READ_BYTE_F(adr, dst) + res = dst - src; + flag_N = flag_C = res; + flag_V = (src ^ dst) & (res ^ dst); + flag_NotZ = res & 0xFF; + POST_IO +RET(20) +} + +// CMPI +OPCODE(0x0C1F) +{ + u32 adr, res; + u32 src, dst; + + FETCH_BYTE(src); + adr = AREG(7); + AREG(7) += 2; + PRE_IO + READ_BYTE_F(adr, dst) + res = dst - src; + flag_N = flag_C = res; + flag_V = (src ^ dst) & (res ^ dst); + flag_NotZ = res & 0xFF; + POST_IO +RET(12) +} + +// CMPI +OPCODE(0x0C27) +{ + u32 adr, res; + u32 src, dst; + + FETCH_BYTE(src); + adr = AREG(7) - 2; + AREG(7) = adr; + PRE_IO + READ_BYTE_F(adr, dst) + res = dst - src; + flag_N = flag_C = res; + flag_V = (src ^ dst) & (res ^ dst); + flag_NotZ = res & 0xFF; + POST_IO +RET(14) +} + +// CMPI +OPCODE(0x0C40) +{ + u32 adr, res; + u32 src, dst; + + FETCH_WORD(src); + dst = DREGu16((Opcode >> 0) & 7); + res = dst - src; + flag_V = ((src ^ dst) & (res ^ dst)) >> 8; + flag_N = flag_C = res >> 8; + flag_NotZ = res & 0xFFFF; +RET(8) +} + +// CMPI +OPCODE(0x0C50) +{ + u32 adr, res; + u32 src, dst; + + FETCH_WORD(src); + adr = AREG((Opcode >> 0) & 7); + PRE_IO + READ_WORD_F(adr, dst) + res = dst - src; + flag_V = ((src ^ dst) & (res ^ dst)) >> 8; + flag_N = flag_C = res >> 8; + flag_NotZ = res & 0xFFFF; + POST_IO +RET(12) +} + +// CMPI +OPCODE(0x0C58) +{ + u32 adr, res; + u32 src, dst; + + FETCH_WORD(src); + adr = AREG((Opcode >> 0) & 7); + AREG((Opcode >> 0) & 7) += 2; + PRE_IO + READ_WORD_F(adr, dst) + res = dst - src; + flag_V = ((src ^ dst) & (res ^ dst)) >> 8; + flag_N = flag_C = res >> 8; + flag_NotZ = res & 0xFFFF; + POST_IO +RET(12) +} + +// CMPI +OPCODE(0x0C60) +{ + u32 adr, res; + u32 src, dst; + + FETCH_WORD(src); + adr = AREG((Opcode >> 0) & 7) - 2; + AREG((Opcode >> 0) & 7) = adr; + PRE_IO + READ_WORD_F(adr, dst) + res = dst - src; + flag_V = ((src ^ dst) & (res ^ dst)) >> 8; + flag_N = flag_C = res >> 8; + flag_NotZ = res & 0xFFFF; + POST_IO +RET(14) +} + +// CMPI +OPCODE(0x0C68) +{ + u32 adr, res; + u32 src, dst; + + FETCH_WORD(src); + FETCH_SWORD(adr); + adr += AREG((Opcode >> 0) & 7); + PRE_IO + READ_WORD_F(adr, dst) + res = dst - src; + flag_V = ((src ^ dst) & (res ^ dst)) >> 8; + flag_N = flag_C = res >> 8; + flag_NotZ = res & 0xFFFF; + POST_IO +RET(16) +} + +// CMPI +OPCODE(0x0C70) +{ + u32 adr, res; + u32 src, dst; + + FETCH_WORD(src); + adr = AREG((Opcode >> 0) & 7); + DECODE_EXT_WORD + PRE_IO + READ_WORD_F(adr, dst) + res = dst - src; + flag_V = ((src ^ dst) & (res ^ dst)) >> 8; + flag_N = flag_C = res >> 8; + flag_NotZ = res & 0xFFFF; + POST_IO +RET(18) +} + +// CMPI +OPCODE(0x0C78) +{ + u32 adr, res; + u32 src, dst; + + FETCH_WORD(src); + FETCH_SWORD(adr); + PRE_IO + READ_WORD_F(adr, dst) + res = dst - src; + flag_V = ((src ^ dst) & (res ^ dst)) >> 8; + flag_N = flag_C = res >> 8; + flag_NotZ = res & 0xFFFF; + POST_IO +RET(16) +} + +// CMPI +OPCODE(0x0C79) +{ + u32 adr, res; + u32 src, dst; + + FETCH_WORD(src); + FETCH_LONG(adr); + PRE_IO + READ_WORD_F(adr, dst) + res = dst - src; + flag_V = ((src ^ dst) & (res ^ dst)) >> 8; + flag_N = flag_C = res >> 8; + flag_NotZ = res & 0xFFFF; + POST_IO +RET(20) +} + +// CMPI +OPCODE(0x0C5F) +{ + u32 adr, res; + u32 src, dst; + + FETCH_WORD(src); + adr = AREG(7); + AREG(7) += 2; + PRE_IO + READ_WORD_F(adr, dst) + res = dst - src; + flag_V = ((src ^ dst) & (res ^ dst)) >> 8; + flag_N = flag_C = res >> 8; + flag_NotZ = res & 0xFFFF; + POST_IO +RET(12) +} + +// CMPI +OPCODE(0x0C67) +{ + u32 adr, res; + u32 src, dst; + + FETCH_WORD(src); + adr = AREG(7) - 2; + AREG(7) = adr; + PRE_IO + READ_WORD_F(adr, dst) + res = dst - src; + flag_V = ((src ^ dst) & (res ^ dst)) >> 8; + flag_N = flag_C = res >> 8; + flag_NotZ = res & 0xFFFF; + POST_IO +RET(14) +} + +// CMPI +OPCODE(0x0C80) +{ + u32 adr, res; + u32 src, dst; + + FETCH_LONG(src); + dst = DREGu32((Opcode >> 0) & 7); + res = dst - src; + flag_NotZ = res; + flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23; + flag_V = ((src ^ dst) & (res ^ dst)) >> 24; + flag_N = res >> 24; +RET(14) +} + +// CMPI +OPCODE(0x0C90) +{ + u32 adr, res; + u32 src, dst; + + FETCH_LONG(src); + adr = AREG((Opcode >> 0) & 7); + PRE_IO + READ_LONG_F(adr, dst) + res = dst - src; + flag_NotZ = res; + flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23; + flag_V = ((src ^ dst) & (res ^ dst)) >> 24; + flag_N = res >> 24; + POST_IO +RET(20) +} + +// CMPI +OPCODE(0x0C98) +{ + u32 adr, res; + u32 src, dst; + + FETCH_LONG(src); + adr = AREG((Opcode >> 0) & 7); + AREG((Opcode >> 0) & 7) += 4; + PRE_IO + READ_LONG_F(adr, dst) + res = dst - src; + flag_NotZ = res; + flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23; + flag_V = ((src ^ dst) & (res ^ dst)) >> 24; + flag_N = res >> 24; + POST_IO +RET(20) +} + +// CMPI +OPCODE(0x0CA0) +{ + u32 adr, res; + u32 src, dst; + + FETCH_LONG(src); + adr = AREG((Opcode >> 0) & 7) - 4; + AREG((Opcode >> 0) & 7) = adr; + PRE_IO + READ_LONG_F(adr, dst) + res = dst - src; + flag_NotZ = res; + flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23; + flag_V = ((src ^ dst) & (res ^ dst)) >> 24; + flag_N = res >> 24; + POST_IO +RET(22) +} + +// CMPI +OPCODE(0x0CA8) +{ + u32 adr, res; + u32 src, dst; + + FETCH_LONG(src); + FETCH_SWORD(adr); + adr += AREG((Opcode >> 0) & 7); + PRE_IO + READ_LONG_F(adr, dst) + res = dst - src; + flag_NotZ = res; + flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23; + flag_V = ((src ^ dst) & (res ^ dst)) >> 24; + flag_N = res >> 24; + POST_IO +RET(24) +} + +// CMPI +OPCODE(0x0CB0) +{ + u32 adr, res; + u32 src, dst; + + FETCH_LONG(src); + adr = AREG((Opcode >> 0) & 7); + DECODE_EXT_WORD + PRE_IO + READ_LONG_F(adr, dst) + res = dst - src; + flag_NotZ = res; + flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23; + flag_V = ((src ^ dst) & (res ^ dst)) >> 24; + flag_N = res >> 24; + POST_IO +RET(26) +} + +// CMPI +OPCODE(0x0CB8) +{ + u32 adr, res; + u32 src, dst; + + FETCH_LONG(src); + FETCH_SWORD(adr); + PRE_IO + READ_LONG_F(adr, dst) + res = dst - src; + flag_NotZ = res; + flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23; + flag_V = ((src ^ dst) & (res ^ dst)) >> 24; + flag_N = res >> 24; + POST_IO +RET(24) +} + +// CMPI +OPCODE(0x0CB9) +{ + u32 adr, res; + u32 src, dst; + + FETCH_LONG(src); + FETCH_LONG(adr); + PRE_IO + READ_LONG_F(adr, dst) + res = dst - src; + flag_NotZ = res; + flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23; + flag_V = ((src ^ dst) & (res ^ dst)) >> 24; + flag_N = res >> 24; + POST_IO +RET(28) +} + +// CMPI +OPCODE(0x0C9F) +{ + u32 adr, res; + u32 src, dst; + + FETCH_LONG(src); + adr = AREG(7); + AREG(7) += 4; + PRE_IO + READ_LONG_F(adr, dst) + res = dst - src; + flag_NotZ = res; + flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23; + flag_V = ((src ^ dst) & (res ^ dst)) >> 24; + flag_N = res >> 24; + POST_IO +RET(20) +} + +// CMPI +OPCODE(0x0CA7) +{ + u32 adr, res; + u32 src, dst; + + FETCH_LONG(src); + adr = AREG(7) - 4; + AREG(7) = adr; + PRE_IO + READ_LONG_F(adr, dst) + res = dst - src; + flag_NotZ = res; + flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23; + flag_V = ((src ^ dst) & (res ^ dst)) >> 24; + flag_N = res >> 24; + POST_IO +RET(22) +} + +// BTSTn +OPCODE(0x0800) +{ + u32 adr, res; + u32 src, dst; + + FETCH_BYTE(src); + src = 1 << (src & 31); + res = DREGu32((Opcode >> 0) & 7); + flag_NotZ = res & src; +RET(10) +} + +// BTSTn +OPCODE(0x0810) +{ + u32 adr, res; + u32 src, dst; + + FETCH_BYTE(src); + src = 1 << (src & 7); + adr = AREG((Opcode >> 0) & 7); + PRE_IO + READ_BYTE_F(adr, res) + flag_NotZ = res & src; + POST_IO +RET(12) +} + +// BTSTn +OPCODE(0x0818) +{ + u32 adr, res; + u32 src, dst; + + FETCH_BYTE(src); + src = 1 << (src & 7); + adr = AREG((Opcode >> 0) & 7); + AREG((Opcode >> 0) & 7) += 1; + PRE_IO + READ_BYTE_F(adr, res) + flag_NotZ = res & src; + POST_IO +RET(12) +} + +// BTSTn +OPCODE(0x0820) +{ + u32 adr, res; + u32 src, dst; + + FETCH_BYTE(src); + src = 1 << (src & 7); + adr = AREG((Opcode >> 0) & 7) - 1; + AREG((Opcode >> 0) & 7) = adr; + PRE_IO + READ_BYTE_F(adr, res) + flag_NotZ = res & src; + POST_IO +RET(14) +} + +// BTSTn +OPCODE(0x0828) +{ + u32 adr, res; + u32 src, dst; + + FETCH_BYTE(src); + src = 1 << (src & 7); + FETCH_SWORD(adr); + adr += AREG((Opcode >> 0) & 7); + PRE_IO + READ_BYTE_F(adr, res) + flag_NotZ = res & src; + POST_IO +RET(16) +} + +// BTSTn +OPCODE(0x0830) +{ + u32 adr, res; + u32 src, dst; + + FETCH_BYTE(src); + src = 1 << (src & 7); + adr = AREG((Opcode >> 0) & 7); + DECODE_EXT_WORD + PRE_IO + READ_BYTE_F(adr, res) + flag_NotZ = res & src; + POST_IO +RET(18) +} + +// BTSTn +OPCODE(0x0838) +{ + u32 adr, res; + u32 src, dst; + + FETCH_BYTE(src); + src = 1 << (src & 7); + FETCH_SWORD(adr); + PRE_IO + READ_BYTE_F(adr, res) + flag_NotZ = res & src; + POST_IO +RET(16) +} + +// BTSTn +OPCODE(0x0839) +{ + u32 adr, res; + u32 src, dst; + + FETCH_BYTE(src); + src = 1 << (src & 7); + FETCH_LONG(adr); + PRE_IO + READ_BYTE_F(adr, res) + flag_NotZ = res & src; + POST_IO +RET(20) +} + +// BTSTn +OPCODE(0x083A) +{ + u32 adr, res; + u32 src, dst; + + FETCH_BYTE(src); + src = 1 << (src & 7); + adr = GET_SWORD + ((u32)(PC) - BasePC); + PC++; + PRE_IO + READ_BYTE_F(adr, res) + flag_NotZ = res & src; + POST_IO +RET(16) +} + +// BTSTn +OPCODE(0x083B) +{ + u32 adr, res; + u32 src, dst; + + FETCH_BYTE(src); + src = 1 << (src & 7); + adr = (u32)(PC) - BasePC; + DECODE_EXT_WORD + PRE_IO + READ_BYTE_F(adr, res) + flag_NotZ = res & src; + POST_IO +RET(18) +} + +// BTSTn +OPCODE(0x081F) +{ + u32 adr, res; + u32 src, dst; + + FETCH_BYTE(src); + src = 1 << (src & 7); + adr = AREG(7); + AREG(7) += 2; + PRE_IO + READ_BYTE_F(adr, res) + flag_NotZ = res & src; + POST_IO +RET(12) +} + +// BTSTn +OPCODE(0x0827) +{ + u32 adr, res; + u32 src, dst; + + FETCH_BYTE(src); + src = 1 << (src & 7); + adr = AREG(7) - 2; + AREG(7) = adr; + PRE_IO + READ_BYTE_F(adr, res) + flag_NotZ = res & src; + POST_IO +RET(14) +} + +// BCHGn +OPCODE(0x0840) +{ + u32 adr, res; + u32 src, dst; + + FETCH_BYTE(src); + src = 1 << (src & 31); + res = DREGu32((Opcode >> 0) & 7); + flag_NotZ = res & src; + res ^= src; + DREGu32((Opcode >> 0) & 7) = res; +RET(12) +} + +// BCHGn +OPCODE(0x0850) +{ + u32 adr, res; + u32 src, dst; + + FETCH_BYTE(src); + src = 1 << (src & 7); + adr = AREG((Opcode >> 0) & 7); + PRE_IO + READ_BYTE_F(adr, res) + flag_NotZ = res & src; + res ^= src; + WRITE_BYTE_F(adr, res) + POST_IO +RET(16) +} + +// BCHGn +OPCODE(0x0858) +{ + u32 adr, res; + u32 src, dst; + + FETCH_BYTE(src); + src = 1 << (src & 7); + adr = AREG((Opcode >> 0) & 7); + AREG((Opcode >> 0) & 7) += 1; + PRE_IO + READ_BYTE_F(adr, res) + flag_NotZ = res & src; + res ^= src; + WRITE_BYTE_F(adr, res) + POST_IO +RET(16) +} + +// BCHGn +OPCODE(0x0860) +{ + u32 adr, res; + u32 src, dst; + + FETCH_BYTE(src); + src = 1 << (src & 7); + adr = AREG((Opcode >> 0) & 7) - 1; + AREG((Opcode >> 0) & 7) = adr; + PRE_IO + READ_BYTE_F(adr, res) + flag_NotZ = res & src; + res ^= src; + WRITE_BYTE_F(adr, res) + POST_IO +RET(18) +} + +// BCHGn +OPCODE(0x0868) +{ + u32 adr, res; + u32 src, dst; + + FETCH_BYTE(src); + src = 1 << (src & 7); + FETCH_SWORD(adr); + adr += AREG((Opcode >> 0) & 7); + PRE_IO + READ_BYTE_F(adr, res) + flag_NotZ = res & src; + res ^= src; + WRITE_BYTE_F(adr, res) + POST_IO +RET(20) +} + +// BCHGn +OPCODE(0x0870) +{ + u32 adr, res; + u32 src, dst; + + FETCH_BYTE(src); + src = 1 << (src & 7); + adr = AREG((Opcode >> 0) & 7); + DECODE_EXT_WORD + PRE_IO + READ_BYTE_F(adr, res) + flag_NotZ = res & src; + res ^= src; + WRITE_BYTE_F(adr, res) + POST_IO +RET(22) +} + +// BCHGn +OPCODE(0x0878) +{ + u32 adr, res; + u32 src, dst; + + FETCH_BYTE(src); + src = 1 << (src & 7); + FETCH_SWORD(adr); + PRE_IO + READ_BYTE_F(adr, res) + flag_NotZ = res & src; + res ^= src; + WRITE_BYTE_F(adr, res) + POST_IO +RET(20) +} + +// BCHGn +OPCODE(0x0879) +{ + u32 adr, res; + u32 src, dst; + + FETCH_BYTE(src); + src = 1 << (src & 7); + FETCH_LONG(adr); + PRE_IO + READ_BYTE_F(adr, res) + flag_NotZ = res & src; + res ^= src; + WRITE_BYTE_F(adr, res) + POST_IO +RET(24) +} + +// BCHGn +OPCODE(0x085F) +{ + u32 adr, res; + u32 src, dst; + + FETCH_BYTE(src); + src = 1 << (src & 7); + adr = AREG(7); + AREG(7) += 2; + PRE_IO + READ_BYTE_F(adr, res) + flag_NotZ = res & src; + res ^= src; + WRITE_BYTE_F(adr, res) + POST_IO +RET(16) +} + +// BCHGn +OPCODE(0x0867) +{ + u32 adr, res; + u32 src, dst; + + FETCH_BYTE(src); + src = 1 << (src & 7); + adr = AREG(7) - 2; + AREG(7) = adr; + PRE_IO + READ_BYTE_F(adr, res) + flag_NotZ = res & src; + res ^= src; + WRITE_BYTE_F(adr, res) + POST_IO +RET(18) +} + +// BCLRn +OPCODE(0x0880) +{ + u32 adr, res; + u32 src, dst; + + FETCH_BYTE(src); + src = 1 << (src & 31); + res = DREGu32((Opcode >> 0) & 7); + flag_NotZ = res & src; + res &= ~src; + DREGu32((Opcode >> 0) & 7) = res; +RET(14) +} + +// BCLRn +OPCODE(0x0890) +{ + u32 adr, res; + u32 src, dst; + + FETCH_BYTE(src); + src = 1 << (src & 7); + adr = AREG((Opcode >> 0) & 7); + PRE_IO + READ_BYTE_F(adr, res) + flag_NotZ = res & src; + res &= ~src; + WRITE_BYTE_F(adr, res) + POST_IO +RET(16) +} + +// BCLRn +OPCODE(0x0898) +{ + u32 adr, res; + u32 src, dst; + + FETCH_BYTE(src); + src = 1 << (src & 7); + adr = AREG((Opcode >> 0) & 7); + AREG((Opcode >> 0) & 7) += 1; + PRE_IO + READ_BYTE_F(adr, res) + flag_NotZ = res & src; + res &= ~src; + WRITE_BYTE_F(adr, res) + POST_IO +RET(16) +} + +// BCLRn +OPCODE(0x08A0) +{ + u32 adr, res; + u32 src, dst; + + FETCH_BYTE(src); + src = 1 << (src & 7); + adr = AREG((Opcode >> 0) & 7) - 1; + AREG((Opcode >> 0) & 7) = adr; + PRE_IO + READ_BYTE_F(adr, res) + flag_NotZ = res & src; + res &= ~src; + WRITE_BYTE_F(adr, res) + POST_IO +RET(18) +} + +// BCLRn +OPCODE(0x08A8) +{ + u32 adr, res; + u32 src, dst; + + FETCH_BYTE(src); + src = 1 << (src & 7); + FETCH_SWORD(adr); + adr += AREG((Opcode >> 0) & 7); + PRE_IO + READ_BYTE_F(adr, res) + flag_NotZ = res & src; + res &= ~src; + WRITE_BYTE_F(adr, res) + POST_IO +RET(20) +} + +// BCLRn +OPCODE(0x08B0) +{ + u32 adr, res; + u32 src, dst; + + FETCH_BYTE(src); + src = 1 << (src & 7); + adr = AREG((Opcode >> 0) & 7); + DECODE_EXT_WORD + PRE_IO + READ_BYTE_F(adr, res) + flag_NotZ = res & src; + res &= ~src; + WRITE_BYTE_F(adr, res) + POST_IO +RET(22) +} + +// BCLRn +OPCODE(0x08B8) +{ + u32 adr, res; + u32 src, dst; + + FETCH_BYTE(src); + src = 1 << (src & 7); + FETCH_SWORD(adr); + PRE_IO + READ_BYTE_F(adr, res) + flag_NotZ = res & src; + res &= ~src; + WRITE_BYTE_F(adr, res) + POST_IO +RET(20) +} + +// BCLRn +OPCODE(0x08B9) +{ + u32 adr, res; + u32 src, dst; + + FETCH_BYTE(src); + src = 1 << (src & 7); + FETCH_LONG(adr); + PRE_IO + READ_BYTE_F(adr, res) + flag_NotZ = res & src; + res &= ~src; + WRITE_BYTE_F(adr, res) + POST_IO +RET(24) +} + +// BCLRn +OPCODE(0x089F) +{ + u32 adr, res; + u32 src, dst; + + FETCH_BYTE(src); + src = 1 << (src & 7); + adr = AREG(7); + AREG(7) += 2; + PRE_IO + READ_BYTE_F(adr, res) + flag_NotZ = res & src; + res &= ~src; + WRITE_BYTE_F(adr, res) + POST_IO +RET(16) +} + +// BCLRn +OPCODE(0x08A7) +{ + u32 adr, res; + u32 src, dst; + + FETCH_BYTE(src); + src = 1 << (src & 7); + adr = AREG(7) - 2; + AREG(7) = adr; + PRE_IO + READ_BYTE_F(adr, res) + flag_NotZ = res & src; + res &= ~src; + WRITE_BYTE_F(adr, res) + POST_IO +RET(18) +} + +// BSETn +OPCODE(0x08C0) +{ + u32 adr, res; + u32 src, dst; + + FETCH_BYTE(src); + src = 1 << (src & 31); + res = DREGu32((Opcode >> 0) & 7); + flag_NotZ = res & src; + res |= src; + DREGu32((Opcode >> 0) & 7) = res; +RET(12) +} + +// BSETn +OPCODE(0x08D0) +{ + u32 adr, res; + u32 src, dst; + + FETCH_BYTE(src); + src = 1 << (src & 7); + adr = AREG((Opcode >> 0) & 7); + PRE_IO + READ_BYTE_F(adr, res) + flag_NotZ = res & src; + res |= src; + WRITE_BYTE_F(adr, res) + POST_IO +RET(16) +} + +// BSETn +OPCODE(0x08D8) +{ + u32 adr, res; + u32 src, dst; + + FETCH_BYTE(src); + src = 1 << (src & 7); + adr = AREG((Opcode >> 0) & 7); + AREG((Opcode >> 0) & 7) += 1; + PRE_IO + READ_BYTE_F(adr, res) + flag_NotZ = res & src; + res |= src; + WRITE_BYTE_F(adr, res) + POST_IO +RET(16) +} + +// BSETn +OPCODE(0x08E0) +{ + u32 adr, res; + u32 src, dst; + + FETCH_BYTE(src); + src = 1 << (src & 7); + adr = AREG((Opcode >> 0) & 7) - 1; + AREG((Opcode >> 0) & 7) = adr; + PRE_IO + READ_BYTE_F(adr, res) + flag_NotZ = res & src; + res |= src; + WRITE_BYTE_F(adr, res) + POST_IO +RET(18) +} + +// BSETn +OPCODE(0x08E8) +{ + u32 adr, res; + u32 src, dst; + + FETCH_BYTE(src); + src = 1 << (src & 7); + FETCH_SWORD(adr); + adr += AREG((Opcode >> 0) & 7); + PRE_IO + READ_BYTE_F(adr, res) + flag_NotZ = res & src; + res |= src; + WRITE_BYTE_F(adr, res) + POST_IO +RET(20) +} + +// BSETn +OPCODE(0x08F0) +{ + u32 adr, res; + u32 src, dst; + + FETCH_BYTE(src); + src = 1 << (src & 7); + adr = AREG((Opcode >> 0) & 7); + DECODE_EXT_WORD + PRE_IO + READ_BYTE_F(adr, res) + flag_NotZ = res & src; + res |= src; + WRITE_BYTE_F(adr, res) + POST_IO +RET(22) +} + +// BSETn +OPCODE(0x08F8) +{ + u32 adr, res; + u32 src, dst; + + FETCH_BYTE(src); + src = 1 << (src & 7); + FETCH_SWORD(adr); + PRE_IO + READ_BYTE_F(adr, res) + flag_NotZ = res & src; + res |= src; + WRITE_BYTE_F(adr, res) + POST_IO +RET(20) +} + +// BSETn +OPCODE(0x08F9) +{ + u32 adr, res; + u32 src, dst; + + FETCH_BYTE(src); + src = 1 << (src & 7); + FETCH_LONG(adr); + PRE_IO + READ_BYTE_F(adr, res) + flag_NotZ = res & src; + res |= src; + WRITE_BYTE_F(adr, res) + POST_IO +RET(24) +} + +// BSETn +OPCODE(0x08DF) +{ + u32 adr, res; + u32 src, dst; + + FETCH_BYTE(src); + src = 1 << (src & 7); + adr = AREG(7); + AREG(7) += 2; + PRE_IO + READ_BYTE_F(adr, res) + flag_NotZ = res & src; + res |= src; + WRITE_BYTE_F(adr, res) + POST_IO +RET(16) +} + +// BSETn +OPCODE(0x08E7) +{ + u32 adr, res; + u32 src, dst; + + FETCH_BYTE(src); + src = 1 << (src & 7); + adr = AREG(7) - 2; + AREG(7) = adr; + PRE_IO + READ_BYTE_F(adr, res) + flag_NotZ = res & src; + res |= src; + WRITE_BYTE_F(adr, res) + POST_IO +RET(18) +} + +// BTST +OPCODE(0x0100) +{ + u32 adr, res; + u32 src, dst; + + src = DREGu32((Opcode >> 9) & 7); + src = 1 << (src & 31); + res = DREGu32((Opcode >> 0) & 7); + flag_NotZ = res & src; +RET(6) +} + +// BTST +OPCODE(0x0110) +{ + u32 adr, res; + u32 src, dst; + + src = DREGu8((Opcode >> 9) & 7); + src = 1 << (src & 7); + adr = AREG((Opcode >> 0) & 7); + PRE_IO + READ_BYTE_F(adr, res) + flag_NotZ = res & src; + POST_IO +RET(8) +} + +// BTST +OPCODE(0x0118) +{ + u32 adr, res; + u32 src, dst; + + src = DREGu8((Opcode >> 9) & 7); + src = 1 << (src & 7); + adr = AREG((Opcode >> 0) & 7); + AREG((Opcode >> 0) & 7) += 1; + PRE_IO + READ_BYTE_F(adr, res) + flag_NotZ = res & src; + POST_IO +RET(8) +} + +// BTST +OPCODE(0x0120) +{ + u32 adr, res; + u32 src, dst; + + src = DREGu8((Opcode >> 9) & 7); + src = 1 << (src & 7); + adr = AREG((Opcode >> 0) & 7) - 1; + AREG((Opcode >> 0) & 7) = adr; + PRE_IO + READ_BYTE_F(adr, res) + flag_NotZ = res & src; + POST_IO +RET(10) +} + +// BTST +OPCODE(0x0128) +{ + u32 adr, res; + u32 src, dst; + + src = DREGu8((Opcode >> 9) & 7); + src = 1 << (src & 7); + FETCH_SWORD(adr); + adr += AREG((Opcode >> 0) & 7); + PRE_IO + READ_BYTE_F(adr, res) + flag_NotZ = res & src; + POST_IO +RET(12) +} + +// BTST +OPCODE(0x0130) +{ + u32 adr, res; + u32 src, dst; + + src = DREGu8((Opcode >> 9) & 7); + src = 1 << (src & 7); + adr = AREG((Opcode >> 0) & 7); + DECODE_EXT_WORD + PRE_IO + READ_BYTE_F(adr, res) + flag_NotZ = res & src; + POST_IO +RET(14) +} + +// BTST +OPCODE(0x0138) +{ + u32 adr, res; + u32 src, dst; + + src = DREGu8((Opcode >> 9) & 7); + src = 1 << (src & 7); + FETCH_SWORD(adr); + PRE_IO + READ_BYTE_F(adr, res) + flag_NotZ = res & src; + POST_IO +RET(12) +} + +// BTST +OPCODE(0x0139) +{ + u32 adr, res; + u32 src, dst; + + src = DREGu8((Opcode >> 9) & 7); + src = 1 << (src & 7); + FETCH_LONG(adr); + PRE_IO + READ_BYTE_F(adr, res) + flag_NotZ = res & src; + POST_IO +RET(16) +} + +// BTST +OPCODE(0x013A) +{ + u32 adr, res; + u32 src, dst; + + src = DREGu8((Opcode >> 9) & 7); + src = 1 << (src & 7); + adr = GET_SWORD + ((u32)(PC) - BasePC); + PC++; + PRE_IO + READ_BYTE_F(adr, res) + flag_NotZ = res & src; + POST_IO +RET(12) +} + +// BTST +OPCODE(0x013B) +{ + u32 adr, res; + u32 src, dst; + + src = DREGu8((Opcode >> 9) & 7); + src = 1 << (src & 7); + adr = (u32)(PC) - BasePC; + DECODE_EXT_WORD + PRE_IO + READ_BYTE_F(adr, res) + flag_NotZ = res & src; + POST_IO +RET(14) +} + +// BTST +OPCODE(0x013C) +{ + u32 adr, res; + u32 src, dst; + + src = DREGu8((Opcode >> 9) & 7); + src = 1 << (src & 7); + FETCH_BYTE(res); + flag_NotZ = res & src; +RET(8) +} + +// BTST +OPCODE(0x011F) +{ + u32 adr, res; + u32 src, dst; + + src = DREGu8((Opcode >> 9) & 7); + src = 1 << (src & 7); + adr = AREG(7); + AREG(7) += 2; + PRE_IO + READ_BYTE_F(adr, res) + flag_NotZ = res & src; + POST_IO +RET(8) +} + +// BTST +OPCODE(0x0127) +{ + u32 adr, res; + u32 src, dst; + + src = DREGu8((Opcode >> 9) & 7); + src = 1 << (src & 7); + adr = AREG(7) - 2; + AREG(7) = adr; + PRE_IO + READ_BYTE_F(adr, res) + flag_NotZ = res & src; + POST_IO +RET(10) +} + +// BCHG +OPCODE(0x0140) +{ + u32 adr, res; + u32 src, dst; + + src = DREGu32((Opcode >> 9) & 7); + src = 1 << (src & 31); + res = DREGu32((Opcode >> 0) & 7); + flag_NotZ = res & src; + res ^= src; + DREGu32((Opcode >> 0) & 7) = res; +RET(8) +} + +// BCHG +OPCODE(0x0150) +{ + u32 adr, res; + u32 src, dst; + + src = DREGu8((Opcode >> 9) & 7); + src = 1 << (src & 7); + adr = AREG((Opcode >> 0) & 7); + PRE_IO + READ_BYTE_F(adr, res) + flag_NotZ = res & src; + res ^= src; + WRITE_BYTE_F(adr, res) + POST_IO +RET(12) +} + +// BCHG +OPCODE(0x0158) +{ + u32 adr, res; + u32 src, dst; + + src = DREGu8((Opcode >> 9) & 7); + src = 1 << (src & 7); + adr = AREG((Opcode >> 0) & 7); + AREG((Opcode >> 0) & 7) += 1; + PRE_IO + READ_BYTE_F(adr, res) + flag_NotZ = res & src; + res ^= src; + WRITE_BYTE_F(adr, res) + POST_IO +RET(12) +} + +// BCHG +OPCODE(0x0160) +{ + u32 adr, res; + u32 src, dst; + + src = DREGu8((Opcode >> 9) & 7); + src = 1 << (src & 7); + adr = AREG((Opcode >> 0) & 7) - 1; + AREG((Opcode >> 0) & 7) = adr; + PRE_IO + READ_BYTE_F(adr, res) + flag_NotZ = res & src; + res ^= src; + WRITE_BYTE_F(adr, res) + POST_IO +RET(14) +} + +// BCHG +OPCODE(0x0168) +{ + u32 adr, res; + u32 src, dst; + + src = DREGu8((Opcode >> 9) & 7); + src = 1 << (src & 7); + FETCH_SWORD(adr); + adr += AREG((Opcode >> 0) & 7); + PRE_IO + READ_BYTE_F(adr, res) + flag_NotZ = res & src; + res ^= src; + WRITE_BYTE_F(adr, res) + POST_IO +RET(16) +} + +// BCHG +OPCODE(0x0170) +{ + u32 adr, res; + u32 src, dst; + + src = DREGu8((Opcode >> 9) & 7); + src = 1 << (src & 7); + adr = AREG((Opcode >> 0) & 7); + DECODE_EXT_WORD + PRE_IO + READ_BYTE_F(adr, res) + flag_NotZ = res & src; + res ^= src; + WRITE_BYTE_F(adr, res) + POST_IO +RET(18) +} + +// BCHG +OPCODE(0x0178) +{ + u32 adr, res; + u32 src, dst; + + src = DREGu8((Opcode >> 9) & 7); + src = 1 << (src & 7); + FETCH_SWORD(adr); + PRE_IO + READ_BYTE_F(adr, res) + flag_NotZ = res & src; + res ^= src; + WRITE_BYTE_F(adr, res) + POST_IO +RET(16) +} + +// BCHG +OPCODE(0x0179) +{ + u32 adr, res; + u32 src, dst; + + src = DREGu8((Opcode >> 9) & 7); + src = 1 << (src & 7); + FETCH_LONG(adr); + PRE_IO + READ_BYTE_F(adr, res) + flag_NotZ = res & src; + res ^= src; + WRITE_BYTE_F(adr, res) + POST_IO +RET(20) +} + +// BCHG +OPCODE(0x015F) +{ + u32 adr, res; + u32 src, dst; + + src = DREGu8((Opcode >> 9) & 7); + src = 1 << (src & 7); + adr = AREG(7); + AREG(7) += 2; + PRE_IO + READ_BYTE_F(adr, res) + flag_NotZ = res & src; + res ^= src; + WRITE_BYTE_F(adr, res) + POST_IO +RET(12) +} + +// BCHG +OPCODE(0x0167) +{ + u32 adr, res; + u32 src, dst; + + src = DREGu8((Opcode >> 9) & 7); + src = 1 << (src & 7); + adr = AREG(7) - 2; + AREG(7) = adr; + PRE_IO + READ_BYTE_F(adr, res) + flag_NotZ = res & src; + res ^= src; + WRITE_BYTE_F(adr, res) + POST_IO +RET(14) +} + +// BCLR +OPCODE(0x0180) +{ + u32 adr, res; + u32 src, dst; + + src = DREGu32((Opcode >> 9) & 7); + src = 1 << (src & 31); + res = DREGu32((Opcode >> 0) & 7); + flag_NotZ = res & src; + res &= ~src; + DREGu32((Opcode >> 0) & 7) = res; +RET(10) +} + +// BCLR +OPCODE(0x0190) +{ + u32 adr, res; + u32 src, dst; + + src = DREGu8((Opcode >> 9) & 7); + src = 1 << (src & 7); + adr = AREG((Opcode >> 0) & 7); + PRE_IO + READ_BYTE_F(adr, res) + flag_NotZ = res & src; + res &= ~src; + WRITE_BYTE_F(adr, res) + POST_IO +RET(12) +} + +// BCLR +OPCODE(0x0198) +{ + u32 adr, res; + u32 src, dst; + + src = DREGu8((Opcode >> 9) & 7); + src = 1 << (src & 7); + adr = AREG((Opcode >> 0) & 7); + AREG((Opcode >> 0) & 7) += 1; + PRE_IO + READ_BYTE_F(adr, res) + flag_NotZ = res & src; + res &= ~src; + WRITE_BYTE_F(adr, res) + POST_IO +RET(12) +} + +// BCLR +OPCODE(0x01A0) +{ + u32 adr, res; + u32 src, dst; + + src = DREGu8((Opcode >> 9) & 7); + src = 1 << (src & 7); + adr = AREG((Opcode >> 0) & 7) - 1; + AREG((Opcode >> 0) & 7) = adr; + PRE_IO + READ_BYTE_F(adr, res) + flag_NotZ = res & src; + res &= ~src; + WRITE_BYTE_F(adr, res) + POST_IO +RET(14) +} + +// BCLR +OPCODE(0x01A8) +{ + u32 adr, res; + u32 src, dst; + + src = DREGu8((Opcode >> 9) & 7); + src = 1 << (src & 7); + FETCH_SWORD(adr); + adr += AREG((Opcode >> 0) & 7); + PRE_IO + READ_BYTE_F(adr, res) + flag_NotZ = res & src; + res &= ~src; + WRITE_BYTE_F(adr, res) + POST_IO +RET(16) +} + +// BCLR +OPCODE(0x01B0) +{ + u32 adr, res; + u32 src, dst; + + src = DREGu8((Opcode >> 9) & 7); + src = 1 << (src & 7); + adr = AREG((Opcode >> 0) & 7); + DECODE_EXT_WORD + PRE_IO + READ_BYTE_F(adr, res) + flag_NotZ = res & src; + res &= ~src; + WRITE_BYTE_F(adr, res) + POST_IO +RET(18) +} + +// BCLR +OPCODE(0x01B8) +{ + u32 adr, res; + u32 src, dst; + + src = DREGu8((Opcode >> 9) & 7); + src = 1 << (src & 7); + FETCH_SWORD(adr); + PRE_IO + READ_BYTE_F(adr, res) + flag_NotZ = res & src; + res &= ~src; + WRITE_BYTE_F(adr, res) + POST_IO +RET(16) +} + +// BCLR +OPCODE(0x01B9) +{ + u32 adr, res; + u32 src, dst; + + src = DREGu8((Opcode >> 9) & 7); + src = 1 << (src & 7); + FETCH_LONG(adr); + PRE_IO + READ_BYTE_F(adr, res) + flag_NotZ = res & src; + res &= ~src; + WRITE_BYTE_F(adr, res) + POST_IO +RET(20) +} + +// BCLR +OPCODE(0x019F) +{ + u32 adr, res; + u32 src, dst; + + src = DREGu8((Opcode >> 9) & 7); + src = 1 << (src & 7); + adr = AREG(7); + AREG(7) += 2; + PRE_IO + READ_BYTE_F(adr, res) + flag_NotZ = res & src; + res &= ~src; + WRITE_BYTE_F(adr, res) + POST_IO +RET(12) +} + +// BCLR +OPCODE(0x01A7) +{ + u32 adr, res; + u32 src, dst; + + src = DREGu8((Opcode >> 9) & 7); + src = 1 << (src & 7); + adr = AREG(7) - 2; + AREG(7) = adr; + PRE_IO + READ_BYTE_F(adr, res) + flag_NotZ = res & src; + res &= ~src; + WRITE_BYTE_F(adr, res) + POST_IO +RET(14) +} + +// BSET +OPCODE(0x01C0) +{ + u32 adr, res; + u32 src, dst; + + src = DREGu32((Opcode >> 9) & 7); + src = 1 << (src & 31); + res = DREGu32((Opcode >> 0) & 7); + flag_NotZ = res & src; + res |= src; + DREGu32((Opcode >> 0) & 7) = res; +RET(8) +} + +// BSET +OPCODE(0x01D0) +{ + u32 adr, res; + u32 src, dst; + + src = DREGu8((Opcode >> 9) & 7); + src = 1 << (src & 7); + adr = AREG((Opcode >> 0) & 7); + PRE_IO + READ_BYTE_F(adr, res) + flag_NotZ = res & src; + res |= src; + WRITE_BYTE_F(adr, res) + POST_IO +RET(12) +} + +// BSET +OPCODE(0x01D8) +{ + u32 adr, res; + u32 src, dst; + + src = DREGu8((Opcode >> 9) & 7); + src = 1 << (src & 7); + adr = AREG((Opcode >> 0) & 7); + AREG((Opcode >> 0) & 7) += 1; + PRE_IO + READ_BYTE_F(adr, res) + flag_NotZ = res & src; + res |= src; + WRITE_BYTE_F(adr, res) + POST_IO +RET(12) +} + +// BSET +OPCODE(0x01E0) +{ + u32 adr, res; + u32 src, dst; + + src = DREGu8((Opcode >> 9) & 7); + src = 1 << (src & 7); + adr = AREG((Opcode >> 0) & 7) - 1; + AREG((Opcode >> 0) & 7) = adr; + PRE_IO + READ_BYTE_F(adr, res) + flag_NotZ = res & src; + res |= src; + WRITE_BYTE_F(adr, res) + POST_IO +RET(14) +} + +// BSET +OPCODE(0x01E8) +{ + u32 adr, res; + u32 src, dst; + + src = DREGu8((Opcode >> 9) & 7); + src = 1 << (src & 7); + FETCH_SWORD(adr); + adr += AREG((Opcode >> 0) & 7); + PRE_IO + READ_BYTE_F(adr, res) + flag_NotZ = res & src; + res |= src; + WRITE_BYTE_F(adr, res) + POST_IO +RET(16) +} + +// BSET +OPCODE(0x01F0) +{ + u32 adr, res; + u32 src, dst; + + src = DREGu8((Opcode >> 9) & 7); + src = 1 << (src & 7); + adr = AREG((Opcode >> 0) & 7); + DECODE_EXT_WORD + PRE_IO + READ_BYTE_F(adr, res) + flag_NotZ = res & src; + res |= src; + WRITE_BYTE_F(adr, res) + POST_IO +RET(18) +} + +// BSET +OPCODE(0x01F8) +{ + u32 adr, res; + u32 src, dst; + + src = DREGu8((Opcode >> 9) & 7); + src = 1 << (src & 7); + FETCH_SWORD(adr); + PRE_IO + READ_BYTE_F(adr, res) + flag_NotZ = res & src; + res |= src; + WRITE_BYTE_F(adr, res) + POST_IO +RET(16) +} + +// BSET +OPCODE(0x01F9) +{ + u32 adr, res; + u32 src, dst; + + src = DREGu8((Opcode >> 9) & 7); + src = 1 << (src & 7); + FETCH_LONG(adr); + PRE_IO + READ_BYTE_F(adr, res) + flag_NotZ = res & src; + res |= src; + WRITE_BYTE_F(adr, res) + POST_IO +RET(20) +} + +// BSET +OPCODE(0x01DF) +{ + u32 adr, res; + u32 src, dst; + + src = DREGu8((Opcode >> 9) & 7); + src = 1 << (src & 7); + adr = AREG(7); + AREG(7) += 2; + PRE_IO + READ_BYTE_F(adr, res) + flag_NotZ = res & src; + res |= src; + WRITE_BYTE_F(adr, res) + POST_IO +RET(12) +} + +// BSET +OPCODE(0x01E7) +{ + u32 adr, res; + u32 src, dst; + + src = DREGu8((Opcode >> 9) & 7); + src = 1 << (src & 7); + adr = AREG(7) - 2; + AREG(7) = adr; + PRE_IO + READ_BYTE_F(adr, res) + flag_NotZ = res & src; + res |= src; + WRITE_BYTE_F(adr, res) + POST_IO +RET(14) +} + +// MOVEPWaD +OPCODE(0x0108) +{ + u32 adr, res; + u32 src, dst; + + FETCH_SWORD(adr); + adr += AREG((Opcode >> 0) & 7); + PRE_IO + READ_BYTE_F(adr + 0, res) + READ_BYTE_F(adr + 2, src) + DREGu16((Opcode >> 9) & 7) = (res << 8) | src; + POST_IO +RET(24) +} + +// MOVEPLaD +OPCODE(0x0148) +{ + u32 adr, res; + u32 src, dst; + + FETCH_SWORD(adr); + adr += AREG((Opcode >> 0) & 7); + PRE_IO + READ_BYTE_F(adr, res) + res <<= 24; + adr += 2; + READ_BYTE_F(adr, src) + res |= src << 16; + adr += 2; + READ_BYTE_F(adr, src) + res |= src << 8; + adr += 2; + READ_BYTE_F(adr, src) + DREG((Opcode >> 9) & 7) = res | src; + POST_IO +RET(32) +} + +// MOVEPWDa +OPCODE(0x0188) +{ + u32 adr, res; + u32 src, dst; + + res = DREGu32((Opcode >> 9) & 7); + FETCH_SWORD(adr); + adr += AREG((Opcode >> 0) & 7); + PRE_IO + WRITE_BYTE_F(adr + 0, res >> 8) + WRITE_BYTE_F(adr + 2, res >> 0) + POST_IO +RET(24) +} + +// MOVEPLDa +OPCODE(0x01C8) +{ + u32 adr, res; + u32 src, dst; + + res = DREGu32((Opcode >> 9) & 7); + FETCH_SWORD(adr); + adr += AREG((Opcode >> 0) & 7); + PRE_IO + WRITE_BYTE_F(adr, res >> 24) + adr += 2; + WRITE_BYTE_F(adr, res >> 16) + adr += 2; + WRITE_BYTE_F(adr, res >> 8) + adr += 2; + WRITE_BYTE_F(adr, res >> 0) + POST_IO +RET(32) +} + +// MOVEB +OPCODE(0x1000) +{ + u32 adr, res; + u32 src, dst; + + res = DREGu8((Opcode >> 0) & 7); + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + DREGu8((Opcode >> 9) & 7) = res; +RET(4) +} + +// MOVEB +OPCODE(0x1080) +{ + u32 adr, res; + u32 src, dst; + + res = DREGu8((Opcode >> 0) & 7); + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + adr = AREG((Opcode >> 9) & 7); + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO +RET(8) +} + +// MOVEB +OPCODE(0x10C0) +{ + u32 adr, res; + u32 src, dst; + + res = DREGu8((Opcode >> 0) & 7); + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + adr = AREG((Opcode >> 9) & 7); + AREG((Opcode >> 9) & 7) += 1; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO +RET(8) +} + +// MOVEB +OPCODE(0x1100) +{ + u32 adr, res; + u32 src, dst; + + res = DREGu8((Opcode >> 0) & 7); + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + adr = AREG((Opcode >> 9) & 7) - 1; + AREG((Opcode >> 9) & 7) = adr; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO +RET(8) +} + +// MOVEB +OPCODE(0x1140) +{ + u32 adr, res; + u32 src, dst; + + res = DREGu8((Opcode >> 0) & 7); + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + FETCH_SWORD(adr); + adr += AREG((Opcode >> 9) & 7); + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO +RET(12) +} + +// MOVEB +OPCODE(0x1180) +{ + u32 adr, res; + u32 src, dst; + + res = DREGu8((Opcode >> 0) & 7); + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + adr = AREG((Opcode >> 9) & 7); + DECODE_EXT_WORD + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO +RET(14) +} + +// MOVEB +OPCODE(0x11C0) +{ + u32 adr, res; + u32 src, dst; + + res = DREGu8((Opcode >> 0) & 7); + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + FETCH_SWORD(adr); + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO +RET(12) +} + +// MOVEB +OPCODE(0x13C0) +{ + u32 adr, res; + u32 src, dst; + + res = DREGu8((Opcode >> 0) & 7); + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + FETCH_LONG(adr); + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO +RET(16) +} + +// MOVEB +OPCODE(0x1EC0) +{ + u32 adr, res; + u32 src, dst; + + res = DREGu8((Opcode >> 0) & 7); + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + adr = AREG(7); + AREG(7) += 2; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO +RET(8) +} + +// MOVEB +OPCODE(0x1F00) +{ + u32 adr, res; + u32 src, dst; + + res = DREGu8((Opcode >> 0) & 7); + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + adr = AREG(7) - 2; + AREG(7) = adr; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO +RET(8) +} + +// MOVEB +OPCODE(0x1008) +{ + u32 adr, res; + u32 src, dst; + + // can't read byte from Ax registers ! + m68kcontext.execinfo |= M68K_FAULTED; + m68kcontext.io_cycle_counter = 0; +/* + goto famec_Exec_End; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + DREGu8((Opcode >> 9) & 7) = res; +*/ +RET(4) +} + +// MOVEB +OPCODE(0x1088) +{ + u32 adr, res; + u32 src, dst; + + // can't read byte from Ax registers ! + m68kcontext.execinfo |= M68K_FAULTED; + m68kcontext.io_cycle_counter = 0; +/* + goto famec_Exec_End; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + adr = AREG((Opcode >> 9) & 7); + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO +*/ +RET(8) +} + +// MOVEB +OPCODE(0x10C8) +{ + u32 adr, res; + u32 src, dst; + + // can't read byte from Ax registers ! + m68kcontext.execinfo |= M68K_FAULTED; + m68kcontext.io_cycle_counter = 0; +/* + goto famec_Exec_End; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + adr = AREG((Opcode >> 9) & 7); + AREG((Opcode >> 9) & 7) += 1; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO +*/ +RET(8) +} + +// MOVEB +OPCODE(0x1108) +{ + u32 adr, res; + u32 src, dst; + + // can't read byte from Ax registers ! + m68kcontext.execinfo |= M68K_FAULTED; + m68kcontext.io_cycle_counter = 0; +/* + goto famec_Exec_End; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + adr = AREG((Opcode >> 9) & 7) - 1; + AREG((Opcode >> 9) & 7) = adr; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO +*/ +RET(8) +} + +// MOVEB +OPCODE(0x1148) +{ + u32 adr, res; + u32 src, dst; + + // can't read byte from Ax registers ! + m68kcontext.execinfo |= M68K_FAULTED; + m68kcontext.io_cycle_counter = 0; +/* + goto famec_Exec_End; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + FETCH_SWORD(adr); + adr += AREG((Opcode >> 9) & 7); + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO +*/ +RET(12) +} + +// MOVEB +OPCODE(0x1188) +{ + u32 adr, res; + u32 src, dst; + + // can't read byte from Ax registers ! + m68kcontext.execinfo |= M68K_FAULTED; + m68kcontext.io_cycle_counter = 0; +/* + goto famec_Exec_End; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + adr = AREG((Opcode >> 9) & 7); + DECODE_EXT_WORD + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO +*/ +RET(14) +} + +// MOVEB +OPCODE(0x11C8) +{ + u32 adr, res; + u32 src, dst; + + // can't read byte from Ax registers ! + m68kcontext.execinfo |= M68K_FAULTED; + m68kcontext.io_cycle_counter = 0; +/* + goto famec_Exec_End; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + FETCH_SWORD(adr); + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO +*/ +RET(12) +} + +// MOVEB +OPCODE(0x13C8) +{ + u32 adr, res; + u32 src, dst; + + // can't read byte from Ax registers ! + m68kcontext.execinfo |= M68K_FAULTED; + m68kcontext.io_cycle_counter = 0; +/* + goto famec_Exec_End; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + FETCH_LONG(adr); + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO +*/ +RET(16) +} + +// MOVEB +OPCODE(0x1EC8) +{ + u32 adr, res; + u32 src, dst; + + // can't read byte from Ax registers ! + m68kcontext.execinfo |= M68K_FAULTED; + m68kcontext.io_cycle_counter = 0; +/* + goto famec_Exec_End; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + adr = AREG(7); + AREG(7) += 2; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO +*/ +RET(8) +} + +// MOVEB +OPCODE(0x1F08) +{ + u32 adr, res; + u32 src, dst; + + // can't read byte from Ax registers ! + m68kcontext.execinfo |= M68K_FAULTED; + m68kcontext.io_cycle_counter = 0; +/* + goto famec_Exec_End; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + adr = AREG(7) - 2; + AREG(7) = adr; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO +*/ +RET(8) +} + +// MOVEB +OPCODE(0x1010) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + PRE_IO + READ_BYTE_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + DREGu8((Opcode >> 9) & 7) = res; + POST_IO +RET(8) +} + +// MOVEB +OPCODE(0x1090) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + PRE_IO + READ_BYTE_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + adr = AREG((Opcode >> 9) & 7); + WRITE_BYTE_F(adr, res) + POST_IO +RET(12) +} + +// MOVEB +OPCODE(0x10D0) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + PRE_IO + READ_BYTE_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + adr = AREG((Opcode >> 9) & 7); + AREG((Opcode >> 9) & 7) += 1; + WRITE_BYTE_F(adr, res) + POST_IO +RET(12) +} + +// MOVEB +OPCODE(0x1110) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + PRE_IO + READ_BYTE_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + adr = AREG((Opcode >> 9) & 7) - 1; + AREG((Opcode >> 9) & 7) = adr; + WRITE_BYTE_F(adr, res) + POST_IO +RET(12) +} + +// MOVEB +OPCODE(0x1150) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + PRE_IO + READ_BYTE_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + FETCH_SWORD(adr); + adr += AREG((Opcode >> 9) & 7); + WRITE_BYTE_F(adr, res) + POST_IO +RET(16) +} + +// MOVEB +OPCODE(0x1190) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + PRE_IO + READ_BYTE_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + adr = AREG((Opcode >> 9) & 7); + DECODE_EXT_WORD + WRITE_BYTE_F(adr, res) + POST_IO +RET(18) +} + +// MOVEB +OPCODE(0x11D0) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + PRE_IO + READ_BYTE_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + FETCH_SWORD(adr); + WRITE_BYTE_F(adr, res) + POST_IO +RET(16) +} + +// MOVEB +OPCODE(0x13D0) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + PRE_IO + READ_BYTE_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + FETCH_LONG(adr); + WRITE_BYTE_F(adr, res) + POST_IO +RET(20) +} + +// MOVEB +OPCODE(0x1ED0) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + PRE_IO + READ_BYTE_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + adr = AREG(7); + AREG(7) += 2; + WRITE_BYTE_F(adr, res) + POST_IO +RET(12) +} + +// MOVEB +OPCODE(0x1F10) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + PRE_IO + READ_BYTE_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + adr = AREG(7) - 2; + AREG(7) = adr; + WRITE_BYTE_F(adr, res) + POST_IO +RET(12) +} + +// MOVEB +OPCODE(0x1018) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + AREG((Opcode >> 0) & 7) += 1; + PRE_IO + READ_BYTE_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + DREGu8((Opcode >> 9) & 7) = res; + POST_IO +RET(8) +} + +// MOVEB +OPCODE(0x1098) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + AREG((Opcode >> 0) & 7) += 1; + PRE_IO + READ_BYTE_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + adr = AREG((Opcode >> 9) & 7); + WRITE_BYTE_F(adr, res) + POST_IO +RET(12) +} + +// MOVEB +OPCODE(0x10D8) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + AREG((Opcode >> 0) & 7) += 1; + PRE_IO + READ_BYTE_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + adr = AREG((Opcode >> 9) & 7); + AREG((Opcode >> 9) & 7) += 1; + WRITE_BYTE_F(adr, res) + POST_IO +RET(12) +} + +// MOVEB +OPCODE(0x1118) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + AREG((Opcode >> 0) & 7) += 1; + PRE_IO + READ_BYTE_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + adr = AREG((Opcode >> 9) & 7) - 1; + AREG((Opcode >> 9) & 7) = adr; + WRITE_BYTE_F(adr, res) + POST_IO +RET(12) +} + +// MOVEB +OPCODE(0x1158) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + AREG((Opcode >> 0) & 7) += 1; + PRE_IO + READ_BYTE_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + FETCH_SWORD(adr); + adr += AREG((Opcode >> 9) & 7); + WRITE_BYTE_F(adr, res) + POST_IO +RET(16) +} + +// MOVEB +OPCODE(0x1198) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + AREG((Opcode >> 0) & 7) += 1; + PRE_IO + READ_BYTE_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + adr = AREG((Opcode >> 9) & 7); + DECODE_EXT_WORD + WRITE_BYTE_F(adr, res) + POST_IO +RET(18) +} + +// MOVEB +OPCODE(0x11D8) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + AREG((Opcode >> 0) & 7) += 1; + PRE_IO + READ_BYTE_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + FETCH_SWORD(adr); + WRITE_BYTE_F(adr, res) + POST_IO +RET(16) +} + +// MOVEB +OPCODE(0x13D8) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + AREG((Opcode >> 0) & 7) += 1; + PRE_IO + READ_BYTE_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + FETCH_LONG(adr); + WRITE_BYTE_F(adr, res) + POST_IO +RET(20) +} + +// MOVEB +OPCODE(0x1ED8) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + AREG((Opcode >> 0) & 7) += 1; + PRE_IO + READ_BYTE_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + adr = AREG(7); + AREG(7) += 2; + WRITE_BYTE_F(adr, res) + POST_IO +RET(12) +} + +// MOVEB +OPCODE(0x1F18) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + AREG((Opcode >> 0) & 7) += 1; + PRE_IO + READ_BYTE_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + adr = AREG(7) - 2; + AREG(7) = adr; + WRITE_BYTE_F(adr, res) + POST_IO +RET(12) +} + +// MOVEB +OPCODE(0x1020) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7) - 1; + AREG((Opcode >> 0) & 7) = adr; + PRE_IO + READ_BYTE_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + DREGu8((Opcode >> 9) & 7) = res; + POST_IO +RET(10) +} + +// MOVEB +OPCODE(0x10A0) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7) - 1; + AREG((Opcode >> 0) & 7) = adr; + PRE_IO + READ_BYTE_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + adr = AREG((Opcode >> 9) & 7); + WRITE_BYTE_F(adr, res) + POST_IO +RET(14) +} + +// MOVEB +OPCODE(0x10E0) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7) - 1; + AREG((Opcode >> 0) & 7) = adr; + PRE_IO + READ_BYTE_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + adr = AREG((Opcode >> 9) & 7); + AREG((Opcode >> 9) & 7) += 1; + WRITE_BYTE_F(adr, res) + POST_IO +RET(14) +} + +// MOVEB +OPCODE(0x1120) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7) - 1; + AREG((Opcode >> 0) & 7) = adr; + PRE_IO + READ_BYTE_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + adr = AREG((Opcode >> 9) & 7) - 1; + AREG((Opcode >> 9) & 7) = adr; + WRITE_BYTE_F(adr, res) + POST_IO +RET(14) +} + +// MOVEB +OPCODE(0x1160) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7) - 1; + AREG((Opcode >> 0) & 7) = adr; + PRE_IO + READ_BYTE_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + FETCH_SWORD(adr); + adr += AREG((Opcode >> 9) & 7); + WRITE_BYTE_F(adr, res) + POST_IO +RET(18) +} + +// MOVEB +OPCODE(0x11A0) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7) - 1; + AREG((Opcode >> 0) & 7) = adr; + PRE_IO + READ_BYTE_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + adr = AREG((Opcode >> 9) & 7); + DECODE_EXT_WORD + WRITE_BYTE_F(adr, res) + POST_IO +RET(20) +} + +// MOVEB +OPCODE(0x11E0) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7) - 1; + AREG((Opcode >> 0) & 7) = adr; + PRE_IO + READ_BYTE_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + FETCH_SWORD(adr); + WRITE_BYTE_F(adr, res) + POST_IO +RET(18) +} + +// MOVEB +OPCODE(0x13E0) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7) - 1; + AREG((Opcode >> 0) & 7) = adr; + PRE_IO + READ_BYTE_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + FETCH_LONG(adr); + WRITE_BYTE_F(adr, res) + POST_IO +RET(22) +} + +// MOVEB +OPCODE(0x1EE0) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7) - 1; + AREG((Opcode >> 0) & 7) = adr; + PRE_IO + READ_BYTE_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + adr = AREG(7); + AREG(7) += 2; + WRITE_BYTE_F(adr, res) + POST_IO +RET(14) +} + +// MOVEB +OPCODE(0x1F20) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7) - 1; + AREG((Opcode >> 0) & 7) = adr; + PRE_IO + READ_BYTE_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + adr = AREG(7) - 2; + AREG(7) = adr; + WRITE_BYTE_F(adr, res) + POST_IO +RET(14) +} + +// MOVEB +OPCODE(0x1028) +{ + u32 adr, res; + u32 src, dst; + + FETCH_SWORD(adr); + adr += AREG((Opcode >> 0) & 7); + PRE_IO + READ_BYTE_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + DREGu8((Opcode >> 9) & 7) = res; + POST_IO +RET(12) +} + +// MOVEB +OPCODE(0x10A8) +{ + u32 adr, res; + u32 src, dst; + + FETCH_SWORD(adr); + adr += AREG((Opcode >> 0) & 7); + PRE_IO + READ_BYTE_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + adr = AREG((Opcode >> 9) & 7); + WRITE_BYTE_F(adr, res) + POST_IO +RET(16) +} + +// MOVEB +OPCODE(0x10E8) +{ + u32 adr, res; + u32 src, dst; + + FETCH_SWORD(adr); + adr += AREG((Opcode >> 0) & 7); + PRE_IO + READ_BYTE_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + adr = AREG((Opcode >> 9) & 7); + AREG((Opcode >> 9) & 7) += 1; + WRITE_BYTE_F(adr, res) + POST_IO +RET(16) +} + +// MOVEB +OPCODE(0x1128) +{ + u32 adr, res; + u32 src, dst; + + FETCH_SWORD(adr); + adr += AREG((Opcode >> 0) & 7); + PRE_IO + READ_BYTE_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + adr = AREG((Opcode >> 9) & 7) - 1; + AREG((Opcode >> 9) & 7) = adr; + WRITE_BYTE_F(adr, res) + POST_IO +RET(16) +} + +// MOVEB +OPCODE(0x1168) +{ + u32 adr, res; + u32 src, dst; + + FETCH_SWORD(adr); + adr += AREG((Opcode >> 0) & 7); + PRE_IO + READ_BYTE_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + FETCH_SWORD(adr); + adr += AREG((Opcode >> 9) & 7); + WRITE_BYTE_F(adr, res) + POST_IO +RET(20) +} + +// MOVEB +OPCODE(0x11A8) +{ + u32 adr, res; + u32 src, dst; + + FETCH_SWORD(adr); + adr += AREG((Opcode >> 0) & 7); + PRE_IO + READ_BYTE_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + adr = AREG((Opcode >> 9) & 7); + DECODE_EXT_WORD + WRITE_BYTE_F(adr, res) + POST_IO +RET(22) +} + +// MOVEB +OPCODE(0x11E8) +{ + u32 adr, res; + u32 src, dst; + + FETCH_SWORD(adr); + adr += AREG((Opcode >> 0) & 7); + PRE_IO + READ_BYTE_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + FETCH_SWORD(adr); + WRITE_BYTE_F(adr, res) + POST_IO +RET(20) +} + +// MOVEB +OPCODE(0x13E8) +{ + u32 adr, res; + u32 src, dst; + + FETCH_SWORD(adr); + adr += AREG((Opcode >> 0) & 7); + PRE_IO + READ_BYTE_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + FETCH_LONG(adr); + WRITE_BYTE_F(adr, res) + POST_IO +RET(24) +} + +// MOVEB +OPCODE(0x1EE8) +{ + u32 adr, res; + u32 src, dst; + + FETCH_SWORD(adr); + adr += AREG((Opcode >> 0) & 7); + PRE_IO + READ_BYTE_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + adr = AREG(7); + AREG(7) += 2; + WRITE_BYTE_F(adr, res) + POST_IO +RET(16) +} + +// MOVEB +OPCODE(0x1F28) +{ + u32 adr, res; + u32 src, dst; + + FETCH_SWORD(adr); + adr += AREG((Opcode >> 0) & 7); + PRE_IO + READ_BYTE_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + adr = AREG(7) - 2; + AREG(7) = adr; + WRITE_BYTE_F(adr, res) + POST_IO +RET(16) +} + +// MOVEB +OPCODE(0x1030) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + DECODE_EXT_WORD + PRE_IO + READ_BYTE_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + DREGu8((Opcode >> 9) & 7) = res; + POST_IO +RET(14) +} + +// MOVEB +OPCODE(0x10B0) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + DECODE_EXT_WORD + PRE_IO + READ_BYTE_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + adr = AREG((Opcode >> 9) & 7); + WRITE_BYTE_F(adr, res) + POST_IO +RET(18) +} + +// MOVEB +OPCODE(0x10F0) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + DECODE_EXT_WORD + PRE_IO + READ_BYTE_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + adr = AREG((Opcode >> 9) & 7); + AREG((Opcode >> 9) & 7) += 1; + WRITE_BYTE_F(adr, res) + POST_IO +RET(18) +} + +// MOVEB +OPCODE(0x1130) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + DECODE_EXT_WORD + PRE_IO + READ_BYTE_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + adr = AREG((Opcode >> 9) & 7) - 1; + AREG((Opcode >> 9) & 7) = adr; + WRITE_BYTE_F(adr, res) + POST_IO +RET(18) +} + +// MOVEB +OPCODE(0x1170) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + DECODE_EXT_WORD + PRE_IO + READ_BYTE_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + FETCH_SWORD(adr); + adr += AREG((Opcode >> 9) & 7); + WRITE_BYTE_F(adr, res) + POST_IO +RET(22) +} + +// MOVEB +OPCODE(0x11B0) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + DECODE_EXT_WORD + PRE_IO + READ_BYTE_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + adr = AREG((Opcode >> 9) & 7); + DECODE_EXT_WORD + WRITE_BYTE_F(adr, res) + POST_IO +RET(24) +} + +// MOVEB +OPCODE(0x11F0) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + DECODE_EXT_WORD + PRE_IO + READ_BYTE_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + FETCH_SWORD(adr); + WRITE_BYTE_F(adr, res) + POST_IO +RET(22) +} + +// MOVEB +OPCODE(0x13F0) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + DECODE_EXT_WORD + PRE_IO + READ_BYTE_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + FETCH_LONG(adr); + WRITE_BYTE_F(adr, res) + POST_IO +RET(26) +} + +// MOVEB +OPCODE(0x1EF0) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + DECODE_EXT_WORD + PRE_IO + READ_BYTE_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + adr = AREG(7); + AREG(7) += 2; + WRITE_BYTE_F(adr, res) + POST_IO +RET(18) +} + +// MOVEB +OPCODE(0x1F30) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + DECODE_EXT_WORD + PRE_IO + READ_BYTE_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + adr = AREG(7) - 2; + AREG(7) = adr; + WRITE_BYTE_F(adr, res) + POST_IO +RET(18) +} + +// MOVEB +OPCODE(0x1038) +{ + u32 adr, res; + u32 src, dst; + + FETCH_SWORD(adr); + PRE_IO + READ_BYTE_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + DREGu8((Opcode >> 9) & 7) = res; + POST_IO +RET(12) +} + +// MOVEB +OPCODE(0x10B8) +{ + u32 adr, res; + u32 src, dst; + + FETCH_SWORD(adr); + PRE_IO + READ_BYTE_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + adr = AREG((Opcode >> 9) & 7); + WRITE_BYTE_F(adr, res) + POST_IO +RET(16) +} + +// MOVEB +OPCODE(0x10F8) +{ + u32 adr, res; + u32 src, dst; + + FETCH_SWORD(adr); + PRE_IO + READ_BYTE_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + adr = AREG((Opcode >> 9) & 7); + AREG((Opcode >> 9) & 7) += 1; + WRITE_BYTE_F(adr, res) + POST_IO +RET(16) +} + +// MOVEB +OPCODE(0x1138) +{ + u32 adr, res; + u32 src, dst; + + FETCH_SWORD(adr); + PRE_IO + READ_BYTE_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + adr = AREG((Opcode >> 9) & 7) - 1; + AREG((Opcode >> 9) & 7) = adr; + WRITE_BYTE_F(adr, res) + POST_IO +RET(16) +} + +// MOVEB +OPCODE(0x1178) +{ + u32 adr, res; + u32 src, dst; + + FETCH_SWORD(adr); + PRE_IO + READ_BYTE_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + FETCH_SWORD(adr); + adr += AREG((Opcode >> 9) & 7); + WRITE_BYTE_F(adr, res) + POST_IO +RET(20) +} + +// MOVEB +OPCODE(0x11B8) +{ + u32 adr, res; + u32 src, dst; + + FETCH_SWORD(adr); + PRE_IO + READ_BYTE_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + adr = AREG((Opcode >> 9) & 7); + DECODE_EXT_WORD + WRITE_BYTE_F(adr, res) + POST_IO +RET(22) +} + +// MOVEB +OPCODE(0x11F8) +{ + u32 adr, res; + u32 src, dst; + + FETCH_SWORD(adr); + PRE_IO + READ_BYTE_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + FETCH_SWORD(adr); + WRITE_BYTE_F(adr, res) + POST_IO +RET(20) +} + +// MOVEB +OPCODE(0x13F8) +{ + u32 adr, res; + u32 src, dst; + + FETCH_SWORD(adr); + PRE_IO + READ_BYTE_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + FETCH_LONG(adr); + WRITE_BYTE_F(adr, res) + POST_IO +RET(24) +} + +// MOVEB +OPCODE(0x1EF8) +{ + u32 adr, res; + u32 src, dst; + + FETCH_SWORD(adr); + PRE_IO + READ_BYTE_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + adr = AREG(7); + AREG(7) += 2; + WRITE_BYTE_F(adr, res) + POST_IO +RET(16) +} + +// MOVEB +OPCODE(0x1F38) +{ + u32 adr, res; + u32 src, dst; + + FETCH_SWORD(adr); + PRE_IO + READ_BYTE_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + adr = AREG(7) - 2; + AREG(7) = adr; + WRITE_BYTE_F(adr, res) + POST_IO +RET(16) +} + +// MOVEB +OPCODE(0x1039) +{ + u32 adr, res; + u32 src, dst; + + FETCH_LONG(adr); + PRE_IO + READ_BYTE_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + DREGu8((Opcode >> 9) & 7) = res; + POST_IO +RET(16) +} + +// MOVEB +OPCODE(0x10B9) +{ + u32 adr, res; + u32 src, dst; + + FETCH_LONG(adr); + PRE_IO + READ_BYTE_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + adr = AREG((Opcode >> 9) & 7); + WRITE_BYTE_F(adr, res) + POST_IO +RET(20) +} + +// MOVEB +OPCODE(0x10F9) +{ + u32 adr, res; + u32 src, dst; + + FETCH_LONG(adr); + PRE_IO + READ_BYTE_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + adr = AREG((Opcode >> 9) & 7); + AREG((Opcode >> 9) & 7) += 1; + WRITE_BYTE_F(adr, res) + POST_IO +RET(20) +} + +// MOVEB +OPCODE(0x1139) +{ + u32 adr, res; + u32 src, dst; + + FETCH_LONG(adr); + PRE_IO + READ_BYTE_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + adr = AREG((Opcode >> 9) & 7) - 1; + AREG((Opcode >> 9) & 7) = adr; + WRITE_BYTE_F(adr, res) + POST_IO +RET(20) +} + +// MOVEB +OPCODE(0x1179) +{ + u32 adr, res; + u32 src, dst; + + FETCH_LONG(adr); + PRE_IO + READ_BYTE_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + FETCH_SWORD(adr); + adr += AREG((Opcode >> 9) & 7); + WRITE_BYTE_F(adr, res) + POST_IO +RET(24) +} + +// MOVEB +OPCODE(0x11B9) +{ + u32 adr, res; + u32 src, dst; + + FETCH_LONG(adr); + PRE_IO + READ_BYTE_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + adr = AREG((Opcode >> 9) & 7); + DECODE_EXT_WORD + WRITE_BYTE_F(adr, res) + POST_IO +RET(26) +} + +// MOVEB +OPCODE(0x11F9) +{ + u32 adr, res; + u32 src, dst; + + FETCH_LONG(adr); + PRE_IO + READ_BYTE_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + FETCH_SWORD(adr); + WRITE_BYTE_F(adr, res) + POST_IO +RET(24) +} + +// MOVEB +OPCODE(0x13F9) +{ + u32 adr, res; + u32 src, dst; + + FETCH_LONG(adr); + PRE_IO + READ_BYTE_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + FETCH_LONG(adr); + WRITE_BYTE_F(adr, res) + POST_IO +RET(28) +} + +// MOVEB +OPCODE(0x1EF9) +{ + u32 adr, res; + u32 src, dst; + + FETCH_LONG(adr); + PRE_IO + READ_BYTE_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + adr = AREG(7); + AREG(7) += 2; + WRITE_BYTE_F(adr, res) + POST_IO +RET(20) +} + +// MOVEB +OPCODE(0x1F39) +{ + u32 adr, res; + u32 src, dst; + + FETCH_LONG(adr); + PRE_IO + READ_BYTE_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + adr = AREG(7) - 2; + AREG(7) = adr; + WRITE_BYTE_F(adr, res) + POST_IO +RET(20) +} + +// MOVEB +OPCODE(0x103A) +{ + u32 adr, res; + u32 src, dst; + + adr = GET_SWORD + ((u32)(PC) - BasePC); + PC++; + PRE_IO + READ_BYTE_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + DREGu8((Opcode >> 9) & 7) = res; + POST_IO +RET(12) +} + +// MOVEB +OPCODE(0x10BA) +{ + u32 adr, res; + u32 src, dst; + + adr = GET_SWORD + ((u32)(PC) - BasePC); + PC++; + PRE_IO + READ_BYTE_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + adr = AREG((Opcode >> 9) & 7); + WRITE_BYTE_F(adr, res) + POST_IO +RET(16) +} + +// MOVEB +OPCODE(0x10FA) +{ + u32 adr, res; + u32 src, dst; + + adr = GET_SWORD + ((u32)(PC) - BasePC); + PC++; + PRE_IO + READ_BYTE_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + adr = AREG((Opcode >> 9) & 7); + AREG((Opcode >> 9) & 7) += 1; + WRITE_BYTE_F(adr, res) + POST_IO +RET(16) +} + +// MOVEB +OPCODE(0x113A) +{ + u32 adr, res; + u32 src, dst; + + adr = GET_SWORD + ((u32)(PC) - BasePC); + PC++; + PRE_IO + READ_BYTE_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + adr = AREG((Opcode >> 9) & 7) - 1; + AREG((Opcode >> 9) & 7) = adr; + WRITE_BYTE_F(adr, res) + POST_IO +RET(16) +} + +// MOVEB +OPCODE(0x117A) +{ + u32 adr, res; + u32 src, dst; + + adr = GET_SWORD + ((u32)(PC) - BasePC); + PC++; + PRE_IO + READ_BYTE_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + FETCH_SWORD(adr); + adr += AREG((Opcode >> 9) & 7); + WRITE_BYTE_F(adr, res) + POST_IO +RET(20) +} + +// MOVEB +OPCODE(0x11BA) +{ + u32 adr, res; + u32 src, dst; + + adr = GET_SWORD + ((u32)(PC) - BasePC); + PC++; + PRE_IO + READ_BYTE_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + adr = AREG((Opcode >> 9) & 7); + DECODE_EXT_WORD + WRITE_BYTE_F(adr, res) + POST_IO +RET(22) +} + +// MOVEB +OPCODE(0x11FA) +{ + u32 adr, res; + u32 src, dst; + + adr = GET_SWORD + ((u32)(PC) - BasePC); + PC++; + PRE_IO + READ_BYTE_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + FETCH_SWORD(adr); + WRITE_BYTE_F(adr, res) + POST_IO +RET(20) +} + +// MOVEB +OPCODE(0x13FA) +{ + u32 adr, res; + u32 src, dst; + + adr = GET_SWORD + ((u32)(PC) - BasePC); + PC++; + PRE_IO + READ_BYTE_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + FETCH_LONG(adr); + WRITE_BYTE_F(adr, res) + POST_IO +RET(24) +} + +// MOVEB +OPCODE(0x1EFA) +{ + u32 adr, res; + u32 src, dst; + + adr = GET_SWORD + ((u32)(PC) - BasePC); + PC++; + PRE_IO + READ_BYTE_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + adr = AREG(7); + AREG(7) += 2; + WRITE_BYTE_F(adr, res) + POST_IO +RET(16) +} + +// MOVEB +OPCODE(0x1F3A) +{ + u32 adr, res; + u32 src, dst; + + adr = GET_SWORD + ((u32)(PC) - BasePC); + PC++; + PRE_IO + READ_BYTE_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + adr = AREG(7) - 2; + AREG(7) = adr; + WRITE_BYTE_F(adr, res) + POST_IO +RET(16) +} + +// MOVEB +OPCODE(0x103B) +{ + u32 adr, res; + u32 src, dst; + + adr = (u32)(PC) - BasePC; + DECODE_EXT_WORD + PRE_IO + READ_BYTE_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + DREGu8((Opcode >> 9) & 7) = res; + POST_IO +RET(14) +} + +// MOVEB +OPCODE(0x10BB) +{ + u32 adr, res; + u32 src, dst; + + adr = (u32)(PC) - BasePC; + DECODE_EXT_WORD + PRE_IO + READ_BYTE_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + adr = AREG((Opcode >> 9) & 7); + WRITE_BYTE_F(adr, res) + POST_IO +RET(18) +} + +// MOVEB +OPCODE(0x10FB) +{ + u32 adr, res; + u32 src, dst; + + adr = (u32)(PC) - BasePC; + DECODE_EXT_WORD + PRE_IO + READ_BYTE_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + adr = AREG((Opcode >> 9) & 7); + AREG((Opcode >> 9) & 7) += 1; + WRITE_BYTE_F(adr, res) + POST_IO +RET(18) +} + +// MOVEB +OPCODE(0x113B) +{ + u32 adr, res; + u32 src, dst; + + adr = (u32)(PC) - BasePC; + DECODE_EXT_WORD + PRE_IO + READ_BYTE_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + adr = AREG((Opcode >> 9) & 7) - 1; + AREG((Opcode >> 9) & 7) = adr; + WRITE_BYTE_F(adr, res) + POST_IO +RET(18) +} + +// MOVEB +OPCODE(0x117B) +{ + u32 adr, res; + u32 src, dst; + + adr = (u32)(PC) - BasePC; + DECODE_EXT_WORD + PRE_IO + READ_BYTE_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + FETCH_SWORD(adr); + adr += AREG((Opcode >> 9) & 7); + WRITE_BYTE_F(adr, res) + POST_IO +RET(22) +} + +// MOVEB +OPCODE(0x11BB) +{ + u32 adr, res; + u32 src, dst; + + adr = (u32)(PC) - BasePC; + DECODE_EXT_WORD + PRE_IO + READ_BYTE_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + adr = AREG((Opcode >> 9) & 7); + DECODE_EXT_WORD + WRITE_BYTE_F(adr, res) + POST_IO +RET(24) +} + +// MOVEB +OPCODE(0x11FB) +{ + u32 adr, res; + u32 src, dst; + + adr = (u32)(PC) - BasePC; + DECODE_EXT_WORD + PRE_IO + READ_BYTE_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + FETCH_SWORD(adr); + WRITE_BYTE_F(adr, res) + POST_IO +RET(22) +} + +// MOVEB +OPCODE(0x13FB) +{ + u32 adr, res; + u32 src, dst; + + adr = (u32)(PC) - BasePC; + DECODE_EXT_WORD + PRE_IO + READ_BYTE_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + FETCH_LONG(adr); + WRITE_BYTE_F(adr, res) + POST_IO +RET(26) +} + +// MOVEB +OPCODE(0x1EFB) +{ + u32 adr, res; + u32 src, dst; + + adr = (u32)(PC) - BasePC; + DECODE_EXT_WORD + PRE_IO + READ_BYTE_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + adr = AREG(7); + AREG(7) += 2; + WRITE_BYTE_F(adr, res) + POST_IO +RET(18) +} + +// MOVEB +OPCODE(0x1F3B) +{ + u32 adr, res; + u32 src, dst; + + adr = (u32)(PC) - BasePC; + DECODE_EXT_WORD + PRE_IO + READ_BYTE_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + adr = AREG(7) - 2; + AREG(7) = adr; + WRITE_BYTE_F(adr, res) + POST_IO +RET(18) +} + +// MOVEB +OPCODE(0x103C) +{ + u32 adr, res; + u32 src, dst; + + FETCH_BYTE(res); + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + DREGu8((Opcode >> 9) & 7) = res; +RET(8) +} + +// MOVEB +OPCODE(0x10BC) +{ + u32 adr, res; + u32 src, dst; + + FETCH_BYTE(res); + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + adr = AREG((Opcode >> 9) & 7); + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO +RET(12) +} + +// MOVEB +OPCODE(0x10FC) +{ + u32 adr, res; + u32 src, dst; + + FETCH_BYTE(res); + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + adr = AREG((Opcode >> 9) & 7); + AREG((Opcode >> 9) & 7) += 1; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO +RET(12) +} + +// MOVEB +OPCODE(0x113C) +{ + u32 adr, res; + u32 src, dst; + + FETCH_BYTE(res); + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + adr = AREG((Opcode >> 9) & 7) - 1; + AREG((Opcode >> 9) & 7) = adr; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO +RET(12) +} + +// MOVEB +OPCODE(0x117C) +{ + u32 adr, res; + u32 src, dst; + + FETCH_BYTE(res); + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + FETCH_SWORD(adr); + adr += AREG((Opcode >> 9) & 7); + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO +RET(16) +} + +// MOVEB +OPCODE(0x11BC) +{ + u32 adr, res; + u32 src, dst; + + FETCH_BYTE(res); + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + adr = AREG((Opcode >> 9) & 7); + DECODE_EXT_WORD + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO +RET(18) +} + +// MOVEB +OPCODE(0x11FC) +{ + u32 adr, res; + u32 src, dst; + + FETCH_BYTE(res); + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + FETCH_SWORD(adr); + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO +RET(16) +} + +// MOVEB +OPCODE(0x13FC) +{ + u32 adr, res; + u32 src, dst; + + FETCH_BYTE(res); + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + FETCH_LONG(adr); + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO +RET(20) +} + +// MOVEB +OPCODE(0x1EFC) +{ + u32 adr, res; + u32 src, dst; + + FETCH_BYTE(res); + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + adr = AREG(7); + AREG(7) += 2; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO +RET(12) +} + +// MOVEB +OPCODE(0x1F3C) +{ + u32 adr, res; + u32 src, dst; + + FETCH_BYTE(res); + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + adr = AREG(7) - 2; + AREG(7) = adr; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO +RET(12) +} + +// MOVEB +OPCODE(0x101F) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7); + AREG(7) += 2; + PRE_IO + READ_BYTE_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + DREGu8((Opcode >> 9) & 7) = res; + POST_IO +RET(8) +} + +// MOVEB +OPCODE(0x109F) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7); + AREG(7) += 2; + PRE_IO + READ_BYTE_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + adr = AREG((Opcode >> 9) & 7); + WRITE_BYTE_F(adr, res) + POST_IO +RET(12) +} + +// MOVEB +OPCODE(0x10DF) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7); + AREG(7) += 2; + PRE_IO + READ_BYTE_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + adr = AREG((Opcode >> 9) & 7); + AREG((Opcode >> 9) & 7) += 1; + WRITE_BYTE_F(adr, res) + POST_IO +RET(12) +} + +// MOVEB +OPCODE(0x111F) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7); + AREG(7) += 2; + PRE_IO + READ_BYTE_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + adr = AREG((Opcode >> 9) & 7) - 1; + AREG((Opcode >> 9) & 7) = adr; + WRITE_BYTE_F(adr, res) + POST_IO +RET(12) +} + +// MOVEB +OPCODE(0x115F) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7); + AREG(7) += 2; + PRE_IO + READ_BYTE_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + FETCH_SWORD(adr); + adr += AREG((Opcode >> 9) & 7); + WRITE_BYTE_F(adr, res) + POST_IO +RET(16) +} + +// MOVEB +OPCODE(0x119F) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7); + AREG(7) += 2; + PRE_IO + READ_BYTE_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + adr = AREG((Opcode >> 9) & 7); + DECODE_EXT_WORD + WRITE_BYTE_F(adr, res) + POST_IO +RET(18) +} + +// MOVEB +OPCODE(0x11DF) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7); + AREG(7) += 2; + PRE_IO + READ_BYTE_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + FETCH_SWORD(adr); + WRITE_BYTE_F(adr, res) + POST_IO +RET(16) +} + +// MOVEB +OPCODE(0x13DF) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7); + AREG(7) += 2; + PRE_IO + READ_BYTE_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + FETCH_LONG(adr); + WRITE_BYTE_F(adr, res) + POST_IO +RET(20) +} + +// MOVEB +OPCODE(0x1EDF) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7); + AREG(7) += 2; + PRE_IO + READ_BYTE_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + adr = AREG(7); + AREG(7) += 2; + WRITE_BYTE_F(adr, res) + POST_IO +RET(12) +} + +// MOVEB +OPCODE(0x1F1F) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7); + AREG(7) += 2; + PRE_IO + READ_BYTE_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + adr = AREG(7) - 2; + AREG(7) = adr; + WRITE_BYTE_F(adr, res) + POST_IO +RET(12) +} + +// MOVEB +OPCODE(0x1027) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7) - 2; + AREG(7) = adr; + PRE_IO + READ_BYTE_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + DREGu8((Opcode >> 9) & 7) = res; + POST_IO +RET(10) +} + +// MOVEB +OPCODE(0x10A7) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7) - 2; + AREG(7) = adr; + PRE_IO + READ_BYTE_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + adr = AREG((Opcode >> 9) & 7); + WRITE_BYTE_F(adr, res) + POST_IO +RET(14) +} + +// MOVEB +OPCODE(0x10E7) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7) - 2; + AREG(7) = adr; + PRE_IO + READ_BYTE_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + adr = AREG((Opcode >> 9) & 7); + AREG((Opcode >> 9) & 7) += 1; + WRITE_BYTE_F(adr, res) + POST_IO +RET(14) +} + +// MOVEB +OPCODE(0x1127) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7) - 2; + AREG(7) = adr; + PRE_IO + READ_BYTE_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + adr = AREG((Opcode >> 9) & 7) - 1; + AREG((Opcode >> 9) & 7) = adr; + WRITE_BYTE_F(adr, res) + POST_IO +RET(14) +} + +// MOVEB +OPCODE(0x1167) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7) - 2; + AREG(7) = adr; + PRE_IO + READ_BYTE_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + FETCH_SWORD(adr); + adr += AREG((Opcode >> 9) & 7); + WRITE_BYTE_F(adr, res) + POST_IO +RET(18) +} + +// MOVEB +OPCODE(0x11A7) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7) - 2; + AREG(7) = adr; + PRE_IO + READ_BYTE_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + adr = AREG((Opcode >> 9) & 7); + DECODE_EXT_WORD + WRITE_BYTE_F(adr, res) + POST_IO +RET(20) +} + +// MOVEB +OPCODE(0x11E7) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7) - 2; + AREG(7) = adr; + PRE_IO + READ_BYTE_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + FETCH_SWORD(adr); + WRITE_BYTE_F(adr, res) + POST_IO +RET(18) +} + +// MOVEB +OPCODE(0x13E7) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7) - 2; + AREG(7) = adr; + PRE_IO + READ_BYTE_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + FETCH_LONG(adr); + WRITE_BYTE_F(adr, res) + POST_IO +RET(22) +} + +// MOVEB +OPCODE(0x1EE7) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7) - 2; + AREG(7) = adr; + PRE_IO + READ_BYTE_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + adr = AREG(7); + AREG(7) += 2; + WRITE_BYTE_F(adr, res) + POST_IO +RET(14) +} + +// MOVEB +OPCODE(0x1F27) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7) - 2; + AREG(7) = adr; + PRE_IO + READ_BYTE_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + adr = AREG(7) - 2; + AREG(7) = adr; + WRITE_BYTE_F(adr, res) + POST_IO +RET(14) +} + +// MOVEL +OPCODE(0x2000) +{ + u32 adr, res; + u32 src, dst; + + res = DREGu32((Opcode >> 0) & 7); + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + DREGu32((Opcode >> 9) & 7) = res; +RET(4) +} + +// MOVEL +OPCODE(0x2080) +{ + u32 adr, res; + u32 src, dst; + + res = DREGu32((Opcode >> 0) & 7); + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + adr = AREG((Opcode >> 9) & 7); + PRE_IO + WRITE_LONG_F(adr, res) + POST_IO +RET(12) +} + +// MOVEL +OPCODE(0x20C0) +{ + u32 adr, res; + u32 src, dst; + + res = DREGu32((Opcode >> 0) & 7); + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + adr = AREG((Opcode >> 9) & 7); + AREG((Opcode >> 9) & 7) += 4; + PRE_IO + WRITE_LONG_F(adr, res) + POST_IO +RET(12) +} + +// MOVEL +OPCODE(0x2100) +{ + u32 adr, res; + u32 src, dst; + + res = DREGu32((Opcode >> 0) & 7); + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + adr = AREG((Opcode >> 9) & 7) - 4; + AREG((Opcode >> 9) & 7) = adr; + PRE_IO + WRITE_LONG_F(adr, res) + POST_IO +RET(12) +} + +// MOVEL +OPCODE(0x2140) +{ + u32 adr, res; + u32 src, dst; + + res = DREGu32((Opcode >> 0) & 7); + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + FETCH_SWORD(adr); + adr += AREG((Opcode >> 9) & 7); + PRE_IO + WRITE_LONG_F(adr, res) + POST_IO +RET(16) +} + +// MOVEL +OPCODE(0x2180) +{ + u32 adr, res; + u32 src, dst; + + res = DREGu32((Opcode >> 0) & 7); + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + adr = AREG((Opcode >> 9) & 7); + DECODE_EXT_WORD + PRE_IO + WRITE_LONG_F(adr, res) + POST_IO +RET(18) +} + +// MOVEL +OPCODE(0x21C0) +{ + u32 adr, res; + u32 src, dst; + + res = DREGu32((Opcode >> 0) & 7); + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + FETCH_SWORD(adr); + PRE_IO + WRITE_LONG_F(adr, res) + POST_IO +RET(16) +} + +// MOVEL +OPCODE(0x23C0) +{ + u32 adr, res; + u32 src, dst; + + res = DREGu32((Opcode >> 0) & 7); + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + FETCH_LONG(adr); + PRE_IO + WRITE_LONG_F(adr, res) + POST_IO +RET(20) +} + +// MOVEL +OPCODE(0x2EC0) +{ + u32 adr, res; + u32 src, dst; + + res = DREGu32((Opcode >> 0) & 7); + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + adr = AREG(7); + AREG(7) += 4; + PRE_IO + WRITE_LONG_F(adr, res) + POST_IO +RET(12) +} + +// MOVEL +OPCODE(0x2F00) +{ + u32 adr, res; + u32 src, dst; + + res = DREGu32((Opcode >> 0) & 7); + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + adr = AREG(7) - 4; + AREG(7) = adr; + PRE_IO + WRITE_LONG_F(adr, res) + POST_IO +RET(12) +} + +// MOVEL +OPCODE(0x2008) +{ + u32 adr, res; + u32 src, dst; + + res = AREGu32((Opcode >> 0) & 7); + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + DREGu32((Opcode >> 9) & 7) = res; +RET(4) +} + +// MOVEL +OPCODE(0x2088) +{ + u32 adr, res; + u32 src, dst; + + res = AREGu32((Opcode >> 0) & 7); + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + adr = AREG((Opcode >> 9) & 7); + PRE_IO + WRITE_LONG_F(adr, res) + POST_IO +RET(12) +} + +// MOVEL +OPCODE(0x20C8) +{ + u32 adr, res; + u32 src, dst; + + res = AREGu32((Opcode >> 0) & 7); + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + adr = AREG((Opcode >> 9) & 7); + AREG((Opcode >> 9) & 7) += 4; + PRE_IO + WRITE_LONG_F(adr, res) + POST_IO +RET(12) +} + +// MOVEL +OPCODE(0x2108) +{ + u32 adr, res; + u32 src, dst; + + res = AREGu32((Opcode >> 0) & 7); + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + adr = AREG((Opcode >> 9) & 7) - 4; + AREG((Opcode >> 9) & 7) = adr; + PRE_IO + WRITE_LONG_F(adr, res) + POST_IO +RET(12) +} + +// MOVEL +OPCODE(0x2148) +{ + u32 adr, res; + u32 src, dst; + + res = AREGu32((Opcode >> 0) & 7); + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + FETCH_SWORD(adr); + adr += AREG((Opcode >> 9) & 7); + PRE_IO + WRITE_LONG_F(adr, res) + POST_IO +RET(16) +} + +// MOVEL +OPCODE(0x2188) +{ + u32 adr, res; + u32 src, dst; + + res = AREGu32((Opcode >> 0) & 7); + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + adr = AREG((Opcode >> 9) & 7); + DECODE_EXT_WORD + PRE_IO + WRITE_LONG_F(adr, res) + POST_IO +RET(18) +} + +// MOVEL +OPCODE(0x21C8) +{ + u32 adr, res; + u32 src, dst; + + res = AREGu32((Opcode >> 0) & 7); + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + FETCH_SWORD(adr); + PRE_IO + WRITE_LONG_F(adr, res) + POST_IO +RET(16) +} + +// MOVEL +OPCODE(0x23C8) +{ + u32 adr, res; + u32 src, dst; + + res = AREGu32((Opcode >> 0) & 7); + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + FETCH_LONG(adr); + PRE_IO + WRITE_LONG_F(adr, res) + POST_IO +RET(20) +} + +// MOVEL +OPCODE(0x2EC8) +{ + u32 adr, res; + u32 src, dst; + + res = AREGu32((Opcode >> 0) & 7); + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + adr = AREG(7); + AREG(7) += 4; + PRE_IO + WRITE_LONG_F(adr, res) + POST_IO +RET(12) +} + +// MOVEL +OPCODE(0x2F08) +{ + u32 adr, res; + u32 src, dst; + + res = AREGu32((Opcode >> 0) & 7); + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + adr = AREG(7) - 4; + AREG(7) = adr; + PRE_IO + WRITE_LONG_F(adr, res) + POST_IO +RET(12) +} + +// MOVEL +OPCODE(0x2010) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + PRE_IO + READ_LONG_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + DREGu32((Opcode >> 9) & 7) = res; + POST_IO +RET(12) +} + +// MOVEL +OPCODE(0x2090) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + PRE_IO + READ_LONG_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + adr = AREG((Opcode >> 9) & 7); + WRITE_LONG_F(adr, res) + POST_IO +RET(20) +} + +// MOVEL +OPCODE(0x20D0) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + PRE_IO + READ_LONG_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + adr = AREG((Opcode >> 9) & 7); + AREG((Opcode >> 9) & 7) += 4; + WRITE_LONG_F(adr, res) + POST_IO +RET(20) +} + +// MOVEL +OPCODE(0x2110) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + PRE_IO + READ_LONG_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + adr = AREG((Opcode >> 9) & 7) - 4; + AREG((Opcode >> 9) & 7) = adr; + WRITE_LONG_F(adr, res) + POST_IO +RET(20) +} + +// MOVEL +OPCODE(0x2150) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + PRE_IO + READ_LONG_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + FETCH_SWORD(adr); + adr += AREG((Opcode >> 9) & 7); + WRITE_LONG_F(adr, res) + POST_IO +RET(24) +} + +// MOVEL +OPCODE(0x2190) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + PRE_IO + READ_LONG_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + adr = AREG((Opcode >> 9) & 7); + DECODE_EXT_WORD + WRITE_LONG_F(adr, res) + POST_IO +RET(26) +} + +// MOVEL +OPCODE(0x21D0) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + PRE_IO + READ_LONG_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + FETCH_SWORD(adr); + WRITE_LONG_F(adr, res) + POST_IO +RET(24) +} + +// MOVEL +OPCODE(0x23D0) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + PRE_IO + READ_LONG_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + FETCH_LONG(adr); + WRITE_LONG_F(adr, res) + POST_IO +RET(28) +} + +// MOVEL +OPCODE(0x2ED0) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + PRE_IO + READ_LONG_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + adr = AREG(7); + AREG(7) += 4; + WRITE_LONG_F(adr, res) + POST_IO +RET(20) +} + +// MOVEL +OPCODE(0x2F10) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + PRE_IO + READ_LONG_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + adr = AREG(7) - 4; + AREG(7) = adr; + WRITE_LONG_F(adr, res) + POST_IO +RET(20) +} + +// MOVEL +OPCODE(0x2018) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + AREG((Opcode >> 0) & 7) += 4; + PRE_IO + READ_LONG_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + DREGu32((Opcode >> 9) & 7) = res; + POST_IO +RET(12) +} + +// MOVEL +OPCODE(0x2098) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + AREG((Opcode >> 0) & 7) += 4; + PRE_IO + READ_LONG_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + adr = AREG((Opcode >> 9) & 7); + WRITE_LONG_F(adr, res) + POST_IO +RET(20) +} + +// MOVEL +OPCODE(0x20D8) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + AREG((Opcode >> 0) & 7) += 4; + PRE_IO + READ_LONG_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + adr = AREG((Opcode >> 9) & 7); + AREG((Opcode >> 9) & 7) += 4; + WRITE_LONG_F(adr, res) + POST_IO +RET(20) +} + +// MOVEL +OPCODE(0x2118) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + AREG((Opcode >> 0) & 7) += 4; + PRE_IO + READ_LONG_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + adr = AREG((Opcode >> 9) & 7) - 4; + AREG((Opcode >> 9) & 7) = adr; + WRITE_LONG_F(adr, res) + POST_IO +RET(20) +} + +// MOVEL +OPCODE(0x2158) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + AREG((Opcode >> 0) & 7) += 4; + PRE_IO + READ_LONG_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + FETCH_SWORD(adr); + adr += AREG((Opcode >> 9) & 7); + WRITE_LONG_F(adr, res) + POST_IO +RET(24) +} + +// MOVEL +OPCODE(0x2198) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + AREG((Opcode >> 0) & 7) += 4; + PRE_IO + READ_LONG_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + adr = AREG((Opcode >> 9) & 7); + DECODE_EXT_WORD + WRITE_LONG_F(adr, res) + POST_IO +RET(26) +} + +// MOVEL +OPCODE(0x21D8) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + AREG((Opcode >> 0) & 7) += 4; + PRE_IO + READ_LONG_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + FETCH_SWORD(adr); + WRITE_LONG_F(adr, res) + POST_IO +RET(24) +} + +// MOVEL +OPCODE(0x23D8) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + AREG((Opcode >> 0) & 7) += 4; + PRE_IO + READ_LONG_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + FETCH_LONG(adr); + WRITE_LONG_F(adr, res) + POST_IO +RET(28) +} + +// MOVEL +OPCODE(0x2ED8) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + AREG((Opcode >> 0) & 7) += 4; + PRE_IO + READ_LONG_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + adr = AREG(7); + AREG(7) += 4; + WRITE_LONG_F(adr, res) + POST_IO +RET(20) +} + +// MOVEL +OPCODE(0x2F18) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + AREG((Opcode >> 0) & 7) += 4; + PRE_IO + READ_LONG_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + adr = AREG(7) - 4; + AREG(7) = adr; + WRITE_LONG_F(adr, res) + POST_IO +RET(20) +} + +// MOVEL +OPCODE(0x2020) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7) - 4; + AREG((Opcode >> 0) & 7) = adr; + PRE_IO + READ_LONG_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + DREGu32((Opcode >> 9) & 7) = res; + POST_IO +RET(14) +} + +// MOVEL +OPCODE(0x20A0) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7) - 4; + AREG((Opcode >> 0) & 7) = adr; + PRE_IO + READ_LONG_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + adr = AREG((Opcode >> 9) & 7); + WRITE_LONG_F(adr, res) + POST_IO +RET(22) +} + +// MOVEL +OPCODE(0x20E0) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7) - 4; + AREG((Opcode >> 0) & 7) = adr; + PRE_IO + READ_LONG_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + adr = AREG((Opcode >> 9) & 7); + AREG((Opcode >> 9) & 7) += 4; + WRITE_LONG_F(adr, res) + POST_IO +RET(22) +} + +// MOVEL +OPCODE(0x2120) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7) - 4; + AREG((Opcode >> 0) & 7) = adr; + PRE_IO + READ_LONG_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + adr = AREG((Opcode >> 9) & 7) - 4; + AREG((Opcode >> 9) & 7) = adr; + WRITE_LONG_F(adr, res) + POST_IO +RET(22) +} + +// MOVEL +OPCODE(0x2160) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7) - 4; + AREG((Opcode >> 0) & 7) = adr; + PRE_IO + READ_LONG_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + FETCH_SWORD(adr); + adr += AREG((Opcode >> 9) & 7); + WRITE_LONG_F(adr, res) + POST_IO +RET(26) +} + +// MOVEL +OPCODE(0x21A0) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7) - 4; + AREG((Opcode >> 0) & 7) = adr; + PRE_IO + READ_LONG_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + adr = AREG((Opcode >> 9) & 7); + DECODE_EXT_WORD + WRITE_LONG_F(adr, res) + POST_IO +RET(28) +} + +// MOVEL +OPCODE(0x21E0) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7) - 4; + AREG((Opcode >> 0) & 7) = adr; + PRE_IO + READ_LONG_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + FETCH_SWORD(adr); + WRITE_LONG_F(adr, res) + POST_IO +RET(26) +} + +// MOVEL +OPCODE(0x23E0) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7) - 4; + AREG((Opcode >> 0) & 7) = adr; + PRE_IO + READ_LONG_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + FETCH_LONG(adr); + WRITE_LONG_F(adr, res) + POST_IO +RET(30) +} + +// MOVEL +OPCODE(0x2EE0) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7) - 4; + AREG((Opcode >> 0) & 7) = adr; + PRE_IO + READ_LONG_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + adr = AREG(7); + AREG(7) += 4; + WRITE_LONG_F(adr, res) + POST_IO +RET(22) +} + +// MOVEL +OPCODE(0x2F20) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7) - 4; + AREG((Opcode >> 0) & 7) = adr; + PRE_IO + READ_LONG_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + adr = AREG(7) - 4; + AREG(7) = adr; + WRITE_LONG_F(adr, res) + POST_IO +RET(22) +} + +// MOVEL +OPCODE(0x2028) +{ + u32 adr, res; + u32 src, dst; + + FETCH_SWORD(adr); + adr += AREG((Opcode >> 0) & 7); + PRE_IO + READ_LONG_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + DREGu32((Opcode >> 9) & 7) = res; + POST_IO +RET(16) +} + +// MOVEL +OPCODE(0x20A8) +{ + u32 adr, res; + u32 src, dst; + + FETCH_SWORD(adr); + adr += AREG((Opcode >> 0) & 7); + PRE_IO + READ_LONG_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + adr = AREG((Opcode >> 9) & 7); + WRITE_LONG_F(adr, res) + POST_IO +RET(24) +} + +// MOVEL +OPCODE(0x20E8) +{ + u32 adr, res; + u32 src, dst; + + FETCH_SWORD(adr); + adr += AREG((Opcode >> 0) & 7); + PRE_IO + READ_LONG_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + adr = AREG((Opcode >> 9) & 7); + AREG((Opcode >> 9) & 7) += 4; + WRITE_LONG_F(adr, res) + POST_IO +RET(24) +} + +// MOVEL +OPCODE(0x2128) +{ + u32 adr, res; + u32 src, dst; + + FETCH_SWORD(adr); + adr += AREG((Opcode >> 0) & 7); + PRE_IO + READ_LONG_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + adr = AREG((Opcode >> 9) & 7) - 4; + AREG((Opcode >> 9) & 7) = adr; + WRITE_LONG_F(adr, res) + POST_IO +RET(24) +} + +// MOVEL +OPCODE(0x2168) +{ + u32 adr, res; + u32 src, dst; + + FETCH_SWORD(adr); + adr += AREG((Opcode >> 0) & 7); + PRE_IO + READ_LONG_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + FETCH_SWORD(adr); + adr += AREG((Opcode >> 9) & 7); + WRITE_LONG_F(adr, res) + POST_IO +RET(28) +} + +// MOVEL +OPCODE(0x21A8) +{ + u32 adr, res; + u32 src, dst; + + FETCH_SWORD(adr); + adr += AREG((Opcode >> 0) & 7); + PRE_IO + READ_LONG_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + adr = AREG((Opcode >> 9) & 7); + DECODE_EXT_WORD + WRITE_LONG_F(adr, res) + POST_IO +RET(30) +} + +// MOVEL +OPCODE(0x21E8) +{ + u32 adr, res; + u32 src, dst; + + FETCH_SWORD(adr); + adr += AREG((Opcode >> 0) & 7); + PRE_IO + READ_LONG_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + FETCH_SWORD(adr); + WRITE_LONG_F(adr, res) + POST_IO +RET(28) +} + +// MOVEL +OPCODE(0x23E8) +{ + u32 adr, res; + u32 src, dst; + + FETCH_SWORD(adr); + adr += AREG((Opcode >> 0) & 7); + PRE_IO + READ_LONG_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + FETCH_LONG(adr); + WRITE_LONG_F(adr, res) + POST_IO +RET(32) +} + +// MOVEL +OPCODE(0x2EE8) +{ + u32 adr, res; + u32 src, dst; + + FETCH_SWORD(adr); + adr += AREG((Opcode >> 0) & 7); + PRE_IO + READ_LONG_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + adr = AREG(7); + AREG(7) += 4; + WRITE_LONG_F(adr, res) + POST_IO +RET(24) +} + +// MOVEL +OPCODE(0x2F28) +{ + u32 adr, res; + u32 src, dst; + + FETCH_SWORD(adr); + adr += AREG((Opcode >> 0) & 7); + PRE_IO + READ_LONG_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + adr = AREG(7) - 4; + AREG(7) = adr; + WRITE_LONG_F(adr, res) + POST_IO +RET(24) +} + +// MOVEL +OPCODE(0x2030) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + DECODE_EXT_WORD + PRE_IO + READ_LONG_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + DREGu32((Opcode >> 9) & 7) = res; + POST_IO +RET(18) +} + +// MOVEL +OPCODE(0x20B0) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + DECODE_EXT_WORD + PRE_IO + READ_LONG_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + adr = AREG((Opcode >> 9) & 7); + WRITE_LONG_F(adr, res) + POST_IO +RET(26) +} + +// MOVEL +OPCODE(0x20F0) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + DECODE_EXT_WORD + PRE_IO + READ_LONG_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + adr = AREG((Opcode >> 9) & 7); + AREG((Opcode >> 9) & 7) += 4; + WRITE_LONG_F(adr, res) + POST_IO +RET(26) +} + +// MOVEL +OPCODE(0x2130) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + DECODE_EXT_WORD + PRE_IO + READ_LONG_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + adr = AREG((Opcode >> 9) & 7) - 4; + AREG((Opcode >> 9) & 7) = adr; + WRITE_LONG_F(adr, res) + POST_IO +RET(26) +} + +// MOVEL +OPCODE(0x2170) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + DECODE_EXT_WORD + PRE_IO + READ_LONG_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + FETCH_SWORD(adr); + adr += AREG((Opcode >> 9) & 7); + WRITE_LONG_F(adr, res) + POST_IO +RET(30) +} + +// MOVEL +OPCODE(0x21B0) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + DECODE_EXT_WORD + PRE_IO + READ_LONG_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + adr = AREG((Opcode >> 9) & 7); + DECODE_EXT_WORD + WRITE_LONG_F(adr, res) + POST_IO +RET(32) +} + +// MOVEL +OPCODE(0x21F0) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + DECODE_EXT_WORD + PRE_IO + READ_LONG_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + FETCH_SWORD(adr); + WRITE_LONG_F(adr, res) + POST_IO +RET(30) +} + +// MOVEL +OPCODE(0x23F0) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + DECODE_EXT_WORD + PRE_IO + READ_LONG_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + FETCH_LONG(adr); + WRITE_LONG_F(adr, res) + POST_IO +RET(34) +} + +// MOVEL +OPCODE(0x2EF0) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + DECODE_EXT_WORD + PRE_IO + READ_LONG_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + adr = AREG(7); + AREG(7) += 4; + WRITE_LONG_F(adr, res) + POST_IO +RET(26) +} + +// MOVEL +OPCODE(0x2F30) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + DECODE_EXT_WORD + PRE_IO + READ_LONG_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + adr = AREG(7) - 4; + AREG(7) = adr; + WRITE_LONG_F(adr, res) + POST_IO +RET(26) +} + +// MOVEL +OPCODE(0x2038) +{ + u32 adr, res; + u32 src, dst; + + FETCH_SWORD(adr); + PRE_IO + READ_LONG_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + DREGu32((Opcode >> 9) & 7) = res; + POST_IO +RET(16) +} + +// MOVEL +OPCODE(0x20B8) +{ + u32 adr, res; + u32 src, dst; + + FETCH_SWORD(adr); + PRE_IO + READ_LONG_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + adr = AREG((Opcode >> 9) & 7); + WRITE_LONG_F(adr, res) + POST_IO +RET(24) +} + +// MOVEL +OPCODE(0x20F8) +{ + u32 adr, res; + u32 src, dst; + + FETCH_SWORD(adr); + PRE_IO + READ_LONG_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + adr = AREG((Opcode >> 9) & 7); + AREG((Opcode >> 9) & 7) += 4; + WRITE_LONG_F(adr, res) + POST_IO +RET(24) +} + +// MOVEL +OPCODE(0x2138) +{ + u32 adr, res; + u32 src, dst; + + FETCH_SWORD(adr); + PRE_IO + READ_LONG_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + adr = AREG((Opcode >> 9) & 7) - 4; + AREG((Opcode >> 9) & 7) = adr; + WRITE_LONG_F(adr, res) + POST_IO +RET(24) +} + +// MOVEL +OPCODE(0x2178) +{ + u32 adr, res; + u32 src, dst; + + FETCH_SWORD(adr); + PRE_IO + READ_LONG_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + FETCH_SWORD(adr); + adr += AREG((Opcode >> 9) & 7); + WRITE_LONG_F(adr, res) + POST_IO +RET(28) +} + +// MOVEL +OPCODE(0x21B8) +{ + u32 adr, res; + u32 src, dst; + + FETCH_SWORD(adr); + PRE_IO + READ_LONG_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + adr = AREG((Opcode >> 9) & 7); + DECODE_EXT_WORD + WRITE_LONG_F(adr, res) + POST_IO +RET(30) +} + +// MOVEL +OPCODE(0x21F8) +{ + u32 adr, res; + u32 src, dst; + + FETCH_SWORD(adr); + PRE_IO + READ_LONG_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + FETCH_SWORD(adr); + WRITE_LONG_F(adr, res) + POST_IO +RET(28) +} + +// MOVEL +OPCODE(0x23F8) +{ + u32 adr, res; + u32 src, dst; + + FETCH_SWORD(adr); + PRE_IO + READ_LONG_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + FETCH_LONG(adr); + WRITE_LONG_F(adr, res) + POST_IO +RET(32) +} + +// MOVEL +OPCODE(0x2EF8) +{ + u32 adr, res; + u32 src, dst; + + FETCH_SWORD(adr); + PRE_IO + READ_LONG_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + adr = AREG(7); + AREG(7) += 4; + WRITE_LONG_F(adr, res) + POST_IO +RET(24) +} + +// MOVEL +OPCODE(0x2F38) +{ + u32 adr, res; + u32 src, dst; + + FETCH_SWORD(adr); + PRE_IO + READ_LONG_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + adr = AREG(7) - 4; + AREG(7) = adr; + WRITE_LONG_F(adr, res) + POST_IO +RET(24) +} + +// MOVEL +OPCODE(0x2039) +{ + u32 adr, res; + u32 src, dst; + + FETCH_LONG(adr); + PRE_IO + READ_LONG_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + DREGu32((Opcode >> 9) & 7) = res; + POST_IO +RET(20) +} + +// MOVEL +OPCODE(0x20B9) +{ + u32 adr, res; + u32 src, dst; + + FETCH_LONG(adr); + PRE_IO + READ_LONG_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + adr = AREG((Opcode >> 9) & 7); + WRITE_LONG_F(adr, res) + POST_IO +RET(28) +} + +// MOVEL +OPCODE(0x20F9) +{ + u32 adr, res; + u32 src, dst; + + FETCH_LONG(adr); + PRE_IO + READ_LONG_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + adr = AREG((Opcode >> 9) & 7); + AREG((Opcode >> 9) & 7) += 4; + WRITE_LONG_F(adr, res) + POST_IO +RET(28) +} + +// MOVEL +OPCODE(0x2139) +{ + u32 adr, res; + u32 src, dst; + + FETCH_LONG(adr); + PRE_IO + READ_LONG_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + adr = AREG((Opcode >> 9) & 7) - 4; + AREG((Opcode >> 9) & 7) = adr; + WRITE_LONG_F(adr, res) + POST_IO +RET(28) +} + +// MOVEL +OPCODE(0x2179) +{ + u32 adr, res; + u32 src, dst; + + FETCH_LONG(adr); + PRE_IO + READ_LONG_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + FETCH_SWORD(adr); + adr += AREG((Opcode >> 9) & 7); + WRITE_LONG_F(adr, res) + POST_IO +RET(32) +} + +// MOVEL +OPCODE(0x21B9) +{ + u32 adr, res; + u32 src, dst; + + FETCH_LONG(adr); + PRE_IO + READ_LONG_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + adr = AREG((Opcode >> 9) & 7); + DECODE_EXT_WORD + WRITE_LONG_F(adr, res) + POST_IO +RET(34) +} + +// MOVEL +OPCODE(0x21F9) +{ + u32 adr, res; + u32 src, dst; + + FETCH_LONG(adr); + PRE_IO + READ_LONG_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + FETCH_SWORD(adr); + WRITE_LONG_F(adr, res) + POST_IO +RET(32) +} + +// MOVEL +OPCODE(0x23F9) +{ + u32 adr, res; + u32 src, dst; + + FETCH_LONG(adr); + PRE_IO + READ_LONG_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + FETCH_LONG(adr); + WRITE_LONG_F(adr, res) + POST_IO +RET(36) +} + +// MOVEL +OPCODE(0x2EF9) +{ + u32 adr, res; + u32 src, dst; + + FETCH_LONG(adr); + PRE_IO + READ_LONG_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + adr = AREG(7); + AREG(7) += 4; + WRITE_LONG_F(adr, res) + POST_IO +RET(28) +} + +// MOVEL +OPCODE(0x2F39) +{ + u32 adr, res; + u32 src, dst; + + FETCH_LONG(adr); + PRE_IO + READ_LONG_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + adr = AREG(7) - 4; + AREG(7) = adr; + WRITE_LONG_F(adr, res) + POST_IO +RET(28) +} + +// MOVEL +OPCODE(0x203A) +{ + u32 adr, res; + u32 src, dst; + + adr = GET_SWORD + ((u32)(PC) - BasePC); + PC++; + PRE_IO + READ_LONG_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + DREGu32((Opcode >> 9) & 7) = res; + POST_IO +RET(16) +} + +// MOVEL +OPCODE(0x20BA) +{ + u32 adr, res; + u32 src, dst; + + adr = GET_SWORD + ((u32)(PC) - BasePC); + PC++; + PRE_IO + READ_LONG_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + adr = AREG((Opcode >> 9) & 7); + WRITE_LONG_F(adr, res) + POST_IO +RET(24) +} + +// MOVEL +OPCODE(0x20FA) +{ + u32 adr, res; + u32 src, dst; + + adr = GET_SWORD + ((u32)(PC) - BasePC); + PC++; + PRE_IO + READ_LONG_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + adr = AREG((Opcode >> 9) & 7); + AREG((Opcode >> 9) & 7) += 4; + WRITE_LONG_F(adr, res) + POST_IO +RET(24) +} + +// MOVEL +OPCODE(0x213A) +{ + u32 adr, res; + u32 src, dst; + + adr = GET_SWORD + ((u32)(PC) - BasePC); + PC++; + PRE_IO + READ_LONG_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + adr = AREG((Opcode >> 9) & 7) - 4; + AREG((Opcode >> 9) & 7) = adr; + WRITE_LONG_F(adr, res) + POST_IO +RET(24) +} + +// MOVEL +OPCODE(0x217A) +{ + u32 adr, res; + u32 src, dst; + + adr = GET_SWORD + ((u32)(PC) - BasePC); + PC++; + PRE_IO + READ_LONG_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + FETCH_SWORD(adr); + adr += AREG((Opcode >> 9) & 7); + WRITE_LONG_F(adr, res) + POST_IO +RET(28) +} + +// MOVEL +OPCODE(0x21BA) +{ + u32 adr, res; + u32 src, dst; + + adr = GET_SWORD + ((u32)(PC) - BasePC); + PC++; + PRE_IO + READ_LONG_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + adr = AREG((Opcode >> 9) & 7); + DECODE_EXT_WORD + WRITE_LONG_F(adr, res) + POST_IO +RET(30) +} + +// MOVEL +OPCODE(0x21FA) +{ + u32 adr, res; + u32 src, dst; + + adr = GET_SWORD + ((u32)(PC) - BasePC); + PC++; + PRE_IO + READ_LONG_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + FETCH_SWORD(adr); + WRITE_LONG_F(adr, res) + POST_IO +RET(28) +} + +// MOVEL +OPCODE(0x23FA) +{ + u32 adr, res; + u32 src, dst; + + adr = GET_SWORD + ((u32)(PC) - BasePC); + PC++; + PRE_IO + READ_LONG_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + FETCH_LONG(adr); + WRITE_LONG_F(adr, res) + POST_IO +RET(32) +} + +// MOVEL +OPCODE(0x2EFA) +{ + u32 adr, res; + u32 src, dst; + + adr = GET_SWORD + ((u32)(PC) - BasePC); + PC++; + PRE_IO + READ_LONG_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + adr = AREG(7); + AREG(7) += 4; + WRITE_LONG_F(adr, res) + POST_IO +RET(24) +} + +// MOVEL +OPCODE(0x2F3A) +{ + u32 adr, res; + u32 src, dst; + + adr = GET_SWORD + ((u32)(PC) - BasePC); + PC++; + PRE_IO + READ_LONG_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + adr = AREG(7) - 4; + AREG(7) = adr; + WRITE_LONG_F(adr, res) + POST_IO +RET(24) +} + +// MOVEL +OPCODE(0x203B) +{ + u32 adr, res; + u32 src, dst; + + adr = (u32)(PC) - BasePC; + DECODE_EXT_WORD + PRE_IO + READ_LONG_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + DREGu32((Opcode >> 9) & 7) = res; + POST_IO +RET(18) +} + +// MOVEL +OPCODE(0x20BB) +{ + u32 adr, res; + u32 src, dst; + + adr = (u32)(PC) - BasePC; + DECODE_EXT_WORD + PRE_IO + READ_LONG_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + adr = AREG((Opcode >> 9) & 7); + WRITE_LONG_F(adr, res) + POST_IO +RET(26) +} + +// MOVEL +OPCODE(0x20FB) +{ + u32 adr, res; + u32 src, dst; + + adr = (u32)(PC) - BasePC; + DECODE_EXT_WORD + PRE_IO + READ_LONG_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + adr = AREG((Opcode >> 9) & 7); + AREG((Opcode >> 9) & 7) += 4; + WRITE_LONG_F(adr, res) + POST_IO +RET(26) +} + +// MOVEL +OPCODE(0x213B) +{ + u32 adr, res; + u32 src, dst; + + adr = (u32)(PC) - BasePC; + DECODE_EXT_WORD + PRE_IO + READ_LONG_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + adr = AREG((Opcode >> 9) & 7) - 4; + AREG((Opcode >> 9) & 7) = adr; + WRITE_LONG_F(adr, res) + POST_IO +RET(26) +} + +// MOVEL +OPCODE(0x217B) +{ + u32 adr, res; + u32 src, dst; + + adr = (u32)(PC) - BasePC; + DECODE_EXT_WORD + PRE_IO + READ_LONG_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + FETCH_SWORD(adr); + adr += AREG((Opcode >> 9) & 7); + WRITE_LONG_F(adr, res) + POST_IO +RET(30) +} + +// MOVEL +OPCODE(0x21BB) +{ + u32 adr, res; + u32 src, dst; + + adr = (u32)(PC) - BasePC; + DECODE_EXT_WORD + PRE_IO + READ_LONG_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + adr = AREG((Opcode >> 9) & 7); + DECODE_EXT_WORD + WRITE_LONG_F(adr, res) + POST_IO +RET(32) +} + +// MOVEL +OPCODE(0x21FB) +{ + u32 adr, res; + u32 src, dst; + + adr = (u32)(PC) - BasePC; + DECODE_EXT_WORD + PRE_IO + READ_LONG_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + FETCH_SWORD(adr); + WRITE_LONG_F(adr, res) + POST_IO +RET(30) +} + +// MOVEL +OPCODE(0x23FB) +{ + u32 adr, res; + u32 src, dst; + + adr = (u32)(PC) - BasePC; + DECODE_EXT_WORD + PRE_IO + READ_LONG_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + FETCH_LONG(adr); + WRITE_LONG_F(adr, res) + POST_IO +RET(34) +} + +// MOVEL +OPCODE(0x2EFB) +{ + u32 adr, res; + u32 src, dst; + + adr = (u32)(PC) - BasePC; + DECODE_EXT_WORD + PRE_IO + READ_LONG_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + adr = AREG(7); + AREG(7) += 4; + WRITE_LONG_F(adr, res) + POST_IO +RET(26) +} + +// MOVEL +OPCODE(0x2F3B) +{ + u32 adr, res; + u32 src, dst; + + adr = (u32)(PC) - BasePC; + DECODE_EXT_WORD + PRE_IO + READ_LONG_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + adr = AREG(7) - 4; + AREG(7) = adr; + WRITE_LONG_F(adr, res) + POST_IO +RET(26) +} + +// MOVEL +OPCODE(0x203C) +{ + u32 adr, res; + u32 src, dst; + + FETCH_LONG(res); + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + DREGu32((Opcode >> 9) & 7) = res; +RET(12) +} + +// MOVEL +OPCODE(0x20BC) +{ + u32 adr, res; + u32 src, dst; + + FETCH_LONG(res); + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + adr = AREG((Opcode >> 9) & 7); + PRE_IO + WRITE_LONG_F(adr, res) + POST_IO +RET(20) +} + +// MOVEL +OPCODE(0x20FC) +{ + u32 adr, res; + u32 src, dst; + + FETCH_LONG(res); + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + adr = AREG((Opcode >> 9) & 7); + AREG((Opcode >> 9) & 7) += 4; + PRE_IO + WRITE_LONG_F(adr, res) + POST_IO +RET(20) +} + +// MOVEL +OPCODE(0x213C) +{ + u32 adr, res; + u32 src, dst; + + FETCH_LONG(res); + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + adr = AREG((Opcode >> 9) & 7) - 4; + AREG((Opcode >> 9) & 7) = adr; + PRE_IO + WRITE_LONG_F(adr, res) + POST_IO +RET(20) +} + +// MOVEL +OPCODE(0x217C) +{ + u32 adr, res; + u32 src, dst; + + FETCH_LONG(res); + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + FETCH_SWORD(adr); + adr += AREG((Opcode >> 9) & 7); + PRE_IO + WRITE_LONG_F(adr, res) + POST_IO +RET(24) +} + +// MOVEL +OPCODE(0x21BC) +{ + u32 adr, res; + u32 src, dst; + + FETCH_LONG(res); + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + adr = AREG((Opcode >> 9) & 7); + DECODE_EXT_WORD + PRE_IO + WRITE_LONG_F(adr, res) + POST_IO +RET(26) +} + +// MOVEL +OPCODE(0x21FC) +{ + u32 adr, res; + u32 src, dst; + + FETCH_LONG(res); + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + FETCH_SWORD(adr); + PRE_IO + WRITE_LONG_F(adr, res) + POST_IO +RET(24) +} + +// MOVEL +OPCODE(0x23FC) +{ + u32 adr, res; + u32 src, dst; + + FETCH_LONG(res); + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + FETCH_LONG(adr); + PRE_IO + WRITE_LONG_F(adr, res) + POST_IO +RET(28) +} + +// MOVEL +OPCODE(0x2EFC) +{ + u32 adr, res; + u32 src, dst; + + FETCH_LONG(res); + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + adr = AREG(7); + AREG(7) += 4; + PRE_IO + WRITE_LONG_F(adr, res) + POST_IO +RET(20) +} + +// MOVEL +OPCODE(0x2F3C) +{ + u32 adr, res; + u32 src, dst; + + FETCH_LONG(res); + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + adr = AREG(7) - 4; + AREG(7) = adr; + PRE_IO + WRITE_LONG_F(adr, res) + POST_IO +RET(20) +} + +// MOVEL +OPCODE(0x201F) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7); + AREG(7) += 4; + PRE_IO + READ_LONG_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + DREGu32((Opcode >> 9) & 7) = res; + POST_IO +RET(12) +} + +// MOVEL +OPCODE(0x209F) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7); + AREG(7) += 4; + PRE_IO + READ_LONG_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + adr = AREG((Opcode >> 9) & 7); + WRITE_LONG_F(adr, res) + POST_IO +RET(20) +} + +// MOVEL +OPCODE(0x20DF) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7); + AREG(7) += 4; + PRE_IO + READ_LONG_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + adr = AREG((Opcode >> 9) & 7); + AREG((Opcode >> 9) & 7) += 4; + WRITE_LONG_F(adr, res) + POST_IO +RET(20) +} + +// MOVEL +OPCODE(0x211F) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7); + AREG(7) += 4; + PRE_IO + READ_LONG_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + adr = AREG((Opcode >> 9) & 7) - 4; + AREG((Opcode >> 9) & 7) = adr; + WRITE_LONG_F(adr, res) + POST_IO +RET(20) +} + +// MOVEL +OPCODE(0x215F) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7); + AREG(7) += 4; + PRE_IO + READ_LONG_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + FETCH_SWORD(adr); + adr += AREG((Opcode >> 9) & 7); + WRITE_LONG_F(adr, res) + POST_IO +RET(24) +} + +// MOVEL +OPCODE(0x219F) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7); + AREG(7) += 4; + PRE_IO + READ_LONG_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + adr = AREG((Opcode >> 9) & 7); + DECODE_EXT_WORD + WRITE_LONG_F(adr, res) + POST_IO +RET(26) +} + +// MOVEL +OPCODE(0x21DF) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7); + AREG(7) += 4; + PRE_IO + READ_LONG_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + FETCH_SWORD(adr); + WRITE_LONG_F(adr, res) + POST_IO +RET(24) +} + +// MOVEL +OPCODE(0x23DF) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7); + AREG(7) += 4; + PRE_IO + READ_LONG_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + FETCH_LONG(adr); + WRITE_LONG_F(adr, res) + POST_IO +RET(28) +} + +// MOVEL +OPCODE(0x2EDF) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7); + AREG(7) += 4; + PRE_IO + READ_LONG_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + adr = AREG(7); + AREG(7) += 4; + WRITE_LONG_F(adr, res) + POST_IO +RET(20) +} + +// MOVEL +OPCODE(0x2F1F) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7); + AREG(7) += 4; + PRE_IO + READ_LONG_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + adr = AREG(7) - 4; + AREG(7) = adr; + WRITE_LONG_F(adr, res) + POST_IO +RET(20) +} + +// MOVEL +OPCODE(0x2027) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7) - 4; + AREG(7) = adr; + PRE_IO + READ_LONG_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + DREGu32((Opcode >> 9) & 7) = res; + POST_IO +RET(14) +} + +// MOVEL +OPCODE(0x20A7) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7) - 4; + AREG(7) = adr; + PRE_IO + READ_LONG_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + adr = AREG((Opcode >> 9) & 7); + WRITE_LONG_F(adr, res) + POST_IO +RET(22) +} + +// MOVEL +OPCODE(0x20E7) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7) - 4; + AREG(7) = adr; + PRE_IO + READ_LONG_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + adr = AREG((Opcode >> 9) & 7); + AREG((Opcode >> 9) & 7) += 4; + WRITE_LONG_F(adr, res) + POST_IO +RET(22) +} + +// MOVEL +OPCODE(0x2127) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7) - 4; + AREG(7) = adr; + PRE_IO + READ_LONG_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + adr = AREG((Opcode >> 9) & 7) - 4; + AREG((Opcode >> 9) & 7) = adr; + WRITE_LONG_F(adr, res) + POST_IO +RET(22) +} + +// MOVEL +OPCODE(0x2167) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7) - 4; + AREG(7) = adr; + PRE_IO + READ_LONG_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + FETCH_SWORD(adr); + adr += AREG((Opcode >> 9) & 7); + WRITE_LONG_F(adr, res) + POST_IO +RET(26) +} + +// MOVEL +OPCODE(0x21A7) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7) - 4; + AREG(7) = adr; + PRE_IO + READ_LONG_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + adr = AREG((Opcode >> 9) & 7); + DECODE_EXT_WORD + WRITE_LONG_F(adr, res) + POST_IO +RET(28) +} + +// MOVEL +OPCODE(0x21E7) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7) - 4; + AREG(7) = adr; + PRE_IO + READ_LONG_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + FETCH_SWORD(adr); + WRITE_LONG_F(adr, res) + POST_IO +RET(26) +} + +// MOVEL +OPCODE(0x23E7) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7) - 4; + AREG(7) = adr; + PRE_IO + READ_LONG_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + FETCH_LONG(adr); + WRITE_LONG_F(adr, res) + POST_IO +RET(30) +} + +// MOVEL +OPCODE(0x2EE7) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7) - 4; + AREG(7) = adr; + PRE_IO + READ_LONG_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + adr = AREG(7); + AREG(7) += 4; + WRITE_LONG_F(adr, res) + POST_IO +RET(22) +} + +// MOVEL +OPCODE(0x2F27) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7) - 4; + AREG(7) = adr; + PRE_IO + READ_LONG_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + adr = AREG(7) - 4; + AREG(7) = adr; + WRITE_LONG_F(adr, res) + POST_IO +RET(22) +} + +// MOVEAL +OPCODE(0x2040) +{ + u32 adr, res; + u32 src, dst; + + res = (s32)DREGs32((Opcode >> 0) & 7); + AREG((Opcode >> 9) & 7) = res; +RET(4) +} + +// MOVEAL +OPCODE(0x2048) +{ + u32 adr, res; + u32 src, dst; + + res = (s32)AREGs32((Opcode >> 0) & 7); + AREG((Opcode >> 9) & 7) = res; +RET(4) +} + +// MOVEAL +OPCODE(0x2050) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + PRE_IO + READSX_LONG_F(adr, res) + AREG((Opcode >> 9) & 7) = res; + POST_IO +RET(12) +} + +// MOVEAL +OPCODE(0x2058) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + AREG((Opcode >> 0) & 7) += 4; + PRE_IO + READSX_LONG_F(adr, res) + AREG((Opcode >> 9) & 7) = res; + POST_IO +RET(12) +} + +// MOVEAL +OPCODE(0x2060) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7) - 4; + AREG((Opcode >> 0) & 7) = adr; + PRE_IO + READSX_LONG_F(adr, res) + AREG((Opcode >> 9) & 7) = res; + POST_IO +RET(14) +} + +// MOVEAL +OPCODE(0x2068) +{ + u32 adr, res; + u32 src, dst; + + FETCH_SWORD(adr); + adr += AREG((Opcode >> 0) & 7); + PRE_IO + READSX_LONG_F(adr, res) + AREG((Opcode >> 9) & 7) = res; + POST_IO +RET(16) +} + +// MOVEAL +OPCODE(0x2070) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + DECODE_EXT_WORD + PRE_IO + READSX_LONG_F(adr, res) + AREG((Opcode >> 9) & 7) = res; + POST_IO +RET(18) +} + +// MOVEAL +OPCODE(0x2078) +{ + u32 adr, res; + u32 src, dst; + + FETCH_SWORD(adr); + PRE_IO + READSX_LONG_F(adr, res) + AREG((Opcode >> 9) & 7) = res; + POST_IO +RET(16) +} + +// MOVEAL +OPCODE(0x2079) +{ + u32 adr, res; + u32 src, dst; + + FETCH_LONG(adr); + PRE_IO + READSX_LONG_F(adr, res) + AREG((Opcode >> 9) & 7) = res; + POST_IO +RET(20) +} + +// MOVEAL +OPCODE(0x207A) +{ + u32 adr, res; + u32 src, dst; + + adr = GET_SWORD + ((u32)(PC) - BasePC); + PC++; + PRE_IO + READSX_LONG_F(adr, res) + AREG((Opcode >> 9) & 7) = res; + POST_IO +RET(16) +} + +// MOVEAL +OPCODE(0x207B) +{ + u32 adr, res; + u32 src, dst; + + adr = (u32)(PC) - BasePC; + DECODE_EXT_WORD + PRE_IO + READSX_LONG_F(adr, res) + AREG((Opcode >> 9) & 7) = res; + POST_IO +RET(18) +} + +// MOVEAL +OPCODE(0x207C) +{ + u32 adr, res; + u32 src, dst; + + FETCH_LONG(res); + AREG((Opcode >> 9) & 7) = res; +RET(12) +} + +// MOVEAL +OPCODE(0x205F) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7); + AREG(7) += 4; + PRE_IO + READSX_LONG_F(adr, res) + AREG((Opcode >> 9) & 7) = res; + POST_IO +RET(12) +} + +// MOVEAL +OPCODE(0x2067) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7) - 4; + AREG(7) = adr; + PRE_IO + READSX_LONG_F(adr, res) + AREG((Opcode >> 9) & 7) = res; + POST_IO +RET(14) +} + +// MOVEW +OPCODE(0x3000) +{ + u32 adr, res; + u32 src, dst; + + res = DREGu16((Opcode >> 0) & 7); + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + DREGu16((Opcode >> 9) & 7) = res; +RET(4) +} + +// MOVEW +OPCODE(0x3080) +{ + u32 adr, res; + u32 src, dst; + + res = DREGu16((Opcode >> 0) & 7); + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + adr = AREG((Opcode >> 9) & 7); + PRE_IO + WRITE_WORD_F(adr, res) + POST_IO +RET(8) +} + +// MOVEW +OPCODE(0x30C0) +{ + u32 adr, res; + u32 src, dst; + + res = DREGu16((Opcode >> 0) & 7); + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + adr = AREG((Opcode >> 9) & 7); + AREG((Opcode >> 9) & 7) += 2; + PRE_IO + WRITE_WORD_F(adr, res) + POST_IO +RET(8) +} + +// MOVEW +OPCODE(0x3100) +{ + u32 adr, res; + u32 src, dst; + + res = DREGu16((Opcode >> 0) & 7); + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + adr = AREG((Opcode >> 9) & 7) - 2; + AREG((Opcode >> 9) & 7) = adr; + PRE_IO + WRITE_WORD_F(adr, res) + POST_IO +RET(8) +} + +// MOVEW +OPCODE(0x3140) +{ + u32 adr, res; + u32 src, dst; + + res = DREGu16((Opcode >> 0) & 7); + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + FETCH_SWORD(adr); + adr += AREG((Opcode >> 9) & 7); + PRE_IO + WRITE_WORD_F(adr, res) + POST_IO +RET(12) +} + +// MOVEW +OPCODE(0x3180) +{ + u32 adr, res; + u32 src, dst; + + res = DREGu16((Opcode >> 0) & 7); + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + adr = AREG((Opcode >> 9) & 7); + DECODE_EXT_WORD + PRE_IO + WRITE_WORD_F(adr, res) + POST_IO +RET(14) +} + +// MOVEW +OPCODE(0x31C0) +{ + u32 adr, res; + u32 src, dst; + + res = DREGu16((Opcode >> 0) & 7); + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + FETCH_SWORD(adr); + PRE_IO + WRITE_WORD_F(adr, res) + POST_IO +RET(12) +} + +// MOVEW +OPCODE(0x33C0) +{ + u32 adr, res; + u32 src, dst; + + res = DREGu16((Opcode >> 0) & 7); + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + FETCH_LONG(adr); + PRE_IO + WRITE_WORD_F(adr, res) + POST_IO +RET(16) +} + +// MOVEW +OPCODE(0x3EC0) +{ + u32 adr, res; + u32 src, dst; + + res = DREGu16((Opcode >> 0) & 7); + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + adr = AREG(7); + AREG(7) += 2; + PRE_IO + WRITE_WORD_F(adr, res) + POST_IO +RET(8) +} + +// MOVEW +OPCODE(0x3F00) +{ + u32 adr, res; + u32 src, dst; + + res = DREGu16((Opcode >> 0) & 7); + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + adr = AREG(7) - 2; + AREG(7) = adr; + PRE_IO + WRITE_WORD_F(adr, res) + POST_IO +RET(8) +} + +// MOVEW +OPCODE(0x3008) +{ + u32 adr, res; + u32 src, dst; + + res = AREGu16((Opcode >> 0) & 7); + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + DREGu16((Opcode >> 9) & 7) = res; +RET(4) +} + +// MOVEW +OPCODE(0x3088) +{ + u32 adr, res; + u32 src, dst; + + res = AREGu16((Opcode >> 0) & 7); + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + adr = AREG((Opcode >> 9) & 7); + PRE_IO + WRITE_WORD_F(adr, res) + POST_IO +RET(8) +} + +// MOVEW +OPCODE(0x30C8) +{ + u32 adr, res; + u32 src, dst; + + res = AREGu16((Opcode >> 0) & 7); + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + adr = AREG((Opcode >> 9) & 7); + AREG((Opcode >> 9) & 7) += 2; + PRE_IO + WRITE_WORD_F(adr, res) + POST_IO +RET(8) +} + +// MOVEW +OPCODE(0x3108) +{ + u32 adr, res; + u32 src, dst; + + res = AREGu16((Opcode >> 0) & 7); + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + adr = AREG((Opcode >> 9) & 7) - 2; + AREG((Opcode >> 9) & 7) = adr; + PRE_IO + WRITE_WORD_F(adr, res) + POST_IO +RET(8) +} + +// MOVEW +OPCODE(0x3148) +{ + u32 adr, res; + u32 src, dst; + + res = AREGu16((Opcode >> 0) & 7); + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + FETCH_SWORD(adr); + adr += AREG((Opcode >> 9) & 7); + PRE_IO + WRITE_WORD_F(adr, res) + POST_IO +RET(12) +} + +// MOVEW +OPCODE(0x3188) +{ + u32 adr, res; + u32 src, dst; + + res = AREGu16((Opcode >> 0) & 7); + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + adr = AREG((Opcode >> 9) & 7); + DECODE_EXT_WORD + PRE_IO + WRITE_WORD_F(adr, res) + POST_IO +RET(14) +} + +// MOVEW +OPCODE(0x31C8) +{ + u32 adr, res; + u32 src, dst; + + res = AREGu16((Opcode >> 0) & 7); + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + FETCH_SWORD(adr); + PRE_IO + WRITE_WORD_F(adr, res) + POST_IO +RET(12) +} + +// MOVEW +OPCODE(0x33C8) +{ + u32 adr, res; + u32 src, dst; + + res = AREGu16((Opcode >> 0) & 7); + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + FETCH_LONG(adr); + PRE_IO + WRITE_WORD_F(adr, res) + POST_IO +RET(16) +} + +// MOVEW +OPCODE(0x3EC8) +{ + u32 adr, res; + u32 src, dst; + + res = AREGu16((Opcode >> 0) & 7); + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + adr = AREG(7); + AREG(7) += 2; + PRE_IO + WRITE_WORD_F(adr, res) + POST_IO +RET(8) +} + +// MOVEW +OPCODE(0x3F08) +{ + u32 adr, res; + u32 src, dst; + + res = AREGu16((Opcode >> 0) & 7); + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + adr = AREG(7) - 2; + AREG(7) = adr; + PRE_IO + WRITE_WORD_F(adr, res) + POST_IO +RET(8) +} + +// MOVEW +OPCODE(0x3010) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + PRE_IO + READ_WORD_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + DREGu16((Opcode >> 9) & 7) = res; + POST_IO +RET(8) +} + +// MOVEW +OPCODE(0x3090) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + PRE_IO + READ_WORD_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + adr = AREG((Opcode >> 9) & 7); + WRITE_WORD_F(adr, res) + POST_IO +RET(12) +} + +// MOVEW +OPCODE(0x30D0) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + PRE_IO + READ_WORD_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + adr = AREG((Opcode >> 9) & 7); + AREG((Opcode >> 9) & 7) += 2; + WRITE_WORD_F(adr, res) + POST_IO +RET(12) +} + +// MOVEW +OPCODE(0x3110) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + PRE_IO + READ_WORD_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + adr = AREG((Opcode >> 9) & 7) - 2; + AREG((Opcode >> 9) & 7) = adr; + WRITE_WORD_F(adr, res) + POST_IO +RET(12) +} + +// MOVEW +OPCODE(0x3150) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + PRE_IO + READ_WORD_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + FETCH_SWORD(adr); + adr += AREG((Opcode >> 9) & 7); + WRITE_WORD_F(adr, res) + POST_IO +RET(16) +} + +// MOVEW +OPCODE(0x3190) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + PRE_IO + READ_WORD_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + adr = AREG((Opcode >> 9) & 7); + DECODE_EXT_WORD + WRITE_WORD_F(adr, res) + POST_IO +RET(18) +} + +// MOVEW +OPCODE(0x31D0) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + PRE_IO + READ_WORD_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + FETCH_SWORD(adr); + WRITE_WORD_F(adr, res) + POST_IO +RET(16) +} + +// MOVEW +OPCODE(0x33D0) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + PRE_IO + READ_WORD_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + FETCH_LONG(adr); + WRITE_WORD_F(adr, res) + POST_IO +RET(20) +} + +// MOVEW +OPCODE(0x3ED0) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + PRE_IO + READ_WORD_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + adr = AREG(7); + AREG(7) += 2; + WRITE_WORD_F(adr, res) + POST_IO +RET(12) +} + +// MOVEW +OPCODE(0x3F10) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + PRE_IO + READ_WORD_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + adr = AREG(7) - 2; + AREG(7) = adr; + WRITE_WORD_F(adr, res) + POST_IO +RET(12) +} + +// MOVEW +OPCODE(0x3018) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + AREG((Opcode >> 0) & 7) += 2; + PRE_IO + READ_WORD_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + DREGu16((Opcode >> 9) & 7) = res; + POST_IO +RET(8) +} + +// MOVEW +OPCODE(0x3098) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + AREG((Opcode >> 0) & 7) += 2; + PRE_IO + READ_WORD_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + adr = AREG((Opcode >> 9) & 7); + WRITE_WORD_F(adr, res) + POST_IO +RET(12) +} + +// MOVEW +OPCODE(0x30D8) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + AREG((Opcode >> 0) & 7) += 2; + PRE_IO + READ_WORD_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + adr = AREG((Opcode >> 9) & 7); + AREG((Opcode >> 9) & 7) += 2; + WRITE_WORD_F(adr, res) + POST_IO +RET(12) +} + +// MOVEW +OPCODE(0x3118) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + AREG((Opcode >> 0) & 7) += 2; + PRE_IO + READ_WORD_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + adr = AREG((Opcode >> 9) & 7) - 2; + AREG((Opcode >> 9) & 7) = adr; + WRITE_WORD_F(adr, res) + POST_IO +RET(12) +} + +// MOVEW +OPCODE(0x3158) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + AREG((Opcode >> 0) & 7) += 2; + PRE_IO + READ_WORD_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + FETCH_SWORD(adr); + adr += AREG((Opcode >> 9) & 7); + WRITE_WORD_F(adr, res) + POST_IO +RET(16) +} + +// MOVEW +OPCODE(0x3198) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + AREG((Opcode >> 0) & 7) += 2; + PRE_IO + READ_WORD_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + adr = AREG((Opcode >> 9) & 7); + DECODE_EXT_WORD + WRITE_WORD_F(adr, res) + POST_IO +RET(18) +} + +// MOVEW +OPCODE(0x31D8) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + AREG((Opcode >> 0) & 7) += 2; + PRE_IO + READ_WORD_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + FETCH_SWORD(adr); + WRITE_WORD_F(adr, res) + POST_IO +RET(16) +} + +// MOVEW +OPCODE(0x33D8) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + AREG((Opcode >> 0) & 7) += 2; + PRE_IO + READ_WORD_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + FETCH_LONG(adr); + WRITE_WORD_F(adr, res) + POST_IO +RET(20) +} + +// MOVEW +OPCODE(0x3ED8) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + AREG((Opcode >> 0) & 7) += 2; + PRE_IO + READ_WORD_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + adr = AREG(7); + AREG(7) += 2; + WRITE_WORD_F(adr, res) + POST_IO +RET(12) +} + +// MOVEW +OPCODE(0x3F18) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + AREG((Opcode >> 0) & 7) += 2; + PRE_IO + READ_WORD_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + adr = AREG(7) - 2; + AREG(7) = adr; + WRITE_WORD_F(adr, res) + POST_IO +RET(12) +} + +// MOVEW +OPCODE(0x3020) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7) - 2; + AREG((Opcode >> 0) & 7) = adr; + PRE_IO + READ_WORD_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + DREGu16((Opcode >> 9) & 7) = res; + POST_IO +RET(10) +} + +// MOVEW +OPCODE(0x30A0) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7) - 2; + AREG((Opcode >> 0) & 7) = adr; + PRE_IO + READ_WORD_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + adr = AREG((Opcode >> 9) & 7); + WRITE_WORD_F(adr, res) + POST_IO +RET(14) +} + +// MOVEW +OPCODE(0x30E0) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7) - 2; + AREG((Opcode >> 0) & 7) = adr; + PRE_IO + READ_WORD_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + adr = AREG((Opcode >> 9) & 7); + AREG((Opcode >> 9) & 7) += 2; + WRITE_WORD_F(adr, res) + POST_IO +RET(14) +} + +// MOVEW +OPCODE(0x3120) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7) - 2; + AREG((Opcode >> 0) & 7) = adr; + PRE_IO + READ_WORD_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + adr = AREG((Opcode >> 9) & 7) - 2; + AREG((Opcode >> 9) & 7) = adr; + WRITE_WORD_F(adr, res) + POST_IO +RET(14) +} + +// MOVEW +OPCODE(0x3160) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7) - 2; + AREG((Opcode >> 0) & 7) = adr; + PRE_IO + READ_WORD_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + FETCH_SWORD(adr); + adr += AREG((Opcode >> 9) & 7); + WRITE_WORD_F(adr, res) + POST_IO +RET(18) +} + +// MOVEW +OPCODE(0x31A0) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7) - 2; + AREG((Opcode >> 0) & 7) = adr; + PRE_IO + READ_WORD_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + adr = AREG((Opcode >> 9) & 7); + DECODE_EXT_WORD + WRITE_WORD_F(adr, res) + POST_IO +RET(20) +} + +// MOVEW +OPCODE(0x31E0) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7) - 2; + AREG((Opcode >> 0) & 7) = adr; + PRE_IO + READ_WORD_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + FETCH_SWORD(adr); + WRITE_WORD_F(adr, res) + POST_IO +RET(18) +} + +// MOVEW +OPCODE(0x33E0) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7) - 2; + AREG((Opcode >> 0) & 7) = adr; + PRE_IO + READ_WORD_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + FETCH_LONG(adr); + WRITE_WORD_F(adr, res) + POST_IO +RET(22) +} + +// MOVEW +OPCODE(0x3EE0) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7) - 2; + AREG((Opcode >> 0) & 7) = adr; + PRE_IO + READ_WORD_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + adr = AREG(7); + AREG(7) += 2; + WRITE_WORD_F(adr, res) + POST_IO +RET(14) +} + +// MOVEW +OPCODE(0x3F20) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7) - 2; + AREG((Opcode >> 0) & 7) = adr; + PRE_IO + READ_WORD_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + adr = AREG(7) - 2; + AREG(7) = adr; + WRITE_WORD_F(adr, res) + POST_IO +RET(14) +} + +// MOVEW +OPCODE(0x3028) +{ + u32 adr, res; + u32 src, dst; + + FETCH_SWORD(adr); + adr += AREG((Opcode >> 0) & 7); + PRE_IO + READ_WORD_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + DREGu16((Opcode >> 9) & 7) = res; + POST_IO +RET(12) +} + +// MOVEW +OPCODE(0x30A8) +{ + u32 adr, res; + u32 src, dst; + + FETCH_SWORD(adr); + adr += AREG((Opcode >> 0) & 7); + PRE_IO + READ_WORD_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + adr = AREG((Opcode >> 9) & 7); + WRITE_WORD_F(adr, res) + POST_IO +RET(16) +} + +// MOVEW +OPCODE(0x30E8) +{ + u32 adr, res; + u32 src, dst; + + FETCH_SWORD(adr); + adr += AREG((Opcode >> 0) & 7); + PRE_IO + READ_WORD_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + adr = AREG((Opcode >> 9) & 7); + AREG((Opcode >> 9) & 7) += 2; + WRITE_WORD_F(adr, res) + POST_IO +RET(16) +} + +// MOVEW +OPCODE(0x3128) +{ + u32 adr, res; + u32 src, dst; + + FETCH_SWORD(adr); + adr += AREG((Opcode >> 0) & 7); + PRE_IO + READ_WORD_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + adr = AREG((Opcode >> 9) & 7) - 2; + AREG((Opcode >> 9) & 7) = adr; + WRITE_WORD_F(adr, res) + POST_IO +RET(16) +} + +// MOVEW +OPCODE(0x3168) +{ + u32 adr, res; + u32 src, dst; + + FETCH_SWORD(adr); + adr += AREG((Opcode >> 0) & 7); + PRE_IO + READ_WORD_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + FETCH_SWORD(adr); + adr += AREG((Opcode >> 9) & 7); + WRITE_WORD_F(adr, res) + POST_IO +RET(20) +} + +// MOVEW +OPCODE(0x31A8) +{ + u32 adr, res; + u32 src, dst; + + FETCH_SWORD(adr); + adr += AREG((Opcode >> 0) & 7); + PRE_IO + READ_WORD_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + adr = AREG((Opcode >> 9) & 7); + DECODE_EXT_WORD + WRITE_WORD_F(adr, res) + POST_IO +RET(22) +} + +// MOVEW +OPCODE(0x31E8) +{ + u32 adr, res; + u32 src, dst; + + FETCH_SWORD(adr); + adr += AREG((Opcode >> 0) & 7); + PRE_IO + READ_WORD_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + FETCH_SWORD(adr); + WRITE_WORD_F(adr, res) + POST_IO +RET(20) +} + +// MOVEW +OPCODE(0x33E8) +{ + u32 adr, res; + u32 src, dst; + + FETCH_SWORD(adr); + adr += AREG((Opcode >> 0) & 7); + PRE_IO + READ_WORD_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + FETCH_LONG(adr); + WRITE_WORD_F(adr, res) + POST_IO +RET(24) +} + +// MOVEW +OPCODE(0x3EE8) +{ + u32 adr, res; + u32 src, dst; + + FETCH_SWORD(adr); + adr += AREG((Opcode >> 0) & 7); + PRE_IO + READ_WORD_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + adr = AREG(7); + AREG(7) += 2; + WRITE_WORD_F(adr, res) + POST_IO +RET(16) +} + +// MOVEW +OPCODE(0x3F28) +{ + u32 adr, res; + u32 src, dst; + + FETCH_SWORD(adr); + adr += AREG((Opcode >> 0) & 7); + PRE_IO + READ_WORD_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + adr = AREG(7) - 2; + AREG(7) = adr; + WRITE_WORD_F(adr, res) + POST_IO +RET(16) +} + +// MOVEW +OPCODE(0x3030) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + DECODE_EXT_WORD + PRE_IO + READ_WORD_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + DREGu16((Opcode >> 9) & 7) = res; + POST_IO +RET(14) +} + +// MOVEW +OPCODE(0x30B0) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + DECODE_EXT_WORD + PRE_IO + READ_WORD_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + adr = AREG((Opcode >> 9) & 7); + WRITE_WORD_F(adr, res) + POST_IO +RET(18) +} + +// MOVEW +OPCODE(0x30F0) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + DECODE_EXT_WORD + PRE_IO + READ_WORD_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + adr = AREG((Opcode >> 9) & 7); + AREG((Opcode >> 9) & 7) += 2; + WRITE_WORD_F(adr, res) + POST_IO +RET(18) +} + +// MOVEW +OPCODE(0x3130) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + DECODE_EXT_WORD + PRE_IO + READ_WORD_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + adr = AREG((Opcode >> 9) & 7) - 2; + AREG((Opcode >> 9) & 7) = adr; + WRITE_WORD_F(adr, res) + POST_IO +RET(18) +} + +// MOVEW +OPCODE(0x3170) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + DECODE_EXT_WORD + PRE_IO + READ_WORD_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + FETCH_SWORD(adr); + adr += AREG((Opcode >> 9) & 7); + WRITE_WORD_F(adr, res) + POST_IO +RET(22) +} + +// MOVEW +OPCODE(0x31B0) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + DECODE_EXT_WORD + PRE_IO + READ_WORD_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + adr = AREG((Opcode >> 9) & 7); + DECODE_EXT_WORD + WRITE_WORD_F(adr, res) + POST_IO +RET(24) +} + +// MOVEW +OPCODE(0x31F0) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + DECODE_EXT_WORD + PRE_IO + READ_WORD_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + FETCH_SWORD(adr); + WRITE_WORD_F(adr, res) + POST_IO +RET(22) +} + +// MOVEW +OPCODE(0x33F0) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + DECODE_EXT_WORD + PRE_IO + READ_WORD_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + FETCH_LONG(adr); + WRITE_WORD_F(adr, res) + POST_IO +RET(26) +} + +// MOVEW +OPCODE(0x3EF0) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + DECODE_EXT_WORD + PRE_IO + READ_WORD_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + adr = AREG(7); + AREG(7) += 2; + WRITE_WORD_F(adr, res) + POST_IO +RET(18) +} + +// MOVEW +OPCODE(0x3F30) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + DECODE_EXT_WORD + PRE_IO + READ_WORD_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + adr = AREG(7) - 2; + AREG(7) = adr; + WRITE_WORD_F(adr, res) + POST_IO +RET(18) +} + +// MOVEW +OPCODE(0x3038) +{ + u32 adr, res; + u32 src, dst; + + FETCH_SWORD(adr); + PRE_IO + READ_WORD_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + DREGu16((Opcode >> 9) & 7) = res; + POST_IO +RET(12) +} + +// MOVEW +OPCODE(0x30B8) +{ + u32 adr, res; + u32 src, dst; + + FETCH_SWORD(adr); + PRE_IO + READ_WORD_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + adr = AREG((Opcode >> 9) & 7); + WRITE_WORD_F(adr, res) + POST_IO +RET(16) +} + +// MOVEW +OPCODE(0x30F8) +{ + u32 adr, res; + u32 src, dst; + + FETCH_SWORD(adr); + PRE_IO + READ_WORD_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + adr = AREG((Opcode >> 9) & 7); + AREG((Opcode >> 9) & 7) += 2; + WRITE_WORD_F(adr, res) + POST_IO +RET(16) +} + +// MOVEW +OPCODE(0x3138) +{ + u32 adr, res; + u32 src, dst; + + FETCH_SWORD(adr); + PRE_IO + READ_WORD_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + adr = AREG((Opcode >> 9) & 7) - 2; + AREG((Opcode >> 9) & 7) = adr; + WRITE_WORD_F(adr, res) + POST_IO +RET(16) +} + +// MOVEW +OPCODE(0x3178) +{ + u32 adr, res; + u32 src, dst; + + FETCH_SWORD(adr); + PRE_IO + READ_WORD_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + FETCH_SWORD(adr); + adr += AREG((Opcode >> 9) & 7); + WRITE_WORD_F(adr, res) + POST_IO +RET(20) +} + +// MOVEW +OPCODE(0x31B8) +{ + u32 adr, res; + u32 src, dst; + + FETCH_SWORD(adr); + PRE_IO + READ_WORD_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + adr = AREG((Opcode >> 9) & 7); + DECODE_EXT_WORD + WRITE_WORD_F(adr, res) + POST_IO +RET(22) +} + +// MOVEW +OPCODE(0x31F8) +{ + u32 adr, res; + u32 src, dst; + + FETCH_SWORD(adr); + PRE_IO + READ_WORD_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + FETCH_SWORD(adr); + WRITE_WORD_F(adr, res) + POST_IO +RET(20) +} + +// MOVEW +OPCODE(0x33F8) +{ + u32 adr, res; + u32 src, dst; + + FETCH_SWORD(adr); + PRE_IO + READ_WORD_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + FETCH_LONG(adr); + WRITE_WORD_F(adr, res) + POST_IO +RET(24) +} + +// MOVEW +OPCODE(0x3EF8) +{ + u32 adr, res; + u32 src, dst; + + FETCH_SWORD(adr); + PRE_IO + READ_WORD_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + adr = AREG(7); + AREG(7) += 2; + WRITE_WORD_F(adr, res) + POST_IO +RET(16) +} + +// MOVEW +OPCODE(0x3F38) +{ + u32 adr, res; + u32 src, dst; + + FETCH_SWORD(adr); + PRE_IO + READ_WORD_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + adr = AREG(7) - 2; + AREG(7) = adr; + WRITE_WORD_F(adr, res) + POST_IO +RET(16) +} + +// MOVEW +OPCODE(0x3039) +{ + u32 adr, res; + u32 src, dst; + + FETCH_LONG(adr); + PRE_IO + READ_WORD_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + DREGu16((Opcode >> 9) & 7) = res; + POST_IO +RET(16) +} + +// MOVEW +OPCODE(0x30B9) +{ + u32 adr, res; + u32 src, dst; + + FETCH_LONG(adr); + PRE_IO + READ_WORD_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + adr = AREG((Opcode >> 9) & 7); + WRITE_WORD_F(adr, res) + POST_IO +RET(20) +} + +// MOVEW +OPCODE(0x30F9) +{ + u32 adr, res; + u32 src, dst; + + FETCH_LONG(adr); + PRE_IO + READ_WORD_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + adr = AREG((Opcode >> 9) & 7); + AREG((Opcode >> 9) & 7) += 2; + WRITE_WORD_F(adr, res) + POST_IO +RET(20) +} + +// MOVEW +OPCODE(0x3139) +{ + u32 adr, res; + u32 src, dst; + + FETCH_LONG(adr); + PRE_IO + READ_WORD_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + adr = AREG((Opcode >> 9) & 7) - 2; + AREG((Opcode >> 9) & 7) = adr; + WRITE_WORD_F(adr, res) + POST_IO +RET(20) +} + +// MOVEW +OPCODE(0x3179) +{ + u32 adr, res; + u32 src, dst; + + FETCH_LONG(adr); + PRE_IO + READ_WORD_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + FETCH_SWORD(adr); + adr += AREG((Opcode >> 9) & 7); + WRITE_WORD_F(adr, res) + POST_IO +RET(24) +} + +// MOVEW +OPCODE(0x31B9) +{ + u32 adr, res; + u32 src, dst; + + FETCH_LONG(adr); + PRE_IO + READ_WORD_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + adr = AREG((Opcode >> 9) & 7); + DECODE_EXT_WORD + WRITE_WORD_F(adr, res) + POST_IO +RET(26) +} + +// MOVEW +OPCODE(0x31F9) +{ + u32 adr, res; + u32 src, dst; + + FETCH_LONG(adr); + PRE_IO + READ_WORD_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + FETCH_SWORD(adr); + WRITE_WORD_F(adr, res) + POST_IO +RET(24) +} + +// MOVEW +OPCODE(0x33F9) +{ + u32 adr, res; + u32 src, dst; + + FETCH_LONG(adr); + PRE_IO + READ_WORD_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + FETCH_LONG(adr); + WRITE_WORD_F(adr, res) + POST_IO +RET(28) +} + +// MOVEW +OPCODE(0x3EF9) +{ + u32 adr, res; + u32 src, dst; + + FETCH_LONG(adr); + PRE_IO + READ_WORD_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + adr = AREG(7); + AREG(7) += 2; + WRITE_WORD_F(adr, res) + POST_IO +RET(20) +} + +// MOVEW +OPCODE(0x3F39) +{ + u32 adr, res; + u32 src, dst; + + FETCH_LONG(adr); + PRE_IO + READ_WORD_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + adr = AREG(7) - 2; + AREG(7) = adr; + WRITE_WORD_F(adr, res) + POST_IO +RET(20) +} + +// MOVEW +OPCODE(0x303A) +{ + u32 adr, res; + u32 src, dst; + + adr = GET_SWORD + ((u32)(PC) - BasePC); + PC++; + PRE_IO + READ_WORD_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + DREGu16((Opcode >> 9) & 7) = res; + POST_IO +RET(12) +} + +// MOVEW +OPCODE(0x30BA) +{ + u32 adr, res; + u32 src, dst; + + adr = GET_SWORD + ((u32)(PC) - BasePC); + PC++; + PRE_IO + READ_WORD_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + adr = AREG((Opcode >> 9) & 7); + WRITE_WORD_F(adr, res) + POST_IO +RET(16) +} + +// MOVEW +OPCODE(0x30FA) +{ + u32 adr, res; + u32 src, dst; + + adr = GET_SWORD + ((u32)(PC) - BasePC); + PC++; + PRE_IO + READ_WORD_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + adr = AREG((Opcode >> 9) & 7); + AREG((Opcode >> 9) & 7) += 2; + WRITE_WORD_F(adr, res) + POST_IO +RET(16) +} + +// MOVEW +OPCODE(0x313A) +{ + u32 adr, res; + u32 src, dst; + + adr = GET_SWORD + ((u32)(PC) - BasePC); + PC++; + PRE_IO + READ_WORD_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + adr = AREG((Opcode >> 9) & 7) - 2; + AREG((Opcode >> 9) & 7) = adr; + WRITE_WORD_F(adr, res) + POST_IO +RET(16) +} + +// MOVEW +OPCODE(0x317A) +{ + u32 adr, res; + u32 src, dst; + + adr = GET_SWORD + ((u32)(PC) - BasePC); + PC++; + PRE_IO + READ_WORD_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + FETCH_SWORD(adr); + adr += AREG((Opcode >> 9) & 7); + WRITE_WORD_F(adr, res) + POST_IO +RET(20) +} + +// MOVEW +OPCODE(0x31BA) +{ + u32 adr, res; + u32 src, dst; + + adr = GET_SWORD + ((u32)(PC) - BasePC); + PC++; + PRE_IO + READ_WORD_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + adr = AREG((Opcode >> 9) & 7); + DECODE_EXT_WORD + WRITE_WORD_F(adr, res) + POST_IO +RET(22) +} + +// MOVEW +OPCODE(0x31FA) +{ + u32 adr, res; + u32 src, dst; + + adr = GET_SWORD + ((u32)(PC) - BasePC); + PC++; + PRE_IO + READ_WORD_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + FETCH_SWORD(adr); + WRITE_WORD_F(adr, res) + POST_IO +RET(20) +} + +// MOVEW +OPCODE(0x33FA) +{ + u32 adr, res; + u32 src, dst; + + adr = GET_SWORD + ((u32)(PC) - BasePC); + PC++; + PRE_IO + READ_WORD_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + FETCH_LONG(adr); + WRITE_WORD_F(adr, res) + POST_IO +RET(24) +} + +// MOVEW +OPCODE(0x3EFA) +{ + u32 adr, res; + u32 src, dst; + + adr = GET_SWORD + ((u32)(PC) - BasePC); + PC++; + PRE_IO + READ_WORD_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + adr = AREG(7); + AREG(7) += 2; + WRITE_WORD_F(adr, res) + POST_IO +RET(16) +} + +// MOVEW +OPCODE(0x3F3A) +{ + u32 adr, res; + u32 src, dst; + + adr = GET_SWORD + ((u32)(PC) - BasePC); + PC++; + PRE_IO + READ_WORD_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + adr = AREG(7) - 2; + AREG(7) = adr; + WRITE_WORD_F(adr, res) + POST_IO +RET(16) +} + +// MOVEW +OPCODE(0x303B) +{ + u32 adr, res; + u32 src, dst; + + adr = (u32)(PC) - BasePC; + DECODE_EXT_WORD + PRE_IO + READ_WORD_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + DREGu16((Opcode >> 9) & 7) = res; + POST_IO +RET(14) +} + +// MOVEW +OPCODE(0x30BB) +{ + u32 adr, res; + u32 src, dst; + + adr = (u32)(PC) - BasePC; + DECODE_EXT_WORD + PRE_IO + READ_WORD_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + adr = AREG((Opcode >> 9) & 7); + WRITE_WORD_F(adr, res) + POST_IO +RET(18) +} + +// MOVEW +OPCODE(0x30FB) +{ + u32 adr, res; + u32 src, dst; + + adr = (u32)(PC) - BasePC; + DECODE_EXT_WORD + PRE_IO + READ_WORD_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + adr = AREG((Opcode >> 9) & 7); + AREG((Opcode >> 9) & 7) += 2; + WRITE_WORD_F(adr, res) + POST_IO +RET(18) +} + +// MOVEW +OPCODE(0x313B) +{ + u32 adr, res; + u32 src, dst; + + adr = (u32)(PC) - BasePC; + DECODE_EXT_WORD + PRE_IO + READ_WORD_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + adr = AREG((Opcode >> 9) & 7) - 2; + AREG((Opcode >> 9) & 7) = adr; + WRITE_WORD_F(adr, res) + POST_IO +RET(18) +} + +// MOVEW +OPCODE(0x317B) +{ + u32 adr, res; + u32 src, dst; + + adr = (u32)(PC) - BasePC; + DECODE_EXT_WORD + PRE_IO + READ_WORD_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + FETCH_SWORD(adr); + adr += AREG((Opcode >> 9) & 7); + WRITE_WORD_F(adr, res) + POST_IO +RET(22) +} + +// MOVEW +OPCODE(0x31BB) +{ + u32 adr, res; + u32 src, dst; + + adr = (u32)(PC) - BasePC; + DECODE_EXT_WORD + PRE_IO + READ_WORD_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + adr = AREG((Opcode >> 9) & 7); + DECODE_EXT_WORD + WRITE_WORD_F(adr, res) + POST_IO +RET(24) +} + +// MOVEW +OPCODE(0x31FB) +{ + u32 adr, res; + u32 src, dst; + + adr = (u32)(PC) - BasePC; + DECODE_EXT_WORD + PRE_IO + READ_WORD_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + FETCH_SWORD(adr); + WRITE_WORD_F(adr, res) + POST_IO +RET(22) +} + +// MOVEW +OPCODE(0x33FB) +{ + u32 adr, res; + u32 src, dst; + + adr = (u32)(PC) - BasePC; + DECODE_EXT_WORD + PRE_IO + READ_WORD_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + FETCH_LONG(adr); + WRITE_WORD_F(adr, res) + POST_IO +RET(26) +} + +// MOVEW +OPCODE(0x3EFB) +{ + u32 adr, res; + u32 src, dst; + + adr = (u32)(PC) - BasePC; + DECODE_EXT_WORD + PRE_IO + READ_WORD_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + adr = AREG(7); + AREG(7) += 2; + WRITE_WORD_F(adr, res) + POST_IO +RET(18) +} + +// MOVEW +OPCODE(0x3F3B) +{ + u32 adr, res; + u32 src, dst; + + adr = (u32)(PC) - BasePC; + DECODE_EXT_WORD + PRE_IO + READ_WORD_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + adr = AREG(7) - 2; + AREG(7) = adr; + WRITE_WORD_F(adr, res) + POST_IO +RET(18) +} + +// MOVEW +OPCODE(0x303C) +{ + u32 adr, res; + u32 src, dst; + + FETCH_WORD(res); + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + DREGu16((Opcode >> 9) & 7) = res; +RET(8) +} + +// MOVEW +OPCODE(0x30BC) +{ + u32 adr, res; + u32 src, dst; + + FETCH_WORD(res); + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + adr = AREG((Opcode >> 9) & 7); + PRE_IO + WRITE_WORD_F(adr, res) + POST_IO +RET(12) +} + +// MOVEW +OPCODE(0x30FC) +{ + u32 adr, res; + u32 src, dst; + + FETCH_WORD(res); + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + adr = AREG((Opcode >> 9) & 7); + AREG((Opcode >> 9) & 7) += 2; + PRE_IO + WRITE_WORD_F(adr, res) + POST_IO +RET(12) +} + +// MOVEW +OPCODE(0x313C) +{ + u32 adr, res; + u32 src, dst; + + FETCH_WORD(res); + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + adr = AREG((Opcode >> 9) & 7) - 2; + AREG((Opcode >> 9) & 7) = adr; + PRE_IO + WRITE_WORD_F(adr, res) + POST_IO +RET(12) +} + +// MOVEW +OPCODE(0x317C) +{ + u32 adr, res; + u32 src, dst; + + FETCH_WORD(res); + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + FETCH_SWORD(adr); + adr += AREG((Opcode >> 9) & 7); + PRE_IO + WRITE_WORD_F(adr, res) + POST_IO +RET(16) +} + +// MOVEW +OPCODE(0x31BC) +{ + u32 adr, res; + u32 src, dst; + + FETCH_WORD(res); + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + adr = AREG((Opcode >> 9) & 7); + DECODE_EXT_WORD + PRE_IO + WRITE_WORD_F(adr, res) + POST_IO +RET(18) +} + +// MOVEW +OPCODE(0x31FC) +{ + u32 adr, res; + u32 src, dst; + + FETCH_WORD(res); + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + FETCH_SWORD(adr); + PRE_IO + WRITE_WORD_F(adr, res) + POST_IO +RET(16) +} + +// MOVEW +OPCODE(0x33FC) +{ + u32 adr, res; + u32 src, dst; + + FETCH_WORD(res); + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + FETCH_LONG(adr); + PRE_IO + WRITE_WORD_F(adr, res) + POST_IO +RET(20) +} + +// MOVEW +OPCODE(0x3EFC) +{ + u32 adr, res; + u32 src, dst; + + FETCH_WORD(res); + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + adr = AREG(7); + AREG(7) += 2; + PRE_IO + WRITE_WORD_F(adr, res) + POST_IO +RET(12) +} + +// MOVEW +OPCODE(0x3F3C) +{ + u32 adr, res; + u32 src, dst; + + FETCH_WORD(res); + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + adr = AREG(7) - 2; + AREG(7) = adr; + PRE_IO + WRITE_WORD_F(adr, res) + POST_IO +RET(12) +} + +// MOVEW +OPCODE(0x301F) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7); + AREG(7) += 2; + PRE_IO + READ_WORD_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + DREGu16((Opcode >> 9) & 7) = res; + POST_IO +RET(8) +} + +// MOVEW +OPCODE(0x309F) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7); + AREG(7) += 2; + PRE_IO + READ_WORD_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + adr = AREG((Opcode >> 9) & 7); + WRITE_WORD_F(adr, res) + POST_IO +RET(12) +} + +// MOVEW +OPCODE(0x30DF) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7); + AREG(7) += 2; + PRE_IO + READ_WORD_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + adr = AREG((Opcode >> 9) & 7); + AREG((Opcode >> 9) & 7) += 2; + WRITE_WORD_F(adr, res) + POST_IO +RET(12) +} + +// MOVEW +OPCODE(0x311F) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7); + AREG(7) += 2; + PRE_IO + READ_WORD_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + adr = AREG((Opcode >> 9) & 7) - 2; + AREG((Opcode >> 9) & 7) = adr; + WRITE_WORD_F(adr, res) + POST_IO +RET(12) +} + +// MOVEW +OPCODE(0x315F) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7); + AREG(7) += 2; + PRE_IO + READ_WORD_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + FETCH_SWORD(adr); + adr += AREG((Opcode >> 9) & 7); + WRITE_WORD_F(adr, res) + POST_IO +RET(16) +} + +// MOVEW +OPCODE(0x319F) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7); + AREG(7) += 2; + PRE_IO + READ_WORD_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + adr = AREG((Opcode >> 9) & 7); + DECODE_EXT_WORD + WRITE_WORD_F(adr, res) + POST_IO +RET(18) +} + +// MOVEW +OPCODE(0x31DF) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7); + AREG(7) += 2; + PRE_IO + READ_WORD_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + FETCH_SWORD(adr); + WRITE_WORD_F(adr, res) + POST_IO +RET(16) +} + +// MOVEW +OPCODE(0x33DF) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7); + AREG(7) += 2; + PRE_IO + READ_WORD_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + FETCH_LONG(adr); + WRITE_WORD_F(adr, res) + POST_IO +RET(20) +} + +// MOVEW +OPCODE(0x3EDF) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7); + AREG(7) += 2; + PRE_IO + READ_WORD_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + adr = AREG(7); + AREG(7) += 2; + WRITE_WORD_F(adr, res) + POST_IO +RET(12) +} + +// MOVEW +OPCODE(0x3F1F) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7); + AREG(7) += 2; + PRE_IO + READ_WORD_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + adr = AREG(7) - 2; + AREG(7) = adr; + WRITE_WORD_F(adr, res) + POST_IO +RET(12) +} + +// MOVEW +OPCODE(0x3027) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7) - 2; + AREG(7) = adr; + PRE_IO + READ_WORD_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + DREGu16((Opcode >> 9) & 7) = res; + POST_IO +RET(10) +} + +// MOVEW +OPCODE(0x30A7) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7) - 2; + AREG(7) = adr; + PRE_IO + READ_WORD_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + adr = AREG((Opcode >> 9) & 7); + WRITE_WORD_F(adr, res) + POST_IO +RET(14) +} + +// MOVEW +OPCODE(0x30E7) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7) - 2; + AREG(7) = adr; + PRE_IO + READ_WORD_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + adr = AREG((Opcode >> 9) & 7); + AREG((Opcode >> 9) & 7) += 2; + WRITE_WORD_F(adr, res) + POST_IO +RET(14) +} + +// MOVEW +OPCODE(0x3127) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7) - 2; + AREG(7) = adr; + PRE_IO + READ_WORD_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + adr = AREG((Opcode >> 9) & 7) - 2; + AREG((Opcode >> 9) & 7) = adr; + WRITE_WORD_F(adr, res) + POST_IO +RET(14) +} + +// MOVEW +OPCODE(0x3167) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7) - 2; + AREG(7) = adr; + PRE_IO + READ_WORD_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + FETCH_SWORD(adr); + adr += AREG((Opcode >> 9) & 7); + WRITE_WORD_F(adr, res) + POST_IO +RET(18) +} + +// MOVEW +OPCODE(0x31A7) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7) - 2; + AREG(7) = adr; + PRE_IO + READ_WORD_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + adr = AREG((Opcode >> 9) & 7); + DECODE_EXT_WORD + WRITE_WORD_F(adr, res) + POST_IO +RET(20) +} + +// MOVEW +OPCODE(0x31E7) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7) - 2; + AREG(7) = adr; + PRE_IO + READ_WORD_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + FETCH_SWORD(adr); + WRITE_WORD_F(adr, res) + POST_IO +RET(18) +} + +// MOVEW +OPCODE(0x33E7) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7) - 2; + AREG(7) = adr; + PRE_IO + READ_WORD_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + FETCH_LONG(adr); + WRITE_WORD_F(adr, res) + POST_IO +RET(22) +} + +// MOVEW +OPCODE(0x3EE7) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7) - 2; + AREG(7) = adr; + PRE_IO + READ_WORD_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + adr = AREG(7); + AREG(7) += 2; + WRITE_WORD_F(adr, res) + POST_IO +RET(14) +} + +// MOVEW +OPCODE(0x3F27) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7) - 2; + AREG(7) = adr; + PRE_IO + READ_WORD_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + adr = AREG(7) - 2; + AREG(7) = adr; + WRITE_WORD_F(adr, res) + POST_IO +RET(14) +} + +// MOVEAW +OPCODE(0x3040) +{ + u32 adr, res; + u32 src, dst; + + res = (s32)DREGs16((Opcode >> 0) & 7); + AREG((Opcode >> 9) & 7) = res; +RET(4) +} + +// MOVEAW +OPCODE(0x3048) +{ + u32 adr, res; + u32 src, dst; + + res = (s32)AREGs16((Opcode >> 0) & 7); + AREG((Opcode >> 9) & 7) = res; +RET(4) +} + +// MOVEAW +OPCODE(0x3050) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + PRE_IO + READSX_WORD_F(adr, res) + AREG((Opcode >> 9) & 7) = res; + POST_IO +RET(8) +} + +// MOVEAW +OPCODE(0x3058) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + AREG((Opcode >> 0) & 7) += 2; + PRE_IO + READSX_WORD_F(adr, res) + AREG((Opcode >> 9) & 7) = res; + POST_IO +RET(8) +} + +// MOVEAW +OPCODE(0x3060) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7) - 2; + AREG((Opcode >> 0) & 7) = adr; + PRE_IO + READSX_WORD_F(adr, res) + AREG((Opcode >> 9) & 7) = res; + POST_IO +RET(10) +} + +// MOVEAW +OPCODE(0x3068) +{ + u32 adr, res; + u32 src, dst; + + FETCH_SWORD(adr); + adr += AREG((Opcode >> 0) & 7); + PRE_IO + READSX_WORD_F(adr, res) + AREG((Opcode >> 9) & 7) = res; + POST_IO +RET(12) +} + +// MOVEAW +OPCODE(0x3070) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + DECODE_EXT_WORD + PRE_IO + READSX_WORD_F(adr, res) + AREG((Opcode >> 9) & 7) = res; + POST_IO +RET(14) +} + +// MOVEAW +OPCODE(0x3078) +{ + u32 adr, res; + u32 src, dst; + + FETCH_SWORD(adr); + PRE_IO + READSX_WORD_F(adr, res) + AREG((Opcode >> 9) & 7) = res; + POST_IO +RET(12) +} + +// MOVEAW +OPCODE(0x3079) +{ + u32 adr, res; + u32 src, dst; + + FETCH_LONG(adr); + PRE_IO + READSX_WORD_F(adr, res) + AREG((Opcode >> 9) & 7) = res; + POST_IO +RET(16) +} + +// MOVEAW +OPCODE(0x307A) +{ + u32 adr, res; + u32 src, dst; + + adr = GET_SWORD + ((u32)(PC) - BasePC); + PC++; + PRE_IO + READSX_WORD_F(adr, res) + AREG((Opcode >> 9) & 7) = res; + POST_IO +RET(12) +} + +// MOVEAW +OPCODE(0x307B) +{ + u32 adr, res; + u32 src, dst; + + adr = (u32)(PC) - BasePC; + DECODE_EXT_WORD + PRE_IO + READSX_WORD_F(adr, res) + AREG((Opcode >> 9) & 7) = res; + POST_IO +RET(14) +} + +// MOVEAW +OPCODE(0x307C) +{ + u32 adr, res; + u32 src, dst; + + FETCH_SWORD(res); + AREG((Opcode >> 9) & 7) = res; +RET(8) +} + +// MOVEAW +OPCODE(0x305F) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7); + AREG(7) += 2; + PRE_IO + READSX_WORD_F(adr, res) + AREG((Opcode >> 9) & 7) = res; + POST_IO +RET(8) +} + +// MOVEAW +OPCODE(0x3067) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7) - 2; + AREG(7) = adr; + PRE_IO + READSX_WORD_F(adr, res) + AREG((Opcode >> 9) & 7) = res; + POST_IO +RET(10) +} + +// NEGX +OPCODE(0x4000) +{ + u32 adr, res; + u32 src, dst; + + src = DREGu8((Opcode >> 0) & 7); + res = -src - ((flag_X >> 8) & 1); + flag_V = res & src; + flag_N = flag_X = flag_C = res; + flag_NotZ |= res & 0xFF; + DREGu8((Opcode >> 0) & 7) = res; +RET(4) +} + +// NEGX +OPCODE(0x4010) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + PRE_IO + READ_BYTE_F(adr, src) + res = -src - ((flag_X >> 8) & 1); + flag_V = res & src; + flag_N = flag_X = flag_C = res; + flag_NotZ |= res & 0xFF; + WRITE_BYTE_F(adr, res) + POST_IO +RET(12) +} + +// NEGX +OPCODE(0x4018) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + AREG((Opcode >> 0) & 7) += 1; + PRE_IO + READ_BYTE_F(adr, src) + res = -src - ((flag_X >> 8) & 1); + flag_V = res & src; + flag_N = flag_X = flag_C = res; + flag_NotZ |= res & 0xFF; + WRITE_BYTE_F(adr, res) + POST_IO +RET(12) +} + +// NEGX +OPCODE(0x4020) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7) - 1; + AREG((Opcode >> 0) & 7) = adr; + PRE_IO + READ_BYTE_F(adr, src) + res = -src - ((flag_X >> 8) & 1); + flag_V = res & src; + flag_N = flag_X = flag_C = res; + flag_NotZ |= res & 0xFF; + WRITE_BYTE_F(adr, res) + POST_IO +RET(14) +} + +// NEGX +OPCODE(0x4028) +{ + u32 adr, res; + u32 src, dst; + + FETCH_SWORD(adr); + adr += AREG((Opcode >> 0) & 7); + PRE_IO + READ_BYTE_F(adr, src) + res = -src - ((flag_X >> 8) & 1); + flag_V = res & src; + flag_N = flag_X = flag_C = res; + flag_NotZ |= res & 0xFF; + WRITE_BYTE_F(adr, res) + POST_IO +RET(16) +} + +// NEGX +OPCODE(0x4030) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + DECODE_EXT_WORD + PRE_IO + READ_BYTE_F(adr, src) + res = -src - ((flag_X >> 8) & 1); + flag_V = res & src; + flag_N = flag_X = flag_C = res; + flag_NotZ |= res & 0xFF; + WRITE_BYTE_F(adr, res) + POST_IO +RET(18) +} + +// NEGX +OPCODE(0x4038) +{ + u32 adr, res; + u32 src, dst; + + FETCH_SWORD(adr); + PRE_IO + READ_BYTE_F(adr, src) + res = -src - ((flag_X >> 8) & 1); + flag_V = res & src; + flag_N = flag_X = flag_C = res; + flag_NotZ |= res & 0xFF; + WRITE_BYTE_F(adr, res) + POST_IO +RET(16) +} + +// NEGX +OPCODE(0x4039) +{ + u32 adr, res; + u32 src, dst; + + FETCH_LONG(adr); + PRE_IO + READ_BYTE_F(adr, src) + res = -src - ((flag_X >> 8) & 1); + flag_V = res & src; + flag_N = flag_X = flag_C = res; + flag_NotZ |= res & 0xFF; + WRITE_BYTE_F(adr, res) + POST_IO +RET(20) +} + +// NEGX +OPCODE(0x401F) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7); + AREG(7) += 2; + PRE_IO + READ_BYTE_F(adr, src) + res = -src - ((flag_X >> 8) & 1); + flag_V = res & src; + flag_N = flag_X = flag_C = res; + flag_NotZ |= res & 0xFF; + WRITE_BYTE_F(adr, res) + POST_IO +RET(12) +} + +// NEGX +OPCODE(0x4027) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7) - 2; + AREG(7) = adr; + PRE_IO + READ_BYTE_F(adr, src) + res = -src - ((flag_X >> 8) & 1); + flag_V = res & src; + flag_N = flag_X = flag_C = res; + flag_NotZ |= res & 0xFF; + WRITE_BYTE_F(adr, res) + POST_IO +RET(14) +} + +// NEGX +OPCODE(0x4040) +{ + u32 adr, res; + u32 src, dst; + + src = DREGu16((Opcode >> 0) & 7); + res = -src - ((flag_X >> 8) & 1); + flag_V = (res & src) >> 8; + flag_N = flag_X = flag_C = res >> 8; + flag_NotZ |= res & 0xFFFF; + DREGu16((Opcode >> 0) & 7) = res; +RET(4) +} + +// NEGX +OPCODE(0x4050) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + PRE_IO + READ_WORD_F(adr, src) + res = -src - ((flag_X >> 8) & 1); + flag_V = (res & src) >> 8; + flag_N = flag_X = flag_C = res >> 8; + flag_NotZ |= res & 0xFFFF; + WRITE_WORD_F(adr, res) + POST_IO +RET(12) +} + +// NEGX +OPCODE(0x4058) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + AREG((Opcode >> 0) & 7) += 2; + PRE_IO + READ_WORD_F(adr, src) + res = -src - ((flag_X >> 8) & 1); + flag_V = (res & src) >> 8; + flag_N = flag_X = flag_C = res >> 8; + flag_NotZ |= res & 0xFFFF; + WRITE_WORD_F(adr, res) + POST_IO +RET(12) +} + +// NEGX +OPCODE(0x4060) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7) - 2; + AREG((Opcode >> 0) & 7) = adr; + PRE_IO + READ_WORD_F(adr, src) + res = -src - ((flag_X >> 8) & 1); + flag_V = (res & src) >> 8; + flag_N = flag_X = flag_C = res >> 8; + flag_NotZ |= res & 0xFFFF; + WRITE_WORD_F(adr, res) + POST_IO +RET(14) +} + +// NEGX +OPCODE(0x4068) +{ + u32 adr, res; + u32 src, dst; + + FETCH_SWORD(adr); + adr += AREG((Opcode >> 0) & 7); + PRE_IO + READ_WORD_F(adr, src) + res = -src - ((flag_X >> 8) & 1); + flag_V = (res & src) >> 8; + flag_N = flag_X = flag_C = res >> 8; + flag_NotZ |= res & 0xFFFF; + WRITE_WORD_F(adr, res) + POST_IO +RET(16) +} + +// NEGX +OPCODE(0x4070) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + DECODE_EXT_WORD + PRE_IO + READ_WORD_F(adr, src) + res = -src - ((flag_X >> 8) & 1); + flag_V = (res & src) >> 8; + flag_N = flag_X = flag_C = res >> 8; + flag_NotZ |= res & 0xFFFF; + WRITE_WORD_F(adr, res) + POST_IO +RET(18) +} + +// NEGX +OPCODE(0x4078) +{ + u32 adr, res; + u32 src, dst; + + FETCH_SWORD(adr); + PRE_IO + READ_WORD_F(adr, src) + res = -src - ((flag_X >> 8) & 1); + flag_V = (res & src) >> 8; + flag_N = flag_X = flag_C = res >> 8; + flag_NotZ |= res & 0xFFFF; + WRITE_WORD_F(adr, res) + POST_IO +RET(16) +} + +// NEGX +OPCODE(0x4079) +{ + u32 adr, res; + u32 src, dst; + + FETCH_LONG(adr); + PRE_IO + READ_WORD_F(adr, src) + res = -src - ((flag_X >> 8) & 1); + flag_V = (res & src) >> 8; + flag_N = flag_X = flag_C = res >> 8; + flag_NotZ |= res & 0xFFFF; + WRITE_WORD_F(adr, res) + POST_IO +RET(20) +} + +// NEGX +OPCODE(0x405F) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7); + AREG(7) += 2; + PRE_IO + READ_WORD_F(adr, src) + res = -src - ((flag_X >> 8) & 1); + flag_V = (res & src) >> 8; + flag_N = flag_X = flag_C = res >> 8; + flag_NotZ |= res & 0xFFFF; + WRITE_WORD_F(adr, res) + POST_IO +RET(12) +} + +// NEGX +OPCODE(0x4067) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7) - 2; + AREG(7) = adr; + PRE_IO + READ_WORD_F(adr, src) + res = -src - ((flag_X >> 8) & 1); + flag_V = (res & src) >> 8; + flag_N = flag_X = flag_C = res >> 8; + flag_NotZ |= res & 0xFFFF; + WRITE_WORD_F(adr, res) + POST_IO +RET(14) +} + +// NEGX +OPCODE(0x4080) +{ + u32 adr, res; + u32 src, dst; + + src = DREGu32((Opcode >> 0) & 7); + res = -src - ((flag_X >> 8) & 1); + flag_NotZ |= res; + flag_V = (res & src) >> 24; +flag_X = flag_C = (res?1:0)<<8; +// flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23; + flag_N = res >> 24; + DREGu32((Opcode >> 0) & 7) = res; +RET(6) +} + +// NEGX +OPCODE(0x4090) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + PRE_IO + READ_LONG_F(adr, src) + res = -src - ((flag_X >> 8) & 1); + flag_NotZ |= res; + flag_V = (res & src) >> 24; +flag_X = flag_C = (res?1:0)<<8; +// flag_X = flag_C = ((src & res & 1) | (src >> 1) | (res >> 1)) >> 23; + flag_N = res >> 24; + WRITE_LONG_F(adr, res) + POST_IO +RET(20) +} + +// NEGX +OPCODE(0x4098) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + AREG((Opcode >> 0) & 7) += 4; + PRE_IO + READ_LONG_F(adr, src) + res = -src - ((flag_X >> 8) & 1); + flag_NotZ |= res; + flag_V = (res & src) >> 24; +flag_X = flag_C = (res?1:0)<<8; +// flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23; + flag_N = res >> 24; + WRITE_LONG_F(adr, res) + POST_IO +RET(20) +} + +// NEGX +OPCODE(0x40A0) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7) - 4; + AREG((Opcode >> 0) & 7) = adr; + PRE_IO + READ_LONG_F(adr, src) + res = -src - ((flag_X >> 8) & 1); + flag_NotZ |= res; + flag_V = (res & src) >> 24; +flag_X = flag_C = (res?1:0)<<8; +// flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23; + flag_N = res >> 24; + WRITE_LONG_F(adr, res) + POST_IO +RET(22) +} + +// NEGX +OPCODE(0x40A8) +{ + u32 adr, res; + u32 src, dst; + + FETCH_SWORD(adr); + adr += AREG((Opcode >> 0) & 7); + PRE_IO + READ_LONG_F(adr, src) + res = -src - ((flag_X >> 8) & 1); + flag_NotZ |= res; + flag_V = (res & src) >> 24; +flag_X = flag_C = (res?1:0)<<8; +// flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23; + flag_N = res >> 24; + WRITE_LONG_F(adr, res) + POST_IO +RET(24) +} + +// NEGX +OPCODE(0x40B0) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + DECODE_EXT_WORD + PRE_IO + READ_LONG_F(adr, src) + res = -src - ((flag_X >> 8) & 1); + flag_NotZ |= res; + flag_V = (res & src) >> 24; +flag_X = flag_C = (res?1:0)<<8; +// flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23; + flag_N = res >> 24; + WRITE_LONG_F(adr, res) + POST_IO +RET(26) +} + +// NEGX +OPCODE(0x40B8) +{ + u32 adr, res; + u32 src, dst; + + FETCH_SWORD(adr); + PRE_IO + READ_LONG_F(adr, src) + res = -src - ((flag_X >> 8) & 1); + flag_NotZ |= res; + flag_V = (res & src) >> 24; +flag_X = flag_C = (res?1:0)<<8; +// flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23; + flag_N = res >> 24; + WRITE_LONG_F(adr, res) + POST_IO +RET(24) +} + +// NEGX +OPCODE(0x40B9) +{ + u32 adr, res; + u32 src, dst; + + FETCH_LONG(adr); + PRE_IO + READ_LONG_F(adr, src) + res = -src - ((flag_X >> 8) & 1); + flag_NotZ |= res; + flag_V = (res & src) >> 24; +flag_X = flag_C = (res?1:0)<<8; +// flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23; + flag_N = res >> 24; + WRITE_LONG_F(adr, res) + POST_IO +RET(28) +} + +// NEGX +OPCODE(0x409F) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7); + AREG(7) += 4; + PRE_IO + READ_LONG_F(adr, src) + res = -src - ((flag_X >> 8) & 1); + flag_NotZ |= res; + flag_V = (res & src) >> 24; +flag_X = flag_C = (res?1:0)<<8; +// flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23; + flag_N = res >> 24; + WRITE_LONG_F(adr, res) + POST_IO +RET(20) +} + +// NEGX +OPCODE(0x40A7) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7) - 4; + AREG(7) = adr; + PRE_IO + READ_LONG_F(adr, src) + res = -src - ((flag_X >> 8) & 1); + flag_NotZ |= res; + flag_V = (res & src) >> 24; +flag_X = flag_C = (res?1:0)<<8; +// flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23; + flag_N = res >> 24; + WRITE_LONG_F(adr, res) + POST_IO +RET(22) +} + +// CLR +OPCODE(0x4200) +{ + u32 adr, res; + u32 src, dst; + + res = 0; + flag_N = flag_NotZ = flag_V = flag_C = 0; + DREGu8((Opcode >> 0) & 7) = res; +RET(4) +} + +// CLR +OPCODE(0x4210) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + res = 0; + flag_N = flag_NotZ = flag_V = flag_C = 0; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO +RET(12) +} + +// CLR +OPCODE(0x4218) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + AREG((Opcode >> 0) & 7) += 1; + res = 0; + flag_N = flag_NotZ = flag_V = flag_C = 0; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO +RET(12) +} + +// CLR +OPCODE(0x4220) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7) - 1; + AREG((Opcode >> 0) & 7) = adr; + res = 0; + flag_N = flag_NotZ = flag_V = flag_C = 0; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO +RET(14) +} + +// CLR +OPCODE(0x4228) +{ + u32 adr, res; + u32 src, dst; + + FETCH_SWORD(adr); + adr += AREG((Opcode >> 0) & 7); + res = 0; + flag_N = flag_NotZ = flag_V = flag_C = 0; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO +RET(16) +} + +// CLR +OPCODE(0x4230) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + DECODE_EXT_WORD + res = 0; + flag_N = flag_NotZ = flag_V = flag_C = 0; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO +RET(18) +} + +// CLR +OPCODE(0x4238) +{ + u32 adr, res; + u32 src, dst; + + FETCH_SWORD(adr); + res = 0; + flag_N = flag_NotZ = flag_V = flag_C = 0; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO +RET(16) +} + +// CLR +OPCODE(0x4239) +{ + u32 adr, res; + u32 src, dst; + + FETCH_LONG(adr); + res = 0; + flag_N = flag_NotZ = flag_V = flag_C = 0; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO +RET(20) +} + +// CLR +OPCODE(0x421F) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7); + AREG(7) += 2; + res = 0; + flag_N = flag_NotZ = flag_V = flag_C = 0; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO +RET(12) +} + +// CLR +OPCODE(0x4227) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7) - 2; + AREG(7) = adr; + res = 0; + flag_N = flag_NotZ = flag_V = flag_C = 0; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO +RET(14) +} + +// CLR +OPCODE(0x4240) +{ + u32 adr, res; + u32 src, dst; + + res = 0; + flag_N = flag_NotZ = flag_V = flag_C = 0; + DREGu16((Opcode >> 0) & 7) = res; +RET(4) +} + +// CLR +OPCODE(0x4250) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + res = 0; + flag_N = flag_NotZ = flag_V = flag_C = 0; + PRE_IO + WRITE_WORD_F(adr, res) + POST_IO +RET(12) +} + +// CLR +OPCODE(0x4258) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + AREG((Opcode >> 0) & 7) += 2; + res = 0; + flag_N = flag_NotZ = flag_V = flag_C = 0; + PRE_IO + WRITE_WORD_F(adr, res) + POST_IO +RET(12) +} + +// CLR +OPCODE(0x4260) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7) - 2; + AREG((Opcode >> 0) & 7) = adr; + res = 0; + flag_N = flag_NotZ = flag_V = flag_C = 0; + PRE_IO + WRITE_WORD_F(adr, res) + POST_IO +RET(14) +} + +// CLR +OPCODE(0x4268) +{ + u32 adr, res; + u32 src, dst; + + FETCH_SWORD(adr); + adr += AREG((Opcode >> 0) & 7); + res = 0; + flag_N = flag_NotZ = flag_V = flag_C = 0; + PRE_IO + WRITE_WORD_F(adr, res) + POST_IO +RET(16) +} + +// CLR +OPCODE(0x4270) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + DECODE_EXT_WORD + res = 0; + flag_N = flag_NotZ = flag_V = flag_C = 0; + PRE_IO + WRITE_WORD_F(adr, res) + POST_IO +RET(18) +} + +// CLR +OPCODE(0x4278) +{ + u32 adr, res; + u32 src, dst; + + FETCH_SWORD(adr); + res = 0; + flag_N = flag_NotZ = flag_V = flag_C = 0; + PRE_IO + WRITE_WORD_F(adr, res) + POST_IO +RET(16) +} + +// CLR +OPCODE(0x4279) +{ + u32 adr, res; + u32 src, dst; + + FETCH_LONG(adr); + res = 0; + flag_N = flag_NotZ = flag_V = flag_C = 0; + PRE_IO + WRITE_WORD_F(adr, res) + POST_IO +RET(20) +} + +// CLR +OPCODE(0x425F) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7); + AREG(7) += 2; + res = 0; + flag_N = flag_NotZ = flag_V = flag_C = 0; + PRE_IO + WRITE_WORD_F(adr, res) + POST_IO +RET(12) +} + +// CLR +OPCODE(0x4267) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7) - 2; + AREG(7) = adr; + res = 0; + flag_N = flag_NotZ = flag_V = flag_C = 0; + PRE_IO + WRITE_WORD_F(adr, res) + POST_IO +RET(14) +} + +// CLR +OPCODE(0x4280) +{ + u32 adr, res; + u32 src, dst; + + res = 0; + flag_N = flag_NotZ = flag_V = flag_C = 0; + DREGu32((Opcode >> 0) & 7) = res; +RET(6) +} + +// CLR +OPCODE(0x4290) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + res = 0; + flag_N = flag_NotZ = flag_V = flag_C = 0; + PRE_IO + WRITE_LONG_F(adr, res) + POST_IO +RET(20) +} + +// CLR +OPCODE(0x4298) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + AREG((Opcode >> 0) & 7) += 4; + res = 0; + flag_N = flag_NotZ = flag_V = flag_C = 0; + PRE_IO + WRITE_LONG_F(adr, res) + POST_IO +RET(20) +} + +// CLR +OPCODE(0x42A0) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7) - 4; + AREG((Opcode >> 0) & 7) = adr; + res = 0; + flag_N = flag_NotZ = flag_V = flag_C = 0; + PRE_IO + WRITE_LONG_F(adr, res) + POST_IO +RET(22) +} + +// CLR +OPCODE(0x42A8) +{ + u32 adr, res; + u32 src, dst; + + FETCH_SWORD(adr); + adr += AREG((Opcode >> 0) & 7); + res = 0; + flag_N = flag_NotZ = flag_V = flag_C = 0; + PRE_IO + WRITE_LONG_F(adr, res) + POST_IO +RET(24) +} + +// CLR +OPCODE(0x42B0) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + DECODE_EXT_WORD + res = 0; + flag_N = flag_NotZ = flag_V = flag_C = 0; + PRE_IO + WRITE_LONG_F(adr, res) + POST_IO +RET(26) +} + +// CLR +OPCODE(0x42B8) +{ + u32 adr, res; + u32 src, dst; + + FETCH_SWORD(adr); + res = 0; + flag_N = flag_NotZ = flag_V = flag_C = 0; + PRE_IO + WRITE_LONG_F(adr, res) + POST_IO +RET(24) +} + +// CLR +OPCODE(0x42B9) +{ + u32 adr, res; + u32 src, dst; + + FETCH_LONG(adr); + res = 0; + flag_N = flag_NotZ = flag_V = flag_C = 0; + PRE_IO + WRITE_LONG_F(adr, res) + POST_IO +RET(28) +} + +// CLR +OPCODE(0x429F) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7); + AREG(7) += 4; + res = 0; + flag_N = flag_NotZ = flag_V = flag_C = 0; + PRE_IO + WRITE_LONG_F(adr, res) + POST_IO +RET(20) +} + +// CLR +OPCODE(0x42A7) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7) - 4; + AREG(7) = adr; + res = 0; + flag_N = flag_NotZ = flag_V = flag_C = 0; + PRE_IO + WRITE_LONG_F(adr, res) + POST_IO +RET(22) +} + +// NEG +OPCODE(0x4400) +{ + u32 adr, res; + u32 src, dst; + + src = DREGu8((Opcode >> 0) & 7); + res = -src; + flag_V = res & src; + flag_N = flag_X = flag_C = res; + flag_NotZ = res & 0xFF; + DREGu8((Opcode >> 0) & 7) = res; +RET(4) +} + +// NEG +OPCODE(0x4410) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + PRE_IO + READ_BYTE_F(adr, src) + res = -src; + flag_V = res & src; + flag_N = flag_X = flag_C = res; + flag_NotZ = res & 0xFF; + WRITE_BYTE_F(adr, res) + POST_IO +RET(12) +} + +// NEG +OPCODE(0x4418) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + AREG((Opcode >> 0) & 7) += 1; + PRE_IO + READ_BYTE_F(adr, src) + res = -src; + flag_V = res & src; + flag_N = flag_X = flag_C = res; + flag_NotZ = res & 0xFF; + WRITE_BYTE_F(adr, res) + POST_IO +RET(12) +} + +// NEG +OPCODE(0x4420) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7) - 1; + AREG((Opcode >> 0) & 7) = adr; + PRE_IO + READ_BYTE_F(adr, src) + res = -src; + flag_V = res & src; + flag_N = flag_X = flag_C = res; + flag_NotZ = res & 0xFF; + WRITE_BYTE_F(adr, res) + POST_IO +RET(14) +} + +// NEG +OPCODE(0x4428) +{ + u32 adr, res; + u32 src, dst; + + FETCH_SWORD(adr); + adr += AREG((Opcode >> 0) & 7); + PRE_IO + READ_BYTE_F(adr, src) + res = -src; + flag_V = res & src; + flag_N = flag_X = flag_C = res; + flag_NotZ = res & 0xFF; + WRITE_BYTE_F(adr, res) + POST_IO +RET(16) +} + +// NEG +OPCODE(0x4430) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + DECODE_EXT_WORD + PRE_IO + READ_BYTE_F(adr, src) + res = -src; + flag_V = res & src; + flag_N = flag_X = flag_C = res; + flag_NotZ = res & 0xFF; + WRITE_BYTE_F(adr, res) + POST_IO +RET(18) +} + +// NEG +OPCODE(0x4438) +{ + u32 adr, res; + u32 src, dst; + + FETCH_SWORD(adr); + PRE_IO + READ_BYTE_F(adr, src) + res = -src; + flag_V = res & src; + flag_N = flag_X = flag_C = res; + flag_NotZ = res & 0xFF; + WRITE_BYTE_F(adr, res) + POST_IO +RET(16) +} + +// NEG +OPCODE(0x4439) +{ + u32 adr, res; + u32 src, dst; + + FETCH_LONG(adr); + PRE_IO + READ_BYTE_F(adr, src) + res = -src; + flag_V = res & src; + flag_N = flag_X = flag_C = res; + flag_NotZ = res & 0xFF; + WRITE_BYTE_F(adr, res) + POST_IO +RET(20) +} + +// NEG +OPCODE(0x441F) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7); + AREG(7) += 2; + PRE_IO + READ_BYTE_F(adr, src) + res = -src; + flag_V = res & src; + flag_N = flag_X = flag_C = res; + flag_NotZ = res & 0xFF; + WRITE_BYTE_F(adr, res) + POST_IO +RET(12) +} + +// NEG +OPCODE(0x4427) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7) - 2; + AREG(7) = adr; + PRE_IO + READ_BYTE_F(adr, src) + res = -src; + flag_V = res & src; + flag_N = flag_X = flag_C = res; + flag_NotZ = res & 0xFF; + WRITE_BYTE_F(adr, res) + POST_IO +RET(14) +} + +// NEG +OPCODE(0x4440) +{ + u32 adr, res; + u32 src, dst; + + src = DREGu16((Opcode >> 0) & 7); + res = -src; + flag_V = (res & src) >> 8; + flag_N = flag_X = flag_C = res >> 8; + flag_NotZ = res & 0xFFFF; + DREGu16((Opcode >> 0) & 7) = res; +RET(4) +} + +// NEG +OPCODE(0x4450) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + PRE_IO + READ_WORD_F(adr, src) + res = -src; + flag_V = (res & src) >> 8; + flag_N = flag_X = flag_C = res >> 8; + flag_NotZ = res & 0xFFFF; + WRITE_WORD_F(adr, res) + POST_IO +RET(12) +} + +// NEG +OPCODE(0x4458) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + AREG((Opcode >> 0) & 7) += 2; + PRE_IO + READ_WORD_F(adr, src) + res = -src; + flag_V = (res & src) >> 8; + flag_N = flag_X = flag_C = res >> 8; + flag_NotZ = res & 0xFFFF; + WRITE_WORD_F(adr, res) + POST_IO +RET(12) +} + +// NEG +OPCODE(0x4460) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7) - 2; + AREG((Opcode >> 0) & 7) = adr; + PRE_IO + READ_WORD_F(adr, src) + res = -src; + flag_V = (res & src) >> 8; + flag_N = flag_X = flag_C = res >> 8; + flag_NotZ = res & 0xFFFF; + WRITE_WORD_F(adr, res) + POST_IO +RET(14) +} + +// NEG +OPCODE(0x4468) +{ + u32 adr, res; + u32 src, dst; + + FETCH_SWORD(adr); + adr += AREG((Opcode >> 0) & 7); + PRE_IO + READ_WORD_F(adr, src) + res = -src; + flag_V = (res & src) >> 8; + flag_N = flag_X = flag_C = res >> 8; + flag_NotZ = res & 0xFFFF; + WRITE_WORD_F(adr, res) + POST_IO +RET(16) +} + +// NEG +OPCODE(0x4470) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + DECODE_EXT_WORD + PRE_IO + READ_WORD_F(adr, src) + res = -src; + flag_V = (res & src) >> 8; + flag_N = flag_X = flag_C = res >> 8; + flag_NotZ = res & 0xFFFF; + WRITE_WORD_F(adr, res) + POST_IO +RET(18) +} + +// NEG +OPCODE(0x4478) +{ + u32 adr, res; + u32 src, dst; + + FETCH_SWORD(adr); + PRE_IO + READ_WORD_F(adr, src) + res = -src; + flag_V = (res & src) >> 8; + flag_N = flag_X = flag_C = res >> 8; + flag_NotZ = res & 0xFFFF; + WRITE_WORD_F(adr, res) + POST_IO +RET(16) +} + +// NEG +OPCODE(0x4479) +{ + u32 adr, res; + u32 src, dst; + + FETCH_LONG(adr); + PRE_IO + READ_WORD_F(adr, src) + res = -src; + flag_V = (res & src) >> 8; + flag_N = flag_X = flag_C = res >> 8; + flag_NotZ = res & 0xFFFF; + WRITE_WORD_F(adr, res) + POST_IO +RET(20) +} + +// NEG +OPCODE(0x445F) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7); + AREG(7) += 2; + PRE_IO + READ_WORD_F(adr, src) + res = -src; + flag_V = (res & src) >> 8; + flag_N = flag_X = flag_C = res >> 8; + flag_NotZ = res & 0xFFFF; + WRITE_WORD_F(adr, res) + POST_IO +RET(12) +} + +// NEG +OPCODE(0x4467) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7) - 2; + AREG(7) = adr; + PRE_IO + READ_WORD_F(adr, src) + res = -src; + flag_V = (res & src) >> 8; + flag_N = flag_X = flag_C = res >> 8; + flag_NotZ = res & 0xFFFF; + WRITE_WORD_F(adr, res) + POST_IO +RET(14) +} + +// NEG +OPCODE(0x4480) +{ + u32 adr, res; + u32 src, dst; + + src = DREGu32((Opcode >> 0) & 7); + res = -src; + flag_NotZ = res; + flag_V = (res & src) >> 24; + flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23; + flag_N = res >> 24; + DREGu32((Opcode >> 0) & 7) = res; +RET(6) +} + +// NEG +OPCODE(0x4490) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + PRE_IO + READ_LONG_F(adr, src) + res = -src; + flag_NotZ = res; + flag_V = (res & src) >> 24; + flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23; + flag_N = res >> 24; + WRITE_LONG_F(adr, res) + POST_IO +RET(20) +} + +// NEG +OPCODE(0x4498) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + AREG((Opcode >> 0) & 7) += 4; + PRE_IO + READ_LONG_F(adr, src) + res = -src; + flag_NotZ = res; + flag_V = (res & src) >> 24; + flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23; + flag_N = res >> 24; + WRITE_LONG_F(adr, res) + POST_IO +RET(20) +} + +// NEG +OPCODE(0x44A0) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7) - 4; + AREG((Opcode >> 0) & 7) = adr; + PRE_IO + READ_LONG_F(adr, src) + res = -src; + flag_NotZ = res; + flag_V = (res & src) >> 24; + flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23; + flag_N = res >> 24; + WRITE_LONG_F(adr, res) + POST_IO +RET(22) +} + +// NEG +OPCODE(0x44A8) +{ + u32 adr, res; + u32 src, dst; + + FETCH_SWORD(adr); + adr += AREG((Opcode >> 0) & 7); + PRE_IO + READ_LONG_F(adr, src) + res = -src; + flag_NotZ = res; + flag_V = (res & src) >> 24; + flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23; + flag_N = res >> 24; + WRITE_LONG_F(adr, res) + POST_IO +RET(24) +} + +// NEG +OPCODE(0x44B0) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + DECODE_EXT_WORD + PRE_IO + READ_LONG_F(adr, src) + res = -src; + flag_NotZ = res; + flag_V = (res & src) >> 24; + flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23; + flag_N = res >> 24; + WRITE_LONG_F(adr, res) + POST_IO +RET(26) +} + +// NEG +OPCODE(0x44B8) +{ + u32 adr, res; + u32 src, dst; + + FETCH_SWORD(adr); + PRE_IO + READ_LONG_F(adr, src) + res = -src; + flag_NotZ = res; + flag_V = (res & src) >> 24; + flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23; + flag_N = res >> 24; + WRITE_LONG_F(adr, res) + POST_IO +RET(24) +} + +// NEG +OPCODE(0x44B9) +{ + u32 adr, res; + u32 src, dst; + + FETCH_LONG(adr); + PRE_IO + READ_LONG_F(adr, src) + res = -src; + flag_NotZ = res; + flag_V = (res & src) >> 24; + flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23; + flag_N = res >> 24; + WRITE_LONG_F(adr, res) + POST_IO +RET(28) +} + +// NEG +OPCODE(0x449F) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7); + AREG(7) += 4; + PRE_IO + READ_LONG_F(adr, src) + res = -src; + flag_NotZ = res; + flag_V = (res & src) >> 24; + flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23; + flag_N = res >> 24; + WRITE_LONG_F(adr, res) + POST_IO +RET(20) +} + +// NEG +OPCODE(0x44A7) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7) - 4; + AREG(7) = adr; + PRE_IO + READ_LONG_F(adr, src) + res = -src; + flag_NotZ = res; + flag_V = (res & src) >> 24; + flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23; + flag_N = res >> 24; + WRITE_LONG_F(adr, res) + POST_IO +RET(22) +} + +// NOT +OPCODE(0x4600) +{ + u32 adr, res; + u32 src, dst; + + src = DREGu8((Opcode >> 0) & 7); + res = ~src; + flag_C = 0; + flag_V = 0; + flag_N = res; + flag_NotZ = res & 0xFF; + DREGu8((Opcode >> 0) & 7) = res; +RET(4) +} + +// NOT +OPCODE(0x4610) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + PRE_IO + READ_BYTE_F(adr, src) + res = ~src; + flag_C = 0; + flag_V = 0; + flag_N = res; + flag_NotZ = res & 0xFF; + WRITE_BYTE_F(adr, res) + POST_IO +RET(12) +} + +// NOT +OPCODE(0x4618) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + AREG((Opcode >> 0) & 7) += 1; + PRE_IO + READ_BYTE_F(adr, src) + res = ~src; + flag_C = 0; + flag_V = 0; + flag_N = res; + flag_NotZ = res & 0xFF; + WRITE_BYTE_F(adr, res) + POST_IO +RET(12) +} + +// NOT +OPCODE(0x4620) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7) - 1; + AREG((Opcode >> 0) & 7) = adr; + PRE_IO + READ_BYTE_F(adr, src) + res = ~src; + flag_C = 0; + flag_V = 0; + flag_N = res; + flag_NotZ = res & 0xFF; + WRITE_BYTE_F(adr, res) + POST_IO +RET(14) +} + +// NOT +OPCODE(0x4628) +{ + u32 adr, res; + u32 src, dst; + + FETCH_SWORD(adr); + adr += AREG((Opcode >> 0) & 7); + PRE_IO + READ_BYTE_F(adr, src) + res = ~src; + flag_C = 0; + flag_V = 0; + flag_N = res; + flag_NotZ = res & 0xFF; + WRITE_BYTE_F(adr, res) + POST_IO +RET(16) +} + +// NOT +OPCODE(0x4630) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + DECODE_EXT_WORD + PRE_IO + READ_BYTE_F(adr, src) + res = ~src; + flag_C = 0; + flag_V = 0; + flag_N = res; + flag_NotZ = res & 0xFF; + WRITE_BYTE_F(adr, res) + POST_IO +RET(18) +} + +// NOT +OPCODE(0x4638) +{ + u32 adr, res; + u32 src, dst; + + FETCH_SWORD(adr); + PRE_IO + READ_BYTE_F(adr, src) + res = ~src; + flag_C = 0; + flag_V = 0; + flag_N = res; + flag_NotZ = res & 0xFF; + WRITE_BYTE_F(adr, res) + POST_IO +RET(16) +} + +// NOT +OPCODE(0x4639) +{ + u32 adr, res; + u32 src, dst; + + FETCH_LONG(adr); + PRE_IO + READ_BYTE_F(adr, src) + res = ~src; + flag_C = 0; + flag_V = 0; + flag_N = res; + flag_NotZ = res & 0xFF; + WRITE_BYTE_F(adr, res) + POST_IO +RET(20) +} + +// NOT +OPCODE(0x461F) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7); + AREG(7) += 2; + PRE_IO + READ_BYTE_F(adr, src) + res = ~src; + flag_C = 0; + flag_V = 0; + flag_N = res; + flag_NotZ = res & 0xFF; + WRITE_BYTE_F(adr, res) + POST_IO +RET(12) +} + +// NOT +OPCODE(0x4627) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7) - 2; + AREG(7) = adr; + PRE_IO + READ_BYTE_F(adr, src) + res = ~src; + flag_C = 0; + flag_V = 0; + flag_N = res; + flag_NotZ = res & 0xFF; + WRITE_BYTE_F(adr, res) + POST_IO +RET(14) +} + +// NOT +OPCODE(0x4640) +{ + u32 adr, res; + u32 src, dst; + + src = DREGu16((Opcode >> 0) & 7); + res = ~src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res & 0xFFFF; + flag_N = res >> 8; + DREGu16((Opcode >> 0) & 7) = res; +RET(4) +} + +// NOT +OPCODE(0x4650) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + PRE_IO + READ_WORD_F(adr, src) + res = ~src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res & 0xFFFF; + flag_N = res >> 8; + WRITE_WORD_F(adr, res) + POST_IO +RET(12) +} + +// NOT +OPCODE(0x4658) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + AREG((Opcode >> 0) & 7) += 2; + PRE_IO + READ_WORD_F(adr, src) + res = ~src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res & 0xFFFF; + flag_N = res >> 8; + WRITE_WORD_F(adr, res) + POST_IO +RET(12) +} + +// NOT +OPCODE(0x4660) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7) - 2; + AREG((Opcode >> 0) & 7) = adr; + PRE_IO + READ_WORD_F(adr, src) + res = ~src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res & 0xFFFF; + flag_N = res >> 8; + WRITE_WORD_F(adr, res) + POST_IO +RET(14) +} + +// NOT +OPCODE(0x4668) +{ + u32 adr, res; + u32 src, dst; + + FETCH_SWORD(adr); + adr += AREG((Opcode >> 0) & 7); + PRE_IO + READ_WORD_F(adr, src) + res = ~src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res & 0xFFFF; + flag_N = res >> 8; + WRITE_WORD_F(adr, res) + POST_IO +RET(16) +} + +// NOT +OPCODE(0x4670) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + DECODE_EXT_WORD + PRE_IO + READ_WORD_F(adr, src) + res = ~src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res & 0xFFFF; + flag_N = res >> 8; + WRITE_WORD_F(adr, res) + POST_IO +RET(18) +} + +// NOT +OPCODE(0x4678) +{ + u32 adr, res; + u32 src, dst; + + FETCH_SWORD(adr); + PRE_IO + READ_WORD_F(adr, src) + res = ~src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res & 0xFFFF; + flag_N = res >> 8; + WRITE_WORD_F(adr, res) + POST_IO +RET(16) +} + +// NOT +OPCODE(0x4679) +{ + u32 adr, res; + u32 src, dst; + + FETCH_LONG(adr); + PRE_IO + READ_WORD_F(adr, src) + res = ~src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res & 0xFFFF; + flag_N = res >> 8; + WRITE_WORD_F(adr, res) + POST_IO +RET(20) +} + +// NOT +OPCODE(0x465F) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7); + AREG(7) += 2; + PRE_IO + READ_WORD_F(adr, src) + res = ~src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res & 0xFFFF; + flag_N = res >> 8; + WRITE_WORD_F(adr, res) + POST_IO +RET(12) +} + +// NOT +OPCODE(0x4667) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7) - 2; + AREG(7) = adr; + PRE_IO + READ_WORD_F(adr, src) + res = ~src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res & 0xFFFF; + flag_N = res >> 8; + WRITE_WORD_F(adr, res) + POST_IO +RET(14) +} + +// NOT +OPCODE(0x4680) +{ + u32 adr, res; + u32 src, dst; + + src = DREGu32((Opcode >> 0) & 7); + res = ~src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + DREGu32((Opcode >> 0) & 7) = res; +RET(6) +} + +// NOT +OPCODE(0x4690) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + PRE_IO + READ_LONG_F(adr, src) + res = ~src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + WRITE_LONG_F(adr, res) + POST_IO +RET(20) +} + +// NOT +OPCODE(0x4698) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + AREG((Opcode >> 0) & 7) += 4; + PRE_IO + READ_LONG_F(adr, src) + res = ~src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + WRITE_LONG_F(adr, res) + POST_IO +RET(20) +} + +// NOT +OPCODE(0x46A0) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7) - 4; + AREG((Opcode >> 0) & 7) = adr; + PRE_IO + READ_LONG_F(adr, src) + res = ~src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + WRITE_LONG_F(adr, res) + POST_IO +RET(22) +} + +// NOT +OPCODE(0x46A8) +{ + u32 adr, res; + u32 src, dst; + + FETCH_SWORD(adr); + adr += AREG((Opcode >> 0) & 7); + PRE_IO + READ_LONG_F(adr, src) + res = ~src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + WRITE_LONG_F(adr, res) + POST_IO +RET(24) +} + +// NOT +OPCODE(0x46B0) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + DECODE_EXT_WORD + PRE_IO + READ_LONG_F(adr, src) + res = ~src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + WRITE_LONG_F(adr, res) + POST_IO +RET(26) +} + +// NOT +OPCODE(0x46B8) +{ + u32 adr, res; + u32 src, dst; + + FETCH_SWORD(adr); + PRE_IO + READ_LONG_F(adr, src) + res = ~src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + WRITE_LONG_F(adr, res) + POST_IO +RET(24) +} + +// NOT +OPCODE(0x46B9) +{ + u32 adr, res; + u32 src, dst; + + FETCH_LONG(adr); + PRE_IO + READ_LONG_F(adr, src) + res = ~src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + WRITE_LONG_F(adr, res) + POST_IO +RET(28) +} + +// NOT +OPCODE(0x469F) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7); + AREG(7) += 4; + PRE_IO + READ_LONG_F(adr, src) + res = ~src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + WRITE_LONG_F(adr, res) + POST_IO +RET(20) +} + +// NOT +OPCODE(0x46A7) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7) - 4; + AREG(7) = adr; + PRE_IO + READ_LONG_F(adr, src) + res = ~src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + WRITE_LONG_F(adr, res) + POST_IO +RET(22) +} + +// MOVESRa +OPCODE(0x40C0) +{ + u32 adr, res; + u32 src, dst; + + res = GET_SR; + DREGu16((Opcode >> 0) & 7) = res; +RET(6) +} + +// MOVESRa +OPCODE(0x40D0) +{ + u32 adr, res; + u32 src, dst; + + res = GET_SR; + adr = AREG((Opcode >> 0) & 7); + PRE_IO + WRITE_WORD_F(adr, res) + POST_IO +RET(12) +} + +// MOVESRa +OPCODE(0x40D8) +{ + u32 adr, res; + u32 src, dst; + + res = GET_SR; + adr = AREG((Opcode >> 0) & 7); + AREG((Opcode >> 0) & 7) += 2; + PRE_IO + WRITE_WORD_F(adr, res) + POST_IO +RET(12) +} + +// MOVESRa +OPCODE(0x40E0) +{ + u32 adr, res; + u32 src, dst; + + res = GET_SR; + adr = AREG((Opcode >> 0) & 7) - 2; + AREG((Opcode >> 0) & 7) = adr; + PRE_IO + WRITE_WORD_F(adr, res) + POST_IO +RET(14) +} + +// MOVESRa +OPCODE(0x40E8) +{ + u32 adr, res; + u32 src, dst; + + res = GET_SR; + FETCH_SWORD(adr); + adr += AREG((Opcode >> 0) & 7); + PRE_IO + WRITE_WORD_F(adr, res) + POST_IO +RET(16) +} + +// MOVESRa +OPCODE(0x40F0) +{ + u32 adr, res; + u32 src, dst; + + res = GET_SR; + adr = AREG((Opcode >> 0) & 7); + DECODE_EXT_WORD + PRE_IO + WRITE_WORD_F(adr, res) + POST_IO +RET(18) +} + +// MOVESRa +OPCODE(0x40F8) +{ + u32 adr, res; + u32 src, dst; + + res = GET_SR; + FETCH_SWORD(adr); + PRE_IO + WRITE_WORD_F(adr, res) + POST_IO +RET(16) +} + +// MOVESRa +OPCODE(0x40F9) +{ + u32 adr, res; + u32 src, dst; + + res = GET_SR; + FETCH_LONG(adr); + PRE_IO + WRITE_WORD_F(adr, res) + POST_IO +RET(20) +} + +// MOVESRa +OPCODE(0x40DF) +{ + u32 adr, res; + u32 src, dst; + + res = GET_SR; + adr = AREG(7); + AREG(7) += 2; + PRE_IO + WRITE_WORD_F(adr, res) + POST_IO +RET(12) +} + +// MOVESRa +OPCODE(0x40E7) +{ + u32 adr, res; + u32 src, dst; + + res = GET_SR; + adr = AREG(7) - 2; + AREG(7) = adr; + PRE_IO + WRITE_WORD_F(adr, res) + POST_IO +RET(14) +} + +// MOVEaCCR +OPCODE(0x44C0) +{ + u32 adr, res; + u32 src, dst; + + res = DREGu16((Opcode >> 0) & 7); + SET_CCR(res) +RET(12) +} + +// MOVEaCCR +OPCODE(0x44D0) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + PRE_IO + READ_WORD_F(adr, res) + SET_CCR(res) + POST_IO +RET(16) +} + +// MOVEaCCR +OPCODE(0x44D8) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + AREG((Opcode >> 0) & 7) += 2; + PRE_IO + READ_WORD_F(adr, res) + SET_CCR(res) + POST_IO +RET(16) +} + +// MOVEaCCR +OPCODE(0x44E0) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7) - 2; + AREG((Opcode >> 0) & 7) = adr; + PRE_IO + READ_WORD_F(adr, res) + SET_CCR(res) + POST_IO +RET(18) +} + +// MOVEaCCR +OPCODE(0x44E8) +{ + u32 adr, res; + u32 src, dst; + + FETCH_SWORD(adr); + adr += AREG((Opcode >> 0) & 7); + PRE_IO + READ_WORD_F(adr, res) + SET_CCR(res) + POST_IO +RET(20) +} + +// MOVEaCCR +OPCODE(0x44F0) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + DECODE_EXT_WORD + PRE_IO + READ_WORD_F(adr, res) + SET_CCR(res) + POST_IO +RET(22) +} + +// MOVEaCCR +OPCODE(0x44F8) +{ + u32 adr, res; + u32 src, dst; + + FETCH_SWORD(adr); + PRE_IO + READ_WORD_F(adr, res) + SET_CCR(res) + POST_IO +RET(20) +} + +// MOVEaCCR +OPCODE(0x44F9) +{ + u32 adr, res; + u32 src, dst; + + FETCH_LONG(adr); + PRE_IO + READ_WORD_F(adr, res) + SET_CCR(res) + POST_IO +RET(24) +} + +// MOVEaCCR +OPCODE(0x44FA) +{ + u32 adr, res; + u32 src, dst; + + adr = GET_SWORD + ((u32)(PC) - BasePC); + PC++; + PRE_IO + READ_WORD_F(adr, res) + SET_CCR(res) + POST_IO +RET(20) +} + +// MOVEaCCR +OPCODE(0x44FB) +{ + u32 adr, res; + u32 src, dst; + + adr = (u32)(PC) - BasePC; + DECODE_EXT_WORD + PRE_IO + READ_WORD_F(adr, res) + SET_CCR(res) + POST_IO +RET(22) +} + +// MOVEaCCR +OPCODE(0x44FC) +{ + u32 adr, res; + u32 src, dst; + + FETCH_WORD(res); + SET_CCR(res) +RET(16) +} + +// MOVEaCCR +OPCODE(0x44DF) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7); + AREG(7) += 2; + PRE_IO + READ_WORD_F(adr, res) + SET_CCR(res) + POST_IO +RET(16) +} + +// MOVEaCCR +OPCODE(0x44E7) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7) - 2; + AREG(7) = adr; + PRE_IO + READ_WORD_F(adr, res) + SET_CCR(res) + POST_IO +RET(18) +} + +// MOVEaSR +OPCODE(0x46C0) +{ + u32 adr, res; + u32 src, dst; + + if (flag_S) + { + res = DREGu16((Opcode >> 0) & 7); + SET_SR(res) + if (!flag_S) + { + res = AREG(7); + AREG(7) = ASP; + ASP = res; + } + CHECK_INT_TO_JUMP(12) + } + else + { + u32 oldPC=GET_PC; + SET_PC(oldPC-2) + execute_exception(M68K_PRIVILEGE_VIOLATION_EX); + RET(4) + } +RET(12) +} + +// MOVEaSR +OPCODE(0x46D0) +{ + u32 adr, res; + u32 src, dst; + + if (flag_S) + { + adr = AREG((Opcode >> 0) & 7); + PRE_IO + READ_WORD_F(adr, res) + SET_SR(res) + if (!flag_S) + { + res = AREG(7); + AREG(7) = ASP; + ASP = res; + } + POST_IO + CHECK_INT_TO_JUMP(16) + } + else + { + u32 oldPC=GET_PC; + SET_PC(oldPC-2) + execute_exception(M68K_PRIVILEGE_VIOLATION_EX); + RET(4) + } +RET(16) +} + +// MOVEaSR +OPCODE(0x46D8) +{ + u32 adr, res; + u32 src, dst; + + if (flag_S) + { + adr = AREG((Opcode >> 0) & 7); + AREG((Opcode >> 0) & 7) += 2; + PRE_IO + READ_WORD_F(adr, res) + SET_SR(res) + if (!flag_S) + { + res = AREG(7); + AREG(7) = ASP; + ASP = res; + } + POST_IO + CHECK_INT_TO_JUMP(16) + } + else + { + u32 oldPC=GET_PC; + SET_PC(oldPC-2) + execute_exception(M68K_PRIVILEGE_VIOLATION_EX); + RET(4) + } +RET(16) +} + +// MOVEaSR +OPCODE(0x46E0) +{ + u32 adr, res; + u32 src, dst; + + if (flag_S) + { + adr = AREG((Opcode >> 0) & 7) - 2; + AREG((Opcode >> 0) & 7) = adr; + PRE_IO + READ_WORD_F(adr, res) + SET_SR(res) + if (!flag_S) + { + res = AREG(7); + AREG(7) = ASP; + ASP = res; + } + POST_IO + CHECK_INT_TO_JUMP(18) + } + else + { + u32 oldPC=GET_PC; + SET_PC(oldPC-2) + execute_exception(M68K_PRIVILEGE_VIOLATION_EX); + RET(4) + } +RET(18) +} + +// MOVEaSR +OPCODE(0x46E8) +{ + u32 adr, res; + u32 src, dst; + + if (flag_S) + { + FETCH_SWORD(adr); + adr += AREG((Opcode >> 0) & 7); + PRE_IO + READ_WORD_F(adr, res) + SET_SR(res) + if (!flag_S) + { + res = AREG(7); + AREG(7) = ASP; + ASP = res; + } + POST_IO + CHECK_INT_TO_JUMP(20) + } + else + { + u32 oldPC=GET_PC; + SET_PC(oldPC-2) + execute_exception(M68K_PRIVILEGE_VIOLATION_EX); + RET(4) + } +RET(20) +} + +// MOVEaSR +OPCODE(0x46F0) +{ + u32 adr, res; + u32 src, dst; + + if (flag_S) + { + adr = AREG((Opcode >> 0) & 7); + DECODE_EXT_WORD + PRE_IO + READ_WORD_F(adr, res) + SET_SR(res) + if (!flag_S) + { + res = AREG(7); + AREG(7) = ASP; + ASP = res; + } + POST_IO + CHECK_INT_TO_JUMP(22) + } + else + { + u32 oldPC=GET_PC; + SET_PC(oldPC-2) + execute_exception(M68K_PRIVILEGE_VIOLATION_EX); + RET(4) + } +RET(22) +} + + +// MOVEaSR +OPCODE(0x46F8) +{ + u32 adr, res; + u32 src, dst; + + if (flag_S) + { + FETCH_SWORD(adr); + PRE_IO + READ_WORD_F(adr, res) + SET_SR(res) + if (!flag_S) + { + res = AREG(7); + AREG(7) = ASP; + ASP = res; + } + POST_IO + CHECK_INT_TO_JUMP(20) + } + else + { + u32 oldPC=GET_PC; + SET_PC(oldPC-2) + execute_exception(M68K_PRIVILEGE_VIOLATION_EX); + RET(4) + } +RET(20) +} + +// MOVEaSR +OPCODE(0x46F9) +{ + u32 adr, res; + u32 src, dst; + + if (flag_S) + { + FETCH_LONG(adr); + PRE_IO + READ_WORD_F(adr, res) + SET_SR(res) + if (!flag_S) + { + res = AREG(7); + AREG(7) = ASP; + ASP = res; + } + POST_IO + CHECK_INT_TO_JUMP(24) + } + else + { + u32 oldPC=GET_PC; + SET_PC(oldPC-2) + execute_exception(M68K_PRIVILEGE_VIOLATION_EX); + RET(4) + } +RET(24) +} + +// MOVEaSR +OPCODE(0x46FA) +{ + u32 adr, res; + u32 src, dst; + + if (flag_S) + { + adr = GET_SWORD + ((u32)(PC) - BasePC); + PC++; + PRE_IO + READ_WORD_F(adr, res) + SET_SR(res) + if (!flag_S) + { + res = AREG(7); + AREG(7) = ASP; + ASP = res; + } + POST_IO + CHECK_INT_TO_JUMP(24) + } + else + { + u32 oldPC=GET_PC; + SET_PC(oldPC-2) + execute_exception(M68K_PRIVILEGE_VIOLATION_EX); + RET(4) + } +RET(20) +} + +// MOVEaSR +OPCODE(0x46FB) +{ + u32 adr, res; + u32 src, dst; + + if (flag_S) + { + adr = (u32)(PC) - BasePC; + DECODE_EXT_WORD + PRE_IO + READ_WORD_F(adr, res) + SET_SR(res) + if (!flag_S) + { + res = AREG(7); + AREG(7) = ASP; + ASP = res; + } + POST_IO + CHECK_INT_TO_JUMP(22) + } + else + { + u32 oldPC=GET_PC; + SET_PC(oldPC-2) + execute_exception(M68K_PRIVILEGE_VIOLATION_EX); + RET(4) + } +RET(22) +} + +// MOVEaSR +OPCODE(0x46FC) +{ + u32 adr, res; + u32 src, dst; + + if (flag_S) + { + FETCH_WORD(res); + SET_SR(res) + if (!flag_S) + { + res = AREG(7); + AREG(7) = ASP; + ASP = res; + } + CHECK_INT_TO_JUMP(16) + } + else + { + u32 oldPC=GET_PC; + SET_PC(oldPC-2) + execute_exception(M68K_PRIVILEGE_VIOLATION_EX); + RET(4) + } +RET(16) +} + +// MOVEaSR +OPCODE(0x46DF) +{ + u32 adr, res; + u32 src, dst; + + if (flag_S) + { + adr = AREG(7); + AREG(7) += 2; + PRE_IO + READ_WORD_F(adr, res) + SET_SR(res) + if (!flag_S) + { + res = AREG(7); + AREG(7) = ASP; + ASP = res; + } + POST_IO + CHECK_INT_TO_JUMP(16) + } + else + { + u32 oldPC=GET_PC; + SET_PC(oldPC-2) + execute_exception(M68K_PRIVILEGE_VIOLATION_EX); + RET(4) + } +RET(16) +} + +// MOVEaSR +OPCODE(0x46E7) +{ + u32 adr, res; + u32 src, dst; + + if (flag_S) + { + adr = AREG(7) - 2; + AREG(7) = adr; + PRE_IO + READ_WORD_F(adr, res) + SET_SR(res) + if (!flag_S) + { + res = AREG(7); + AREG(7) = ASP; + ASP = res; + } + POST_IO + CHECK_INT_TO_JUMP(18) + } + else + { + u32 oldPC=GET_PC; + SET_PC(oldPC-2) + execute_exception(M68K_PRIVILEGE_VIOLATION_EX); + RET(4) + } +RET(18) +} + +// NBCD +OPCODE(0x4800) +{ + u32 adr, res; + u32 src, dst; + + res = DREGu8((Opcode >> 0) & 7); + res = 0x9a - res - ((flag_X >> M68K_SR_X_SFT) & 1); + + if (res != 0x9a) + { + if ((res & 0x0f) == 0xa) res = (res & 0xf0) + 0x10; + res &= 0xFF; + DREGu8((Opcode >> 0) & 7) = res; + flag_NotZ |= res; + flag_X = flag_C = M68K_SR_C; + } + else flag_X = flag_C = 0; + flag_N = res; +RET(6) +} + +// NBCD +OPCODE(0x4810) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + PRE_IO + READ_BYTE_F(adr, res) + res = 0x9a - res - ((flag_X >> M68K_SR_X_SFT) & 1); + + if (res != 0x9a) + { + if ((res & 0x0f) == 0xa) res = (res & 0xf0) + 0x10; + res &= 0xFF; + WRITE_BYTE_F(adr, res) + flag_NotZ |= res; + flag_X = flag_C = M68K_SR_C; + } + else flag_X = flag_C = 0; + flag_N = res; + POST_IO +RET(12) +} + +// NBCD +OPCODE(0x4818) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + AREG((Opcode >> 0) & 7) += 1; + PRE_IO + READ_BYTE_F(adr, res) + res = 0x9a - res - ((flag_X >> M68K_SR_X_SFT) & 1); + + if (res != 0x9a) + { + if ((res & 0x0f) == 0xa) res = (res & 0xf0) + 0x10; + res &= 0xFF; + WRITE_BYTE_F(adr, res) + flag_NotZ |= res; + flag_X = flag_C = M68K_SR_C; + } + else flag_X = flag_C = 0; + flag_N = res; + POST_IO +RET(12) +} + +// NBCD +OPCODE(0x4820) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7) - 1; + AREG((Opcode >> 0) & 7) = adr; + PRE_IO + READ_BYTE_F(adr, res) + res = 0x9a - res - ((flag_X >> M68K_SR_X_SFT) & 1); + + if (res != 0x9a) + { + if ((res & 0x0f) == 0xa) res = (res & 0xf0) + 0x10; + res &= 0xFF; + WRITE_BYTE_F(adr, res) + flag_NotZ |= res; + flag_X = flag_C = M68K_SR_C; + } + else flag_X = flag_C = 0; + flag_N = res; + POST_IO +RET(14) +} + +// NBCD +OPCODE(0x4828) +{ + u32 adr, res; + u32 src, dst; + + FETCH_SWORD(adr); + adr += AREG((Opcode >> 0) & 7); + PRE_IO + READ_BYTE_F(adr, res) + res = 0x9a - res - ((flag_X >> M68K_SR_X_SFT) & 1); + + if (res != 0x9a) + { + if ((res & 0x0f) == 0xa) res = (res & 0xf0) + 0x10; + res &= 0xFF; + WRITE_BYTE_F(adr, res) + flag_NotZ |= res; + flag_X = flag_C = M68K_SR_C; + } + else flag_X = flag_C = 0; + flag_N = res; + POST_IO +RET(16) +} + +// NBCD +OPCODE(0x4830) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + DECODE_EXT_WORD + PRE_IO + READ_BYTE_F(adr, res) + res = 0x9a - res - ((flag_X >> M68K_SR_X_SFT) & 1); + + if (res != 0x9a) + { + if ((res & 0x0f) == 0xa) res = (res & 0xf0) + 0x10; + res &= 0xFF; + WRITE_BYTE_F(adr, res) + flag_NotZ |= res; + flag_X = flag_C = M68K_SR_C; + } + else flag_X = flag_C = 0; + flag_N = res; + POST_IO +RET(18) +} + +// NBCD +OPCODE(0x4838) +{ + u32 adr, res; + u32 src, dst; + + FETCH_SWORD(adr); + PRE_IO + READ_BYTE_F(adr, res) + res = 0x9a - res - ((flag_X >> M68K_SR_X_SFT) & 1); + + if (res != 0x9a) + { + if ((res & 0x0f) == 0xa) res = (res & 0xf0) + 0x10; + res &= 0xFF; + WRITE_BYTE_F(adr, res) + flag_NotZ |= res; + flag_X = flag_C = M68K_SR_C; + } + else flag_X = flag_C = 0; + flag_N = res; + POST_IO +RET(16) +} + +// NBCD +OPCODE(0x4839) +{ + u32 adr, res; + u32 src, dst; + + FETCH_LONG(adr); + PRE_IO + READ_BYTE_F(adr, res) + res = 0x9a - res - ((flag_X >> M68K_SR_X_SFT) & 1); + + if (res != 0x9a) + { + if ((res & 0x0f) == 0xa) res = (res & 0xf0) + 0x10; + res &= 0xFF; + WRITE_BYTE_F(adr, res) + flag_NotZ |= res; + flag_X = flag_C = M68K_SR_C; + } + else flag_X = flag_C = 0; + flag_N = res; + POST_IO +RET(20) +} + +// NBCD +OPCODE(0x481F) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7); + AREG(7) += 2; + PRE_IO + READ_BYTE_F(adr, res) + res = 0x9a - res - ((flag_X >> M68K_SR_X_SFT) & 1); + + if (res != 0x9a) + { + if ((res & 0x0f) == 0xa) res = (res & 0xf0) + 0x10; + res &= 0xFF; + WRITE_BYTE_F(adr, res) + flag_NotZ |= res; + flag_X = flag_C = M68K_SR_C; + } + else flag_X = flag_C = 0; + flag_N = res; + POST_IO +RET(12) +} + +// NBCD +OPCODE(0x4827) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7) - 2; + AREG(7) = adr; + PRE_IO + READ_BYTE_F(adr, res) + res = 0x9a - res - ((flag_X >> M68K_SR_X_SFT) & 1); + + if (res != 0x9a) + { + if ((res & 0x0f) == 0xa) res = (res & 0xf0) + 0x10; + res &= 0xFF; + WRITE_BYTE_F(adr, res) + flag_NotZ |= res; + flag_X = flag_C = M68K_SR_C; + } + else flag_X = flag_C = 0; + flag_N = res; + POST_IO +RET(14) +} + +// PEA +OPCODE(0x4850) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + PRE_IO + PUSH_32_F(adr) + POST_IO +RET(12) +} + +// PEA +OPCODE(0x4868) +{ + u32 adr, res; + u32 src, dst; + + FETCH_SWORD(adr); + adr += AREG((Opcode >> 0) & 7); + PRE_IO + PUSH_32_F(adr) + POST_IO +RET(16) +} + +// PEA +OPCODE(0x4870) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + DECODE_EXT_WORD + PRE_IO + PUSH_32_F(adr) + POST_IO +RET(20) +} + +// PEA +OPCODE(0x4878) +{ + u32 adr, res; + u32 src, dst; + + FETCH_SWORD(adr); + PRE_IO + PUSH_32_F(adr) + POST_IO +RET(16) +} + +// PEA +OPCODE(0x4879) +{ + u32 adr, res; + u32 src, dst; + + FETCH_LONG(adr); + PRE_IO + PUSH_32_F(adr) + POST_IO +RET(20) +} + +// PEA +OPCODE(0x487A) +{ + u32 adr, res; + u32 src, dst; + + adr = GET_SWORD + ((u32)(PC) - BasePC); + PC++; + PRE_IO + PUSH_32_F(adr) + POST_IO +RET(16) +} + +// PEA +OPCODE(0x487B) +{ + u32 adr, res; + u32 src, dst; + + adr = (u32)(PC) - BasePC; + DECODE_EXT_WORD + PRE_IO + PUSH_32_F(adr) + POST_IO +RET(20) +} + +// SWAP +OPCODE(0x4840) +{ + u32 adr, res; + u32 src, dst; + + res = DREGu32((Opcode >> 0) & 7); + res = (res >> 16) | (res << 16); + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + DREGu32((Opcode >> 0) & 7) = res; +RET(4) +} + +// MOVEMRa +OPCODE(0x4890) +{ + u32 adr, res; + u32 src, dst; + + u32 *psrc; + + FETCH_WORD(res); + adr = AREG((Opcode >> 0) & 7); + psrc = &DREGu32(0); + dst = adr; + PRE_IO + do + { + if (res & 1) + { + WRITE_WORD_F(adr, *psrc) + adr += 2; + } + psrc++; + } while (res >>= 1); + POST_IO + m68kcontext.io_cycle_counter -= (adr - dst) * 2; +#ifdef USE_CYCLONE_TIMING +RET(8) +#else +RET(12) +#endif +} + +// MOVEMRa +OPCODE(0x48A0) +{ + u32 adr, res; + u32 src, dst; + + u32 *psrc; + + FETCH_WORD(res); + adr = AREG((Opcode >> 0) & 7); + psrc = &AREGu32(7); + dst = adr; + PRE_IO + do + { + if (res & 1) + { + adr -= 2; + WRITE_WORD_F(adr, *psrc) + } + psrc--; + } while (res >>= 1); + AREG((Opcode >> 0) & 7) = adr; + POST_IO + m68kcontext.io_cycle_counter -= (dst - adr) * 2; +RET(8) +} + +// MOVEMRa +OPCODE(0x48A8) +{ + u32 adr, res; + u32 src, dst; + + u32 *psrc; + + FETCH_WORD(res); + FETCH_SWORD(adr); + adr += AREG((Opcode >> 0) & 7); + psrc = &DREGu32(0); + dst = adr; + PRE_IO + do + { + if (res & 1) + { + WRITE_WORD_F(adr, *psrc) + adr += 2; + } + psrc++; + } while (res >>= 1); + POST_IO + m68kcontext.io_cycle_counter -= (adr - dst) * 2; +#ifdef USE_CYCLONE_TIMING +RET(12) +#else +RET(20) +#endif +} + +// MOVEMRa +OPCODE(0x48B0) +{ + u32 adr, res; + u32 src, dst; + + u32 *psrc; + + FETCH_WORD(res); + adr = AREG((Opcode >> 0) & 7); + DECODE_EXT_WORD + psrc = &DREGu32(0); + dst = adr; + PRE_IO + do + { + if (res & 1) + { + WRITE_WORD_F(adr, *psrc) + adr += 2; + } + psrc++; + } while (res >>= 1); + POST_IO + m68kcontext.io_cycle_counter -= (adr - dst) * 2; +#ifdef USE_CYCLONE_TIMING +RET(14) +#else +RET(24) +#endif +} + +// MOVEMRa +OPCODE(0x48B8) +{ + u32 adr, res; + u32 src, dst; + + u32 *psrc; + + FETCH_WORD(res); + FETCH_SWORD(adr); + psrc = &DREGu32(0); + dst = adr; + PRE_IO + do + { + if (res & 1) + { + WRITE_WORD_F(adr, *psrc) + adr += 2; + } + psrc++; + } while (res >>= 1); + POST_IO + m68kcontext.io_cycle_counter -= (adr - dst) * 2; +#ifdef USE_CYCLONE_TIMING +RET(12) +#else +RET(20) +#endif +} + +// MOVEMRa +OPCODE(0x48B9) +{ + u32 adr, res; + u32 src, dst; + + u32 *psrc; + + FETCH_WORD(res); + FETCH_LONG(adr); + psrc = &DREGu32(0); + dst = adr; + PRE_IO + do + { + if (res & 1) + { + WRITE_WORD_F(adr, *psrc) + adr += 2; + } + psrc++; + } while (res >>= 1); + POST_IO + m68kcontext.io_cycle_counter -= (adr - dst) * 2; +#ifdef USE_CYCLONE_TIMING +RET(16) +#else +RET(28) +#endif +} + +// MOVEMRa +OPCODE(0x48A7) +{ + u32 adr, res; + u32 src, dst; + + u32 *psrc; + + FETCH_WORD(res); + adr = AREG(7); + psrc = &AREGu32(7); + dst = adr; + PRE_IO + do + { + if (res & 1) + { + adr -= 2; + WRITE_WORD_F(adr, *psrc) + } + psrc--; + } while (res >>= 1); + AREG(7) = adr; + POST_IO + m68kcontext.io_cycle_counter -= (dst - adr) * 2; +RET(8) +} + +// MOVEMRa +OPCODE(0x48D0) +{ + u32 adr, res; + u32 src, dst; + + u32 *psrc; + + FETCH_WORD(res); + adr = AREG((Opcode >> 0) & 7); + psrc = &DREGu32(0); + dst = adr; + PRE_IO + do + { + if (res & 1) + { + WRITE_LONG_F(adr, *psrc) + adr += 4; + } + psrc++; + } while (res >>= 1); + POST_IO + m68kcontext.io_cycle_counter -= (adr - dst) * 2; +#ifdef USE_CYCLONE_TIMING +RET(8) +#else +RET(16) +#endif +} + +// MOVEMRa +OPCODE(0x48E0) +{ + u32 adr, res; + u32 src, dst; + + u32 *psrc; + + FETCH_WORD(res); + adr = AREG((Opcode >> 0) & 7); + psrc = &AREGu32(7); + dst = adr; + PRE_IO + do + { + if (res & 1) + { + adr -= 4; + WRITE_LONG_DEC_F(adr, *psrc) + } + psrc--; + } while (res >>= 1); + AREG((Opcode >> 0) & 7) = adr; + POST_IO + m68kcontext.io_cycle_counter -= (dst - adr) * 2; +RET(8) +} + +// MOVEMRa +OPCODE(0x48E8) +{ + u32 adr, res; + u32 src, dst; + + u32 *psrc; + + FETCH_WORD(res); + FETCH_SWORD(adr); + adr += AREG((Opcode >> 0) & 7); + psrc = &DREGu32(0); + dst = adr; + PRE_IO + do + { + if (res & 1) + { + WRITE_LONG_F(adr, *psrc) + adr += 4; + } + psrc++; + } while (res >>= 1); + POST_IO + m68kcontext.io_cycle_counter -= (adr - dst) * 2; +#ifdef USE_CYCLONE_TIMING +RET(12) +#else +RET(24) +#endif +} + +// MOVEMRa +OPCODE(0x48F0) +{ + u32 adr, res; + u32 src, dst; + + u32 *psrc; + + FETCH_WORD(res); + adr = AREG((Opcode >> 0) & 7); + DECODE_EXT_WORD + psrc = &DREGu32(0); + dst = adr; + PRE_IO + do + { + if (res & 1) + { + WRITE_LONG_F(adr, *psrc) + adr += 4; + } + psrc++; + } while (res >>= 1); + POST_IO + m68kcontext.io_cycle_counter -= (adr - dst) * 2; +#ifdef USE_CYCLONE_TIMING +RET(14) +#else +RET(28) +#endif +} + +// MOVEMRa +OPCODE(0x48F8) +{ + u32 adr, res; + u32 src, dst; + + u32 *psrc; + + FETCH_WORD(res); + FETCH_SWORD(adr); + psrc = &DREGu32(0); + dst = adr; + PRE_IO + do + { + if (res & 1) + { + WRITE_LONG_F(adr, *psrc) + adr += 4; + } + psrc++; + } while (res >>= 1); + POST_IO + m68kcontext.io_cycle_counter -= (adr - dst) * 2; +#ifdef USE_CYCLONE_TIMING +RET(12) +#else +RET(24) +#endif +} + +// MOVEMRa +OPCODE(0x48F9) +{ + u32 adr, res; + u32 src, dst; + + u32 *psrc; + + FETCH_WORD(res); + FETCH_LONG(adr); + psrc = &DREGu32(0); + dst = adr; + PRE_IO + do + { + if (res & 1) + { + WRITE_LONG_F(adr, *psrc) + adr += 4; + } + psrc++; + } while (res >>= 1); + POST_IO + m68kcontext.io_cycle_counter -= (adr - dst) * 2; +#ifdef USE_CYCLONE_TIMING +RET(16) +#else +RET(32) +#endif +} + +// MOVEMRa +OPCODE(0x48E7) +{ + u32 adr, res; + u32 src, dst; + + u32 *psrc; + + FETCH_WORD(res); + adr = AREG(7); + psrc = &AREGu32(7); + dst = adr; + PRE_IO + do + { + if (res & 1) + { + adr -= 4; + WRITE_LONG_DEC_F(adr, *psrc) + } + psrc--; + } while (res >>= 1); + AREG(7) = adr; + POST_IO + m68kcontext.io_cycle_counter -= (dst - adr) * 2; +RET(8) +} + +// EXT +OPCODE(0x4880) +{ + u32 adr, res; + u32 src, dst; + + res = (s32)DREGs8((Opcode >> 0) & 7); + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + DREGu16((Opcode >> 0) & 7) = res; +RET(4) +} + +// EXT +OPCODE(0x48C0) +{ + u32 adr, res; + u32 src, dst; + + res = (s32)DREGs16((Opcode >> 0) & 7); + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + DREGu32((Opcode >> 0) & 7) = res; +RET(4) +} + +// TST +OPCODE(0x4A00) +{ + u32 adr, res; + u32 src, dst; + + res = DREGu8((Opcode >> 0) & 7); + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; +RET(4) +} + +// TST +OPCODE(0x4A10) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + PRE_IO + READ_BYTE_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + POST_IO +RET(8) +} + +// TST +OPCODE(0x4A18) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + AREG((Opcode >> 0) & 7) += 1; + PRE_IO + READ_BYTE_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + POST_IO +RET(8) +} + +// TST +OPCODE(0x4A20) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7) - 1; + AREG((Opcode >> 0) & 7) = adr; + PRE_IO + READ_BYTE_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + POST_IO +RET(10) +} + +// TST +OPCODE(0x4A28) +{ + u32 adr, res; + u32 src, dst; + + FETCH_SWORD(adr); + adr += AREG((Opcode >> 0) & 7); + PRE_IO + READ_BYTE_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + POST_IO +RET(12) +} + +// TST +OPCODE(0x4A30) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + DECODE_EXT_WORD + PRE_IO + READ_BYTE_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + POST_IO +RET(14) +} + +// TST +OPCODE(0x4A38) +{ + u32 adr, res; + u32 src, dst; + + FETCH_SWORD(adr); + PRE_IO + READ_BYTE_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + POST_IO +RET(12) +} + +// TST +OPCODE(0x4A39) +{ + u32 adr, res; + u32 src, dst; + + FETCH_LONG(adr); + PRE_IO + READ_BYTE_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + POST_IO +RET(16) +} + +// TST +OPCODE(0x4A1F) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7); + AREG(7) += 2; + PRE_IO + READ_BYTE_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + POST_IO +RET(8) +} + +// TST +OPCODE(0x4A27) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7) - 2; + AREG(7) = adr; + PRE_IO + READ_BYTE_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + POST_IO +RET(10) +} + +// TST +OPCODE(0x4A40) +{ + u32 adr, res; + u32 src, dst; + + res = DREGu16((Opcode >> 0) & 7); + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; +RET(4) +} + +// TST +OPCODE(0x4A50) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + PRE_IO + READ_WORD_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + POST_IO +RET(8) +} + +// TST +OPCODE(0x4A58) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + AREG((Opcode >> 0) & 7) += 2; + PRE_IO + READ_WORD_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + POST_IO +RET(8) +} + +// TST +OPCODE(0x4A60) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7) - 2; + AREG((Opcode >> 0) & 7) = adr; + PRE_IO + READ_WORD_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + POST_IO +RET(10) +} + +// TST +OPCODE(0x4A68) +{ + u32 adr, res; + u32 src, dst; + + FETCH_SWORD(adr); + adr += AREG((Opcode >> 0) & 7); + PRE_IO + READ_WORD_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + POST_IO +RET(12) +} + +// TST +OPCODE(0x4A70) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + DECODE_EXT_WORD + PRE_IO + READ_WORD_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + POST_IO +RET(14) +} + +// TST +OPCODE(0x4A78) +{ + u32 adr, res; + u32 src, dst; + + FETCH_SWORD(adr); + PRE_IO + READ_WORD_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + POST_IO +RET(12) +} + +// TST +OPCODE(0x4A79) +{ + u32 adr, res; + u32 src, dst; + + FETCH_LONG(adr); + PRE_IO + READ_WORD_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + POST_IO +RET(16) +} + +// TST +OPCODE(0x4A5F) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7); + AREG(7) += 2; + PRE_IO + READ_WORD_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + POST_IO +RET(8) +} + +// TST +OPCODE(0x4A67) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7) - 2; + AREG(7) = adr; + PRE_IO + READ_WORD_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + POST_IO +RET(10) +} + +// TST +OPCODE(0x4A80) +{ + u32 adr, res; + u32 src, dst; + + res = DREGu32((Opcode >> 0) & 7); + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; +RET(4) +} + +// TST +OPCODE(0x4A90) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + PRE_IO + READ_LONG_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + POST_IO +RET(12) +} + +// TST +OPCODE(0x4A98) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + AREG((Opcode >> 0) & 7) += 4; + PRE_IO + READ_LONG_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + POST_IO +RET(12) +} + +// TST +OPCODE(0x4AA0) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7) - 4; + AREG((Opcode >> 0) & 7) = adr; + PRE_IO + READ_LONG_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + POST_IO +RET(14) +} + +// TST +OPCODE(0x4AA8) +{ + u32 adr, res; + u32 src, dst; + + FETCH_SWORD(adr); + adr += AREG((Opcode >> 0) & 7); + PRE_IO + READ_LONG_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + POST_IO +RET(16) +} + +// TST +OPCODE(0x4AB0) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + DECODE_EXT_WORD + PRE_IO + READ_LONG_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + POST_IO +RET(18) +} + +// TST +OPCODE(0x4AB8) +{ + u32 adr, res; + u32 src, dst; + + FETCH_SWORD(adr); + PRE_IO + READ_LONG_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + POST_IO +RET(16) +} + +// TST +OPCODE(0x4AB9) +{ + u32 adr, res; + u32 src, dst; + + FETCH_LONG(adr); + PRE_IO + READ_LONG_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + POST_IO +RET(20) +} + +// TST +OPCODE(0x4A9F) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7); + AREG(7) += 4; + PRE_IO + READ_LONG_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + POST_IO +RET(12) +} + +// TST +OPCODE(0x4AA7) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7) - 4; + AREG(7) = adr; + PRE_IO + READ_LONG_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + POST_IO +RET(14) +} + +// TAS +OPCODE(0x4AC0) +{ + u32 adr, res; + u32 src, dst; + + res = DREGu8((Opcode >> 0) & 7); + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + res |= 0x80; + DREGu8((Opcode >> 0) & 7) = res; +RET(4) +} + +// TAS +OPCODE(0x4AD0) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + PRE_IO + READ_BYTE_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + POST_IO +RET(8) +} + +// TAS +OPCODE(0x4AD8) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + AREG((Opcode >> 0) & 7) += 1; + PRE_IO + READ_BYTE_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + POST_IO +RET(8) +} + +// TAS +OPCODE(0x4AE0) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7) - 1; + AREG((Opcode >> 0) & 7) = adr; + PRE_IO + READ_BYTE_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + POST_IO +RET(10) +} + +// TAS +OPCODE(0x4AE8) +{ + u32 adr, res; + u32 src, dst; + + FETCH_SWORD(adr); + adr += AREG((Opcode >> 0) & 7); + PRE_IO + READ_BYTE_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + POST_IO +RET(12) +} + +// TAS +OPCODE(0x4AF0) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + DECODE_EXT_WORD + PRE_IO + READ_BYTE_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + POST_IO +RET(14) +} + +// TAS +OPCODE(0x4AF8) +{ + u32 adr, res; + u32 src, dst; + + FETCH_SWORD(adr); + PRE_IO + READ_BYTE_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + POST_IO +RET(12) +} + +// TAS +OPCODE(0x4AF9) +{ + u32 adr, res; + u32 src, dst; + + FETCH_LONG(adr); + PRE_IO + READ_BYTE_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + POST_IO +RET(16) +} + +// TAS +OPCODE(0x4ADF) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7); + AREG(7) += 2; + PRE_IO + READ_BYTE_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + POST_IO +RET(8) +} + +// TAS +OPCODE(0x4AE7) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7) - 2; + AREG(7) = adr; + PRE_IO + READ_BYTE_F(adr, res) + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + POST_IO +RET(10) +} + +// ILLEGAL +OPCODE(0x4AFC) +{ + u32 oldPC=GET_PC; + SET_PC(oldPC-2) + execute_exception(M68K_ILLEGAL_INSTRUCTION_EX); +RET(4) +} + +// ILLEGAL A000-AFFF +OPCODE(0xA000) +{ + u32 oldPC=GET_PC; + SET_PC(oldPC-2) + execute_exception(M68K_1010_EX); +RET(4) +} + +// ILLEGAL F000-FFFF +OPCODE(0xF000) +{ + u32 oldPC=GET_PC; + SET_PC(oldPC-2) + execute_exception(M68K_1111_EX); +RET(4) +} + +// MOVEMaR +OPCODE(0x4C90) +{ + u32 adr, res; + u32 src, dst; + + s32 *psrc; + + FETCH_WORD(res); + adr = AREG((Opcode >> 0) & 7); + psrc = &DREGs32(0); + dst = adr; + PRE_IO + do + { + if (res & 1) + { + READSX_WORD_F(adr, *psrc) + adr += 2; + } + psrc++; + } while (res >>= 1); + POST_IO + m68kcontext.io_cycle_counter -= (adr - dst) * 2; +#ifdef USE_CYCLONE_TIMING +RET(12) +#else +RET(16) +#endif +} + +// MOVEMaR +OPCODE(0x4C98) +{ + u32 adr, res; + u32 src, dst; + + s32 *psrc; + + FETCH_WORD(res); + adr = AREG((Opcode >> 0) & 7); + psrc = &DREGs32(0); + dst = adr; + PRE_IO + do + { + if (res & 1) + { + READSX_WORD_F(adr, *psrc) + adr += 2; + } + psrc++; + } while (res >>= 1); + AREG((Opcode >> 0) & 7) = adr; + POST_IO + m68kcontext.io_cycle_counter -= (adr - dst) * 2; +RET(12) +} + +// MOVEMaR +OPCODE(0x4CA8) +{ + u32 adr, res; + u32 src, dst; + + s32 *psrc; + + FETCH_WORD(res); + FETCH_SWORD(adr); + adr += AREG((Opcode >> 0) & 7); + psrc = &DREGs32(0); + dst = adr; + PRE_IO + do + { + if (res & 1) + { + READSX_WORD_F(adr, *psrc) + adr += 2; + } + psrc++; + } while (res >>= 1); + POST_IO + m68kcontext.io_cycle_counter -= (adr - dst) * 2; +#ifdef USE_CYCLONE_TIMING +RET(16) +#else +RET(24) +#endif +} + +// MOVEMaR +OPCODE(0x4CB0) +{ + u32 adr, res; + u32 src, dst; + + s32 *psrc; + + FETCH_WORD(res); + adr = AREG((Opcode >> 0) & 7); + DECODE_EXT_WORD + psrc = &DREGs32(0); + dst = adr; + PRE_IO + do + { + if (res & 1) + { + READSX_WORD_F(adr, *psrc) + adr += 2; + } + psrc++; + } while (res >>= 1); + POST_IO + m68kcontext.io_cycle_counter -= (adr - dst) * 2; +#ifdef USE_CYCLONE_TIMING +RET(18) +#else +RET(28) +#endif +} + +// MOVEMaR +OPCODE(0x4CB8) +{ + u32 adr, res; + u32 src, dst; + + s32 *psrc; + + FETCH_WORD(res); + FETCH_SWORD(adr); + psrc = &DREGs32(0); + dst = adr; + PRE_IO + do + { + if (res & 1) + { + READSX_WORD_F(adr, *psrc) + adr += 2; + } + psrc++; + } while (res >>= 1); + POST_IO + m68kcontext.io_cycle_counter -= (adr - dst) * 2; +#ifdef USE_CYCLONE_TIMING +RET(16) +#else +RET(24) +#endif +} + +// MOVEMaR +OPCODE(0x4CB9) +{ + u32 adr, res; + u32 src, dst; + + s32 *psrc; + + FETCH_WORD(res); + FETCH_LONG(adr); + psrc = &DREGs32(0); + dst = adr; + PRE_IO + do + { + if (res & 1) + { + READSX_WORD_F(adr, *psrc) + adr += 2; + } + psrc++; + } while (res >>= 1); + POST_IO + m68kcontext.io_cycle_counter -= (adr - dst) * 2; +#ifdef USE_CYCLONE_TIMING +RET(20) +#else +RET(32) +#endif +} + +// MOVEMaR +OPCODE(0x4CBA) +{ + u32 adr, res; + u32 src, dst; + + s32 *psrc; + + FETCH_WORD(res); + adr = GET_SWORD + ((u32)(PC) - BasePC); + PC++; + psrc = &DREGs32(0); + dst = adr; + PRE_IO + do + { + if (res & 1) + { + READSX_WORD_F(adr, *psrc) + adr += 2; + } + psrc++; + } while (res >>= 1); + POST_IO + m68kcontext.io_cycle_counter -= (adr - dst) * 2; +#ifdef USE_CYCLONE_TIMING +RET(16) +#else +RET(24) +#endif +} + +// MOVEMaR +OPCODE(0x4CBB) +{ + u32 adr, res; + u32 src, dst; + + s32 *psrc; + + FETCH_WORD(res); + adr = (u32)(PC) - BasePC; + DECODE_EXT_WORD + psrc = &DREGs32(0); + dst = adr; + PRE_IO + do + { + if (res & 1) + { + READSX_WORD_F(adr, *psrc) + adr += 2; + } + psrc++; + } while (res >>= 1); + POST_IO + m68kcontext.io_cycle_counter -= (adr - dst) * 2; +#ifdef USE_CYCLONE_TIMING +RET(18) +#else +RET(28) +#endif +} + +// MOVEMaR +OPCODE(0x4C9F) +{ + u32 adr, res; + u32 src, dst; + + s32 *psrc; + + FETCH_WORD(res); + adr = AREG(7); + psrc = &DREGs32(0); + dst = adr; + PRE_IO + do + { + if (res & 1) + { + READSX_WORD_F(adr, *psrc) + adr += 2; + } + psrc++; + } while (res >>= 1); + AREG(7) = adr; + POST_IO + m68kcontext.io_cycle_counter -= (adr - dst) * 2; +RET(12) +} + +// MOVEMaR +OPCODE(0x4CD0) +{ + u32 adr, res; + u32 src, dst; + + u32 *psrc; + + FETCH_WORD(res); + adr = AREG((Opcode >> 0) & 7); + psrc = &DREGu32(0); + dst = adr; + PRE_IO + do + { + if (res & 1) + { + READ_LONG_F(adr, *psrc) + adr += 4; + } + psrc++; + } while (res >>= 1); + POST_IO + m68kcontext.io_cycle_counter -= (adr - dst) * 2; +#ifdef USE_CYCLONE_TIMING +RET(12) +#else +RET(20) +#endif +} + +// MOVEMaR +OPCODE(0x4CD8) +{ + u32 adr, res; + u32 src, dst; + + u32 *psrc; + + FETCH_WORD(res); + adr = AREG((Opcode >> 0) & 7); + psrc = &DREGu32(0); + dst = adr; + PRE_IO + do + { + if (res & 1) + { + READ_LONG_F(adr, *psrc) + adr += 4; + } + psrc++; + } while (res >>= 1); + AREG((Opcode >> 0) & 7) = adr; + POST_IO + m68kcontext.io_cycle_counter -= (adr - dst) * 2; +RET(12) +} + +// MOVEMaR +OPCODE(0x4CE8) +{ + u32 adr, res; + u32 src, dst; + + u32 *psrc; + + FETCH_WORD(res); + FETCH_SWORD(adr); + adr += AREG((Opcode >> 0) & 7); + psrc = &DREGu32(0); + dst = adr; + PRE_IO + do + { + if (res & 1) + { + READ_LONG_F(adr, *psrc) + adr += 4; + } + psrc++; + } while (res >>= 1); + POST_IO + m68kcontext.io_cycle_counter -= (adr - dst) * 2; +#ifdef USE_CYCLONE_TIMING +RET(16) +#else +RET(28) +#endif +} + +// MOVEMaR +OPCODE(0x4CF0) +{ + u32 adr, res; + u32 src, dst; + + u32 *psrc; + + FETCH_WORD(res); + adr = AREG((Opcode >> 0) & 7); + DECODE_EXT_WORD + psrc = &DREGu32(0); + dst = adr; + PRE_IO + do + { + if (res & 1) + { + READ_LONG_F(adr, *psrc) + adr += 4; + } + psrc++; + } while (res >>= 1); + POST_IO + m68kcontext.io_cycle_counter -= (adr - dst) * 2; +#ifdef USE_CYCLONE_TIMING +RET(18) +#else +RET(32) +#endif +} + +// MOVEMaR +OPCODE(0x4CF8) +{ + u32 adr, res; + u32 src, dst; + + u32 *psrc; + + FETCH_WORD(res); + FETCH_SWORD(adr); + psrc = &DREGu32(0); + dst = adr; + PRE_IO + do + { + if (res & 1) + { + READ_LONG_F(adr, *psrc) + adr += 4; + } + psrc++; + } while (res >>= 1); + POST_IO + m68kcontext.io_cycle_counter -= (adr - dst) * 2; +#ifdef USE_CYCLONE_TIMING +RET(16) +#else +RET(28) +#endif +} + +// MOVEMaR +OPCODE(0x4CF9) +{ + u32 adr, res; + u32 src, dst; + + u32 *psrc; + + FETCH_WORD(res); + FETCH_LONG(adr); + psrc = &DREGu32(0); + dst = adr; + PRE_IO + do + { + if (res & 1) + { + READ_LONG_F(adr, *psrc) + adr += 4; + } + psrc++; + } while (res >>= 1); + POST_IO + m68kcontext.io_cycle_counter -= (adr - dst) * 2; +#ifdef USE_CYCLONE_TIMING +RET(20) +#else +RET(36) +#endif +} + +// MOVEMaR +OPCODE(0x4CFA) +{ + u32 adr, res; + u32 src, dst; + + u32 *psrc; + + FETCH_WORD(res); + adr = GET_SWORD + ((u32)(PC) - BasePC); + PC++; + psrc = &DREGu32(0); + dst = adr; + PRE_IO + do + { + if (res & 1) + { + READ_LONG_F(adr, *psrc) + adr += 4; + } + psrc++; + } while (res >>= 1); + POST_IO + m68kcontext.io_cycle_counter -= (adr - dst) * 2; +#ifdef USE_CYCLONE_TIMING +RET(16) +#else +RET(28) +#endif +} + +// MOVEMaR +OPCODE(0x4CFB) +{ + u32 adr, res; + u32 src, dst; + + u32 *psrc; + + FETCH_WORD(res); + adr = (u32)(PC) - BasePC; + DECODE_EXT_WORD + psrc = &DREGu32(0); + dst = adr; + PRE_IO + do + { + if (res & 1) + { + READ_LONG_F(adr, *psrc) + adr += 4; + } + psrc++; + } while (res >>= 1); + POST_IO + m68kcontext.io_cycle_counter -= (adr - dst) * 2; +#ifdef USE_CYCLONE_TIMING +RET(18) +#else +RET(32) +#endif +} + +// MOVEMaR +OPCODE(0x4CDF) +{ + u32 adr, res; + u32 src, dst; + + u32 *psrc; + + FETCH_WORD(res); + adr = AREG(7); + psrc = &DREGu32(0); + dst = adr; + PRE_IO + do + { + if (res & 1) + { + READ_LONG_F(adr, *psrc) + adr += 4; + } + psrc++; + } while (res >>= 1); + AREG(7) = adr; + POST_IO + m68kcontext.io_cycle_counter -= (adr - dst) * 2; +RET(12) +} + +// TRAP +OPCODE(0x4E40) +{ + execute_exception(M68K_TRAP_BASE_EX + (Opcode & 0xF)); +RET(4) +} + +// LINK +OPCODE(0x4E50) +{ + u32 adr, res; + u32 src, dst; + + res = AREGu32((Opcode >> 0) & 7); + PRE_IO + PUSH_32_F(res) + res = AREG(7); + AREG((Opcode >> 0) & 7) = res; + FETCH_SWORD(res); + AREG(7) += res; + POST_IO +RET(16) +} + +// LINKA7 +OPCODE(0x4E57) +{ + u32 adr, res; + u32 src, dst; + + AREG(7) -= 4; + PRE_IO + WRITE_LONG_DEC_F(AREG(7), AREG(7)) + FETCH_SWORD(res); + AREG(7) += res; + POST_IO +RET(16) +} + +// ULNK +OPCODE(0x4E58) +{ + u32 adr, res; + u32 src, dst; + + src = AREGu32((Opcode >> 0) & 7); + AREG(7) = src + 4; + PRE_IO + READ_LONG_F(src, res) + AREG((Opcode >> 0) & 7) = res; + POST_IO +RET(12) +} + +// ULNKA7 +OPCODE(0x4E5F) +{ + u32 adr, res; + u32 src, dst; + + PRE_IO + READ_LONG_F(AREG(7), AREG(7)) + POST_IO +RET(12) +} + +// MOVEAUSP +OPCODE(0x4E60) +{ + u32 adr, res; + u32 src, dst; + + if (!flag_S) + { + u32 oldPC=GET_PC; + SET_PC(oldPC-2) + execute_exception(M68K_PRIVILEGE_VIOLATION_EX); + RET(4) + } + res = AREGu32((Opcode >> 0) & 7); + ASP = res; +RET(4) +} + +// MOVEUSPA +OPCODE(0x4E68) +{ + u32 adr, res; + u32 src, dst; + + if (!flag_S) + { + u32 oldPC=GET_PC; + SET_PC(oldPC-2) + execute_exception(M68K_PRIVILEGE_VIOLATION_EX); + RET(4) + } + res = ASP; + AREG((Opcode >> 0) & 7) = res; +RET(4) +} + +// RESET +OPCODE(0x4E70) +{ + u32 adr, res; + u32 src, dst; + + if (!flag_S) + { + u32 oldPC=GET_PC; + SET_PC(oldPC-2) + execute_exception(M68K_PRIVILEGE_VIOLATION_EX); + RET(4) + } + PRE_IO + if (m68kcontext.reset_handler) m68kcontext.reset_handler(); +// CPU->Reset_CallBack(); + POST_IO +RET(132) +} + +// NOP +OPCODE(0x4E71) +{ +RET(4) +} + +// STOP +OPCODE(0x4E72) +{ + u32 adr, res; + u32 src, dst; + + if (!flag_S) + { + u32 oldPC=GET_PC; + SET_PC(oldPC-2) + execute_exception(M68K_PRIVILEGE_VIOLATION_EX); + RET(4) + } + FETCH_WORD(res); + res &= M68K_SR_MASK; + SET_SR(res) + if (!flag_S) + { + res = AREG(7); + AREG(7) = ASP; + ASP = res; + } + m68kcontext.execinfo |= M68K_HALTED; + m68kcontext.io_cycle_counter = 0; +RET(4) +} + +// RTE +OPCODE(0x4E73) +{ + u32 adr, res; + u32 src, dst; + + if (!flag_S) + { + u32 oldPC=GET_PC; + SET_PC(oldPC-2) + execute_exception(M68K_PRIVILEGE_VIOLATION_EX); + RET(4) + } + PRE_IO + POP_16_F(res) + SET_SR(res) + POP_32_F(res) + SET_PC(res) + if (!flag_S) + { + res = AREG(7); + AREG(7) = ASP; + ASP = res; + } + POST_IO + m68kcontext.execinfo &= ~(M68K_EMULATE_GROUP_0|M68K_EMULATE_TRACE|M68K_DO_TRACE); + CHECK_INT_TO_JUMP(20) +RET(20) +} + +// RTS +OPCODE(0x4E75) +{ + u32 adr, res; + u32 src, dst; + + PRE_IO + POP_32_F(res) + SET_PC(res) + CHECK_BRANCH_EXCEPTION(res) + POST_IO +RET(16) +} + +// TRAPV +OPCODE(0x4E76) +{ + if (flag_V & 0x80) + execute_exception(M68K_TRAPV_EX); +RET(4) +} + +// RTR +OPCODE(0x4E77) +{ + u32 adr, res; + u32 src, dst; + + PRE_IO + POP_16_F(res) + SET_CCR(res) + POP_32_F(res) + SET_PC(res) + CHECK_BRANCH_EXCEPTION(res) + POST_IO +RET(20) +} + +// JSR +OPCODE(0x4E90) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + { + u32 oldPC; + + oldPC = (u32)(PC) - BasePC; + PRE_IO + PUSH_32_F(oldPC) + } + SET_PC(adr) + CHECK_BRANCH_EXCEPTION(adr) + POST_IO +RET(16) +} + +// JSR +OPCODE(0x4EA8) +{ + u32 adr, res; + u32 src, dst; + + FETCH_SWORD(adr); + adr += AREG((Opcode >> 0) & 7); + { + u32 oldPC; + + oldPC = (u32)(PC) - BasePC; + PRE_IO + PUSH_32_F(oldPC) + } + SET_PC(adr) + CHECK_BRANCH_EXCEPTION(adr) + POST_IO +RET(18) +} + +// JSR +OPCODE(0x4EB0) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + DECODE_EXT_WORD + { + u32 oldPC; + + oldPC = (u32)(PC) - BasePC; + PRE_IO + PUSH_32_F(oldPC) + } + SET_PC(adr) + CHECK_BRANCH_EXCEPTION(adr) + POST_IO +RET(22) +} + +// JSR +OPCODE(0x4EB8) +{ + u32 adr, res; + u32 src, dst; + + FETCH_SWORD(adr); + { + u32 oldPC; + + oldPC = (u32)(PC) - BasePC; + PRE_IO + PUSH_32_F(oldPC) + } + SET_PC(adr) + CHECK_BRANCH_EXCEPTION(adr) + POST_IO +RET(18) +} + +// JSR +OPCODE(0x4EB9) +{ + u32 adr, res; + u32 src, dst; + + FETCH_LONG(adr); + { + u32 oldPC; + + oldPC = (u32)(PC) - BasePC; + PRE_IO + PUSH_32_F(oldPC) + } + SET_PC(adr) + CHECK_BRANCH_EXCEPTION(adr) + POST_IO +RET(20) +} + +// JSR +OPCODE(0x4EBA) +{ + u32 adr, res; + u32 src, dst; + + adr = GET_SWORD + ((u32)(PC) - BasePC); + PC++; + { + u32 oldPC; + + oldPC = (u32)(PC) - BasePC; + PRE_IO + PUSH_32_F(oldPC) + } + SET_PC(adr) + CHECK_BRANCH_EXCEPTION(adr) + POST_IO +RET(18) +} + +// JSR +OPCODE(0x4EBB) +{ + u32 adr, res; + u32 src, dst; + + adr = (u32)(PC) - BasePC; + DECODE_EXT_WORD + { + u32 oldPC; + + oldPC = (u32)(PC) - BasePC; + PRE_IO + PUSH_32_F(oldPC) + } + SET_PC(adr) + CHECK_BRANCH_EXCEPTION(adr) + POST_IO +RET(22) +} + +// JMP +OPCODE(0x4ED0) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + SET_PC(adr) + CHECK_BRANCH_EXCEPTION(adr) +RET(8) +} + +// JMP +OPCODE(0x4EE8) +{ + u32 adr, res; + u32 src, dst; + + FETCH_SWORD(adr); + adr += AREG((Opcode >> 0) & 7); + SET_PC(adr) + CHECK_BRANCH_EXCEPTION(adr) +RET(10) +} + +// JMP +OPCODE(0x4EF0) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + DECODE_EXT_WORD + SET_PC(adr) + CHECK_BRANCH_EXCEPTION(adr) +RET(14) +} + +// JMP +OPCODE(0x4EF8) +{ + u32 adr, res; + u32 src, dst; + + FETCH_SWORD(adr); + SET_PC(adr) + CHECK_BRANCH_EXCEPTION(adr) +RET(10) +} + +// JMP +OPCODE(0x4EF9) +{ + u32 adr, res; + u32 src, dst; + + FETCH_LONG(adr); + SET_PC(adr) + CHECK_BRANCH_EXCEPTION(adr) +RET(12) +} + +// JMP +OPCODE(0x4EFA) +{ + u32 adr, res; + u32 src, dst; + + adr = GET_SWORD + ((u32)(PC) - BasePC); + PC++; + SET_PC(adr) + CHECK_BRANCH_EXCEPTION(adr) +RET(10) +} + +// JMP +OPCODE(0x4EFB) +{ + u32 adr, res; + u32 src, dst; + + adr = (u32)(PC) - BasePC; + DECODE_EXT_WORD + SET_PC(adr) + CHECK_BRANCH_EXCEPTION(adr) +RET(14) +} + +// CHK +OPCODE(0x4180) +{ + u32 adr, res; + u32 src, dst; + + src = DREGu16((Opcode >> 0) & 7); + res = DREGu16((Opcode >> 9) & 7); + if (((s32)res < 0) || (res > src)) + { + flag_N = res >> 8; + execute_exception(M68K_CHK_EX); + } +RET(10) +} + +// CHK +OPCODE(0x4190) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + PRE_IO + READ_WORD_F(adr, src) + res = DREGu16((Opcode >> 9) & 7); + if (((s32)res < 0) || (res > src)) + { + flag_N = res >> 8; + execute_exception(M68K_CHK_EX); + } + POST_IO +RET(14) +} + +// CHK +OPCODE(0x4198) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + AREG((Opcode >> 0) & 7) += 2; + PRE_IO + READ_WORD_F(adr, src) + res = DREGu16((Opcode >> 9) & 7); + if (((s32)res < 0) || (res > src)) + { + flag_N = res >> 8; + execute_exception(M68K_CHK_EX); + } + POST_IO +RET(14) +} + +// CHK +OPCODE(0x41A0) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7) - 2; + AREG((Opcode >> 0) & 7) = adr; + PRE_IO + READ_WORD_F(adr, src) + res = DREGu16((Opcode >> 9) & 7); + if (((s32)res < 0) || (res > src)) + { + flag_N = res >> 8; + execute_exception(M68K_CHK_EX); + } + POST_IO +RET(16) +} + +// CHK +OPCODE(0x41A8) +{ + u32 adr, res; + u32 src, dst; + + FETCH_SWORD(adr); + adr += AREG((Opcode >> 0) & 7); + PRE_IO + READ_WORD_F(adr, src) + res = DREGu16((Opcode >> 9) & 7); + if (((s32)res < 0) || (res > src)) + { + flag_N = res >> 8; + execute_exception(M68K_CHK_EX); + } + POST_IO +RET(18) +} + +// CHK +OPCODE(0x41B0) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + DECODE_EXT_WORD + PRE_IO + READ_WORD_F(adr, src) + res = DREGu16((Opcode >> 9) & 7); + if (((s32)res < 0) || (res > src)) + { + flag_N = res >> 8; + execute_exception(M68K_CHK_EX); + } + POST_IO +RET(20) +} + +// CHK +OPCODE(0x41B8) +{ + u32 adr, res; + u32 src, dst; + + FETCH_SWORD(adr); + PRE_IO + READ_WORD_F(adr, src) + res = DREGu16((Opcode >> 9) & 7); + if (((s32)res < 0) || (res > src)) + { + flag_N = res >> 8; + execute_exception(M68K_CHK_EX); + } + POST_IO +RET(18) +} + +// CHK +OPCODE(0x41B9) +{ + u32 adr, res; + u32 src, dst; + + FETCH_LONG(adr); + PRE_IO + READ_WORD_F(adr, src) + res = DREGu16((Opcode >> 9) & 7); + if (((s32)res < 0) || (res > src)) + { + flag_N = res >> 8; + execute_exception(M68K_CHK_EX); + } + POST_IO +RET(22) +} + +// CHK +OPCODE(0x41BA) +{ + u32 adr, res; + u32 src, dst; + + adr = GET_SWORD + ((u32)(PC) - BasePC); + PC++; + PRE_IO + READ_WORD_F(adr, src) + res = DREGu16((Opcode >> 9) & 7); + if (((s32)res < 0) || (res > src)) + { + flag_N = res >> 8; + execute_exception(M68K_CHK_EX); + } + POST_IO +RET(18) +} + +// CHK +OPCODE(0x41BB) +{ + u32 adr, res; + u32 src, dst; + + adr = (u32)(PC) - BasePC; + DECODE_EXT_WORD + PRE_IO + READ_WORD_F(adr, src) + res = DREGu16((Opcode >> 9) & 7); + if (((s32)res < 0) || (res > src)) + { + flag_N = res >> 8; + execute_exception(M68K_CHK_EX); + } + POST_IO +RET(20) +} + +// CHK +OPCODE(0x41BC) +{ + u32 adr, res; + u32 src, dst; + + FETCH_WORD(src); + res = DREGu16((Opcode >> 9) & 7); + if (((s32)res < 0) || (res > src)) + { + flag_N = res >> 8; + execute_exception(M68K_CHK_EX); + } + POST_IO +RET(14) +} + +// CHK +OPCODE(0x419F) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7); + AREG(7) += 2; + PRE_IO + READ_WORD_F(adr, src) + res = DREGu16((Opcode >> 9) & 7); + if (((s32)res < 0) || (res > src)) + { + flag_N = res >> 8; + execute_exception(M68K_CHK_EX); + } + POST_IO +RET(14) +} + +// CHK +OPCODE(0x41A7) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7) - 2; + AREG(7) = adr; + PRE_IO + READ_WORD_F(adr, src) + res = DREGu16((Opcode >> 9) & 7); + if (((s32)res < 0) || (res > src)) + { + flag_N = res >> 8; + execute_exception(M68K_CHK_EX); + } + POST_IO +RET(16) +} + +// LEA +OPCODE(0x41D0) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + res = adr; + AREG((Opcode >> 9) & 7) = res; +RET(4) +} + +// LEA +OPCODE(0x41E8) +{ + u32 adr, res; + u32 src, dst; + + FETCH_SWORD(adr); + adr += AREG((Opcode >> 0) & 7); + res = adr; + AREG((Opcode >> 9) & 7) = res; +RET(8) +} + +// LEA +OPCODE(0x41F0) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + DECODE_EXT_WORD + res = adr; + AREG((Opcode >> 9) & 7) = res; +RET(12) +} + +// LEA +OPCODE(0x41F8) +{ + u32 adr, res; + u32 src, dst; + + FETCH_SWORD(adr); + res = adr; + AREG((Opcode >> 9) & 7) = res; +RET(8) +} + +// LEA +OPCODE(0x41F9) +{ + u32 adr, res; + u32 src, dst; + + FETCH_LONG(adr); + res = adr; + AREG((Opcode >> 9) & 7) = res; +RET(12) +} + +// LEA +OPCODE(0x41FA) +{ + u32 adr, res; + u32 src, dst; + + adr = GET_SWORD + ((u32)(PC) - BasePC); + PC++; + res = adr; + AREG((Opcode >> 9) & 7) = res; +RET(8) +} + +// LEA +OPCODE(0x41FB) +{ + u32 adr, res; + u32 src, dst; + + adr = (u32)(PC) - BasePC; + DECODE_EXT_WORD + res = adr; + AREG((Opcode >> 9) & 7) = res; +RET(12) +} + +// STCC +OPCODE(0x50C0) +{ + u32 adr, res; + u32 src, dst; + + res = 0xFF; + DREGu8((Opcode >> 0) & 7) = res; + RET(6) +} + +// STCC +OPCODE(0x51C0) +{ + u32 adr, res; + u32 src, dst; + + res = 0; + DREGu8((Opcode >> 0) & 7) = res; + RET(4) +} + +// STCC +OPCODE(0x52C0) +{ + u32 adr, res; + u32 src, dst; + + if (flag_NotZ && (!(flag_C & 0x100))) + { + res = 0xFF; + DREGu8((Opcode >> 0) & 7) = res; + RET(6) + } + res = 0; + DREGu8((Opcode >> 0) & 7) = res; + RET(4) +} + +// STCC +OPCODE(0x53C0) +{ + u32 adr, res; + u32 src, dst; + + if ((!flag_NotZ) || (flag_C & 0x100)) + { + res = 0xFF; + DREGu8((Opcode >> 0) & 7) = res; + RET(6) + } + res = 0; + DREGu8((Opcode >> 0) & 7) = res; + RET(4) +} + +// STCC +OPCODE(0x54C0) +{ + u32 adr, res; + u32 src, dst; + + if (!(flag_C & 0x100)) + { + res = 0xFF; + DREGu8((Opcode >> 0) & 7) = res; + RET(6) + } + res = 0; + DREGu8((Opcode >> 0) & 7) = res; + RET(4) +} + +// STCC +OPCODE(0x55C0) +{ + u32 adr, res; + u32 src, dst; + + if (flag_C & 0x100) + { + res = 0xFF; + DREGu8((Opcode >> 0) & 7) = res; + RET(6) + } + res = 0; + DREGu8((Opcode >> 0) & 7) = res; + RET(4) +} + +// STCC +OPCODE(0x56C0) +{ + u32 adr, res; + u32 src, dst; + + if (flag_NotZ) + { + res = 0xFF; + DREGu8((Opcode >> 0) & 7) = res; + RET(6) + } + res = 0; + DREGu8((Opcode >> 0) & 7) = res; + RET(4) +} + +// STCC +OPCODE(0x57C0) +{ + u32 adr, res; + u32 src, dst; + + if (!flag_NotZ) + { + res = 0xFF; + DREGu8((Opcode >> 0) & 7) = res; + RET(6) + } + res = 0; + DREGu8((Opcode >> 0) & 7) = res; + RET(4) +} + +// STCC +OPCODE(0x58C0) +{ + u32 adr, res; + u32 src, dst; + + if (!(flag_V & 0x80)) + { + res = 0xFF; + DREGu8((Opcode >> 0) & 7) = res; + RET(6) + } + res = 0; + DREGu8((Opcode >> 0) & 7) = res; + RET(4) +} + +// STCC +OPCODE(0x59C0) +{ + u32 adr, res; + u32 src, dst; + + if (flag_V & 0x80) + { + res = 0xFF; + DREGu8((Opcode >> 0) & 7) = res; + RET(6) + } + res = 0; + DREGu8((Opcode >> 0) & 7) = res; + RET(4) +} + +// STCC +OPCODE(0x5AC0) +{ + u32 adr, res; + u32 src, dst; + + if (!(flag_N & 0x80)) + { + res = 0xFF; + DREGu8((Opcode >> 0) & 7) = res; + RET(6) + } + res = 0; + DREGu8((Opcode >> 0) & 7) = res; + RET(4) +} + +// STCC +OPCODE(0x5BC0) +{ + u32 adr, res; + u32 src, dst; + + if (flag_N & 0x80) + { + res = 0xFF; + DREGu8((Opcode >> 0) & 7) = res; + RET(6) + } + res = 0; + DREGu8((Opcode >> 0) & 7) = res; + RET(4) +} + +// STCC +OPCODE(0x5CC0) +{ + u32 adr, res; + u32 src, dst; + + if (!((flag_N ^ flag_V) & 0x80)) + { + res = 0xFF; + DREGu8((Opcode >> 0) & 7) = res; + RET(6) + } + res = 0; + DREGu8((Opcode >> 0) & 7) = res; + RET(4) +} + +// STCC +OPCODE(0x5DC0) +{ + u32 adr, res; + u32 src, dst; + + if ((flag_N ^ flag_V) & 0x80) + { + res = 0xFF; + DREGu8((Opcode >> 0) & 7) = res; + RET(6) + } + res = 0; + DREGu8((Opcode >> 0) & 7) = res; + RET(4) +} + +// STCC +OPCODE(0x5EC0) +{ + u32 adr, res; + u32 src, dst; + + if (flag_NotZ && (!((flag_N ^ flag_V) & 0x80))) + { + res = 0xFF; + DREGu8((Opcode >> 0) & 7) = res; + RET(6) + } + res = 0; + DREGu8((Opcode >> 0) & 7) = res; + RET(4) +} + +// STCC +OPCODE(0x5FC0) +{ + u32 adr, res; + u32 src, dst; + + if ((!flag_NotZ) || ((flag_N ^ flag_V) & 0x80)) + { + res = 0xFF; + DREGu8((Opcode >> 0) & 7) = res; + RET(6) + } + res = 0; + DREGu8((Opcode >> 0) & 7) = res; + RET(4) +} + +// STCC +OPCODE(0x50D0) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + res = 0xFF; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(12) +} + +// STCC +OPCODE(0x51D0) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + res = 0; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(12) +} + +// STCC +OPCODE(0x52D0) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + if (flag_NotZ && (!(flag_C & 0x100))) + { + res = 0xFF; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(12) + } + res = 0; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(12) +} + +// STCC +OPCODE(0x53D0) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + if ((!flag_NotZ) || (flag_C & 0x100)) + { + res = 0xFF; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(12) + } + res = 0; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(12) +} + +// STCC +OPCODE(0x54D0) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + if (!(flag_C & 0x100)) + { + res = 0xFF; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(12) + } + res = 0; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(12) +} + +// STCC +OPCODE(0x55D0) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + if (flag_C & 0x100) + { + res = 0xFF; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(12) + } + res = 0; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(12) +} + +// STCC +OPCODE(0x56D0) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + if (flag_NotZ) + { + res = 0xFF; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(12) + } + res = 0; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(12) +} + +// STCC +OPCODE(0x57D0) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + if (!flag_NotZ) + { + res = 0xFF; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(12) + } + res = 0; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(12) +} + +// STCC +OPCODE(0x58D0) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + if (!(flag_V & 0x80)) + { + res = 0xFF; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(12) + } + res = 0; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(12) +} + +// STCC +OPCODE(0x59D0) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + if (flag_V & 0x80) + { + res = 0xFF; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(12) + } + res = 0; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(12) +} + +// STCC +OPCODE(0x5AD0) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + if (!(flag_N & 0x80)) + { + res = 0xFF; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(12) + } + res = 0; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(12) +} + +// STCC +OPCODE(0x5BD0) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + if (flag_N & 0x80) + { + res = 0xFF; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(12) + } + res = 0; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(12) +} + +// STCC +OPCODE(0x5CD0) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + if (!((flag_N ^ flag_V) & 0x80)) + { + res = 0xFF; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(12) + } + res = 0; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(12) +} + +// STCC +OPCODE(0x5DD0) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + if ((flag_N ^ flag_V) & 0x80) + { + res = 0xFF; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(12) + } + res = 0; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(12) +} + +// STCC +OPCODE(0x5ED0) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + if (flag_NotZ && (!((flag_N ^ flag_V) & 0x80))) + { + res = 0xFF; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(12) + } + res = 0; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(12) +} + +// STCC +OPCODE(0x5FD0) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + if ((!flag_NotZ) || ((flag_N ^ flag_V) & 0x80)) + { + res = 0xFF; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(12) + } + res = 0; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(12) +} + +// STCC +OPCODE(0x50D8) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + AREG((Opcode >> 0) & 7) += 1; + res = 0xFF; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(12) +} + +// STCC +OPCODE(0x51D8) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + AREG((Opcode >> 0) & 7) += 1; + res = 0; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(12) +} + +// STCC +OPCODE(0x52D8) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + AREG((Opcode >> 0) & 7) += 1; + if (flag_NotZ && (!(flag_C & 0x100))) + { + res = 0xFF; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(12) + } + res = 0; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(12) +} + +// STCC +OPCODE(0x53D8) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + AREG((Opcode >> 0) & 7) += 1; + if ((!flag_NotZ) || (flag_C & 0x100)) + { + res = 0xFF; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(12) + } + res = 0; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(12) +} + +// STCC +OPCODE(0x54D8) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + AREG((Opcode >> 0) & 7) += 1; + if (!(flag_C & 0x100)) + { + res = 0xFF; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(12) + } + res = 0; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(12) +} + +// STCC +OPCODE(0x55D8) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + AREG((Opcode >> 0) & 7) += 1; + if (flag_C & 0x100) + { + res = 0xFF; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(12) + } + res = 0; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(12) +} + +// STCC +OPCODE(0x56D8) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + AREG((Opcode >> 0) & 7) += 1; + if (flag_NotZ) + { + res = 0xFF; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(12) + } + res = 0; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(12) +} + +// STCC +OPCODE(0x57D8) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + AREG((Opcode >> 0) & 7) += 1; + if (!flag_NotZ) + { + res = 0xFF; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(12) + } + res = 0; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(12) +} + +// STCC +OPCODE(0x58D8) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + AREG((Opcode >> 0) & 7) += 1; + if (!(flag_V & 0x80)) + { + res = 0xFF; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(12) + } + res = 0; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(12) +} + +// STCC +OPCODE(0x59D8) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + AREG((Opcode >> 0) & 7) += 1; + if (flag_V & 0x80) + { + res = 0xFF; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(12) + } + res = 0; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(12) +} + +// STCC +OPCODE(0x5AD8) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + AREG((Opcode >> 0) & 7) += 1; + if (!(flag_N & 0x80)) + { + res = 0xFF; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(12) + } + res = 0; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(12) +} + +// STCC +OPCODE(0x5BD8) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + AREG((Opcode >> 0) & 7) += 1; + if (flag_N & 0x80) + { + res = 0xFF; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(12) + } + res = 0; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(12) +} + +// STCC +OPCODE(0x5CD8) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + AREG((Opcode >> 0) & 7) += 1; + if (!((flag_N ^ flag_V) & 0x80)) + { + res = 0xFF; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(12) + } + res = 0; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(12) +} + +// STCC +OPCODE(0x5DD8) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + AREG((Opcode >> 0) & 7) += 1; + if ((flag_N ^ flag_V) & 0x80) + { + res = 0xFF; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(12) + } + res = 0; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(12) +} + +// STCC +OPCODE(0x5ED8) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + AREG((Opcode >> 0) & 7) += 1; + if (flag_NotZ && (!((flag_N ^ flag_V) & 0x80))) + { + res = 0xFF; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(12) + } + res = 0; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(12) +} + +// STCC +OPCODE(0x5FD8) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + AREG((Opcode >> 0) & 7) += 1; + if ((!flag_NotZ) || ((flag_N ^ flag_V) & 0x80)) + { + res = 0xFF; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(12) + } + res = 0; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(12) +} + +// STCC +OPCODE(0x50E0) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7) - 1; + AREG((Opcode >> 0) & 7) = adr; + res = 0xFF; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(14) +} + +// STCC +OPCODE(0x51E0) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7) - 1; + AREG((Opcode >> 0) & 7) = adr; + res = 0; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(14) +} + +// STCC +OPCODE(0x52E0) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7) - 1; + AREG((Opcode >> 0) & 7) = adr; + if (flag_NotZ && (!(flag_C & 0x100))) + { + res = 0xFF; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(14) + } + res = 0; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(14) +} + +// STCC +OPCODE(0x53E0) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7) - 1; + AREG((Opcode >> 0) & 7) = adr; + if ((!flag_NotZ) || (flag_C & 0x100)) + { + res = 0xFF; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(14) + } + res = 0; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(14) +} + +// STCC +OPCODE(0x54E0) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7) - 1; + AREG((Opcode >> 0) & 7) = adr; + if (!(flag_C & 0x100)) + { + res = 0xFF; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(14) + } + res = 0; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(14) +} + +// STCC +OPCODE(0x55E0) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7) - 1; + AREG((Opcode >> 0) & 7) = adr; + if (flag_C & 0x100) + { + res = 0xFF; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(14) + } + res = 0; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(14) +} + +// STCC +OPCODE(0x56E0) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7) - 1; + AREG((Opcode >> 0) & 7) = adr; + if (flag_NotZ) + { + res = 0xFF; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(14) + } + res = 0; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(14) +} + +// STCC +OPCODE(0x57E0) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7) - 1; + AREG((Opcode >> 0) & 7) = adr; + if (!flag_NotZ) + { + res = 0xFF; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(14) + } + res = 0; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(14) +} + +// STCC +OPCODE(0x58E0) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7) - 1; + AREG((Opcode >> 0) & 7) = adr; + if (!(flag_V & 0x80)) + { + res = 0xFF; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(14) + } + res = 0; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(14) +} + +// STCC +OPCODE(0x59E0) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7) - 1; + AREG((Opcode >> 0) & 7) = adr; + if (flag_V & 0x80) + { + res = 0xFF; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(14) + } + res = 0; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(14) +} + +// STCC +OPCODE(0x5AE0) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7) - 1; + AREG((Opcode >> 0) & 7) = adr; + if (!(flag_N & 0x80)) + { + res = 0xFF; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(14) + } + res = 0; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(14) +} + +// STCC +OPCODE(0x5BE0) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7) - 1; + AREG((Opcode >> 0) & 7) = adr; + if (flag_N & 0x80) + { + res = 0xFF; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(14) + } + res = 0; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(14) +} + +// STCC +OPCODE(0x5CE0) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7) - 1; + AREG((Opcode >> 0) & 7) = adr; + if (!((flag_N ^ flag_V) & 0x80)) + { + res = 0xFF; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(14) + } + res = 0; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(14) +} + +// STCC +OPCODE(0x5DE0) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7) - 1; + AREG((Opcode >> 0) & 7) = adr; + if ((flag_N ^ flag_V) & 0x80) + { + res = 0xFF; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(14) + } + res = 0; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(14) +} + +// STCC +OPCODE(0x5EE0) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7) - 1; + AREG((Opcode >> 0) & 7) = adr; + if (flag_NotZ && (!((flag_N ^ flag_V) & 0x80))) + { + res = 0xFF; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(14) + } + res = 0; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(14) +} + +// STCC +OPCODE(0x5FE0) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7) - 1; + AREG((Opcode >> 0) & 7) = adr; + if ((!flag_NotZ) || ((flag_N ^ flag_V) & 0x80)) + { + res = 0xFF; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(14) + } + res = 0; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(14) +} + +// STCC +OPCODE(0x50E8) +{ + u32 adr, res; + u32 src, dst; + + FETCH_SWORD(adr); + adr += AREG((Opcode >> 0) & 7); + res = 0xFF; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(16) +} + +// STCC +OPCODE(0x51E8) +{ + u32 adr, res; + u32 src, dst; + + FETCH_SWORD(adr); + adr += AREG((Opcode >> 0) & 7); + res = 0; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(16) +} + +// STCC +OPCODE(0x52E8) +{ + u32 adr, res; + u32 src, dst; + + FETCH_SWORD(adr); + adr += AREG((Opcode >> 0) & 7); + if (flag_NotZ && (!(flag_C & 0x100))) + { + res = 0xFF; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(16) + } + res = 0; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(16) +} + +// STCC +OPCODE(0x53E8) +{ + u32 adr, res; + u32 src, dst; + + FETCH_SWORD(adr); + adr += AREG((Opcode >> 0) & 7); + if ((!flag_NotZ) || (flag_C & 0x100)) + { + res = 0xFF; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(16) + } + res = 0; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(16) +} + +// STCC +OPCODE(0x54E8) +{ + u32 adr, res; + u32 src, dst; + + FETCH_SWORD(adr); + adr += AREG((Opcode >> 0) & 7); + if (!(flag_C & 0x100)) + { + res = 0xFF; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(16) + } + res = 0; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(16) +} + +// STCC +OPCODE(0x55E8) +{ + u32 adr, res; + u32 src, dst; + + FETCH_SWORD(adr); + adr += AREG((Opcode >> 0) & 7); + if (flag_C & 0x100) + { + res = 0xFF; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(16) + } + res = 0; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(16) +} + +// STCC +OPCODE(0x56E8) +{ + u32 adr, res; + u32 src, dst; + + FETCH_SWORD(adr); + adr += AREG((Opcode >> 0) & 7); + if (flag_NotZ) + { + res = 0xFF; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(16) + } + res = 0; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(16) +} + +// STCC +OPCODE(0x57E8) +{ + u32 adr, res; + u32 src, dst; + + FETCH_SWORD(adr); + adr += AREG((Opcode >> 0) & 7); + if (!flag_NotZ) + { + res = 0xFF; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(16) + } + res = 0; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(16) +} + +// STCC +OPCODE(0x58E8) +{ + u32 adr, res; + u32 src, dst; + + FETCH_SWORD(adr); + adr += AREG((Opcode >> 0) & 7); + if (!(flag_V & 0x80)) + { + res = 0xFF; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(16) + } + res = 0; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(16) +} + +// STCC +OPCODE(0x59E8) +{ + u32 adr, res; + u32 src, dst; + + FETCH_SWORD(adr); + adr += AREG((Opcode >> 0) & 7); + if (flag_V & 0x80) + { + res = 0xFF; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(16) + } + res = 0; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(16) +} + +// STCC +OPCODE(0x5AE8) +{ + u32 adr, res; + u32 src, dst; + + FETCH_SWORD(adr); + adr += AREG((Opcode >> 0) & 7); + if (!(flag_N & 0x80)) + { + res = 0xFF; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(16) + } + res = 0; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(16) +} + +// STCC +OPCODE(0x5BE8) +{ + u32 adr, res; + u32 src, dst; + + FETCH_SWORD(adr); + adr += AREG((Opcode >> 0) & 7); + if (flag_N & 0x80) + { + res = 0xFF; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(16) + } + res = 0; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(16) +} + +// STCC +OPCODE(0x5CE8) +{ + u32 adr, res; + u32 src, dst; + + FETCH_SWORD(adr); + adr += AREG((Opcode >> 0) & 7); + if (!((flag_N ^ flag_V) & 0x80)) + { + res = 0xFF; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(16) + } + res = 0; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(16) +} + +// STCC +OPCODE(0x5DE8) +{ + u32 adr, res; + u32 src, dst; + + FETCH_SWORD(adr); + adr += AREG((Opcode >> 0) & 7); + if ((flag_N ^ flag_V) & 0x80) + { + res = 0xFF; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(16) + } + res = 0; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(16) +} + +// STCC +OPCODE(0x5EE8) +{ + u32 adr, res; + u32 src, dst; + + FETCH_SWORD(adr); + adr += AREG((Opcode >> 0) & 7); + if (flag_NotZ && (!((flag_N ^ flag_V) & 0x80))) + { + res = 0xFF; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(16) + } + res = 0; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(16) +} + +// STCC +OPCODE(0x5FE8) +{ + u32 adr, res; + u32 src, dst; + + FETCH_SWORD(adr); + adr += AREG((Opcode >> 0) & 7); + if ((!flag_NotZ) || ((flag_N ^ flag_V) & 0x80)) + { + res = 0xFF; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(16) + } + res = 0; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(16) +} + +// STCC +OPCODE(0x50F0) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + DECODE_EXT_WORD + res = 0xFF; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(18) +} + +// STCC +OPCODE(0x51F0) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + DECODE_EXT_WORD + res = 0; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(18) +} + +// STCC +OPCODE(0x52F0) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + DECODE_EXT_WORD + if (flag_NotZ && (!(flag_C & 0x100))) + { + res = 0xFF; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(18) + } + res = 0; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(18) +} + +// STCC +OPCODE(0x53F0) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + DECODE_EXT_WORD + if ((!flag_NotZ) || (flag_C & 0x100)) + { + res = 0xFF; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(18) + } + res = 0; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(18) +} + +// STCC +OPCODE(0x54F0) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + DECODE_EXT_WORD + if (!(flag_C & 0x100)) + { + res = 0xFF; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(18) + } + res = 0; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(18) +} + +// STCC +OPCODE(0x55F0) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + DECODE_EXT_WORD + if (flag_C & 0x100) + { + res = 0xFF; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(18) + } + res = 0; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(18) +} + +// STCC +OPCODE(0x56F0) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + DECODE_EXT_WORD + if (flag_NotZ) + { + res = 0xFF; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(18) + } + res = 0; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(18) +} + +// STCC +OPCODE(0x57F0) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + DECODE_EXT_WORD + if (!flag_NotZ) + { + res = 0xFF; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(18) + } + res = 0; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(18) +} + +// STCC +OPCODE(0x58F0) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + DECODE_EXT_WORD + if (!(flag_V & 0x80)) + { + res = 0xFF; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(18) + } + res = 0; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(18) +} + +// STCC +OPCODE(0x59F0) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + DECODE_EXT_WORD + if (flag_V & 0x80) + { + res = 0xFF; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(18) + } + res = 0; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(18) +} + +// STCC +OPCODE(0x5AF0) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + DECODE_EXT_WORD + if (!(flag_N & 0x80)) + { + res = 0xFF; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(18) + } + res = 0; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(18) +} + +// STCC +OPCODE(0x5BF0) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + DECODE_EXT_WORD + if (flag_N & 0x80) + { + res = 0xFF; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(18) + } + res = 0; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(18) +} + +// STCC +OPCODE(0x5CF0) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + DECODE_EXT_WORD + if (!((flag_N ^ flag_V) & 0x80)) + { + res = 0xFF; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(18) + } + res = 0; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(18) +} + +// STCC +OPCODE(0x5DF0) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + DECODE_EXT_WORD + if ((flag_N ^ flag_V) & 0x80) + { + res = 0xFF; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(18) + } + res = 0; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(18) +} + +// STCC +OPCODE(0x5EF0) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + DECODE_EXT_WORD + if (flag_NotZ && (!((flag_N ^ flag_V) & 0x80))) + { + res = 0xFF; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(18) + } + res = 0; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(18) +} + +// STCC +OPCODE(0x5FF0) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + DECODE_EXT_WORD + if ((!flag_NotZ) || ((flag_N ^ flag_V) & 0x80)) + { + res = 0xFF; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(18) + } + res = 0; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(18) +} + +// STCC +OPCODE(0x50F8) +{ + u32 adr, res; + u32 src, dst; + + FETCH_SWORD(adr); + res = 0xFF; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(16) +} + +// STCC +OPCODE(0x51F8) +{ + u32 adr, res; + u32 src, dst; + + FETCH_SWORD(adr); + res = 0; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(16) +} + +// STCC +OPCODE(0x52F8) +{ + u32 adr, res; + u32 src, dst; + + FETCH_SWORD(adr); + if (flag_NotZ && (!(flag_C & 0x100))) + { + res = 0xFF; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(16) + } + res = 0; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(16) +} + +// STCC +OPCODE(0x53F8) +{ + u32 adr, res; + u32 src, dst; + + FETCH_SWORD(adr); + if ((!flag_NotZ) || (flag_C & 0x100)) + { + res = 0xFF; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(16) + } + res = 0; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(16) +} + +// STCC +OPCODE(0x54F8) +{ + u32 adr, res; + u32 src, dst; + + FETCH_SWORD(adr); + if (!(flag_C & 0x100)) + { + res = 0xFF; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(16) + } + res = 0; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(16) +} + +// STCC +OPCODE(0x55F8) +{ + u32 adr, res; + u32 src, dst; + + FETCH_SWORD(adr); + if (flag_C & 0x100) + { + res = 0xFF; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(16) + } + res = 0; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(16) +} + +// STCC +OPCODE(0x56F8) +{ + u32 adr, res; + u32 src, dst; + + FETCH_SWORD(adr); + if (flag_NotZ) + { + res = 0xFF; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(16) + } + res = 0; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(16) +} + +// STCC +OPCODE(0x57F8) +{ + u32 adr, res; + u32 src, dst; + + FETCH_SWORD(adr); + if (!flag_NotZ) + { + res = 0xFF; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(16) + } + res = 0; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(16) +} + +// STCC +OPCODE(0x58F8) +{ + u32 adr, res; + u32 src, dst; + + FETCH_SWORD(adr); + if (!(flag_V & 0x80)) + { + res = 0xFF; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(16) + } + res = 0; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(16) +} + +// STCC +OPCODE(0x59F8) +{ + u32 adr, res; + u32 src, dst; + + FETCH_SWORD(adr); + if (flag_V & 0x80) + { + res = 0xFF; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(16) + } + res = 0; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(16) +} + +// STCC +OPCODE(0x5AF8) +{ + u32 adr, res; + u32 src, dst; + + FETCH_SWORD(adr); + if (!(flag_N & 0x80)) + { + res = 0xFF; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(16) + } + res = 0; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(16) +} + +// STCC +OPCODE(0x5BF8) +{ + u32 adr, res; + u32 src, dst; + + FETCH_SWORD(adr); + if (flag_N & 0x80) + { + res = 0xFF; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(16) + } + res = 0; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(16) +} + +// STCC +OPCODE(0x5CF8) +{ + u32 adr, res; + u32 src, dst; + + FETCH_SWORD(adr); + if (!((flag_N ^ flag_V) & 0x80)) + { + res = 0xFF; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(16) + } + res = 0; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(16) +} + +// STCC +OPCODE(0x5DF8) +{ + u32 adr, res; + u32 src, dst; + + FETCH_SWORD(adr); + if ((flag_N ^ flag_V) & 0x80) + { + res = 0xFF; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(16) + } + res = 0; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(16) +} + +// STCC +OPCODE(0x5EF8) +{ + u32 adr, res; + u32 src, dst; + + FETCH_SWORD(adr); + if (flag_NotZ && (!((flag_N ^ flag_V) & 0x80))) + { + res = 0xFF; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(16) + } + res = 0; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(16) +} + +// STCC +OPCODE(0x5FF8) +{ + u32 adr, res; + u32 src, dst; + + FETCH_SWORD(adr); + if ((!flag_NotZ) || ((flag_N ^ flag_V) & 0x80)) + { + res = 0xFF; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(16) + } + res = 0; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(16) +} + +// STCC +OPCODE(0x50F9) +{ + u32 adr, res; + u32 src, dst; + + FETCH_LONG(adr); + res = 0xFF; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(20) +} + +// STCC +OPCODE(0x51F9) +{ + u32 adr, res; + u32 src, dst; + + FETCH_LONG(adr); + res = 0; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(20) +} + +// STCC +OPCODE(0x52F9) +{ + u32 adr, res; + u32 src, dst; + + FETCH_LONG(adr); + if (flag_NotZ && (!(flag_C & 0x100))) + { + res = 0xFF; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(20) + } + res = 0; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(20) +} + +// STCC +OPCODE(0x53F9) +{ + u32 adr, res; + u32 src, dst; + + FETCH_LONG(adr); + if ((!flag_NotZ) || (flag_C & 0x100)) + { + res = 0xFF; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(20) + } + res = 0; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(20) +} + +// STCC +OPCODE(0x54F9) +{ + u32 adr, res; + u32 src, dst; + + FETCH_LONG(adr); + if (!(flag_C & 0x100)) + { + res = 0xFF; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(20) + } + res = 0; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(20) +} + +// STCC +OPCODE(0x55F9) +{ + u32 adr, res; + u32 src, dst; + + FETCH_LONG(adr); + if (flag_C & 0x100) + { + res = 0xFF; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(20) + } + res = 0; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(20) +} + +// STCC +OPCODE(0x56F9) +{ + u32 adr, res; + u32 src, dst; + + FETCH_LONG(adr); + if (flag_NotZ) + { + res = 0xFF; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(20) + } + res = 0; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(20) +} + +// STCC +OPCODE(0x57F9) +{ + u32 adr, res; + u32 src, dst; + + FETCH_LONG(adr); + if (!flag_NotZ) + { + res = 0xFF; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(20) + } + res = 0; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(20) +} + +// STCC +OPCODE(0x58F9) +{ + u32 adr, res; + u32 src, dst; + + FETCH_LONG(adr); + if (!(flag_V & 0x80)) + { + res = 0xFF; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(20) + } + res = 0; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(20) +} + +// STCC +OPCODE(0x59F9) +{ + u32 adr, res; + u32 src, dst; + + FETCH_LONG(adr); + if (flag_V & 0x80) + { + res = 0xFF; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(20) + } + res = 0; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(20) +} + +// STCC +OPCODE(0x5AF9) +{ + u32 adr, res; + u32 src, dst; + + FETCH_LONG(adr); + if (!(flag_N & 0x80)) + { + res = 0xFF; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(20) + } + res = 0; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(20) +} + +// STCC +OPCODE(0x5BF9) +{ + u32 adr, res; + u32 src, dst; + + FETCH_LONG(adr); + if (flag_N & 0x80) + { + res = 0xFF; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(20) + } + res = 0; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(20) +} + +// STCC +OPCODE(0x5CF9) +{ + u32 adr, res; + u32 src, dst; + + FETCH_LONG(adr); + if (!((flag_N ^ flag_V) & 0x80)) + { + res = 0xFF; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(20) + } + res = 0; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(20) +} + +// STCC +OPCODE(0x5DF9) +{ + u32 adr, res; + u32 src, dst; + + FETCH_LONG(adr); + if ((flag_N ^ flag_V) & 0x80) + { + res = 0xFF; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(20) + } + res = 0; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(20) +} + +// STCC +OPCODE(0x5EF9) +{ + u32 adr, res; + u32 src, dst; + + FETCH_LONG(adr); + if (flag_NotZ && (!((flag_N ^ flag_V) & 0x80))) + { + res = 0xFF; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(20) + } + res = 0; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(20) +} + +// STCC +OPCODE(0x5FF9) +{ + u32 adr, res; + u32 src, dst; + + FETCH_LONG(adr); + if ((!flag_NotZ) || ((flag_N ^ flag_V) & 0x80)) + { + res = 0xFF; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(20) + } + res = 0; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(20) +} + +// STCC +OPCODE(0x50DF) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7); + AREG(7) += 2; + res = 0xFF; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(12) +} + +// STCC +OPCODE(0x51DF) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7); + AREG(7) += 2; + res = 0; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(12) +} + +// STCC +OPCODE(0x52DF) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7); + AREG(7) += 2; + if (flag_NotZ && (!(flag_C & 0x100))) + { + res = 0xFF; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(12) + } + res = 0; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(12) +} + +// STCC +OPCODE(0x53DF) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7); + AREG(7) += 2; + if ((!flag_NotZ) || (flag_C & 0x100)) + { + res = 0xFF; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(12) + } + res = 0; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(12) +} + +// STCC +OPCODE(0x54DF) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7); + AREG(7) += 2; + if (!(flag_C & 0x100)) + { + res = 0xFF; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(12) + } + res = 0; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(12) +} + +// STCC +OPCODE(0x55DF) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7); + AREG(7) += 2; + if (flag_C & 0x100) + { + res = 0xFF; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(12) + } + res = 0; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(12) +} + +// STCC +OPCODE(0x56DF) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7); + AREG(7) += 2; + if (flag_NotZ) + { + res = 0xFF; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(12) + } + res = 0; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(12) +} + +// STCC +OPCODE(0x57DF) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7); + AREG(7) += 2; + if (!flag_NotZ) + { + res = 0xFF; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(12) + } + res = 0; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(12) +} + +// STCC +OPCODE(0x58DF) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7); + AREG(7) += 2; + if (!(flag_V & 0x80)) + { + res = 0xFF; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(12) + } + res = 0; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(12) +} + +// STCC +OPCODE(0x59DF) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7); + AREG(7) += 2; + if (flag_V & 0x80) + { + res = 0xFF; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(12) + } + res = 0; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(12) +} + +// STCC +OPCODE(0x5ADF) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7); + AREG(7) += 2; + if (!(flag_N & 0x80)) + { + res = 0xFF; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(12) + } + res = 0; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(12) +} + +// STCC +OPCODE(0x5BDF) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7); + AREG(7) += 2; + if (flag_N & 0x80) + { + res = 0xFF; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(12) + } + res = 0; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(12) +} + +// STCC +OPCODE(0x5CDF) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7); + AREG(7) += 2; + if (!((flag_N ^ flag_V) & 0x80)) + { + res = 0xFF; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(12) + } + res = 0; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(12) +} + +// STCC +OPCODE(0x5DDF) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7); + AREG(7) += 2; + if ((flag_N ^ flag_V) & 0x80) + { + res = 0xFF; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(12) + } + res = 0; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(12) +} + +// STCC +OPCODE(0x5EDF) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7); + AREG(7) += 2; + if (flag_NotZ && (!((flag_N ^ flag_V) & 0x80))) + { + res = 0xFF; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(12) + } + res = 0; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(12) +} + +// STCC +OPCODE(0x5FDF) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7); + AREG(7) += 2; + if ((!flag_NotZ) || ((flag_N ^ flag_V) & 0x80)) + { + res = 0xFF; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(12) + } + res = 0; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(12) +} + +// STCC +OPCODE(0x50E7) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7) - 2; + AREG(7) = adr; + res = 0xFF; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(14) +} + +// STCC +OPCODE(0x51E7) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7) - 2; + AREG(7) = adr; + res = 0; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(14) +} + +// STCC +OPCODE(0x52E7) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7) - 2; + AREG(7) = adr; + if (flag_NotZ && (!(flag_C & 0x100))) + { + res = 0xFF; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(14) + } + res = 0; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(14) +} + +// STCC +OPCODE(0x53E7) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7) - 2; + AREG(7) = adr; + if ((!flag_NotZ) || (flag_C & 0x100)) + { + res = 0xFF; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(14) + } + res = 0; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(14) +} + +// STCC +OPCODE(0x54E7) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7) - 2; + AREG(7) = adr; + if (!(flag_C & 0x100)) + { + res = 0xFF; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(14) + } + res = 0; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(14) +} + +// STCC +OPCODE(0x55E7) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7) - 2; + AREG(7) = adr; + if (flag_C & 0x100) + { + res = 0xFF; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(14) + } + res = 0; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(14) +} + +// STCC +OPCODE(0x56E7) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7) - 2; + AREG(7) = adr; + if (flag_NotZ) + { + res = 0xFF; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(14) + } + res = 0; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(14) +} + +// STCC +OPCODE(0x57E7) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7) - 2; + AREG(7) = adr; + if (!flag_NotZ) + { + res = 0xFF; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(14) + } + res = 0; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(14) +} + +// STCC +OPCODE(0x58E7) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7) - 2; + AREG(7) = adr; + if (!(flag_V & 0x80)) + { + res = 0xFF; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(14) + } + res = 0; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(14) +} + +// STCC +OPCODE(0x59E7) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7) - 2; + AREG(7) = adr; + if (flag_V & 0x80) + { + res = 0xFF; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(14) + } + res = 0; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(14) +} + +// STCC +OPCODE(0x5AE7) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7) - 2; + AREG(7) = adr; + if (!(flag_N & 0x80)) + { + res = 0xFF; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(14) + } + res = 0; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(14) +} + +// STCC +OPCODE(0x5BE7) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7) - 2; + AREG(7) = adr; + if (flag_N & 0x80) + { + res = 0xFF; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(14) + } + res = 0; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(14) +} + +// STCC +OPCODE(0x5CE7) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7) - 2; + AREG(7) = adr; + if (!((flag_N ^ flag_V) & 0x80)) + { + res = 0xFF; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(14) + } + res = 0; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(14) +} + +// STCC +OPCODE(0x5DE7) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7) - 2; + AREG(7) = adr; + if ((flag_N ^ flag_V) & 0x80) + { + res = 0xFF; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(14) + } + res = 0; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(14) +} + +// STCC +OPCODE(0x5EE7) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7) - 2; + AREG(7) = adr; + if (flag_NotZ && (!((flag_N ^ flag_V) & 0x80))) + { + res = 0xFF; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(14) + } + res = 0; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(14) +} + +// STCC +OPCODE(0x5FE7) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7) - 2; + AREG(7) = adr; + if ((!flag_NotZ) || ((flag_N ^ flag_V) & 0x80)) + { + res = 0xFF; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(14) + } + res = 0; + PRE_IO + WRITE_BYTE_F(adr, res) + POST_IO + RET(14) +} + +// DBCC +OPCODE(0x50C8) +{ + u32 adr, res; + u32 src, dst; + + PC++; +RET(12) +} + +// DBCC +OPCODE(0x51C8) +{ + u32 adr, res; + u32 src, dst; + + res = DREGu16((Opcode >> 0) & 7); + res--; + DREGu16((Opcode >> 0) & 7) = res; + if ((s32)res != -1) + { + u32 newPC; + + newPC = (u32)(PC) - BasePC; + newPC += GET_SWORD; + SET_PC(newPC); + CHECK_BRANCH_EXCEPTION(newPC) + RET(10) + } + PC++; +RET(14) +} + +// DBCC +OPCODE(0x52C8) +{ + u32 adr, res; + u32 src, dst; + + if ((!flag_NotZ) || (flag_C & 0x100)) + { + res = DREGu16((Opcode >> 0) & 7); + res--; + DREGu16((Opcode >> 0) & 7) = res; + if ((s32)res != -1) + { + u32 newPC; + + newPC = (u32)(PC) - BasePC; + newPC += GET_SWORD; + SET_PC(newPC); + CHECK_BRANCH_EXCEPTION(newPC) + RET(10) + } + } + else + { + PC++; + RET(12) + } + PC++; +RET(14) +} + +// DBCC +OPCODE(0x53C8) +{ + u32 adr, res; + u32 src, dst; + + if (flag_NotZ && (!(flag_C & 0x100))) + { + res = DREGu16((Opcode >> 0) & 7); + res--; + DREGu16((Opcode >> 0) & 7) = res; + if ((s32)res != -1) + { + u32 newPC; + + newPC = (u32)(PC) - BasePC; + newPC += GET_SWORD; + SET_PC(newPC); + CHECK_BRANCH_EXCEPTION(newPC) + RET(10) + } + } + else + { + PC++; + RET(12) + } + PC++; +RET(14) +} + +// DBCC +OPCODE(0x54C8) +{ + u32 adr, res; + u32 src, dst; + + if (flag_C & 0x100) + { + res = DREGu16((Opcode >> 0) & 7); + res--; + DREGu16((Opcode >> 0) & 7) = res; + if ((s32)res != -1) + { + u32 newPC; + + newPC = (u32)(PC) - BasePC; + newPC += GET_SWORD; + SET_PC(newPC); + CHECK_BRANCH_EXCEPTION(newPC) + RET(10) + } + } + else + { + PC++; + RET(12) + } + PC++; +RET(14) +} + +// DBCC +OPCODE(0x55C8) +{ + u32 adr, res; + u32 src, dst; + + if (!(flag_C & 0x100)) + { + res = DREGu16((Opcode >> 0) & 7); + res--; + DREGu16((Opcode >> 0) & 7) = res; + if ((s32)res != -1) + { + u32 newPC; + + newPC = (u32)(PC) - BasePC; + newPC += GET_SWORD; + SET_PC(newPC); + CHECK_BRANCH_EXCEPTION(newPC) + RET(10) + } + } + else + { + PC++; + RET(12) + } + PC++; +RET(14) +} + +// DBCC +OPCODE(0x56C8) +{ + u32 adr, res; + u32 src, dst; + + if (!flag_NotZ) + { + res = DREGu16((Opcode >> 0) & 7); + res--; + DREGu16((Opcode >> 0) & 7) = res; + if ((s32)res != -1) + { + u32 newPC; + + newPC = (u32)(PC) - BasePC; + newPC += GET_SWORD; + SET_PC(newPC); + CHECK_BRANCH_EXCEPTION(newPC) + RET(10) + } + } + else + { + PC++; + RET(12) + } + PC++; +RET(14) +} + +// DBCC +OPCODE(0x57C8) +{ + u32 adr, res; + u32 src, dst; + + if (flag_NotZ) + { + res = DREGu16((Opcode >> 0) & 7); + res--; + DREGu16((Opcode >> 0) & 7) = res; + if ((s32)res != -1) + { + u32 newPC; + + newPC = (u32)(PC) - BasePC; + newPC += GET_SWORD; + SET_PC(newPC); + CHECK_BRANCH_EXCEPTION(newPC) + RET(10) + } + } + else + { + PC++; + RET(12) + } + PC++; +RET(14) +} + +// DBCC +OPCODE(0x58C8) +{ + u32 adr, res; + u32 src, dst; + + if (flag_V & 0x80) + { + res = DREGu16((Opcode >> 0) & 7); + res--; + DREGu16((Opcode >> 0) & 7) = res; + if ((s32)res != -1) + { + u32 newPC; + + newPC = (u32)(PC) - BasePC; + newPC += GET_SWORD; + SET_PC(newPC); + CHECK_BRANCH_EXCEPTION(newPC) + RET(10) + } + } + else + { + PC++; + RET(12) + } + PC++; +RET(14) +} + +// DBCC +OPCODE(0x59C8) +{ + u32 adr, res; + u32 src, dst; + + if (!(flag_V & 0x80)) + { + res = DREGu16((Opcode >> 0) & 7); + res--; + DREGu16((Opcode >> 0) & 7) = res; + if ((s32)res != -1) + { + u32 newPC; + + newPC = (u32)(PC) - BasePC; + newPC += GET_SWORD; + SET_PC(newPC); + CHECK_BRANCH_EXCEPTION(newPC) + RET(10) + } + } + else + { + PC++; + RET(12) + } + PC++; +RET(14) +} + +// DBCC +OPCODE(0x5AC8) +{ + u32 adr, res; + u32 src, dst; + + if (flag_N & 0x80) + { + res = DREGu16((Opcode >> 0) & 7); + res--; + DREGu16((Opcode >> 0) & 7) = res; + if ((s32)res != -1) + { + u32 newPC; + + newPC = (u32)(PC) - BasePC; + newPC += GET_SWORD; + SET_PC(newPC); + CHECK_BRANCH_EXCEPTION(newPC) + RET(10) + } + } + else + { + PC++; + RET(12) + } + PC++; +RET(14) +} + +// DBCC +OPCODE(0x5BC8) +{ + u32 adr, res; + u32 src, dst; + + if (!(flag_N & 0x80)) + { + res = DREGu16((Opcode >> 0) & 7); + res--; + DREGu16((Opcode >> 0) & 7) = res; + if ((s32)res != -1) + { + u32 newPC; + + newPC = (u32)(PC) - BasePC; + newPC += GET_SWORD; + SET_PC(newPC); + CHECK_BRANCH_EXCEPTION(newPC) + RET(10) + } + } + else + { + PC++; + RET(12) + } + PC++; +RET(14) +} + +// DBCC +OPCODE(0x5CC8) +{ + u32 adr, res; + u32 src, dst; + + if ((flag_N ^ flag_V) & 0x80) + { + res = DREGu16((Opcode >> 0) & 7); + res--; + DREGu16((Opcode >> 0) & 7) = res; + if ((s32)res != -1) + { + u32 newPC; + + newPC = (u32)(PC) - BasePC; + newPC += GET_SWORD; + SET_PC(newPC); + CHECK_BRANCH_EXCEPTION(newPC) + RET(10) + } + } + else + { + PC++; + RET(12) + } + PC++; +RET(14) +} + +// DBCC +OPCODE(0x5DC8) +{ + u32 adr, res; + u32 src, dst; + + if (!((flag_N ^ flag_V) & 0x80)) + { + res = DREGu16((Opcode >> 0) & 7); + res--; + DREGu16((Opcode >> 0) & 7) = res; + if ((s32)res != -1) + { + u32 newPC; + + newPC = (u32)(PC) - BasePC; + newPC += GET_SWORD; + SET_PC(newPC); + CHECK_BRANCH_EXCEPTION(newPC) + RET(10) + } + } + else + { + PC++; + RET(12) + } + PC++; +RET(14) +} + +// DBCC +OPCODE(0x5EC8) +{ + u32 adr, res; + u32 src, dst; + + if ((!flag_NotZ) || ((flag_N ^ flag_V) & 0x80)) + { + res = DREGu16((Opcode >> 0) & 7); + res--; + DREGu16((Opcode >> 0) & 7) = res; + if ((s32)res != -1) + { + u32 newPC; + + newPC = (u32)(PC) - BasePC; + newPC += GET_SWORD; + SET_PC(newPC); + CHECK_BRANCH_EXCEPTION(newPC) + RET(10) + } + } + else + { + PC++; + RET(12) + } + PC++; +RET(14) +} + +// DBCC +OPCODE(0x5FC8) +{ + u32 adr, res; + u32 src, dst; + + if (flag_NotZ && (!((flag_N ^ flag_V) & 0x80))) + { + res = DREGu16((Opcode >> 0) & 7); + res--; + DREGu16((Opcode >> 0) & 7) = res; + if ((s32)res != -1) + { + u32 newPC; + + newPC = (u32)(PC) - BasePC; + newPC += GET_SWORD; + SET_PC(newPC); + CHECK_BRANCH_EXCEPTION(newPC) + RET(10) + } + } + else + { + PC++; + RET(12) + } + PC++; +RET(14) +} + +// ADDQ +OPCODE(0x5000) +{ + u32 adr, res; + u32 src, dst; + + src = (((Opcode >> 9) - 1) & 7) + 1; + dst = DREGu8((Opcode >> 0) & 7); + res = dst + src; + flag_N = flag_X = flag_C = res; + flag_V = (src ^ res) & (dst ^ res); + flag_NotZ = res & 0xFF; + DREGu8((Opcode >> 0) & 7) = res; +RET(4) +} + +// ADDQ +OPCODE(0x5010) +{ + u32 adr, res; + u32 src, dst; + + src = (((Opcode >> 9) - 1) & 7) + 1; + adr = AREG((Opcode >> 0) & 7); + PRE_IO + READ_BYTE_F(adr, dst) + res = dst + src; + flag_N = flag_X = flag_C = res; + flag_V = (src ^ res) & (dst ^ res); + flag_NotZ = res & 0xFF; + WRITE_BYTE_F(adr, res) + POST_IO +RET(12) +} + +// ADDQ +OPCODE(0x5018) +{ + u32 adr, res; + u32 src, dst; + + src = (((Opcode >> 9) - 1) & 7) + 1; + adr = AREG((Opcode >> 0) & 7); + AREG((Opcode >> 0) & 7) += 1; + PRE_IO + READ_BYTE_F(adr, dst) + res = dst + src; + flag_N = flag_X = flag_C = res; + flag_V = (src ^ res) & (dst ^ res); + flag_NotZ = res & 0xFF; + WRITE_BYTE_F(adr, res) + POST_IO +RET(12) +} + +// ADDQ +OPCODE(0x5020) +{ + u32 adr, res; + u32 src, dst; + + src = (((Opcode >> 9) - 1) & 7) + 1; + adr = AREG((Opcode >> 0) & 7) - 1; + AREG((Opcode >> 0) & 7) = adr; + PRE_IO + READ_BYTE_F(adr, dst) + res = dst + src; + flag_N = flag_X = flag_C = res; + flag_V = (src ^ res) & (dst ^ res); + flag_NotZ = res & 0xFF; + WRITE_BYTE_F(adr, res) + POST_IO +RET(14) +} + +// ADDQ +OPCODE(0x5028) +{ + u32 adr, res; + u32 src, dst; + + src = (((Opcode >> 9) - 1) & 7) + 1; + FETCH_SWORD(adr); + adr += AREG((Opcode >> 0) & 7); + PRE_IO + READ_BYTE_F(adr, dst) + res = dst + src; + flag_N = flag_X = flag_C = res; + flag_V = (src ^ res) & (dst ^ res); + flag_NotZ = res & 0xFF; + WRITE_BYTE_F(adr, res) + POST_IO +RET(16) +} + +// ADDQ +OPCODE(0x5030) +{ + u32 adr, res; + u32 src, dst; + + src = (((Opcode >> 9) - 1) & 7) + 1; + adr = AREG((Opcode >> 0) & 7); + DECODE_EXT_WORD + PRE_IO + READ_BYTE_F(adr, dst) + res = dst + src; + flag_N = flag_X = flag_C = res; + flag_V = (src ^ res) & (dst ^ res); + flag_NotZ = res & 0xFF; + WRITE_BYTE_F(adr, res) + POST_IO +RET(18) +} + +// ADDQ +OPCODE(0x5038) +{ + u32 adr, res; + u32 src, dst; + + src = (((Opcode >> 9) - 1) & 7) + 1; + FETCH_SWORD(adr); + PRE_IO + READ_BYTE_F(adr, dst) + res = dst + src; + flag_N = flag_X = flag_C = res; + flag_V = (src ^ res) & (dst ^ res); + flag_NotZ = res & 0xFF; + WRITE_BYTE_F(adr, res) + POST_IO +RET(16) +} + +// ADDQ +OPCODE(0x5039) +{ + u32 adr, res; + u32 src, dst; + + src = (((Opcode >> 9) - 1) & 7) + 1; + FETCH_LONG(adr); + PRE_IO + READ_BYTE_F(adr, dst) + res = dst + src; + flag_N = flag_X = flag_C = res; + flag_V = (src ^ res) & (dst ^ res); + flag_NotZ = res & 0xFF; + WRITE_BYTE_F(adr, res) + POST_IO +RET(20) +} + +// ADDQ +OPCODE(0x501F) +{ + u32 adr, res; + u32 src, dst; + + src = (((Opcode >> 9) - 1) & 7) + 1; + adr = AREG(7); + AREG(7) += 2; + PRE_IO + READ_BYTE_F(adr, dst) + res = dst + src; + flag_N = flag_X = flag_C = res; + flag_V = (src ^ res) & (dst ^ res); + flag_NotZ = res & 0xFF; + WRITE_BYTE_F(adr, res) + POST_IO +RET(12) +} + +// ADDQ +OPCODE(0x5027) +{ + u32 adr, res; + u32 src, dst; + + src = (((Opcode >> 9) - 1) & 7) + 1; + adr = AREG(7) - 2; + AREG(7) = adr; + PRE_IO + READ_BYTE_F(adr, dst) + res = dst + src; + flag_N = flag_X = flag_C = res; + flag_V = (src ^ res) & (dst ^ res); + flag_NotZ = res & 0xFF; + WRITE_BYTE_F(adr, res) + POST_IO +RET(14) +} + +// ADDQ +OPCODE(0x5040) +{ + u32 adr, res; + u32 src, dst; + + src = (((Opcode >> 9) - 1) & 7) + 1; + dst = DREGu16((Opcode >> 0) & 7); + res = dst + src; + flag_V = ((src ^ res) & (dst ^ res)) >> 8; + flag_N = flag_X = flag_C = res >> 8; + flag_NotZ = res & 0xFFFF; + DREGu16((Opcode >> 0) & 7) = res; +RET(4) +} + +// ADDQ +OPCODE(0x5048) +{ + u32 adr, res; + u32 src, dst; + + src = (((Opcode >> 9) - 1) & 7) + 1; + dst = AREGu32((Opcode >> 0) & 7); + res = dst + src; + AREG((Opcode >> 0) & 7) = res; +#ifdef USE_CYCLONE_TIMING_ // breaks Project-X +RET(4) +#else +RET(8) +#endif +} + +// ADDQ +OPCODE(0x5050) +{ + u32 adr, res; + u32 src, dst; + + src = (((Opcode >> 9) - 1) & 7) + 1; + adr = AREG((Opcode >> 0) & 7); + PRE_IO + READ_WORD_F(adr, dst) + res = dst + src; + flag_V = ((src ^ res) & (dst ^ res)) >> 8; + flag_N = flag_X = flag_C = res >> 8; + flag_NotZ = res & 0xFFFF; + WRITE_WORD_F(adr, res) + POST_IO +RET(12) +} + +// ADDQ +OPCODE(0x5058) +{ + u32 adr, res; + u32 src, dst; + + src = (((Opcode >> 9) - 1) & 7) + 1; + adr = AREG((Opcode >> 0) & 7); + AREG((Opcode >> 0) & 7) += 2; + PRE_IO + READ_WORD_F(adr, dst) + res = dst + src; + flag_V = ((src ^ res) & (dst ^ res)) >> 8; + flag_N = flag_X = flag_C = res >> 8; + flag_NotZ = res & 0xFFFF; + WRITE_WORD_F(adr, res) + POST_IO +RET(12) +} + +// ADDQ +OPCODE(0x5060) +{ + u32 adr, res; + u32 src, dst; + + src = (((Opcode >> 9) - 1) & 7) + 1; + adr = AREG((Opcode >> 0) & 7) - 2; + AREG((Opcode >> 0) & 7) = adr; + PRE_IO + READ_WORD_F(adr, dst) + res = dst + src; + flag_V = ((src ^ res) & (dst ^ res)) >> 8; + flag_N = flag_X = flag_C = res >> 8; + flag_NotZ = res & 0xFFFF; + WRITE_WORD_F(adr, res) + POST_IO +RET(14) +} + +// ADDQ +OPCODE(0x5068) +{ + u32 adr, res; + u32 src, dst; + + src = (((Opcode >> 9) - 1) & 7) + 1; + FETCH_SWORD(adr); + adr += AREG((Opcode >> 0) & 7); + PRE_IO + READ_WORD_F(adr, dst) + res = dst + src; + flag_V = ((src ^ res) & (dst ^ res)) >> 8; + flag_N = flag_X = flag_C = res >> 8; + flag_NotZ = res & 0xFFFF; + WRITE_WORD_F(adr, res) + POST_IO +RET(16) +} + +// ADDQ +OPCODE(0x5070) +{ + u32 adr, res; + u32 src, dst; + + src = (((Opcode >> 9) - 1) & 7) + 1; + adr = AREG((Opcode >> 0) & 7); + DECODE_EXT_WORD + PRE_IO + READ_WORD_F(adr, dst) + res = dst + src; + flag_V = ((src ^ res) & (dst ^ res)) >> 8; + flag_N = flag_X = flag_C = res >> 8; + flag_NotZ = res & 0xFFFF; + WRITE_WORD_F(adr, res) + POST_IO +RET(18) +} + +// ADDQ +OPCODE(0x5078) +{ + u32 adr, res; + u32 src, dst; + + src = (((Opcode >> 9) - 1) & 7) + 1; + FETCH_SWORD(adr); + PRE_IO + READ_WORD_F(adr, dst) + res = dst + src; + flag_V = ((src ^ res) & (dst ^ res)) >> 8; + flag_N = flag_X = flag_C = res >> 8; + flag_NotZ = res & 0xFFFF; + WRITE_WORD_F(adr, res) + POST_IO +RET(16) +} + +// ADDQ +OPCODE(0x5079) +{ + u32 adr, res; + u32 src, dst; + + src = (((Opcode >> 9) - 1) & 7) + 1; + FETCH_LONG(adr); + PRE_IO + READ_WORD_F(adr, dst) + res = dst + src; + flag_V = ((src ^ res) & (dst ^ res)) >> 8; + flag_N = flag_X = flag_C = res >> 8; + flag_NotZ = res & 0xFFFF; + WRITE_WORD_F(adr, res) + POST_IO +RET(20) +} + +// ADDQ +OPCODE(0x505F) +{ + u32 adr, res; + u32 src, dst; + + src = (((Opcode >> 9) - 1) & 7) + 1; + adr = AREG(7); + AREG(7) += 2; + PRE_IO + READ_WORD_F(adr, dst) + res = dst + src; + flag_V = ((src ^ res) & (dst ^ res)) >> 8; + flag_N = flag_X = flag_C = res >> 8; + flag_NotZ = res & 0xFFFF; + WRITE_WORD_F(adr, res) + POST_IO +RET(12) +} + +// ADDQ +OPCODE(0x5067) +{ + u32 adr, res; + u32 src, dst; + + src = (((Opcode >> 9) - 1) & 7) + 1; + adr = AREG(7) - 2; + AREG(7) = adr; + PRE_IO + READ_WORD_F(adr, dst) + res = dst + src; + flag_V = ((src ^ res) & (dst ^ res)) >> 8; + flag_N = flag_X = flag_C = res >> 8; + flag_NotZ = res & 0xFFFF; + WRITE_WORD_F(adr, res) + POST_IO +RET(14) +} + +// ADDQ +OPCODE(0x5080) +{ + u32 adr, res; + u32 src, dst; + + src = (((Opcode >> 9) - 1) & 7) + 1; + dst = DREGu32((Opcode >> 0) & 7); + res = dst + src; + flag_NotZ = res; + flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23; + flag_V = ((src ^ res) & (dst ^ res)) >> 24; + flag_N = res >> 24; + DREGu32((Opcode >> 0) & 7) = res; +RET(8) +} + +// ADDQ +OPCODE(0x5088) +{ + u32 adr, res; + u32 src, dst; + + src = (((Opcode >> 9) - 1) & 7) + 1; + dst = AREGu32((Opcode >> 0) & 7); + res = dst + src; + AREG((Opcode >> 0) & 7) = res; +RET(8) +} + +// ADDQ +OPCODE(0x5090) +{ + u32 adr, res; + u32 src, dst; + + src = (((Opcode >> 9) - 1) & 7) + 1; + adr = AREG((Opcode >> 0) & 7); + PRE_IO + READ_LONG_F(adr, dst) + res = dst + src; + flag_NotZ = res; + flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23; + flag_V = ((src ^ res) & (dst ^ res)) >> 24; + flag_N = res >> 24; + WRITE_LONG_F(adr, res) + POST_IO +RET(20) +} + +// ADDQ +OPCODE(0x5098) +{ + u32 adr, res; + u32 src, dst; + + src = (((Opcode >> 9) - 1) & 7) + 1; + adr = AREG((Opcode >> 0) & 7); + AREG((Opcode >> 0) & 7) += 4; + PRE_IO + READ_LONG_F(adr, dst) + res = dst + src; + flag_NotZ = res; + flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23; + flag_V = ((src ^ res) & (dst ^ res)) >> 24; + flag_N = res >> 24; + WRITE_LONG_F(adr, res) + POST_IO +RET(20) +} + +// ADDQ +OPCODE(0x50A0) +{ + u32 adr, res; + u32 src, dst; + + src = (((Opcode >> 9) - 1) & 7) + 1; + adr = AREG((Opcode >> 0) & 7) - 4; + AREG((Opcode >> 0) & 7) = adr; + PRE_IO + READ_LONG_F(adr, dst) + res = dst + src; + flag_NotZ = res; + flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23; + flag_V = ((src ^ res) & (dst ^ res)) >> 24; + flag_N = res >> 24; + WRITE_LONG_F(adr, res) + POST_IO +RET(22) +} + +// ADDQ +OPCODE(0x50A8) +{ + u32 adr, res; + u32 src, dst; + + src = (((Opcode >> 9) - 1) & 7) + 1; + FETCH_SWORD(adr); + adr += AREG((Opcode >> 0) & 7); + PRE_IO + READ_LONG_F(adr, dst) + res = dst + src; + flag_NotZ = res; + flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23; + flag_V = ((src ^ res) & (dst ^ res)) >> 24; + flag_N = res >> 24; + WRITE_LONG_F(adr, res) + POST_IO +RET(24) +} + +// ADDQ +OPCODE(0x50B0) +{ + u32 adr, res; + u32 src, dst; + + src = (((Opcode >> 9) - 1) & 7) + 1; + adr = AREG((Opcode >> 0) & 7); + DECODE_EXT_WORD + PRE_IO + READ_LONG_F(adr, dst) + res = dst + src; + flag_NotZ = res; + flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23; + flag_V = ((src ^ res) & (dst ^ res)) >> 24; + flag_N = res >> 24; + WRITE_LONG_F(adr, res) + POST_IO +RET(26) +} + +// ADDQ +OPCODE(0x50B8) +{ + u32 adr, res; + u32 src, dst; + + src = (((Opcode >> 9) - 1) & 7) + 1; + FETCH_SWORD(adr); + PRE_IO + READ_LONG_F(adr, dst) + res = dst + src; + flag_NotZ = res; + flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23; + flag_V = ((src ^ res) & (dst ^ res)) >> 24; + flag_N = res >> 24; + WRITE_LONG_F(adr, res) + POST_IO +RET(24) +} + +// ADDQ +OPCODE(0x50B9) +{ + u32 adr, res; + u32 src, dst; + + src = (((Opcode >> 9) - 1) & 7) + 1; + FETCH_LONG(adr); + PRE_IO + READ_LONG_F(adr, dst) + res = dst + src; + flag_NotZ = res; + flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23; + flag_V = ((src ^ res) & (dst ^ res)) >> 24; + flag_N = res >> 24; + WRITE_LONG_F(adr, res) + POST_IO +RET(28) +} + +// ADDQ +OPCODE(0x509F) +{ + u32 adr, res; + u32 src, dst; + + src = (((Opcode >> 9) - 1) & 7) + 1; + adr = AREG(7); + AREG(7) += 4; + PRE_IO + READ_LONG_F(adr, dst) + res = dst + src; + flag_NotZ = res; + flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23; + flag_V = ((src ^ res) & (dst ^ res)) >> 24; + flag_N = res >> 24; + WRITE_LONG_F(adr, res) + POST_IO +RET(20) +} + +// ADDQ +OPCODE(0x50A7) +{ + u32 adr, res; + u32 src, dst; + + src = (((Opcode >> 9) - 1) & 7) + 1; + adr = AREG(7) - 4; + AREG(7) = adr; + PRE_IO + READ_LONG_F(adr, dst) + res = dst + src; + flag_NotZ = res; + flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23; + flag_V = ((src ^ res) & (dst ^ res)) >> 24; + flag_N = res >> 24; + WRITE_LONG_F(adr, res) + POST_IO +RET(22) +} + +// SUBQ +OPCODE(0x5100) +{ + u32 adr, res; + u32 src, dst; + + src = (((Opcode >> 9) - 1) & 7) + 1; + dst = DREGu8((Opcode >> 0) & 7); + res = dst - src; + flag_N = flag_X = flag_C = res; + flag_V = (src ^ dst) & (res ^ dst); + flag_NotZ = res & 0xFF; + DREGu8((Opcode >> 0) & 7) = res; +RET(4) +} + +// SUBQ +OPCODE(0x5110) +{ + u32 adr, res; + u32 src, dst; + + src = (((Opcode >> 9) - 1) & 7) + 1; + adr = AREG((Opcode >> 0) & 7); + PRE_IO + READ_BYTE_F(adr, dst) + res = dst - src; + flag_N = flag_X = flag_C = res; + flag_V = (src ^ dst) & (res ^ dst); + flag_NotZ = res & 0xFF; + WRITE_BYTE_F(adr, res) + POST_IO +RET(12) +} + +// SUBQ +OPCODE(0x5118) +{ + u32 adr, res; + u32 src, dst; + + src = (((Opcode >> 9) - 1) & 7) + 1; + adr = AREG((Opcode >> 0) & 7); + AREG((Opcode >> 0) & 7) += 1; + PRE_IO + READ_BYTE_F(adr, dst) + res = dst - src; + flag_N = flag_X = flag_C = res; + flag_V = (src ^ dst) & (res ^ dst); + flag_NotZ = res & 0xFF; + WRITE_BYTE_F(adr, res) + POST_IO +RET(12) +} + +// SUBQ +OPCODE(0x5120) +{ + u32 adr, res; + u32 src, dst; + + src = (((Opcode >> 9) - 1) & 7) + 1; + adr = AREG((Opcode >> 0) & 7) - 1; + AREG((Opcode >> 0) & 7) = adr; + PRE_IO + READ_BYTE_F(adr, dst) + res = dst - src; + flag_N = flag_X = flag_C = res; + flag_V = (src ^ dst) & (res ^ dst); + flag_NotZ = res & 0xFF; + WRITE_BYTE_F(adr, res) + POST_IO +RET(14) +} + +// SUBQ +OPCODE(0x5128) +{ + u32 adr, res; + u32 src, dst; + + src = (((Opcode >> 9) - 1) & 7) + 1; + FETCH_SWORD(adr); + adr += AREG((Opcode >> 0) & 7); + PRE_IO + READ_BYTE_F(adr, dst) + res = dst - src; + flag_N = flag_X = flag_C = res; + flag_V = (src ^ dst) & (res ^ dst); + flag_NotZ = res & 0xFF; + WRITE_BYTE_F(adr, res) + POST_IO +RET(16) +} + +// SUBQ +OPCODE(0x5130) +{ + u32 adr, res; + u32 src, dst; + + src = (((Opcode >> 9) - 1) & 7) + 1; + adr = AREG((Opcode >> 0) & 7); + DECODE_EXT_WORD + PRE_IO + READ_BYTE_F(adr, dst) + res = dst - src; + flag_N = flag_X = flag_C = res; + flag_V = (src ^ dst) & (res ^ dst); + flag_NotZ = res & 0xFF; + WRITE_BYTE_F(adr, res) + POST_IO +RET(18) +} + +// SUBQ +OPCODE(0x5138) +{ + u32 adr, res; + u32 src, dst; + + src = (((Opcode >> 9) - 1) & 7) + 1; + FETCH_SWORD(adr); + PRE_IO + READ_BYTE_F(adr, dst) + res = dst - src; + flag_N = flag_X = flag_C = res; + flag_V = (src ^ dst) & (res ^ dst); + flag_NotZ = res & 0xFF; + WRITE_BYTE_F(adr, res) + POST_IO +RET(16) +} + +// SUBQ +OPCODE(0x5139) +{ + u32 adr, res; + u32 src, dst; + + src = (((Opcode >> 9) - 1) & 7) + 1; + FETCH_LONG(adr); + PRE_IO + READ_BYTE_F(adr, dst) + res = dst - src; + flag_N = flag_X = flag_C = res; + flag_V = (src ^ dst) & (res ^ dst); + flag_NotZ = res & 0xFF; + WRITE_BYTE_F(adr, res) + POST_IO +RET(20) +} + +// SUBQ +OPCODE(0x511F) +{ + u32 adr, res; + u32 src, dst; + + src = (((Opcode >> 9) - 1) & 7) + 1; + adr = AREG(7); + AREG(7) += 2; + PRE_IO + READ_BYTE_F(adr, dst) + res = dst - src; + flag_N = flag_X = flag_C = res; + flag_V = (src ^ dst) & (res ^ dst); + flag_NotZ = res & 0xFF; + WRITE_BYTE_F(adr, res) + POST_IO +RET(12) +} + +// SUBQ +OPCODE(0x5127) +{ + u32 adr, res; + u32 src, dst; + + src = (((Opcode >> 9) - 1) & 7) + 1; + adr = AREG(7) - 2; + AREG(7) = adr; + PRE_IO + READ_BYTE_F(adr, dst) + res = dst - src; + flag_N = flag_X = flag_C = res; + flag_V = (src ^ dst) & (res ^ dst); + flag_NotZ = res & 0xFF; + WRITE_BYTE_F(adr, res) + POST_IO +RET(14) +} + +// SUBQ +OPCODE(0x5140) +{ + u32 adr, res; + u32 src, dst; + + src = (((Opcode >> 9) - 1) & 7) + 1; + dst = DREGu16((Opcode >> 0) & 7); + res = dst - src; + flag_V = ((src ^ dst) & (res ^ dst)) >> 8; + flag_N = flag_X = flag_C = res >> 8; + flag_NotZ = res & 0xFFFF; + DREGu16((Opcode >> 0) & 7) = res; +RET(4) +} + +// SUBQ +OPCODE(0x5148) +{ + u32 adr, res; + u32 src, dst; + + src = (((Opcode >> 9) - 1) & 7) + 1; + dst = AREGu32((Opcode >> 0) & 7); + res = dst - src; + AREG((Opcode >> 0) & 7) = res; +RET(8) +} + +// SUBQ +OPCODE(0x5150) +{ + u32 adr, res; + u32 src, dst; + + src = (((Opcode >> 9) - 1) & 7) + 1; + adr = AREG((Opcode >> 0) & 7); + PRE_IO + READ_WORD_F(adr, dst) + res = dst - src; + flag_V = ((src ^ dst) & (res ^ dst)) >> 8; + flag_N = flag_X = flag_C = res >> 8; + flag_NotZ = res & 0xFFFF; + WRITE_WORD_F(adr, res) + POST_IO +RET(12) +} + +// SUBQ +OPCODE(0x5158) +{ + u32 adr, res; + u32 src, dst; + + src = (((Opcode >> 9) - 1) & 7) + 1; + adr = AREG((Opcode >> 0) & 7); + AREG((Opcode >> 0) & 7) += 2; + PRE_IO + READ_WORD_F(adr, dst) + res = dst - src; + flag_V = ((src ^ dst) & (res ^ dst)) >> 8; + flag_N = flag_X = flag_C = res >> 8; + flag_NotZ = res & 0xFFFF; + WRITE_WORD_F(adr, res) + POST_IO +RET(12) +} + +// SUBQ +OPCODE(0x5160) +{ + u32 adr, res; + u32 src, dst; + + src = (((Opcode >> 9) - 1) & 7) + 1; + adr = AREG((Opcode >> 0) & 7) - 2; + AREG((Opcode >> 0) & 7) = adr; + PRE_IO + READ_WORD_F(adr, dst) + res = dst - src; + flag_V = ((src ^ dst) & (res ^ dst)) >> 8; + flag_N = flag_X = flag_C = res >> 8; + flag_NotZ = res & 0xFFFF; + WRITE_WORD_F(adr, res) + POST_IO +RET(14) +} + +// SUBQ +OPCODE(0x5168) +{ + u32 adr, res; + u32 src, dst; + + src = (((Opcode >> 9) - 1) & 7) + 1; + FETCH_SWORD(adr); + adr += AREG((Opcode >> 0) & 7); + PRE_IO + READ_WORD_F(adr, dst) + res = dst - src; + flag_V = ((src ^ dst) & (res ^ dst)) >> 8; + flag_N = flag_X = flag_C = res >> 8; + flag_NotZ = res & 0xFFFF; + WRITE_WORD_F(adr, res) + POST_IO +RET(16) +} + +// SUBQ +OPCODE(0x5170) +{ + u32 adr, res; + u32 src, dst; + + src = (((Opcode >> 9) - 1) & 7) + 1; + adr = AREG((Opcode >> 0) & 7); + DECODE_EXT_WORD + PRE_IO + READ_WORD_F(adr, dst) + res = dst - src; + flag_V = ((src ^ dst) & (res ^ dst)) >> 8; + flag_N = flag_X = flag_C = res >> 8; + flag_NotZ = res & 0xFFFF; + WRITE_WORD_F(adr, res) + POST_IO +RET(18) +} + +// SUBQ +OPCODE(0x5178) +{ + u32 adr, res; + u32 src, dst; + + src = (((Opcode >> 9) - 1) & 7) + 1; + FETCH_SWORD(adr); + PRE_IO + READ_WORD_F(adr, dst) + res = dst - src; + flag_V = ((src ^ dst) & (res ^ dst)) >> 8; + flag_N = flag_X = flag_C = res >> 8; + flag_NotZ = res & 0xFFFF; + WRITE_WORD_F(adr, res) + POST_IO +RET(16) +} + +// SUBQ +OPCODE(0x5179) +{ + u32 adr, res; + u32 src, dst; + + src = (((Opcode >> 9) - 1) & 7) + 1; + FETCH_LONG(adr); + PRE_IO + READ_WORD_F(adr, dst) + res = dst - src; + flag_V = ((src ^ dst) & (res ^ dst)) >> 8; + flag_N = flag_X = flag_C = res >> 8; + flag_NotZ = res & 0xFFFF; + WRITE_WORD_F(adr, res) + POST_IO +RET(20) +} + +// SUBQ +OPCODE(0x515F) +{ + u32 adr, res; + u32 src, dst; + + src = (((Opcode >> 9) - 1) & 7) + 1; + adr = AREG(7); + AREG(7) += 2; + PRE_IO + READ_WORD_F(adr, dst) + res = dst - src; + flag_V = ((src ^ dst) & (res ^ dst)) >> 8; + flag_N = flag_X = flag_C = res >> 8; + flag_NotZ = res & 0xFFFF; + WRITE_WORD_F(adr, res) + POST_IO +RET(12) +} + +// SUBQ +OPCODE(0x5167) +{ + u32 adr, res; + u32 src, dst; + + src = (((Opcode >> 9) - 1) & 7) + 1; + adr = AREG(7) - 2; + AREG(7) = adr; + PRE_IO + READ_WORD_F(adr, dst) + res = dst - src; + flag_V = ((src ^ dst) & (res ^ dst)) >> 8; + flag_N = flag_X = flag_C = res >> 8; + flag_NotZ = res & 0xFFFF; + WRITE_WORD_F(adr, res) + POST_IO +RET(14) +} + +// SUBQ +OPCODE(0x5180) +{ + u32 adr, res; + u32 src, dst; + + src = (((Opcode >> 9) - 1) & 7) + 1; + dst = DREGu32((Opcode >> 0) & 7); + res = dst - src; + flag_NotZ = res; + flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23; + flag_V = ((src ^ dst) & (res ^ dst)) >> 24; + flag_N = res >> 24; + DREGu32((Opcode >> 0) & 7) = res; +RET(8) +} + +// SUBQ +OPCODE(0x5188) +{ + u32 adr, res; + u32 src, dst; + + src = (((Opcode >> 9) - 1) & 7) + 1; + dst = AREGu32((Opcode >> 0) & 7); + res = dst - src; + AREG((Opcode >> 0) & 7) = res; +RET(8) +} + +// SUBQ +OPCODE(0x5190) +{ + u32 adr, res; + u32 src, dst; + + src = (((Opcode >> 9) - 1) & 7) + 1; + adr = AREG((Opcode >> 0) & 7); + PRE_IO + READ_LONG_F(adr, dst) + res = dst - src; + flag_NotZ = res; + flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23; + flag_V = ((src ^ dst) & (res ^ dst)) >> 24; + flag_N = res >> 24; + WRITE_LONG_F(adr, res) + POST_IO +RET(20) +} + +// SUBQ +OPCODE(0x5198) +{ + u32 adr, res; + u32 src, dst; + + src = (((Opcode >> 9) - 1) & 7) + 1; + adr = AREG((Opcode >> 0) & 7); + AREG((Opcode >> 0) & 7) += 4; + PRE_IO + READ_LONG_F(adr, dst) + res = dst - src; + flag_NotZ = res; + flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23; + flag_V = ((src ^ dst) & (res ^ dst)) >> 24; + flag_N = res >> 24; + WRITE_LONG_F(adr, res) + POST_IO +RET(20) +} + +// SUBQ +OPCODE(0x51A0) +{ + u32 adr, res; + u32 src, dst; + + src = (((Opcode >> 9) - 1) & 7) + 1; + adr = AREG((Opcode >> 0) & 7) - 4; + AREG((Opcode >> 0) & 7) = adr; + PRE_IO + READ_LONG_F(adr, dst) + res = dst - src; + flag_NotZ = res; + flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23; + flag_V = ((src ^ dst) & (res ^ dst)) >> 24; + flag_N = res >> 24; + WRITE_LONG_F(adr, res) + POST_IO +RET(22) +} + +// SUBQ +OPCODE(0x51A8) +{ + u32 adr, res; + u32 src, dst; + + src = (((Opcode >> 9) - 1) & 7) + 1; + FETCH_SWORD(adr); + adr += AREG((Opcode >> 0) & 7); + PRE_IO + READ_LONG_F(adr, dst) + res = dst - src; + flag_NotZ = res; + flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23; + flag_V = ((src ^ dst) & (res ^ dst)) >> 24; + flag_N = res >> 24; + WRITE_LONG_F(adr, res) + POST_IO +RET(24) +} + +// SUBQ +OPCODE(0x51B0) +{ + u32 adr, res; + u32 src, dst; + + src = (((Opcode >> 9) - 1) & 7) + 1; + adr = AREG((Opcode >> 0) & 7); + DECODE_EXT_WORD + PRE_IO + READ_LONG_F(adr, dst) + res = dst - src; + flag_NotZ = res; + flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23; + flag_V = ((src ^ dst) & (res ^ dst)) >> 24; + flag_N = res >> 24; + WRITE_LONG_F(adr, res) + POST_IO +RET(26) +} + +// SUBQ +OPCODE(0x51B8) +{ + u32 adr, res; + u32 src, dst; + + src = (((Opcode >> 9) - 1) & 7) + 1; + FETCH_SWORD(adr); + PRE_IO + READ_LONG_F(adr, dst) + res = dst - src; + flag_NotZ = res; + flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23; + flag_V = ((src ^ dst) & (res ^ dst)) >> 24; + flag_N = res >> 24; + WRITE_LONG_F(adr, res) + POST_IO +RET(24) +} + +// SUBQ +OPCODE(0x51B9) +{ + u32 adr, res; + u32 src, dst; + + src = (((Opcode >> 9) - 1) & 7) + 1; + FETCH_LONG(adr); + PRE_IO + READ_LONG_F(adr, dst) + res = dst - src; + flag_NotZ = res; + flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23; + flag_V = ((src ^ dst) & (res ^ dst)) >> 24; + flag_N = res >> 24; + WRITE_LONG_F(adr, res) + POST_IO +RET(28) +} + +// SUBQ +OPCODE(0x519F) +{ + u32 adr, res; + u32 src, dst; + + src = (((Opcode >> 9) - 1) & 7) + 1; + adr = AREG(7); + AREG(7) += 4; + PRE_IO + READ_LONG_F(adr, dst) + res = dst - src; + flag_NotZ = res; + flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23; + flag_V = ((src ^ dst) & (res ^ dst)) >> 24; + flag_N = res >> 24; + WRITE_LONG_F(adr, res) + POST_IO +RET(20) +} + +// SUBQ +OPCODE(0x51A7) +{ + u32 adr, res; + u32 src, dst; + + src = (((Opcode >> 9) - 1) & 7) + 1; + adr = AREG(7) - 4; + AREG(7) = adr; + PRE_IO + READ_LONG_F(adr, dst) + res = dst - src; + flag_NotZ = res; + flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23; + flag_V = ((src ^ dst) & (res ^ dst)) >> 24; + flag_N = res >> 24; + WRITE_LONG_F(adr, res) + POST_IO +RET(22) +} + +// BCC +OPCODE(0x6201) +{ + u32 adr, res; + u32 src, dst; + + if (flag_NotZ && (!(flag_C & 0x100))) + { + PC += ((s8)(Opcode & 0xFE)) >> 1; + m68kcontext.io_cycle_counter -= 2; + } +RET(8) +} + +// BCC +OPCODE(0x6301) +{ + u32 adr, res; + u32 src, dst; + + if ((!flag_NotZ) || (flag_C & 0x100)) + { + PC += ((s8)(Opcode & 0xFE)) >> 1; + m68kcontext.io_cycle_counter -= 2; + } +RET(8) +} + +// BCC +OPCODE(0x6401) +{ + u32 adr, res; + u32 src, dst; + + if (!(flag_C & 0x100)) + { + PC += ((s8)(Opcode & 0xFE)) >> 1; + m68kcontext.io_cycle_counter -= 2; + } +RET(8) +} + +// BCC +OPCODE(0x6501) +{ + u32 adr, res; + u32 src, dst; + + if (flag_C & 0x100) + { + PC += ((s8)(Opcode & 0xFE)) >> 1; + m68kcontext.io_cycle_counter -= 2; + } +RET(8) +} + +// BCC +OPCODE(0x6601) +{ + u32 adr, res; + u32 src, dst; + + if (flag_NotZ) + { + PC += ((s8)(Opcode & 0xFE)) >> 1; + m68kcontext.io_cycle_counter -= 2; + } +RET(8) +} + +// BCC +OPCODE(0x6701) +{ + u32 adr, res; + u32 src, dst; + + if (!flag_NotZ) + { + PC += ((s8)(Opcode & 0xFE)) >> 1; + m68kcontext.io_cycle_counter -= 2; + } +RET(8) +} + +// BCC +OPCODE(0x6801) +{ + u32 adr, res; + u32 src, dst; + + if (!(flag_V & 0x80)) + { + PC += ((s8)(Opcode & 0xFE)) >> 1; + m68kcontext.io_cycle_counter -= 2; + } +RET(8) +} + +// BCC +OPCODE(0x6901) +{ + u32 adr, res; + u32 src, dst; + + if (flag_V & 0x80) + { + PC += ((s8)(Opcode & 0xFE)) >> 1; + m68kcontext.io_cycle_counter -= 2; + } +RET(8) +} + +// BCC +OPCODE(0x6A01) +{ + u32 adr, res; + u32 src, dst; + + if (!(flag_N & 0x80)) + { + PC += ((s8)(Opcode & 0xFE)) >> 1; + m68kcontext.io_cycle_counter -= 2; + } +RET(8) +} + +// BCC +OPCODE(0x6B01) +{ + u32 adr, res; + u32 src, dst; + + if (flag_N & 0x80) + { + PC += ((s8)(Opcode & 0xFE)) >> 1; + m68kcontext.io_cycle_counter -= 2; + } +RET(8) +} + +// BCC +OPCODE(0x6C01) +{ + u32 adr, res; + u32 src, dst; + + if (!((flag_N ^ flag_V) & 0x80)) + { + PC += ((s8)(Opcode & 0xFE)) >> 1; + m68kcontext.io_cycle_counter -= 2; + } +RET(8) +} + +// BCC +OPCODE(0x6D01) +{ + u32 adr, res; + u32 src, dst; + + if ((flag_N ^ flag_V) & 0x80) + { + PC += ((s8)(Opcode & 0xFE)) >> 1; + m68kcontext.io_cycle_counter -= 2; + } +RET(8) +} + +// BCC +OPCODE(0x6E01) +{ + u32 adr, res; + u32 src, dst; + + if (flag_NotZ && (!((flag_N ^ flag_V) & 0x80))) + { + PC += ((s8)(Opcode & 0xFE)) >> 1; + m68kcontext.io_cycle_counter -= 2; + } +RET(8) +} + +// BCC +OPCODE(0x6F01) +{ + u32 adr, res; + u32 src, dst; + + if ((!flag_NotZ) || ((flag_N ^ flag_V) & 0x80)) + { + PC += ((s8)(Opcode & 0xFE)) >> 1; + m68kcontext.io_cycle_counter -= 2; + } +RET(8) +} + +// BCC16 +OPCODE(0x6200) +{ + u32 adr, res; + u32 src, dst; + + if (flag_NotZ && (!(flag_C & 0x100))) + { + u32 newPC; + + newPC = (u32)(PC) - BasePC; + newPC += GET_SWORD; + SET_PC(newPC); + CHECK_BRANCH_EXCEPTION(newPC) + RET(10) + } + PC++; +RET(12) +} + +// BCC16 +OPCODE(0x6300) +{ + u32 adr, res; + u32 src, dst; + + if ((!flag_NotZ) || (flag_C & 0x100)) + { + u32 newPC; + + newPC = (u32)(PC) - BasePC; + newPC += GET_SWORD; + SET_PC(newPC); + CHECK_BRANCH_EXCEPTION(newPC) + RET(10) + } + PC++; +RET(12) +} + +// BCC16 +OPCODE(0x6400) +{ + u32 adr, res; + u32 src, dst; + + if (!(flag_C & 0x100)) + { + u32 newPC; + + newPC = (u32)(PC) - BasePC; + newPC += GET_SWORD; + SET_PC(newPC); + CHECK_BRANCH_EXCEPTION(newPC) + RET(10) + } + PC++; +RET(12) +} + +// BCC16 +OPCODE(0x6500) +{ + u32 adr, res; + u32 src, dst; + + if (flag_C & 0x100) + { + u32 newPC; + + newPC = (u32)(PC) - BasePC; + newPC += GET_SWORD; + SET_PC(newPC); + CHECK_BRANCH_EXCEPTION(newPC) + RET(10) + } + PC++; +RET(12) +} + +// BCC16 +OPCODE(0x6600) +{ + u32 adr, res; + u32 src, dst; + + if (flag_NotZ) + { + u32 newPC; + + newPC = (u32)(PC) - BasePC; + newPC += GET_SWORD; + SET_PC(newPC); + CHECK_BRANCH_EXCEPTION(newPC) + RET(10) + } + PC++; +RET(12) +} + +// BCC16 +OPCODE(0x6700) +{ + u32 adr, res; + u32 src, dst; + + if (!flag_NotZ) + { + u32 newPC; + + newPC = (u32)(PC) - BasePC; + newPC += GET_SWORD; + SET_PC(newPC); + CHECK_BRANCH_EXCEPTION(newPC) + RET(10) + } + PC++; +RET(12) +} + +// BCC16 +OPCODE(0x6800) +{ + u32 adr, res; + u32 src, dst; + + if (!(flag_V & 0x80)) + { + u32 newPC; + + newPC = (u32)(PC) - BasePC; + newPC += GET_SWORD; + SET_PC(newPC); + CHECK_BRANCH_EXCEPTION(newPC) + RET(10) + } + PC++; +RET(12) +} + +// BCC16 +OPCODE(0x6900) +{ + u32 adr, res; + u32 src, dst; + + if (flag_V & 0x80) + { + u32 newPC; + + newPC = (u32)(PC) - BasePC; + newPC += GET_SWORD; + SET_PC(newPC); + CHECK_BRANCH_EXCEPTION(newPC) + RET(10) + } + PC++; +RET(12) +} + +// BCC16 +OPCODE(0x6A00) +{ + u32 adr, res; + u32 src, dst; + + if (!(flag_N & 0x80)) + { + u32 newPC; + + newPC = (u32)(PC) - BasePC; + newPC += GET_SWORD; + SET_PC(newPC); + CHECK_BRANCH_EXCEPTION(newPC) + RET(10) + } + PC++; +RET(12) +} + +// BCC16 +OPCODE(0x6B00) +{ + u32 adr, res; + u32 src, dst; + + if (flag_N & 0x80) + { + u32 newPC; + + newPC = (u32)(PC) - BasePC; + newPC += GET_SWORD; + SET_PC(newPC); + CHECK_BRANCH_EXCEPTION(newPC) + RET(10) + } + PC++; +RET(12) +} + +// BCC16 +OPCODE(0x6C00) +{ + u32 adr, res; + u32 src, dst; + + if (!((flag_N ^ flag_V) & 0x80)) + { + u32 newPC; + + newPC = (u32)(PC) - BasePC; + newPC += GET_SWORD; + SET_PC(newPC); + CHECK_BRANCH_EXCEPTION(newPC) + RET(10) + } + PC++; +RET(12) +} + +// BCC16 +OPCODE(0x6D00) +{ + u32 adr, res; + u32 src, dst; + + if ((flag_N ^ flag_V) & 0x80) + { + u32 newPC; + + newPC = (u32)(PC) - BasePC; + newPC += GET_SWORD; + SET_PC(newPC); + CHECK_BRANCH_EXCEPTION(newPC) + RET(10) + } + PC++; +RET(12) +} + +// BCC16 +OPCODE(0x6E00) +{ + u32 adr, res; + u32 src, dst; + + if (flag_NotZ && (!((flag_N ^ flag_V) & 0x80))) + { + u32 newPC; + + newPC = (u32)(PC) - BasePC; + newPC += GET_SWORD; + SET_PC(newPC); + CHECK_BRANCH_EXCEPTION(newPC) + RET(10) + } + PC++; +RET(12) +} + +// BCC16 +OPCODE(0x6F00) +{ + u32 adr, res; + u32 src, dst; + + if ((!flag_NotZ) || ((flag_N ^ flag_V) & 0x80)) + { + u32 newPC; + + newPC = (u32)(PC) - BasePC; + newPC += GET_SWORD; + SET_PC(newPC); + CHECK_BRANCH_EXCEPTION(newPC) + RET(10) + } + PC++; +RET(12) +} + +// BRA +OPCODE(0x6001) +{ +#ifdef FAMEC_CHECK_BRANCHES + u32 newPC = (u32)(PC) - BasePC; + s8 offs=Opcode; + newPC += offs; + SET_PC(newPC); + CHECK_BRANCH_EXCEPTION(offs) +#else + PC += ((s8)(Opcode & 0xFE)) >> 1; +#endif +RET(10) +} + +// BRA16 +OPCODE(0x6000) +{ + u32 adr, res; + u32 src, dst; + + { + u32 newPC; + + newPC = (u32)(PC) - BasePC; + newPC += GET_SWORD; + SET_PC(newPC); + CHECK_BRANCH_EXCEPTION(newPC) + } +RET(10) +} + +// BSR +OPCODE(0x6101) +{ + u32 adr, res; + u32 src, dst; + u32 oldPC; + s8 offs; + + PRE_IO + + oldPC = (u32)(PC) - BasePC; + PUSH_32_F(oldPC) +#ifdef FAMEC_CHECK_BRANCHES + offs = Opcode; + oldPC += offs; + SET_PC(oldPC); + CHECK_BRANCH_EXCEPTION(offs) +#else + PC += ((s8)(Opcode & 0xFE)) >> 1; +#endif + POST_IO +RET(18) +} + +// BSR16 +OPCODE(0x6100) +{ + u32 adr, res; + u32 src, dst; + + PRE_IO + { + u32 oldPC, newPC; + + newPC = (u32)(PC) - BasePC; + oldPC = newPC + 2; + PUSH_32_F(oldPC) + newPC += GET_SWORD; + SET_PC(newPC); + CHECK_BRANCH_EXCEPTION(newPC) + } + POST_IO +RET(18) +} + +// MOVEQ +OPCODE(0x7000) +{ + u32 adr, res; + u32 src, dst; + + res = (s32)(s8)Opcode; + flag_C = flag_V = 0; + flag_N = flag_NotZ = res; + DREGu32((Opcode >> 9) & 7) = res; +RET(4) +} + +// ORaD +OPCODE(0x8000) +{ + u32 adr, res; + u32 src, dst; + + src = DREGu8((Opcode >> 0) & 7); + res = DREGu8((Opcode >> 9) & 7); + res |= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + DREGu8((Opcode >> 9) & 7) = res; +RET(4) +} + +// ORaD +OPCODE(0x8010) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + PRE_IO + READ_BYTE_F(adr, src) + res = DREGu8((Opcode >> 9) & 7); + res |= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + DREGu8((Opcode >> 9) & 7) = res; + POST_IO +RET(8) +} + +// ORaD +OPCODE(0x8018) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + AREG((Opcode >> 0) & 7) += 1; + PRE_IO + READ_BYTE_F(adr, src) + res = DREGu8((Opcode >> 9) & 7); + res |= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + DREGu8((Opcode >> 9) & 7) = res; + POST_IO +RET(8) +} + +// ORaD +OPCODE(0x8020) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7) - 1; + AREG((Opcode >> 0) & 7) = adr; + PRE_IO + READ_BYTE_F(adr, src) + res = DREGu8((Opcode >> 9) & 7); + res |= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + DREGu8((Opcode >> 9) & 7) = res; + POST_IO +RET(10) +} + +// ORaD +OPCODE(0x8028) +{ + u32 adr, res; + u32 src, dst; + + FETCH_SWORD(adr); + adr += AREG((Opcode >> 0) & 7); + PRE_IO + READ_BYTE_F(adr, src) + res = DREGu8((Opcode >> 9) & 7); + res |= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + DREGu8((Opcode >> 9) & 7) = res; + POST_IO +RET(12) +} + +// ORaD +OPCODE(0x8030) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + DECODE_EXT_WORD + PRE_IO + READ_BYTE_F(adr, src) + res = DREGu8((Opcode >> 9) & 7); + res |= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + DREGu8((Opcode >> 9) & 7) = res; + POST_IO +RET(14) +} + +// ORaD +OPCODE(0x8038) +{ + u32 adr, res; + u32 src, dst; + + FETCH_SWORD(adr); + PRE_IO + READ_BYTE_F(adr, src) + res = DREGu8((Opcode >> 9) & 7); + res |= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + DREGu8((Opcode >> 9) & 7) = res; + POST_IO +RET(12) +} + +// ORaD +OPCODE(0x8039) +{ + u32 adr, res; + u32 src, dst; + + FETCH_LONG(adr); + PRE_IO + READ_BYTE_F(adr, src) + res = DREGu8((Opcode >> 9) & 7); + res |= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + DREGu8((Opcode >> 9) & 7) = res; + POST_IO +RET(16) +} + +// ORaD +OPCODE(0x803A) +{ + u32 adr, res; + u32 src, dst; + + adr = GET_SWORD + ((u32)(PC) - BasePC); + PC++; + PRE_IO + READ_BYTE_F(adr, src) + res = DREGu8((Opcode >> 9) & 7); + res |= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + DREGu8((Opcode >> 9) & 7) = res; + POST_IO +RET(12) +} + +// ORaD +OPCODE(0x803B) +{ + u32 adr, res; + u32 src, dst; + + adr = (u32)(PC) - BasePC; + DECODE_EXT_WORD + PRE_IO + READ_BYTE_F(adr, src) + res = DREGu8((Opcode >> 9) & 7); + res |= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + DREGu8((Opcode >> 9) & 7) = res; + POST_IO +RET(14) +} + +// ORaD +OPCODE(0x803C) +{ + u32 adr, res; + u32 src, dst; + + FETCH_BYTE(src); + res = DREGu8((Opcode >> 9) & 7); + res |= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + DREGu8((Opcode >> 9) & 7) = res; +RET(8) +} + +// ORaD +OPCODE(0x801F) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7); + AREG(7) += 2; + PRE_IO + READ_BYTE_F(adr, src) + res = DREGu8((Opcode >> 9) & 7); + res |= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + DREGu8((Opcode >> 9) & 7) = res; + POST_IO +RET(8) +} + +// ORaD +OPCODE(0x8027) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7) - 2; + AREG(7) = adr; + PRE_IO + READ_BYTE_F(adr, src) + res = DREGu8((Opcode >> 9) & 7); + res |= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + DREGu8((Opcode >> 9) & 7) = res; + POST_IO +RET(10) +} + +// ORaD +OPCODE(0x8040) +{ + u32 adr, res; + u32 src, dst; + + src = DREGu16((Opcode >> 0) & 7); + res = DREGu16((Opcode >> 9) & 7); + res |= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + DREGu16((Opcode >> 9) & 7) = res; +RET(4) +} + +// ORaD +OPCODE(0x8050) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + PRE_IO + READ_WORD_F(adr, src) + res = DREGu16((Opcode >> 9) & 7); + res |= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + DREGu16((Opcode >> 9) & 7) = res; + POST_IO +RET(8) +} + +// ORaD +OPCODE(0x8058) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + AREG((Opcode >> 0) & 7) += 2; + PRE_IO + READ_WORD_F(adr, src) + res = DREGu16((Opcode >> 9) & 7); + res |= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + DREGu16((Opcode >> 9) & 7) = res; + POST_IO +RET(8) +} + +// ORaD +OPCODE(0x8060) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7) - 2; + AREG((Opcode >> 0) & 7) = adr; + PRE_IO + READ_WORD_F(adr, src) + res = DREGu16((Opcode >> 9) & 7); + res |= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + DREGu16((Opcode >> 9) & 7) = res; + POST_IO +RET(10) +} + +// ORaD +OPCODE(0x8068) +{ + u32 adr, res; + u32 src, dst; + + FETCH_SWORD(adr); + adr += AREG((Opcode >> 0) & 7); + PRE_IO + READ_WORD_F(adr, src) + res = DREGu16((Opcode >> 9) & 7); + res |= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + DREGu16((Opcode >> 9) & 7) = res; + POST_IO +RET(12) +} + +// ORaD +OPCODE(0x8070) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + DECODE_EXT_WORD + PRE_IO + READ_WORD_F(adr, src) + res = DREGu16((Opcode >> 9) & 7); + res |= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + DREGu16((Opcode >> 9) & 7) = res; + POST_IO +RET(14) +} + +// ORaD +OPCODE(0x8078) +{ + u32 adr, res; + u32 src, dst; + + FETCH_SWORD(adr); + PRE_IO + READ_WORD_F(adr, src) + res = DREGu16((Opcode >> 9) & 7); + res |= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + DREGu16((Opcode >> 9) & 7) = res; + POST_IO +RET(12) +} + +// ORaD +OPCODE(0x8079) +{ + u32 adr, res; + u32 src, dst; + + FETCH_LONG(adr); + PRE_IO + READ_WORD_F(adr, src) + res = DREGu16((Opcode >> 9) & 7); + res |= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + DREGu16((Opcode >> 9) & 7) = res; + POST_IO +RET(16) +} + +// ORaD +OPCODE(0x807A) +{ + u32 adr, res; + u32 src, dst; + + adr = GET_SWORD + ((u32)(PC) - BasePC); + PC++; + PRE_IO + READ_WORD_F(adr, src) + res = DREGu16((Opcode >> 9) & 7); + res |= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + DREGu16((Opcode >> 9) & 7) = res; + POST_IO +RET(12) +} + +// ORaD +OPCODE(0x807B) +{ + u32 adr, res; + u32 src, dst; + + adr = (u32)(PC) - BasePC; + DECODE_EXT_WORD + PRE_IO + READ_WORD_F(adr, src) + res = DREGu16((Opcode >> 9) & 7); + res |= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + DREGu16((Opcode >> 9) & 7) = res; + POST_IO +RET(14) +} + +// ORaD +OPCODE(0x807C) +{ + u32 adr, res; + u32 src, dst; + + FETCH_WORD(src); + res = DREGu16((Opcode >> 9) & 7); + res |= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + DREGu16((Opcode >> 9) & 7) = res; +RET(8) +} + +// ORaD +OPCODE(0x805F) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7); + AREG(7) += 2; + PRE_IO + READ_WORD_F(adr, src) + res = DREGu16((Opcode >> 9) & 7); + res |= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + DREGu16((Opcode >> 9) & 7) = res; + POST_IO +RET(8) +} + +// ORaD +OPCODE(0x8067) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7) - 2; + AREG(7) = adr; + PRE_IO + READ_WORD_F(adr, src) + res = DREGu16((Opcode >> 9) & 7); + res |= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + DREGu16((Opcode >> 9) & 7) = res; + POST_IO +RET(10) +} + +// ORaD +OPCODE(0x8080) +{ + u32 adr, res; + u32 src, dst; + + src = DREGu32((Opcode >> 0) & 7); + res = DREGu32((Opcode >> 9) & 7); + res |= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + DREGu32((Opcode >> 9) & 7) = res; +RET(8) +} + +// ORaD +OPCODE(0x8090) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + PRE_IO + READ_LONG_F(adr, src) + res = DREGu32((Opcode >> 9) & 7); + res |= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + DREGu32((Opcode >> 9) & 7) = res; + POST_IO +RET(14) +} + +// ORaD +OPCODE(0x8098) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + AREG((Opcode >> 0) & 7) += 4; + PRE_IO + READ_LONG_F(adr, src) + res = DREGu32((Opcode >> 9) & 7); + res |= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + DREGu32((Opcode >> 9) & 7) = res; + POST_IO +RET(14) +} + +// ORaD +OPCODE(0x80A0) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7) - 4; + AREG((Opcode >> 0) & 7) = adr; + PRE_IO + READ_LONG_F(adr, src) + res = DREGu32((Opcode >> 9) & 7); + res |= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + DREGu32((Opcode >> 9) & 7) = res; + POST_IO +RET(16) +} + +// ORaD +OPCODE(0x80A8) +{ + u32 adr, res; + u32 src, dst; + + FETCH_SWORD(adr); + adr += AREG((Opcode >> 0) & 7); + PRE_IO + READ_LONG_F(adr, src) + res = DREGu32((Opcode >> 9) & 7); + res |= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + DREGu32((Opcode >> 9) & 7) = res; + POST_IO +RET(18) +} + +// ORaD +OPCODE(0x80B0) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + DECODE_EXT_WORD + PRE_IO + READ_LONG_F(adr, src) + res = DREGu32((Opcode >> 9) & 7); + res |= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + DREGu32((Opcode >> 9) & 7) = res; + POST_IO +RET(20) +} + +// ORaD +OPCODE(0x80B8) +{ + u32 adr, res; + u32 src, dst; + + FETCH_SWORD(adr); + PRE_IO + READ_LONG_F(adr, src) + res = DREGu32((Opcode >> 9) & 7); + res |= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + DREGu32((Opcode >> 9) & 7) = res; + POST_IO +RET(18) +} + +// ORaD +OPCODE(0x80B9) +{ + u32 adr, res; + u32 src, dst; + + FETCH_LONG(adr); + PRE_IO + READ_LONG_F(adr, src) + res = DREGu32((Opcode >> 9) & 7); + res |= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + DREGu32((Opcode >> 9) & 7) = res; + POST_IO +RET(22) +} + +// ORaD +OPCODE(0x80BA) +{ + u32 adr, res; + u32 src, dst; + + adr = GET_SWORD + ((u32)(PC) - BasePC); + PC++; + PRE_IO + READ_LONG_F(adr, src) + res = DREGu32((Opcode >> 9) & 7); + res |= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + DREGu32((Opcode >> 9) & 7) = res; + POST_IO +RET(18) +} + +// ORaD +OPCODE(0x80BB) +{ + u32 adr, res; + u32 src, dst; + + adr = (u32)(PC) - BasePC; + DECODE_EXT_WORD + PRE_IO + READ_LONG_F(adr, src) + res = DREGu32((Opcode >> 9) & 7); + res |= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + DREGu32((Opcode >> 9) & 7) = res; + POST_IO +RET(20) +} + +// ORaD +OPCODE(0x80BC) +{ + u32 adr, res; + u32 src, dst; + + FETCH_LONG(src); + res = DREGu32((Opcode >> 9) & 7); + res |= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + DREGu32((Opcode >> 9) & 7) = res; +RET(16) +} + +// ORaD +OPCODE(0x809F) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7); + AREG(7) += 4; + PRE_IO + READ_LONG_F(adr, src) + res = DREGu32((Opcode >> 9) & 7); + res |= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + DREGu32((Opcode >> 9) & 7) = res; + POST_IO +RET(14) +} + +// ORaD +OPCODE(0x80A7) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7) - 4; + AREG(7) = adr; + PRE_IO + READ_LONG_F(adr, src) + res = DREGu32((Opcode >> 9) & 7); + res |= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + DREGu32((Opcode >> 9) & 7) = res; + POST_IO +RET(16) +} + +// ORDa +OPCODE(0x8110) +{ + u32 adr, res; + u32 src, dst; + + src = DREGu8((Opcode >> 9) & 7); + adr = AREG((Opcode >> 0) & 7); + PRE_IO + READ_BYTE_F(adr, res) + res |= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + WRITE_BYTE_F(adr, res) + POST_IO +RET(12) +} + +// ORDa +OPCODE(0x8118) +{ + u32 adr, res; + u32 src, dst; + + src = DREGu8((Opcode >> 9) & 7); + adr = AREG((Opcode >> 0) & 7); + AREG((Opcode >> 0) & 7) += 1; + PRE_IO + READ_BYTE_F(adr, res) + res |= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + WRITE_BYTE_F(adr, res) + POST_IO +RET(12) +} + +// ORDa +OPCODE(0x8120) +{ + u32 adr, res; + u32 src, dst; + + src = DREGu8((Opcode >> 9) & 7); + adr = AREG((Opcode >> 0) & 7) - 1; + AREG((Opcode >> 0) & 7) = adr; + PRE_IO + READ_BYTE_F(adr, res) + res |= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + WRITE_BYTE_F(adr, res) + POST_IO +RET(14) +} + +// ORDa +OPCODE(0x8128) +{ + u32 adr, res; + u32 src, dst; + + src = DREGu8((Opcode >> 9) & 7); + FETCH_SWORD(adr); + adr += AREG((Opcode >> 0) & 7); + PRE_IO + READ_BYTE_F(adr, res) + res |= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + WRITE_BYTE_F(adr, res) + POST_IO +RET(16) +} + +// ORDa +OPCODE(0x8130) +{ + u32 adr, res; + u32 src, dst; + + src = DREGu8((Opcode >> 9) & 7); + adr = AREG((Opcode >> 0) & 7); + DECODE_EXT_WORD + PRE_IO + READ_BYTE_F(adr, res) + res |= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + WRITE_BYTE_F(adr, res) + POST_IO +RET(18) +} + +// ORDa +OPCODE(0x8138) +{ + u32 adr, res; + u32 src, dst; + + src = DREGu8((Opcode >> 9) & 7); + FETCH_SWORD(adr); + PRE_IO + READ_BYTE_F(adr, res) + res |= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + WRITE_BYTE_F(adr, res) + POST_IO +RET(16) +} + +// ORDa +OPCODE(0x8139) +{ + u32 adr, res; + u32 src, dst; + + src = DREGu8((Opcode >> 9) & 7); + FETCH_LONG(adr); + PRE_IO + READ_BYTE_F(adr, res) + res |= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + WRITE_BYTE_F(adr, res) + POST_IO +RET(20) +} + +// ORDa +OPCODE(0x811F) +{ + u32 adr, res; + u32 src, dst; + + src = DREGu8((Opcode >> 9) & 7); + adr = AREG(7); + AREG(7) += 2; + PRE_IO + READ_BYTE_F(adr, res) + res |= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + WRITE_BYTE_F(adr, res) + POST_IO +RET(12) +} + +// ORDa +OPCODE(0x8127) +{ + u32 adr, res; + u32 src, dst; + + src = DREGu8((Opcode >> 9) & 7); + adr = AREG(7) - 2; + AREG(7) = adr; + PRE_IO + READ_BYTE_F(adr, res) + res |= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + WRITE_BYTE_F(adr, res) + POST_IO +RET(14) +} + +// ORDa +OPCODE(0x8150) +{ + u32 adr, res; + u32 src, dst; + + src = DREGu16((Opcode >> 9) & 7); + adr = AREG((Opcode >> 0) & 7); + PRE_IO + READ_WORD_F(adr, res) + res |= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + WRITE_WORD_F(adr, res) + POST_IO +RET(12) +} + +// ORDa +OPCODE(0x8158) +{ + u32 adr, res; + u32 src, dst; + + src = DREGu16((Opcode >> 9) & 7); + adr = AREG((Opcode >> 0) & 7); + AREG((Opcode >> 0) & 7) += 2; + PRE_IO + READ_WORD_F(adr, res) + res |= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + WRITE_WORD_F(adr, res) + POST_IO +RET(12) +} + +// ORDa +OPCODE(0x8160) +{ + u32 adr, res; + u32 src, dst; + + src = DREGu16((Opcode >> 9) & 7); + adr = AREG((Opcode >> 0) & 7) - 2; + AREG((Opcode >> 0) & 7) = adr; + PRE_IO + READ_WORD_F(adr, res) + res |= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + WRITE_WORD_F(adr, res) + POST_IO +RET(14) +} + +// ORDa +OPCODE(0x8168) +{ + u32 adr, res; + u32 src, dst; + + src = DREGu16((Opcode >> 9) & 7); + FETCH_SWORD(adr); + adr += AREG((Opcode >> 0) & 7); + PRE_IO + READ_WORD_F(adr, res) + res |= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + WRITE_WORD_F(adr, res) + POST_IO +RET(16) +} + +// ORDa +OPCODE(0x8170) +{ + u32 adr, res; + u32 src, dst; + + src = DREGu16((Opcode >> 9) & 7); + adr = AREG((Opcode >> 0) & 7); + DECODE_EXT_WORD + PRE_IO + READ_WORD_F(adr, res) + res |= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + WRITE_WORD_F(adr, res) + POST_IO +RET(18) +} + +// ORDa +OPCODE(0x8178) +{ + u32 adr, res; + u32 src, dst; + + src = DREGu16((Opcode >> 9) & 7); + FETCH_SWORD(adr); + PRE_IO + READ_WORD_F(adr, res) + res |= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + WRITE_WORD_F(adr, res) + POST_IO +RET(16) +} + +// ORDa +OPCODE(0x8179) +{ + u32 adr, res; + u32 src, dst; + + src = DREGu16((Opcode >> 9) & 7); + FETCH_LONG(adr); + PRE_IO + READ_WORD_F(adr, res) + res |= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + WRITE_WORD_F(adr, res) + POST_IO +RET(20) +} + +// ORDa +OPCODE(0x815F) +{ + u32 adr, res; + u32 src, dst; + + src = DREGu16((Opcode >> 9) & 7); + adr = AREG(7); + AREG(7) += 2; + PRE_IO + READ_WORD_F(adr, res) + res |= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + WRITE_WORD_F(adr, res) + POST_IO +RET(12) +} + +// ORDa +OPCODE(0x8167) +{ + u32 adr, res; + u32 src, dst; + + src = DREGu16((Opcode >> 9) & 7); + adr = AREG(7) - 2; + AREG(7) = adr; + PRE_IO + READ_WORD_F(adr, res) + res |= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + WRITE_WORD_F(adr, res) + POST_IO +RET(14) +} + +// ORDa +OPCODE(0x8190) +{ + u32 adr, res; + u32 src, dst; + + src = DREGu32((Opcode >> 9) & 7); + adr = AREG((Opcode >> 0) & 7); + PRE_IO + READ_LONG_F(adr, res) + res |= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + WRITE_LONG_F(adr, res) + POST_IO +RET(20) +} + +// ORDa +OPCODE(0x8198) +{ + u32 adr, res; + u32 src, dst; + + src = DREGu32((Opcode >> 9) & 7); + adr = AREG((Opcode >> 0) & 7); + AREG((Opcode >> 0) & 7) += 4; + PRE_IO + READ_LONG_F(adr, res) + res |= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + WRITE_LONG_F(adr, res) + POST_IO +RET(20) +} + +// ORDa +OPCODE(0x81A0) +{ + u32 adr, res; + u32 src, dst; + + src = DREGu32((Opcode >> 9) & 7); + adr = AREG((Opcode >> 0) & 7) - 4; + AREG((Opcode >> 0) & 7) = adr; + PRE_IO + READ_LONG_F(adr, res) + res |= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + WRITE_LONG_F(adr, res) + POST_IO +RET(22) +} + +// ORDa +OPCODE(0x81A8) +{ + u32 adr, res; + u32 src, dst; + + src = DREGu32((Opcode >> 9) & 7); + FETCH_SWORD(adr); + adr += AREG((Opcode >> 0) & 7); + PRE_IO + READ_LONG_F(adr, res) + res |= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + WRITE_LONG_F(adr, res) + POST_IO +RET(24) +} + +// ORDa +OPCODE(0x81B0) +{ + u32 adr, res; + u32 src, dst; + + src = DREGu32((Opcode >> 9) & 7); + adr = AREG((Opcode >> 0) & 7); + DECODE_EXT_WORD + PRE_IO + READ_LONG_F(adr, res) + res |= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + WRITE_LONG_F(adr, res) + POST_IO +RET(26) +} + +// ORDa +OPCODE(0x81B8) +{ + u32 adr, res; + u32 src, dst; + + src = DREGu32((Opcode >> 9) & 7); + FETCH_SWORD(adr); + PRE_IO + READ_LONG_F(adr, res) + res |= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + WRITE_LONG_F(adr, res) + POST_IO +RET(24) +} + +// ORDa +OPCODE(0x81B9) +{ + u32 adr, res; + u32 src, dst; + + src = DREGu32((Opcode >> 9) & 7); + FETCH_LONG(adr); + PRE_IO + READ_LONG_F(adr, res) + res |= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + WRITE_LONG_F(adr, res) + POST_IO +RET(28) +} + +// ORDa +OPCODE(0x819F) +{ + u32 adr, res; + u32 src, dst; + + src = DREGu32((Opcode >> 9) & 7); + adr = AREG(7); + AREG(7) += 4; + PRE_IO + READ_LONG_F(adr, res) + res |= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + WRITE_LONG_F(adr, res) + POST_IO +RET(20) +} + +// ORDa +OPCODE(0x81A7) +{ + u32 adr, res; + u32 src, dst; + + src = DREGu32((Opcode >> 9) & 7); + adr = AREG(7) - 4; + AREG(7) = adr; + PRE_IO + READ_LONG_F(adr, res) + res |= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + WRITE_LONG_F(adr, res) + POST_IO +RET(22) +} + +// SBCD +OPCODE(0x8100) +{ + u32 adr, res; + u32 src, dst; + + src = DREGu8((Opcode >> 0) & 7); + dst = DREGu8((Opcode >> 9) & 7); + res = (dst & 0xF) - (src & 0xF) - ((flag_X >> M68K_SR_X_SFT) & 1); + if (res > 9) res -= 6; + res += (dst & 0xF0) - (src & 0xF0); + if (res > 0x99) + { + res += 0xA0; + flag_X = flag_C = M68K_SR_C; + } + else flag_X = flag_C = 0; + flag_NotZ |= res & 0xFF; + flag_N = res; + DREGu8((Opcode >> 9) & 7) = res; +RET(6) +} + +// SBCDM +OPCODE(0x8108) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7) - 1; + AREG((Opcode >> 0) & 7) = adr; + PRE_IO + READ_BYTE_F(adr, src) + adr = AREG((Opcode >> 9) & 7) - 1; + AREG((Opcode >> 9) & 7) = adr; + READ_BYTE_F(adr, dst) + res = (dst & 0xF) - (src & 0xF) - ((flag_X >> M68K_SR_X_SFT) & 1); + if (res > 9) res -= 6; + res += (dst & 0xF0) - (src & 0xF0); + if (res > 0x99) + { + res += 0xA0; + flag_X = flag_C = M68K_SR_C; + } + else flag_X = flag_C = 0; + flag_NotZ |= res & 0xFF; + flag_N = res; + WRITE_BYTE_F(adr, res) + POST_IO +RET(18) +} + +// SBCD7M +OPCODE(0x810F) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7) - 2; + AREG(7) = adr; + PRE_IO + READ_BYTE_F(adr, src) + adr = AREG((Opcode >> 9) & 7) - 1; + AREG((Opcode >> 9) & 7) = adr; + READ_BYTE_F(adr, dst) + res = (dst & 0xF) - (src & 0xF) - ((flag_X >> M68K_SR_X_SFT) & 1); + if (res > 9) res -= 6; + res += (dst & 0xF0) - (src & 0xF0); + if (res > 0x99) + { + res += 0xA0; + flag_X = flag_C = M68K_SR_C; + } + else flag_X = flag_C = 0; + flag_NotZ |= res & 0xFF; + flag_N = res; + WRITE_BYTE_F(adr, res) + POST_IO +RET(18) +} + +// SBCDM7 +OPCODE(0x8F08) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7) - 1; + AREG((Opcode >> 0) & 7) = adr; + PRE_IO + READ_BYTE_F(adr, src) + adr = AREG(7) - 2; + AREG(7) = adr; + READ_BYTE_F(adr, dst) + res = (dst & 0xF) - (src & 0xF) - ((flag_X >> M68K_SR_X_SFT) & 1); + if (res > 9) res -= 6; + res += (dst & 0xF0) - (src & 0xF0); + if (res > 0x99) + { + res += 0xA0; + flag_X = flag_C = M68K_SR_C; + } + else flag_X = flag_C = 0; + flag_NotZ |= res & 0xFF; + flag_N = res; + WRITE_BYTE_F(adr, res) + POST_IO +RET(18) +} + +// SBCD7M7 +OPCODE(0x8F0F) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7) - 2; + AREG(7) = adr; + PRE_IO + READ_BYTE_F(adr, src) + adr = AREG(7) - 2; + AREG(7) = adr; + READ_BYTE_F(adr, dst) + res = (dst & 0xF) - (src & 0xF) - ((flag_X >> M68K_SR_X_SFT) & 1); + if (res > 9) res -= 6; + res += (dst & 0xF0) - (src & 0xF0); + if (res > 0x99) + { + res += 0xA0; + flag_X = flag_C = M68K_SR_C; + } + else flag_X = flag_C = 0; + flag_NotZ |= res & 0xFF; + flag_N = res; + WRITE_BYTE_F(adr, res) + POST_IO +RET(18) +} + +// DIVU +OPCODE(0x80C0) +{ + u32 adr, res; + u32 src, dst; + + src = DREGu16((Opcode >> 0) & 7); + if (src == 0) + { + execute_exception(M68K_ZERO_DIVIDE_EX); +#ifdef USE_CYCLONE_TIMING_DIV +RET(140) +#else +RET(10) +#endif + } + dst = DREGu32((Opcode >> 9) & 7); + { + u32 q, r; + + q = dst / src; + r = dst % src; + + if (q & 0xFFFF0000) + { + flag_V = M68K_SR_V; +#ifdef USE_CYCLONE_TIMING_DIV +RET(140) +#else +RET(70) +#endif + } + q &= 0x0000FFFF; + flag_NotZ = q; + flag_N = q >> 8; + flag_V = flag_C = 0; + res = q | (r << 16); + DREGu32((Opcode >> 9) & 7) = res; + } +#ifdef USE_CYCLONE_TIMING_DIV +RET(140) +#else +RET(90) +#endif +} + +// DIVU +OPCODE(0x80D0) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + PRE_IO + READ_WORD_F(adr, src) + if (src == 0) + { + execute_exception(M68K_ZERO_DIVIDE_EX); +#ifdef USE_CYCLONE_TIMING_DIV +RET(144) +#else +RET(14) +#endif + } + dst = DREGu32((Opcode >> 9) & 7); + { + u32 q, r; + + q = dst / src; + r = dst % src; + + if (q & 0xFFFF0000) + { + flag_V = M68K_SR_V; +#ifdef USE_CYCLONE_TIMING_DIV +RET(144) +#else + RET(74) +#endif + } + q &= 0x0000FFFF; + flag_NotZ = q; + flag_N = q >> 8; + flag_V = flag_C = 0; + res = q | (r << 16); + DREGu32((Opcode >> 9) & 7) = res; + } +#ifdef USE_CYCLONE_TIMING_DIV +RET(144) +#else +RET(94) +#endif +} + +// DIVU +OPCODE(0x80D8) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + AREG((Opcode >> 0) & 7) += 2; + PRE_IO + READ_WORD_F(adr, src) + if (src == 0) + { + execute_exception(M68K_ZERO_DIVIDE_EX); +#ifdef USE_CYCLONE_TIMING_DIV +RET(144) +#else +RET(14) +#endif + } + dst = DREGu32((Opcode >> 9) & 7); + { + u32 q, r; + + q = dst / src; + r = dst % src; + + if (q & 0xFFFF0000) + { + flag_V = M68K_SR_V; +#ifdef USE_CYCLONE_TIMING_DIV +RET(144) +#else + RET(74) +#endif + } + q &= 0x0000FFFF; + flag_NotZ = q; + flag_N = q >> 8; + flag_V = flag_C = 0; + res = q | (r << 16); + DREGu32((Opcode >> 9) & 7) = res; + } +#ifdef USE_CYCLONE_TIMING_DIV +RET(144) +#else +RET(94) +#endif +} + +// DIVU +OPCODE(0x80E0) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7) - 2; + AREG((Opcode >> 0) & 7) = adr; + PRE_IO + READ_WORD_F(adr, src) + if (src == 0) + { + execute_exception(M68K_ZERO_DIVIDE_EX); +#ifdef USE_CYCLONE_TIMING_DIV +RET(146) +#else +RET(16) +#endif + } + dst = DREGu32((Opcode >> 9) & 7); + { + u32 q, r; + + q = dst / src; + r = dst % src; + + if (q & 0xFFFF0000) + { + flag_V = M68K_SR_V; +#ifdef USE_CYCLONE_TIMING_DIV +RET(146) +#else + RET(76) +#endif + } + q &= 0x0000FFFF; + flag_NotZ = q; + flag_N = q >> 8; + flag_V = flag_C = 0; + res = q | (r << 16); + DREGu32((Opcode >> 9) & 7) = res; + } +#ifdef USE_CYCLONE_TIMING_DIV +RET(146) +#else +RET(96) +#endif +} + +// DIVU +OPCODE(0x80E8) +{ + u32 adr, res; + u32 src, dst; + + FETCH_SWORD(adr); + adr += AREG((Opcode >> 0) & 7); + PRE_IO + READ_WORD_F(adr, src) + if (src == 0) + { + execute_exception(M68K_ZERO_DIVIDE_EX); +#ifdef USE_CYCLONE_TIMING_DIV +RET(148) +#else +RET(18) +#endif + } + dst = DREGu32((Opcode >> 9) & 7); + { + u32 q, r; + + q = dst / src; + r = dst % src; + + if (q & 0xFFFF0000) + { + flag_V = M68K_SR_V; +#ifdef USE_CYCLONE_TIMING_DIV +RET(148) +#else + RET(78) +#endif + } + q &= 0x0000FFFF; + flag_NotZ = q; + flag_N = q >> 8; + flag_V = flag_C = 0; + res = q | (r << 16); + DREGu32((Opcode >> 9) & 7) = res; + } +#ifdef USE_CYCLONE_TIMING_DIV +RET(148) +#else +RET(98) +#endif +} + +// DIVU +OPCODE(0x80F0) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + DECODE_EXT_WORD + PRE_IO + READ_WORD_F(adr, src) + if (src == 0) + { + execute_exception(M68K_ZERO_DIVIDE_EX); +#ifdef USE_CYCLONE_TIMING_DIV +RET(150) +#else +RET(20) +#endif + } + dst = DREGu32((Opcode >> 9) & 7); + { + u32 q, r; + + q = dst / src; + r = dst % src; + + if (q & 0xFFFF0000) + { + flag_V = M68K_SR_V; +#ifdef USE_CYCLONE_TIMING_DIV +RET(150) +#else + RET(80) +#endif + } + q &= 0x0000FFFF; + flag_NotZ = q; + flag_N = q >> 8; + flag_V = flag_C = 0; + res = q | (r << 16); + DREGu32((Opcode >> 9) & 7) = res; + } +#ifdef USE_CYCLONE_TIMING_DIV +RET(150) +#else +RET(100) +#endif +} + +// DIVU +OPCODE(0x80F8) +{ + u32 adr, res; + u32 src, dst; + + FETCH_SWORD(adr); + PRE_IO + READ_WORD_F(adr, src) + if (src == 0) + { + execute_exception(M68K_ZERO_DIVIDE_EX); +#ifdef USE_CYCLONE_TIMING_DIV +RET(148) +#else +RET(18) +#endif + } + dst = DREGu32((Opcode >> 9) & 7); + { + u32 q, r; + + q = dst / src; + r = dst % src; + + if (q & 0xFFFF0000) + { + flag_V = M68K_SR_V; +#ifdef USE_CYCLONE_TIMING_DIV +RET(148) +#else + RET(78) +#endif + } + q &= 0x0000FFFF; + flag_NotZ = q; + flag_N = q >> 8; + flag_V = flag_C = 0; + res = q | (r << 16); + DREGu32((Opcode >> 9) & 7) = res; + } +#ifdef USE_CYCLONE_TIMING_DIV +RET(148) +#else +RET(98) +#endif +} + +// DIVU +OPCODE(0x80F9) +{ + u32 adr, res; + u32 src, dst; + + FETCH_LONG(adr); + PRE_IO + READ_WORD_F(adr, src) + if (src == 0) + { + execute_exception(M68K_ZERO_DIVIDE_EX); +#ifdef USE_CYCLONE_TIMING_DIV +RET(162) +#else +RET(22) +#endif + } + dst = DREGu32((Opcode >> 9) & 7); + { + u32 q, r; + + q = dst / src; + r = dst % src; + + if (q & 0xFFFF0000) + { + flag_V = M68K_SR_V; +#ifdef USE_CYCLONE_TIMING_DIV +RET(162) +#else + RET(82) +#endif + } + q &= 0x0000FFFF; + flag_NotZ = q; + flag_N = q >> 8; + flag_V = flag_C = 0; + res = q | (r << 16); + DREGu32((Opcode >> 9) & 7) = res; + } +#ifdef USE_CYCLONE_TIMING_DIV +RET(162) +#else +RET(102) +#endif +} + +// DIVU +OPCODE(0x80FA) +{ + u32 adr, res; + u32 src, dst; + + adr = GET_SWORD + ((u32)(PC) - BasePC); + PC++; + PRE_IO + READ_WORD_F(adr, src) + if (src == 0) + { + execute_exception(M68K_ZERO_DIVIDE_EX); +#ifdef USE_CYCLONE_TIMING_DIV +RET(148) +#else +RET(18) +#endif + } + dst = DREGu32((Opcode >> 9) & 7); + { + u32 q, r; + + q = dst / src; + r = dst % src; + + if (q & 0xFFFF0000) + { + flag_V = M68K_SR_V; +#ifdef USE_CYCLONE_TIMING_DIV +RET(148) +#else + RET(78) +#endif + } + q &= 0x0000FFFF; + flag_NotZ = q; + flag_N = q >> 8; + flag_V = flag_C = 0; + res = q | (r << 16); + DREGu32((Opcode >> 9) & 7) = res; + } +#ifdef USE_CYCLONE_TIMING_DIV +RET(148) +#else +RET(98) +#endif +} + +// DIVU +OPCODE(0x80FB) +{ + u32 adr, res; + u32 src, dst; + + adr = (u32)(PC) - BasePC; + DECODE_EXT_WORD + PRE_IO + READ_WORD_F(adr, src) + if (src == 0) + { + execute_exception(M68K_ZERO_DIVIDE_EX); +#ifdef USE_CYCLONE_TIMING_DIV +RET(160) +#else +RET(20) +#endif + } + dst = DREGu32((Opcode >> 9) & 7); + { + u32 q, r; + + q = dst / src; + r = dst % src; + + if (q & 0xFFFF0000) + { + flag_V = M68K_SR_V; +#ifdef USE_CYCLONE_TIMING_DIV +RET(160) +#else + RET(80) +#endif + } + q &= 0x0000FFFF; + flag_NotZ = q; + flag_N = q >> 8; + flag_V = flag_C = 0; + res = q | (r << 16); + DREGu32((Opcode >> 9) & 7) = res; + } +#ifdef USE_CYCLONE_TIMING_DIV +RET(160) +#else +RET(100) +#endif +} + +// DIVU +OPCODE(0x80FC) +{ + u32 adr, res; + u32 src, dst; + + FETCH_WORD(src); + if (src == 0) + { + execute_exception(M68K_ZERO_DIVIDE_EX); +#ifdef USE_CYCLONE_TIMING_DIV +RET(144) +#else +RET(14) +#endif + } + dst = DREGu32((Opcode >> 9) & 7); + { + u32 q, r; + + q = dst / src; + r = dst % src; + + if (q & 0xFFFF0000) + { + flag_V = M68K_SR_V; +#ifdef USE_CYCLONE_TIMING_DIV +RET(144) +#else + RET(74) +#endif + } + q &= 0x0000FFFF; + flag_NotZ = q; + flag_N = q >> 8; + flag_V = flag_C = 0; + res = q | (r << 16); + DREGu32((Opcode >> 9) & 7) = res; + } +#ifdef USE_CYCLONE_TIMING_DIV +RET(144) +#else +RET(94) +#endif +} + +// DIVU +OPCODE(0x80DF) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7); + AREG(7) += 2; + PRE_IO + READ_WORD_F(adr, src) + if (src == 0) + { + execute_exception(M68K_ZERO_DIVIDE_EX); +#ifdef USE_CYCLONE_TIMING_DIV +RET(144) +#else +RET(14) +#endif + } + dst = DREGu32((Opcode >> 9) & 7); + { + u32 q, r; + + q = dst / src; + r = dst % src; + + if (q & 0xFFFF0000) + { + flag_V = M68K_SR_V; +#ifdef USE_CYCLONE_TIMING_DIV +RET(144) +#else + RET(74) +#endif + } + q &= 0x0000FFFF; + flag_NotZ = q; + flag_N = q >> 8; + flag_V = flag_C = 0; + res = q | (r << 16); + DREGu32((Opcode >> 9) & 7) = res; + } +#ifdef USE_CYCLONE_TIMING_DIV +RET(144) +#else +RET(94) +#endif +} + +// DIVU +OPCODE(0x80E7) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7) - 2; + AREG(7) = adr; + PRE_IO + READ_WORD_F(adr, src) + if (src == 0) + { + execute_exception(M68K_ZERO_DIVIDE_EX); +#ifdef USE_CYCLONE_TIMING_DIV +RET(146) +#else +RET(16) +#endif + } + dst = DREGu32((Opcode >> 9) & 7); + { + u32 q, r; + + q = dst / src; + r = dst % src; + + if (q & 0xFFFF0000) + { + flag_V = M68K_SR_V; +#ifdef USE_CYCLONE_TIMING_DIV +RET(146) +#else + RET(76) +#endif + } + q &= 0x0000FFFF; + flag_NotZ = q; + flag_N = q >> 8; + flag_V = flag_C = 0; + res = q | (r << 16); + DREGu32((Opcode >> 9) & 7) = res; + } +#ifdef USE_CYCLONE_TIMING_DIV +RET(146) +#else +RET(96) +#endif +} + +// DIVS +OPCODE(0x81C0) +{ + u32 adr, res; + u32 src, dst; + + src = (s32)DREGs16((Opcode >> 0) & 7); + if (src == 0) + { + execute_exception(M68K_ZERO_DIVIDE_EX); +#ifdef USE_CYCLONE_TIMING_DIV +goto end; +#endif + RET(10) + } + dst = DREGu32((Opcode >> 9) & 7); + if ((dst == 0x80000000) && (src == (u32)-1)) + { + flag_NotZ = flag_N = 0; + flag_V = flag_C = 0; + res = 0; + DREGu32((Opcode >> 9) & 7) = res; +#ifdef USE_CYCLONE_TIMING_DIV +goto end; +#endif + RET(50) + } + { + s32 q, r; + + q = (s32)dst / (s32)src; + r = (s32)dst % (s32)src; + + if ((q > 0x7FFF) || (q < -0x8000)) + { + flag_V = M68K_SR_V; +#ifdef USE_CYCLONE_TIMING_DIV +goto end; +#endif + RET(80) + } + q &= 0x0000FFFF; + flag_NotZ = q; + flag_N = q >> 8; + flag_V = flag_C = 0; + res = q | (r << 16); + DREGu32((Opcode >> 9) & 7) = res; + } +#ifdef USE_CYCLONE_TIMING_DIV +end: m68kcontext.io_cycle_counter -= 50; +#endif +RET(108) +} + +// DIVS +OPCODE(0x81D0) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + PRE_IO + READSX_WORD_F(adr, src) + if (src == 0) + { + execute_exception(M68K_ZERO_DIVIDE_EX); +#ifdef USE_CYCLONE_TIMING_DIV +goto end; +#endif + RET(14) + } + dst = DREGu32((Opcode >> 9) & 7); + if ((dst == 0x80000000) && (src == (u32)-1)) + { + flag_NotZ = flag_N = 0; + flag_V = flag_C = 0; + res = 0; + DREGu32((Opcode >> 9) & 7) = res; +#ifdef USE_CYCLONE_TIMING_DIV +goto end; +#endif + RET(54) + } + { + s32 q, r; + + q = (s32)dst / (s32)src; + r = (s32)dst % (s32)src; + + if ((q > 0x7FFF) || (q < -0x8000)) + { + flag_V = M68K_SR_V; +#ifdef USE_CYCLONE_TIMING_DIV +goto end; +#endif + RET(84) + } + q &= 0x0000FFFF; + flag_NotZ = q; + flag_N = q >> 8; + flag_V = flag_C = 0; + res = q | (r << 16); + DREGu32((Opcode >> 9) & 7) = res; + } +#ifdef USE_CYCLONE_TIMING_DIV +end: m68kcontext.io_cycle_counter -= 50; +#endif +RET(112) +} + +// DIVS +OPCODE(0x81D8) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + AREG((Opcode >> 0) & 7) += 2; + PRE_IO + READSX_WORD_F(adr, src) + if (src == 0) + { + execute_exception(M68K_ZERO_DIVIDE_EX); +#ifdef USE_CYCLONE_TIMING_DIV +goto end; +#endif + RET(14) + } + dst = DREGu32((Opcode >> 9) & 7); + if ((dst == 0x80000000) && (src == (u32)-1)) + { + flag_NotZ = flag_N = 0; + flag_V = flag_C = 0; + res = 0; + DREGu32((Opcode >> 9) & 7) = res; +#ifdef USE_CYCLONE_TIMING_DIV +goto end; +#endif + RET(54) + } + { + s32 q, r; + + q = (s32)dst / (s32)src; + r = (s32)dst % (s32)src; + + if ((q > 0x7FFF) || (q < -0x8000)) + { + flag_V = M68K_SR_V; +#ifdef USE_CYCLONE_TIMING_DIV +goto end; +#endif + RET(84) + } + q &= 0x0000FFFF; + flag_NotZ = q; + flag_N = q >> 8; + flag_V = flag_C = 0; + res = q | (r << 16); + DREGu32((Opcode >> 9) & 7) = res; + } +#ifdef USE_CYCLONE_TIMING_DIV +end: m68kcontext.io_cycle_counter -= 50; +#endif +RET(112) +} + +// DIVS +OPCODE(0x81E0) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7) - 2; + AREG((Opcode >> 0) & 7) = adr; + PRE_IO + READSX_WORD_F(adr, src) + if (src == 0) + { + execute_exception(M68K_ZERO_DIVIDE_EX); +#ifdef USE_CYCLONE_TIMING_DIV +goto end; +#endif + RET(16) + } + dst = DREGu32((Opcode >> 9) & 7); + if ((dst == 0x80000000) && (src == (u32)-1)) + { + flag_NotZ = flag_N = 0; + flag_V = flag_C = 0; + res = 0; + DREGu32((Opcode >> 9) & 7) = res; +#ifdef USE_CYCLONE_TIMING_DIV +goto end; +#endif + RET(56) + } + { + s32 q, r; + + q = (s32)dst / (s32)src; + r = (s32)dst % (s32)src; + + if ((q > 0x7FFF) || (q < -0x8000)) + { + flag_V = M68K_SR_V; +#ifdef USE_CYCLONE_TIMING_DIV +goto end; +#endif + RET(86) + } + q &= 0x0000FFFF; + flag_NotZ = q; + flag_N = q >> 8; + flag_V = flag_C = 0; + res = q | (r << 16); + DREGu32((Opcode >> 9) & 7) = res; + } +#ifdef USE_CYCLONE_TIMING_DIV +end: m68kcontext.io_cycle_counter -= 50; +#endif +RET(114) +} + +// DIVS +OPCODE(0x81E8) +{ + u32 adr, res; + u32 src, dst; + + FETCH_SWORD(adr); + adr += AREG((Opcode >> 0) & 7); + PRE_IO + READSX_WORD_F(adr, src) + if (src == 0) + { + execute_exception(M68K_ZERO_DIVIDE_EX); +#ifdef USE_CYCLONE_TIMING_DIV +goto end; +#endif + RET(18) + } + dst = DREGu32((Opcode >> 9) & 7); + if ((dst == 0x80000000) && (src == (u32)-1)) + { + flag_NotZ = flag_N = 0; + flag_V = flag_C = 0; + res = 0; + DREGu32((Opcode >> 9) & 7) = res; +#ifdef USE_CYCLONE_TIMING_DIV +goto end; +#endif + RET(58) + } + { + s32 q, r; + + q = (s32)dst / (s32)src; + r = (s32)dst % (s32)src; + + if ((q > 0x7FFF) || (q < -0x8000)) + { + flag_V = M68K_SR_V; +#ifdef USE_CYCLONE_TIMING_DIV +goto end; +#endif + RET(88) + } + q &= 0x0000FFFF; + flag_NotZ = q; + flag_N = q >> 8; + flag_V = flag_C = 0; + res = q | (r << 16); + DREGu32((Opcode >> 9) & 7) = res; + } +#ifdef USE_CYCLONE_TIMING_DIV +end: m68kcontext.io_cycle_counter -= 50; +#endif +RET(116) +} + +// DIVS +OPCODE(0x81F0) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + DECODE_EXT_WORD + PRE_IO + READSX_WORD_F(adr, src) + if (src == 0) + { + execute_exception(M68K_ZERO_DIVIDE_EX); +#ifdef USE_CYCLONE_TIMING_DIV +goto end; +#endif + RET(20) + } + dst = DREGu32((Opcode >> 9) & 7); + if ((dst == 0x80000000) && (src == (u32)-1)) + { + flag_NotZ = flag_N = 0; + flag_V = flag_C = 0; + res = 0; + DREGu32((Opcode >> 9) & 7) = res; +#ifdef USE_CYCLONE_TIMING_DIV +goto end; +#endif + RET(60) + } + { + s32 q, r; + + q = (s32)dst / (s32)src; + r = (s32)dst % (s32)src; + + if ((q > 0x7FFF) || (q < -0x8000)) + { + flag_V = M68K_SR_V; +#ifdef USE_CYCLONE_TIMING_DIV +goto end; +#endif + RET(90) + } + q &= 0x0000FFFF; + flag_NotZ = q; + flag_N = q >> 8; + flag_V = flag_C = 0; + res = q | (r << 16); + DREGu32((Opcode >> 9) & 7) = res; + } +#ifdef USE_CYCLONE_TIMING_DIV +end: m68kcontext.io_cycle_counter -= 50; +#endif +RET(118) +} + +// DIVS +OPCODE(0x81F8) +{ + u32 adr, res; + u32 src, dst; + + FETCH_SWORD(adr); + PRE_IO + READSX_WORD_F(adr, src) + if (src == 0) + { + execute_exception(M68K_ZERO_DIVIDE_EX); +#ifdef USE_CYCLONE_TIMING_DIV +goto end; +#endif + RET(18) + } + dst = DREGu32((Opcode >> 9) & 7); + if ((dst == 0x80000000) && (src == (u32)-1)) + { + flag_NotZ = flag_N = 0; + flag_V = flag_C = 0; + res = 0; + DREGu32((Opcode >> 9) & 7) = res; +#ifdef USE_CYCLONE_TIMING_DIV +goto end; +#endif + RET(58) + } + { + s32 q, r; + + q = (s32)dst / (s32)src; + r = (s32)dst % (s32)src; + + if ((q > 0x7FFF) || (q < -0x8000)) + { + flag_V = M68K_SR_V; +#ifdef USE_CYCLONE_TIMING_DIV +goto end; +#endif + RET(88) + } + q &= 0x0000FFFF; + flag_NotZ = q; + flag_N = q >> 8; + flag_V = flag_C = 0; + res = q | (r << 16); + DREGu32((Opcode >> 9) & 7) = res; + } +#ifdef USE_CYCLONE_TIMING_DIV +end: m68kcontext.io_cycle_counter -= 50; +#endif +RET(116) +} + +// DIVS +OPCODE(0x81F9) +{ + u32 adr, res; + u32 src, dst; + + FETCH_LONG(adr); + PRE_IO + READSX_WORD_F(adr, src) + if (src == 0) + { + execute_exception(M68K_ZERO_DIVIDE_EX); +#ifdef USE_CYCLONE_TIMING_DIV +goto end; +#endif + RET(22) + } + dst = DREGu32((Opcode >> 9) & 7); + if ((dst == 0x80000000) && (src == (u32)-1)) + { + flag_NotZ = flag_N = 0; + flag_V = flag_C = 0; + res = 0; + DREGu32((Opcode >> 9) & 7) = res; +#ifdef USE_CYCLONE_TIMING_DIV +goto end; +#endif + RET(62) + } + { + s32 q, r; + + q = (s32)dst / (s32)src; + r = (s32)dst % (s32)src; + + if ((q > 0x7FFF) || (q < -0x8000)) + { + flag_V = M68K_SR_V; +#ifdef USE_CYCLONE_TIMING_DIV +goto end; +#endif + RET(92) + } + q &= 0x0000FFFF; + flag_NotZ = q; + flag_N = q >> 8; + flag_V = flag_C = 0; + res = q | (r << 16); + DREGu32((Opcode >> 9) & 7) = res; + } +#ifdef USE_CYCLONE_TIMING_DIV +end: m68kcontext.io_cycle_counter -= 50; +#endif +RET(120) +} + +// DIVS +OPCODE(0x81FA) +{ + u32 adr, res; + u32 src, dst; + + adr = GET_SWORD + ((u32)(PC) - BasePC); + PC++; + PRE_IO + READSX_WORD_F(adr, src) + if (src == 0) + { + execute_exception(M68K_ZERO_DIVIDE_EX); +#ifdef USE_CYCLONE_TIMING_DIV +goto end; +#endif + RET(18) + } + dst = DREGu32((Opcode >> 9) & 7); + if ((dst == 0x80000000) && (src == (u32)-1)) + { + flag_NotZ = flag_N = 0; + flag_V = flag_C = 0; + res = 0; + DREGu32((Opcode >> 9) & 7) = res; +#ifdef USE_CYCLONE_TIMING_DIV +goto end; +#endif + RET(58) + } + { + s32 q, r; + + q = (s32)dst / (s32)src; + r = (s32)dst % (s32)src; + + if ((q > 0x7FFF) || (q < -0x8000)) + { + flag_V = M68K_SR_V; +#ifdef USE_CYCLONE_TIMING_DIV +goto end; +#endif + RET(88) + } + q &= 0x0000FFFF; + flag_NotZ = q; + flag_N = q >> 8; + flag_V = flag_C = 0; + res = q | (r << 16); + DREGu32((Opcode >> 9) & 7) = res; + } +#ifdef USE_CYCLONE_TIMING_DIV +end: m68kcontext.io_cycle_counter -= 50; +#endif +RET(116) +} + +// DIVS +OPCODE(0x81FB) +{ + u32 adr, res; + u32 src, dst; + + adr = (u32)(PC) - BasePC; + DECODE_EXT_WORD + PRE_IO + READSX_WORD_F(adr, src) + if (src == 0) + { + execute_exception(M68K_ZERO_DIVIDE_EX); +#ifdef USE_CYCLONE_TIMING_DIV +goto end; +#endif + RET(20) + } + dst = DREGu32((Opcode >> 9) & 7); + if ((dst == 0x80000000) && (src == (u32)-1)) + { + flag_NotZ = flag_N = 0; + flag_V = flag_C = 0; + res = 0; + DREGu32((Opcode >> 9) & 7) = res; +#ifdef USE_CYCLONE_TIMING_DIV +goto end; +#endif + RET(60) + } + { + s32 q, r; + + q = (s32)dst / (s32)src; + r = (s32)dst % (s32)src; + + if ((q > 0x7FFF) || (q < -0x8000)) + { + flag_V = M68K_SR_V; +#ifdef USE_CYCLONE_TIMING_DIV +goto end; +#endif + RET(90) + } + q &= 0x0000FFFF; + flag_NotZ = q; + flag_N = q >> 8; + flag_V = flag_C = 0; + res = q | (r << 16); + DREGu32((Opcode >> 9) & 7) = res; + } +#ifdef USE_CYCLONE_TIMING_DIV +end: m68kcontext.io_cycle_counter -= 50; +#endif +RET(118) +} + +// DIVS +OPCODE(0x81FC) +{ + u32 adr, res; + u32 src, dst; + + FETCH_SWORD(src); + if (src == 0) + { + execute_exception(M68K_ZERO_DIVIDE_EX); +#ifdef USE_CYCLONE_TIMING_DIV +goto end; +#endif + RET(14) + } + dst = DREGu32((Opcode >> 9) & 7); + if ((dst == 0x80000000) && (src == (u32)-1)) + { + flag_NotZ = flag_N = 0; + flag_V = flag_C = 0; + res = 0; + DREGu32((Opcode >> 9) & 7) = res; +#ifdef USE_CYCLONE_TIMING_DIV +goto end; +#endif + RET(54) + } + { + s32 q, r; + + q = (s32)dst / (s32)src; + r = (s32)dst % (s32)src; + + if ((q > 0x7FFF) || (q < -0x8000)) + { + flag_V = M68K_SR_V; +#ifdef USE_CYCLONE_TIMING_DIV +goto end; +#endif + RET(84) + } + q &= 0x0000FFFF; + flag_NotZ = q; + flag_N = q >> 8; + flag_V = flag_C = 0; + res = q | (r << 16); + DREGu32((Opcode >> 9) & 7) = res; + } +#ifdef USE_CYCLONE_TIMING_DIV +end: m68kcontext.io_cycle_counter -= 50; +#endif +RET(112) +} + +// DIVS +OPCODE(0x81DF) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7); + AREG(7) += 2; + PRE_IO + READSX_WORD_F(adr, src) + if (src == 0) + { + execute_exception(M68K_ZERO_DIVIDE_EX); +#ifdef USE_CYCLONE_TIMING_DIV +goto end; +#endif + RET(14) + } + dst = DREGu32((Opcode >> 9) & 7); + if ((dst == 0x80000000) && (src == (u32)-1)) + { + flag_NotZ = flag_N = 0; + flag_V = flag_C = 0; + res = 0; + DREGu32((Opcode >> 9) & 7) = res; +#ifdef USE_CYCLONE_TIMING_DIV +goto end; +#endif + RET(54) + } + { + s32 q, r; + + q = (s32)dst / (s32)src; + r = (s32)dst % (s32)src; + + if ((q > 0x7FFF) || (q < -0x8000)) + { + flag_V = M68K_SR_V; +#ifdef USE_CYCLONE_TIMING_DIV +goto end; +#endif + RET(84) + } + q &= 0x0000FFFF; + flag_NotZ = q; + flag_N = q >> 8; + flag_V = flag_C = 0; + res = q | (r << 16); + DREGu32((Opcode >> 9) & 7) = res; + } +#ifdef USE_CYCLONE_TIMING_DIV +end: m68kcontext.io_cycle_counter -= 50; +#endif +RET(112) +} + +// DIVS +OPCODE(0x81E7) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7) - 2; + AREG(7) = adr; + PRE_IO + READSX_WORD_F(adr, src) + if (src == 0) + { + execute_exception(M68K_ZERO_DIVIDE_EX); +#ifdef USE_CYCLONE_TIMING_DIV +goto end; +#endif + RET(16) + } + dst = DREGu32((Opcode >> 9) & 7); + if ((dst == 0x80000000) && (src == (u32)-1)) + { + flag_NotZ = flag_N = 0; + flag_V = flag_C = 0; + res = 0; + DREGu32((Opcode >> 9) & 7) = res; +#ifdef USE_CYCLONE_TIMING_DIV +goto end; +#endif + RET(56) + } + { + s32 q, r; + + q = (s32)dst / (s32)src; + r = (s32)dst % (s32)src; + + if ((q > 0x7FFF) || (q < -0x8000)) + { + flag_V = M68K_SR_V; +#ifdef USE_CYCLONE_TIMING_DIV +goto end; +#endif + RET(86) + } + q &= 0x0000FFFF; + flag_NotZ = q; + flag_N = q >> 8; + flag_V = flag_C = 0; + res = q | (r << 16); + DREGu32((Opcode >> 9) & 7) = res; + } +#ifdef USE_CYCLONE_TIMING_DIV +end: m68kcontext.io_cycle_counter -= 50; +#endif +RET(114) +} + +// SUBaD +OPCODE(0x9000) +{ + u32 adr, res; + u32 src, dst; + + src = DREGu8((Opcode >> 0) & 7); + dst = DREGu8((Opcode >> 9) & 7); + res = dst - src; + flag_N = flag_X = flag_C = res; + flag_V = (src ^ dst) & (res ^ dst); + flag_NotZ = res & 0xFF; + DREGu8((Opcode >> 9) & 7) = res; +RET(4) +} + +// SUBaD +OPCODE(0x9008) +{ + u32 adr, res; + u32 src, dst; + + // can't read byte from Ax registers ! + m68kcontext.execinfo |= M68K_FAULTED; + m68kcontext.io_cycle_counter = 0; +/* + goto famec_Exec_End; + dst = DREGu8((Opcode >> 9) & 7); + res = dst - src; + flag_N = flag_X = flag_C = res; + flag_V = (src ^ dst) & (res ^ dst); + flag_NotZ = res & 0xFF; + DREGu8((Opcode >> 9) & 7) = res; +*/ +RET(4) +} + +// SUBaD +OPCODE(0x9010) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + PRE_IO + READ_BYTE_F(adr, src) + dst = DREGu8((Opcode >> 9) & 7); + res = dst - src; + flag_N = flag_X = flag_C = res; + flag_V = (src ^ dst) & (res ^ dst); + flag_NotZ = res & 0xFF; + DREGu8((Opcode >> 9) & 7) = res; + POST_IO +RET(8) +} + +// SUBaD +OPCODE(0x9018) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + AREG((Opcode >> 0) & 7) += 1; + PRE_IO + READ_BYTE_F(adr, src) + dst = DREGu8((Opcode >> 9) & 7); + res = dst - src; + flag_N = flag_X = flag_C = res; + flag_V = (src ^ dst) & (res ^ dst); + flag_NotZ = res & 0xFF; + DREGu8((Opcode >> 9) & 7) = res; + POST_IO +RET(8) +} + +// SUBaD +OPCODE(0x9020) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7) - 1; + AREG((Opcode >> 0) & 7) = adr; + PRE_IO + READ_BYTE_F(adr, src) + dst = DREGu8((Opcode >> 9) & 7); + res = dst - src; + flag_N = flag_X = flag_C = res; + flag_V = (src ^ dst) & (res ^ dst); + flag_NotZ = res & 0xFF; + DREGu8((Opcode >> 9) & 7) = res; + POST_IO +RET(10) +} + +// SUBaD +OPCODE(0x9028) +{ + u32 adr, res; + u32 src, dst; + + FETCH_SWORD(adr); + adr += AREG((Opcode >> 0) & 7); + PRE_IO + READ_BYTE_F(adr, src) + dst = DREGu8((Opcode >> 9) & 7); + res = dst - src; + flag_N = flag_X = flag_C = res; + flag_V = (src ^ dst) & (res ^ dst); + flag_NotZ = res & 0xFF; + DREGu8((Opcode >> 9) & 7) = res; + POST_IO +RET(12) +} + +// SUBaD +OPCODE(0x9030) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + DECODE_EXT_WORD + PRE_IO + READ_BYTE_F(adr, src) + dst = DREGu8((Opcode >> 9) & 7); + res = dst - src; + flag_N = flag_X = flag_C = res; + flag_V = (src ^ dst) & (res ^ dst); + flag_NotZ = res & 0xFF; + DREGu8((Opcode >> 9) & 7) = res; + POST_IO +RET(14) +} + +// SUBaD +OPCODE(0x9038) +{ + u32 adr, res; + u32 src, dst; + + FETCH_SWORD(adr); + PRE_IO + READ_BYTE_F(adr, src) + dst = DREGu8((Opcode >> 9) & 7); + res = dst - src; + flag_N = flag_X = flag_C = res; + flag_V = (src ^ dst) & (res ^ dst); + flag_NotZ = res & 0xFF; + DREGu8((Opcode >> 9) & 7) = res; + POST_IO +RET(12) +} + +// SUBaD +OPCODE(0x9039) +{ + u32 adr, res; + u32 src, dst; + + FETCH_LONG(adr); + PRE_IO + READ_BYTE_F(adr, src) + dst = DREGu8((Opcode >> 9) & 7); + res = dst - src; + flag_N = flag_X = flag_C = res; + flag_V = (src ^ dst) & (res ^ dst); + flag_NotZ = res & 0xFF; + DREGu8((Opcode >> 9) & 7) = res; + POST_IO +RET(16) +} + +// SUBaD +OPCODE(0x903A) +{ + u32 adr, res; + u32 src, dst; + + adr = GET_SWORD + ((u32)(PC) - BasePC); + PC++; + PRE_IO + READ_BYTE_F(adr, src) + dst = DREGu8((Opcode >> 9) & 7); + res = dst - src; + flag_N = flag_X = flag_C = res; + flag_V = (src ^ dst) & (res ^ dst); + flag_NotZ = res & 0xFF; + DREGu8((Opcode >> 9) & 7) = res; + POST_IO +RET(12) +} + +// SUBaD +OPCODE(0x903B) +{ + u32 adr, res; + u32 src, dst; + + adr = (u32)(PC) - BasePC; + DECODE_EXT_WORD + PRE_IO + READ_BYTE_F(adr, src) + dst = DREGu8((Opcode >> 9) & 7); + res = dst - src; + flag_N = flag_X = flag_C = res; + flag_V = (src ^ dst) & (res ^ dst); + flag_NotZ = res & 0xFF; + DREGu8((Opcode >> 9) & 7) = res; + POST_IO +RET(14) +} + +// SUBaD +OPCODE(0x903C) +{ + u32 adr, res; + u32 src, dst; + + FETCH_BYTE(src); + dst = DREGu8((Opcode >> 9) & 7); + res = dst - src; + flag_N = flag_X = flag_C = res; + flag_V = (src ^ dst) & (res ^ dst); + flag_NotZ = res & 0xFF; + DREGu8((Opcode >> 9) & 7) = res; +RET(8) +} + +// SUBaD +OPCODE(0x901F) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7); + AREG(7) += 2; + PRE_IO + READ_BYTE_F(adr, src) + dst = DREGu8((Opcode >> 9) & 7); + res = dst - src; + flag_N = flag_X = flag_C = res; + flag_V = (src ^ dst) & (res ^ dst); + flag_NotZ = res & 0xFF; + DREGu8((Opcode >> 9) & 7) = res; + POST_IO +RET(8) +} + +// SUBaD +OPCODE(0x9027) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7) - 2; + AREG(7) = adr; + PRE_IO + READ_BYTE_F(adr, src) + dst = DREGu8((Opcode >> 9) & 7); + res = dst - src; + flag_N = flag_X = flag_C = res; + flag_V = (src ^ dst) & (res ^ dst); + flag_NotZ = res & 0xFF; + DREGu8((Opcode >> 9) & 7) = res; + POST_IO +RET(10) +} + +// SUBaD +OPCODE(0x9040) +{ + u32 adr, res; + u32 src, dst; + + src = DREGu16((Opcode >> 0) & 7); + dst = DREGu16((Opcode >> 9) & 7); + res = dst - src; + flag_V = ((src ^ dst) & (res ^ dst)) >> 8; + flag_N = flag_X = flag_C = res >> 8; + flag_NotZ = res & 0xFFFF; + DREGu16((Opcode >> 9) & 7) = res; +RET(4) +} + +// SUBaD +OPCODE(0x9048) +{ + u32 adr, res; + u32 src, dst; + + src = AREGu16((Opcode >> 0) & 7); + dst = DREGu16((Opcode >> 9) & 7); + res = dst - src; + flag_V = ((src ^ dst) & (res ^ dst)) >> 8; + flag_N = flag_X = flag_C = res >> 8; + flag_NotZ = res & 0xFFFF; + DREGu16((Opcode >> 9) & 7) = res; +RET(4) +} + +// SUBaD +OPCODE(0x9050) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + PRE_IO + READ_WORD_F(adr, src) + dst = DREGu16((Opcode >> 9) & 7); + res = dst - src; + flag_V = ((src ^ dst) & (res ^ dst)) >> 8; + flag_N = flag_X = flag_C = res >> 8; + flag_NotZ = res & 0xFFFF; + DREGu16((Opcode >> 9) & 7) = res; + POST_IO +RET(8) +} + +// SUBaD +OPCODE(0x9058) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + AREG((Opcode >> 0) & 7) += 2; + PRE_IO + READ_WORD_F(adr, src) + dst = DREGu16((Opcode >> 9) & 7); + res = dst - src; + flag_V = ((src ^ dst) & (res ^ dst)) >> 8; + flag_N = flag_X = flag_C = res >> 8; + flag_NotZ = res & 0xFFFF; + DREGu16((Opcode >> 9) & 7) = res; + POST_IO +RET(8) +} + +// SUBaD +OPCODE(0x9060) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7) - 2; + AREG((Opcode >> 0) & 7) = adr; + PRE_IO + READ_WORD_F(adr, src) + dst = DREGu16((Opcode >> 9) & 7); + res = dst - src; + flag_V = ((src ^ dst) & (res ^ dst)) >> 8; + flag_N = flag_X = flag_C = res >> 8; + flag_NotZ = res & 0xFFFF; + DREGu16((Opcode >> 9) & 7) = res; + POST_IO +RET(10) +} + +// SUBaD +OPCODE(0x9068) +{ + u32 adr, res; + u32 src, dst; + + FETCH_SWORD(adr); + adr += AREG((Opcode >> 0) & 7); + PRE_IO + READ_WORD_F(adr, src) + dst = DREGu16((Opcode >> 9) & 7); + res = dst - src; + flag_V = ((src ^ dst) & (res ^ dst)) >> 8; + flag_N = flag_X = flag_C = res >> 8; + flag_NotZ = res & 0xFFFF; + DREGu16((Opcode >> 9) & 7) = res; + POST_IO +RET(12) +} + +// SUBaD +OPCODE(0x9070) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + DECODE_EXT_WORD + PRE_IO + READ_WORD_F(adr, src) + dst = DREGu16((Opcode >> 9) & 7); + res = dst - src; + flag_V = ((src ^ dst) & (res ^ dst)) >> 8; + flag_N = flag_X = flag_C = res >> 8; + flag_NotZ = res & 0xFFFF; + DREGu16((Opcode >> 9) & 7) = res; + POST_IO +RET(14) +} + +// SUBaD +OPCODE(0x9078) +{ + u32 adr, res; + u32 src, dst; + + FETCH_SWORD(adr); + PRE_IO + READ_WORD_F(adr, src) + dst = DREGu16((Opcode >> 9) & 7); + res = dst - src; + flag_V = ((src ^ dst) & (res ^ dst)) >> 8; + flag_N = flag_X = flag_C = res >> 8; + flag_NotZ = res & 0xFFFF; + DREGu16((Opcode >> 9) & 7) = res; + POST_IO +RET(12) +} + +// SUBaD +OPCODE(0x9079) +{ + u32 adr, res; + u32 src, dst; + + FETCH_LONG(adr); + PRE_IO + READ_WORD_F(adr, src) + dst = DREGu16((Opcode >> 9) & 7); + res = dst - src; + flag_V = ((src ^ dst) & (res ^ dst)) >> 8; + flag_N = flag_X = flag_C = res >> 8; + flag_NotZ = res & 0xFFFF; + DREGu16((Opcode >> 9) & 7) = res; + POST_IO +RET(16) +} + +// SUBaD +OPCODE(0x907A) +{ + u32 adr, res; + u32 src, dst; + + adr = GET_SWORD + ((u32)(PC) - BasePC); + PC++; + PRE_IO + READ_WORD_F(adr, src) + dst = DREGu16((Opcode >> 9) & 7); + res = dst - src; + flag_V = ((src ^ dst) & (res ^ dst)) >> 8; + flag_N = flag_X = flag_C = res >> 8; + flag_NotZ = res & 0xFFFF; + DREGu16((Opcode >> 9) & 7) = res; + POST_IO +RET(12) +} + +// SUBaD +OPCODE(0x907B) +{ + u32 adr, res; + u32 src, dst; + + adr = (u32)(PC) - BasePC; + DECODE_EXT_WORD + PRE_IO + READ_WORD_F(adr, src) + dst = DREGu16((Opcode >> 9) & 7); + res = dst - src; + flag_V = ((src ^ dst) & (res ^ dst)) >> 8; + flag_N = flag_X = flag_C = res >> 8; + flag_NotZ = res & 0xFFFF; + DREGu16((Opcode >> 9) & 7) = res; + POST_IO +RET(14) +} + +// SUBaD +OPCODE(0x907C) +{ + u32 adr, res; + u32 src, dst; + + FETCH_WORD(src); + dst = DREGu16((Opcode >> 9) & 7); + res = dst - src; + flag_V = ((src ^ dst) & (res ^ dst)) >> 8; + flag_N = flag_X = flag_C = res >> 8; + flag_NotZ = res & 0xFFFF; + DREGu16((Opcode >> 9) & 7) = res; +RET(8) +} + +// SUBaD +OPCODE(0x905F) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7); + AREG(7) += 2; + PRE_IO + READ_WORD_F(adr, src) + dst = DREGu16((Opcode >> 9) & 7); + res = dst - src; + flag_V = ((src ^ dst) & (res ^ dst)) >> 8; + flag_N = flag_X = flag_C = res >> 8; + flag_NotZ = res & 0xFFFF; + DREGu16((Opcode >> 9) & 7) = res; + POST_IO +RET(8) +} + +// SUBaD +OPCODE(0x9067) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7) - 2; + AREG(7) = adr; + PRE_IO + READ_WORD_F(adr, src) + dst = DREGu16((Opcode >> 9) & 7); + res = dst - src; + flag_V = ((src ^ dst) & (res ^ dst)) >> 8; + flag_N = flag_X = flag_C = res >> 8; + flag_NotZ = res & 0xFFFF; + DREGu16((Opcode >> 9) & 7) = res; + POST_IO +RET(10) +} + +// SUBaD +OPCODE(0x9080) +{ + u32 adr, res; + u32 src, dst; + + src = DREGu32((Opcode >> 0) & 7); + dst = DREGu32((Opcode >> 9) & 7); + res = dst - src; + flag_NotZ = res; + flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23; + flag_V = ((src ^ dst) & (res ^ dst)) >> 24; + flag_N = res >> 24; + DREGu32((Opcode >> 9) & 7) = res; +RET(8) +} + +// SUBaD +OPCODE(0x9088) +{ + u32 adr, res; + u32 src, dst; + + src = AREGu32((Opcode >> 0) & 7); + dst = DREGu32((Opcode >> 9) & 7); + res = dst - src; + flag_NotZ = res; + flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23; + flag_V = ((src ^ dst) & (res ^ dst)) >> 24; + flag_N = res >> 24; + DREGu32((Opcode >> 9) & 7) = res; +RET(8) +} + +// SUBaD +OPCODE(0x9090) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + PRE_IO + READ_LONG_F(adr, src) + dst = DREGu32((Opcode >> 9) & 7); + res = dst - src; + flag_NotZ = res; + flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23; + flag_V = ((src ^ dst) & (res ^ dst)) >> 24; + flag_N = res >> 24; + DREGu32((Opcode >> 9) & 7) = res; + POST_IO +RET(14) +} + +// SUBaD +OPCODE(0x9098) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + AREG((Opcode >> 0) & 7) += 4; + PRE_IO + READ_LONG_F(adr, src) + dst = DREGu32((Opcode >> 9) & 7); + res = dst - src; + flag_NotZ = res; + flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23; + flag_V = ((src ^ dst) & (res ^ dst)) >> 24; + flag_N = res >> 24; + DREGu32((Opcode >> 9) & 7) = res; + POST_IO +RET(14) +} + +// SUBaD +OPCODE(0x90A0) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7) - 4; + AREG((Opcode >> 0) & 7) = adr; + PRE_IO + READ_LONG_F(adr, src) + dst = DREGu32((Opcode >> 9) & 7); + res = dst - src; + flag_NotZ = res; + flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23; + flag_V = ((src ^ dst) & (res ^ dst)) >> 24; + flag_N = res >> 24; + DREGu32((Opcode >> 9) & 7) = res; + POST_IO +RET(16) +} + +// SUBaD +OPCODE(0x90A8) +{ + u32 adr, res; + u32 src, dst; + + FETCH_SWORD(adr); + adr += AREG((Opcode >> 0) & 7); + PRE_IO + READ_LONG_F(adr, src) + dst = DREGu32((Opcode >> 9) & 7); + res = dst - src; + flag_NotZ = res; + flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23; + flag_V = ((src ^ dst) & (res ^ dst)) >> 24; + flag_N = res >> 24; + DREGu32((Opcode >> 9) & 7) = res; + POST_IO +RET(18) +} + +// SUBaD +OPCODE(0x90B0) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + DECODE_EXT_WORD + PRE_IO + READ_LONG_F(adr, src) + dst = DREGu32((Opcode >> 9) & 7); + res = dst - src; + flag_NotZ = res; + flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23; + flag_V = ((src ^ dst) & (res ^ dst)) >> 24; + flag_N = res >> 24; + DREGu32((Opcode >> 9) & 7) = res; + POST_IO +RET(20) +} + +// SUBaD +OPCODE(0x90B8) +{ + u32 adr, res; + u32 src, dst; + + FETCH_SWORD(adr); + PRE_IO + READ_LONG_F(adr, src) + dst = DREGu32((Opcode >> 9) & 7); + res = dst - src; + flag_NotZ = res; + flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23; + flag_V = ((src ^ dst) & (res ^ dst)) >> 24; + flag_N = res >> 24; + DREGu32((Opcode >> 9) & 7) = res; + POST_IO +RET(18) +} + +// SUBaD +OPCODE(0x90B9) +{ + u32 adr, res; + u32 src, dst; + + FETCH_LONG(adr); + PRE_IO + READ_LONG_F(adr, src) + dst = DREGu32((Opcode >> 9) & 7); + res = dst - src; + flag_NotZ = res; + flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23; + flag_V = ((src ^ dst) & (res ^ dst)) >> 24; + flag_N = res >> 24; + DREGu32((Opcode >> 9) & 7) = res; + POST_IO +RET(22) +} + +// SUBaD +OPCODE(0x90BA) +{ + u32 adr, res; + u32 src, dst; + + adr = GET_SWORD + ((u32)(PC) - BasePC); + PC++; + PRE_IO + READ_LONG_F(adr, src) + dst = DREGu32((Opcode >> 9) & 7); + res = dst - src; + flag_NotZ = res; + flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23; + flag_V = ((src ^ dst) & (res ^ dst)) >> 24; + flag_N = res >> 24; + DREGu32((Opcode >> 9) & 7) = res; + POST_IO +RET(18) +} + +// SUBaD +OPCODE(0x90BB) +{ + u32 adr, res; + u32 src, dst; + + adr = (u32)(PC) - BasePC; + DECODE_EXT_WORD + PRE_IO + READ_LONG_F(adr, src) + dst = DREGu32((Opcode >> 9) & 7); + res = dst - src; + flag_NotZ = res; + flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23; + flag_V = ((src ^ dst) & (res ^ dst)) >> 24; + flag_N = res >> 24; + DREGu32((Opcode >> 9) & 7) = res; + POST_IO +RET(20) +} + +// SUBaD +OPCODE(0x90BC) +{ + u32 adr, res; + u32 src, dst; + + FETCH_LONG(src); + dst = DREGu32((Opcode >> 9) & 7); + res = dst - src; + flag_NotZ = res; + flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23; + flag_V = ((src ^ dst) & (res ^ dst)) >> 24; + flag_N = res >> 24; + DREGu32((Opcode >> 9) & 7) = res; +RET(16) +} + +// SUBaD +OPCODE(0x909F) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7); + AREG(7) += 4; + PRE_IO + READ_LONG_F(adr, src) + dst = DREGu32((Opcode >> 9) & 7); + res = dst - src; + flag_NotZ = res; + flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23; + flag_V = ((src ^ dst) & (res ^ dst)) >> 24; + flag_N = res >> 24; + DREGu32((Opcode >> 9) & 7) = res; + POST_IO +RET(14) +} + +// SUBaD +OPCODE(0x90A7) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7) - 4; + AREG(7) = adr; + PRE_IO + READ_LONG_F(adr, src) + dst = DREGu32((Opcode >> 9) & 7); + res = dst - src; + flag_NotZ = res; + flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23; + flag_V = ((src ^ dst) & (res ^ dst)) >> 24; + flag_N = res >> 24; + DREGu32((Opcode >> 9) & 7) = res; + POST_IO +RET(16) +} + +// SUBDa +OPCODE(0x9110) +{ + u32 adr, res; + u32 src, dst; + + src = DREGu8((Opcode >> 9) & 7); + adr = AREG((Opcode >> 0) & 7); + PRE_IO + READ_BYTE_F(adr, dst) + res = dst - src; + flag_N = flag_X = flag_C = res; + flag_V = (src ^ dst) & (res ^ dst); + flag_NotZ = res & 0xFF; + WRITE_BYTE_F(adr, res) + POST_IO +RET(12) +} + +// SUBDa +OPCODE(0x9118) +{ + u32 adr, res; + u32 src, dst; + + src = DREGu8((Opcode >> 9) & 7); + adr = AREG((Opcode >> 0) & 7); + AREG((Opcode >> 0) & 7) += 1; + PRE_IO + READ_BYTE_F(adr, dst) + res = dst - src; + flag_N = flag_X = flag_C = res; + flag_V = (src ^ dst) & (res ^ dst); + flag_NotZ = res & 0xFF; + WRITE_BYTE_F(adr, res) + POST_IO +RET(12) +} + +// SUBDa +OPCODE(0x9120) +{ + u32 adr, res; + u32 src, dst; + + src = DREGu8((Opcode >> 9) & 7); + adr = AREG((Opcode >> 0) & 7) - 1; + AREG((Opcode >> 0) & 7) = adr; + PRE_IO + READ_BYTE_F(adr, dst) + res = dst - src; + flag_N = flag_X = flag_C = res; + flag_V = (src ^ dst) & (res ^ dst); + flag_NotZ = res & 0xFF; + WRITE_BYTE_F(adr, res) + POST_IO +RET(14) +} + +// SUBDa +OPCODE(0x9128) +{ + u32 adr, res; + u32 src, dst; + + src = DREGu8((Opcode >> 9) & 7); + FETCH_SWORD(adr); + adr += AREG((Opcode >> 0) & 7); + PRE_IO + READ_BYTE_F(adr, dst) + res = dst - src; + flag_N = flag_X = flag_C = res; + flag_V = (src ^ dst) & (res ^ dst); + flag_NotZ = res & 0xFF; + WRITE_BYTE_F(adr, res) + POST_IO +RET(16) +} + +// SUBDa +OPCODE(0x9130) +{ + u32 adr, res; + u32 src, dst; + + src = DREGu8((Opcode >> 9) & 7); + adr = AREG((Opcode >> 0) & 7); + DECODE_EXT_WORD + PRE_IO + READ_BYTE_F(adr, dst) + res = dst - src; + flag_N = flag_X = flag_C = res; + flag_V = (src ^ dst) & (res ^ dst); + flag_NotZ = res & 0xFF; + WRITE_BYTE_F(adr, res) + POST_IO +RET(18) +} + +// SUBDa +OPCODE(0x9138) +{ + u32 adr, res; + u32 src, dst; + + src = DREGu8((Opcode >> 9) & 7); + FETCH_SWORD(adr); + PRE_IO + READ_BYTE_F(adr, dst) + res = dst - src; + flag_N = flag_X = flag_C = res; + flag_V = (src ^ dst) & (res ^ dst); + flag_NotZ = res & 0xFF; + WRITE_BYTE_F(adr, res) + POST_IO +RET(16) +} + +// SUBDa +OPCODE(0x9139) +{ + u32 adr, res; + u32 src, dst; + + src = DREGu8((Opcode >> 9) & 7); + FETCH_LONG(adr); + PRE_IO + READ_BYTE_F(adr, dst) + res = dst - src; + flag_N = flag_X = flag_C = res; + flag_V = (src ^ dst) & (res ^ dst); + flag_NotZ = res & 0xFF; + WRITE_BYTE_F(adr, res) + POST_IO +RET(20) +} + +// SUBDa +OPCODE(0x911F) +{ + u32 adr, res; + u32 src, dst; + + src = DREGu8((Opcode >> 9) & 7); + adr = AREG(7); + AREG(7) += 2; + PRE_IO + READ_BYTE_F(adr, dst) + res = dst - src; + flag_N = flag_X = flag_C = res; + flag_V = (src ^ dst) & (res ^ dst); + flag_NotZ = res & 0xFF; + WRITE_BYTE_F(adr, res) + POST_IO +RET(12) +} + +// SUBDa +OPCODE(0x9127) +{ + u32 adr, res; + u32 src, dst; + + src = DREGu8((Opcode >> 9) & 7); + adr = AREG(7) - 2; + AREG(7) = adr; + PRE_IO + READ_BYTE_F(adr, dst) + res = dst - src; + flag_N = flag_X = flag_C = res; + flag_V = (src ^ dst) & (res ^ dst); + flag_NotZ = res & 0xFF; + WRITE_BYTE_F(adr, res) + POST_IO +RET(14) +} + +// SUBDa +OPCODE(0x9150) +{ + u32 adr, res; + u32 src, dst; + + src = DREGu16((Opcode >> 9) & 7); + adr = AREG((Opcode >> 0) & 7); + PRE_IO + READ_WORD_F(adr, dst) + res = dst - src; + flag_V = ((src ^ dst) & (res ^ dst)) >> 8; + flag_N = flag_X = flag_C = res >> 8; + flag_NotZ = res & 0xFFFF; + WRITE_WORD_F(adr, res) + POST_IO +RET(12) +} + +// SUBDa +OPCODE(0x9158) +{ + u32 adr, res; + u32 src, dst; + + src = DREGu16((Opcode >> 9) & 7); + adr = AREG((Opcode >> 0) & 7); + AREG((Opcode >> 0) & 7) += 2; + PRE_IO + READ_WORD_F(adr, dst) + res = dst - src; + flag_V = ((src ^ dst) & (res ^ dst)) >> 8; + flag_N = flag_X = flag_C = res >> 8; + flag_NotZ = res & 0xFFFF; + WRITE_WORD_F(adr, res) + POST_IO +RET(12) +} + +// SUBDa +OPCODE(0x9160) +{ + u32 adr, res; + u32 src, dst; + + src = DREGu16((Opcode >> 9) & 7); + adr = AREG((Opcode >> 0) & 7) - 2; + AREG((Opcode >> 0) & 7) = adr; + PRE_IO + READ_WORD_F(adr, dst) + res = dst - src; + flag_V = ((src ^ dst) & (res ^ dst)) >> 8; + flag_N = flag_X = flag_C = res >> 8; + flag_NotZ = res & 0xFFFF; + WRITE_WORD_F(adr, res) + POST_IO +RET(14) +} + +// SUBDa +OPCODE(0x9168) +{ + u32 adr, res; + u32 src, dst; + + src = DREGu16((Opcode >> 9) & 7); + FETCH_SWORD(adr); + adr += AREG((Opcode >> 0) & 7); + PRE_IO + READ_WORD_F(adr, dst) + res = dst - src; + flag_V = ((src ^ dst) & (res ^ dst)) >> 8; + flag_N = flag_X = flag_C = res >> 8; + flag_NotZ = res & 0xFFFF; + WRITE_WORD_F(adr, res) + POST_IO +RET(16) +} + +// SUBDa +OPCODE(0x9170) +{ + u32 adr, res; + u32 src, dst; + + src = DREGu16((Opcode >> 9) & 7); + adr = AREG((Opcode >> 0) & 7); + DECODE_EXT_WORD + PRE_IO + READ_WORD_F(adr, dst) + res = dst - src; + flag_V = ((src ^ dst) & (res ^ dst)) >> 8; + flag_N = flag_X = flag_C = res >> 8; + flag_NotZ = res & 0xFFFF; + WRITE_WORD_F(adr, res) + POST_IO +RET(18) +} + +// SUBDa +OPCODE(0x9178) +{ + u32 adr, res; + u32 src, dst; + + src = DREGu16((Opcode >> 9) & 7); + FETCH_SWORD(adr); + PRE_IO + READ_WORD_F(adr, dst) + res = dst - src; + flag_V = ((src ^ dst) & (res ^ dst)) >> 8; + flag_N = flag_X = flag_C = res >> 8; + flag_NotZ = res & 0xFFFF; + WRITE_WORD_F(adr, res) + POST_IO +RET(16) +} + +// SUBDa +OPCODE(0x9179) +{ + u32 adr, res; + u32 src, dst; + + src = DREGu16((Opcode >> 9) & 7); + FETCH_LONG(adr); + PRE_IO + READ_WORD_F(adr, dst) + res = dst - src; + flag_V = ((src ^ dst) & (res ^ dst)) >> 8; + flag_N = flag_X = flag_C = res >> 8; + flag_NotZ = res & 0xFFFF; + WRITE_WORD_F(adr, res) + POST_IO +RET(20) +} + +// SUBDa +OPCODE(0x915F) +{ + u32 adr, res; + u32 src, dst; + + src = DREGu16((Opcode >> 9) & 7); + adr = AREG(7); + AREG(7) += 2; + PRE_IO + READ_WORD_F(adr, dst) + res = dst - src; + flag_V = ((src ^ dst) & (res ^ dst)) >> 8; + flag_N = flag_X = flag_C = res >> 8; + flag_NotZ = res & 0xFFFF; + WRITE_WORD_F(adr, res) + POST_IO +RET(12) +} + +// SUBDa +OPCODE(0x9167) +{ + u32 adr, res; + u32 src, dst; + + src = DREGu16((Opcode >> 9) & 7); + adr = AREG(7) - 2; + AREG(7) = adr; + PRE_IO + READ_WORD_F(adr, dst) + res = dst - src; + flag_V = ((src ^ dst) & (res ^ dst)) >> 8; + flag_N = flag_X = flag_C = res >> 8; + flag_NotZ = res & 0xFFFF; + WRITE_WORD_F(adr, res) + POST_IO +RET(14) +} + +// SUBDa +OPCODE(0x9190) +{ + u32 adr, res; + u32 src, dst; + + src = DREGu32((Opcode >> 9) & 7); + adr = AREG((Opcode >> 0) & 7); + PRE_IO + READ_LONG_F(adr, dst) + res = dst - src; + flag_NotZ = res; + flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23; + flag_V = ((src ^ dst) & (res ^ dst)) >> 24; + flag_N = res >> 24; + WRITE_LONG_F(adr, res) + POST_IO +RET(20) +} + +// SUBDa +OPCODE(0x9198) +{ + u32 adr, res; + u32 src, dst; + + src = DREGu32((Opcode >> 9) & 7); + adr = AREG((Opcode >> 0) & 7); + AREG((Opcode >> 0) & 7) += 4; + PRE_IO + READ_LONG_F(adr, dst) + res = dst - src; + flag_NotZ = res; + flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23; + flag_V = ((src ^ dst) & (res ^ dst)) >> 24; + flag_N = res >> 24; + WRITE_LONG_F(adr, res) + POST_IO +RET(20) +} + +// SUBDa +OPCODE(0x91A0) +{ + u32 adr, res; + u32 src, dst; + + src = DREGu32((Opcode >> 9) & 7); + adr = AREG((Opcode >> 0) & 7) - 4; + AREG((Opcode >> 0) & 7) = adr; + PRE_IO + READ_LONG_F(adr, dst) + res = dst - src; + flag_NotZ = res; + flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23; + flag_V = ((src ^ dst) & (res ^ dst)) >> 24; + flag_N = res >> 24; + WRITE_LONG_F(adr, res) + POST_IO +RET(22) +} + +// SUBDa +OPCODE(0x91A8) +{ + u32 adr, res; + u32 src, dst; + + src = DREGu32((Opcode >> 9) & 7); + FETCH_SWORD(adr); + adr += AREG((Opcode >> 0) & 7); + PRE_IO + READ_LONG_F(adr, dst) + res = dst - src; + flag_NotZ = res; + flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23; + flag_V = ((src ^ dst) & (res ^ dst)) >> 24; + flag_N = res >> 24; + WRITE_LONG_F(adr, res) + POST_IO +RET(24) +} + +// SUBDa +OPCODE(0x91B0) +{ + u32 adr, res; + u32 src, dst; + + src = DREGu32((Opcode >> 9) & 7); + adr = AREG((Opcode >> 0) & 7); + DECODE_EXT_WORD + PRE_IO + READ_LONG_F(adr, dst) + res = dst - src; + flag_NotZ = res; + flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23; + flag_V = ((src ^ dst) & (res ^ dst)) >> 24; + flag_N = res >> 24; + WRITE_LONG_F(adr, res) + POST_IO +RET(26) +} + +// SUBDa +OPCODE(0x91B8) +{ + u32 adr, res; + u32 src, dst; + + src = DREGu32((Opcode >> 9) & 7); + FETCH_SWORD(adr); + PRE_IO + READ_LONG_F(adr, dst) + res = dst - src; + flag_NotZ = res; + flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23; + flag_V = ((src ^ dst) & (res ^ dst)) >> 24; + flag_N = res >> 24; + WRITE_LONG_F(adr, res) + POST_IO +RET(24) +} + +// SUBDa +OPCODE(0x91B9) +{ + u32 adr, res; + u32 src, dst; + + src = DREGu32((Opcode >> 9) & 7); + FETCH_LONG(adr); + PRE_IO + READ_LONG_F(adr, dst) + res = dst - src; + flag_NotZ = res; + flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23; + flag_V = ((src ^ dst) & (res ^ dst)) >> 24; + flag_N = res >> 24; + WRITE_LONG_F(adr, res) + POST_IO +RET(28) +} + +// SUBDa +OPCODE(0x919F) +{ + u32 adr, res; + u32 src, dst; + + src = DREGu32((Opcode >> 9) & 7); + adr = AREG(7); + AREG(7) += 4; + PRE_IO + READ_LONG_F(adr, dst) + res = dst - src; + flag_NotZ = res; + flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23; + flag_V = ((src ^ dst) & (res ^ dst)) >> 24; + flag_N = res >> 24; + WRITE_LONG_F(adr, res) + POST_IO +RET(20) +} + +// SUBDa +OPCODE(0x91A7) +{ + u32 adr, res; + u32 src, dst; + + src = DREGu32((Opcode >> 9) & 7); + adr = AREG(7) - 4; + AREG(7) = adr; + PRE_IO + READ_LONG_F(adr, dst) + res = dst - src; + flag_NotZ = res; + flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23; + flag_V = ((src ^ dst) & (res ^ dst)) >> 24; + flag_N = res >> 24; + WRITE_LONG_F(adr, res) + POST_IO +RET(22) +} + +// SUBX +OPCODE(0x9100) +{ + u32 adr, res; + u32 src, dst; + + src = DREGu8((Opcode >> 0) & 7); + dst = DREGu8((Opcode >> 9) & 7); + res = dst - src - ((flag_X >> 8) & 1); + flag_N = flag_X = flag_C = res; + flag_V = (src ^ dst) & (res ^ dst); + flag_NotZ |= res & 0xFF; + DREGu8((Opcode >> 9) & 7) = res; +RET(4) +} + +// SUBX +OPCODE(0x9140) +{ + u32 adr, res; + u32 src, dst; + + src = DREGu16((Opcode >> 0) & 7); + dst = DREGu16((Opcode >> 9) & 7); + res = dst - src - ((flag_X >> 8) & 1); + flag_V = ((src ^ dst) & (res ^ dst)) >> 8; + flag_N = flag_X = flag_C = res >> 8; + flag_NotZ |= res & 0xFFFF; + DREGu16((Opcode >> 9) & 7) = res; +RET(4) +} + +// SUBX +OPCODE(0x9180) +{ + u32 adr, res; + u32 src, dst; + + src = DREGu32((Opcode >> 0) & 7); + dst = DREGu32((Opcode >> 9) & 7); + res = dst - src - ((flag_X >> 8) & 1); + flag_NotZ |= res; + flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23; + flag_V = ((src ^ dst) & (res ^ dst)) >> 24; + flag_N = res >> 24; + DREGu32((Opcode >> 9) & 7) = res; +RET(8) +} + +// SUBXM +OPCODE(0x9108) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7) - 1; + AREG((Opcode >> 0) & 7) = adr; + PRE_IO + READ_BYTE_F(adr, src) + adr = AREG((Opcode >> 9) & 7) - 1; + AREG((Opcode >> 9) & 7) = adr; + READ_BYTE_F(adr, dst) + res = dst - src - ((flag_X >> 8) & 1); + flag_N = flag_X = flag_C = res; + flag_V = (src ^ dst) & (res ^ dst); + flag_NotZ |= res & 0xFF; + WRITE_BYTE_F(adr, res) + POST_IO +RET(18) +} + +// SUBXM +OPCODE(0x9148) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7) - 2; + AREG((Opcode >> 0) & 7) = adr; + PRE_IO + READ_WORD_F(adr, src) + adr = AREG((Opcode >> 9) & 7) - 2; + AREG((Opcode >> 9) & 7) = adr; + READ_WORD_F(adr, dst) + res = dst - src - ((flag_X >> 8) & 1); + flag_V = ((src ^ dst) & (res ^ dst)) >> 8; + flag_N = flag_X = flag_C = res >> 8; + flag_NotZ |= res & 0xFFFF; + WRITE_WORD_F(adr, res) + POST_IO +RET(18) +} + +// SUBXM +OPCODE(0x9188) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7) - 4; + AREG((Opcode >> 0) & 7) = adr; + PRE_IO + READ_LONG_F(adr, src) + adr = AREG((Opcode >> 9) & 7) - 4; + AREG((Opcode >> 9) & 7) = adr; + READ_LONG_F(adr, dst) + res = dst - src - ((flag_X >> 8) & 1); + flag_NotZ |= res; + flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23; + flag_V = ((src ^ dst) & (res ^ dst)) >> 24; + flag_N = res >> 24; + WRITE_LONG_F(adr, res) + POST_IO +RET(30) +} + +// SUBX7M +OPCODE(0x910F) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7) - 2; + AREG(7) = adr; + PRE_IO + READ_BYTE_F(adr, src) + adr = AREG((Opcode >> 9) & 7) - 1; + AREG((Opcode >> 9) & 7) = adr; + READ_BYTE_F(adr, dst) + res = dst - src - ((flag_X >> 8) & 1); + flag_N = flag_X = flag_C = res; + flag_V = (src ^ dst) & (res ^ dst); + flag_NotZ |= res & 0xFF; + WRITE_BYTE_F(adr, res) + POST_IO +RET(18) +} + +// SUBX7M +OPCODE(0x914F) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7) - 2; + AREG(7) = adr; + PRE_IO + READ_WORD_F(adr, src) + adr = AREG((Opcode >> 9) & 7) - 2; + AREG((Opcode >> 9) & 7) = adr; + READ_WORD_F(adr, dst) + res = dst - src - ((flag_X >> 8) & 1); + flag_V = ((src ^ dst) & (res ^ dst)) >> 8; + flag_N = flag_X = flag_C = res >> 8; + flag_NotZ |= res & 0xFFFF; + WRITE_WORD_F(adr, res) + POST_IO +RET(18) +} + +// SUBX7M +OPCODE(0x918F) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7) - 4; + AREG(7) = adr; + PRE_IO + READ_LONG_F(adr, src) + adr = AREG((Opcode >> 9) & 7) - 4; + AREG((Opcode >> 9) & 7) = adr; + READ_LONG_F(adr, dst) + res = dst - src - ((flag_X >> 8) & 1); + flag_NotZ |= res; + flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23; + flag_V = ((src ^ dst) & (res ^ dst)) >> 24; + flag_N = res >> 24; + WRITE_LONG_F(adr, res) + POST_IO +RET(30) +} + +// SUBXM7 +OPCODE(0x9F08) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7) - 1; + AREG((Opcode >> 0) & 7) = adr; + PRE_IO + READ_BYTE_F(adr, src) + adr = AREG(7) - 2; + AREG(7) = adr; + READ_BYTE_F(adr, dst) + res = dst - src - ((flag_X >> 8) & 1); + flag_N = flag_X = flag_C = res; + flag_V = (src ^ dst) & (res ^ dst); + flag_NotZ |= res & 0xFF; + WRITE_BYTE_F(adr, res) + POST_IO +RET(18) +} + +// SUBXM7 +OPCODE(0x9F48) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7) - 2; + AREG((Opcode >> 0) & 7) = adr; + PRE_IO + READ_WORD_F(adr, src) + adr = AREG(7) - 2; + AREG(7) = adr; + READ_WORD_F(adr, dst) + res = dst - src - ((flag_X >> 8) & 1); + flag_V = ((src ^ dst) & (res ^ dst)) >> 8; + flag_N = flag_X = flag_C = res >> 8; + flag_NotZ |= res & 0xFFFF; + WRITE_WORD_F(adr, res) + POST_IO +RET(18) +} + +// SUBXM7 +OPCODE(0x9F88) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7) - 4; + AREG((Opcode >> 0) & 7) = adr; + PRE_IO + READ_LONG_F(adr, src) + adr = AREG(7) - 4; + AREG(7) = adr; + READ_LONG_F(adr, dst) + res = dst - src - ((flag_X >> 8) & 1); + flag_NotZ |= res; + flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23; + flag_V = ((src ^ dst) & (res ^ dst)) >> 24; + flag_N = res >> 24; + WRITE_LONG_F(adr, res) + POST_IO +RET(30) +} + +// SUBX7M7 +OPCODE(0x9F0F) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7) - 2; + AREG(7) = adr; + PRE_IO + READ_BYTE_F(adr, src) + adr = AREG(7) - 2; + AREG(7) = adr; + READ_BYTE_F(adr, dst) + res = dst - src - ((flag_X >> 8) & 1); + flag_N = flag_X = flag_C = res; + flag_V = (src ^ dst) & (res ^ dst); + flag_NotZ |= res & 0xFF; + WRITE_BYTE_F(adr, res) + POST_IO +RET(18) +} + +// SUBX7M7 +OPCODE(0x9F4F) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7) - 2; + AREG(7) = adr; + PRE_IO + READ_WORD_F(adr, src) + adr = AREG(7) - 2; + AREG(7) = adr; + READ_WORD_F(adr, dst) + res = dst - src - ((flag_X >> 8) & 1); + flag_V = ((src ^ dst) & (res ^ dst)) >> 8; + flag_N = flag_X = flag_C = res >> 8; + flag_NotZ |= res & 0xFFFF; + WRITE_WORD_F(adr, res) + POST_IO +RET(18) +} + +// SUBX7M7 +OPCODE(0x9F8F) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7) - 4; + AREG(7) = adr; + PRE_IO + READ_LONG_F(adr, src) + adr = AREG(7) - 4; + AREG(7) = adr; + READ_LONG_F(adr, dst) + res = dst - src - ((flag_X >> 8) & 1); + flag_NotZ |= res; + flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23; + flag_V = ((src ^ dst) & (res ^ dst)) >> 24; + flag_N = res >> 24; + WRITE_LONG_F(adr, res) + POST_IO +RET(30) +} + +// SUBA +OPCODE(0x90C0) +{ + u32 adr, res; + u32 src, dst; + + src = (s32)DREGs16((Opcode >> 0) & 7); + dst = AREGu32((Opcode >> 9) & 7); + res = dst - src; + AREG((Opcode >> 9) & 7) = res; +RET(8) +} + +// SUBA +OPCODE(0x90C8) +{ + u32 adr, res; + u32 src, dst; + + src = (s32)AREGs16((Opcode >> 0) & 7); + dst = AREGu32((Opcode >> 9) & 7); + res = dst - src; + AREG((Opcode >> 9) & 7) = res; +RET(8) +} + +// SUBA +OPCODE(0x90D0) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + PRE_IO + READSX_WORD_F(adr, src) + dst = AREGu32((Opcode >> 9) & 7); + res = dst - src; + AREG((Opcode >> 9) & 7) = res; + POST_IO +RET(10) +} + +// SUBA +OPCODE(0x90D8) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + AREG((Opcode >> 0) & 7) += 2; + PRE_IO + READSX_WORD_F(adr, src) + dst = AREGu32((Opcode >> 9) & 7); + res = dst - src; + AREG((Opcode >> 9) & 7) = res; + POST_IO +RET(10) +} + +// SUBA +OPCODE(0x90E0) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7) - 2; + AREG((Opcode >> 0) & 7) = adr; + PRE_IO + READSX_WORD_F(adr, src) + dst = AREGu32((Opcode >> 9) & 7); + res = dst - src; + AREG((Opcode >> 9) & 7) = res; + POST_IO +RET(12) +} + +// SUBA +OPCODE(0x90E8) +{ + u32 adr, res; + u32 src, dst; + + FETCH_SWORD(adr); + adr += AREG((Opcode >> 0) & 7); + PRE_IO + READSX_WORD_F(adr, src) + dst = AREGu32((Opcode >> 9) & 7); + res = dst - src; + AREG((Opcode >> 9) & 7) = res; + POST_IO +RET(14) +} + +// SUBA +OPCODE(0x90F0) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + DECODE_EXT_WORD + PRE_IO + READSX_WORD_F(adr, src) + dst = AREGu32((Opcode >> 9) & 7); + res = dst - src; + AREG((Opcode >> 9) & 7) = res; + POST_IO +RET(16) +} + +// SUBA +OPCODE(0x90F8) +{ + u32 adr, res; + u32 src, dst; + + FETCH_SWORD(adr); + PRE_IO + READSX_WORD_F(adr, src) + dst = AREGu32((Opcode >> 9) & 7); + res = dst - src; + AREG((Opcode >> 9) & 7) = res; + POST_IO +RET(14) +} + +// SUBA +OPCODE(0x90F9) +{ + u32 adr, res; + u32 src, dst; + + FETCH_LONG(adr); + PRE_IO + READSX_WORD_F(adr, src) + dst = AREGu32((Opcode >> 9) & 7); + res = dst - src; + AREG((Opcode >> 9) & 7) = res; + POST_IO +RET(18) +} + +// SUBA +OPCODE(0x90FA) +{ + u32 adr, res; + u32 src, dst; + + adr = GET_SWORD + ((u32)(PC) - BasePC); + PC++; + PRE_IO + READSX_WORD_F(adr, src) + dst = AREGu32((Opcode >> 9) & 7); + res = dst - src; + AREG((Opcode >> 9) & 7) = res; + POST_IO +RET(14) +} + +// SUBA +OPCODE(0x90FB) +{ + u32 adr, res; + u32 src, dst; + + adr = (u32)(PC) - BasePC; + DECODE_EXT_WORD + PRE_IO + READSX_WORD_F(adr, src) + dst = AREGu32((Opcode >> 9) & 7); + res = dst - src; + AREG((Opcode >> 9) & 7) = res; + POST_IO +RET(16) +} + +// SUBA +OPCODE(0x90FC) +{ + u32 adr, res; + u32 src, dst; + + FETCH_SWORD(src); + dst = AREGu32((Opcode >> 9) & 7); + res = dst - src; + AREG((Opcode >> 9) & 7) = res; +RET(12) +} + +// SUBA +OPCODE(0x90DF) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7); + AREG(7) += 2; + PRE_IO + READSX_WORD_F(adr, src) + dst = AREGu32((Opcode >> 9) & 7); + res = dst - src; + AREG((Opcode >> 9) & 7) = res; + POST_IO +RET(10) +} + +// SUBA +OPCODE(0x90E7) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7) - 2; + AREG(7) = adr; + PRE_IO + READSX_WORD_F(adr, src) + dst = AREGu32((Opcode >> 9) & 7); + res = dst - src; + AREG((Opcode >> 9) & 7) = res; + POST_IO +RET(12) +} + +// SUBA +OPCODE(0x91C0) +{ + u32 adr, res; + u32 src, dst; + + src = (s32)DREGs32((Opcode >> 0) & 7); + dst = AREGu32((Opcode >> 9) & 7); + res = dst - src; + AREG((Opcode >> 9) & 7) = res; +#ifdef USE_CYCLONE_TIMING +RET(8) +#else +RET(6) +#endif +} + +// SUBA +OPCODE(0x91C8) +{ + u32 adr, res; + u32 src, dst; + + src = (s32)AREGs32((Opcode >> 0) & 7); + dst = AREGu32((Opcode >> 9) & 7); + res = dst - src; + AREG((Opcode >> 9) & 7) = res; +#ifdef USE_CYCLONE_TIMING +RET(8) +#else +RET(6) +#endif +} + +// SUBA +OPCODE(0x91D0) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + PRE_IO + READSX_LONG_F(adr, src) + dst = AREGu32((Opcode >> 9) & 7); + res = dst - src; + AREG((Opcode >> 9) & 7) = res; + POST_IO +RET(14) +} + +// SUBA +OPCODE(0x91D8) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + AREG((Opcode >> 0) & 7) += 4; + PRE_IO + READSX_LONG_F(adr, src) + dst = AREGu32((Opcode >> 9) & 7); + res = dst - src; + AREG((Opcode >> 9) & 7) = res; + POST_IO +RET(14) +} + +// SUBA +OPCODE(0x91E0) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7) - 4; + AREG((Opcode >> 0) & 7) = adr; + PRE_IO + READSX_LONG_F(adr, src) + dst = AREGu32((Opcode >> 9) & 7); + res = dst - src; + AREG((Opcode >> 9) & 7) = res; + POST_IO +RET(16) +} + +// SUBA +OPCODE(0x91E8) +{ + u32 adr, res; + u32 src, dst; + + FETCH_SWORD(adr); + adr += AREG((Opcode >> 0) & 7); + PRE_IO + READSX_LONG_F(adr, src) + dst = AREGu32((Opcode >> 9) & 7); + res = dst - src; + AREG((Opcode >> 9) & 7) = res; + POST_IO +RET(18) +} + +// SUBA +OPCODE(0x91F0) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + DECODE_EXT_WORD + PRE_IO + READSX_LONG_F(adr, src) + dst = AREGu32((Opcode >> 9) & 7); + res = dst - src; + AREG((Opcode >> 9) & 7) = res; + POST_IO +RET(20) +} + +// SUBA +OPCODE(0x91F8) +{ + u32 adr, res; + u32 src, dst; + + FETCH_SWORD(adr); + PRE_IO + READSX_LONG_F(adr, src) + dst = AREGu32((Opcode >> 9) & 7); + res = dst - src; + AREG((Opcode >> 9) & 7) = res; + POST_IO +RET(18) +} + +// SUBA +OPCODE(0x91F9) +{ + u32 adr, res; + u32 src, dst; + + FETCH_LONG(adr); + PRE_IO + READSX_LONG_F(adr, src) + dst = AREGu32((Opcode >> 9) & 7); + res = dst - src; + AREG((Opcode >> 9) & 7) = res; + POST_IO +RET(22) +} + +// SUBA +OPCODE(0x91FA) +{ + u32 adr, res; + u32 src, dst; + + adr = GET_SWORD + ((u32)(PC) - BasePC); + PC++; + PRE_IO + READSX_LONG_F(adr, src) + dst = AREGu32((Opcode >> 9) & 7); + res = dst - src; + AREG((Opcode >> 9) & 7) = res; + POST_IO +RET(18) +} + +// SUBA +OPCODE(0x91FB) +{ + u32 adr, res; + u32 src, dst; + + adr = (u32)(PC) - BasePC; + DECODE_EXT_WORD + PRE_IO + READSX_LONG_F(adr, src) + dst = AREGu32((Opcode >> 9) & 7); + res = dst - src; + AREG((Opcode >> 9) & 7) = res; + POST_IO +RET(20) +} + +// SUBA +OPCODE(0x91FC) +{ + u32 adr, res; + u32 src, dst; + + FETCH_LONG(src); + dst = AREGu32((Opcode >> 9) & 7); + res = dst - src; + AREG((Opcode >> 9) & 7) = res; +#ifdef USE_CYCLONE_TIMING +RET(16) +#else +RET(14) +#endif +} + +// SUBA +OPCODE(0x91DF) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7); + AREG(7) += 4; + PRE_IO + READSX_LONG_F(adr, src) + dst = AREGu32((Opcode >> 9) & 7); + res = dst - src; + AREG((Opcode >> 9) & 7) = res; + POST_IO +RET(14) +} + +// SUBA +OPCODE(0x91E7) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7) - 4; + AREG(7) = adr; + PRE_IO + READSX_LONG_F(adr, src) + dst = AREGu32((Opcode >> 9) & 7); + res = dst - src; + AREG((Opcode >> 9) & 7) = res; + POST_IO +RET(16) +} + +// CMP +OPCODE(0xB000) +{ + u32 adr, res; + u32 src, dst; + + src = DREGu8((Opcode >> 0) & 7); + dst = DREGu8((Opcode >> 9) & 7); + res = dst - src; + flag_N = flag_C = res; + flag_V = (src ^ dst) & (res ^ dst); + flag_NotZ = res & 0xFF; +RET(4) +} + +// CMP +OPCODE(0xB008) +{ + u32 adr, res; + u32 src, dst; + + // can't read byte from Ax registers ! + m68kcontext.execinfo |= M68K_FAULTED; + m68kcontext.io_cycle_counter = 0; +/* + goto famec_Exec_End; + dst = DREGu8((Opcode >> 9) & 7); + res = dst - src; + flag_N = flag_C = res; + flag_V = (src ^ dst) & (res ^ dst); + flag_NotZ = res & 0xFF; +*/ +RET(4) +} + +// CMP +OPCODE(0xB010) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + PRE_IO + READ_BYTE_F(adr, src) + dst = DREGu8((Opcode >> 9) & 7); + res = dst - src; + flag_N = flag_C = res; + flag_V = (src ^ dst) & (res ^ dst); + flag_NotZ = res & 0xFF; + POST_IO +RET(8) +} + +// CMP +OPCODE(0xB018) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + AREG((Opcode >> 0) & 7) += 1; + PRE_IO + READ_BYTE_F(adr, src) + dst = DREGu8((Opcode >> 9) & 7); + res = dst - src; + flag_N = flag_C = res; + flag_V = (src ^ dst) & (res ^ dst); + flag_NotZ = res & 0xFF; + POST_IO +RET(8) +} + +// CMP +OPCODE(0xB020) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7) - 1; + AREG((Opcode >> 0) & 7) = adr; + PRE_IO + READ_BYTE_F(adr, src) + dst = DREGu8((Opcode >> 9) & 7); + res = dst - src; + flag_N = flag_C = res; + flag_V = (src ^ dst) & (res ^ dst); + flag_NotZ = res & 0xFF; + POST_IO +RET(10) +} + +// CMP +OPCODE(0xB028) +{ + u32 adr, res; + u32 src, dst; + + FETCH_SWORD(adr); + adr += AREG((Opcode >> 0) & 7); + PRE_IO + READ_BYTE_F(adr, src) + dst = DREGu8((Opcode >> 9) & 7); + res = dst - src; + flag_N = flag_C = res; + flag_V = (src ^ dst) & (res ^ dst); + flag_NotZ = res & 0xFF; + POST_IO +RET(12) +} + +// CMP +OPCODE(0xB030) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + DECODE_EXT_WORD + PRE_IO + READ_BYTE_F(adr, src) + dst = DREGu8((Opcode >> 9) & 7); + res = dst - src; + flag_N = flag_C = res; + flag_V = (src ^ dst) & (res ^ dst); + flag_NotZ = res & 0xFF; + POST_IO +RET(14) +} + +// CMP +OPCODE(0xB038) +{ + u32 adr, res; + u32 src, dst; + + FETCH_SWORD(adr); + PRE_IO + READ_BYTE_F(adr, src) + dst = DREGu8((Opcode >> 9) & 7); + res = dst - src; + flag_N = flag_C = res; + flag_V = (src ^ dst) & (res ^ dst); + flag_NotZ = res & 0xFF; + POST_IO +RET(12) +} + +// CMP +OPCODE(0xB039) +{ + u32 adr, res; + u32 src, dst; + + FETCH_LONG(adr); + PRE_IO + READ_BYTE_F(adr, src) + dst = DREGu8((Opcode >> 9) & 7); + res = dst - src; + flag_N = flag_C = res; + flag_V = (src ^ dst) & (res ^ dst); + flag_NotZ = res & 0xFF; + POST_IO +RET(16) +} + +// CMP +OPCODE(0xB03A) +{ + u32 adr, res; + u32 src, dst; + + adr = GET_SWORD + ((u32)(PC) - BasePC); + PC++; + PRE_IO + READ_BYTE_F(adr, src) + dst = DREGu8((Opcode >> 9) & 7); + res = dst - src; + flag_N = flag_C = res; + flag_V = (src ^ dst) & (res ^ dst); + flag_NotZ = res & 0xFF; + POST_IO +RET(12) +} + +// CMP +OPCODE(0xB03B) +{ + u32 adr, res; + u32 src, dst; + + adr = (u32)(PC) - BasePC; + DECODE_EXT_WORD + PRE_IO + READ_BYTE_F(adr, src) + dst = DREGu8((Opcode >> 9) & 7); + res = dst - src; + flag_N = flag_C = res; + flag_V = (src ^ dst) & (res ^ dst); + flag_NotZ = res & 0xFF; + POST_IO +RET(14) +} + +// CMP +OPCODE(0xB03C) +{ + u32 adr, res; + u32 src, dst; + + FETCH_BYTE(src); + dst = DREGu8((Opcode >> 9) & 7); + res = dst - src; + flag_N = flag_C = res; + flag_V = (src ^ dst) & (res ^ dst); + flag_NotZ = res & 0xFF; +RET(8) +} + +// CMP +OPCODE(0xB01F) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7); + AREG(7) += 2; + PRE_IO + READ_BYTE_F(adr, src) + dst = DREGu8((Opcode >> 9) & 7); + res = dst - src; + flag_N = flag_C = res; + flag_V = (src ^ dst) & (res ^ dst); + flag_NotZ = res & 0xFF; + POST_IO +RET(8) +} + +// CMP +OPCODE(0xB027) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7) - 2; + AREG(7) = adr; + PRE_IO + READ_BYTE_F(adr, src) + dst = DREGu8((Opcode >> 9) & 7); + res = dst - src; + flag_N = flag_C = res; + flag_V = (src ^ dst) & (res ^ dst); + flag_NotZ = res & 0xFF; + POST_IO +RET(10) +} + +// CMP +OPCODE(0xB040) +{ + u32 adr, res; + u32 src, dst; + + src = DREGu16((Opcode >> 0) & 7); + dst = DREGu16((Opcode >> 9) & 7); + res = dst - src; + flag_V = ((src ^ dst) & (res ^ dst)) >> 8; + flag_N = flag_C = res >> 8; + flag_NotZ = res & 0xFFFF; +RET(4) +} + +// CMP +OPCODE(0xB048) +{ + u32 adr, res; + u32 src, dst; + + src = AREGu16((Opcode >> 0) & 7); + dst = DREGu16((Opcode >> 9) & 7); + res = dst - src; + flag_V = ((src ^ dst) & (res ^ dst)) >> 8; + flag_N = flag_C = res >> 8; + flag_NotZ = res & 0xFFFF; +RET(4) +} + +// CMP +OPCODE(0xB050) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + PRE_IO + READ_WORD_F(adr, src) + dst = DREGu16((Opcode >> 9) & 7); + res = dst - src; + flag_V = ((src ^ dst) & (res ^ dst)) >> 8; + flag_N = flag_C = res >> 8; + flag_NotZ = res & 0xFFFF; + POST_IO +RET(8) +} + +// CMP +OPCODE(0xB058) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + AREG((Opcode >> 0) & 7) += 2; + PRE_IO + READ_WORD_F(adr, src) + dst = DREGu16((Opcode >> 9) & 7); + res = dst - src; + flag_V = ((src ^ dst) & (res ^ dst)) >> 8; + flag_N = flag_C = res >> 8; + flag_NotZ = res & 0xFFFF; + POST_IO +RET(8) +} + +// CMP +OPCODE(0xB060) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7) - 2; + AREG((Opcode >> 0) & 7) = adr; + PRE_IO + READ_WORD_F(adr, src) + dst = DREGu16((Opcode >> 9) & 7); + res = dst - src; + flag_V = ((src ^ dst) & (res ^ dst)) >> 8; + flag_N = flag_C = res >> 8; + flag_NotZ = res & 0xFFFF; + POST_IO +RET(10) +} + +// CMP +OPCODE(0xB068) +{ + u32 adr, res; + u32 src, dst; + + FETCH_SWORD(adr); + adr += AREG((Opcode >> 0) & 7); + PRE_IO + READ_WORD_F(adr, src) + dst = DREGu16((Opcode >> 9) & 7); + res = dst - src; + flag_V = ((src ^ dst) & (res ^ dst)) >> 8; + flag_N = flag_C = res >> 8; + flag_NotZ = res & 0xFFFF; + POST_IO +RET(12) +} + +// CMP +OPCODE(0xB070) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + DECODE_EXT_WORD + PRE_IO + READ_WORD_F(adr, src) + dst = DREGu16((Opcode >> 9) & 7); + res = dst - src; + flag_V = ((src ^ dst) & (res ^ dst)) >> 8; + flag_N = flag_C = res >> 8; + flag_NotZ = res & 0xFFFF; + POST_IO +RET(14) +} + +// CMP +OPCODE(0xB078) +{ + u32 adr, res; + u32 src, dst; + + FETCH_SWORD(adr); + PRE_IO + READ_WORD_F(adr, src) + dst = DREGu16((Opcode >> 9) & 7); + res = dst - src; + flag_V = ((src ^ dst) & (res ^ dst)) >> 8; + flag_N = flag_C = res >> 8; + flag_NotZ = res & 0xFFFF; + POST_IO +RET(12) +} + +// CMP +OPCODE(0xB079) +{ + u32 adr, res; + u32 src, dst; + + FETCH_LONG(adr); + PRE_IO + READ_WORD_F(adr, src) + dst = DREGu16((Opcode >> 9) & 7); + res = dst - src; + flag_V = ((src ^ dst) & (res ^ dst)) >> 8; + flag_N = flag_C = res >> 8; + flag_NotZ = res & 0xFFFF; + POST_IO +RET(16) +} + +// CMP +OPCODE(0xB07A) +{ + u32 adr, res; + u32 src, dst; + + adr = GET_SWORD + ((u32)(PC) - BasePC); + PC++; + PRE_IO + READ_WORD_F(adr, src) + dst = DREGu16((Opcode >> 9) & 7); + res = dst - src; + flag_V = ((src ^ dst) & (res ^ dst)) >> 8; + flag_N = flag_C = res >> 8; + flag_NotZ = res & 0xFFFF; + POST_IO +RET(12) +} + +// CMP +OPCODE(0xB07B) +{ + u32 adr, res; + u32 src, dst; + + adr = (u32)(PC) - BasePC; + DECODE_EXT_WORD + PRE_IO + READ_WORD_F(adr, src) + dst = DREGu16((Opcode >> 9) & 7); + res = dst - src; + flag_V = ((src ^ dst) & (res ^ dst)) >> 8; + flag_N = flag_C = res >> 8; + flag_NotZ = res & 0xFFFF; + POST_IO +RET(14) +} + +// CMP +OPCODE(0xB07C) +{ + u32 adr, res; + u32 src, dst; + + FETCH_WORD(src); + dst = DREGu16((Opcode >> 9) & 7); + res = dst - src; + flag_V = ((src ^ dst) & (res ^ dst)) >> 8; + flag_N = flag_C = res >> 8; + flag_NotZ = res & 0xFFFF; +RET(8) +} + +// CMP +OPCODE(0xB05F) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7); + AREG(7) += 2; + PRE_IO + READ_WORD_F(adr, src) + dst = DREGu16((Opcode >> 9) & 7); + res = dst - src; + flag_V = ((src ^ dst) & (res ^ dst)) >> 8; + flag_N = flag_C = res >> 8; + flag_NotZ = res & 0xFFFF; + POST_IO +RET(8) +} + +// CMP +OPCODE(0xB067) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7) - 2; + AREG(7) = adr; + PRE_IO + READ_WORD_F(adr, src) + dst = DREGu16((Opcode >> 9) & 7); + res = dst - src; + flag_V = ((src ^ dst) & (res ^ dst)) >> 8; + flag_N = flag_C = res >> 8; + flag_NotZ = res & 0xFFFF; + POST_IO +RET(10) +} + +// CMP +OPCODE(0xB080) +{ + u32 adr, res; + u32 src, dst; + + src = DREGu32((Opcode >> 0) & 7); + dst = DREGu32((Opcode >> 9) & 7); + res = dst - src; + flag_NotZ = res; + flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23; + flag_V = ((src ^ dst) & (res ^ dst)) >> 24; + flag_N = res >> 24; +RET(6) +} + +// CMP +OPCODE(0xB088) +{ + u32 adr, res; + u32 src, dst; + + src = AREGu32((Opcode >> 0) & 7); + dst = DREGu32((Opcode >> 9) & 7); + res = dst - src; + flag_NotZ = res; + flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23; + flag_V = ((src ^ dst) & (res ^ dst)) >> 24; + flag_N = res >> 24; +RET(6) +} + +// CMP +OPCODE(0xB090) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + PRE_IO + READ_LONG_F(adr, src) + dst = DREGu32((Opcode >> 9) & 7); + res = dst - src; + flag_NotZ = res; + flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23; + flag_V = ((src ^ dst) & (res ^ dst)) >> 24; + flag_N = res >> 24; + POST_IO +RET(14) +} + +// CMP +OPCODE(0xB098) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + AREG((Opcode >> 0) & 7) += 4; + PRE_IO + READ_LONG_F(adr, src) + dst = DREGu32((Opcode >> 9) & 7); + res = dst - src; + flag_NotZ = res; + flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23; + flag_V = ((src ^ dst) & (res ^ dst)) >> 24; + flag_N = res >> 24; + POST_IO +RET(14) +} + +// CMP +OPCODE(0xB0A0) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7) - 4; + AREG((Opcode >> 0) & 7) = adr; + PRE_IO + READ_LONG_F(adr, src) + dst = DREGu32((Opcode >> 9) & 7); + res = dst - src; + flag_NotZ = res; + flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23; + flag_V = ((src ^ dst) & (res ^ dst)) >> 24; + flag_N = res >> 24; + POST_IO +RET(16) +} + +// CMP +OPCODE(0xB0A8) +{ + u32 adr, res; + u32 src, dst; + + FETCH_SWORD(adr); + adr += AREG((Opcode >> 0) & 7); + PRE_IO + READ_LONG_F(adr, src) + dst = DREGu32((Opcode >> 9) & 7); + res = dst - src; + flag_NotZ = res; + flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23; + flag_V = ((src ^ dst) & (res ^ dst)) >> 24; + flag_N = res >> 24; + POST_IO +RET(18) +} + +// CMP +OPCODE(0xB0B0) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + DECODE_EXT_WORD + PRE_IO + READ_LONG_F(adr, src) + dst = DREGu32((Opcode >> 9) & 7); + res = dst - src; + flag_NotZ = res; + flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23; + flag_V = ((src ^ dst) & (res ^ dst)) >> 24; + flag_N = res >> 24; + POST_IO +RET(20) +} + +// CMP +OPCODE(0xB0B8) +{ + u32 adr, res; + u32 src, dst; + + FETCH_SWORD(adr); + PRE_IO + READ_LONG_F(adr, src) + dst = DREGu32((Opcode >> 9) & 7); + res = dst - src; + flag_NotZ = res; + flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23; + flag_V = ((src ^ dst) & (res ^ dst)) >> 24; + flag_N = res >> 24; + POST_IO +RET(18) +} + +// CMP +OPCODE(0xB0B9) +{ + u32 adr, res; + u32 src, dst; + + FETCH_LONG(adr); + PRE_IO + READ_LONG_F(adr, src) + dst = DREGu32((Opcode >> 9) & 7); + res = dst - src; + flag_NotZ = res; + flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23; + flag_V = ((src ^ dst) & (res ^ dst)) >> 24; + flag_N = res >> 24; + POST_IO +RET(22) +} + +// CMP +OPCODE(0xB0BA) +{ + u32 adr, res; + u32 src, dst; + + adr = GET_SWORD + ((u32)(PC) - BasePC); + PC++; + PRE_IO + READ_LONG_F(adr, src) + dst = DREGu32((Opcode >> 9) & 7); + res = dst - src; + flag_NotZ = res; + flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23; + flag_V = ((src ^ dst) & (res ^ dst)) >> 24; + flag_N = res >> 24; + POST_IO +RET(18) +} + +// CMP +OPCODE(0xB0BB) +{ + u32 adr, res; + u32 src, dst; + + adr = (u32)(PC) - BasePC; + DECODE_EXT_WORD + PRE_IO + READ_LONG_F(adr, src) + dst = DREGu32((Opcode >> 9) & 7); + res = dst - src; + flag_NotZ = res; + flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23; + flag_V = ((src ^ dst) & (res ^ dst)) >> 24; + flag_N = res >> 24; + POST_IO +RET(20) +} + +// CMP +OPCODE(0xB0BC) +{ + u32 adr, res; + u32 src, dst; + + FETCH_LONG(src); + dst = DREGu32((Opcode >> 9) & 7); + res = dst - src; + flag_NotZ = res; + flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23; + flag_V = ((src ^ dst) & (res ^ dst)) >> 24; + flag_N = res >> 24; +RET(14) +} + +// CMP +OPCODE(0xB09F) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7); + AREG(7) += 4; + PRE_IO + READ_LONG_F(adr, src) + dst = DREGu32((Opcode >> 9) & 7); + res = dst - src; + flag_NotZ = res; + flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23; + flag_V = ((src ^ dst) & (res ^ dst)) >> 24; + flag_N = res >> 24; + POST_IO +RET(14) +} + +// CMP +OPCODE(0xB0A7) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7) - 4; + AREG(7) = adr; + PRE_IO + READ_LONG_F(adr, src) + dst = DREGu32((Opcode >> 9) & 7); + res = dst - src; + flag_NotZ = res; + flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23; + flag_V = ((src ^ dst) & (res ^ dst)) >> 24; + flag_N = res >> 24; + POST_IO +RET(16) +} + +// CMPM +OPCODE(0xB108) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + AREG((Opcode >> 0) & 7) += 1; + PRE_IO + READ_BYTE_F(adr, src) + adr = AREG((Opcode >> 9) & 7); + AREG((Opcode >> 9) & 7) += 1; + READ_BYTE_F(adr, dst) + res = dst - src; + flag_N = flag_C = res; + flag_V = (src ^ dst) & (res ^ dst); + flag_NotZ = res & 0xFF; + POST_IO +RET(12) +} + +// CMPM +OPCODE(0xB148) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + AREG((Opcode >> 0) & 7) += 2; + PRE_IO + READ_WORD_F(adr, src) + adr = AREG((Opcode >> 9) & 7); + AREG((Opcode >> 9) & 7) += 2; + READ_WORD_F(adr, dst) + res = dst - src; + flag_V = ((src ^ dst) & (res ^ dst)) >> 8; + flag_N = flag_C = res >> 8; + flag_NotZ = res & 0xFFFF; + POST_IO +RET(12) +} + +// CMPM +OPCODE(0xB188) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + AREG((Opcode >> 0) & 7) += 4; + PRE_IO + READ_LONG_F(adr, src) + adr = AREG((Opcode >> 9) & 7); + AREG((Opcode >> 9) & 7) += 4; + READ_LONG_F(adr, dst) + res = dst - src; + flag_NotZ = res; + flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23; + flag_V = ((src ^ dst) & (res ^ dst)) >> 24; + flag_N = res >> 24; + POST_IO +RET(20) +} + +// CMP7M +OPCODE(0xB10F) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7); + AREG(7) += 2; + PRE_IO + READ_BYTE_F(adr, src) + adr = AREG((Opcode >> 9) & 7); + AREG((Opcode >> 9) & 7) += 1; + READ_BYTE_F(adr, dst) + res = dst - src; + flag_N = flag_C = res; + flag_V = (src ^ dst) & (res ^ dst); + flag_NotZ = res & 0xFF; + POST_IO +RET(12) +} + +// CMP7M +OPCODE(0xB14F) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7); + AREG(7) += 2; + PRE_IO + READ_WORD_F(adr, src) + adr = AREG((Opcode >> 9) & 7); + AREG((Opcode >> 9) & 7) += 2; + READ_WORD_F(adr, dst) + res = dst - src; + flag_V = ((src ^ dst) & (res ^ dst)) >> 8; + flag_N = flag_C = res >> 8; + flag_NotZ = res & 0xFFFF; + POST_IO +RET(12) +} + +// CMP7M +OPCODE(0xB18F) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7); + AREG(7) += 4; + PRE_IO + READ_LONG_F(adr, src) + adr = AREG((Opcode >> 9) & 7); + AREG((Opcode >> 9) & 7) += 4; + READ_LONG_F(adr, dst) + res = dst - src; + flag_NotZ = res; + flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23; + flag_V = ((src ^ dst) & (res ^ dst)) >> 24; + flag_N = res >> 24; + POST_IO +RET(20) +} + +// CMPM7 +OPCODE(0xBF08) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + AREG((Opcode >> 0) & 7) += 1; + PRE_IO + READ_BYTE_F(adr, src) + adr = AREG(7); + AREG(7) += 2; + READ_BYTE_F(adr, dst) + res = dst - src; + flag_N = flag_C = res; + flag_V = (src ^ dst) & (res ^ dst); + flag_NotZ = res & 0xFF; + POST_IO +RET(12) +} + +// CMPM7 +OPCODE(0xBF48) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + AREG((Opcode >> 0) & 7) += 2; + PRE_IO + READ_WORD_F(adr, src) + adr = AREG(7); + AREG(7) += 2; + READ_WORD_F(adr, dst) + res = dst - src; + flag_V = ((src ^ dst) & (res ^ dst)) >> 8; + flag_N = flag_C = res >> 8; + flag_NotZ = res & 0xFFFF; + POST_IO +RET(12) +} + +// CMPM7 +OPCODE(0xBF88) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + AREG((Opcode >> 0) & 7) += 4; + PRE_IO + READ_LONG_F(adr, src) + adr = AREG(7); + AREG(7) += 4; + READ_LONG_F(adr, dst) + res = dst - src; + flag_NotZ = res; + flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23; + flag_V = ((src ^ dst) & (res ^ dst)) >> 24; + flag_N = res >> 24; + POST_IO +RET(20) +} + +// CMP7M7 +OPCODE(0xBF0F) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7); + AREG(7) += 2; + PRE_IO + READ_BYTE_F(adr, src) + adr = AREG(7); + AREG(7) += 2; + READ_BYTE_F(adr, dst) + res = dst - src; + flag_N = flag_C = res; + flag_V = (src ^ dst) & (res ^ dst); + flag_NotZ = res & 0xFF; + POST_IO +RET(12) +} + +// CMP7M7 +OPCODE(0xBF4F) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7); + AREG(7) += 2; + PRE_IO + READ_WORD_F(adr, src) + adr = AREG(7); + AREG(7) += 2; + READ_WORD_F(adr, dst) + res = dst - src; + flag_V = ((src ^ dst) & (res ^ dst)) >> 8; + flag_N = flag_C = res >> 8; + flag_NotZ = res & 0xFFFF; + POST_IO +RET(12) +} + +// CMP7M7 +OPCODE(0xBF8F) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7); + AREG(7) += 4; + PRE_IO + READ_LONG_F(adr, src) + adr = AREG(7); + AREG(7) += 4; + READ_LONG_F(adr, dst) + res = dst - src; + flag_NotZ = res; + flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23; + flag_V = ((src ^ dst) & (res ^ dst)) >> 24; + flag_N = res >> 24; + POST_IO +RET(20) +} + +// EORDa +OPCODE(0xB100) +{ + u32 adr, res; + u32 src, dst; + + src = DREGu8((Opcode >> 9) & 7); + res = DREGu8((Opcode >> 0) & 7); + res ^= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + DREGu8((Opcode >> 0) & 7) = res; +RET(4) +} + +// EORDa +OPCODE(0xB110) +{ + u32 adr, res; + u32 src, dst; + + src = DREGu8((Opcode >> 9) & 7); + adr = AREG((Opcode >> 0) & 7); + PRE_IO + READ_BYTE_F(adr, res) + res ^= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + WRITE_BYTE_F(adr, res) + POST_IO +RET(12) +} + +// EORDa +OPCODE(0xB118) +{ + u32 adr, res; + u32 src, dst; + + src = DREGu8((Opcode >> 9) & 7); + adr = AREG((Opcode >> 0) & 7); + AREG((Opcode >> 0) & 7) += 1; + PRE_IO + READ_BYTE_F(adr, res) + res ^= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + WRITE_BYTE_F(adr, res) + POST_IO +RET(12) +} + +// EORDa +OPCODE(0xB120) +{ + u32 adr, res; + u32 src, dst; + + src = DREGu8((Opcode >> 9) & 7); + adr = AREG((Opcode >> 0) & 7) - 1; + AREG((Opcode >> 0) & 7) = adr; + PRE_IO + READ_BYTE_F(adr, res) + res ^= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + WRITE_BYTE_F(adr, res) + POST_IO +RET(14) +} + +// EORDa +OPCODE(0xB128) +{ + u32 adr, res; + u32 src, dst; + + src = DREGu8((Opcode >> 9) & 7); + FETCH_SWORD(adr); + adr += AREG((Opcode >> 0) & 7); + PRE_IO + READ_BYTE_F(adr, res) + res ^= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + WRITE_BYTE_F(adr, res) + POST_IO +RET(16) +} + +// EORDa +OPCODE(0xB130) +{ + u32 adr, res; + u32 src, dst; + + src = DREGu8((Opcode >> 9) & 7); + adr = AREG((Opcode >> 0) & 7); + DECODE_EXT_WORD + PRE_IO + READ_BYTE_F(adr, res) + res ^= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + WRITE_BYTE_F(adr, res) + POST_IO +RET(18) +} + +// EORDa +OPCODE(0xB138) +{ + u32 adr, res; + u32 src, dst; + + src = DREGu8((Opcode >> 9) & 7); + FETCH_SWORD(adr); + PRE_IO + READ_BYTE_F(adr, res) + res ^= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + WRITE_BYTE_F(adr, res) + POST_IO +RET(16) +} + +// EORDa +OPCODE(0xB139) +{ + u32 adr, res; + u32 src, dst; + + src = DREGu8((Opcode >> 9) & 7); + FETCH_LONG(adr); + PRE_IO + READ_BYTE_F(adr, res) + res ^= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + WRITE_BYTE_F(adr, res) + POST_IO +RET(20) +} + +// EORDa +OPCODE(0xB11F) +{ + u32 adr, res; + u32 src, dst; + + src = DREGu8((Opcode >> 9) & 7); + adr = AREG(7); + AREG(7) += 2; + PRE_IO + READ_BYTE_F(adr, res) + res ^= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + WRITE_BYTE_F(adr, res) + POST_IO +RET(12) +} + +// EORDa +OPCODE(0xB127) +{ + u32 adr, res; + u32 src, dst; + + src = DREGu8((Opcode >> 9) & 7); + adr = AREG(7) - 2; + AREG(7) = adr; + PRE_IO + READ_BYTE_F(adr, res) + res ^= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + WRITE_BYTE_F(adr, res) + POST_IO +RET(14) +} + +// EORDa +OPCODE(0xB140) +{ + u32 adr, res; + u32 src, dst; + + src = DREGu16((Opcode >> 9) & 7); + res = DREGu16((Opcode >> 0) & 7); + res ^= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + DREGu16((Opcode >> 0) & 7) = res; +RET(4) +} + +// EORDa +OPCODE(0xB150) +{ + u32 adr, res; + u32 src, dst; + + src = DREGu16((Opcode >> 9) & 7); + adr = AREG((Opcode >> 0) & 7); + PRE_IO + READ_WORD_F(adr, res) + res ^= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + WRITE_WORD_F(adr, res) + POST_IO +RET(12) +} + +// EORDa +OPCODE(0xB158) +{ + u32 adr, res; + u32 src, dst; + + src = DREGu16((Opcode >> 9) & 7); + adr = AREG((Opcode >> 0) & 7); + AREG((Opcode >> 0) & 7) += 2; + PRE_IO + READ_WORD_F(adr, res) + res ^= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + WRITE_WORD_F(adr, res) + POST_IO +RET(12) +} + +// EORDa +OPCODE(0xB160) +{ + u32 adr, res; + u32 src, dst; + + src = DREGu16((Opcode >> 9) & 7); + adr = AREG((Opcode >> 0) & 7) - 2; + AREG((Opcode >> 0) & 7) = adr; + PRE_IO + READ_WORD_F(adr, res) + res ^= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + WRITE_WORD_F(adr, res) + POST_IO +RET(14) +} + +// EORDa +OPCODE(0xB168) +{ + u32 adr, res; + u32 src, dst; + + src = DREGu16((Opcode >> 9) & 7); + FETCH_SWORD(adr); + adr += AREG((Opcode >> 0) & 7); + PRE_IO + READ_WORD_F(adr, res) + res ^= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + WRITE_WORD_F(adr, res) + POST_IO +RET(16) +} + +// EORDa +OPCODE(0xB170) +{ + u32 adr, res; + u32 src, dst; + + src = DREGu16((Opcode >> 9) & 7); + adr = AREG((Opcode >> 0) & 7); + DECODE_EXT_WORD + PRE_IO + READ_WORD_F(adr, res) + res ^= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + WRITE_WORD_F(adr, res) + POST_IO +RET(18) +} + +// EORDa +OPCODE(0xB178) +{ + u32 adr, res; + u32 src, dst; + + src = DREGu16((Opcode >> 9) & 7); + FETCH_SWORD(adr); + PRE_IO + READ_WORD_F(adr, res) + res ^= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + WRITE_WORD_F(adr, res) + POST_IO +RET(16) +} + +// EORDa +OPCODE(0xB179) +{ + u32 adr, res; + u32 src, dst; + + src = DREGu16((Opcode >> 9) & 7); + FETCH_LONG(adr); + PRE_IO + READ_WORD_F(adr, res) + res ^= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + WRITE_WORD_F(adr, res) + POST_IO +RET(20) +} + +// EORDa +OPCODE(0xB15F) +{ + u32 adr, res; + u32 src, dst; + + src = DREGu16((Opcode >> 9) & 7); + adr = AREG(7); + AREG(7) += 2; + PRE_IO + READ_WORD_F(adr, res) + res ^= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + WRITE_WORD_F(adr, res) + POST_IO +RET(12) +} + +// EORDa +OPCODE(0xB167) +{ + u32 adr, res; + u32 src, dst; + + src = DREGu16((Opcode >> 9) & 7); + adr = AREG(7) - 2; + AREG(7) = adr; + PRE_IO + READ_WORD_F(adr, res) + res ^= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + WRITE_WORD_F(adr, res) + POST_IO +RET(14) +} + +// EORDa +OPCODE(0xB180) +{ + u32 adr, res; + u32 src, dst; + + src = DREGu32((Opcode >> 9) & 7); + res = DREGu32((Opcode >> 0) & 7); + res ^= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + DREGu32((Opcode >> 0) & 7) = res; +RET(8) +} + +// EORDa +OPCODE(0xB190) +{ + u32 adr, res; + u32 src, dst; + + src = DREGu32((Opcode >> 9) & 7); + adr = AREG((Opcode >> 0) & 7); + PRE_IO + READ_LONG_F(adr, res) + res ^= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + WRITE_LONG_F(adr, res) + POST_IO +RET(20) +} + +// EORDa +OPCODE(0xB198) +{ + u32 adr, res; + u32 src, dst; + + src = DREGu32((Opcode >> 9) & 7); + adr = AREG((Opcode >> 0) & 7); + AREG((Opcode >> 0) & 7) += 4; + PRE_IO + READ_LONG_F(adr, res) + res ^= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + WRITE_LONG_F(adr, res) + POST_IO +RET(20) +} + +// EORDa +OPCODE(0xB1A0) +{ + u32 adr, res; + u32 src, dst; + + src = DREGu32((Opcode >> 9) & 7); + adr = AREG((Opcode >> 0) & 7) - 4; + AREG((Opcode >> 0) & 7) = adr; + PRE_IO + READ_LONG_F(adr, res) + res ^= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + WRITE_LONG_F(adr, res) + POST_IO +RET(22) +} + +// EORDa +OPCODE(0xB1A8) +{ + u32 adr, res; + u32 src, dst; + + src = DREGu32((Opcode >> 9) & 7); + FETCH_SWORD(adr); + adr += AREG((Opcode >> 0) & 7); + PRE_IO + READ_LONG_F(adr, res) + res ^= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + WRITE_LONG_F(adr, res) + POST_IO +RET(24) +} + +// EORDa +OPCODE(0xB1B0) +{ + u32 adr, res; + u32 src, dst; + + src = DREGu32((Opcode >> 9) & 7); + adr = AREG((Opcode >> 0) & 7); + DECODE_EXT_WORD + PRE_IO + READ_LONG_F(adr, res) + res ^= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + WRITE_LONG_F(adr, res) + POST_IO +RET(26) +} + +// EORDa +OPCODE(0xB1B8) +{ + u32 adr, res; + u32 src, dst; + + src = DREGu32((Opcode >> 9) & 7); + FETCH_SWORD(adr); + PRE_IO + READ_LONG_F(adr, res) + res ^= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + WRITE_LONG_F(adr, res) + POST_IO +RET(24) +} + +// EORDa +OPCODE(0xB1B9) +{ + u32 adr, res; + u32 src, dst; + + src = DREGu32((Opcode >> 9) & 7); + FETCH_LONG(adr); + PRE_IO + READ_LONG_F(adr, res) + res ^= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + WRITE_LONG_F(adr, res) + POST_IO +RET(28) +} + +// EORDa +OPCODE(0xB19F) +{ + u32 adr, res; + u32 src, dst; + + src = DREGu32((Opcode >> 9) & 7); + adr = AREG(7); + AREG(7) += 4; + PRE_IO + READ_LONG_F(adr, res) + res ^= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + WRITE_LONG_F(adr, res) + POST_IO +RET(20) +} + +// EORDa +OPCODE(0xB1A7) +{ + u32 adr, res; + u32 src, dst; + + src = DREGu32((Opcode >> 9) & 7); + adr = AREG(7) - 4; + AREG(7) = adr; + PRE_IO + READ_LONG_F(adr, res) + res ^= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + WRITE_LONG_F(adr, res) + POST_IO +RET(22) +} + +// CMPA +OPCODE(0xB0C0) +{ + u32 adr, res; + u32 src, dst; + + src = (s32)DREGs16((Opcode >> 0) & 7); + dst = AREGu32((Opcode >> 9) & 7); + res = dst - src; + flag_NotZ = res; + flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23; + flag_V = ((src ^ dst) & (res ^ dst)) >> 24; + flag_N = res >> 24; +RET(6) +} + +// CMPA +OPCODE(0xB0C8) +{ + u32 adr, res; + u32 src, dst; + + src = (s32)AREGs16((Opcode >> 0) & 7); + dst = AREGu32((Opcode >> 9) & 7); + res = dst - src; + flag_NotZ = res; + flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23; + flag_V = ((src ^ dst) & (res ^ dst)) >> 24; + flag_N = res >> 24; +RET(6) +} + +// CMPA +OPCODE(0xB0D0) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + PRE_IO + READSX_WORD_F(adr, src) + dst = AREGu32((Opcode >> 9) & 7); + res = dst - src; + flag_NotZ = res; + flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23; + flag_V = ((src ^ dst) & (res ^ dst)) >> 24; + flag_N = res >> 24; + POST_IO +RET(10) +} + +// CMPA +OPCODE(0xB0D8) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + AREG((Opcode >> 0) & 7) += 2; + PRE_IO + READSX_WORD_F(adr, src) + dst = AREGu32((Opcode >> 9) & 7); + res = dst - src; + flag_NotZ = res; + flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23; + flag_V = ((src ^ dst) & (res ^ dst)) >> 24; + flag_N = res >> 24; + POST_IO +RET(10) +} + +// CMPA +OPCODE(0xB0E0) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7) - 2; + AREG((Opcode >> 0) & 7) = adr; + PRE_IO + READSX_WORD_F(adr, src) + dst = AREGu32((Opcode >> 9) & 7); + res = dst - src; + flag_NotZ = res; + flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23; + flag_V = ((src ^ dst) & (res ^ dst)) >> 24; + flag_N = res >> 24; + POST_IO +RET(12) +} + +// CMPA +OPCODE(0xB0E8) +{ + u32 adr, res; + u32 src, dst; + + FETCH_SWORD(adr); + adr += AREG((Opcode >> 0) & 7); + PRE_IO + READSX_WORD_F(adr, src) + dst = AREGu32((Opcode >> 9) & 7); + res = dst - src; + flag_NotZ = res; + flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23; + flag_V = ((src ^ dst) & (res ^ dst)) >> 24; + flag_N = res >> 24; + POST_IO +RET(14) +} + +// CMPA +OPCODE(0xB0F0) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + DECODE_EXT_WORD + PRE_IO + READSX_WORD_F(adr, src) + dst = AREGu32((Opcode >> 9) & 7); + res = dst - src; + flag_NotZ = res; + flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23; + flag_V = ((src ^ dst) & (res ^ dst)) >> 24; + flag_N = res >> 24; + POST_IO +RET(16) +} + +// CMPA +OPCODE(0xB0F8) +{ + u32 adr, res; + u32 src, dst; + + FETCH_SWORD(adr); + PRE_IO + READSX_WORD_F(adr, src) + dst = AREGu32((Opcode >> 9) & 7); + res = dst - src; + flag_NotZ = res; + flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23; + flag_V = ((src ^ dst) & (res ^ dst)) >> 24; + flag_N = res >> 24; + POST_IO +RET(14) +} + +// CMPA +OPCODE(0xB0F9) +{ + u32 adr, res; + u32 src, dst; + + FETCH_LONG(adr); + PRE_IO + READSX_WORD_F(adr, src) + dst = AREGu32((Opcode >> 9) & 7); + res = dst - src; + flag_NotZ = res; + flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23; + flag_V = ((src ^ dst) & (res ^ dst)) >> 24; + flag_N = res >> 24; + POST_IO +RET(18) +} + +// CMPA +OPCODE(0xB0FA) +{ + u32 adr, res; + u32 src, dst; + + adr = GET_SWORD + ((u32)(PC) - BasePC); + PC++; + PRE_IO + READSX_WORD_F(adr, src) + dst = AREGu32((Opcode >> 9) & 7); + res = dst - src; + flag_NotZ = res; + flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23; + flag_V = ((src ^ dst) & (res ^ dst)) >> 24; + flag_N = res >> 24; + POST_IO +RET(14) +} + +// CMPA +OPCODE(0xB0FB) +{ + u32 adr, res; + u32 src, dst; + + adr = (u32)(PC) - BasePC; + DECODE_EXT_WORD + PRE_IO + READSX_WORD_F(adr, src) + dst = AREGu32((Opcode >> 9) & 7); + res = dst - src; + flag_NotZ = res; + flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23; + flag_V = ((src ^ dst) & (res ^ dst)) >> 24; + flag_N = res >> 24; + POST_IO +RET(16) +} + +// CMPA +OPCODE(0xB0FC) +{ + u32 adr, res; + u32 src, dst; + + FETCH_SWORD(src); + dst = AREGu32((Opcode >> 9) & 7); + res = dst - src; + flag_NotZ = res; + flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23; + flag_V = ((src ^ dst) & (res ^ dst)) >> 24; + flag_N = res >> 24; +RET(10) +} + +// CMPA +OPCODE(0xB0DF) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7); + AREG(7) += 2; + PRE_IO + READSX_WORD_F(adr, src) + dst = AREGu32((Opcode >> 9) & 7); + res = dst - src; + flag_NotZ = res; + flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23; + flag_V = ((src ^ dst) & (res ^ dst)) >> 24; + flag_N = res >> 24; + POST_IO +RET(10) +} + +// CMPA +OPCODE(0xB0E7) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7) - 2; + AREG(7) = adr; + PRE_IO + READSX_WORD_F(adr, src) + dst = AREGu32((Opcode >> 9) & 7); + res = dst - src; + flag_NotZ = res; + flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23; + flag_V = ((src ^ dst) & (res ^ dst)) >> 24; + flag_N = res >> 24; + POST_IO +RET(12) +} + +// CMPA +OPCODE(0xB1C0) +{ + u32 adr, res; + u32 src, dst; + + src = (s32)DREGs32((Opcode >> 0) & 7); + dst = AREGu32((Opcode >> 9) & 7); + res = dst - src; + flag_NotZ = res; + flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23; + flag_V = ((src ^ dst) & (res ^ dst)) >> 24; + flag_N = res >> 24; +RET(6) +} + +// CMPA +OPCODE(0xB1C8) +{ + u32 adr, res; + u32 src, dst; + + src = (s32)AREGs32((Opcode >> 0) & 7); + dst = AREGu32((Opcode >> 9) & 7); + res = dst - src; + flag_NotZ = res; + flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23; + flag_V = ((src ^ dst) & (res ^ dst)) >> 24; + flag_N = res >> 24; +RET(6) +} + +// CMPA +OPCODE(0xB1D0) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + PRE_IO + READSX_LONG_F(adr, src) + dst = AREGu32((Opcode >> 9) & 7); + res = dst - src; + flag_NotZ = res; + flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23; + flag_V = ((src ^ dst) & (res ^ dst)) >> 24; + flag_N = res >> 24; + POST_IO +RET(14) +} + +// CMPA +OPCODE(0xB1D8) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + AREG((Opcode >> 0) & 7) += 4; + PRE_IO + READSX_LONG_F(adr, src) + dst = AREGu32((Opcode >> 9) & 7); + res = dst - src; + flag_NotZ = res; + flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23; + flag_V = ((src ^ dst) & (res ^ dst)) >> 24; + flag_N = res >> 24; + POST_IO +RET(14) +} + +// CMPA +OPCODE(0xB1E0) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7) - 4; + AREG((Opcode >> 0) & 7) = adr; + PRE_IO + READSX_LONG_F(adr, src) + dst = AREGu32((Opcode >> 9) & 7); + res = dst - src; + flag_NotZ = res; + flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23; + flag_V = ((src ^ dst) & (res ^ dst)) >> 24; + flag_N = res >> 24; + POST_IO +RET(16) +} + +// CMPA +OPCODE(0xB1E8) +{ + u32 adr, res; + u32 src, dst; + + FETCH_SWORD(adr); + adr += AREG((Opcode >> 0) & 7); + PRE_IO + READSX_LONG_F(adr, src) + dst = AREGu32((Opcode >> 9) & 7); + res = dst - src; + flag_NotZ = res; + flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23; + flag_V = ((src ^ dst) & (res ^ dst)) >> 24; + flag_N = res >> 24; + POST_IO +RET(18) +} + +// CMPA +OPCODE(0xB1F0) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + DECODE_EXT_WORD + PRE_IO + READSX_LONG_F(adr, src) + dst = AREGu32((Opcode >> 9) & 7); + res = dst - src; + flag_NotZ = res; + flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23; + flag_V = ((src ^ dst) & (res ^ dst)) >> 24; + flag_N = res >> 24; + POST_IO +RET(20) +} + +// CMPA +OPCODE(0xB1F8) +{ + u32 adr, res; + u32 src, dst; + + FETCH_SWORD(adr); + PRE_IO + READSX_LONG_F(adr, src) + dst = AREGu32((Opcode >> 9) & 7); + res = dst - src; + flag_NotZ = res; + flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23; + flag_V = ((src ^ dst) & (res ^ dst)) >> 24; + flag_N = res >> 24; + POST_IO +RET(18) +} + +// CMPA +OPCODE(0xB1F9) +{ + u32 adr, res; + u32 src, dst; + + FETCH_LONG(adr); + PRE_IO + READSX_LONG_F(adr, src) + dst = AREGu32((Opcode >> 9) & 7); + res = dst - src; + flag_NotZ = res; + flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23; + flag_V = ((src ^ dst) & (res ^ dst)) >> 24; + flag_N = res >> 24; + POST_IO +RET(22) +} + +// CMPA +OPCODE(0xB1FA) +{ + u32 adr, res; + u32 src, dst; + + adr = GET_SWORD + ((u32)(PC) - BasePC); + PC++; + PRE_IO + READSX_LONG_F(adr, src) + dst = AREGu32((Opcode >> 9) & 7); + res = dst - src; + flag_NotZ = res; + flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23; + flag_V = ((src ^ dst) & (res ^ dst)) >> 24; + flag_N = res >> 24; + POST_IO +RET(18) +} + +// CMPA +OPCODE(0xB1FB) +{ + u32 adr, res; + u32 src, dst; + + adr = (u32)(PC) - BasePC; + DECODE_EXT_WORD + PRE_IO + READSX_LONG_F(adr, src) + dst = AREGu32((Opcode >> 9) & 7); + res = dst - src; + flag_NotZ = res; + flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23; + flag_V = ((src ^ dst) & (res ^ dst)) >> 24; + flag_N = res >> 24; + POST_IO +RET(20) +} + +// CMPA +OPCODE(0xB1FC) +{ + u32 adr, res; + u32 src, dst; + + FETCH_LONG(src); + dst = AREGu32((Opcode >> 9) & 7); + res = dst - src; + flag_NotZ = res; + flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23; + flag_V = ((src ^ dst) & (res ^ dst)) >> 24; + flag_N = res >> 24; +RET(14) +} + +// CMPA +OPCODE(0xB1DF) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7); + AREG(7) += 4; + PRE_IO + READSX_LONG_F(adr, src) + dst = AREGu32((Opcode >> 9) & 7); + res = dst - src; + flag_NotZ = res; + flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23; + flag_V = ((src ^ dst) & (res ^ dst)) >> 24; + flag_N = res >> 24; + POST_IO +RET(14) +} + +// CMPA +OPCODE(0xB1E7) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7) - 4; + AREG(7) = adr; + PRE_IO + READSX_LONG_F(adr, src) + dst = AREGu32((Opcode >> 9) & 7); + res = dst - src; + flag_NotZ = res; + flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23; + flag_V = ((src ^ dst) & (res ^ dst)) >> 24; + flag_N = res >> 24; + POST_IO +RET(16) +} + +// ANDaD +OPCODE(0xC000) +{ + u32 adr, res; + u32 src, dst; + + src = DREGu8((Opcode >> 0) & 7); + res = DREGu8((Opcode >> 9) & 7); + res &= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + DREGu8((Opcode >> 9) & 7) = res; +RET(4) +} + +// ANDaD +OPCODE(0xC010) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + PRE_IO + READ_BYTE_F(adr, src) + res = DREGu8((Opcode >> 9) & 7); + res &= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + DREGu8((Opcode >> 9) & 7) = res; + POST_IO +RET(8) +} + +// ANDaD +OPCODE(0xC018) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + AREG((Opcode >> 0) & 7) += 1; + PRE_IO + READ_BYTE_F(adr, src) + res = DREGu8((Opcode >> 9) & 7); + res &= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + DREGu8((Opcode >> 9) & 7) = res; + POST_IO +RET(8) +} + +// ANDaD +OPCODE(0xC020) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7) - 1; + AREG((Opcode >> 0) & 7) = adr; + PRE_IO + READ_BYTE_F(adr, src) + res = DREGu8((Opcode >> 9) & 7); + res &= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + DREGu8((Opcode >> 9) & 7) = res; + POST_IO +RET(10) +} + +// ANDaD +OPCODE(0xC028) +{ + u32 adr, res; + u32 src, dst; + + FETCH_SWORD(adr); + adr += AREG((Opcode >> 0) & 7); + PRE_IO + READ_BYTE_F(adr, src) + res = DREGu8((Opcode >> 9) & 7); + res &= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + DREGu8((Opcode >> 9) & 7) = res; + POST_IO +RET(12) +} + +// ANDaD +OPCODE(0xC030) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + DECODE_EXT_WORD + PRE_IO + READ_BYTE_F(adr, src) + res = DREGu8((Opcode >> 9) & 7); + res &= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + DREGu8((Opcode >> 9) & 7) = res; + POST_IO +RET(14) +} + +// ANDaD +OPCODE(0xC038) +{ + u32 adr, res; + u32 src, dst; + + FETCH_SWORD(adr); + PRE_IO + READ_BYTE_F(adr, src) + res = DREGu8((Opcode >> 9) & 7); + res &= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + DREGu8((Opcode >> 9) & 7) = res; + POST_IO +RET(12) +} + +// ANDaD +OPCODE(0xC039) +{ + u32 adr, res; + u32 src, dst; + + FETCH_LONG(adr); + PRE_IO + READ_BYTE_F(adr, src) + res = DREGu8((Opcode >> 9) & 7); + res &= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + DREGu8((Opcode >> 9) & 7) = res; + POST_IO +RET(16) +} + +// ANDaD +OPCODE(0xC03A) +{ + u32 adr, res; + u32 src, dst; + + adr = GET_SWORD + ((u32)(PC) - BasePC); + PC++; + PRE_IO + READ_BYTE_F(adr, src) + res = DREGu8((Opcode >> 9) & 7); + res &= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + DREGu8((Opcode >> 9) & 7) = res; + POST_IO +RET(12) +} + +// ANDaD +OPCODE(0xC03B) +{ + u32 adr, res; + u32 src, dst; + + adr = (u32)(PC) - BasePC; + DECODE_EXT_WORD + PRE_IO + READ_BYTE_F(adr, src) + res = DREGu8((Opcode >> 9) & 7); + res &= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + DREGu8((Opcode >> 9) & 7) = res; + POST_IO +RET(14) +} + +// ANDaD +OPCODE(0xC03C) +{ + u32 adr, res; + u32 src, dst; + + FETCH_BYTE(src); + res = DREGu8((Opcode >> 9) & 7); + res &= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + DREGu8((Opcode >> 9) & 7) = res; +RET(8) +} + +// ANDaD +OPCODE(0xC01F) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7); + AREG(7) += 2; + PRE_IO + READ_BYTE_F(adr, src) + res = DREGu8((Opcode >> 9) & 7); + res &= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + DREGu8((Opcode >> 9) & 7) = res; + POST_IO +RET(8) +} + +// ANDaD +OPCODE(0xC027) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7) - 2; + AREG(7) = adr; + PRE_IO + READ_BYTE_F(adr, src) + res = DREGu8((Opcode >> 9) & 7); + res &= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + DREGu8((Opcode >> 9) & 7) = res; + POST_IO +RET(10) +} + +// ANDaD +OPCODE(0xC040) +{ + u32 adr, res; + u32 src, dst; + + src = DREGu16((Opcode >> 0) & 7); + res = DREGu16((Opcode >> 9) & 7); + res &= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + DREGu16((Opcode >> 9) & 7) = res; +RET(4) +} + +// ANDaD +OPCODE(0xC050) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + PRE_IO + READ_WORD_F(adr, src) + res = DREGu16((Opcode >> 9) & 7); + res &= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + DREGu16((Opcode >> 9) & 7) = res; + POST_IO +RET(8) +} + +// ANDaD +OPCODE(0xC058) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + AREG((Opcode >> 0) & 7) += 2; + PRE_IO + READ_WORD_F(adr, src) + res = DREGu16((Opcode >> 9) & 7); + res &= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + DREGu16((Opcode >> 9) & 7) = res; + POST_IO +RET(8) +} + +// ANDaD +OPCODE(0xC060) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7) - 2; + AREG((Opcode >> 0) & 7) = adr; + PRE_IO + READ_WORD_F(adr, src) + res = DREGu16((Opcode >> 9) & 7); + res &= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + DREGu16((Opcode >> 9) & 7) = res; + POST_IO +RET(10) +} + +// ANDaD +OPCODE(0xC068) +{ + u32 adr, res; + u32 src, dst; + + FETCH_SWORD(adr); + adr += AREG((Opcode >> 0) & 7); + PRE_IO + READ_WORD_F(adr, src) + res = DREGu16((Opcode >> 9) & 7); + res &= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + DREGu16((Opcode >> 9) & 7) = res; + POST_IO +RET(12) +} + +// ANDaD +OPCODE(0xC070) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + DECODE_EXT_WORD + PRE_IO + READ_WORD_F(adr, src) + res = DREGu16((Opcode >> 9) & 7); + res &= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + DREGu16((Opcode >> 9) & 7) = res; + POST_IO +RET(14) +} + +// ANDaD +OPCODE(0xC078) +{ + u32 adr, res; + u32 src, dst; + + FETCH_SWORD(adr); + PRE_IO + READ_WORD_F(adr, src) + res = DREGu16((Opcode >> 9) & 7); + res &= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + DREGu16((Opcode >> 9) & 7) = res; + POST_IO +RET(12) +} + +// ANDaD +OPCODE(0xC079) +{ + u32 adr, res; + u32 src, dst; + + FETCH_LONG(adr); + PRE_IO + READ_WORD_F(adr, src) + res = DREGu16((Opcode >> 9) & 7); + res &= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + DREGu16((Opcode >> 9) & 7) = res; + POST_IO +RET(16) +} + +// ANDaD +OPCODE(0xC07A) +{ + u32 adr, res; + u32 src, dst; + + adr = GET_SWORD + ((u32)(PC) - BasePC); + PC++; + PRE_IO + READ_WORD_F(adr, src) + res = DREGu16((Opcode >> 9) & 7); + res &= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + DREGu16((Opcode >> 9) & 7) = res; + POST_IO +RET(12) +} + +// ANDaD +OPCODE(0xC07B) +{ + u32 adr, res; + u32 src, dst; + + adr = (u32)(PC) - BasePC; + DECODE_EXT_WORD + PRE_IO + READ_WORD_F(adr, src) + res = DREGu16((Opcode >> 9) & 7); + res &= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + DREGu16((Opcode >> 9) & 7) = res; + POST_IO +RET(14) +} + +// ANDaD +OPCODE(0xC07C) +{ + u32 adr, res; + u32 src, dst; + + FETCH_WORD(src); + res = DREGu16((Opcode >> 9) & 7); + res &= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + DREGu16((Opcode >> 9) & 7) = res; +RET(8) +} + +// ANDaD +OPCODE(0xC05F) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7); + AREG(7) += 2; + PRE_IO + READ_WORD_F(adr, src) + res = DREGu16((Opcode >> 9) & 7); + res &= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + DREGu16((Opcode >> 9) & 7) = res; + POST_IO +RET(8) +} + +// ANDaD +OPCODE(0xC067) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7) - 2; + AREG(7) = adr; + PRE_IO + READ_WORD_F(adr, src) + res = DREGu16((Opcode >> 9) & 7); + res &= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + DREGu16((Opcode >> 9) & 7) = res; + POST_IO +RET(10) +} + +// ANDaD +OPCODE(0xC080) +{ + u32 adr, res; + u32 src, dst; + + src = DREGu32((Opcode >> 0) & 7); + res = DREGu32((Opcode >> 9) & 7); + res &= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + DREGu32((Opcode >> 9) & 7) = res; +RET(8) +} + +// ANDaD +OPCODE(0xC090) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + PRE_IO + READ_LONG_F(adr, src) + res = DREGu32((Opcode >> 9) & 7); + res &= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + DREGu32((Opcode >> 9) & 7) = res; + POST_IO +RET(14) +} + +// ANDaD +OPCODE(0xC098) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + AREG((Opcode >> 0) & 7) += 4; + PRE_IO + READ_LONG_F(adr, src) + res = DREGu32((Opcode >> 9) & 7); + res &= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + DREGu32((Opcode >> 9) & 7) = res; + POST_IO +RET(14) +} + +// ANDaD +OPCODE(0xC0A0) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7) - 4; + AREG((Opcode >> 0) & 7) = adr; + PRE_IO + READ_LONG_F(adr, src) + res = DREGu32((Opcode >> 9) & 7); + res &= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + DREGu32((Opcode >> 9) & 7) = res; + POST_IO +RET(16) +} + +// ANDaD +OPCODE(0xC0A8) +{ + u32 adr, res; + u32 src, dst; + + FETCH_SWORD(adr); + adr += AREG((Opcode >> 0) & 7); + PRE_IO + READ_LONG_F(adr, src) + res = DREGu32((Opcode >> 9) & 7); + res &= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + DREGu32((Opcode >> 9) & 7) = res; + POST_IO +RET(18) +} + +// ANDaD +OPCODE(0xC0B0) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + DECODE_EXT_WORD + PRE_IO + READ_LONG_F(adr, src) + res = DREGu32((Opcode >> 9) & 7); + res &= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + DREGu32((Opcode >> 9) & 7) = res; + POST_IO +RET(20) +} + +// ANDaD +OPCODE(0xC0B8) +{ + u32 adr, res; + u32 src, dst; + + FETCH_SWORD(adr); + PRE_IO + READ_LONG_F(adr, src) + res = DREGu32((Opcode >> 9) & 7); + res &= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + DREGu32((Opcode >> 9) & 7) = res; + POST_IO +RET(18) +} + +// ANDaD +OPCODE(0xC0B9) +{ + u32 adr, res; + u32 src, dst; + + FETCH_LONG(adr); + PRE_IO + READ_LONG_F(adr, src) + res = DREGu32((Opcode >> 9) & 7); + res &= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + DREGu32((Opcode >> 9) & 7) = res; + POST_IO +RET(22) +} + +// ANDaD +OPCODE(0xC0BA) +{ + u32 adr, res; + u32 src, dst; + + adr = GET_SWORD + ((u32)(PC) - BasePC); + PC++; + PRE_IO + READ_LONG_F(adr, src) + res = DREGu32((Opcode >> 9) & 7); + res &= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + DREGu32((Opcode >> 9) & 7) = res; + POST_IO +RET(18) +} + +// ANDaD +OPCODE(0xC0BB) +{ + u32 adr, res; + u32 src, dst; + + adr = (u32)(PC) - BasePC; + DECODE_EXT_WORD + PRE_IO + READ_LONG_F(adr, src) + res = DREGu32((Opcode >> 9) & 7); + res &= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + DREGu32((Opcode >> 9) & 7) = res; + POST_IO +RET(20) +} + +// ANDaD +OPCODE(0xC0BC) +{ + u32 adr, res; + u32 src, dst; + + FETCH_LONG(src); + res = DREGu32((Opcode >> 9) & 7); + res &= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + DREGu32((Opcode >> 9) & 7) = res; +RET(16) +} + +// ANDaD +OPCODE(0xC09F) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7); + AREG(7) += 4; + PRE_IO + READ_LONG_F(adr, src) + res = DREGu32((Opcode >> 9) & 7); + res &= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + DREGu32((Opcode >> 9) & 7) = res; + POST_IO +RET(14) +} + +// ANDaD +OPCODE(0xC0A7) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7) - 4; + AREG(7) = adr; + PRE_IO + READ_LONG_F(adr, src) + res = DREGu32((Opcode >> 9) & 7); + res &= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + DREGu32((Opcode >> 9) & 7) = res; + POST_IO +RET(16) +} + +// ANDDa +OPCODE(0xC110) +{ + u32 adr, res; + u32 src, dst; + + src = DREGu8((Opcode >> 9) & 7); + adr = AREG((Opcode >> 0) & 7); + PRE_IO + READ_BYTE_F(adr, res) + res &= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + WRITE_BYTE_F(adr, res) + POST_IO +RET(12) +} + +// ANDDa +OPCODE(0xC118) +{ + u32 adr, res; + u32 src, dst; + + src = DREGu8((Opcode >> 9) & 7); + adr = AREG((Opcode >> 0) & 7); + AREG((Opcode >> 0) & 7) += 1; + PRE_IO + READ_BYTE_F(adr, res) + res &= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + WRITE_BYTE_F(adr, res) + POST_IO +RET(12) +} + +// ANDDa +OPCODE(0xC120) +{ + u32 adr, res; + u32 src, dst; + + src = DREGu8((Opcode >> 9) & 7); + adr = AREG((Opcode >> 0) & 7) - 1; + AREG((Opcode >> 0) & 7) = adr; + PRE_IO + READ_BYTE_F(adr, res) + res &= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + WRITE_BYTE_F(adr, res) + POST_IO +RET(14) +} + +// ANDDa +OPCODE(0xC128) +{ + u32 adr, res; + u32 src, dst; + + src = DREGu8((Opcode >> 9) & 7); + FETCH_SWORD(adr); + adr += AREG((Opcode >> 0) & 7); + PRE_IO + READ_BYTE_F(adr, res) + res &= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + WRITE_BYTE_F(adr, res) + POST_IO +RET(16) +} + +// ANDDa +OPCODE(0xC130) +{ + u32 adr, res; + u32 src, dst; + + src = DREGu8((Opcode >> 9) & 7); + adr = AREG((Opcode >> 0) & 7); + DECODE_EXT_WORD + PRE_IO + READ_BYTE_F(adr, res) + res &= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + WRITE_BYTE_F(adr, res) + POST_IO +RET(18) +} + +// ANDDa +OPCODE(0xC138) +{ + u32 adr, res; + u32 src, dst; + + src = DREGu8((Opcode >> 9) & 7); + FETCH_SWORD(adr); + PRE_IO + READ_BYTE_F(adr, res) + res &= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + WRITE_BYTE_F(adr, res) + POST_IO +RET(16) +} + +// ANDDa +OPCODE(0xC139) +{ + u32 adr, res; + u32 src, dst; + + src = DREGu8((Opcode >> 9) & 7); + FETCH_LONG(adr); + PRE_IO + READ_BYTE_F(adr, res) + res &= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + WRITE_BYTE_F(adr, res) + POST_IO +RET(20) +} + +// ANDDa +OPCODE(0xC11F) +{ + u32 adr, res; + u32 src, dst; + + src = DREGu8((Opcode >> 9) & 7); + adr = AREG(7); + AREG(7) += 2; + PRE_IO + READ_BYTE_F(adr, res) + res &= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + WRITE_BYTE_F(adr, res) + POST_IO +RET(12) +} + +// ANDDa +OPCODE(0xC127) +{ + u32 adr, res; + u32 src, dst; + + src = DREGu8((Opcode >> 9) & 7); + adr = AREG(7) - 2; + AREG(7) = adr; + PRE_IO + READ_BYTE_F(adr, res) + res &= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res; + WRITE_BYTE_F(adr, res) + POST_IO +RET(14) +} + +// ANDDa +OPCODE(0xC150) +{ + u32 adr, res; + u32 src, dst; + + src = DREGu16((Opcode >> 9) & 7); + adr = AREG((Opcode >> 0) & 7); + PRE_IO + READ_WORD_F(adr, res) + res &= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + WRITE_WORD_F(adr, res) + POST_IO +RET(12) +} + +// ANDDa +OPCODE(0xC158) +{ + u32 adr, res; + u32 src, dst; + + src = DREGu16((Opcode >> 9) & 7); + adr = AREG((Opcode >> 0) & 7); + AREG((Opcode >> 0) & 7) += 2; + PRE_IO + READ_WORD_F(adr, res) + res &= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + WRITE_WORD_F(adr, res) + POST_IO +RET(12) +} + +// ANDDa +OPCODE(0xC160) +{ + u32 adr, res; + u32 src, dst; + + src = DREGu16((Opcode >> 9) & 7); + adr = AREG((Opcode >> 0) & 7) - 2; + AREG((Opcode >> 0) & 7) = adr; + PRE_IO + READ_WORD_F(adr, res) + res &= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + WRITE_WORD_F(adr, res) + POST_IO +RET(14) +} + +// ANDDa +OPCODE(0xC168) +{ + u32 adr, res; + u32 src, dst; + + src = DREGu16((Opcode >> 9) & 7); + FETCH_SWORD(adr); + adr += AREG((Opcode >> 0) & 7); + PRE_IO + READ_WORD_F(adr, res) + res &= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + WRITE_WORD_F(adr, res) + POST_IO +RET(16) +} + +// ANDDa +OPCODE(0xC170) +{ + u32 adr, res; + u32 src, dst; + + src = DREGu16((Opcode >> 9) & 7); + adr = AREG((Opcode >> 0) & 7); + DECODE_EXT_WORD + PRE_IO + READ_WORD_F(adr, res) + res &= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + WRITE_WORD_F(adr, res) + POST_IO +RET(18) +} + +// ANDDa +OPCODE(0xC178) +{ + u32 adr, res; + u32 src, dst; + + src = DREGu16((Opcode >> 9) & 7); + FETCH_SWORD(adr); + PRE_IO + READ_WORD_F(adr, res) + res &= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + WRITE_WORD_F(adr, res) + POST_IO +RET(16) +} + +// ANDDa +OPCODE(0xC179) +{ + u32 adr, res; + u32 src, dst; + + src = DREGu16((Opcode >> 9) & 7); + FETCH_LONG(adr); + PRE_IO + READ_WORD_F(adr, res) + res &= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + WRITE_WORD_F(adr, res) + POST_IO +RET(20) +} + +// ANDDa +OPCODE(0xC15F) +{ + u32 adr, res; + u32 src, dst; + + src = DREGu16((Opcode >> 9) & 7); + adr = AREG(7); + AREG(7) += 2; + PRE_IO + READ_WORD_F(adr, res) + res &= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + WRITE_WORD_F(adr, res) + POST_IO +RET(12) +} + +// ANDDa +OPCODE(0xC167) +{ + u32 adr, res; + u32 src, dst; + + src = DREGu16((Opcode >> 9) & 7); + adr = AREG(7) - 2; + AREG(7) = adr; + PRE_IO + READ_WORD_F(adr, res) + res &= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 8; + WRITE_WORD_F(adr, res) + POST_IO +RET(14) +} + +// ANDDa +OPCODE(0xC190) +{ + u32 adr, res; + u32 src, dst; + + src = DREGu32((Opcode >> 9) & 7); + adr = AREG((Opcode >> 0) & 7); + PRE_IO + READ_LONG_F(adr, res) + res &= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + WRITE_LONG_F(adr, res) + POST_IO +RET(20) +} + +// ANDDa +OPCODE(0xC198) +{ + u32 adr, res; + u32 src, dst; + + src = DREGu32((Opcode >> 9) & 7); + adr = AREG((Opcode >> 0) & 7); + AREG((Opcode >> 0) & 7) += 4; + PRE_IO + READ_LONG_F(adr, res) + res &= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + WRITE_LONG_F(adr, res) + POST_IO +RET(20) +} + +// ANDDa +OPCODE(0xC1A0) +{ + u32 adr, res; + u32 src, dst; + + src = DREGu32((Opcode >> 9) & 7); + adr = AREG((Opcode >> 0) & 7) - 4; + AREG((Opcode >> 0) & 7) = adr; + PRE_IO + READ_LONG_F(adr, res) + res &= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + WRITE_LONG_F(adr, res) + POST_IO +RET(22) +} + +// ANDDa +OPCODE(0xC1A8) +{ + u32 adr, res; + u32 src, dst; + + src = DREGu32((Opcode >> 9) & 7); + FETCH_SWORD(adr); + adr += AREG((Opcode >> 0) & 7); + PRE_IO + READ_LONG_F(adr, res) + res &= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + WRITE_LONG_F(adr, res) + POST_IO +RET(24) +} + +// ANDDa +OPCODE(0xC1B0) +{ + u32 adr, res; + u32 src, dst; + + src = DREGu32((Opcode >> 9) & 7); + adr = AREG((Opcode >> 0) & 7); + DECODE_EXT_WORD + PRE_IO + READ_LONG_F(adr, res) + res &= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + WRITE_LONG_F(adr, res) + POST_IO +RET(26) +} + +// ANDDa +OPCODE(0xC1B8) +{ + u32 adr, res; + u32 src, dst; + + src = DREGu32((Opcode >> 9) & 7); + FETCH_SWORD(adr); + PRE_IO + READ_LONG_F(adr, res) + res &= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + WRITE_LONG_F(adr, res) + POST_IO +RET(24) +} + +// ANDDa +OPCODE(0xC1B9) +{ + u32 adr, res; + u32 src, dst; + + src = DREGu32((Opcode >> 9) & 7); + FETCH_LONG(adr); + PRE_IO + READ_LONG_F(adr, res) + res &= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + WRITE_LONG_F(adr, res) + POST_IO +RET(28) +} + +// ANDDa +OPCODE(0xC19F) +{ + u32 adr, res; + u32 src, dst; + + src = DREGu32((Opcode >> 9) & 7); + adr = AREG(7); + AREG(7) += 4; + PRE_IO + READ_LONG_F(adr, res) + res &= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + WRITE_LONG_F(adr, res) + POST_IO +RET(20) +} + +// ANDDa +OPCODE(0xC1A7) +{ + u32 adr, res; + u32 src, dst; + + src = DREGu32((Opcode >> 9) & 7); + adr = AREG(7) - 4; + AREG(7) = adr; + PRE_IO + READ_LONG_F(adr, res) + res &= src; + flag_C = 0; + flag_V = 0; + flag_NotZ = res; + flag_N = res >> 24; + WRITE_LONG_F(adr, res) + POST_IO +RET(22) +} + +// ABCD +OPCODE(0xC100) +{ + u32 adr, res; + u32 src, dst; + + src = DREGu8((Opcode >> 0) & 7); + dst = DREGu8((Opcode >> 9) & 7); + res = (dst & 0xF) + (src & 0xF) + ((flag_X >> M68K_SR_X_SFT) & 1); + if (res > 9) res += 6; + res += (dst & 0xF0) + (src & 0xF0); + if (res > 0x99) + { + res -= 0xA0; + flag_X = flag_C = M68K_SR_C; + } + else flag_X = flag_C = 0; + flag_NotZ |= res & 0xFF; + flag_N = res; + DREGu8((Opcode >> 9) & 7) = res; +RET(6) +} + +// ABCDM +OPCODE(0xC108) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7) - 1; + AREG((Opcode >> 0) & 7) = adr; + PRE_IO + READ_BYTE_F(adr, src) + adr = AREG((Opcode >> 9) & 7) - 1; + AREG((Opcode >> 9) & 7) = adr; + READ_BYTE_F(adr, dst) + res = (dst & 0xF) + (src & 0xF) + ((flag_X >> M68K_SR_X_SFT) & 1); + if (res > 9) res += 6; + res += (dst & 0xF0) + (src & 0xF0); + if (res > 0x99) + { + res -= 0xA0; + flag_X = flag_C = M68K_SR_C; + } + else flag_X = flag_C = 0; + flag_NotZ |= res & 0xFF; + flag_N = res; + WRITE_BYTE_F(adr, res) + POST_IO +RET(18) +} + +// ABCD7M +OPCODE(0xC10F) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7) - 2; + AREG(7) = adr; + PRE_IO + READ_BYTE_F(adr, src) + adr = AREG((Opcode >> 9) & 7) - 1; + AREG((Opcode >> 9) & 7) = adr; + READ_BYTE_F(adr, dst) + res = (dst & 0xF) + (src & 0xF) + ((flag_X >> M68K_SR_X_SFT) & 1); + if (res > 9) res += 6; + res += (dst & 0xF0) + (src & 0xF0); + if (res > 0x99) + { + res -= 0xA0; + flag_X = flag_C = M68K_SR_C; + } + else flag_X = flag_C = 0; + flag_NotZ |= res & 0xFF; + flag_N = res; + WRITE_BYTE_F(adr, res) + POST_IO +RET(18) +} + +// ABCDM7 +OPCODE(0xCF08) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7) - 1; + AREG((Opcode >> 0) & 7) = adr; + PRE_IO + READ_BYTE_F(adr, src) + adr = AREG(7) - 2; + AREG(7) = adr; + READ_BYTE_F(adr, dst) + res = (dst & 0xF) + (src & 0xF) + ((flag_X >> M68K_SR_X_SFT) & 1); + if (res > 9) res += 6; + res += (dst & 0xF0) + (src & 0xF0); + if (res > 0x99) + { + res -= 0xA0; + flag_X = flag_C = M68K_SR_C; + } + else flag_X = flag_C = 0; + flag_NotZ |= res & 0xFF; + flag_N = res; + WRITE_BYTE_F(adr, res) + POST_IO +RET(18) +} + +// ABCD7M7 +OPCODE(0xCF0F) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7) - 2; + AREG(7) = adr; + PRE_IO + READ_BYTE_F(adr, src) + adr = AREG(7) - 2; + AREG(7) = adr; + READ_BYTE_F(adr, dst) + res = (dst & 0xF) + (src & 0xF) + ((flag_X >> M68K_SR_X_SFT) & 1); + if (res > 9) res += 6; + res += (dst & 0xF0) + (src & 0xF0); + if (res > 0x99) + { + res -= 0xA0; + flag_X = flag_C = M68K_SR_C; + } + else flag_X = flag_C = 0; + flag_NotZ |= res & 0xFF; + flag_N = res; + WRITE_BYTE_F(adr, res) + POST_IO +RET(18) +} + +// MULU +OPCODE(0xC0C0) +{ + u32 adr, res; + u32 src, dst; + + src = DREGu16((Opcode >> 0) & 7); + res = DREGu16((Opcode >> 9) & 7); + res *= src; + flag_N = res >> 24; + flag_NotZ = res; + flag_V = flag_C = 0; + DREGu32((Opcode >> 9) & 7) = res; +#ifdef USE_CYCLONE_TIMING +RET(54) +#else +RET(50) +#endif +} + +// MULU +OPCODE(0xC0D0) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + PRE_IO + READ_WORD_F(adr, src) + res = DREGu16((Opcode >> 9) & 7); + res *= src; + flag_N = res >> 24; + flag_NotZ = res; + flag_V = flag_C = 0; + DREGu32((Opcode >> 9) & 7) = res; + POST_IO +#ifdef USE_CYCLONE_TIMING +RET(58) +#else +RET(54) +#endif +} + +// MULU +OPCODE(0xC0D8) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + AREG((Opcode >> 0) & 7) += 2; + PRE_IO + READ_WORD_F(adr, src) + res = DREGu16((Opcode >> 9) & 7); + res *= src; + flag_N = res >> 24; + flag_NotZ = res; + flag_V = flag_C = 0; + DREGu32((Opcode >> 9) & 7) = res; + POST_IO +#ifdef USE_CYCLONE_TIMING +RET(58) +#else +RET(54) +#endif +} + +// MULU +OPCODE(0xC0E0) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7) - 2; + AREG((Opcode >> 0) & 7) = adr; + PRE_IO + READ_WORD_F(adr, src) + res = DREGu16((Opcode >> 9) & 7); + res *= src; + flag_N = res >> 24; + flag_NotZ = res; + flag_V = flag_C = 0; + DREGu32((Opcode >> 9) & 7) = res; + POST_IO +#ifdef USE_CYCLONE_TIMING +RET(60) +#else +RET(56) +#endif +} + +// MULU +OPCODE(0xC0E8) +{ + u32 adr, res; + u32 src, dst; + + FETCH_SWORD(adr); + adr += AREG((Opcode >> 0) & 7); + PRE_IO + READ_WORD_F(adr, src) + res = DREGu16((Opcode >> 9) & 7); + res *= src; + flag_N = res >> 24; + flag_NotZ = res; + flag_V = flag_C = 0; + DREGu32((Opcode >> 9) & 7) = res; + POST_IO +#ifdef USE_CYCLONE_TIMING +RET(62) +#else +RET(58) +#endif +} + +// MULU +OPCODE(0xC0F0) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + DECODE_EXT_WORD + PRE_IO + READ_WORD_F(adr, src) + res = DREGu16((Opcode >> 9) & 7); + res *= src; + flag_N = res >> 24; + flag_NotZ = res; + flag_V = flag_C = 0; + DREGu32((Opcode >> 9) & 7) = res; + POST_IO +#ifdef USE_CYCLONE_TIMING +RET(64) +#else +RET(60) +#endif +} + +// MULU +OPCODE(0xC0F8) +{ + u32 adr, res; + u32 src, dst; + + FETCH_SWORD(adr); + PRE_IO + READ_WORD_F(adr, src) + res = DREGu16((Opcode >> 9) & 7); + res *= src; + flag_N = res >> 24; + flag_NotZ = res; + flag_V = flag_C = 0; + DREGu32((Opcode >> 9) & 7) = res; + POST_IO +#ifdef USE_CYCLONE_TIMING +RET(62) +#else +RET(58) +#endif +} + +// MULU +OPCODE(0xC0F9) +{ + u32 adr, res; + u32 src, dst; + + FETCH_LONG(adr); + PRE_IO + READ_WORD_F(adr, src) + res = DREGu16((Opcode >> 9) & 7); + res *= src; + flag_N = res >> 24; + flag_NotZ = res; + flag_V = flag_C = 0; + DREGu32((Opcode >> 9) & 7) = res; + POST_IO +#ifdef USE_CYCLONE_TIMING +RET(66) +#else +RET(62) +#endif +} + +// MULU +OPCODE(0xC0FA) +{ + u32 adr, res; + u32 src, dst; + + adr = GET_SWORD + ((u32)(PC) - BasePC); + PC++; + PRE_IO + READ_WORD_F(adr, src) + res = DREGu16((Opcode >> 9) & 7); + res *= src; + flag_N = res >> 24; + flag_NotZ = res; + flag_V = flag_C = 0; + DREGu32((Opcode >> 9) & 7) = res; + POST_IO +#ifdef USE_CYCLONE_TIMING +RET(62) +#else +RET(58) +#endif +} + +// MULU +OPCODE(0xC0FB) +{ + u32 adr, res; + u32 src, dst; + + adr = (u32)(PC) - BasePC; + DECODE_EXT_WORD + PRE_IO + READ_WORD_F(adr, src) + res = DREGu16((Opcode >> 9) & 7); + res *= src; + flag_N = res >> 24; + flag_NotZ = res; + flag_V = flag_C = 0; + DREGu32((Opcode >> 9) & 7) = res; + POST_IO +#ifdef USE_CYCLONE_TIMING +RET(64) +#else +RET(60) +#endif +} + +// MULU +OPCODE(0xC0FC) +{ + u32 adr, res; + u32 src, dst; + + FETCH_WORD(src); + res = DREGu16((Opcode >> 9) & 7); + res *= src; + flag_N = res >> 24; + flag_NotZ = res; + flag_V = flag_C = 0; + DREGu32((Opcode >> 9) & 7) = res; +#ifdef USE_CYCLONE_TIMING +RET(58) +#else +RET(54) +#endif +} + +// MULU +OPCODE(0xC0DF) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7); + AREG(7) += 2; + PRE_IO + READ_WORD_F(adr, src) + res = DREGu16((Opcode >> 9) & 7); + res *= src; + flag_N = res >> 24; + flag_NotZ = res; + flag_V = flag_C = 0; + DREGu32((Opcode >> 9) & 7) = res; + POST_IO +#ifdef USE_CYCLONE_TIMING +RET(58) +#else +RET(54) +#endif +} + +// MULU +OPCODE(0xC0E7) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7) - 2; + AREG(7) = adr; + PRE_IO + READ_WORD_F(adr, src) + res = DREGu16((Opcode >> 9) & 7); + res *= src; + flag_N = res >> 24; + flag_NotZ = res; + flag_V = flag_C = 0; + DREGu32((Opcode >> 9) & 7) = res; + POST_IO +#ifdef USE_CYCLONE_TIMING +RET(60) +#else +RET(56) +#endif +} + +// MULS +OPCODE(0xC1C0) +{ + u32 adr, res; + u32 src, dst; + + src = (s32)DREGs16((Opcode >> 0) & 7); + res = (s32)DREGs16((Opcode >> 9) & 7); + res = ((s32)res) * ((s32)src); + flag_N = res >> 24; + flag_NotZ = res; + flag_V = flag_C = 0; + DREGu32((Opcode >> 9) & 7) = res; +#ifdef USE_CYCLONE_TIMING +RET(54) +#else +RET(50) +#endif +} + +// MULS +OPCODE(0xC1D0) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + PRE_IO + READSX_WORD_F(adr, src) + res = (s32)DREGs16((Opcode >> 9) & 7); + res = ((s32)res) * ((s32)src); + flag_N = res >> 24; + flag_NotZ = res; + flag_V = flag_C = 0; + DREGu32((Opcode >> 9) & 7) = res; + POST_IO +#ifdef USE_CYCLONE_TIMING +RET(58) +#else +RET(54) +#endif +} + +// MULS +OPCODE(0xC1D8) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + AREG((Opcode >> 0) & 7) += 2; + PRE_IO + READSX_WORD_F(adr, src) + res = (s32)DREGs16((Opcode >> 9) & 7); + res = ((s32)res) * ((s32)src); + flag_N = res >> 24; + flag_NotZ = res; + flag_V = flag_C = 0; + DREGu32((Opcode >> 9) & 7) = res; + POST_IO +#ifdef USE_CYCLONE_TIMING +RET(58) +#else +RET(54) +#endif +} + +// MULS +OPCODE(0xC1E0) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7) - 2; + AREG((Opcode >> 0) & 7) = adr; + PRE_IO + READSX_WORD_F(adr, src) + res = (s32)DREGs16((Opcode >> 9) & 7); + res = ((s32)res) * ((s32)src); + flag_N = res >> 24; + flag_NotZ = res; + flag_V = flag_C = 0; + DREGu32((Opcode >> 9) & 7) = res; + POST_IO +#ifdef USE_CYCLONE_TIMING +RET(60) +#else +RET(56) +#endif +} + +// MULS +OPCODE(0xC1E8) +{ + u32 adr, res; + u32 src, dst; + + FETCH_SWORD(adr); + adr += AREG((Opcode >> 0) & 7); + PRE_IO + READSX_WORD_F(adr, src) + res = (s32)DREGs16((Opcode >> 9) & 7); + res = ((s32)res) * ((s32)src); + flag_N = res >> 24; + flag_NotZ = res; + flag_V = flag_C = 0; + DREGu32((Opcode >> 9) & 7) = res; + POST_IO +#ifdef USE_CYCLONE_TIMING +RET(62) +#else +RET(58) +#endif +} + +// MULS +OPCODE(0xC1F0) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + DECODE_EXT_WORD + PRE_IO + READSX_WORD_F(adr, src) + res = (s32)DREGs16((Opcode >> 9) & 7); + res = ((s32)res) * ((s32)src); + flag_N = res >> 24; + flag_NotZ = res; + flag_V = flag_C = 0; + DREGu32((Opcode >> 9) & 7) = res; + POST_IO +#ifdef USE_CYCLONE_TIMING +RET(64) +#else +RET(60) +#endif +} + +// MULS +OPCODE(0xC1F8) +{ + u32 adr, res; + u32 src, dst; + + FETCH_SWORD(adr); + PRE_IO + READSX_WORD_F(adr, src) + res = (s32)DREGs16((Opcode >> 9) & 7); + res = ((s32)res) * ((s32)src); + flag_N = res >> 24; + flag_NotZ = res; + flag_V = flag_C = 0; + DREGu32((Opcode >> 9) & 7) = res; + POST_IO +#ifdef USE_CYCLONE_TIMING +RET(62) +#else +RET(58) +#endif +} + +// MULS +OPCODE(0xC1F9) +{ + u32 adr, res; + u32 src, dst; + + FETCH_LONG(adr); + PRE_IO + READSX_WORD_F(adr, src) + res = (s32)DREGs16((Opcode >> 9) & 7); + res = ((s32)res) * ((s32)src); + flag_N = res >> 24; + flag_NotZ = res; + flag_V = flag_C = 0; + DREGu32((Opcode >> 9) & 7) = res; + POST_IO +#ifdef USE_CYCLONE_TIMING +RET(66) +#else +RET(62) +#endif +} + +// MULS +OPCODE(0xC1FA) +{ + u32 adr, res; + u32 src, dst; + + adr = GET_SWORD + ((u32)(PC) - BasePC); + PC++; + PRE_IO + READSX_WORD_F(adr, src) + res = (s32)DREGs16((Opcode >> 9) & 7); + res = ((s32)res) * ((s32)src); + flag_N = res >> 24; + flag_NotZ = res; + flag_V = flag_C = 0; + DREGu32((Opcode >> 9) & 7) = res; + POST_IO +#ifdef USE_CYCLONE_TIMING +RET(62) +#else +RET(58) +#endif +} + +// MULS +OPCODE(0xC1FB) +{ + u32 adr, res; + u32 src, dst; + + adr = (u32)(PC) - BasePC; + DECODE_EXT_WORD + PRE_IO + READSX_WORD_F(adr, src) + res = (s32)DREGs16((Opcode >> 9) & 7); + res = ((s32)res) * ((s32)src); + flag_N = res >> 24; + flag_NotZ = res; + flag_V = flag_C = 0; + DREGu32((Opcode >> 9) & 7) = res; + POST_IO +#ifdef USE_CYCLONE_TIMING +RET(64) +#else +RET(60) +#endif +} + +// MULS +OPCODE(0xC1FC) +{ + u32 adr, res; + u32 src, dst; + + FETCH_SWORD(src); + res = (s32)DREGs16((Opcode >> 9) & 7); + res = ((s32)res) * ((s32)src); + flag_N = res >> 24; + flag_NotZ = res; + flag_V = flag_C = 0; + DREGu32((Opcode >> 9) & 7) = res; +#ifdef USE_CYCLONE_TIMING +RET(58) +#else +RET(54) +#endif +} + +// MULS +OPCODE(0xC1DF) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7); + AREG(7) += 2; + PRE_IO + READSX_WORD_F(adr, src) + res = (s32)DREGs16((Opcode >> 9) & 7); + res = ((s32)res) * ((s32)src); + flag_N = res >> 24; + flag_NotZ = res; + flag_V = flag_C = 0; + DREGu32((Opcode >> 9) & 7) = res; + POST_IO +#ifdef USE_CYCLONE_TIMING +RET(58) +#else +RET(54) +#endif +} + +// MULS +OPCODE(0xC1E7) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7) - 2; + AREG(7) = adr; + PRE_IO + READSX_WORD_F(adr, src) + res = (s32)DREGs16((Opcode >> 9) & 7); + res = ((s32)res) * ((s32)src); + flag_N = res >> 24; + flag_NotZ = res; + flag_V = flag_C = 0; + DREGu32((Opcode >> 9) & 7) = res; + POST_IO +#ifdef USE_CYCLONE_TIMING +RET(60) +#else +RET(56) +#endif +} + +// EXGDD +OPCODE(0xC140) +{ + u32 adr, res; + u32 src, dst; + + res = DREGu32((Opcode >> 0) & 7); + src = DREGu32((Opcode >> 9) & 7); + DREGu32((Opcode >> 9) & 7) = res; + res = src; + DREGu32((Opcode >> 0) & 7) = res; +RET(6) +} + +// EXGAA +OPCODE(0xC148) +{ + u32 adr, res; + u32 src, dst; + + res = AREGu32((Opcode >> 0) & 7); + src = AREGu32((Opcode >> 9) & 7); + AREG((Opcode >> 9) & 7) = res; + res = src; + AREG((Opcode >> 0) & 7) = res; +RET(6) +} + +// EXGAD +OPCODE(0xC188) +{ + u32 adr, res; + u32 src, dst; + + res = AREGu32((Opcode >> 0) & 7); + src = DREGu32((Opcode >> 9) & 7); + DREGu32((Opcode >> 9) & 7) = res; + res = src; + AREG((Opcode >> 0) & 7) = res; +RET(6) +} + +// ADDaD +OPCODE(0xD000) +{ + u32 adr, res; + u32 src, dst; + + src = DREGu8((Opcode >> 0) & 7); + dst = DREGu8((Opcode >> 9) & 7); + res = dst + src; + flag_N = flag_X = flag_C = res; + flag_V = (src ^ res) & (dst ^ res); + flag_NotZ = res & 0xFF; + DREGu8((Opcode >> 9) & 7) = res; +RET(4) +} + +// ADDaD +OPCODE(0xD008) +{ + u32 adr, res; + u32 src, dst; + + // can't read byte from Ax registers ! + m68kcontext.execinfo |= M68K_FAULTED; + m68kcontext.io_cycle_counter = 0; +/* + goto famec_Exec_End; + dst = DREGu8((Opcode >> 9) & 7); + res = dst + src; + flag_N = flag_X = flag_C = res; + flag_V = (src ^ res) & (dst ^ res); + flag_NotZ = res & 0xFF; + DREGu8((Opcode >> 9) & 7) = res; +*/ +RET(4) +} + +// ADDaD +OPCODE(0xD010) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + PRE_IO + READ_BYTE_F(adr, src) + dst = DREGu8((Opcode >> 9) & 7); + res = dst + src; + flag_N = flag_X = flag_C = res; + flag_V = (src ^ res) & (dst ^ res); + flag_NotZ = res & 0xFF; + DREGu8((Opcode >> 9) & 7) = res; + POST_IO +RET(8) +} + +// ADDaD +OPCODE(0xD018) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + AREG((Opcode >> 0) & 7) += 1; + PRE_IO + READ_BYTE_F(adr, src) + dst = DREGu8((Opcode >> 9) & 7); + res = dst + src; + flag_N = flag_X = flag_C = res; + flag_V = (src ^ res) & (dst ^ res); + flag_NotZ = res & 0xFF; + DREGu8((Opcode >> 9) & 7) = res; + POST_IO +RET(8) +} + +// ADDaD +OPCODE(0xD020) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7) - 1; + AREG((Opcode >> 0) & 7) = adr; + PRE_IO + READ_BYTE_F(adr, src) + dst = DREGu8((Opcode >> 9) & 7); + res = dst + src; + flag_N = flag_X = flag_C = res; + flag_V = (src ^ res) & (dst ^ res); + flag_NotZ = res & 0xFF; + DREGu8((Opcode >> 9) & 7) = res; + POST_IO +RET(10) +} + +// ADDaD +OPCODE(0xD028) +{ + u32 adr, res; + u32 src, dst; + + FETCH_SWORD(adr); + adr += AREG((Opcode >> 0) & 7); + PRE_IO + READ_BYTE_F(adr, src) + dst = DREGu8((Opcode >> 9) & 7); + res = dst + src; + flag_N = flag_X = flag_C = res; + flag_V = (src ^ res) & (dst ^ res); + flag_NotZ = res & 0xFF; + DREGu8((Opcode >> 9) & 7) = res; + POST_IO +RET(12) +} + +// ADDaD +OPCODE(0xD030) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + DECODE_EXT_WORD + PRE_IO + READ_BYTE_F(adr, src) + dst = DREGu8((Opcode >> 9) & 7); + res = dst + src; + flag_N = flag_X = flag_C = res; + flag_V = (src ^ res) & (dst ^ res); + flag_NotZ = res & 0xFF; + DREGu8((Opcode >> 9) & 7) = res; + POST_IO +RET(14) +} + +// ADDaD +OPCODE(0xD038) +{ + u32 adr, res; + u32 src, dst; + + FETCH_SWORD(adr); + PRE_IO + READ_BYTE_F(adr, src) + dst = DREGu8((Opcode >> 9) & 7); + res = dst + src; + flag_N = flag_X = flag_C = res; + flag_V = (src ^ res) & (dst ^ res); + flag_NotZ = res & 0xFF; + DREGu8((Opcode >> 9) & 7) = res; + POST_IO +RET(12) +} + +// ADDaD +OPCODE(0xD039) +{ + u32 adr, res; + u32 src, dst; + + FETCH_LONG(adr); + PRE_IO + READ_BYTE_F(adr, src) + dst = DREGu8((Opcode >> 9) & 7); + res = dst + src; + flag_N = flag_X = flag_C = res; + flag_V = (src ^ res) & (dst ^ res); + flag_NotZ = res & 0xFF; + DREGu8((Opcode >> 9) & 7) = res; + POST_IO +RET(16) +} + +// ADDaD +OPCODE(0xD03A) +{ + u32 adr, res; + u32 src, dst; + + adr = GET_SWORD + ((u32)(PC) - BasePC); + PC++; + PRE_IO + READ_BYTE_F(adr, src) + dst = DREGu8((Opcode >> 9) & 7); + res = dst + src; + flag_N = flag_X = flag_C = res; + flag_V = (src ^ res) & (dst ^ res); + flag_NotZ = res & 0xFF; + DREGu8((Opcode >> 9) & 7) = res; + POST_IO +RET(12) +} + +// ADDaD +OPCODE(0xD03B) +{ + u32 adr, res; + u32 src, dst; + + adr = (u32)(PC) - BasePC; + DECODE_EXT_WORD + PRE_IO + READ_BYTE_F(adr, src) + dst = DREGu8((Opcode >> 9) & 7); + res = dst + src; + flag_N = flag_X = flag_C = res; + flag_V = (src ^ res) & (dst ^ res); + flag_NotZ = res & 0xFF; + DREGu8((Opcode >> 9) & 7) = res; + POST_IO +RET(14) +} + +// ADDaD +OPCODE(0xD03C) +{ + u32 adr, res; + u32 src, dst; + + FETCH_BYTE(src); + dst = DREGu8((Opcode >> 9) & 7); + res = dst + src; + flag_N = flag_X = flag_C = res; + flag_V = (src ^ res) & (dst ^ res); + flag_NotZ = res & 0xFF; + DREGu8((Opcode >> 9) & 7) = res; +RET(8) +} + +// ADDaD +OPCODE(0xD01F) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7); + AREG(7) += 2; + PRE_IO + READ_BYTE_F(adr, src) + dst = DREGu8((Opcode >> 9) & 7); + res = dst + src; + flag_N = flag_X = flag_C = res; + flag_V = (src ^ res) & (dst ^ res); + flag_NotZ = res & 0xFF; + DREGu8((Opcode >> 9) & 7) = res; + POST_IO +RET(8) +} + +// ADDaD +OPCODE(0xD027) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7) - 2; + AREG(7) = adr; + PRE_IO + READ_BYTE_F(adr, src) + dst = DREGu8((Opcode >> 9) & 7); + res = dst + src; + flag_N = flag_X = flag_C = res; + flag_V = (src ^ res) & (dst ^ res); + flag_NotZ = res & 0xFF; + DREGu8((Opcode >> 9) & 7) = res; + POST_IO +RET(10) +} + +// ADDaD +OPCODE(0xD040) +{ + u32 adr, res; + u32 src, dst; + + src = DREGu16((Opcode >> 0) & 7); + dst = DREGu16((Opcode >> 9) & 7); + res = dst + src; + flag_V = ((src ^ res) & (dst ^ res)) >> 8; + flag_N = flag_X = flag_C = res >> 8; + flag_NotZ = res & 0xFFFF; + DREGu16((Opcode >> 9) & 7) = res; +RET(4) +} + +// ADDaD +OPCODE(0xD048) +{ + u32 adr, res; + u32 src, dst; + + src = AREGu16((Opcode >> 0) & 7); + dst = DREGu16((Opcode >> 9) & 7); + res = dst + src; + flag_V = ((src ^ res) & (dst ^ res)) >> 8; + flag_N = flag_X = flag_C = res >> 8; + flag_NotZ = res & 0xFFFF; + DREGu16((Opcode >> 9) & 7) = res; +RET(4) +} + +// ADDaD +OPCODE(0xD050) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + PRE_IO + READ_WORD_F(adr, src) + dst = DREGu16((Opcode >> 9) & 7); + res = dst + src; + flag_V = ((src ^ res) & (dst ^ res)) >> 8; + flag_N = flag_X = flag_C = res >> 8; + flag_NotZ = res & 0xFFFF; + DREGu16((Opcode >> 9) & 7) = res; + POST_IO +RET(8) +} + +// ADDaD +OPCODE(0xD058) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + AREG((Opcode >> 0) & 7) += 2; + PRE_IO + READ_WORD_F(adr, src) + dst = DREGu16((Opcode >> 9) & 7); + res = dst + src; + flag_V = ((src ^ res) & (dst ^ res)) >> 8; + flag_N = flag_X = flag_C = res >> 8; + flag_NotZ = res & 0xFFFF; + DREGu16((Opcode >> 9) & 7) = res; + POST_IO +RET(8) +} + +// ADDaD +OPCODE(0xD060) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7) - 2; + AREG((Opcode >> 0) & 7) = adr; + PRE_IO + READ_WORD_F(adr, src) + dst = DREGu16((Opcode >> 9) & 7); + res = dst + src; + flag_V = ((src ^ res) & (dst ^ res)) >> 8; + flag_N = flag_X = flag_C = res >> 8; + flag_NotZ = res & 0xFFFF; + DREGu16((Opcode >> 9) & 7) = res; + POST_IO +RET(10) +} + +// ADDaD +OPCODE(0xD068) +{ + u32 adr, res; + u32 src, dst; + + FETCH_SWORD(adr); + adr += AREG((Opcode >> 0) & 7); + PRE_IO + READ_WORD_F(adr, src) + dst = DREGu16((Opcode >> 9) & 7); + res = dst + src; + flag_V = ((src ^ res) & (dst ^ res)) >> 8; + flag_N = flag_X = flag_C = res >> 8; + flag_NotZ = res & 0xFFFF; + DREGu16((Opcode >> 9) & 7) = res; + POST_IO +RET(12) +} + +// ADDaD +OPCODE(0xD070) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + DECODE_EXT_WORD + PRE_IO + READ_WORD_F(adr, src) + dst = DREGu16((Opcode >> 9) & 7); + res = dst + src; + flag_V = ((src ^ res) & (dst ^ res)) >> 8; + flag_N = flag_X = flag_C = res >> 8; + flag_NotZ = res & 0xFFFF; + DREGu16((Opcode >> 9) & 7) = res; + POST_IO +RET(14) +} + +// ADDaD +OPCODE(0xD078) +{ + u32 adr, res; + u32 src, dst; + + FETCH_SWORD(adr); + PRE_IO + READ_WORD_F(adr, src) + dst = DREGu16((Opcode >> 9) & 7); + res = dst + src; + flag_V = ((src ^ res) & (dst ^ res)) >> 8; + flag_N = flag_X = flag_C = res >> 8; + flag_NotZ = res & 0xFFFF; + DREGu16((Opcode >> 9) & 7) = res; + POST_IO +RET(12) +} + +// ADDaD +OPCODE(0xD079) +{ + u32 adr, res; + u32 src, dst; + + FETCH_LONG(adr); + PRE_IO + READ_WORD_F(adr, src) + dst = DREGu16((Opcode >> 9) & 7); + res = dst + src; + flag_V = ((src ^ res) & (dst ^ res)) >> 8; + flag_N = flag_X = flag_C = res >> 8; + flag_NotZ = res & 0xFFFF; + DREGu16((Opcode >> 9) & 7) = res; + POST_IO +RET(16) +} + +// ADDaD +OPCODE(0xD07A) +{ + u32 adr, res; + u32 src, dst; + + adr = GET_SWORD + ((u32)(PC) - BasePC); + PC++; + PRE_IO + READ_WORD_F(adr, src) + dst = DREGu16((Opcode >> 9) & 7); + res = dst + src; + flag_V = ((src ^ res) & (dst ^ res)) >> 8; + flag_N = flag_X = flag_C = res >> 8; + flag_NotZ = res & 0xFFFF; + DREGu16((Opcode >> 9) & 7) = res; + POST_IO +RET(12) +} + +// ADDaD +OPCODE(0xD07B) +{ + u32 adr, res; + u32 src, dst; + + adr = (u32)(PC) - BasePC; + DECODE_EXT_WORD + PRE_IO + READ_WORD_F(adr, src) + dst = DREGu16((Opcode >> 9) & 7); + res = dst + src; + flag_V = ((src ^ res) & (dst ^ res)) >> 8; + flag_N = flag_X = flag_C = res >> 8; + flag_NotZ = res & 0xFFFF; + DREGu16((Opcode >> 9) & 7) = res; + POST_IO +RET(14) +} + +// ADDaD +OPCODE(0xD07C) +{ + u32 adr, res; + u32 src, dst; + + FETCH_WORD(src); + dst = DREGu16((Opcode >> 9) & 7); + res = dst + src; + flag_V = ((src ^ res) & (dst ^ res)) >> 8; + flag_N = flag_X = flag_C = res >> 8; + flag_NotZ = res & 0xFFFF; + DREGu16((Opcode >> 9) & 7) = res; +RET(8) +} + +// ADDaD +OPCODE(0xD05F) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7); + AREG(7) += 2; + PRE_IO + READ_WORD_F(adr, src) + dst = DREGu16((Opcode >> 9) & 7); + res = dst + src; + flag_V = ((src ^ res) & (dst ^ res)) >> 8; + flag_N = flag_X = flag_C = res >> 8; + flag_NotZ = res & 0xFFFF; + DREGu16((Opcode >> 9) & 7) = res; + POST_IO +RET(8) +} + +// ADDaD +OPCODE(0xD067) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7) - 2; + AREG(7) = adr; + PRE_IO + READ_WORD_F(adr, src) + dst = DREGu16((Opcode >> 9) & 7); + res = dst + src; + flag_V = ((src ^ res) & (dst ^ res)) >> 8; + flag_N = flag_X = flag_C = res >> 8; + flag_NotZ = res & 0xFFFF; + DREGu16((Opcode >> 9) & 7) = res; + POST_IO +RET(10) +} + +// ADDaD +OPCODE(0xD080) +{ + u32 adr, res; + u32 src, dst; + + src = DREGu32((Opcode >> 0) & 7); + dst = DREGu32((Opcode >> 9) & 7); + res = dst + src; + flag_NotZ = res; + flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23; + flag_V = ((src ^ res) & (dst ^ res)) >> 24; + flag_N = res >> 24; + DREGu32((Opcode >> 9) & 7) = res; +RET(8) +} + +// ADDaD +OPCODE(0xD088) +{ + u32 adr, res; + u32 src, dst; + + src = AREGu32((Opcode >> 0) & 7); + dst = DREGu32((Opcode >> 9) & 7); + res = dst + src; + flag_NotZ = res; + flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23; + flag_V = ((src ^ res) & (dst ^ res)) >> 24; + flag_N = res >> 24; + DREGu32((Opcode >> 9) & 7) = res; +RET(8) +} + +// ADDaD +OPCODE(0xD090) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + PRE_IO + READ_LONG_F(adr, src) + dst = DREGu32((Opcode >> 9) & 7); + res = dst + src; + flag_NotZ = res; + flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23; + flag_V = ((src ^ res) & (dst ^ res)) >> 24; + flag_N = res >> 24; + DREGu32((Opcode >> 9) & 7) = res; + POST_IO +RET(14) +} + +// ADDaD +OPCODE(0xD098) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + AREG((Opcode >> 0) & 7) += 4; + PRE_IO + READ_LONG_F(adr, src) + dst = DREGu32((Opcode >> 9) & 7); + res = dst + src; + flag_NotZ = res; + flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23; + flag_V = ((src ^ res) & (dst ^ res)) >> 24; + flag_N = res >> 24; + DREGu32((Opcode >> 9) & 7) = res; + POST_IO +RET(14) +} + +// ADDaD +OPCODE(0xD0A0) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7) - 4; + AREG((Opcode >> 0) & 7) = adr; + PRE_IO + READ_LONG_F(adr, src) + dst = DREGu32((Opcode >> 9) & 7); + res = dst + src; + flag_NotZ = res; + flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23; + flag_V = ((src ^ res) & (dst ^ res)) >> 24; + flag_N = res >> 24; + DREGu32((Opcode >> 9) & 7) = res; + POST_IO +RET(16) +} + +// ADDaD +OPCODE(0xD0A8) +{ + u32 adr, res; + u32 src, dst; + + FETCH_SWORD(adr); + adr += AREG((Opcode >> 0) & 7); + PRE_IO + READ_LONG_F(adr, src) + dst = DREGu32((Opcode >> 9) & 7); + res = dst + src; + flag_NotZ = res; + flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23; + flag_V = ((src ^ res) & (dst ^ res)) >> 24; + flag_N = res >> 24; + DREGu32((Opcode >> 9) & 7) = res; + POST_IO +RET(18) +} + +// ADDaD +OPCODE(0xD0B0) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + DECODE_EXT_WORD + PRE_IO + READ_LONG_F(adr, src) + dst = DREGu32((Opcode >> 9) & 7); + res = dst + src; + flag_NotZ = res; + flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23; + flag_V = ((src ^ res) & (dst ^ res)) >> 24; + flag_N = res >> 24; + DREGu32((Opcode >> 9) & 7) = res; + POST_IO +RET(20) +} + +// ADDaD +OPCODE(0xD0B8) +{ + u32 adr, res; + u32 src, dst; + + FETCH_SWORD(adr); + PRE_IO + READ_LONG_F(adr, src) + dst = DREGu32((Opcode >> 9) & 7); + res = dst + src; + flag_NotZ = res; + flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23; + flag_V = ((src ^ res) & (dst ^ res)) >> 24; + flag_N = res >> 24; + DREGu32((Opcode >> 9) & 7) = res; + POST_IO +RET(18) +} + +// ADDaD +OPCODE(0xD0B9) +{ + u32 adr, res; + u32 src, dst; + + FETCH_LONG(adr); + PRE_IO + READ_LONG_F(adr, src) + dst = DREGu32((Opcode >> 9) & 7); + res = dst + src; + flag_NotZ = res; + flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23; + flag_V = ((src ^ res) & (dst ^ res)) >> 24; + flag_N = res >> 24; + DREGu32((Opcode >> 9) & 7) = res; + POST_IO +RET(22) +} + +// ADDaD +OPCODE(0xD0BA) +{ + u32 adr, res; + u32 src, dst; + + adr = GET_SWORD + ((u32)(PC) - BasePC); + PC++; + PRE_IO + READ_LONG_F(adr, src) + dst = DREGu32((Opcode >> 9) & 7); + res = dst + src; + flag_NotZ = res; + flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23; + flag_V = ((src ^ res) & (dst ^ res)) >> 24; + flag_N = res >> 24; + DREGu32((Opcode >> 9) & 7) = res; + POST_IO +RET(18) +} + +// ADDaD +OPCODE(0xD0BB) +{ + u32 adr, res; + u32 src, dst; + + adr = (u32)(PC) - BasePC; + DECODE_EXT_WORD + PRE_IO + READ_LONG_F(adr, src) + dst = DREGu32((Opcode >> 9) & 7); + res = dst + src; + flag_NotZ = res; + flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23; + flag_V = ((src ^ res) & (dst ^ res)) >> 24; + flag_N = res >> 24; + DREGu32((Opcode >> 9) & 7) = res; + POST_IO +RET(20) +} + +// ADDaD +OPCODE(0xD0BC) +{ + u32 adr, res; + u32 src, dst; + + FETCH_LONG(src); + dst = DREGu32((Opcode >> 9) & 7); + res = dst + src; + flag_NotZ = res; + flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23; + flag_V = ((src ^ res) & (dst ^ res)) >> 24; + flag_N = res >> 24; + DREGu32((Opcode >> 9) & 7) = res; +RET(16) +} + +// ADDaD +OPCODE(0xD09F) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7); + AREG(7) += 4; + PRE_IO + READ_LONG_F(adr, src) + dst = DREGu32((Opcode >> 9) & 7); + res = dst + src; + flag_NotZ = res; + flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23; + flag_V = ((src ^ res) & (dst ^ res)) >> 24; + flag_N = res >> 24; + DREGu32((Opcode >> 9) & 7) = res; + POST_IO +RET(14) +} + +// ADDaD +OPCODE(0xD0A7) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7) - 4; + AREG(7) = adr; + PRE_IO + READ_LONG_F(adr, src) + dst = DREGu32((Opcode >> 9) & 7); + res = dst + src; + flag_NotZ = res; + flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23; + flag_V = ((src ^ res) & (dst ^ res)) >> 24; + flag_N = res >> 24; + DREGu32((Opcode >> 9) & 7) = res; + POST_IO +RET(16) +} + +// ADDDa +OPCODE(0xD110) +{ + u32 adr, res; + u32 src, dst; + + src = DREGu8((Opcode >> 9) & 7); + adr = AREG((Opcode >> 0) & 7); + PRE_IO + READ_BYTE_F(adr, dst) + res = dst + src; + flag_N = flag_X = flag_C = res; + flag_V = (src ^ res) & (dst ^ res); + flag_NotZ = res & 0xFF; + WRITE_BYTE_F(adr, res) + POST_IO +RET(12) +} + +// ADDDa +OPCODE(0xD118) +{ + u32 adr, res; + u32 src, dst; + + src = DREGu8((Opcode >> 9) & 7); + adr = AREG((Opcode >> 0) & 7); + AREG((Opcode >> 0) & 7) += 1; + PRE_IO + READ_BYTE_F(adr, dst) + res = dst + src; + flag_N = flag_X = flag_C = res; + flag_V = (src ^ res) & (dst ^ res); + flag_NotZ = res & 0xFF; + WRITE_BYTE_F(adr, res) + POST_IO +RET(12) +} + +// ADDDa +OPCODE(0xD120) +{ + u32 adr, res; + u32 src, dst; + + src = DREGu8((Opcode >> 9) & 7); + adr = AREG((Opcode >> 0) & 7) - 1; + AREG((Opcode >> 0) & 7) = adr; + PRE_IO + READ_BYTE_F(adr, dst) + res = dst + src; + flag_N = flag_X = flag_C = res; + flag_V = (src ^ res) & (dst ^ res); + flag_NotZ = res & 0xFF; + WRITE_BYTE_F(adr, res) + POST_IO +RET(14) +} + +// ADDDa +OPCODE(0xD128) +{ + u32 adr, res; + u32 src, dst; + + src = DREGu8((Opcode >> 9) & 7); + FETCH_SWORD(adr); + adr += AREG((Opcode >> 0) & 7); + PRE_IO + READ_BYTE_F(adr, dst) + res = dst + src; + flag_N = flag_X = flag_C = res; + flag_V = (src ^ res) & (dst ^ res); + flag_NotZ = res & 0xFF; + WRITE_BYTE_F(adr, res) + POST_IO +RET(16) +} + +// ADDDa +OPCODE(0xD130) +{ + u32 adr, res; + u32 src, dst; + + src = DREGu8((Opcode >> 9) & 7); + adr = AREG((Opcode >> 0) & 7); + DECODE_EXT_WORD + PRE_IO + READ_BYTE_F(adr, dst) + res = dst + src; + flag_N = flag_X = flag_C = res; + flag_V = (src ^ res) & (dst ^ res); + flag_NotZ = res & 0xFF; + WRITE_BYTE_F(adr, res) + POST_IO +RET(18) +} + +// ADDDa +OPCODE(0xD138) +{ + u32 adr, res; + u32 src, dst; + + src = DREGu8((Opcode >> 9) & 7); + FETCH_SWORD(adr); + PRE_IO + READ_BYTE_F(adr, dst) + res = dst + src; + flag_N = flag_X = flag_C = res; + flag_V = (src ^ res) & (dst ^ res); + flag_NotZ = res & 0xFF; + WRITE_BYTE_F(adr, res) + POST_IO +RET(16) +} + +// ADDDa +OPCODE(0xD139) +{ + u32 adr, res; + u32 src, dst; + + src = DREGu8((Opcode >> 9) & 7); + FETCH_LONG(adr); + PRE_IO + READ_BYTE_F(adr, dst) + res = dst + src; + flag_N = flag_X = flag_C = res; + flag_V = (src ^ res) & (dst ^ res); + flag_NotZ = res & 0xFF; + WRITE_BYTE_F(adr, res) + POST_IO +RET(20) +} + +// ADDDa +OPCODE(0xD11F) +{ + u32 adr, res; + u32 src, dst; + + src = DREGu8((Opcode >> 9) & 7); + adr = AREG(7); + AREG(7) += 2; + PRE_IO + READ_BYTE_F(adr, dst) + res = dst + src; + flag_N = flag_X = flag_C = res; + flag_V = (src ^ res) & (dst ^ res); + flag_NotZ = res & 0xFF; + WRITE_BYTE_F(adr, res) + POST_IO +RET(12) +} + +// ADDDa +OPCODE(0xD127) +{ + u32 adr, res; + u32 src, dst; + + src = DREGu8((Opcode >> 9) & 7); + adr = AREG(7) - 2; + AREG(7) = adr; + PRE_IO + READ_BYTE_F(adr, dst) + res = dst + src; + flag_N = flag_X = flag_C = res; + flag_V = (src ^ res) & (dst ^ res); + flag_NotZ = res & 0xFF; + WRITE_BYTE_F(adr, res) + POST_IO +RET(14) +} + +// ADDDa +OPCODE(0xD150) +{ + u32 adr, res; + u32 src, dst; + + src = DREGu16((Opcode >> 9) & 7); + adr = AREG((Opcode >> 0) & 7); + PRE_IO + READ_WORD_F(adr, dst) + res = dst + src; + flag_V = ((src ^ res) & (dst ^ res)) >> 8; + flag_N = flag_X = flag_C = res >> 8; + flag_NotZ = res & 0xFFFF; + WRITE_WORD_F(adr, res) + POST_IO +RET(12) +} + +// ADDDa +OPCODE(0xD158) +{ + u32 adr, res; + u32 src, dst; + + src = DREGu16((Opcode >> 9) & 7); + adr = AREG((Opcode >> 0) & 7); + AREG((Opcode >> 0) & 7) += 2; + PRE_IO + READ_WORD_F(adr, dst) + res = dst + src; + flag_V = ((src ^ res) & (dst ^ res)) >> 8; + flag_N = flag_X = flag_C = res >> 8; + flag_NotZ = res & 0xFFFF; + WRITE_WORD_F(adr, res) + POST_IO +RET(12) +} + +// ADDDa +OPCODE(0xD160) +{ + u32 adr, res; + u32 src, dst; + + src = DREGu16((Opcode >> 9) & 7); + adr = AREG((Opcode >> 0) & 7) - 2; + AREG((Opcode >> 0) & 7) = adr; + PRE_IO + READ_WORD_F(adr, dst) + res = dst + src; + flag_V = ((src ^ res) & (dst ^ res)) >> 8; + flag_N = flag_X = flag_C = res >> 8; + flag_NotZ = res & 0xFFFF; + WRITE_WORD_F(adr, res) + POST_IO +RET(14) +} + +// ADDDa +OPCODE(0xD168) +{ + u32 adr, res; + u32 src, dst; + + src = DREGu16((Opcode >> 9) & 7); + FETCH_SWORD(adr); + adr += AREG((Opcode >> 0) & 7); + PRE_IO + READ_WORD_F(adr, dst) + res = dst + src; + flag_V = ((src ^ res) & (dst ^ res)) >> 8; + flag_N = flag_X = flag_C = res >> 8; + flag_NotZ = res & 0xFFFF; + WRITE_WORD_F(adr, res) + POST_IO +RET(16) +} + +// ADDDa +OPCODE(0xD170) +{ + u32 adr, res; + u32 src, dst; + + src = DREGu16((Opcode >> 9) & 7); + adr = AREG((Opcode >> 0) & 7); + DECODE_EXT_WORD + PRE_IO + READ_WORD_F(adr, dst) + res = dst + src; + flag_V = ((src ^ res) & (dst ^ res)) >> 8; + flag_N = flag_X = flag_C = res >> 8; + flag_NotZ = res & 0xFFFF; + WRITE_WORD_F(adr, res) + POST_IO +RET(18) +} + +// ADDDa +OPCODE(0xD178) +{ + u32 adr, res; + u32 src, dst; + + src = DREGu16((Opcode >> 9) & 7); + FETCH_SWORD(adr); + PRE_IO + READ_WORD_F(adr, dst) + res = dst + src; + flag_V = ((src ^ res) & (dst ^ res)) >> 8; + flag_N = flag_X = flag_C = res >> 8; + flag_NotZ = res & 0xFFFF; + WRITE_WORD_F(adr, res) + POST_IO +RET(16) +} + +// ADDDa +OPCODE(0xD179) +{ + u32 adr, res; + u32 src, dst; + + src = DREGu16((Opcode >> 9) & 7); + FETCH_LONG(adr); + PRE_IO + READ_WORD_F(adr, dst) + res = dst + src; + flag_V = ((src ^ res) & (dst ^ res)) >> 8; + flag_N = flag_X = flag_C = res >> 8; + flag_NotZ = res & 0xFFFF; + WRITE_WORD_F(adr, res) + POST_IO +RET(20) +} + +// ADDDa +OPCODE(0xD15F) +{ + u32 adr, res; + u32 src, dst; + + src = DREGu16((Opcode >> 9) & 7); + adr = AREG(7); + AREG(7) += 2; + PRE_IO + READ_WORD_F(adr, dst) + res = dst + src; + flag_V = ((src ^ res) & (dst ^ res)) >> 8; + flag_N = flag_X = flag_C = res >> 8; + flag_NotZ = res & 0xFFFF; + WRITE_WORD_F(adr, res) + POST_IO +RET(12) +} + +// ADDDa +OPCODE(0xD167) +{ + u32 adr, res; + u32 src, dst; + + src = DREGu16((Opcode >> 9) & 7); + adr = AREG(7) - 2; + AREG(7) = adr; + PRE_IO + READ_WORD_F(adr, dst) + res = dst + src; + flag_V = ((src ^ res) & (dst ^ res)) >> 8; + flag_N = flag_X = flag_C = res >> 8; + flag_NotZ = res & 0xFFFF; + WRITE_WORD_F(adr, res) + POST_IO +RET(14) +} + +// ADDDa +OPCODE(0xD190) +{ + u32 adr, res; + u32 src, dst; + + src = DREGu32((Opcode >> 9) & 7); + adr = AREG((Opcode >> 0) & 7); + PRE_IO + READ_LONG_F(adr, dst) + res = dst + src; + flag_NotZ = res; + flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23; + flag_V = ((src ^ res) & (dst ^ res)) >> 24; + flag_N = res >> 24; + WRITE_LONG_F(adr, res) + POST_IO +RET(20) +} + +// ADDDa +OPCODE(0xD198) +{ + u32 adr, res; + u32 src, dst; + + src = DREGu32((Opcode >> 9) & 7); + adr = AREG((Opcode >> 0) & 7); + AREG((Opcode >> 0) & 7) += 4; + PRE_IO + READ_LONG_F(adr, dst) + res = dst + src; + flag_NotZ = res; + flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23; + flag_V = ((src ^ res) & (dst ^ res)) >> 24; + flag_N = res >> 24; + WRITE_LONG_F(adr, res) + POST_IO +RET(20) +} + +// ADDDa +OPCODE(0xD1A0) +{ + u32 adr, res; + u32 src, dst; + + src = DREGu32((Opcode >> 9) & 7); + adr = AREG((Opcode >> 0) & 7) - 4; + AREG((Opcode >> 0) & 7) = adr; + PRE_IO + READ_LONG_F(adr, dst) + res = dst + src; + flag_NotZ = res; + flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23; + flag_V = ((src ^ res) & (dst ^ res)) >> 24; + flag_N = res >> 24; + WRITE_LONG_F(adr, res) + POST_IO +RET(22) +} + +// ADDDa +OPCODE(0xD1A8) +{ + u32 adr, res; + u32 src, dst; + + src = DREGu32((Opcode >> 9) & 7); + FETCH_SWORD(adr); + adr += AREG((Opcode >> 0) & 7); + PRE_IO + READ_LONG_F(adr, dst) + res = dst + src; + flag_NotZ = res; + flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23; + flag_V = ((src ^ res) & (dst ^ res)) >> 24; + flag_N = res >> 24; + WRITE_LONG_F(adr, res) + POST_IO +RET(24) +} + +// ADDDa +OPCODE(0xD1B0) +{ + u32 adr, res; + u32 src, dst; + + src = DREGu32((Opcode >> 9) & 7); + adr = AREG((Opcode >> 0) & 7); + DECODE_EXT_WORD + PRE_IO + READ_LONG_F(adr, dst) + res = dst + src; + flag_NotZ = res; + flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23; + flag_V = ((src ^ res) & (dst ^ res)) >> 24; + flag_N = res >> 24; + WRITE_LONG_F(adr, res) + POST_IO +RET(26) +} + +// ADDDa +OPCODE(0xD1B8) +{ + u32 adr, res; + u32 src, dst; + + src = DREGu32((Opcode >> 9) & 7); + FETCH_SWORD(adr); + PRE_IO + READ_LONG_F(adr, dst) + res = dst + src; + flag_NotZ = res; + flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23; + flag_V = ((src ^ res) & (dst ^ res)) >> 24; + flag_N = res >> 24; + WRITE_LONG_F(adr, res) + POST_IO +RET(24) +} + +// ADDDa +OPCODE(0xD1B9) +{ + u32 adr, res; + u32 src, dst; + + src = DREGu32((Opcode >> 9) & 7); + FETCH_LONG(adr); + PRE_IO + READ_LONG_F(adr, dst) + res = dst + src; + flag_NotZ = res; + flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23; + flag_V = ((src ^ res) & (dst ^ res)) >> 24; + flag_N = res >> 24; + WRITE_LONG_F(adr, res) + POST_IO +RET(28) +} + +// ADDDa +OPCODE(0xD19F) +{ + u32 adr, res; + u32 src, dst; + + src = DREGu32((Opcode >> 9) & 7); + adr = AREG(7); + AREG(7) += 4; + PRE_IO + READ_LONG_F(adr, dst) + res = dst + src; + flag_NotZ = res; + flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23; + flag_V = ((src ^ res) & (dst ^ res)) >> 24; + flag_N = res >> 24; + WRITE_LONG_F(adr, res) + POST_IO +RET(20) +} + +// ADDDa +OPCODE(0xD1A7) +{ + u32 adr, res; + u32 src, dst; + + src = DREGu32((Opcode >> 9) & 7); + adr = AREG(7) - 4; + AREG(7) = adr; + PRE_IO + READ_LONG_F(adr, dst) + res = dst + src; + flag_NotZ = res; + flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23; + flag_V = ((src ^ res) & (dst ^ res)) >> 24; + flag_N = res >> 24; + WRITE_LONG_F(adr, res) + POST_IO +RET(22) +} + +// ADDX +OPCODE(0xD100) +{ + u32 adr, res; + u32 src, dst; + + src = DREGu8((Opcode >> 0) & 7); + dst = DREGu8((Opcode >> 9) & 7); + res = dst + src + ((flag_X >> 8) & 1); + flag_N = flag_X = flag_C = res; + flag_V = (src ^ res) & (dst ^ res); + flag_NotZ |= res & 0xFF; + DREGu8((Opcode >> 9) & 7) = res; +RET(4) +} + +// ADDX +OPCODE(0xD140) +{ + u32 adr, res; + u32 src, dst; + + src = DREGu16((Opcode >> 0) & 7); + dst = DREGu16((Opcode >> 9) & 7); + res = dst + src + ((flag_X >> 8) & 1); + flag_V = ((src ^ res) & (dst ^ res)) >> 8; + flag_N = flag_X = flag_C = res >> 8; + flag_NotZ |= res & 0xFFFF; + DREGu16((Opcode >> 9) & 7) = res; +RET(4) +} + +// ADDX +OPCODE(0xD180) +{ + u32 adr, res; + u32 src, dst; + + src = DREGu32((Opcode >> 0) & 7); + dst = DREGu32((Opcode >> 9) & 7); + res = dst + src + ((flag_X >> 8) & 1); + flag_NotZ |= res; + flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23; + flag_V = ((src ^ res) & (dst ^ res)) >> 24; + flag_N = res >> 24; + DREGu32((Opcode >> 9) & 7) = res; +RET(8) +} + +// ADDXM +OPCODE(0xD108) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7) - 1; + AREG((Opcode >> 0) & 7) = adr; + PRE_IO + READ_BYTE_F(adr, src) + adr = AREG((Opcode >> 9) & 7) - 1; + AREG((Opcode >> 9) & 7) = adr; + READ_BYTE_F(adr, dst) + res = dst + src + ((flag_X >> 8) & 1); + flag_N = flag_X = flag_C = res; + flag_V = (src ^ res) & (dst ^ res); + flag_NotZ |= res & 0xFF; + WRITE_BYTE_F(adr, res) + POST_IO +RET(18) +} + +// ADDXM +OPCODE(0xD148) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7) - 2; + AREG((Opcode >> 0) & 7) = adr; + PRE_IO + READ_WORD_F(adr, src) + adr = AREG((Opcode >> 9) & 7) - 2; + AREG((Opcode >> 9) & 7) = adr; + READ_WORD_F(adr, dst) + res = dst + src + ((flag_X >> 8) & 1); + flag_V = ((src ^ res) & (dst ^ res)) >> 8; + flag_N = flag_X = flag_C = res >> 8; + flag_NotZ |= res & 0xFFFF; + WRITE_WORD_F(adr, res) + POST_IO +RET(18) +} + +// ADDXM +OPCODE(0xD188) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7) - 4; + AREG((Opcode >> 0) & 7) = adr; + PRE_IO + READ_LONG_F(adr, src) + adr = AREG((Opcode >> 9) & 7) - 4; + AREG((Opcode >> 9) & 7) = adr; + READ_LONG_F(adr, dst) + res = dst + src + ((flag_X >> 8) & 1); + flag_NotZ |= res; + flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23; + flag_V = ((src ^ res) & (dst ^ res)) >> 24; + flag_N = res >> 24; + WRITE_LONG_F(adr, res) + POST_IO +RET(30) +} + +// ADDX7M +OPCODE(0xD10F) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7) - 2; + AREG(7) = adr; + PRE_IO + READ_BYTE_F(adr, src) + adr = AREG((Opcode >> 9) & 7) - 1; + AREG((Opcode >> 9) & 7) = adr; + READ_BYTE_F(adr, dst) + res = dst + src + ((flag_X >> 8) & 1); + flag_N = flag_X = flag_C = res; + flag_V = (src ^ res) & (dst ^ res); + flag_NotZ |= res & 0xFF; + WRITE_BYTE_F(adr, res) + POST_IO +RET(18) +} + +// ADDX7M +OPCODE(0xD14F) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7) - 2; + AREG(7) = adr; + PRE_IO + READ_WORD_F(adr, src) + adr = AREG((Opcode >> 9) & 7) - 2; + AREG((Opcode >> 9) & 7) = adr; + READ_WORD_F(adr, dst) + res = dst + src + ((flag_X >> 8) & 1); + flag_V = ((src ^ res) & (dst ^ res)) >> 8; + flag_N = flag_X = flag_C = res >> 8; + flag_NotZ |= res & 0xFFFF; + WRITE_WORD_F(adr, res) + POST_IO +RET(18) +} + +// ADDX7M +OPCODE(0xD18F) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7) - 4; + AREG(7) = adr; + PRE_IO + READ_LONG_F(adr, src) + adr = AREG((Opcode >> 9) & 7) - 4; + AREG((Opcode >> 9) & 7) = adr; + READ_LONG_F(adr, dst) + res = dst + src + ((flag_X >> 8) & 1); + flag_NotZ |= res; + flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23; + flag_V = ((src ^ res) & (dst ^ res)) >> 24; + flag_N = res >> 24; + WRITE_LONG_F(adr, res) + POST_IO +RET(30) +} + +// ADDXM7 +OPCODE(0xDF08) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7) - 1; + AREG((Opcode >> 0) & 7) = adr; + PRE_IO + READ_BYTE_F(adr, src) + adr = AREG(7) - 2; + AREG(7) = adr; + READ_BYTE_F(adr, dst) + res = dst + src + ((flag_X >> 8) & 1); + flag_N = flag_X = flag_C = res; + flag_V = (src ^ res) & (dst ^ res); + flag_NotZ |= res & 0xFF; + WRITE_BYTE_F(adr, res) + POST_IO +RET(18) +} + +// ADDXM7 +OPCODE(0xDF48) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7) - 2; + AREG((Opcode >> 0) & 7) = adr; + PRE_IO + READ_WORD_F(adr, src) + adr = AREG(7) - 2; + AREG(7) = adr; + READ_WORD_F(adr, dst) + res = dst + src + ((flag_X >> 8) & 1); + flag_V = ((src ^ res) & (dst ^ res)) >> 8; + flag_N = flag_X = flag_C = res >> 8; + flag_NotZ |= res & 0xFFFF; + WRITE_WORD_F(adr, res) + POST_IO +RET(18) +} + +// ADDXM7 +OPCODE(0xDF88) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7) - 4; + AREG((Opcode >> 0) & 7) = adr; + PRE_IO + READ_LONG_F(adr, src) + adr = AREG(7) - 4; + AREG(7) = adr; + READ_LONG_F(adr, dst) + res = dst + src + ((flag_X >> 8) & 1); + flag_NotZ |= res; + flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23; + flag_V = ((src ^ res) & (dst ^ res)) >> 24; + flag_N = res >> 24; + WRITE_LONG_F(adr, res) + POST_IO +RET(30) +} + +// ADDX7M7 +OPCODE(0xDF0F) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7) - 2; + AREG(7) = adr; + PRE_IO + READ_BYTE_F(adr, src) + adr = AREG(7) - 2; + AREG(7) = adr; + READ_BYTE_F(adr, dst) + res = dst + src + ((flag_X >> 8) & 1); + flag_N = flag_X = flag_C = res; + flag_V = (src ^ res) & (dst ^ res); + flag_NotZ |= res & 0xFF; + WRITE_BYTE_F(adr, res) + POST_IO +RET(18) +} + +// ADDX7M7 +OPCODE(0xDF4F) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7) - 2; + AREG(7) = adr; + PRE_IO + READ_WORD_F(adr, src) + adr = AREG(7) - 2; + AREG(7) = adr; + READ_WORD_F(adr, dst) + res = dst + src + ((flag_X >> 8) & 1); + flag_V = ((src ^ res) & (dst ^ res)) >> 8; + flag_N = flag_X = flag_C = res >> 8; + flag_NotZ |= res & 0xFFFF; + WRITE_WORD_F(adr, res) + POST_IO +RET(18) +} + +// ADDX7M7 +OPCODE(0xDF8F) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7) - 4; + AREG(7) = adr; + PRE_IO + READ_LONG_F(adr, src) + adr = AREG(7) - 4; + AREG(7) = adr; + READ_LONG_F(adr, dst) + res = dst + src + ((flag_X >> 8) & 1); + flag_NotZ |= res; + flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23; + flag_V = ((src ^ res) & (dst ^ res)) >> 24; + flag_N = res >> 24; + WRITE_LONG_F(adr, res) + POST_IO +RET(30) +} + +// ADDA +OPCODE(0xD0C0) +{ + u32 adr, res; + u32 src, dst; + + src = (s32)DREGs16((Opcode >> 0) & 7); + dst = AREGu32((Opcode >> 9) & 7); + res = dst + src; + AREG((Opcode >> 9) & 7) = res; +RET(8) +} + +// ADDA +OPCODE(0xD0C8) +{ + u32 adr, res; + u32 src, dst; + + src = (s32)AREGs16((Opcode >> 0) & 7); + dst = AREGu32((Opcode >> 9) & 7); + res = dst + src; + AREG((Opcode >> 9) & 7) = res; +RET(8) +} + +// ADDA +OPCODE(0xD0D0) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + PRE_IO + READSX_WORD_F(adr, src) + dst = AREGu32((Opcode >> 9) & 7); + res = dst + src; + AREG((Opcode >> 9) & 7) = res; + POST_IO +RET(10) +} + +// ADDA +OPCODE(0xD0D8) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + AREG((Opcode >> 0) & 7) += 2; + PRE_IO + READSX_WORD_F(adr, src) + dst = AREGu32((Opcode >> 9) & 7); + res = dst + src; + AREG((Opcode >> 9) & 7) = res; + POST_IO +RET(10) +} + +// ADDA +OPCODE(0xD0E0) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7) - 2; + AREG((Opcode >> 0) & 7) = adr; + PRE_IO + READSX_WORD_F(adr, src) + dst = AREGu32((Opcode >> 9) & 7); + res = dst + src; + AREG((Opcode >> 9) & 7) = res; + POST_IO +RET(12) +} + +// ADDA +OPCODE(0xD0E8) +{ + u32 adr, res; + u32 src, dst; + + FETCH_SWORD(adr); + adr += AREG((Opcode >> 0) & 7); + PRE_IO + READSX_WORD_F(adr, src) + dst = AREGu32((Opcode >> 9) & 7); + res = dst + src; + AREG((Opcode >> 9) & 7) = res; + POST_IO +RET(14) +} + +// ADDA +OPCODE(0xD0F0) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + DECODE_EXT_WORD + PRE_IO + READSX_WORD_F(adr, src) + dst = AREGu32((Opcode >> 9) & 7); + res = dst + src; + AREG((Opcode >> 9) & 7) = res; + POST_IO +RET(16) +} + +// ADDA +OPCODE(0xD0F8) +{ + u32 adr, res; + u32 src, dst; + + FETCH_SWORD(adr); + PRE_IO + READSX_WORD_F(adr, src) + dst = AREGu32((Opcode >> 9) & 7); + res = dst + src; + AREG((Opcode >> 9) & 7) = res; + POST_IO +RET(14) +} + +// ADDA +OPCODE(0xD0F9) +{ + u32 adr, res; + u32 src, dst; + + FETCH_LONG(adr); + PRE_IO + READSX_WORD_F(adr, src) + dst = AREGu32((Opcode >> 9) & 7); + res = dst + src; + AREG((Opcode >> 9) & 7) = res; + POST_IO +RET(18) +} + +// ADDA +OPCODE(0xD0FA) +{ + u32 adr, res; + u32 src, dst; + + adr = GET_SWORD + ((u32)(PC) - BasePC); + PC++; + PRE_IO + READSX_WORD_F(adr, src) + dst = AREGu32((Opcode >> 9) & 7); + res = dst + src; + AREG((Opcode >> 9) & 7) = res; + POST_IO +RET(14) +} + +// ADDA +OPCODE(0xD0FB) +{ + u32 adr, res; + u32 src, dst; + + adr = (u32)(PC) - BasePC; + DECODE_EXT_WORD + PRE_IO + READSX_WORD_F(adr, src) + dst = AREGu32((Opcode >> 9) & 7); + res = dst + src; + AREG((Opcode >> 9) & 7) = res; + POST_IO +RET(16) +} + +// ADDA +OPCODE(0xD0FC) +{ + u32 adr, res; + u32 src, dst; + + FETCH_SWORD(src); + dst = AREGu32((Opcode >> 9) & 7); + res = dst + src; + AREG((Opcode >> 9) & 7) = res; +RET(12) +} + +// ADDA +OPCODE(0xD0DF) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7); + AREG(7) += 2; + PRE_IO + READSX_WORD_F(adr, src) + dst = AREGu32((Opcode >> 9) & 7); + res = dst + src; + AREG((Opcode >> 9) & 7) = res; + POST_IO +RET(10) +} + +// ADDA +OPCODE(0xD0E7) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7) - 2; + AREG(7) = adr; + PRE_IO + READSX_WORD_F(adr, src) + dst = AREGu32((Opcode >> 9) & 7); + res = dst + src; + AREG((Opcode >> 9) & 7) = res; + POST_IO +RET(12) +} + +// ADDA +OPCODE(0xD1C0) +{ + u32 adr, res; + u32 src, dst; + + src = (s32)DREGs32((Opcode >> 0) & 7); + dst = AREGu32((Opcode >> 9) & 7); + res = dst + src; + AREG((Opcode >> 9) & 7) = res; +#ifdef USE_CYCLONE_TIMING +RET(8) +#else +RET(6) +#endif +} + +// ADDA +OPCODE(0xD1C8) +{ + u32 adr, res; + u32 src, dst; + + src = (s32)AREGs32((Opcode >> 0) & 7); + dst = AREGu32((Opcode >> 9) & 7); + res = dst + src; + AREG((Opcode >> 9) & 7) = res; +#ifdef USE_CYCLONE_TIMING +RET(8) +#else +RET(6) +#endif +} + +// ADDA +OPCODE(0xD1D0) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + PRE_IO + READSX_LONG_F(adr, src) + dst = AREGu32((Opcode >> 9) & 7); + res = dst + src; + AREG((Opcode >> 9) & 7) = res; + POST_IO +RET(14) +} + +// ADDA +OPCODE(0xD1D8) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + AREG((Opcode >> 0) & 7) += 4; + PRE_IO + READSX_LONG_F(adr, src) + dst = AREGu32((Opcode >> 9) & 7); + res = dst + src; + AREG((Opcode >> 9) & 7) = res; + POST_IO +RET(14) +} + +// ADDA +OPCODE(0xD1E0) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7) - 4; + AREG((Opcode >> 0) & 7) = adr; + PRE_IO + READSX_LONG_F(adr, src) + dst = AREGu32((Opcode >> 9) & 7); + res = dst + src; + AREG((Opcode >> 9) & 7) = res; + POST_IO +RET(16) +} + +// ADDA +OPCODE(0xD1E8) +{ + u32 adr, res; + u32 src, dst; + + FETCH_SWORD(adr); + adr += AREG((Opcode >> 0) & 7); + PRE_IO + READSX_LONG_F(adr, src) + dst = AREGu32((Opcode >> 9) & 7); + res = dst + src; + AREG((Opcode >> 9) & 7) = res; + POST_IO +RET(18) +} + +// ADDA +OPCODE(0xD1F0) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + DECODE_EXT_WORD + PRE_IO + READSX_LONG_F(adr, src) + dst = AREGu32((Opcode >> 9) & 7); + res = dst + src; + AREG((Opcode >> 9) & 7) = res; + POST_IO +RET(20) +} + +// ADDA +OPCODE(0xD1F8) +{ + u32 adr, res; + u32 src, dst; + + FETCH_SWORD(adr); + PRE_IO + READSX_LONG_F(adr, src) + dst = AREGu32((Opcode >> 9) & 7); + res = dst + src; + AREG((Opcode >> 9) & 7) = res; + POST_IO +RET(18) +} + +// ADDA +OPCODE(0xD1F9) +{ + u32 adr, res; + u32 src, dst; + + FETCH_LONG(adr); + PRE_IO + READSX_LONG_F(adr, src) + dst = AREGu32((Opcode >> 9) & 7); + res = dst + src; + AREG((Opcode >> 9) & 7) = res; + POST_IO +RET(22) +} + +// ADDA +OPCODE(0xD1FA) +{ + u32 adr, res; + u32 src, dst; + + adr = GET_SWORD + ((u32)(PC) - BasePC); + PC++; + PRE_IO + READSX_LONG_F(adr, src) + dst = AREGu32((Opcode >> 9) & 7); + res = dst + src; + AREG((Opcode >> 9) & 7) = res; + POST_IO +RET(18) +} + +// ADDA +OPCODE(0xD1FB) +{ + u32 adr, res; + u32 src, dst; + + adr = (u32)(PC) - BasePC; + DECODE_EXT_WORD + PRE_IO + READSX_LONG_F(adr, src) + dst = AREGu32((Opcode >> 9) & 7); + res = dst + src; + AREG((Opcode >> 9) & 7) = res; + POST_IO +RET(20) +} + +// ADDA +OPCODE(0xD1FC) +{ + u32 adr, res; + u32 src, dst; + + FETCH_LONG(src); + dst = AREGu32((Opcode >> 9) & 7); + res = dst + src; + AREG((Opcode >> 9) & 7) = res; +#ifdef USE_CYCLONE_TIMING +RET(16) +#else +RET(14) +#endif +} + +// ADDA +OPCODE(0xD1DF) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7); + AREG(7) += 4; + PRE_IO + READSX_LONG_F(adr, src) + dst = AREGu32((Opcode >> 9) & 7); + res = dst + src; + AREG((Opcode >> 9) & 7) = res; + POST_IO +RET(14) +} + +// ADDA +OPCODE(0xD1E7) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7) - 4; + AREG(7) = adr; + PRE_IO + READSX_LONG_F(adr, src) + dst = AREGu32((Opcode >> 9) & 7); + res = dst + src; + AREG((Opcode >> 9) & 7) = res; + POST_IO +RET(16) +} + +// ASRk +OPCODE(0xE000) +{ + u32 adr, res; + u32 src, dst; + + u32 sft; + + sft = (((Opcode >> 9) - 1) & 7) + 1; + m68kcontext.io_cycle_counter -= sft * 2; + src = (s32)DREGs8((Opcode >> 0) & 7); + flag_V = 0; + flag_X = flag_C = src << ((M68K_SR_C_SFT + 1) - sft); + res = ((s32)src) >> sft; + flag_N = res >> 0; + flag_NotZ = res; + DREGu8((Opcode >> 0) & 7) = res; +RET(6) +} + +// ASRk +OPCODE(0xE040) +{ + u32 adr, res; + u32 src, dst; + + u32 sft; + + sft = (((Opcode >> 9) - 1) & 7) + 1; + m68kcontext.io_cycle_counter -= sft * 2; + src = (s32)DREGs16((Opcode >> 0) & 7); + flag_V = 0; + flag_X = flag_C = src << ((M68K_SR_C_SFT + 1) - sft); + res = ((s32)src) >> sft; + flag_N = res >> 8; + flag_NotZ = res; + DREGu16((Opcode >> 0) & 7) = res; +RET(6) +} + +// ASRk +OPCODE(0xE080) +{ + u32 adr, res; + u32 src, dst; + + u32 sft; + + sft = (((Opcode >> 9) - 1) & 7) + 1; + m68kcontext.io_cycle_counter -= sft * 2; + src = (s32)DREGs32((Opcode >> 0) & 7); + flag_V = 0; + flag_X = flag_C = src << ((M68K_SR_C_SFT + 1) - sft); + res = ((s32)src) >> sft; + flag_N = res >> 24; + flag_NotZ = res; + DREGu32((Opcode >> 0) & 7) = res; +RET(8) +} + +// LSRk +OPCODE(0xE008) +{ + u32 adr, res; + u32 src, dst; + + u32 sft; + + sft = (((Opcode >> 9) - 1) & 7) + 1; + m68kcontext.io_cycle_counter -= sft * 2; + src = DREGu8((Opcode >> 0) & 7); + flag_N = flag_V = 0; + flag_X = flag_C = src << ((M68K_SR_C_SFT + 1) - sft); + res = src >> sft; + flag_NotZ = res; + DREGu8((Opcode >> 0) & 7) = res; +RET(6) +} + +// LSRk +OPCODE(0xE048) +{ + u32 adr, res; + u32 src, dst; + + u32 sft; + + sft = (((Opcode >> 9) - 1) & 7) + 1; + m68kcontext.io_cycle_counter -= sft * 2; + src = DREGu16((Opcode >> 0) & 7); + flag_N = flag_V = 0; + flag_X = flag_C = src << ((M68K_SR_C_SFT + 1) - sft); + res = src >> sft; + flag_NotZ = res; + DREGu16((Opcode >> 0) & 7) = res; +RET(6) +} + +// LSRk +OPCODE(0xE088) +{ + u32 adr, res; + u32 src, dst; + + u32 sft; + + sft = (((Opcode >> 9) - 1) & 7) + 1; + m68kcontext.io_cycle_counter -= sft * 2; + src = DREGu32((Opcode >> 0) & 7); + flag_N = flag_V = 0; + flag_X = flag_C = src << ((M68K_SR_C_SFT + 1) - sft); + res = src >> sft; + flag_NotZ = res; + DREGu32((Opcode >> 0) & 7) = res; +RET(8) +} + +// ROXRk +OPCODE(0xE010) +{ + u32 adr, res; + u32 src, dst; + + u32 sft; + + sft = (((Opcode >> 9) - 1) & 7) + 1; + m68kcontext.io_cycle_counter -= sft * 2; + src = DREGu8((Opcode >> 0) & 7); + src |= (flag_X & M68K_SR_X) << 0; + res = (src >> sft) | (src << (9 - sft)); + flag_X = flag_C = res >> 0; + flag_V = 0; + flag_N = res >> 0; + flag_NotZ = res & 0x000000FF; + DREGu8((Opcode >> 0) & 7) = res; +RET(6) +} + +// ROXRk +OPCODE(0xE050) +{ + u32 adr, res; + u32 src, dst; + + u32 sft; + + sft = (((Opcode >> 9) - 1) & 7) + 1; + m68kcontext.io_cycle_counter -= sft * 2; + src = DREGu16((Opcode >> 0) & 7); + src |= (flag_X & M68K_SR_X) << 8; + res = (src >> sft) | (src << (17 - sft)); + flag_X = flag_C = res >> 8; + flag_V = 0; + flag_N = res >> 8; + flag_NotZ = res & 0x0000FFFF; + DREGu16((Opcode >> 0) & 7) = res; +RET(6) +} + +// ROXRk +OPCODE(0xE090) +{ + u32 adr, res; + u32 src, dst; + + u32 sft; + + sft = (((Opcode >> 9) - 1) & 7) + 1; + m68kcontext.io_cycle_counter -= sft * 2; + src = DREGu32((Opcode >> 0) & 7); + flag_C = src << ((M68K_SR_C_SFT + 1) - sft); + if (sft == 1) res = (src >> 1) | ((flag_X & M68K_SR_X) << (32 - (M68K_SR_X_SFT + 1))); + else res = (src >> sft) | (src << (33 - sft)) | ((flag_X & M68K_SR_X) << (32 - (M68K_SR_X_SFT + sft))); + flag_X = flag_C; + flag_V = 0; + flag_N = res >> 24; + flag_NotZ = res; + DREGu32((Opcode >> 0) & 7) = res; +RET(8) +} + +// RORk +OPCODE(0xE018) +{ + u32 adr, res; + u32 src, dst; + + u32 sft; + + sft = (((Opcode >> 9) - 1) & 7) + 1; + m68kcontext.io_cycle_counter -= sft * 2; + src = DREGu8((Opcode >> 0) & 7); + flag_V = 0; + flag_C = src << ((M68K_SR_C_SFT + 1) - sft); + res = (src >> sft) | (src << (8 - sft)); + flag_N = res >> 0; + flag_NotZ = res & 0x000000FF; + DREGu8((Opcode >> 0) & 7) = res; +RET(6) +} + +// RORk +OPCODE(0xE058) +{ + u32 adr, res; + u32 src, dst; + + u32 sft; + + sft = (((Opcode >> 9) - 1) & 7) + 1; + m68kcontext.io_cycle_counter -= sft * 2; + src = DREGu16((Opcode >> 0) & 7); + flag_V = 0; + flag_C = src << ((M68K_SR_C_SFT + 1) - sft); + res = (src >> sft) | (src << (16 - sft)); + flag_N = res >> 8; + flag_NotZ = res & 0x0000FFFF; + DREGu16((Opcode >> 0) & 7) = res; +RET(6) +} + +// RORk +OPCODE(0xE098) +{ + u32 adr, res; + u32 src, dst; + + u32 sft; + + sft = (((Opcode >> 9) - 1) & 7) + 1; + m68kcontext.io_cycle_counter -= sft * 2; + src = DREGu32((Opcode >> 0) & 7); + flag_V = 0; + flag_C = src << ((M68K_SR_C_SFT + 1) - sft); + res = (src >> sft) | (src << (32 - sft)); + flag_N = res >> 24; + flag_NotZ = res; + DREGu32((Opcode >> 0) & 7) = res; +RET(8) +} + +// ASLk +OPCODE(0xE100) +{ + u32 adr, res; + u32 src, dst; + + u32 sft; + + sft = (((Opcode >> 9) - 1) & 7) + 1; + m68kcontext.io_cycle_counter -= sft * 2; + src = DREGu8((Opcode >> 0) & 7); + if (sft < 8) + { + flag_X = flag_C = src << (0 + sft); + res = src << sft; + flag_N = res >> 0; + flag_NotZ = res & 0x000000FF; + DREGu8((Opcode >> 0) & 7) = res; + flag_V = 0; + if ((sft > 7) && (src)) flag_V = M68K_SR_V; + else + { + u32 msk = (((s32)0x80000000) >> (sft + 24)) & 0x000000FF; + src &= msk; + if ((src) && (src != msk)) flag_V = M68K_SR_V; + } + RET(6) + } + + if (src) flag_V = M68K_SR_V; + else flag_V = 0; + flag_X = flag_C = src << M68K_SR_C_SFT; + res = 0; + DREGu8((Opcode >> 0) & 7) = res; + flag_N = 0; + flag_NotZ = 0; +RET(6) +} + +// ASLk +OPCODE(0xE140) +{ + u32 adr, res; + u32 src, dst; + + u32 sft; + + sft = (((Opcode >> 9) - 1) & 7) + 1; + m68kcontext.io_cycle_counter -= sft * 2; + src = DREGu16((Opcode >> 0) & 7); + flag_X = flag_C = src >> (8 - sft); + res = src << sft; + flag_N = res >> 8; + flag_NotZ = res & 0x0000FFFF; + DREGu16((Opcode >> 0) & 7) = res; + flag_V = 0; + { + u32 msk = (((s32)0x80000000) >> (sft + 16)) & 0x0000FFFF; + src &= msk; + if ((src) && (src != msk)) flag_V = M68K_SR_V; + } +RET(6) +} + +// ASLk +OPCODE(0xE180) +{ + u32 adr, res; + u32 src, dst; + + u32 sft; + + sft = (((Opcode >> 9) - 1) & 7) + 1; + m68kcontext.io_cycle_counter -= sft * 2; + src = DREGu32((Opcode >> 0) & 7); + flag_X = flag_C = src >> (24 - sft); + res = src << sft; + flag_N = res >> 24; + flag_NotZ = res & 0xFFFFFFFF; + DREGu32((Opcode >> 0) & 7) = res; + flag_V = 0; + { + u32 msk = (((s32)0x80000000) >> (sft + 0)) & 0xFFFFFFFF; + src &= msk; + if ((src) && (src != msk)) flag_V = M68K_SR_V; + } +RET(8) +} + +// LSLk +OPCODE(0xE108) +{ + u32 adr, res; + u32 src, dst; + + u32 sft; + + sft = (((Opcode >> 9) - 1) & 7) + 1; + m68kcontext.io_cycle_counter -= sft * 2; + src = DREGu8((Opcode >> 0) & 7); + flag_V = 0; + flag_X = flag_C = src << (0 + sft); + res = src << sft; + flag_N = res >> 0; + flag_NotZ = res & 0x000000FF; + DREGu8((Opcode >> 0) & 7) = res; +RET(6) +} + +// LSLk +OPCODE(0xE148) +{ + u32 adr, res; + u32 src, dst; + + u32 sft; + + sft = (((Opcode >> 9) - 1) & 7) + 1; + m68kcontext.io_cycle_counter -= sft * 2; + src = DREGu16((Opcode >> 0) & 7); + flag_V = 0; + flag_X = flag_C = src >> (8 - sft); + res = src << sft; + flag_N = res >> 8; + flag_NotZ = res & 0x0000FFFF; + DREGu16((Opcode >> 0) & 7) = res; +RET(6) +} + +// LSLk +OPCODE(0xE188) +{ + u32 adr, res; + u32 src, dst; + + u32 sft; + + sft = (((Opcode >> 9) - 1) & 7) + 1; + m68kcontext.io_cycle_counter -= sft * 2; + src = DREGu32((Opcode >> 0) & 7); + flag_V = 0; + flag_X = flag_C = src >> (24 - sft); + res = src << sft; + flag_N = res >> 24; + flag_NotZ = res & 0xFFFFFFFF; + DREGu32((Opcode >> 0) & 7) = res; +RET(8) +} + +// ROXLk +OPCODE(0xE110) +{ + u32 adr, res; + u32 src, dst; + + u32 sft; + + sft = (((Opcode >> 9) - 1) & 7) + 1; + m68kcontext.io_cycle_counter -= sft * 2; + src = DREGu8((Opcode >> 0) & 7); + src |= (flag_X & M68K_SR_X) << 0; + res = (src << sft) | (src >> (9 - sft)); + flag_X = flag_C = res >> 0; + flag_V = 0; + flag_N = res >> 0; + flag_NotZ = res & 0x000000FF; + DREGu8((Opcode >> 0) & 7) = res; +RET(6) +} + +// ROXLk +OPCODE(0xE150) +{ + u32 adr, res; + u32 src, dst; + + u32 sft; + + sft = (((Opcode >> 9) - 1) & 7) + 1; + m68kcontext.io_cycle_counter -= sft * 2; + src = DREGu16((Opcode >> 0) & 7); + src |= (flag_X & M68K_SR_X) << 8; + res = (src << sft) | (src >> (17 - sft)); + flag_X = flag_C = res >> 8; + flag_V = 0; + flag_N = res >> 8; + flag_NotZ = res & 0x0000FFFF; + DREGu16((Opcode >> 0) & 7) = res; +RET(6) +} + +// ROXLk +OPCODE(0xE190) +{ + u32 adr, res; + u32 src, dst; + + u32 sft; + + sft = (((Opcode >> 9) - 1) & 7) + 1; + m68kcontext.io_cycle_counter -= sft * 2; + src = DREGu32((Opcode >> 0) & 7); + flag_C = src >> ((32 - M68K_SR_C_SFT) - sft); + if (sft == 1) res = (src << 1) | ((flag_X & M68K_SR_X) >> ((M68K_SR_X_SFT + 1) - 1)); + else res = (src << sft) | (src >> (33 - sft)) | ((flag_X & M68K_SR_X) >> ((M68K_SR_X_SFT + 1) - sft)); + flag_X = flag_C; + flag_V = 0; + flag_N = res >> 24; + flag_NotZ = res; + DREGu32((Opcode >> 0) & 7) = res; +RET(8) +} + +// ROLk +OPCODE(0xE118) +{ + u32 adr, res; + u32 src, dst; + + u32 sft; + + sft = (((Opcode >> 9) - 1) & 7) + 1; + m68kcontext.io_cycle_counter -= sft * 2; + src = DREGu8((Opcode >> 0) & 7); + flag_V = 0; + flag_C = src << (0 + sft); + res = (src << sft) | (src >> (8 - sft)); + flag_N = res >> 0; + flag_NotZ = res & 0x000000FF; + DREGu8((Opcode >> 0) & 7) = res; +RET(6) +} + +// ROLk +OPCODE(0xE158) +{ + u32 adr, res; + u32 src, dst; + + u32 sft; + + sft = (((Opcode >> 9) - 1) & 7) + 1; + m68kcontext.io_cycle_counter -= sft * 2; + src = DREGu16((Opcode >> 0) & 7); + flag_V = 0; + flag_C = src >> (8 - sft); + res = (src << sft) | (src >> (16 - sft)); + flag_N = res >> 8; + flag_NotZ = res & 0x0000FFFF; + DREGu16((Opcode >> 0) & 7) = res; +RET(6) +} + +// ROLk +OPCODE(0xE198) +{ + u32 adr, res; + u32 src, dst; + + u32 sft; + + sft = (((Opcode >> 9) - 1) & 7) + 1; + m68kcontext.io_cycle_counter -= sft * 2; + src = DREGu32((Opcode >> 0) & 7); + flag_V = 0; + flag_C = src >> (24 - sft); + res = (src << sft) | (src >> (32 - sft)); + flag_N = res >> 24; + flag_NotZ = res; + DREGu32((Opcode >> 0) & 7) = res; +RET(8) +} + +// ASRD +OPCODE(0xE020) +{ + u32 adr, res; + u32 src, dst; + + u32 sft; + + sft = DREG((Opcode >> 9) & 7) & 0x3F; + src = (s32)DREGs8((Opcode >> 0) & 7); + if (sft) + { + m68kcontext.io_cycle_counter -= sft * 2; + if (sft < 8) + { + flag_V = 0; + flag_X = flag_C = src << ((M68K_SR_C_SFT + 1) - sft); + res = ((s32)src) >> sft; + flag_N = res >> 0; + flag_NotZ = res; + DREGu8((Opcode >> 0) & 7) = res; + RET(6) + } + + if (src & (1 << 7)) + { + flag_N = M68K_SR_N; + flag_NotZ = 1; + flag_V = 0; + flag_C = M68K_SR_C; + flag_X = M68K_SR_X; + res = 0x000000FF; + DREGu8((Opcode >> 0) & 7) = res; + RET(6) + } + + flag_N = 0; + flag_NotZ = 0; + flag_V = 0; + flag_C = 0; + flag_X = 0; + res = 0; + DREGu8((Opcode >> 0) & 7) = res; + RET(6) + } + + flag_V = 0; + flag_C = 0; + flag_N = src >> 0; + flag_NotZ = src; +RET(6) +} + +// ASRD +OPCODE(0xE060) +{ + u32 adr, res; + u32 src, dst; + + u32 sft; + + sft = DREG((Opcode >> 9) & 7) & 0x3F; + src = (s32)DREGs16((Opcode >> 0) & 7); + if (sft) + { + m68kcontext.io_cycle_counter -= sft * 2; + if (sft < 16) + { + flag_V = 0; + flag_X = flag_C = (src >> (sft - 1)) << M68K_SR_C_SFT; + res = ((s32)src) >> sft; + flag_N = res >> 8; + flag_NotZ = res; + DREGu16((Opcode >> 0) & 7) = res; + RET(6) + } + + if (src & (1 << 15)) + { + flag_N = M68K_SR_N; + flag_NotZ = 1; + flag_V = 0; + flag_C = M68K_SR_C; + flag_X = M68K_SR_X; + res = 0x0000FFFF; + DREGu16((Opcode >> 0) & 7) = res; + RET(6) + } + + flag_N = 0; + flag_NotZ = 0; + flag_V = 0; + flag_C = 0; + flag_X = 0; + res = 0; + DREGu16((Opcode >> 0) & 7) = res; + RET(6) + } + + flag_V = 0; + flag_C = 0; + flag_N = src >> 8; + flag_NotZ = src; +RET(6) +} + +// ASRD +OPCODE(0xE0A0) +{ +#ifdef USE_CYCLONE_TIMING +#define CYC 8 +#else +#define CYC 6 +#endif + u32 adr, res; + u32 src, dst; + + u32 sft; + + sft = DREG((Opcode >> 9) & 7) & 0x3F; + src = (s32)DREGs32((Opcode >> 0) & 7); + if (sft) + { + m68kcontext.io_cycle_counter -= sft * 2; + if (sft < 32) + { + flag_V = 0; + flag_X = flag_C = (src >> (sft - 1)) << M68K_SR_C_SFT; + res = ((s32)src) >> sft; + flag_N = res >> 24; + flag_NotZ = res; + DREGu32((Opcode >> 0) & 7) = res; + RET(CYC) + } + + if (src & (1 << 31)) + { + flag_N = M68K_SR_N; + flag_NotZ = 1; + flag_V = 0; + flag_C = M68K_SR_C; + flag_X = M68K_SR_X; + res = 0xFFFFFFFF; + DREGu32((Opcode >> 0) & 7) = res; + RET(CYC) + } + + flag_N = 0; + flag_NotZ = 0; + flag_V = 0; + flag_C = 0; + flag_X = 0; + res = 0; + DREGu32((Opcode >> 0) & 7) = res; + RET(CYC) + } + + flag_V = 0; + flag_C = 0; + flag_N = src >> 24; + flag_NotZ = src; +RET(CYC) +#undef CYC +} + +// LSRD +OPCODE(0xE028) +{ + u32 adr, res; + u32 src, dst; + + u32 sft; + + sft = DREG((Opcode >> 9) & 7) & 0x3F; + src = DREGu8((Opcode >> 0) & 7); + if (sft) + { + m68kcontext.io_cycle_counter -= sft * 2; + if (sft <= 8) + { + flag_N = flag_V = 0; + flag_X = flag_C = src << ((M68K_SR_C_SFT + 1) - sft); + res = src >> sft; + flag_NotZ = res; + DREGu8((Opcode >> 0) & 7) = res; + RET(6) + } + + flag_X = flag_C = 0; + flag_N = 0; + flag_NotZ = 0; + flag_V = 0; + res = 0; + DREGu8((Opcode >> 0) & 7) = res; + RET(6) + } + + flag_V = 0; + flag_C = 0; + flag_N = src >> 0; + flag_NotZ = src; +RET(6) +} + +// LSRD +OPCODE(0xE068) +{ + u32 adr, res; + u32 src, dst; + + u32 sft; + + sft = DREG((Opcode >> 9) & 7) & 0x3F; + src = DREGu16((Opcode >> 0) & 7); + if (sft) + { + m68kcontext.io_cycle_counter -= sft * 2; + if (sft <= 16) + { + flag_N = flag_V = 0; + flag_X = flag_C = (src >> (sft - 1)) << M68K_SR_C_SFT; + res = src >> sft; + flag_NotZ = res; + DREGu16((Opcode >> 0) & 7) = res; + RET(6) + } + + flag_X = flag_C = 0; + flag_N = 0; + flag_NotZ = 0; + flag_V = 0; + res = 0; + DREGu16((Opcode >> 0) & 7) = res; + RET(6) + } + + flag_V = 0; + flag_C = 0; + flag_N = src >> 8; + flag_NotZ = src; +RET(6) +} + +// LSRD +OPCODE(0xE0A8) +{ +#ifdef USE_CYCLONE_TIMING +#define CYC 8 +#else +#define CYC 6 +#endif + u32 adr, res; + u32 src, dst; + + u32 sft; + + sft = DREG((Opcode >> 9) & 7) & 0x3F; + src = DREGu32((Opcode >> 0) & 7); + if (sft) + { + m68kcontext.io_cycle_counter -= sft * 2; + if (sft < 32) + { + flag_N = flag_V = 0; + flag_X = flag_C = (src >> (sft - 1)) << M68K_SR_C_SFT; + res = src >> sft; + flag_NotZ = res; + DREGu32((Opcode >> 0) & 7) = res; + RET(CYC) + } + + if (sft == 32) flag_C = src >> (31 - M68K_SR_C_SFT); + else flag_C = 0; + flag_X = flag_C; + flag_N = 0; + flag_NotZ = 0; + flag_V = 0; + res = 0; + DREGu32((Opcode >> 0) & 7) = res; + RET(CYC) + } + + flag_V = 0; + flag_C = 0; + flag_N = src >> 24; + flag_NotZ = src; +RET(CYC) +#undef CYC +} + +// ROXRD +OPCODE(0xE030) +{ + u32 adr, res; + u32 src, dst; + + u32 sft; + + sft = DREG((Opcode >> 9) & 7) & 0x3F; + src = DREGu8((Opcode >> 0) & 7); + if (sft) + { + m68kcontext.io_cycle_counter -= sft * 2; + sft %= 9; + + src |= (flag_X & M68K_SR_X) << 0; + res = (src >> sft) | (src << (9 - sft)); + flag_X = flag_C = res >> 0; + flag_V = 0; + flag_N = res >> 0; + flag_NotZ = res & 0x000000FF; + DREGu8((Opcode >> 0) & 7) = res; + RET(6) + } + + flag_V = 0; + flag_C = flag_X; + flag_N = src >> 0; + flag_NotZ = src; +RET(6) +} + +// ROXRD +OPCODE(0xE070) +{ + u32 adr, res; + u32 src, dst; + + u32 sft; + + sft = DREG((Opcode >> 9) & 7) & 0x3F; + src = DREGu16((Opcode >> 0) & 7); + if (sft) + { + m68kcontext.io_cycle_counter -= sft * 2; + sft %= 17; + + src |= (flag_X & M68K_SR_X) << 8; + res = (src >> sft) | (src << (17 - sft)); + flag_X = flag_C = res >> 8; + flag_V = 0; + flag_N = res >> 8; + flag_NotZ = res & 0x0000FFFF; + DREGu16((Opcode >> 0) & 7) = res; + RET(6) + } + + flag_V = 0; + flag_C = flag_X; + flag_N = src >> 8; + flag_NotZ = src; +RET(6) +} + +// ROXRD +OPCODE(0xE0B0) +{ +#ifdef USE_CYCLONE_TIMING +#define CYC 8 +#else +#define CYC 6 +#endif + u32 adr, res; + u32 src, dst; + + u32 sft; + + sft = DREG((Opcode >> 9) & 7) & 0x3F; + src = DREGu32((Opcode >> 0) & 7); + if (sft) + { + m68kcontext.io_cycle_counter -= sft * 2; + sft %= 33; + + if (sft != 0) + { + if (sft == 1) res = (src >> 1) | ((flag_X & M68K_SR_X) << (32 - (M68K_SR_X_SFT + 1))); + else res = (src >> sft) | (src << (33 - sft)) | (((flag_X & M68K_SR_X) << (32 - (M68K_SR_X_SFT + 1))) >> (sft - 1)); + flag_X = (src >> (32 - sft)) << M68K_SR_X_SFT; + } + else res = src; + flag_C = flag_X; + flag_V = 0; + flag_N = res >> 24; + flag_NotZ = res; + DREGu32((Opcode >> 0) & 7) = res; + RET(CYC) + } + + flag_V = 0; + flag_C = flag_X; + flag_N = src >> 24; + flag_NotZ = src; +RET(CYC) +#undef CYC +} + +// RORD +OPCODE(0xE038) +{ + u32 adr, res; + u32 src, dst; + + u32 sft; + + sft = DREG((Opcode >> 9) & 7) & 0x3F; + src = DREGu8((Opcode >> 0) & 7); + if (sft) + { + m68kcontext.io_cycle_counter -= sft * 2; + sft &= 0x07; + + flag_C = src << (M68K_SR_C_SFT - ((sft - 1) & 7)); + res = (src >> sft) | (src << (8 - sft)); + flag_V = 0; + flag_N = res >> 0; + flag_NotZ = res & 0x000000FF; + DREGu8((Opcode >> 0) & 7) = res; + RET(6) + } + + flag_V = 0; + flag_C = 0; + flag_N = src >> 0; + flag_NotZ = src; +RET(6) +} + +// RORD +OPCODE(0xE078) +{ + u32 adr, res; + u32 src, dst; + + u32 sft; + + sft = DREG((Opcode >> 9) & 7) & 0x3F; + src = DREGu16((Opcode >> 0) & 7); + if (sft) + { + m68kcontext.io_cycle_counter -= sft * 2; + sft &= 0x0F; + + flag_C = (src >> ((sft - 1) & 15)) << M68K_SR_C_SFT; + res = (src >> sft) | (src << (16 - sft)); + flag_V = 0; + flag_N = res >> 8; + flag_NotZ = res & 0x0000FFFF; + DREGu16((Opcode >> 0) & 7) = res; + RET(6) + } + + flag_V = 0; + flag_C = 0; + flag_N = src >> 8; + flag_NotZ = src; +RET(6) +} + +// RORD +OPCODE(0xE0B8) +{ +#ifdef USE_CYCLONE_TIMING +#define CYC 8 +#else +#define CYC 6 +#endif + u32 adr, res; + u32 src, dst; + + u32 sft; + + sft = DREG((Opcode >> 9) & 7) & 0x3F; + src = DREGu32((Opcode >> 0) & 7); + if (sft) + { + m68kcontext.io_cycle_counter -= sft * 2; + sft &= 0x1F; + + flag_C = (src >> ((sft - 1) & 31)) << M68K_SR_C_SFT; + res = (src >> sft) | (src << (32 - sft)); + flag_V = 0; + flag_N = res >> 24; + flag_NotZ = res; + DREGu32((Opcode >> 0) & 7) = res; + RET(CYC) + } + + flag_V = 0; + flag_C = 0; + flag_N = src >> 24; + flag_NotZ = src; +RET(CYC) +#undef CYC +} + +// ASLD +OPCODE(0xE120) +{ + u32 adr, res; + u32 src, dst; + + u32 sft; + + sft = DREG((Opcode >> 9) & 7) & 0x3F; + src = DREGu8((Opcode >> 0) & 7); + if (sft) + { + m68kcontext.io_cycle_counter -= sft * 2; + if (sft < 8) + { + flag_X = flag_C = (src << sft) >> 0; + res = (src << sft) & 0x000000FF; + flag_N = res >> 0; + flag_NotZ = res; + DREGu8((Opcode >> 0) & 7) = res; + flag_V = 0; + { + u32 msk = (((s32)0x80000000) >> (sft + 24)) & 0x000000FF; + src &= msk; + if ((src) && (src != msk)) flag_V = M68K_SR_V; + } + RET(6) + } + + if (sft == 256) flag_C = src << M68K_SR_C_SFT; + else flag_C = 0; + flag_X = flag_C; + if (src) flag_V = M68K_SR_V; + else flag_V = 0; + res = 0; + DREGu8((Opcode >> 0) & 7) = res; + flag_N = 0; + flag_NotZ = 0; + RET(6) + } + + flag_V = 0; + flag_C = 0; + flag_N = src >> 0; + flag_NotZ = src; +RET(6) +} + +// ASLD +OPCODE(0xE160) +{ + u32 adr, res; + u32 src, dst; + + u32 sft; + + sft = DREG((Opcode >> 9) & 7) & 0x3F; + src = DREGu16((Opcode >> 0) & 7); + if (sft) + { + m68kcontext.io_cycle_counter -= sft * 2; + if (sft < 16) + { + flag_X = flag_C = (src << sft) >> 8; + res = (src << sft) & 0x0000FFFF; + flag_N = res >> 8; + flag_NotZ = res; + DREGu16((Opcode >> 0) & 7) = res; + flag_V = 0; + { + u32 msk = (((s32)0x80000000) >> (sft + 16)) & 0x0000FFFF; + src &= msk; + if ((src) && (src != msk)) flag_V = M68K_SR_V; + } + RET(6) + } + + if (sft == 65536) flag_C = src << M68K_SR_C_SFT; + else flag_C = 0; + flag_X = flag_C; + if (src) flag_V = M68K_SR_V; + else flag_V = 0; + res = 0; + DREGu16((Opcode >> 0) & 7) = res; + flag_N = 0; + flag_NotZ = 0; + RET(6) + } + + flag_V = 0; + flag_C = 0; + flag_N = src >> 8; + flag_NotZ = src; +RET(6) +} + +// ASLD +OPCODE(0xE1A0) +{ +#ifdef USE_CYCLONE_TIMING +#define CYC 8 +#else +#define CYC 6 +#endif + u32 adr, res; + u32 src, dst; + + u32 sft; + + sft = DREG((Opcode >> 9) & 7) & 0x3F; + src = DREGu32((Opcode >> 0) & 7); + if (sft) + { + m68kcontext.io_cycle_counter -= sft * 2; + if (sft < 32) + { + flag_X = flag_C = (src >> (32 - sft)) << M68K_SR_C_SFT; + res = src << sft; + flag_N = res >> 24; + flag_NotZ = res; + DREGu32((Opcode >> 0) & 7) = res; + flag_V = 0; + { + u32 msk = (((s32)0x80000000) >> (sft + 0)) & 0xFFFFFFFF; + src &= msk; + if ((src) && (src != msk)) flag_V = M68K_SR_V; + } + RET(CYC) + } + + if (sft == 0) flag_C = src << M68K_SR_C_SFT; + else flag_C = 0; + flag_X = flag_C; + if (src) flag_V = M68K_SR_V; + else flag_V = 0; + res = 0; + DREGu32((Opcode >> 0) & 7) = res; + flag_N = 0; + flag_NotZ = 0; + RET(CYC) + } + + flag_V = 0; + flag_C = 0; + flag_N = src >> 24; + flag_NotZ = src; +RET(CYC) +#undef CYC +} + +// LSLD +OPCODE(0xE128) +{ + u32 adr, res; + u32 src, dst; + + u32 sft; + + sft = DREG((Opcode >> 9) & 7) & 0x3F; + src = DREGu8((Opcode >> 0) & 7); + if (sft) + { + m68kcontext.io_cycle_counter -= sft * 2; + if (sft <= 8) + { + flag_X = flag_C = (src << sft) >> 0; + res = (src << sft) & 0x000000FF; + flag_V = 0; + flag_N = res >> 0; + flag_NotZ = res; + DREGu8((Opcode >> 0) & 7) = res; + RET(6) + } + + flag_X = flag_C = 0; + flag_N = 0; + flag_NotZ = 0; + flag_V = 0; + res = 0; + DREGu8((Opcode >> 0) & 7) = res; + RET(6) + } + + flag_V = 0; + flag_C = 0; + flag_N = src >> 0; + flag_NotZ = src; +RET(6) +} + +// LSLD +OPCODE(0xE168) +{ + u32 adr, res; + u32 src, dst; + + u32 sft; + + sft = DREG((Opcode >> 9) & 7) & 0x3F; + src = DREGu16((Opcode >> 0) & 7); + if (sft) + { + m68kcontext.io_cycle_counter -= sft * 2; + if (sft <= 16) + { + flag_X = flag_C = (src << sft) >> 8; + res = (src << sft) & 0x0000FFFF; + flag_V = 0; + flag_N = res >> 8; + flag_NotZ = res; + DREGu16((Opcode >> 0) & 7) = res; + RET(6) + } + + flag_X = flag_C = 0; + flag_N = 0; + flag_NotZ = 0; + flag_V = 0; + res = 0; + DREGu16((Opcode >> 0) & 7) = res; + RET(6) + } + + flag_V = 0; + flag_C = 0; + flag_N = src >> 8; + flag_NotZ = src; +RET(6) +} + +// LSLD +OPCODE(0xE1A8) +{ +#ifdef USE_CYCLONE_TIMING +#define CYC 8 +#else +#define CYC 6 +#endif + u32 adr, res; + u32 src, dst; + + u32 sft; + + sft = DREG((Opcode >> 9) & 7) & 0x3F; + src = DREGu32((Opcode >> 0) & 7); + if (sft) + { + m68kcontext.io_cycle_counter -= sft * 2; + if (sft < 32) + { + flag_X = flag_C = (src >> (32 - sft)) << M68K_SR_C_SFT; + res = src << sft; + flag_V = 0; + flag_N = res >> 24; + flag_NotZ = res; + DREGu32((Opcode >> 0) & 7) = res; + RET(CYC) + } + + if (sft == 32) flag_C = src << M68K_SR_C_SFT; + else flag_C = 0; + flag_X = flag_C; + flag_N = 0; + flag_NotZ = 0; + flag_V = 0; + res = 0; + DREGu32((Opcode >> 0) & 7) = res; + RET(CYC) + } + + flag_V = 0; + flag_C = 0; + flag_N = src >> 24; + flag_NotZ = src; +RET(CYC) +#undef CYC +} + +// ROXLD +OPCODE(0xE130) +{ + u32 adr, res; + u32 src, dst; + + u32 sft; + + sft = DREG((Opcode >> 9) & 7) & 0x3F; + src = DREGu8((Opcode >> 0) & 7); + if (sft) + { + m68kcontext.io_cycle_counter -= sft * 2; + sft %= 9; + + src |= (flag_X & M68K_SR_X) << 0; + res = (src << sft) | (src >> (9 - sft)); + flag_X = flag_C = res >> 0; + flag_V = 0; + flag_N = res >> 0; + flag_NotZ = res & 0x000000FF; + DREGu8((Opcode >> 0) & 7) = res; + RET(6) + } + + flag_V = 0; + flag_C = flag_X; + flag_N = src >> 0; + flag_NotZ = src; +RET(6) +} + +// ROXLD +OPCODE(0xE170) +{ + u32 adr, res; + u32 src, dst; + + u32 sft; + + sft = DREG((Opcode >> 9) & 7) & 0x3F; + src = DREGu16((Opcode >> 0) & 7); + if (sft) + { + m68kcontext.io_cycle_counter -= sft * 2; + sft %= 17; + + src |= (flag_X & M68K_SR_X) << 8; + res = (src << sft) | (src >> (17 - sft)); + flag_X = flag_C = res >> 8; + flag_V = 0; + flag_N = res >> 8; + flag_NotZ = res & 0x0000FFFF; + DREGu16((Opcode >> 0) & 7) = res; + RET(6) + } + + flag_V = 0; + flag_C = flag_X; + flag_N = src >> 8; + flag_NotZ = src; +RET(6) +} + +// ROXLD +OPCODE(0xE1B0) +{ +#ifdef USE_CYCLONE_TIMING +#define CYC 8 +#else +#define CYC 6 +#endif + u32 adr, res; + u32 src, dst; + + u32 sft; + + sft = DREG((Opcode >> 9) & 7) & 0x3F; + src = DREGu32((Opcode >> 0) & 7); + if (sft) + { + m68kcontext.io_cycle_counter -= sft * 2; + sft %= 33; + + if (sft != 0) + { + if (sft == 1) res = (src << 1) | ((flag_X >> ((M68K_SR_X_SFT + 1) - 1)) & 1); + else res = (src << sft) | (src >> (33 - sft)) | (((flag_X >> ((M68K_SR_X_SFT + 1) - 1)) & 1) << (sft - 1)); + flag_X = (src >> (32 - sft)) << M68K_SR_X_SFT; + } + else res = src; + flag_C = flag_X; + flag_V = 0; + flag_N = res >> 24; + flag_NotZ = res; + DREGu32((Opcode >> 0) & 7) = res; + RET(CYC) + } + + flag_V = 0; + flag_C = flag_X; + flag_N = src >> 24; + flag_NotZ = src; +RET(CYC) +#undef CYC +} + +// ROLD +OPCODE(0xE138) +{ + u32 adr, res; + u32 src, dst; + + u32 sft; + + sft = DREG((Opcode >> 9) & 7) & 0x3F; + src = DREGu8((Opcode >> 0) & 7); + if (sft) + { + m68kcontext.io_cycle_counter -= sft * 2; + if (sft &= 0x07) + { + flag_C = (src << sft) >> 0; + res = ((src << sft) | (src >> (8 - sft))) & 0x000000FF; + flag_V = 0; + flag_N = res >> 0; + flag_NotZ = res; + DREGu8((Opcode >> 0) & 7) = res; + RET(6) + } + + flag_V = 0; + flag_C = src << M68K_SR_C_SFT; + flag_N = src >> 0; + flag_NotZ = src; + RET(6) + } + + flag_V = 0; + flag_C = 0; + flag_N = src >> 0; + flag_NotZ = src; +RET(6) +} + +// ROLD +OPCODE(0xE178) +{ + u32 adr, res; + u32 src, dst; + + u32 sft; + + sft = DREG((Opcode >> 9) & 7) & 0x3F; + src = DREGu16((Opcode >> 0) & 7); + if (sft) + { + m68kcontext.io_cycle_counter -= sft * 2; + if (sft &= 0x0F) + { + flag_C = (src << sft) >> 8; + res = ((src << sft) | (src >> (16 - sft))) & 0x0000FFFF; + flag_V = 0; + flag_N = res >> 8; + flag_NotZ = res; + DREGu16((Opcode >> 0) & 7) = res; + RET(6) + } + + flag_V = 0; + flag_C = src << M68K_SR_C_SFT; + flag_N = src >> 8; + flag_NotZ = src; + RET(6) + } + + flag_V = 0; + flag_C = 0; + flag_N = src >> 8; + flag_NotZ = src; +RET(6) +} + +// ROLD +OPCODE(0xE1B8) +{ +#ifdef USE_CYCLONE_TIMING +#define CYC 8 +#else +#define CYC 6 +#endif + u32 adr, res; + u32 src, dst; + + u32 sft; + + sft = DREG((Opcode >> 9) & 7) & 0x3F; + src = DREGu32((Opcode >> 0) & 7); + if (sft) + { + m68kcontext.io_cycle_counter -= sft * 2; + if (sft &= 0x1F) + { + flag_C = (src >> (32 - sft)) << M68K_SR_C_SFT; + res = (src << sft) | (src >> (32 - sft)); + flag_V = 0; + flag_N = res >> 24; + flag_NotZ = res; + DREGu32((Opcode >> 0) & 7) = res; + RET(CYC) + } + + flag_V = 0; + flag_C = src << M68K_SR_C_SFT; + flag_N = src >> 24; + flag_NotZ = src; + RET(CYC) + } + + flag_V = 0; + flag_C = 0; + flag_N = src >> 24; + flag_NotZ = src; +RET(CYC) +#undef CYC +} + +// ASR +OPCODE(0xE0D0) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + PRE_IO + READ_WORD_F(adr, src) + flag_V = 0; + flag_X = flag_C = src << M68K_SR_C_SFT; + res = (src >> 1) | (src & (1 << 15)); + flag_N = res >> 8; + flag_NotZ = res; + WRITE_WORD_F(adr, res) + POST_IO +RET(12) +} + +// ASR +OPCODE(0xE0D8) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + AREG((Opcode >> 0) & 7) += 2; + PRE_IO + READ_WORD_F(adr, src) + flag_V = 0; + flag_X = flag_C = src << M68K_SR_C_SFT; + res = (src >> 1) | (src & (1 << 15)); + flag_N = res >> 8; + flag_NotZ = res; + WRITE_WORD_F(adr, res) + POST_IO +RET(12) +} + +// ASR +OPCODE(0xE0E0) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7) - 2; + AREG((Opcode >> 0) & 7) = adr; + PRE_IO + READ_WORD_F(adr, src) + flag_V = 0; + flag_X = flag_C = src << M68K_SR_C_SFT; + res = (src >> 1) | (src & (1 << 15)); + flag_N = res >> 8; + flag_NotZ = res; + WRITE_WORD_F(adr, res) + POST_IO +RET(14) +} + +// ASR +OPCODE(0xE0E8) +{ + u32 adr, res; + u32 src, dst; + + FETCH_SWORD(adr); + adr += AREG((Opcode >> 0) & 7); + PRE_IO + READ_WORD_F(adr, src) + flag_V = 0; + flag_X = flag_C = src << M68K_SR_C_SFT; + res = (src >> 1) | (src & (1 << 15)); + flag_N = res >> 8; + flag_NotZ = res; + WRITE_WORD_F(adr, res) + POST_IO +RET(16) +} + +// ASR +OPCODE(0xE0F0) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + DECODE_EXT_WORD + PRE_IO + READ_WORD_F(adr, src) + flag_V = 0; + flag_X = flag_C = src << M68K_SR_C_SFT; + res = (src >> 1) | (src & (1 << 15)); + flag_N = res >> 8; + flag_NotZ = res; + WRITE_WORD_F(adr, res) + POST_IO +RET(18) +} + +// ASR +OPCODE(0xE0F8) +{ + u32 adr, res; + u32 src, dst; + + FETCH_SWORD(adr); + PRE_IO + READ_WORD_F(adr, src) + flag_V = 0; + flag_X = flag_C = src << M68K_SR_C_SFT; + res = (src >> 1) | (src & (1 << 15)); + flag_N = res >> 8; + flag_NotZ = res; + WRITE_WORD_F(adr, res) + POST_IO +RET(16) +} + +// ASR +OPCODE(0xE0F9) +{ + u32 adr, res; + u32 src, dst; + + FETCH_LONG(adr); + PRE_IO + READ_WORD_F(adr, src) + flag_V = 0; + flag_X = flag_C = src << M68K_SR_C_SFT; + res = (src >> 1) | (src & (1 << 15)); + flag_N = res >> 8; + flag_NotZ = res; + WRITE_WORD_F(adr, res) + POST_IO +RET(20) +} + +// ASR +OPCODE(0xE0DF) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7); + AREG(7) += 2; + PRE_IO + READ_WORD_F(adr, src) + flag_V = 0; + flag_X = flag_C = src << M68K_SR_C_SFT; + res = (src >> 1) | (src & (1 << 15)); + flag_N = res >> 8; + flag_NotZ = res; + WRITE_WORD_F(adr, res) + POST_IO +RET(12) +} + +// ASR +OPCODE(0xE0E7) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7) - 2; + AREG(7) = adr; + PRE_IO + READ_WORD_F(adr, src) + flag_V = 0; + flag_X = flag_C = src << M68K_SR_C_SFT; + res = (src >> 1) | (src & (1 << 15)); + flag_N = res >> 8; + flag_NotZ = res; + WRITE_WORD_F(adr, res) + POST_IO +RET(14) +} + +// LSR +OPCODE(0xE2D0) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + PRE_IO + READ_WORD_F(adr, src) + flag_N = flag_V = 0; + flag_X = flag_C = src << M68K_SR_C_SFT; + res = src >> 1; + flag_NotZ = res; + WRITE_WORD_F(adr, res) + POST_IO +RET(12) +} + +// LSR +OPCODE(0xE2D8) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + AREG((Opcode >> 0) & 7) += 2; + PRE_IO + READ_WORD_F(adr, src) + flag_N = flag_V = 0; + flag_X = flag_C = src << M68K_SR_C_SFT; + res = src >> 1; + flag_NotZ = res; + WRITE_WORD_F(adr, res) + POST_IO +RET(12) +} + +// LSR +OPCODE(0xE2E0) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7) - 2; + AREG((Opcode >> 0) & 7) = adr; + PRE_IO + READ_WORD_F(adr, src) + flag_N = flag_V = 0; + flag_X = flag_C = src << M68K_SR_C_SFT; + res = src >> 1; + flag_NotZ = res; + WRITE_WORD_F(adr, res) + POST_IO +RET(14) +} + +// LSR +OPCODE(0xE2E8) +{ + u32 adr, res; + u32 src, dst; + + FETCH_SWORD(adr); + adr += AREG((Opcode >> 0) & 7); + PRE_IO + READ_WORD_F(adr, src) + flag_N = flag_V = 0; + flag_X = flag_C = src << M68K_SR_C_SFT; + res = src >> 1; + flag_NotZ = res; + WRITE_WORD_F(adr, res) + POST_IO +RET(16) +} + +// LSR +OPCODE(0xE2F0) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + DECODE_EXT_WORD + PRE_IO + READ_WORD_F(adr, src) + flag_N = flag_V = 0; + flag_X = flag_C = src << M68K_SR_C_SFT; + res = src >> 1; + flag_NotZ = res; + WRITE_WORD_F(adr, res) + POST_IO +RET(18) +} + +// LSR +OPCODE(0xE2F8) +{ + u32 adr, res; + u32 src, dst; + + FETCH_SWORD(adr); + PRE_IO + READ_WORD_F(adr, src) + flag_N = flag_V = 0; + flag_X = flag_C = src << M68K_SR_C_SFT; + res = src >> 1; + flag_NotZ = res; + WRITE_WORD_F(adr, res) + POST_IO +RET(16) +} + +// LSR +OPCODE(0xE2F9) +{ + u32 adr, res; + u32 src, dst; + + FETCH_LONG(adr); + PRE_IO + READ_WORD_F(adr, src) + flag_N = flag_V = 0; + flag_X = flag_C = src << M68K_SR_C_SFT; + res = src >> 1; + flag_NotZ = res; + WRITE_WORD_F(adr, res) + POST_IO +RET(20) +} + +// LSR +OPCODE(0xE2DF) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7); + AREG(7) += 2; + PRE_IO + READ_WORD_F(adr, src) + flag_N = flag_V = 0; + flag_X = flag_C = src << M68K_SR_C_SFT; + res = src >> 1; + flag_NotZ = res; + WRITE_WORD_F(adr, res) + POST_IO +RET(12) +} + +// LSR +OPCODE(0xE2E7) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7) - 2; + AREG(7) = adr; + PRE_IO + READ_WORD_F(adr, src) + flag_N = flag_V = 0; + flag_X = flag_C = src << M68K_SR_C_SFT; + res = src >> 1; + flag_NotZ = res; + WRITE_WORD_F(adr, res) + POST_IO +RET(14) +} + +// ROXR +OPCODE(0xE4D0) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + PRE_IO + READ_WORD_F(adr, src) + flag_V = 0; + res = (src >> 1) | ((flag_X & M68K_SR_X) << 7); + flag_C = flag_X = src << M68K_SR_C_SFT; + flag_N = res >> 8; + flag_NotZ = res; + WRITE_WORD_F(adr, res) + POST_IO +RET(12) +} + +// ROXR +OPCODE(0xE4D8) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + AREG((Opcode >> 0) & 7) += 2; + PRE_IO + READ_WORD_F(adr, src) + flag_V = 0; + res = (src >> 1) | ((flag_X & M68K_SR_X) << 7); + flag_C = flag_X = src << M68K_SR_C_SFT; + flag_N = res >> 8; + flag_NotZ = res; + WRITE_WORD_F(adr, res) + POST_IO +RET(12) +} + +// ROXR +OPCODE(0xE4E0) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7) - 2; + AREG((Opcode >> 0) & 7) = adr; + PRE_IO + READ_WORD_F(adr, src) + flag_V = 0; + res = (src >> 1) | ((flag_X & M68K_SR_X) << 7); + flag_C = flag_X = src << M68K_SR_C_SFT; + flag_N = res >> 8; + flag_NotZ = res; + WRITE_WORD_F(adr, res) + POST_IO +RET(14) +} + +// ROXR +OPCODE(0xE4E8) +{ + u32 adr, res; + u32 src, dst; + + FETCH_SWORD(adr); + adr += AREG((Opcode >> 0) & 7); + PRE_IO + READ_WORD_F(adr, src) + flag_V = 0; + res = (src >> 1) | ((flag_X & M68K_SR_X) << 7); + flag_C = flag_X = src << M68K_SR_C_SFT; + flag_N = res >> 8; + flag_NotZ = res; + WRITE_WORD_F(adr, res) + POST_IO +RET(16) +} + +// ROXR +OPCODE(0xE4F0) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + DECODE_EXT_WORD + PRE_IO + READ_WORD_F(adr, src) + flag_V = 0; + res = (src >> 1) | ((flag_X & M68K_SR_X) << 7); + flag_C = flag_X = src << M68K_SR_C_SFT; + flag_N = res >> 8; + flag_NotZ = res; + WRITE_WORD_F(adr, res) + POST_IO +RET(18) +} + +// ROXR +OPCODE(0xE4F8) +{ + u32 adr, res; + u32 src, dst; + + FETCH_SWORD(adr); + PRE_IO + READ_WORD_F(adr, src) + flag_V = 0; + res = (src >> 1) | ((flag_X & M68K_SR_X) << 7); + flag_C = flag_X = src << M68K_SR_C_SFT; + flag_N = res >> 8; + flag_NotZ = res; + WRITE_WORD_F(adr, res) + POST_IO +RET(16) +} + +// ROXR +OPCODE(0xE4F9) +{ + u32 adr, res; + u32 src, dst; + + FETCH_LONG(adr); + PRE_IO + READ_WORD_F(adr, src) + flag_V = 0; + res = (src >> 1) | ((flag_X & M68K_SR_X) << 7); + flag_C = flag_X = src << M68K_SR_C_SFT; + flag_N = res >> 8; + flag_NotZ = res; + WRITE_WORD_F(adr, res) + POST_IO +RET(20) +} + +// ROXR +OPCODE(0xE4DF) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7); + AREG(7) += 2; + PRE_IO + READ_WORD_F(adr, src) + flag_V = 0; + res = (src >> 1) | ((flag_X & M68K_SR_X) << 7); + flag_C = flag_X = src << M68K_SR_C_SFT; + flag_N = res >> 8; + flag_NotZ = res; + WRITE_WORD_F(adr, res) + POST_IO +RET(12) +} + +// ROXR +OPCODE(0xE4E7) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7) - 2; + AREG(7) = adr; + PRE_IO + READ_WORD_F(adr, src) + flag_V = 0; + res = (src >> 1) | ((flag_X & M68K_SR_X) << 7); + flag_C = flag_X = src << M68K_SR_C_SFT; + flag_N = res >> 8; + flag_NotZ = res; + WRITE_WORD_F(adr, res) + POST_IO +RET(14) +} + +// ROR +OPCODE(0xE6D0) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + PRE_IO + READ_WORD_F(adr, src) + flag_V = 0; + flag_C = src << M68K_SR_C_SFT; + res = (src >> 1) | (src << 15); + flag_N = res >> 8; + flag_NotZ = res & 0x0000FFFF; + WRITE_WORD_F(adr, res) + POST_IO +RET(12) +} + +// ROR +OPCODE(0xE6D8) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + AREG((Opcode >> 0) & 7) += 2; + PRE_IO + READ_WORD_F(adr, src) + flag_V = 0; + flag_C = src << M68K_SR_C_SFT; + res = (src >> 1) | (src << 15); + flag_N = res >> 8; + flag_NotZ = res & 0x0000FFFF; + WRITE_WORD_F(adr, res) + POST_IO +RET(12) +} + +// ROR +OPCODE(0xE6E0) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7) - 2; + AREG((Opcode >> 0) & 7) = adr; + PRE_IO + READ_WORD_F(adr, src) + flag_V = 0; + flag_C = src << M68K_SR_C_SFT; + res = (src >> 1) | (src << 15); + flag_N = res >> 8; + flag_NotZ = res & 0x0000FFFF; + WRITE_WORD_F(adr, res) + POST_IO +RET(14) +} + +// ROR +OPCODE(0xE6E8) +{ + u32 adr, res; + u32 src, dst; + + FETCH_SWORD(adr); + adr += AREG((Opcode >> 0) & 7); + PRE_IO + READ_WORD_F(adr, src) + flag_V = 0; + flag_C = src << M68K_SR_C_SFT; + res = (src >> 1) | (src << 15); + flag_N = res >> 8; + flag_NotZ = res & 0x0000FFFF; + WRITE_WORD_F(adr, res) + POST_IO +RET(16) +} + +// ROR +OPCODE(0xE6F0) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + DECODE_EXT_WORD + PRE_IO + READ_WORD_F(adr, src) + flag_V = 0; + flag_C = src << M68K_SR_C_SFT; + res = (src >> 1) | (src << 15); + flag_N = res >> 8; + flag_NotZ = res & 0x0000FFFF; + WRITE_WORD_F(adr, res) + POST_IO +RET(18) +} + +// ROR +OPCODE(0xE6F8) +{ + u32 adr, res; + u32 src, dst; + + FETCH_SWORD(adr); + PRE_IO + READ_WORD_F(adr, src) + flag_V = 0; + flag_C = src << M68K_SR_C_SFT; + res = (src >> 1) | (src << 15); + flag_N = res >> 8; + flag_NotZ = res & 0x0000FFFF; + WRITE_WORD_F(adr, res) + POST_IO +RET(16) +} + +// ROR +OPCODE(0xE6F9) +{ + u32 adr, res; + u32 src, dst; + + FETCH_LONG(adr); + PRE_IO + READ_WORD_F(adr, src) + flag_V = 0; + flag_C = src << M68K_SR_C_SFT; + res = (src >> 1) | (src << 15); + flag_N = res >> 8; + flag_NotZ = res & 0x0000FFFF; + WRITE_WORD_F(adr, res) + POST_IO +RET(20) +} + +// ROR +OPCODE(0xE6DF) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7); + AREG(7) += 2; + PRE_IO + READ_WORD_F(adr, src) + flag_V = 0; + flag_C = src << M68K_SR_C_SFT; + res = (src >> 1) | (src << 15); + flag_N = res >> 8; + flag_NotZ = res & 0x0000FFFF; + WRITE_WORD_F(adr, res) + POST_IO +RET(12) +} + +// ROR +OPCODE(0xE6E7) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7) - 2; + AREG(7) = adr; + PRE_IO + READ_WORD_F(adr, src) + flag_V = 0; + flag_C = src << M68K_SR_C_SFT; + res = (src >> 1) | (src << 15); + flag_N = res >> 8; + flag_NotZ = res & 0x0000FFFF; + WRITE_WORD_F(adr, res) + POST_IO +RET(14) +} + +// ASL +OPCODE(0xE1D0) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + PRE_IO + READ_WORD_F(adr, src) + flag_X = flag_C = src >> 7; + res = src << 1; + flag_V = (src ^ res) >> 8; + flag_N = res >> 8; + flag_NotZ = res & 0x0000FFFF; + WRITE_WORD_F(adr, res) + POST_IO +RET(12) +} + +// ASL +OPCODE(0xE1D8) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + AREG((Opcode >> 0) & 7) += 2; + PRE_IO + READ_WORD_F(adr, src) + flag_X = flag_C = src >> 7; + res = src << 1; + flag_V = (src ^ res) >> 8; + flag_N = res >> 8; + flag_NotZ = res & 0x0000FFFF; + WRITE_WORD_F(adr, res) + POST_IO +RET(12) +} + +// ASL +OPCODE(0xE1E0) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7) - 2; + AREG((Opcode >> 0) & 7) = adr; + PRE_IO + READ_WORD_F(adr, src) + flag_X = flag_C = src >> 7; + res = src << 1; + flag_V = (src ^ res) >> 8; + flag_N = res >> 8; + flag_NotZ = res & 0x0000FFFF; + WRITE_WORD_F(adr, res) + POST_IO +RET(14) +} + +// ASL +OPCODE(0xE1E8) +{ + u32 adr, res; + u32 src, dst; + + FETCH_SWORD(adr); + adr += AREG((Opcode >> 0) & 7); + PRE_IO + READ_WORD_F(adr, src) + flag_X = flag_C = src >> 7; + res = src << 1; + flag_V = (src ^ res) >> 8; + flag_N = res >> 8; + flag_NotZ = res & 0x0000FFFF; + WRITE_WORD_F(adr, res) + POST_IO +RET(16) +} + +// ASL +OPCODE(0xE1F0) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + DECODE_EXT_WORD + PRE_IO + READ_WORD_F(adr, src) + flag_X = flag_C = src >> 7; + res = src << 1; + flag_V = (src ^ res) >> 8; + flag_N = res >> 8; + flag_NotZ = res & 0x0000FFFF; + WRITE_WORD_F(adr, res) + POST_IO +RET(18) +} + +// ASL +OPCODE(0xE1F8) +{ + u32 adr, res; + u32 src, dst; + + FETCH_SWORD(adr); + PRE_IO + READ_WORD_F(adr, src) + flag_X = flag_C = src >> 7; + res = src << 1; + flag_V = (src ^ res) >> 8; + flag_N = res >> 8; + flag_NotZ = res & 0x0000FFFF; + WRITE_WORD_F(adr, res) + POST_IO +RET(16) +} + +// ASL +OPCODE(0xE1F9) +{ + u32 adr, res; + u32 src, dst; + + FETCH_LONG(adr); + PRE_IO + READ_WORD_F(adr, src) + flag_X = flag_C = src >> 7; + res = src << 1; + flag_V = (src ^ res) >> 8; + flag_N = res >> 8; + flag_NotZ = res & 0x0000FFFF; + WRITE_WORD_F(adr, res) + POST_IO +RET(20) +} + +// ASL +OPCODE(0xE1DF) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7); + AREG(7) += 2; + PRE_IO + READ_WORD_F(adr, src) + flag_X = flag_C = src >> 7; + res = src << 1; + flag_V = (src ^ res) >> 8; + flag_N = res >> 8; + flag_NotZ = res & 0x0000FFFF; + WRITE_WORD_F(adr, res) + POST_IO +RET(12) +} + +// ASL +OPCODE(0xE1E7) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7) - 2; + AREG(7) = adr; + PRE_IO + READ_WORD_F(adr, src) + flag_X = flag_C = src >> 7; + res = src << 1; + flag_V = (src ^ res) >> 8; + flag_N = res >> 8; + flag_NotZ = res & 0x0000FFFF; + WRITE_WORD_F(adr, res) + POST_IO +RET(14) +} + +// LSL +OPCODE(0xE3D0) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + PRE_IO + READ_WORD_F(adr, src) + flag_V = 0; + flag_X = flag_C = src >> 7; + res = src << 1; + flag_N = res >> 8; + flag_NotZ = res & 0x0000FFFF; + WRITE_WORD_F(adr, res) + POST_IO +RET(12) +} + +// LSL +OPCODE(0xE3D8) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + AREG((Opcode >> 0) & 7) += 2; + PRE_IO + READ_WORD_F(adr, src) + flag_V = 0; + flag_X = flag_C = src >> 7; + res = src << 1; + flag_N = res >> 8; + flag_NotZ = res & 0x0000FFFF; + WRITE_WORD_F(adr, res) + POST_IO +RET(12) +} + +// LSL +OPCODE(0xE3E0) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7) - 2; + AREG((Opcode >> 0) & 7) = adr; + PRE_IO + READ_WORD_F(adr, src) + flag_V = 0; + flag_X = flag_C = src >> 7; + res = src << 1; + flag_N = res >> 8; + flag_NotZ = res & 0x0000FFFF; + WRITE_WORD_F(adr, res) + POST_IO +RET(14) +} + +// LSL +OPCODE(0xE3E8) +{ + u32 adr, res; + u32 src, dst; + + FETCH_SWORD(adr); + adr += AREG((Opcode >> 0) & 7); + PRE_IO + READ_WORD_F(adr, src) + flag_V = 0; + flag_X = flag_C = src >> 7; + res = src << 1; + flag_N = res >> 8; + flag_NotZ = res & 0x0000FFFF; + WRITE_WORD_F(adr, res) + POST_IO +RET(16) +} + +// LSL +OPCODE(0xE3F0) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + DECODE_EXT_WORD + PRE_IO + READ_WORD_F(adr, src) + flag_V = 0; + flag_X = flag_C = src >> 7; + res = src << 1; + flag_N = res >> 8; + flag_NotZ = res & 0x0000FFFF; + WRITE_WORD_F(adr, res) + POST_IO +RET(18) +} + +// LSL +OPCODE(0xE3F8) +{ + u32 adr, res; + u32 src, dst; + + FETCH_SWORD(adr); + PRE_IO + READ_WORD_F(adr, src) + flag_V = 0; + flag_X = flag_C = src >> 7; + res = src << 1; + flag_N = res >> 8; + flag_NotZ = res & 0x0000FFFF; + WRITE_WORD_F(adr, res) + POST_IO +RET(16) +} + +// LSL +OPCODE(0xE3F9) +{ + u32 adr, res; + u32 src, dst; + + FETCH_LONG(adr); + PRE_IO + READ_WORD_F(adr, src) + flag_V = 0; + flag_X = flag_C = src >> 7; + res = src << 1; + flag_N = res >> 8; + flag_NotZ = res & 0x0000FFFF; + WRITE_WORD_F(adr, res) + POST_IO +RET(20) +} + +// LSL +OPCODE(0xE3DF) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7); + AREG(7) += 2; + PRE_IO + READ_WORD_F(adr, src) + flag_V = 0; + flag_X = flag_C = src >> 7; + res = src << 1; + flag_N = res >> 8; + flag_NotZ = res & 0x0000FFFF; + WRITE_WORD_F(adr, res) + POST_IO +RET(12) +} + +// LSL +OPCODE(0xE3E7) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7) - 2; + AREG(7) = adr; + PRE_IO + READ_WORD_F(adr, src) + flag_V = 0; + flag_X = flag_C = src >> 7; + res = src << 1; + flag_N = res >> 8; + flag_NotZ = res & 0x0000FFFF; + WRITE_WORD_F(adr, res) + POST_IO +RET(14) +} + +// ROXL +OPCODE(0xE5D0) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + PRE_IO + READ_WORD_F(adr, src) + flag_V = 0; + res = (src << 1) | ((flag_X & M68K_SR_X) >> 8); + flag_X = flag_C = src >> 7; + flag_N = res >> 8; + flag_NotZ = res & 0x0000FFFF; + WRITE_WORD_F(adr, res) + POST_IO +RET(12) +} + +// ROXL +OPCODE(0xE5D8) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + AREG((Opcode >> 0) & 7) += 2; + PRE_IO + READ_WORD_F(adr, src) + flag_V = 0; + res = (src << 1) | ((flag_X & M68K_SR_X) >> 8); + flag_X = flag_C = src >> 7; + flag_N = res >> 8; + flag_NotZ = res & 0x0000FFFF; + WRITE_WORD_F(adr, res) + POST_IO +RET(12) +} + +// ROXL +OPCODE(0xE5E0) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7) - 2; + AREG((Opcode >> 0) & 7) = adr; + PRE_IO + READ_WORD_F(adr, src) + flag_V = 0; + res = (src << 1) | ((flag_X & M68K_SR_X) >> 8); + flag_X = flag_C = src >> 7; + flag_N = res >> 8; + flag_NotZ = res & 0x0000FFFF; + WRITE_WORD_F(adr, res) + POST_IO +RET(14) +} + +// ROXL +OPCODE(0xE5E8) +{ + u32 adr, res; + u32 src, dst; + + FETCH_SWORD(adr); + adr += AREG((Opcode >> 0) & 7); + PRE_IO + READ_WORD_F(adr, src) + flag_V = 0; + res = (src << 1) | ((flag_X & M68K_SR_X) >> 8); + flag_X = flag_C = src >> 7; + flag_N = res >> 8; + flag_NotZ = res & 0x0000FFFF; + WRITE_WORD_F(adr, res) + POST_IO +RET(16) +} + +// ROXL +OPCODE(0xE5F0) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + DECODE_EXT_WORD + PRE_IO + READ_WORD_F(adr, src) + flag_V = 0; + res = (src << 1) | ((flag_X & M68K_SR_X) >> 8); + flag_X = flag_C = src >> 7; + flag_N = res >> 8; + flag_NotZ = res & 0x0000FFFF; + WRITE_WORD_F(adr, res) + POST_IO +RET(18) +} + +// ROXL +OPCODE(0xE5F8) +{ + u32 adr, res; + u32 src, dst; + + FETCH_SWORD(adr); + PRE_IO + READ_WORD_F(adr, src) + flag_V = 0; + res = (src << 1) | ((flag_X & M68K_SR_X) >> 8); + flag_X = flag_C = src >> 7; + flag_N = res >> 8; + flag_NotZ = res & 0x0000FFFF; + WRITE_WORD_F(adr, res) + POST_IO +RET(16) +} + +// ROXL +OPCODE(0xE5F9) +{ + u32 adr, res; + u32 src, dst; + + FETCH_LONG(adr); + PRE_IO + READ_WORD_F(adr, src) + flag_V = 0; + res = (src << 1) | ((flag_X & M68K_SR_X) >> 8); + flag_X = flag_C = src >> 7; + flag_N = res >> 8; + flag_NotZ = res & 0x0000FFFF; + WRITE_WORD_F(adr, res) + POST_IO +RET(20) +} + +// ROXL +OPCODE(0xE5DF) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7); + AREG(7) += 2; + PRE_IO + READ_WORD_F(adr, src) + flag_V = 0; + res = (src << 1) | ((flag_X & M68K_SR_X) >> 8); + flag_X = flag_C = src >> 7; + flag_N = res >> 8; + flag_NotZ = res & 0x0000FFFF; + WRITE_WORD_F(adr, res) + POST_IO +RET(12) +} + +// ROXL +OPCODE(0xE5E7) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7) - 2; + AREG(7) = adr; + PRE_IO + READ_WORD_F(adr, src) + flag_V = 0; + res = (src << 1) | ((flag_X & M68K_SR_X) >> 8); + flag_X = flag_C = src >> 7; + flag_N = res >> 8; + flag_NotZ = res & 0x0000FFFF; + WRITE_WORD_F(adr, res) + POST_IO +RET(14) +} + +// ROL +OPCODE(0xE7D0) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + PRE_IO + READ_WORD_F(adr, src) + flag_V = 0; + flag_C = src >> 7; + res = (src << 1) | (src >> 15); + flag_N = res >> 8; + flag_NotZ = res & 0x0000FFFF; + WRITE_WORD_F(adr, res) + POST_IO +RET(12) +} + +// ROL +OPCODE(0xE7D8) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + AREG((Opcode >> 0) & 7) += 2; + PRE_IO + READ_WORD_F(adr, src) + flag_V = 0; + flag_C = src >> 7; + res = (src << 1) | (src >> 15); + flag_N = res >> 8; + flag_NotZ = res & 0x0000FFFF; + WRITE_WORD_F(adr, res) + POST_IO +RET(12) +} + +// ROL +OPCODE(0xE7E0) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7) - 2; + AREG((Opcode >> 0) & 7) = adr; + PRE_IO + READ_WORD_F(adr, src) + flag_V = 0; + flag_C = src >> 7; + res = (src << 1) | (src >> 15); + flag_N = res >> 8; + flag_NotZ = res & 0x0000FFFF; + WRITE_WORD_F(adr, res) + POST_IO +RET(14) +} + +// ROL +OPCODE(0xE7E8) +{ + u32 adr, res; + u32 src, dst; + + FETCH_SWORD(adr); + adr += AREG((Opcode >> 0) & 7); + PRE_IO + READ_WORD_F(adr, src) + flag_V = 0; + flag_C = src >> 7; + res = (src << 1) | (src >> 15); + flag_N = res >> 8; + flag_NotZ = res & 0x0000FFFF; + WRITE_WORD_F(adr, res) + POST_IO +RET(16) +} + +// ROL +OPCODE(0xE7F0) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG((Opcode >> 0) & 7); + DECODE_EXT_WORD + PRE_IO + READ_WORD_F(adr, src) + flag_V = 0; + flag_C = src >> 7; + res = (src << 1) | (src >> 15); + flag_N = res >> 8; + flag_NotZ = res & 0x0000FFFF; + WRITE_WORD_F(adr, res) + POST_IO +RET(18) +} + +// ROL +OPCODE(0xE7F8) +{ + u32 adr, res; + u32 src, dst; + + FETCH_SWORD(adr); + PRE_IO + READ_WORD_F(adr, src) + flag_V = 0; + flag_C = src >> 7; + res = (src << 1) | (src >> 15); + flag_N = res >> 8; + flag_NotZ = res & 0x0000FFFF; + WRITE_WORD_F(adr, res) + POST_IO +RET(16) +} + +// ROL +OPCODE(0xE7F9) +{ + u32 adr, res; + u32 src, dst; + + FETCH_LONG(adr); + PRE_IO + READ_WORD_F(adr, src) + flag_V = 0; + flag_C = src >> 7; + res = (src << 1) | (src >> 15); + flag_N = res >> 8; + flag_NotZ = res & 0x0000FFFF; + WRITE_WORD_F(adr, res) + POST_IO +RET(20) +} + +// ROL +OPCODE(0xE7DF) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7); + AREG(7) += 2; + PRE_IO + READ_WORD_F(adr, src) + flag_V = 0; + flag_C = src >> 7; + res = (src << 1) | (src >> 15); + flag_N = res >> 8; + flag_NotZ = res & 0x0000FFFF; + WRITE_WORD_F(adr, res) + POST_IO +RET(12) +} + +// ROL +OPCODE(0xE7E7) +{ + u32 adr, res; + u32 src, dst; + + adr = AREG(7) - 2; + AREG(7) = adr; + PRE_IO + READ_WORD_F(adr, src) + flag_V = 0; + flag_C = src >> 7; + res = (src << 1) | (src >> 15); + flag_N = res >> 8; + flag_NotZ = res & 0x0000FFFF; + WRITE_WORD_F(adr, res) + POST_IO +RET(14) +} + diff --git a/platform/common/lprintf.h b/platform/common/lprintf.h index 1d743236..dc49c655 100644 --- a/platform/common/lprintf.h +++ b/platform/common/lprintf.h @@ -2,7 +2,7 @@ #include #define lprintf printf #elif defined(PSP) - #if 0 + #if 1 #include #define lprintf printf #else diff --git a/platform/linux/Makefile b/platform/linux/Makefile index e3aac31f..6aed56e1 100644 --- a/platform/linux/Makefile +++ b/platform/linux/Makefile @@ -1,6 +1,7 @@ # settings -dprint = 1 +use_fame = 1 + # profile = 1 @@ -46,8 +47,13 @@ OBJS += ../../zlib/gzio.o ../../zlib/inffast.o ../../zlib/inflate.o ../../zlib/i # unzip OBJS += ../../unzip/unzip.o ../../unzip/unzip_stream.o # CPU cores +ifeq "$(use_fame)" "1" +DEFINC += -DEMU_F68K +OBJS += ../../cpu/fame/famec.o +else DEFINC += -DEMU_M68K OBJS += ../../cpu/musashi/m68kops.o ../../cpu/musashi/m68kcpu.o +endif # mz80 DEFINC += -D_USE_MZ80 OBJS += ../../cpu/mz80/mz80.o @@ -95,3 +101,7 @@ PicoDrive : $(OBJS) ../common/helix/helix_mp3_x86.a @echo $@ @$(GCC) $(COPT_COMMON) $(DEFINC) -c $< -o $@ # -mtune=arm940t -DEXTERNAL_YM2612 +../../cpu/fame/famec.o : ../../cpu/fame/famec.c + @echo $< + @$(GCC) $(COPT) $(DEFINC) -Wno-unused -c $< -o $@ + diff --git a/platform/psp/Makefile b/platform/psp/Makefile index 769f3edb..7a0cadae 100644 --- a/platform/psp/Makefile +++ b/platform/psp/Makefile @@ -3,7 +3,7 @@ PSPSDK = $(shell psp-config --pspsdk-path) # settings -use_musashi = 1 +#use_musashi = 1 use_mz80 = 1 amalgamate = 0 #profile = 1 @@ -13,7 +13,7 @@ amalgamate = 0 CFLAGS += -I../.. -I. -D_UNZIP_SUPPORT -DNO_SYNC # -DBENCHMARK CFLAGS += -Wall -Winline ifeq ($(DEBUG),) -CFLAGS += -O2 -G0 -ftracer -fstrength-reduce -fomit-frame-pointer -fstrict-aliasing -ffast-math +CFLAGS += -O2 -G0 -ftracer -fstrength-reduce -ffast-math else CFLAGS += -ggdb endif @@ -37,7 +37,7 @@ OBJS += ../../PicoAll.o else OBJS += ../../Pico/Area.o ../../Pico/Cart.o ../../Pico/Memory.o ../../Pico/Misc.o \ ../../Pico/Pico.o ../../Pico/Sek.o ../../Pico/VideoPort.o ../../Pico/Draw2.o ../../Pico/Draw.o \ - ../../Pico/Patch.o + ../../Pico/Patch.o ../../Pico/Draw_amips.o # Pico - CD OBJS += ../../Pico/cd/Pico.o ../../Pico/cd/Memory.o ../../Pico/cd/Sek.o ../../Pico/cd/LC89510.o \ ../../Pico/cd/cd_sys.o ../../Pico/cd/cd_file.o ../../Pico/cd/gfx_cd.o \ @@ -59,6 +59,9 @@ OBJS += ../../unzip/unzip.o ../../unzip/unzip_stream.o ifeq "$(use_musashi)" "1" CFLAGS += -DEMU_M68K OBJS += ../../cpu/musashi/m68kops.o ../../cpu/musashi/m68kcpu.o +else +CFLAGS += -DEMU_F68K +OBJS += ../../cpu/fame/famec.o endif # z80 ifeq "$(use_mz80)" "1" @@ -69,7 +72,7 @@ $(error nothing here!) endif -LIBS += -lpng -lm -lpspgu # -lpspaudio -lpspgu -lpsppower -lpsphprm -lz -lm -lstdc++ +LIBS += -lpng -lm -lpspgu -lpsppower -Wl,-Map=PicoDrive.map # -lpspaudio -lpsphprm # target TARGET = PicoDrive @@ -82,12 +85,17 @@ CUSTOM_CLEAN = myclean include $(PSPSDK)/lib/build.mak - # some additional rules .c.o: @echo ">>>" $< $(CC) $(CFLAGS) -c $< -o $@ +AS := psp-as + +.s.o: + @echo ">>>" $< + $(AS) -march=allegrex -mtune=allegrex $< -o $@ + ../../cpu/musashi/m68kops.c : make -C ../../cpu/musashi @@ -97,6 +105,9 @@ readme.txt: ../../tools/textfilter ../base_readme.txt ../../tools/textfilter: ../../tools/textfilter.c make -C ../../tools/ textfilter +../../cpu/fame/famec.o : ../../cpu/fame/famec.c + @echo ">>>" $< + $(CC) $(CFLAGS) -Wno-unused -c $< -o $@ # ? up: EBOOT.PBP diff --git a/platform/psp/emu.c b/platform/psp/emu.c index 338ffa44..6c1b0508 100644 --- a/platform/psp/emu.c +++ b/platform/psp/emu.c @@ -3,6 +3,7 @@ #include // PATH_MAX #include +#include #include "psp.h" #include "menu.h" @@ -121,6 +122,7 @@ void emu_setDefaultConfig(void) currentConfig.PicoAutoRgnOrder = 0x184; // US, EU, JP currentConfig.Frameskip = -1; // auto currentConfig.volume = 50; + currentConfig.CPUclock = 222; currentConfig.KeyBinds[ 4] = 1<<0; // SACB RLDU currentConfig.KeyBinds[ 6] = 1<<1; currentConfig.KeyBinds[ 7] = 1<<2; @@ -386,6 +388,9 @@ static void updateKeys(void) int i; keys = psp_pad_read(0); + if (keys & PSP_CTRL_HOME) + sceDisplayWaitVblankStart(); + if (keys & BTN_SELECT) engineState = PGS_Menu; @@ -498,6 +503,13 @@ void emu_Loop(void) fpsbuff[0] = 0; + if (currentConfig.CPUclock != psp_get_cpu_clock()) { + lprintf("setting cpu clock to %iMHz... ", currentConfig.CPUclock); + i = psp_set_cpu_clock(currentConfig.CPUclock); + lprintf(i ? "failed\n" : "done\n"); + currentConfig.CPUclock = psp_get_cpu_clock(); + } + // make sure we are in correct mode vidResetMode(); Pico.m.dirtyPal = 1; diff --git a/platform/psp/menu.c b/platform/psp/menu.c index c878f405..b2b3fc5f 100644 --- a/platform/psp/menu.c +++ b/platform/psp/menu.c @@ -1032,6 +1032,7 @@ menu_entry opt_entries[] = { "Use SRAM/BRAM savestates", MB_ONOFF, MA_OPT_SRAM_STATES, ¤tConfig.EmuOpt, 0x0001, 0, 0, 1 }, { NULL, MB_NONE, MA_OPT_CONFIRM_STATES,NULL, 0, 0, 0, 1 }, { "Save slot", MB_RANGE, MA_OPT_SAVE_SLOT, &state_slot, 0, 0, 9, 1 }, + { NULL, MB_NONE, MA_OPT_CPU_CLOCKS, NULL, 0, 0, 0, 1 }, { "[Sega/Mega CD options]", MB_NONE, MA_OPT_SCD_OPTS, NULL, 0, 0, 0, 1 }, { "[advanced options]", MB_NONE, MA_OPT_ADV_OPTS, NULL, 0, 0, 0, 1 }, { NULL, MB_NONE, MA_OPT_SAVECFG, NULL, 0, 0, 0, 1 }, @@ -1102,6 +1103,9 @@ static void menu_opt_cust_draw(const menu_entry *entry, int x, int y, void *para } text_out16(x, y, "Confirm savestate %s", str); break; + case MA_OPT_CPU_CLOCKS: + text_out16(x, y, "CPU/bus clock %3i/%3iMHz", currentConfig.CPUclock, currentConfig.CPUclock/2); + break; case MA_OPT_SAVECFG: str24[0] = 0; if (config_slot != 0) sprintf(str24, " (profile: %i)", config_slot); @@ -1250,6 +1254,14 @@ static int menu_loop_options(void) } else {state_slot--; if (state_slot < 0) state_slot = 9; } break; + case MA_OPT_CPU_CLOCKS: + while ((inp = psp_pad_read(0)) & (BTN_LEFT|BTN_RIGHT)) { + currentConfig.CPUclock += (inp & BTN_LEFT) ? -1 : 1; + if (currentConfig.CPUclock < 19) currentConfig.CPUclock = 19; + if (currentConfig.CPUclock > 333) currentConfig.CPUclock = 333; + draw_menu_options(menu_sel); // will wait vsync + } + break; case MA_OPT_SAVECFG: case MA_OPT_SAVECFG_GAME: case MA_OPT_LOADCFG: diff --git a/platform/psp/port_config.h b/platform/psp/port_config.h index dcd50326..fe561325 100644 --- a/platform/psp/port_config.h +++ b/platform/psp/port_config.h @@ -6,6 +6,7 @@ #define CPU_CALL // draw.c +#define USE_BGR555 1 #define OVERRIDE_HIGHCOL 0 // draw2.c diff --git a/platform/psp/psp.c b/platform/psp/psp.c index 48e5e63e..e740f215 100644 --- a/platform/psp/psp.c +++ b/platform/psp/psp.c @@ -5,6 +5,7 @@ #include #include #include +#include #include #include "psp.h" @@ -76,7 +77,8 @@ void psp_finish(void) void psp_video_flip(int wait_vsync) { if (wait_vsync) sceDisplayWaitVblankStart(); - sceDisplaySetFrameBuf(psp_screen, 512, PSP_DISPLAY_PIXEL_FORMAT_565, PSP_DISPLAY_SETBUF_NEXTFRAME); + sceDisplaySetFrameBuf(psp_screen, 512, PSP_DISPLAY_PIXEL_FORMAT_565, + wait_vsync ? PSP_DISPLAY_SETBUF_IMMEDIATE : PSP_DISPLAY_SETBUF_NEXTFRAME); current_screen ^= 1; psp_screen = current_screen ? PSP_VRAM_BASE0 : PSP_VRAM_BASE1; } @@ -108,6 +110,19 @@ unsigned int psp_pad_read(int blocking) return pad.Buttons; } +int psp_get_cpu_clock(void) +{ + return scePowerGetCpuClockFrequencyInt(); +} + +int psp_set_cpu_clock(int clock) +{ + int ret = scePowerSetClockFrequency(clock, clock, clock/2); + if (ret != 0) lprintf("failed to set clock: %i\n", ret); + + return ret; +} + /* alt logging */ #define LOG_FILE "log.log" diff --git a/platform/psp/psp.h b/platform/psp/psp.h index e6d04ff1..07d4093c 100644 --- a/platform/psp/psp.h +++ b/platform/psp/psp.h @@ -15,6 +15,8 @@ extern void *psp_screen; unsigned int psp_pad_read(int blocking); +int psp_get_cpu_clock(void); +int psp_set_cpu_clock(int clock); /* shorter btn names */ #define BTN_UP PSP_CTRL_UP diff --git a/platform/psp/skin/background.png b/platform/psp/skin/background.png index cb6a3779fef0186c808f95631f02854dd328bb72..735ab6475870b5436b06bf1d9f5a652aa577a3b4 100644 GIT binary patch literal 76001 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 Hu0mjfN%qk} literal 84002 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%0D&0n^)N%R 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 HXcO^2qn9ob -- 2.39.5