diff --git a/bugs/fixed/cycloneArmv4ModeCrash.txt b/bugs/cycloneArmv4ModeCrash.txt similarity index 100% rename from bugs/fixed/cycloneArmv4ModeCrash.txt rename to bugs/cycloneArmv4ModeCrash.txt diff --git a/bugs/unimplementedHardware.txt b/bugs/unimplementedHardware.txt index 83ff849..239d12a 100644 --- a/bugs/unimplementedHardware.txt +++ b/bugs/unimplementedHardware.txt @@ -27,6 +27,7 @@ UART1 USTCNT1 PLLFSR has a hack that makes busy wait loops finish faster by toggling the CLK32 bit on read, for power button issue should also not transfer data to SD card when MOSI, MISO or SPICLK1 are disabled port d data register INT* bits seem to have there data bits cleared when an edge triggered interrupt is cleared(according to MC68VZ328UM.pdf Page 10-15) +Cyclone will cause SIGSEGVs, don't know why yet(seems to have been caused by compressed jumptable) Memory: SD card can't be read or written to by Palm OS @@ -57,13 +58,11 @@ edge triggered INT* don't clear on write to ISR when masked in IMR(I needed to u PDKBEN also has a hack for power on(its been removed) On hardware PDIRQEG seems not to actually work at all(CPUID:0x57000000)(it does) may need to trigger an interrupt if a IMR masked interrupt becomes unmasked and its bit is still set in IPR(already doing that) -Cyclone will cause SIGSEGVs, don't know why yet(seems to have been caused by compressed jumptable) power button must be pushed twice to turn the CPU back on(when debugging it works the first time, then must be pushed twice to turn off instead of on)(this also occurs in the RetroArch build) the power button double press issue may be because the button map I am using was taken from POSE source, the power button may be mapped to other locations on the button matrix than expected if a sound interrupt is triggered while the button interrupt is disabled the button interrupt will still trigger(in galax game)(seems to be an issue with FIFOAV always = true hack and how INT_PWM1 needed to be cleared on read or write) SED1376 16 bpp mode is broken and crushed to the top of the screen audio can max out the resampler buffer, the max 1 FIFO sample can play is around 2.16 minutes(CLK32 / period(257) / clockDivider(16) / prescaler(128) / repeat(8))(257 * 16 * 128 * 8 / 32768=128.5 seconds)(safety check added, >= 1 second duty cycle is useless and will just make annoying cracks anyway) -Cyclone CPU emulator is not working PWM1 output value is not a direct range cast of 0<->255 to 0<->32767, its additive, see properPwmSineWave.png inductor dosent properly drain when PWM1 gets disabled PWM1 FIFOAV is always set true diff --git a/libretroBuildSystem/build/Makefile.common b/libretroBuildSystem/build/Makefile.common index f0afcdc..34364f3 100644 --- a/libretroBuildSystem/build/Makefile.common +++ b/libretroBuildSystem/build/Makefile.common @@ -7,6 +7,7 @@ INCFLAGS := -I$(LIBRETRO_COMM_DIR)/include ifeq ($(DEBUG), 1) COREDEFINES += -DEMU_DEBUG -DEMU_SANDBOX else + EMU_FAST_CPU = 1 COREDEFINES += -DEMU_NO_SAFETY endif diff --git a/qtBuildSystem/Mu/Mu.pro b/qtBuildSystem/Mu/Mu.pro index 6852f52..60da596 100644 --- a/qtBuildSystem/Mu/Mu.pro +++ b/qtBuildSystem/Mu/Mu.pro @@ -50,7 +50,6 @@ android{ QMAKE_CXXFLAGS += -fopenmp QMAKE_LFLAGS += -fopenmp DEFINES += EMU_MULTITHREADED - # CONFIG += optimize_for_arm32 # for now, later this will check if building for ARMv4<->7 } ios{ @@ -63,7 +62,8 @@ ios{ CONFIG(debug, debug|release){ # debug build, be accurate, fail hard, and add logging DEFINES += EMU_DEBUG EMU_CUSTOM_DEBUG_LOG_HANDLER - !optimize_for_arm32:DEFINES += EMU_SANDBOX + # EMU_SANDBOX + CONFIG += emu_fast_cpu macx|linux-g++{ # DEFINES += EMU_SANDBOX_OPCODE_LEVEL_DEBUG # DEFINES += EMU_SANDBOX_LOG_APIS @@ -75,6 +75,7 @@ CONFIG(debug, debug|release){ } }else{ # release build, go fast + CONFIG += emu_fast_cpu DEFINES += EMU_NO_SAFETY } @@ -82,10 +83,15 @@ CONFIG += c++11 INCLUDEPATH += $$PWD/qt-common/include -# only use with ARMv4<->7, ARMv8 is its own architecture -optimize_for_arm32{ - DEFINES += EMU_OPTIMIZE_FOR_ARM32 - SOURCES += ../../src/m68k/cyclone/CycloneNew.S +emu_fast_cpu{ + DEFINES += EMU_FAST_CPU + optimize_for_arm32{ + # only use with ARMv4<->7, ARMv8 is its own architecture + DEFINES += EMU_OPTIMIZE_FOR_ARM32 + SOURCES += ../../src/m68k/cyclone/CycloneNew.S + }else{ + SOURCES += ../../src/m68k/fame/famec.c + } }else{ SOURCES += ../../src/m68k/musashi/m68kcpu.c \ ../../src/m68k/musashi/m68kdasm.c \ @@ -147,7 +153,9 @@ HEADERS += \ ../../src/specs/sed1376RegisterSpec.h \ ../../src/specs/pdiUsbD12CommandSpec.h \ ../../src/specs/emuFeatureRegisterSpec.h \ - ../../src/specs/sdCardCommandSpec.h + ../../src/specs/sdCardCommandSpec.h \ + ../../src/m68k/fame/fame.h \ + ../../src/m68k/fame/famec_opcodes.h FORMS += \ mainwindow.ui \ diff --git a/src/emulator.h b/src/emulator.h index 50c9923..0b32275 100644 --- a/src/emulator.h +++ b/src/emulator.h @@ -17,7 +17,8 @@ extern "C" { //DEFINE INFO!!! //define EMU_MULTITHREADED to speed up long loops -//define EMU_OPTIMIZE_FOR_ARM32 to use ASM CPU core +//define EMU_FAST_CPU to use fast CPU cores +//define EMU_OPTIMIZE_FOR_ARM32 to use ASM CPU core, EMU_FAST_CPU must be on too //define EMU_NO_SAFETY to remove all safety checks //define EMU_BIG_ENDIAN on big endian systems //to enable degguging define EMU_DEBUG, all options below do nothing unless EMU_DEBUG is defined diff --git a/src/flx68000.c b/src/flx68000.c index b74dce1..0564626 100755 --- a/src/flx68000.c +++ b/src/flx68000.c @@ -1,19 +1,24 @@ #include #include +#include #include "emulator.h" #include "portability.h" #include "hardwareRegisters.h" #include "memoryAccess.h" +#if defined(EMU_FAST_CPU) #if defined(EMU_OPTIMIZE_FOR_ARM32) #include //for exit(1) #include "m68k/cyclone/Cyclone.h" #else +#include "m68k/fame/fame.h" +#endif +#else #include "m68k/musashi/m68kcpu.h" #endif - +#if defined(EMU_FAST_CPU) #if defined(EMU_OPTIMIZE_FOR_ARM32) static struct Cyclone cycloneCpu; @@ -25,7 +30,7 @@ extern void m68k_write_memory_8(unsigned int address, unsigned char value); extern void m68k_write_memory_16(unsigned int address, unsigned short value); extern void m68k_write_memory_32(unsigned int address, unsigned int value); -unsigned int checkPc(unsigned int pc){ +unsigned int flx68000CheckPc(unsigned int pc){ unsigned int dataBufferHost; unsigned int dataBufferGuest; unsigned int windowSize; @@ -51,12 +56,31 @@ unsigned int checkPc(unsigned int pc){ return cycloneCpu.membase + pc;//new program counter } +#else +static M68K_CONTEXT fameCpu; + + +extern unsigned int m68k_read_memory_8(unsigned int address); +extern unsigned int m68k_read_memory_16(unsigned int address); +extern unsigned int m68k_read_memory_32(unsigned int address); +extern void m68k_write_memory_8(unsigned int address, unsigned char value); +extern void m68k_write_memory_16(unsigned int address, unsigned short value); +extern void m68k_write_memory_32(unsigned int address, unsigned int value); + +void flx68000InterruptAcknowledge(unsigned level){ + int vector = interruptAcknowledge(level); + + fameCpu.interrupts[0] = level; +} + +#endif #endif void flx68000Init(void){ static bool inited = false; if(!inited){ +#if defined(EMU_FAST_CPU) #if defined(EMU_OPTIMIZE_FOR_ARM32) CycloneInit(); cycloneCpu.read8 = m68k_read_memory_8; @@ -68,9 +92,20 @@ void flx68000Init(void){ cycloneCpu.write8 = m68k_write_memory_8; cycloneCpu.write16 = m68k_write_memory_16; cycloneCpu.write32 = m68k_write_memory_32; - cycloneCpu.checkpc = checkPc; + cycloneCpu.checkpc = flx68000CheckPc; cycloneCpu.IrqCallback = interruptAcknowledge; cycloneCpu.ResetCallback = emulatorSoftReset; +#else + fm68k_init(); + fameCpu.read_byte = m68k_read_memory_8; + fameCpu.read_word = m68k_read_memory_16; + fameCpu.read_long = m68k_read_memory_32; + fameCpu.write_byte = m68k_write_memory_8; + fameCpu.write_word = m68k_write_memory_16; + fameCpu.write_long = m68k_write_memory_32; + fameCpu.iack_handler = flx68000InterruptAcknowledge; + fameCpu.reset_handler = emulatorSoftReset; +#endif #else m68k_init(); m68k_set_cpu_type(M68K_CPU_TYPE_68000); @@ -87,8 +122,12 @@ void flx68000Init(void){ void flx68000Reset(void){ resetHwRegisters(); resetAddressSpace();//address space must be reset after hardware registers because it is dependent on them +#if defined(EMU_FAST_CPU) #if defined(EMU_OPTIMIZE_FOR_ARM32) CycloneReset(&cycloneCpu); +#else + fm68k_reset(&fameCpu); +#endif #else m68k_pulse_reset(); #endif @@ -97,8 +136,12 @@ void flx68000Reset(void){ uint64_t flx68000StateSize(void){ uint64_t size = 0; +#if defined(EMU_FAST_CPU) #if defined(EMU_OPTIMIZE_FOR_ARM32) size += 0x80;//specified in Cyclone.h, line 82 +#else + size += sizeof(fameCpu); +#endif #else size += sizeof(uint32_t) * 50;//m68ki_cpu #endif @@ -108,9 +151,14 @@ uint64_t flx68000StateSize(void){ void flx68000SaveState(uint8_t* data){ uint64_t offset = 0; +#if defined(EMU_FAST_CPU) #if defined(EMU_OPTIMIZE_FOR_ARM32) CyclonePack(&cycloneCpu, data + offset); offset += 0x80;//specified in Cyclone.h, line 82 +#else + memcpy(data + offset, &fameCpu, sizeof(fameCpu)); + offset += sizeof(fameCpu); +#endif #else uint8_t index; @@ -182,9 +230,14 @@ void flx68000SaveState(uint8_t* data){ void flx68000LoadState(uint8_t* data){ uint64_t offset = 0; +#if defined(EMU_FAST_CPU) #if defined(EMU_OPTIMIZE_FOR_ARM32) CycloneUnpack(&cycloneCpu, data + offset); offset += 0x80;//specified in Cyclone.h, line 82 +#else + memcpy(&fameCpu, data + offset, sizeof(fameCpu)); + offset += sizeof(fameCpu); +#endif #else uint8_t index; @@ -263,9 +316,13 @@ void flx68000Execute(void){ int32_t cpuCycles = sysclks * pctlrCpuClockDivider * palmClockMultiplier; if(cpuCycles > 0){ +#if defined(EMU_FAST_CPU) #if defined(EMU_OPTIMIZE_FOR_ARM32) cycloneCpu.cycles = cpuCycles; CycloneRun(&cycloneCpu); +#else + fm68k_emulate(&fameCpu, cpuCycles, fm68k_reason_emulate); +#endif #else m68k_execute(cpuCycles); #endif @@ -279,32 +336,46 @@ void flx68000Execute(void){ } void flx68000SetIrq(uint8_t irqLevel){ +#if defined(EMU_FAST_CPU) #if defined(EMU_OPTIMIZE_FOR_ARM32) cycloneCpu.irq = irqLevel; CycloneFlushIrq(&cycloneCpu); +#else + //fameCpu.interrupts[0] = irqLevel; + //fm68k_would_interrupt(&fameCpu); +#endif #else m68k_set_irq(irqLevel); #endif } void flx68000RefreshAddressing(void){ -#if defined(EMU_OPTIMIZE_FOR_ARM32) - //cycloneCpu.pc = cycloneCpu.checkpc(cycloneCpu.pc); -#else - //C implementation doesnt cache address information +#if defined(EMU_FAST_CPU) && !defined(EMU_OPTIMIZE_FOR_ARM32) + uint32_t bank; + + MULTITHREAD_LOOP(bank) for(bank = 0; bank < TOTAL_MEMORY_BANKS; bank++){ + if(bankType[bank] == CHIP_A0_ROM) + fameCpu.Fetch[bank] = &palmRom + BANK_ADDRESS(bank) - chips[CHIP_A0_ROM].start; + else if(bankType[bank] == CHIP_DX_RAM) + fameCpu.Fetch[bank] = &palmRam + BANK_ADDRESS(bank) - chips[CHIP_DX_RAM].start; + } #endif } bool flx68000IsSupervisor(void){ +#if defined(EMU_FAST_CPU) #if defined(EMU_OPTIMIZE_FOR_ARM32) - return CycloneGetSr(&cycloneCpu) & 0x2000; + return !!(CycloneGetSr(&cycloneCpu) & 0x2000); +#else + return !!(fameCpu.sr & 0x2000); +#endif #else return !!(m68k_get_reg(NULL, M68K_REG_SR) & 0x2000); #endif } void flx68000BusError(uint32_t address, bool isWrite){ -#if defined(EMU_OPTIMIZE_FOR_ARM32) +#if defined(EMU_FAST_CPU) || defined(EMU_NO_SAFETY) //no bus error callback #else //never call outsize of a 68k opcode, behavior is undefined due to longjmp @@ -334,7 +405,7 @@ uint32_t flx68000GetRegister(uint8_t reg){ M68K_REG_PC, M68K_REG_SR */ - +#if defined(EMU_FAST_CPU) #if defined(EMU_OPTIMIZE_FOR_ARM32) if(reg < 8) return cycloneCpu.d[reg]; @@ -346,22 +417,38 @@ uint32_t flx68000GetRegister(uint8_t reg){ return CycloneGetSr(&cycloneCpu); return 0x00000000; +#else + if(reg < 8) + return fameCpu.dreg[reg].D; + else if(reg < 16) + return fameCpu.areg[reg - 8].D; + else if(reg == 16) + return fm68k_get_pc(&fameCpu); + else if(reg == 17) + return fameCpu.sr; + + return 0x00000000; +#endif #else return m68k_get_reg(NULL, reg); #endif } uint32_t flx68000GetPc(void){ +#if defined(EMU_FAST_CPU) #if defined(EMU_OPTIMIZE_FOR_ARM32) - return cycloneCpu.prev_pc; + return cycloneCpu.pc; #else - return m68k_get_reg(NULL, M68K_REG_PPC); + return fm68k_get_pc(&fameCpu); +#endif +#else + return m68k_get_reg(NULL, M68K_REG_PC); #endif } uint64_t flx68000ReadArbitraryMemory(uint32_t address, uint8_t size){ uint64_t data = UINT64_MAX;//invalid access - +#if defined(EMU_FAST_CPU) #if defined(EMU_OPTIMIZE_FOR_ARM32) //reading from a hardware register FIFO will corrupt it! if(bankType[START_BANK(address)] != CHIP_NONE){ @@ -382,6 +469,10 @@ uint64_t flx68000ReadArbitraryMemory(uint32_t address, uint8_t size){ } CycloneSetSr(&cycloneCpu, m68kSr); } +#else + //FAME here + +#endif #else //reading from a hardware register FIFO will corrupt it! if(bankType[START_BANK(address)] != CHIP_NONE){ diff --git a/src/m68k/fame/fame.h b/src/m68k/fame/fame.h new file mode 100644 index 0000000..c387ca3 --- /dev/null +++ b/src/m68k/fame/fame.h @@ -0,0 +1,180 @@ +/*****************************************************************************/ +/* 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__ + +// uintptr_t +#include +#ifndef _MSC_VER +#include +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +// PicoDrive hacks +#define FAMEC_FETCHBITS (32 - 14)//BANK_SCOOT, was 8 for picodrive +#define M68K_FETCHBANK1 (1 << FAMEC_FETCHBITS) + +//#define M68K_RUNNING 0x01 +#define FM68K_HALTED 0x80 +//#define M68K_WAITING 0x04 +//#define M68K_DISABLE 0x20 +//#define M68K_FAULTED 0x40 +#define FM68K_EMULATE_GROUP_0 0x02 +#define FM68K_EMULATE_TRACE 0x08 +#define FM68K_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 */ +/*******************/ + +typedef union +{ + unsigned char B; + signed char SB; + unsigned short W; + signed short SW; + unsigned int D; + signed int SD; +} famec_union32; + +/* 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 Opcode; + signed int cycles_needed; + + unsigned short *PC; + uintptr_t BasePC; + unsigned int flag_C; + unsigned int flag_V; + unsigned int flag_NotZ; + unsigned int flag_N; + unsigned int flag_X; + unsigned int flag_T; + unsigned int flag_S; + unsigned int flag_I; + + unsigned char not_polling; + unsigned char pad[3]; + + uintptr_t Fetch[M68K_FETCHBANK1]; +} M68K_CONTEXT; + +typedef enum +{ + fm68k_reason_emulate = 0, + fm68k_reason_init, + fm68k_reason_idle_install, + fm68k_reason_idle_remove, +} fm68k_call_reason; + +/************************/ +/* Function definition */ +/************************/ + +/* General purpose functions */ +void fm68k_init(void); +int fm68k_reset(M68K_CONTEXT *ctx); +int fm68k_emulate(M68K_CONTEXT *ctx, int n, fm68k_call_reason reason); +int fm68k_would_interrupt(M68K_CONTEXT *ctx); // to be called from fm68k_emulate() + +unsigned int fm68k_get_pc(const M68K_CONTEXT *ctx); + +// PICODRIVE_HACK +int fm68k_idle_install(void); +int fm68k_idle_remove(void); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/src/m68k/fame/famec.c b/src/m68k/fame/famec.c new file mode 100644 index 0000000..d4f6109 --- /dev/null +++ b/src/m68k/fame/famec.c @@ -0,0 +1,5077 @@ +/****************************************************************************/ +/* 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 C68K emulator by Stèphane Dallongueville */ +/****************************************************************************/ + +#include +#include +#include + +#ifdef __GNUC__ +#pragma GCC diagnostic ignored "-Wunused-variable" +#endif + +#include "fame.h" + + +// Options // +#define FAMEC_ROLL_INLINE +#define FAMEC_EMULATE_TRACE +#define FAMEC_CHECK_BRANCHES +#define FAMEC_EXTRA_INLINE +// #define FAMEC_DEBUG +// #define FAMEC_NO_GOTOS +#define FAMEC_ADR_BITS 32 +// #define FAMEC_FETCHBITS 8 +#define FAMEC_DATABITS 8 +#define FAMEC_32BIT_PC + +#define USE_CYCLONE_TIMING +#define USE_CYCLONE_TIMING_DIV +//#define PICODRIVE_HACK +// Options // + +#ifndef FAMEC_NO_GOTOS +// computed gotos is a GNU extension +#ifndef __GNUC__ +#define FAMEC_NO_GOTOS +#endif +// as of 3.3, clang takes over 3h to compile this in computed goto mode.. +#ifdef __clang__ +#define FAMEC_NO_GOTOS +#endif +#endif + +#undef INLINE +#ifdef _MSC_VER +#define INLINE +#else +#define INLINE __inline__ +#endif + +#ifndef FAMEC_EXTRA_INLINE +#define FAMEC_EXTRA_INLINE +#else +#undef FAMEC_EXTRA_INLINE +#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 + +#ifdef uptr +#undef uptr +#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 +#define uptr uintptr_t + +/* +typedef unsigned char u8; +typedef signed char s8; +typedef unsigned short u16; +typedef signed short s16; +typedef unsigned int u32; +typedef signed int s32; +*/ + +#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) (ctx->dreg[(X)].D) +#define DREGu32(X) (ctx->dreg[(X)].D) +#define DREGs32(X) (ctx->dreg[(X)].SD) +#define DREGu16(X) (ctx->dreg[(X)].W) +#define DREGs16(X) (ctx->dreg[(X)].SW) +#define DREGu8(X) (ctx->dreg[(X)].B) +#define DREGs8(X) (ctx->dreg[(X)].SB) + +#define AREG(X) (ctx->areg[(X)].D) +#define AREGu32(X) (ctx->areg[(X)].D) +#define AREGs32(X) (ctx->areg[(X)].SD) +#define AREGu16(X) (ctx->areg[(X)].W) +#define AREGs16(X) (ctx->areg[(X)].SW) + +#define ASP (ctx->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) \ + ctx->io_cycle_counter -= (A); \ + if (ctx->io_cycle_counter <= 0) goto famec_Exec_End; \ + NEXT +#else +#define RET(A) \ + ctx->io_cycle_counter -= (A); \ + if (ctx->io_cycle_counter <= 0) goto famec_Exec_End; \ + goto famec_Exec; +#endif + +#define RET0() \ + ctx->io_cycle_counter = -6; \ + goto famec_End; + +#else + +#define NEXT \ + do { \ + FETCH_WORD(Opcode); \ + JumpTable[Opcode](ctx); \ + } while (ctx->io_cycle_counter > 0); + +#define RET(A) \ + ctx->io_cycle_counter -= (A); \ + return; + +#define RET0() \ + ctx->io_cycle_counter = -6; \ + return; + +#endif + +#define M68K_PPL (ctx->sr >> 8) & 7 + +#define GET_PC \ + (u32)((uptr)PC - BasePC) + + +#ifdef FAMEC_CHECK_BRANCHES +#define FORCE_ALIGNMENT(pc) +#else +#define FORCE_ALIGNMENT(pc) pc&=~1; +#endif + +//#ifndef FAMEC_32BIT_PC +//in Mu the top 8 bits are part of the table + +#define SET_PC(A) \ +{ \ + u32 pc = A; \ + FORCE_ALIGNMENT(pc); \ + BasePC = ctx->Fetch[(pc >> M68K_FETCHSFT) & M68K_FETCHMASK]; \ + PC = (u16*)((pc & M68K_ADR_MASK) + BasePC); \ +} + +/* +#else + +#define SET_PC(A) \ +{ \ + u32 pc = A; \ + FORCE_ALIGNMENT(pc); \ + BasePC = ctx->Fetch[(pc >> M68K_FETCHSFT) & M68K_FETCHMASK]; \ + BasePC -= pc & 0xFF000000; \ + PC = (u16*)(pc + BasePC); \ +} + +#endif +*/ + + +#define PRE_IO \ +// io_cycle_counter = CCnt; + +#define POST_IO \ +// CCnt = io_cycle_counter; + +#define READ_BYTE_F(A, D) \ + D = ctx->read_byte(A) & 0xFF; + +#define READ_WORD_F(A, D) \ + D = ctx->read_word(A) & 0xFFFF; + +#define READ_LONG_F(A, D) \ + D = ctx->read_long(A); + +#define READSX_LONG_F READ_LONG_F + +#define WRITE_LONG_F(A, D) \ + ctx->write_long(A, D); + +#define WRITE_LONG_DEC_F(A, D) \ + ctx->write_word((A) + 2, (D) & 0xFFFF); \ + ctx->write_word((A), (D) >> 16); + +#define PUSH_32_F(D) \ + AREG(7) -= 4; \ + ctx->write_long(AREG(7), D); + +#define POP_32_F(D) \ + D = ctx->read_long(AREG(7)); \ + AREG(7) += 4; + +#ifndef FAME_BIG_ENDIAN + + #define FETCH_LONG(A) \ + (A) = PC[1] | (PC[0] << 16); \ + PC += 2; + + #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 FETCH_LONG(A) \ + (A) = PC[0] | (PC[1] << 16); \ + PC += 2; + + #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)ctx->read_byte(A); + +#define READSX_WORD_F(A, D) \ + D = (s16)ctx->read_word(A); + + +#define WRITE_BYTE_F(A, D) \ + ctx->write_byte(A, D); + +#define WRITE_WORD_F(A, D) \ + ctx->write_word(A, D); + +#define PUSH_16_F(D) \ + ctx->write_word(AREG(7) -= 2, D); \ + +#define POP_16_F(D) \ + D = (u16)ctx->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__(ctx)) \ + { \ + cycles_needed=ctx->io_cycle_counter-(CLK); \ + ctx->io_cycle_counter=(CLK); \ + } + + +#ifdef FAMEC_CHECK_BRANCHES + +#ifdef FAMEC_NO_GOTOS +#define CHECK_BRANCH_EXCEPTION_GOTO_END ctx->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 new_PC, pr_PC=GET_PC; \ + ctx->execinfo |= FM68K_EMULATE_GROUP_0; \ + new_PC = execute_exception_group_0(ctx, M68K_ADDRESS_ERROR_EX, 0, pr_PC, 0x12 ); \ + SET_PC(new_PC); \ + CHECK_BRANCH_EXCEPTION_GOTO_END \ + } +#else +#define CHECK_BRANCH_EXCEPTION(_PC_) +#endif + +#ifdef FAMEC_NO_GOTOS +#define Opcode ctx->Opcode +#define cycles_needed ctx->cycles_needed +#define PC ctx->PC +#define BasePC ctx->BasePC +#define flag_C ctx->flag_C +#define flag_V ctx->flag_V +#define flag_NotZ ctx->flag_NotZ +#define flag_N ctx->flag_N +#define flag_X ctx->flag_X +#endif + +#define flag_T ctx->flag_T +#define flag_S ctx->flag_S +#define flag_I ctx->flag_I + +// global variable +/////////////////// + +static u32 initialised = 0; + +#ifdef PICODRIVE_HACK +extern M68K_CONTEXT PicoCpuFS68k; +#endif + +/* Custom function handler */ +typedef void (*opcode_func)(M68K_CONTEXT *ctx); + +static opcode_func JumpTable[0x10000]; + +// 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 +}; + +static int init_jump_table(void); + +/***********************/ +/* core main functions */ +/***********************/ + +/***************************************************************************/ +/* m68k_init() */ +/* Debe ser llamado para inicializar la tabla de saltos de instruccion */ +/* No recibe parametros y no devuelve nada */ +/***************************************************************************/ +void fm68k_init(void) +{ +#ifdef FAMEC_DEBUG + puts("Initializing FAME..."); +#endif + + if (!initialised) + init_jump_table(); + +#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 fm68k_reset(M68K_CONTEXT *ctx) +{ + if (!initialised) + init_jump_table(); + + // Si la CPU esta en ejecucion, salir con M68K_RUNNING + if (ctx->execinfo & M68K_RUNNING) + return M68K_RUNNING; + + // Resetear registros + //memset(&ctx->dreg[0], 0, 16*4); + + // Resetear interrupts, execinfo y ASP + ctx->interrupts[0] = 0; + ctx->execinfo = 0; + ASP = 0; + + // Fijar registro de estado + ctx->sr = (ctx->sr & 0xff) | 0x2700; + + // Obtener puntero de pila inicial y PC + AREG(7) = ctx->read_long(0); + ctx->pc = ctx->read_long(4); + +#ifdef FAMEC_DEBUG + puts("Reset 68k done!\n"); + printf("PC = 0x%08X\n",ctx->pc); +#endif + + return M68K_OK; +} + + +/****************************************************************************/ +/* m68k_get_pc() */ +/* No recibe parametros */ +/* Retorna 68k PC */ +/****************************************************************************/ +u32 fm68k_get_pc(const M68K_CONTEXT *ctx) +{ +#ifdef FAMEC_NO_GOTOS + return (ctx->execinfo & M68K_RUNNING)?(uptr)PC-BasePC:ctx->pc; +#else + return ctx->pc; // approximate PC in this mode +#endif +} + + +////////////////////////// +// Chequea las interrupciones y las inicia +static FAMEC_EXTRA_INLINE s32 interrupt_chk__(M68K_CONTEXT *ctx) +{ + if (ctx->interrupts[0] > flag_I) + return ctx->interrupts[0]; + + return 0; +} + +int fm68k_would_interrupt(M68K_CONTEXT *ctx) +{ + return interrupt_chk__(ctx); +} + +static FAMEC_EXTRA_INLINE u32 execute_exception(M68K_CONTEXT *ctx, s32 vect, u32 oldPC, u32 oldSR) +{ + u32 newPC; + //u32 oldSR = GET_SR; + + ctx->io_cycle_counter -= exception_cycle_table[vect]; +#ifdef FAMEC_EMULATE_TRACE + ctx->execinfo &= ~FM68K_EMULATE_TRACE; +#endif + + 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 = GET_PC; + PUSH_32_F(oldPC) + PUSH_16_F(oldSR) + + /* adjust SR */ + flag_S = M68K_SR_S; + flag_T = 0; + +#ifndef FAMEC_32BIT_PC + newPC&=M68K_ADR_MASK +#endif +#ifdef FAMEC_CHECK_BRANCHES + newPC&=~1; // don't crash on games with bad vector tables +#endif + + // SET_PC(newPC) + + POST_IO + + return newPC; +} + +static FAMEC_EXTRA_INLINE u32 execute_exception_group_0(M68K_CONTEXT *ctx, s32 vect, s32 addr, u16 spec_info, u32 oldSR) +{ + u32 newPC; + u16 inst_reg = 0; + newPC = execute_exception(ctx, vect, addr, oldSR); + //if (!(ctx->icust_handler && ctx->icust_handler[vect])) + { + PUSH_16_F(inst_reg); + PUSH_32_F(addr); + PUSH_16_F(spec_info); + } + return newPC; +} + + +#ifdef FAMEC_NO_GOTOS + +#define OPCODE(N_OP) static void OP_##N_OP(M68K_CONTEXT *ctx) +#define CAST_OP(N_OP) (opcode_func)&OP_##N_OP +#include "famec_opcodes.h" +#endif + + +// main exec function +////////////////////// + +int fm68k_emulate(M68K_CONTEXT *ctx, s32 cycles, fm68k_call_reason reason) +{ +#ifndef FAMEC_NO_GOTOS + u32 Opcode; + s32 cycles_needed; + u16 *PC; + uptr BasePC; + u32 flag_C; + u32 flag_V; + u32 flag_NotZ; + u32 flag_N; + u32 flag_X; + + switch (reason) + { + case fm68k_reason_init: + goto init_jump_table; +#ifdef PICODRIVE_HACK + case fm68k_reason_idle_install: + goto idle_install; + case fm68k_reason_idle_remove: + goto idle_remove; +#endif + case fm68k_reason_emulate: + break; + } +#endif // FAMEC_NO_GOTOS + + // won't emulate double fault + // if (ctx->execinfo & M68K_FAULTED) return -1; + + // Cache PPL + flag_I = M68K_PPL; + + if (ctx->execinfo & FM68K_HALTED) + { + if (interrupt_chk__(ctx) <= 0) + { + return cycles; + } + ctx->execinfo &= ~FM68K_HALTED; + } + +#ifdef FAMEC_DEBUG + printf("Ciclos a ejecutar: %d\n",cycles); +#endif + + /* Poner la CPU en estado de ejecucion */ + ctx->execinfo |= M68K_RUNNING; + + // Cache SR + SET_SR(ctx->sr) + + // Fijar PC + SET_PC(ctx->pc) + +#ifdef FAMEC_DEBUG + printf("PC: %p\n",PC); + printf("BasePC: 0x%08x\n",BasePC); +#endif + + /* guardar ciclos de ejecucion solicitados */ + ctx->io_cycle_counter = cycles; + cycles_needed = 0; + +#ifdef FAMEC_EMULATE_TRACE + if (!(ctx->execinfo & FM68K_EMULATE_TRACE)) +#endif + { + s32 line=interrupt_chk__(ctx); + if (line>0) + { + /* comprobar si hay rutina de acknowledge */ + if (ctx->iack_handler != NULL) + ctx->iack_handler(line); + else + ctx->interrupts[0] = 0; + + SET_PC(execute_exception(ctx, line + 0x18, GET_PC, GET_SR)); + flag_I = (u32)line; + if (ctx->io_cycle_counter <= 0) goto famec_End; + } +#ifdef FAMEC_EMULATE_TRACE + else + if (flag_T) + { + ctx->execinfo |= FM68K_EMULATE_TRACE; + cycles_needed = ctx->io_cycle_counter; + ctx->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 (ctx->execinfo & FM68K_EMULATE_TRACE) + { + ctx->io_cycle_counter += cycles_needed; + cycles_needed = 0; + ctx->execinfo &= ~FM68K_EMULATE_TRACE; + ctx->execinfo |= FM68K_DO_TRACE; + SET_PC(execute_exception(ctx, M68K_TRACE_EX, GET_PC, GET_SR)); + if (ctx->io_cycle_counter > 0) + { + //NEXT + goto famec_Exec; + } + } + else +#endif + if (cycles_needed != 0) + { + u32 line; + ctx->io_cycle_counter += cycles_needed; + cycles_needed = 0; + //if (ctx->io_cycle_counter <= 0) goto famec_End; + line=interrupt_chk__(ctx); + if (line>0) + { + if (ctx->iack_handler != NULL) + ctx->iack_handler(line); + else + ctx->interrupts[0] = 0; + + SET_PC(execute_exception(ctx, line + 0x18, GET_PC, GET_SR)); + flag_I = (u32)line; + } +#ifdef FAMEC_EMULATE_TRACE + if (!(flag_T)) +#endif + if (ctx->io_cycle_counter > 0) + { + //NEXT + goto famec_Exec; + } + } + +famec_End: + ctx->sr = GET_SR; + ctx->pc = GET_PC; + + ctx->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",ctx->pc); +#endif + + return cycles - ctx->io_cycle_counter; + +#ifndef FAMEC_NO_GOTOS +init_jump_table: +#else +} + +static int init_jump_table(void) +#endif +{ + 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); +#if 0 + 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); +#endif + 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); +#if 0 + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0x9008 + i + j] = CAST_OP(0x9008); +#endif + 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); +#if 0 + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0xB008 + i + j] = CAST_OP(0xB008); +#endif + 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); +#if 0 + for(i = 0x0000; i <= 0x0007; i += 0x0001) + for(j = 0x0000; j <= 0x0E00; j += 0x0200) + JumpTable[0xD008 + i + j] = CAST_OP(0xD008); +#endif + 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; + return 0; +} + +#ifdef PICODRIVE_HACK + +#define INSTALL_IDLE(fake_op_base,real_op,detector,idle_handler,normal_handler) \ + JumpTable[fake_op_base] = CAST_OP(idle_handler); \ + JumpTable[fake_op_base|0x0200] = CAST_OP(normal_handler); \ + JumpTable[real_op] = CAST_OP(detector) + +#define UNDO_IDLE(fake_op_base,real_op,normal_handler) \ + JumpTable[fake_op_base] = JumpTable[fake_op_base|0x0200] = CAST_OP(0x4AFC); \ + JumpTable[real_op] = CAST_OP(normal_handler) + +#ifndef FAMEC_NO_GOTOS +idle_install: +#else +int fm68k_idle_install(void) +#endif +{ + // printf("install..\n"); + INSTALL_IDLE(0x71fa, 0x66fa, idle_detector_bcc8, 0x6601_idle, 0x6601); + INSTALL_IDLE(0x71f8, 0x66f8, idle_detector_bcc8, 0x6601_idle, 0x6601); + INSTALL_IDLE(0x71f6, 0x66f6, idle_detector_bcc8, 0x6601_idle, 0x6601); + INSTALL_IDLE(0x71f2, 0x66f2, idle_detector_bcc8, 0x6601_idle, 0x6601); + INSTALL_IDLE(0x75fa, 0x67fa, idle_detector_bcc8, 0x6701_idle, 0x6701); + INSTALL_IDLE(0x75f8, 0x67f8, idle_detector_bcc8, 0x6701_idle, 0x6701); + INSTALL_IDLE(0x75f6, 0x67f6, idle_detector_bcc8, 0x6701_idle, 0x6701); + INSTALL_IDLE(0x75f2, 0x67f2, idle_detector_bcc8, 0x6701_idle, 0x6701); + INSTALL_IDLE(0x7dfe, 0x60fe, idle_detector_bcc8, 0x6001_idle, 0x6001); + INSTALL_IDLE(0x7dfc, 0x60fc, idle_detector_bcc8, 0x6001_idle, 0x6001); + return 0; +} + +#ifndef FAMEC_NO_GOTOS +idle_remove: +#else +int fm68k_idle_remove(void) +#endif +{ + // printf("remove..\n"); + UNDO_IDLE(0x71fa, 0x66fa, 0x6601); + UNDO_IDLE(0x71f8, 0x66f8, 0x6601); + UNDO_IDLE(0x71f6, 0x66f6, 0x6601); + UNDO_IDLE(0x71f2, 0x66f2, 0x6601); + UNDO_IDLE(0x75fa, 0x67fa, 0x6701); + UNDO_IDLE(0x75f8, 0x67f8, 0x6701); + UNDO_IDLE(0x75f6, 0x67f6, 0x6701); + UNDO_IDLE(0x75f2, 0x67f2, 0x6701); + UNDO_IDLE(0x7dfe, 0x60fe, 0x6001); + UNDO_IDLE(0x7dfc, 0x60fc, 0x6001); + return 0; +} +#endif // PICODRIVE_HACK + +#ifndef FAMEC_NO_GOTOS +} + +static int init_jump_table(void) +{ + return fm68k_emulate(NULL, 0, fm68k_reason_init); +} + +#ifdef PICODRIVE_HACK +int fm68k_idle_install(void) +{ + return fm68k_emulate(NULL, 0, fm68k_reason_idle_install); +} + +int fm68k_idle_remove(void) +{ + return fm68k_emulate(NULL, 0, fm68k_reason_idle_remove); +} +#endif +#endif // FAMEC_NO_GOTOS diff --git a/src/m68k/fame/famec_opcodes.h b/src/m68k/fame/famec_opcodes.h new file mode 100644 index 0000000..e069e9e --- /dev/null +++ b/src/m68k/fame/famec_opcodes.h @@ -0,0 +1,40136 @@ + +#ifdef PICODRIVE_HACK +#define NOT_POLLING ctx->not_polling = 1; +#else +#define NOT_POLLING +#endif + +// 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 + { + SET_PC(execute_exception(ctx, M68K_PRIVILEGE_VIOLATION_EX, GET_PC-2, GET_SR)); +#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 + { + SET_PC(execute_exception(ctx, M68K_PRIVILEGE_VIOLATION_EX, GET_PC-2, GET_SR)); + 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 + { + SET_PC(execute_exception(ctx, M68K_PRIVILEGE_VIOLATION_EX, GET_PC-2, GET_SR)); + RET(0) + } +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 + GET_PC; + 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 = (uptr)(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 + GET_PC; + 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 = (uptr)(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 +#ifdef USE_CYCLONE_TIMING +RET(16) +#else +RET(24) +#endif +} + +// 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 +#ifdef USE_CYCLONE_TIMING +RET(24) +#else +RET(32) +#endif +} + +// 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 +#ifdef USE_CYCLONE_TIMING +RET(16) +#else +RET(24) +#endif +} + +// 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 +#ifdef USE_CYCLONE_TIMING +RET(24) +#else +RET(32) +#endif +} + +// 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) +} + +#if 0 +// MOVEB +OPCODE(0x1008) +{ + u32 adr, res; + u32 src, dst; + + // can't read byte from Ax registers ! + ctx->execinfo |= M68K_FAULTED; + ctx->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 ! + ctx->execinfo |= M68K_FAULTED; + ctx->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 ! + ctx->execinfo |= M68K_FAULTED; + ctx->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 ! + ctx->execinfo |= M68K_FAULTED; + ctx->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 ! + ctx->execinfo |= M68K_FAULTED; + ctx->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 ! + ctx->execinfo |= M68K_FAULTED; + ctx->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 ! + ctx->execinfo |= M68K_FAULTED; + ctx->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 ! + ctx->execinfo |= M68K_FAULTED; + ctx->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 ! + ctx->execinfo |= M68K_FAULTED; + ctx->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 ! + ctx->execinfo |= M68K_FAULTED; + ctx->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) +} +#endif + +// 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 + GET_PC; + 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 + GET_PC; + 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 + GET_PC; + 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 + GET_PC; + 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 + GET_PC; + 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 + GET_PC; + 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 + GET_PC; + 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 + GET_PC; + 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 + GET_PC; + 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 + GET_PC; + 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 = (uptr)(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 = (uptr)(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 = (uptr)(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 = (uptr)(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 = (uptr)(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 = (uptr)(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 = (uptr)(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 = (uptr)(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 = (uptr)(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 = (uptr)(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_DEC_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_DEC_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_DEC_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_DEC_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_DEC_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_DEC_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_DEC_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_DEC_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_DEC_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_DEC_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_DEC_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_DEC_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_DEC_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_DEC_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_DEC_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_DEC_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_DEC_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_DEC_F(adr, res) + POST_IO +RET(28) +} + +// MOVEL +OPCODE(0x203A) +{ + u32 adr, res; + u32 src, dst; + + adr = GET_SWORD + GET_PC; + 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 + GET_PC; + 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 + GET_PC; + 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 + GET_PC; + 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_DEC_F(adr, res) + POST_IO +RET(24) +} + +// MOVEL +OPCODE(0x217A) +{ + u32 adr, res; + u32 src, dst; + + adr = GET_SWORD + GET_PC; + 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 + GET_PC; + 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 + GET_PC; + 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 + GET_PC; + 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 + GET_PC; + 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 + GET_PC; + 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_DEC_F(adr, res) + POST_IO +RET(24) +} + +// MOVEL +OPCODE(0x203B) +{ + u32 adr, res; + u32 src, dst; + + adr = GET_PC; + 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 = GET_PC; + 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 = GET_PC; + 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 = GET_PC; + 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_DEC_F(adr, res) + POST_IO +RET(26) +} + +// MOVEL +OPCODE(0x217B) +{ + u32 adr, res; + u32 src, dst; + + adr = GET_PC; + 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 = GET_PC; + 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 = GET_PC; + 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 = GET_PC; + 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 = GET_PC; + 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 = GET_PC; + 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_DEC_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_DEC_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_DEC_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_DEC_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_DEC_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_DEC_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_DEC_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 + GET_PC; + 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 = GET_PC; + 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 + GET_PC; + 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 + GET_PC; + 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 + GET_PC; + 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 + GET_PC; + 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 + GET_PC; + 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 + GET_PC; + 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 + GET_PC; + 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 + GET_PC; + 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 + GET_PC; + 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 + GET_PC; + 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 = GET_PC; + 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 = GET_PC; + 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 = GET_PC; + 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 = GET_PC; + 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 = GET_PC; + 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 = GET_PC; + 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 = GET_PC; + 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 = GET_PC; + 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 = GET_PC; + 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 = GET_PC; + 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 + GET_PC; + 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 = GET_PC; + 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 + GET_PC; + 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 = GET_PC; + 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 + { + SET_PC(execute_exception(ctx, M68K_PRIVILEGE_VIOLATION_EX, GET_PC-2, GET_SR)); + 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 + { + SET_PC(execute_exception(ctx, M68K_PRIVILEGE_VIOLATION_EX, GET_PC-2, GET_SR)); + 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 + { + SET_PC(execute_exception(ctx, M68K_PRIVILEGE_VIOLATION_EX, GET_PC-2, GET_SR)); + 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 + { + SET_PC(execute_exception(ctx, M68K_PRIVILEGE_VIOLATION_EX, GET_PC-2, GET_SR)); + 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 + { + SET_PC(execute_exception(ctx, M68K_PRIVILEGE_VIOLATION_EX, GET_PC-2, GET_SR)); + 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 + { + SET_PC(execute_exception(ctx, M68K_PRIVILEGE_VIOLATION_EX, GET_PC-2, GET_SR)); + 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 + { + SET_PC(execute_exception(ctx, M68K_PRIVILEGE_VIOLATION_EX, GET_PC-2, GET_SR)); + 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 + { + SET_PC(execute_exception(ctx, M68K_PRIVILEGE_VIOLATION_EX, GET_PC-2, GET_SR)); + RET(4) + } +RET(24) +} + +// MOVEaSR +OPCODE(0x46FA) +{ + u32 adr, res; + u32 src, dst; + + if (flag_S) + { + adr = GET_SWORD + GET_PC; + 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(20) + } + else + { + SET_PC(execute_exception(ctx, M68K_PRIVILEGE_VIOLATION_EX, GET_PC-2, GET_SR)); + RET(4) + } +RET(20) +} + +// MOVEaSR +OPCODE(0x46FB) +{ + u32 adr, res; + u32 src, dst; + + if (flag_S) + { + adr = GET_PC; + 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 + { + SET_PC(execute_exception(ctx, M68K_PRIVILEGE_VIOLATION_EX, GET_PC-2, GET_SR)); + 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 + { + SET_PC(execute_exception(ctx, M68K_PRIVILEGE_VIOLATION_EX, GET_PC-2, GET_SR)); + 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 + { + SET_PC(execute_exception(ctx, M68K_PRIVILEGE_VIOLATION_EX, GET_PC-2, GET_SR)); + 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 + { + SET_PC(execute_exception(ctx, M68K_PRIVILEGE_VIOLATION_EX, GET_PC-2, GET_SR)); + RET(4) + } +RET(18) +} + +// NBCD +OPCODE(0x4800) +{ + u32 adr, res; + u32 src, dst; + + dst = DREGu8((Opcode >> 0) & 7); + res = -dst - ((flag_X >> M68K_SR_X_SFT) & 1); + + if (res != 0) + { + flag_V = res; + if (((res|dst) & 0x0f) == 0) res = (res & 0xf0) + 6; + res = (res + 0x9a) & 0xFF; + DREGu8((Opcode >> 0) & 7) = res; + flag_V &= ~res; + flag_NotZ |= res; + flag_X = flag_C = M68K_SR_C; + } + else flag_V = 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, dst) + res = -dst - ((flag_X >> M68K_SR_X_SFT) & 1); + + if (res != 0) + { + flag_V = res; + if (((res|dst) & 0x0f) == 0) res = (res & 0xf0) + 6; + res = (res + 0x9a) & 0xFF; + WRITE_BYTE_F(adr, res) + flag_V &= ~res; + flag_NotZ |= res; + flag_X = flag_C = M68K_SR_C; + } + else flag_V = 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, dst) + res = -dst - ((flag_X >> M68K_SR_X_SFT) & 1); + + if (res != 0) + { + flag_V = res; + if (((res|dst) & 0x0f) == 0) res = (res & 0xf0) + 6; + res = (res + 0x9a) & 0xFF; + WRITE_BYTE_F(adr, res) + flag_V &= ~res; + flag_NotZ |= res; + flag_X = flag_C = M68K_SR_C; + } + else flag_V = 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, dst) + res = -dst - ((flag_X >> M68K_SR_X_SFT) & 1); + + if (res != 0) + { + flag_V = res; + if (((res|dst) & 0x0f) == 0) res = (res & 0xf0) + 6; + res = (res + 0x9a) & 0xFF; + WRITE_BYTE_F(adr, res) + flag_V &= ~res; + flag_NotZ |= res; + flag_X = flag_C = M68K_SR_C; + } + else flag_V = 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, dst) + res = -dst - ((flag_X >> M68K_SR_X_SFT) & 1); + + if (res != 0) + { + flag_V = res; + if (((res|dst) & 0x0f) == 0) res = (res & 0xf0) + 6; + res = (res + 0x9a) & 0xFF; + WRITE_BYTE_F(adr, res) + flag_V &= ~res; + flag_NotZ |= res; + flag_X = flag_C = M68K_SR_C; + } + else flag_V = 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, dst) + res = -dst - ((flag_X >> M68K_SR_X_SFT) & 1); + + if (res != 0) + { + flag_V = res; + if (((res|dst) & 0x0f) == 0) res = (res & 0xf0) + 6; + res = (res + 0x9a) & 0xFF; + WRITE_BYTE_F(adr, res) + flag_V &= ~res; + flag_NotZ |= res; + flag_X = flag_C = M68K_SR_C; + } + else flag_V = 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, dst) + res = -dst - ((flag_X >> M68K_SR_X_SFT) & 1); + + if (res != 0) + { + flag_V = res; + if (((res|dst) & 0x0f) == 0) res = (res & 0xf0) + 6; + res = (res + 0x9a) & 0xFF; + WRITE_BYTE_F(adr, res) + flag_V &= ~res; + flag_NotZ |= res; + flag_X = flag_C = M68K_SR_C; + } + else flag_V = 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, dst) + res = -dst - ((flag_X >> M68K_SR_X_SFT) & 1); + + if (res != 0) + { + flag_V = res; + if (((res|dst) & 0x0f) == 0) res = (res & 0xf0) + 6; + res = (res + 0x9a) & 0xFF; + WRITE_BYTE_F(adr, res) + flag_V &= ~res; + flag_NotZ |= res; + flag_X = flag_C = M68K_SR_C; + } + else flag_V = 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, dst) + res = -dst - ((flag_X >> M68K_SR_X_SFT) & 1); + + if (res != 0) + { + flag_V = res; + if (((res|dst) & 0x0f) == 0) res = (res & 0xf0) + 6; + res = (res + 0x9a) & 0xFF; + WRITE_BYTE_F(adr, res) + flag_V &= ~res; + flag_NotZ |= res; + flag_X = flag_C = M68K_SR_C; + } + else flag_V = 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, dst) + res = -dst - ((flag_X >> M68K_SR_X_SFT) & 1); + + if (res != 0) + { + flag_V = res; + if (((res|dst) & 0x0f) == 0) res = (res & 0xf0) + 6; + res = (res + 0x9a) & 0xFF; + WRITE_BYTE_F(adr, res) + flag_V &= ~res; + flag_NotZ |= res; + flag_X = flag_C = M68K_SR_C; + } + else flag_V = 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 + GET_PC; + PC++; + PRE_IO + PUSH_32_F(adr) + POST_IO +RET(16) +} + +// PEA +OPCODE(0x487B) +{ + u32 adr, res; + u32 src, dst; + + adr = GET_PC; + 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 + ctx->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 + ctx->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 + ctx->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 + ctx->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 + ctx->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 + ctx->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 + ctx->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 + ctx->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 + ctx->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 + ctx->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 + ctx->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 + ctx->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 + ctx->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 + ctx->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; +#ifdef PICODRIVE_HACK + if (ctx == &PicoCpuFS68k) { + res |= 0x80; + WRITE_BYTE_F(adr, res); + } +#endif + + POST_IO +#ifdef USE_CYCLONE_TIMING +RET(18) +#else +RET(8) +#endif +} + +// 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; + +#ifdef PICODRIVE_HACK + if (ctx == &PicoCpuFS68k) { + res |= 0x80; + WRITE_BYTE_F(adr, res); + } +#endif + + POST_IO +#ifdef USE_CYCLONE_TIMING +RET(18) +#else +RET(8) +#endif +} + +// 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; + +#ifdef PICODRIVE_HACK + if (ctx == &PicoCpuFS68k) { + res |= 0x80; + WRITE_BYTE_F(adr, res); + } +#endif + + POST_IO +#ifdef USE_CYCLONE_TIMING +RET(20) +#else +RET(10) +#endif +} + +// 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; + +#ifdef PICODRIVE_HACK + if (ctx == &PicoCpuFS68k) { + res |= 0x80; + WRITE_BYTE_F(adr, res); + } +#endif + + POST_IO +#ifdef USE_CYCLONE_TIMING +RET(22) +#else +RET(12) +#endif +} + +// 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; + +#ifdef PICODRIVE_HACK + if (ctx == &PicoCpuFS68k) { + res |= 0x80; + WRITE_BYTE_F(adr, res); + } +#endif + + POST_IO +#ifdef USE_CYCLONE_TIMING +RET(24) +#else +RET(14) +#endif +} + +// 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; + +#ifdef PICODRIVE_HACK + if (ctx == &PicoCpuFS68k) { + res |= 0x80; + WRITE_BYTE_F(adr, res); + } +#endif + + POST_IO +#ifdef USE_CYCLONE_TIMING +RET(22) +#else +RET(12) +#endif +} + +// 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; + +#ifdef PICODRIVE_HACK + if (ctx == &PicoCpuFS68k) { + res |= 0x80; + WRITE_BYTE_F(adr, res); + } +#endif + + POST_IO +#ifdef USE_CYCLONE_TIMING +RET(26) +#else +RET(16) +#endif +} + +// 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; + +#ifdef PICODRIVE_HACK + if (ctx == &PicoCpuFS68k) { + res |= 0x80; + WRITE_BYTE_F(adr, res); + } +#endif + + POST_IO +#ifdef USE_CYCLONE_TIMING +RET(18) +#else +RET(8) +#endif +} + +// 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; + +#ifdef PICODRIVE_HACK + if (ctx == &PicoCpuFS68k) { + res |= 0x80; + WRITE_BYTE_F(adr, res); + } +#endif + + POST_IO +#ifdef USE_CYCLONE_TIMING +RET(20) +#else +RET(8) +#endif +} + +// ILLEGAL +OPCODE(0x4AFC) +{ +#ifdef PICODRIVE_HACK + extern void SekFinishIdleDet(void); + SekFinishIdleDet(); +#endif + SET_PC(execute_exception(ctx, M68K_ILLEGAL_INSTRUCTION_EX, GET_PC-2, GET_SR)); +RET(0) +} + +// ILLEGAL A000-AFFF +OPCODE(0xA000) +{ + SET_PC(execute_exception(ctx, M68K_1010_EX, GET_PC-2, GET_SR)); +RET(0) +} + +// ILLEGAL F000-FFFF +OPCODE(0xF000) +{ + SET_PC(execute_exception(ctx, M68K_1111_EX, GET_PC-2, GET_SR)); +RET(0) // 4 already taken by exc. handler +} + +// 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 + ctx->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 + ctx->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 + ctx->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 + ctx->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 + ctx->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 + ctx->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 + GET_PC; + 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 + ctx->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 = GET_PC; + 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 + ctx->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 + ctx->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 + ctx->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 + ctx->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 + ctx->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 + ctx->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 + ctx->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 + ctx->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 + GET_PC; + 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 + ctx->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 = GET_PC; + 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 + ctx->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 + ctx->io_cycle_counter -= (adr - dst) * 2; +RET(12) +} + +// TRAP +OPCODE(0x4E40) +{ + SET_PC(execute_exception(ctx, M68K_TRAP_BASE_EX + (Opcode & 0xF), GET_PC, GET_SR)); +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) + { + SET_PC(execute_exception(ctx, M68K_PRIVILEGE_VIOLATION_EX, GET_PC-2, GET_SR)); + RET(4) + } + res = AREGu32((Opcode >> 0) & 7); + ASP = res; +RET(4) +} + +// MOVEUSPA +OPCODE(0x4E68) +{ + u32 adr, res; + u32 src, dst; + + if (!flag_S) + { + SET_PC(execute_exception(ctx, M68K_PRIVILEGE_VIOLATION_EX, GET_PC-2, GET_SR)); + RET(4) + } + res = ASP; + AREG((Opcode >> 0) & 7) = res; +RET(4) +} + +// RESET +OPCODE(0x4E70) +{ + u32 adr, res; + u32 src, dst; + + if (!flag_S) + { + SET_PC(execute_exception(ctx, M68K_PRIVILEGE_VIOLATION_EX, GET_PC-2, GET_SR)); + RET(4) + } + PRE_IO + if (ctx->reset_handler) ctx->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) + { + SET_PC(execute_exception(ctx, M68K_PRIVILEGE_VIOLATION_EX, GET_PC-2, GET_SR)); + RET(4) + } + FETCH_WORD(res); + res &= M68K_SR_MASK; + SET_SR(res) + if (!flag_S) + { + res = AREG(7); + AREG(7) = ASP; + ASP = res; + } + ctx->execinfo |= FM68K_HALTED; +RET0() +} + +// RTE +OPCODE(0x4E73) +{ + u32 adr, res; + u32 src, dst; + + if (!flag_S) + { + SET_PC(execute_exception(ctx, M68K_PRIVILEGE_VIOLATION_EX, GET_PC-2, GET_SR)); + 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 + ctx->execinfo &= ~(FM68K_EMULATE_GROUP_0|FM68K_EMULATE_TRACE|FM68K_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) + SET_PC(execute_exception(ctx, M68K_TRAPV_EX, GET_PC, GET_SR)); +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 = GET_PC; + 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 = GET_PC; + 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 = GET_PC; + 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 = GET_PC; + 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 = GET_PC; + 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 + GET_PC; + PC++; + { + u32 oldPC; + + oldPC = GET_PC; + 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 = GET_PC; + DECODE_EXT_WORD + { + u32 oldPC; + + oldPC = GET_PC; + 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 + GET_PC; + PC++; + SET_PC(adr) + CHECK_BRANCH_EXCEPTION(adr) +RET(10) +} + +// JMP +OPCODE(0x4EFB) +{ + u32 adr, res; + u32 src, dst; + + adr = GET_PC; + DECODE_EXT_WORD + SET_PC(adr) + CHECK_BRANCH_EXCEPTION(adr) +RET(14) +} + +// CHK +OPCODE(0x4180) +{ + s32 src, res; + + src = DREGs16((Opcode >> 0) & 7); + res = DREGs16((Opcode >> 9) & 7); + if ((res < 0) || (res > src)) + { + flag_N = res >> 8; + SET_PC(execute_exception(ctx, M68K_CHK_EX, GET_PC, GET_SR)); + } +RET(10) +} + +// CHK +OPCODE(0x4190) +{ + s32 src, res; + u32 adr; + + adr = AREG((Opcode >> 0) & 7); + PRE_IO + READSX_WORD_F(adr, src) + res = DREGs16((Opcode >> 9) & 7); + if ((res < 0) || (res > src)) + { + flag_N = res >> 8; + SET_PC(execute_exception(ctx, M68K_CHK_EX, GET_PC, GET_SR)); + } + POST_IO +RET(14) +} + +// CHK +OPCODE(0x4198) +{ + s32 src, res; + u32 adr; + + adr = AREG((Opcode >> 0) & 7); + AREG((Opcode >> 0) & 7) += 2; + PRE_IO + READSX_WORD_F(adr, src) + res = DREGs16((Opcode >> 9) & 7); + if ((res < 0) || (res > src)) + { + flag_N = res >> 8; + SET_PC(execute_exception(ctx, M68K_CHK_EX, GET_PC, GET_SR)); + } + POST_IO +RET(14) +} + +// CHK +OPCODE(0x41A0) +{ + s32 src, res; + u32 adr; + + adr = AREG((Opcode >> 0) & 7) - 2; + AREG((Opcode >> 0) & 7) = adr; + PRE_IO + READSX_WORD_F(adr, src) + res = DREGs16((Opcode >> 9) & 7); + if ((res < 0) || (res > src)) + { + flag_N = res >> 8; + SET_PC(execute_exception(ctx, M68K_CHK_EX, GET_PC, GET_SR)); + } + POST_IO +RET(16) +} + +// CHK +OPCODE(0x41A8) +{ + s32 src, res; + u32 adr; + + FETCH_SWORD(adr); + adr += AREG((Opcode >> 0) & 7); + PRE_IO + READSX_WORD_F(adr, src) + res = DREGs16((Opcode >> 9) & 7); + if ((res < 0) || (res > src)) + { + flag_N = res >> 8; + SET_PC(execute_exception(ctx, M68K_CHK_EX, GET_PC, GET_SR)); + } + POST_IO +RET(18) +} + +// CHK +OPCODE(0x41B0) +{ + s32 src, res; + u32 adr; + + adr = AREG((Opcode >> 0) & 7); + DECODE_EXT_WORD + PRE_IO + READSX_WORD_F(adr, src) + res = DREGs16((Opcode >> 9) & 7); + if ((res < 0) || (res > src)) + { + flag_N = res >> 8; + SET_PC(execute_exception(ctx, M68K_CHK_EX, GET_PC, GET_SR)); + } + POST_IO +RET(20) +} + +// CHK +OPCODE(0x41B8) +{ + s32 src, res; + u32 adr; + + FETCH_SWORD(adr); + PRE_IO + READSX_WORD_F(adr, src) + res = DREGs16((Opcode >> 9) & 7); + if ((res < 0) || (res > src)) + { + flag_N = res >> 8; + SET_PC(execute_exception(ctx, M68K_CHK_EX, GET_PC, GET_SR)); + } + POST_IO +RET(18) +} + +// CHK +OPCODE(0x41B9) +{ + s32 src, res; + u32 adr; + + FETCH_LONG(adr); + PRE_IO + READSX_WORD_F(adr, src) + res = DREGs16((Opcode >> 9) & 7); + if ((res < 0) || (res > src)) + { + flag_N = res >> 8; + SET_PC(execute_exception(ctx, M68K_CHK_EX, GET_PC, GET_SR)); + } + POST_IO +RET(22) +} + +// CHK +OPCODE(0x41BA) +{ + s32 src, res; + u32 adr; + + adr = GET_SWORD + GET_PC; + PC++; + PRE_IO + READSX_WORD_F(adr, src) + res = DREGs16((Opcode >> 9) & 7); + if ((res < 0) || (res > src)) + { + flag_N = res >> 8; + SET_PC(execute_exception(ctx, M68K_CHK_EX, GET_PC, GET_SR)); + } + POST_IO +RET(18) +} + +// CHK +OPCODE(0x41BB) +{ + s32 src, res; + u32 adr; + + adr = GET_PC; + DECODE_EXT_WORD + PRE_IO + READSX_WORD_F(adr, src) + res = DREGs16((Opcode >> 9) & 7); + if ((res < 0) || (res > src)) + { + flag_N = res >> 8; + SET_PC(execute_exception(ctx, M68K_CHK_EX, GET_PC, GET_SR)); + } + POST_IO +RET(20) +} + +// CHK +OPCODE(0x41BC) +{ + s32 src, res; + u32 adr; + + FETCH_SWORD(src); + res = DREGs16((Opcode >> 9) & 7); + if ((res < 0) || (res > src)) + { + flag_N = res >> 8; + SET_PC(execute_exception(ctx, M68K_CHK_EX, GET_PC, GET_SR)); + } + POST_IO +RET(14) +} + +// CHK +OPCODE(0x419F) +{ + s32 src, res; + u32 adr; + + adr = AREG(7); + AREG(7) += 2; + PRE_IO + READSX_WORD_F(adr, src) + res = DREGs16((Opcode >> 9) & 7); + if ((res < 0) || (res > src)) + { + flag_N = res >> 8; + SET_PC(execute_exception(ctx, M68K_CHK_EX, GET_PC, GET_SR)); + } + POST_IO +RET(14) +} + +// CHK +OPCODE(0x41A7) +{ + s32 src, res; + u32 adr; + + adr = AREG(7) - 2; + AREG(7) = adr; + PRE_IO + READSX_WORD_F(adr, src) + res = DREGs16((Opcode >> 9) & 7); + if ((res < 0) || (res > src)) + { + flag_N = res >> 8; + SET_PC(execute_exception(ctx, M68K_CHK_EX, GET_PC, GET_SR)); + } + 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 + GET_PC; + PC++; + res = adr; + AREG((Opcode >> 9) & 7) = res; +RET(8) +} + +// LEA +OPCODE(0x41FB) +{ + u32 adr, res; + u32 src, dst; + + adr = GET_PC; + 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; + + NOT_POLLING + + res = DREGu16((Opcode >> 0) & 7); + res--; + DREGu16((Opcode >> 0) & 7) = res; + if ((s32)res != -1) + { + u32 newPC; + + newPC = GET_PC; + newPC += GET_SWORD; + SET_PC(newPC); + CHECK_BRANCH_EXCEPTION(newPC) + RET(10) + } + PC++; +RET(14) +} + +// DBCC +OPCODE(0x52C8) +{ + u32 adr, res; + u32 src, dst; + + NOT_POLLING + + if ((!flag_NotZ) || (flag_C & 0x100)) + { + res = DREGu16((Opcode >> 0) & 7); + res--; + DREGu16((Opcode >> 0) & 7) = res; + if ((s32)res != -1) + { + u32 newPC; + + newPC = GET_PC; + 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; + + NOT_POLLING + + if (flag_NotZ && (!(flag_C & 0x100))) + { + res = DREGu16((Opcode >> 0) & 7); + res--; + DREGu16((Opcode >> 0) & 7) = res; + if ((s32)res != -1) + { + u32 newPC; + + newPC = GET_PC; + 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; + + NOT_POLLING + + if (flag_C & 0x100) + { + res = DREGu16((Opcode >> 0) & 7); + res--; + DREGu16((Opcode >> 0) & 7) = res; + if ((s32)res != -1) + { + u32 newPC; + + newPC = GET_PC; + 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; + + NOT_POLLING + + if (!(flag_C & 0x100)) + { + res = DREGu16((Opcode >> 0) & 7); + res--; + DREGu16((Opcode >> 0) & 7) = res; + if ((s32)res != -1) + { + u32 newPC; + + newPC = GET_PC; + 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; + + NOT_POLLING + + if (!flag_NotZ) + { + res = DREGu16((Opcode >> 0) & 7); + res--; + DREGu16((Opcode >> 0) & 7) = res; + if ((s32)res != -1) + { + u32 newPC; + + newPC = GET_PC; + 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; + + NOT_POLLING + + if (flag_NotZ) + { + res = DREGu16((Opcode >> 0) & 7); + res--; + DREGu16((Opcode >> 0) & 7) = res; + if ((s32)res != -1) + { + u32 newPC; + + newPC = GET_PC; + 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; + + NOT_POLLING + + if (flag_V & 0x80) + { + res = DREGu16((Opcode >> 0) & 7); + res--; + DREGu16((Opcode >> 0) & 7) = res; + if ((s32)res != -1) + { + u32 newPC; + + newPC = GET_PC; + 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; + + NOT_POLLING + + if (!(flag_V & 0x80)) + { + res = DREGu16((Opcode >> 0) & 7); + res--; + DREGu16((Opcode >> 0) & 7) = res; + if ((s32)res != -1) + { + u32 newPC; + + newPC = GET_PC; + 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; + + NOT_POLLING + + if (flag_N & 0x80) + { + res = DREGu16((Opcode >> 0) & 7); + res--; + DREGu16((Opcode >> 0) & 7) = res; + if ((s32)res != -1) + { + u32 newPC; + + newPC = GET_PC; + 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; + + NOT_POLLING + + if (!(flag_N & 0x80)) + { + res = DREGu16((Opcode >> 0) & 7); + res--; + DREGu16((Opcode >> 0) & 7) = res; + if ((s32)res != -1) + { + u32 newPC; + + newPC = GET_PC; + 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; + + NOT_POLLING + + if ((flag_N ^ flag_V) & 0x80) + { + res = DREGu16((Opcode >> 0) & 7); + res--; + DREGu16((Opcode >> 0) & 7) = res; + if ((s32)res != -1) + { + u32 newPC; + + newPC = GET_PC; + 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; + + NOT_POLLING + + if (!((flag_N ^ flag_V) & 0x80)) + { + res = DREGu16((Opcode >> 0) & 7); + res--; + DREGu16((Opcode >> 0) & 7) = res; + if ((s32)res != -1) + { + u32 newPC; + + newPC = GET_PC; + 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; + + NOT_POLLING + + 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 = GET_PC; + 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; + + NOT_POLLING + + 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 = GET_PC; + 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 +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; + ctx->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; + ctx->io_cycle_counter -= 2; + } +RET(8) +} + +// BCC +OPCODE(0x6401) +{ + u32 adr, res; + u32 src, dst; + + if (!(flag_C & 0x100)) + { + PC += ((s8)(Opcode & 0xFE)) >> 1; + ctx->io_cycle_counter -= 2; + } +RET(8) +} + +// BCC +OPCODE(0x6501) +{ + u32 adr, res; + u32 src, dst; + + if (flag_C & 0x100) + { + PC += ((s8)(Opcode & 0xFE)) >> 1; + ctx->io_cycle_counter -= 2; + } +RET(8) +} + +// BCC +OPCODE(0x6601) +{ + u32 adr, res; + u32 src, dst; + + if (flag_NotZ) + { + PC += ((s8)(Opcode & 0xFE)) >> 1; + ctx->io_cycle_counter -= 2; + } +RET(8) +} + +// BCC +OPCODE(0x6701) +{ + u32 adr, res; + u32 src, dst; + + if (!flag_NotZ) + { + PC += ((s8)(Opcode & 0xFE)) >> 1; + ctx->io_cycle_counter -= 2; + } +RET(8) +} + +// BCC +OPCODE(0x6801) +{ + u32 adr, res; + u32 src, dst; + + if (!(flag_V & 0x80)) + { + PC += ((s8)(Opcode & 0xFE)) >> 1; + ctx->io_cycle_counter -= 2; + } +RET(8) +} + +// BCC +OPCODE(0x6901) +{ + u32 adr, res; + u32 src, dst; + + if (flag_V & 0x80) + { + PC += ((s8)(Opcode & 0xFE)) >> 1; + ctx->io_cycle_counter -= 2; + } +RET(8) +} + +// BCC +OPCODE(0x6A01) +{ + u32 adr, res; + u32 src, dst; + + if (!(flag_N & 0x80)) + { + PC += ((s8)(Opcode & 0xFE)) >> 1; + ctx->io_cycle_counter -= 2; + } +RET(8) +} + +// BCC +OPCODE(0x6B01) +{ + u32 adr, res; + u32 src, dst; + + if (flag_N & 0x80) + { + PC += ((s8)(Opcode & 0xFE)) >> 1; + ctx->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; + ctx->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; + ctx->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; + ctx->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; + ctx->io_cycle_counter -= 2; + } +RET(8) +} + +// BCC16 +OPCODE(0x6200) +{ + u32 adr, res; + u32 src, dst; + + if (flag_NotZ && (!(flag_C & 0x100))) + { + u32 newPC; + + newPC = GET_PC; + 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 = GET_PC; + 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 = GET_PC; + 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 = GET_PC; + 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 = GET_PC; + 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 = GET_PC; + 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 = GET_PC; + 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 = GET_PC; + 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 = GET_PC; + 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 = GET_PC; + 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 = GET_PC; + 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 = GET_PC; + 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 = GET_PC; + 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 = GET_PC; + newPC += GET_SWORD; + SET_PC(newPC); + CHECK_BRANCH_EXCEPTION(newPC) + RET(10) + } + PC++; +RET(12) +} + +// BRA +OPCODE(0x6001) +{ +#ifdef FAMEC_CHECK_BRANCHES + u32 newPC = GET_PC; + 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 = GET_PC; + 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 = GET_PC; + 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 = GET_PC; + 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 + GET_PC; + 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 = GET_PC; + 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 + GET_PC; + 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 = GET_PC; + 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 + GET_PC; + 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 = GET_PC; + 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; + u32 corf = 0; + + src = DREGu8((Opcode >> 0) & 7); + dst = DREGu8((Opcode >> 9) & 7); + res = (dst & 0xF) - (src & 0xF) - ((flag_X >> M68K_SR_X_SFT) & 1); + if (res > 0xF) corf = 6; + res += (dst & 0xF0) - (src & 0xF0); + flag_V = res; + flag_X = flag_C = (s32)res < (s32)corf ? M68K_SR_C : 0; + if (res > 0xff) res += 0xA0; + res = (res - corf) & 0xFF; + flag_V &= ~res; + flag_NotZ |= res; + flag_N = res; + DREGu8((Opcode >> 9) & 7) = res; +RET(6) +} + +// SBCDM +OPCODE(0x8108) +{ + u32 adr, res; + u32 src, dst; + u32 corf = 0; + + 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 > 0xF) corf = 6; + res += (dst & 0xF0) - (src & 0xF0); + flag_V = res; + flag_X = flag_C = (s32)res < (s32)corf ? M68K_SR_C : 0; + if (res > 0xff) res += 0xA0; + res = (res - corf) & 0xFF; + flag_V &= ~res; + flag_NotZ |= res; + flag_N = res; + WRITE_BYTE_F(adr, res) + POST_IO +RET(18) +} + +// SBCD7M +OPCODE(0x810F) +{ + u32 adr, res; + u32 src, dst; + u32 corf = 0; + + 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 > 0xF) corf = 6; + res += (dst & 0xF0) - (src & 0xF0); + flag_V = res; + flag_X = flag_C = (s32)res < (s32)corf ? M68K_SR_C : 0; + if (res > 0xff) res += 0xA0; + res = (res - corf) & 0xFF; + flag_V &= ~res; + flag_NotZ |= res; + flag_N = res; + WRITE_BYTE_F(adr, res) + POST_IO +RET(18) +} + +// SBCDM7 +OPCODE(0x8F08) +{ + u32 adr, res; + u32 src, dst; + u32 corf = 0; + + 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 > 0xF) corf = 6; + res += (dst & 0xF0) - (src & 0xF0); + flag_V = res; + flag_X = flag_C = (s32)res < (s32)corf ? M68K_SR_C : 0; + if (res > 0xff) res += 0xA0; + res = (res - corf) & 0xFF; + flag_V &= ~res; + flag_NotZ |= res; + flag_N = res; + WRITE_BYTE_F(adr, res) + POST_IO +RET(18) +} + +// SBCD7M7 +OPCODE(0x8F0F) +{ + u32 adr, res; + u32 src, dst; + u32 corf = 0; + + 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 > 0xF) corf = 6; + res += (dst & 0xF0) - (src & 0xF0); + flag_V = res; + flag_X = flag_C = (s32)res < (s32)corf ? M68K_SR_C : 0; + if (res > 0xff) res += 0xA0; + res = (res - corf) & 0xFF; + flag_V &= ~res; + flag_NotZ |= res; + 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) + { + SET_PC(execute_exception(ctx, M68K_ZERO_DIVIDE_EX, GET_PC, GET_SR)); +#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) + { + SET_PC(execute_exception(ctx, M68K_ZERO_DIVIDE_EX, GET_PC, GET_SR)); +#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) + { + SET_PC(execute_exception(ctx, M68K_ZERO_DIVIDE_EX, GET_PC, GET_SR)); +#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) + { + SET_PC(execute_exception(ctx, M68K_ZERO_DIVIDE_EX, GET_PC, GET_SR)); +#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) + { + SET_PC(execute_exception(ctx, M68K_ZERO_DIVIDE_EX, GET_PC, GET_SR)); +#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) + { + SET_PC(execute_exception(ctx, M68K_ZERO_DIVIDE_EX, GET_PC, GET_SR)); +#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) + { + SET_PC(execute_exception(ctx, M68K_ZERO_DIVIDE_EX, GET_PC, GET_SR)); +#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) + { + SET_PC(execute_exception(ctx, M68K_ZERO_DIVIDE_EX, GET_PC, GET_SR)); +#ifdef USE_CYCLONE_TIMING_DIV +RET(152) +#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(152) +#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(152) +#else +RET(102) +#endif +} + +// DIVU +OPCODE(0x80FA) +{ + u32 adr, res; + u32 src, dst; + + adr = GET_SWORD + GET_PC; + PC++; + PRE_IO + READ_WORD_F(adr, src) + if (src == 0) + { + SET_PC(execute_exception(ctx, M68K_ZERO_DIVIDE_EX, GET_PC, GET_SR)); +#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 = GET_PC; + DECODE_EXT_WORD + PRE_IO + READ_WORD_F(adr, src) + if (src == 0) + { + SET_PC(execute_exception(ctx, M68K_ZERO_DIVIDE_EX, GET_PC, GET_SR)); +#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(0x80FC) +{ + u32 adr, res; + u32 src, dst; + + FETCH_WORD(src); + if (src == 0) + { + SET_PC(execute_exception(ctx, M68K_ZERO_DIVIDE_EX, GET_PC, GET_SR)); +#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) + { + SET_PC(execute_exception(ctx, M68K_ZERO_DIVIDE_EX, GET_PC, GET_SR)); +#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) + { + SET_PC(execute_exception(ctx, M68K_ZERO_DIVIDE_EX, GET_PC, GET_SR)); +#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) + { + SET_PC(execute_exception(ctx, M68K_ZERO_DIVIDE_EX, GET_PC, GET_SR)); +#ifdef USE_CYCLONE_TIMING_DIV +goto end81C0; +#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 end81C0; +#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 end81C0; +#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 +end81C0: ctx->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) + { + SET_PC(execute_exception(ctx, M68K_ZERO_DIVIDE_EX, GET_PC, GET_SR)); +#ifdef USE_CYCLONE_TIMING_DIV +goto end81D0; +#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 end81D0; +#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 end81D0; +#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 +end81D0: ctx->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) + { + SET_PC(execute_exception(ctx, M68K_ZERO_DIVIDE_EX, GET_PC, GET_SR)); +#ifdef USE_CYCLONE_TIMING_DIV +goto end81D8; +#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 end81D8; +#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 end81D8; +#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 +end81D8: ctx->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) + { + SET_PC(execute_exception(ctx, M68K_ZERO_DIVIDE_EX, GET_PC, GET_SR)); +#ifdef USE_CYCLONE_TIMING_DIV +goto end81E0; +#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 end81E0; +#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 end81E0; +#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 +end81E0: ctx->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) + { + SET_PC(execute_exception(ctx, M68K_ZERO_DIVIDE_EX, GET_PC, GET_SR)); +#ifdef USE_CYCLONE_TIMING_DIV +goto end81E8; +#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 end81E8; +#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 end81E8; +#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 +end81E8: ctx->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) + { + SET_PC(execute_exception(ctx, M68K_ZERO_DIVIDE_EX, GET_PC, GET_SR)); +#ifdef USE_CYCLONE_TIMING_DIV +goto end81F0; +#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 end81F0; +#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 end81F0; +#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 +end81F0: ctx->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) + { + SET_PC(execute_exception(ctx, M68K_ZERO_DIVIDE_EX, GET_PC, GET_SR)); +#ifdef USE_CYCLONE_TIMING_DIV +goto end81F8; +#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 end81F8; +#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 end81F8; +#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 +end81F8: ctx->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) + { + SET_PC(execute_exception(ctx, M68K_ZERO_DIVIDE_EX, GET_PC, GET_SR)); +#ifdef USE_CYCLONE_TIMING_DIV +goto end81F9; +#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 end81F9; +#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 end81F9; +#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 +end81F9: ctx->io_cycle_counter -= 50; +#endif +RET(120) +} + +// DIVS +OPCODE(0x81FA) +{ + u32 adr, res; + u32 src, dst; + + adr = GET_SWORD + GET_PC; + PC++; + PRE_IO + READSX_WORD_F(adr, src) + if (src == 0) + { + SET_PC(execute_exception(ctx, M68K_ZERO_DIVIDE_EX, GET_PC, GET_SR)); +#ifdef USE_CYCLONE_TIMING_DIV +goto end81FA; +#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 end81FA; +#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 end81FA; +#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 +end81FA: ctx->io_cycle_counter -= 50; +#endif +RET(116) +} + +// DIVS +OPCODE(0x81FB) +{ + u32 adr, res; + u32 src, dst; + + adr = GET_PC; + DECODE_EXT_WORD + PRE_IO + READSX_WORD_F(adr, src) + if (src == 0) + { + SET_PC(execute_exception(ctx, M68K_ZERO_DIVIDE_EX, GET_PC, GET_SR)); +#ifdef USE_CYCLONE_TIMING_DIV +goto end81FB; +#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 end81FB; +#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 end81FB; +#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 +end81FB: ctx->io_cycle_counter -= 50; +#endif +RET(118) +} + +// DIVS +OPCODE(0x81FC) +{ + u32 adr, res; + u32 src, dst; + + FETCH_SWORD(src); + if (src == 0) + { + SET_PC(execute_exception(ctx, M68K_ZERO_DIVIDE_EX, GET_PC, GET_SR)); +#ifdef USE_CYCLONE_TIMING_DIV +goto end81FC; +#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 end81FC; +#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 end81FC; +#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 +end81FC: ctx->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) + { + SET_PC(execute_exception(ctx, M68K_ZERO_DIVIDE_EX, GET_PC, GET_SR)); +#ifdef USE_CYCLONE_TIMING_DIV +goto end81DF; +#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 end81DF; +#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 end81DF; +#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 +end81DF: ctx->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) + { + SET_PC(execute_exception(ctx, M68K_ZERO_DIVIDE_EX, GET_PC, GET_SR)); +#ifdef USE_CYCLONE_TIMING_DIV +goto end81E7; +#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 end81E7; +#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 end81E7; +#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 +end81E7: ctx->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 +#if 0 +OPCODE(0x9008) +{ + u32 adr, res; + u32 src, dst; + + // can't read byte from Ax registers ! + ctx->execinfo |= M68K_FAULTED; + ctx->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) +} +#endif + +// 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 + GET_PC; + 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 = GET_PC; + 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 + GET_PC; + 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 = GET_PC; + 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 + GET_PC; + 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 = GET_PC; + 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 +#ifdef USE_CYCLONE_TIMING +RET(12) +#else +RET(10) +#endif +} + +// 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 +#ifdef USE_CYCLONE_TIMING +RET(12) +#else +RET(10) +#endif +} + +// 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 +#ifdef USE_CYCLONE_TIMING +RET(14) +#else +RET(12) +#endif +} + +// 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 +#ifdef USE_CYCLONE_TIMING +RET(16) +#else +RET(14) +#endif +} + +// 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 +#ifdef USE_CYCLONE_TIMING +RET(18) +#else +RET(16) +#endif +} + +// 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 +#ifdef USE_CYCLONE_TIMING +RET(16) +#else +RET(14) +#endif +} + +// 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 +#ifdef USE_CYCLONE_TIMING +RET(20) +#else +RET(18) +#endif +} + +// SUBA +OPCODE(0x90FA) +{ + u32 adr, res; + u32 src, dst; + + adr = GET_SWORD + GET_PC; + PC++; + PRE_IO + READSX_WORD_F(adr, src) + dst = AREGu32((Opcode >> 9) & 7); + res = dst - src; + AREG((Opcode >> 9) & 7) = res; + POST_IO +#ifdef USE_CYCLONE_TIMING +RET(16) +#else +RET(14) +#endif +} + +// SUBA +OPCODE(0x90FB) +{ + u32 adr, res; + u32 src, dst; + + adr = GET_PC; + 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 +#ifdef USE_CYCLONE_TIMING +RET(18) +#else +RET(16) +#endif +} + +// 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 +#ifdef USE_CYCLONE_TIMING +RET(12) +#else +RET(10) +#endif +} + +// 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 +#ifdef USE_CYCLONE_TIMING +RET(14) +#else +RET(12) +#endif +} + +// 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 + GET_PC; + 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 = GET_PC; + 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 +#if 0 +OPCODE(0xB008) +{ + u32 adr, res; + u32 src, dst; + + // can't read byte from Ax registers ! + ctx->execinfo |= M68K_FAULTED; + ctx->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) +} +#endif + +// 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 + GET_PC; + 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 = GET_PC; + 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 + GET_PC; + 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 = GET_PC; + 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 + GET_PC; + 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 = GET_PC; + 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 + GET_PC; + 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 = GET_PC; + 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 + GET_PC; + 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 = GET_PC; + 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 + GET_PC; + 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 = GET_PC; + 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 + GET_PC; + 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 = GET_PC; + 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 + GET_PC; + 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 = GET_PC; + 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; + u32 corf = 0; + + 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) corf = 6; + res += (dst & 0xF0) + (src & 0xF0); + flag_V = ~res; + res += corf; + if (res > 0x9F) + { + res -= 0xA0; + flag_X = flag_C = M68K_SR_C; + } + else flag_X = flag_C = 0; + flag_V &= res; + flag_NotZ |= res & 0xFF; + flag_N = res; + DREGu8((Opcode >> 9) & 7) = res; +RET(6) +} + +// ABCDM +OPCODE(0xC108) +{ + u32 adr, res; + u32 src, dst; + u32 corf = 0; + + 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) corf = 6; + res += (dst & 0xF0) + (src & 0xF0); + flag_V = ~res; + res += corf; + if (res > 0x9F) + { + res -= 0xA0; + flag_X = flag_C = M68K_SR_C; + } + else flag_X = flag_C = 0; + flag_V &= res; + 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; + u32 corf = 0; + + 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) corf = 6; + res += (dst & 0xF0) + (src & 0xF0); + flag_V = ~res; + res += corf; + if (res > 0x9F) + { + res -= 0xA0; + flag_X = flag_C = M68K_SR_C; + } + else flag_X = flag_C = 0; + flag_V &= res; + 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; + u32 corf = 0; + + 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) corf = 6; + res += (dst & 0xF0) + (src & 0xF0); + flag_V = ~res; + res += corf; + if (res > 0x9F) + { + res -= 0xA0; + flag_X = flag_C = M68K_SR_C; + } + else flag_X = flag_C = 0; + flag_V &= res; + 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; + u32 corf = 0; + + 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) corf = 6; + res += (dst & 0xF0) + (src & 0xF0); + flag_V = ~res; + res += corf; + if (res > 0x9F) + { + res -= 0xA0; + flag_X = flag_C = M68K_SR_C; + } + else flag_X = flag_C = 0; + flag_V &= res; + 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 + GET_PC; + 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 = GET_PC; + 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 + GET_PC; + 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 = GET_PC; + 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 +#if 0 +OPCODE(0xD008) +{ + u32 adr, res; + u32 src, dst; + + // can't read byte from Ax registers ! + ctx->execinfo |= M68K_FAULTED; + ctx->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) +} +#endif + +// 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 + GET_PC; + 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 = GET_PC; + 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 + GET_PC; + 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 = GET_PC; + 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 + GET_PC; + 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 = GET_PC; + 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 +#ifdef USE_CYCLONE_TIMING +RET(12) +#else +RET(10) +#endif +} + +// 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 +#ifdef USE_CYCLONE_TIMING +RET(12) +#else +RET(10) +#endif +} + +// 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 +#ifdef USE_CYCLONE_TIMING +RET(14) +#else +RET(12) +#endif +} + +// 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 +#ifdef USE_CYCLONE_TIMING +RET(16) +#else +RET(14) +#endif +} + +// 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 +#ifdef USE_CYCLONE_TIMING +RET(18) +#else +RET(16) +#endif +} + +// 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 +#ifdef USE_CYCLONE_TIMING +RET(16) +#else +RET(14) +#endif +} + +// 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 +#ifdef USE_CYCLONE_TIMING +RET(20) +#else +RET(18) +#endif +} + +// ADDA +OPCODE(0xD0FA) +{ + u32 adr, res; + u32 src, dst; + + adr = GET_SWORD + GET_PC; + PC++; + PRE_IO + READSX_WORD_F(adr, src) + dst = AREGu32((Opcode >> 9) & 7); + res = dst + src; + AREG((Opcode >> 9) & 7) = res; + POST_IO +#ifdef USE_CYCLONE_TIMING +RET(16) +#else +RET(14) +#endif +} + +// ADDA +OPCODE(0xD0FB) +{ + u32 adr, res; + u32 src, dst; + + adr = GET_PC; + 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 +#ifdef USE_CYCLONE_TIMING +RET(18) +#else +RET(16) +#endif +} + +// 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 +#ifdef USE_CYCLONE_TIMING +RET(12) +#else +RET(10) +#endif +} + +// 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 +#ifdef USE_CYCLONE_TIMING +RET(14) +#else +RET(12) +#endif +} + +// 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 + GET_PC; + 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 = GET_PC; + 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; + ctx->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; + ctx->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; + ctx->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; + ctx->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; + ctx->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; + ctx->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; + ctx->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; + ctx->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; + ctx->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; + ctx->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; + ctx->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; + ctx->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; + ctx->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; + ctx->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; + ctx->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; + ctx->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; + ctx->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; + ctx->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; + ctx->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; + ctx->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; + ctx->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; + ctx->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; + ctx->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; + ctx->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) + { + ctx->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) + { + ctx->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) + { + ctx->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) + { + ctx->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) + { + ctx->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) + { + ctx->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) + { + ctx->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) + { + ctx->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) + { + ctx->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 >> (sft - 1)) << 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) + { + ctx->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) + { + ctx->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) + { + ctx->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) + { + ctx->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) + { + ctx->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) + { + ctx->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) + { + ctx->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) + { + ctx->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) + { + ctx->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) + { + ctx->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) + { + ctx->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) + { + ctx->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) + { + ctx->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) + { + ctx->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) + { + ctx->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) +} + +#ifdef PICODRIVE_HACK +#if 0 +#define UPDATE_IDLE_COUNT { \ + extern int idle_hit_counter; \ + idle_hit_counter++; \ +} +#else +#define UPDATE_IDLE_COUNT +#endif + +// BRA +OPCODE(0x6001_idle) +{ +#ifdef FAMEC_CHECK_BRANCHES + u32 newPC = GET_PC; + s8 offs=Opcode; + newPC += offs; + SET_PC(newPC); + CHECK_BRANCH_EXCEPTION(offs) +#else + PC += ((s8)(Opcode & 0xFE)) >> 1; +#endif + UPDATE_IDLE_COUNT +RET0() +} + +// BCC +OPCODE(0x6601_idle) +{ + if (flag_NotZ) + { + UPDATE_IDLE_COUNT + PC += ((s8)(Opcode & 0xFE)) >> 1; + //if (idle_hit) + RET0() + } +RET(8) +} + +OPCODE(0x6701_idle) +{ + if (!flag_NotZ) + { + UPDATE_IDLE_COUNT + PC += ((s8)(Opcode & 0xFE)) >> 1; + //if (idle_hit) + RET0() + } +RET(8) +} + + +extern int SekIsIdleReady(void); +extern int SekIsIdleCode(unsigned short *dst, int bytes); +extern int SekRegisterIdlePatch(unsigned int pc, int oldop, int newop, void *ctx); + +OPCODE(idle_detector_bcc8) +{ + int frame_count, cond_true, bytes, ret, newop; + u16 *dest_pc; + + dest_pc = PC + (((s8)(Opcode & 0xFE)) >> 1); + + if (!SekIsIdleReady()) + goto end; + + bytes = 0 - (s8)(Opcode & 0xFE) - 2; + ret = SekIsIdleCode(dest_pc, bytes); + newop = (Opcode & 0xfe) | 0x7100; + if (!ret) newop |= 0x200; + if ( Opcode & 0x0100) newop |= 0x400; // beq + if (!(Opcode & 0x0f00)) newop |= 0xc00; // bra + + ret = SekRegisterIdlePatch(GET_PC - 2, Opcode, newop, ctx); + switch (ret) + { + case 0: PC[-1] = newop; break; + case 1: break; + case 2: JumpTable[Opcode] = (Opcode & 0x0f00) ? + ((Opcode & 0x0100) ? CAST_OP(0x6701) : CAST_OP(0x6601)) : + CAST_OP(0x6001); break; + } + +end: + if ((Opcode & 0xff00) == 0x6000) cond_true = 1; + else cond_true = (Opcode & 0x0100) ? !flag_NotZ : flag_NotZ; // beq? + if (cond_true) + { + PC = dest_pc; + ctx->io_cycle_counter -= 2; + } +RET(8) +} + +#endif // PICODRIVE_HACK diff --git a/src/m68k/musashi/m68k.h b/src/m68k/musashi/m68k.h index e2f0b27..390b4d4 100644 --- a/src/m68k/musashi/m68k.h +++ b/src/m68k/musashi/m68k.h @@ -176,8 +176,8 @@ unsigned int m68k_read_disassembler_16 (unsigned int address); unsigned int m68k_read_disassembler_32 (unsigned int address); /* Write to anywhere */ -void m68k_write_memory_8(unsigned int address, unsigned int value); -void m68k_write_memory_16(unsigned int address, unsigned int value); +void m68k_write_memory_8(unsigned int address, unsigned char value); +void m68k_write_memory_16(unsigned int address, unsigned short value); void m68k_write_memory_32(unsigned int address, unsigned int value); /* Special call to simulate undocumented 68k behavior when move.l with a diff --git a/src/makefile.all b/src/makefile.all index 67b2e48..f484eca 100644 --- a/src/makefile.all +++ b/src/makefile.all @@ -13,12 +13,17 @@ EMU_SOURCES_C := $(EMU_PATH)/emulator.c \ $(EMU_PATH)/debug/sandbox.c #only use with ARMv4<->7, ARMv8 is its own architecture -ifeq ($(EMU_OPTIMIZE_FOR_ARM32), 1) - EMU_DEFINES += -DEMU_OPTIMIZE_FOR_ARM32 - ifeq ($(EMU_NEW_ASM_SYNTAX), 1) - EMU_SOURCES_ASM += $(EMU_PATH)/m68k/cyclone/CycloneNew.S +ifeq ($(EMU_FAST_CPU), 1) + EMU_DEFINES += -DEMU_FAST_CPU + ifeq ($(EMU_OPTIMIZE_FOR_ARM32), 1) + EMU_DEFINES += -DEMU_OPTIMIZE_FOR_ARM32 + ifeq ($(EMU_NEW_ASM_SYNTAX), 1) + EMU_SOURCES_ASM += $(EMU_PATH)/m68k/cyclone/CycloneNew.S + else + EMU_SOURCES_ASM += $(EMU_PATH)/m68k/cyclone/CycloneOld.S + endif else - EMU_SOURCES_ASM += $(EMU_PATH)/m68k/cyclone/CycloneOld.S + EMU_SOURCES_C += $(EMU_PATH)/m68k/fame/famec.c endif else EMU_SOURCES_C += $(EMU_PATH)/m68k/musashi/m68kops.c \