# HG changeset patch # User Michael Pavone # Date 1587283149 25200 # Node ID 2c1c88cd1a3f694971fcf64a91cf5d6cbff7b642 # Parent 374a5ae694e815b87900db6fccaa0db7b634b667# Parent f23e70fb6607b457fcd75ab8b2a7b1dc4c2e8abe Merge from default diff -r f23e70fb6607 -r 2c1c88cd1a3f Android.mk --- a/Android.mk Sat Apr 18 23:14:43 2020 -0700 +++ b/Android.mk Sun Apr 19 00:59:09 2020 -0700 @@ -8,12 +8,12 @@ LOCAL_C_INCLUDES := $(LOCAL_PATH)/$(SDL_PATH)/include -LOCAL_CFLAGS += -std=gnu99 -DX86_32 -DUSE_GLES +LOCAL_CFLAGS += -std=gnu99 -DUSE_GLES # Add your application source files here... LOCAL_SRC_FILES := $(SDL_PATH)/src/main/android/SDL_android_main.c \ - 68kinst.c debug.c gst.c psg.c z80_to_x86.c backend.c io.c render_sdl.c \ - tern.c backend_x86.c gdb_remote.c m68k_core.c romdb.c m68k_core_x86.c \ + 68kinst.c psg.c z80.c backend.c io.c render_sdl.c \ + tern.c m68k_core.c musashi/m68kops.c musashi/m68kcpu.c \ util.c wave.c blastem.c gen.c mem.c vdp.c ym2612.c config.c gen_x86.c \ terminal.c z80inst.c menu.c arena.c zlib/adler32.c zlib/compress.c \ zlib/crc32.c zlib/deflate.c zlib/gzclose.c zlib/gzlib.c zlib/gzread.c \ @@ -22,7 +22,7 @@ nuklear_ui/font_android.c nuklear_ui/blastem_nuklear.c nuklear_ui/sfnt.c \ ppm.c controller_info.c png.c system.c genesis.c sms.c serialize.c \ saves.c hash.c xband.c zip.c bindings.c jcart.c paths.c megawifi.c \ - nor.c i2c.c sega_mapper.c realtec.c multi_game.c net.c + nor.c i2c.c sega_mapper.c realtec.c multi_game.c net.c romdb.c LOCAL_SHARED_LIBRARIES := SDL2 diff -r f23e70fb6607 -r 2c1c88cd1a3f Makefile --- a/Makefile Sat Apr 18 23:14:43 2020 -0700 +++ b/Makefile Sun Apr 19 00:59:09 2020 -0700 @@ -64,7 +64,11 @@ CFLAGS+= -DUSE_GLES -DUSE_FBDEV -pthread else ifdef USE_GLES +ifdef GLES_LIB +LIBS=sdl2 +else LIBS=sdl2 glesv2 +endif CFLAGS+= -DUSE_GLES else LIBS=sdl2 glew gl @@ -181,7 +185,7 @@ ifdef NEW_CORE Z80OBJS=z80.o z80inst.o -M68KOBJS+= m68k.o +M68KOBJS+= m68k_core.o musashi/m68kops.o musashi/m68kcpu.o CFLAGS+= -DNEW_CORE else Z80OBJS=z80inst.o z80_to_x86.o @@ -211,8 +215,9 @@ RENDEROBJS+= $(LIBZOBJS) png.o endif -MAINOBJS=blastem.o system.o genesis.o debug.o gdb_remote.o vdp.o $(RENDEROBJS) io.o romdb.o hash.o menu.o xband.o \ - realtec.o i2c.o nor.o sega_mapper.o multi_game.o megawifi.o $(NET) serialize.o $(TERMINAL) $(CONFIGOBJS) gst.o \ +#MAINOBJS=blastem.o system.o genesis.o debug.o gdb_remote.o vdp.o $(RENDEROBJS) io.o romdb.o hash.o menu.o xband.o +MAINOBJS=blastem.o system.o genesis.o vdp.o $(RENDEROBJS) io.o romdb.o hash.o menu.o xband.o \ + realtec.o i2c.o nor.o sega_mapper.o multi_game.o megawifi.o $(NET) serialize.o $(TERMINAL) $(CONFIGOBJS) \ $(M68KOBJS) $(TRANSOBJS) $(AUDIOOBJS) saves.o zip.o bindings.o jcart.o LIBOBJS=libblastem.o system.o genesis.o debug.o gdb_remote.o vdp.o io.o romdb.o hash.o xband.o realtec.o \ @@ -233,7 +238,7 @@ CFLAGS+=-DX86_32 -m32 LDFLAGS+=-m32 else -$(error $(CPU) is not a supported architecture) +#$(error $(CPU) is not a supported architecture) endif endif @@ -345,7 +350,7 @@ m68k.c : m68k.cpu cpu_dsl.py ./cpu_dsl.py -d call $< > $@ - + %.c : %.cpu cpu_dsl.py ./cpu_dsl.py -d goto $< > $@ diff -r f23e70fb6607 -r 2c1c88cd1a3f android/jni/Android.mk --- a/android/jni/Android.mk Sat Apr 18 23:14:43 2020 -0700 +++ b/android/jni/Android.mk Sun Apr 19 00:59:09 2020 -0700 @@ -1,2 +1,1 @@ -APP_ABI=x86 include $(call all-subdir-makefiles) diff -r f23e70fb6607 -r 2c1c88cd1a3f android/jni/Application.mk --- a/android/jni/Application.mk Sat Apr 18 23:14:43 2020 -0700 +++ b/android/jni/Application.mk Sun Apr 19 00:59:09 2020 -0700 @@ -3,6 +3,5 @@ # See CPLUSPLUS-SUPPORT.html in the NDK documentation for more information # APP_STL := stlport_static -APP_ABI := x86 APP_PLATFORM := android-16 APP_OPTIM := release diff -r f23e70fb6607 -r 2c1c88cd1a3f android/src/org/libsdl/app/SDLActivity.java --- a/android/src/org/libsdl/app/SDLActivity.java Sat Apr 18 23:14:43 2020 -0700 +++ b/android/src/org/libsdl/app/SDLActivity.java Sun Apr 19 00:59:09 2020 -0700 @@ -4,6 +4,7 @@ import java.io.InputStream; import java.util.Arrays; import java.lang.reflect.Method; +import java.lang.NullPointerException; import java.util.Objects; import android.app.*; @@ -195,7 +196,12 @@ SDL.setContext(this); if (Build.VERSION.SDK_INT >= 11) { - mClipboardHandler = new SDLClipboardHandler_API11(); + try { + mClipboardHandler = new SDLClipboardHandler_API11(); + } catch (NullPointerException e) { + //deal with shitty emulation boxes + mClipboardHandler = new SDLClipboardHandler_Old(); + } } else { /* Before API 11, no clipboard notification (eg no SDL_CLIPBOARDUPDATE) */ mClipboardHandler = new SDLClipboardHandler_Old(); diff -r f23e70fb6607 -r 2c1c88cd1a3f backend.c --- a/backend.c Sat Apr 18 23:14:43 2020 -0700 +++ b/backend.c Sun Apr 19 00:59:09 2020 -0700 @@ -6,6 +6,7 @@ #include "backend.h" #include +#ifndef NEW_CORE deferred_addr * defer_address(deferred_addr * old_head, uint32_t address, uint8_t *dest) { deferred_addr * new_head = malloc(sizeof(deferred_addr)); @@ -50,6 +51,7 @@ } } } +#endif memmap_chunk const *find_map_chunk(uint32_t address, cpu_options *opts, uint16_t flags, uint32_t *size_sum) { @@ -160,7 +162,7 @@ if (!chunk) { return; } - uint32_t offset = (address - chunk->start) & chunk->mask; + uint32_t offset = address & chunk->mask; if (chunk->flags & MMAP_WRITE) { uint8_t *base; if (chunk->flags & MMAP_PTR_IDX) { @@ -210,6 +212,8 @@ return 0xFF; } offset /= 2; + } else if(opts->byte_swap) { + offset ^= 1; } return base[offset]; } @@ -244,6 +248,8 @@ return; } offset /= 2; + } else if(opts->byte_swap) { + offset ^= 1; } base[offset] = value; } diff -r f23e70fb6607 -r 2c1c88cd1a3f backend.h --- a/backend.h Sat Apr 18 23:14:43 2020 -0700 +++ b/backend.h Sun Apr 19 00:59:09 2020 -0700 @@ -8,7 +8,16 @@ #include #include +#ifndef NEW_CORE #include "gen.h" +#else +typedef uint8_t * code_ptr; +typedef struct { + code_ptr cur; + code_ptr last; + uint32_t stack_off; +} code_info; +#endif #define INVALID_OFFSET 0xFFFFFFFF #define EXTENSION_WORD 0xFFFFFFFE @@ -45,11 +54,14 @@ typedef struct { uint32_t flags; +#ifndef NEW_CORE native_map_slot *native_code_map; deferred_addr *deferred; code_info code; uint8_t **ram_inst_sizes; +#endif memmap_chunk const *memmap; +#ifndef NEW_CORE code_ptr save_context; code_ptr load_context; code_ptr handle_cycle_limit; @@ -57,27 +69,33 @@ code_ptr handle_code_write; code_ptr handle_align_error_write; code_ptr handle_align_error_read; +#endif system_str_fun_r8 debug_cmd_handler; uint32_t memmap_chunks; uint32_t address_mask; uint32_t max_address; uint32_t bus_cycles; uint32_t clock_divider; +#ifndef NEW_CORE uint32_t move_pc_off; uint32_t move_pc_size; int32_t mem_ptr_off; int32_t ram_flags_off; uint8_t ram_flags_shift; +#endif uint8_t address_size; uint8_t byte_swap; +#ifndef NEW_CORE int8_t context_reg; int8_t cycles; int8_t limit; int8_t scratch1; int8_t scratch2; uint8_t align_error_mask; +#endif } cpu_options; +#ifndef NEW_CORE typedef uint8_t * (*native_addr_func)(void * context, uint32_t address); deferred_addr * defer_address(deferred_addr * old_head, uint32_t address, uint8_t *dest); @@ -94,6 +112,7 @@ void patch_for_retranslate(cpu_options *opts, code_ptr native_address, code_ptr handler); code_ptr gen_mem_fun(cpu_options * opts, memmap_chunk const * memmap, uint32_t num_chunks, ftype fun_type, code_ptr *after_inc); +#endif void * get_native_pointer(uint32_t address, void ** mem_pointers, cpu_options * opts); void * get_native_write_pointer(uint32_t address, void ** mem_pointers, cpu_options * opts); uint16_t read_word(uint32_t address, void **mem_pointers, cpu_options *opts, void *context); diff -r f23e70fb6607 -r 2c1c88cd1a3f blastcpm.c --- a/blastcpm.c Sat Apr 18 23:14:43 2020 -0700 +++ b/blastcpm.c Sun Apr 19 00:59:09 2020 -0700 @@ -5,10 +5,10 @@ #include #include -#ifdef NEW_CORE +#ifndef NEW_CORE +#include "z80_to_x86.h" +#else #include "z80.h" -#else -#include "z80_to_x86.h" #endif #include "util.h" @@ -68,10 +68,10 @@ { time_t duration = time(NULL) - start; z80_context *z80 = context; -#ifdef NEW_CORE +#ifndef NEW_CORE + total_cycles += context->current_cycle; +#else total_cycles += z80->cycles; -#else - total_cycles += context->current_cycle; #endif printf("Effective clock speed: %f MHz\n", ((double)total_cycles) / (1000000.0 * duration)); exit(0); @@ -123,14 +123,13 @@ start = time(NULL); for(;;) { -#ifdef NEW_CORE - z80_execute(context, 1000000); + z80_run(context, 1000000); +#ifndef NEW_CORE + total_cycles += context->current_cycle; + context->current_cycle = 0; +#else total_cycles += context->cycles; context->cycles = 0; -#else - z80_run(context, 1000000); - total_cycles += context->current_cycle; - context->current_cycle = 0; #endif } diff -r f23e70fb6607 -r 2c1c88cd1a3f blastem.c --- a/blastem.c Sat Apr 18 23:14:43 2020 -0700 +++ b/blastem.c Sun Apr 19 00:59:09 2020 -0700 @@ -11,10 +11,10 @@ #include "system.h" #include "68kinst.h" #include "m68k_core.h" -#ifdef NEW_CORE +#ifndef NEW_CORE +#include "z80_to_x86.h" +#else #include "z80.h" -#else -#include "z80_to_x86.h" #endif #include "mem.h" #include "vdp.h" @@ -388,15 +388,19 @@ { if (game_system) { game_system->persist_save(game_system); +#ifndef NEW_CORE //swap to game context arena and mark all allocated pages in it free if (current_system == menu_system) { current_system->arena = set_current_arena(game_system->arena); } mark_all_free(); +#endif game_system->free_context(game_system); +#ifndef NEW_CORE } else if(current_system) { //start a new arena and save old one in suspended system context current_system->arena = start_new_arena(); +#endif } system_type stype = SYSTEM_UNKNOWN; if (!(cart.size = load_rom(path, &cart.buffer, &stype))) { @@ -463,11 +467,13 @@ debug_target = 1; } break; +#ifndef NEW_CORE case 'D': gdb_remote_init(); dtype = DEBUGGER_GDB; start_in_debugger = 1; break; +#endif case 'f': fullscreen = !fullscreen; break; @@ -693,7 +699,9 @@ current_system->enter_debugger = start_in_debugger && menu == debug_target; current_system->start_context(current_system, statefile); } else if (menu && game_system) { +#ifndef NEW_CORE current_system->arena = set_current_arena(game_system->arena); +#endif current_system = game_system; menu = 0; current_system->resume_context(current_system); @@ -703,7 +711,9 @@ ui_idle_loop(); #endif } else { +#ifndef NEW_CORE current_system->arena = set_current_arena(menu_system->arena); +#endif current_system = menu_system; menu = 1; } diff -r f23e70fb6607 -r 2c1c88cd1a3f debug.c diff -r f23e70fb6607 -r 2c1c88cd1a3f debug.h --- a/debug.h Sat Apr 18 23:14:43 2020 -0700 +++ b/debug.h Sun Apr 19 00:59:09 2020 -0700 @@ -3,10 +3,10 @@ #include #include "m68k_core.h" -#ifdef NEW_CORE +#ifndef NEW_CORE +#include "z80_to_x86.h" +#else #include "z80.h" -#else -#include "z80_to_x86.h" #endif typedef struct disp_def { diff -r f23e70fb6607 -r 2c1c88cd1a3f fib.s68 diff -r f23e70fb6607 -r 2c1c88cd1a3f gdb_remote.c --- a/gdb_remote.c Sat Apr 18 23:14:43 2020 -0700 +++ b/gdb_remote.c Sun Apr 19 00:59:09 2020 -0700 @@ -132,7 +132,7 @@ } } -uint8_t m68k_read_byte(m68k_context * context, uint32_t address) +static uint8_t m68k_read_byte(m68k_context * context, uint32_t address) { genesis_context *gen = context->system; @@ -150,7 +150,7 @@ return 0; } -void m68k_write_byte(m68k_context * context, uint32_t address, uint8_t value) +static void m68k_write_byte(m68k_context * context, uint32_t address, uint8_t value) { genesis_context *gen = context->system; //TODO: Use generated read/write functions so that memory map is properly respected diff -r f23e70fb6607 -r 2c1c88cd1a3f genesis.c --- a/genesis.c Sat Apr 18 23:14:43 2020 -0700 +++ b/genesis.c Sun Apr 19 00:59:09 2020 -0700 @@ -44,6 +44,7 @@ #define Z80_CYCLE cycles #define Z80_OPTS opts #define z80_handle_code_write(...) +#include "musashi/m68kcpu.h" #else #define Z80_CYCLE current_cycle #define Z80_OPTS options @@ -199,8 +200,10 @@ deserialize_buffer buffer; init_deserialize(&buffer, data, size); genesis_deserialize(&buffer, gen); +#ifndef NEW_CORE //HACK: Fix this once PC/IR is represented in a better way in 68K core gen->m68k->resume_pc = get_native_address_trans(gen->m68k, gen->m68k->last_prefetch_address); +#endif } uint16_t read_dma_value(uint32_t address) @@ -218,7 +221,12 @@ static uint16_t get_open_bus_value(system_header *system) { genesis_context *genesis = (genesis_context *)system; +#ifndef NEW_CORE return read_dma_value(genesis->m68k->last_prefetch_address/2); +#else + m68000_base_device *device = (m68000_base_device *)genesis->m68k; + return read_dma_value(device->pref_addr/2); +#endif } static void adjust_int_cycle(m68k_context * context, vdp_context * v_context) @@ -365,12 +373,14 @@ vdp_context * v_context = gen->vdp; z80_context * z_context = gen->z80; #ifdef REFRESH_EMULATION + if (context->current_cycle != last_sync_cycle) { //lame estimation of refresh cycle delay refresh_counter += context->current_cycle - last_sync_cycle; if (!gen->bus_busy) { context->current_cycle += REFRESH_DELAY * MCLKS_PER_68K * (refresh_counter / (MCLKS_PER_68K * REFRESH_INTERVAL)); } refresh_counter = refresh_counter % (MCLKS_PER_68K * REFRESH_INTERVAL); + } #endif uint32_t mclks = context->current_cycle; @@ -429,10 +439,12 @@ context->target_cycle = gen->reset_cycle; } if (address) { +#ifndef NEW_CORE if (gen->header.enter_debugger) { gen->header.enter_debugger = 0; debugger(context, address); } +#endif #ifdef NEW_CORE if (gen->header.save_state) { #else @@ -450,7 +462,9 @@ } #endif char *save_path = slot == SERIALIZE_SLOT ? NULL : get_slot_name(&gen->header, slot, use_native_states ? "state" : "gst"); +#ifndef NEW_CORE if (use_native_states || slot == SERIALIZE_SLOT) { +#endif serialize_buffer state; init_serialize(&state); genesis_serialize(gen, &state, address); @@ -463,12 +477,12 @@ save_to_file(&state, save_path); free(state.data); } +#ifndef NEW_CORE } else { save_gst(gen, save_path, address); } - if (slot != SERIALIZE_SLOT) { - debug_message("Saved state to %s\n", save_path); - } +#endif + printf("Saved state to %s\n", save_path); free(save_path); } else if(gen->header.save_state) { context->sync_cycle = context->current_cycle + 1; @@ -489,10 +503,12 @@ //printf("vdp_port write: %X, value: %X, cycle: %d\n", vdp_port, value, context->current_cycle); #ifdef REFRESH_EMULATION //do refresh check here so we can avoid adding a penalty for a refresh that happens during a VDP access + if (context->current_cycle - 4*MCLKS_PER_68K > last_sync_cycle) { refresh_counter += context->current_cycle - 4*MCLKS_PER_68K - last_sync_cycle; context->current_cycle += REFRESH_DELAY * MCLKS_PER_68K * (refresh_counter / (MCLKS_PER_68K * REFRESH_INTERVAL)); refresh_counter = refresh_counter % (MCLKS_PER_68K * REFRESH_INTERVAL); last_sync_cycle = context->current_cycle; + } #endif sync_components(context, 0); genesis_context * gen = context->system; @@ -627,11 +643,13 @@ vdp_port &= 0x1F; uint16_t value; #ifdef REFRESH_EMULATION - //do refresh check here so we can avoid adding a penalty for a refresh that happens during a VDP access - refresh_counter += context->current_cycle - 4*MCLKS_PER_68K - last_sync_cycle; - context->current_cycle += REFRESH_DELAY * MCLKS_PER_68K * (refresh_counter / (MCLKS_PER_68K * REFRESH_INTERVAL)); - refresh_counter = refresh_counter % (MCLKS_PER_68K * REFRESH_INTERVAL); - last_sync_cycle = context->current_cycle; + if (context->current_cycle - 4*MCLKS_PER_68K > last_sync_cycle) { + //do refresh check here so we can avoid adding a penalty for a refresh that happens during a VDP access + refresh_counter += context->current_cycle - 4*MCLKS_PER_68K - last_sync_cycle; + context->current_cycle += REFRESH_DELAY * MCLKS_PER_68K * (refresh_counter / (MCLKS_PER_68K * REFRESH_INTERVAL)); + refresh_counter = refresh_counter % (MCLKS_PER_68K * REFRESH_INTERVAL); + last_sync_cycle = context->current_cycle; + } #endif genesis_context *gen = context->system; vdp_context * v_context = gen->vdp; @@ -1192,7 +1210,7 @@ char *statepath = get_slot_name(system, slot, "state"); deserialize_buffer state; uint32_t pc = 0; - uint8_t ret; + uint8_t ret = 0; if (!gen->m68k->resume_pc) { system->delayed_load_slot = slot + 1; gen->m68k->should_return = 1; @@ -1206,17 +1224,23 @@ if (load_from_file(&state, statepath)) { genesis_deserialize(&state, gen); free(state.data); +#ifndef NEW_CORE //HACK pc = gen->m68k->last_prefetch_address; +#endif ret = 1; } else { +#ifndef NEW_CORE strcpy(statepath + strlen(statepath)-strlen("state"), "gst"); pc = load_gst(gen, statepath); ret = pc != 0; +#endif } +#ifndef NEW_CORE if (ret) { gen->m68k->resume_pc = get_native_address_trans(gen->m68k, pc); } +#endif done: free(statepath); return ret; @@ -1259,27 +1283,35 @@ if (load_from_file(&state, statefile)) { genesis_deserialize(&state, gen); free(state.data); +#ifndef NEW_CORE //HACK pc = gen->m68k->last_prefetch_address; +#endif } else { +#ifndef NEW_CORE pc = load_gst(gen, statefile); if (!pc) { fatal_error("Failed to load save state %s\n", statefile); } +#endif } printf("Loaded %s\n", statefile); +#ifndef NEW_CORE if (gen->header.enter_debugger) { gen->header.enter_debugger = 0; insert_breakpoint(gen->m68k, pc, gen->header.debugger_type == DEBUGGER_NATIVE ? debugger : gdb_debug_enter); } +#endif adjust_int_cycle(gen->m68k, gen->vdp); start_68k_context(gen->m68k, pc); } else { +#ifndef NEW_CORE if (gen->header.enter_debugger) { gen->header.enter_debugger = 0; uint32_t address = gen->cart[2] << 16 | gen->cart[3]; insert_breakpoint(gen->m68k, address, gen->header.debugger_type == DEBUGGER_NATIVE ? debugger : gdb_debug_enter); } +#endif m68k_reset(gen->m68k); } handle_reset_requests(gen); @@ -1535,10 +1567,6 @@ render_set_video_standard((gen->version_reg & HZ50) ? VID_PAL : VID_NTSC); gen->ym = malloc(sizeof(ym2612_context)); - char *fm = tern_find_ptr_default(model, "fm", "discrete 2612"); - if (!strcmp(fm + strlen(fm) -4, "3834")) { - system_opts |= YM_OPT_3834; - } ym_init(gen->ym, gen->master_clock, MCLKS_PER_YM, system_opts); gen->psg = malloc(sizeof(psg_context)); diff -r f23e70fb6607 -r 2c1c88cd1a3f genesis.h --- a/genesis.h Sat Apr 18 23:14:43 2020 -0700 +++ b/genesis.h Sun Apr 19 00:59:09 2020 -0700 @@ -9,10 +9,10 @@ #include #include "system.h" #include "m68k_core.h" -#ifdef NEW_CORE +#ifndef NEW_CORE +#include "z80_to_x86.h" +#else #include "z80.h" -#else -#include "z80_to_x86.h" #endif #include "ym2612.h" #include "vdp.h" diff -r f23e70fb6607 -r 2c1c88cd1a3f m68k_core.c --- a/m68k_core.c Sat Apr 18 23:14:43 2020 -0700 +++ b/m68k_core.c Sun Apr 19 00:59:09 2020 -0700 @@ -4,19 +4,26 @@ BlastEm is free software distributed under the terms of the GNU General Public License version 3 or greater. See COPYING for full license text. */ #include "m68k_core.h" +#ifndef NEW_CORE #include "m68k_internal.h" +#endif #include "68kinst.h" #include "backend.h" +#ifndef NEW_CORE #include "gen.h" +#endif #include "util.h" #include "serialize.h" +#ifdef NEW_CORE +#include "musashi/m68kcpu.h" +#endif #include #include #include #include char disasm_buf[1024]; - +#ifndef NEW_CORE int8_t native_reg(m68k_op_info * op, m68k_options * opts) { if (op->addr_mode == MODE_REG) { @@ -43,7 +50,7 @@ { return op->addr_mode == MODE_REG ? dreg_offset(op->params.regs.pri) : areg_offset(op->params.regs.pri); } - +#endif void m68k_print_regs(m68k_context * context) { printf("XNZVC\n%d%d%d%d%d\n", context->flags[0], context->flags[1], context->flags[2], context->flags[3], context->flags[4]); @@ -54,7 +61,7 @@ printf("a%d: %X\n", i, context->aregs[i]); } } - +#ifndef NEW_CORE void m68k_read_size(m68k_options *opts, uint8_t size) { switch (size) @@ -763,6 +770,7 @@ uint32_t slot = meta_off/1024; return opts->gen.ram_inst_sizes[slot][(meta_off/2)%512]; } +#endif uint8_t m68k_is_terminal(m68kinst * inst) { @@ -771,6 +779,7 @@ || (inst->op == M68K_BCC && inst->extra.cond == COND_TRUE); } +#ifndef NEW_CORE static void m68k_handle_deferred(m68k_context * context) { m68k_options * opts = context->options; @@ -779,9 +788,11 @@ translate_m68k_stream(opts->gen.deferred->address, context); } } +#endif uint16_t m68k_get_ir(m68k_context *context) { +#ifndef NEW_CORE uint32_t inst_addr = get_instruction_start(context->options, context->last_prefetch_address-2); uint16_t *native_addr = get_native_pointer(inst_addr, (void **)context->mem_pointers, &context->options->gen); if (native_addr) { @@ -789,6 +800,9 @@ } fprintf(stderr, "M68K: Failed to calculate value of IR. Last prefetch address: %X\n", context->last_prefetch_address); return 0xFFFF; +#else + return ((m68000_base_device *)context)->ir; +#endif } static m68k_debug_handler find_breakpoint(m68k_context *context, uint32_t address) @@ -816,7 +830,9 @@ .handler = bp_handler, .address = address }; +#ifndef NEW_CORE m68k_breakpoint_patch(context, address, bp_handler, NULL); +#endif } } @@ -834,6 +850,7 @@ return context; } +#ifndef NEW_CORE typedef enum { RAW_FUNC = 1, BINARY_ARITH, @@ -1144,6 +1161,7 @@ } return ret; } +#endif void remove_breakpoint(m68k_context * context, uint32_t address) { @@ -1157,6 +1175,7 @@ break; } } +#ifndef NEW_CORE code_ptr native = get_native_address(context->options, address); if (!native) { return; @@ -1166,42 +1185,59 @@ context->options->gen.code.last = native + MAX_NATIVE_SIZE; check_cycles_int(&context->options->gen, address); context->options->gen.code = tmp; +#endif } +m68k_context * sync_components(m68k_context * context, uint32_t address); void start_68k_context(m68k_context * context, uint32_t address) { + m68k_options * options = context->options; +#ifndef NEW_CORE code_ptr addr = get_native_address_trans(context, address); - m68k_options * options = context->options; options->start_context(addr, context); +#else + while (!context->should_return) { + if (context->current_cycle >= context->target_cycle) { + context->target_cycle += 4 * options->gen.clock_divider; + } + m68k_cpu_execute((m68000_base_device *)context); + if (!context->should_return) { + sync_components(context, 0); + } + } +#endif } void resume_68k(m68k_context *context) { +#ifndef NEW_CORE code_ptr addr = context->resume_pc; context->resume_pc = NULL; m68k_options * options = context->options; context->should_return = 0; options->start_context(addr, context); +#else + start_68k_context(context, 0); +#endif } void m68k_reset(m68k_context * context) { +#ifndef NEW_CORE //TODO: Actually execute the M68K reset vector rather than simulating some of its behavior uint16_t *reset_vec = get_native_pointer(0, (void **)context->mem_pointers, &context->options->gen); - if (!(context->status & 0x20)) { - //switching from user to system mode so swap stack pointers - context->aregs[8] = context->aregs[7]; - } - context->status = 0x27; context->aregs[7] = reset_vec[0] << 16 | reset_vec[1]; uint32_t address = reset_vec[2] << 16 | reset_vec[3]; - //interrupt mask may have changed so force a sync - sync_components(context, address); +#else + m68k_reset_cpu((m68000_base_device *)context); + uint32_t address = 0; +#endif start_68k_context(context, address); } void m68k_options_free(m68k_options *opts) { +#ifndef NEW_CORE for (uint32_t address = 0; address < opts->gen.address_mask; address += NATIVE_CHUNK_SIZE) { uint32_t chunk = address / NATIVE_CHUNK_SIZE; @@ -1217,15 +1253,39 @@ } free(opts->gen.ram_inst_sizes); free(opts->big_movem); +#endif free(opts); } +#ifdef NEW_CORE +void init_m68k_opts(m68k_options * opts, memmap_chunk * memmap, uint32_t num_chunks, uint32_t clock_divider) +{ + memset(opts, 0, sizeof(*opts)); + opts->gen.memmap = memmap; + opts->gen.memmap_chunks = num_chunks; + opts->gen.address_mask = 0xFFFFFF; + opts->gen.byte_swap = 1; + opts->gen.max_address = 0x1000000; + opts->gen.bus_cycles = 4; + opts->gen.clock_divider = clock_divider; +} +#endif m68k_context * init_68k_context(m68k_options * opts, m68k_reset_handler reset_handler) { +#ifndef NEW_CORE m68k_context * context = calloc(1, sizeof(m68k_context) + ram_size(&opts->gen) / (1 << opts->gen.ram_flags_shift) / 8); context->options = opts; +#else + m68000_base_device *device = malloc(sizeof(m68000_base_device));; + memset(device, 0, sizeof(m68000_base_device)); + m68k_context *context = &device->c; + context->options = opts; + m68k_init_cpu_m68000(device); + +#endif context->int_cycle = CYCLE_NEVER; + context->int_pending = 255; context->status = 0x27; context->reset_handler = (code_ptr)reset_handler; return context; @@ -1241,6 +1301,7 @@ { save_int32(buf, context->aregs[i]); } +#ifndef NEW_CORE save_int32(buf, pc); uint16_t sr = context->status << 3; for (int flag = 4; flag >= 0; flag--) { @@ -1248,6 +1309,11 @@ sr |= context->flags[flag] != 0; } save_int16(buf, sr); +#else + m68000_base_device *device = (m68000_base_device *)context; + save_int32(buf, device->pc); + save_int16(buf, m68ki_get_sr(device)); +#endif save_int32(buf, context->current_cycle); save_int32(buf, context->int_cycle); save_int8(buf, context->int_num); @@ -1266,6 +1332,7 @@ { context->aregs[i] = load_int32(buf); } +#ifndef NEW_CORE //hack until both PC and IR registers are represented properly context->last_prefetch_address = load_int32(buf); uint16_t sr = load_int16(buf); @@ -1275,9 +1342,40 @@ context->flags[flag] = sr & 1; sr >>= 1; } +#else + m68000_base_device *device = vcontext; + device->pc = load_int32(buf); + m68ki_set_sr_noint_nosp(device, load_int16(buf)); +#endif context->current_cycle = load_int32(buf); context->int_cycle = load_int32(buf); context->int_num = load_int8(buf); context->int_pending = load_int8(buf); context->trace_pending = load_int8(buf); } + +#ifdef NEW_CORE +void m68k_invalidate_code_range(m68k_context *context, uint32_t start, uint32_t end) +{ + m68000_base_device *device = (m68000_base_device *)context; + for(uint32_t address = start; address < end; address += 0x10000) + { + device->read_pointers[address >> 16] = NULL; + device->write_pointers[address >> 16] = NULL; + memmap_chunk const *chunk = find_map_chunk(address, &context->options->gen, 0, NULL); + if (!chunk || chunk->end < (address + 64*1024) || (chunk->flags & (MMAP_ONLY_ODD | MMAP_ONLY_EVEN)) || !chunk->buffer) { + continue; + } + void *ptr = get_native_pointer(address, (void **)context->mem_pointers, &context->options->gen); + if (!ptr) { + continue; + } + if (chunk->flags & MMAP_READ) { + device->read_pointers[address >> 16] = ptr; + } + if (chunk->flags & MMAP_WRITE) { + device->write_pointers[address >> 16] = ptr; + } + } +} +#endif diff -r f23e70fb6607 -r 2c1c88cd1a3f m68k_core.h --- a/m68k_core.h Sat Apr 18 23:14:43 2020 -0700 +++ b/m68k_core.h Sun Apr 19 00:59:09 2020 -0700 @@ -36,11 +36,13 @@ typedef struct { cpu_options gen; - +#ifndef NEW_CORE int8_t dregs[8]; int8_t aregs[8]; int8_t flag_regs[5]; +#endif FILE *address_log; +#ifndef NEW_CORE code_ptr read_16; code_ptr write_16; code_ptr read_8; @@ -64,6 +66,7 @@ uint32_t num_movem; uint32_t movem_storage; code_word prologue_start; +#endif } m68k_options; typedef struct m68k_context m68k_context; @@ -112,11 +115,15 @@ void m68k_options_free(m68k_options *opts); void insert_breakpoint(m68k_context * context, uint32_t address, m68k_debug_handler bp_handler); void remove_breakpoint(m68k_context * context, uint32_t address); -m68k_context * m68k_handle_code_write(uint32_t address, m68k_context * context); uint32_t get_instruction_start(m68k_options *opts, uint32_t address); uint16_t m68k_get_ir(m68k_context *context); void m68k_print_regs(m68k_context * context); void m68k_invalidate_code_range(m68k_context *context, uint32_t start, uint32_t end); +#ifndef NEW_CORE +m68k_context * m68k_handle_code_write(uint32_t address, m68k_context * context); +#else +#define m68k_handle_code_write(A, M) +#endif void m68k_serialize(m68k_context *context, uint32_t pc, serialize_buffer *buf); void m68k_deserialize(deserialize_buffer *buf, void *vcontext); diff -r f23e70fb6607 -r 2c1c88cd1a3f musashi/m68kcpu.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/musashi/m68kcpu.c Sun Apr 19 00:59:09 2020 -0700 @@ -0,0 +1,956 @@ +// license:BSD-3-Clause +// copyright-holders:Karl Stenerud +/* ======================================================================== */ +/* ========================= LICENSING & COPYRIGHT ======================== */ +/* ======================================================================== */ + +#if 0 +static const char copyright_notice[] = +"MUSASHI\n" +"Version 4.95 (2012-02-19)\n" +"A portable Motorola M68xxx/CPU32/ColdFire processor emulation engine.\n" +"Copyright Karl Stenerud. All rights reserved.\n" +; +#endif + + +/* ======================================================================== */ +/* ================================= NOTES ================================ */ +/* ======================================================================== */ + + + +/* ======================================================================== */ +/* ================================ INCLUDES ============================== */ +/* ======================================================================== */ + +#include "m68kcpu.h" +#include "m68kops.h" +#include +#include + + +/* ======================================================================== */ +/* ================================= DATA ================================= */ +/* ======================================================================== */ + +/* Used by shift & rotate instructions */ +const uint8_t m68ki_shift_8_table[65] = +{ + 0x00, 0x80, 0xc0, 0xe0, 0xf0, 0xf8, 0xfc, 0xfe, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff +}; +const uint16_t m68ki_shift_16_table[65] = +{ + 0x0000, 0x8000, 0xc000, 0xe000, 0xf000, 0xf800, 0xfc00, 0xfe00, 0xff00, + 0xff80, 0xffc0, 0xffe0, 0xfff0, 0xfff8, 0xfffc, 0xfffe, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff +}; +const uint32_t m68ki_shift_32_table[65] = +{ + 0x00000000, 0x80000000, 0xc0000000, 0xe0000000, 0xf0000000, 0xf8000000, + 0xfc000000, 0xfe000000, 0xff000000, 0xff800000, 0xffc00000, 0xffe00000, + 0xfff00000, 0xfff80000, 0xfffc0000, 0xfffe0000, 0xffff0000, 0xffff8000, + 0xffffc000, 0xffffe000, 0xfffff000, 0xfffff800, 0xfffffc00, 0xfffffe00, + 0xffffff00, 0xffffff80, 0xffffffc0, 0xffffffe0, 0xfffffff0, 0xfffffff8, + 0xfffffffc, 0xfffffffe, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, + 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, + 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, + 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, + 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, + 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff +}; + + +/* Number of clock cycles to use for exception processing. + * I used 4 for any vectors that are undocumented for processing times. + */ +const uint8_t m68ki_exception_cycle_table[7][256] = +{ + { /* 000 */ + 40, /* 0: Reset - Initial Stack Pointer */ + 4, /* 1: Reset - Initial Program Counter */ + 50, /* 2: Bus Error (unemulated) */ + 50, /* 3: Address Error (unemulated) */ + 34, /* 4: Illegal Instruction */ + 38, /* 5: Divide by Zero */ + 40, /* 6: CHK */ + 34, /* 7: TRAPV */ + 34, /* 8: Privilege Violation */ + 34, /* 9: Trace */ + 4, /* 10: 1010 */ + 4, /* 11: 1111 */ + 4, /* 12: RESERVED */ + 4, /* 13: Coprocessor Protocol Violation (unemulated) */ + 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 (unemulated) */ + 4, /* 49: FP Inexact Result (unemulated) */ + 4, /* 50: FP Divide by Zero (unemulated) */ + 4, /* 51: FP Underflow (unemulated) */ + 4, /* 52: FP Operand Error (unemulated) */ + 4, /* 53: FP Overflow (unemulated) */ + 4, /* 54: FP Signaling NAN (unemulated) */ + 4, /* 55: FP Unimplemented Data Type (unemulated) */ + 4, /* 56: MMU Configuration Error (unemulated) */ + 4, /* 57: MMU Illegal Operation Error (unemulated) */ + 4, /* 58: MMU Access Level Violation Error (unemulated) */ + 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 + }, + { /* 010 */ + 40, /* 0: Reset - Initial Stack Pointer */ + 4, /* 1: Reset - Initial Program Counter */ + 126, /* 2: Bus Error (unemulated) */ + 126, /* 3: Address Error (unemulated) */ + 38, /* 4: Illegal Instruction */ + 44, /* 5: Divide by Zero */ + 44, /* 6: CHK */ + 34, /* 7: TRAPV */ + 38, /* 8: Privilege Violation */ + 38, /* 9: Trace */ + 4, /* 10: 1010 */ + 4, /* 11: 1111 */ + 4, /* 12: RESERVED */ + 4, /* 13: Coprocessor Protocol Violation (unemulated) */ + 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 */ + 46, /* 24: Spurious Interrupt */ + 46, /* 25: Level 1 Interrupt Autovector */ + 46, /* 26: Level 2 Interrupt Autovector */ + 46, /* 27: Level 3 Interrupt Autovector */ + 46, /* 28: Level 4 Interrupt Autovector */ + 46, /* 29: Level 5 Interrupt Autovector */ + 46, /* 30: Level 6 Interrupt Autovector */ + 46, /* 31: Level 7 Interrupt Autovector */ + 38, /* 32: TRAP #0 */ + 38, /* 33: TRAP #1 */ + 38, /* 34: TRAP #2 */ + 38, /* 35: TRAP #3 */ + 38, /* 36: TRAP #4 */ + 38, /* 37: TRAP #5 */ + 38, /* 38: TRAP #6 */ + 38, /* 39: TRAP #7 */ + 38, /* 40: TRAP #8 */ + 38, /* 41: TRAP #9 */ + 38, /* 42: TRAP #10 */ + 38, /* 43: TRAP #11 */ + 38, /* 44: TRAP #12 */ + 38, /* 45: TRAP #13 */ + 38, /* 46: TRAP #14 */ + 38, /* 47: TRAP #15 */ + 4, /* 48: FP Branch or Set on Unknown Condition (unemulated) */ + 4, /* 49: FP Inexact Result (unemulated) */ + 4, /* 50: FP Divide by Zero (unemulated) */ + 4, /* 51: FP Underflow (unemulated) */ + 4, /* 52: FP Operand Error (unemulated) */ + 4, /* 53: FP Overflow (unemulated) */ + 4, /* 54: FP Signaling NAN (unemulated) */ + 4, /* 55: FP Unimplemented Data Type (unemulated) */ + 4, /* 56: MMU Configuration Error (unemulated) */ + 4, /* 57: MMU Illegal Operation Error (unemulated) */ + 4, /* 58: MMU Access Level Violation Error (unemulated) */ + 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 + }, + { /* 020 */ + 4, /* 0: Reset - Initial Stack Pointer */ + 4, /* 1: Reset - Initial Program Counter */ + 50, /* 2: Bus Error (unemulated) */ + 50, /* 3: Address Error (unemulated) */ + 20, /* 4: Illegal Instruction */ + 38, /* 5: Divide by Zero */ + 40, /* 6: CHK */ + 20, /* 7: TRAPV */ + 34, /* 8: Privilege Violation */ + 25, /* 9: Trace */ + 20, /* 10: 1010 */ + 20, /* 11: 1111 */ + 4, /* 12: RESERVED */ + 4, /* 13: Coprocessor Protocol Violation (unemulated) */ + 4, /* 14: Format Error */ + 30, /* 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 */ + 30, /* 24: Spurious Interrupt */ + 30, /* 25: Level 1 Interrupt Autovector */ + 30, /* 26: Level 2 Interrupt Autovector */ + 30, /* 27: Level 3 Interrupt Autovector */ + 30, /* 28: Level 4 Interrupt Autovector */ + 30, /* 29: Level 5 Interrupt Autovector */ + 30, /* 30: Level 6 Interrupt Autovector */ + 30, /* 31: Level 7 Interrupt Autovector */ + 20, /* 32: TRAP #0 */ + 20, /* 33: TRAP #1 */ + 20, /* 34: TRAP #2 */ + 20, /* 35: TRAP #3 */ + 20, /* 36: TRAP #4 */ + 20, /* 37: TRAP #5 */ + 20, /* 38: TRAP #6 */ + 20, /* 39: TRAP #7 */ + 20, /* 40: TRAP #8 */ + 20, /* 41: TRAP #9 */ + 20, /* 42: TRAP #10 */ + 20, /* 43: TRAP #11 */ + 20, /* 44: TRAP #12 */ + 20, /* 45: TRAP #13 */ + 20, /* 46: TRAP #14 */ + 20, /* 47: TRAP #15 */ + 4, /* 48: FP Branch or Set on Unknown Condition (unemulated) */ + 4, /* 49: FP Inexact Result (unemulated) */ + 4, /* 50: FP Divide by Zero (unemulated) */ + 4, /* 51: FP Underflow (unemulated) */ + 4, /* 52: FP Operand Error (unemulated) */ + 4, /* 53: FP Overflow (unemulated) */ + 4, /* 54: FP Signaling NAN (unemulated) */ + 4, /* 55: FP Unimplemented Data Type (unemulated) */ + 4, /* 56: MMU Configuration Error (unemulated) */ + 4, /* 57: MMU Illegal Operation Error (unemulated) */ + 4, /* 58: MMU Access Level Violation Error (unemulated) */ + 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 + }, + { /* 030 - not correct */ + 4, /* 0: Reset - Initial Stack Pointer */ + 4, /* 1: Reset - Initial Program Counter */ + 50, /* 2: Bus Error (unemulated) */ + 50, /* 3: Address Error (unemulated) */ + 20, /* 4: Illegal Instruction */ + 38, /* 5: Divide by Zero */ + 40, /* 6: CHK */ + 20, /* 7: TRAPV */ + 34, /* 8: Privilege Violation */ + 25, /* 9: Trace */ + 20, /* 10: 1010 */ + 20, /* 11: 1111 */ + 4, /* 12: RESERVED */ + 4, /* 13: Coprocessor Protocol Violation (unemulated) */ + 4, /* 14: Format Error */ + 30, /* 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 */ + 30, /* 24: Spurious Interrupt */ + 30, /* 25: Level 1 Interrupt Autovector */ + 30, /* 26: Level 2 Interrupt Autovector */ + 30, /* 27: Level 3 Interrupt Autovector */ + 30, /* 28: Level 4 Interrupt Autovector */ + 30, /* 29: Level 5 Interrupt Autovector */ + 30, /* 30: Level 6 Interrupt Autovector */ + 30, /* 31: Level 7 Interrupt Autovector */ + 20, /* 32: TRAP #0 */ + 20, /* 33: TRAP #1 */ + 20, /* 34: TRAP #2 */ + 20, /* 35: TRAP #3 */ + 20, /* 36: TRAP #4 */ + 20, /* 37: TRAP #5 */ + 20, /* 38: TRAP #6 */ + 20, /* 39: TRAP #7 */ + 20, /* 40: TRAP #8 */ + 20, /* 41: TRAP #9 */ + 20, /* 42: TRAP #10 */ + 20, /* 43: TRAP #11 */ + 20, /* 44: TRAP #12 */ + 20, /* 45: TRAP #13 */ + 20, /* 46: TRAP #14 */ + 20, /* 47: TRAP #15 */ + 4, /* 48: FP Branch or Set on Unknown Condition (unemulated) */ + 4, /* 49: FP Inexact Result (unemulated) */ + 4, /* 50: FP Divide by Zero (unemulated) */ + 4, /* 51: FP Underflow (unemulated) */ + 4, /* 52: FP Operand Error (unemulated) */ + 4, /* 53: FP Overflow (unemulated) */ + 4, /* 54: FP Signaling NAN (unemulated) */ + 4, /* 55: FP Unimplemented Data Type (unemulated) */ + 4, /* 56: MMU Configuration Error (unemulated) */ + 4, /* 57: MMU Illegal Operation Error (unemulated) */ + 4, /* 58: MMU Access Level Violation Error (unemulated) */ + 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 + }, + { /* 040 */ // TODO: these values are not correct + 4, /* 0: Reset - Initial Stack Pointer */ + 4, /* 1: Reset - Initial Program Counter */ + 50, /* 2: Bus Error (unemulated) */ + 50, /* 3: Address Error (unemulated) */ + 20, /* 4: Illegal Instruction */ + 38, /* 5: Divide by Zero */ + 40, /* 6: CHK */ + 20, /* 7: TRAPV */ + 34, /* 8: Privilege Violation */ + 25, /* 9: Trace */ + 20, /* 10: 1010 */ + 20, /* 11: 1111 */ + 4, /* 12: RESERVED */ + 4, /* 13: Coprocessor Protocol Violation (unemulated) */ + 4, /* 14: Format Error */ + 30, /* 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 */ + 30, /* 24: Spurious Interrupt */ + 30, /* 25: Level 1 Interrupt Autovector */ + 30, /* 26: Level 2 Interrupt Autovector */ + 30, /* 27: Level 3 Interrupt Autovector */ + 30, /* 28: Level 4 Interrupt Autovector */ + 30, /* 29: Level 5 Interrupt Autovector */ + 30, /* 30: Level 6 Interrupt Autovector */ + 30, /* 31: Level 7 Interrupt Autovector */ + 20, /* 32: TRAP #0 */ + 20, /* 33: TRAP #1 */ + 20, /* 34: TRAP #2 */ + 20, /* 35: TRAP #3 */ + 20, /* 36: TRAP #4 */ + 20, /* 37: TRAP #5 */ + 20, /* 38: TRAP #6 */ + 20, /* 39: TRAP #7 */ + 20, /* 40: TRAP #8 */ + 20, /* 41: TRAP #9 */ + 20, /* 42: TRAP #10 */ + 20, /* 43: TRAP #11 */ + 20, /* 44: TRAP #12 */ + 20, /* 45: TRAP #13 */ + 20, /* 46: TRAP #14 */ + 20, /* 47: TRAP #15 */ + 4, /* 48: FP Branch or Set on Unknown Condition (unemulated) */ + 4, /* 49: FP Inexact Result (unemulated) */ + 4, /* 50: FP Divide by Zero (unemulated) */ + 4, /* 51: FP Underflow (unemulated) */ + 4, /* 52: FP Operand Error (unemulated) */ + 4, /* 53: FP Overflow (unemulated) */ + 4, /* 54: FP Signaling NAN (unemulated) */ + 4, /* 55: FP Unimplemented Data Type (unemulated) */ + 4, /* 56: MMU Configuration Error (unemulated) */ + 4, /* 57: MMU Illegal Operation Error (unemulated) */ + 4, /* 58: MMU Access Level Violation Error (unemulated) */ + 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 + }, + { /* CPU32 */ + 4, /* 0: Reset - Initial Stack Pointer */ + 4, /* 1: Reset - Initial Program Counter */ + 50, /* 2: Bus Error (unemulated) */ + 50, /* 3: Address Error (unemulated) */ + 20, /* 4: Illegal Instruction */ + 38, /* 5: Divide by Zero */ + 40, /* 6: CHK */ + 20, /* 7: TRAPV */ + 34, /* 8: Privilege Violation */ + 25, /* 9: Trace */ + 20, /* 10: 1010 */ + 20, /* 11: 1111 */ + 4, /* 12: RESERVED */ + 4, /* 13: Coprocessor Protocol Violation (unemulated) */ + 4, /* 14: Format Error */ + 30, /* 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 */ + 30, /* 24: Spurious Interrupt */ + 30, /* 25: Level 1 Interrupt Autovector */ + 30, /* 26: Level 2 Interrupt Autovector */ + 30, /* 27: Level 3 Interrupt Autovector */ + 30, /* 28: Level 4 Interrupt Autovector */ + 30, /* 29: Level 5 Interrupt Autovector */ + 30, /* 30: Level 6 Interrupt Autovector */ + 30, /* 31: Level 7 Interrupt Autovector */ + 20, /* 32: TRAP #0 */ + 20, /* 33: TRAP #1 */ + 20, /* 34: TRAP #2 */ + 20, /* 35: TRAP #3 */ + 20, /* 36: TRAP #4 */ + 20, /* 37: TRAP #5 */ + 20, /* 38: TRAP #6 */ + 20, /* 39: TRAP #7 */ + 20, /* 40: TRAP #8 */ + 20, /* 41: TRAP #9 */ + 20, /* 42: TRAP #10 */ + 20, /* 43: TRAP #11 */ + 20, /* 44: TRAP #12 */ + 20, /* 45: TRAP #13 */ + 20, /* 46: TRAP #14 */ + 20, /* 47: TRAP #15 */ + 4, /* 48: FP Branch or Set on Unknown Condition (unemulated) */ + 4, /* 49: FP Inexact Result (unemulated) */ + 4, /* 50: FP Divide by Zero (unemulated) */ + 4, /* 51: FP Underflow (unemulated) */ + 4, /* 52: FP Operand Error (unemulated) */ + 4, /* 53: FP Overflow (unemulated) */ + 4, /* 54: FP Signaling NAN (unemulated) */ + 4, /* 55: FP Unimplemented Data Type (unemulated) */ + 4, /* 56: MMU Configuration Error (unemulated) */ + 4, /* 57: MMU Illegal Operation Error (unemulated) */ + 4, /* 58: MMU Access Level Violation Error (unemulated) */ + 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 + }, + { /* ColdFire - not correct */ + 4, /* 0: Reset - Initial Stack Pointer */ + 4, /* 1: Reset - Initial Program Counter */ + 50, /* 2: Bus Error (unemulated) */ + 50, /* 3: Address Error (unemulated) */ + 20, /* 4: Illegal Instruction */ + 38, /* 5: Divide by Zero */ + 40, /* 6: CHK */ + 20, /* 7: TRAPV */ + 34, /* 8: Privilege Violation */ + 25, /* 9: Trace */ + 20, /* 10: 1010 */ + 20, /* 11: 1111 */ + 4, /* 12: RESERVED */ + 4, /* 13: Coprocessor Protocol Violation (unemulated) */ + 4, /* 14: Format Error */ + 30, /* 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 */ + 30, /* 24: Spurious Interrupt */ + 30, /* 25: Level 1 Interrupt Autovector */ + 30, /* 26: Level 2 Interrupt Autovector */ + 30, /* 27: Level 3 Interrupt Autovector */ + 30, /* 28: Level 4 Interrupt Autovector */ + 30, /* 29: Level 5 Interrupt Autovector */ + 30, /* 30: Level 6 Interrupt Autovector */ + 30, /* 31: Level 7 Interrupt Autovector */ + 20, /* 32: TRAP #0 */ + 20, /* 33: TRAP #1 */ + 20, /* 34: TRAP #2 */ + 20, /* 35: TRAP #3 */ + 20, /* 36: TRAP #4 */ + 20, /* 37: TRAP #5 */ + 20, /* 38: TRAP #6 */ + 20, /* 39: TRAP #7 */ + 20, /* 40: TRAP #8 */ + 20, /* 41: TRAP #9 */ + 20, /* 42: TRAP #10 */ + 20, /* 43: TRAP #11 */ + 20, /* 44: TRAP #12 */ + 20, /* 45: TRAP #13 */ + 20, /* 46: TRAP #14 */ + 20, /* 47: TRAP #15 */ + 4, /* 48: FP Branch or Set on Unknown Condition (unemulated) */ + 4, /* 49: FP Inexact Result (unemulated) */ + 4, /* 50: FP Divide by Zero (unemulated) */ + 4, /* 51: FP Underflow (unemulated) */ + 4, /* 52: FP Operand Error (unemulated) */ + 4, /* 53: FP Overflow (unemulated) */ + 4, /* 54: FP Signaling NAN (unemulated) */ + 4, /* 55: FP Unimplemented Data Type (unemulated) */ + 4, /* 56: MMU Configuration Error (unemulated) */ + 4, /* 57: MMU Illegal Operation Error (unemulated) */ + 4, /* 58: MMU Access Level Violation Error (unemulated) */ + 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 + }, +}; + +const uint8_t m68ki_ea_idx_cycle_table[64] = +{ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, /* ..01.000 no memory indirect, base nullptr */ + 5, /* ..01..01 memory indirect, base nullptr, outer nullptr */ + 7, /* ..01..10 memory indirect, base nullptr, outer 16 */ + 7, /* ..01..11 memory indirect, base nullptr, outer 32 */ + 0, 5, 7, 7, 0, 5, 7, 7, 0, 5, 7, 7, + 2, /* ..10.000 no memory indirect, base 16 */ + 7, /* ..10..01 memory indirect, base 16, outer nullptr */ + 9, /* ..10..10 memory indirect, base 16, outer 16 */ + 9, /* ..10..11 memory indirect, base 16, outer 32 */ + 0, 7, 9, 9, 0, 7, 9, 9, 0, 7, 9, 9, + 6, /* ..11.000 no memory indirect, base 32 */ + 11, /* ..11..01 memory indirect, base 32, outer nullptr */ + 13, /* ..11..10 memory indirect, base 32, outer 16 */ + 13, /* ..11..11 memory indirect, base 32, outer 32 */ + 0, 11, 13, 13, 0, 11, 13, 13, 0, 11, 13, 13 +}; + + + +/*************************************************************************** + CPU STATE DESCRIPTION +***************************************************************************/ + +#define MASK_ALL (CPU_TYPE_000 | CPU_TYPE_008 | CPU_TYPE_010 | CPU_TYPE_EC020 | CPU_TYPE_020 | CPU_TYPE_EC030 | CPU_TYPE_030 | CPU_TYPE_EC040 | CPU_TYPE_040 | CPU_TYPE_FSCPU32 ) +#define MASK_24BIT_SPACE (CPU_TYPE_000 | CPU_TYPE_008 | CPU_TYPE_010 | CPU_TYPE_EC020) +#define MASK_32BIT_SPACE (CPU_TYPE_020 | CPU_TYPE_EC030 | CPU_TYPE_030 | CPU_TYPE_EC040 | CPU_TYPE_040 | CPU_TYPE_FSCPU32 ) +#define MASK_010_OR_LATER (CPU_TYPE_010 | CPU_TYPE_EC020 | CPU_TYPE_020 | CPU_TYPE_030 | CPU_TYPE_EC030 | CPU_TYPE_040 | CPU_TYPE_EC040 | CPU_TYPE_FSCPU32 ) +#define MASK_020_OR_LATER (CPU_TYPE_EC020 | CPU_TYPE_020 | CPU_TYPE_EC030 | CPU_TYPE_030 | CPU_TYPE_EC040 | CPU_TYPE_040 | CPU_TYPE_FSCPU32 ) +#define MASK_030_OR_LATER (CPU_TYPE_030 | CPU_TYPE_EC030 | CPU_TYPE_040 | CPU_TYPE_EC040) +#define MASK_040_OR_LATER (CPU_TYPE_040 | CPU_TYPE_EC040) + + + +/* ======================================================================== */ +/* ================================= API ================================== */ +/* ======================================================================== */ + + + +void m68k_cpu_execute(m68000_base_device *this) +{ + //this->initial_cycles = this->remaining_cycles; + + /* eat up any reset cycles */ + /*if (this->reset_cycles) { + int rc = this->reset_cycles; + this->reset_cycles = 0; + this->remaining_cycles -= rc; + + if (this->remaining_cycles <= 0) return; + }*/ + + /* See if interrupts came in */ + m68ki_check_interrupts(this); + + /* Make sure we're not stopped */ + if(!this->stopped) + { + /* Return point if we had an address error */ + /*check_address_error: + if (this->m_address_error==1) + { + this->m_address_error = 0; + try { + m68ki_exception_address_error(this); + } + catch(int error) + { + if (error==10) + { + this->m_address_error = 1; + REG_PPC(this) = REG_PC(this); + goto check_address_error; + } + else + throw; + } + if(stopped) + { + if (remaining_cycles > 0) + remaining_cycles = 0; + return; + } + }*/ + + + /* Main loop. Keep going until we run out of clock cycles */ + while (this->c.current_cycle < this->c.target_cycle) + { + /* Set tracing accodring to T1. (T0 is done inside instruction) */ + m68ki_trace_t1(this); /* auto-disable (see m68kcpu.h) */ + + /* Record previous program counter */ + REG_PPC(this) = REG_PC(this); + + + this->run_mode = RUN_MODE_NORMAL; + /* Read an instruction and call its handler */ + this->ir = m68ki_read_imm_16(this); + this->jump_table[this->ir](this); + this->c.current_cycle += this->cyc_instruction[this->ir]; + + /*} + catch (int error) + { + if (error==10) + { + m_address_error = 1; + goto check_address_error; + } + else + throw; + }*/ + + + /* Trace m68k_exception, if necessary */ + m68ki_exception_if_trace(this); /* auto-disable (see m68kcpu.h) */ + } + + /* set previous PC to current PC for the next entry into the loop */ + REG_PPC(this) = REG_PC(this); + } + else if (this->c.current_cycle < this->c.target_cycle) + this->c.current_cycle = this->c.target_cycle; + this->c.status = m68ki_get_sr(this) >> 8; +} + + + +void m68k_init_cpu_common(m68000_base_device *this) +{ + static uint32_t emulation_initialized = 0; + + + /* The first call to this function initializes the opcode handler jump table */ + if(!emulation_initialized) + { + m68ki_build_opcode_table(); + emulation_initialized = 1; + } + + + + //m_icountptr = &remaining_cycles; + this->c.current_cycle = 0; + +} + +void m68k_reset_cpu(m68000_base_device *this) +{ + + + /* Clear all stop levels and eat up all remaining cycles */ + this->stopped = 0; + + this->run_mode = RUN_MODE_BERR_AERR_RESET; + /* Go to supervisor mode */ + m68ki_set_sm_flag(this, SFLAG_SET | MFLAG_CLEAR); + + /* Invalidate the prefetch queue */ + /* Set to arbitrary number since our first fetch is from 0 */ + this->pref_addr = 0x1000; + + /* Read the initial stack pointer and program counter */ + m68ki_jump(this, 0); + REG_SP(this) = m68ki_read_imm_32(this); + REG_PC(this) = m68ki_read_imm_32(this); + m68ki_jump(this, REG_PC(this)); + + this->run_mode = RUN_MODE_NORMAL; + + this->c.current_cycle += this->cyc_exception[EXCEPTION_RESET]; + +} + +/**************************************************************************** + * 8-bit data memory interface + ****************************************************************************/ + +uint8_t m68ki_read_8(m68000_base_device *m68k, uint32_t address) +{ + address &= 0xFFFFFF; + uint32_t base = address >> 16; + if (m68k->read_pointers[base]) { + uint8_t *chunk = m68k->read_pointers[base]; + return chunk[(address ^ 1) & 0xFFFF]; + } + return read_byte(address, (void **)m68k->c.mem_pointers, &m68k->c.options->gen, &m68k->c); +} + +void m68ki_write_8(m68000_base_device *m68k, uint32_t address, uint8_t value) +{ + address &= 0xFFFFFF; + uint32_t base = address >> 16; + if (m68k->write_pointers[base]) { + uint8_t *chunk = m68k->write_pointers[base]; + chunk[(address ^ 1) & 0xFFFF] = value; + return; + } + write_byte(address, value, (void **)m68k->c.mem_pointers, &m68k->c.options->gen, &m68k->c); +} + +/**************************************************************************** + * 16-bit data memory interface + ****************************************************************************/ + +uint16_t m68ki_read_16(m68000_base_device *m68k, uint32_t address) +{ + address &= 0xFFFFFF; + uint32_t base = address >> 16; + if (m68k->read_pointers[base]) { + uint16_t *chunk = m68k->read_pointers[base]; + return chunk[address >> 1 & 0x7FFF]; + } + return read_word(address, (void **)m68k->c.mem_pointers, &m68k->c.options->gen, &m68k->c); +} + +void m68ki_write_16(m68000_base_device *m68k, uint32_t address, uint16_t value) +{ + address &= 0xFFFFFF; + uint32_t base = address >> 16; + if (m68k->write_pointers[base]) { + uint16_t *chunk = m68k->read_pointers[base]; + chunk[address >> 1 & 0x7FFF] = value; + return; + } + write_word(address, value, (void **)m68k->c.mem_pointers, &m68k->c.options->gen, &m68k->c); +} + + +/**************** + CPU Inits +****************/ + + +void m68k_init_cpu_m68000(m68000_base_device *this) +{ + m68k_init_cpu_common(this); + + this->cpu_type = CPU_TYPE_000; +// dasm_type = M68K_CPU_TYPE_68000; + + this->sr_mask = 0xa71f; /* T1 -- S -- -- I2 I1 I0 -- -- -- X N Z V C */ + this->jump_table = m68ki_instruction_jump_table[0]; + uint8_t *tmp = malloc(sizeof(m68ki_cycles[0])); + for (uint32_t i = 0; i < sizeof(m68ki_cycles[0]); i++) + { + tmp[i] = m68ki_cycles[0][i] * this->c.options->gen.clock_divider; + } + this->cyc_instruction = tmp; + tmp = malloc(sizeof(m68ki_exception_cycle_table[0])); + for (uint32_t i = 0; i < sizeof(m68ki_exception_cycle_table[0]); i++) + { + tmp[i] = m68ki_exception_cycle_table[0][i] * this->c.options->gen.clock_divider; + } + this->cyc_exception = tmp; + this->cyc_bcc_notake_b = -2 * this->c.options->gen.clock_divider; + this->cyc_bcc_notake_w = 2 * this->c.options->gen.clock_divider; + this->cyc_dbcc_f_noexp = -2 * this->c.options->gen.clock_divider; + this->cyc_dbcc_f_exp = 2 * this->c.options->gen.clock_divider; + this->cyc_scc_r_true = 2 * this->c.options->gen.clock_divider; + this->cyc_movem_w = 2;// * this->c.options->gen.clock_divider; + this->cyc_movem_l = 3;// * this->c.options->gen.clock_divider; + this->cyc_shift = 1;// * this->c.options->gen.clock_divider; + this->cyc_reset = 132 * this->c.options->gen.clock_divider; + this->int_mask = 7 << 8; + this->c.status = m68ki_get_sr(this) >> 8; + for (uint32_t address = 0; address < (24*1024*1024); address += 64*1024) + { + this->read_pointers[address >> 16] = NULL; + this->write_pointers[address >> 16] = NULL; + memmap_chunk const *chunk = find_map_chunk(address, &this->c.options->gen, 0, NULL); + if (!chunk || chunk->end < (address + 64*1024) || (chunk->flags & (MMAP_ONLY_ODD | MMAP_ONLY_EVEN)) || !chunk->buffer) { + continue; + } + void *ptr = get_native_pointer(address, (void **)this->c.mem_pointers, &this->c.options->gen); + if (!ptr) { + continue; + } + if (chunk->flags & MMAP_READ) { + this->read_pointers[address >> 16] = ptr; + } + if (chunk->flags & MMAP_WRITE) { + this->write_pointers[address >> 16] = ptr; + } + } +} + +/* Service an interrupt request and start exception processing */ +void m68ki_exception_interrupt(m68000_base_device *this, uint32_t int_level) +{ + uint32_t vector; + uint32_t sr; + uint32_t new_pc; + + if(CPU_TYPE_IS_000(this->cpu_type)) + { + this->instr_mode = INSTRUCTION_NO; + } + + /* Turn off the stopped state */ + this->stopped &= ~STOP_LEVEL_STOP; + + /* If we are halted, don't do anything */ + if(this->stopped) + return; + + if (this->c.int_pending == 255) { + this->c.int_pending = int_level; + return; + } else { + int_level = this->c.int_pending; + } + + /* Acknowledge the interrupt */ + this->c.int_ack = int_level; + this->c.int_pending = 255; + + vector = M68K_INT_ACK_AUTOVECTOR;//int_ack_callback(*this, int_level); + + /* Get the interrupt vector */ + if(vector == M68K_INT_ACK_AUTOVECTOR) { + /* Use the autovectors. This is the most commonly used implementation */ + vector = EXCEPTION_INTERRUPT_AUTOVECTOR+int_level; + uint32_t e_clock = this->c.current_cycle / this->c.options->gen.clock_divider; + this->c.current_cycle += ((9-4) + e_clock % 10) * this->c.options->gen.clock_divider; + } else if(vector == M68K_INT_ACK_SPURIOUS) + /* Called if no devices respond to the interrupt acknowledge */ + vector = EXCEPTION_SPURIOUS_INTERRUPT; + else if(vector > 255) + return; + + /* Start exception processing */ + sr = m68ki_init_exception(this); + + /* Set the interrupt mask to the level of the one being serviced */ + this->int_mask = int_level<<8; + + /* Get the new PC */ + new_pc = m68ki_read_32(this, (vector<<2) /*+ vbr*/); + + /* If vector is uninitialized, call the uninitialized interrupt vector */ + if(new_pc == 0) + new_pc = m68ki_read_32(this, (EXCEPTION_UNINITIALIZED_INTERRUPT<<2) /*+ vbr*/); + + /* Generate a stack frame */ + m68ki_stack_frame_0000(this, REG_PC(this), sr, vector); + if(this->m_flag && CPU_TYPE_IS_EC020_PLUS(this->cpu_type)) + { + /* Create throwaway frame */ + m68ki_set_sm_flag(this, this->s_flag); /* clear M */ + sr |= 0x2000; /* Same as SR in master stack frame except S is forced high */ + m68ki_stack_frame_0001(this, REG_PC(this), sr, vector); + } + + m68ki_jump(this, new_pc); + + /* Defer cycle counting until later */ + this->c.current_cycle += this->cyc_exception[vector]; +} + + diff -r f23e70fb6607 -r 2c1c88cd1a3f musashi/m68kcpu.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/musashi/m68kcpu.h Sun Apr 19 00:59:09 2020 -0700 @@ -0,0 +1,1490 @@ +// license:BSD-3-Clause +// copyright-holders:Karl Stenerud +/* ======================================================================== */ +/* ========================= LICENSING & COPYRIGHT ======================== */ +/* ======================================================================== */ +/* + * MUSASHI + * Version 4.50 + * + * A portable Motorola M680x0 processor emulation engine. + * Copyright Karl Stenerud. All rights reserved. + * + */ + + +#pragma once + +#ifndef __M68KCPU_H__ +#define __M68KCPU_H__ + +#include "../m68k_core.h" +typedef struct m68000_base_device m68000_base_device; +struct m68000_base_device { + m68k_context c; + uint32_t cpu_type; + uint32_t pc; + uint32_t ppc; + uint32_t stopped; /* Stopped state */ + uint32_t pref_addr; + uint32_t pref_data; + uint32_t sr_mask; /* Implemented status register bits */ + uint32_t instr_mode; /* Stores whether we are in instruction mode or group 0/1 exception mode */ + uint32_t run_mode; /* Stores whether we are processing a reset, bus error, address error, or something else */ + uint32_t s_flag; /* Supervisor */ + uint32_t m_flag; /* Master/Interrupt state */ + uint32_t x_flag; /* Extend */ + uint32_t n_flag; /* Negative */ + uint32_t not_z_flag; /* Zero, inverted for speedups */ + uint32_t v_flag; /* Overflow */ + uint32_t c_flag; /* Carry */ + uint32_t int_mask; /* I0-I2 */ + uint32_t t1_flag; /* Trace 1 */ + uint32_t tracing; + uint32_t ir; + uint32_t cyc_bcc_notake_b; + uint32_t cyc_bcc_notake_w; + uint32_t cyc_dbcc_f_noexp; + uint32_t cyc_dbcc_f_exp; + uint32_t cyc_scc_r_true; + uint32_t cyc_movem_w; + uint32_t cyc_movem_l; + uint32_t cyc_shift; + uint32_t cyc_reset; + + void (**jump_table)(m68000_base_device *m68k); + const uint8_t* cyc_instruction; + const uint8_t* cyc_exception; + void *read_pointers[24*1024/64]; + void *write_pointers[24*1024/64]; +}; + +/* Special interrupt acknowledge values. + * Use these as special returns from the interrupt acknowledge callback + * (specified later in this header). + */ + +/* Causes an interrupt autovector (0x18 + interrupt level) to be taken. + * This happens in a real 68K if VPA or AVEC is asserted during an interrupt + * acknowledge cycle instead of DTACK. + */ +#define M68K_INT_ACK_AUTOVECTOR 0xffffffff + +/* Causes the spurious interrupt vector (0x18) to be taken + * This happens in a real 68K if BERR is asserted during the interrupt + * acknowledge cycle (i.e. no devices responded to the acknowledge). + */ +#define M68K_INT_ACK_SPURIOUS 0xfffffffe + +#include + +#if defined(__sun__) && defined(__svr4__) +#undef REG_SP +#undef REG_PC +#undef REG_FP +#endif + +/* ======================================================================== */ +/* ==================== ARCHITECTURE-DEPENDANT DEFINES ==================== */ +/* ======================================================================== */ + +/* Check for > 32bit sizes */ +#define MAKE_INT_8(A) (int8_t)(A) +#define MAKE_INT_16(A) (int16_t)(A) +#define MAKE_INT_32(A) (int32_t)(A) + + +/* ======================================================================== */ +/* ============================ GENERAL DEFINES =========================== */ +/* ======================================================================== */ + +/* Exception Vectors handled by emulation */ +#define EXCEPTION_RESET 0 +#define EXCEPTION_BUS_ERROR 2 /* This one is not emulated! */ +#define EXCEPTION_ADDRESS_ERROR 3 /* This one is partially emulated (doesn't stack a proper frame yet) */ +#define EXCEPTION_ILLEGAL_INSTRUCTION 4 +#define EXCEPTION_ZERO_DIVIDE 5 +#define EXCEPTION_CHK 6 +#define EXCEPTION_TRAPV 7 +#define EXCEPTION_PRIVILEGE_VIOLATION 8 +#define EXCEPTION_TRACE 9 +#define EXCEPTION_1010 10 +#define EXCEPTION_1111 11 +#define EXCEPTION_FORMAT_ERROR 14 +#define EXCEPTION_UNINITIALIZED_INTERRUPT 15 +#define EXCEPTION_SPURIOUS_INTERRUPT 24 +#define EXCEPTION_INTERRUPT_AUTOVECTOR 24 +#define EXCEPTION_TRAP_BASE 32 + +/* Function codes set by CPU during data/address bus activity */ +#define FUNCTION_CODE_USER_DATA 1 +#define FUNCTION_CODE_USER_PROGRAM 2 +#define FUNCTION_CODE_SUPERVISOR_DATA 5 +#define FUNCTION_CODE_SUPERVISOR_PROGRAM 6 +#define FUNCTION_CODE_CPU_SPACE 7 + +/* CPU types for deciding what to emulate */ +#define CPU_TYPE_000 (0x00000001) +#define CPU_TYPE_008 (0x00000002) +#define CPU_TYPE_010 (0x00000004) +#define CPU_TYPE_EC020 (0x00000008) +#define CPU_TYPE_020 (0x00000010) +#define CPU_TYPE_EC030 (0x00000020) +#define CPU_TYPE_030 (0x00000040) +#define CPU_TYPE_EC040 (0x00000080) +#define CPU_TYPE_LC040 (0x00000100) +#define CPU_TYPE_040 (0x00000200) +#define CPU_TYPE_SCC070 (0x00000400) +#define CPU_TYPE_FSCPU32 (0x00000800) +#define CPU_TYPE_COLDFIRE (0x00001000) + +/* Different ways to stop the CPU */ +#define STOP_LEVEL_STOP 1 +#define STOP_LEVEL_HALT 2 + +/* Used for 68000 address error processing */ +#define INSTRUCTION_YES 0 +#define INSTRUCTION_NO 0x08 +#define MODE_READ 0x10 +#define MODE_WRITE 0 + +#define RUN_MODE_NORMAL 0 +#define RUN_MODE_BERR_AERR_RESET 1 + + + +#define M68K_CACR_IBE 0x10 // Instruction Burst Enable +#define M68K_CACR_CI 0x08 // Clear Instruction Cache +#define M68K_CACR_CEI 0x04 // Clear Entry in Instruction Cache +#define M68K_CACR_FI 0x02 // Freeze Instruction Cache +#define M68K_CACR_EI 0x01 // Enable Instruction Cache + +/* ======================================================================== */ +/* ================================ MACROS ================================ */ +/* ======================================================================== */ + + +/* ---------------------------- General Macros ---------------------------- */ + +/* Bit Isolation Macros */ +#define BIT_0(A) ((A) & 0x00000001) +#define BIT_1(A) ((A) & 0x00000002) +#define BIT_2(A) ((A) & 0x00000004) +#define BIT_3(A) ((A) & 0x00000008) +#define BIT_4(A) ((A) & 0x00000010) +#define BIT_5(A) ((A) & 0x00000020) +#define BIT_6(A) ((A) & 0x00000040) +#define BIT_7(A) ((A) & 0x00000080) +#define BIT_8(A) ((A) & 0x00000100) +#define BIT_9(A) ((A) & 0x00000200) +#define BIT_A(A) ((A) & 0x00000400) +#define BIT_B(A) ((A) & 0x00000800) +#define BIT_C(A) ((A) & 0x00001000) +#define BIT_D(A) ((A) & 0x00002000) +#define BIT_E(A) ((A) & 0x00004000) +#define BIT_F(A) ((A) & 0x00008000) +#define BIT_10(A) ((A) & 0x00010000) +#define BIT_11(A) ((A) & 0x00020000) +#define BIT_12(A) ((A) & 0x00040000) +#define BIT_13(A) ((A) & 0x00080000) +#define BIT_14(A) ((A) & 0x00100000) +#define BIT_15(A) ((A) & 0x00200000) +#define BIT_16(A) ((A) & 0x00400000) +#define BIT_17(A) ((A) & 0x00800000) +#define BIT_18(A) ((A) & 0x01000000) +#define BIT_19(A) ((A) & 0x02000000) +#define BIT_1A(A) ((A) & 0x04000000) +#define BIT_1B(A) ((A) & 0x08000000) +#define BIT_1C(A) ((A) & 0x10000000) +#define BIT_1D(A) ((A) & 0x20000000) +#define BIT_1E(A) ((A) & 0x40000000) +#define BIT_1F(A) ((A) & 0x80000000) + +/* Get the most significant bit for specific sizes */ +#define GET_MSB_8(A) ((A) & 0x80) +#define GET_MSB_9(A) ((A) & 0x100) +#define GET_MSB_16(A) ((A) & 0x8000) +#define GET_MSB_17(A) ((A) & 0x10000) +#define GET_MSB_32(A) ((A) & 0x80000000) +#define GET_MSB_33(A) ((A) & 0x100000000U) + +/* Isolate nibbles */ +#define LOW_NIBBLE(A) ((A) & 0x0f) +#define HIGH_NIBBLE(A) ((A) & 0xf0) + +/* These are used to isolate 8, 16, and 32 bit sizes */ +#define MASK_OUT_ABOVE_2(A) ((A) & 3) +#define MASK_OUT_ABOVE_8(A) ((A) & 0xff) +#define MASK_OUT_ABOVE_16(A) ((A) & 0xffff) +#define MASK_OUT_BELOW_2(A) ((A) & ~3) +#define MASK_OUT_BELOW_8(A) ((A) & ~0xff) +#define MASK_OUT_BELOW_16(A) ((A) & ~0xffff) + +/* No need to mask if we are 32 bit */ +#define MASK_OUT_ABOVE_32(A) ((A) & ((uint64_t)0xffffffffU)) +#define MASK_OUT_BELOW_32(A) ((A) & ~((uint64_t)0xffffffffU)) + +/* Shift & Rotate Macros. */ +#define LSL(A, C) ((A) << (C)) +#define LSR(A, C) ((A) >> (C)) + +/* We have to do this because the morons at ANSI decided that shifts +* by >= data size are undefined. +*/ +#define LSR_32(A, C) ((C) < 32 ? (A) >> (C) : 0) +#define LSL_32(A, C) ((C) < 32 ? (A) << (C) : 0) + +#define LSL_32_64(A, C) ((A) << (C)) +#define LSR_32_64(A, C) ((A) >> (C)) +#define ROL_33_64(A, C) (LSL_32_64(A, C) | LSR_32_64(A, 33-(C))) +#define ROR_33_64(A, C) (LSR_32_64(A, C) | LSL_32_64(A, 33-(C))) + +#define ROL_8(A, C) MASK_OUT_ABOVE_8(LSL(A, C) | LSR(A, 8-(C))) +#define ROL_9(A, C) (LSL(A, C) | LSR(A, 9-(C))) +#define ROL_16(A, C) MASK_OUT_ABOVE_16(LSL(A, C) | LSR(A, 16-(C))) +#define ROL_17(A, C) (LSL(A, C) | LSR(A, 17-(C))) +#define ROL_32(A, C) MASK_OUT_ABOVE_32(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) MASK_OUT_ABOVE_8(LSR(A, C) | LSL(A, 8-(C))) +#define ROR_9(A, C) (LSR(A, C) | LSL(A, 9-(C))) +#define ROR_16(A, C) MASK_OUT_ABOVE_16(LSR(A, C) | LSL(A, 16-(C))) +#define ROR_17(A, C) (LSR(A, C) | LSL(A, 17-(C))) +#define ROR_32(A, C) MASK_OUT_ABOVE_32(LSR_32(A, C) | LSL_32(A, 32-(C))) +#define ROR_33(A, C) (LSR_32(A, C) | LSL_32(A, 33-(C))) + + + +/* ------------------------------ CPU Access ------------------------------ */ + +/* Access the CPU registers */ +#define REG_DA(M) (M)->c.dregs /* easy access to data and address regs */ +#define REG_D(M) (M)->c.dregs +#define REG_A(M) (M)->c.aregs +#define REG_PPC(M) (M)->ppc +#define REG_PC(M) (M)->pc +#define REG_USP(M) (M)->c.aregs[8] +#define REG_ISP(M) (M)->c.aregs[7] +#define REG_MSP(M) (M)->c.aregs[7] +#define REG_SP(M) (M)->c.aregs[7] + + + +/* ----------------------------- Configuration ---------------------------- */ + +/* These defines are dependant on the configuration defines in m68kconf.h */ + +/* Disable certain comparisons if we're not using all CPU types */ +#define CPU_TYPE_IS_COLDFIRE(A) 0//((A) & (CPU_TYPE_COLDFIRE)) + +#define CPU_TYPE_IS_040_PLUS(A) 0//((A) & (CPU_TYPE_040 | CPU_TYPE_EC040)) +#define CPU_TYPE_IS_040_LESS(A) 1 + +#define CPU_TYPE_IS_030_PLUS(A) 0//((A) & (CPU_TYPE_030 | CPU_TYPE_EC030 | CPU_TYPE_040 | CPU_TYPE_EC040)) +#define CPU_TYPE_IS_030_LESS(A) 1 + +#define CPU_TYPE_IS_020_PLUS(A) 0//((A) & (CPU_TYPE_020 | CPU_TYPE_030 | CPU_TYPE_EC030 | CPU_TYPE_040 | CPU_TYPE_EC040 | CPU_TYPE_FSCPU32 | CPU_TYPE_COLDFIRE)) +#define CPU_TYPE_IS_020_LESS(A) 1 + +#define CPU_TYPE_IS_020_VARIANT(A) 0//((A) & (CPU_TYPE_EC020 | CPU_TYPE_020 | CPU_TYPE_FSCPU32)) + +#define CPU_TYPE_IS_EC020_PLUS(A) 0//((A) & (CPU_TYPE_EC020 | CPU_TYPE_020 | CPU_TYPE_030 | CPU_TYPE_EC030 | CPU_TYPE_040 | CPU_TYPE_EC040 | CPU_TYPE_FSCPU32 | CPU_TYPE_COLDFIRE)) +#define CPU_TYPE_IS_EC020_LESS(A) 1//((A) & (CPU_TYPE_000 | CPU_TYPE_008 | CPU_TYPE_010 | CPU_TYPE_EC020)) + +#define CPU_TYPE_IS_010(A) 0//((A) == CPU_TYPE_010) +#define CPU_TYPE_IS_010_PLUS(A) 0//((A) & (CPU_TYPE_010 | CPU_TYPE_EC020 | CPU_TYPE_020 | CPU_TYPE_EC030 | CPU_TYPE_030 | CPU_TYPE_040 | CPU_TYPE_EC040 | CPU_TYPE_FSCPU32 | CPU_TYPE_COLDFIRE)) +#define CPU_TYPE_IS_010_LESS(A) 1//((A) & (CPU_TYPE_000 | CPU_TYPE_008 | CPU_TYPE_010)) + +#define CPU_TYPE_IS_000(A) 1//((A) == CPU_TYPE_000 || (A) == CPU_TYPE_008) + + +/* -------------------------- EA / Operand Access ------------------------- */ + +/* + * The general instruction format follows this pattern: + * .... XXX. .... .YYY + * where XXX is register X and YYY is register Y + */ +/* Data Register Isolation */ +#define DX(M) (REG_D(M)[((M)->ir >> 9) & 7]) +#define DY(M) (REG_D(M)[(M)->ir & 7]) +/* Address Register Isolation */ +#define AX(M) (REG_A(M)[((M)->ir >> 9) & 7]) +#define AY(M) (REG_A(M)[(M)->ir & 7]) + + +/* Effective Address Calculations */ +#define EA_AY_AI_8(M) AY(M) /* address register indirect */ +#define EA_AY_AI_16(M) EA_AY_AI_8(M) +#define EA_AY_AI_32(M) EA_AY_AI_8(M) +#define EA_AY_PI_8(M) (AY(M)++) /* postincrement (size = byte) */ +#define EA_AY_PI_16(M) ((AY(M)+=2)-2) /* postincrement (size = word) */ +#define EA_AY_PI_32(M) ((AY(M)+=4)-4) /* postincrement (size = long) */ +#define EA_AY_PD_8(M) (--AY(M)) /* predecrement (size = byte) */ +#define EA_AY_PD_16(M) (AY(M)-=2) /* predecrement (size = word) */ +#define EA_AY_PD_32(M) (AY(M)-=4) /* predecrement (size = long) */ +#define EA_AY_DI_8(M) (AY(M)+MAKE_INT_16(m68ki_read_imm_16(M))) /* displacement */ +#define EA_AY_DI_16(M) EA_AY_DI_8(M) +#define EA_AY_DI_32(M) EA_AY_DI_8(M) +#define EA_AY_IX_8(M) m68ki_get_ea_ix(M, AY(M)) /* indirect + index */ +#define EA_AY_IX_16(M) EA_AY_IX_8(M) +#define EA_AY_IX_32(M) EA_AY_IX_8(M) + +#define EA_AX_AI_8(M) AX(M) +#define EA_AX_AI_16(M) EA_AX_AI_8(M) +#define EA_AX_AI_32(M) EA_AX_AI_8(M) +#define EA_AX_PI_8(M) (AX(M)++) +#define EA_AX_PI_16(M) ((AX(M)+=2)-2) +#define EA_AX_PI_32(M) ((AX(M)+=4)-4) +#define EA_AX_PD_8(M) (--AX(M)) +#define EA_AX_PD_16(M) (AX(M)-=2) +#define EA_AX_PD_32(M) (AX(M)-=4) +#define EA_AX_DI_8(M) (AX(M)+MAKE_INT_16(m68ki_read_imm_16(M))) +#define EA_AX_DI_16(M) EA_AX_DI_8(M) +#define EA_AX_DI_32(M) EA_AX_DI_8(M) +#define EA_AX_IX_8(M) m68ki_get_ea_ix(M, AX(M)) +#define EA_AX_IX_16(M) EA_AX_IX_8(M) +#define EA_AX_IX_32(M) EA_AX_IX_8(M) + +#define EA_A7_PI_8(m68k) ((REG_A(m68k)[7]+=2)-2) +#define EA_A7_PD_8(m68k) (REG_A(m68k)[7]-=2) + +#define EA_AW_8(m68k) MAKE_INT_16(m68ki_read_imm_16(m68k)) /* absolute word */ +#define EA_AW_16(m68k) EA_AW_8(m68k) +#define EA_AW_32(m68k) EA_AW_8(m68k) +#define EA_AL_8(m68k) m68ki_read_imm_32(m68k) /* absolute long */ +#define EA_AL_16(m68k) EA_AL_8(m68k) +#define EA_AL_32(m68k) EA_AL_8(m68k) +#define EA_PCDI_8(m68k) m68ki_get_ea_pcdi(m68k) /* pc indirect + displacement */ +#define EA_PCDI_16(m68k) EA_PCDI_8(m68k) +#define EA_PCDI_32(m68k) EA_PCDI_8(m68k) +#define EA_PCIX_8(m68k) m68ki_get_ea_pcix(m68k) /* pc indirect + index */ +#define EA_PCIX_16(m68k) EA_PCIX_8(m68k) +#define EA_PCIX_32(m68k) EA_PCIX_8(m68k) + + +#define OPER_I_8(m68k) m68ki_read_imm_8(m68k) +#define OPER_I_16(m68k) m68ki_read_imm_16(m68k) +#define OPER_I_32(m68k) m68ki_read_imm_32(m68k) + + + +/* --------------------------- Status Register ---------------------------- */ + +/* Flag Calculation Macros */ +#define CFLAG_8(A) (A) +#define CFLAG_16(A) ((A)>>8) + +#define CFLAG_ADD_32(S, D, R) (((S & D) | (~R & (S | D)))>>23) +#define CFLAG_SUB_32(S, D, R) (((S & R) | (~D & (S | R)))>>23) + +#define VFLAG_ADD_8(S, D, R) ((S^R) & (D^R)) +#define VFLAG_ADD_16(S, D, R) (((S^R) & (D^R))>>8) +#define VFLAG_ADD_32(S, D, R) (((S^R) & (D^R))>>24) + +#define VFLAG_SUB_8(S, D, R) ((S^D) & (R^D)) +#define VFLAG_SUB_16(S, D, R) (((S^D) & (R^D))>>8) +#define VFLAG_SUB_32(S, D, R) (((S^D) & (R^D))>>24) + +#define NFLAG_8(A) (A) +#define NFLAG_16(A) ((A)>>8) +#define NFLAG_32(A) ((A)>>24) +#define NFLAG_64(A) ((A)>>56) + +#define ZFLAG_8(A) MASK_OUT_ABOVE_8(A) +#define ZFLAG_16(A) MASK_OUT_ABOVE_16(A) +#define ZFLAG_32(A) MASK_OUT_ABOVE_32(A) + + +/* Flag values */ +#define NFLAG_SET 0x80 +#define NFLAG_CLEAR 0 +#define CFLAG_SET 0x100 +#define CFLAG_CLEAR 0 +#define XFLAG_SET 0x100 +#define XFLAG_CLEAR 0 +#define VFLAG_SET 0x80 +#define VFLAG_CLEAR 0 +#define ZFLAG_SET 0 +#define ZFLAG_CLEAR 0xffffffff + +#define SFLAG_SET 4 +#define SFLAG_CLEAR 0 +#define MFLAG_SET 2 +#define MFLAG_CLEAR 0 + +/* Turn flag values into 1 or 0 */ +#define XFLAG_AS_1(M) (((M)->x_flag>>8)&1) +#define NFLAG_AS_1(M) (((M)->n_flag>>7)&1) +#define VFLAG_AS_1(M) (((M)->v_flag>>7)&1) +#define ZFLAG_AS_1(M) (!(M)->not_z_flag) +#define CFLAG_AS_1(M) (((M)->c_flag>>8)&1) + + +/* Conditions */ +#define COND_CS(M) ((M)->c_flag&0x100) +#define COND_CC(M) (!COND_CS(M)) +#define COND_VS(M) ((M)->v_flag&0x80) +#define COND_VC(M) (!COND_VS(M)) +#define COND_NE(M) (M)->not_z_flag +#define COND_EQ(M) (!COND_NE(M)) +#define COND_MI(M) ((M)->n_flag&0x80) +#define COND_PL(M) (!COND_MI(M)) +#define COND_LT(M) (((M)->n_flag^(M)->v_flag)&0x80) +#define COND_GE(M) (!COND_LT(M)) +#define COND_HI(M) (COND_CC(M) && COND_NE(M)) +#define COND_LS(M) (COND_CS(M) || COND_EQ(M)) +#define COND_GT(M) (COND_GE(M) && COND_NE(M)) +#define COND_LE(M) (COND_LT(M) || COND_EQ(M)) + +/* Reversed conditions */ +#define COND_NOT_CS(M) COND_CC(M) +#define COND_NOT_CC(M) COND_CS(M) +#define COND_NOT_VS(M) COND_VC(M) +#define COND_NOT_VC(M) COND_VS(M) +#define COND_NOT_NE(M) COND_EQ(M) +#define COND_NOT_EQ(M) COND_NE(M) +#define COND_NOT_MI(M) COND_PL(M) +#define COND_NOT_PL(M) COND_MI(M) +#define COND_NOT_LT(M) COND_GE(M) +#define COND_NOT_GE(M) COND_LT(M) +#define COND_NOT_HI(M) COND_LS(M) +#define COND_NOT_LS(M) COND_HI(M) +#define COND_NOT_GT(M) COND_LE(M) +#define COND_NOT_LE(M) COND_GT(M) + +/* Not real conditions, but here for convenience */ +#define COND_XS(M) ((M)->x_flag&0x100) +#define COND_XC(M) (!COND_XS) + + +/* Get the condition code register */ +#define m68ki_get_ccr(M) ((COND_XS(M) >> 4) | \ + (COND_MI(M) >> 4) | \ + (COND_EQ(M) << 2) | \ + (COND_VS(M) >> 6) | \ + (COND_CS(M) >> 8)) + +/* Get the status register */ +#define m68ki_get_sr(M) ((M)->t1_flag | \ + /*(M)->t0_flag |*/ \ + ((M)->s_flag << 11) | \ + ((M)->m_flag << 11) | \ + (M)->int_mask | \ + m68ki_get_ccr(M)) + + + +/* ----------------------------- Read / Write ----------------------------- */ + +/* Read from the current address space */ +uint8_t m68ki_read_8(m68000_base_device *m68k, uint32_t address); +uint16_t m68ki_read_16(m68000_base_device *m68k, uint32_t address); +static inline uint32_t m68ki_read_32(m68000_base_device *m68k, uint32_t address) +{ + return m68ki_read_16(m68k, address) << 16 | m68ki_read_16(m68k, address+2); +} +/*#define m68ki_read_8(M, A) m68ki_read_8_fc (M, A, (M)->s_flag | FUNCTION_CODE_USER_DATA) +#define m68ki_read_16(M, A) m68ki_read_16_fc(M, A, (M)->s_flag | FUNCTION_CODE_USER_DATA) +#define m68ki_read_32(M, A) m68ki_read_32_fc(M, A, (M)->s_flag | FUNCTION_CODE_USER_DATA)*/ + +/* Write to the current data space */ +void m68ki_write_8(m68000_base_device *m68k, uint32_t address, uint8_t value); +void m68ki_write_16(m68000_base_device *m68k, uint32_t address, uint16_t value); +static inline void m68ki_write_32(m68000_base_device *m68k, uint32_t address, uint32_t value) +{ + m68ki_write_16(m68k, address, value >> 16); + m68ki_write_16(m68k, address+2, value); +} +/* +#define m68ki_write_8(M, A, V) m68ki_write_8_fc (M, A, (M)->s_flag | FUNCTION_CODE_USER_DATA, V) +#define m68ki_write_16(M, A, V) m68ki_write_16_fc(M, A, (M)->s_flag | FUNCTION_CODE_USER_DATA, V) +#define m68ki_write_32(M, A, V) m68ki_write_32_fc(M, A, (M)->s_flag | FUNCTION_CODE_USER_DATA, V) +#define m68ki_write_32_pd(M, A, V) m68ki_write_32_pd_fc(M, A, (M)->s_flag | FUNCTION_CODE_USER_DATA, V)*/ + +/* map read immediate 8 to read immediate 16 */ +#define m68ki_read_imm_8(M) MASK_OUT_ABOVE_8(m68ki_read_imm_16(M)) + + +/* ======================================================================== */ +/* =============================== PROTOTYPES ============================= */ +/* ======================================================================== */ + +void m68ki_exception_interrupt(m68000_base_device *m68k, uint32_t int_level); + + +extern const uint8_t m68ki_shift_8_table[]; +extern const uint16_t m68ki_shift_16_table[]; +extern const uint32_t m68ki_shift_32_table[]; +extern const uint8_t m68ki_exception_cycle_table[][256]; +extern const uint8_t m68ki_ea_idx_cycle_table[]; + +/* Read data immediately after the program counter */ +static inline uint32_t m68ki_read_imm_16(m68000_base_device *m68k); +static inline uint32_t m68ki_read_imm_32(m68000_base_device *m68k); + +/* Write data with specific function code */ +static inline void m68ki_write_8_fc (m68000_base_device *m68k, uint32_t address, uint32_t fc, uint32_t value); +static inline void m68ki_write_16_fc(m68000_base_device *m68k, uint32_t address, uint32_t fc, uint32_t value); +static inline void m68ki_write_32_fc(m68000_base_device *m68k, uint32_t address, uint32_t fc, uint32_t value); + +/* Indexed and PC-relative ea fetching */ +static inline uint32_t m68ki_get_ea_pcdi(m68000_base_device *m68k); +static inline uint32_t m68ki_get_ea_pcix(m68000_base_device *m68k); +static inline uint32_t m68ki_get_ea_ix(m68000_base_device *m68k, uint32_t An); + +/* Operand fetching */ +static inline uint32_t OPER_AY_AI_8(m68000_base_device *m68k); +static inline uint32_t OPER_AY_AI_16(m68000_base_device *m68k); +static inline uint32_t OPER_AY_AI_32(m68000_base_device *m68k); +static inline uint32_t OPER_AY_PI_8(m68000_base_device *m68k); +static inline uint32_t OPER_AY_PI_16(m68000_base_device *m68k); +static inline uint32_t OPER_AY_PI_32(m68000_base_device *m68k); +static inline uint32_t OPER_AY_PD_8(m68000_base_device *m68k); +static inline uint32_t OPER_AY_PD_16(m68000_base_device *m68k); +static inline uint32_t OPER_AY_PD_32(m68000_base_device *m68k); +static inline uint32_t OPER_AY_DI_8(m68000_base_device *m68k); +static inline uint32_t OPER_AY_DI_16(m68000_base_device *m68k); +static inline uint32_t OPER_AY_DI_32(m68000_base_device *m68k); +static inline uint32_t OPER_AY_IX_8(m68000_base_device *m68k); +static inline uint32_t OPER_AY_IX_16(m68000_base_device *m68k); +static inline uint32_t OPER_AY_IX_32(m68000_base_device *m68k); + +static inline uint32_t OPER_AX_AI_8(m68000_base_device *m68k); +static inline uint32_t OPER_AX_AI_16(m68000_base_device *m68k); +static inline uint32_t OPER_AX_AI_32(m68000_base_device *m68k); +static inline uint32_t OPER_AX_PI_8(m68000_base_device *m68k); +static inline uint32_t OPER_AX_PI_16(m68000_base_device *m68k); +static inline uint32_t OPER_AX_PI_32(m68000_base_device *m68k); +static inline uint32_t OPER_AX_PD_8(m68000_base_device *m68k); +static inline uint32_t OPER_AX_PD_16(m68000_base_device *m68k); +static inline uint32_t OPER_AX_PD_32(m68000_base_device *m68k); +static inline uint32_t OPER_AX_DI_8(m68000_base_device *m68k); +static inline uint32_t OPER_AX_DI_16(m68000_base_device *m68k); +static inline uint32_t OPER_AX_DI_32(m68000_base_device *m68k); +static inline uint32_t OPER_AX_IX_8(m68000_base_device *m68k); +static inline uint32_t OPER_AX_IX_16(m68000_base_device *m68k); +static inline uint32_t OPER_AX_IX_32(m68000_base_device *m68k); + +static inline uint32_t OPER_A7_PI_8(m68000_base_device *m68k); +static inline uint32_t OPER_A7_PD_8(m68000_base_device *m68k); + +static inline uint32_t OPER_AW_8(m68000_base_device *m68k); +static inline uint32_t OPER_AW_16(m68000_base_device *m68k); +static inline uint32_t OPER_AW_32(m68000_base_device *m68k); +static inline uint32_t OPER_AL_8(m68000_base_device *m68k); +static inline uint32_t OPER_AL_16(m68000_base_device *m68k); +static inline uint32_t OPER_AL_32(m68000_base_device *m68k); +static inline uint32_t OPER_PCDI_8(m68000_base_device *m68k); +static inline uint32_t OPER_PCDI_16(m68000_base_device *m68k); +static inline uint32_t OPER_PCDI_32(m68000_base_device *m68k); +static inline uint32_t OPER_PCIX_8(m68000_base_device *m68k); +static inline uint32_t OPER_PCIX_16(m68000_base_device *m68k); +static inline uint32_t OPER_PCIX_32(m68000_base_device *m68k); + +/* Stack operations */ +static inline void m68ki_push_16(m68000_base_device *m68k, uint32_t value); +static inline void m68ki_push_32(m68000_base_device *m68k, uint32_t value); +static inline uint32_t m68ki_pull_16(m68000_base_device *m68k); +static inline uint32_t m68ki_pull_32(m68000_base_device *m68k); + +/* Program flow operations */ +static inline void m68ki_jump(m68000_base_device *m68k, uint32_t new_pc); +static inline void m68ki_jump_vector(m68000_base_device *m68k, uint32_t vector); +static inline void m68ki_branch_8(m68000_base_device *m68k, uint32_t offset); +static inline void m68ki_branch_16(m68000_base_device *m68k, uint32_t offset); +static inline void m68ki_branch_32(m68000_base_device *m68k, uint32_t offset); + +/* Status register operations. */ +static inline void m68ki_set_s_flag(m68000_base_device *m68k, uint32_t value); /* Only bit 2 of value should be set (i.e. 4 or 0) */ +static inline void m68ki_set_sm_flag(m68000_base_device *m68k, uint32_t value); /* only bits 1 and 2 of value should be set */ +static inline void m68ki_set_ccr(m68000_base_device *m68k, uint32_t value); /* set the condition code register */ +static inline void m68ki_set_sr(m68000_base_device *m68k, uint32_t value); /* set the status register */ +static inline void m68ki_set_sr_noint(m68000_base_device *m68k, uint32_t value); /* set the status register */ + +/* Exception processing */ +static inline uint32_t m68ki_init_exception(m68000_base_device *m68k); /* Initial exception processing */ + +static inline void m68ki_stack_frame_3word(m68000_base_device *m68k, uint32_t pc, uint32_t sr); /* Stack various frame types */ +static inline void m68ki_stack_frame_buserr(m68000_base_device *m68k, uint32_t sr); + +static inline void m68ki_stack_frame_0000(m68000_base_device *m68k, uint32_t pc, uint32_t sr, uint32_t vector); +static inline void m68ki_stack_frame_0001(m68000_base_device *m68k, uint32_t pc, uint32_t sr, uint32_t vector); +static inline void m68ki_stack_frame_0010(m68000_base_device *m68k, uint32_t sr, uint32_t vector); +static inline void m68ki_stack_frame_1000(m68000_base_device *m68k, uint32_t pc, uint32_t sr, uint32_t vector); +static inline void m68ki_stack_frame_1010(m68000_base_device *m68k, uint32_t sr, uint32_t vector, uint32_t pc, uint32_t fault_address); +static inline void m68ki_stack_frame_1011(m68000_base_device *m68k, uint32_t sr, uint32_t vector, uint32_t pc, uint32_t fault_address); +static inline void m68ki_stack_frame_0111(m68000_base_device *m68k, uint32_t sr, uint32_t vector, uint32_t pc, uint32_t fault_address, uint8_t in_mmu); + +static inline void m68ki_exception_trap(m68000_base_device *m68k, uint32_t vector); +static inline void m68ki_exception_trapN(m68000_base_device *m68k, uint32_t vector); +static inline void m68ki_exception_trace(m68000_base_device *m68k); +static inline void m68ki_exception_privilege_violation(m68000_base_device *m68k); +static inline void m68ki_exception_1010(m68000_base_device *m68k); +static inline void m68ki_exception_1111(m68000_base_device *m68k); +static inline void m68ki_exception_illegal(m68000_base_device *m68k); +static inline void m68ki_exception_format_error(m68000_base_device *m68k); +static inline void m68ki_exception_address_error(m68000_base_device *m68k); + +static inline void m68ki_check_interrupts(m68000_base_device *m68k); /* ASG: check for interrupts */ + +/* quick disassembly (used for logging) */ +char* m68ki_disassemble_quick(unsigned int pc, unsigned int cpu_type); + +void m68k_cpu_execute(m68000_base_device *this); +void m68k_reset_cpu(m68000_base_device *this); +void m68k_init_cpu_m68000(m68000_base_device *this); + +#define m68ki_trace_t0(M) +#define m68ki_trace_t1(m68k) m68k->tracing = m68k->t1_flag +/* Clear all tracing */ +#define m68ki_clear_trace(m68k) m68k->tracing = 0 +/* Cause a trace exception if we are tracing */ +#define m68ki_exception_if_trace(m68k) if(m68k->tracing) m68ki_exception_trace(m68k) + + +/* ======================================================================== */ +/* =========================== UTILITY FUNCTIONS ========================== */ +/* ======================================================================== */ + + +/* Special call to simulate undocumented 68k behavior when move.l with a + * predecrement destination mode is executed. + * A real 68k first writes the high word to [address+2], and then writes the + * low word to [address]. + */ +static inline void m68kx_write_memory_32_pd(m68000_base_device *m68k, unsigned int address, unsigned int value) +{ + m68ki_write_16(m68k, address, value); + m68ki_write_16(m68k, address, value >> 16); +} + + +/* ---------------------------- Read Immediate ---------------------------- */ + + +/* Handles all immediate reads, does address error check, function code setting, + * and prefetching if they are enabled in m68kconf.h + */ +static inline uint32_t m68ki_read_imm_16(m68000_base_device *m68k) +{ + uint32_t result; + + if(REG_PC(m68k) != m68k->pref_addr) + { + m68k->pref_data = m68ki_read_16(m68k, REG_PC(m68k)); + m68k->pref_addr = REG_PC(m68k); + } + result = MASK_OUT_ABOVE_16(m68k->pref_data); + REG_PC(m68k) += 2; + + return result; +} + +static inline uint32_t m68ki_read_imm_32(m68000_base_device *m68k) +{ + uint32_t temp_val; + if(REG_PC(m68k) != m68k->pref_addr) + { + m68k->pref_addr = REG_PC(m68k); + m68k->pref_data = m68ki_read_16(m68k, m68k->pref_addr); + } + temp_val = MASK_OUT_ABOVE_16(m68k->pref_data); + REG_PC(m68k) += 2; + m68k->pref_addr = REG_PC(m68k); + m68k->pref_data = m68ki_read_16(m68k, m68k->pref_addr); + + temp_val = MASK_OUT_ABOVE_32((temp_val << 16) | MASK_OUT_ABOVE_16(m68k->pref_data)); + REG_PC(m68k) += 2; + m68k->pref_data = m68ki_read_16(m68k, REG_PC(m68k)); + m68k->pref_addr = REG_PC(m68k); + + return temp_val; +} + + +/* --------------------- Effective Address Calculation -------------------- */ + +/* The program counter relative addressing modes cause operands to be + * retrieved from program space, not data space. + */ +static inline uint32_t m68ki_get_ea_pcdi(m68000_base_device *m68k) +{ + uint32_t old_pc = REG_PC(m68k); + return old_pc + MAKE_INT_16(m68ki_read_imm_16(m68k)); +} + + +static inline uint32_t m68ki_get_ea_pcix(m68000_base_device *m68k) +{ + return m68ki_get_ea_ix(m68k, REG_PC(m68k)); +} + +/* Indexed addressing modes are encoded as follows: + * + * Base instruction format: + * F E D C B A 9 8 7 6 | 5 4 3 | 2 1 0 + * x x x x x x x x x x | 1 1 0 | BASE REGISTER (An) + * + * Base instruction format for destination EA in move instructions: + * F E D C | B A 9 | 8 7 6 | 5 4 3 2 1 0 + * x x x x | BASE REG | 1 1 0 | X X X X X X (An) + * + * Brief extension format: + * F | E D C | B | A 9 | 8 | 7 6 5 4 3 2 1 0 + * D/A | REGISTER | W/L | SCALE | 0 | DISPLACEMENT + * + * Full extension format: + * F E D C B A 9 8 7 6 5 4 3 2 1 0 + * D/A | REGISTER | W/L | SCALE | 1 | BS | IS | BD SIZE | 0 | I/IS + * BASE DISPLACEMENT (0, 16, 32 bit) (bd) + * OUTER DISPLACEMENT (0, 16, 32 bit) (od) + * + * D/A: 0 = Dn, 1 = An (Xn) + * W/L: 0 = W (sign extend), 1 = L (.SIZE) + * SCALE: 00=1, 01=2, 10=4, 11=8 (*SCALE) + * BS: 0=add base reg, 1=suppress base reg (An suppressed) + * IS: 0=add index, 1=suppress index (Xn suppressed) + * BD SIZE: 00=reserved, 01=NULL, 10=Word, 11=Long (size of bd) + * + * IS I/IS Operation + * 0 000 No Memory Indirect + * 0 001 indir prex with null outer + * 0 010 indir prex with word outer + * 0 011 indir prex with long outer + * 0 100 reserved + * 0 101 indir postx with null outer + * 0 110 indir postx with word outer + * 0 111 indir postx with long outer + * 1 000 no memory indirect + * 1 001 mem indir with null outer + * 1 010 mem indir with word outer + * 1 011 mem indir with long outer + * 1 100-111 reserved + */ +static inline uint32_t m68ki_get_ea_ix(m68000_base_device *m68k, uint32_t An) +{ + /* An = base register */ + uint32_t extension = m68ki_read_imm_16(m68k); + uint32_t Xn = 0; /* Index register */ + uint32_t bd = 0; /* Base Displacement */ + uint32_t od = 0; /* Outer Displacement */ + + /* Calculate index */ + Xn = REG_DA(m68k)[extension>>12]; /* Xn */ + if(!BIT_B(extension)) /* W/L */ + Xn = MAKE_INT_16(Xn); + + /* Add base register and displacement and return */ + return An + Xn + MAKE_INT_8(extension); +} + + +/* Fetch operands */ +static inline uint32_t OPER_AY_AI_8(m68000_base_device *m68k) {uint32_t ea = EA_AY_AI_8(m68k); return m68ki_read_8(m68k, ea); } +static inline uint32_t OPER_AY_AI_16(m68000_base_device *m68k) {uint32_t ea = EA_AY_AI_16(m68k); return m68ki_read_16(m68k, ea);} +static inline uint32_t OPER_AY_AI_32(m68000_base_device *m68k) {uint32_t ea = EA_AY_AI_32(m68k); return m68ki_read_32(m68k, ea);} +static inline uint32_t OPER_AY_PI_8(m68000_base_device *m68k) {uint32_t ea = EA_AY_PI_8(m68k); return m68ki_read_8(m68k, ea); } +static inline uint32_t OPER_AY_PI_16(m68000_base_device *m68k) {uint32_t ea = EA_AY_PI_16(m68k); return m68ki_read_16(m68k, ea);} +static inline uint32_t OPER_AY_PI_32(m68000_base_device *m68k) {uint32_t ea = EA_AY_PI_32(m68k); return m68ki_read_32(m68k, ea);} +static inline uint32_t OPER_AY_PD_8(m68000_base_device *m68k) {uint32_t ea = EA_AY_PD_8(m68k); return m68ki_read_8(m68k, ea); } +static inline uint32_t OPER_AY_PD_16(m68000_base_device *m68k) {uint32_t ea = EA_AY_PD_16(m68k); return m68ki_read_16(m68k, ea);} +static inline uint32_t OPER_AY_PD_32(m68000_base_device *m68k) {uint32_t ea = EA_AY_PD_32(m68k); return m68ki_read_32(m68k, ea);} +static inline uint32_t OPER_AY_DI_8(m68000_base_device *m68k) {uint32_t ea = EA_AY_DI_8(m68k); return m68ki_read_8(m68k, ea); } +static inline uint32_t OPER_AY_DI_16(m68000_base_device *m68k) {uint32_t ea = EA_AY_DI_16(m68k); return m68ki_read_16(m68k, ea);} +static inline uint32_t OPER_AY_DI_32(m68000_base_device *m68k) {uint32_t ea = EA_AY_DI_32(m68k); return m68ki_read_32(m68k, ea);} +static inline uint32_t OPER_AY_IX_8(m68000_base_device *m68k) {uint32_t ea = EA_AY_IX_8(m68k); return m68ki_read_8(m68k, ea); } +static inline uint32_t OPER_AY_IX_16(m68000_base_device *m68k) {uint32_t ea = EA_AY_IX_16(m68k); return m68ki_read_16(m68k, ea);} +static inline uint32_t OPER_AY_IX_32(m68000_base_device *m68k) {uint32_t ea = EA_AY_IX_32(m68k); return m68ki_read_32(m68k, ea);} + +static inline uint32_t OPER_AX_AI_8(m68000_base_device *m68k) {uint32_t ea = EA_AX_AI_8(m68k); return m68ki_read_8(m68k, ea); } +static inline uint32_t OPER_AX_AI_16(m68000_base_device *m68k) {uint32_t ea = EA_AX_AI_16(m68k); return m68ki_read_16(m68k, ea);} +static inline uint32_t OPER_AX_AI_32(m68000_base_device *m68k) {uint32_t ea = EA_AX_AI_32(m68k); return m68ki_read_32(m68k, ea);} +static inline uint32_t OPER_AX_PI_8(m68000_base_device *m68k) {uint32_t ea = EA_AX_PI_8(m68k); return m68ki_read_8(m68k, ea); } +static inline uint32_t OPER_AX_PI_16(m68000_base_device *m68k) {uint32_t ea = EA_AX_PI_16(m68k); return m68ki_read_16(m68k, ea);} +static inline uint32_t OPER_AX_PI_32(m68000_base_device *m68k) {uint32_t ea = EA_AX_PI_32(m68k); return m68ki_read_32(m68k, ea);} +static inline uint32_t OPER_AX_PD_8(m68000_base_device *m68k) {uint32_t ea = EA_AX_PD_8(m68k); return m68ki_read_8(m68k, ea); } +static inline uint32_t OPER_AX_PD_16(m68000_base_device *m68k) {uint32_t ea = EA_AX_PD_16(m68k); return m68ki_read_16(m68k, ea);} +static inline uint32_t OPER_AX_PD_32(m68000_base_device *m68k) {uint32_t ea = EA_AX_PD_32(m68k); return m68ki_read_32(m68k, ea);} +static inline uint32_t OPER_AX_DI_8(m68000_base_device *m68k) {uint32_t ea = EA_AX_DI_8(m68k); return m68ki_read_8(m68k, ea); } +static inline uint32_t OPER_AX_DI_16(m68000_base_device *m68k) {uint32_t ea = EA_AX_DI_16(m68k); return m68ki_read_16(m68k, ea);} +static inline uint32_t OPER_AX_DI_32(m68000_base_device *m68k) {uint32_t ea = EA_AX_DI_32(m68k); return m68ki_read_32(m68k, ea);} +static inline uint32_t OPER_AX_IX_8(m68000_base_device *m68k) {uint32_t ea = EA_AX_IX_8(m68k); return m68ki_read_8(m68k, ea); } +static inline uint32_t OPER_AX_IX_16(m68000_base_device *m68k) {uint32_t ea = EA_AX_IX_16(m68k); return m68ki_read_16(m68k, ea);} +static inline uint32_t OPER_AX_IX_32(m68000_base_device *m68k) {uint32_t ea = EA_AX_IX_32(m68k); return m68ki_read_32(m68k, ea);} + +static inline uint32_t OPER_A7_PI_8(m68000_base_device *m68k) {uint32_t ea = EA_A7_PI_8(m68k); return m68ki_read_8(m68k, ea); } +static inline uint32_t OPER_A7_PD_8(m68000_base_device *m68k) {uint32_t ea = EA_A7_PD_8(m68k); return m68ki_read_8(m68k, ea); } + +static inline uint32_t OPER_AW_8(m68000_base_device *m68k) {uint32_t ea = EA_AW_8(m68k); return m68ki_read_8(m68k, ea); } +static inline uint32_t OPER_AW_16(m68000_base_device *m68k) {uint32_t ea = EA_AW_16(m68k); return m68ki_read_16(m68k, ea);} +static inline uint32_t OPER_AW_32(m68000_base_device *m68k) {uint32_t ea = EA_AW_32(m68k); return m68ki_read_32(m68k, ea);} +static inline uint32_t OPER_AL_8(m68000_base_device *m68k) {uint32_t ea = EA_AL_8(m68k); return m68ki_read_8(m68k, ea); } +static inline uint32_t OPER_AL_16(m68000_base_device *m68k) {uint32_t ea = EA_AL_16(m68k); return m68ki_read_16(m68k, ea);} +static inline uint32_t OPER_AL_32(m68000_base_device *m68k) {uint32_t ea = EA_AL_32(m68k); return m68ki_read_32(m68k, ea);} +static inline uint32_t OPER_PCDI_8(m68000_base_device *m68k) {uint32_t ea = EA_PCDI_8(m68k); return m68ki_read_8(m68k, ea); } +static inline uint32_t OPER_PCDI_16(m68000_base_device *m68k) {uint32_t ea = EA_PCDI_16(m68k); return m68ki_read_16(m68k, ea);} +static inline uint32_t OPER_PCDI_32(m68000_base_device *m68k) {uint32_t ea = EA_PCDI_32(m68k); return m68ki_read_32(m68k, ea);} +static inline uint32_t OPER_PCIX_8(m68000_base_device *m68k) {uint32_t ea = EA_PCIX_8(m68k); return m68ki_read_8(m68k, ea); } +static inline uint32_t OPER_PCIX_16(m68000_base_device *m68k) {uint32_t ea = EA_PCIX_16(m68k); return m68ki_read_16(m68k, ea);} +static inline uint32_t OPER_PCIX_32(m68000_base_device *m68k) {uint32_t ea = EA_PCIX_32(m68k); return m68ki_read_32(m68k, ea);} + + + +/* ---------------------------- Stack Functions --------------------------- */ + +/* Push/pull data from the stack */ +static inline void m68ki_push_16(m68000_base_device *m68k, uint32_t value) +{ + REG_SP(m68k) = MASK_OUT_ABOVE_32(REG_SP(m68k) - 2); + m68ki_write_16(m68k, REG_SP(m68k), value); +} + +static inline void m68ki_push_32(m68000_base_device *m68k, uint32_t value) +{ + REG_SP(m68k) = MASK_OUT_ABOVE_32(REG_SP(m68k) - 4); + m68ki_write_32(m68k, REG_SP(m68k), value); +} + +static inline uint32_t m68ki_pull_16(m68000_base_device *m68k) +{ + REG_SP(m68k) = MASK_OUT_ABOVE_32(REG_SP(m68k) + 2); + return m68ki_read_16(m68k, REG_SP(m68k)-2); +} + +static inline uint32_t m68ki_pull_32(m68000_base_device *m68k) +{ + REG_SP(m68k) = MASK_OUT_ABOVE_32(REG_SP(m68k) + 4); + return m68ki_read_32(m68k, REG_SP(m68k)-4); +} + + +/* Increment/decrement the stack as if doing a push/pull but + * don't do any memory access. + */ +static inline void m68ki_fake_push_16(m68000_base_device *m68k) +{ + REG_SP(m68k) = MASK_OUT_ABOVE_32(REG_SP(m68k) - 2); +} + +static inline void m68ki_fake_push_32(m68000_base_device *m68k) +{ + REG_SP(m68k) = MASK_OUT_ABOVE_32(REG_SP(m68k) - 4); +} + +static inline void m68ki_fake_pull_16(m68000_base_device *m68k) +{ + REG_SP(m68k) = MASK_OUT_ABOVE_32(REG_SP(m68k) + 2); +} + +static inline void m68ki_fake_pull_32(m68000_base_device *m68k) +{ + REG_SP(m68k) = MASK_OUT_ABOVE_32(REG_SP(m68k) + 4); +} + + +/* ----------------------------- Program Flow ----------------------------- */ + +/* Jump to a new program location or vector. + * These functions will also call the pc_changed callback if it was enabled + * in m68kconf.h. + */ +static inline void m68ki_jump(m68000_base_device *m68k, uint32_t new_pc) +{ + REG_PC(m68k) = new_pc; +} + +static inline void m68ki_jump_vector(m68000_base_device *m68k, uint32_t vector) +{ + REG_PC(m68k) = (vector<<2); + REG_PC(m68k) = m68ki_read_32(m68k, REG_PC(m68k)); +} + + +/* Branch to a new memory location. + * The 32-bit branch will call pc_changed if it was enabled in m68kconf.h. + * So far I've found no problems with not calling pc_changed for 8 or 16 + * bit branches. + */ +static inline void m68ki_branch_8(m68000_base_device *m68k, uint32_t offset) +{ + REG_PC(m68k) += MAKE_INT_8(offset); +} + +static inline void m68ki_branch_16(m68000_base_device *m68k, uint32_t offset) +{ + REG_PC(m68k) += MAKE_INT_16(offset); +} + +static inline void m68ki_branch_32(m68000_base_device *m68k, uint32_t offset) +{ + REG_PC(m68k) += offset; +} + + + +/* ---------------------------- Status Register --------------------------- */ + +/* Set the S flag and change the active stack pointer. + * Note that value MUST be 4 or 0. + */ +static inline void m68ki_set_s_flag(m68000_base_device *m68k, uint32_t value) +{ + /* Backup the old stack pointer */ + uint32_t old = REG_SP(m68k); + //REG_SP_BASE(m68k)[m68k->s_flag | ((m68k->s_flag>>1) & m68k->m_flag)] = REG_SP(m68k); + /* Set the S flag */ + if (value != m68k->s_flag) { + m68k->s_flag = value; + /* Set the new stack pointer */ + REG_SP(m68k) = REG_USP(m68k); + REG_USP(m68k) = old; + } + //REG_SP(m68k) = REG_SP_BASE(m68k)[m68k->s_flag | ((m68k->s_flag>>1) & m68k->m_flag)]; +} + +/* Set the S and M flags and change the active stack pointer. + * Note that value MUST be 0, 2, 4, or 6 (bit2 = S, bit1 = M). + */ +static inline void m68ki_set_sm_flag(m68000_base_device *m68k, uint32_t value) +{ + m68ki_set_s_flag(m68k, value & 4); +} + +/* Set the S and M flags. Don't touch the stack pointer. */ +static inline void m68ki_set_sm_flag_nosp(m68000_base_device *m68k, uint32_t value) +{ + /* Set the S and M flags */ + m68k->s_flag = value & SFLAG_SET; + //m68k->m_flag = value & MFLAG_SET; +} + + +/* Set the condition code register */ +static inline void m68ki_set_ccr(m68000_base_device *m68k, uint32_t value) +{ + m68k->x_flag = BIT_4(value) << 4; + m68k->n_flag = BIT_3(value) << 4; + m68k->not_z_flag = !BIT_2(value); + m68k->v_flag = BIT_1(value) << 6; + m68k->c_flag = BIT_0(value) << 8; +} + +/* Set the status register but don't check for interrupts */ +static inline void m68ki_set_sr_noint(m68000_base_device *m68k, uint32_t value) +{ + /* Mask out the "unimplemented" bits */ + value &= m68k->sr_mask; + + /* Now set the status register */ + m68k->t1_flag = BIT_F(value); + //m68k->t0_flag = BIT_E(value); + m68k->int_mask = value & 0x0700; + m68k->c.target_cycle = m68k->c.current_cycle; + m68ki_set_ccr(m68k, value); + m68ki_set_sm_flag(m68k, (value >> 11) & 6); +} + +/* Set the status register but don't check for interrupts nor + * change the stack pointer + */ +static inline void m68ki_set_sr_noint_nosp(m68000_base_device *m68k, uint32_t value) +{ + /* Mask out the "unimplemented" bits */ + value &= m68k->sr_mask; + + /* Now set the status register */ + m68k->t1_flag = BIT_F(value); + //m68k->t0_flag = BIT_E(value); + m68k->int_mask = value & 0x0700; + m68k->c.target_cycle = m68k->c.current_cycle; + m68ki_set_ccr(m68k, value); + m68ki_set_sm_flag_nosp(m68k, (value >> 11) & 6); +} + +/* Set the status register and check for interrupts */ +static inline void m68ki_set_sr(m68000_base_device *m68k, uint32_t value) +{ + m68ki_set_sr_noint(m68k, value); + m68ki_check_interrupts(m68k); +} + + +/* ------------------------- Exception Processing ------------------------- */ + +/* Initiate exception processing */ +static inline uint32_t m68ki_init_exception(m68000_base_device *m68k) +{ + /* Save the old status register */ + uint32_t sr = m68ki_get_sr(m68k); + + /* Turn off trace flag, clear pending traces */ + m68k->t1_flag = 0;//m68k->t0_flag = 0; + m68ki_clear_trace(m68k); + /* Enter supervisor mode */ + m68ki_set_s_flag(m68k, SFLAG_SET); + + return sr; +} + +/* 3 word stack frame (68000 only) */ +static inline void m68ki_stack_frame_3word(m68000_base_device *m68k, uint32_t pc, uint32_t sr) +{ + m68ki_push_32(m68k, pc); + m68ki_push_16(m68k, sr); +} + +/* Format 0 stack frame. + * This is the standard stack frame for 68010+. + */ +static inline void m68ki_stack_frame_0000(m68000_base_device *m68k, uint32_t pc, uint32_t sr, uint32_t vector) +{ + /* Stack a 3-word frame if we are 68000 */ + if(m68k->cpu_type == CPU_TYPE_000 || m68k->cpu_type == CPU_TYPE_008) + { + m68ki_stack_frame_3word(m68k, pc, sr); + return; + } + m68ki_push_16(m68k, vector<<2); + m68ki_push_32(m68k, pc); + m68ki_push_16(m68k, sr); +} + +/* Format 1 stack frame (68020). + * For 68020, this is the 4 word throwaway frame. + */ +static inline void m68ki_stack_frame_0001(m68000_base_device *m68k, uint32_t pc, uint32_t sr, uint32_t vector) +{ + m68ki_push_16(m68k, 0x1000 | (vector<<2)); + m68ki_push_32(m68k, pc); + m68ki_push_16(m68k, sr); +} + +/* Format 2 stack frame. + * This is used only by 68020 for trap exceptions. + */ +static inline void m68ki_stack_frame_0010(m68000_base_device *m68k, uint32_t sr, uint32_t vector) +{ + m68ki_push_32(m68k, REG_PPC(m68k)); + m68ki_push_16(m68k, 0x2000 | (vector<<2)); + m68ki_push_32(m68k, REG_PC(m68k)); + m68ki_push_16(m68k, sr); +} + + +/* Bus error stack frame (68000 only). + */ +static inline void m68ki_stack_frame_buserr(m68000_base_device *m68k, uint32_t sr) +{ + m68ki_push_32(m68k, REG_PC(m68k)); + m68ki_push_16(m68k, sr); + m68ki_push_16(m68k, m68k->ir); + m68ki_push_32(m68k, 0/*m68k->aerr_address*/); /* access address */ + /* 0 0 0 0 0 0 0 0 0 0 0 R/W I/N FC + * R/W 0 = write, 1 = read + * I/N 0 = instruction, 1 = not + * FC 3-bit function code + */ + m68ki_push_16(m68k, 0/*m68k->aerr_write_mode | m68k->instr_mode | m68k->aerr_fc*/); +} + +/* Format 8 stack frame (68010). + * 68010 only. This is the 29 word bus/address error frame. + */ +static inline void m68ki_stack_frame_1000(m68000_base_device *m68k, uint32_t pc, uint32_t sr, uint32_t vector) +{ + /* VERSION + * NUMBER + * INTERNAL INFORMATION, 16 WORDS + */ + m68ki_fake_push_32(m68k); + m68ki_fake_push_32(m68k); + m68ki_fake_push_32(m68k); + m68ki_fake_push_32(m68k); + m68ki_fake_push_32(m68k); + m68ki_fake_push_32(m68k); + m68ki_fake_push_32(m68k); + m68ki_fake_push_32(m68k); + + /* INSTRUCTION INPUT BUFFER */ + m68ki_push_16(m68k, 0); + + /* UNUSED, RESERVED (not written) */ + m68ki_fake_push_16(m68k); + + /* DATA INPUT BUFFER */ + m68ki_push_16(m68k, 0); + + /* UNUSED, RESERVED (not written) */ + m68ki_fake_push_16(m68k); + + /* DATA OUTPUT BUFFER */ + m68ki_push_16(m68k, 0); + + /* UNUSED, RESERVED (not written) */ + m68ki_fake_push_16(m68k); + + /* FAULT ADDRESS */ + m68ki_push_32(m68k, 0); + + /* SPECIAL STATUS WORD */ + m68ki_push_16(m68k, 0); + + /* 1000, VECTOR OFFSET */ + m68ki_push_16(m68k, 0x8000 | (vector<<2)); + + /* PROGRAM COUNTER */ + m68ki_push_32(m68k, pc); + + /* STATUS REGISTER */ + m68ki_push_16(m68k, sr); +} + +/* Format A stack frame (short bus fault). + * This is used only by 68020 for bus fault and address error + * if the error happens at an instruction boundary. + * PC stacked is address of next instruction. + */ +static inline void m68ki_stack_frame_1010(m68000_base_device *m68k, uint32_t sr, uint32_t vector, uint32_t pc, uint32_t fault_address) +{ + //int orig_rw = m68k->mmu_tmp_buserror_rw; // this gets splatted by the following pushes, so save it now + //int orig_fc = m68k->mmu_tmp_buserror_fc; + + /* INTERNAL REGISTER */ + m68ki_push_16(m68k, 0); + + /* INTERNAL REGISTER */ + m68ki_push_16(m68k, 0); + + /* DATA OUTPUT BUFFER (2 words) */ + m68ki_push_32(m68k, 0); + + /* INTERNAL REGISTER */ + m68ki_push_16(m68k, 0); + + /* INTERNAL REGISTER */ + m68ki_push_16(m68k, 0); + + /* DATA CYCLE FAULT ADDRESS (2 words) */ + m68ki_push_32(m68k, fault_address); + + /* INSTRUCTION PIPE STAGE B */ + m68ki_push_16(m68k, 0); + + /* INSTRUCTION PIPE STAGE C */ + m68ki_push_16(m68k, 0); + + /* SPECIAL STATUS REGISTER */ + // set bit for: Rerun Faulted bus Cycle, or run pending prefetch + // set FC + m68ki_push_16(m68k, 0x0100 /*| orig_fc | orig_rw<<6*/); + + /* INTERNAL REGISTER */ + m68ki_push_16(m68k, 0); + + /* 1010, VECTOR OFFSET */ + m68ki_push_16(m68k, 0xa000 | (vector<<2)); + + /* PROGRAM COUNTER */ + m68ki_push_32(m68k, pc); + + /* STATUS REGISTER */ + m68ki_push_16(m68k, sr); +} + +/* Format B stack frame (long bus fault). + * This is used only by 68020 for bus fault and address error + * if the error happens during instruction execution. + * PC stacked is address of instruction in progress. + */ +static inline void m68ki_stack_frame_1011(m68000_base_device *m68k, uint32_t sr, uint32_t vector, uint32_t pc, uint32_t fault_address) +{ + /*int orig_rw = m68k->mmu_tmp_buserror_rw; // this gets splatted by the following pushes, so save it now + int orig_fc = m68k->mmu_tmp_buserror_fc;*/ + + /* INTERNAL REGISTERS (18 words) */ + m68ki_push_32(m68k, 0); + m68ki_push_32(m68k, 0); + m68ki_push_32(m68k, 0); + m68ki_push_32(m68k, 0); + m68ki_push_32(m68k, 0); + m68ki_push_32(m68k, 0); + m68ki_push_32(m68k, 0); + m68ki_push_32(m68k, 0); + m68ki_push_32(m68k, 0); + + /* VERSION# (4 bits), INTERNAL INFORMATION */ + m68ki_push_16(m68k, 0); + + /* INTERNAL REGISTERS (3 words) */ + m68ki_push_32(m68k, 0); + m68ki_push_16(m68k, 0); + + /* DATA INTPUT BUFFER (2 words) */ + m68ki_push_32(m68k, 0); + + /* INTERNAL REGISTERS (2 words) */ + m68ki_push_32(m68k, 0); + + /* STAGE B ADDRESS (2 words) */ + m68ki_push_32(m68k, 0); + + /* INTERNAL REGISTER (4 words) */ + m68ki_push_32(m68k, 0); + m68ki_push_32(m68k, 0); + + /* DATA OUTPUT BUFFER (2 words) */ + m68ki_push_32(m68k, 0); + + /* INTERNAL REGISTER */ + m68ki_push_16(m68k, 0); + + /* INTERNAL REGISTER */ + m68ki_push_16(m68k, 0); + + /* DATA CYCLE FAULT ADDRESS (2 words) */ + m68ki_push_32(m68k, fault_address); + + /* INSTRUCTION PIPE STAGE B */ + m68ki_push_16(m68k, 0); + + /* INSTRUCTION PIPE STAGE C */ + m68ki_push_16(m68k, 0); + + /* SPECIAL STATUS REGISTER */ + m68ki_push_16(m68k, 0x0100/* | orig_fc | orig_rw<<6*/); + + /* INTERNAL REGISTER */ + m68ki_push_16(m68k, 0); + + /* 1011, VECTOR OFFSET */ + m68ki_push_16(m68k, 0xb000 | (vector<<2)); + + /* PROGRAM COUNTER */ + m68ki_push_32(m68k, pc); + + /* STATUS REGISTER */ + m68ki_push_16(m68k, sr); +} + +/* Type 7 stack frame (access fault). + * This is used by the 68040 for bus fault and mmu trap + * 30 words + */ +static inline void m68ki_stack_frame_0111(m68000_base_device *m68k, uint32_t sr, uint32_t vector, uint32_t pc, uint32_t fault_address, uint8_t in_mmu) +{ + /*int orig_rw = m68k->mmu_tmp_buserror_rw; // this gets splatted by the following pushes, so save it now + int orig_fc = m68k->mmu_tmp_buserror_fc;*/ + + /* INTERNAL REGISTERS (18 words) */ + m68ki_push_32(m68k, 0); + m68ki_push_32(m68k, 0); + m68ki_push_32(m68k, 0); + m68ki_push_32(m68k, 0); + m68ki_push_32(m68k, 0); + m68ki_push_32(m68k, 0); + m68ki_push_32(m68k, 0); + m68ki_push_32(m68k, 0); + m68ki_push_32(m68k, 0); + + /* FAULT ADDRESS (2 words) */ + m68ki_push_32(m68k, fault_address); + + /* INTERNAL REGISTERS (3 words) */ + m68ki_push_32(m68k, 0); + m68ki_push_16(m68k, 0); + + /* SPECIAL STATUS REGISTER (1 word) */ + m68ki_push_16(m68k, 0/*(in_mmu ? 0x400 : 0) | orig_fc | (orig_rw<<8)*/); + + /* EFFECTIVE ADDRESS (2 words) */ + m68ki_push_32(m68k, fault_address); + + /* 0111, VECTOR OFFSET (1 word) */ + m68ki_push_16(m68k, 0x7000 | (vector<<2)); + + /* PROGRAM COUNTER (2 words) */ + m68ki_push_32(m68k, pc); + + /* STATUS REGISTER (1 word) */ + m68ki_push_16(m68k, sr); +} + + +/* Used for Group 2 exceptions. + * These stack a type 2 frame on the 020. + */ +static inline void m68ki_exception_trap(m68000_base_device *m68k, uint32_t vector) +{ + uint32_t sr = m68ki_init_exception(m68k); + + if(CPU_TYPE_IS_010_LESS(m68k->cpu_type)) + m68ki_stack_frame_0000(m68k, REG_PC(m68k), sr, vector); + else + m68ki_stack_frame_0010(m68k, sr, vector); + + m68ki_jump_vector(m68k, vector); + + /* Use up some clock cycles */ + m68k->c.current_cycle += m68k->cyc_exception[vector]; +} + +/* Trap#n stacks a 0 frame but behaves like group2 otherwise */ +static inline void m68ki_exception_trapN(m68000_base_device *m68k, uint32_t vector) +{ + uint32_t sr = m68ki_init_exception(m68k); + m68ki_stack_frame_0000(m68k, REG_PC(m68k), sr, vector); + m68ki_jump_vector(m68k, vector); + + /* Use up some clock cycles */ + m68k->c.current_cycle += m68k->cyc_exception[vector]; +} + +/* Exception for trace mode */ +static inline void m68ki_exception_trace(m68000_base_device *m68k) +{ + uint32_t sr = m68ki_init_exception(m68k); + + if(CPU_TYPE_IS_010_LESS(m68k->cpu_type)) + { + if(CPU_TYPE_IS_000(m68k->cpu_type)) + { + m68k->instr_mode = INSTRUCTION_NO; + } + m68ki_stack_frame_0000(m68k, REG_PC(m68k), sr, EXCEPTION_TRACE); + } + else + m68ki_stack_frame_0010(m68k, sr, EXCEPTION_TRACE); + + m68ki_jump_vector(m68k, EXCEPTION_TRACE); + + /* Trace nullifies a STOP instruction */ + m68k->stopped &= ~STOP_LEVEL_STOP; + + /* Use up some clock cycles */ + m68k->c.current_cycle += m68k->cyc_exception[EXCEPTION_TRACE]; +} + +/* Exception for privilege violation */ +static inline void m68ki_exception_privilege_violation(m68000_base_device *m68k) +{ + uint32_t sr = m68ki_init_exception(m68k); + + if(CPU_TYPE_IS_000(m68k->cpu_type)) + { + m68k->instr_mode = INSTRUCTION_NO; + } + + m68ki_stack_frame_0000(m68k, REG_PPC(m68k), sr, EXCEPTION_PRIVILEGE_VIOLATION); + m68ki_jump_vector(m68k, EXCEPTION_PRIVILEGE_VIOLATION); + + /* Use up some clock cycles and undo the instruction's cycles */ + m68k->c.current_cycle += m68k->cyc_exception[EXCEPTION_PRIVILEGE_VIOLATION] - m68k->cyc_instruction[m68k->ir]; +} + +/* Exception for A-Line instructions */ +static inline void m68ki_exception_1010(m68000_base_device *m68k) +{ + uint32_t sr; + + sr = m68ki_init_exception(m68k); + m68ki_stack_frame_0000(m68k, REG_PPC(m68k), sr, EXCEPTION_1010); + m68ki_jump_vector(m68k, EXCEPTION_1010); + + /* Use up some clock cycles and undo the instruction's cycles */ + m68k->c.current_cycle += m68k->cyc_exception[EXCEPTION_1010] - m68k->cyc_instruction[m68k->ir]; +} + +/* Exception for F-Line instructions */ +static inline void m68ki_exception_1111(m68000_base_device *m68k) +{ + uint32_t sr; + + sr = m68ki_init_exception(m68k); + m68ki_stack_frame_0000(m68k, REG_PPC(m68k), sr, EXCEPTION_1111); + m68ki_jump_vector(m68k, EXCEPTION_1111); + + /* Use up some clock cycles and undo the instruction's cycles */ + m68k->c.current_cycle += m68k->cyc_exception[EXCEPTION_1111] - m68k->cyc_instruction[m68k->ir]; +} + +/* Exception for illegal instructions */ +static inline void m68ki_exception_illegal(m68000_base_device *m68k) +{ + uint32_t sr; + + sr = m68ki_init_exception(m68k); + + if(CPU_TYPE_IS_000(m68k->cpu_type)) + { + m68k->instr_mode = INSTRUCTION_NO; + } + + m68ki_stack_frame_0000(m68k, REG_PPC(m68k), sr, EXCEPTION_ILLEGAL_INSTRUCTION); + m68ki_jump_vector(m68k, EXCEPTION_ILLEGAL_INSTRUCTION); + + /* Use up some clock cycles and undo the instruction's cycles */ + m68k->c.current_cycle += m68k->cyc_exception[EXCEPTION_ILLEGAL_INSTRUCTION] - m68k->cyc_instruction[m68k->ir]; +} + +/* Exception for format errror in RTE */ +static inline void m68ki_exception_format_error(m68000_base_device *m68k) +{ + uint32_t sr = m68ki_init_exception(m68k); + m68ki_stack_frame_0000(m68k, REG_PC(m68k), sr, EXCEPTION_FORMAT_ERROR); + m68ki_jump_vector(m68k, EXCEPTION_FORMAT_ERROR); + + /* Use up some clock cycles and undo the instruction's cycles */ + m68k->c.current_cycle += m68k->cyc_exception[EXCEPTION_FORMAT_ERROR] - m68k->cyc_instruction[m68k->ir]; +} + +/* Exception for address error */ +static inline void m68ki_exception_address_error(m68000_base_device *m68k) +{ + uint32_t sr = m68ki_init_exception(m68k); + + /* If we were processing a bus error, address error, or reset, + * this is a catastrophic failure. + * Halt the CPU + */ + if(m68k->run_mode == RUN_MODE_BERR_AERR_RESET) + { + //m68k->/*memory.*/read8(0x00ffff01); + m68k->stopped = STOP_LEVEL_HALT; + return; + } + m68k->run_mode = RUN_MODE_BERR_AERR_RESET; + + /* Note: This is implemented for 68000 only! */ + m68ki_stack_frame_buserr(m68k, sr); + + m68ki_jump_vector(m68k, EXCEPTION_ADDRESS_ERROR); + + /* Use up some clock cycles and undo the instruction's cycles */ + m68k->c.current_cycle += m68k->cyc_exception[EXCEPTION_ADDRESS_ERROR] - m68k->cyc_instruction[m68k->ir]; +} + + + +/* ASG: Check for interrupts */ +static inline void m68ki_check_interrupts(m68000_base_device *m68k) +{ + /*if(m68k->nmi_pending) + { + m68k->nmi_pending = false; + m68k->m68ki_exception_interrupt(m68k, 7); + } + else if(m68k->int_level > m68k->int_mask) + m68k->m68ki_exception_interrupt(m68k, m68k->int_level>>8);*/ + if (m68k->c.current_cycle >= m68k->c.int_cycle) { + m68ki_exception_interrupt(m68k, m68k->c.int_num); + } +} + + + +/* ======================================================================== */ +/* ============================== END OF FILE ============================= */ +/* ======================================================================== */ + +#endif /* __M68KCPU_H__ */ diff -r f23e70fb6607 -r 2c1c88cd1a3f musashi/m68kops.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/musashi/m68kops.c Sun Apr 19 00:59:09 2020 -0700 @@ -0,0 +1,33731 @@ +#include +#include "../util.h" +#include "m68kcpu.h" +/* ======================================================================== */ +/* ========================= INSTRUCTION HANDLERS ========================= */ +/* ======================================================================== */ + + +static void m68k_op_1010(m68000_base_device* mc68kcpu) +{ + m68ki_exception_1010(mc68kcpu); +} + + +static void m68k_op_1111(m68000_base_device* mc68kcpu) +{ + m68ki_exception_1111(mc68kcpu); +} + + +static void m68k_op_040fpu0_32(m68000_base_device* mc68kcpu) +{ + m68ki_exception_1111(mc68kcpu); +} + + +static void m68k_op_040fpu1_32(m68000_base_device* mc68kcpu) +{ + m68ki_exception_1111(mc68kcpu); +} + + +static void m68k_op_abcd_8_rr(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &DX(mc68kcpu); + uint32_t src = DY(mc68kcpu); + uint32_t dst = *r_dst; + uint32_t res = LOW_NIBBLE(src) + LOW_NIBBLE(dst) + XFLAG_AS_1(mc68kcpu); + + (mc68kcpu)->v_flag = ~res; /* Undefined V behavior */ + + if(res > 9) + res += 6; + res += HIGH_NIBBLE(src) + HIGH_NIBBLE(dst); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = (res > 0x99) << 8; + if((mc68kcpu)->c_flag) + res -= 0xa0; + + (mc68kcpu)->v_flag &= res; /* Undefined V behavior part II */ + (mc68kcpu)->n_flag = NFLAG_8(res); /* Undefined N behavior */ + + res = MASK_OUT_ABOVE_8(res); + (mc68kcpu)->not_z_flag |= res; + + *r_dst = MASK_OUT_BELOW_8(*r_dst) | res; +} + + +static void m68k_op_abcd_8_mm_ax7(m68000_base_device* mc68kcpu) +{ + uint32_t src = OPER_AY_PD_8(mc68kcpu); + uint32_t ea = EA_A7_PD_8(mc68kcpu); + uint32_t dst = m68ki_read_8((mc68kcpu), ea); + uint32_t res = LOW_NIBBLE(src) + LOW_NIBBLE(dst) + XFLAG_AS_1(mc68kcpu); + + (mc68kcpu)->v_flag = ~res; /* Undefined V behavior */ + + if(res > 9) + res += 6; + res += HIGH_NIBBLE(src) + HIGH_NIBBLE(dst); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = (res > 0x99) << 8; + if((mc68kcpu)->c_flag) + res -= 0xa0; + + (mc68kcpu)->v_flag &= res; /* Undefined V behavior part II */ + (mc68kcpu)->n_flag = NFLAG_8(res); /* Undefined N behavior */ + + res = MASK_OUT_ABOVE_8(res); + (mc68kcpu)->not_z_flag |= res; + + m68ki_write_8((mc68kcpu), ea, res); +} + + +static void m68k_op_abcd_8_mm_ay7(m68000_base_device* mc68kcpu) +{ + uint32_t src = OPER_A7_PD_8(mc68kcpu); + uint32_t ea = EA_AX_PD_8(mc68kcpu); + uint32_t dst = m68ki_read_8((mc68kcpu), ea); + uint32_t res = LOW_NIBBLE(src) + LOW_NIBBLE(dst) + XFLAG_AS_1(mc68kcpu); + + (mc68kcpu)->v_flag = ~res; /* Undefined V behavior */ + + if(res > 9) + res += 6; + res += HIGH_NIBBLE(src) + HIGH_NIBBLE(dst); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = (res > 0x99) << 8; + if((mc68kcpu)->c_flag) + res -= 0xa0; + + (mc68kcpu)->v_flag &= res; /* Undefined V behavior part II */ + (mc68kcpu)->n_flag = NFLAG_8(res); /* Undefined N behavior */ + + res = MASK_OUT_ABOVE_8(res); + (mc68kcpu)->not_z_flag |= res; + + m68ki_write_8((mc68kcpu), ea, res); +} + + +static void m68k_op_abcd_8_mm_axy7(m68000_base_device* mc68kcpu) +{ + uint32_t src = OPER_A7_PD_8(mc68kcpu); + uint32_t ea = EA_A7_PD_8(mc68kcpu); + uint32_t dst = m68ki_read_8((mc68kcpu), ea); + uint32_t res = LOW_NIBBLE(src) + LOW_NIBBLE(dst) + XFLAG_AS_1(mc68kcpu); + + (mc68kcpu)->v_flag = ~res; /* Undefined V behavior */ + + if(res > 9) + res += 6; + res += HIGH_NIBBLE(src) + HIGH_NIBBLE(dst); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = (res > 0x99) << 8; + if((mc68kcpu)->c_flag) + res -= 0xa0; + + (mc68kcpu)->v_flag &= res; /* Undefined V behavior part II */ + (mc68kcpu)->n_flag = NFLAG_8(res); /* Undefined N behavior */ + + res = MASK_OUT_ABOVE_8(res); + (mc68kcpu)->not_z_flag |= res; + + m68ki_write_8((mc68kcpu), ea, res); +} + + +static void m68k_op_abcd_8_mm(m68000_base_device* mc68kcpu) +{ + uint32_t src = OPER_AY_PD_8(mc68kcpu); + uint32_t ea = EA_AX_PD_8(mc68kcpu); + uint32_t dst = m68ki_read_8((mc68kcpu), ea); + uint32_t res = LOW_NIBBLE(src) + LOW_NIBBLE(dst) + XFLAG_AS_1(mc68kcpu); + + (mc68kcpu)->v_flag = ~res; /* Undefined V behavior */ + + if(res > 9) + res += 6; + res += HIGH_NIBBLE(src) + HIGH_NIBBLE(dst); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = (res > 0x99) << 8; + if((mc68kcpu)->c_flag) + res -= 0xa0; + + (mc68kcpu)->v_flag &= res; /* Undefined V behavior part II */ + (mc68kcpu)->n_flag = NFLAG_8(res); /* Undefined N behavior */ + + res = MASK_OUT_ABOVE_8(res); + (mc68kcpu)->not_z_flag |= res; + + m68ki_write_8((mc68kcpu), ea, res); +} + + +static void m68k_op_add_8_er_d(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &DX(mc68kcpu); + uint32_t src = MASK_OUT_ABOVE_8(DY(mc68kcpu)); + uint32_t dst = MASK_OUT_ABOVE_8(*r_dst); + uint32_t res = src + dst; + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->v_flag = VFLAG_ADD_8(src, dst, res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_8(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res); + + *r_dst = MASK_OUT_BELOW_8(*r_dst) | (mc68kcpu)->not_z_flag; +} + + +static void m68k_op_add_8_er_ai(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &DX(mc68kcpu); + uint32_t src = OPER_AY_AI_8(mc68kcpu); + uint32_t dst = MASK_OUT_ABOVE_8(*r_dst); + uint32_t res = src + dst; + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->v_flag = VFLAG_ADD_8(src, dst, res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_8(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res); + + *r_dst = MASK_OUT_BELOW_8(*r_dst) | (mc68kcpu)->not_z_flag; +} + + +static void m68k_op_add_8_er_pi(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &DX(mc68kcpu); + uint32_t src = OPER_AY_PI_8(mc68kcpu); + uint32_t dst = MASK_OUT_ABOVE_8(*r_dst); + uint32_t res = src + dst; + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->v_flag = VFLAG_ADD_8(src, dst, res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_8(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res); + + *r_dst = MASK_OUT_BELOW_8(*r_dst) | (mc68kcpu)->not_z_flag; +} + + +static void m68k_op_add_8_er_pi7(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &DX(mc68kcpu); + uint32_t src = OPER_A7_PI_8(mc68kcpu); + uint32_t dst = MASK_OUT_ABOVE_8(*r_dst); + uint32_t res = src + dst; + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->v_flag = VFLAG_ADD_8(src, dst, res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_8(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res); + + *r_dst = MASK_OUT_BELOW_8(*r_dst) | (mc68kcpu)->not_z_flag; +} + + +static void m68k_op_add_8_er_pd(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &DX(mc68kcpu); + uint32_t src = OPER_AY_PD_8(mc68kcpu); + uint32_t dst = MASK_OUT_ABOVE_8(*r_dst); + uint32_t res = src + dst; + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->v_flag = VFLAG_ADD_8(src, dst, res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_8(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res); + + *r_dst = MASK_OUT_BELOW_8(*r_dst) | (mc68kcpu)->not_z_flag; +} + + +static void m68k_op_add_8_er_pd7(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &DX(mc68kcpu); + uint32_t src = OPER_A7_PD_8(mc68kcpu); + uint32_t dst = MASK_OUT_ABOVE_8(*r_dst); + uint32_t res = src + dst; + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->v_flag = VFLAG_ADD_8(src, dst, res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_8(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res); + + *r_dst = MASK_OUT_BELOW_8(*r_dst) | (mc68kcpu)->not_z_flag; +} + + +static void m68k_op_add_8_er_di(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &DX(mc68kcpu); + uint32_t src = OPER_AY_DI_8(mc68kcpu); + uint32_t dst = MASK_OUT_ABOVE_8(*r_dst); + uint32_t res = src + dst; + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->v_flag = VFLAG_ADD_8(src, dst, res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_8(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res); + + *r_dst = MASK_OUT_BELOW_8(*r_dst) | (mc68kcpu)->not_z_flag; +} + + +static void m68k_op_add_8_er_ix(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &DX(mc68kcpu); + uint32_t src = OPER_AY_IX_8(mc68kcpu); + uint32_t dst = MASK_OUT_ABOVE_8(*r_dst); + uint32_t res = src + dst; + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->v_flag = VFLAG_ADD_8(src, dst, res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_8(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res); + + *r_dst = MASK_OUT_BELOW_8(*r_dst) | (mc68kcpu)->not_z_flag; +} + + +static void m68k_op_add_8_er_aw(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &DX(mc68kcpu); + uint32_t src = OPER_AW_8(mc68kcpu); + uint32_t dst = MASK_OUT_ABOVE_8(*r_dst); + uint32_t res = src + dst; + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->v_flag = VFLAG_ADD_8(src, dst, res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_8(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res); + + *r_dst = MASK_OUT_BELOW_8(*r_dst) | (mc68kcpu)->not_z_flag; +} + + +static void m68k_op_add_8_er_al(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &DX(mc68kcpu); + uint32_t src = OPER_AL_8(mc68kcpu); + uint32_t dst = MASK_OUT_ABOVE_8(*r_dst); + uint32_t res = src + dst; + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->v_flag = VFLAG_ADD_8(src, dst, res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_8(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res); + + *r_dst = MASK_OUT_BELOW_8(*r_dst) | (mc68kcpu)->not_z_flag; +} + + +static void m68k_op_add_8_er_pcdi(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &DX(mc68kcpu); + uint32_t src = OPER_PCDI_8(mc68kcpu); + uint32_t dst = MASK_OUT_ABOVE_8(*r_dst); + uint32_t res = src + dst; + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->v_flag = VFLAG_ADD_8(src, dst, res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_8(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res); + + *r_dst = MASK_OUT_BELOW_8(*r_dst) | (mc68kcpu)->not_z_flag; +} + + +static void m68k_op_add_8_er_pcix(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &DX(mc68kcpu); + uint32_t src = OPER_PCIX_8(mc68kcpu); + uint32_t dst = MASK_OUT_ABOVE_8(*r_dst); + uint32_t res = src + dst; + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->v_flag = VFLAG_ADD_8(src, dst, res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_8(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res); + + *r_dst = MASK_OUT_BELOW_8(*r_dst) | (mc68kcpu)->not_z_flag; +} + + +static void m68k_op_add_8_er_i(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &DX(mc68kcpu); + uint32_t src = OPER_I_8(mc68kcpu); + uint32_t dst = MASK_OUT_ABOVE_8(*r_dst); + uint32_t res = src + dst; + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->v_flag = VFLAG_ADD_8(src, dst, res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_8(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res); + + *r_dst = MASK_OUT_BELOW_8(*r_dst) | (mc68kcpu)->not_z_flag; +} + + +static void m68k_op_add_16_er_d(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &DX(mc68kcpu); + uint32_t src = MASK_OUT_ABOVE_16(DY(mc68kcpu)); + uint32_t dst = MASK_OUT_ABOVE_16(*r_dst); + uint32_t res = src + dst; + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->v_flag = VFLAG_ADD_16(src, dst, res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_16(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res); + + *r_dst = MASK_OUT_BELOW_16(*r_dst) | (mc68kcpu)->not_z_flag; +} + + +static void m68k_op_add_16_er_a(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &DX(mc68kcpu); + uint32_t src = MASK_OUT_ABOVE_16(AY(mc68kcpu)); + uint32_t dst = MASK_OUT_ABOVE_16(*r_dst); + uint32_t res = src + dst; + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->v_flag = VFLAG_ADD_16(src, dst, res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_16(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res); + + *r_dst = MASK_OUT_BELOW_16(*r_dst) | (mc68kcpu)->not_z_flag; +} + + +static void m68k_op_add_16_er_ai(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &DX(mc68kcpu); + uint32_t src = OPER_AY_AI_16(mc68kcpu); + uint32_t dst = MASK_OUT_ABOVE_16(*r_dst); + uint32_t res = src + dst; + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->v_flag = VFLAG_ADD_16(src, dst, res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_16(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res); + + *r_dst = MASK_OUT_BELOW_16(*r_dst) | (mc68kcpu)->not_z_flag; +} + + +static void m68k_op_add_16_er_pi(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &DX(mc68kcpu); + uint32_t src = OPER_AY_PI_16(mc68kcpu); + uint32_t dst = MASK_OUT_ABOVE_16(*r_dst); + uint32_t res = src + dst; + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->v_flag = VFLAG_ADD_16(src, dst, res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_16(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res); + + *r_dst = MASK_OUT_BELOW_16(*r_dst) | (mc68kcpu)->not_z_flag; +} + + +static void m68k_op_add_16_er_pd(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &DX(mc68kcpu); + uint32_t src = OPER_AY_PD_16(mc68kcpu); + uint32_t dst = MASK_OUT_ABOVE_16(*r_dst); + uint32_t res = src + dst; + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->v_flag = VFLAG_ADD_16(src, dst, res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_16(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res); + + *r_dst = MASK_OUT_BELOW_16(*r_dst) | (mc68kcpu)->not_z_flag; +} + + +static void m68k_op_add_16_er_di(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &DX(mc68kcpu); + uint32_t src = OPER_AY_DI_16(mc68kcpu); + uint32_t dst = MASK_OUT_ABOVE_16(*r_dst); + uint32_t res = src + dst; + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->v_flag = VFLAG_ADD_16(src, dst, res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_16(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res); + + *r_dst = MASK_OUT_BELOW_16(*r_dst) | (mc68kcpu)->not_z_flag; +} + + +static void m68k_op_add_16_er_ix(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &DX(mc68kcpu); + uint32_t src = OPER_AY_IX_16(mc68kcpu); + uint32_t dst = MASK_OUT_ABOVE_16(*r_dst); + uint32_t res = src + dst; + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->v_flag = VFLAG_ADD_16(src, dst, res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_16(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res); + + *r_dst = MASK_OUT_BELOW_16(*r_dst) | (mc68kcpu)->not_z_flag; +} + + +static void m68k_op_add_16_er_aw(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &DX(mc68kcpu); + uint32_t src = OPER_AW_16(mc68kcpu); + uint32_t dst = MASK_OUT_ABOVE_16(*r_dst); + uint32_t res = src + dst; + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->v_flag = VFLAG_ADD_16(src, dst, res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_16(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res); + + *r_dst = MASK_OUT_BELOW_16(*r_dst) | (mc68kcpu)->not_z_flag; +} + + +static void m68k_op_add_16_er_al(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &DX(mc68kcpu); + uint32_t src = OPER_AL_16(mc68kcpu); + uint32_t dst = MASK_OUT_ABOVE_16(*r_dst); + uint32_t res = src + dst; + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->v_flag = VFLAG_ADD_16(src, dst, res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_16(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res); + + *r_dst = MASK_OUT_BELOW_16(*r_dst) | (mc68kcpu)->not_z_flag; +} + + +static void m68k_op_add_16_er_pcdi(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &DX(mc68kcpu); + uint32_t src = OPER_PCDI_16(mc68kcpu); + uint32_t dst = MASK_OUT_ABOVE_16(*r_dst); + uint32_t res = src + dst; + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->v_flag = VFLAG_ADD_16(src, dst, res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_16(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res); + + *r_dst = MASK_OUT_BELOW_16(*r_dst) | (mc68kcpu)->not_z_flag; +} + + +static void m68k_op_add_16_er_pcix(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &DX(mc68kcpu); + uint32_t src = OPER_PCIX_16(mc68kcpu); + uint32_t dst = MASK_OUT_ABOVE_16(*r_dst); + uint32_t res = src + dst; + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->v_flag = VFLAG_ADD_16(src, dst, res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_16(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res); + + *r_dst = MASK_OUT_BELOW_16(*r_dst) | (mc68kcpu)->not_z_flag; +} + + +static void m68k_op_add_16_er_i(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &DX(mc68kcpu); + uint32_t src = OPER_I_16(mc68kcpu); + uint32_t dst = MASK_OUT_ABOVE_16(*r_dst); + uint32_t res = src + dst; + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->v_flag = VFLAG_ADD_16(src, dst, res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_16(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res); + + *r_dst = MASK_OUT_BELOW_16(*r_dst) | (mc68kcpu)->not_z_flag; +} + + +static void m68k_op_add_32_er_d(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &DX(mc68kcpu); + uint32_t src = DY(mc68kcpu); + uint32_t dst = *r_dst; + uint32_t res = src + dst; + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->v_flag = VFLAG_ADD_32(src, dst, res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_ADD_32(src, dst, res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res); + + *r_dst = (mc68kcpu)->not_z_flag; +} + + +static void m68k_op_add_32_er_a(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &DX(mc68kcpu); + uint32_t src = AY(mc68kcpu); + uint32_t dst = *r_dst; + uint32_t res = src + dst; + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->v_flag = VFLAG_ADD_32(src, dst, res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_ADD_32(src, dst, res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res); + + *r_dst = (mc68kcpu)->not_z_flag; +} + + +static void m68k_op_add_32_er_ai(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &DX(mc68kcpu); + uint32_t src = OPER_AY_AI_32(mc68kcpu); + uint32_t dst = *r_dst; + uint32_t res = src + dst; + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->v_flag = VFLAG_ADD_32(src, dst, res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_ADD_32(src, dst, res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res); + + *r_dst = (mc68kcpu)->not_z_flag; +} + + +static void m68k_op_add_32_er_pi(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &DX(mc68kcpu); + uint32_t src = OPER_AY_PI_32(mc68kcpu); + uint32_t dst = *r_dst; + uint32_t res = src + dst; + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->v_flag = VFLAG_ADD_32(src, dst, res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_ADD_32(src, dst, res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res); + + *r_dst = (mc68kcpu)->not_z_flag; +} + + +static void m68k_op_add_32_er_pd(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &DX(mc68kcpu); + uint32_t src = OPER_AY_PD_32(mc68kcpu); + uint32_t dst = *r_dst; + uint32_t res = src + dst; + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->v_flag = VFLAG_ADD_32(src, dst, res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_ADD_32(src, dst, res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res); + + *r_dst = (mc68kcpu)->not_z_flag; +} + + +static void m68k_op_add_32_er_di(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &DX(mc68kcpu); + uint32_t src = OPER_AY_DI_32(mc68kcpu); + uint32_t dst = *r_dst; + uint32_t res = src + dst; + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->v_flag = VFLAG_ADD_32(src, dst, res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_ADD_32(src, dst, res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res); + + *r_dst = (mc68kcpu)->not_z_flag; +} + + +static void m68k_op_add_32_er_ix(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &DX(mc68kcpu); + uint32_t src = OPER_AY_IX_32(mc68kcpu); + uint32_t dst = *r_dst; + uint32_t res = src + dst; + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->v_flag = VFLAG_ADD_32(src, dst, res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_ADD_32(src, dst, res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res); + + *r_dst = (mc68kcpu)->not_z_flag; +} + + +static void m68k_op_add_32_er_aw(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &DX(mc68kcpu); + uint32_t src = OPER_AW_32(mc68kcpu); + uint32_t dst = *r_dst; + uint32_t res = src + dst; + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->v_flag = VFLAG_ADD_32(src, dst, res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_ADD_32(src, dst, res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res); + + *r_dst = (mc68kcpu)->not_z_flag; +} + + +static void m68k_op_add_32_er_al(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &DX(mc68kcpu); + uint32_t src = OPER_AL_32(mc68kcpu); + uint32_t dst = *r_dst; + uint32_t res = src + dst; + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->v_flag = VFLAG_ADD_32(src, dst, res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_ADD_32(src, dst, res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res); + + *r_dst = (mc68kcpu)->not_z_flag; +} + + +static void m68k_op_add_32_er_pcdi(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &DX(mc68kcpu); + uint32_t src = OPER_PCDI_32(mc68kcpu); + uint32_t dst = *r_dst; + uint32_t res = src + dst; + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->v_flag = VFLAG_ADD_32(src, dst, res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_ADD_32(src, dst, res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res); + + *r_dst = (mc68kcpu)->not_z_flag; +} + + +static void m68k_op_add_32_er_pcix(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &DX(mc68kcpu); + uint32_t src = OPER_PCIX_32(mc68kcpu); + uint32_t dst = *r_dst; + uint32_t res = src + dst; + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->v_flag = VFLAG_ADD_32(src, dst, res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_ADD_32(src, dst, res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res); + + *r_dst = (mc68kcpu)->not_z_flag; +} + + +static void m68k_op_add_32_er_i(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &DX(mc68kcpu); + uint32_t src = OPER_I_32(mc68kcpu); + uint32_t dst = *r_dst; + uint32_t res = src + dst; + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->v_flag = VFLAG_ADD_32(src, dst, res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_ADD_32(src, dst, res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res); + + *r_dst = (mc68kcpu)->not_z_flag; +} + + +static void m68k_op_add_8_re_ai(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AY_AI_8(mc68kcpu); + uint32_t src = MASK_OUT_ABOVE_8(DX(mc68kcpu)); + uint32_t dst = m68ki_read_8((mc68kcpu), ea); + uint32_t res = src + dst; + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->v_flag = VFLAG_ADD_8(src, dst, res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_8(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res); + + m68ki_write_8((mc68kcpu), ea, (mc68kcpu)->not_z_flag); +} + + +static void m68k_op_add_8_re_pi(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AY_PI_8(mc68kcpu); + uint32_t src = MASK_OUT_ABOVE_8(DX(mc68kcpu)); + uint32_t dst = m68ki_read_8((mc68kcpu), ea); + uint32_t res = src + dst; + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->v_flag = VFLAG_ADD_8(src, dst, res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_8(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res); + + m68ki_write_8((mc68kcpu), ea, (mc68kcpu)->not_z_flag); +} + + +static void m68k_op_add_8_re_pi7(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_A7_PI_8(mc68kcpu); + uint32_t src = MASK_OUT_ABOVE_8(DX(mc68kcpu)); + uint32_t dst = m68ki_read_8((mc68kcpu), ea); + uint32_t res = src + dst; + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->v_flag = VFLAG_ADD_8(src, dst, res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_8(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res); + + m68ki_write_8((mc68kcpu), ea, (mc68kcpu)->not_z_flag); +} + + +static void m68k_op_add_8_re_pd(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AY_PD_8(mc68kcpu); + uint32_t src = MASK_OUT_ABOVE_8(DX(mc68kcpu)); + uint32_t dst = m68ki_read_8((mc68kcpu), ea); + uint32_t res = src + dst; + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->v_flag = VFLAG_ADD_8(src, dst, res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_8(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res); + + m68ki_write_8((mc68kcpu), ea, (mc68kcpu)->not_z_flag); +} + + +static void m68k_op_add_8_re_pd7(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_A7_PD_8(mc68kcpu); + uint32_t src = MASK_OUT_ABOVE_8(DX(mc68kcpu)); + uint32_t dst = m68ki_read_8((mc68kcpu), ea); + uint32_t res = src + dst; + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->v_flag = VFLAG_ADD_8(src, dst, res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_8(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res); + + m68ki_write_8((mc68kcpu), ea, (mc68kcpu)->not_z_flag); +} + + +static void m68k_op_add_8_re_di(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AY_DI_8(mc68kcpu); + uint32_t src = MASK_OUT_ABOVE_8(DX(mc68kcpu)); + uint32_t dst = m68ki_read_8((mc68kcpu), ea); + uint32_t res = src + dst; + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->v_flag = VFLAG_ADD_8(src, dst, res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_8(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res); + + m68ki_write_8((mc68kcpu), ea, (mc68kcpu)->not_z_flag); +} + + +static void m68k_op_add_8_re_ix(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AY_IX_8(mc68kcpu); + uint32_t src = MASK_OUT_ABOVE_8(DX(mc68kcpu)); + uint32_t dst = m68ki_read_8((mc68kcpu), ea); + uint32_t res = src + dst; + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->v_flag = VFLAG_ADD_8(src, dst, res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_8(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res); + + m68ki_write_8((mc68kcpu), ea, (mc68kcpu)->not_z_flag); +} + + +static void m68k_op_add_8_re_aw(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AW_8(mc68kcpu); + uint32_t src = MASK_OUT_ABOVE_8(DX(mc68kcpu)); + uint32_t dst = m68ki_read_8((mc68kcpu), ea); + uint32_t res = src + dst; + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->v_flag = VFLAG_ADD_8(src, dst, res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_8(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res); + + m68ki_write_8((mc68kcpu), ea, (mc68kcpu)->not_z_flag); +} + + +static void m68k_op_add_8_re_al(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AL_8(mc68kcpu); + uint32_t src = MASK_OUT_ABOVE_8(DX(mc68kcpu)); + uint32_t dst = m68ki_read_8((mc68kcpu), ea); + uint32_t res = src + dst; + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->v_flag = VFLAG_ADD_8(src, dst, res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_8(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res); + + m68ki_write_8((mc68kcpu), ea, (mc68kcpu)->not_z_flag); +} + + +static void m68k_op_add_16_re_ai(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AY_AI_16(mc68kcpu); + uint32_t src = MASK_OUT_ABOVE_16(DX(mc68kcpu)); + uint32_t dst = m68ki_read_16((mc68kcpu), ea); + uint32_t res = src + dst; + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->v_flag = VFLAG_ADD_16(src, dst, res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_16(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res); + + m68ki_write_16((mc68kcpu), ea, (mc68kcpu)->not_z_flag); +} + + +static void m68k_op_add_16_re_pi(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AY_PI_16(mc68kcpu); + uint32_t src = MASK_OUT_ABOVE_16(DX(mc68kcpu)); + uint32_t dst = m68ki_read_16((mc68kcpu), ea); + uint32_t res = src + dst; + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->v_flag = VFLAG_ADD_16(src, dst, res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_16(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res); + + m68ki_write_16((mc68kcpu), ea, (mc68kcpu)->not_z_flag); +} + + +static void m68k_op_add_16_re_pd(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AY_PD_16(mc68kcpu); + uint32_t src = MASK_OUT_ABOVE_16(DX(mc68kcpu)); + uint32_t dst = m68ki_read_16((mc68kcpu), ea); + uint32_t res = src + dst; + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->v_flag = VFLAG_ADD_16(src, dst, res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_16(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res); + + m68ki_write_16((mc68kcpu), ea, (mc68kcpu)->not_z_flag); +} + + +static void m68k_op_add_16_re_di(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AY_DI_16(mc68kcpu); + uint32_t src = MASK_OUT_ABOVE_16(DX(mc68kcpu)); + uint32_t dst = m68ki_read_16((mc68kcpu), ea); + uint32_t res = src + dst; + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->v_flag = VFLAG_ADD_16(src, dst, res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_16(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res); + + m68ki_write_16((mc68kcpu), ea, (mc68kcpu)->not_z_flag); +} + + +static void m68k_op_add_16_re_ix(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AY_IX_16(mc68kcpu); + uint32_t src = MASK_OUT_ABOVE_16(DX(mc68kcpu)); + uint32_t dst = m68ki_read_16((mc68kcpu), ea); + uint32_t res = src + dst; + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->v_flag = VFLAG_ADD_16(src, dst, res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_16(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res); + + m68ki_write_16((mc68kcpu), ea, (mc68kcpu)->not_z_flag); +} + + +static void m68k_op_add_16_re_aw(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AW_16(mc68kcpu); + uint32_t src = MASK_OUT_ABOVE_16(DX(mc68kcpu)); + uint32_t dst = m68ki_read_16((mc68kcpu), ea); + uint32_t res = src + dst; + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->v_flag = VFLAG_ADD_16(src, dst, res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_16(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res); + + m68ki_write_16((mc68kcpu), ea, (mc68kcpu)->not_z_flag); +} + + +static void m68k_op_add_16_re_al(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AL_16(mc68kcpu); + uint32_t src = MASK_OUT_ABOVE_16(DX(mc68kcpu)); + uint32_t dst = m68ki_read_16((mc68kcpu), ea); + uint32_t res = src + dst; + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->v_flag = VFLAG_ADD_16(src, dst, res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_16(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res); + + m68ki_write_16((mc68kcpu), ea, (mc68kcpu)->not_z_flag); +} + + +static void m68k_op_add_32_re_ai(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AY_AI_32(mc68kcpu); + uint32_t src = DX(mc68kcpu); + uint32_t dst = m68ki_read_32((mc68kcpu), ea); + uint32_t res = src + dst; + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->v_flag = VFLAG_ADD_32(src, dst, res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_ADD_32(src, dst, res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res); + + m68ki_write_32((mc68kcpu), ea, (mc68kcpu)->not_z_flag); +} + + +static void m68k_op_add_32_re_pi(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AY_PI_32(mc68kcpu); + uint32_t src = DX(mc68kcpu); + uint32_t dst = m68ki_read_32((mc68kcpu), ea); + uint32_t res = src + dst; + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->v_flag = VFLAG_ADD_32(src, dst, res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_ADD_32(src, dst, res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res); + + m68ki_write_32((mc68kcpu), ea, (mc68kcpu)->not_z_flag); +} + + +static void m68k_op_add_32_re_pd(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AY_PD_32(mc68kcpu); + uint32_t src = DX(mc68kcpu); + uint32_t dst = m68ki_read_32((mc68kcpu), ea); + uint32_t res = src + dst; + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->v_flag = VFLAG_ADD_32(src, dst, res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_ADD_32(src, dst, res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res); + + m68ki_write_32((mc68kcpu), ea, (mc68kcpu)->not_z_flag); +} + + +static void m68k_op_add_32_re_di(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AY_DI_32(mc68kcpu); + uint32_t src = DX(mc68kcpu); + uint32_t dst = m68ki_read_32((mc68kcpu), ea); + uint32_t res = src + dst; + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->v_flag = VFLAG_ADD_32(src, dst, res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_ADD_32(src, dst, res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res); + + m68ki_write_32((mc68kcpu), ea, (mc68kcpu)->not_z_flag); +} + + +static void m68k_op_add_32_re_ix(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AY_IX_32(mc68kcpu); + uint32_t src = DX(mc68kcpu); + uint32_t dst = m68ki_read_32((mc68kcpu), ea); + uint32_t res = src + dst; + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->v_flag = VFLAG_ADD_32(src, dst, res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_ADD_32(src, dst, res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res); + + m68ki_write_32((mc68kcpu), ea, (mc68kcpu)->not_z_flag); +} + + +static void m68k_op_add_32_re_aw(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AW_32(mc68kcpu); + uint32_t src = DX(mc68kcpu); + uint32_t dst = m68ki_read_32((mc68kcpu), ea); + uint32_t res = src + dst; + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->v_flag = VFLAG_ADD_32(src, dst, res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_ADD_32(src, dst, res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res); + + m68ki_write_32((mc68kcpu), ea, (mc68kcpu)->not_z_flag); +} + + +static void m68k_op_add_32_re_al(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AL_32(mc68kcpu); + uint32_t src = DX(mc68kcpu); + uint32_t dst = m68ki_read_32((mc68kcpu), ea); + uint32_t res = src + dst; + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->v_flag = VFLAG_ADD_32(src, dst, res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_ADD_32(src, dst, res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res); + + m68ki_write_32((mc68kcpu), ea, (mc68kcpu)->not_z_flag); +} + + +static void m68k_op_adda_16_d(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &AX(mc68kcpu); + + *r_dst = MASK_OUT_ABOVE_32(*r_dst + MAKE_INT_16(DY(mc68kcpu))); +} + + +static void m68k_op_adda_16_a(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &AX(mc68kcpu); + + *r_dst = MASK_OUT_ABOVE_32(*r_dst + MAKE_INT_16(AY(mc68kcpu))); +} + + +static void m68k_op_adda_16_ai(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &AX(mc68kcpu); + uint32_t src = MAKE_INT_16(OPER_AY_AI_16(mc68kcpu)); + + *r_dst = MASK_OUT_ABOVE_32(*r_dst + src); +} + + +static void m68k_op_adda_16_pi(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &AX(mc68kcpu); + uint32_t src = MAKE_INT_16(OPER_AY_PI_16(mc68kcpu)); + + *r_dst = MASK_OUT_ABOVE_32(*r_dst + src); +} + + +static void m68k_op_adda_16_pd(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &AX(mc68kcpu); + uint32_t src = MAKE_INT_16(OPER_AY_PD_16(mc68kcpu)); + + *r_dst = MASK_OUT_ABOVE_32(*r_dst + src); +} + + +static void m68k_op_adda_16_di(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &AX(mc68kcpu); + uint32_t src = MAKE_INT_16(OPER_AY_DI_16(mc68kcpu)); + + *r_dst = MASK_OUT_ABOVE_32(*r_dst + src); +} + + +static void m68k_op_adda_16_ix(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &AX(mc68kcpu); + uint32_t src = MAKE_INT_16(OPER_AY_IX_16(mc68kcpu)); + + *r_dst = MASK_OUT_ABOVE_32(*r_dst + src); +} + + +static void m68k_op_adda_16_aw(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &AX(mc68kcpu); + uint32_t src = MAKE_INT_16(OPER_AW_16(mc68kcpu)); + + *r_dst = MASK_OUT_ABOVE_32(*r_dst + src); +} + + +static void m68k_op_adda_16_al(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &AX(mc68kcpu); + uint32_t src = MAKE_INT_16(OPER_AL_16(mc68kcpu)); + + *r_dst = MASK_OUT_ABOVE_32(*r_dst + src); +} + + +static void m68k_op_adda_16_pcdi(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &AX(mc68kcpu); + uint32_t src = MAKE_INT_16(OPER_PCDI_16(mc68kcpu)); + + *r_dst = MASK_OUT_ABOVE_32(*r_dst + src); +} + + +static void m68k_op_adda_16_pcix(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &AX(mc68kcpu); + uint32_t src = MAKE_INT_16(OPER_PCIX_16(mc68kcpu)); + + *r_dst = MASK_OUT_ABOVE_32(*r_dst + src); +} + + +static void m68k_op_adda_16_i(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &AX(mc68kcpu); + uint32_t src = MAKE_INT_16(OPER_I_16(mc68kcpu)); + + *r_dst = MASK_OUT_ABOVE_32(*r_dst + src); +} + + +static void m68k_op_adda_32_d(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &AX(mc68kcpu); + + *r_dst = MASK_OUT_ABOVE_32(*r_dst + DY(mc68kcpu)); +} + + +static void m68k_op_adda_32_a(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &AX(mc68kcpu); + + *r_dst = MASK_OUT_ABOVE_32(*r_dst + AY(mc68kcpu)); +} + + +static void m68k_op_adda_32_ai(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &AX(mc68kcpu); + uint32_t src = OPER_AY_AI_32(mc68kcpu); + + *r_dst = MASK_OUT_ABOVE_32(*r_dst + src); +} + + +static void m68k_op_adda_32_pi(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &AX(mc68kcpu); + uint32_t src = OPER_AY_PI_32(mc68kcpu); + + *r_dst = MASK_OUT_ABOVE_32(*r_dst + src); +} + + +static void m68k_op_adda_32_pd(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &AX(mc68kcpu); + uint32_t src = OPER_AY_PD_32(mc68kcpu); + + *r_dst = MASK_OUT_ABOVE_32(*r_dst + src); +} + + +static void m68k_op_adda_32_di(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &AX(mc68kcpu); + uint32_t src = OPER_AY_DI_32(mc68kcpu); + + *r_dst = MASK_OUT_ABOVE_32(*r_dst + src); +} + + +static void m68k_op_adda_32_ix(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &AX(mc68kcpu); + uint32_t src = OPER_AY_IX_32(mc68kcpu); + + *r_dst = MASK_OUT_ABOVE_32(*r_dst + src); +} + + +static void m68k_op_adda_32_aw(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &AX(mc68kcpu); + uint32_t src = OPER_AW_32(mc68kcpu); + + *r_dst = MASK_OUT_ABOVE_32(*r_dst + src); +} + + +static void m68k_op_adda_32_al(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &AX(mc68kcpu); + uint32_t src = OPER_AL_32(mc68kcpu); + + *r_dst = MASK_OUT_ABOVE_32(*r_dst + src); +} + + +static void m68k_op_adda_32_pcdi(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &AX(mc68kcpu); + uint32_t src = OPER_PCDI_32(mc68kcpu); + + *r_dst = MASK_OUT_ABOVE_32(*r_dst + src); +} + + +static void m68k_op_adda_32_pcix(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &AX(mc68kcpu); + uint32_t src = OPER_PCIX_32(mc68kcpu); + + *r_dst = MASK_OUT_ABOVE_32(*r_dst + src); +} + + +static void m68k_op_adda_32_i(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &AX(mc68kcpu); + uint32_t src = OPER_I_32(mc68kcpu); + + *r_dst = MASK_OUT_ABOVE_32(*r_dst + src); +} + + +static void m68k_op_addi_8_d(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &DY(mc68kcpu); + uint32_t src = OPER_I_8(mc68kcpu); + uint32_t dst = MASK_OUT_ABOVE_8(*r_dst); + uint32_t res = src + dst; + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->v_flag = VFLAG_ADD_8(src, dst, res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_8(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res); + + *r_dst = MASK_OUT_BELOW_8(*r_dst) | (mc68kcpu)->not_z_flag; +} + + +static void m68k_op_addi_8_ai(m68000_base_device* mc68kcpu) +{ + uint32_t src = OPER_I_8(mc68kcpu); + uint32_t ea = EA_AY_AI_8(mc68kcpu); + uint32_t dst = m68ki_read_8((mc68kcpu), ea); + uint32_t res = src + dst; + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->v_flag = VFLAG_ADD_8(src, dst, res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_8(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res); + + m68ki_write_8((mc68kcpu), ea, (mc68kcpu)->not_z_flag); +} + + +static void m68k_op_addi_8_pi(m68000_base_device* mc68kcpu) +{ + uint32_t src = OPER_I_8(mc68kcpu); + uint32_t ea = EA_AY_PI_8(mc68kcpu); + uint32_t dst = m68ki_read_8((mc68kcpu), ea); + uint32_t res = src + dst; + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->v_flag = VFLAG_ADD_8(src, dst, res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_8(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res); + + m68ki_write_8((mc68kcpu), ea, (mc68kcpu)->not_z_flag); +} + + +static void m68k_op_addi_8_pi7(m68000_base_device* mc68kcpu) +{ + uint32_t src = OPER_I_8(mc68kcpu); + uint32_t ea = EA_A7_PI_8(mc68kcpu); + uint32_t dst = m68ki_read_8((mc68kcpu), ea); + uint32_t res = src + dst; + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->v_flag = VFLAG_ADD_8(src, dst, res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_8(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res); + + m68ki_write_8((mc68kcpu), ea, (mc68kcpu)->not_z_flag); +} + + +static void m68k_op_addi_8_pd(m68000_base_device* mc68kcpu) +{ + uint32_t src = OPER_I_8(mc68kcpu); + uint32_t ea = EA_AY_PD_8(mc68kcpu); + uint32_t dst = m68ki_read_8((mc68kcpu), ea); + uint32_t res = src + dst; + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->v_flag = VFLAG_ADD_8(src, dst, res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_8(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res); + + m68ki_write_8((mc68kcpu), ea, (mc68kcpu)->not_z_flag); +} + + +static void m68k_op_addi_8_pd7(m68000_base_device* mc68kcpu) +{ + uint32_t src = OPER_I_8(mc68kcpu); + uint32_t ea = EA_A7_PD_8(mc68kcpu); + uint32_t dst = m68ki_read_8((mc68kcpu), ea); + uint32_t res = src + dst; + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->v_flag = VFLAG_ADD_8(src, dst, res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_8(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res); + + m68ki_write_8((mc68kcpu), ea, (mc68kcpu)->not_z_flag); +} + + +static void m68k_op_addi_8_di(m68000_base_device* mc68kcpu) +{ + uint32_t src = OPER_I_8(mc68kcpu); + uint32_t ea = EA_AY_DI_8(mc68kcpu); + uint32_t dst = m68ki_read_8((mc68kcpu), ea); + uint32_t res = src + dst; + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->v_flag = VFLAG_ADD_8(src, dst, res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_8(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res); + + m68ki_write_8((mc68kcpu), ea, (mc68kcpu)->not_z_flag); +} + + +static void m68k_op_addi_8_ix(m68000_base_device* mc68kcpu) +{ + uint32_t src = OPER_I_8(mc68kcpu); + uint32_t ea = EA_AY_IX_8(mc68kcpu); + uint32_t dst = m68ki_read_8((mc68kcpu), ea); + uint32_t res = src + dst; + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->v_flag = VFLAG_ADD_8(src, dst, res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_8(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res); + + m68ki_write_8((mc68kcpu), ea, (mc68kcpu)->not_z_flag); +} + + +static void m68k_op_addi_8_aw(m68000_base_device* mc68kcpu) +{ + uint32_t src = OPER_I_8(mc68kcpu); + uint32_t ea = EA_AW_8(mc68kcpu); + uint32_t dst = m68ki_read_8((mc68kcpu), ea); + uint32_t res = src + dst; + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->v_flag = VFLAG_ADD_8(src, dst, res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_8(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res); + + m68ki_write_8((mc68kcpu), ea, (mc68kcpu)->not_z_flag); +} + + +static void m68k_op_addi_8_al(m68000_base_device* mc68kcpu) +{ + uint32_t src = OPER_I_8(mc68kcpu); + uint32_t ea = EA_AL_8(mc68kcpu); + uint32_t dst = m68ki_read_8((mc68kcpu), ea); + uint32_t res = src + dst; + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->v_flag = VFLAG_ADD_8(src, dst, res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_8(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res); + + m68ki_write_8((mc68kcpu), ea, (mc68kcpu)->not_z_flag); +} + + +static void m68k_op_addi_16_d(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &DY(mc68kcpu); + uint32_t src = OPER_I_16(mc68kcpu); + uint32_t dst = MASK_OUT_ABOVE_16(*r_dst); + uint32_t res = src + dst; + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->v_flag = VFLAG_ADD_16(src, dst, res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_16(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res); + + *r_dst = MASK_OUT_BELOW_16(*r_dst) | (mc68kcpu)->not_z_flag; +} + + +static void m68k_op_addi_16_ai(m68000_base_device* mc68kcpu) +{ + uint32_t src = OPER_I_16(mc68kcpu); + uint32_t ea = EA_AY_AI_16(mc68kcpu); + uint32_t dst = m68ki_read_16((mc68kcpu), ea); + uint32_t res = src + dst; + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->v_flag = VFLAG_ADD_16(src, dst, res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_16(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res); + + m68ki_write_16((mc68kcpu), ea, (mc68kcpu)->not_z_flag); +} + + +static void m68k_op_addi_16_pi(m68000_base_device* mc68kcpu) +{ + uint32_t src = OPER_I_16(mc68kcpu); + uint32_t ea = EA_AY_PI_16(mc68kcpu); + uint32_t dst = m68ki_read_16((mc68kcpu), ea); + uint32_t res = src + dst; + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->v_flag = VFLAG_ADD_16(src, dst, res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_16(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res); + + m68ki_write_16((mc68kcpu), ea, (mc68kcpu)->not_z_flag); +} + + +static void m68k_op_addi_16_pd(m68000_base_device* mc68kcpu) +{ + uint32_t src = OPER_I_16(mc68kcpu); + uint32_t ea = EA_AY_PD_16(mc68kcpu); + uint32_t dst = m68ki_read_16((mc68kcpu), ea); + uint32_t res = src + dst; + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->v_flag = VFLAG_ADD_16(src, dst, res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_16(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res); + + m68ki_write_16((mc68kcpu), ea, (mc68kcpu)->not_z_flag); +} + + +static void m68k_op_addi_16_di(m68000_base_device* mc68kcpu) +{ + uint32_t src = OPER_I_16(mc68kcpu); + uint32_t ea = EA_AY_DI_16(mc68kcpu); + uint32_t dst = m68ki_read_16((mc68kcpu), ea); + uint32_t res = src + dst; + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->v_flag = VFLAG_ADD_16(src, dst, res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_16(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res); + + m68ki_write_16((mc68kcpu), ea, (mc68kcpu)->not_z_flag); +} + + +static void m68k_op_addi_16_ix(m68000_base_device* mc68kcpu) +{ + uint32_t src = OPER_I_16(mc68kcpu); + uint32_t ea = EA_AY_IX_16(mc68kcpu); + uint32_t dst = m68ki_read_16((mc68kcpu), ea); + uint32_t res = src + dst; + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->v_flag = VFLAG_ADD_16(src, dst, res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_16(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res); + + m68ki_write_16((mc68kcpu), ea, (mc68kcpu)->not_z_flag); +} + + +static void m68k_op_addi_16_aw(m68000_base_device* mc68kcpu) +{ + uint32_t src = OPER_I_16(mc68kcpu); + uint32_t ea = EA_AW_16(mc68kcpu); + uint32_t dst = m68ki_read_16((mc68kcpu), ea); + uint32_t res = src + dst; + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->v_flag = VFLAG_ADD_16(src, dst, res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_16(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res); + + m68ki_write_16((mc68kcpu), ea, (mc68kcpu)->not_z_flag); +} + + +static void m68k_op_addi_16_al(m68000_base_device* mc68kcpu) +{ + uint32_t src = OPER_I_16(mc68kcpu); + uint32_t ea = EA_AL_16(mc68kcpu); + uint32_t dst = m68ki_read_16((mc68kcpu), ea); + uint32_t res = src + dst; + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->v_flag = VFLAG_ADD_16(src, dst, res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_16(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res); + + m68ki_write_16((mc68kcpu), ea, (mc68kcpu)->not_z_flag); +} + + +static void m68k_op_addi_32_d(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &DY(mc68kcpu); + uint32_t src = OPER_I_32(mc68kcpu); + uint32_t dst = *r_dst; + uint32_t res = src + dst; + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->v_flag = VFLAG_ADD_32(src, dst, res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_ADD_32(src, dst, res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res); + + *r_dst = (mc68kcpu)->not_z_flag; +} + + +static void m68k_op_addi_32_ai(m68000_base_device* mc68kcpu) +{ + uint32_t src = OPER_I_32(mc68kcpu); + uint32_t ea = EA_AY_AI_32(mc68kcpu); + uint32_t dst = m68ki_read_32((mc68kcpu), ea); + uint32_t res = src + dst; + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->v_flag = VFLAG_ADD_32(src, dst, res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_ADD_32(src, dst, res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res); + + m68ki_write_32((mc68kcpu), ea, (mc68kcpu)->not_z_flag); +} + + +static void m68k_op_addi_32_pi(m68000_base_device* mc68kcpu) +{ + uint32_t src = OPER_I_32(mc68kcpu); + uint32_t ea = EA_AY_PI_32(mc68kcpu); + uint32_t dst = m68ki_read_32((mc68kcpu), ea); + uint32_t res = src + dst; + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->v_flag = VFLAG_ADD_32(src, dst, res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_ADD_32(src, dst, res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res); + + m68ki_write_32((mc68kcpu), ea, (mc68kcpu)->not_z_flag); +} + + +static void m68k_op_addi_32_pd(m68000_base_device* mc68kcpu) +{ + uint32_t src = OPER_I_32(mc68kcpu); + uint32_t ea = EA_AY_PD_32(mc68kcpu); + uint32_t dst = m68ki_read_32((mc68kcpu), ea); + uint32_t res = src + dst; + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->v_flag = VFLAG_ADD_32(src, dst, res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_ADD_32(src, dst, res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res); + + m68ki_write_32((mc68kcpu), ea, (mc68kcpu)->not_z_flag); +} + + +static void m68k_op_addi_32_di(m68000_base_device* mc68kcpu) +{ + uint32_t src = OPER_I_32(mc68kcpu); + uint32_t ea = EA_AY_DI_32(mc68kcpu); + uint32_t dst = m68ki_read_32((mc68kcpu), ea); + uint32_t res = src + dst; + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->v_flag = VFLAG_ADD_32(src, dst, res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_ADD_32(src, dst, res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res); + + m68ki_write_32((mc68kcpu), ea, (mc68kcpu)->not_z_flag); +} + + +static void m68k_op_addi_32_ix(m68000_base_device* mc68kcpu) +{ + uint32_t src = OPER_I_32(mc68kcpu); + uint32_t ea = EA_AY_IX_32(mc68kcpu); + uint32_t dst = m68ki_read_32((mc68kcpu), ea); + uint32_t res = src + dst; + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->v_flag = VFLAG_ADD_32(src, dst, res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_ADD_32(src, dst, res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res); + + m68ki_write_32((mc68kcpu), ea, (mc68kcpu)->not_z_flag); +} + + +static void m68k_op_addi_32_aw(m68000_base_device* mc68kcpu) +{ + uint32_t src = OPER_I_32(mc68kcpu); + uint32_t ea = EA_AW_32(mc68kcpu); + uint32_t dst = m68ki_read_32((mc68kcpu), ea); + uint32_t res = src + dst; + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->v_flag = VFLAG_ADD_32(src, dst, res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_ADD_32(src, dst, res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res); + + m68ki_write_32((mc68kcpu), ea, (mc68kcpu)->not_z_flag); +} + + +static void m68k_op_addi_32_al(m68000_base_device* mc68kcpu) +{ + uint32_t src = OPER_I_32(mc68kcpu); + uint32_t ea = EA_AL_32(mc68kcpu); + uint32_t dst = m68ki_read_32((mc68kcpu), ea); + uint32_t res = src + dst; + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->v_flag = VFLAG_ADD_32(src, dst, res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_ADD_32(src, dst, res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res); + + m68ki_write_32((mc68kcpu), ea, (mc68kcpu)->not_z_flag); +} + + +static void m68k_op_addq_8_d(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &DY(mc68kcpu); + uint32_t src = ((((mc68kcpu)->ir >> 9) - 1) & 7) + 1; + uint32_t dst = MASK_OUT_ABOVE_8(*r_dst); + uint32_t res = src + dst; + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->v_flag = VFLAG_ADD_8(src, dst, res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_8(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res); + + *r_dst = MASK_OUT_BELOW_8(*r_dst) | (mc68kcpu)->not_z_flag; +} + + +static void m68k_op_addq_8_ai(m68000_base_device* mc68kcpu) +{ + uint32_t src = ((((mc68kcpu)->ir >> 9) - 1) & 7) + 1; + uint32_t ea = EA_AY_AI_8(mc68kcpu); + uint32_t dst = m68ki_read_8((mc68kcpu), ea); + uint32_t res = src + dst; + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->v_flag = VFLAG_ADD_8(src, dst, res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_8(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res); + + m68ki_write_8((mc68kcpu), ea, (mc68kcpu)->not_z_flag); +} + + +static void m68k_op_addq_8_pi(m68000_base_device* mc68kcpu) +{ + uint32_t src = ((((mc68kcpu)->ir >> 9) - 1) & 7) + 1; + uint32_t ea = EA_AY_PI_8(mc68kcpu); + uint32_t dst = m68ki_read_8((mc68kcpu), ea); + uint32_t res = src + dst; + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->v_flag = VFLAG_ADD_8(src, dst, res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_8(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res); + + m68ki_write_8((mc68kcpu), ea, (mc68kcpu)->not_z_flag); +} + + +static void m68k_op_addq_8_pi7(m68000_base_device* mc68kcpu) +{ + uint32_t src = ((((mc68kcpu)->ir >> 9) - 1) & 7) + 1; + uint32_t ea = EA_A7_PI_8(mc68kcpu); + uint32_t dst = m68ki_read_8((mc68kcpu), ea); + uint32_t res = src + dst; + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->v_flag = VFLAG_ADD_8(src, dst, res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_8(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res); + + m68ki_write_8((mc68kcpu), ea, (mc68kcpu)->not_z_flag); +} + + +static void m68k_op_addq_8_pd(m68000_base_device* mc68kcpu) +{ + uint32_t src = ((((mc68kcpu)->ir >> 9) - 1) & 7) + 1; + uint32_t ea = EA_AY_PD_8(mc68kcpu); + uint32_t dst = m68ki_read_8((mc68kcpu), ea); + uint32_t res = src + dst; + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->v_flag = VFLAG_ADD_8(src, dst, res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_8(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res); + + m68ki_write_8((mc68kcpu), ea, (mc68kcpu)->not_z_flag); +} + + +static void m68k_op_addq_8_pd7(m68000_base_device* mc68kcpu) +{ + uint32_t src = ((((mc68kcpu)->ir >> 9) - 1) & 7) + 1; + uint32_t ea = EA_A7_PD_8(mc68kcpu); + uint32_t dst = m68ki_read_8((mc68kcpu), ea); + uint32_t res = src + dst; + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->v_flag = VFLAG_ADD_8(src, dst, res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_8(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res); + + m68ki_write_8((mc68kcpu), ea, (mc68kcpu)->not_z_flag); +} + + +static void m68k_op_addq_8_di(m68000_base_device* mc68kcpu) +{ + uint32_t src = ((((mc68kcpu)->ir >> 9) - 1) & 7) + 1; + uint32_t ea = EA_AY_DI_8(mc68kcpu); + uint32_t dst = m68ki_read_8((mc68kcpu), ea); + uint32_t res = src + dst; + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->v_flag = VFLAG_ADD_8(src, dst, res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_8(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res); + + m68ki_write_8((mc68kcpu), ea, (mc68kcpu)->not_z_flag); +} + + +static void m68k_op_addq_8_ix(m68000_base_device* mc68kcpu) +{ + uint32_t src = ((((mc68kcpu)->ir >> 9) - 1) & 7) + 1; + uint32_t ea = EA_AY_IX_8(mc68kcpu); + uint32_t dst = m68ki_read_8((mc68kcpu), ea); + uint32_t res = src + dst; + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->v_flag = VFLAG_ADD_8(src, dst, res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_8(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res); + + m68ki_write_8((mc68kcpu), ea, (mc68kcpu)->not_z_flag); +} + + +static void m68k_op_addq_8_aw(m68000_base_device* mc68kcpu) +{ + uint32_t src = ((((mc68kcpu)->ir >> 9) - 1) & 7) + 1; + uint32_t ea = EA_AW_8(mc68kcpu); + uint32_t dst = m68ki_read_8((mc68kcpu), ea); + uint32_t res = src + dst; + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->v_flag = VFLAG_ADD_8(src, dst, res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_8(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res); + + m68ki_write_8((mc68kcpu), ea, (mc68kcpu)->not_z_flag); +} + + +static void m68k_op_addq_8_al(m68000_base_device* mc68kcpu) +{ + uint32_t src = ((((mc68kcpu)->ir >> 9) - 1) & 7) + 1; + uint32_t ea = EA_AL_8(mc68kcpu); + uint32_t dst = m68ki_read_8((mc68kcpu), ea); + uint32_t res = src + dst; + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->v_flag = VFLAG_ADD_8(src, dst, res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_8(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res); + + m68ki_write_8((mc68kcpu), ea, (mc68kcpu)->not_z_flag); +} + + +static void m68k_op_addq_16_d(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &DY(mc68kcpu); + uint32_t src = ((((mc68kcpu)->ir >> 9) - 1) & 7) + 1; + uint32_t dst = MASK_OUT_ABOVE_16(*r_dst); + uint32_t res = src + dst; + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->v_flag = VFLAG_ADD_16(src, dst, res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_16(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res); + + *r_dst = MASK_OUT_BELOW_16(*r_dst) | (mc68kcpu)->not_z_flag; +} + + +static void m68k_op_addq_16_a(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &AY(mc68kcpu); + + *r_dst = MASK_OUT_ABOVE_32(*r_dst + ((((mc68kcpu)->ir >> 9) - 1) & 7) + 1); +} + + +static void m68k_op_addq_16_ai(m68000_base_device* mc68kcpu) +{ + uint32_t src = ((((mc68kcpu)->ir >> 9) - 1) & 7) + 1; + uint32_t ea = EA_AY_AI_16(mc68kcpu); + uint32_t dst = m68ki_read_16((mc68kcpu), ea); + uint32_t res = src + dst; + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->v_flag = VFLAG_ADD_16(src, dst, res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_16(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res); + + m68ki_write_16((mc68kcpu), ea, (mc68kcpu)->not_z_flag); +} + + +static void m68k_op_addq_16_pi(m68000_base_device* mc68kcpu) +{ + uint32_t src = ((((mc68kcpu)->ir >> 9) - 1) & 7) + 1; + uint32_t ea = EA_AY_PI_16(mc68kcpu); + uint32_t dst = m68ki_read_16((mc68kcpu), ea); + uint32_t res = src + dst; + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->v_flag = VFLAG_ADD_16(src, dst, res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_16(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res); + + m68ki_write_16((mc68kcpu), ea, (mc68kcpu)->not_z_flag); +} + + +static void m68k_op_addq_16_pd(m68000_base_device* mc68kcpu) +{ + uint32_t src = ((((mc68kcpu)->ir >> 9) - 1) & 7) + 1; + uint32_t ea = EA_AY_PD_16(mc68kcpu); + uint32_t dst = m68ki_read_16((mc68kcpu), ea); + uint32_t res = src + dst; + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->v_flag = VFLAG_ADD_16(src, dst, res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_16(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res); + + m68ki_write_16((mc68kcpu), ea, (mc68kcpu)->not_z_flag); +} + + +static void m68k_op_addq_16_di(m68000_base_device* mc68kcpu) +{ + uint32_t src = ((((mc68kcpu)->ir >> 9) - 1) & 7) + 1; + uint32_t ea = EA_AY_DI_16(mc68kcpu); + uint32_t dst = m68ki_read_16((mc68kcpu), ea); + uint32_t res = src + dst; + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->v_flag = VFLAG_ADD_16(src, dst, res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_16(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res); + + m68ki_write_16((mc68kcpu), ea, (mc68kcpu)->not_z_flag); +} + + +static void m68k_op_addq_16_ix(m68000_base_device* mc68kcpu) +{ + uint32_t src = ((((mc68kcpu)->ir >> 9) - 1) & 7) + 1; + uint32_t ea = EA_AY_IX_16(mc68kcpu); + uint32_t dst = m68ki_read_16((mc68kcpu), ea); + uint32_t res = src + dst; + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->v_flag = VFLAG_ADD_16(src, dst, res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_16(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res); + + m68ki_write_16((mc68kcpu), ea, (mc68kcpu)->not_z_flag); +} + + +static void m68k_op_addq_16_aw(m68000_base_device* mc68kcpu) +{ + uint32_t src = ((((mc68kcpu)->ir >> 9) - 1) & 7) + 1; + uint32_t ea = EA_AW_16(mc68kcpu); + uint32_t dst = m68ki_read_16((mc68kcpu), ea); + uint32_t res = src + dst; + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->v_flag = VFLAG_ADD_16(src, dst, res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_16(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res); + + m68ki_write_16((mc68kcpu), ea, (mc68kcpu)->not_z_flag); +} + + +static void m68k_op_addq_16_al(m68000_base_device* mc68kcpu) +{ + uint32_t src = ((((mc68kcpu)->ir >> 9) - 1) & 7) + 1; + uint32_t ea = EA_AL_16(mc68kcpu); + uint32_t dst = m68ki_read_16((mc68kcpu), ea); + uint32_t res = src + dst; + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->v_flag = VFLAG_ADD_16(src, dst, res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_16(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res); + + m68ki_write_16((mc68kcpu), ea, (mc68kcpu)->not_z_flag); +} + + +static void m68k_op_addq_32_d(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &DY(mc68kcpu); + uint32_t src = ((((mc68kcpu)->ir >> 9) - 1) & 7) + 1; + uint32_t dst = *r_dst; + uint32_t res = src + dst; + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->v_flag = VFLAG_ADD_32(src, dst, res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_ADD_32(src, dst, res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res); + + *r_dst = (mc68kcpu)->not_z_flag; +} + + +static void m68k_op_addq_32_a(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &AY(mc68kcpu); + + *r_dst = MASK_OUT_ABOVE_32(*r_dst + ((((mc68kcpu)->ir >> 9) - 1) & 7) + 1); +} + + +static void m68k_op_addq_32_ai(m68000_base_device* mc68kcpu) +{ + uint32_t src = ((((mc68kcpu)->ir >> 9) - 1) & 7) + 1; + uint32_t ea = EA_AY_AI_32(mc68kcpu); + uint32_t dst = m68ki_read_32((mc68kcpu), ea); + uint32_t res = src + dst; + + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->v_flag = VFLAG_ADD_32(src, dst, res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_ADD_32(src, dst, res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res); + + m68ki_write_32((mc68kcpu), ea, (mc68kcpu)->not_z_flag); +} + + +static void m68k_op_addq_32_pi(m68000_base_device* mc68kcpu) +{ + uint32_t src = ((((mc68kcpu)->ir >> 9) - 1) & 7) + 1; + uint32_t ea = EA_AY_PI_32(mc68kcpu); + uint32_t dst = m68ki_read_32((mc68kcpu), ea); + uint32_t res = src + dst; + + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->v_flag = VFLAG_ADD_32(src, dst, res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_ADD_32(src, dst, res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res); + + m68ki_write_32((mc68kcpu), ea, (mc68kcpu)->not_z_flag); +} + + +static void m68k_op_addq_32_pd(m68000_base_device* mc68kcpu) +{ + uint32_t src = ((((mc68kcpu)->ir >> 9) - 1) & 7) + 1; + uint32_t ea = EA_AY_PD_32(mc68kcpu); + uint32_t dst = m68ki_read_32((mc68kcpu), ea); + uint32_t res = src + dst; + + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->v_flag = VFLAG_ADD_32(src, dst, res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_ADD_32(src, dst, res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res); + + m68ki_write_32((mc68kcpu), ea, (mc68kcpu)->not_z_flag); +} + + +static void m68k_op_addq_32_di(m68000_base_device* mc68kcpu) +{ + uint32_t src = ((((mc68kcpu)->ir >> 9) - 1) & 7) + 1; + uint32_t ea = EA_AY_DI_32(mc68kcpu); + uint32_t dst = m68ki_read_32((mc68kcpu), ea); + uint32_t res = src + dst; + + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->v_flag = VFLAG_ADD_32(src, dst, res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_ADD_32(src, dst, res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res); + + m68ki_write_32((mc68kcpu), ea, (mc68kcpu)->not_z_flag); +} + + +static void m68k_op_addq_32_ix(m68000_base_device* mc68kcpu) +{ + uint32_t src = ((((mc68kcpu)->ir >> 9) - 1) & 7) + 1; + uint32_t ea = EA_AY_IX_32(mc68kcpu); + uint32_t dst = m68ki_read_32((mc68kcpu), ea); + uint32_t res = src + dst; + + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->v_flag = VFLAG_ADD_32(src, dst, res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_ADD_32(src, dst, res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res); + + m68ki_write_32((mc68kcpu), ea, (mc68kcpu)->not_z_flag); +} + + +static void m68k_op_addq_32_aw(m68000_base_device* mc68kcpu) +{ + uint32_t src = ((((mc68kcpu)->ir >> 9) - 1) & 7) + 1; + uint32_t ea = EA_AW_32(mc68kcpu); + uint32_t dst = m68ki_read_32((mc68kcpu), ea); + uint32_t res = src + dst; + + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->v_flag = VFLAG_ADD_32(src, dst, res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_ADD_32(src, dst, res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res); + + m68ki_write_32((mc68kcpu), ea, (mc68kcpu)->not_z_flag); +} + + +static void m68k_op_addq_32_al(m68000_base_device* mc68kcpu) +{ + uint32_t src = ((((mc68kcpu)->ir >> 9) - 1) & 7) + 1; + uint32_t ea = EA_AL_32(mc68kcpu); + uint32_t dst = m68ki_read_32((mc68kcpu), ea); + uint32_t res = src + dst; + + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->v_flag = VFLAG_ADD_32(src, dst, res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_ADD_32(src, dst, res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res); + + m68ki_write_32((mc68kcpu), ea, (mc68kcpu)->not_z_flag); +} + + +static void m68k_op_addx_8_rr(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &DX(mc68kcpu); + uint32_t src = MASK_OUT_ABOVE_8(DY(mc68kcpu)); + uint32_t dst = MASK_OUT_ABOVE_8(*r_dst); + uint32_t res = src + dst + XFLAG_AS_1(mc68kcpu); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->v_flag = VFLAG_ADD_8(src, dst, res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_8(res); + + res = MASK_OUT_ABOVE_8(res); + (mc68kcpu)->not_z_flag |= res; + + *r_dst = MASK_OUT_BELOW_8(*r_dst) | res; +} + + +static void m68k_op_addx_16_rr(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &DX(mc68kcpu); + uint32_t src = MASK_OUT_ABOVE_16(DY(mc68kcpu)); + uint32_t dst = MASK_OUT_ABOVE_16(*r_dst); + uint32_t res = src + dst + XFLAG_AS_1(mc68kcpu); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->v_flag = VFLAG_ADD_16(src, dst, res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_16(res); + + res = MASK_OUT_ABOVE_16(res); + (mc68kcpu)->not_z_flag |= res; + + *r_dst = MASK_OUT_BELOW_16(*r_dst) | res; +} + + +static void m68k_op_addx_32_rr(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &DX(mc68kcpu); + uint32_t src = DY(mc68kcpu); + uint32_t dst = *r_dst; + uint32_t res = src + dst + XFLAG_AS_1(mc68kcpu); + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->v_flag = VFLAG_ADD_32(src, dst, res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_ADD_32(src, dst, res); + + res = MASK_OUT_ABOVE_32(res); + (mc68kcpu)->not_z_flag |= res; + + *r_dst = res; +} + + +static void m68k_op_addx_8_mm_ax7(m68000_base_device* mc68kcpu) +{ + uint32_t src = OPER_AY_PD_8(mc68kcpu); + uint32_t ea = EA_A7_PD_8(mc68kcpu); + uint32_t dst = m68ki_read_8((mc68kcpu), ea); + uint32_t res = src + dst + XFLAG_AS_1(mc68kcpu); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->v_flag = VFLAG_ADD_8(src, dst, res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_8(res); + + res = MASK_OUT_ABOVE_8(res); + (mc68kcpu)->not_z_flag |= res; + + m68ki_write_8((mc68kcpu), ea, res); +} + + +static void m68k_op_addx_8_mm_ay7(m68000_base_device* mc68kcpu) +{ + uint32_t src = OPER_A7_PD_8(mc68kcpu); + uint32_t ea = EA_AX_PD_8(mc68kcpu); + uint32_t dst = m68ki_read_8((mc68kcpu), ea); + uint32_t res = src + dst + XFLAG_AS_1(mc68kcpu); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->v_flag = VFLAG_ADD_8(src, dst, res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_8(res); + + res = MASK_OUT_ABOVE_8(res); + (mc68kcpu)->not_z_flag |= res; + + m68ki_write_8((mc68kcpu), ea, res); +} + + +static void m68k_op_addx_8_mm_axy7(m68000_base_device* mc68kcpu) +{ + uint32_t src = OPER_A7_PD_8(mc68kcpu); + uint32_t ea = EA_A7_PD_8(mc68kcpu); + uint32_t dst = m68ki_read_8((mc68kcpu), ea); + uint32_t res = src + dst + XFLAG_AS_1(mc68kcpu); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->v_flag = VFLAG_ADD_8(src, dst, res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_8(res); + + res = MASK_OUT_ABOVE_8(res); + (mc68kcpu)->not_z_flag |= res; + + m68ki_write_8((mc68kcpu), ea, res); +} + + +static void m68k_op_addx_8_mm(m68000_base_device* mc68kcpu) +{ + uint32_t src = OPER_AY_PD_8(mc68kcpu); + uint32_t ea = EA_AX_PD_8(mc68kcpu); + uint32_t dst = m68ki_read_8((mc68kcpu), ea); + uint32_t res = src + dst + XFLAG_AS_1(mc68kcpu); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->v_flag = VFLAG_ADD_8(src, dst, res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_8(res); + + res = MASK_OUT_ABOVE_8(res); + (mc68kcpu)->not_z_flag |= res; + + m68ki_write_8((mc68kcpu), ea, res); +} + + +static void m68k_op_addx_16_mm(m68000_base_device* mc68kcpu) +{ + uint32_t src = OPER_AY_PD_16(mc68kcpu); + uint32_t ea = EA_AX_PD_16(mc68kcpu); + uint32_t dst = m68ki_read_16((mc68kcpu), ea); + uint32_t res = src + dst + XFLAG_AS_1(mc68kcpu); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->v_flag = VFLAG_ADD_16(src, dst, res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_16(res); + + res = MASK_OUT_ABOVE_16(res); + (mc68kcpu)->not_z_flag |= res; + + m68ki_write_16((mc68kcpu), ea, res); +} + + +static void m68k_op_addx_32_mm(m68000_base_device* mc68kcpu) +{ + uint32_t src = OPER_AY_PD_32(mc68kcpu); + uint32_t ea = EA_AX_PD_32(mc68kcpu); + uint32_t dst = m68ki_read_32((mc68kcpu), ea); + uint32_t res = src + dst + XFLAG_AS_1(mc68kcpu); + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->v_flag = VFLAG_ADD_32(src, dst, res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_ADD_32(src, dst, res); + + res = MASK_OUT_ABOVE_32(res); + (mc68kcpu)->not_z_flag |= res; + + m68ki_write_32((mc68kcpu), ea, res); +} + + +static void m68k_op_and_8_er_d(m68000_base_device* mc68kcpu) +{ + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(DX(mc68kcpu) &= (DY(mc68kcpu) | 0xffffff00)); + + (mc68kcpu)->n_flag = NFLAG_8((mc68kcpu)->not_z_flag); + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_and_8_er_ai(m68000_base_device* mc68kcpu) +{ + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(DX(mc68kcpu) &= (OPER_AY_AI_8(mc68kcpu) | 0xffffff00)); + + (mc68kcpu)->n_flag = NFLAG_8((mc68kcpu)->not_z_flag); + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_and_8_er_pi(m68000_base_device* mc68kcpu) +{ + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(DX(mc68kcpu) &= (OPER_AY_PI_8(mc68kcpu) | 0xffffff00)); + + (mc68kcpu)->n_flag = NFLAG_8((mc68kcpu)->not_z_flag); + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_and_8_er_pi7(m68000_base_device* mc68kcpu) +{ + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(DX(mc68kcpu) &= (OPER_A7_PI_8(mc68kcpu) | 0xffffff00)); + + (mc68kcpu)->n_flag = NFLAG_8((mc68kcpu)->not_z_flag); + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_and_8_er_pd(m68000_base_device* mc68kcpu) +{ + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(DX(mc68kcpu) &= (OPER_AY_PD_8(mc68kcpu) | 0xffffff00)); + + (mc68kcpu)->n_flag = NFLAG_8((mc68kcpu)->not_z_flag); + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_and_8_er_pd7(m68000_base_device* mc68kcpu) +{ + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(DX(mc68kcpu) &= (OPER_A7_PD_8(mc68kcpu) | 0xffffff00)); + + (mc68kcpu)->n_flag = NFLAG_8((mc68kcpu)->not_z_flag); + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_and_8_er_di(m68000_base_device* mc68kcpu) +{ + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(DX(mc68kcpu) &= (OPER_AY_DI_8(mc68kcpu) | 0xffffff00)); + + (mc68kcpu)->n_flag = NFLAG_8((mc68kcpu)->not_z_flag); + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_and_8_er_ix(m68000_base_device* mc68kcpu) +{ + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(DX(mc68kcpu) &= (OPER_AY_IX_8(mc68kcpu) | 0xffffff00)); + + (mc68kcpu)->n_flag = NFLAG_8((mc68kcpu)->not_z_flag); + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_and_8_er_aw(m68000_base_device* mc68kcpu) +{ + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(DX(mc68kcpu) &= (OPER_AW_8(mc68kcpu) | 0xffffff00)); + + (mc68kcpu)->n_flag = NFLAG_8((mc68kcpu)->not_z_flag); + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_and_8_er_al(m68000_base_device* mc68kcpu) +{ + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(DX(mc68kcpu) &= (OPER_AL_8(mc68kcpu) | 0xffffff00)); + + (mc68kcpu)->n_flag = NFLAG_8((mc68kcpu)->not_z_flag); + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_and_8_er_pcdi(m68000_base_device* mc68kcpu) +{ + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(DX(mc68kcpu) &= (OPER_PCDI_8(mc68kcpu) | 0xffffff00)); + + (mc68kcpu)->n_flag = NFLAG_8((mc68kcpu)->not_z_flag); + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_and_8_er_pcix(m68000_base_device* mc68kcpu) +{ + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(DX(mc68kcpu) &= (OPER_PCIX_8(mc68kcpu) | 0xffffff00)); + + (mc68kcpu)->n_flag = NFLAG_8((mc68kcpu)->not_z_flag); + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_and_8_er_i(m68000_base_device* mc68kcpu) +{ + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(DX(mc68kcpu) &= (OPER_I_8(mc68kcpu) | 0xffffff00)); + + (mc68kcpu)->n_flag = NFLAG_8((mc68kcpu)->not_z_flag); + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_and_16_er_d(m68000_base_device* mc68kcpu) +{ + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(DX(mc68kcpu) &= (DY(mc68kcpu) | 0xffff0000)); + + (mc68kcpu)->n_flag = NFLAG_16((mc68kcpu)->not_z_flag); + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_and_16_er_ai(m68000_base_device* mc68kcpu) +{ + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(DX(mc68kcpu) &= (OPER_AY_AI_16(mc68kcpu) | 0xffff0000)); + + (mc68kcpu)->n_flag = NFLAG_16((mc68kcpu)->not_z_flag); + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_and_16_er_pi(m68000_base_device* mc68kcpu) +{ + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(DX(mc68kcpu) &= (OPER_AY_PI_16(mc68kcpu) | 0xffff0000)); + + (mc68kcpu)->n_flag = NFLAG_16((mc68kcpu)->not_z_flag); + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_and_16_er_pd(m68000_base_device* mc68kcpu) +{ + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(DX(mc68kcpu) &= (OPER_AY_PD_16(mc68kcpu) | 0xffff0000)); + + (mc68kcpu)->n_flag = NFLAG_16((mc68kcpu)->not_z_flag); + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_and_16_er_di(m68000_base_device* mc68kcpu) +{ + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(DX(mc68kcpu) &= (OPER_AY_DI_16(mc68kcpu) | 0xffff0000)); + + (mc68kcpu)->n_flag = NFLAG_16((mc68kcpu)->not_z_flag); + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_and_16_er_ix(m68000_base_device* mc68kcpu) +{ + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(DX(mc68kcpu) &= (OPER_AY_IX_16(mc68kcpu) | 0xffff0000)); + + (mc68kcpu)->n_flag = NFLAG_16((mc68kcpu)->not_z_flag); + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_and_16_er_aw(m68000_base_device* mc68kcpu) +{ + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(DX(mc68kcpu) &= (OPER_AW_16(mc68kcpu) | 0xffff0000)); + + (mc68kcpu)->n_flag = NFLAG_16((mc68kcpu)->not_z_flag); + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_and_16_er_al(m68000_base_device* mc68kcpu) +{ + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(DX(mc68kcpu) &= (OPER_AL_16(mc68kcpu) | 0xffff0000)); + + (mc68kcpu)->n_flag = NFLAG_16((mc68kcpu)->not_z_flag); + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_and_16_er_pcdi(m68000_base_device* mc68kcpu) +{ + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(DX(mc68kcpu) &= (OPER_PCDI_16(mc68kcpu) | 0xffff0000)); + + (mc68kcpu)->n_flag = NFLAG_16((mc68kcpu)->not_z_flag); + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_and_16_er_pcix(m68000_base_device* mc68kcpu) +{ + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(DX(mc68kcpu) &= (OPER_PCIX_16(mc68kcpu) | 0xffff0000)); + + (mc68kcpu)->n_flag = NFLAG_16((mc68kcpu)->not_z_flag); + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_and_16_er_i(m68000_base_device* mc68kcpu) +{ + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(DX(mc68kcpu) &= (OPER_I_16(mc68kcpu) | 0xffff0000)); + + (mc68kcpu)->n_flag = NFLAG_16((mc68kcpu)->not_z_flag); + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_and_32_er_d(m68000_base_device* mc68kcpu) +{ + (mc68kcpu)->not_z_flag = DX(mc68kcpu) &= DY(mc68kcpu); + + (mc68kcpu)->n_flag = NFLAG_32((mc68kcpu)->not_z_flag); + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_and_32_er_ai(m68000_base_device* mc68kcpu) +{ + (mc68kcpu)->not_z_flag = DX(mc68kcpu) &= OPER_AY_AI_32(mc68kcpu); + + (mc68kcpu)->n_flag = NFLAG_32((mc68kcpu)->not_z_flag); + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_and_32_er_pi(m68000_base_device* mc68kcpu) +{ + (mc68kcpu)->not_z_flag = DX(mc68kcpu) &= OPER_AY_PI_32(mc68kcpu); + + (mc68kcpu)->n_flag = NFLAG_32((mc68kcpu)->not_z_flag); + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_and_32_er_pd(m68000_base_device* mc68kcpu) +{ + (mc68kcpu)->not_z_flag = DX(mc68kcpu) &= OPER_AY_PD_32(mc68kcpu); + + (mc68kcpu)->n_flag = NFLAG_32((mc68kcpu)->not_z_flag); + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_and_32_er_di(m68000_base_device* mc68kcpu) +{ + (mc68kcpu)->not_z_flag = DX(mc68kcpu) &= OPER_AY_DI_32(mc68kcpu); + + (mc68kcpu)->n_flag = NFLAG_32((mc68kcpu)->not_z_flag); + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_and_32_er_ix(m68000_base_device* mc68kcpu) +{ + (mc68kcpu)->not_z_flag = DX(mc68kcpu) &= OPER_AY_IX_32(mc68kcpu); + + (mc68kcpu)->n_flag = NFLAG_32((mc68kcpu)->not_z_flag); + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_and_32_er_aw(m68000_base_device* mc68kcpu) +{ + (mc68kcpu)->not_z_flag = DX(mc68kcpu) &= OPER_AW_32(mc68kcpu); + + (mc68kcpu)->n_flag = NFLAG_32((mc68kcpu)->not_z_flag); + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_and_32_er_al(m68000_base_device* mc68kcpu) +{ + (mc68kcpu)->not_z_flag = DX(mc68kcpu) &= OPER_AL_32(mc68kcpu); + + (mc68kcpu)->n_flag = NFLAG_32((mc68kcpu)->not_z_flag); + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_and_32_er_pcdi(m68000_base_device* mc68kcpu) +{ + (mc68kcpu)->not_z_flag = DX(mc68kcpu) &= OPER_PCDI_32(mc68kcpu); + + (mc68kcpu)->n_flag = NFLAG_32((mc68kcpu)->not_z_flag); + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_and_32_er_pcix(m68000_base_device* mc68kcpu) +{ + (mc68kcpu)->not_z_flag = DX(mc68kcpu) &= OPER_PCIX_32(mc68kcpu); + + (mc68kcpu)->n_flag = NFLAG_32((mc68kcpu)->not_z_flag); + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_and_32_er_i(m68000_base_device* mc68kcpu) +{ + (mc68kcpu)->not_z_flag = DX(mc68kcpu) &= OPER_I_32(mc68kcpu); + + (mc68kcpu)->n_flag = NFLAG_32((mc68kcpu)->not_z_flag); + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_and_8_re_ai(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AY_AI_8(mc68kcpu); + uint32_t res = DX(mc68kcpu) & m68ki_read_8((mc68kcpu), ea); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res); + + m68ki_write_8((mc68kcpu), ea, (mc68kcpu)->not_z_flag); +} + + +static void m68k_op_and_8_re_pi(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AY_PI_8(mc68kcpu); + uint32_t res = DX(mc68kcpu) & m68ki_read_8((mc68kcpu), ea); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res); + + m68ki_write_8((mc68kcpu), ea, (mc68kcpu)->not_z_flag); +} + + +static void m68k_op_and_8_re_pi7(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_A7_PI_8(mc68kcpu); + uint32_t res = DX(mc68kcpu) & m68ki_read_8((mc68kcpu), ea); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res); + + m68ki_write_8((mc68kcpu), ea, (mc68kcpu)->not_z_flag); +} + + +static void m68k_op_and_8_re_pd(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AY_PD_8(mc68kcpu); + uint32_t res = DX(mc68kcpu) & m68ki_read_8((mc68kcpu), ea); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res); + + m68ki_write_8((mc68kcpu), ea, (mc68kcpu)->not_z_flag); +} + + +static void m68k_op_and_8_re_pd7(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_A7_PD_8(mc68kcpu); + uint32_t res = DX(mc68kcpu) & m68ki_read_8((mc68kcpu), ea); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res); + + m68ki_write_8((mc68kcpu), ea, (mc68kcpu)->not_z_flag); +} + + +static void m68k_op_and_8_re_di(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AY_DI_8(mc68kcpu); + uint32_t res = DX(mc68kcpu) & m68ki_read_8((mc68kcpu), ea); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res); + + m68ki_write_8((mc68kcpu), ea, (mc68kcpu)->not_z_flag); +} + + +static void m68k_op_and_8_re_ix(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AY_IX_8(mc68kcpu); + uint32_t res = DX(mc68kcpu) & m68ki_read_8((mc68kcpu), ea); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res); + + m68ki_write_8((mc68kcpu), ea, (mc68kcpu)->not_z_flag); +} + + +static void m68k_op_and_8_re_aw(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AW_8(mc68kcpu); + uint32_t res = DX(mc68kcpu) & m68ki_read_8((mc68kcpu), ea); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res); + + m68ki_write_8((mc68kcpu), ea, (mc68kcpu)->not_z_flag); +} + + +static void m68k_op_and_8_re_al(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AL_8(mc68kcpu); + uint32_t res = DX(mc68kcpu) & m68ki_read_8((mc68kcpu), ea); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res); + + m68ki_write_8((mc68kcpu), ea, (mc68kcpu)->not_z_flag); +} + + +static void m68k_op_and_16_re_ai(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AY_AI_16(mc68kcpu); + uint32_t res = DX(mc68kcpu) & m68ki_read_16((mc68kcpu), ea); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res); + + m68ki_write_16((mc68kcpu), ea, (mc68kcpu)->not_z_flag); +} + + +static void m68k_op_and_16_re_pi(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AY_PI_16(mc68kcpu); + uint32_t res = DX(mc68kcpu) & m68ki_read_16((mc68kcpu), ea); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res); + + m68ki_write_16((mc68kcpu), ea, (mc68kcpu)->not_z_flag); +} + + +static void m68k_op_and_16_re_pd(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AY_PD_16(mc68kcpu); + uint32_t res = DX(mc68kcpu) & m68ki_read_16((mc68kcpu), ea); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res); + + m68ki_write_16((mc68kcpu), ea, (mc68kcpu)->not_z_flag); +} + + +static void m68k_op_and_16_re_di(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AY_DI_16(mc68kcpu); + uint32_t res = DX(mc68kcpu) & m68ki_read_16((mc68kcpu), ea); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res); + + m68ki_write_16((mc68kcpu), ea, (mc68kcpu)->not_z_flag); +} + + +static void m68k_op_and_16_re_ix(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AY_IX_16(mc68kcpu); + uint32_t res = DX(mc68kcpu) & m68ki_read_16((mc68kcpu), ea); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res); + + m68ki_write_16((mc68kcpu), ea, (mc68kcpu)->not_z_flag); +} + + +static void m68k_op_and_16_re_aw(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AW_16(mc68kcpu); + uint32_t res = DX(mc68kcpu) & m68ki_read_16((mc68kcpu), ea); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res); + + m68ki_write_16((mc68kcpu), ea, (mc68kcpu)->not_z_flag); +} + + +static void m68k_op_and_16_re_al(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AL_16(mc68kcpu); + uint32_t res = DX(mc68kcpu) & m68ki_read_16((mc68kcpu), ea); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res); + + m68ki_write_16((mc68kcpu), ea, (mc68kcpu)->not_z_flag); +} + + +static void m68k_op_and_32_re_ai(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AY_AI_32(mc68kcpu); + uint32_t res = DX(mc68kcpu) & m68ki_read_32((mc68kcpu), ea); + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + + m68ki_write_32((mc68kcpu), ea, res); +} + + +static void m68k_op_and_32_re_pi(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AY_PI_32(mc68kcpu); + uint32_t res = DX(mc68kcpu) & m68ki_read_32((mc68kcpu), ea); + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + + m68ki_write_32((mc68kcpu), ea, res); +} + + +static void m68k_op_and_32_re_pd(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AY_PD_32(mc68kcpu); + uint32_t res = DX(mc68kcpu) & m68ki_read_32((mc68kcpu), ea); + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + + m68ki_write_32((mc68kcpu), ea, res); +} + + +static void m68k_op_and_32_re_di(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AY_DI_32(mc68kcpu); + uint32_t res = DX(mc68kcpu) & m68ki_read_32((mc68kcpu), ea); + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + + m68ki_write_32((mc68kcpu), ea, res); +} + + +static void m68k_op_and_32_re_ix(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AY_IX_32(mc68kcpu); + uint32_t res = DX(mc68kcpu) & m68ki_read_32((mc68kcpu), ea); + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + + m68ki_write_32((mc68kcpu), ea, res); +} + + +static void m68k_op_and_32_re_aw(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AW_32(mc68kcpu); + uint32_t res = DX(mc68kcpu) & m68ki_read_32((mc68kcpu), ea); + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + + m68ki_write_32((mc68kcpu), ea, res); +} + + +static void m68k_op_and_32_re_al(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AL_32(mc68kcpu); + uint32_t res = DX(mc68kcpu) & m68ki_read_32((mc68kcpu), ea); + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + + m68ki_write_32((mc68kcpu), ea, res); +} + + +static void m68k_op_andi_8_d(m68000_base_device* mc68kcpu) +{ + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(DY(mc68kcpu) &= (OPER_I_8(mc68kcpu) | 0xffffff00)); + + (mc68kcpu)->n_flag = NFLAG_8((mc68kcpu)->not_z_flag); + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_andi_8_ai(m68000_base_device* mc68kcpu) +{ + uint32_t src = OPER_I_8(mc68kcpu); + uint32_t ea = EA_AY_AI_8(mc68kcpu); + uint32_t res = src & m68ki_read_8((mc68kcpu), ea); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + + m68ki_write_8((mc68kcpu), ea, res); +} + + +static void m68k_op_andi_8_pi(m68000_base_device* mc68kcpu) +{ + uint32_t src = OPER_I_8(mc68kcpu); + uint32_t ea = EA_AY_PI_8(mc68kcpu); + uint32_t res = src & m68ki_read_8((mc68kcpu), ea); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + + m68ki_write_8((mc68kcpu), ea, res); +} + + +static void m68k_op_andi_8_pi7(m68000_base_device* mc68kcpu) +{ + uint32_t src = OPER_I_8(mc68kcpu); + uint32_t ea = EA_A7_PI_8(mc68kcpu); + uint32_t res = src & m68ki_read_8((mc68kcpu), ea); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + + m68ki_write_8((mc68kcpu), ea, res); +} + + +static void m68k_op_andi_8_pd(m68000_base_device* mc68kcpu) +{ + uint32_t src = OPER_I_8(mc68kcpu); + uint32_t ea = EA_AY_PD_8(mc68kcpu); + uint32_t res = src & m68ki_read_8((mc68kcpu), ea); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + + m68ki_write_8((mc68kcpu), ea, res); +} + + +static void m68k_op_andi_8_pd7(m68000_base_device* mc68kcpu) +{ + uint32_t src = OPER_I_8(mc68kcpu); + uint32_t ea = EA_A7_PD_8(mc68kcpu); + uint32_t res = src & m68ki_read_8((mc68kcpu), ea); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + + m68ki_write_8((mc68kcpu), ea, res); +} + + +static void m68k_op_andi_8_di(m68000_base_device* mc68kcpu) +{ + uint32_t src = OPER_I_8(mc68kcpu); + uint32_t ea = EA_AY_DI_8(mc68kcpu); + uint32_t res = src & m68ki_read_8((mc68kcpu), ea); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + + m68ki_write_8((mc68kcpu), ea, res); +} + + +static void m68k_op_andi_8_ix(m68000_base_device* mc68kcpu) +{ + uint32_t src = OPER_I_8(mc68kcpu); + uint32_t ea = EA_AY_IX_8(mc68kcpu); + uint32_t res = src & m68ki_read_8((mc68kcpu), ea); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + + m68ki_write_8((mc68kcpu), ea, res); +} + + +static void m68k_op_andi_8_aw(m68000_base_device* mc68kcpu) +{ + uint32_t src = OPER_I_8(mc68kcpu); + uint32_t ea = EA_AW_8(mc68kcpu); + uint32_t res = src & m68ki_read_8((mc68kcpu), ea); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + + m68ki_write_8((mc68kcpu), ea, res); +} + + +static void m68k_op_andi_8_al(m68000_base_device* mc68kcpu) +{ + uint32_t src = OPER_I_8(mc68kcpu); + uint32_t ea = EA_AL_8(mc68kcpu); + uint32_t res = src & m68ki_read_8((mc68kcpu), ea); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + + m68ki_write_8((mc68kcpu), ea, res); +} + + +static void m68k_op_andi_16_d(m68000_base_device* mc68kcpu) +{ + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(DY(mc68kcpu) &= (OPER_I_16(mc68kcpu) | 0xffff0000)); + + (mc68kcpu)->n_flag = NFLAG_16((mc68kcpu)->not_z_flag); + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_andi_16_ai(m68000_base_device* mc68kcpu) +{ + uint32_t src = OPER_I_16(mc68kcpu); + uint32_t ea = EA_AY_AI_16(mc68kcpu); + uint32_t res = src & m68ki_read_16((mc68kcpu), ea); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + + m68ki_write_16((mc68kcpu), ea, res); +} + + +static void m68k_op_andi_16_pi(m68000_base_device* mc68kcpu) +{ + uint32_t src = OPER_I_16(mc68kcpu); + uint32_t ea = EA_AY_PI_16(mc68kcpu); + uint32_t res = src & m68ki_read_16((mc68kcpu), ea); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + + m68ki_write_16((mc68kcpu), ea, res); +} + + +static void m68k_op_andi_16_pd(m68000_base_device* mc68kcpu) +{ + uint32_t src = OPER_I_16(mc68kcpu); + uint32_t ea = EA_AY_PD_16(mc68kcpu); + uint32_t res = src & m68ki_read_16((mc68kcpu), ea); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + + m68ki_write_16((mc68kcpu), ea, res); +} + + +static void m68k_op_andi_16_di(m68000_base_device* mc68kcpu) +{ + uint32_t src = OPER_I_16(mc68kcpu); + uint32_t ea = EA_AY_DI_16(mc68kcpu); + uint32_t res = src & m68ki_read_16((mc68kcpu), ea); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + + m68ki_write_16((mc68kcpu), ea, res); +} + + +static void m68k_op_andi_16_ix(m68000_base_device* mc68kcpu) +{ + uint32_t src = OPER_I_16(mc68kcpu); + uint32_t ea = EA_AY_IX_16(mc68kcpu); + uint32_t res = src & m68ki_read_16((mc68kcpu), ea); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + + m68ki_write_16((mc68kcpu), ea, res); +} + + +static void m68k_op_andi_16_aw(m68000_base_device* mc68kcpu) +{ + uint32_t src = OPER_I_16(mc68kcpu); + uint32_t ea = EA_AW_16(mc68kcpu); + uint32_t res = src & m68ki_read_16((mc68kcpu), ea); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + + m68ki_write_16((mc68kcpu), ea, res); +} + + +static void m68k_op_andi_16_al(m68000_base_device* mc68kcpu) +{ + uint32_t src = OPER_I_16(mc68kcpu); + uint32_t ea = EA_AL_16(mc68kcpu); + uint32_t res = src & m68ki_read_16((mc68kcpu), ea); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + + m68ki_write_16((mc68kcpu), ea, res); +} + + +static void m68k_op_andi_32_d(m68000_base_device* mc68kcpu) +{ + (mc68kcpu)->not_z_flag = DY(mc68kcpu) &= (OPER_I_32(mc68kcpu)); + + (mc68kcpu)->n_flag = NFLAG_32((mc68kcpu)->not_z_flag); + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_andi_32_ai(m68000_base_device* mc68kcpu) +{ + uint32_t src = OPER_I_32(mc68kcpu); + uint32_t ea = EA_AY_AI_32(mc68kcpu); + uint32_t res = src & m68ki_read_32((mc68kcpu), ea); + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + + m68ki_write_32((mc68kcpu), ea, res); +} + + +static void m68k_op_andi_32_pi(m68000_base_device* mc68kcpu) +{ + uint32_t src = OPER_I_32(mc68kcpu); + uint32_t ea = EA_AY_PI_32(mc68kcpu); + uint32_t res = src & m68ki_read_32((mc68kcpu), ea); + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + + m68ki_write_32((mc68kcpu), ea, res); +} + + +static void m68k_op_andi_32_pd(m68000_base_device* mc68kcpu) +{ + uint32_t src = OPER_I_32(mc68kcpu); + uint32_t ea = EA_AY_PD_32(mc68kcpu); + uint32_t res = src & m68ki_read_32((mc68kcpu), ea); + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + + m68ki_write_32((mc68kcpu), ea, res); +} + + +static void m68k_op_andi_32_di(m68000_base_device* mc68kcpu) +{ + uint32_t src = OPER_I_32(mc68kcpu); + uint32_t ea = EA_AY_DI_32(mc68kcpu); + uint32_t res = src & m68ki_read_32((mc68kcpu), ea); + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + + m68ki_write_32((mc68kcpu), ea, res); +} + + +static void m68k_op_andi_32_ix(m68000_base_device* mc68kcpu) +{ + uint32_t src = OPER_I_32(mc68kcpu); + uint32_t ea = EA_AY_IX_32(mc68kcpu); + uint32_t res = src & m68ki_read_32((mc68kcpu), ea); + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + + m68ki_write_32((mc68kcpu), ea, res); +} + + +static void m68k_op_andi_32_aw(m68000_base_device* mc68kcpu) +{ + uint32_t src = OPER_I_32(mc68kcpu); + uint32_t ea = EA_AW_32(mc68kcpu); + uint32_t res = src & m68ki_read_32((mc68kcpu), ea); + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + + m68ki_write_32((mc68kcpu), ea, res); +} + + +static void m68k_op_andi_32_al(m68000_base_device* mc68kcpu) +{ + uint32_t src = OPER_I_32(mc68kcpu); + uint32_t ea = EA_AL_32(mc68kcpu); + uint32_t res = src & m68ki_read_32((mc68kcpu), ea); + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + + m68ki_write_32((mc68kcpu), ea, res); +} + + +static void m68k_op_andi_16_toc(m68000_base_device* mc68kcpu) +{ + m68ki_set_ccr((mc68kcpu), m68ki_get_ccr(mc68kcpu) & OPER_I_16(mc68kcpu)); +} + + +static void m68k_op_andi_16_tos(m68000_base_device* mc68kcpu) +{ + if((mc68kcpu)->s_flag) + { + uint32_t src = OPER_I_16(mc68kcpu); + //m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */ + m68ki_set_sr((mc68kcpu), m68ki_get_sr(mc68kcpu) & src); + return; + } + m68ki_exception_privilege_violation(mc68kcpu); +} + + +static void m68k_op_asr_8_s(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &DY(mc68kcpu); + uint32_t shift = ((((mc68kcpu)->ir >> 9) - 1) & 7) + 1; + uint32_t src = MASK_OUT_ABOVE_8(*r_dst); + uint32_t res = src >> shift; + + if(shift != 0) + (mc68kcpu)->c.current_cycle += (shift<<(mc68kcpu)->cyc_shift) * (mc68kcpu)->c.options->gen.clock_divider; + + if(GET_MSB_8(src)) + res |= m68ki_shift_8_table[shift]; + + *r_dst = MASK_OUT_BELOW_8(*r_dst) | res; + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = src << (9-shift); +} + + +static void m68k_op_asr_16_s(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &DY(mc68kcpu); + uint32_t shift = ((((mc68kcpu)->ir >> 9) - 1) & 7) + 1; + uint32_t src = MASK_OUT_ABOVE_16(*r_dst); + uint32_t res = src >> shift; + + if(shift != 0) + (mc68kcpu)->c.current_cycle += (shift<<(mc68kcpu)->cyc_shift) * (mc68kcpu)->c.options->gen.clock_divider; + + if(GET_MSB_16(src)) + res |= m68ki_shift_16_table[shift]; + + *r_dst = MASK_OUT_BELOW_16(*r_dst) | res; + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = src << (9-shift); +} + + +static void m68k_op_asr_32_s(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &DY(mc68kcpu); + uint32_t shift = ((((mc68kcpu)->ir >> 9) - 1) & 7) + 1; + uint32_t src = *r_dst; + uint32_t res = src >> shift; + + if(shift != 0) + (mc68kcpu)->c.current_cycle += (shift<<(mc68kcpu)->cyc_shift) * (mc68kcpu)->c.options->gen.clock_divider; + + if(GET_MSB_32(src)) + res |= m68ki_shift_32_table[shift]; + + *r_dst = res; + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = src << (9-shift); +} + + +static void m68k_op_asr_8_r(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &DY(mc68kcpu); + uint32_t shift = DX(mc68kcpu) & 0x3f; + uint32_t src = MASK_OUT_ABOVE_8(*r_dst); + uint32_t res = src >> shift; + + if(shift != 0) + { + (mc68kcpu)->c.current_cycle += (shift<<(mc68kcpu)->cyc_shift) * (mc68kcpu)->c.options->gen.clock_divider; + + if(shift < 8) + { + if(GET_MSB_8(src)) + res |= m68ki_shift_8_table[shift]; + + *r_dst = MASK_OUT_BELOW_8(*r_dst) | res; + + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = src << (9-shift); + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + return; + } + + if(GET_MSB_8(src)) + { + *r_dst |= 0xff; + (mc68kcpu)->c_flag = CFLAG_SET; + (mc68kcpu)->x_flag = XFLAG_SET; + (mc68kcpu)->n_flag = NFLAG_SET; + (mc68kcpu)->not_z_flag = ZFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + return; + } + + *r_dst &= 0xffffff00; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->x_flag = XFLAG_CLEAR; + (mc68kcpu)->n_flag = NFLAG_CLEAR; + (mc68kcpu)->not_z_flag = ZFLAG_SET; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + return; + } + + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->n_flag = NFLAG_8(src); + (mc68kcpu)->not_z_flag = src; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_asr_16_r(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &DY(mc68kcpu); + uint32_t shift = DX(mc68kcpu) & 0x3f; + uint32_t src = MASK_OUT_ABOVE_16(*r_dst); + uint32_t res = src >> shift; + + if(shift != 0) + { + (mc68kcpu)->c.current_cycle += (shift<<(mc68kcpu)->cyc_shift) * (mc68kcpu)->c.options->gen.clock_divider; + + if(shift < 16) + { + if(GET_MSB_16(src)) + res |= m68ki_shift_16_table[shift]; + + *r_dst = MASK_OUT_BELOW_16(*r_dst) | res; + + (mc68kcpu)->c_flag = (mc68kcpu)->x_flag = (src >> (shift - 1))<<8; + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + return; + } + + if(GET_MSB_16(src)) + { + *r_dst |= 0xffff; + (mc68kcpu)->c_flag = CFLAG_SET; + (mc68kcpu)->x_flag = XFLAG_SET; + (mc68kcpu)->n_flag = NFLAG_SET; + (mc68kcpu)->not_z_flag = ZFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + return; + } + + *r_dst &= 0xffff0000; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->x_flag = XFLAG_CLEAR; + (mc68kcpu)->n_flag = NFLAG_CLEAR; + (mc68kcpu)->not_z_flag = ZFLAG_SET; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + return; + } + + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->n_flag = NFLAG_16(src); + (mc68kcpu)->not_z_flag = src; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_asr_32_r(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &DY(mc68kcpu); + uint32_t shift = DX(mc68kcpu) & 0x3f; + uint32_t src = *r_dst; + uint32_t res = src >> shift; + + if(shift != 0) + { + (mc68kcpu)->c.current_cycle += (shift<<(mc68kcpu)->cyc_shift) * (mc68kcpu)->c.options->gen.clock_divider; + + if(shift < 32) + { + if(GET_MSB_32(src)) + res |= m68ki_shift_32_table[shift]; + + *r_dst = res; + + (mc68kcpu)->c_flag = (mc68kcpu)->x_flag = (src >> (shift - 1))<<8; + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + return; + } + + if(GET_MSB_32(src)) + { + *r_dst = 0xffffffff; + (mc68kcpu)->c_flag = CFLAG_SET; + (mc68kcpu)->x_flag = XFLAG_SET; + (mc68kcpu)->n_flag = NFLAG_SET; + (mc68kcpu)->not_z_flag = ZFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + return; + } + + *r_dst = 0; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->x_flag = XFLAG_CLEAR; + (mc68kcpu)->n_flag = NFLAG_CLEAR; + (mc68kcpu)->not_z_flag = ZFLAG_SET; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + return; + } + + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->n_flag = NFLAG_32(src); + (mc68kcpu)->not_z_flag = src; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_asr_16_ai(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AY_AI_16(mc68kcpu); + uint32_t src = m68ki_read_16((mc68kcpu), ea); + uint32_t res = src >> 1; + + if(GET_MSB_16(src)) + res |= 0x8000; + + m68ki_write_16((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = (mc68kcpu)->x_flag = src << 8; +} + + +static void m68k_op_asr_16_pi(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AY_PI_16(mc68kcpu); + uint32_t src = m68ki_read_16((mc68kcpu), ea); + uint32_t res = src >> 1; + + if(GET_MSB_16(src)) + res |= 0x8000; + + m68ki_write_16((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = (mc68kcpu)->x_flag = src << 8; +} + + +static void m68k_op_asr_16_pd(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AY_PD_16(mc68kcpu); + uint32_t src = m68ki_read_16((mc68kcpu), ea); + uint32_t res = src >> 1; + + if(GET_MSB_16(src)) + res |= 0x8000; + + m68ki_write_16((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = (mc68kcpu)->x_flag = src << 8; +} + + +static void m68k_op_asr_16_di(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AY_DI_16(mc68kcpu); + uint32_t src = m68ki_read_16((mc68kcpu), ea); + uint32_t res = src >> 1; + + if(GET_MSB_16(src)) + res |= 0x8000; + + m68ki_write_16((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = (mc68kcpu)->x_flag = src << 8; +} + + +static void m68k_op_asr_16_ix(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AY_IX_16(mc68kcpu); + uint32_t src = m68ki_read_16((mc68kcpu), ea); + uint32_t res = src >> 1; + + if(GET_MSB_16(src)) + res |= 0x8000; + + m68ki_write_16((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = (mc68kcpu)->x_flag = src << 8; +} + + +static void m68k_op_asr_16_aw(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AW_16(mc68kcpu); + uint32_t src = m68ki_read_16((mc68kcpu), ea); + uint32_t res = src >> 1; + + if(GET_MSB_16(src)) + res |= 0x8000; + + m68ki_write_16((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = (mc68kcpu)->x_flag = src << 8; +} + + +static void m68k_op_asr_16_al(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AL_16(mc68kcpu); + uint32_t src = m68ki_read_16((mc68kcpu), ea); + uint32_t res = src >> 1; + + if(GET_MSB_16(src)) + res |= 0x8000; + + m68ki_write_16((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = (mc68kcpu)->x_flag = src << 8; +} + + +static void m68k_op_asl_8_s(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &DY(mc68kcpu); + uint32_t shift = ((((mc68kcpu)->ir >> 9) - 1) & 7) + 1; + uint32_t src = MASK_OUT_ABOVE_8(*r_dst); + uint32_t res = MASK_OUT_ABOVE_8(src << shift); + + if(shift != 0) + (mc68kcpu)->c.current_cycle += (shift<<(mc68kcpu)->cyc_shift) * (mc68kcpu)->c.options->gen.clock_divider; + + *r_dst = MASK_OUT_BELOW_8(*r_dst) | res; + + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = src << shift; + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + src &= m68ki_shift_8_table[shift + 1]; + (mc68kcpu)->v_flag = (!(src == 0 || (src == m68ki_shift_8_table[shift + 1] && shift < 8)))<<7; +} + + +static void m68k_op_asl_16_s(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &DY(mc68kcpu); + uint32_t shift = ((((mc68kcpu)->ir >> 9) - 1) & 7) + 1; + uint32_t src = MASK_OUT_ABOVE_16(*r_dst); + uint32_t res = MASK_OUT_ABOVE_16(src << shift); + + if(shift != 0) + (mc68kcpu)->c.current_cycle += (shift<<(mc68kcpu)->cyc_shift) * (mc68kcpu)->c.options->gen.clock_divider; + + *r_dst = MASK_OUT_BELOW_16(*r_dst) | res; + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = src >> (8-shift); + src &= m68ki_shift_16_table[shift + 1]; + (mc68kcpu)->v_flag = (!(src == 0 || src == m68ki_shift_16_table[shift + 1]))<<7; +} + + +static void m68k_op_asl_32_s(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &DY(mc68kcpu); + uint32_t shift = ((((mc68kcpu)->ir >> 9) - 1) & 7) + 1; + uint32_t src = *r_dst; + uint32_t res = MASK_OUT_ABOVE_32(src << shift); + + if(shift != 0) + (mc68kcpu)->c.current_cycle += (shift<<(mc68kcpu)->cyc_shift) * (mc68kcpu)->c.options->gen.clock_divider; + + *r_dst = res; + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = src >> (24-shift); + src &= m68ki_shift_32_table[shift + 1]; + (mc68kcpu)->v_flag = (!(src == 0 || src == m68ki_shift_32_table[shift + 1]))<<7; +} + + +static void m68k_op_asl_8_r(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &DY(mc68kcpu); + uint32_t shift = DX(mc68kcpu) & 0x3f; + uint32_t src = MASK_OUT_ABOVE_8(*r_dst); + uint32_t res = MASK_OUT_ABOVE_8(src << shift); + + if(shift != 0) + { + (mc68kcpu)->c.current_cycle += (shift<<(mc68kcpu)->cyc_shift) * (mc68kcpu)->c.options->gen.clock_divider; + + if(shift < 8) + { + *r_dst = MASK_OUT_BELOW_8(*r_dst) | res; + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = src << shift; + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + src &= m68ki_shift_8_table[shift + 1]; + (mc68kcpu)->v_flag = (!(src == 0 || src == m68ki_shift_8_table[shift + 1]))<<7; + return; + } + + *r_dst &= 0xffffff00; + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = ((shift == 8 ? src & 1 : 0))<<8; + (mc68kcpu)->n_flag = NFLAG_CLEAR; + (mc68kcpu)->not_z_flag = ZFLAG_SET; + (mc68kcpu)->v_flag = (!(src == 0))<<7; + return; + } + + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->n_flag = NFLAG_8(src); + (mc68kcpu)->not_z_flag = src; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_asl_16_r(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &DY(mc68kcpu); + uint32_t shift = DX(mc68kcpu) & 0x3f; + uint32_t src = MASK_OUT_ABOVE_16(*r_dst); + uint32_t res = MASK_OUT_ABOVE_16(src << shift); + + if(shift != 0) + { + (mc68kcpu)->c.current_cycle += (shift<<(mc68kcpu)->cyc_shift) * (mc68kcpu)->c.options->gen.clock_divider; + + if(shift < 16) + { + *r_dst = MASK_OUT_BELOW_16(*r_dst) | res; + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = (src << shift) >> 8; + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + src &= m68ki_shift_16_table[shift + 1]; + (mc68kcpu)->v_flag = (!(src == 0 || src == m68ki_shift_16_table[shift + 1]))<<7; + return; + } + + *r_dst &= 0xffff0000; + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = ((shift == 16 ? src & 1 : 0))<<8; + (mc68kcpu)->n_flag = NFLAG_CLEAR; + (mc68kcpu)->not_z_flag = ZFLAG_SET; + (mc68kcpu)->v_flag = (!(src == 0))<<7; + return; + } + + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->n_flag = NFLAG_16(src); + (mc68kcpu)->not_z_flag = src; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_asl_32_r(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &DY(mc68kcpu); + uint32_t shift = DX(mc68kcpu) & 0x3f; + uint32_t src = *r_dst; + uint32_t res = MASK_OUT_ABOVE_32(src << shift); + + if(shift != 0) + { + (mc68kcpu)->c.current_cycle += (shift<<(mc68kcpu)->cyc_shift) * (mc68kcpu)->c.options->gen.clock_divider; + + if(shift < 32) + { + *r_dst = res; + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = (src >> (32 - shift)) << 8; + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = res; + src &= m68ki_shift_32_table[shift + 1]; + (mc68kcpu)->v_flag = (!(src == 0 || src == m68ki_shift_32_table[shift + 1]))<<7; + return; + } + + *r_dst = 0; + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = ((shift == 32 ? src & 1 : 0))<<8; + (mc68kcpu)->n_flag = NFLAG_CLEAR; + (mc68kcpu)->not_z_flag = ZFLAG_SET; + (mc68kcpu)->v_flag = (!(src == 0))<<7; + return; + } + + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->n_flag = NFLAG_32(src); + (mc68kcpu)->not_z_flag = src; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_asl_16_ai(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AY_AI_16(mc68kcpu); + uint32_t src = m68ki_read_16((mc68kcpu), ea); + uint32_t res = MASK_OUT_ABOVE_16(src << 1); + + m68ki_write_16((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = src >> 7; + src &= 0xc000; + (mc68kcpu)->v_flag = (!(src == 0 || src == 0xc000))<<7; +} + + +static void m68k_op_asl_16_pi(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AY_PI_16(mc68kcpu); + uint32_t src = m68ki_read_16((mc68kcpu), ea); + uint32_t res = MASK_OUT_ABOVE_16(src << 1); + + m68ki_write_16((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = src >> 7; + src &= 0xc000; + (mc68kcpu)->v_flag = (!(src == 0 || src == 0xc000))<<7; +} + + +static void m68k_op_asl_16_pd(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AY_PD_16(mc68kcpu); + uint32_t src = m68ki_read_16((mc68kcpu), ea); + uint32_t res = MASK_OUT_ABOVE_16(src << 1); + + m68ki_write_16((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = src >> 7; + src &= 0xc000; + (mc68kcpu)->v_flag = (!(src == 0 || src == 0xc000))<<7; +} + + +static void m68k_op_asl_16_di(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AY_DI_16(mc68kcpu); + uint32_t src = m68ki_read_16((mc68kcpu), ea); + uint32_t res = MASK_OUT_ABOVE_16(src << 1); + + m68ki_write_16((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = src >> 7; + src &= 0xc000; + (mc68kcpu)->v_flag = (!(src == 0 || src == 0xc000))<<7; +} + + +static void m68k_op_asl_16_ix(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AY_IX_16(mc68kcpu); + uint32_t src = m68ki_read_16((mc68kcpu), ea); + uint32_t res = MASK_OUT_ABOVE_16(src << 1); + + m68ki_write_16((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = src >> 7; + src &= 0xc000; + (mc68kcpu)->v_flag = (!(src == 0 || src == 0xc000))<<7; +} + + +static void m68k_op_asl_16_aw(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AW_16(mc68kcpu); + uint32_t src = m68ki_read_16((mc68kcpu), ea); + uint32_t res = MASK_OUT_ABOVE_16(src << 1); + + m68ki_write_16((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = src >> 7; + src &= 0xc000; + (mc68kcpu)->v_flag = (!(src == 0 || src == 0xc000))<<7; +} + + +static void m68k_op_asl_16_al(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AL_16(mc68kcpu); + uint32_t src = m68ki_read_16((mc68kcpu), ea); + uint32_t res = MASK_OUT_ABOVE_16(src << 1); + + m68ki_write_16((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = src >> 7; + src &= 0xc000; + (mc68kcpu)->v_flag = (!(src == 0 || src == 0xc000))<<7; +} + + +static void m68k_op_bhi_8(m68000_base_device* mc68kcpu) +{ + if(COND_HI(mc68kcpu)) + { + m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */ + m68ki_branch_8((mc68kcpu), MASK_OUT_ABOVE_8((mc68kcpu)->ir)); + return; + } + (mc68kcpu)->c.current_cycle += (mc68kcpu)->cyc_bcc_notake_b; +} + + +static void m68k_op_bls_8(m68000_base_device* mc68kcpu) +{ + if(COND_LS(mc68kcpu)) + { + m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */ + m68ki_branch_8((mc68kcpu), MASK_OUT_ABOVE_8((mc68kcpu)->ir)); + return; + } + (mc68kcpu)->c.current_cycle += (mc68kcpu)->cyc_bcc_notake_b; +} + + +static void m68k_op_bcc_8(m68000_base_device* mc68kcpu) +{ + if(COND_CC(mc68kcpu)) + { + m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */ + m68ki_branch_8((mc68kcpu), MASK_OUT_ABOVE_8((mc68kcpu)->ir)); + return; + } + (mc68kcpu)->c.current_cycle += (mc68kcpu)->cyc_bcc_notake_b; +} + + +static void m68k_op_bcs_8(m68000_base_device* mc68kcpu) +{ + if(COND_CS(mc68kcpu)) + { + m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */ + m68ki_branch_8((mc68kcpu), MASK_OUT_ABOVE_8((mc68kcpu)->ir)); + return; + } + (mc68kcpu)->c.current_cycle += (mc68kcpu)->cyc_bcc_notake_b; +} + + +static void m68k_op_bne_8(m68000_base_device* mc68kcpu) +{ + if(COND_NE(mc68kcpu)) + { + m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */ + m68ki_branch_8((mc68kcpu), MASK_OUT_ABOVE_8((mc68kcpu)->ir)); + return; + } + (mc68kcpu)->c.current_cycle += (mc68kcpu)->cyc_bcc_notake_b; +} + + +static void m68k_op_beq_8(m68000_base_device* mc68kcpu) +{ + if(COND_EQ(mc68kcpu)) + { + m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */ + m68ki_branch_8((mc68kcpu), MASK_OUT_ABOVE_8((mc68kcpu)->ir)); + return; + } + (mc68kcpu)->c.current_cycle += (mc68kcpu)->cyc_bcc_notake_b; +} + + +static void m68k_op_bvc_8(m68000_base_device* mc68kcpu) +{ + if(COND_VC(mc68kcpu)) + { + m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */ + m68ki_branch_8((mc68kcpu), MASK_OUT_ABOVE_8((mc68kcpu)->ir)); + return; + } + (mc68kcpu)->c.current_cycle += (mc68kcpu)->cyc_bcc_notake_b; +} + + +static void m68k_op_bvs_8(m68000_base_device* mc68kcpu) +{ + if(COND_VS(mc68kcpu)) + { + m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */ + m68ki_branch_8((mc68kcpu), MASK_OUT_ABOVE_8((mc68kcpu)->ir)); + return; + } + (mc68kcpu)->c.current_cycle += (mc68kcpu)->cyc_bcc_notake_b; +} + + +static void m68k_op_bpl_8(m68000_base_device* mc68kcpu) +{ + if(COND_PL(mc68kcpu)) + { + m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */ + m68ki_branch_8((mc68kcpu), MASK_OUT_ABOVE_8((mc68kcpu)->ir)); + return; + } + (mc68kcpu)->c.current_cycle += (mc68kcpu)->cyc_bcc_notake_b; +} + + +static void m68k_op_bmi_8(m68000_base_device* mc68kcpu) +{ + if(COND_MI(mc68kcpu)) + { + m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */ + m68ki_branch_8((mc68kcpu), MASK_OUT_ABOVE_8((mc68kcpu)->ir)); + return; + } + (mc68kcpu)->c.current_cycle += (mc68kcpu)->cyc_bcc_notake_b; +} + + +static void m68k_op_bge_8(m68000_base_device* mc68kcpu) +{ + if(COND_GE(mc68kcpu)) + { + m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */ + m68ki_branch_8((mc68kcpu), MASK_OUT_ABOVE_8((mc68kcpu)->ir)); + return; + } + (mc68kcpu)->c.current_cycle += (mc68kcpu)->cyc_bcc_notake_b; +} + + +static void m68k_op_blt_8(m68000_base_device* mc68kcpu) +{ + if(COND_LT(mc68kcpu)) + { + m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */ + m68ki_branch_8((mc68kcpu), MASK_OUT_ABOVE_8((mc68kcpu)->ir)); + return; + } + (mc68kcpu)->c.current_cycle += (mc68kcpu)->cyc_bcc_notake_b; +} + + +static void m68k_op_bgt_8(m68000_base_device* mc68kcpu) +{ + if(COND_GT(mc68kcpu)) + { + m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */ + m68ki_branch_8((mc68kcpu), MASK_OUT_ABOVE_8((mc68kcpu)->ir)); + return; + } + (mc68kcpu)->c.current_cycle += (mc68kcpu)->cyc_bcc_notake_b; +} + + +static void m68k_op_ble_8(m68000_base_device* mc68kcpu) +{ + if(COND_LE(mc68kcpu)) + { + m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */ + m68ki_branch_8((mc68kcpu), MASK_OUT_ABOVE_8((mc68kcpu)->ir)); + return; + } + (mc68kcpu)->c.current_cycle += (mc68kcpu)->cyc_bcc_notake_b; +} + + +static void m68k_op_bhi_16(m68000_base_device* mc68kcpu) +{ + if(COND_HI(mc68kcpu)) + { + uint32_t offset = OPER_I_16(mc68kcpu); + REG_PC(mc68kcpu) -= 2; + m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */ + m68ki_branch_16((mc68kcpu), offset); + return; + } + REG_PC(mc68kcpu) += 2; + (mc68kcpu)->c.current_cycle += (mc68kcpu)->cyc_bcc_notake_w; +} + + +static void m68k_op_bls_16(m68000_base_device* mc68kcpu) +{ + if(COND_LS(mc68kcpu)) + { + uint32_t offset = OPER_I_16(mc68kcpu); + REG_PC(mc68kcpu) -= 2; + m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */ + m68ki_branch_16((mc68kcpu), offset); + return; + } + REG_PC(mc68kcpu) += 2; + (mc68kcpu)->c.current_cycle += (mc68kcpu)->cyc_bcc_notake_w; +} + + +static void m68k_op_bcc_16(m68000_base_device* mc68kcpu) +{ + if(COND_CC(mc68kcpu)) + { + uint32_t offset = OPER_I_16(mc68kcpu); + REG_PC(mc68kcpu) -= 2; + m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */ + m68ki_branch_16((mc68kcpu), offset); + return; + } + REG_PC(mc68kcpu) += 2; + (mc68kcpu)->c.current_cycle += (mc68kcpu)->cyc_bcc_notake_w; +} + + +static void m68k_op_bcs_16(m68000_base_device* mc68kcpu) +{ + if(COND_CS(mc68kcpu)) + { + uint32_t offset = OPER_I_16(mc68kcpu); + REG_PC(mc68kcpu) -= 2; + m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */ + m68ki_branch_16((mc68kcpu), offset); + return; + } + REG_PC(mc68kcpu) += 2; + (mc68kcpu)->c.current_cycle += (mc68kcpu)->cyc_bcc_notake_w; +} + + +static void m68k_op_bne_16(m68000_base_device* mc68kcpu) +{ + if(COND_NE(mc68kcpu)) + { + uint32_t offset = OPER_I_16(mc68kcpu); + REG_PC(mc68kcpu) -= 2; + m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */ + m68ki_branch_16((mc68kcpu), offset); + return; + } + REG_PC(mc68kcpu) += 2; + (mc68kcpu)->c.current_cycle += (mc68kcpu)->cyc_bcc_notake_w; +} + + +static void m68k_op_beq_16(m68000_base_device* mc68kcpu) +{ + if(COND_EQ(mc68kcpu)) + { + uint32_t offset = OPER_I_16(mc68kcpu); + REG_PC(mc68kcpu) -= 2; + m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */ + m68ki_branch_16((mc68kcpu), offset); + return; + } + REG_PC(mc68kcpu) += 2; + (mc68kcpu)->c.current_cycle += (mc68kcpu)->cyc_bcc_notake_w; +} + + +static void m68k_op_bvc_16(m68000_base_device* mc68kcpu) +{ + if(COND_VC(mc68kcpu)) + { + uint32_t offset = OPER_I_16(mc68kcpu); + REG_PC(mc68kcpu) -= 2; + m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */ + m68ki_branch_16((mc68kcpu), offset); + return; + } + REG_PC(mc68kcpu) += 2; + (mc68kcpu)->c.current_cycle += (mc68kcpu)->cyc_bcc_notake_w; +} + + +static void m68k_op_bvs_16(m68000_base_device* mc68kcpu) +{ + if(COND_VS(mc68kcpu)) + { + uint32_t offset = OPER_I_16(mc68kcpu); + REG_PC(mc68kcpu) -= 2; + m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */ + m68ki_branch_16((mc68kcpu), offset); + return; + } + REG_PC(mc68kcpu) += 2; + (mc68kcpu)->c.current_cycle += (mc68kcpu)->cyc_bcc_notake_w; +} + + +static void m68k_op_bpl_16(m68000_base_device* mc68kcpu) +{ + if(COND_PL(mc68kcpu)) + { + uint32_t offset = OPER_I_16(mc68kcpu); + REG_PC(mc68kcpu) -= 2; + m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */ + m68ki_branch_16((mc68kcpu), offset); + return; + } + REG_PC(mc68kcpu) += 2; + (mc68kcpu)->c.current_cycle += (mc68kcpu)->cyc_bcc_notake_w; +} + + +static void m68k_op_bmi_16(m68000_base_device* mc68kcpu) +{ + if(COND_MI(mc68kcpu)) + { + uint32_t offset = OPER_I_16(mc68kcpu); + REG_PC(mc68kcpu) -= 2; + m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */ + m68ki_branch_16((mc68kcpu), offset); + return; + } + REG_PC(mc68kcpu) += 2; + (mc68kcpu)->c.current_cycle += (mc68kcpu)->cyc_bcc_notake_w; +} + + +static void m68k_op_bge_16(m68000_base_device* mc68kcpu) +{ + if(COND_GE(mc68kcpu)) + { + uint32_t offset = OPER_I_16(mc68kcpu); + REG_PC(mc68kcpu) -= 2; + m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */ + m68ki_branch_16((mc68kcpu), offset); + return; + } + REG_PC(mc68kcpu) += 2; + (mc68kcpu)->c.current_cycle += (mc68kcpu)->cyc_bcc_notake_w; +} + + +static void m68k_op_blt_16(m68000_base_device* mc68kcpu) +{ + if(COND_LT(mc68kcpu)) + { + uint32_t offset = OPER_I_16(mc68kcpu); + REG_PC(mc68kcpu) -= 2; + m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */ + m68ki_branch_16((mc68kcpu), offset); + return; + } + REG_PC(mc68kcpu) += 2; + (mc68kcpu)->c.current_cycle += (mc68kcpu)->cyc_bcc_notake_w; +} + + +static void m68k_op_bgt_16(m68000_base_device* mc68kcpu) +{ + if(COND_GT(mc68kcpu)) + { + uint32_t offset = OPER_I_16(mc68kcpu); + REG_PC(mc68kcpu) -= 2; + m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */ + m68ki_branch_16((mc68kcpu), offset); + return; + } + REG_PC(mc68kcpu) += 2; + (mc68kcpu)->c.current_cycle += (mc68kcpu)->cyc_bcc_notake_w; +} + + +static void m68k_op_ble_16(m68000_base_device* mc68kcpu) +{ + if(COND_LE(mc68kcpu)) + { + uint32_t offset = OPER_I_16(mc68kcpu); + REG_PC(mc68kcpu) -= 2; + m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */ + m68ki_branch_16((mc68kcpu), offset); + return; + } + REG_PC(mc68kcpu) += 2; + (mc68kcpu)->c.current_cycle += (mc68kcpu)->cyc_bcc_notake_w; +} + + +static void m68k_op_bhi_32(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + if(COND_HI(mc68kcpu)) + { + uint32_t offset = OPER_I_32(mc68kcpu); + REG_PC(mc68kcpu) -= 4; + m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */ + m68ki_branch_32((mc68kcpu), offset); + return; + } + REG_PC(mc68kcpu) += 4; + return; + } + else + { + if(COND_HI(mc68kcpu)) + { + m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */ + m68ki_branch_8((mc68kcpu), MASK_OUT_ABOVE_8((mc68kcpu)->ir)); + return; + } + (mc68kcpu)->c.current_cycle += (mc68kcpu)->cyc_bcc_notake_b; + } +} + + +static void m68k_op_bls_32(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + if(COND_LS(mc68kcpu)) + { + uint32_t offset = OPER_I_32(mc68kcpu); + REG_PC(mc68kcpu) -= 4; + m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */ + m68ki_branch_32((mc68kcpu), offset); + return; + } + REG_PC(mc68kcpu) += 4; + return; + } + else + { + if(COND_LS(mc68kcpu)) + { + m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */ + m68ki_branch_8((mc68kcpu), MASK_OUT_ABOVE_8((mc68kcpu)->ir)); + return; + } + (mc68kcpu)->c.current_cycle += (mc68kcpu)->cyc_bcc_notake_b; + } +} + + +static void m68k_op_bcc_32(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + if(COND_CC(mc68kcpu)) + { + uint32_t offset = OPER_I_32(mc68kcpu); + REG_PC(mc68kcpu) -= 4; + m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */ + m68ki_branch_32((mc68kcpu), offset); + return; + } + REG_PC(mc68kcpu) += 4; + return; + } + else + { + if(COND_CC(mc68kcpu)) + { + m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */ + m68ki_branch_8((mc68kcpu), MASK_OUT_ABOVE_8((mc68kcpu)->ir)); + return; + } + (mc68kcpu)->c.current_cycle += (mc68kcpu)->cyc_bcc_notake_b; + } +} + + +static void m68k_op_bcs_32(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + if(COND_CS(mc68kcpu)) + { + uint32_t offset = OPER_I_32(mc68kcpu); + REG_PC(mc68kcpu) -= 4; + m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */ + m68ki_branch_32((mc68kcpu), offset); + return; + } + REG_PC(mc68kcpu) += 4; + return; + } + else + { + if(COND_CS(mc68kcpu)) + { + m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */ + m68ki_branch_8((mc68kcpu), MASK_OUT_ABOVE_8((mc68kcpu)->ir)); + return; + } + (mc68kcpu)->c.current_cycle += (mc68kcpu)->cyc_bcc_notake_b; + } +} + + +static void m68k_op_bne_32(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + if(COND_NE(mc68kcpu)) + { + uint32_t offset = OPER_I_32(mc68kcpu); + REG_PC(mc68kcpu) -= 4; + m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */ + m68ki_branch_32((mc68kcpu), offset); + return; + } + REG_PC(mc68kcpu) += 4; + return; + } + else + { + if(COND_NE(mc68kcpu)) + { + m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */ + m68ki_branch_8((mc68kcpu), MASK_OUT_ABOVE_8((mc68kcpu)->ir)); + return; + } + (mc68kcpu)->c.current_cycle += (mc68kcpu)->cyc_bcc_notake_b; + } +} + + +static void m68k_op_beq_32(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + if(COND_EQ(mc68kcpu)) + { + uint32_t offset = OPER_I_32(mc68kcpu); + REG_PC(mc68kcpu) -= 4; + m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */ + m68ki_branch_32((mc68kcpu), offset); + return; + } + REG_PC(mc68kcpu) += 4; + return; + } + else + { + if(COND_EQ(mc68kcpu)) + { + m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */ + m68ki_branch_8((mc68kcpu), MASK_OUT_ABOVE_8((mc68kcpu)->ir)); + return; + } + (mc68kcpu)->c.current_cycle += (mc68kcpu)->cyc_bcc_notake_b; + } +} + + +static void m68k_op_bvc_32(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + if(COND_VC(mc68kcpu)) + { + uint32_t offset = OPER_I_32(mc68kcpu); + REG_PC(mc68kcpu) -= 4; + m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */ + m68ki_branch_32((mc68kcpu), offset); + return; + } + REG_PC(mc68kcpu) += 4; + return; + } + else + { + if(COND_VC(mc68kcpu)) + { + m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */ + m68ki_branch_8((mc68kcpu), MASK_OUT_ABOVE_8((mc68kcpu)->ir)); + return; + } + (mc68kcpu)->c.current_cycle += (mc68kcpu)->cyc_bcc_notake_b; + } +} + + +static void m68k_op_bvs_32(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + if(COND_VS(mc68kcpu)) + { + uint32_t offset = OPER_I_32(mc68kcpu); + REG_PC(mc68kcpu) -= 4; + m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */ + m68ki_branch_32((mc68kcpu), offset); + return; + } + REG_PC(mc68kcpu) += 4; + return; + } + else + { + if(COND_VS(mc68kcpu)) + { + m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */ + m68ki_branch_8((mc68kcpu), MASK_OUT_ABOVE_8((mc68kcpu)->ir)); + return; + } + (mc68kcpu)->c.current_cycle += (mc68kcpu)->cyc_bcc_notake_b; + } +} + + +static void m68k_op_bpl_32(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + if(COND_PL(mc68kcpu)) + { + uint32_t offset = OPER_I_32(mc68kcpu); + REG_PC(mc68kcpu) -= 4; + m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */ + m68ki_branch_32((mc68kcpu), offset); + return; + } + REG_PC(mc68kcpu) += 4; + return; + } + else + { + if(COND_PL(mc68kcpu)) + { + m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */ + m68ki_branch_8((mc68kcpu), MASK_OUT_ABOVE_8((mc68kcpu)->ir)); + return; + } + (mc68kcpu)->c.current_cycle += (mc68kcpu)->cyc_bcc_notake_b; + } +} + + +static void m68k_op_bmi_32(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + if(COND_MI(mc68kcpu)) + { + uint32_t offset = OPER_I_32(mc68kcpu); + REG_PC(mc68kcpu) -= 4; + m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */ + m68ki_branch_32((mc68kcpu), offset); + return; + } + REG_PC(mc68kcpu) += 4; + return; + } + else + { + if(COND_MI(mc68kcpu)) + { + m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */ + m68ki_branch_8((mc68kcpu), MASK_OUT_ABOVE_8((mc68kcpu)->ir)); + return; + } + (mc68kcpu)->c.current_cycle += (mc68kcpu)->cyc_bcc_notake_b; + } +} + + +static void m68k_op_bge_32(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + if(COND_GE(mc68kcpu)) + { + uint32_t offset = OPER_I_32(mc68kcpu); + REG_PC(mc68kcpu) -= 4; + m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */ + m68ki_branch_32((mc68kcpu), offset); + return; + } + REG_PC(mc68kcpu) += 4; + return; + } + else + { + if(COND_GE(mc68kcpu)) + { + m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */ + m68ki_branch_8((mc68kcpu), MASK_OUT_ABOVE_8((mc68kcpu)->ir)); + return; + } + (mc68kcpu)->c.current_cycle += (mc68kcpu)->cyc_bcc_notake_b; + } +} + + +static void m68k_op_blt_32(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + if(COND_LT(mc68kcpu)) + { + uint32_t offset = OPER_I_32(mc68kcpu); + REG_PC(mc68kcpu) -= 4; + m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */ + m68ki_branch_32((mc68kcpu), offset); + return; + } + REG_PC(mc68kcpu) += 4; + return; + } + else + { + if(COND_LT(mc68kcpu)) + { + m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */ + m68ki_branch_8((mc68kcpu), MASK_OUT_ABOVE_8((mc68kcpu)->ir)); + return; + } + (mc68kcpu)->c.current_cycle += (mc68kcpu)->cyc_bcc_notake_b; + } +} + + +static void m68k_op_bgt_32(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + if(COND_GT(mc68kcpu)) + { + uint32_t offset = OPER_I_32(mc68kcpu); + REG_PC(mc68kcpu) -= 4; + m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */ + m68ki_branch_32((mc68kcpu), offset); + return; + } + REG_PC(mc68kcpu) += 4; + return; + } + else + { + if(COND_GT(mc68kcpu)) + { + m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */ + m68ki_branch_8((mc68kcpu), MASK_OUT_ABOVE_8((mc68kcpu)->ir)); + return; + } + (mc68kcpu)->c.current_cycle += (mc68kcpu)->cyc_bcc_notake_b; + } +} + + +static void m68k_op_ble_32(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + if(COND_LE(mc68kcpu)) + { + uint32_t offset = OPER_I_32(mc68kcpu); + REG_PC(mc68kcpu) -= 4; + m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */ + m68ki_branch_32((mc68kcpu), offset); + return; + } + REG_PC(mc68kcpu) += 4; + return; + } + else + { + if(COND_LE(mc68kcpu)) + { + m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */ + m68ki_branch_8((mc68kcpu), MASK_OUT_ABOVE_8((mc68kcpu)->ir)); + return; + } + (mc68kcpu)->c.current_cycle += (mc68kcpu)->cyc_bcc_notake_b; + } +} + + +static void m68k_op_bchg_32_r_d(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &DY(mc68kcpu); + uint32_t mask = 1 << (DX(mc68kcpu) & 0x1f); + + (mc68kcpu)->not_z_flag = *r_dst & mask; + *r_dst ^= mask; +} + + +static void m68k_op_bchg_8_r_ai(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AY_AI_8(mc68kcpu); + uint32_t src = m68ki_read_8((mc68kcpu), ea); + uint32_t mask = 1 << (DX(mc68kcpu) & 7); + + (mc68kcpu)->not_z_flag = src & mask; + m68ki_write_8((mc68kcpu), ea, src ^ mask); +} + + +static void m68k_op_bchg_8_r_pi(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AY_PI_8(mc68kcpu); + uint32_t src = m68ki_read_8((mc68kcpu), ea); + uint32_t mask = 1 << (DX(mc68kcpu) & 7); + + (mc68kcpu)->not_z_flag = src & mask; + m68ki_write_8((mc68kcpu), ea, src ^ mask); +} + + +static void m68k_op_bchg_8_r_pi7(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_A7_PI_8(mc68kcpu); + uint32_t src = m68ki_read_8((mc68kcpu), ea); + uint32_t mask = 1 << (DX(mc68kcpu) & 7); + + (mc68kcpu)->not_z_flag = src & mask; + m68ki_write_8((mc68kcpu), ea, src ^ mask); +} + + +static void m68k_op_bchg_8_r_pd(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AY_PD_8(mc68kcpu); + uint32_t src = m68ki_read_8((mc68kcpu), ea); + uint32_t mask = 1 << (DX(mc68kcpu) & 7); + + (mc68kcpu)->not_z_flag = src & mask; + m68ki_write_8((mc68kcpu), ea, src ^ mask); +} + + +static void m68k_op_bchg_8_r_pd7(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_A7_PD_8(mc68kcpu); + uint32_t src = m68ki_read_8((mc68kcpu), ea); + uint32_t mask = 1 << (DX(mc68kcpu) & 7); + + (mc68kcpu)->not_z_flag = src & mask; + m68ki_write_8((mc68kcpu), ea, src ^ mask); +} + + +static void m68k_op_bchg_8_r_di(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AY_DI_8(mc68kcpu); + uint32_t src = m68ki_read_8((mc68kcpu), ea); + uint32_t mask = 1 << (DX(mc68kcpu) & 7); + + (mc68kcpu)->not_z_flag = src & mask; + m68ki_write_8((mc68kcpu), ea, src ^ mask); +} + + +static void m68k_op_bchg_8_r_ix(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AY_IX_8(mc68kcpu); + uint32_t src = m68ki_read_8((mc68kcpu), ea); + uint32_t mask = 1 << (DX(mc68kcpu) & 7); + + (mc68kcpu)->not_z_flag = src & mask; + m68ki_write_8((mc68kcpu), ea, src ^ mask); +} + + +static void m68k_op_bchg_8_r_aw(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AW_8(mc68kcpu); + uint32_t src = m68ki_read_8((mc68kcpu), ea); + uint32_t mask = 1 << (DX(mc68kcpu) & 7); + + (mc68kcpu)->not_z_flag = src & mask; + m68ki_write_8((mc68kcpu), ea, src ^ mask); +} + + +static void m68k_op_bchg_8_r_al(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AL_8(mc68kcpu); + uint32_t src = m68ki_read_8((mc68kcpu), ea); + uint32_t mask = 1 << (DX(mc68kcpu) & 7); + + (mc68kcpu)->not_z_flag = src & mask; + m68ki_write_8((mc68kcpu), ea, src ^ mask); +} + + +static void m68k_op_bchg_32_s_d(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &DY(mc68kcpu); + uint32_t mask = 1 << (OPER_I_8(mc68kcpu) & 0x1f); + + (mc68kcpu)->not_z_flag = *r_dst & mask; + *r_dst ^= mask; +} + + +static void m68k_op_bchg_8_s_ai(m68000_base_device* mc68kcpu) +{ + uint32_t mask = 1 << (OPER_I_8(mc68kcpu) & 7); + uint32_t ea = EA_AY_AI_8(mc68kcpu); + uint32_t src = m68ki_read_8((mc68kcpu), ea); + + (mc68kcpu)->not_z_flag = src & mask; + m68ki_write_8((mc68kcpu), ea, src ^ mask); +} + + +static void m68k_op_bchg_8_s_pi(m68000_base_device* mc68kcpu) +{ + uint32_t mask = 1 << (OPER_I_8(mc68kcpu) & 7); + uint32_t ea = EA_AY_PI_8(mc68kcpu); + uint32_t src = m68ki_read_8((mc68kcpu), ea); + + (mc68kcpu)->not_z_flag = src & mask; + m68ki_write_8((mc68kcpu), ea, src ^ mask); +} + + +static void m68k_op_bchg_8_s_pi7(m68000_base_device* mc68kcpu) +{ + uint32_t mask = 1 << (OPER_I_8(mc68kcpu) & 7); + uint32_t ea = EA_A7_PI_8(mc68kcpu); + uint32_t src = m68ki_read_8((mc68kcpu), ea); + + (mc68kcpu)->not_z_flag = src & mask; + m68ki_write_8((mc68kcpu), ea, src ^ mask); +} + + +static void m68k_op_bchg_8_s_pd(m68000_base_device* mc68kcpu) +{ + uint32_t mask = 1 << (OPER_I_8(mc68kcpu) & 7); + uint32_t ea = EA_AY_PD_8(mc68kcpu); + uint32_t src = m68ki_read_8((mc68kcpu), ea); + + (mc68kcpu)->not_z_flag = src & mask; + m68ki_write_8((mc68kcpu), ea, src ^ mask); +} + + +static void m68k_op_bchg_8_s_pd7(m68000_base_device* mc68kcpu) +{ + uint32_t mask = 1 << (OPER_I_8(mc68kcpu) & 7); + uint32_t ea = EA_A7_PD_8(mc68kcpu); + uint32_t src = m68ki_read_8((mc68kcpu), ea); + + (mc68kcpu)->not_z_flag = src & mask; + m68ki_write_8((mc68kcpu), ea, src ^ mask); +} + + +static void m68k_op_bchg_8_s_di(m68000_base_device* mc68kcpu) +{ + uint32_t mask = 1 << (OPER_I_8(mc68kcpu) & 7); + uint32_t ea = EA_AY_DI_8(mc68kcpu); + uint32_t src = m68ki_read_8((mc68kcpu), ea); + + (mc68kcpu)->not_z_flag = src & mask; + m68ki_write_8((mc68kcpu), ea, src ^ mask); +} + + +static void m68k_op_bchg_8_s_ix(m68000_base_device* mc68kcpu) +{ + uint32_t mask = 1 << (OPER_I_8(mc68kcpu) & 7); + uint32_t ea = EA_AY_IX_8(mc68kcpu); + uint32_t src = m68ki_read_8((mc68kcpu), ea); + + (mc68kcpu)->not_z_flag = src & mask; + m68ki_write_8((mc68kcpu), ea, src ^ mask); +} + + +static void m68k_op_bchg_8_s_aw(m68000_base_device* mc68kcpu) +{ + uint32_t mask = 1 << (OPER_I_8(mc68kcpu) & 7); + uint32_t ea = EA_AW_8(mc68kcpu); + uint32_t src = m68ki_read_8((mc68kcpu), ea); + + (mc68kcpu)->not_z_flag = src & mask; + m68ki_write_8((mc68kcpu), ea, src ^ mask); +} + + +static void m68k_op_bchg_8_s_al(m68000_base_device* mc68kcpu) +{ + uint32_t mask = 1 << (OPER_I_8(mc68kcpu) & 7); + uint32_t ea = EA_AL_8(mc68kcpu); + uint32_t src = m68ki_read_8((mc68kcpu), ea); + + (mc68kcpu)->not_z_flag = src & mask; + m68ki_write_8((mc68kcpu), ea, src ^ mask); +} + + +static void m68k_op_bclr_32_r_d(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &DY(mc68kcpu); + uint32_t mask = 1 << (DX(mc68kcpu) & 0x1f); + + (mc68kcpu)->not_z_flag = *r_dst & mask; + *r_dst &= ~mask; +} + + +static void m68k_op_bclr_8_r_ai(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AY_AI_8(mc68kcpu); + uint32_t src = m68ki_read_8((mc68kcpu), ea); + uint32_t mask = 1 << (DX(mc68kcpu) & 7); + + (mc68kcpu)->not_z_flag = src & mask; + m68ki_write_8((mc68kcpu), ea, src & ~mask); +} + + +static void m68k_op_bclr_8_r_pi(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AY_PI_8(mc68kcpu); + uint32_t src = m68ki_read_8((mc68kcpu), ea); + uint32_t mask = 1 << (DX(mc68kcpu) & 7); + + (mc68kcpu)->not_z_flag = src & mask; + m68ki_write_8((mc68kcpu), ea, src & ~mask); +} + + +static void m68k_op_bclr_8_r_pi7(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_A7_PI_8(mc68kcpu); + uint32_t src = m68ki_read_8((mc68kcpu), ea); + uint32_t mask = 1 << (DX(mc68kcpu) & 7); + + (mc68kcpu)->not_z_flag = src & mask; + m68ki_write_8((mc68kcpu), ea, src & ~mask); +} + + +static void m68k_op_bclr_8_r_pd(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AY_PD_8(mc68kcpu); + uint32_t src = m68ki_read_8((mc68kcpu), ea); + uint32_t mask = 1 << (DX(mc68kcpu) & 7); + + (mc68kcpu)->not_z_flag = src & mask; + m68ki_write_8((mc68kcpu), ea, src & ~mask); +} + + +static void m68k_op_bclr_8_r_pd7(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_A7_PD_8(mc68kcpu); + uint32_t src = m68ki_read_8((mc68kcpu), ea); + uint32_t mask = 1 << (DX(mc68kcpu) & 7); + + (mc68kcpu)->not_z_flag = src & mask; + m68ki_write_8((mc68kcpu), ea, src & ~mask); +} + + +static void m68k_op_bclr_8_r_di(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AY_DI_8(mc68kcpu); + uint32_t src = m68ki_read_8((mc68kcpu), ea); + uint32_t mask = 1 << (DX(mc68kcpu) & 7); + + (mc68kcpu)->not_z_flag = src & mask; + m68ki_write_8((mc68kcpu), ea, src & ~mask); +} + + +static void m68k_op_bclr_8_r_ix(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AY_IX_8(mc68kcpu); + uint32_t src = m68ki_read_8((mc68kcpu), ea); + uint32_t mask = 1 << (DX(mc68kcpu) & 7); + + (mc68kcpu)->not_z_flag = src & mask; + m68ki_write_8((mc68kcpu), ea, src & ~mask); +} + + +static void m68k_op_bclr_8_r_aw(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AW_8(mc68kcpu); + uint32_t src = m68ki_read_8((mc68kcpu), ea); + uint32_t mask = 1 << (DX(mc68kcpu) & 7); + + (mc68kcpu)->not_z_flag = src & mask; + m68ki_write_8((mc68kcpu), ea, src & ~mask); +} + + +static void m68k_op_bclr_8_r_al(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AL_8(mc68kcpu); + uint32_t src = m68ki_read_8((mc68kcpu), ea); + uint32_t mask = 1 << (DX(mc68kcpu) & 7); + + (mc68kcpu)->not_z_flag = src & mask; + m68ki_write_8((mc68kcpu), ea, src & ~mask); +} + + +static void m68k_op_bclr_32_s_d(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &DY(mc68kcpu); + uint32_t mask = 1 << (OPER_I_8(mc68kcpu) & 0x1f); + + (mc68kcpu)->not_z_flag = *r_dst & mask; + *r_dst &= ~mask; +} + + +static void m68k_op_bclr_8_s_ai(m68000_base_device* mc68kcpu) +{ + uint32_t mask = 1 << (OPER_I_8(mc68kcpu) & 7); + uint32_t ea = EA_AY_AI_8(mc68kcpu); + uint32_t src = m68ki_read_8((mc68kcpu), ea); + + (mc68kcpu)->not_z_flag = src & mask; + m68ki_write_8((mc68kcpu), ea, src & ~mask); +} + + +static void m68k_op_bclr_8_s_pi(m68000_base_device* mc68kcpu) +{ + uint32_t mask = 1 << (OPER_I_8(mc68kcpu) & 7); + uint32_t ea = EA_AY_PI_8(mc68kcpu); + uint32_t src = m68ki_read_8((mc68kcpu), ea); + + (mc68kcpu)->not_z_flag = src & mask; + m68ki_write_8((mc68kcpu), ea, src & ~mask); +} + + +static void m68k_op_bclr_8_s_pi7(m68000_base_device* mc68kcpu) +{ + uint32_t mask = 1 << (OPER_I_8(mc68kcpu) & 7); + uint32_t ea = EA_A7_PI_8(mc68kcpu); + uint32_t src = m68ki_read_8((mc68kcpu), ea); + + (mc68kcpu)->not_z_flag = src & mask; + m68ki_write_8((mc68kcpu), ea, src & ~mask); +} + + +static void m68k_op_bclr_8_s_pd(m68000_base_device* mc68kcpu) +{ + uint32_t mask = 1 << (OPER_I_8(mc68kcpu) & 7); + uint32_t ea = EA_AY_PD_8(mc68kcpu); + uint32_t src = m68ki_read_8((mc68kcpu), ea); + + (mc68kcpu)->not_z_flag = src & mask; + m68ki_write_8((mc68kcpu), ea, src & ~mask); +} + + +static void m68k_op_bclr_8_s_pd7(m68000_base_device* mc68kcpu) +{ + uint32_t mask = 1 << (OPER_I_8(mc68kcpu) & 7); + uint32_t ea = EA_A7_PD_8(mc68kcpu); + uint32_t src = m68ki_read_8((mc68kcpu), ea); + + (mc68kcpu)->not_z_flag = src & mask; + m68ki_write_8((mc68kcpu), ea, src & ~mask); +} + + +static void m68k_op_bclr_8_s_di(m68000_base_device* mc68kcpu) +{ + uint32_t mask = 1 << (OPER_I_8(mc68kcpu) & 7); + uint32_t ea = EA_AY_DI_8(mc68kcpu); + uint32_t src = m68ki_read_8((mc68kcpu), ea); + + (mc68kcpu)->not_z_flag = src & mask; + m68ki_write_8((mc68kcpu), ea, src & ~mask); +} + + +static void m68k_op_bclr_8_s_ix(m68000_base_device* mc68kcpu) +{ + uint32_t mask = 1 << (OPER_I_8(mc68kcpu) & 7); + uint32_t ea = EA_AY_IX_8(mc68kcpu); + uint32_t src = m68ki_read_8((mc68kcpu), ea); + + (mc68kcpu)->not_z_flag = src & mask; + m68ki_write_8((mc68kcpu), ea, src & ~mask); +} + + +static void m68k_op_bclr_8_s_aw(m68000_base_device* mc68kcpu) +{ + uint32_t mask = 1 << (OPER_I_8(mc68kcpu) & 7); + uint32_t ea = EA_AW_8(mc68kcpu); + uint32_t src = m68ki_read_8((mc68kcpu), ea); + + (mc68kcpu)->not_z_flag = src & mask; + m68ki_write_8((mc68kcpu), ea, src & ~mask); +} + + +static void m68k_op_bclr_8_s_al(m68000_base_device* mc68kcpu) +{ + uint32_t mask = 1 << (OPER_I_8(mc68kcpu) & 7); + uint32_t ea = EA_AL_8(mc68kcpu); + uint32_t src = m68ki_read_8((mc68kcpu), ea); + + (mc68kcpu)->not_z_flag = src & mask; + m68ki_write_8((mc68kcpu), ea, src & ~mask); +} + + +static void m68k_op_bfchg_32_d(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + uint32_t word2 = OPER_I_16(mc68kcpu); + uint32_t offset = (word2>>6)&31; + uint32_t width = word2; + uint32_t* data = &DY(mc68kcpu); + uint64_t mask; + + + if(BIT_B(word2)) + offset = REG_D(mc68kcpu)[offset&7]; + if(BIT_5(word2)) + width = REG_D(mc68kcpu)[width&7]; + + offset &= 31; + width = ((width-1) & 31) + 1; + + mask = MASK_OUT_ABOVE_32(0xffffffff << (32 - width)); + mask = ROR_32(mask, offset); + + (mc68kcpu)->n_flag = NFLAG_32(*data<not_z_flag = *data & mask; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + + *data ^= mask; + + return; + } + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_bfchg_32_ai(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + uint32_t word2 = OPER_I_16(mc68kcpu); + int32_t offset = (word2>>6)&31; + uint32_t width = word2; + uint32_t mask_base; + uint32_t data_long; + uint32_t mask_long; + uint32_t data_byte = 0; + uint32_t mask_byte = 0; + uint32_t ea = EA_AY_AI_8(mc68kcpu); + + + if(BIT_B(word2)) + offset = MAKE_INT_32(REG_D(mc68kcpu)[offset&7]); + if(BIT_5(word2)) + width = REG_D(mc68kcpu)[width&7]; + + /* Offset is signed so we have to use ugly math =( */ + ea += offset / 8; + offset %= 8; + if(offset < 0) + { + offset += 8; + ea--; + } + width = ((width-1) & 31) + 1; + + mask_base = MASK_OUT_ABOVE_32(0xffffffff << (32 - width)); + mask_long = mask_base >> offset; + + data_long = m68ki_read_32((mc68kcpu), ea); + (mc68kcpu)->n_flag = NFLAG_32(data_long << offset); + (mc68kcpu)->not_z_flag = data_long & mask_long; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + + m68ki_write_32((mc68kcpu), ea, data_long ^ mask_long); + + if((width + offset) > 32) + { + mask_byte = MASK_OUT_ABOVE_8(mask_base) << (8-offset); + data_byte = m68ki_read_8((mc68kcpu), ea+4); + (mc68kcpu)->not_z_flag |= (data_byte & mask_byte); + m68ki_write_8((mc68kcpu), ea+4, data_byte ^ mask_byte); + } + return; + } + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_bfchg_32_di(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + uint32_t word2 = OPER_I_16(mc68kcpu); + int32_t offset = (word2>>6)&31; + uint32_t width = word2; + uint32_t mask_base; + uint32_t data_long; + uint32_t mask_long; + uint32_t data_byte = 0; + uint32_t mask_byte = 0; + uint32_t ea = EA_AY_DI_8(mc68kcpu); + + + if(BIT_B(word2)) + offset = MAKE_INT_32(REG_D(mc68kcpu)[offset&7]); + if(BIT_5(word2)) + width = REG_D(mc68kcpu)[width&7]; + + /* Offset is signed so we have to use ugly math =( */ + ea += offset / 8; + offset %= 8; + if(offset < 0) + { + offset += 8; + ea--; + } + width = ((width-1) & 31) + 1; + + mask_base = MASK_OUT_ABOVE_32(0xffffffff << (32 - width)); + mask_long = mask_base >> offset; + + data_long = m68ki_read_32((mc68kcpu), ea); + (mc68kcpu)->n_flag = NFLAG_32(data_long << offset); + (mc68kcpu)->not_z_flag = data_long & mask_long; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + + m68ki_write_32((mc68kcpu), ea, data_long ^ mask_long); + + if((width + offset) > 32) + { + mask_byte = MASK_OUT_ABOVE_8(mask_base) << (8-offset); + data_byte = m68ki_read_8((mc68kcpu), ea+4); + (mc68kcpu)->not_z_flag |= (data_byte & mask_byte); + m68ki_write_8((mc68kcpu), ea+4, data_byte ^ mask_byte); + } + return; + } + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_bfchg_32_ix(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + uint32_t word2 = OPER_I_16(mc68kcpu); + int32_t offset = (word2>>6)&31; + uint32_t width = word2; + uint32_t mask_base; + uint32_t data_long; + uint32_t mask_long; + uint32_t data_byte = 0; + uint32_t mask_byte = 0; + uint32_t ea = EA_AY_IX_8(mc68kcpu); + + + if(BIT_B(word2)) + offset = MAKE_INT_32(REG_D(mc68kcpu)[offset&7]); + if(BIT_5(word2)) + width = REG_D(mc68kcpu)[width&7]; + + /* Offset is signed so we have to use ugly math =( */ + ea += offset / 8; + offset %= 8; + if(offset < 0) + { + offset += 8; + ea--; + } + width = ((width-1) & 31) + 1; + + mask_base = MASK_OUT_ABOVE_32(0xffffffff << (32 - width)); + mask_long = mask_base >> offset; + + data_long = m68ki_read_32((mc68kcpu), ea); + (mc68kcpu)->n_flag = NFLAG_32(data_long << offset); + (mc68kcpu)->not_z_flag = data_long & mask_long; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + + m68ki_write_32((mc68kcpu), ea, data_long ^ mask_long); + + if((width + offset) > 32) + { + mask_byte = MASK_OUT_ABOVE_8(mask_base) << (8-offset); + data_byte = m68ki_read_8((mc68kcpu), ea+4); + (mc68kcpu)->not_z_flag |= (data_byte & mask_byte); + m68ki_write_8((mc68kcpu), ea+4, data_byte ^ mask_byte); + } + return; + } + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_bfchg_32_aw(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + uint32_t word2 = OPER_I_16(mc68kcpu); + int32_t offset = (word2>>6)&31; + uint32_t width = word2; + uint32_t mask_base; + uint32_t data_long; + uint32_t mask_long; + uint32_t data_byte = 0; + uint32_t mask_byte = 0; + uint32_t ea = EA_AW_8(mc68kcpu); + + + if(BIT_B(word2)) + offset = MAKE_INT_32(REG_D(mc68kcpu)[offset&7]); + if(BIT_5(word2)) + width = REG_D(mc68kcpu)[width&7]; + + /* Offset is signed so we have to use ugly math =( */ + ea += offset / 8; + offset %= 8; + if(offset < 0) + { + offset += 8; + ea--; + } + width = ((width-1) & 31) + 1; + + mask_base = MASK_OUT_ABOVE_32(0xffffffff << (32 - width)); + mask_long = mask_base >> offset; + + data_long = m68ki_read_32((mc68kcpu), ea); + (mc68kcpu)->n_flag = NFLAG_32(data_long << offset); + (mc68kcpu)->not_z_flag = data_long & mask_long; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + + m68ki_write_32((mc68kcpu), ea, data_long ^ mask_long); + + if((width + offset) > 32) + { + mask_byte = MASK_OUT_ABOVE_8(mask_base) << (8-offset); + data_byte = m68ki_read_8((mc68kcpu), ea+4); + (mc68kcpu)->not_z_flag |= (data_byte & mask_byte); + m68ki_write_8((mc68kcpu), ea+4, data_byte ^ mask_byte); + } + return; + } + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_bfchg_32_al(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + uint32_t word2 = OPER_I_16(mc68kcpu); + int32_t offset = (word2>>6)&31; + uint32_t width = word2; + uint32_t mask_base; + uint32_t data_long; + uint32_t mask_long; + uint32_t data_byte = 0; + uint32_t mask_byte = 0; + uint32_t ea = EA_AL_8(mc68kcpu); + + + if(BIT_B(word2)) + offset = MAKE_INT_32(REG_D(mc68kcpu)[offset&7]); + if(BIT_5(word2)) + width = REG_D(mc68kcpu)[width&7]; + + /* Offset is signed so we have to use ugly math =( */ + ea += offset / 8; + offset %= 8; + if(offset < 0) + { + offset += 8; + ea--; + } + width = ((width-1) & 31) + 1; + + mask_base = MASK_OUT_ABOVE_32(0xffffffff << (32 - width)); + mask_long = mask_base >> offset; + + data_long = m68ki_read_32((mc68kcpu), ea); + (mc68kcpu)->n_flag = NFLAG_32(data_long << offset); + (mc68kcpu)->not_z_flag = data_long & mask_long; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + + m68ki_write_32((mc68kcpu), ea, data_long ^ mask_long); + + if((width + offset) > 32) + { + mask_byte = MASK_OUT_ABOVE_8(mask_base) << (8-offset); + data_byte = m68ki_read_8((mc68kcpu), ea+4); + (mc68kcpu)->not_z_flag |= (data_byte & mask_byte); + m68ki_write_8((mc68kcpu), ea+4, data_byte ^ mask_byte); + } + return; + } + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_bfclr_32_d(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + uint32_t word2 = OPER_I_16(mc68kcpu); + uint32_t offset = (word2>>6)&31; + uint32_t width = word2; + uint32_t* data = &DY(mc68kcpu); + uint64_t mask; + + + if(BIT_B(word2)) + offset = REG_D(mc68kcpu)[offset&7]; + if(BIT_5(word2)) + width = REG_D(mc68kcpu)[width&7]; + + + offset &= 31; + width = ((width-1) & 31) + 1; + + + mask = MASK_OUT_ABOVE_32(0xffffffff << (32 - width)); + mask = ROR_32(mask, offset); + + (mc68kcpu)->n_flag = NFLAG_32(*data<not_z_flag = *data & mask; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + + *data &= ~mask; + + return; + } + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_bfclr_32_ai(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + uint32_t word2 = OPER_I_16(mc68kcpu); + int32_t offset = (word2>>6)&31; + uint32_t width = word2; + uint32_t mask_base; + uint32_t data_long; + uint32_t mask_long; + uint32_t data_byte = 0; + uint32_t mask_byte = 0; + uint32_t ea = EA_AY_AI_8(mc68kcpu); + + + if(BIT_B(word2)) + offset = MAKE_INT_32(REG_D(mc68kcpu)[offset&7]); + if(BIT_5(word2)) + width = REG_D(mc68kcpu)[width&7]; + + /* Offset is signed so we have to use ugly math =( */ + ea += offset / 8; + offset %= 8; + if(offset < 0) + { + offset += 8; + ea--; + } + width = ((width-1) & 31) + 1; + + mask_base = MASK_OUT_ABOVE_32(0xffffffff << (32 - width)); + mask_long = mask_base >> offset; + + data_long = m68ki_read_32((mc68kcpu), ea); + (mc68kcpu)->n_flag = NFLAG_32(data_long << offset); + (mc68kcpu)->not_z_flag = data_long & mask_long; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + + m68ki_write_32((mc68kcpu), ea, data_long & ~mask_long); + + if((width + offset) > 32) + { + mask_byte = MASK_OUT_ABOVE_8(mask_base) << (8-offset); + data_byte = m68ki_read_8((mc68kcpu), ea+4); + (mc68kcpu)->not_z_flag |= (data_byte & mask_byte); + m68ki_write_8((mc68kcpu), ea+4, data_byte & ~mask_byte); + } + return; + } + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_bfclr_32_di(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + uint32_t word2 = OPER_I_16(mc68kcpu); + int32_t offset = (word2>>6)&31; + uint32_t width = word2; + uint32_t mask_base; + uint32_t data_long; + uint32_t mask_long; + uint32_t data_byte = 0; + uint32_t mask_byte = 0; + uint32_t ea = EA_AY_DI_8(mc68kcpu); + + + if(BIT_B(word2)) + offset = MAKE_INT_32(REG_D(mc68kcpu)[offset&7]); + if(BIT_5(word2)) + width = REG_D(mc68kcpu)[width&7]; + + /* Offset is signed so we have to use ugly math =( */ + ea += offset / 8; + offset %= 8; + if(offset < 0) + { + offset += 8; + ea--; + } + width = ((width-1) & 31) + 1; + + mask_base = MASK_OUT_ABOVE_32(0xffffffff << (32 - width)); + mask_long = mask_base >> offset; + + data_long = m68ki_read_32((mc68kcpu), ea); + (mc68kcpu)->n_flag = NFLAG_32(data_long << offset); + (mc68kcpu)->not_z_flag = data_long & mask_long; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + + m68ki_write_32((mc68kcpu), ea, data_long & ~mask_long); + + if((width + offset) > 32) + { + mask_byte = MASK_OUT_ABOVE_8(mask_base) << (8-offset); + data_byte = m68ki_read_8((mc68kcpu), ea+4); + (mc68kcpu)->not_z_flag |= (data_byte & mask_byte); + m68ki_write_8((mc68kcpu), ea+4, data_byte & ~mask_byte); + } + return; + } + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_bfclr_32_ix(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + uint32_t word2 = OPER_I_16(mc68kcpu); + int32_t offset = (word2>>6)&31; + uint32_t width = word2; + uint32_t mask_base; + uint32_t data_long; + uint32_t mask_long; + uint32_t data_byte = 0; + uint32_t mask_byte = 0; + uint32_t ea = EA_AY_IX_8(mc68kcpu); + + + if(BIT_B(word2)) + offset = MAKE_INT_32(REG_D(mc68kcpu)[offset&7]); + if(BIT_5(word2)) + width = REG_D(mc68kcpu)[width&7]; + + /* Offset is signed so we have to use ugly math =( */ + ea += offset / 8; + offset %= 8; + if(offset < 0) + { + offset += 8; + ea--; + } + width = ((width-1) & 31) + 1; + + mask_base = MASK_OUT_ABOVE_32(0xffffffff << (32 - width)); + mask_long = mask_base >> offset; + + data_long = m68ki_read_32((mc68kcpu), ea); + (mc68kcpu)->n_flag = NFLAG_32(data_long << offset); + (mc68kcpu)->not_z_flag = data_long & mask_long; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + + m68ki_write_32((mc68kcpu), ea, data_long & ~mask_long); + + if((width + offset) > 32) + { + mask_byte = MASK_OUT_ABOVE_8(mask_base) << (8-offset); + data_byte = m68ki_read_8((mc68kcpu), ea+4); + (mc68kcpu)->not_z_flag |= (data_byte & mask_byte); + m68ki_write_8((mc68kcpu), ea+4, data_byte & ~mask_byte); + } + return; + } + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_bfclr_32_aw(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + uint32_t word2 = OPER_I_16(mc68kcpu); + int32_t offset = (word2>>6)&31; + uint32_t width = word2; + uint32_t mask_base; + uint32_t data_long; + uint32_t mask_long; + uint32_t data_byte = 0; + uint32_t mask_byte = 0; + uint32_t ea = EA_AW_8(mc68kcpu); + + + if(BIT_B(word2)) + offset = MAKE_INT_32(REG_D(mc68kcpu)[offset&7]); + if(BIT_5(word2)) + width = REG_D(mc68kcpu)[width&7]; + + /* Offset is signed so we have to use ugly math =( */ + ea += offset / 8; + offset %= 8; + if(offset < 0) + { + offset += 8; + ea--; + } + width = ((width-1) & 31) + 1; + + mask_base = MASK_OUT_ABOVE_32(0xffffffff << (32 - width)); + mask_long = mask_base >> offset; + + data_long = m68ki_read_32((mc68kcpu), ea); + (mc68kcpu)->n_flag = NFLAG_32(data_long << offset); + (mc68kcpu)->not_z_flag = data_long & mask_long; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + + m68ki_write_32((mc68kcpu), ea, data_long & ~mask_long); + + if((width + offset) > 32) + { + mask_byte = MASK_OUT_ABOVE_8(mask_base) << (8-offset); + data_byte = m68ki_read_8((mc68kcpu), ea+4); + (mc68kcpu)->not_z_flag |= (data_byte & mask_byte); + m68ki_write_8((mc68kcpu), ea+4, data_byte & ~mask_byte); + } + return; + } + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_bfclr_32_al(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + uint32_t word2 = OPER_I_16(mc68kcpu); + int32_t offset = (word2>>6)&31; + uint32_t width = word2; + uint32_t mask_base; + uint32_t data_long; + uint32_t mask_long; + uint32_t data_byte = 0; + uint32_t mask_byte = 0; + uint32_t ea = EA_AL_8(mc68kcpu); + + + if(BIT_B(word2)) + offset = MAKE_INT_32(REG_D(mc68kcpu)[offset&7]); + if(BIT_5(word2)) + width = REG_D(mc68kcpu)[width&7]; + + /* Offset is signed so we have to use ugly math =( */ + ea += offset / 8; + offset %= 8; + if(offset < 0) + { + offset += 8; + ea--; + } + width = ((width-1) & 31) + 1; + + mask_base = MASK_OUT_ABOVE_32(0xffffffff << (32 - width)); + mask_long = mask_base >> offset; + + data_long = m68ki_read_32((mc68kcpu), ea); + (mc68kcpu)->n_flag = NFLAG_32(data_long << offset); + (mc68kcpu)->not_z_flag = data_long & mask_long; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + + m68ki_write_32((mc68kcpu), ea, data_long & ~mask_long); + + if((width + offset) > 32) + { + mask_byte = MASK_OUT_ABOVE_8(mask_base) << (8-offset); + data_byte = m68ki_read_8((mc68kcpu), ea+4); + (mc68kcpu)->not_z_flag |= (data_byte & mask_byte); + m68ki_write_8((mc68kcpu), ea+4, data_byte & ~mask_byte); + } + return; + } + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_bfexts_32_d(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + uint32_t word2 = OPER_I_16(mc68kcpu); + uint32_t offset = (word2>>6)&31; + uint32_t width = word2; + uint64_t data = DY(mc68kcpu); + + + if(BIT_B(word2)) + offset = REG_D(mc68kcpu)[offset&7]; + if(BIT_5(word2)) + width = REG_D(mc68kcpu)[width&7]; + + offset &= 31; + width = ((width-1) & 31) + 1; + + data = ROL_32(data, offset); + (mc68kcpu)->n_flag = NFLAG_32(data); + data = MAKE_INT_32(data) >> (32 - width); + + (mc68kcpu)->not_z_flag = data; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + + REG_D(mc68kcpu)[(word2>>12)&7] = data; + + return; + } + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_bfexts_32_ai(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + uint32_t word2 = OPER_I_16(mc68kcpu); + int32_t offset = (word2>>6)&31; + uint32_t width = word2; + uint32_t data; + uint32_t ea = EA_AY_AI_8(mc68kcpu); + + + if(BIT_B(word2)) + offset = MAKE_INT_32(REG_D(mc68kcpu)[offset&7]); + if(BIT_5(word2)) + width = REG_D(mc68kcpu)[width&7]; + + if(BIT_B(word2)) + { + /* Offset is signed so we have to use ugly math =( */ + ea += offset / 8; + offset %= 8; + if(offset < 0) + { + offset += 8; + ea--; + } + } + width = ((width-1) & 31) + 1; + + data = (offset+width) < 8 ? (m68ki_read_8((mc68kcpu), ea) << 24) : + (offset+width) < 16 ? (m68ki_read_16((mc68kcpu), ea) << 16) : m68ki_read_32((mc68kcpu), ea); + + data = MASK_OUT_ABOVE_32(data< 32) + data |= (m68ki_read_8((mc68kcpu), ea+4) << offset) >> 8; + + (mc68kcpu)->n_flag = NFLAG_32(data); + data = MAKE_INT_32(data) >> (32 - width); + + (mc68kcpu)->not_z_flag = data; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + + REG_D(mc68kcpu)[(word2 >> 12) & 7] = data; + + return; + } + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_bfexts_32_di(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + uint32_t word2 = OPER_I_16(mc68kcpu); + int32_t offset = (word2>>6)&31; + uint32_t width = word2; + uint32_t data; + uint32_t ea = EA_AY_DI_8(mc68kcpu); + + + if(BIT_B(word2)) + offset = MAKE_INT_32(REG_D(mc68kcpu)[offset&7]); + if(BIT_5(word2)) + width = REG_D(mc68kcpu)[width&7]; + + if(BIT_B(word2)) + { + /* Offset is signed so we have to use ugly math =( */ + ea += offset / 8; + offset %= 8; + if(offset < 0) + { + offset += 8; + ea--; + } + } + width = ((width-1) & 31) + 1; + + data = (offset+width) < 8 ? (m68ki_read_8((mc68kcpu), ea) << 24) : + (offset+width) < 16 ? (m68ki_read_16((mc68kcpu), ea) << 16) : m68ki_read_32((mc68kcpu), ea); + + data = MASK_OUT_ABOVE_32(data< 32) + data |= (m68ki_read_8((mc68kcpu), ea+4) << offset) >> 8; + + (mc68kcpu)->n_flag = NFLAG_32(data); + data = MAKE_INT_32(data) >> (32 - width); + + (mc68kcpu)->not_z_flag = data; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + + REG_D(mc68kcpu)[(word2 >> 12) & 7] = data; + + return; + } + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_bfexts_32_ix(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + uint32_t word2 = OPER_I_16(mc68kcpu); + int32_t offset = (word2>>6)&31; + uint32_t width = word2; + uint32_t data; + uint32_t ea = EA_AY_IX_8(mc68kcpu); + + + if(BIT_B(word2)) + offset = MAKE_INT_32(REG_D(mc68kcpu)[offset&7]); + if(BIT_5(word2)) + width = REG_D(mc68kcpu)[width&7]; + + if(BIT_B(word2)) + { + /* Offset is signed so we have to use ugly math =( */ + ea += offset / 8; + offset %= 8; + if(offset < 0) + { + offset += 8; + ea--; + } + } + width = ((width-1) & 31) + 1; + + data = (offset+width) < 8 ? (m68ki_read_8((mc68kcpu), ea) << 24) : + (offset+width) < 16 ? (m68ki_read_16((mc68kcpu), ea) << 16) : m68ki_read_32((mc68kcpu), ea); + + data = MASK_OUT_ABOVE_32(data< 32) + data |= (m68ki_read_8((mc68kcpu), ea+4) << offset) >> 8; + + (mc68kcpu)->n_flag = NFLAG_32(data); + data = MAKE_INT_32(data) >> (32 - width); + + (mc68kcpu)->not_z_flag = data; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + + REG_D(mc68kcpu)[(word2 >> 12) & 7] = data; + + return; + } + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_bfexts_32_aw(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + uint32_t word2 = OPER_I_16(mc68kcpu); + int32_t offset = (word2>>6)&31; + uint32_t width = word2; + uint32_t data; + uint32_t ea = EA_AW_8(mc68kcpu); + + + if(BIT_B(word2)) + offset = MAKE_INT_32(REG_D(mc68kcpu)[offset&7]); + if(BIT_5(word2)) + width = REG_D(mc68kcpu)[width&7]; + + if(BIT_B(word2)) + { + /* Offset is signed so we have to use ugly math =( */ + ea += offset / 8; + offset %= 8; + if(offset < 0) + { + offset += 8; + ea--; + } + } + width = ((width-1) & 31) + 1; + + data = (offset+width) < 8 ? (m68ki_read_8((mc68kcpu), ea) << 24) : + (offset+width) < 16 ? (m68ki_read_16((mc68kcpu), ea) << 16) : m68ki_read_32((mc68kcpu), ea); + + data = MASK_OUT_ABOVE_32(data< 32) + data |= (m68ki_read_8((mc68kcpu), ea+4) << offset) >> 8; + + (mc68kcpu)->n_flag = NFLAG_32(data); + data = MAKE_INT_32(data) >> (32 - width); + + (mc68kcpu)->not_z_flag = data; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + + REG_D(mc68kcpu)[(word2 >> 12) & 7] = data; + + return; + } + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_bfexts_32_al(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + uint32_t word2 = OPER_I_16(mc68kcpu); + int32_t offset = (word2>>6)&31; + uint32_t width = word2; + uint32_t data; + uint32_t ea = EA_AL_8(mc68kcpu); + + + if(BIT_B(word2)) + offset = MAKE_INT_32(REG_D(mc68kcpu)[offset&7]); + if(BIT_5(word2)) + width = REG_D(mc68kcpu)[width&7]; + + if(BIT_B(word2)) + { + /* Offset is signed so we have to use ugly math =( */ + ea += offset / 8; + offset %= 8; + if(offset < 0) + { + offset += 8; + ea--; + } + } + width = ((width-1) & 31) + 1; + + data = (offset+width) < 8 ? (m68ki_read_8((mc68kcpu), ea) << 24) : + (offset+width) < 16 ? (m68ki_read_16((mc68kcpu), ea) << 16) : m68ki_read_32((mc68kcpu), ea); + + data = MASK_OUT_ABOVE_32(data< 32) + data |= (m68ki_read_8((mc68kcpu), ea+4) << offset) >> 8; + + (mc68kcpu)->n_flag = NFLAG_32(data); + data = MAKE_INT_32(data) >> (32 - width); + + (mc68kcpu)->not_z_flag = data; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + + REG_D(mc68kcpu)[(word2 >> 12) & 7] = data; + + return; + } + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_bfexts_32_pcdi(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + uint32_t word2 = OPER_I_16(mc68kcpu); + int32_t offset = (word2>>6)&31; + uint32_t width = word2; + uint32_t data; + uint32_t ea = EA_PCDI_8(mc68kcpu); + + + if(BIT_B(word2)) + offset = MAKE_INT_32(REG_D(mc68kcpu)[offset&7]); + if(BIT_5(word2)) + width = REG_D(mc68kcpu)[width&7]; + + if(BIT_B(word2)) + { + /* Offset is signed so we have to use ugly math =( */ + ea += offset / 8; + offset %= 8; + if(offset < 0) + { + offset += 8; + ea--; + } + } + width = ((width-1) & 31) + 1; + + data = (offset+width) < 8 ? (m68ki_read_8((mc68kcpu), ea) << 24) : + (offset+width) < 16 ? (m68ki_read_16((mc68kcpu), ea) << 16) : m68ki_read_32((mc68kcpu), ea); + + data = MASK_OUT_ABOVE_32(data< 32) + data |= (m68ki_read_8((mc68kcpu), ea+4) << offset) >> 8; + + (mc68kcpu)->n_flag = NFLAG_32(data); + data = MAKE_INT_32(data) >> (32 - width); + + (mc68kcpu)->not_z_flag = data; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + + REG_D(mc68kcpu)[(word2 >> 12) & 7] = data; + + return; + } + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_bfexts_32_pcix(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + uint32_t word2 = OPER_I_16(mc68kcpu); + int32_t offset = (word2>>6)&31; + uint32_t width = word2; + uint32_t data; + uint32_t ea = EA_PCIX_8(mc68kcpu); + + + if(BIT_B(word2)) + offset = MAKE_INT_32(REG_D(mc68kcpu)[offset&7]); + if(BIT_5(word2)) + width = REG_D(mc68kcpu)[width&7]; + + if(BIT_B(word2)) + { + /* Offset is signed so we have to use ugly math =( */ + ea += offset / 8; + offset %= 8; + if(offset < 0) + { + offset += 8; + ea--; + } + } + width = ((width-1) & 31) + 1; + + data = (offset+width) < 8 ? (m68ki_read_8((mc68kcpu), ea) << 24) : + (offset+width) < 16 ? (m68ki_read_16((mc68kcpu), ea) << 16) : m68ki_read_32((mc68kcpu), ea); + + data = MASK_OUT_ABOVE_32(data< 32) + data |= (m68ki_read_8((mc68kcpu), ea+4) << offset) >> 8; + + (mc68kcpu)->n_flag = NFLAG_32(data); + data = MAKE_INT_32(data) >> (32 - width); + + (mc68kcpu)->not_z_flag = data; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + + REG_D(mc68kcpu)[(word2 >> 12) & 7] = data; + + return; + } + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_bfextu_32_d(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + uint32_t word2 = OPER_I_16(mc68kcpu); + uint32_t offset = (word2>>6)&31; + uint32_t width = word2; + uint64_t data = DY(mc68kcpu); + + + if(BIT_B(word2)) + offset = REG_D(mc68kcpu)[offset&7]; + if(BIT_5(word2)) + width = REG_D(mc68kcpu)[width&7]; + + offset &= 31; + width = ((width-1) & 31) + 1; + + data = ROL_32(data, offset); + (mc68kcpu)->n_flag = NFLAG_32(data); + data >>= 32 - width; + + (mc68kcpu)->not_z_flag = data; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + + REG_D(mc68kcpu)[(word2>>12)&7] = data; + + return; + } + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_bfextu_32_ai(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + uint32_t word2 = OPER_I_16(mc68kcpu); + int32_t offset = (word2>>6)&31; + uint32_t width = word2; + uint32_t data; + uint32_t ea = EA_AY_AI_8(mc68kcpu); + + + if(BIT_B(word2)) + offset = MAKE_INT_32(REG_D(mc68kcpu)[offset&7]); + if(BIT_5(word2)) + width = REG_D(mc68kcpu)[width&7]; + + if(BIT_B(word2)) + { + /* Offset is signed so we have to use ugly math =( */ + ea += offset / 8; + offset %= 8; + if(offset < 0) + { + offset += 8; + ea--; + } + } + width = ((width-1) & 31) + 1; + + data = (offset+width) < 8 ? (m68ki_read_8((mc68kcpu), ea) << 24) : + (offset+width) < 16 ? (m68ki_read_16((mc68kcpu), ea) << 16) : m68ki_read_32((mc68kcpu), ea); + data = MASK_OUT_ABOVE_32(data< 32) + data |= (m68ki_read_8((mc68kcpu), ea+4) << offset) >> 8; + + (mc68kcpu)->n_flag = NFLAG_32(data); + data >>= (32 - width); + + (mc68kcpu)->not_z_flag = data; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + + REG_D(mc68kcpu)[(word2 >> 12) & 7] = data; + + return; + } + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_bfextu_32_di(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + uint32_t word2 = OPER_I_16(mc68kcpu); + int32_t offset = (word2>>6)&31; + uint32_t width = word2; + uint32_t data; + uint32_t ea = EA_AY_DI_8(mc68kcpu); + + + if(BIT_B(word2)) + offset = MAKE_INT_32(REG_D(mc68kcpu)[offset&7]); + if(BIT_5(word2)) + width = REG_D(mc68kcpu)[width&7]; + + if(BIT_B(word2)) + { + /* Offset is signed so we have to use ugly math =( */ + ea += offset / 8; + offset %= 8; + if(offset < 0) + { + offset += 8; + ea--; + } + } + width = ((width-1) & 31) + 1; + + data = (offset+width) < 8 ? (m68ki_read_8((mc68kcpu), ea) << 24) : + (offset+width) < 16 ? (m68ki_read_16((mc68kcpu), ea) << 16) : m68ki_read_32((mc68kcpu), ea); + data = MASK_OUT_ABOVE_32(data< 32) + data |= (m68ki_read_8((mc68kcpu), ea+4) << offset) >> 8; + + (mc68kcpu)->n_flag = NFLAG_32(data); + data >>= (32 - width); + + (mc68kcpu)->not_z_flag = data; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + + REG_D(mc68kcpu)[(word2 >> 12) & 7] = data; + + return; + } + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_bfextu_32_ix(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + uint32_t word2 = OPER_I_16(mc68kcpu); + int32_t offset = (word2>>6)&31; + uint32_t width = word2; + uint32_t data; + uint32_t ea = EA_AY_IX_8(mc68kcpu); + + + if(BIT_B(word2)) + offset = MAKE_INT_32(REG_D(mc68kcpu)[offset&7]); + if(BIT_5(word2)) + width = REG_D(mc68kcpu)[width&7]; + + if(BIT_B(word2)) + { + /* Offset is signed so we have to use ugly math =( */ + ea += offset / 8; + offset %= 8; + if(offset < 0) + { + offset += 8; + ea--; + } + } + width = ((width-1) & 31) + 1; + + data = (offset+width) < 8 ? (m68ki_read_8((mc68kcpu), ea) << 24) : + (offset+width) < 16 ? (m68ki_read_16((mc68kcpu), ea) << 16) : m68ki_read_32((mc68kcpu), ea); + data = MASK_OUT_ABOVE_32(data< 32) + data |= (m68ki_read_8((mc68kcpu), ea+4) << offset) >> 8; + + (mc68kcpu)->n_flag = NFLAG_32(data); + data >>= (32 - width); + + (mc68kcpu)->not_z_flag = data; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + + REG_D(mc68kcpu)[(word2 >> 12) & 7] = data; + + return; + } + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_bfextu_32_aw(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + uint32_t word2 = OPER_I_16(mc68kcpu); + int32_t offset = (word2>>6)&31; + uint32_t width = word2; + uint32_t data; + uint32_t ea = EA_AW_8(mc68kcpu); + + + if(BIT_B(word2)) + offset = MAKE_INT_32(REG_D(mc68kcpu)[offset&7]); + if(BIT_5(word2)) + width = REG_D(mc68kcpu)[width&7]; + + if(BIT_B(word2)) + { + /* Offset is signed so we have to use ugly math =( */ + ea += offset / 8; + offset %= 8; + if(offset < 0) + { + offset += 8; + ea--; + } + } + width = ((width-1) & 31) + 1; + + data = (offset+width) < 8 ? (m68ki_read_8((mc68kcpu), ea) << 24) : + (offset+width) < 16 ? (m68ki_read_16((mc68kcpu), ea) << 16) : m68ki_read_32((mc68kcpu), ea); + data = MASK_OUT_ABOVE_32(data< 32) + data |= (m68ki_read_8((mc68kcpu), ea+4) << offset) >> 8; + + (mc68kcpu)->n_flag = NFLAG_32(data); + data >>= (32 - width); + + (mc68kcpu)->not_z_flag = data; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + + REG_D(mc68kcpu)[(word2 >> 12) & 7] = data; + + return; + } + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_bfextu_32_al(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + uint32_t word2 = OPER_I_16(mc68kcpu); + int32_t offset = (word2>>6)&31; + uint32_t width = word2; + uint32_t data; + uint32_t ea = EA_AL_8(mc68kcpu); + + + if(BIT_B(word2)) + offset = MAKE_INT_32(REG_D(mc68kcpu)[offset&7]); + if(BIT_5(word2)) + width = REG_D(mc68kcpu)[width&7]; + + if(BIT_B(word2)) + { + /* Offset is signed so we have to use ugly math =( */ + ea += offset / 8; + offset %= 8; + if(offset < 0) + { + offset += 8; + ea--; + } + } + width = ((width-1) & 31) + 1; + + data = (offset+width) < 8 ? (m68ki_read_8((mc68kcpu), ea) << 24) : + (offset+width) < 16 ? (m68ki_read_16((mc68kcpu), ea) << 16) : m68ki_read_32((mc68kcpu), ea); + data = MASK_OUT_ABOVE_32(data< 32) + data |= (m68ki_read_8((mc68kcpu), ea+4) << offset) >> 8; + + (mc68kcpu)->n_flag = NFLAG_32(data); + data >>= (32 - width); + + (mc68kcpu)->not_z_flag = data; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + + REG_D(mc68kcpu)[(word2 >> 12) & 7] = data; + + return; + } + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_bfextu_32_pcdi(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + uint32_t word2 = OPER_I_16(mc68kcpu); + int32_t offset = (word2>>6)&31; + uint32_t width = word2; + uint32_t data; + uint32_t ea = EA_PCDI_8(mc68kcpu); + + + if(BIT_B(word2)) + offset = MAKE_INT_32(REG_D(mc68kcpu)[offset&7]); + if(BIT_5(word2)) + width = REG_D(mc68kcpu)[width&7]; + + if(BIT_B(word2)) + { + /* Offset is signed so we have to use ugly math =( */ + ea += offset / 8; + offset %= 8; + if(offset < 0) + { + offset += 8; + ea--; + } + } + width = ((width-1) & 31) + 1; + + data = (offset+width) < 8 ? (m68ki_read_8((mc68kcpu), ea) << 24) : + (offset+width) < 16 ? (m68ki_read_16((mc68kcpu), ea) << 16) : m68ki_read_32((mc68kcpu), ea); + data = MASK_OUT_ABOVE_32(data< 32) + data |= (m68ki_read_8((mc68kcpu), ea+4) << offset) >> 8; + + (mc68kcpu)->n_flag = NFLAG_32(data); + data >>= (32 - width); + + (mc68kcpu)->not_z_flag = data; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + + REG_D(mc68kcpu)[(word2 >> 12) & 7] = data; + + return; + } + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_bfextu_32_pcix(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + uint32_t word2 = OPER_I_16(mc68kcpu); + int32_t offset = (word2>>6)&31; + uint32_t width = word2; + uint32_t data; + uint32_t ea = EA_PCIX_8(mc68kcpu); + + + if(BIT_B(word2)) + offset = MAKE_INT_32(REG_D(mc68kcpu)[offset&7]); + if(BIT_5(word2)) + width = REG_D(mc68kcpu)[width&7]; + + if(BIT_B(word2)) + { + /* Offset is signed so we have to use ugly math =( */ + ea += offset / 8; + offset %= 8; + if(offset < 0) + { + offset += 8; + ea--; + } + } + width = ((width-1) & 31) + 1; + + data = (offset+width) < 8 ? (m68ki_read_8((mc68kcpu), ea) << 24) : + (offset+width) < 16 ? (m68ki_read_16((mc68kcpu), ea) << 16) : m68ki_read_32((mc68kcpu), ea); + data = MASK_OUT_ABOVE_32(data< 32) + data |= (m68ki_read_8((mc68kcpu), ea+4) << offset) >> 8; + + (mc68kcpu)->n_flag = NFLAG_32(data); + data >>= (32 - width); + + (mc68kcpu)->not_z_flag = data; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + + REG_D(mc68kcpu)[(word2 >> 12) & 7] = data; + + return; + } + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_bfffo_32_d(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + uint32_t word2 = OPER_I_16(mc68kcpu); + uint32_t offset = (word2>>6)&31; + uint32_t width = word2; + uint64_t data = DY(mc68kcpu); + uint32_t bit; + + + if(BIT_B(word2)) + offset = REG_D(mc68kcpu)[offset&7]; + if(BIT_5(word2)) + width = REG_D(mc68kcpu)[width&7]; + + offset &= 31; + width = ((width-1) & 31) + 1; + + data = ROL_32(data, offset); + (mc68kcpu)->n_flag = NFLAG_32(data); + data >>= 32 - width; + + (mc68kcpu)->not_z_flag = data; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + + for(bit = 1<<(width-1);bit && !(data & bit);bit>>= 1) + offset++; + + REG_D(mc68kcpu)[(word2>>12)&7] = offset; + + return; + } + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_bfffo_32_ai(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + uint32_t word2 = OPER_I_16(mc68kcpu); + int32_t offset = (word2>>6)&31; + int32_t local_offset; + uint32_t width = word2; + uint32_t data; + uint32_t bit; + uint32_t ea = EA_AY_AI_8(mc68kcpu); + + + if(BIT_B(word2)) + offset = MAKE_INT_32(REG_D(mc68kcpu)[offset&7]); + if(BIT_5(word2)) + width = REG_D(mc68kcpu)[width&7]; + + /* Offset is signed so we have to use ugly math =( */ + ea += offset / 8; + local_offset = offset % 8; + if(local_offset < 0) + { + local_offset += 8; + ea--; + } + width = ((width-1) & 31) + 1; + + data = (offset+width) < 16 ? (m68ki_read_16((mc68kcpu), ea) << 16) : m68ki_read_32((mc68kcpu), ea); + data = MASK_OUT_ABOVE_32(data< 32) + data |= (m68ki_read_8((mc68kcpu), ea+4) << local_offset) >> 8; + + (mc68kcpu)->n_flag = NFLAG_32(data); + data >>= (32 - width); + + (mc68kcpu)->not_z_flag = data; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + + for(bit = 1<<(width-1);bit && !(data & bit);bit>>= 1) + offset++; + + REG_D(mc68kcpu)[(word2>>12)&7] = offset; + + return; + } + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_bfffo_32_di(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + uint32_t word2 = OPER_I_16(mc68kcpu); + int32_t offset = (word2>>6)&31; + int32_t local_offset; + uint32_t width = word2; + uint32_t data; + uint32_t bit; + uint32_t ea = EA_AY_DI_8(mc68kcpu); + + + if(BIT_B(word2)) + offset = MAKE_INT_32(REG_D(mc68kcpu)[offset&7]); + if(BIT_5(word2)) + width = REG_D(mc68kcpu)[width&7]; + + /* Offset is signed so we have to use ugly math =( */ + ea += offset / 8; + local_offset = offset % 8; + if(local_offset < 0) + { + local_offset += 8; + ea--; + } + width = ((width-1) & 31) + 1; + + data = (offset+width) < 16 ? (m68ki_read_16((mc68kcpu), ea) << 16) : m68ki_read_32((mc68kcpu), ea); + data = MASK_OUT_ABOVE_32(data< 32) + data |= (m68ki_read_8((mc68kcpu), ea+4) << local_offset) >> 8; + + (mc68kcpu)->n_flag = NFLAG_32(data); + data >>= (32 - width); + + (mc68kcpu)->not_z_flag = data; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + + for(bit = 1<<(width-1);bit && !(data & bit);bit>>= 1) + offset++; + + REG_D(mc68kcpu)[(word2>>12)&7] = offset; + + return; + } + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_bfffo_32_ix(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + uint32_t word2 = OPER_I_16(mc68kcpu); + int32_t offset = (word2>>6)&31; + int32_t local_offset; + uint32_t width = word2; + uint32_t data; + uint32_t bit; + uint32_t ea = EA_AY_IX_8(mc68kcpu); + + + if(BIT_B(word2)) + offset = MAKE_INT_32(REG_D(mc68kcpu)[offset&7]); + if(BIT_5(word2)) + width = REG_D(mc68kcpu)[width&7]; + + /* Offset is signed so we have to use ugly math =( */ + ea += offset / 8; + local_offset = offset % 8; + if(local_offset < 0) + { + local_offset += 8; + ea--; + } + width = ((width-1) & 31) + 1; + + data = (offset+width) < 16 ? (m68ki_read_16((mc68kcpu), ea) << 16) : m68ki_read_32((mc68kcpu), ea); + data = MASK_OUT_ABOVE_32(data< 32) + data |= (m68ki_read_8((mc68kcpu), ea+4) << local_offset) >> 8; + + (mc68kcpu)->n_flag = NFLAG_32(data); + data >>= (32 - width); + + (mc68kcpu)->not_z_flag = data; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + + for(bit = 1<<(width-1);bit && !(data & bit);bit>>= 1) + offset++; + + REG_D(mc68kcpu)[(word2>>12)&7] = offset; + + return; + } + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_bfffo_32_aw(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + uint32_t word2 = OPER_I_16(mc68kcpu); + int32_t offset = (word2>>6)&31; + int32_t local_offset; + uint32_t width = word2; + uint32_t data; + uint32_t bit; + uint32_t ea = EA_AW_8(mc68kcpu); + + + if(BIT_B(word2)) + offset = MAKE_INT_32(REG_D(mc68kcpu)[offset&7]); + if(BIT_5(word2)) + width = REG_D(mc68kcpu)[width&7]; + + /* Offset is signed so we have to use ugly math =( */ + ea += offset / 8; + local_offset = offset % 8; + if(local_offset < 0) + { + local_offset += 8; + ea--; + } + width = ((width-1) & 31) + 1; + + data = (offset+width) < 16 ? (m68ki_read_16((mc68kcpu), ea) << 16) : m68ki_read_32((mc68kcpu), ea); + data = MASK_OUT_ABOVE_32(data< 32) + data |= (m68ki_read_8((mc68kcpu), ea+4) << local_offset) >> 8; + + (mc68kcpu)->n_flag = NFLAG_32(data); + data >>= (32 - width); + + (mc68kcpu)->not_z_flag = data; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + + for(bit = 1<<(width-1);bit && !(data & bit);bit>>= 1) + offset++; + + REG_D(mc68kcpu)[(word2>>12)&7] = offset; + + return; + } + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_bfffo_32_al(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + uint32_t word2 = OPER_I_16(mc68kcpu); + int32_t offset = (word2>>6)&31; + int32_t local_offset; + uint32_t width = word2; + uint32_t data; + uint32_t bit; + uint32_t ea = EA_AL_8(mc68kcpu); + + + if(BIT_B(word2)) + offset = MAKE_INT_32(REG_D(mc68kcpu)[offset&7]); + if(BIT_5(word2)) + width = REG_D(mc68kcpu)[width&7]; + + /* Offset is signed so we have to use ugly math =( */ + ea += offset / 8; + local_offset = offset % 8; + if(local_offset < 0) + { + local_offset += 8; + ea--; + } + width = ((width-1) & 31) + 1; + + data = (offset+width) < 16 ? (m68ki_read_16((mc68kcpu), ea) << 16) : m68ki_read_32((mc68kcpu), ea); + data = MASK_OUT_ABOVE_32(data< 32) + data |= (m68ki_read_8((mc68kcpu), ea+4) << local_offset) >> 8; + + (mc68kcpu)->n_flag = NFLAG_32(data); + data >>= (32 - width); + + (mc68kcpu)->not_z_flag = data; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + + for(bit = 1<<(width-1);bit && !(data & bit);bit>>= 1) + offset++; + + REG_D(mc68kcpu)[(word2>>12)&7] = offset; + + return; + } + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_bfffo_32_pcdi(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + uint32_t word2 = OPER_I_16(mc68kcpu); + int32_t offset = (word2>>6)&31; + int32_t local_offset; + uint32_t width = word2; + uint32_t data; + uint32_t bit; + uint32_t ea = EA_PCDI_8(mc68kcpu); + + + if(BIT_B(word2)) + offset = MAKE_INT_32(REG_D(mc68kcpu)[offset&7]); + if(BIT_5(word2)) + width = REG_D(mc68kcpu)[width&7]; + + /* Offset is signed so we have to use ugly math =( */ + ea += offset / 8; + local_offset = offset % 8; + if(local_offset < 0) + { + local_offset += 8; + ea--; + } + width = ((width-1) & 31) + 1; + + data = (offset+width) < 16 ? (m68ki_read_16((mc68kcpu), ea) << 16) : m68ki_read_32((mc68kcpu), ea); + data = MASK_OUT_ABOVE_32(data< 32) + data |= (m68ki_read_8((mc68kcpu), ea+4) << local_offset) >> 8; + + (mc68kcpu)->n_flag = NFLAG_32(data); + data >>= (32 - width); + + (mc68kcpu)->not_z_flag = data; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + + for(bit = 1<<(width-1);bit && !(data & bit);bit>>= 1) + offset++; + + REG_D(mc68kcpu)[(word2>>12)&7] = offset; + + return; + } + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_bfffo_32_pcix(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + uint32_t word2 = OPER_I_16(mc68kcpu); + int32_t offset = (word2>>6)&31; + int32_t local_offset; + uint32_t width = word2; + uint32_t data; + uint32_t bit; + uint32_t ea = EA_PCIX_8(mc68kcpu); + + + if(BIT_B(word2)) + offset = MAKE_INT_32(REG_D(mc68kcpu)[offset&7]); + if(BIT_5(word2)) + width = REG_D(mc68kcpu)[width&7]; + + /* Offset is signed so we have to use ugly math =( */ + ea += offset / 8; + local_offset = offset % 8; + if(local_offset < 0) + { + local_offset += 8; + ea--; + } + width = ((width-1) & 31) + 1; + + data = (offset+width) < 16 ? (m68ki_read_16((mc68kcpu), ea) << 16) : m68ki_read_32((mc68kcpu), ea); + data = MASK_OUT_ABOVE_32(data< 32) + data |= (m68ki_read_8((mc68kcpu), ea+4) << local_offset) >> 8; + + (mc68kcpu)->n_flag = NFLAG_32(data); + data >>= (32 - width); + + (mc68kcpu)->not_z_flag = data; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + + for(bit = 1<<(width-1);bit && !(data & bit);bit>>= 1) + offset++; + + REG_D(mc68kcpu)[(word2>>12)&7] = offset; + + return; + } + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_bfins_32_d(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + uint32_t word2 = OPER_I_16(mc68kcpu); + uint32_t offset = (word2>>6)&31; + uint32_t width = word2; + uint32_t* data = &DY(mc68kcpu); + uint64_t mask; + uint64_t insert = REG_D(mc68kcpu)[(word2>>12)&7]; + + + if(BIT_B(word2)) + offset = REG_D(mc68kcpu)[offset&7]; + if(BIT_5(word2)) + width = REG_D(mc68kcpu)[width&7]; + + + offset &= 31; + width = ((width-1) & 31) + 1; + + + mask = MASK_OUT_ABOVE_32(0xffffffff << (32 - width)); + mask = ROR_32(mask, offset); + + insert = MASK_OUT_ABOVE_32(insert << (32 - width)); + (mc68kcpu)->n_flag = NFLAG_32(insert); + (mc68kcpu)->not_z_flag = insert; + insert = ROR_32(insert, offset); + + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + + *data &= ~mask; + *data |= insert; + + return; + } + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_bfins_32_ai(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + uint32_t word2 = OPER_I_16(mc68kcpu); + int32_t offset = (word2>>6)&31; + uint32_t width = word2; + uint32_t insert_base = REG_D(mc68kcpu)[(word2>>12)&7]; + uint32_t insert_long; + uint32_t insert_byte; + uint32_t mask_base; + uint32_t data_long; + uint32_t mask_long; + uint32_t data_byte = 0; + uint32_t mask_byte = 0; + uint32_t ea = EA_AY_AI_8(mc68kcpu); + + + if(BIT_B(word2)) + offset = MAKE_INT_32(REG_D(mc68kcpu)[offset&7]); + if(BIT_5(word2)) + width = REG_D(mc68kcpu)[width&7]; + + if(BIT_B(word2)) + { + /* Offset is signed so we have to use ugly math =( */ + ea += offset / 8; + offset %= 8; + if(offset < 0) + { + offset += 8; + ea--; + } + } + width = ((width-1) & 31) + 1; + + mask_base = MASK_OUT_ABOVE_32(0xffffffff << (32 - width)); + mask_long = mask_base >> offset; + + insert_base = MASK_OUT_ABOVE_32(insert_base << (32 - width)); + (mc68kcpu)->n_flag = NFLAG_32(insert_base); + (mc68kcpu)->not_z_flag = insert_base; + insert_long = insert_base >> offset; + + data_long = (offset+width) < 8 ? (m68ki_read_8((mc68kcpu), ea) << 24) : + (offset+width) < 16 ? (m68ki_read_16((mc68kcpu), ea) << 16) : m68ki_read_32((mc68kcpu), ea); + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + + if((width + offset) < 8) + { + m68ki_write_8((mc68kcpu), ea, ((data_long & ~mask_long) | insert_long) >> 24); + } + else if((width + offset) < 16) + { + m68ki_write_16((mc68kcpu), ea, ((data_long & ~mask_long) | insert_long) >> 16); + } + else + { + m68ki_write_32((mc68kcpu), ea, (data_long & ~mask_long) | insert_long); + } + + if((width + offset) > 32) + { + mask_byte = MASK_OUT_ABOVE_8(mask_base) << (8-offset); + insert_byte = MASK_OUT_ABOVE_8(insert_base) << (8-offset); + data_byte = m68ki_read_8((mc68kcpu), ea+4); + (mc68kcpu)->not_z_flag |= (insert_byte & mask_byte); + m68ki_write_8((mc68kcpu), ea+4, (data_byte & ~mask_byte) | insert_byte); + } + return; + } + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_bfins_32_di(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + uint32_t word2 = OPER_I_16(mc68kcpu); + int32_t offset = (word2>>6)&31; + uint32_t width = word2; + uint32_t insert_base = REG_D(mc68kcpu)[(word2>>12)&7]; + uint32_t insert_long; + uint32_t insert_byte; + uint32_t mask_base; + uint32_t data_long; + uint32_t mask_long; + uint32_t data_byte = 0; + uint32_t mask_byte = 0; + uint32_t ea = EA_AY_DI_8(mc68kcpu); + + + if(BIT_B(word2)) + offset = MAKE_INT_32(REG_D(mc68kcpu)[offset&7]); + if(BIT_5(word2)) + width = REG_D(mc68kcpu)[width&7]; + + if(BIT_B(word2)) + { + /* Offset is signed so we have to use ugly math =( */ + ea += offset / 8; + offset %= 8; + if(offset < 0) + { + offset += 8; + ea--; + } + } + width = ((width-1) & 31) + 1; + + mask_base = MASK_OUT_ABOVE_32(0xffffffff << (32 - width)); + mask_long = mask_base >> offset; + + insert_base = MASK_OUT_ABOVE_32(insert_base << (32 - width)); + (mc68kcpu)->n_flag = NFLAG_32(insert_base); + (mc68kcpu)->not_z_flag = insert_base; + insert_long = insert_base >> offset; + + data_long = (offset+width) < 8 ? (m68ki_read_8((mc68kcpu), ea) << 24) : + (offset+width) < 16 ? (m68ki_read_16((mc68kcpu), ea) << 16) : m68ki_read_32((mc68kcpu), ea); + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + + if((width + offset) < 8) + { + m68ki_write_8((mc68kcpu), ea, ((data_long & ~mask_long) | insert_long) >> 24); + } + else if((width + offset) < 16) + { + m68ki_write_16((mc68kcpu), ea, ((data_long & ~mask_long) | insert_long) >> 16); + } + else + { + m68ki_write_32((mc68kcpu), ea, (data_long & ~mask_long) | insert_long); + } + + if((width + offset) > 32) + { + mask_byte = MASK_OUT_ABOVE_8(mask_base) << (8-offset); + insert_byte = MASK_OUT_ABOVE_8(insert_base) << (8-offset); + data_byte = m68ki_read_8((mc68kcpu), ea+4); + (mc68kcpu)->not_z_flag |= (insert_byte & mask_byte); + m68ki_write_8((mc68kcpu), ea+4, (data_byte & ~mask_byte) | insert_byte); + } + return; + } + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_bfins_32_ix(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + uint32_t word2 = OPER_I_16(mc68kcpu); + int32_t offset = (word2>>6)&31; + uint32_t width = word2; + uint32_t insert_base = REG_D(mc68kcpu)[(word2>>12)&7]; + uint32_t insert_long; + uint32_t insert_byte; + uint32_t mask_base; + uint32_t data_long; + uint32_t mask_long; + uint32_t data_byte = 0; + uint32_t mask_byte = 0; + uint32_t ea = EA_AY_IX_8(mc68kcpu); + + + if(BIT_B(word2)) + offset = MAKE_INT_32(REG_D(mc68kcpu)[offset&7]); + if(BIT_5(word2)) + width = REG_D(mc68kcpu)[width&7]; + + if(BIT_B(word2)) + { + /* Offset is signed so we have to use ugly math =( */ + ea += offset / 8; + offset %= 8; + if(offset < 0) + { + offset += 8; + ea--; + } + } + width = ((width-1) & 31) + 1; + + mask_base = MASK_OUT_ABOVE_32(0xffffffff << (32 - width)); + mask_long = mask_base >> offset; + + insert_base = MASK_OUT_ABOVE_32(insert_base << (32 - width)); + (mc68kcpu)->n_flag = NFLAG_32(insert_base); + (mc68kcpu)->not_z_flag = insert_base; + insert_long = insert_base >> offset; + + data_long = (offset+width) < 8 ? (m68ki_read_8((mc68kcpu), ea) << 24) : + (offset+width) < 16 ? (m68ki_read_16((mc68kcpu), ea) << 16) : m68ki_read_32((mc68kcpu), ea); + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + + if((width + offset) < 8) + { + m68ki_write_8((mc68kcpu), ea, ((data_long & ~mask_long) | insert_long) >> 24); + } + else if((width + offset) < 16) + { + m68ki_write_16((mc68kcpu), ea, ((data_long & ~mask_long) | insert_long) >> 16); + } + else + { + m68ki_write_32((mc68kcpu), ea, (data_long & ~mask_long) | insert_long); + } + + if((width + offset) > 32) + { + mask_byte = MASK_OUT_ABOVE_8(mask_base) << (8-offset); + insert_byte = MASK_OUT_ABOVE_8(insert_base) << (8-offset); + data_byte = m68ki_read_8((mc68kcpu), ea+4); + (mc68kcpu)->not_z_flag |= (insert_byte & mask_byte); + m68ki_write_8((mc68kcpu), ea+4, (data_byte & ~mask_byte) | insert_byte); + } + return; + } + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_bfins_32_aw(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + uint32_t word2 = OPER_I_16(mc68kcpu); + int32_t offset = (word2>>6)&31; + uint32_t width = word2; + uint32_t insert_base = REG_D(mc68kcpu)[(word2>>12)&7]; + uint32_t insert_long; + uint32_t insert_byte; + uint32_t mask_base; + uint32_t data_long; + uint32_t mask_long; + uint32_t data_byte = 0; + uint32_t mask_byte = 0; + uint32_t ea = EA_AW_8(mc68kcpu); + + + if(BIT_B(word2)) + offset = MAKE_INT_32(REG_D(mc68kcpu)[offset&7]); + if(BIT_5(word2)) + width = REG_D(mc68kcpu)[width&7]; + + if(BIT_B(word2)) + { + /* Offset is signed so we have to use ugly math =( */ + ea += offset / 8; + offset %= 8; + if(offset < 0) + { + offset += 8; + ea--; + } + } + width = ((width-1) & 31) + 1; + + mask_base = MASK_OUT_ABOVE_32(0xffffffff << (32 - width)); + mask_long = mask_base >> offset; + + insert_base = MASK_OUT_ABOVE_32(insert_base << (32 - width)); + (mc68kcpu)->n_flag = NFLAG_32(insert_base); + (mc68kcpu)->not_z_flag = insert_base; + insert_long = insert_base >> offset; + + data_long = (offset+width) < 8 ? (m68ki_read_8((mc68kcpu), ea) << 24) : + (offset+width) < 16 ? (m68ki_read_16((mc68kcpu), ea) << 16) : m68ki_read_32((mc68kcpu), ea); + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + + if((width + offset) < 8) + { + m68ki_write_8((mc68kcpu), ea, ((data_long & ~mask_long) | insert_long) >> 24); + } + else if((width + offset) < 16) + { + m68ki_write_16((mc68kcpu), ea, ((data_long & ~mask_long) | insert_long) >> 16); + } + else + { + m68ki_write_32((mc68kcpu), ea, (data_long & ~mask_long) | insert_long); + } + + if((width + offset) > 32) + { + mask_byte = MASK_OUT_ABOVE_8(mask_base) << (8-offset); + insert_byte = MASK_OUT_ABOVE_8(insert_base) << (8-offset); + data_byte = m68ki_read_8((mc68kcpu), ea+4); + (mc68kcpu)->not_z_flag |= (insert_byte & mask_byte); + m68ki_write_8((mc68kcpu), ea+4, (data_byte & ~mask_byte) | insert_byte); + } + return; + } + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_bfins_32_al(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + uint32_t word2 = OPER_I_16(mc68kcpu); + int32_t offset = (word2>>6)&31; + uint32_t width = word2; + uint32_t insert_base = REG_D(mc68kcpu)[(word2>>12)&7]; + uint32_t insert_long; + uint32_t insert_byte; + uint32_t mask_base; + uint32_t data_long; + uint32_t mask_long; + uint32_t data_byte = 0; + uint32_t mask_byte = 0; + uint32_t ea = EA_AL_8(mc68kcpu); + + + if(BIT_B(word2)) + offset = MAKE_INT_32(REG_D(mc68kcpu)[offset&7]); + if(BIT_5(word2)) + width = REG_D(mc68kcpu)[width&7]; + + if(BIT_B(word2)) + { + /* Offset is signed so we have to use ugly math =( */ + ea += offset / 8; + offset %= 8; + if(offset < 0) + { + offset += 8; + ea--; + } + } + width = ((width-1) & 31) + 1; + + mask_base = MASK_OUT_ABOVE_32(0xffffffff << (32 - width)); + mask_long = mask_base >> offset; + + insert_base = MASK_OUT_ABOVE_32(insert_base << (32 - width)); + (mc68kcpu)->n_flag = NFLAG_32(insert_base); + (mc68kcpu)->not_z_flag = insert_base; + insert_long = insert_base >> offset; + + data_long = (offset+width) < 8 ? (m68ki_read_8((mc68kcpu), ea) << 24) : + (offset+width) < 16 ? (m68ki_read_16((mc68kcpu), ea) << 16) : m68ki_read_32((mc68kcpu), ea); + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + + if((width + offset) < 8) + { + m68ki_write_8((mc68kcpu), ea, ((data_long & ~mask_long) | insert_long) >> 24); + } + else if((width + offset) < 16) + { + m68ki_write_16((mc68kcpu), ea, ((data_long & ~mask_long) | insert_long) >> 16); + } + else + { + m68ki_write_32((mc68kcpu), ea, (data_long & ~mask_long) | insert_long); + } + + if((width + offset) > 32) + { + mask_byte = MASK_OUT_ABOVE_8(mask_base) << (8-offset); + insert_byte = MASK_OUT_ABOVE_8(insert_base) << (8-offset); + data_byte = m68ki_read_8((mc68kcpu), ea+4); + (mc68kcpu)->not_z_flag |= (insert_byte & mask_byte); + m68ki_write_8((mc68kcpu), ea+4, (data_byte & ~mask_byte) | insert_byte); + } + return; + } + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_bfset_32_d(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + uint32_t word2 = OPER_I_16(mc68kcpu); + uint32_t offset = (word2>>6)&31; + uint32_t width = word2; + uint32_t* data = &DY(mc68kcpu); + uint64_t mask; + + + if(BIT_B(word2)) + offset = REG_D(mc68kcpu)[offset&7]; + if(BIT_5(word2)) + width = REG_D(mc68kcpu)[width&7]; + + + offset &= 31; + width = ((width-1) & 31) + 1; + + + mask = MASK_OUT_ABOVE_32(0xffffffff << (32 - width)); + mask = ROR_32(mask, offset); + + (mc68kcpu)->n_flag = NFLAG_32(*data<not_z_flag = *data & mask; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + + *data |= mask; + + return; + } + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_bfset_32_ai(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + uint32_t word2 = OPER_I_16(mc68kcpu); + int32_t offset = (word2>>6)&31; + uint32_t width = word2; + uint32_t mask_base; + uint32_t data_long; + uint32_t mask_long; + uint32_t data_byte = 0; + uint32_t mask_byte = 0; + uint32_t ea = EA_AY_AI_8(mc68kcpu); + + if(BIT_B(word2)) + offset = MAKE_INT_32(REG_D(mc68kcpu)[offset&7]); + if(BIT_5(word2)) + width = REG_D(mc68kcpu)[width&7]; + + /* Offset is signed so we have to use ugly math =( */ + ea += offset / 8; + offset %= 8; + if(offset < 0) + { + offset += 8; + ea--; + } + width = ((width-1) & 31) + 1; + + mask_base = MASK_OUT_ABOVE_32(0xffffffff << (32 - width)); + mask_long = mask_base >> offset; + + data_long = m68ki_read_32((mc68kcpu), ea); + (mc68kcpu)->n_flag = NFLAG_32(data_long << offset); + (mc68kcpu)->not_z_flag = data_long & mask_long; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + + m68ki_write_32((mc68kcpu), ea, data_long | mask_long); + + if((width + offset) > 32) + { + mask_byte = MASK_OUT_ABOVE_8(mask_base) << (8-offset); + data_byte = m68ki_read_8((mc68kcpu), ea+4); + (mc68kcpu)->not_z_flag |= (data_byte & mask_byte); + m68ki_write_8((mc68kcpu), ea+4, data_byte | mask_byte); + } + return; + } + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_bfset_32_di(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + uint32_t word2 = OPER_I_16(mc68kcpu); + int32_t offset = (word2>>6)&31; + uint32_t width = word2; + uint32_t mask_base; + uint32_t data_long; + uint32_t mask_long; + uint32_t data_byte = 0; + uint32_t mask_byte = 0; + uint32_t ea = EA_AY_DI_8(mc68kcpu); + + if(BIT_B(word2)) + offset = MAKE_INT_32(REG_D(mc68kcpu)[offset&7]); + if(BIT_5(word2)) + width = REG_D(mc68kcpu)[width&7]; + + /* Offset is signed so we have to use ugly math =( */ + ea += offset / 8; + offset %= 8; + if(offset < 0) + { + offset += 8; + ea--; + } + width = ((width-1) & 31) + 1; + + mask_base = MASK_OUT_ABOVE_32(0xffffffff << (32 - width)); + mask_long = mask_base >> offset; + + data_long = m68ki_read_32((mc68kcpu), ea); + (mc68kcpu)->n_flag = NFLAG_32(data_long << offset); + (mc68kcpu)->not_z_flag = data_long & mask_long; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + + m68ki_write_32((mc68kcpu), ea, data_long | mask_long); + + if((width + offset) > 32) + { + mask_byte = MASK_OUT_ABOVE_8(mask_base) << (8-offset); + data_byte = m68ki_read_8((mc68kcpu), ea+4); + (mc68kcpu)->not_z_flag |= (data_byte & mask_byte); + m68ki_write_8((mc68kcpu), ea+4, data_byte | mask_byte); + } + return; + } + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_bfset_32_ix(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + uint32_t word2 = OPER_I_16(mc68kcpu); + int32_t offset = (word2>>6)&31; + uint32_t width = word2; + uint32_t mask_base; + uint32_t data_long; + uint32_t mask_long; + uint32_t data_byte = 0; + uint32_t mask_byte = 0; + uint32_t ea = EA_AY_IX_8(mc68kcpu); + + if(BIT_B(word2)) + offset = MAKE_INT_32(REG_D(mc68kcpu)[offset&7]); + if(BIT_5(word2)) + width = REG_D(mc68kcpu)[width&7]; + + /* Offset is signed so we have to use ugly math =( */ + ea += offset / 8; + offset %= 8; + if(offset < 0) + { + offset += 8; + ea--; + } + width = ((width-1) & 31) + 1; + + mask_base = MASK_OUT_ABOVE_32(0xffffffff << (32 - width)); + mask_long = mask_base >> offset; + + data_long = m68ki_read_32((mc68kcpu), ea); + (mc68kcpu)->n_flag = NFLAG_32(data_long << offset); + (mc68kcpu)->not_z_flag = data_long & mask_long; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + + m68ki_write_32((mc68kcpu), ea, data_long | mask_long); + + if((width + offset) > 32) + { + mask_byte = MASK_OUT_ABOVE_8(mask_base) << (8-offset); + data_byte = m68ki_read_8((mc68kcpu), ea+4); + (mc68kcpu)->not_z_flag |= (data_byte & mask_byte); + m68ki_write_8((mc68kcpu), ea+4, data_byte | mask_byte); + } + return; + } + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_bfset_32_aw(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + uint32_t word2 = OPER_I_16(mc68kcpu); + int32_t offset = (word2>>6)&31; + uint32_t width = word2; + uint32_t mask_base; + uint32_t data_long; + uint32_t mask_long; + uint32_t data_byte = 0; + uint32_t mask_byte = 0; + uint32_t ea = EA_AW_8(mc68kcpu); + + if(BIT_B(word2)) + offset = MAKE_INT_32(REG_D(mc68kcpu)[offset&7]); + if(BIT_5(word2)) + width = REG_D(mc68kcpu)[width&7]; + + /* Offset is signed so we have to use ugly math =( */ + ea += offset / 8; + offset %= 8; + if(offset < 0) + { + offset += 8; + ea--; + } + width = ((width-1) & 31) + 1; + + mask_base = MASK_OUT_ABOVE_32(0xffffffff << (32 - width)); + mask_long = mask_base >> offset; + + data_long = m68ki_read_32((mc68kcpu), ea); + (mc68kcpu)->n_flag = NFLAG_32(data_long << offset); + (mc68kcpu)->not_z_flag = data_long & mask_long; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + + m68ki_write_32((mc68kcpu), ea, data_long | mask_long); + + if((width + offset) > 32) + { + mask_byte = MASK_OUT_ABOVE_8(mask_base) << (8-offset); + data_byte = m68ki_read_8((mc68kcpu), ea+4); + (mc68kcpu)->not_z_flag |= (data_byte & mask_byte); + m68ki_write_8((mc68kcpu), ea+4, data_byte | mask_byte); + } + return; + } + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_bfset_32_al(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + uint32_t word2 = OPER_I_16(mc68kcpu); + int32_t offset = (word2>>6)&31; + uint32_t width = word2; + uint32_t mask_base; + uint32_t data_long; + uint32_t mask_long; + uint32_t data_byte = 0; + uint32_t mask_byte = 0; + uint32_t ea = EA_AL_8(mc68kcpu); + + if(BIT_B(word2)) + offset = MAKE_INT_32(REG_D(mc68kcpu)[offset&7]); + if(BIT_5(word2)) + width = REG_D(mc68kcpu)[width&7]; + + /* Offset is signed so we have to use ugly math =( */ + ea += offset / 8; + offset %= 8; + if(offset < 0) + { + offset += 8; + ea--; + } + width = ((width-1) & 31) + 1; + + mask_base = MASK_OUT_ABOVE_32(0xffffffff << (32 - width)); + mask_long = mask_base >> offset; + + data_long = m68ki_read_32((mc68kcpu), ea); + (mc68kcpu)->n_flag = NFLAG_32(data_long << offset); + (mc68kcpu)->not_z_flag = data_long & mask_long; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + + m68ki_write_32((mc68kcpu), ea, data_long | mask_long); + + if((width + offset) > 32) + { + mask_byte = MASK_OUT_ABOVE_8(mask_base) << (8-offset); + data_byte = m68ki_read_8((mc68kcpu), ea+4); + (mc68kcpu)->not_z_flag |= (data_byte & mask_byte); + m68ki_write_8((mc68kcpu), ea+4, data_byte | mask_byte); + } + return; + } + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_bftst_32_d(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + uint32_t word2 = OPER_I_16(mc68kcpu); + uint32_t offset = (word2>>6)&31; + uint32_t width = word2; + uint32_t* data = &DY(mc68kcpu); + uint64_t mask; + + + if(BIT_B(word2)) + offset = REG_D(mc68kcpu)[offset&7]; + if(BIT_5(word2)) + width = REG_D(mc68kcpu)[width&7]; + + + offset &= 31; + width = ((width-1) & 31) + 1; + + + mask = MASK_OUT_ABOVE_32(0xffffffff << (32 - width)); + mask = ROR_32(mask, offset); + + (mc68kcpu)->n_flag = NFLAG_32(*data<not_z_flag = *data & mask; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + + return; + } + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_bftst_32_ai(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + uint32_t word2 = OPER_I_16(mc68kcpu); + int32_t offset = (word2>>6)&31; + uint32_t width = word2; + uint32_t mask_base; + uint32_t data_long; + uint32_t mask_long; + uint32_t data_byte = 0; + uint32_t mask_byte = 0; + uint32_t ea = EA_AY_AI_8(mc68kcpu); + + if(BIT_B(word2)) + offset = MAKE_INT_32(REG_D(mc68kcpu)[offset&7]); + if(BIT_5(word2)) + width = REG_D(mc68kcpu)[width&7]; + + /* Offset is signed so we have to use ugly math =( */ + ea += offset / 8; + offset %= 8; + if(offset < 0) + { + offset += 8; + ea--; + } + width = ((width-1) & 31) + 1; + + + mask_base = MASK_OUT_ABOVE_32(0xffffffff << (32 - width)); + mask_long = mask_base >> offset; + + data_long = m68ki_read_32((mc68kcpu), ea); + (mc68kcpu)->n_flag = ((data_long & (0x80000000 >> offset))<>24; + (mc68kcpu)->not_z_flag = data_long & mask_long; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + + if((width + offset) > 32) + { + mask_byte = MASK_OUT_ABOVE_8(mask_base) << (8-offset); + data_byte = m68ki_read_8((mc68kcpu), ea+4); + (mc68kcpu)->not_z_flag |= (data_byte & mask_byte); + } + return; + } + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_bftst_32_di(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + uint32_t word2 = OPER_I_16(mc68kcpu); + int32_t offset = (word2>>6)&31; + uint32_t width = word2; + uint32_t mask_base; + uint32_t data_long; + uint32_t mask_long; + uint32_t data_byte = 0; + uint32_t mask_byte = 0; + uint32_t ea = EA_AY_DI_8(mc68kcpu); + + if(BIT_B(word2)) + offset = MAKE_INT_32(REG_D(mc68kcpu)[offset&7]); + if(BIT_5(word2)) + width = REG_D(mc68kcpu)[width&7]; + + /* Offset is signed so we have to use ugly math =( */ + ea += offset / 8; + offset %= 8; + if(offset < 0) + { + offset += 8; + ea--; + } + width = ((width-1) & 31) + 1; + + + mask_base = MASK_OUT_ABOVE_32(0xffffffff << (32 - width)); + mask_long = mask_base >> offset; + + data_long = m68ki_read_32((mc68kcpu), ea); + (mc68kcpu)->n_flag = ((data_long & (0x80000000 >> offset))<>24; + (mc68kcpu)->not_z_flag = data_long & mask_long; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + + if((width + offset) > 32) + { + mask_byte = MASK_OUT_ABOVE_8(mask_base) << (8-offset); + data_byte = m68ki_read_8((mc68kcpu), ea+4); + (mc68kcpu)->not_z_flag |= (data_byte & mask_byte); + } + return; + } + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_bftst_32_ix(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + uint32_t word2 = OPER_I_16(mc68kcpu); + int32_t offset = (word2>>6)&31; + uint32_t width = word2; + uint32_t mask_base; + uint32_t data_long; + uint32_t mask_long; + uint32_t data_byte = 0; + uint32_t mask_byte = 0; + uint32_t ea = EA_AY_IX_8(mc68kcpu); + + if(BIT_B(word2)) + offset = MAKE_INT_32(REG_D(mc68kcpu)[offset&7]); + if(BIT_5(word2)) + width = REG_D(mc68kcpu)[width&7]; + + /* Offset is signed so we have to use ugly math =( */ + ea += offset / 8; + offset %= 8; + if(offset < 0) + { + offset += 8; + ea--; + } + width = ((width-1) & 31) + 1; + + + mask_base = MASK_OUT_ABOVE_32(0xffffffff << (32 - width)); + mask_long = mask_base >> offset; + + data_long = m68ki_read_32((mc68kcpu), ea); + (mc68kcpu)->n_flag = ((data_long & (0x80000000 >> offset))<>24; + (mc68kcpu)->not_z_flag = data_long & mask_long; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + + if((width + offset) > 32) + { + mask_byte = MASK_OUT_ABOVE_8(mask_base) << (8-offset); + data_byte = m68ki_read_8((mc68kcpu), ea+4); + (mc68kcpu)->not_z_flag |= (data_byte & mask_byte); + } + return; + } + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_bftst_32_aw(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + uint32_t word2 = OPER_I_16(mc68kcpu); + int32_t offset = (word2>>6)&31; + uint32_t width = word2; + uint32_t mask_base; + uint32_t data_long; + uint32_t mask_long; + uint32_t data_byte = 0; + uint32_t mask_byte = 0; + uint32_t ea = EA_AW_8(mc68kcpu); + + if(BIT_B(word2)) + offset = MAKE_INT_32(REG_D(mc68kcpu)[offset&7]); + if(BIT_5(word2)) + width = REG_D(mc68kcpu)[width&7]; + + /* Offset is signed so we have to use ugly math =( */ + ea += offset / 8; + offset %= 8; + if(offset < 0) + { + offset += 8; + ea--; + } + width = ((width-1) & 31) + 1; + + + mask_base = MASK_OUT_ABOVE_32(0xffffffff << (32 - width)); + mask_long = mask_base >> offset; + + data_long = m68ki_read_32((mc68kcpu), ea); + (mc68kcpu)->n_flag = ((data_long & (0x80000000 >> offset))<>24; + (mc68kcpu)->not_z_flag = data_long & mask_long; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + + if((width + offset) > 32) + { + mask_byte = MASK_OUT_ABOVE_8(mask_base) << (8-offset); + data_byte = m68ki_read_8((mc68kcpu), ea+4); + (mc68kcpu)->not_z_flag |= (data_byte & mask_byte); + } + return; + } + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_bftst_32_al(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + uint32_t word2 = OPER_I_16(mc68kcpu); + int32_t offset = (word2>>6)&31; + uint32_t width = word2; + uint32_t mask_base; + uint32_t data_long; + uint32_t mask_long; + uint32_t data_byte = 0; + uint32_t mask_byte = 0; + uint32_t ea = EA_AL_8(mc68kcpu); + + if(BIT_B(word2)) + offset = MAKE_INT_32(REG_D(mc68kcpu)[offset&7]); + if(BIT_5(word2)) + width = REG_D(mc68kcpu)[width&7]; + + /* Offset is signed so we have to use ugly math =( */ + ea += offset / 8; + offset %= 8; + if(offset < 0) + { + offset += 8; + ea--; + } + width = ((width-1) & 31) + 1; + + + mask_base = MASK_OUT_ABOVE_32(0xffffffff << (32 - width)); + mask_long = mask_base >> offset; + + data_long = m68ki_read_32((mc68kcpu), ea); + (mc68kcpu)->n_flag = ((data_long & (0x80000000 >> offset))<>24; + (mc68kcpu)->not_z_flag = data_long & mask_long; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + + if((width + offset) > 32) + { + mask_byte = MASK_OUT_ABOVE_8(mask_base) << (8-offset); + data_byte = m68ki_read_8((mc68kcpu), ea+4); + (mc68kcpu)->not_z_flag |= (data_byte & mask_byte); + } + return; + } + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_bftst_32_pcdi(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + uint32_t word2 = OPER_I_16(mc68kcpu); + int32_t offset = (word2>>6)&31; + uint32_t width = word2; + uint32_t mask_base; + uint32_t data_long; + uint32_t mask_long; + uint32_t data_byte = 0; + uint32_t mask_byte = 0; + uint32_t ea = EA_PCDI_8(mc68kcpu); + + if(BIT_B(word2)) + offset = MAKE_INT_32(REG_D(mc68kcpu)[offset&7]); + if(BIT_5(word2)) + width = REG_D(mc68kcpu)[width&7]; + + /* Offset is signed so we have to use ugly math =( */ + ea += offset / 8; + offset %= 8; + if(offset < 0) + { + offset += 8; + ea--; + } + width = ((width-1) & 31) + 1; + + + mask_base = MASK_OUT_ABOVE_32(0xffffffff << (32 - width)); + mask_long = mask_base >> offset; + + data_long = m68ki_read_32((mc68kcpu), ea); + (mc68kcpu)->n_flag = ((data_long & (0x80000000 >> offset))<>24; + (mc68kcpu)->not_z_flag = data_long & mask_long; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + + if((width + offset) > 32) + { + mask_byte = MASK_OUT_ABOVE_8(mask_base) << (8-offset); + data_byte = m68ki_read_8((mc68kcpu), ea+4); + (mc68kcpu)->not_z_flag |= (data_byte & mask_byte); + } + return; + } + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_bftst_32_pcix(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + uint32_t word2 = OPER_I_16(mc68kcpu); + int32_t offset = (word2>>6)&31; + uint32_t width = word2; + uint32_t mask_base; + uint32_t data_long; + uint32_t mask_long; + uint32_t data_byte = 0; + uint32_t mask_byte = 0; + uint32_t ea = EA_PCIX_8(mc68kcpu); + + if(BIT_B(word2)) + offset = MAKE_INT_32(REG_D(mc68kcpu)[offset&7]); + if(BIT_5(word2)) + width = REG_D(mc68kcpu)[width&7]; + + /* Offset is signed so we have to use ugly math =( */ + ea += offset / 8; + offset %= 8; + if(offset < 0) + { + offset += 8; + ea--; + } + width = ((width-1) & 31) + 1; + + + mask_base = MASK_OUT_ABOVE_32(0xffffffff << (32 - width)); + mask_long = mask_base >> offset; + + data_long = m68ki_read_32((mc68kcpu), ea); + (mc68kcpu)->n_flag = ((data_long & (0x80000000 >> offset))<>24; + (mc68kcpu)->not_z_flag = data_long & mask_long; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + + if((width + offset) > 32) + { + mask_byte = MASK_OUT_ABOVE_8(mask_base) << (8-offset); + data_byte = m68ki_read_8((mc68kcpu), ea+4); + (mc68kcpu)->not_z_flag |= (data_byte & mask_byte); + } + return; + } + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_bkpt(m68000_base_device* mc68kcpu) +{ +/* if(CPU_TYPE_IS_010_PLUS((mc68kcpu)->cpu_type)) + { + if (!(mc68kcpu)->bkpt_ack_callback.isnull()) + ((mc68kcpu)->bkpt_ack_callback)((*mc68kcpu->program), 0, CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type) ? (mc68kcpu)->ir & 7 : 0, 0xffffffff); + }*/ + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_bra_8(m68000_base_device* mc68kcpu) +{ + m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */ + m68ki_branch_8((mc68kcpu), MASK_OUT_ABOVE_8((mc68kcpu)->ir)); + if(REG_PC(mc68kcpu) == REG_PPC(mc68kcpu) && (mc68kcpu)->c.current_cycle < (mc68kcpu)->c.target_cycle) + (mc68kcpu)->c.current_cycle = (mc68kcpu)->c.target_cycle; +} + + +static void m68k_op_bra_16(m68000_base_device* mc68kcpu) +{ + uint32_t offset = OPER_I_16(mc68kcpu); + REG_PC(mc68kcpu) -= 2; + m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */ + m68ki_branch_16((mc68kcpu), offset); + if(REG_PC(mc68kcpu) == REG_PPC(mc68kcpu) && (mc68kcpu)->c.current_cycle < (mc68kcpu)->c.target_cycle) + (mc68kcpu)->c.current_cycle = (mc68kcpu)->c.target_cycle; +} + + +static void m68k_op_bra_32(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + uint32_t offset = OPER_I_32(mc68kcpu); + REG_PC(mc68kcpu) -= 4; + m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */ + m68ki_branch_32((mc68kcpu), offset); + if(REG_PC(mc68kcpu) == REG_PPC(mc68kcpu) && (mc68kcpu)->c.current_cycle < (mc68kcpu)->c.target_cycle) + (mc68kcpu)->c.current_cycle = (mc68kcpu)->c.target_cycle; + return; + } + else + { + m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */ + m68ki_branch_8((mc68kcpu), MASK_OUT_ABOVE_8((mc68kcpu)->ir)); + if(REG_PC(mc68kcpu) == REG_PPC(mc68kcpu) && (mc68kcpu)->c.current_cycle < (mc68kcpu)->c.target_cycle) + (mc68kcpu)->c.current_cycle = (mc68kcpu)->c.target_cycle; + } +} + + +static void m68k_op_bset_32_r_d(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &DY(mc68kcpu); + uint32_t mask = 1 << (DX(mc68kcpu) & 0x1f); + + (mc68kcpu)->not_z_flag = *r_dst & mask; + *r_dst |= mask; +} + + +static void m68k_op_bset_8_r_ai(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AY_AI_8(mc68kcpu); + uint32_t src = m68ki_read_8((mc68kcpu), ea); + uint32_t mask = 1 << (DX(mc68kcpu) & 7); + + (mc68kcpu)->not_z_flag = src & mask; + m68ki_write_8((mc68kcpu), ea, src | mask); +} + + +static void m68k_op_bset_8_r_pi(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AY_PI_8(mc68kcpu); + uint32_t src = m68ki_read_8((mc68kcpu), ea); + uint32_t mask = 1 << (DX(mc68kcpu) & 7); + + (mc68kcpu)->not_z_flag = src & mask; + m68ki_write_8((mc68kcpu), ea, src | mask); +} + + +static void m68k_op_bset_8_r_pi7(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_A7_PI_8(mc68kcpu); + uint32_t src = m68ki_read_8((mc68kcpu), ea); + uint32_t mask = 1 << (DX(mc68kcpu) & 7); + + (mc68kcpu)->not_z_flag = src & mask; + m68ki_write_8((mc68kcpu), ea, src | mask); +} + + +static void m68k_op_bset_8_r_pd(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AY_PD_8(mc68kcpu); + uint32_t src = m68ki_read_8((mc68kcpu), ea); + uint32_t mask = 1 << (DX(mc68kcpu) & 7); + + (mc68kcpu)->not_z_flag = src & mask; + m68ki_write_8((mc68kcpu), ea, src | mask); +} + + +static void m68k_op_bset_8_r_pd7(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_A7_PD_8(mc68kcpu); + uint32_t src = m68ki_read_8((mc68kcpu), ea); + uint32_t mask = 1 << (DX(mc68kcpu) & 7); + + (mc68kcpu)->not_z_flag = src & mask; + m68ki_write_8((mc68kcpu), ea, src | mask); +} + + +static void m68k_op_bset_8_r_di(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AY_DI_8(mc68kcpu); + uint32_t src = m68ki_read_8((mc68kcpu), ea); + uint32_t mask = 1 << (DX(mc68kcpu) & 7); + + (mc68kcpu)->not_z_flag = src & mask; + m68ki_write_8((mc68kcpu), ea, src | mask); +} + + +static void m68k_op_bset_8_r_ix(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AY_IX_8(mc68kcpu); + uint32_t src = m68ki_read_8((mc68kcpu), ea); + uint32_t mask = 1 << (DX(mc68kcpu) & 7); + + (mc68kcpu)->not_z_flag = src & mask; + m68ki_write_8((mc68kcpu), ea, src | mask); +} + + +static void m68k_op_bset_8_r_aw(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AW_8(mc68kcpu); + uint32_t src = m68ki_read_8((mc68kcpu), ea); + uint32_t mask = 1 << (DX(mc68kcpu) & 7); + + (mc68kcpu)->not_z_flag = src & mask; + m68ki_write_8((mc68kcpu), ea, src | mask); +} + + +static void m68k_op_bset_8_r_al(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AL_8(mc68kcpu); + uint32_t src = m68ki_read_8((mc68kcpu), ea); + uint32_t mask = 1 << (DX(mc68kcpu) & 7); + + (mc68kcpu)->not_z_flag = src & mask; + m68ki_write_8((mc68kcpu), ea, src | mask); +} + + +static void m68k_op_bset_32_s_d(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &DY(mc68kcpu); + uint32_t mask = 1 << (OPER_I_8(mc68kcpu) & 0x1f); + + (mc68kcpu)->not_z_flag = *r_dst & mask; + *r_dst |= mask; +} + + +static void m68k_op_bset_8_s_ai(m68000_base_device* mc68kcpu) +{ + uint32_t mask = 1 << (OPER_I_8(mc68kcpu) & 7); + uint32_t ea = EA_AY_AI_8(mc68kcpu); + uint32_t src = m68ki_read_8((mc68kcpu), ea); + + (mc68kcpu)->not_z_flag = src & mask; + m68ki_write_8((mc68kcpu), ea, src | mask); +} + + +static void m68k_op_bset_8_s_pi(m68000_base_device* mc68kcpu) +{ + uint32_t mask = 1 << (OPER_I_8(mc68kcpu) & 7); + uint32_t ea = EA_AY_PI_8(mc68kcpu); + uint32_t src = m68ki_read_8((mc68kcpu), ea); + + (mc68kcpu)->not_z_flag = src & mask; + m68ki_write_8((mc68kcpu), ea, src | mask); +} + + +static void m68k_op_bset_8_s_pi7(m68000_base_device* mc68kcpu) +{ + uint32_t mask = 1 << (OPER_I_8(mc68kcpu) & 7); + uint32_t ea = EA_A7_PI_8(mc68kcpu); + uint32_t src = m68ki_read_8((mc68kcpu), ea); + + (mc68kcpu)->not_z_flag = src & mask; + m68ki_write_8((mc68kcpu), ea, src | mask); +} + + +static void m68k_op_bset_8_s_pd(m68000_base_device* mc68kcpu) +{ + uint32_t mask = 1 << (OPER_I_8(mc68kcpu) & 7); + uint32_t ea = EA_AY_PD_8(mc68kcpu); + uint32_t src = m68ki_read_8((mc68kcpu), ea); + + (mc68kcpu)->not_z_flag = src & mask; + m68ki_write_8((mc68kcpu), ea, src | mask); +} + + +static void m68k_op_bset_8_s_pd7(m68000_base_device* mc68kcpu) +{ + uint32_t mask = 1 << (OPER_I_8(mc68kcpu) & 7); + uint32_t ea = EA_A7_PD_8(mc68kcpu); + uint32_t src = m68ki_read_8((mc68kcpu), ea); + + (mc68kcpu)->not_z_flag = src & mask; + m68ki_write_8((mc68kcpu), ea, src | mask); +} + + +static void m68k_op_bset_8_s_di(m68000_base_device* mc68kcpu) +{ + uint32_t mask = 1 << (OPER_I_8(mc68kcpu) & 7); + uint32_t ea = EA_AY_DI_8(mc68kcpu); + uint32_t src = m68ki_read_8((mc68kcpu), ea); + + (mc68kcpu)->not_z_flag = src & mask; + m68ki_write_8((mc68kcpu), ea, src | mask); +} + + +static void m68k_op_bset_8_s_ix(m68000_base_device* mc68kcpu) +{ + uint32_t mask = 1 << (OPER_I_8(mc68kcpu) & 7); + uint32_t ea = EA_AY_IX_8(mc68kcpu); + uint32_t src = m68ki_read_8((mc68kcpu), ea); + + (mc68kcpu)->not_z_flag = src & mask; + m68ki_write_8((mc68kcpu), ea, src | mask); +} + + +static void m68k_op_bset_8_s_aw(m68000_base_device* mc68kcpu) +{ + uint32_t mask = 1 << (OPER_I_8(mc68kcpu) & 7); + uint32_t ea = EA_AW_8(mc68kcpu); + uint32_t src = m68ki_read_8((mc68kcpu), ea); + + (mc68kcpu)->not_z_flag = src & mask; + m68ki_write_8((mc68kcpu), ea, src | mask); +} + + +static void m68k_op_bset_8_s_al(m68000_base_device* mc68kcpu) +{ + uint32_t mask = 1 << (OPER_I_8(mc68kcpu) & 7); + uint32_t ea = EA_AL_8(mc68kcpu); + uint32_t src = m68ki_read_8((mc68kcpu), ea); + + (mc68kcpu)->not_z_flag = src & mask; + m68ki_write_8((mc68kcpu), ea, src | mask); +} + + +static void m68k_op_bsr_8(m68000_base_device* mc68kcpu) +{ + m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */ + m68ki_push_32((mc68kcpu), REG_PC(mc68kcpu)); + m68ki_branch_8((mc68kcpu), MASK_OUT_ABOVE_8((mc68kcpu)->ir)); +} + + +static void m68k_op_bsr_16(m68000_base_device* mc68kcpu) +{ + uint32_t offset = OPER_I_16(mc68kcpu); + m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */ + m68ki_push_32((mc68kcpu), REG_PC(mc68kcpu)); + REG_PC(mc68kcpu) -= 2; + m68ki_branch_16((mc68kcpu), offset); +} + + +static void m68k_op_bsr_32(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + uint32_t offset = OPER_I_32(mc68kcpu); + m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */ + m68ki_push_32((mc68kcpu), REG_PC(mc68kcpu)); + REG_PC(mc68kcpu) -= 4; + m68ki_branch_32((mc68kcpu), offset); + return; + } + else + { + m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */ + m68ki_push_32((mc68kcpu), REG_PC(mc68kcpu)); + m68ki_branch_8((mc68kcpu), MASK_OUT_ABOVE_8((mc68kcpu)->ir)); + } +} + + +static void m68k_op_btst_32_r_d(m68000_base_device* mc68kcpu) +{ + (mc68kcpu)->not_z_flag = DY(mc68kcpu) & (1 << (DX(mc68kcpu) & 0x1f)); +} + + +static void m68k_op_btst_8_r_ai(m68000_base_device* mc68kcpu) +{ + (mc68kcpu)->not_z_flag = OPER_AY_AI_8(mc68kcpu) & (1 << (DX(mc68kcpu) & 7)); +} + + +static void m68k_op_btst_8_r_pi(m68000_base_device* mc68kcpu) +{ + (mc68kcpu)->not_z_flag = OPER_AY_PI_8(mc68kcpu) & (1 << (DX(mc68kcpu) & 7)); +} + + +static void m68k_op_btst_8_r_pi7(m68000_base_device* mc68kcpu) +{ + (mc68kcpu)->not_z_flag = OPER_A7_PI_8(mc68kcpu) & (1 << (DX(mc68kcpu) & 7)); +} + + +static void m68k_op_btst_8_r_pd(m68000_base_device* mc68kcpu) +{ + (mc68kcpu)->not_z_flag = OPER_AY_PD_8(mc68kcpu) & (1 << (DX(mc68kcpu) & 7)); +} + + +static void m68k_op_btst_8_r_pd7(m68000_base_device* mc68kcpu) +{ + (mc68kcpu)->not_z_flag = OPER_A7_PD_8(mc68kcpu) & (1 << (DX(mc68kcpu) & 7)); +} + + +static void m68k_op_btst_8_r_di(m68000_base_device* mc68kcpu) +{ + (mc68kcpu)->not_z_flag = OPER_AY_DI_8(mc68kcpu) & (1 << (DX(mc68kcpu) & 7)); +} + + +static void m68k_op_btst_8_r_ix(m68000_base_device* mc68kcpu) +{ + (mc68kcpu)->not_z_flag = OPER_AY_IX_8(mc68kcpu) & (1 << (DX(mc68kcpu) & 7)); +} + + +static void m68k_op_btst_8_r_aw(m68000_base_device* mc68kcpu) +{ + (mc68kcpu)->not_z_flag = OPER_AW_8(mc68kcpu) & (1 << (DX(mc68kcpu) & 7)); +} + + +static void m68k_op_btst_8_r_al(m68000_base_device* mc68kcpu) +{ + (mc68kcpu)->not_z_flag = OPER_AL_8(mc68kcpu) & (1 << (DX(mc68kcpu) & 7)); +} + + +static void m68k_op_btst_8_r_pcdi(m68000_base_device* mc68kcpu) +{ + (mc68kcpu)->not_z_flag = OPER_PCDI_8(mc68kcpu) & (1 << (DX(mc68kcpu) & 7)); +} + + +static void m68k_op_btst_8_r_pcix(m68000_base_device* mc68kcpu) +{ + (mc68kcpu)->not_z_flag = OPER_PCIX_8(mc68kcpu) & (1 << (DX(mc68kcpu) & 7)); +} + + +static void m68k_op_btst_8_r_i(m68000_base_device* mc68kcpu) +{ + (mc68kcpu)->not_z_flag = OPER_I_8(mc68kcpu) & (1 << (DX(mc68kcpu) & 7)); +} + + +static void m68k_op_btst_32_s_d(m68000_base_device* mc68kcpu) +{ + (mc68kcpu)->not_z_flag = DY(mc68kcpu) & (1 << (OPER_I_8(mc68kcpu) & 0x1f)); +} + + +static void m68k_op_btst_8_s_ai(m68000_base_device* mc68kcpu) +{ + uint32_t bit = OPER_I_8(mc68kcpu) & 7; + + (mc68kcpu)->not_z_flag = OPER_AY_AI_8(mc68kcpu) & (1 << bit); +} + + +static void m68k_op_btst_8_s_pi(m68000_base_device* mc68kcpu) +{ + uint32_t bit = OPER_I_8(mc68kcpu) & 7; + + (mc68kcpu)->not_z_flag = OPER_AY_PI_8(mc68kcpu) & (1 << bit); +} + + +static void m68k_op_btst_8_s_pi7(m68000_base_device* mc68kcpu) +{ + uint32_t bit = OPER_I_8(mc68kcpu) & 7; + + (mc68kcpu)->not_z_flag = OPER_A7_PI_8(mc68kcpu) & (1 << bit); +} + + +static void m68k_op_btst_8_s_pd(m68000_base_device* mc68kcpu) +{ + uint32_t bit = OPER_I_8(mc68kcpu) & 7; + + (mc68kcpu)->not_z_flag = OPER_AY_PD_8(mc68kcpu) & (1 << bit); +} + + +static void m68k_op_btst_8_s_pd7(m68000_base_device* mc68kcpu) +{ + uint32_t bit = OPER_I_8(mc68kcpu) & 7; + + (mc68kcpu)->not_z_flag = OPER_A7_PD_8(mc68kcpu) & (1 << bit); +} + + +static void m68k_op_btst_8_s_di(m68000_base_device* mc68kcpu) +{ + uint32_t bit = OPER_I_8(mc68kcpu) & 7; + + (mc68kcpu)->not_z_flag = OPER_AY_DI_8(mc68kcpu) & (1 << bit); +} + + +static void m68k_op_btst_8_s_ix(m68000_base_device* mc68kcpu) +{ + uint32_t bit = OPER_I_8(mc68kcpu) & 7; + + (mc68kcpu)->not_z_flag = OPER_AY_IX_8(mc68kcpu) & (1 << bit); +} + + +static void m68k_op_btst_8_s_aw(m68000_base_device* mc68kcpu) +{ + uint32_t bit = OPER_I_8(mc68kcpu) & 7; + + (mc68kcpu)->not_z_flag = OPER_AW_8(mc68kcpu) & (1 << bit); +} + + +static void m68k_op_btst_8_s_al(m68000_base_device* mc68kcpu) +{ + uint32_t bit = OPER_I_8(mc68kcpu) & 7; + + (mc68kcpu)->not_z_flag = OPER_AL_8(mc68kcpu) & (1 << bit); +} + + +static void m68k_op_btst_8_s_pcdi(m68000_base_device* mc68kcpu) +{ + uint32_t bit = OPER_I_8(mc68kcpu) & 7; + + (mc68kcpu)->not_z_flag = OPER_PCDI_8(mc68kcpu) & (1 << bit); +} + + +static void m68k_op_btst_8_s_pcix(m68000_base_device* mc68kcpu) +{ + uint32_t bit = OPER_I_8(mc68kcpu) & 7; + + (mc68kcpu)->not_z_flag = OPER_PCIX_8(mc68kcpu) & (1 << bit); +} + + +static void m68k_op_callm_32_ai(m68000_base_device* mc68kcpu) +{ + /* note: watch out for pcrelative modes */ + /*if(CPU_TYPE_IS_020_VARIANT((mc68kcpu)->cpu_type)) + { + uint32_t ea = EA_AY_AI_32(mc68kcpu); + + m68ki_trace_t0(mc68kcpu); + REG_PC(mc68kcpu) += 2; +(void)ea; + mc68kcpu->logerror("%s at %08x: called unimplemented instruction %04x (callm)\n", + (mc68kcpu)->tag(), REG_PC(mc68kcpu) - 2, (mc68kcpu)->ir); + return; + }*/ + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_callm_32_di(m68000_base_device* mc68kcpu) +{ + /* note: watch out for pcrelative modes */ + /*if(CPU_TYPE_IS_020_VARIANT((mc68kcpu)->cpu_type)) + { + uint32_t ea = EA_AY_DI_32(mc68kcpu); + + m68ki_trace_t0(mc68kcpu); + REG_PC(mc68kcpu) += 2; +(void)ea; + mc68kcpu->logerror("%s at %08x: called unimplemented instruction %04x (callm)\n", + (mc68kcpu)->tag(), REG_PC(mc68kcpu) - 2, (mc68kcpu)->ir); + return; + }*/ + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_callm_32_ix(m68000_base_device* mc68kcpu) +{ + /* note: watch out for pcrelative modes */ + /*if(CPU_TYPE_IS_020_VARIANT((mc68kcpu)->cpu_type)) + { + uint32_t ea = EA_AY_IX_32(mc68kcpu); + + m68ki_trace_t0(mc68kcpu); + REG_PC(mc68kcpu) += 2; +(void)ea; + mc68kcpu->logerror("%s at %08x: called unimplemented instruction %04x (callm)\n", + (mc68kcpu)->tag(), REG_PC(mc68kcpu) - 2, (mc68kcpu)->ir); + return; + }*/ + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_callm_32_aw(m68000_base_device* mc68kcpu) +{ + /* note: watch out for pcrelative modes */ + /*if(CPU_TYPE_IS_020_VARIANT((mc68kcpu)->cpu_type)) + { + uint32_t ea = EA_AW_32(mc68kcpu); + + m68ki_trace_t0(mc68kcpu); + REG_PC(mc68kcpu) += 2; +(void)ea; + mc68kcpu->logerror("%s at %08x: called unimplemented instruction %04x (callm)\n", + (mc68kcpu)->tag(), REG_PC(mc68kcpu) - 2, (mc68kcpu)->ir); + return; + }*/ + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_callm_32_al(m68000_base_device* mc68kcpu) +{ + /* note: watch out for pcrelative modes */ + /*if(CPU_TYPE_IS_020_VARIANT((mc68kcpu)->cpu_type)) + { + uint32_t ea = EA_AL_32(mc68kcpu); + + m68ki_trace_t0(mc68kcpu); + REG_PC(mc68kcpu) += 2; +(void)ea; + mc68kcpu->logerror("%s at %08x: called unimplemented instruction %04x (callm)\n", + (mc68kcpu)->tag(), REG_PC(mc68kcpu) - 2, (mc68kcpu)->ir); + return; + }*/ + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_callm_32_pcdi(m68000_base_device* mc68kcpu) +{ + /* note: watch out for pcrelative modes */ + /*if(CPU_TYPE_IS_020_VARIANT((mc68kcpu)->cpu_type)) + { + uint32_t ea = EA_PCDI_32(mc68kcpu); + + m68ki_trace_t0(mc68kcpu); + REG_PC(mc68kcpu) += 2; +(void)ea; + mc68kcpu->logerror("%s at %08x: called unimplemented instruction %04x (callm)\n", + (mc68kcpu)->tag(), REG_PC(mc68kcpu) - 2, (mc68kcpu)->ir); + return; + }*/ + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_callm_32_pcix(m68000_base_device* mc68kcpu) +{ + /* note: watch out for pcrelative modes */ + /*if(CPU_TYPE_IS_020_VARIANT((mc68kcpu)->cpu_type)) + { + uint32_t ea = EA_PCIX_32(mc68kcpu); + + m68ki_trace_t0(mc68kcpu); + REG_PC(mc68kcpu) += 2; +(void)ea; + mc68kcpu->logerror("%s at %08x: called unimplemented instruction %04x (callm)\n", + (mc68kcpu)->tag(), REG_PC(mc68kcpu) - 2, (mc68kcpu)->ir); + return; + }*/ + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_cas_8_ai(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + uint32_t word2 = OPER_I_16(mc68kcpu); + uint32_t ea = EA_AY_AI_8(mc68kcpu); + uint32_t dest = m68ki_read_8((mc68kcpu), ea); + uint32_t* compare = ®_D(mc68kcpu)[word2 & 7]; + uint32_t res = dest - MASK_OUT_ABOVE_8(*compare); + + m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */ + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res); + (mc68kcpu)->v_flag = VFLAG_SUB_8(*compare, dest, res); + (mc68kcpu)->c_flag = CFLAG_8(res); + + if(COND_NE(mc68kcpu)) + *compare = MASK_OUT_BELOW_8(*compare) | dest; + else + { + (mc68kcpu)->c.current_cycle += 3; + m68ki_write_8((mc68kcpu), ea, MASK_OUT_ABOVE_8(REG_D(mc68kcpu)[(word2 >> 6) & 7])); + } + return; + } + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_cas_8_pi(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + uint32_t word2 = OPER_I_16(mc68kcpu); + uint32_t ea = EA_AY_PI_8(mc68kcpu); + uint32_t dest = m68ki_read_8((mc68kcpu), ea); + uint32_t* compare = ®_D(mc68kcpu)[word2 & 7]; + uint32_t res = dest - MASK_OUT_ABOVE_8(*compare); + + m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */ + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res); + (mc68kcpu)->v_flag = VFLAG_SUB_8(*compare, dest, res); + (mc68kcpu)->c_flag = CFLAG_8(res); + + if(COND_NE(mc68kcpu)) + *compare = MASK_OUT_BELOW_8(*compare) | dest; + else + { + (mc68kcpu)->c.current_cycle += 3; + m68ki_write_8((mc68kcpu), ea, MASK_OUT_ABOVE_8(REG_D(mc68kcpu)[(word2 >> 6) & 7])); + } + return; + } + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_cas_8_pi7(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + uint32_t word2 = OPER_I_16(mc68kcpu); + uint32_t ea = EA_A7_PI_8(mc68kcpu); + uint32_t dest = m68ki_read_8((mc68kcpu), ea); + uint32_t* compare = ®_D(mc68kcpu)[word2 & 7]; + uint32_t res = dest - MASK_OUT_ABOVE_8(*compare); + + m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */ + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res); + (mc68kcpu)->v_flag = VFLAG_SUB_8(*compare, dest, res); + (mc68kcpu)->c_flag = CFLAG_8(res); + + if(COND_NE(mc68kcpu)) + *compare = MASK_OUT_BELOW_8(*compare) | dest; + else + { + (mc68kcpu)->c.current_cycle += 3; + m68ki_write_8((mc68kcpu), ea, MASK_OUT_ABOVE_8(REG_D(mc68kcpu)[(word2 >> 6) & 7])); + } + return; + } + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_cas_8_pd(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + uint32_t word2 = OPER_I_16(mc68kcpu); + uint32_t ea = EA_AY_PD_8(mc68kcpu); + uint32_t dest = m68ki_read_8((mc68kcpu), ea); + uint32_t* compare = ®_D(mc68kcpu)[word2 & 7]; + uint32_t res = dest - MASK_OUT_ABOVE_8(*compare); + + m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */ + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res); + (mc68kcpu)->v_flag = VFLAG_SUB_8(*compare, dest, res); + (mc68kcpu)->c_flag = CFLAG_8(res); + + if(COND_NE(mc68kcpu)) + *compare = MASK_OUT_BELOW_8(*compare) | dest; + else + { + (mc68kcpu)->c.current_cycle += 3; + m68ki_write_8((mc68kcpu), ea, MASK_OUT_ABOVE_8(REG_D(mc68kcpu)[(word2 >> 6) & 7])); + } + return; + } + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_cas_8_pd7(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + uint32_t word2 = OPER_I_16(mc68kcpu); + uint32_t ea = EA_A7_PD_8(mc68kcpu); + uint32_t dest = m68ki_read_8((mc68kcpu), ea); + uint32_t* compare = ®_D(mc68kcpu)[word2 & 7]; + uint32_t res = dest - MASK_OUT_ABOVE_8(*compare); + + m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */ + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res); + (mc68kcpu)->v_flag = VFLAG_SUB_8(*compare, dest, res); + (mc68kcpu)->c_flag = CFLAG_8(res); + + if(COND_NE(mc68kcpu)) + *compare = MASK_OUT_BELOW_8(*compare) | dest; + else + { + (mc68kcpu)->c.current_cycle += 3; + m68ki_write_8((mc68kcpu), ea, MASK_OUT_ABOVE_8(REG_D(mc68kcpu)[(word2 >> 6) & 7])); + } + return; + } + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_cas_8_di(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + uint32_t word2 = OPER_I_16(mc68kcpu); + uint32_t ea = EA_AY_DI_8(mc68kcpu); + uint32_t dest = m68ki_read_8((mc68kcpu), ea); + uint32_t* compare = ®_D(mc68kcpu)[word2 & 7]; + uint32_t res = dest - MASK_OUT_ABOVE_8(*compare); + + m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */ + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res); + (mc68kcpu)->v_flag = VFLAG_SUB_8(*compare, dest, res); + (mc68kcpu)->c_flag = CFLAG_8(res); + + if(COND_NE(mc68kcpu)) + *compare = MASK_OUT_BELOW_8(*compare) | dest; + else + { + (mc68kcpu)->c.current_cycle += 3; + m68ki_write_8((mc68kcpu), ea, MASK_OUT_ABOVE_8(REG_D(mc68kcpu)[(word2 >> 6) & 7])); + } + return; + } + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_cas_8_ix(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + uint32_t word2 = OPER_I_16(mc68kcpu); + uint32_t ea = EA_AY_IX_8(mc68kcpu); + uint32_t dest = m68ki_read_8((mc68kcpu), ea); + uint32_t* compare = ®_D(mc68kcpu)[word2 & 7]; + uint32_t res = dest - MASK_OUT_ABOVE_8(*compare); + + m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */ + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res); + (mc68kcpu)->v_flag = VFLAG_SUB_8(*compare, dest, res); + (mc68kcpu)->c_flag = CFLAG_8(res); + + if(COND_NE(mc68kcpu)) + *compare = MASK_OUT_BELOW_8(*compare) | dest; + else + { + (mc68kcpu)->c.current_cycle += 3; + m68ki_write_8((mc68kcpu), ea, MASK_OUT_ABOVE_8(REG_D(mc68kcpu)[(word2 >> 6) & 7])); + } + return; + } + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_cas_8_aw(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + uint32_t word2 = OPER_I_16(mc68kcpu); + uint32_t ea = EA_AW_8(mc68kcpu); + uint32_t dest = m68ki_read_8((mc68kcpu), ea); + uint32_t* compare = ®_D(mc68kcpu)[word2 & 7]; + uint32_t res = dest - MASK_OUT_ABOVE_8(*compare); + + m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */ + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res); + (mc68kcpu)->v_flag = VFLAG_SUB_8(*compare, dest, res); + (mc68kcpu)->c_flag = CFLAG_8(res); + + if(COND_NE(mc68kcpu)) + *compare = MASK_OUT_BELOW_8(*compare) | dest; + else + { + (mc68kcpu)->c.current_cycle += 3; + m68ki_write_8((mc68kcpu), ea, MASK_OUT_ABOVE_8(REG_D(mc68kcpu)[(word2 >> 6) & 7])); + } + return; + } + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_cas_8_al(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + uint32_t word2 = OPER_I_16(mc68kcpu); + uint32_t ea = EA_AL_8(mc68kcpu); + uint32_t dest = m68ki_read_8((mc68kcpu), ea); + uint32_t* compare = ®_D(mc68kcpu)[word2 & 7]; + uint32_t res = dest - MASK_OUT_ABOVE_8(*compare); + + m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */ + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res); + (mc68kcpu)->v_flag = VFLAG_SUB_8(*compare, dest, res); + (mc68kcpu)->c_flag = CFLAG_8(res); + + if(COND_NE(mc68kcpu)) + *compare = MASK_OUT_BELOW_8(*compare) | dest; + else + { + (mc68kcpu)->c.current_cycle += 3; + m68ki_write_8((mc68kcpu), ea, MASK_OUT_ABOVE_8(REG_D(mc68kcpu)[(word2 >> 6) & 7])); + } + return; + } + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_cas_16_ai(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + uint32_t word2 = OPER_I_16(mc68kcpu); + uint32_t ea = EA_AY_AI_16(mc68kcpu); + uint32_t dest = m68ki_read_16((mc68kcpu), ea); + uint32_t* compare = ®_D(mc68kcpu)[word2 & 7]; + uint32_t res = dest - MASK_OUT_ABOVE_16(*compare); + + m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */ + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res); + (mc68kcpu)->v_flag = VFLAG_SUB_16(*compare, dest, res); + (mc68kcpu)->c_flag = CFLAG_16(res); + + if(COND_NE(mc68kcpu)) + *compare = MASK_OUT_BELOW_16(*compare) | dest; + else + { + (mc68kcpu)->c.current_cycle += 3; + m68ki_write_16((mc68kcpu), ea, MASK_OUT_ABOVE_16(REG_D(mc68kcpu)[(word2 >> 6) & 7])); + } + return; + } + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_cas_16_pi(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + uint32_t word2 = OPER_I_16(mc68kcpu); + uint32_t ea = EA_AY_PI_16(mc68kcpu); + uint32_t dest = m68ki_read_16((mc68kcpu), ea); + uint32_t* compare = ®_D(mc68kcpu)[word2 & 7]; + uint32_t res = dest - MASK_OUT_ABOVE_16(*compare); + + m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */ + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res); + (mc68kcpu)->v_flag = VFLAG_SUB_16(*compare, dest, res); + (mc68kcpu)->c_flag = CFLAG_16(res); + + if(COND_NE(mc68kcpu)) + *compare = MASK_OUT_BELOW_16(*compare) | dest; + else + { + (mc68kcpu)->c.current_cycle += 3; + m68ki_write_16((mc68kcpu), ea, MASK_OUT_ABOVE_16(REG_D(mc68kcpu)[(word2 >> 6) & 7])); + } + return; + } + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_cas_16_pd(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + uint32_t word2 = OPER_I_16(mc68kcpu); + uint32_t ea = EA_AY_PD_16(mc68kcpu); + uint32_t dest = m68ki_read_16((mc68kcpu), ea); + uint32_t* compare = ®_D(mc68kcpu)[word2 & 7]; + uint32_t res = dest - MASK_OUT_ABOVE_16(*compare); + + m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */ + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res); + (mc68kcpu)->v_flag = VFLAG_SUB_16(*compare, dest, res); + (mc68kcpu)->c_flag = CFLAG_16(res); + + if(COND_NE(mc68kcpu)) + *compare = MASK_OUT_BELOW_16(*compare) | dest; + else + { + (mc68kcpu)->c.current_cycle += 3; + m68ki_write_16((mc68kcpu), ea, MASK_OUT_ABOVE_16(REG_D(mc68kcpu)[(word2 >> 6) & 7])); + } + return; + } + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_cas_16_di(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + uint32_t word2 = OPER_I_16(mc68kcpu); + uint32_t ea = EA_AY_DI_16(mc68kcpu); + uint32_t dest = m68ki_read_16((mc68kcpu), ea); + uint32_t* compare = ®_D(mc68kcpu)[word2 & 7]; + uint32_t res = dest - MASK_OUT_ABOVE_16(*compare); + + m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */ + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res); + (mc68kcpu)->v_flag = VFLAG_SUB_16(*compare, dest, res); + (mc68kcpu)->c_flag = CFLAG_16(res); + + if(COND_NE(mc68kcpu)) + *compare = MASK_OUT_BELOW_16(*compare) | dest; + else + { + (mc68kcpu)->c.current_cycle += 3; + m68ki_write_16((mc68kcpu), ea, MASK_OUT_ABOVE_16(REG_D(mc68kcpu)[(word2 >> 6) & 7])); + } + return; + } + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_cas_16_ix(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + uint32_t word2 = OPER_I_16(mc68kcpu); + uint32_t ea = EA_AY_IX_16(mc68kcpu); + uint32_t dest = m68ki_read_16((mc68kcpu), ea); + uint32_t* compare = ®_D(mc68kcpu)[word2 & 7]; + uint32_t res = dest - MASK_OUT_ABOVE_16(*compare); + + m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */ + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res); + (mc68kcpu)->v_flag = VFLAG_SUB_16(*compare, dest, res); + (mc68kcpu)->c_flag = CFLAG_16(res); + + if(COND_NE(mc68kcpu)) + *compare = MASK_OUT_BELOW_16(*compare) | dest; + else + { + (mc68kcpu)->c.current_cycle += 3; + m68ki_write_16((mc68kcpu), ea, MASK_OUT_ABOVE_16(REG_D(mc68kcpu)[(word2 >> 6) & 7])); + } + return; + } + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_cas_16_aw(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + uint32_t word2 = OPER_I_16(mc68kcpu); + uint32_t ea = EA_AW_16(mc68kcpu); + uint32_t dest = m68ki_read_16((mc68kcpu), ea); + uint32_t* compare = ®_D(mc68kcpu)[word2 & 7]; + uint32_t res = dest - MASK_OUT_ABOVE_16(*compare); + + m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */ + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res); + (mc68kcpu)->v_flag = VFLAG_SUB_16(*compare, dest, res); + (mc68kcpu)->c_flag = CFLAG_16(res); + + if(COND_NE(mc68kcpu)) + *compare = MASK_OUT_BELOW_16(*compare) | dest; + else + { + (mc68kcpu)->c.current_cycle += 3; + m68ki_write_16((mc68kcpu), ea, MASK_OUT_ABOVE_16(REG_D(mc68kcpu)[(word2 >> 6) & 7])); + } + return; + } + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_cas_16_al(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + uint32_t word2 = OPER_I_16(mc68kcpu); + uint32_t ea = EA_AL_16(mc68kcpu); + uint32_t dest = m68ki_read_16((mc68kcpu), ea); + uint32_t* compare = ®_D(mc68kcpu)[word2 & 7]; + uint32_t res = dest - MASK_OUT_ABOVE_16(*compare); + + m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */ + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res); + (mc68kcpu)->v_flag = VFLAG_SUB_16(*compare, dest, res); + (mc68kcpu)->c_flag = CFLAG_16(res); + + if(COND_NE(mc68kcpu)) + *compare = MASK_OUT_BELOW_16(*compare) | dest; + else + { + (mc68kcpu)->c.current_cycle += 3; + m68ki_write_16((mc68kcpu), ea, MASK_OUT_ABOVE_16(REG_D(mc68kcpu)[(word2 >> 6) & 7])); + } + return; + } + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_cas_32_ai(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + uint32_t word2 = OPER_I_16(mc68kcpu); + uint32_t ea = EA_AY_AI_32(mc68kcpu); + uint32_t dest = m68ki_read_32((mc68kcpu), ea); + uint32_t* compare = ®_D(mc68kcpu)[word2 & 7]; + uint32_t res = dest - *compare; + + m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */ + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res); + (mc68kcpu)->v_flag = VFLAG_SUB_32(*compare, dest, res); + (mc68kcpu)->c_flag = CFLAG_SUB_32(*compare, dest, res); + + if(COND_NE(mc68kcpu)) + *compare = dest; + else + { + (mc68kcpu)->c.current_cycle += 3; + m68ki_write_32((mc68kcpu), ea, REG_D(mc68kcpu)[(word2 >> 6) & 7]); + } + return; + } + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_cas_32_pi(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + uint32_t word2 = OPER_I_16(mc68kcpu); + uint32_t ea = EA_AY_PI_32(mc68kcpu); + uint32_t dest = m68ki_read_32((mc68kcpu), ea); + uint32_t* compare = ®_D(mc68kcpu)[word2 & 7]; + uint32_t res = dest - *compare; + + m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */ + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res); + (mc68kcpu)->v_flag = VFLAG_SUB_32(*compare, dest, res); + (mc68kcpu)->c_flag = CFLAG_SUB_32(*compare, dest, res); + + if(COND_NE(mc68kcpu)) + *compare = dest; + else + { + (mc68kcpu)->c.current_cycle += 3; + m68ki_write_32((mc68kcpu), ea, REG_D(mc68kcpu)[(word2 >> 6) & 7]); + } + return; + } + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_cas_32_pd(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + uint32_t word2 = OPER_I_16(mc68kcpu); + uint32_t ea = EA_AY_PD_32(mc68kcpu); + uint32_t dest = m68ki_read_32((mc68kcpu), ea); + uint32_t* compare = ®_D(mc68kcpu)[word2 & 7]; + uint32_t res = dest - *compare; + + m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */ + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res); + (mc68kcpu)->v_flag = VFLAG_SUB_32(*compare, dest, res); + (mc68kcpu)->c_flag = CFLAG_SUB_32(*compare, dest, res); + + if(COND_NE(mc68kcpu)) + *compare = dest; + else + { + (mc68kcpu)->c.current_cycle += 3; + m68ki_write_32((mc68kcpu), ea, REG_D(mc68kcpu)[(word2 >> 6) & 7]); + } + return; + } + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_cas_32_di(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + uint32_t word2 = OPER_I_16(mc68kcpu); + uint32_t ea = EA_AY_DI_32(mc68kcpu); + uint32_t dest = m68ki_read_32((mc68kcpu), ea); + uint32_t* compare = ®_D(mc68kcpu)[word2 & 7]; + uint32_t res = dest - *compare; + + m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */ + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res); + (mc68kcpu)->v_flag = VFLAG_SUB_32(*compare, dest, res); + (mc68kcpu)->c_flag = CFLAG_SUB_32(*compare, dest, res); + + if(COND_NE(mc68kcpu)) + *compare = dest; + else + { + (mc68kcpu)->c.current_cycle += 3; + m68ki_write_32((mc68kcpu), ea, REG_D(mc68kcpu)[(word2 >> 6) & 7]); + } + return; + } + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_cas_32_ix(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + uint32_t word2 = OPER_I_16(mc68kcpu); + uint32_t ea = EA_AY_IX_32(mc68kcpu); + uint32_t dest = m68ki_read_32((mc68kcpu), ea); + uint32_t* compare = ®_D(mc68kcpu)[word2 & 7]; + uint32_t res = dest - *compare; + + m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */ + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res); + (mc68kcpu)->v_flag = VFLAG_SUB_32(*compare, dest, res); + (mc68kcpu)->c_flag = CFLAG_SUB_32(*compare, dest, res); + + if(COND_NE(mc68kcpu)) + *compare = dest; + else + { + (mc68kcpu)->c.current_cycle += 3; + m68ki_write_32((mc68kcpu), ea, REG_D(mc68kcpu)[(word2 >> 6) & 7]); + } + return; + } + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_cas_32_aw(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + uint32_t word2 = OPER_I_16(mc68kcpu); + uint32_t ea = EA_AW_32(mc68kcpu); + uint32_t dest = m68ki_read_32((mc68kcpu), ea); + uint32_t* compare = ®_D(mc68kcpu)[word2 & 7]; + uint32_t res = dest - *compare; + + m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */ + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res); + (mc68kcpu)->v_flag = VFLAG_SUB_32(*compare, dest, res); + (mc68kcpu)->c_flag = CFLAG_SUB_32(*compare, dest, res); + + if(COND_NE(mc68kcpu)) + *compare = dest; + else + { + (mc68kcpu)->c.current_cycle += 3; + m68ki_write_32((mc68kcpu), ea, REG_D(mc68kcpu)[(word2 >> 6) & 7]); + } + return; + } + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_cas_32_al(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + uint32_t word2 = OPER_I_16(mc68kcpu); + uint32_t ea = EA_AL_32(mc68kcpu); + uint32_t dest = m68ki_read_32((mc68kcpu), ea); + uint32_t* compare = ®_D(mc68kcpu)[word2 & 7]; + uint32_t res = dest - *compare; + + m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */ + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res); + (mc68kcpu)->v_flag = VFLAG_SUB_32(*compare, dest, res); + (mc68kcpu)->c_flag = CFLAG_SUB_32(*compare, dest, res); + + if(COND_NE(mc68kcpu)) + *compare = dest; + else + { + (mc68kcpu)->c.current_cycle += 3; + m68ki_write_32((mc68kcpu), ea, REG_D(mc68kcpu)[(word2 >> 6) & 7]); + } + return; + } + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_cas2_16(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + uint32_t word2 = OPER_I_32(mc68kcpu); + uint32_t* compare1 = ®_D(mc68kcpu)[(word2 >> 16) & 7]; + uint32_t ea1 = REG_DA(mc68kcpu)[(word2 >> 28) & 15]; + uint32_t dest1 = m68ki_read_16((mc68kcpu), ea1); + uint32_t res1 = dest1 - MASK_OUT_ABOVE_16(*compare1); + uint32_t* compare2 = ®_D(mc68kcpu)[word2 & 7]; + uint32_t ea2 = REG_DA(mc68kcpu)[(word2 >> 12) & 15]; + uint32_t dest2 = m68ki_read_16((mc68kcpu), ea2); + uint32_t res2; + + m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */ + (mc68kcpu)->n_flag = NFLAG_16(res1); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res1); + (mc68kcpu)->v_flag = VFLAG_SUB_16(*compare1, dest1, res1); + (mc68kcpu)->c_flag = CFLAG_16(res1); + + if(COND_EQ(mc68kcpu)) + { + res2 = dest2 - MASK_OUT_ABOVE_16(*compare2); + + (mc68kcpu)->n_flag = NFLAG_16(res2); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res2); + (mc68kcpu)->v_flag = VFLAG_SUB_16(*compare2, dest2, res2); + (mc68kcpu)->c_flag = CFLAG_16(res2); + + if(COND_EQ(mc68kcpu)) + { + (mc68kcpu)->c.current_cycle += 3; + m68ki_write_16((mc68kcpu), ea1, REG_D(mc68kcpu)[(word2 >> 22) & 7]); + m68ki_write_16((mc68kcpu), ea2, REG_D(mc68kcpu)[(word2 >> 6) & 7]); + return; + } + } + *compare1 = BIT_1F(word2) ? MAKE_INT_16(dest1) : MASK_OUT_BELOW_16(*compare1) | dest1; + *compare2 = BIT_F(word2) ? MAKE_INT_16(dest2) : MASK_OUT_BELOW_16(*compare2) | dest2; + return; + } + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_cas2_32(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + uint32_t word2 = OPER_I_32(mc68kcpu); + uint32_t* compare1 = ®_D(mc68kcpu)[(word2 >> 16) & 7]; + uint32_t ea1 = REG_DA(mc68kcpu)[(word2 >> 28) & 15]; + uint32_t dest1 = m68ki_read_32((mc68kcpu), ea1); + uint32_t res1 = dest1 - *compare1; + uint32_t* compare2 = ®_D(mc68kcpu)[word2 & 7]; + uint32_t ea2 = REG_DA(mc68kcpu)[(word2 >> 12) & 15]; + uint32_t dest2 = m68ki_read_32((mc68kcpu), ea2); + uint32_t res2; + + m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */ + (mc68kcpu)->n_flag = NFLAG_32(res1); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res1); + (mc68kcpu)->v_flag = VFLAG_SUB_32(*compare1, dest1, res1); + (mc68kcpu)->c_flag = CFLAG_SUB_32(*compare1, dest1, res1); + + if(COND_EQ(mc68kcpu)) + { + res2 = dest2 - *compare2; + + (mc68kcpu)->n_flag = NFLAG_32(res2); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res2); + (mc68kcpu)->v_flag = VFLAG_SUB_32(*compare2, dest2, res2); + (mc68kcpu)->c_flag = CFLAG_SUB_32(*compare2, dest2, res2); + + if(COND_EQ(mc68kcpu)) + { + (mc68kcpu)->c.current_cycle += 3; + m68ki_write_32((mc68kcpu), ea1, REG_D(mc68kcpu)[(word2 >> 22) & 7]); + m68ki_write_32((mc68kcpu), ea2, REG_D(mc68kcpu)[(word2 >> 6) & 7]); + return; + } + } + *compare1 = dest1; + *compare2 = dest2; + return; + } + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_chk_16_d(m68000_base_device* mc68kcpu) +{ + int32_t src = MAKE_INT_16(DX(mc68kcpu)); + int32_t bound = MAKE_INT_16(DY(mc68kcpu)); + + (mc68kcpu)->not_z_flag = ZFLAG_16(src); /* Undocumented */ + (mc68kcpu)->v_flag = VFLAG_CLEAR; /* Undocumented */ + (mc68kcpu)->c_flag = CFLAG_CLEAR; /* Undocumented */ + + if(src >= 0 && src <= bound) + { + return; + } + (mc68kcpu)->n_flag = (src < 0)<<7; + m68ki_exception_trap((mc68kcpu), EXCEPTION_CHK); +} + + +static void m68k_op_chk_16_ai(m68000_base_device* mc68kcpu) +{ + int32_t src = MAKE_INT_16(DX(mc68kcpu)); + int32_t bound = MAKE_INT_16(OPER_AY_AI_16(mc68kcpu)); + + (mc68kcpu)->not_z_flag = ZFLAG_16(src); /* Undocumented */ + (mc68kcpu)->v_flag = VFLAG_CLEAR; /* Undocumented */ + (mc68kcpu)->c_flag = CFLAG_CLEAR; /* Undocumented */ + + if(src >= 0 && src <= bound) + { + return; + } + (mc68kcpu)->n_flag = (src < 0)<<7; + m68ki_exception_trap((mc68kcpu), EXCEPTION_CHK); +} + + +static void m68k_op_chk_16_pi(m68000_base_device* mc68kcpu) +{ + int32_t src = MAKE_INT_16(DX(mc68kcpu)); + int32_t bound = MAKE_INT_16(OPER_AY_PI_16(mc68kcpu)); + + (mc68kcpu)->not_z_flag = ZFLAG_16(src); /* Undocumented */ + (mc68kcpu)->v_flag = VFLAG_CLEAR; /* Undocumented */ + (mc68kcpu)->c_flag = CFLAG_CLEAR; /* Undocumented */ + + if(src >= 0 && src <= bound) + { + return; + } + (mc68kcpu)->n_flag = (src < 0)<<7; + m68ki_exception_trap((mc68kcpu), EXCEPTION_CHK); +} + + +static void m68k_op_chk_16_pd(m68000_base_device* mc68kcpu) +{ + int32_t src = MAKE_INT_16(DX(mc68kcpu)); + int32_t bound = MAKE_INT_16(OPER_AY_PD_16(mc68kcpu)); + + (mc68kcpu)->not_z_flag = ZFLAG_16(src); /* Undocumented */ + (mc68kcpu)->v_flag = VFLAG_CLEAR; /* Undocumented */ + (mc68kcpu)->c_flag = CFLAG_CLEAR; /* Undocumented */ + + if(src >= 0 && src <= bound) + { + return; + } + (mc68kcpu)->n_flag = (src < 0)<<7; + m68ki_exception_trap((mc68kcpu), EXCEPTION_CHK); +} + + +static void m68k_op_chk_16_di(m68000_base_device* mc68kcpu) +{ + int32_t src = MAKE_INT_16(DX(mc68kcpu)); + int32_t bound = MAKE_INT_16(OPER_AY_DI_16(mc68kcpu)); + + (mc68kcpu)->not_z_flag = ZFLAG_16(src); /* Undocumented */ + (mc68kcpu)->v_flag = VFLAG_CLEAR; /* Undocumented */ + (mc68kcpu)->c_flag = CFLAG_CLEAR; /* Undocumented */ + + if(src >= 0 && src <= bound) + { + return; + } + (mc68kcpu)->n_flag = (src < 0)<<7; + m68ki_exception_trap((mc68kcpu), EXCEPTION_CHK); +} + + +static void m68k_op_chk_16_ix(m68000_base_device* mc68kcpu) +{ + int32_t src = MAKE_INT_16(DX(mc68kcpu)); + int32_t bound = MAKE_INT_16(OPER_AY_IX_16(mc68kcpu)); + + (mc68kcpu)->not_z_flag = ZFLAG_16(src); /* Undocumented */ + (mc68kcpu)->v_flag = VFLAG_CLEAR; /* Undocumented */ + (mc68kcpu)->c_flag = CFLAG_CLEAR; /* Undocumented */ + + if(src >= 0 && src <= bound) + { + return; + } + (mc68kcpu)->n_flag = (src < 0)<<7; + m68ki_exception_trap((mc68kcpu), EXCEPTION_CHK); +} + + +static void m68k_op_chk_16_aw(m68000_base_device* mc68kcpu) +{ + int32_t src = MAKE_INT_16(DX(mc68kcpu)); + int32_t bound = MAKE_INT_16(OPER_AW_16(mc68kcpu)); + + (mc68kcpu)->not_z_flag = ZFLAG_16(src); /* Undocumented */ + (mc68kcpu)->v_flag = VFLAG_CLEAR; /* Undocumented */ + (mc68kcpu)->c_flag = CFLAG_CLEAR; /* Undocumented */ + + if(src >= 0 && src <= bound) + { + return; + } + (mc68kcpu)->n_flag = (src < 0)<<7; + m68ki_exception_trap((mc68kcpu), EXCEPTION_CHK); +} + + +static void m68k_op_chk_16_al(m68000_base_device* mc68kcpu) +{ + int32_t src = MAKE_INT_16(DX(mc68kcpu)); + int32_t bound = MAKE_INT_16(OPER_AL_16(mc68kcpu)); + + (mc68kcpu)->not_z_flag = ZFLAG_16(src); /* Undocumented */ + (mc68kcpu)->v_flag = VFLAG_CLEAR; /* Undocumented */ + (mc68kcpu)->c_flag = CFLAG_CLEAR; /* Undocumented */ + + if(src >= 0 && src <= bound) + { + return; + } + (mc68kcpu)->n_flag = (src < 0)<<7; + m68ki_exception_trap((mc68kcpu), EXCEPTION_CHK); +} + + +static void m68k_op_chk_16_pcdi(m68000_base_device* mc68kcpu) +{ + int32_t src = MAKE_INT_16(DX(mc68kcpu)); + int32_t bound = MAKE_INT_16(OPER_PCDI_16(mc68kcpu)); + + (mc68kcpu)->not_z_flag = ZFLAG_16(src); /* Undocumented */ + (mc68kcpu)->v_flag = VFLAG_CLEAR; /* Undocumented */ + (mc68kcpu)->c_flag = CFLAG_CLEAR; /* Undocumented */ + + if(src >= 0 && src <= bound) + { + return; + } + (mc68kcpu)->n_flag = (src < 0)<<7; + m68ki_exception_trap((mc68kcpu), EXCEPTION_CHK); +} + + +static void m68k_op_chk_16_pcix(m68000_base_device* mc68kcpu) +{ + int32_t src = MAKE_INT_16(DX(mc68kcpu)); + int32_t bound = MAKE_INT_16(OPER_PCIX_16(mc68kcpu)); + + (mc68kcpu)->not_z_flag = ZFLAG_16(src); /* Undocumented */ + (mc68kcpu)->v_flag = VFLAG_CLEAR; /* Undocumented */ + (mc68kcpu)->c_flag = CFLAG_CLEAR; /* Undocumented */ + + if(src >= 0 && src <= bound) + { + return; + } + (mc68kcpu)->n_flag = (src < 0)<<7; + m68ki_exception_trap((mc68kcpu), EXCEPTION_CHK); +} + + +static void m68k_op_chk_16_i(m68000_base_device* mc68kcpu) +{ + int32_t src = MAKE_INT_16(DX(mc68kcpu)); + int32_t bound = MAKE_INT_16(OPER_I_16(mc68kcpu)); + + (mc68kcpu)->not_z_flag = ZFLAG_16(src); /* Undocumented */ + (mc68kcpu)->v_flag = VFLAG_CLEAR; /* Undocumented */ + (mc68kcpu)->c_flag = CFLAG_CLEAR; /* Undocumented */ + + if(src >= 0 && src <= bound) + { + return; + } + (mc68kcpu)->n_flag = (src < 0)<<7; + m68ki_exception_trap((mc68kcpu), EXCEPTION_CHK); +} + + +static void m68k_op_chk_32_d(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + int32_t src = MAKE_INT_32(DX(mc68kcpu)); + int32_t bound = MAKE_INT_32(DY(mc68kcpu)); + + (mc68kcpu)->not_z_flag = ZFLAG_32(src); /* Undocumented */ + (mc68kcpu)->v_flag = VFLAG_CLEAR; /* Undocumented */ + (mc68kcpu)->c_flag = CFLAG_CLEAR; /* Undocumented */ + + if(src >= 0 && src <= bound) + { + return; + } + (mc68kcpu)->n_flag = (src < 0)<<7; + m68ki_exception_trap((mc68kcpu), EXCEPTION_CHK); + return; + } + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_chk_32_ai(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + int32_t src = MAKE_INT_32(DX(mc68kcpu)); + int32_t bound = MAKE_INT_32(OPER_AY_AI_32(mc68kcpu)); + + (mc68kcpu)->not_z_flag = ZFLAG_32(src); /* Undocumented */ + (mc68kcpu)->v_flag = VFLAG_CLEAR; /* Undocumented */ + (mc68kcpu)->c_flag = CFLAG_CLEAR; /* Undocumented */ + + if(src >= 0 && src <= bound) + { + return; + } + (mc68kcpu)->n_flag = (src < 0)<<7; + m68ki_exception_trap((mc68kcpu), EXCEPTION_CHK); + return; + } + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_chk_32_pi(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + int32_t src = MAKE_INT_32(DX(mc68kcpu)); + int32_t bound = MAKE_INT_32(OPER_AY_PI_32(mc68kcpu)); + + (mc68kcpu)->not_z_flag = ZFLAG_32(src); /* Undocumented */ + (mc68kcpu)->v_flag = VFLAG_CLEAR; /* Undocumented */ + (mc68kcpu)->c_flag = CFLAG_CLEAR; /* Undocumented */ + + if(src >= 0 && src <= bound) + { + return; + } + (mc68kcpu)->n_flag = (src < 0)<<7; + m68ki_exception_trap((mc68kcpu), EXCEPTION_CHK); + return; + } + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_chk_32_pd(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + int32_t src = MAKE_INT_32(DX(mc68kcpu)); + int32_t bound = MAKE_INT_32(OPER_AY_PD_32(mc68kcpu)); + + (mc68kcpu)->not_z_flag = ZFLAG_32(src); /* Undocumented */ + (mc68kcpu)->v_flag = VFLAG_CLEAR; /* Undocumented */ + (mc68kcpu)->c_flag = CFLAG_CLEAR; /* Undocumented */ + + if(src >= 0 && src <= bound) + { + return; + } + (mc68kcpu)->n_flag = (src < 0)<<7; + m68ki_exception_trap((mc68kcpu), EXCEPTION_CHK); + return; + } + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_chk_32_di(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + int32_t src = MAKE_INT_32(DX(mc68kcpu)); + int32_t bound = MAKE_INT_32(OPER_AY_DI_32(mc68kcpu)); + + (mc68kcpu)->not_z_flag = ZFLAG_32(src); /* Undocumented */ + (mc68kcpu)->v_flag = VFLAG_CLEAR; /* Undocumented */ + (mc68kcpu)->c_flag = CFLAG_CLEAR; /* Undocumented */ + + if(src >= 0 && src <= bound) + { + return; + } + (mc68kcpu)->n_flag = (src < 0)<<7; + m68ki_exception_trap((mc68kcpu), EXCEPTION_CHK); + return; + } + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_chk_32_ix(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + int32_t src = MAKE_INT_32(DX(mc68kcpu)); + int32_t bound = MAKE_INT_32(OPER_AY_IX_32(mc68kcpu)); + + (mc68kcpu)->not_z_flag = ZFLAG_32(src); /* Undocumented */ + (mc68kcpu)->v_flag = VFLAG_CLEAR; /* Undocumented */ + (mc68kcpu)->c_flag = CFLAG_CLEAR; /* Undocumented */ + + if(src >= 0 && src <= bound) + { + return; + } + (mc68kcpu)->n_flag = (src < 0)<<7; + m68ki_exception_trap((mc68kcpu), EXCEPTION_CHK); + return; + } + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_chk_32_aw(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + int32_t src = MAKE_INT_32(DX(mc68kcpu)); + int32_t bound = MAKE_INT_32(OPER_AW_32(mc68kcpu)); + + (mc68kcpu)->not_z_flag = ZFLAG_32(src); /* Undocumented */ + (mc68kcpu)->v_flag = VFLAG_CLEAR; /* Undocumented */ + (mc68kcpu)->c_flag = CFLAG_CLEAR; /* Undocumented */ + + if(src >= 0 && src <= bound) + { + return; + } + (mc68kcpu)->n_flag = (src < 0)<<7; + m68ki_exception_trap((mc68kcpu), EXCEPTION_CHK); + return; + } + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_chk_32_al(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + int32_t src = MAKE_INT_32(DX(mc68kcpu)); + int32_t bound = MAKE_INT_32(OPER_AL_32(mc68kcpu)); + + (mc68kcpu)->not_z_flag = ZFLAG_32(src); /* Undocumented */ + (mc68kcpu)->v_flag = VFLAG_CLEAR; /* Undocumented */ + (mc68kcpu)->c_flag = CFLAG_CLEAR; /* Undocumented */ + + if(src >= 0 && src <= bound) + { + return; + } + (mc68kcpu)->n_flag = (src < 0)<<7; + m68ki_exception_trap((mc68kcpu), EXCEPTION_CHK); + return; + } + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_chk_32_pcdi(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + int32_t src = MAKE_INT_32(DX(mc68kcpu)); + int32_t bound = MAKE_INT_32(OPER_PCDI_32(mc68kcpu)); + + (mc68kcpu)->not_z_flag = ZFLAG_32(src); /* Undocumented */ + (mc68kcpu)->v_flag = VFLAG_CLEAR; /* Undocumented */ + (mc68kcpu)->c_flag = CFLAG_CLEAR; /* Undocumented */ + + if(src >= 0 && src <= bound) + { + return; + } + (mc68kcpu)->n_flag = (src < 0)<<7; + m68ki_exception_trap((mc68kcpu), EXCEPTION_CHK); + return; + } + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_chk_32_pcix(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + int32_t src = MAKE_INT_32(DX(mc68kcpu)); + int32_t bound = MAKE_INT_32(OPER_PCIX_32(mc68kcpu)); + + (mc68kcpu)->not_z_flag = ZFLAG_32(src); /* Undocumented */ + (mc68kcpu)->v_flag = VFLAG_CLEAR; /* Undocumented */ + (mc68kcpu)->c_flag = CFLAG_CLEAR; /* Undocumented */ + + if(src >= 0 && src <= bound) + { + return; + } + (mc68kcpu)->n_flag = (src < 0)<<7; + m68ki_exception_trap((mc68kcpu), EXCEPTION_CHK); + return; + } + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_chk_32_i(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + int32_t src = MAKE_INT_32(DX(mc68kcpu)); + int32_t bound = MAKE_INT_32(OPER_I_32(mc68kcpu)); + + (mc68kcpu)->not_z_flag = ZFLAG_32(src); /* Undocumented */ + (mc68kcpu)->v_flag = VFLAG_CLEAR; /* Undocumented */ + (mc68kcpu)->c_flag = CFLAG_CLEAR; /* Undocumented */ + + if(src >= 0 && src <= bound) + { + return; + } + (mc68kcpu)->n_flag = (src < 0)<<7; + m68ki_exception_trap((mc68kcpu), EXCEPTION_CHK); + return; + } + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_chk2cmp2_8_pcdi(m68000_base_device* mc68kcpu) +{ + /*if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + uint32_t word2 = OPER_I_16(mc68kcpu); + uint32_t compare = REG_DA(mc68kcpu)[(word2 >> 12) & 15]&0xff; + uint32_t ea = EA_PCDI_8(mc68kcpu); + uint32_t lower_bound = m68ki_read_8((mc68kcpu), ea); + uint32_t upper_bound = m68ki_read_8((mc68kcpu), ea + 1); + + if(!BIT_F(word2)) + (mc68kcpu)->c_flag = MAKE_INT_8(compare) - MAKE_INT_8(lower_bound); + else + (mc68kcpu)->c_flag = compare - lower_bound; + (mc68kcpu)->not_z_flag = !((upper_bound==compare) | (lower_bound==compare)); + if(COND_CS(mc68kcpu)) + { + if(BIT_B(word2)) + m68ki_exception_trap((mc68kcpu), EXCEPTION_CHK); + return; + } + + (mc68kcpu)->c_flag = upper_bound - compare; + if(COND_CS(mc68kcpu) && BIT_B(word2)) + m68ki_exception_trap((mc68kcpu), EXCEPTION_CHK); + return; + }*/ + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_chk2cmp2_8_pcix(m68000_base_device* mc68kcpu) +{ + /*if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + uint32_t word2 = OPER_I_16(mc68kcpu); + uint32_t compare = REG_DA(mc68kcpu)[(word2 >> 12) & 15]&0xff; + uint32_t ea = EA_PCIX_8(mc68kcpu); + uint32_t lower_bound = m68ki_read_8((mc68kcpu), ea); + uint32_t upper_bound = m68ki_read_8((mc68kcpu), ea + 1); + + if(!BIT_F(word2)) + (mc68kcpu)->c_flag = MAKE_INT_8(compare) - MAKE_INT_8(lower_bound); + else + (mc68kcpu)->c_flag = compare - lower_bound; + (mc68kcpu)->not_z_flag = !((upper_bound==compare) | (lower_bound==compare)); + if(COND_CS(mc68kcpu)) + { + if(BIT_B(word2)) + m68ki_exception_trap((mc68kcpu), EXCEPTION_CHK); + return; + } + + (mc68kcpu)->c_flag = upper_bound - compare; + if(COND_CS(mc68kcpu) && BIT_B(word2)) + m68ki_exception_trap((mc68kcpu), EXCEPTION_CHK); + return; + }*/ + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_chk2cmp2_8_ai(m68000_base_device* mc68kcpu) +{ + /*if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + uint32_t word2 = OPER_I_16(mc68kcpu); + uint32_t compare = REG_DA(mc68kcpu)[(word2 >> 12) & 15]&0xff; + uint32_t ea = EA_AY_AI_8(mc68kcpu); + uint32_t lower_bound = m68ki_read_8((mc68kcpu), ea); + uint32_t upper_bound = m68ki_read_8((mc68kcpu), ea + 1); + + if(!BIT_F(word2)) + (mc68kcpu)->c_flag = MAKE_INT_8(compare) - MAKE_INT_8(lower_bound); + else + (mc68kcpu)->c_flag = compare - lower_bound; + (mc68kcpu)->not_z_flag = !((upper_bound==compare) | (lower_bound==compare)); + if(COND_CS(mc68kcpu)) + { + if(BIT_B(word2)) + m68ki_exception_trap((mc68kcpu), EXCEPTION_CHK); + return; + } + + (mc68kcpu)->c_flag = upper_bound - compare; + if(COND_CS(mc68kcpu) && BIT_B(word2)) + m68ki_exception_trap((mc68kcpu), EXCEPTION_CHK); + return; + }*/ + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_chk2cmp2_8_di(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + uint32_t word2 = OPER_I_16(mc68kcpu); + uint32_t compare = REG_DA(mc68kcpu)[(word2 >> 12) & 15]&0xff; + uint32_t ea = EA_AY_DI_8(mc68kcpu); + uint32_t lower_bound = m68ki_read_8((mc68kcpu), ea); + uint32_t upper_bound = m68ki_read_8((mc68kcpu), ea + 1); + + if(!BIT_F(word2)) + (mc68kcpu)->c_flag = MAKE_INT_8(compare) - MAKE_INT_8(lower_bound); + else + (mc68kcpu)->c_flag = compare - lower_bound; + (mc68kcpu)->not_z_flag = !((upper_bound==compare) | (lower_bound==compare)); + if(COND_CS(mc68kcpu)) + { + if(BIT_B(word2)) + m68ki_exception_trap((mc68kcpu), EXCEPTION_CHK); + return; + } + + (mc68kcpu)->c_flag = upper_bound - compare; + if(COND_CS(mc68kcpu) && BIT_B(word2)) + m68ki_exception_trap((mc68kcpu), EXCEPTION_CHK); + return; + } + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_chk2cmp2_8_ix(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + uint32_t word2 = OPER_I_16(mc68kcpu); + uint32_t compare = REG_DA(mc68kcpu)[(word2 >> 12) & 15]&0xff; + uint32_t ea = EA_AY_IX_8(mc68kcpu); + uint32_t lower_bound = m68ki_read_8((mc68kcpu), ea); + uint32_t upper_bound = m68ki_read_8((mc68kcpu), ea + 1); + + if(!BIT_F(word2)) + (mc68kcpu)->c_flag = MAKE_INT_8(compare) - MAKE_INT_8(lower_bound); + else + (mc68kcpu)->c_flag = compare - lower_bound; + (mc68kcpu)->not_z_flag = !((upper_bound==compare) | (lower_bound==compare)); + if(COND_CS(mc68kcpu)) + { + if(BIT_B(word2)) + m68ki_exception_trap((mc68kcpu), EXCEPTION_CHK); + return; + } + + (mc68kcpu)->c_flag = upper_bound - compare; + if(COND_CS(mc68kcpu) && BIT_B(word2)) + m68ki_exception_trap((mc68kcpu), EXCEPTION_CHK); + return; + } + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_chk2cmp2_8_aw(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + uint32_t word2 = OPER_I_16(mc68kcpu); + uint32_t compare = REG_DA(mc68kcpu)[(word2 >> 12) & 15]&0xff; + uint32_t ea = EA_AW_8(mc68kcpu); + uint32_t lower_bound = m68ki_read_8((mc68kcpu), ea); + uint32_t upper_bound = m68ki_read_8((mc68kcpu), ea + 1); + + if(!BIT_F(word2)) + (mc68kcpu)->c_flag = MAKE_INT_8(compare) - MAKE_INT_8(lower_bound); + else + (mc68kcpu)->c_flag = compare - lower_bound; + (mc68kcpu)->not_z_flag = !((upper_bound==compare) | (lower_bound==compare)); + if(COND_CS(mc68kcpu)) + { + if(BIT_B(word2)) + m68ki_exception_trap((mc68kcpu), EXCEPTION_CHK); + return; + } + + (mc68kcpu)->c_flag = upper_bound - compare; + if(COND_CS(mc68kcpu) && BIT_B(word2)) + m68ki_exception_trap((mc68kcpu), EXCEPTION_CHK); + return; + } + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_chk2cmp2_8_al(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + uint32_t word2 = OPER_I_16(mc68kcpu); + uint32_t compare = REG_DA(mc68kcpu)[(word2 >> 12) & 15]&0xff; + uint32_t ea = EA_AL_8(mc68kcpu); + uint32_t lower_bound = m68ki_read_8((mc68kcpu), ea); + uint32_t upper_bound = m68ki_read_8((mc68kcpu), ea + 1); + + if(!BIT_F(word2)) + (mc68kcpu)->c_flag = MAKE_INT_8(compare) - MAKE_INT_8(lower_bound); + else + (mc68kcpu)->c_flag = compare - lower_bound; + (mc68kcpu)->not_z_flag = !((upper_bound==compare) | (lower_bound==compare)); + if(COND_CS(mc68kcpu)) + { + if(BIT_B(word2)) + m68ki_exception_trap((mc68kcpu), EXCEPTION_CHK); + return; + } + + (mc68kcpu)->c_flag = upper_bound - compare; + if(COND_CS(mc68kcpu) && BIT_B(word2)) + m68ki_exception_trap((mc68kcpu), EXCEPTION_CHK); + return; + } + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_chk2cmp2_16_pcdi(m68000_base_device* mc68kcpu) +{ + /*if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + uint32_t word2 = OPER_I_16(mc68kcpu); + uint32_t compare = REG_DA(mc68kcpu)[(word2 >> 12) & 15]&0xffff; + uint32_t ea = EA_PCDI_16(mc68kcpu); + uint32_t lower_bound = m68ki_read_16((mc68kcpu), ea); + uint32_t upper_bound = m68ki_read_16((mc68kcpu), ea + 2); + + if(!BIT_F(word2)) + (mc68kcpu)->c_flag = MAKE_INT_16(compare) - MAKE_INT_16(lower_bound); + else + (mc68kcpu)->c_flag = compare - lower_bound; + (mc68kcpu)->not_z_flag = !((upper_bound==compare) | (lower_bound==compare)); + (mc68kcpu)->c_flag = CFLAG_16((mc68kcpu)->c_flag); + if(COND_CS(mc68kcpu)) + { + if(BIT_B(word2)) + m68ki_exception_trap((mc68kcpu), EXCEPTION_CHK); + return; + } + + if(!BIT_F(word2)) + (mc68kcpu)->c_flag = MAKE_INT_16(upper_bound) - MAKE_INT_16(compare); + else + (mc68kcpu)->c_flag = upper_bound - compare; + (mc68kcpu)->c_flag = CFLAG_16((mc68kcpu)->c_flag); + if(COND_CS(mc68kcpu) && BIT_B(word2)) + m68ki_exception_trap((mc68kcpu), EXCEPTION_CHK); + return; + }*/ + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_chk2cmp2_16_pcix(m68000_base_device* mc68kcpu) +{ + /*if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + uint32_t word2 = OPER_I_16(mc68kcpu); + uint32_t compare = REG_DA(mc68kcpu)[(word2 >> 12) & 15]&0xffff; + uint32_t ea = EA_PCIX_16(mc68kcpu); + uint32_t lower_bound = m68ki_read_16((mc68kcpu), ea); + uint32_t upper_bound = m68ki_read_16((mc68kcpu), ea + 2); + + if(!BIT_F(word2)) + (mc68kcpu)->c_flag = MAKE_INT_16(compare) - MAKE_INT_16(lower_bound); + else + (mc68kcpu)->c_flag = compare - lower_bound; + (mc68kcpu)->not_z_flag = !((upper_bound==compare) | (lower_bound==compare)); + (mc68kcpu)->c_flag = CFLAG_16((mc68kcpu)->c_flag); + if(COND_CS(mc68kcpu)) + { + if(BIT_B(word2)) + m68ki_exception_trap((mc68kcpu), EXCEPTION_CHK); + return; + } + + if(!BIT_F(word2)) + (mc68kcpu)->c_flag = MAKE_INT_16(upper_bound) - MAKE_INT_16(compare); + else + (mc68kcpu)->c_flag = upper_bound - compare; + (mc68kcpu)->c_flag = CFLAG_16((mc68kcpu)->c_flag); + if(COND_CS(mc68kcpu) && BIT_B(word2)) + m68ki_exception_trap((mc68kcpu), EXCEPTION_CHK); + return; + }*/ + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_chk2cmp2_16_ai(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + uint32_t word2 = OPER_I_16(mc68kcpu); + uint32_t compare = REG_DA(mc68kcpu)[(word2 >> 12) & 15]&0xffff; + uint32_t ea = EA_AY_AI_16(mc68kcpu); + uint32_t lower_bound = m68ki_read_16((mc68kcpu), ea); + uint32_t upper_bound = m68ki_read_16((mc68kcpu), ea + 2); + + if(!BIT_F(word2)) + (mc68kcpu)->c_flag = MAKE_INT_16(compare) - MAKE_INT_16(lower_bound); + else + (mc68kcpu)->c_flag = compare - lower_bound; + + (mc68kcpu)->not_z_flag = !((upper_bound==compare) | (lower_bound==compare)); + (mc68kcpu)->c_flag = CFLAG_16((mc68kcpu)->c_flag); + if(COND_CS(mc68kcpu)) + { + if(BIT_B(word2)) + m68ki_exception_trap((mc68kcpu), EXCEPTION_CHK); + return; + } + if(!BIT_F(word2)) + (mc68kcpu)->c_flag = MAKE_INT_16(upper_bound) - MAKE_INT_16(compare); + else + (mc68kcpu)->c_flag = upper_bound - compare; + + (mc68kcpu)->c_flag = CFLAG_16((mc68kcpu)->c_flag); + if(COND_CS(mc68kcpu) && BIT_B(word2)) + m68ki_exception_trap((mc68kcpu), EXCEPTION_CHK); + return; + } + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_chk2cmp2_16_di(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + uint32_t word2 = OPER_I_16(mc68kcpu); + uint32_t compare = REG_DA(mc68kcpu)[(word2 >> 12) & 15]&0xffff; + uint32_t ea = EA_AY_DI_16(mc68kcpu); + uint32_t lower_bound = m68ki_read_16((mc68kcpu), ea); + uint32_t upper_bound = m68ki_read_16((mc68kcpu), ea + 2); + + if(!BIT_F(word2)) + (mc68kcpu)->c_flag = MAKE_INT_16(compare) - MAKE_INT_16(lower_bound); + else + (mc68kcpu)->c_flag = compare - lower_bound; + + (mc68kcpu)->not_z_flag = !((upper_bound==compare) | (lower_bound==compare)); + (mc68kcpu)->c_flag = CFLAG_16((mc68kcpu)->c_flag); + if(COND_CS(mc68kcpu)) + { + if(BIT_B(word2)) + m68ki_exception_trap((mc68kcpu), EXCEPTION_CHK); + return; + } + if(!BIT_F(word2)) + (mc68kcpu)->c_flag = MAKE_INT_16(upper_bound) - MAKE_INT_16(compare); + else + (mc68kcpu)->c_flag = upper_bound - compare; + + (mc68kcpu)->c_flag = CFLAG_16((mc68kcpu)->c_flag); + if(COND_CS(mc68kcpu) && BIT_B(word2)) + m68ki_exception_trap((mc68kcpu), EXCEPTION_CHK); + return; + } + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_chk2cmp2_16_ix(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + uint32_t word2 = OPER_I_16(mc68kcpu); + uint32_t compare = REG_DA(mc68kcpu)[(word2 >> 12) & 15]&0xffff; + uint32_t ea = EA_AY_IX_16(mc68kcpu); + uint32_t lower_bound = m68ki_read_16((mc68kcpu), ea); + uint32_t upper_bound = m68ki_read_16((mc68kcpu), ea + 2); + + if(!BIT_F(word2)) + (mc68kcpu)->c_flag = MAKE_INT_16(compare) - MAKE_INT_16(lower_bound); + else + (mc68kcpu)->c_flag = compare - lower_bound; + + (mc68kcpu)->not_z_flag = !((upper_bound==compare) | (lower_bound==compare)); + (mc68kcpu)->c_flag = CFLAG_16((mc68kcpu)->c_flag); + if(COND_CS(mc68kcpu)) + { + if(BIT_B(word2)) + m68ki_exception_trap((mc68kcpu), EXCEPTION_CHK); + return; + } + if(!BIT_F(word2)) + (mc68kcpu)->c_flag = MAKE_INT_16(upper_bound) - MAKE_INT_16(compare); + else + (mc68kcpu)->c_flag = upper_bound - compare; + + (mc68kcpu)->c_flag = CFLAG_16((mc68kcpu)->c_flag); + if(COND_CS(mc68kcpu) && BIT_B(word2)) + m68ki_exception_trap((mc68kcpu), EXCEPTION_CHK); + return; + } + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_chk2cmp2_16_aw(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + uint32_t word2 = OPER_I_16(mc68kcpu); + uint32_t compare = REG_DA(mc68kcpu)[(word2 >> 12) & 15]&0xffff; + uint32_t ea = EA_AW_16(mc68kcpu); + uint32_t lower_bound = m68ki_read_16((mc68kcpu), ea); + uint32_t upper_bound = m68ki_read_16((mc68kcpu), ea + 2); + + if(!BIT_F(word2)) + (mc68kcpu)->c_flag = MAKE_INT_16(compare) - MAKE_INT_16(lower_bound); + else + (mc68kcpu)->c_flag = compare - lower_bound; + + (mc68kcpu)->not_z_flag = !((upper_bound==compare) | (lower_bound==compare)); + (mc68kcpu)->c_flag = CFLAG_16((mc68kcpu)->c_flag); + if(COND_CS(mc68kcpu)) + { + if(BIT_B(word2)) + m68ki_exception_trap((mc68kcpu), EXCEPTION_CHK); + return; + } + if(!BIT_F(word2)) + (mc68kcpu)->c_flag = MAKE_INT_16(upper_bound) - MAKE_INT_16(compare); + else + (mc68kcpu)->c_flag = upper_bound - compare; + + (mc68kcpu)->c_flag = CFLAG_16((mc68kcpu)->c_flag); + if(COND_CS(mc68kcpu) && BIT_B(word2)) + m68ki_exception_trap((mc68kcpu), EXCEPTION_CHK); + return; + } + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_chk2cmp2_16_al(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + uint32_t word2 = OPER_I_16(mc68kcpu); + uint32_t compare = REG_DA(mc68kcpu)[(word2 >> 12) & 15]&0xffff; + uint32_t ea = EA_AL_16(mc68kcpu); + uint32_t lower_bound = m68ki_read_16((mc68kcpu), ea); + uint32_t upper_bound = m68ki_read_16((mc68kcpu), ea + 2); + + if(!BIT_F(word2)) + (mc68kcpu)->c_flag = MAKE_INT_16(compare) - MAKE_INT_16(lower_bound); + else + (mc68kcpu)->c_flag = compare - lower_bound; + + (mc68kcpu)->not_z_flag = !((upper_bound==compare) | (lower_bound==compare)); + (mc68kcpu)->c_flag = CFLAG_16((mc68kcpu)->c_flag); + if(COND_CS(mc68kcpu)) + { + if(BIT_B(word2)) + m68ki_exception_trap((mc68kcpu), EXCEPTION_CHK); + return; + } + if(!BIT_F(word2)) + (mc68kcpu)->c_flag = MAKE_INT_16(upper_bound) - MAKE_INT_16(compare); + else + (mc68kcpu)->c_flag = upper_bound - compare; + + (mc68kcpu)->c_flag = CFLAG_16((mc68kcpu)->c_flag); + if(COND_CS(mc68kcpu) && BIT_B(word2)) + m68ki_exception_trap((mc68kcpu), EXCEPTION_CHK); + return; + } + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_chk2cmp2_32_pcdi(m68000_base_device* mc68kcpu) +{ + /*if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + uint32_t word2 = OPER_I_16(mc68kcpu); + uint32_t compare = REG_DA(mc68kcpu)[(word2 >> 12) & 15]; + uint32_t ea = EA_PCDI_32(mc68kcpu); + uint32_t lower_bound = m68ki_read_32((mc68kcpu), ea); + uint32_t upper_bound = m68ki_read_32((mc68kcpu), ea + 4); + + (mc68kcpu)->c_flag = compare - lower_bound; + (mc68kcpu)->not_z_flag = !((upper_bound==compare) | (lower_bound==compare)); + (mc68kcpu)->c_flag = CFLAG_SUB_32(lower_bound, compare, (mc68kcpu)->c_flag); + if(COND_CS(mc68kcpu)) + { + if(BIT_B(word2)) + m68ki_exception_trap((mc68kcpu), EXCEPTION_CHK); + return; + } + + (mc68kcpu)->c_flag = upper_bound - compare; + (mc68kcpu)->c_flag = CFLAG_SUB_32(compare, upper_bound, (mc68kcpu)->c_flag); + if(COND_CS(mc68kcpu) && BIT_B(word2)) + m68ki_exception_trap((mc68kcpu), EXCEPTION_CHK); + return; + }*/ + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_chk2cmp2_32_pcix(m68000_base_device* mc68kcpu) +{ + /*if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + uint32_t word2 = OPER_I_16(mc68kcpu); + uint32_t compare = REG_DA(mc68kcpu)[(word2 >> 12) & 15]; + uint32_t ea = EA_PCIX_32(mc68kcpu); + uint32_t lower_bound = m68ki_read_32((mc68kcpu), ea); + uint32_t upper_bound = m68ki_read_32((mc68kcpu), ea + 4); + + (mc68kcpu)->c_flag = compare - lower_bound; + (mc68kcpu)->not_z_flag = !((upper_bound==compare) | (lower_bound==compare)); + (mc68kcpu)->c_flag = CFLAG_SUB_32(lower_bound, compare, (mc68kcpu)->c_flag); + if(COND_CS(mc68kcpu)) + { + if(BIT_B(word2)) + m68ki_exception_trap((mc68kcpu), EXCEPTION_CHK); + return; + } + + (mc68kcpu)->c_flag = upper_bound - compare; + (mc68kcpu)->c_flag = CFLAG_SUB_32(compare, upper_bound, (mc68kcpu)->c_flag); + if(COND_CS(mc68kcpu) && BIT_B(word2)) + m68ki_exception_trap((mc68kcpu), EXCEPTION_CHK); + return; + }*/ + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_chk2cmp2_32_ai(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + uint32_t word2 = OPER_I_16(mc68kcpu); + uint32_t compare = REG_DA(mc68kcpu)[(word2 >> 12) & 15]; + uint32_t ea = EA_AY_AI_32(mc68kcpu); + uint32_t lower_bound = m68ki_read_32((mc68kcpu), ea); + uint32_t upper_bound = m68ki_read_32((mc68kcpu), ea + 4); + + (mc68kcpu)->c_flag = compare - lower_bound; + (mc68kcpu)->not_z_flag = !((upper_bound==compare) | (lower_bound==compare)); + (mc68kcpu)->c_flag = CFLAG_SUB_32(lower_bound, compare, (mc68kcpu)->c_flag); + if(COND_CS(mc68kcpu)) + { + if(BIT_B(word2)) + m68ki_exception_trap((mc68kcpu), EXCEPTION_CHK); + return; + } + + (mc68kcpu)->c_flag = upper_bound - compare; + (mc68kcpu)->c_flag = CFLAG_SUB_32(compare, upper_bound, (mc68kcpu)->c_flag); + if(COND_CS(mc68kcpu) && BIT_B(word2)) + m68ki_exception_trap((mc68kcpu), EXCEPTION_CHK); + return; + } + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_chk2cmp2_32_di(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + uint32_t word2 = OPER_I_16(mc68kcpu); + uint32_t compare = REG_DA(mc68kcpu)[(word2 >> 12) & 15]; + uint32_t ea = EA_AY_DI_32(mc68kcpu); + uint32_t lower_bound = m68ki_read_32((mc68kcpu), ea); + uint32_t upper_bound = m68ki_read_32((mc68kcpu), ea + 4); + + (mc68kcpu)->c_flag = compare - lower_bound; + (mc68kcpu)->not_z_flag = !((upper_bound==compare) | (lower_bound==compare)); + (mc68kcpu)->c_flag = CFLAG_SUB_32(lower_bound, compare, (mc68kcpu)->c_flag); + if(COND_CS(mc68kcpu)) + { + if(BIT_B(word2)) + m68ki_exception_trap((mc68kcpu), EXCEPTION_CHK); + return; + } + + (mc68kcpu)->c_flag = upper_bound - compare; + (mc68kcpu)->c_flag = CFLAG_SUB_32(compare, upper_bound, (mc68kcpu)->c_flag); + if(COND_CS(mc68kcpu) && BIT_B(word2)) + m68ki_exception_trap((mc68kcpu), EXCEPTION_CHK); + return; + } + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_chk2cmp2_32_ix(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + uint32_t word2 = OPER_I_16(mc68kcpu); + uint32_t compare = REG_DA(mc68kcpu)[(word2 >> 12) & 15]; + uint32_t ea = EA_AY_IX_32(mc68kcpu); + uint32_t lower_bound = m68ki_read_32((mc68kcpu), ea); + uint32_t upper_bound = m68ki_read_32((mc68kcpu), ea + 4); + + (mc68kcpu)->c_flag = compare - lower_bound; + (mc68kcpu)->not_z_flag = !((upper_bound==compare) | (lower_bound==compare)); + (mc68kcpu)->c_flag = CFLAG_SUB_32(lower_bound, compare, (mc68kcpu)->c_flag); + if(COND_CS(mc68kcpu)) + { + if(BIT_B(word2)) + m68ki_exception_trap((mc68kcpu), EXCEPTION_CHK); + return; + } + + (mc68kcpu)->c_flag = upper_bound - compare; + (mc68kcpu)->c_flag = CFLAG_SUB_32(compare, upper_bound, (mc68kcpu)->c_flag); + if(COND_CS(mc68kcpu) && BIT_B(word2)) + m68ki_exception_trap((mc68kcpu), EXCEPTION_CHK); + return; + } + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_chk2cmp2_32_aw(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + uint32_t word2 = OPER_I_16(mc68kcpu); + uint32_t compare = REG_DA(mc68kcpu)[(word2 >> 12) & 15]; + uint32_t ea = EA_AW_32(mc68kcpu); + uint32_t lower_bound = m68ki_read_32((mc68kcpu), ea); + uint32_t upper_bound = m68ki_read_32((mc68kcpu), ea + 4); + + (mc68kcpu)->c_flag = compare - lower_bound; + (mc68kcpu)->not_z_flag = !((upper_bound==compare) | (lower_bound==compare)); + (mc68kcpu)->c_flag = CFLAG_SUB_32(lower_bound, compare, (mc68kcpu)->c_flag); + if(COND_CS(mc68kcpu)) + { + if(BIT_B(word2)) + m68ki_exception_trap((mc68kcpu), EXCEPTION_CHK); + return; + } + + (mc68kcpu)->c_flag = upper_bound - compare; + (mc68kcpu)->c_flag = CFLAG_SUB_32(compare, upper_bound, (mc68kcpu)->c_flag); + if(COND_CS(mc68kcpu) && BIT_B(word2)) + m68ki_exception_trap((mc68kcpu), EXCEPTION_CHK); + return; + } + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_chk2cmp2_32_al(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + uint32_t word2 = OPER_I_16(mc68kcpu); + uint32_t compare = REG_DA(mc68kcpu)[(word2 >> 12) & 15]; + uint32_t ea = EA_AL_32(mc68kcpu); + uint32_t lower_bound = m68ki_read_32((mc68kcpu), ea); + uint32_t upper_bound = m68ki_read_32((mc68kcpu), ea + 4); + + (mc68kcpu)->c_flag = compare - lower_bound; + (mc68kcpu)->not_z_flag = !((upper_bound==compare) | (lower_bound==compare)); + (mc68kcpu)->c_flag = CFLAG_SUB_32(lower_bound, compare, (mc68kcpu)->c_flag); + if(COND_CS(mc68kcpu)) + { + if(BIT_B(word2)) + m68ki_exception_trap((mc68kcpu), EXCEPTION_CHK); + return; + } + + (mc68kcpu)->c_flag = upper_bound - compare; + (mc68kcpu)->c_flag = CFLAG_SUB_32(compare, upper_bound, (mc68kcpu)->c_flag); + if(COND_CS(mc68kcpu) && BIT_B(word2)) + m68ki_exception_trap((mc68kcpu), EXCEPTION_CHK); + return; + } + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_clr_8_d(m68000_base_device* mc68kcpu) +{ + DY(mc68kcpu) &= 0xffffff00; + + (mc68kcpu)->n_flag = NFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->not_z_flag = ZFLAG_SET; +} + + +static void m68k_op_clr_8_ai(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AY_AI_8(mc68kcpu); + + if(CPU_TYPE_IS_000((mc68kcpu)->cpu_type)) + { + m68ki_read_8((mc68kcpu), ea); /* the 68000 does a dummy read, the value is discarded */ + } + + m68ki_write_8((mc68kcpu), ea, 0); + + (mc68kcpu)->n_flag = NFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->not_z_flag = ZFLAG_SET; +} + + +static void m68k_op_clr_8_pi(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AY_PI_8(mc68kcpu); + + if(CPU_TYPE_IS_000((mc68kcpu)->cpu_type)) + { + m68ki_read_8((mc68kcpu), ea); /* the 68000 does a dummy read, the value is discarded */ + } + + m68ki_write_8((mc68kcpu), ea, 0); + + (mc68kcpu)->n_flag = NFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->not_z_flag = ZFLAG_SET; +} + + +static void m68k_op_clr_8_pi7(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_A7_PI_8(mc68kcpu); + + if(CPU_TYPE_IS_000((mc68kcpu)->cpu_type)) + { + m68ki_read_8((mc68kcpu), ea); /* the 68000 does a dummy read, the value is discarded */ + } + + m68ki_write_8((mc68kcpu), ea, 0); + + (mc68kcpu)->n_flag = NFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->not_z_flag = ZFLAG_SET; +} + + +static void m68k_op_clr_8_pd(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AY_PD_8(mc68kcpu); + + if(CPU_TYPE_IS_000((mc68kcpu)->cpu_type)) + { + m68ki_read_8((mc68kcpu), ea); /* the 68000 does a dummy read, the value is discarded */ + } + + m68ki_write_8((mc68kcpu), ea, 0); + + (mc68kcpu)->n_flag = NFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->not_z_flag = ZFLAG_SET; +} + + +static void m68k_op_clr_8_pd7(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_A7_PD_8(mc68kcpu); + + if(CPU_TYPE_IS_000((mc68kcpu)->cpu_type)) + { + m68ki_read_8((mc68kcpu), ea); /* the 68000 does a dummy read, the value is discarded */ + } + + m68ki_write_8((mc68kcpu), ea, 0); + + (mc68kcpu)->n_flag = NFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->not_z_flag = ZFLAG_SET; +} + + +static void m68k_op_clr_8_di(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AY_DI_8(mc68kcpu); + + if(CPU_TYPE_IS_000((mc68kcpu)->cpu_type)) + { + m68ki_read_8((mc68kcpu), ea); /* the 68000 does a dummy read, the value is discarded */ + } + + m68ki_write_8((mc68kcpu), ea, 0); + + (mc68kcpu)->n_flag = NFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->not_z_flag = ZFLAG_SET; +} + + +static void m68k_op_clr_8_ix(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AY_IX_8(mc68kcpu); + + if(CPU_TYPE_IS_000((mc68kcpu)->cpu_type)) + { + m68ki_read_8((mc68kcpu), ea); /* the 68000 does a dummy read, the value is discarded */ + } + + m68ki_write_8((mc68kcpu), ea, 0); + + (mc68kcpu)->n_flag = NFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->not_z_flag = ZFLAG_SET; +} + + +static void m68k_op_clr_8_aw(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AW_8(mc68kcpu); + + if(CPU_TYPE_IS_000((mc68kcpu)->cpu_type)) + { + m68ki_read_8((mc68kcpu), ea); /* the 68000 does a dummy read, the value is discarded */ + } + + m68ki_write_8((mc68kcpu), ea, 0); + + (mc68kcpu)->n_flag = NFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->not_z_flag = ZFLAG_SET; +} + + +static void m68k_op_clr_8_al(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AL_8(mc68kcpu); + + if(CPU_TYPE_IS_000((mc68kcpu)->cpu_type)) + { + m68ki_read_8((mc68kcpu), ea); /* the 68000 does a dummy read, the value is discarded */ + } + + m68ki_write_8((mc68kcpu), ea, 0); + + (mc68kcpu)->n_flag = NFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->not_z_flag = ZFLAG_SET; +} + + +static void m68k_op_clr_16_d(m68000_base_device* mc68kcpu) +{ + DY(mc68kcpu) &= 0xffff0000; + + (mc68kcpu)->n_flag = NFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->not_z_flag = ZFLAG_SET; +} + + +static void m68k_op_clr_16_ai(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AY_AI_16(mc68kcpu); + + if(CPU_TYPE_IS_000((mc68kcpu)->cpu_type)) + { + m68ki_read_16((mc68kcpu), ea); /* the 68000 does a dummy read, the value is discarded */ + } + + m68ki_write_16((mc68kcpu), ea, 0); + + (mc68kcpu)->n_flag = NFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->not_z_flag = ZFLAG_SET; +} + + +static void m68k_op_clr_16_pi(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AY_PI_16(mc68kcpu); + + if(CPU_TYPE_IS_000((mc68kcpu)->cpu_type)) + { + m68ki_read_16((mc68kcpu), ea); /* the 68000 does a dummy read, the value is discarded */ + } + + m68ki_write_16((mc68kcpu), ea, 0); + + (mc68kcpu)->n_flag = NFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->not_z_flag = ZFLAG_SET; +} + + +static void m68k_op_clr_16_pd(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AY_PD_16(mc68kcpu); + + if(CPU_TYPE_IS_000((mc68kcpu)->cpu_type)) + { + m68ki_read_16((mc68kcpu), ea); /* the 68000 does a dummy read, the value is discarded */ + } + + m68ki_write_16((mc68kcpu), ea, 0); + + (mc68kcpu)->n_flag = NFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->not_z_flag = ZFLAG_SET; +} + + +static void m68k_op_clr_16_di(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AY_DI_16(mc68kcpu); + + if(CPU_TYPE_IS_000((mc68kcpu)->cpu_type)) + { + m68ki_read_16((mc68kcpu), ea); /* the 68000 does a dummy read, the value is discarded */ + } + + m68ki_write_16((mc68kcpu), ea, 0); + + (mc68kcpu)->n_flag = NFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->not_z_flag = ZFLAG_SET; +} + + +static void m68k_op_clr_16_ix(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AY_IX_16(mc68kcpu); + + if(CPU_TYPE_IS_000((mc68kcpu)->cpu_type)) + { + m68ki_read_16((mc68kcpu), ea); /* the 68000 does a dummy read, the value is discarded */ + } + + m68ki_write_16((mc68kcpu), ea, 0); + + (mc68kcpu)->n_flag = NFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->not_z_flag = ZFLAG_SET; +} + + +static void m68k_op_clr_16_aw(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AW_16(mc68kcpu); + + if(CPU_TYPE_IS_000((mc68kcpu)->cpu_type)) + { + m68ki_read_16((mc68kcpu), ea); /* the 68000 does a dummy read, the value is discarded */ + } + + m68ki_write_16((mc68kcpu), ea, 0); + + (mc68kcpu)->n_flag = NFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->not_z_flag = ZFLAG_SET; +} + + +static void m68k_op_clr_16_al(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AL_16(mc68kcpu); + + if(CPU_TYPE_IS_000((mc68kcpu)->cpu_type)) + { + m68ki_read_16((mc68kcpu), ea); /* the 68000 does a dummy read, the value is discarded */ + } + + m68ki_write_16((mc68kcpu), ea, 0); + + (mc68kcpu)->n_flag = NFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->not_z_flag = ZFLAG_SET; +} + + +static void m68k_op_clr_32_d(m68000_base_device* mc68kcpu) +{ + DY(mc68kcpu) = 0; + + (mc68kcpu)->n_flag = NFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->not_z_flag = ZFLAG_SET; +} + + +static void m68k_op_clr_32_ai(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AY_AI_32(mc68kcpu); + + if(CPU_TYPE_IS_000((mc68kcpu)->cpu_type)) + { + m68ki_read_32((mc68kcpu), ea); /* the 68000 does a dummy read, the value is discarded */ + } + + m68ki_write_32((mc68kcpu), ea, 0); + + (mc68kcpu)->n_flag = NFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->not_z_flag = ZFLAG_SET; +} + + +static void m68k_op_clr_32_pi(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AY_PI_32(mc68kcpu); + + if(CPU_TYPE_IS_000((mc68kcpu)->cpu_type)) + { + m68ki_read_32((mc68kcpu), ea); /* the 68000 does a dummy read, the value is discarded */ + } + + m68ki_write_32((mc68kcpu), ea, 0); + + (mc68kcpu)->n_flag = NFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->not_z_flag = ZFLAG_SET; +} + + +static void m68k_op_clr_32_pd(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AY_PD_32(mc68kcpu); + + if(CPU_TYPE_IS_000((mc68kcpu)->cpu_type)) + { + m68ki_read_32((mc68kcpu), ea); /* the 68000 does a dummy read, the value is discarded */ + } + + m68ki_write_32((mc68kcpu), ea, 0); + + (mc68kcpu)->n_flag = NFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->not_z_flag = ZFLAG_SET; +} + + +static void m68k_op_clr_32_di(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AY_DI_32(mc68kcpu); + + if(CPU_TYPE_IS_000((mc68kcpu)->cpu_type)) + { + m68ki_read_32((mc68kcpu), ea); /* the 68000 does a dummy read, the value is discarded */ + } + + m68ki_write_32((mc68kcpu), ea, 0); + + (mc68kcpu)->n_flag = NFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->not_z_flag = ZFLAG_SET; +} + + +static void m68k_op_clr_32_ix(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AY_IX_32(mc68kcpu); + + if(CPU_TYPE_IS_000((mc68kcpu)->cpu_type)) + { + m68ki_read_32((mc68kcpu), ea); /* the 68000 does a dummy read, the value is discarded */ + } + + m68ki_write_32((mc68kcpu), ea, 0); + + (mc68kcpu)->n_flag = NFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->not_z_flag = ZFLAG_SET; +} + + +static void m68k_op_clr_32_aw(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AW_32(mc68kcpu); + + if(CPU_TYPE_IS_000((mc68kcpu)->cpu_type)) + { + m68ki_read_32((mc68kcpu), ea); /* the 68000 does a dummy read, the value is discarded */ + } + + m68ki_write_32((mc68kcpu), ea, 0); + + (mc68kcpu)->n_flag = NFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->not_z_flag = ZFLAG_SET; +} + + +static void m68k_op_clr_32_al(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AL_32(mc68kcpu); + + if(CPU_TYPE_IS_000((mc68kcpu)->cpu_type)) + { + m68ki_read_32((mc68kcpu), ea); /* the 68000 does a dummy read, the value is discarded */ + } + + m68ki_write_32((mc68kcpu), ea, 0); + + (mc68kcpu)->n_flag = NFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->not_z_flag = ZFLAG_SET; +} + + +static void m68k_op_cmp_8_d(m68000_base_device* mc68kcpu) +{ + uint32_t src = MASK_OUT_ABOVE_8(DY(mc68kcpu)); + uint32_t dst = MASK_OUT_ABOVE_8(DX(mc68kcpu)); + uint32_t res = dst - src; + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res); + (mc68kcpu)->v_flag = VFLAG_SUB_8(src, dst, res); + (mc68kcpu)->c_flag = CFLAG_8(res); +} + + +static void m68k_op_cmp_8_ai(m68000_base_device* mc68kcpu) +{ + uint32_t src = OPER_AY_AI_8(mc68kcpu); + uint32_t dst = MASK_OUT_ABOVE_8(DX(mc68kcpu)); + uint32_t res = dst - src; + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res); + (mc68kcpu)->v_flag = VFLAG_SUB_8(src, dst, res); + (mc68kcpu)->c_flag = CFLAG_8(res); +} + + +static void m68k_op_cmp_8_pi(m68000_base_device* mc68kcpu) +{ + uint32_t src = OPER_AY_PI_8(mc68kcpu); + uint32_t dst = MASK_OUT_ABOVE_8(DX(mc68kcpu)); + uint32_t res = dst - src; + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res); + (mc68kcpu)->v_flag = VFLAG_SUB_8(src, dst, res); + (mc68kcpu)->c_flag = CFLAG_8(res); +} + + +static void m68k_op_cmp_8_pi7(m68000_base_device* mc68kcpu) +{ + uint32_t src = OPER_A7_PI_8(mc68kcpu); + uint32_t dst = MASK_OUT_ABOVE_8(DX(mc68kcpu)); + uint32_t res = dst - src; + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res); + (mc68kcpu)->v_flag = VFLAG_SUB_8(src, dst, res); + (mc68kcpu)->c_flag = CFLAG_8(res); +} + + +static void m68k_op_cmp_8_pd(m68000_base_device* mc68kcpu) +{ + uint32_t src = OPER_AY_PD_8(mc68kcpu); + uint32_t dst = MASK_OUT_ABOVE_8(DX(mc68kcpu)); + uint32_t res = dst - src; + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res); + (mc68kcpu)->v_flag = VFLAG_SUB_8(src, dst, res); + (mc68kcpu)->c_flag = CFLAG_8(res); +} + + +static void m68k_op_cmp_8_pd7(m68000_base_device* mc68kcpu) +{ + uint32_t src = OPER_A7_PD_8(mc68kcpu); + uint32_t dst = MASK_OUT_ABOVE_8(DX(mc68kcpu)); + uint32_t res = dst - src; + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res); + (mc68kcpu)->v_flag = VFLAG_SUB_8(src, dst, res); + (mc68kcpu)->c_flag = CFLAG_8(res); +} + + +static void m68k_op_cmp_8_di(m68000_base_device* mc68kcpu) +{ + uint32_t src = OPER_AY_DI_8(mc68kcpu); + uint32_t dst = MASK_OUT_ABOVE_8(DX(mc68kcpu)); + uint32_t res = dst - src; + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res); + (mc68kcpu)->v_flag = VFLAG_SUB_8(src, dst, res); + (mc68kcpu)->c_flag = CFLAG_8(res); +} + + +static void m68k_op_cmp_8_ix(m68000_base_device* mc68kcpu) +{ + uint32_t src = OPER_AY_IX_8(mc68kcpu); + uint32_t dst = MASK_OUT_ABOVE_8(DX(mc68kcpu)); + uint32_t res = dst - src; + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res); + (mc68kcpu)->v_flag = VFLAG_SUB_8(src, dst, res); + (mc68kcpu)->c_flag = CFLAG_8(res); +} + + +static void m68k_op_cmp_8_aw(m68000_base_device* mc68kcpu) +{ + uint32_t src = OPER_AW_8(mc68kcpu); + uint32_t dst = MASK_OUT_ABOVE_8(DX(mc68kcpu)); + uint32_t res = dst - src; + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res); + (mc68kcpu)->v_flag = VFLAG_SUB_8(src, dst, res); + (mc68kcpu)->c_flag = CFLAG_8(res); +} + + +static void m68k_op_cmp_8_al(m68000_base_device* mc68kcpu) +{ + uint32_t src = OPER_AL_8(mc68kcpu); + uint32_t dst = MASK_OUT_ABOVE_8(DX(mc68kcpu)); + uint32_t res = dst - src; + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res); + (mc68kcpu)->v_flag = VFLAG_SUB_8(src, dst, res); + (mc68kcpu)->c_flag = CFLAG_8(res); +} + + +static void m68k_op_cmp_8_pcdi(m68000_base_device* mc68kcpu) +{ + uint32_t src = OPER_PCDI_8(mc68kcpu); + uint32_t dst = MASK_OUT_ABOVE_8(DX(mc68kcpu)); + uint32_t res = dst - src; + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res); + (mc68kcpu)->v_flag = VFLAG_SUB_8(src, dst, res); + (mc68kcpu)->c_flag = CFLAG_8(res); +} + + +static void m68k_op_cmp_8_pcix(m68000_base_device* mc68kcpu) +{ + uint32_t src = OPER_PCIX_8(mc68kcpu); + uint32_t dst = MASK_OUT_ABOVE_8(DX(mc68kcpu)); + uint32_t res = dst - src; + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res); + (mc68kcpu)->v_flag = VFLAG_SUB_8(src, dst, res); + (mc68kcpu)->c_flag = CFLAG_8(res); +} + + +static void m68k_op_cmp_8_i(m68000_base_device* mc68kcpu) +{ + uint32_t src = OPER_I_8(mc68kcpu); + uint32_t dst = MASK_OUT_ABOVE_8(DX(mc68kcpu)); + uint32_t res = dst - src; + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res); + (mc68kcpu)->v_flag = VFLAG_SUB_8(src, dst, res); + (mc68kcpu)->c_flag = CFLAG_8(res); +} + + +static void m68k_op_cmp_16_d(m68000_base_device* mc68kcpu) +{ + uint32_t src = MASK_OUT_ABOVE_16(DY(mc68kcpu)); + uint32_t dst = MASK_OUT_ABOVE_16(DX(mc68kcpu)); + uint32_t res = dst - src; + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res); + (mc68kcpu)->v_flag = VFLAG_SUB_16(src, dst, res); + (mc68kcpu)->c_flag = CFLAG_16(res); +} + + +static void m68k_op_cmp_16_a(m68000_base_device* mc68kcpu) +{ + uint32_t src = MASK_OUT_ABOVE_16(AY(mc68kcpu)); + uint32_t dst = MASK_OUT_ABOVE_16(DX(mc68kcpu)); + uint32_t res = dst - src; + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res); + (mc68kcpu)->v_flag = VFLAG_SUB_16(src, dst, res); + (mc68kcpu)->c_flag = CFLAG_16(res); +} + + +static void m68k_op_cmp_16_ai(m68000_base_device* mc68kcpu) +{ + uint32_t src = OPER_AY_AI_16(mc68kcpu); + uint32_t dst = MASK_OUT_ABOVE_16(DX(mc68kcpu)); + uint32_t res = dst - src; + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res); + (mc68kcpu)->v_flag = VFLAG_SUB_16(src, dst, res); + (mc68kcpu)->c_flag = CFLAG_16(res); +} + + +static void m68k_op_cmp_16_pi(m68000_base_device* mc68kcpu) +{ + uint32_t src = OPER_AY_PI_16(mc68kcpu); + uint32_t dst = MASK_OUT_ABOVE_16(DX(mc68kcpu)); + uint32_t res = dst - src; + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res); + (mc68kcpu)->v_flag = VFLAG_SUB_16(src, dst, res); + (mc68kcpu)->c_flag = CFLAG_16(res); +} + + +static void m68k_op_cmp_16_pd(m68000_base_device* mc68kcpu) +{ + uint32_t src = OPER_AY_PD_16(mc68kcpu); + uint32_t dst = MASK_OUT_ABOVE_16(DX(mc68kcpu)); + uint32_t res = dst - src; + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res); + (mc68kcpu)->v_flag = VFLAG_SUB_16(src, dst, res); + (mc68kcpu)->c_flag = CFLAG_16(res); +} + + +static void m68k_op_cmp_16_di(m68000_base_device* mc68kcpu) +{ + uint32_t src = OPER_AY_DI_16(mc68kcpu); + uint32_t dst = MASK_OUT_ABOVE_16(DX(mc68kcpu)); + uint32_t res = dst - src; + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res); + (mc68kcpu)->v_flag = VFLAG_SUB_16(src, dst, res); + (mc68kcpu)->c_flag = CFLAG_16(res); +} + + +static void m68k_op_cmp_16_ix(m68000_base_device* mc68kcpu) +{ + uint32_t src = OPER_AY_IX_16(mc68kcpu); + uint32_t dst = MASK_OUT_ABOVE_16(DX(mc68kcpu)); + uint32_t res = dst - src; + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res); + (mc68kcpu)->v_flag = VFLAG_SUB_16(src, dst, res); + (mc68kcpu)->c_flag = CFLAG_16(res); +} + + +static void m68k_op_cmp_16_aw(m68000_base_device* mc68kcpu) +{ + uint32_t src = OPER_AW_16(mc68kcpu); + uint32_t dst = MASK_OUT_ABOVE_16(DX(mc68kcpu)); + uint32_t res = dst - src; + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res); + (mc68kcpu)->v_flag = VFLAG_SUB_16(src, dst, res); + (mc68kcpu)->c_flag = CFLAG_16(res); +} + + +static void m68k_op_cmp_16_al(m68000_base_device* mc68kcpu) +{ + uint32_t src = OPER_AL_16(mc68kcpu); + uint32_t dst = MASK_OUT_ABOVE_16(DX(mc68kcpu)); + uint32_t res = dst - src; + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res); + (mc68kcpu)->v_flag = VFLAG_SUB_16(src, dst, res); + (mc68kcpu)->c_flag = CFLAG_16(res); +} + + +static void m68k_op_cmp_16_pcdi(m68000_base_device* mc68kcpu) +{ + uint32_t src = OPER_PCDI_16(mc68kcpu); + uint32_t dst = MASK_OUT_ABOVE_16(DX(mc68kcpu)); + uint32_t res = dst - src; + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res); + (mc68kcpu)->v_flag = VFLAG_SUB_16(src, dst, res); + (mc68kcpu)->c_flag = CFLAG_16(res); +} + + +static void m68k_op_cmp_16_pcix(m68000_base_device* mc68kcpu) +{ + uint32_t src = OPER_PCIX_16(mc68kcpu); + uint32_t dst = MASK_OUT_ABOVE_16(DX(mc68kcpu)); + uint32_t res = dst - src; + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res); + (mc68kcpu)->v_flag = VFLAG_SUB_16(src, dst, res); + (mc68kcpu)->c_flag = CFLAG_16(res); +} + + +static void m68k_op_cmp_16_i(m68000_base_device* mc68kcpu) +{ + uint32_t src = OPER_I_16(mc68kcpu); + uint32_t dst = MASK_OUT_ABOVE_16(DX(mc68kcpu)); + uint32_t res = dst - src; + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res); + (mc68kcpu)->v_flag = VFLAG_SUB_16(src, dst, res); + (mc68kcpu)->c_flag = CFLAG_16(res); +} + + +static void m68k_op_cmp_32_d(m68000_base_device* mc68kcpu) +{ + uint32_t src = DY(mc68kcpu); + uint32_t dst = DX(mc68kcpu); + uint32_t res = dst - src; + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res); + (mc68kcpu)->v_flag = VFLAG_SUB_32(src, dst, res); + (mc68kcpu)->c_flag = CFLAG_SUB_32(src, dst, res); +} + + +static void m68k_op_cmp_32_a(m68000_base_device* mc68kcpu) +{ + uint32_t src = AY(mc68kcpu); + uint32_t dst = DX(mc68kcpu); + uint32_t res = dst - src; + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res); + (mc68kcpu)->v_flag = VFLAG_SUB_32(src, dst, res); + (mc68kcpu)->c_flag = CFLAG_SUB_32(src, dst, res); +} + + +static void m68k_op_cmp_32_ai(m68000_base_device* mc68kcpu) +{ + uint32_t src = OPER_AY_AI_32(mc68kcpu); + uint32_t dst = DX(mc68kcpu); + uint32_t res = dst - src; + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res); + (mc68kcpu)->v_flag = VFLAG_SUB_32(src, dst, res); + (mc68kcpu)->c_flag = CFLAG_SUB_32(src, dst, res); +} + + +static void m68k_op_cmp_32_pi(m68000_base_device* mc68kcpu) +{ + uint32_t src = OPER_AY_PI_32(mc68kcpu); + uint32_t dst = DX(mc68kcpu); + uint32_t res = dst - src; + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res); + (mc68kcpu)->v_flag = VFLAG_SUB_32(src, dst, res); + (mc68kcpu)->c_flag = CFLAG_SUB_32(src, dst, res); +} + + +static void m68k_op_cmp_32_pd(m68000_base_device* mc68kcpu) +{ + uint32_t src = OPER_AY_PD_32(mc68kcpu); + uint32_t dst = DX(mc68kcpu); + uint32_t res = dst - src; + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res); + (mc68kcpu)->v_flag = VFLAG_SUB_32(src, dst, res); + (mc68kcpu)->c_flag = CFLAG_SUB_32(src, dst, res); +} + + +static void m68k_op_cmp_32_di(m68000_base_device* mc68kcpu) +{ + uint32_t src = OPER_AY_DI_32(mc68kcpu); + uint32_t dst = DX(mc68kcpu); + uint32_t res = dst - src; + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res); + (mc68kcpu)->v_flag = VFLAG_SUB_32(src, dst, res); + (mc68kcpu)->c_flag = CFLAG_SUB_32(src, dst, res); +} + + +static void m68k_op_cmp_32_ix(m68000_base_device* mc68kcpu) +{ + uint32_t src = OPER_AY_IX_32(mc68kcpu); + uint32_t dst = DX(mc68kcpu); + uint32_t res = dst - src; + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res); + (mc68kcpu)->v_flag = VFLAG_SUB_32(src, dst, res); + (mc68kcpu)->c_flag = CFLAG_SUB_32(src, dst, res); +} + + +static void m68k_op_cmp_32_aw(m68000_base_device* mc68kcpu) +{ + uint32_t src = OPER_AW_32(mc68kcpu); + uint32_t dst = DX(mc68kcpu); + uint32_t res = dst - src; + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res); + (mc68kcpu)->v_flag = VFLAG_SUB_32(src, dst, res); + (mc68kcpu)->c_flag = CFLAG_SUB_32(src, dst, res); +} + + +static void m68k_op_cmp_32_al(m68000_base_device* mc68kcpu) +{ + uint32_t src = OPER_AL_32(mc68kcpu); + uint32_t dst = DX(mc68kcpu); + uint32_t res = dst - src; + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res); + (mc68kcpu)->v_flag = VFLAG_SUB_32(src, dst, res); + (mc68kcpu)->c_flag = CFLAG_SUB_32(src, dst, res); +} + + +static void m68k_op_cmp_32_pcdi(m68000_base_device* mc68kcpu) +{ + uint32_t src = OPER_PCDI_32(mc68kcpu); + uint32_t dst = DX(mc68kcpu); + uint32_t res = dst - src; + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res); + (mc68kcpu)->v_flag = VFLAG_SUB_32(src, dst, res); + (mc68kcpu)->c_flag = CFLAG_SUB_32(src, dst, res); +} + + +static void m68k_op_cmp_32_pcix(m68000_base_device* mc68kcpu) +{ + uint32_t src = OPER_PCIX_32(mc68kcpu); + uint32_t dst = DX(mc68kcpu); + uint32_t res = dst - src; + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res); + (mc68kcpu)->v_flag = VFLAG_SUB_32(src, dst, res); + (mc68kcpu)->c_flag = CFLAG_SUB_32(src, dst, res); +} + + +static void m68k_op_cmp_32_i(m68000_base_device* mc68kcpu) +{ + uint32_t src = OPER_I_32(mc68kcpu); + uint32_t dst = DX(mc68kcpu); + uint32_t res = dst - src; + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res); + (mc68kcpu)->v_flag = VFLAG_SUB_32(src, dst, res); + (mc68kcpu)->c_flag = CFLAG_SUB_32(src, dst, res); +} + + +static void m68k_op_cmpa_16_d(m68000_base_device* mc68kcpu) +{ + uint32_t src = MAKE_INT_16(DY(mc68kcpu)); + uint32_t dst = AX(mc68kcpu); + uint32_t res = dst - src; + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res); + (mc68kcpu)->v_flag = VFLAG_SUB_32(src, dst, res); + (mc68kcpu)->c_flag = CFLAG_SUB_32(src, dst, res); +} + + +static void m68k_op_cmpa_16_a(m68000_base_device* mc68kcpu) +{ + uint32_t src = MAKE_INT_16(AY(mc68kcpu)); + uint32_t dst = AX(mc68kcpu); + uint32_t res = dst - src; + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res); + (mc68kcpu)->v_flag = VFLAG_SUB_32(src, dst, res); + (mc68kcpu)->c_flag = CFLAG_SUB_32(src, dst, res); +} + + +static void m68k_op_cmpa_16_ai(m68000_base_device* mc68kcpu) +{ + uint32_t src = MAKE_INT_16(OPER_AY_AI_16(mc68kcpu)); + uint32_t dst = AX(mc68kcpu); + uint32_t res = dst - src; + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res); + (mc68kcpu)->v_flag = VFLAG_SUB_32(src, dst, res); + (mc68kcpu)->c_flag = CFLAG_SUB_32(src, dst, res); +} + + +static void m68k_op_cmpa_16_pi(m68000_base_device* mc68kcpu) +{ + uint32_t src = MAKE_INT_16(OPER_AY_PI_16(mc68kcpu)); + uint32_t dst = AX(mc68kcpu); + uint32_t res = dst - src; + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res); + (mc68kcpu)->v_flag = VFLAG_SUB_32(src, dst, res); + (mc68kcpu)->c_flag = CFLAG_SUB_32(src, dst, res); +} + + +static void m68k_op_cmpa_16_pd(m68000_base_device* mc68kcpu) +{ + uint32_t src = MAKE_INT_16(OPER_AY_PD_16(mc68kcpu)); + uint32_t dst = AX(mc68kcpu); + uint32_t res = dst - src; + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res); + (mc68kcpu)->v_flag = VFLAG_SUB_32(src, dst, res); + (mc68kcpu)->c_flag = CFLAG_SUB_32(src, dst, res); +} + + +static void m68k_op_cmpa_16_di(m68000_base_device* mc68kcpu) +{ + uint32_t src = MAKE_INT_16(OPER_AY_DI_16(mc68kcpu)); + uint32_t dst = AX(mc68kcpu); + uint32_t res = dst - src; + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res); + (mc68kcpu)->v_flag = VFLAG_SUB_32(src, dst, res); + (mc68kcpu)->c_flag = CFLAG_SUB_32(src, dst, res); +} + + +static void m68k_op_cmpa_16_ix(m68000_base_device* mc68kcpu) +{ + uint32_t src = MAKE_INT_16(OPER_AY_IX_16(mc68kcpu)); + uint32_t dst = AX(mc68kcpu); + uint32_t res = dst - src; + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res); + (mc68kcpu)->v_flag = VFLAG_SUB_32(src, dst, res); + (mc68kcpu)->c_flag = CFLAG_SUB_32(src, dst, res); +} + + +static void m68k_op_cmpa_16_aw(m68000_base_device* mc68kcpu) +{ + uint32_t src = MAKE_INT_16(OPER_AW_16(mc68kcpu)); + uint32_t dst = AX(mc68kcpu); + uint32_t res = dst - src; + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res); + (mc68kcpu)->v_flag = VFLAG_SUB_32(src, dst, res); + (mc68kcpu)->c_flag = CFLAG_SUB_32(src, dst, res); +} + + +static void m68k_op_cmpa_16_al(m68000_base_device* mc68kcpu) +{ + uint32_t src = MAKE_INT_16(OPER_AL_16(mc68kcpu)); + uint32_t dst = AX(mc68kcpu); + uint32_t res = dst - src; + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res); + (mc68kcpu)->v_flag = VFLAG_SUB_32(src, dst, res); + (mc68kcpu)->c_flag = CFLAG_SUB_32(src, dst, res); +} + + +static void m68k_op_cmpa_16_pcdi(m68000_base_device* mc68kcpu) +{ + uint32_t src = MAKE_INT_16(OPER_PCDI_16(mc68kcpu)); + uint32_t dst = AX(mc68kcpu); + uint32_t res = dst - src; + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res); + (mc68kcpu)->v_flag = VFLAG_SUB_32(src, dst, res); + (mc68kcpu)->c_flag = CFLAG_SUB_32(src, dst, res); +} + + +static void m68k_op_cmpa_16_pcix(m68000_base_device* mc68kcpu) +{ + uint32_t src = MAKE_INT_16(OPER_PCIX_16(mc68kcpu)); + uint32_t dst = AX(mc68kcpu); + uint32_t res = dst - src; + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res); + (mc68kcpu)->v_flag = VFLAG_SUB_32(src, dst, res); + (mc68kcpu)->c_flag = CFLAG_SUB_32(src, dst, res); +} + + +static void m68k_op_cmpa_16_i(m68000_base_device* mc68kcpu) +{ + uint32_t src = MAKE_INT_16(OPER_I_16(mc68kcpu)); + uint32_t dst = AX(mc68kcpu); + uint32_t res = dst - src; + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res); + (mc68kcpu)->v_flag = VFLAG_SUB_32(src, dst, res); + (mc68kcpu)->c_flag = CFLAG_SUB_32(src, dst, res); +} + + +static void m68k_op_cmpa_32_d(m68000_base_device* mc68kcpu) +{ + uint32_t src = DY(mc68kcpu); + uint32_t dst = AX(mc68kcpu); + uint32_t res = dst - src; + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res); + (mc68kcpu)->v_flag = VFLAG_SUB_32(src, dst, res); + (mc68kcpu)->c_flag = CFLAG_SUB_32(src, dst, res); +} + + +static void m68k_op_cmpa_32_a(m68000_base_device* mc68kcpu) +{ + uint32_t src = AY(mc68kcpu); + uint32_t dst = AX(mc68kcpu); + uint32_t res = dst - src; + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res); + (mc68kcpu)->v_flag = VFLAG_SUB_32(src, dst, res); + (mc68kcpu)->c_flag = CFLAG_SUB_32(src, dst, res); +} + + +static void m68k_op_cmpa_32_ai(m68000_base_device* mc68kcpu) +{ + uint32_t src = OPER_AY_AI_32(mc68kcpu); + uint32_t dst = AX(mc68kcpu); + uint32_t res = dst - src; + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res); + (mc68kcpu)->v_flag = VFLAG_SUB_32(src, dst, res); + (mc68kcpu)->c_flag = CFLAG_SUB_32(src, dst, res); +} + + +static void m68k_op_cmpa_32_pi(m68000_base_device* mc68kcpu) +{ + uint32_t src = OPER_AY_PI_32(mc68kcpu); + uint32_t dst = AX(mc68kcpu); + uint32_t res = dst - src; + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res); + (mc68kcpu)->v_flag = VFLAG_SUB_32(src, dst, res); + (mc68kcpu)->c_flag = CFLAG_SUB_32(src, dst, res); +} + + +static void m68k_op_cmpa_32_pd(m68000_base_device* mc68kcpu) +{ + uint32_t src = OPER_AY_PD_32(mc68kcpu); + uint32_t dst = AX(mc68kcpu); + uint32_t res = dst - src; + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res); + (mc68kcpu)->v_flag = VFLAG_SUB_32(src, dst, res); + (mc68kcpu)->c_flag = CFLAG_SUB_32(src, dst, res); +} + + +static void m68k_op_cmpa_32_di(m68000_base_device* mc68kcpu) +{ + uint32_t src = OPER_AY_DI_32(mc68kcpu); + uint32_t dst = AX(mc68kcpu); + uint32_t res = dst - src; + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res); + (mc68kcpu)->v_flag = VFLAG_SUB_32(src, dst, res); + (mc68kcpu)->c_flag = CFLAG_SUB_32(src, dst, res); +} + + +static void m68k_op_cmpa_32_ix(m68000_base_device* mc68kcpu) +{ + uint32_t src = OPER_AY_IX_32(mc68kcpu); + uint32_t dst = AX(mc68kcpu); + uint32_t res = dst - src; + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res); + (mc68kcpu)->v_flag = VFLAG_SUB_32(src, dst, res); + (mc68kcpu)->c_flag = CFLAG_SUB_32(src, dst, res); +} + + +static void m68k_op_cmpa_32_aw(m68000_base_device* mc68kcpu) +{ + uint32_t src = OPER_AW_32(mc68kcpu); + uint32_t dst = AX(mc68kcpu); + uint32_t res = dst - src; + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res); + (mc68kcpu)->v_flag = VFLAG_SUB_32(src, dst, res); + (mc68kcpu)->c_flag = CFLAG_SUB_32(src, dst, res); +} + + +static void m68k_op_cmpa_32_al(m68000_base_device* mc68kcpu) +{ + uint32_t src = OPER_AL_32(mc68kcpu); + uint32_t dst = AX(mc68kcpu); + uint32_t res = dst - src; + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res); + (mc68kcpu)->v_flag = VFLAG_SUB_32(src, dst, res); + (mc68kcpu)->c_flag = CFLAG_SUB_32(src, dst, res); +} + + +static void m68k_op_cmpa_32_pcdi(m68000_base_device* mc68kcpu) +{ + uint32_t src = OPER_PCDI_32(mc68kcpu); + uint32_t dst = AX(mc68kcpu); + uint32_t res = dst - src; + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res); + (mc68kcpu)->v_flag = VFLAG_SUB_32(src, dst, res); + (mc68kcpu)->c_flag = CFLAG_SUB_32(src, dst, res); +} + + +static void m68k_op_cmpa_32_pcix(m68000_base_device* mc68kcpu) +{ + uint32_t src = OPER_PCIX_32(mc68kcpu); + uint32_t dst = AX(mc68kcpu); + uint32_t res = dst - src; + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res); + (mc68kcpu)->v_flag = VFLAG_SUB_32(src, dst, res); + (mc68kcpu)->c_flag = CFLAG_SUB_32(src, dst, res); +} + + +static void m68k_op_cmpa_32_i(m68000_base_device* mc68kcpu) +{ + uint32_t src = OPER_I_32(mc68kcpu); + uint32_t dst = AX(mc68kcpu); + uint32_t res = dst - src; + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res); + (mc68kcpu)->v_flag = VFLAG_SUB_32(src, dst, res); + (mc68kcpu)->c_flag = CFLAG_SUB_32(src, dst, res); +} + + +static void m68k_op_cmpi_8_d(m68000_base_device* mc68kcpu) +{ + uint32_t src = OPER_I_8(mc68kcpu); + uint32_t dst = MASK_OUT_ABOVE_8(DY(mc68kcpu)); + uint32_t res = dst - src; + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res); + (mc68kcpu)->v_flag = VFLAG_SUB_8(src, dst, res); + (mc68kcpu)->c_flag = CFLAG_8(res); +} + + +static void m68k_op_cmpi_8_ai(m68000_base_device* mc68kcpu) +{ + uint32_t src = OPER_I_8(mc68kcpu); + uint32_t dst = OPER_AY_AI_8(mc68kcpu); + uint32_t res = dst - src; + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res); + (mc68kcpu)->v_flag = VFLAG_SUB_8(src, dst, res); + (mc68kcpu)->c_flag = CFLAG_8(res); +} + + +static void m68k_op_cmpi_8_pi(m68000_base_device* mc68kcpu) +{ + uint32_t src = OPER_I_8(mc68kcpu); + uint32_t dst = OPER_AY_PI_8(mc68kcpu); + uint32_t res = dst - src; + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res); + (mc68kcpu)->v_flag = VFLAG_SUB_8(src, dst, res); + (mc68kcpu)->c_flag = CFLAG_8(res); +} + + +static void m68k_op_cmpi_8_pi7(m68000_base_device* mc68kcpu) +{ + uint32_t src = OPER_I_8(mc68kcpu); + uint32_t dst = OPER_A7_PI_8(mc68kcpu); + uint32_t res = dst - src; + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res); + (mc68kcpu)->v_flag = VFLAG_SUB_8(src, dst, res); + (mc68kcpu)->c_flag = CFLAG_8(res); +} + + +static void m68k_op_cmpi_8_pd(m68000_base_device* mc68kcpu) +{ + uint32_t src = OPER_I_8(mc68kcpu); + uint32_t dst = OPER_AY_PD_8(mc68kcpu); + uint32_t res = dst - src; + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res); + (mc68kcpu)->v_flag = VFLAG_SUB_8(src, dst, res); + (mc68kcpu)->c_flag = CFLAG_8(res); +} + + +static void m68k_op_cmpi_8_pd7(m68000_base_device* mc68kcpu) +{ + uint32_t src = OPER_I_8(mc68kcpu); + uint32_t dst = OPER_A7_PD_8(mc68kcpu); + uint32_t res = dst - src; + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res); + (mc68kcpu)->v_flag = VFLAG_SUB_8(src, dst, res); + (mc68kcpu)->c_flag = CFLAG_8(res); +} + + +static void m68k_op_cmpi_8_di(m68000_base_device* mc68kcpu) +{ + uint32_t src = OPER_I_8(mc68kcpu); + uint32_t dst = OPER_AY_DI_8(mc68kcpu); + uint32_t res = dst - src; + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res); + (mc68kcpu)->v_flag = VFLAG_SUB_8(src, dst, res); + (mc68kcpu)->c_flag = CFLAG_8(res); +} + + +static void m68k_op_cmpi_8_ix(m68000_base_device* mc68kcpu) +{ + uint32_t src = OPER_I_8(mc68kcpu); + uint32_t dst = OPER_AY_IX_8(mc68kcpu); + uint32_t res = dst - src; + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res); + (mc68kcpu)->v_flag = VFLAG_SUB_8(src, dst, res); + (mc68kcpu)->c_flag = CFLAG_8(res); +} + + +static void m68k_op_cmpi_8_aw(m68000_base_device* mc68kcpu) +{ + uint32_t src = OPER_I_8(mc68kcpu); + uint32_t dst = OPER_AW_8(mc68kcpu); + uint32_t res = dst - src; + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res); + (mc68kcpu)->v_flag = VFLAG_SUB_8(src, dst, res); + (mc68kcpu)->c_flag = CFLAG_8(res); +} + + +static void m68k_op_cmpi_8_al(m68000_base_device* mc68kcpu) +{ + uint32_t src = OPER_I_8(mc68kcpu); + uint32_t dst = OPER_AL_8(mc68kcpu); + uint32_t res = dst - src; + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res); + (mc68kcpu)->v_flag = VFLAG_SUB_8(src, dst, res); + (mc68kcpu)->c_flag = CFLAG_8(res); +} + + +static void m68k_op_cmpi_8_pcdi(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + uint32_t src = OPER_I_8(mc68kcpu); + uint32_t dst = OPER_PCDI_8(mc68kcpu); + uint32_t res = dst - src; + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res); + (mc68kcpu)->v_flag = VFLAG_SUB_8(src, dst, res); + (mc68kcpu)->c_flag = CFLAG_8(res); + return; + } + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_cmpi_8_pcix(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + uint32_t src = OPER_I_8(mc68kcpu); + uint32_t dst = OPER_PCIX_8(mc68kcpu); + uint32_t res = dst - src; + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res); + (mc68kcpu)->v_flag = VFLAG_SUB_8(src, dst, res); + (mc68kcpu)->c_flag = CFLAG_8(res); + return; + } + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_cmpi_16_d(m68000_base_device* mc68kcpu) +{ + uint32_t src = OPER_I_16(mc68kcpu); + uint32_t dst = MASK_OUT_ABOVE_16(DY(mc68kcpu)); + uint32_t res = dst - src; + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res); + (mc68kcpu)->v_flag = VFLAG_SUB_16(src, dst, res); + (mc68kcpu)->c_flag = CFLAG_16(res); +} + + +static void m68k_op_cmpi_16_ai(m68000_base_device* mc68kcpu) +{ + uint32_t src = OPER_I_16(mc68kcpu); + uint32_t dst = OPER_AY_AI_16(mc68kcpu); + uint32_t res = dst - src; + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res); + (mc68kcpu)->v_flag = VFLAG_SUB_16(src, dst, res); + (mc68kcpu)->c_flag = CFLAG_16(res); +} + + +static void m68k_op_cmpi_16_pi(m68000_base_device* mc68kcpu) +{ + uint32_t src = OPER_I_16(mc68kcpu); + uint32_t dst = OPER_AY_PI_16(mc68kcpu); + uint32_t res = dst - src; + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res); + (mc68kcpu)->v_flag = VFLAG_SUB_16(src, dst, res); + (mc68kcpu)->c_flag = CFLAG_16(res); +} + + +static void m68k_op_cmpi_16_pd(m68000_base_device* mc68kcpu) +{ + uint32_t src = OPER_I_16(mc68kcpu); + uint32_t dst = OPER_AY_PD_16(mc68kcpu); + uint32_t res = dst - src; + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res); + (mc68kcpu)->v_flag = VFLAG_SUB_16(src, dst, res); + (mc68kcpu)->c_flag = CFLAG_16(res); +} + + +static void m68k_op_cmpi_16_di(m68000_base_device* mc68kcpu) +{ + uint32_t src = OPER_I_16(mc68kcpu); + uint32_t dst = OPER_AY_DI_16(mc68kcpu); + uint32_t res = dst - src; + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res); + (mc68kcpu)->v_flag = VFLAG_SUB_16(src, dst, res); + (mc68kcpu)->c_flag = CFLAG_16(res); +} + + +static void m68k_op_cmpi_16_ix(m68000_base_device* mc68kcpu) +{ + uint32_t src = OPER_I_16(mc68kcpu); + uint32_t dst = OPER_AY_IX_16(mc68kcpu); + uint32_t res = dst - src; + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res); + (mc68kcpu)->v_flag = VFLAG_SUB_16(src, dst, res); + (mc68kcpu)->c_flag = CFLAG_16(res); +} + + +static void m68k_op_cmpi_16_aw(m68000_base_device* mc68kcpu) +{ + uint32_t src = OPER_I_16(mc68kcpu); + uint32_t dst = OPER_AW_16(mc68kcpu); + uint32_t res = dst - src; + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res); + (mc68kcpu)->v_flag = VFLAG_SUB_16(src, dst, res); + (mc68kcpu)->c_flag = CFLAG_16(res); +} + + +static void m68k_op_cmpi_16_al(m68000_base_device* mc68kcpu) +{ + uint32_t src = OPER_I_16(mc68kcpu); + uint32_t dst = OPER_AL_16(mc68kcpu); + uint32_t res = dst - src; + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res); + (mc68kcpu)->v_flag = VFLAG_SUB_16(src, dst, res); + (mc68kcpu)->c_flag = CFLAG_16(res); +} + + +static void m68k_op_cmpi_16_pcdi(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + uint32_t src = OPER_I_16(mc68kcpu); + uint32_t dst = OPER_PCDI_16(mc68kcpu); + uint32_t res = dst - src; + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res); + (mc68kcpu)->v_flag = VFLAG_SUB_16(src, dst, res); + (mc68kcpu)->c_flag = CFLAG_16(res); + return; + } + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_cmpi_16_pcix(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + uint32_t src = OPER_I_16(mc68kcpu); + uint32_t dst = OPER_PCIX_16(mc68kcpu); + uint32_t res = dst - src; + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res); + (mc68kcpu)->v_flag = VFLAG_SUB_16(src, dst, res); + (mc68kcpu)->c_flag = CFLAG_16(res); + return; + } + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_cmpi_32_d(m68000_base_device* mc68kcpu) +{ + uint32_t src = OPER_I_32(mc68kcpu); + uint32_t dst = DY(mc68kcpu); + uint32_t res = dst - src; + +/* if (!(mc68kcpu)->cmpild_instr_callback.isnull()) + ((mc68kcpu)->cmpild_instr_callback)(*(mc68kcpu)->program, (mc68kcpu)->ir & 7, src, 0xffffffff);*/ + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res); + (mc68kcpu)->v_flag = VFLAG_SUB_32(src, dst, res); + (mc68kcpu)->c_flag = CFLAG_SUB_32(src, dst, res); +} + + +static void m68k_op_cmpi_32_ai(m68000_base_device* mc68kcpu) +{ + uint32_t src = OPER_I_32(mc68kcpu); + uint32_t dst = OPER_AY_AI_32(mc68kcpu); + uint32_t res = dst - src; + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res); + (mc68kcpu)->v_flag = VFLAG_SUB_32(src, dst, res); + (mc68kcpu)->c_flag = CFLAG_SUB_32(src, dst, res); +} + + +static void m68k_op_cmpi_32_pi(m68000_base_device* mc68kcpu) +{ + uint32_t src = OPER_I_32(mc68kcpu); + uint32_t dst = OPER_AY_PI_32(mc68kcpu); + uint32_t res = dst - src; + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res); + (mc68kcpu)->v_flag = VFLAG_SUB_32(src, dst, res); + (mc68kcpu)->c_flag = CFLAG_SUB_32(src, dst, res); +} + + +static void m68k_op_cmpi_32_pd(m68000_base_device* mc68kcpu) +{ + uint32_t src = OPER_I_32(mc68kcpu); + uint32_t dst = OPER_AY_PD_32(mc68kcpu); + uint32_t res = dst - src; + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res); + (mc68kcpu)->v_flag = VFLAG_SUB_32(src, dst, res); + (mc68kcpu)->c_flag = CFLAG_SUB_32(src, dst, res); +} + + +static void m68k_op_cmpi_32_di(m68000_base_device* mc68kcpu) +{ + uint32_t src = OPER_I_32(mc68kcpu); + uint32_t dst = OPER_AY_DI_32(mc68kcpu); + uint32_t res = dst - src; + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res); + (mc68kcpu)->v_flag = VFLAG_SUB_32(src, dst, res); + (mc68kcpu)->c_flag = CFLAG_SUB_32(src, dst, res); +} + + +static void m68k_op_cmpi_32_ix(m68000_base_device* mc68kcpu) +{ + uint32_t src = OPER_I_32(mc68kcpu); + uint32_t dst = OPER_AY_IX_32(mc68kcpu); + uint32_t res = dst - src; + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res); + (mc68kcpu)->v_flag = VFLAG_SUB_32(src, dst, res); + (mc68kcpu)->c_flag = CFLAG_SUB_32(src, dst, res); +} + + +static void m68k_op_cmpi_32_aw(m68000_base_device* mc68kcpu) +{ + uint32_t src = OPER_I_32(mc68kcpu); + uint32_t dst = OPER_AW_32(mc68kcpu); + uint32_t res = dst - src; + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res); + (mc68kcpu)->v_flag = VFLAG_SUB_32(src, dst, res); + (mc68kcpu)->c_flag = CFLAG_SUB_32(src, dst, res); +} + + +static void m68k_op_cmpi_32_al(m68000_base_device* mc68kcpu) +{ + uint32_t src = OPER_I_32(mc68kcpu); + uint32_t dst = OPER_AL_32(mc68kcpu); + uint32_t res = dst - src; + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res); + (mc68kcpu)->v_flag = VFLAG_SUB_32(src, dst, res); + (mc68kcpu)->c_flag = CFLAG_SUB_32(src, dst, res); +} + + +static void m68k_op_cmpi_32_pcdi(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + uint32_t src = OPER_I_32(mc68kcpu); + uint32_t dst = OPER_PCDI_32(mc68kcpu); + uint32_t res = dst - src; + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res); + (mc68kcpu)->v_flag = VFLAG_SUB_32(src, dst, res); + (mc68kcpu)->c_flag = CFLAG_SUB_32(src, dst, res); + return; + } + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_cmpi_32_pcix(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + uint32_t src = OPER_I_32(mc68kcpu); + uint32_t dst = OPER_PCIX_32(mc68kcpu); + uint32_t res = dst - src; + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res); + (mc68kcpu)->v_flag = VFLAG_SUB_32(src, dst, res); + (mc68kcpu)->c_flag = CFLAG_SUB_32(src, dst, res); + return; + } + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_cmpm_8_ax7(m68000_base_device* mc68kcpu) +{ + uint32_t src = OPER_AY_PI_8(mc68kcpu); + uint32_t dst = OPER_A7_PI_8(mc68kcpu); + uint32_t res = dst - src; + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res); + (mc68kcpu)->v_flag = VFLAG_SUB_8(src, dst, res); + (mc68kcpu)->c_flag = CFLAG_8(res); +} + + +static void m68k_op_cmpm_8_ay7(m68000_base_device* mc68kcpu) +{ + uint32_t src = OPER_A7_PI_8(mc68kcpu); + uint32_t dst = OPER_AX_PI_8(mc68kcpu); + uint32_t res = dst - src; + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res); + (mc68kcpu)->v_flag = VFLAG_SUB_8(src, dst, res); + (mc68kcpu)->c_flag = CFLAG_8(res); +} + + +static void m68k_op_cmpm_8_axy7(m68000_base_device* mc68kcpu) +{ + uint32_t src = OPER_A7_PI_8(mc68kcpu); + uint32_t dst = OPER_A7_PI_8(mc68kcpu); + uint32_t res = dst - src; + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res); + (mc68kcpu)->v_flag = VFLAG_SUB_8(src, dst, res); + (mc68kcpu)->c_flag = CFLAG_8(res); +} + + +static void m68k_op_cmpm_8(m68000_base_device* mc68kcpu) +{ + uint32_t src = OPER_AY_PI_8(mc68kcpu); + uint32_t dst = OPER_AX_PI_8(mc68kcpu); + uint32_t res = dst - src; + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res); + (mc68kcpu)->v_flag = VFLAG_SUB_8(src, dst, res); + (mc68kcpu)->c_flag = CFLAG_8(res); +} + + +static void m68k_op_cmpm_16(m68000_base_device* mc68kcpu) +{ + uint32_t src = OPER_AY_PI_16(mc68kcpu); + uint32_t dst = OPER_AX_PI_16(mc68kcpu); + uint32_t res = dst - src; + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res); + (mc68kcpu)->v_flag = VFLAG_SUB_16(src, dst, res); + (mc68kcpu)->c_flag = CFLAG_16(res); +} + + +static void m68k_op_cmpm_32(m68000_base_device* mc68kcpu) +{ + uint32_t src = OPER_AY_PI_32(mc68kcpu); + uint32_t dst = OPER_AX_PI_32(mc68kcpu); + uint32_t res = dst - src; + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res); + (mc68kcpu)->v_flag = VFLAG_SUB_32(src, dst, res); + (mc68kcpu)->c_flag = CFLAG_SUB_32(src, dst, res); +} + + +static void m68k_op_cpbcc_32(m68000_base_device* mc68kcpu) +{ + /*if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + mc68kcpu->logerror("%s at %08x: called unimplemented instruction %04x (cpbcc)\n", + (mc68kcpu)->tag(), REG_PC(mc68kcpu) - 2, (mc68kcpu)->ir); + return; + }*/ + m68ki_exception_1111(mc68kcpu); +} + + +static void m68k_op_cpdbcc_32(m68000_base_device* mc68kcpu) +{ + /*if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + mc68kcpu->logerror("%s at %08x: called unimplemented instruction %04x (cpdbcc)\n", + (mc68kcpu)->tag(), REG_PC(mc68kcpu) - 2, (mc68kcpu)->ir); + return; + }*/ + m68ki_exception_1111(mc68kcpu); +} + + +static void m68k_op_cpgen_32(m68000_base_device* mc68kcpu) +{ + /*if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type) && (mc68kcpu->get_fpu_enable() || mc68kcpu->has_pmmu)) + { + mc68kcpu->logerror("%s at %08x: called unimplemented instruction %04x (cpgen)\n", + (mc68kcpu)->tag(), REG_PC(mc68kcpu) - 2, (mc68kcpu)->ir); + return; + }*/ + m68ki_exception_1111(mc68kcpu); +} + + +static void m68k_op_cpscc_32(m68000_base_device* mc68kcpu) +{ + /*if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + mc68kcpu->logerror("%s at %08x: called unimplemented instruction %04x (cpscc)\n", + (mc68kcpu)->tag(), REG_PC(mc68kcpu) - 2, (mc68kcpu)->ir); + return; + }*/ + m68ki_exception_1111(mc68kcpu); +} + + +static void m68k_op_cptrapcc_32(m68000_base_device* mc68kcpu) +{ + /*if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + mc68kcpu->logerror("%s at %08x: called unimplemented instruction %04x (cptrapcc)\n", + (mc68kcpu)->tag(), REG_PC(mc68kcpu) - 2, (mc68kcpu)->ir); + return; + }*/ + m68ki_exception_1111(mc68kcpu); +} + + +static void m68k_op_ftrapcc_32(m68000_base_device* mc68kcpu) +{ +/* if((mc68kcpu)->get_fpu_enable()) + { + m68881_ftrap(mc68kcpu); + return; + }*/ + m68ki_exception_1111(mc68kcpu); +} + + +static void m68k_op_dbt_16(m68000_base_device* mc68kcpu) +{ + REG_PC(mc68kcpu) += 2; +} + + +static void m68k_op_dbf_16(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &DY(mc68kcpu); + uint32_t res = MASK_OUT_ABOVE_16(*r_dst - 1); + + *r_dst = MASK_OUT_BELOW_16(*r_dst) | res; + if(res != 0xffff) + { + uint32_t offset = OPER_I_16(mc68kcpu); + REG_PC(mc68kcpu) -= 2; + m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */ + m68ki_branch_16((mc68kcpu), offset); + (mc68kcpu)->c.current_cycle += (mc68kcpu)->cyc_dbcc_f_noexp; + return; + } + REG_PC(mc68kcpu) += 2; + (mc68kcpu)->c.current_cycle += (mc68kcpu)->cyc_dbcc_f_exp; +} + + +static void m68k_op_dbhi_16(m68000_base_device* mc68kcpu) +{ + if(COND_NOT_HI(mc68kcpu)) + { + uint32_t* r_dst = &DY(mc68kcpu); + uint32_t res = MASK_OUT_ABOVE_16(*r_dst - 1); + + *r_dst = MASK_OUT_BELOW_16(*r_dst) | res; + if(res != 0xffff) + { + uint32_t offset = OPER_I_16(mc68kcpu); + REG_PC(mc68kcpu) -= 2; + m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */ + m68ki_branch_16((mc68kcpu), offset); + (mc68kcpu)->c.current_cycle += (mc68kcpu)->cyc_dbcc_f_noexp; + return; + } + REG_PC(mc68kcpu) += 2; + (mc68kcpu)->c.current_cycle += (mc68kcpu)->cyc_dbcc_f_exp; + return; + } + REG_PC(mc68kcpu) += 2; +} + + +static void m68k_op_dbls_16(m68000_base_device* mc68kcpu) +{ + if(COND_NOT_LS(mc68kcpu)) + { + uint32_t* r_dst = &DY(mc68kcpu); + uint32_t res = MASK_OUT_ABOVE_16(*r_dst - 1); + + *r_dst = MASK_OUT_BELOW_16(*r_dst) | res; + if(res != 0xffff) + { + uint32_t offset = OPER_I_16(mc68kcpu); + REG_PC(mc68kcpu) -= 2; + m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */ + m68ki_branch_16((mc68kcpu), offset); + (mc68kcpu)->c.current_cycle += (mc68kcpu)->cyc_dbcc_f_noexp; + return; + } + REG_PC(mc68kcpu) += 2; + (mc68kcpu)->c.current_cycle += (mc68kcpu)->cyc_dbcc_f_exp; + return; + } + REG_PC(mc68kcpu) += 2; +} + + +static void m68k_op_dbcc_16(m68000_base_device* mc68kcpu) +{ + if(COND_NOT_CC(mc68kcpu)) + { + uint32_t* r_dst = &DY(mc68kcpu); + uint32_t res = MASK_OUT_ABOVE_16(*r_dst - 1); + + *r_dst = MASK_OUT_BELOW_16(*r_dst) | res; + if(res != 0xffff) + { + uint32_t offset = OPER_I_16(mc68kcpu); + REG_PC(mc68kcpu) -= 2; + m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */ + m68ki_branch_16((mc68kcpu), offset); + (mc68kcpu)->c.current_cycle += (mc68kcpu)->cyc_dbcc_f_noexp; + return; + } + REG_PC(mc68kcpu) += 2; + (mc68kcpu)->c.current_cycle += (mc68kcpu)->cyc_dbcc_f_exp; + return; + } + REG_PC(mc68kcpu) += 2; +} + + +static void m68k_op_dbcs_16(m68000_base_device* mc68kcpu) +{ + if(COND_NOT_CS(mc68kcpu)) + { + uint32_t* r_dst = &DY(mc68kcpu); + uint32_t res = MASK_OUT_ABOVE_16(*r_dst - 1); + + *r_dst = MASK_OUT_BELOW_16(*r_dst) | res; + if(res != 0xffff) + { + uint32_t offset = OPER_I_16(mc68kcpu); + REG_PC(mc68kcpu) -= 2; + m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */ + m68ki_branch_16((mc68kcpu), offset); + (mc68kcpu)->c.current_cycle += (mc68kcpu)->cyc_dbcc_f_noexp; + return; + } + REG_PC(mc68kcpu) += 2; + (mc68kcpu)->c.current_cycle += (mc68kcpu)->cyc_dbcc_f_exp; + return; + } + REG_PC(mc68kcpu) += 2; +} + + +static void m68k_op_dbne_16(m68000_base_device* mc68kcpu) +{ + if(COND_NOT_NE(mc68kcpu)) + { + uint32_t* r_dst = &DY(mc68kcpu); + uint32_t res = MASK_OUT_ABOVE_16(*r_dst - 1); + + *r_dst = MASK_OUT_BELOW_16(*r_dst) | res; + if(res != 0xffff) + { + uint32_t offset = OPER_I_16(mc68kcpu); + REG_PC(mc68kcpu) -= 2; + m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */ + m68ki_branch_16((mc68kcpu), offset); + (mc68kcpu)->c.current_cycle += (mc68kcpu)->cyc_dbcc_f_noexp; + return; + } + REG_PC(mc68kcpu) += 2; + (mc68kcpu)->c.current_cycle += (mc68kcpu)->cyc_dbcc_f_exp; + return; + } + REG_PC(mc68kcpu) += 2; +} + + +static void m68k_op_dbeq_16(m68000_base_device* mc68kcpu) +{ + if(COND_NOT_EQ(mc68kcpu)) + { + uint32_t* r_dst = &DY(mc68kcpu); + uint32_t res = MASK_OUT_ABOVE_16(*r_dst - 1); + + *r_dst = MASK_OUT_BELOW_16(*r_dst) | res; + if(res != 0xffff) + { + uint32_t offset = OPER_I_16(mc68kcpu); + REG_PC(mc68kcpu) -= 2; + m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */ + m68ki_branch_16((mc68kcpu), offset); + (mc68kcpu)->c.current_cycle += (mc68kcpu)->cyc_dbcc_f_noexp; + return; + } + REG_PC(mc68kcpu) += 2; + (mc68kcpu)->c.current_cycle += (mc68kcpu)->cyc_dbcc_f_exp; + return; + } + REG_PC(mc68kcpu) += 2; +} + + +static void m68k_op_dbvc_16(m68000_base_device* mc68kcpu) +{ + if(COND_NOT_VC(mc68kcpu)) + { + uint32_t* r_dst = &DY(mc68kcpu); + uint32_t res = MASK_OUT_ABOVE_16(*r_dst - 1); + + *r_dst = MASK_OUT_BELOW_16(*r_dst) | res; + if(res != 0xffff) + { + uint32_t offset = OPER_I_16(mc68kcpu); + REG_PC(mc68kcpu) -= 2; + m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */ + m68ki_branch_16((mc68kcpu), offset); + (mc68kcpu)->c.current_cycle += (mc68kcpu)->cyc_dbcc_f_noexp; + return; + } + REG_PC(mc68kcpu) += 2; + (mc68kcpu)->c.current_cycle += (mc68kcpu)->cyc_dbcc_f_exp; + return; + } + REG_PC(mc68kcpu) += 2; +} + + +static void m68k_op_dbvs_16(m68000_base_device* mc68kcpu) +{ + if(COND_NOT_VS(mc68kcpu)) + { + uint32_t* r_dst = &DY(mc68kcpu); + uint32_t res = MASK_OUT_ABOVE_16(*r_dst - 1); + + *r_dst = MASK_OUT_BELOW_16(*r_dst) | res; + if(res != 0xffff) + { + uint32_t offset = OPER_I_16(mc68kcpu); + REG_PC(mc68kcpu) -= 2; + m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */ + m68ki_branch_16((mc68kcpu), offset); + (mc68kcpu)->c.current_cycle += (mc68kcpu)->cyc_dbcc_f_noexp; + return; + } + REG_PC(mc68kcpu) += 2; + (mc68kcpu)->c.current_cycle += (mc68kcpu)->cyc_dbcc_f_exp; + return; + } + REG_PC(mc68kcpu) += 2; +} + + +static void m68k_op_dbpl_16(m68000_base_device* mc68kcpu) +{ + if(COND_NOT_PL(mc68kcpu)) + { + uint32_t* r_dst = &DY(mc68kcpu); + uint32_t res = MASK_OUT_ABOVE_16(*r_dst - 1); + + *r_dst = MASK_OUT_BELOW_16(*r_dst) | res; + if(res != 0xffff) + { + uint32_t offset = OPER_I_16(mc68kcpu); + REG_PC(mc68kcpu) -= 2; + m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */ + m68ki_branch_16((mc68kcpu), offset); + (mc68kcpu)->c.current_cycle += (mc68kcpu)->cyc_dbcc_f_noexp; + return; + } + REG_PC(mc68kcpu) += 2; + (mc68kcpu)->c.current_cycle += (mc68kcpu)->cyc_dbcc_f_exp; + return; + } + REG_PC(mc68kcpu) += 2; +} + + +static void m68k_op_dbmi_16(m68000_base_device* mc68kcpu) +{ + if(COND_NOT_MI(mc68kcpu)) + { + uint32_t* r_dst = &DY(mc68kcpu); + uint32_t res = MASK_OUT_ABOVE_16(*r_dst - 1); + + *r_dst = MASK_OUT_BELOW_16(*r_dst) | res; + if(res != 0xffff) + { + uint32_t offset = OPER_I_16(mc68kcpu); + REG_PC(mc68kcpu) -= 2; + m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */ + m68ki_branch_16((mc68kcpu), offset); + (mc68kcpu)->c.current_cycle += (mc68kcpu)->cyc_dbcc_f_noexp; + return; + } + REG_PC(mc68kcpu) += 2; + (mc68kcpu)->c.current_cycle += (mc68kcpu)->cyc_dbcc_f_exp; + return; + } + REG_PC(mc68kcpu) += 2; +} + + +static void m68k_op_dbge_16(m68000_base_device* mc68kcpu) +{ + if(COND_NOT_GE(mc68kcpu)) + { + uint32_t* r_dst = &DY(mc68kcpu); + uint32_t res = MASK_OUT_ABOVE_16(*r_dst - 1); + + *r_dst = MASK_OUT_BELOW_16(*r_dst) | res; + if(res != 0xffff) + { + uint32_t offset = OPER_I_16(mc68kcpu); + REG_PC(mc68kcpu) -= 2; + m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */ + m68ki_branch_16((mc68kcpu), offset); + (mc68kcpu)->c.current_cycle += (mc68kcpu)->cyc_dbcc_f_noexp; + return; + } + REG_PC(mc68kcpu) += 2; + (mc68kcpu)->c.current_cycle += (mc68kcpu)->cyc_dbcc_f_exp; + return; + } + REG_PC(mc68kcpu) += 2; +} + + +static void m68k_op_dblt_16(m68000_base_device* mc68kcpu) +{ + if(COND_NOT_LT(mc68kcpu)) + { + uint32_t* r_dst = &DY(mc68kcpu); + uint32_t res = MASK_OUT_ABOVE_16(*r_dst - 1); + + *r_dst = MASK_OUT_BELOW_16(*r_dst) | res; + if(res != 0xffff) + { + uint32_t offset = OPER_I_16(mc68kcpu); + REG_PC(mc68kcpu) -= 2; + m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */ + m68ki_branch_16((mc68kcpu), offset); + (mc68kcpu)->c.current_cycle += (mc68kcpu)->cyc_dbcc_f_noexp; + return; + } + REG_PC(mc68kcpu) += 2; + (mc68kcpu)->c.current_cycle += (mc68kcpu)->cyc_dbcc_f_exp; + return; + } + REG_PC(mc68kcpu) += 2; +} + + +static void m68k_op_dbgt_16(m68000_base_device* mc68kcpu) +{ + if(COND_NOT_GT(mc68kcpu)) + { + uint32_t* r_dst = &DY(mc68kcpu); + uint32_t res = MASK_OUT_ABOVE_16(*r_dst - 1); + + *r_dst = MASK_OUT_BELOW_16(*r_dst) | res; + if(res != 0xffff) + { + uint32_t offset = OPER_I_16(mc68kcpu); + REG_PC(mc68kcpu) -= 2; + m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */ + m68ki_branch_16((mc68kcpu), offset); + (mc68kcpu)->c.current_cycle += (mc68kcpu)->cyc_dbcc_f_noexp; + return; + } + REG_PC(mc68kcpu) += 2; + (mc68kcpu)->c.current_cycle += (mc68kcpu)->cyc_dbcc_f_exp; + return; + } + REG_PC(mc68kcpu) += 2; +} + + +static void m68k_op_dble_16(m68000_base_device* mc68kcpu) +{ + if(COND_NOT_LE(mc68kcpu)) + { + uint32_t* r_dst = &DY(mc68kcpu); + uint32_t res = MASK_OUT_ABOVE_16(*r_dst - 1); + + *r_dst = MASK_OUT_BELOW_16(*r_dst) | res; + if(res != 0xffff) + { + uint32_t offset = OPER_I_16(mc68kcpu); + REG_PC(mc68kcpu) -= 2; + m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */ + m68ki_branch_16((mc68kcpu), offset); + (mc68kcpu)->c.current_cycle += (mc68kcpu)->cyc_dbcc_f_noexp; + return; + } + REG_PC(mc68kcpu) += 2; + (mc68kcpu)->c.current_cycle += (mc68kcpu)->cyc_dbcc_f_exp; + return; + } + REG_PC(mc68kcpu) += 2; +} + + +static void m68k_op_divs_16_d(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &DX(mc68kcpu); + int32_t src = MAKE_INT_16(DY(mc68kcpu)); + int32_t quotient; + int32_t remainder; + + if(src != 0) + { + if((uint32_t)*r_dst == 0x80000000 && src == -1) + { + (mc68kcpu)->not_z_flag = 0; + (mc68kcpu)->n_flag = NFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + *r_dst = 0; + return; + } + + quotient = MAKE_INT_32(*r_dst) / src; + remainder = MAKE_INT_32(*r_dst) % src; + + if(quotient == MAKE_INT_16(quotient)) + { + (mc68kcpu)->not_z_flag = quotient; + (mc68kcpu)->n_flag = NFLAG_16(quotient); + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + *r_dst = MASK_OUT_ABOVE_32(MASK_OUT_ABOVE_16(quotient) | (remainder << 16)); + return; + } + (mc68kcpu)->v_flag = VFLAG_SET; + return; + } + m68ki_exception_trap((mc68kcpu), EXCEPTION_ZERO_DIVIDE); +} + + +static void m68k_op_divs_16_ai(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &DX(mc68kcpu); + int32_t src = MAKE_INT_16(OPER_AY_AI_16(mc68kcpu)); + int32_t quotient; + int32_t remainder; + + if(src != 0) + { + if((uint32_t)*r_dst == 0x80000000 && src == -1) + { + (mc68kcpu)->not_z_flag = 0; + (mc68kcpu)->n_flag = NFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + *r_dst = 0; + return; + } + + quotient = MAKE_INT_32(*r_dst) / src; + remainder = MAKE_INT_32(*r_dst) % src; + + if(quotient == MAKE_INT_16(quotient)) + { + (mc68kcpu)->not_z_flag = quotient; + (mc68kcpu)->n_flag = NFLAG_16(quotient); + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + *r_dst = MASK_OUT_ABOVE_32(MASK_OUT_ABOVE_16(quotient) | (remainder << 16)); + return; + } + (mc68kcpu)->v_flag = VFLAG_SET; + return; + } + m68ki_exception_trap((mc68kcpu), EXCEPTION_ZERO_DIVIDE); +} + + +static void m68k_op_divs_16_pi(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &DX(mc68kcpu); + int32_t src = MAKE_INT_16(OPER_AY_PI_16(mc68kcpu)); + int32_t quotient; + int32_t remainder; + + if(src != 0) + { + if((uint32_t)*r_dst == 0x80000000 && src == -1) + { + (mc68kcpu)->not_z_flag = 0; + (mc68kcpu)->n_flag = NFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + *r_dst = 0; + return; + } + + quotient = MAKE_INT_32(*r_dst) / src; + remainder = MAKE_INT_32(*r_dst) % src; + + if(quotient == MAKE_INT_16(quotient)) + { + (mc68kcpu)->not_z_flag = quotient; + (mc68kcpu)->n_flag = NFLAG_16(quotient); + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + *r_dst = MASK_OUT_ABOVE_32(MASK_OUT_ABOVE_16(quotient) | (remainder << 16)); + return; + } + (mc68kcpu)->v_flag = VFLAG_SET; + return; + } + m68ki_exception_trap((mc68kcpu), EXCEPTION_ZERO_DIVIDE); +} + + +static void m68k_op_divs_16_pd(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &DX(mc68kcpu); + int32_t src = MAKE_INT_16(OPER_AY_PD_16(mc68kcpu)); + int32_t quotient; + int32_t remainder; + + if(src != 0) + { + if((uint32_t)*r_dst == 0x80000000 && src == -1) + { + (mc68kcpu)->not_z_flag = 0; + (mc68kcpu)->n_flag = NFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + *r_dst = 0; + return; + } + + quotient = MAKE_INT_32(*r_dst) / src; + remainder = MAKE_INT_32(*r_dst) % src; + + if(quotient == MAKE_INT_16(quotient)) + { + (mc68kcpu)->not_z_flag = quotient; + (mc68kcpu)->n_flag = NFLAG_16(quotient); + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + *r_dst = MASK_OUT_ABOVE_32(MASK_OUT_ABOVE_16(quotient) | (remainder << 16)); + return; + } + (mc68kcpu)->v_flag = VFLAG_SET; + return; + } + m68ki_exception_trap((mc68kcpu), EXCEPTION_ZERO_DIVIDE); +} + + +static void m68k_op_divs_16_di(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &DX(mc68kcpu); + int32_t src = MAKE_INT_16(OPER_AY_DI_16(mc68kcpu)); + int32_t quotient; + int32_t remainder; + + if(src != 0) + { + if((uint32_t)*r_dst == 0x80000000 && src == -1) + { + (mc68kcpu)->not_z_flag = 0; + (mc68kcpu)->n_flag = NFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + *r_dst = 0; + return; + } + + quotient = MAKE_INT_32(*r_dst) / src; + remainder = MAKE_INT_32(*r_dst) % src; + + if(quotient == MAKE_INT_16(quotient)) + { + (mc68kcpu)->not_z_flag = quotient; + (mc68kcpu)->n_flag = NFLAG_16(quotient); + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + *r_dst = MASK_OUT_ABOVE_32(MASK_OUT_ABOVE_16(quotient) | (remainder << 16)); + return; + } + (mc68kcpu)->v_flag = VFLAG_SET; + return; + } + m68ki_exception_trap((mc68kcpu), EXCEPTION_ZERO_DIVIDE); +} + + +static void m68k_op_divs_16_ix(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &DX(mc68kcpu); + int32_t src = MAKE_INT_16(OPER_AY_IX_16(mc68kcpu)); + int32_t quotient; + int32_t remainder; + + if(src != 0) + { + if((uint32_t)*r_dst == 0x80000000 && src == -1) + { + (mc68kcpu)->not_z_flag = 0; + (mc68kcpu)->n_flag = NFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + *r_dst = 0; + return; + } + + quotient = MAKE_INT_32(*r_dst) / src; + remainder = MAKE_INT_32(*r_dst) % src; + + if(quotient == MAKE_INT_16(quotient)) + { + (mc68kcpu)->not_z_flag = quotient; + (mc68kcpu)->n_flag = NFLAG_16(quotient); + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + *r_dst = MASK_OUT_ABOVE_32(MASK_OUT_ABOVE_16(quotient) | (remainder << 16)); + return; + } + (mc68kcpu)->v_flag = VFLAG_SET; + return; + } + m68ki_exception_trap((mc68kcpu), EXCEPTION_ZERO_DIVIDE); +} + + +static void m68k_op_divs_16_aw(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &DX(mc68kcpu); + int32_t src = MAKE_INT_16(OPER_AW_16(mc68kcpu)); + int32_t quotient; + int32_t remainder; + + if(src != 0) + { + if((uint32_t)*r_dst == 0x80000000 && src == -1) + { + (mc68kcpu)->not_z_flag = 0; + (mc68kcpu)->n_flag = NFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + *r_dst = 0; + return; + } + + quotient = MAKE_INT_32(*r_dst) / src; + remainder = MAKE_INT_32(*r_dst) % src; + + if(quotient == MAKE_INT_16(quotient)) + { + (mc68kcpu)->not_z_flag = quotient; + (mc68kcpu)->n_flag = NFLAG_16(quotient); + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + *r_dst = MASK_OUT_ABOVE_32(MASK_OUT_ABOVE_16(quotient) | (remainder << 16)); + return; + } + (mc68kcpu)->v_flag = VFLAG_SET; + return; + } + m68ki_exception_trap((mc68kcpu), EXCEPTION_ZERO_DIVIDE); +} + + +static void m68k_op_divs_16_al(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &DX(mc68kcpu); + int32_t src = MAKE_INT_16(OPER_AL_16(mc68kcpu)); + int32_t quotient; + int32_t remainder; + + if(src != 0) + { + if((uint32_t)*r_dst == 0x80000000 && src == -1) + { + (mc68kcpu)->not_z_flag = 0; + (mc68kcpu)->n_flag = NFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + *r_dst = 0; + return; + } + + quotient = MAKE_INT_32(*r_dst) / src; + remainder = MAKE_INT_32(*r_dst) % src; + + if(quotient == MAKE_INT_16(quotient)) + { + (mc68kcpu)->not_z_flag = quotient; + (mc68kcpu)->n_flag = NFLAG_16(quotient); + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + *r_dst = MASK_OUT_ABOVE_32(MASK_OUT_ABOVE_16(quotient) | (remainder << 16)); + return; + } + (mc68kcpu)->v_flag = VFLAG_SET; + return; + } + m68ki_exception_trap((mc68kcpu), EXCEPTION_ZERO_DIVIDE); +} + + +static void m68k_op_divs_16_pcdi(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &DX(mc68kcpu); + int32_t src = MAKE_INT_16(OPER_PCDI_16(mc68kcpu)); + int32_t quotient; + int32_t remainder; + + if(src != 0) + { + if((uint32_t)*r_dst == 0x80000000 && src == -1) + { + (mc68kcpu)->not_z_flag = 0; + (mc68kcpu)->n_flag = NFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + *r_dst = 0; + return; + } + + quotient = MAKE_INT_32(*r_dst) / src; + remainder = MAKE_INT_32(*r_dst) % src; + + if(quotient == MAKE_INT_16(quotient)) + { + (mc68kcpu)->not_z_flag = quotient; + (mc68kcpu)->n_flag = NFLAG_16(quotient); + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + *r_dst = MASK_OUT_ABOVE_32(MASK_OUT_ABOVE_16(quotient) | (remainder << 16)); + return; + } + (mc68kcpu)->v_flag = VFLAG_SET; + return; + } + m68ki_exception_trap((mc68kcpu), EXCEPTION_ZERO_DIVIDE); +} + + +static void m68k_op_divs_16_pcix(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &DX(mc68kcpu); + int32_t src = MAKE_INT_16(OPER_PCIX_16(mc68kcpu)); + int32_t quotient; + int32_t remainder; + + if(src != 0) + { + if((uint32_t)*r_dst == 0x80000000 && src == -1) + { + (mc68kcpu)->not_z_flag = 0; + (mc68kcpu)->n_flag = NFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + *r_dst = 0; + return; + } + + quotient = MAKE_INT_32(*r_dst) / src; + remainder = MAKE_INT_32(*r_dst) % src; + + if(quotient == MAKE_INT_16(quotient)) + { + (mc68kcpu)->not_z_flag = quotient; + (mc68kcpu)->n_flag = NFLAG_16(quotient); + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + *r_dst = MASK_OUT_ABOVE_32(MASK_OUT_ABOVE_16(quotient) | (remainder << 16)); + return; + } + (mc68kcpu)->v_flag = VFLAG_SET; + return; + } + m68ki_exception_trap((mc68kcpu), EXCEPTION_ZERO_DIVIDE); +} + + +static void m68k_op_divs_16_i(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &DX(mc68kcpu); + int32_t src = MAKE_INT_16(OPER_I_16(mc68kcpu)); + int32_t quotient; + int32_t remainder; + + if(src != 0) + { + if((uint32_t)*r_dst == 0x80000000 && src == -1) + { + (mc68kcpu)->not_z_flag = 0; + (mc68kcpu)->n_flag = NFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + *r_dst = 0; + return; + } + + quotient = MAKE_INT_32(*r_dst) / src; + remainder = MAKE_INT_32(*r_dst) % src; + + if(quotient == MAKE_INT_16(quotient)) + { + (mc68kcpu)->not_z_flag = quotient; + (mc68kcpu)->n_flag = NFLAG_16(quotient); + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + *r_dst = MASK_OUT_ABOVE_32(MASK_OUT_ABOVE_16(quotient) | (remainder << 16)); + return; + } + (mc68kcpu)->v_flag = VFLAG_SET; + return; + } + m68ki_exception_trap((mc68kcpu), EXCEPTION_ZERO_DIVIDE); +} + + +static void m68k_op_divu_16_d(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &DX(mc68kcpu); + uint32_t src = MASK_OUT_ABOVE_16(DY(mc68kcpu)); + + if(src != 0) + { + uint32_t quotient = *r_dst / src; + uint32_t remainder = *r_dst % src; + + if(quotient < 0x10000) + { + (mc68kcpu)->not_z_flag = quotient; + (mc68kcpu)->n_flag = NFLAG_16(quotient); + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + *r_dst = MASK_OUT_ABOVE_32(MASK_OUT_ABOVE_16(quotient) | (remainder << 16)); + return; + } + (mc68kcpu)->v_flag = VFLAG_SET; + return; + } + m68ki_exception_trap((mc68kcpu), EXCEPTION_ZERO_DIVIDE); +} + + +static void m68k_op_divu_16_ai(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &DX(mc68kcpu); + uint32_t src = OPER_AY_AI_16(mc68kcpu); + + if(src != 0) + { + uint32_t quotient = *r_dst / src; + uint32_t remainder = *r_dst % src; + + if(quotient < 0x10000) + { + (mc68kcpu)->not_z_flag = quotient; + (mc68kcpu)->n_flag = NFLAG_16(quotient); + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + *r_dst = MASK_OUT_ABOVE_32(MASK_OUT_ABOVE_16(quotient) | (remainder << 16)); + return; + } + (mc68kcpu)->v_flag = VFLAG_SET; + return; + } + m68ki_exception_trap((mc68kcpu), EXCEPTION_ZERO_DIVIDE); +} + + +static void m68k_op_divu_16_pi(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &DX(mc68kcpu); + uint32_t src = OPER_AY_PI_16(mc68kcpu); + + if(src != 0) + { + uint32_t quotient = *r_dst / src; + uint32_t remainder = *r_dst % src; + + if(quotient < 0x10000) + { + (mc68kcpu)->not_z_flag = quotient; + (mc68kcpu)->n_flag = NFLAG_16(quotient); + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + *r_dst = MASK_OUT_ABOVE_32(MASK_OUT_ABOVE_16(quotient) | (remainder << 16)); + return; + } + (mc68kcpu)->v_flag = VFLAG_SET; + return; + } + m68ki_exception_trap((mc68kcpu), EXCEPTION_ZERO_DIVIDE); +} + + +static void m68k_op_divu_16_pd(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &DX(mc68kcpu); + uint32_t src = OPER_AY_PD_16(mc68kcpu); + + if(src != 0) + { + uint32_t quotient = *r_dst / src; + uint32_t remainder = *r_dst % src; + + if(quotient < 0x10000) + { + (mc68kcpu)->not_z_flag = quotient; + (mc68kcpu)->n_flag = NFLAG_16(quotient); + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + *r_dst = MASK_OUT_ABOVE_32(MASK_OUT_ABOVE_16(quotient) | (remainder << 16)); + return; + } + (mc68kcpu)->v_flag = VFLAG_SET; + return; + } + m68ki_exception_trap((mc68kcpu), EXCEPTION_ZERO_DIVIDE); +} + + +static void m68k_op_divu_16_di(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &DX(mc68kcpu); + uint32_t src = OPER_AY_DI_16(mc68kcpu); + + if(src != 0) + { + uint32_t quotient = *r_dst / src; + uint32_t remainder = *r_dst % src; + + if(quotient < 0x10000) + { + (mc68kcpu)->not_z_flag = quotient; + (mc68kcpu)->n_flag = NFLAG_16(quotient); + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + *r_dst = MASK_OUT_ABOVE_32(MASK_OUT_ABOVE_16(quotient) | (remainder << 16)); + return; + } + (mc68kcpu)->v_flag = VFLAG_SET; + return; + } + m68ki_exception_trap((mc68kcpu), EXCEPTION_ZERO_DIVIDE); +} + + +static void m68k_op_divu_16_ix(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &DX(mc68kcpu); + uint32_t src = OPER_AY_IX_16(mc68kcpu); + + if(src != 0) + { + uint32_t quotient = *r_dst / src; + uint32_t remainder = *r_dst % src; + + if(quotient < 0x10000) + { + (mc68kcpu)->not_z_flag = quotient; + (mc68kcpu)->n_flag = NFLAG_16(quotient); + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + *r_dst = MASK_OUT_ABOVE_32(MASK_OUT_ABOVE_16(quotient) | (remainder << 16)); + return; + } + (mc68kcpu)->v_flag = VFLAG_SET; + return; + } + m68ki_exception_trap((mc68kcpu), EXCEPTION_ZERO_DIVIDE); +} + + +static void m68k_op_divu_16_aw(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &DX(mc68kcpu); + uint32_t src = OPER_AW_16(mc68kcpu); + + if(src != 0) + { + uint32_t quotient = *r_dst / src; + uint32_t remainder = *r_dst % src; + + if(quotient < 0x10000) + { + (mc68kcpu)->not_z_flag = quotient; + (mc68kcpu)->n_flag = NFLAG_16(quotient); + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + *r_dst = MASK_OUT_ABOVE_32(MASK_OUT_ABOVE_16(quotient) | (remainder << 16)); + return; + } + (mc68kcpu)->v_flag = VFLAG_SET; + return; + } + m68ki_exception_trap((mc68kcpu), EXCEPTION_ZERO_DIVIDE); +} + + +static void m68k_op_divu_16_al(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &DX(mc68kcpu); + uint32_t src = OPER_AL_16(mc68kcpu); + + if(src != 0) + { + uint32_t quotient = *r_dst / src; + uint32_t remainder = *r_dst % src; + + if(quotient < 0x10000) + { + (mc68kcpu)->not_z_flag = quotient; + (mc68kcpu)->n_flag = NFLAG_16(quotient); + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + *r_dst = MASK_OUT_ABOVE_32(MASK_OUT_ABOVE_16(quotient) | (remainder << 16)); + return; + } + (mc68kcpu)->v_flag = VFLAG_SET; + return; + } + m68ki_exception_trap((mc68kcpu), EXCEPTION_ZERO_DIVIDE); +} + + +static void m68k_op_divu_16_pcdi(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &DX(mc68kcpu); + uint32_t src = OPER_PCDI_16(mc68kcpu); + + if(src != 0) + { + uint32_t quotient = *r_dst / src; + uint32_t remainder = *r_dst % src; + + if(quotient < 0x10000) + { + (mc68kcpu)->not_z_flag = quotient; + (mc68kcpu)->n_flag = NFLAG_16(quotient); + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + *r_dst = MASK_OUT_ABOVE_32(MASK_OUT_ABOVE_16(quotient) | (remainder << 16)); + return; + } + (mc68kcpu)->v_flag = VFLAG_SET; + return; + } + m68ki_exception_trap((mc68kcpu), EXCEPTION_ZERO_DIVIDE); +} + + +static void m68k_op_divu_16_pcix(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &DX(mc68kcpu); + uint32_t src = OPER_PCIX_16(mc68kcpu); + + if(src != 0) + { + uint32_t quotient = *r_dst / src; + uint32_t remainder = *r_dst % src; + + if(quotient < 0x10000) + { + (mc68kcpu)->not_z_flag = quotient; + (mc68kcpu)->n_flag = NFLAG_16(quotient); + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + *r_dst = MASK_OUT_ABOVE_32(MASK_OUT_ABOVE_16(quotient) | (remainder << 16)); + return; + } + (mc68kcpu)->v_flag = VFLAG_SET; + return; + } + m68ki_exception_trap((mc68kcpu), EXCEPTION_ZERO_DIVIDE); +} + + +static void m68k_op_divu_16_i(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &DX(mc68kcpu); + uint32_t src = OPER_I_16(mc68kcpu); + + if(src != 0) + { + uint32_t quotient = *r_dst / src; + uint32_t remainder = *r_dst % src; + + if(quotient < 0x10000) + { + (mc68kcpu)->not_z_flag = quotient; + (mc68kcpu)->n_flag = NFLAG_16(quotient); + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + *r_dst = MASK_OUT_ABOVE_32(MASK_OUT_ABOVE_16(quotient) | (remainder << 16)); + return; + } + (mc68kcpu)->v_flag = VFLAG_SET; + return; + } + m68ki_exception_trap((mc68kcpu), EXCEPTION_ZERO_DIVIDE); +} + + +static void m68k_op_divl_32_d(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + uint32_t word2 = OPER_I_16(mc68kcpu); + uint64_t divisor = DY(mc68kcpu); + uint64_t dividend = 0; + uint64_t quotient = 0; + uint64_t remainder = 0; + + if(divisor != 0) + { + if(BIT_A(word2)) /* 64 bit */ + { + dividend = REG_D(mc68kcpu)[word2 & 7]; + dividend <<= 32; + dividend |= REG_D(mc68kcpu)[(word2 >> 12) & 7]; + + if(BIT_B(word2)) /* signed */ + { + quotient = (uint64_t)((int64_t)dividend / (int64_t)((int32_t)divisor)); + remainder = (uint64_t)((int64_t)dividend % (int64_t)((int32_t)divisor)); + if((int64_t)quotient != (int64_t)((int32_t)quotient)) + { + (mc68kcpu)->v_flag = VFLAG_SET; + return; + } + } + else /* unsigned */ + { + quotient = dividend / divisor; + if(quotient > 0xffffffff) + { + (mc68kcpu)->v_flag = VFLAG_SET; + return; + } + remainder = dividend % divisor; + } + } + else /* 32 bit */ + { + dividend = REG_D(mc68kcpu)[(word2 >> 12) & 7]; + if(BIT_B(word2)) /* signed */ + { + quotient = (uint64_t)((int64_t)((int32_t)dividend) / (int64_t)((int32_t)divisor)); + remainder = (uint64_t)((int64_t)((int32_t)dividend) % (int64_t)((int32_t)divisor)); + } + else /* unsigned */ + { + quotient = dividend / divisor; + remainder = dividend % divisor; + } + } + + REG_D(mc68kcpu)[word2 & 7] = remainder; + REG_D(mc68kcpu)[(word2 >> 12) & 7] = quotient; + + (mc68kcpu)->n_flag = NFLAG_32(quotient); + (mc68kcpu)->not_z_flag = quotient; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + return; + } + m68ki_exception_trap((mc68kcpu), EXCEPTION_ZERO_DIVIDE); + return; + } + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_divl_32_ai(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + uint32_t word2 = OPER_I_16(mc68kcpu); + uint64_t divisor = OPER_AY_AI_32(mc68kcpu); + uint64_t dividend = 0; + uint64_t quotient = 0; + uint64_t remainder = 0; + + if(divisor != 0) + { + if(BIT_A(word2)) /* 64 bit */ + { + dividend = REG_D(mc68kcpu)[word2 & 7]; + dividend <<= 32; + dividend |= REG_D(mc68kcpu)[(word2 >> 12) & 7]; + + if(BIT_B(word2)) /* signed */ + { + quotient = (uint64_t)((int64_t)dividend / (int64_t)((int32_t)divisor)); + remainder = (uint64_t)((int64_t)dividend % (int64_t)((int32_t)divisor)); + if((int64_t)quotient != (int64_t)((int32_t)quotient)) + { + (mc68kcpu)->v_flag = VFLAG_SET; + return; + } + } + else /* unsigned */ + { + quotient = dividend / divisor; + if(quotient > 0xffffffff) + { + (mc68kcpu)->v_flag = VFLAG_SET; + return; + } + remainder = dividend % divisor; + } + } + else /* 32 bit */ + { + dividend = REG_D(mc68kcpu)[(word2 >> 12) & 7]; + if(BIT_B(word2)) /* signed */ + { + quotient = (uint64_t)((int64_t)((int32_t)dividend) / (int64_t)((int32_t)divisor)); + remainder = (uint64_t)((int64_t)((int32_t)dividend) % (int64_t)((int32_t)divisor)); + } + else /* unsigned */ + { + quotient = dividend / divisor; + remainder = dividend % divisor; + } + } + + REG_D(mc68kcpu)[word2 & 7] = remainder; + REG_D(mc68kcpu)[(word2 >> 12) & 7] = quotient; + + (mc68kcpu)->n_flag = NFLAG_32(quotient); + (mc68kcpu)->not_z_flag = quotient; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + return; + } + m68ki_exception_trap((mc68kcpu), EXCEPTION_ZERO_DIVIDE); + return; + } + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_divl_32_pi(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + uint32_t word2 = OPER_I_16(mc68kcpu); + uint64_t divisor = OPER_AY_PI_32(mc68kcpu); + uint64_t dividend = 0; + uint64_t quotient = 0; + uint64_t remainder = 0; + + if(divisor != 0) + { + if(BIT_A(word2)) /* 64 bit */ + { + dividend = REG_D(mc68kcpu)[word2 & 7]; + dividend <<= 32; + dividend |= REG_D(mc68kcpu)[(word2 >> 12) & 7]; + + if(BIT_B(word2)) /* signed */ + { + quotient = (uint64_t)((int64_t)dividend / (int64_t)((int32_t)divisor)); + remainder = (uint64_t)((int64_t)dividend % (int64_t)((int32_t)divisor)); + if((int64_t)quotient != (int64_t)((int32_t)quotient)) + { + (mc68kcpu)->v_flag = VFLAG_SET; + return; + } + } + else /* unsigned */ + { + quotient = dividend / divisor; + if(quotient > 0xffffffff) + { + (mc68kcpu)->v_flag = VFLAG_SET; + return; + } + remainder = dividend % divisor; + } + } + else /* 32 bit */ + { + dividend = REG_D(mc68kcpu)[(word2 >> 12) & 7]; + if(BIT_B(word2)) /* signed */ + { + quotient = (uint64_t)((int64_t)((int32_t)dividend) / (int64_t)((int32_t)divisor)); + remainder = (uint64_t)((int64_t)((int32_t)dividend) % (int64_t)((int32_t)divisor)); + } + else /* unsigned */ + { + quotient = dividend / divisor; + remainder = dividend % divisor; + } + } + + REG_D(mc68kcpu)[word2 & 7] = remainder; + REG_D(mc68kcpu)[(word2 >> 12) & 7] = quotient; + + (mc68kcpu)->n_flag = NFLAG_32(quotient); + (mc68kcpu)->not_z_flag = quotient; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + return; + } + m68ki_exception_trap((mc68kcpu), EXCEPTION_ZERO_DIVIDE); + return; + } + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_divl_32_pd(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + uint32_t word2 = OPER_I_16(mc68kcpu); + uint64_t divisor = OPER_AY_PD_32(mc68kcpu); + uint64_t dividend = 0; + uint64_t quotient = 0; + uint64_t remainder = 0; + + if(divisor != 0) + { + if(BIT_A(word2)) /* 64 bit */ + { + dividend = REG_D(mc68kcpu)[word2 & 7]; + dividend <<= 32; + dividend |= REG_D(mc68kcpu)[(word2 >> 12) & 7]; + + if(BIT_B(word2)) /* signed */ + { + quotient = (uint64_t)((int64_t)dividend / (int64_t)((int32_t)divisor)); + remainder = (uint64_t)((int64_t)dividend % (int64_t)((int32_t)divisor)); + if((int64_t)quotient != (int64_t)((int32_t)quotient)) + { + (mc68kcpu)->v_flag = VFLAG_SET; + return; + } + } + else /* unsigned */ + { + quotient = dividend / divisor; + if(quotient > 0xffffffff) + { + (mc68kcpu)->v_flag = VFLAG_SET; + return; + } + remainder = dividend % divisor; + } + } + else /* 32 bit */ + { + dividend = REG_D(mc68kcpu)[(word2 >> 12) & 7]; + if(BIT_B(word2)) /* signed */ + { + quotient = (uint64_t)((int64_t)((int32_t)dividend) / (int64_t)((int32_t)divisor)); + remainder = (uint64_t)((int64_t)((int32_t)dividend) % (int64_t)((int32_t)divisor)); + } + else /* unsigned */ + { + quotient = dividend / divisor; + remainder = dividend % divisor; + } + } + + REG_D(mc68kcpu)[word2 & 7] = remainder; + REG_D(mc68kcpu)[(word2 >> 12) & 7] = quotient; + + (mc68kcpu)->n_flag = NFLAG_32(quotient); + (mc68kcpu)->not_z_flag = quotient; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + return; + } + m68ki_exception_trap((mc68kcpu), EXCEPTION_ZERO_DIVIDE); + return; + } + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_divl_32_di(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + uint32_t word2 = OPER_I_16(mc68kcpu); + uint64_t divisor = OPER_AY_DI_32(mc68kcpu); + uint64_t dividend = 0; + uint64_t quotient = 0; + uint64_t remainder = 0; + + if(divisor != 0) + { + if(BIT_A(word2)) /* 64 bit */ + { + dividend = REG_D(mc68kcpu)[word2 & 7]; + dividend <<= 32; + dividend |= REG_D(mc68kcpu)[(word2 >> 12) & 7]; + + if(BIT_B(word2)) /* signed */ + { + quotient = (uint64_t)((int64_t)dividend / (int64_t)((int32_t)divisor)); + remainder = (uint64_t)((int64_t)dividend % (int64_t)((int32_t)divisor)); + if((int64_t)quotient != (int64_t)((int32_t)quotient)) + { + (mc68kcpu)->v_flag = VFLAG_SET; + return; + } + } + else /* unsigned */ + { + quotient = dividend / divisor; + if(quotient > 0xffffffff) + { + (mc68kcpu)->v_flag = VFLAG_SET; + return; + } + remainder = dividend % divisor; + } + } + else /* 32 bit */ + { + dividend = REG_D(mc68kcpu)[(word2 >> 12) & 7]; + if(BIT_B(word2)) /* signed */ + { + quotient = (uint64_t)((int64_t)((int32_t)dividend) / (int64_t)((int32_t)divisor)); + remainder = (uint64_t)((int64_t)((int32_t)dividend) % (int64_t)((int32_t)divisor)); + } + else /* unsigned */ + { + quotient = dividend / divisor; + remainder = dividend % divisor; + } + } + + REG_D(mc68kcpu)[word2 & 7] = remainder; + REG_D(mc68kcpu)[(word2 >> 12) & 7] = quotient; + + (mc68kcpu)->n_flag = NFLAG_32(quotient); + (mc68kcpu)->not_z_flag = quotient; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + return; + } + m68ki_exception_trap((mc68kcpu), EXCEPTION_ZERO_DIVIDE); + return; + } + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_divl_32_ix(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + uint32_t word2 = OPER_I_16(mc68kcpu); + uint64_t divisor = OPER_AY_IX_32(mc68kcpu); + uint64_t dividend = 0; + uint64_t quotient = 0; + uint64_t remainder = 0; + + if(divisor != 0) + { + if(BIT_A(word2)) /* 64 bit */ + { + dividend = REG_D(mc68kcpu)[word2 & 7]; + dividend <<= 32; + dividend |= REG_D(mc68kcpu)[(word2 >> 12) & 7]; + + if(BIT_B(word2)) /* signed */ + { + quotient = (uint64_t)((int64_t)dividend / (int64_t)((int32_t)divisor)); + remainder = (uint64_t)((int64_t)dividend % (int64_t)((int32_t)divisor)); + if((int64_t)quotient != (int64_t)((int32_t)quotient)) + { + (mc68kcpu)->v_flag = VFLAG_SET; + return; + } + } + else /* unsigned */ + { + quotient = dividend / divisor; + if(quotient > 0xffffffff) + { + (mc68kcpu)->v_flag = VFLAG_SET; + return; + } + remainder = dividend % divisor; + } + } + else /* 32 bit */ + { + dividend = REG_D(mc68kcpu)[(word2 >> 12) & 7]; + if(BIT_B(word2)) /* signed */ + { + quotient = (uint64_t)((int64_t)((int32_t)dividend) / (int64_t)((int32_t)divisor)); + remainder = (uint64_t)((int64_t)((int32_t)dividend) % (int64_t)((int32_t)divisor)); + } + else /* unsigned */ + { + quotient = dividend / divisor; + remainder = dividend % divisor; + } + } + + REG_D(mc68kcpu)[word2 & 7] = remainder; + REG_D(mc68kcpu)[(word2 >> 12) & 7] = quotient; + + (mc68kcpu)->n_flag = NFLAG_32(quotient); + (mc68kcpu)->not_z_flag = quotient; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + return; + } + m68ki_exception_trap((mc68kcpu), EXCEPTION_ZERO_DIVIDE); + return; + } + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_divl_32_aw(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + uint32_t word2 = OPER_I_16(mc68kcpu); + uint64_t divisor = OPER_AW_32(mc68kcpu); + uint64_t dividend = 0; + uint64_t quotient = 0; + uint64_t remainder = 0; + + if(divisor != 0) + { + if(BIT_A(word2)) /* 64 bit */ + { + dividend = REG_D(mc68kcpu)[word2 & 7]; + dividend <<= 32; + dividend |= REG_D(mc68kcpu)[(word2 >> 12) & 7]; + + if(BIT_B(word2)) /* signed */ + { + quotient = (uint64_t)((int64_t)dividend / (int64_t)((int32_t)divisor)); + remainder = (uint64_t)((int64_t)dividend % (int64_t)((int32_t)divisor)); + if((int64_t)quotient != (int64_t)((int32_t)quotient)) + { + (mc68kcpu)->v_flag = VFLAG_SET; + return; + } + } + else /* unsigned */ + { + quotient = dividend / divisor; + if(quotient > 0xffffffff) + { + (mc68kcpu)->v_flag = VFLAG_SET; + return; + } + remainder = dividend % divisor; + } + } + else /* 32 bit */ + { + dividend = REG_D(mc68kcpu)[(word2 >> 12) & 7]; + if(BIT_B(word2)) /* signed */ + { + quotient = (uint64_t)((int64_t)((int32_t)dividend) / (int64_t)((int32_t)divisor)); + remainder = (uint64_t)((int64_t)((int32_t)dividend) % (int64_t)((int32_t)divisor)); + } + else /* unsigned */ + { + quotient = dividend / divisor; + remainder = dividend % divisor; + } + } + + REG_D(mc68kcpu)[word2 & 7] = remainder; + REG_D(mc68kcpu)[(word2 >> 12) & 7] = quotient; + + (mc68kcpu)->n_flag = NFLAG_32(quotient); + (mc68kcpu)->not_z_flag = quotient; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + return; + } + m68ki_exception_trap((mc68kcpu), EXCEPTION_ZERO_DIVIDE); + return; + } + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_divl_32_al(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + uint32_t word2 = OPER_I_16(mc68kcpu); + uint64_t divisor = OPER_AL_32(mc68kcpu); + uint64_t dividend = 0; + uint64_t quotient = 0; + uint64_t remainder = 0; + + if(divisor != 0) + { + if(BIT_A(word2)) /* 64 bit */ + { + dividend = REG_D(mc68kcpu)[word2 & 7]; + dividend <<= 32; + dividend |= REG_D(mc68kcpu)[(word2 >> 12) & 7]; + + if(BIT_B(word2)) /* signed */ + { + quotient = (uint64_t)((int64_t)dividend / (int64_t)((int32_t)divisor)); + remainder = (uint64_t)((int64_t)dividend % (int64_t)((int32_t)divisor)); + if((int64_t)quotient != (int64_t)((int32_t)quotient)) + { + (mc68kcpu)->v_flag = VFLAG_SET; + return; + } + } + else /* unsigned */ + { + quotient = dividend / divisor; + if(quotient > 0xffffffff) + { + (mc68kcpu)->v_flag = VFLAG_SET; + return; + } + remainder = dividend % divisor; + } + } + else /* 32 bit */ + { + dividend = REG_D(mc68kcpu)[(word2 >> 12) & 7]; + if(BIT_B(word2)) /* signed */ + { + quotient = (uint64_t)((int64_t)((int32_t)dividend) / (int64_t)((int32_t)divisor)); + remainder = (uint64_t)((int64_t)((int32_t)dividend) % (int64_t)((int32_t)divisor)); + } + else /* unsigned */ + { + quotient = dividend / divisor; + remainder = dividend % divisor; + } + } + + REG_D(mc68kcpu)[word2 & 7] = remainder; + REG_D(mc68kcpu)[(word2 >> 12) & 7] = quotient; + + (mc68kcpu)->n_flag = NFLAG_32(quotient); + (mc68kcpu)->not_z_flag = quotient; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + return; + } + m68ki_exception_trap((mc68kcpu), EXCEPTION_ZERO_DIVIDE); + return; + } + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_divl_32_pcdi(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + uint32_t word2 = OPER_I_16(mc68kcpu); + uint64_t divisor = OPER_PCDI_32(mc68kcpu); + uint64_t dividend = 0; + uint64_t quotient = 0; + uint64_t remainder = 0; + + if(divisor != 0) + { + if(BIT_A(word2)) /* 64 bit */ + { + dividend = REG_D(mc68kcpu)[word2 & 7]; + dividend <<= 32; + dividend |= REG_D(mc68kcpu)[(word2 >> 12) & 7]; + + if(BIT_B(word2)) /* signed */ + { + quotient = (uint64_t)((int64_t)dividend / (int64_t)((int32_t)divisor)); + remainder = (uint64_t)((int64_t)dividend % (int64_t)((int32_t)divisor)); + if((int64_t)quotient != (int64_t)((int32_t)quotient)) + { + (mc68kcpu)->v_flag = VFLAG_SET; + return; + } + } + else /* unsigned */ + { + quotient = dividend / divisor; + if(quotient > 0xffffffff) + { + (mc68kcpu)->v_flag = VFLAG_SET; + return; + } + remainder = dividend % divisor; + } + } + else /* 32 bit */ + { + dividend = REG_D(mc68kcpu)[(word2 >> 12) & 7]; + if(BIT_B(word2)) /* signed */ + { + quotient = (uint64_t)((int64_t)((int32_t)dividend) / (int64_t)((int32_t)divisor)); + remainder = (uint64_t)((int64_t)((int32_t)dividend) % (int64_t)((int32_t)divisor)); + } + else /* unsigned */ + { + quotient = dividend / divisor; + remainder = dividend % divisor; + } + } + + REG_D(mc68kcpu)[word2 & 7] = remainder; + REG_D(mc68kcpu)[(word2 >> 12) & 7] = quotient; + + (mc68kcpu)->n_flag = NFLAG_32(quotient); + (mc68kcpu)->not_z_flag = quotient; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + return; + } + m68ki_exception_trap((mc68kcpu), EXCEPTION_ZERO_DIVIDE); + return; + } + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_divl_32_pcix(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + uint32_t word2 = OPER_I_16(mc68kcpu); + uint64_t divisor = OPER_PCIX_32(mc68kcpu); + uint64_t dividend = 0; + uint64_t quotient = 0; + uint64_t remainder = 0; + + if(divisor != 0) + { + if(BIT_A(word2)) /* 64 bit */ + { + dividend = REG_D(mc68kcpu)[word2 & 7]; + dividend <<= 32; + dividend |= REG_D(mc68kcpu)[(word2 >> 12) & 7]; + + if(BIT_B(word2)) /* signed */ + { + quotient = (uint64_t)((int64_t)dividend / (int64_t)((int32_t)divisor)); + remainder = (uint64_t)((int64_t)dividend % (int64_t)((int32_t)divisor)); + if((int64_t)quotient != (int64_t)((int32_t)quotient)) + { + (mc68kcpu)->v_flag = VFLAG_SET; + return; + } + } + else /* unsigned */ + { + quotient = dividend / divisor; + if(quotient > 0xffffffff) + { + (mc68kcpu)->v_flag = VFLAG_SET; + return; + } + remainder = dividend % divisor; + } + } + else /* 32 bit */ + { + dividend = REG_D(mc68kcpu)[(word2 >> 12) & 7]; + if(BIT_B(word2)) /* signed */ + { + quotient = (uint64_t)((int64_t)((int32_t)dividend) / (int64_t)((int32_t)divisor)); + remainder = (uint64_t)((int64_t)((int32_t)dividend) % (int64_t)((int32_t)divisor)); + } + else /* unsigned */ + { + quotient = dividend / divisor; + remainder = dividend % divisor; + } + } + + REG_D(mc68kcpu)[word2 & 7] = remainder; + REG_D(mc68kcpu)[(word2 >> 12) & 7] = quotient; + + (mc68kcpu)->n_flag = NFLAG_32(quotient); + (mc68kcpu)->not_z_flag = quotient; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + return; + } + m68ki_exception_trap((mc68kcpu), EXCEPTION_ZERO_DIVIDE); + return; + } + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_divl_32_i(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + uint32_t word2 = OPER_I_16(mc68kcpu); + uint64_t divisor = OPER_I_32(mc68kcpu); + uint64_t dividend = 0; + uint64_t quotient = 0; + uint64_t remainder = 0; + + if(divisor != 0) + { + if(BIT_A(word2)) /* 64 bit */ + { + dividend = REG_D(mc68kcpu)[word2 & 7]; + dividend <<= 32; + dividend |= REG_D(mc68kcpu)[(word2 >> 12) & 7]; + + if(BIT_B(word2)) /* signed */ + { + quotient = (uint64_t)((int64_t)dividend / (int64_t)((int32_t)divisor)); + remainder = (uint64_t)((int64_t)dividend % (int64_t)((int32_t)divisor)); + if((int64_t)quotient != (int64_t)((int32_t)quotient)) + { + (mc68kcpu)->v_flag = VFLAG_SET; + return; + } + } + else /* unsigned */ + { + quotient = dividend / divisor; + if(quotient > 0xffffffff) + { + (mc68kcpu)->v_flag = VFLAG_SET; + return; + } + remainder = dividend % divisor; + } + } + else /* 32 bit */ + { + dividend = REG_D(mc68kcpu)[(word2 >> 12) & 7]; + if(BIT_B(word2)) /* signed */ + { + quotient = (uint64_t)((int64_t)((int32_t)dividend) / (int64_t)((int32_t)divisor)); + remainder = (uint64_t)((int64_t)((int32_t)dividend) % (int64_t)((int32_t)divisor)); + } + else /* unsigned */ + { + quotient = dividend / divisor; + remainder = dividend % divisor; + } + } + + REG_D(mc68kcpu)[word2 & 7] = remainder; + REG_D(mc68kcpu)[(word2 >> 12) & 7] = quotient; + + (mc68kcpu)->n_flag = NFLAG_32(quotient); + (mc68kcpu)->not_z_flag = quotient; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + return; + } + m68ki_exception_trap((mc68kcpu), EXCEPTION_ZERO_DIVIDE); + return; + } + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_eor_8_d(m68000_base_device* mc68kcpu) +{ + uint32_t res = MASK_OUT_ABOVE_8(DY(mc68kcpu) ^= MASK_OUT_ABOVE_8(DX(mc68kcpu))); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_eor_8_ai(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AY_AI_8(mc68kcpu); + uint32_t res = MASK_OUT_ABOVE_8(DX(mc68kcpu) ^ m68ki_read_8((mc68kcpu), ea)); + + m68ki_write_8((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_eor_8_pi(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AY_PI_8(mc68kcpu); + uint32_t res = MASK_OUT_ABOVE_8(DX(mc68kcpu) ^ m68ki_read_8((mc68kcpu), ea)); + + m68ki_write_8((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_eor_8_pi7(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_A7_PI_8(mc68kcpu); + uint32_t res = MASK_OUT_ABOVE_8(DX(mc68kcpu) ^ m68ki_read_8((mc68kcpu), ea)); + + m68ki_write_8((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_eor_8_pd(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AY_PD_8(mc68kcpu); + uint32_t res = MASK_OUT_ABOVE_8(DX(mc68kcpu) ^ m68ki_read_8((mc68kcpu), ea)); + + m68ki_write_8((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_eor_8_pd7(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_A7_PD_8(mc68kcpu); + uint32_t res = MASK_OUT_ABOVE_8(DX(mc68kcpu) ^ m68ki_read_8((mc68kcpu), ea)); + + m68ki_write_8((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_eor_8_di(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AY_DI_8(mc68kcpu); + uint32_t res = MASK_OUT_ABOVE_8(DX(mc68kcpu) ^ m68ki_read_8((mc68kcpu), ea)); + + m68ki_write_8((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_eor_8_ix(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AY_IX_8(mc68kcpu); + uint32_t res = MASK_OUT_ABOVE_8(DX(mc68kcpu) ^ m68ki_read_8((mc68kcpu), ea)); + + m68ki_write_8((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_eor_8_aw(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AW_8(mc68kcpu); + uint32_t res = MASK_OUT_ABOVE_8(DX(mc68kcpu) ^ m68ki_read_8((mc68kcpu), ea)); + + m68ki_write_8((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_eor_8_al(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AL_8(mc68kcpu); + uint32_t res = MASK_OUT_ABOVE_8(DX(mc68kcpu) ^ m68ki_read_8((mc68kcpu), ea)); + + m68ki_write_8((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_eor_16_d(m68000_base_device* mc68kcpu) +{ + uint32_t res = MASK_OUT_ABOVE_16(DY(mc68kcpu) ^= MASK_OUT_ABOVE_16(DX(mc68kcpu))); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_eor_16_ai(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AY_AI_16(mc68kcpu); + uint32_t res = MASK_OUT_ABOVE_16(DX(mc68kcpu) ^ m68ki_read_16((mc68kcpu), ea)); + + m68ki_write_16((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_eor_16_pi(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AY_PI_16(mc68kcpu); + uint32_t res = MASK_OUT_ABOVE_16(DX(mc68kcpu) ^ m68ki_read_16((mc68kcpu), ea)); + + m68ki_write_16((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_eor_16_pd(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AY_PD_16(mc68kcpu); + uint32_t res = MASK_OUT_ABOVE_16(DX(mc68kcpu) ^ m68ki_read_16((mc68kcpu), ea)); + + m68ki_write_16((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_eor_16_di(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AY_DI_16(mc68kcpu); + uint32_t res = MASK_OUT_ABOVE_16(DX(mc68kcpu) ^ m68ki_read_16((mc68kcpu), ea)); + + m68ki_write_16((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_eor_16_ix(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AY_IX_16(mc68kcpu); + uint32_t res = MASK_OUT_ABOVE_16(DX(mc68kcpu) ^ m68ki_read_16((mc68kcpu), ea)); + + m68ki_write_16((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_eor_16_aw(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AW_16(mc68kcpu); + uint32_t res = MASK_OUT_ABOVE_16(DX(mc68kcpu) ^ m68ki_read_16((mc68kcpu), ea)); + + m68ki_write_16((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_eor_16_al(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AL_16(mc68kcpu); + uint32_t res = MASK_OUT_ABOVE_16(DX(mc68kcpu) ^ m68ki_read_16((mc68kcpu), ea)); + + m68ki_write_16((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_eor_32_d(m68000_base_device* mc68kcpu) +{ + uint32_t res = DY(mc68kcpu) ^= DX(mc68kcpu); + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_eor_32_ai(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AY_AI_32(mc68kcpu); + uint32_t res = DX(mc68kcpu) ^ m68ki_read_32((mc68kcpu), ea); + + m68ki_write_32((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_eor_32_pi(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AY_PI_32(mc68kcpu); + uint32_t res = DX(mc68kcpu) ^ m68ki_read_32((mc68kcpu), ea); + + m68ki_write_32((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_eor_32_pd(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AY_PD_32(mc68kcpu); + uint32_t res = DX(mc68kcpu) ^ m68ki_read_32((mc68kcpu), ea); + + m68ki_write_32((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_eor_32_di(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AY_DI_32(mc68kcpu); + uint32_t res = DX(mc68kcpu) ^ m68ki_read_32((mc68kcpu), ea); + + m68ki_write_32((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_eor_32_ix(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AY_IX_32(mc68kcpu); + uint32_t res = DX(mc68kcpu) ^ m68ki_read_32((mc68kcpu), ea); + + m68ki_write_32((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_eor_32_aw(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AW_32(mc68kcpu); + uint32_t res = DX(mc68kcpu) ^ m68ki_read_32((mc68kcpu), ea); + + m68ki_write_32((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_eor_32_al(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AL_32(mc68kcpu); + uint32_t res = DX(mc68kcpu) ^ m68ki_read_32((mc68kcpu), ea); + + m68ki_write_32((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_eori_8_d(m68000_base_device* mc68kcpu) +{ + uint32_t res = MASK_OUT_ABOVE_8(DY(mc68kcpu) ^= OPER_I_8(mc68kcpu)); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_eori_8_ai(m68000_base_device* mc68kcpu) +{ + uint32_t src = OPER_I_8(mc68kcpu); + uint32_t ea = EA_AY_AI_8(mc68kcpu); + uint32_t res = src ^ m68ki_read_8((mc68kcpu), ea); + + m68ki_write_8((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_eori_8_pi(m68000_base_device* mc68kcpu) +{ + uint32_t src = OPER_I_8(mc68kcpu); + uint32_t ea = EA_AY_PI_8(mc68kcpu); + uint32_t res = src ^ m68ki_read_8((mc68kcpu), ea); + + m68ki_write_8((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_eori_8_pi7(m68000_base_device* mc68kcpu) +{ + uint32_t src = OPER_I_8(mc68kcpu); + uint32_t ea = EA_A7_PI_8(mc68kcpu); + uint32_t res = src ^ m68ki_read_8((mc68kcpu), ea); + + m68ki_write_8((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_eori_8_pd(m68000_base_device* mc68kcpu) +{ + uint32_t src = OPER_I_8(mc68kcpu); + uint32_t ea = EA_AY_PD_8(mc68kcpu); + uint32_t res = src ^ m68ki_read_8((mc68kcpu), ea); + + m68ki_write_8((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_eori_8_pd7(m68000_base_device* mc68kcpu) +{ + uint32_t src = OPER_I_8(mc68kcpu); + uint32_t ea = EA_A7_PD_8(mc68kcpu); + uint32_t res = src ^ m68ki_read_8((mc68kcpu), ea); + + m68ki_write_8((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_eori_8_di(m68000_base_device* mc68kcpu) +{ + uint32_t src = OPER_I_8(mc68kcpu); + uint32_t ea = EA_AY_DI_8(mc68kcpu); + uint32_t res = src ^ m68ki_read_8((mc68kcpu), ea); + + m68ki_write_8((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_eori_8_ix(m68000_base_device* mc68kcpu) +{ + uint32_t src = OPER_I_8(mc68kcpu); + uint32_t ea = EA_AY_IX_8(mc68kcpu); + uint32_t res = src ^ m68ki_read_8((mc68kcpu), ea); + + m68ki_write_8((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_eori_8_aw(m68000_base_device* mc68kcpu) +{ + uint32_t src = OPER_I_8(mc68kcpu); + uint32_t ea = EA_AW_8(mc68kcpu); + uint32_t res = src ^ m68ki_read_8((mc68kcpu), ea); + + m68ki_write_8((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_eori_8_al(m68000_base_device* mc68kcpu) +{ + uint32_t src = OPER_I_8(mc68kcpu); + uint32_t ea = EA_AL_8(mc68kcpu); + uint32_t res = src ^ m68ki_read_8((mc68kcpu), ea); + + m68ki_write_8((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_eori_16_d(m68000_base_device* mc68kcpu) +{ + uint32_t res = MASK_OUT_ABOVE_16(DY(mc68kcpu) ^= OPER_I_16(mc68kcpu)); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_eori_16_ai(m68000_base_device* mc68kcpu) +{ + uint32_t src = OPER_I_16(mc68kcpu); + uint32_t ea = EA_AY_AI_16(mc68kcpu); + uint32_t res = src ^ m68ki_read_16((mc68kcpu), ea); + + m68ki_write_16((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_eori_16_pi(m68000_base_device* mc68kcpu) +{ + uint32_t src = OPER_I_16(mc68kcpu); + uint32_t ea = EA_AY_PI_16(mc68kcpu); + uint32_t res = src ^ m68ki_read_16((mc68kcpu), ea); + + m68ki_write_16((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_eori_16_pd(m68000_base_device* mc68kcpu) +{ + uint32_t src = OPER_I_16(mc68kcpu); + uint32_t ea = EA_AY_PD_16(mc68kcpu); + uint32_t res = src ^ m68ki_read_16((mc68kcpu), ea); + + m68ki_write_16((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_eori_16_di(m68000_base_device* mc68kcpu) +{ + uint32_t src = OPER_I_16(mc68kcpu); + uint32_t ea = EA_AY_DI_16(mc68kcpu); + uint32_t res = src ^ m68ki_read_16((mc68kcpu), ea); + + m68ki_write_16((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_eori_16_ix(m68000_base_device* mc68kcpu) +{ + uint32_t src = OPER_I_16(mc68kcpu); + uint32_t ea = EA_AY_IX_16(mc68kcpu); + uint32_t res = src ^ m68ki_read_16((mc68kcpu), ea); + + m68ki_write_16((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_eori_16_aw(m68000_base_device* mc68kcpu) +{ + uint32_t src = OPER_I_16(mc68kcpu); + uint32_t ea = EA_AW_16(mc68kcpu); + uint32_t res = src ^ m68ki_read_16((mc68kcpu), ea); + + m68ki_write_16((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_eori_16_al(m68000_base_device* mc68kcpu) +{ + uint32_t src = OPER_I_16(mc68kcpu); + uint32_t ea = EA_AL_16(mc68kcpu); + uint32_t res = src ^ m68ki_read_16((mc68kcpu), ea); + + m68ki_write_16((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_eori_32_d(m68000_base_device* mc68kcpu) +{ + uint32_t res = DY(mc68kcpu) ^= OPER_I_32(mc68kcpu); + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_eori_32_ai(m68000_base_device* mc68kcpu) +{ + uint32_t src = OPER_I_32(mc68kcpu); + uint32_t ea = EA_AY_AI_32(mc68kcpu); + uint32_t res = src ^ m68ki_read_32((mc68kcpu), ea); + + m68ki_write_32((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_eori_32_pi(m68000_base_device* mc68kcpu) +{ + uint32_t src = OPER_I_32(mc68kcpu); + uint32_t ea = EA_AY_PI_32(mc68kcpu); + uint32_t res = src ^ m68ki_read_32((mc68kcpu), ea); + + m68ki_write_32((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_eori_32_pd(m68000_base_device* mc68kcpu) +{ + uint32_t src = OPER_I_32(mc68kcpu); + uint32_t ea = EA_AY_PD_32(mc68kcpu); + uint32_t res = src ^ m68ki_read_32((mc68kcpu), ea); + + m68ki_write_32((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_eori_32_di(m68000_base_device* mc68kcpu) +{ + uint32_t src = OPER_I_32(mc68kcpu); + uint32_t ea = EA_AY_DI_32(mc68kcpu); + uint32_t res = src ^ m68ki_read_32((mc68kcpu), ea); + + m68ki_write_32((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_eori_32_ix(m68000_base_device* mc68kcpu) +{ + uint32_t src = OPER_I_32(mc68kcpu); + uint32_t ea = EA_AY_IX_32(mc68kcpu); + uint32_t res = src ^ m68ki_read_32((mc68kcpu), ea); + + m68ki_write_32((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_eori_32_aw(m68000_base_device* mc68kcpu) +{ + uint32_t src = OPER_I_32(mc68kcpu); + uint32_t ea = EA_AW_32(mc68kcpu); + uint32_t res = src ^ m68ki_read_32((mc68kcpu), ea); + + m68ki_write_32((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_eori_32_al(m68000_base_device* mc68kcpu) +{ + uint32_t src = OPER_I_32(mc68kcpu); + uint32_t ea = EA_AL_32(mc68kcpu); + uint32_t res = src ^ m68ki_read_32((mc68kcpu), ea); + + m68ki_write_32((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_eori_16_toc(m68000_base_device* mc68kcpu) +{ + m68ki_set_ccr((mc68kcpu), m68ki_get_ccr(mc68kcpu) ^ OPER_I_16(mc68kcpu)); +} + + +static void m68k_op_eori_16_tos(m68000_base_device* mc68kcpu) +{ + if((mc68kcpu)->s_flag) + { + uint32_t src = OPER_I_16(mc68kcpu); + m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */ + m68ki_set_sr((mc68kcpu), m68ki_get_sr(mc68kcpu) ^ src); + return; + } + m68ki_exception_privilege_violation(mc68kcpu); +} + + +static void m68k_op_exg_32_dd(m68000_base_device* mc68kcpu) +{ + uint32_t* reg_a = &DX(mc68kcpu); + uint32_t* reg_b = &DY(mc68kcpu); + uint32_t tmp = *reg_a; + *reg_a = *reg_b; + *reg_b = tmp; +} + + +static void m68k_op_exg_32_aa(m68000_base_device* mc68kcpu) +{ + uint32_t* reg_a = &AX(mc68kcpu); + uint32_t* reg_b = &AY(mc68kcpu); + uint32_t tmp = *reg_a; + *reg_a = *reg_b; + *reg_b = tmp; +} + + +static void m68k_op_exg_32_da(m68000_base_device* mc68kcpu) +{ + uint32_t* reg_a = &DX(mc68kcpu); + uint32_t* reg_b = &AY(mc68kcpu); + uint32_t tmp = *reg_a; + *reg_a = *reg_b; + *reg_b = tmp; +} + + +static void m68k_op_ext_16(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &DY(mc68kcpu); + + *r_dst = MASK_OUT_BELOW_16(*r_dst) | MASK_OUT_ABOVE_8(*r_dst) | (GET_MSB_8(*r_dst) ? 0xff00 : 0); + + (mc68kcpu)->n_flag = NFLAG_16(*r_dst); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(*r_dst); + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_ext_32(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &DY(mc68kcpu); + + *r_dst = MASK_OUT_ABOVE_16(*r_dst) | (GET_MSB_16(*r_dst) ? 0xffff0000 : 0); + + (mc68kcpu)->n_flag = NFLAG_32(*r_dst); + (mc68kcpu)->not_z_flag = *r_dst; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_extb_32(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + uint32_t* r_dst = &DY(mc68kcpu); + + *r_dst = MASK_OUT_ABOVE_8(*r_dst) | (GET_MSB_8(*r_dst) ? 0xffffff00 : 0); + + (mc68kcpu)->n_flag = NFLAG_32(*r_dst); + (mc68kcpu)->not_z_flag = *r_dst; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + return; + } + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_illegal(m68000_base_device* mc68kcpu) +{ + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_jmp_32_ai(m68000_base_device* mc68kcpu) +{ + m68ki_jump((mc68kcpu), EA_AY_AI_32(mc68kcpu)); + m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */ + if(REG_PC(mc68kcpu) == REG_PPC(mc68kcpu) && (mc68kcpu)->c.current_cycle < (mc68kcpu)->c.target_cycle) + (mc68kcpu)->c.current_cycle = (mc68kcpu)->c.target_cycle; +} + + +static void m68k_op_jmp_32_di(m68000_base_device* mc68kcpu) +{ + m68ki_jump((mc68kcpu), EA_AY_DI_32(mc68kcpu)); + m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */ + if(REG_PC(mc68kcpu) == REG_PPC(mc68kcpu) && (mc68kcpu)->c.current_cycle < (mc68kcpu)->c.target_cycle) + (mc68kcpu)->c.current_cycle = (mc68kcpu)->c.target_cycle; +} + + +static void m68k_op_jmp_32_ix(m68000_base_device* mc68kcpu) +{ + m68ki_jump((mc68kcpu), EA_AY_IX_32(mc68kcpu)); + m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */ + if(REG_PC(mc68kcpu) == REG_PPC(mc68kcpu) && (mc68kcpu)->c.current_cycle < (mc68kcpu)->c.target_cycle) + (mc68kcpu)->c.current_cycle = (mc68kcpu)->c.target_cycle; +} + + +static void m68k_op_jmp_32_aw(m68000_base_device* mc68kcpu) +{ + m68ki_jump((mc68kcpu), EA_AW_32(mc68kcpu)); + m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */ + if(REG_PC(mc68kcpu) == REG_PPC(mc68kcpu) && (mc68kcpu)->c.current_cycle < (mc68kcpu)->c.target_cycle) + (mc68kcpu)->c.current_cycle = (mc68kcpu)->c.target_cycle; +} + + +static void m68k_op_jmp_32_al(m68000_base_device* mc68kcpu) +{ + m68ki_jump((mc68kcpu), EA_AL_32(mc68kcpu)); + m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */ + if(REG_PC(mc68kcpu) == REG_PPC(mc68kcpu) && (mc68kcpu)->c.current_cycle < (mc68kcpu)->c.target_cycle) + (mc68kcpu)->c.current_cycle = (mc68kcpu)->c.target_cycle; +} + + +static void m68k_op_jmp_32_pcdi(m68000_base_device* mc68kcpu) +{ + m68ki_jump((mc68kcpu), EA_PCDI_32(mc68kcpu)); + m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */ + if(REG_PC(mc68kcpu) == REG_PPC(mc68kcpu) && (mc68kcpu)->c.current_cycle < (mc68kcpu)->c.target_cycle) + (mc68kcpu)->c.current_cycle = (mc68kcpu)->c.target_cycle; +} + + +static void m68k_op_jmp_32_pcix(m68000_base_device* mc68kcpu) +{ + m68ki_jump((mc68kcpu), EA_PCIX_32(mc68kcpu)); + m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */ + if(REG_PC(mc68kcpu) == REG_PPC(mc68kcpu) && (mc68kcpu)->c.current_cycle < (mc68kcpu)->c.target_cycle) + (mc68kcpu)->c.current_cycle = (mc68kcpu)->c.target_cycle; +} + + +static void m68k_op_jsr_32_ai(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AY_AI_32(mc68kcpu); + m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */ + m68ki_push_32((mc68kcpu), REG_PC(mc68kcpu)); + m68ki_jump((mc68kcpu), ea); +} + + +static void m68k_op_jsr_32_di(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AY_DI_32(mc68kcpu); + m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */ + m68ki_push_32((mc68kcpu), REG_PC(mc68kcpu)); + m68ki_jump((mc68kcpu), ea); +} + + +static void m68k_op_jsr_32_ix(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AY_IX_32(mc68kcpu); + m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */ + m68ki_push_32((mc68kcpu), REG_PC(mc68kcpu)); + m68ki_jump((mc68kcpu), ea); +} + + +static void m68k_op_jsr_32_aw(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AW_32(mc68kcpu); + m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */ + m68ki_push_32((mc68kcpu), REG_PC(mc68kcpu)); + m68ki_jump((mc68kcpu), ea); +} + + +static void m68k_op_jsr_32_al(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AL_32(mc68kcpu); + m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */ + m68ki_push_32((mc68kcpu), REG_PC(mc68kcpu)); + m68ki_jump((mc68kcpu), ea); +} + + +static void m68k_op_jsr_32_pcdi(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_PCDI_32(mc68kcpu); + m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */ + m68ki_push_32((mc68kcpu), REG_PC(mc68kcpu)); + m68ki_jump((mc68kcpu), ea); +} + + +static void m68k_op_jsr_32_pcix(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_PCIX_32(mc68kcpu); + m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */ + m68ki_push_32((mc68kcpu), REG_PC(mc68kcpu)); + m68ki_jump((mc68kcpu), ea); +} + + +static void m68k_op_lea_32_ai(m68000_base_device* mc68kcpu) +{ + AX(mc68kcpu) = EA_AY_AI_32(mc68kcpu); +} + + +static void m68k_op_lea_32_di(m68000_base_device* mc68kcpu) +{ + AX(mc68kcpu) = EA_AY_DI_32(mc68kcpu); +} + + +static void m68k_op_lea_32_ix(m68000_base_device* mc68kcpu) +{ + AX(mc68kcpu) = EA_AY_IX_32(mc68kcpu); +} + + +static void m68k_op_lea_32_aw(m68000_base_device* mc68kcpu) +{ + AX(mc68kcpu) = EA_AW_32(mc68kcpu); +} + + +static void m68k_op_lea_32_al(m68000_base_device* mc68kcpu) +{ + AX(mc68kcpu) = EA_AL_32(mc68kcpu); +} + + +static void m68k_op_lea_32_pcdi(m68000_base_device* mc68kcpu) +{ + AX(mc68kcpu) = EA_PCDI_32(mc68kcpu); +} + + +static void m68k_op_lea_32_pcix(m68000_base_device* mc68kcpu) +{ + AX(mc68kcpu) = EA_PCIX_32(mc68kcpu); +} + + +static void m68k_op_link_16_a7(m68000_base_device* mc68kcpu) +{ + REG_A(mc68kcpu)[7] -= 4; + m68ki_write_32((mc68kcpu), REG_A(mc68kcpu)[7], REG_A(mc68kcpu)[7]); + REG_A(mc68kcpu)[7] = MASK_OUT_ABOVE_32(REG_A(mc68kcpu)[7] + MAKE_INT_16(OPER_I_16(mc68kcpu))); +} + + +static void m68k_op_link_16(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &AY(mc68kcpu); + + m68ki_push_32((mc68kcpu), *r_dst); + *r_dst = REG_A(mc68kcpu)[7]; + REG_A(mc68kcpu)[7] = MASK_OUT_ABOVE_32(REG_A(mc68kcpu)[7] + MAKE_INT_16(OPER_I_16(mc68kcpu))); +} + + +static void m68k_op_link_32_a7(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + REG_A(mc68kcpu)[7] -= 4; + m68ki_write_32((mc68kcpu), REG_A(mc68kcpu)[7], REG_A(mc68kcpu)[7]); + REG_A(mc68kcpu)[7] = MASK_OUT_ABOVE_32(REG_A(mc68kcpu)[7] + OPER_I_32(mc68kcpu)); + return; + } + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_link_32(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + uint32_t* r_dst = &AY(mc68kcpu); + + m68ki_push_32((mc68kcpu), *r_dst); + *r_dst = REG_A(mc68kcpu)[7]; + REG_A(mc68kcpu)[7] = MASK_OUT_ABOVE_32(REG_A(mc68kcpu)[7] + OPER_I_32(mc68kcpu)); + return; + } + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_lsr_8_s(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &DY(mc68kcpu); + uint32_t shift = ((((mc68kcpu)->ir >> 9) - 1) & 7) + 1; + uint32_t src = MASK_OUT_ABOVE_8(*r_dst); + uint32_t res = src >> shift; + + if(shift != 0) + (mc68kcpu)->c.current_cycle += (shift<<(mc68kcpu)->cyc_shift) * (mc68kcpu)->c.options->gen.clock_divider; + + *r_dst = MASK_OUT_BELOW_8(*r_dst) | res; + + (mc68kcpu)->n_flag = NFLAG_CLEAR; + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = src << (9-shift); + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_lsr_16_s(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &DY(mc68kcpu); + uint32_t shift = ((((mc68kcpu)->ir >> 9) - 1) & 7) + 1; + uint32_t src = MASK_OUT_ABOVE_16(*r_dst); + uint32_t res = src >> shift; + + if(shift != 0) + (mc68kcpu)->c.current_cycle += (shift<<(mc68kcpu)->cyc_shift) * (mc68kcpu)->c.options->gen.clock_divider; + + *r_dst = MASK_OUT_BELOW_16(*r_dst) | res; + + (mc68kcpu)->n_flag = NFLAG_CLEAR; + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = src << (9-shift); + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_lsr_32_s(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &DY(mc68kcpu); + uint32_t shift = ((((mc68kcpu)->ir >> 9) - 1) & 7) + 1; + uint32_t src = *r_dst; + uint32_t res = src >> shift; + + if(shift != 0) + (mc68kcpu)->c.current_cycle += (shift<<(mc68kcpu)->cyc_shift) * (mc68kcpu)->c.options->gen.clock_divider; + + *r_dst = res; + + (mc68kcpu)->n_flag = NFLAG_CLEAR; + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = src << (9-shift); + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_lsr_8_r(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &DY(mc68kcpu); + uint32_t shift = DX(mc68kcpu) & 0x3f; + uint32_t src = MASK_OUT_ABOVE_8(*r_dst); + uint32_t res = src >> shift; + + if(shift != 0) + { + (mc68kcpu)->c.current_cycle += (shift<<(mc68kcpu)->cyc_shift) * (mc68kcpu)->c.options->gen.clock_divider; + + if(shift <= 8) + { + *r_dst = MASK_OUT_BELOW_8(*r_dst) | res; + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = src << (9-shift); + (mc68kcpu)->n_flag = NFLAG_CLEAR; + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + return; + } + + *r_dst &= 0xffffff00; + (mc68kcpu)->x_flag = XFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->n_flag = NFLAG_CLEAR; + (mc68kcpu)->not_z_flag = ZFLAG_SET; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + return; + } + + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->n_flag = NFLAG_8(src); + (mc68kcpu)->not_z_flag = src; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_lsr_16_r(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &DY(mc68kcpu); + uint32_t shift = DX(mc68kcpu) & 0x3f; + uint32_t src = MASK_OUT_ABOVE_16(*r_dst); + uint32_t res = src >> shift; + + if(shift != 0) + { + (mc68kcpu)->c.current_cycle += (shift<<(mc68kcpu)->cyc_shift) * (mc68kcpu)->c.options->gen.clock_divider; + + if(shift <= 16) + { + *r_dst = MASK_OUT_BELOW_16(*r_dst) | res; + (mc68kcpu)->c_flag = (mc68kcpu)->x_flag = (src >> (shift - 1))<<8; + (mc68kcpu)->n_flag = NFLAG_CLEAR; + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + return; + } + + *r_dst &= 0xffff0000; + (mc68kcpu)->x_flag = XFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->n_flag = NFLAG_CLEAR; + (mc68kcpu)->not_z_flag = ZFLAG_SET; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + return; + } + + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->n_flag = NFLAG_16(src); + (mc68kcpu)->not_z_flag = src; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_lsr_32_r(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &DY(mc68kcpu); + uint32_t shift = DX(mc68kcpu) & 0x3f; + uint32_t src = *r_dst; + uint32_t res = src >> shift; + + if(shift != 0) + { + (mc68kcpu)->c.current_cycle += (shift<<(mc68kcpu)->cyc_shift) * (mc68kcpu)->c.options->gen.clock_divider; + + if(shift < 32) + { + *r_dst = res; + (mc68kcpu)->c_flag = (mc68kcpu)->x_flag = (src >> (shift - 1))<<8; + (mc68kcpu)->n_flag = NFLAG_CLEAR; + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + return; + } + + *r_dst = 0; + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = (shift == 32 ? GET_MSB_32(src)>>23 : 0); + (mc68kcpu)->n_flag = NFLAG_CLEAR; + (mc68kcpu)->not_z_flag = ZFLAG_SET; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + return; + } + + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->n_flag = NFLAG_32(src); + (mc68kcpu)->not_z_flag = src; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_lsr_16_ai(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AY_AI_16(mc68kcpu); + uint32_t src = m68ki_read_16((mc68kcpu), ea); + uint32_t res = src >> 1; + + m68ki_write_16((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_CLEAR; + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = (mc68kcpu)->x_flag = src << 8; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_lsr_16_pi(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AY_PI_16(mc68kcpu); + uint32_t src = m68ki_read_16((mc68kcpu), ea); + uint32_t res = src >> 1; + + m68ki_write_16((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_CLEAR; + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = (mc68kcpu)->x_flag = src << 8; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_lsr_16_pd(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AY_PD_16(mc68kcpu); + uint32_t src = m68ki_read_16((mc68kcpu), ea); + uint32_t res = src >> 1; + + m68ki_write_16((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_CLEAR; + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = (mc68kcpu)->x_flag = src << 8; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_lsr_16_di(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AY_DI_16(mc68kcpu); + uint32_t src = m68ki_read_16((mc68kcpu), ea); + uint32_t res = src >> 1; + + m68ki_write_16((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_CLEAR; + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = (mc68kcpu)->x_flag = src << 8; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_lsr_16_ix(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AY_IX_16(mc68kcpu); + uint32_t src = m68ki_read_16((mc68kcpu), ea); + uint32_t res = src >> 1; + + m68ki_write_16((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_CLEAR; + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = (mc68kcpu)->x_flag = src << 8; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_lsr_16_aw(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AW_16(mc68kcpu); + uint32_t src = m68ki_read_16((mc68kcpu), ea); + uint32_t res = src >> 1; + + m68ki_write_16((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_CLEAR; + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = (mc68kcpu)->x_flag = src << 8; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_lsr_16_al(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AL_16(mc68kcpu); + uint32_t src = m68ki_read_16((mc68kcpu), ea); + uint32_t res = src >> 1; + + m68ki_write_16((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_CLEAR; + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = (mc68kcpu)->x_flag = src << 8; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_lsl_8_s(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &DY(mc68kcpu); + uint32_t shift = ((((mc68kcpu)->ir >> 9) - 1) & 7) + 1; + uint32_t src = MASK_OUT_ABOVE_8(*r_dst); + uint32_t res = MASK_OUT_ABOVE_8(src << shift); + + if(shift != 0) + (mc68kcpu)->c.current_cycle += (shift<<(mc68kcpu)->cyc_shift) * (mc68kcpu)->c.options->gen.clock_divider; + + *r_dst = MASK_OUT_BELOW_8(*r_dst) | res; + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = src << shift; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_lsl_16_s(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &DY(mc68kcpu); + uint32_t shift = ((((mc68kcpu)->ir >> 9) - 1) & 7) + 1; + uint32_t src = MASK_OUT_ABOVE_16(*r_dst); + uint32_t res = MASK_OUT_ABOVE_16(src << shift); + + if(shift != 0) + (mc68kcpu)->c.current_cycle += (shift<<(mc68kcpu)->cyc_shift) * (mc68kcpu)->c.options->gen.clock_divider; + + *r_dst = MASK_OUT_BELOW_16(*r_dst) | res; + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = src >> (8-shift); + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_lsl_32_s(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &DY(mc68kcpu); + uint32_t shift = ((((mc68kcpu)->ir >> 9) - 1) & 7) + 1; + uint32_t src = *r_dst; + uint32_t res = MASK_OUT_ABOVE_32(src << shift); + + if(shift != 0) + (mc68kcpu)->c.current_cycle += (shift<<(mc68kcpu)->cyc_shift) * (mc68kcpu)->c.options->gen.clock_divider; + + *r_dst = res; + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = src >> (24-shift); + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_lsl_8_r(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &DY(mc68kcpu); + uint32_t shift = DX(mc68kcpu) & 0x3f; + uint32_t src = MASK_OUT_ABOVE_8(*r_dst); + uint32_t res = MASK_OUT_ABOVE_8(src << shift); + + if(shift != 0) + { + (mc68kcpu)->c.current_cycle += (shift<<(mc68kcpu)->cyc_shift) * (mc68kcpu)->c.options->gen.clock_divider; + + if(shift <= 8) + { + *r_dst = MASK_OUT_BELOW_8(*r_dst) | res; + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = src << shift; + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + return; + } + + *r_dst &= 0xffffff00; + (mc68kcpu)->x_flag = XFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->n_flag = NFLAG_CLEAR; + (mc68kcpu)->not_z_flag = ZFLAG_SET; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + return; + } + + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->n_flag = NFLAG_8(src); + (mc68kcpu)->not_z_flag = src; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_lsl_16_r(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &DY(mc68kcpu); + uint32_t shift = DX(mc68kcpu) & 0x3f; + uint32_t src = MASK_OUT_ABOVE_16(*r_dst); + uint32_t res = MASK_OUT_ABOVE_16(src << shift); + + if(shift != 0) + { + (mc68kcpu)->c.current_cycle += (shift<<(mc68kcpu)->cyc_shift) * (mc68kcpu)->c.options->gen.clock_divider; + + if(shift <= 16) + { + *r_dst = MASK_OUT_BELOW_16(*r_dst) | res; + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = (src << shift) >> 8; + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + return; + } + + *r_dst &= 0xffff0000; + (mc68kcpu)->x_flag = XFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->n_flag = NFLAG_CLEAR; + (mc68kcpu)->not_z_flag = ZFLAG_SET; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + return; + } + + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->n_flag = NFLAG_16(src); + (mc68kcpu)->not_z_flag = src; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_lsl_32_r(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &DY(mc68kcpu); + uint32_t shift = DX(mc68kcpu) & 0x3f; + uint32_t src = *r_dst; + uint32_t res = MASK_OUT_ABOVE_32(src << shift); + + if(shift != 0) + { + (mc68kcpu)->c.current_cycle += (shift<<(mc68kcpu)->cyc_shift) * (mc68kcpu)->c.options->gen.clock_divider; + + if(shift < 32) + { + *r_dst = res; + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = (src >> (32 - shift)) << 8; + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + return; + } + + *r_dst = 0; + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = ((shift == 32 ? src & 1 : 0))<<8; + (mc68kcpu)->n_flag = NFLAG_CLEAR; + (mc68kcpu)->not_z_flag = ZFLAG_SET; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + return; + } + + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->n_flag = NFLAG_32(src); + (mc68kcpu)->not_z_flag = src; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_lsl_16_ai(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AY_AI_16(mc68kcpu); + uint32_t src = m68ki_read_16((mc68kcpu), ea); + uint32_t res = MASK_OUT_ABOVE_16(src << 1); + + m68ki_write_16((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = src >> 7; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_lsl_16_pi(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AY_PI_16(mc68kcpu); + uint32_t src = m68ki_read_16((mc68kcpu), ea); + uint32_t res = MASK_OUT_ABOVE_16(src << 1); + + m68ki_write_16((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = src >> 7; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_lsl_16_pd(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AY_PD_16(mc68kcpu); + uint32_t src = m68ki_read_16((mc68kcpu), ea); + uint32_t res = MASK_OUT_ABOVE_16(src << 1); + + m68ki_write_16((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = src >> 7; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_lsl_16_di(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AY_DI_16(mc68kcpu); + uint32_t src = m68ki_read_16((mc68kcpu), ea); + uint32_t res = MASK_OUT_ABOVE_16(src << 1); + + m68ki_write_16((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = src >> 7; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_lsl_16_ix(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AY_IX_16(mc68kcpu); + uint32_t src = m68ki_read_16((mc68kcpu), ea); + uint32_t res = MASK_OUT_ABOVE_16(src << 1); + + m68ki_write_16((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = src >> 7; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_lsl_16_aw(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AW_16(mc68kcpu); + uint32_t src = m68ki_read_16((mc68kcpu), ea); + uint32_t res = MASK_OUT_ABOVE_16(src << 1); + + m68ki_write_16((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = src >> 7; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_lsl_16_al(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AL_16(mc68kcpu); + uint32_t src = m68ki_read_16((mc68kcpu), ea); + uint32_t res = MASK_OUT_ABOVE_16(src << 1); + + m68ki_write_16((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = src >> 7; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_move_8_d_d(m68000_base_device* mc68kcpu) +{ + uint32_t res = MASK_OUT_ABOVE_8(DY(mc68kcpu)); + uint32_t* r_dst = &DX(mc68kcpu); + + *r_dst = MASK_OUT_BELOW_8(*r_dst) | res; + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_8_d_ai(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_AY_AI_8(mc68kcpu); + uint32_t* r_dst = &DX(mc68kcpu); + + *r_dst = MASK_OUT_BELOW_8(*r_dst) | res; + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_8_d_pi(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_AY_PI_8(mc68kcpu); + uint32_t* r_dst = &DX(mc68kcpu); + + *r_dst = MASK_OUT_BELOW_8(*r_dst) | res; + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_8_d_pi7(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_A7_PI_8(mc68kcpu); + uint32_t* r_dst = &DX(mc68kcpu); + + *r_dst = MASK_OUT_BELOW_8(*r_dst) | res; + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_8_d_pd(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_AY_PD_8(mc68kcpu); + uint32_t* r_dst = &DX(mc68kcpu); + + *r_dst = MASK_OUT_BELOW_8(*r_dst) | res; + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_8_d_pd7(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_A7_PD_8(mc68kcpu); + uint32_t* r_dst = &DX(mc68kcpu); + + *r_dst = MASK_OUT_BELOW_8(*r_dst) | res; + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_8_d_di(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_AY_DI_8(mc68kcpu); + uint32_t* r_dst = &DX(mc68kcpu); + + *r_dst = MASK_OUT_BELOW_8(*r_dst) | res; + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_8_d_ix(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_AY_IX_8(mc68kcpu); + uint32_t* r_dst = &DX(mc68kcpu); + + *r_dst = MASK_OUT_BELOW_8(*r_dst) | res; + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_8_d_aw(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_AW_8(mc68kcpu); + uint32_t* r_dst = &DX(mc68kcpu); + + *r_dst = MASK_OUT_BELOW_8(*r_dst) | res; + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_8_d_al(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_AL_8(mc68kcpu); + uint32_t* r_dst = &DX(mc68kcpu); + + *r_dst = MASK_OUT_BELOW_8(*r_dst) | res; + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_8_d_pcdi(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_PCDI_8(mc68kcpu); + uint32_t* r_dst = &DX(mc68kcpu); + + *r_dst = MASK_OUT_BELOW_8(*r_dst) | res; + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_8_d_pcix(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_PCIX_8(mc68kcpu); + uint32_t* r_dst = &DX(mc68kcpu); + + *r_dst = MASK_OUT_BELOW_8(*r_dst) | res; + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_8_d_i(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_I_8(mc68kcpu); + uint32_t* r_dst = &DX(mc68kcpu); + + *r_dst = MASK_OUT_BELOW_8(*r_dst) | res; + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_8_ai_d(m68000_base_device* mc68kcpu) +{ + uint32_t res = MASK_OUT_ABOVE_8(DY(mc68kcpu)); + uint32_t ea = EA_AX_AI_8(mc68kcpu); + + m68ki_write_8((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_8_ai_ai(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_AY_AI_8(mc68kcpu); + uint32_t ea = EA_AX_AI_8(mc68kcpu); + + m68ki_write_8((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_8_ai_pi(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_AY_PI_8(mc68kcpu); + uint32_t ea = EA_AX_AI_8(mc68kcpu); + + m68ki_write_8((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_8_ai_pi7(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_A7_PI_8(mc68kcpu); + uint32_t ea = EA_AX_AI_8(mc68kcpu); + + m68ki_write_8((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_8_ai_pd(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_AY_PD_8(mc68kcpu); + uint32_t ea = EA_AX_AI_8(mc68kcpu); + + m68ki_write_8((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_8_ai_pd7(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_A7_PD_8(mc68kcpu); + uint32_t ea = EA_AX_AI_8(mc68kcpu); + + m68ki_write_8((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_8_ai_di(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_AY_DI_8(mc68kcpu); + uint32_t ea = EA_AX_AI_8(mc68kcpu); + + m68ki_write_8((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_8_ai_ix(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_AY_IX_8(mc68kcpu); + uint32_t ea = EA_AX_AI_8(mc68kcpu); + + m68ki_write_8((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_8_ai_aw(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_AW_8(mc68kcpu); + uint32_t ea = EA_AX_AI_8(mc68kcpu); + + m68ki_write_8((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_8_ai_al(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_AL_8(mc68kcpu); + uint32_t ea = EA_AX_AI_8(mc68kcpu); + + m68ki_write_8((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_8_ai_pcdi(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_PCDI_8(mc68kcpu); + uint32_t ea = EA_AX_AI_8(mc68kcpu); + + m68ki_write_8((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_8_ai_pcix(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_PCIX_8(mc68kcpu); + uint32_t ea = EA_AX_AI_8(mc68kcpu); + + m68ki_write_8((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_8_ai_i(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_I_8(mc68kcpu); + uint32_t ea = EA_AX_AI_8(mc68kcpu); + + m68ki_write_8((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_8_pi7_d(m68000_base_device* mc68kcpu) +{ + uint32_t res = MASK_OUT_ABOVE_8(DY(mc68kcpu)); + uint32_t ea = EA_A7_PI_8(mc68kcpu); + + m68ki_write_8((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_8_pi_d(m68000_base_device* mc68kcpu) +{ + uint32_t res = MASK_OUT_ABOVE_8(DY(mc68kcpu)); + uint32_t ea = EA_AX_PI_8(mc68kcpu); + + m68ki_write_8((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_8_pi7_ai(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_AY_AI_8(mc68kcpu); + uint32_t ea = EA_A7_PI_8(mc68kcpu); + + m68ki_write_8((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_8_pi7_pi(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_AY_PI_8(mc68kcpu); + uint32_t ea = EA_A7_PI_8(mc68kcpu); + + m68ki_write_8((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_8_pi7_pi7(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_A7_PI_8(mc68kcpu); + uint32_t ea = EA_A7_PI_8(mc68kcpu); + + m68ki_write_8((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_8_pi7_pd(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_AY_PD_8(mc68kcpu); + uint32_t ea = EA_A7_PI_8(mc68kcpu); + + m68ki_write_8((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_8_pi7_pd7(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_A7_PD_8(mc68kcpu); + uint32_t ea = EA_A7_PI_8(mc68kcpu); + + m68ki_write_8((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_8_pi7_di(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_AY_DI_8(mc68kcpu); + uint32_t ea = EA_A7_PI_8(mc68kcpu); + + m68ki_write_8((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_8_pi7_ix(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_AY_IX_8(mc68kcpu); + uint32_t ea = EA_A7_PI_8(mc68kcpu); + + m68ki_write_8((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_8_pi7_aw(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_AW_8(mc68kcpu); + uint32_t ea = EA_A7_PI_8(mc68kcpu); + + m68ki_write_8((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_8_pi7_al(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_AL_8(mc68kcpu); + uint32_t ea = EA_A7_PI_8(mc68kcpu); + + m68ki_write_8((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_8_pi7_pcdi(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_PCDI_8(mc68kcpu); + uint32_t ea = EA_A7_PI_8(mc68kcpu); + + m68ki_write_8((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_8_pi7_pcix(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_PCIX_8(mc68kcpu); + uint32_t ea = EA_A7_PI_8(mc68kcpu); + + m68ki_write_8((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_8_pi7_i(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_I_8(mc68kcpu); + uint32_t ea = EA_A7_PI_8(mc68kcpu); + + m68ki_write_8((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_8_pi_ai(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_AY_AI_8(mc68kcpu); + uint32_t ea = EA_AX_PI_8(mc68kcpu); + + m68ki_write_8((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_8_pi_pi(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_AY_PI_8(mc68kcpu); + uint32_t ea = EA_AX_PI_8(mc68kcpu); + + m68ki_write_8((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_8_pi_pi7(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_A7_PI_8(mc68kcpu); + uint32_t ea = EA_AX_PI_8(mc68kcpu); + + m68ki_write_8((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_8_pi_pd(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_AY_PD_8(mc68kcpu); + uint32_t ea = EA_AX_PI_8(mc68kcpu); + + m68ki_write_8((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_8_pi_pd7(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_A7_PD_8(mc68kcpu); + uint32_t ea = EA_AX_PI_8(mc68kcpu); + + m68ki_write_8((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_8_pi_di(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_AY_DI_8(mc68kcpu); + uint32_t ea = EA_AX_PI_8(mc68kcpu); + + m68ki_write_8((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_8_pi_ix(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_AY_IX_8(mc68kcpu); + uint32_t ea = EA_AX_PI_8(mc68kcpu); + + m68ki_write_8((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_8_pi_aw(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_AW_8(mc68kcpu); + uint32_t ea = EA_AX_PI_8(mc68kcpu); + + m68ki_write_8((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_8_pi_al(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_AL_8(mc68kcpu); + uint32_t ea = EA_AX_PI_8(mc68kcpu); + + m68ki_write_8((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_8_pi_pcdi(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_PCDI_8(mc68kcpu); + uint32_t ea = EA_AX_PI_8(mc68kcpu); + + m68ki_write_8((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_8_pi_pcix(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_PCIX_8(mc68kcpu); + uint32_t ea = EA_AX_PI_8(mc68kcpu); + + m68ki_write_8((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_8_pi_i(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_I_8(mc68kcpu); + uint32_t ea = EA_AX_PI_8(mc68kcpu); + + m68ki_write_8((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_8_pd7_d(m68000_base_device* mc68kcpu) +{ + uint32_t res = MASK_OUT_ABOVE_8(DY(mc68kcpu)); + uint32_t ea = EA_A7_PD_8(mc68kcpu); + + m68ki_write_8((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_8_pd_d(m68000_base_device* mc68kcpu) +{ + uint32_t res = MASK_OUT_ABOVE_8(DY(mc68kcpu)); + uint32_t ea = EA_AX_PD_8(mc68kcpu); + + m68ki_write_8((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_8_pd7_ai(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_AY_AI_8(mc68kcpu); + uint32_t ea = EA_A7_PD_8(mc68kcpu); + + m68ki_write_8((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_8_pd7_pi(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_AY_PI_8(mc68kcpu); + uint32_t ea = EA_A7_PD_8(mc68kcpu); + + m68ki_write_8((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_8_pd7_pi7(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_A7_PI_8(mc68kcpu); + uint32_t ea = EA_A7_PD_8(mc68kcpu); + + m68ki_write_8((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_8_pd7_pd(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_AY_PD_8(mc68kcpu); + uint32_t ea = EA_A7_PD_8(mc68kcpu); + + m68ki_write_8((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_8_pd7_pd7(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_A7_PD_8(mc68kcpu); + uint32_t ea = EA_A7_PD_8(mc68kcpu); + + m68ki_write_8((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_8_pd7_di(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_AY_DI_8(mc68kcpu); + uint32_t ea = EA_A7_PD_8(mc68kcpu); + + m68ki_write_8((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_8_pd7_ix(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_AY_IX_8(mc68kcpu); + uint32_t ea = EA_A7_PD_8(mc68kcpu); + + m68ki_write_8((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_8_pd7_aw(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_AW_8(mc68kcpu); + uint32_t ea = EA_A7_PD_8(mc68kcpu); + + m68ki_write_8((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_8_pd7_al(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_AL_8(mc68kcpu); + uint32_t ea = EA_A7_PD_8(mc68kcpu); + + m68ki_write_8((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_8_pd7_pcdi(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_PCDI_8(mc68kcpu); + uint32_t ea = EA_A7_PD_8(mc68kcpu); + + m68ki_write_8((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_8_pd7_pcix(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_PCIX_8(mc68kcpu); + uint32_t ea = EA_A7_PD_8(mc68kcpu); + + m68ki_write_8((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_8_pd7_i(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_I_8(mc68kcpu); + uint32_t ea = EA_A7_PD_8(mc68kcpu); + + m68ki_write_8((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_8_pd_ai(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_AY_AI_8(mc68kcpu); + uint32_t ea = EA_AX_PD_8(mc68kcpu); + + m68ki_write_8((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_8_pd_pi(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_AY_PI_8(mc68kcpu); + uint32_t ea = EA_AX_PD_8(mc68kcpu); + + m68ki_write_8((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_8_pd_pi7(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_A7_PI_8(mc68kcpu); + uint32_t ea = EA_AX_PD_8(mc68kcpu); + + m68ki_write_8((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_8_pd_pd(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_AY_PD_8(mc68kcpu); + uint32_t ea = EA_AX_PD_8(mc68kcpu); + + m68ki_write_8((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_8_pd_pd7(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_A7_PD_8(mc68kcpu); + uint32_t ea = EA_AX_PD_8(mc68kcpu); + + m68ki_write_8((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_8_pd_di(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_AY_DI_8(mc68kcpu); + uint32_t ea = EA_AX_PD_8(mc68kcpu); + + m68ki_write_8((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_8_pd_ix(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_AY_IX_8(mc68kcpu); + uint32_t ea = EA_AX_PD_8(mc68kcpu); + + m68ki_write_8((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_8_pd_aw(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_AW_8(mc68kcpu); + uint32_t ea = EA_AX_PD_8(mc68kcpu); + + m68ki_write_8((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_8_pd_al(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_AL_8(mc68kcpu); + uint32_t ea = EA_AX_PD_8(mc68kcpu); + + m68ki_write_8((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_8_pd_pcdi(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_PCDI_8(mc68kcpu); + uint32_t ea = EA_AX_PD_8(mc68kcpu); + + m68ki_write_8((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_8_pd_pcix(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_PCIX_8(mc68kcpu); + uint32_t ea = EA_AX_PD_8(mc68kcpu); + + m68ki_write_8((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_8_pd_i(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_I_8(mc68kcpu); + uint32_t ea = EA_AX_PD_8(mc68kcpu); + + m68ki_write_8((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_8_di_d(m68000_base_device* mc68kcpu) +{ + uint32_t res = MASK_OUT_ABOVE_8(DY(mc68kcpu)); + uint32_t ea = EA_AX_DI_8(mc68kcpu); + + m68ki_write_8((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_8_di_ai(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_AY_AI_8(mc68kcpu); + uint32_t ea = EA_AX_DI_8(mc68kcpu); + + m68ki_write_8((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_8_di_pi(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_AY_PI_8(mc68kcpu); + uint32_t ea = EA_AX_DI_8(mc68kcpu); + + m68ki_write_8((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_8_di_pi7(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_A7_PI_8(mc68kcpu); + uint32_t ea = EA_AX_DI_8(mc68kcpu); + + m68ki_write_8((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_8_di_pd(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_AY_PD_8(mc68kcpu); + uint32_t ea = EA_AX_DI_8(mc68kcpu); + + m68ki_write_8((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_8_di_pd7(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_A7_PD_8(mc68kcpu); + uint32_t ea = EA_AX_DI_8(mc68kcpu); + + m68ki_write_8((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_8_di_di(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_AY_DI_8(mc68kcpu); + uint32_t ea = EA_AX_DI_8(mc68kcpu); + + m68ki_write_8((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_8_di_ix(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_AY_IX_8(mc68kcpu); + uint32_t ea = EA_AX_DI_8(mc68kcpu); + + m68ki_write_8((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_8_di_aw(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_AW_8(mc68kcpu); + uint32_t ea = EA_AX_DI_8(mc68kcpu); + + m68ki_write_8((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_8_di_al(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_AL_8(mc68kcpu); + uint32_t ea = EA_AX_DI_8(mc68kcpu); + + m68ki_write_8((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_8_di_pcdi(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_PCDI_8(mc68kcpu); + uint32_t ea = EA_AX_DI_8(mc68kcpu); + + m68ki_write_8((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_8_di_pcix(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_PCIX_8(mc68kcpu); + uint32_t ea = EA_AX_DI_8(mc68kcpu); + + m68ki_write_8((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_8_di_i(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_I_8(mc68kcpu); + uint32_t ea = EA_AX_DI_8(mc68kcpu); + + m68ki_write_8((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_8_ix_d(m68000_base_device* mc68kcpu) +{ + uint32_t res = MASK_OUT_ABOVE_8(DY(mc68kcpu)); + uint32_t ea = EA_AX_IX_8(mc68kcpu); + + m68ki_write_8((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_8_ix_ai(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_AY_AI_8(mc68kcpu); + uint32_t ea = EA_AX_IX_8(mc68kcpu); + + m68ki_write_8((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_8_ix_pi(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_AY_PI_8(mc68kcpu); + uint32_t ea = EA_AX_IX_8(mc68kcpu); + + m68ki_write_8((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_8_ix_pi7(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_A7_PI_8(mc68kcpu); + uint32_t ea = EA_AX_IX_8(mc68kcpu); + + m68ki_write_8((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_8_ix_pd(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_AY_PD_8(mc68kcpu); + uint32_t ea = EA_AX_IX_8(mc68kcpu); + + m68ki_write_8((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_8_ix_pd7(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_A7_PD_8(mc68kcpu); + uint32_t ea = EA_AX_IX_8(mc68kcpu); + + m68ki_write_8((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_8_ix_di(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_AY_DI_8(mc68kcpu); + uint32_t ea = EA_AX_IX_8(mc68kcpu); + + m68ki_write_8((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_8_ix_ix(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_AY_IX_8(mc68kcpu); + uint32_t ea = EA_AX_IX_8(mc68kcpu); + + m68ki_write_8((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_8_ix_aw(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_AW_8(mc68kcpu); + uint32_t ea = EA_AX_IX_8(mc68kcpu); + + m68ki_write_8((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_8_ix_al(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_AL_8(mc68kcpu); + uint32_t ea = EA_AX_IX_8(mc68kcpu); + + m68ki_write_8((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_8_ix_pcdi(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_PCDI_8(mc68kcpu); + uint32_t ea = EA_AX_IX_8(mc68kcpu); + + m68ki_write_8((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_8_ix_pcix(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_PCIX_8(mc68kcpu); + uint32_t ea = EA_AX_IX_8(mc68kcpu); + + m68ki_write_8((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_8_ix_i(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_I_8(mc68kcpu); + uint32_t ea = EA_AX_IX_8(mc68kcpu); + + m68ki_write_8((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_8_aw_d(m68000_base_device* mc68kcpu) +{ + uint32_t res = MASK_OUT_ABOVE_8(DY(mc68kcpu)); + uint32_t ea = EA_AW_8(mc68kcpu); + + m68ki_write_8((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_8_aw_ai(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_AY_AI_8(mc68kcpu); + uint32_t ea = EA_AW_8(mc68kcpu); + + m68ki_write_8((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_8_aw_pi(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_AY_PI_8(mc68kcpu); + uint32_t ea = EA_AW_8(mc68kcpu); + + m68ki_write_8((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_8_aw_pi7(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_A7_PI_8(mc68kcpu); + uint32_t ea = EA_AW_8(mc68kcpu); + + m68ki_write_8((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_8_aw_pd(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_AY_PD_8(mc68kcpu); + uint32_t ea = EA_AW_8(mc68kcpu); + + m68ki_write_8((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_8_aw_pd7(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_A7_PD_8(mc68kcpu); + uint32_t ea = EA_AW_8(mc68kcpu); + + m68ki_write_8((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_8_aw_di(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_AY_DI_8(mc68kcpu); + uint32_t ea = EA_AW_8(mc68kcpu); + + m68ki_write_8((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_8_aw_ix(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_AY_IX_8(mc68kcpu); + uint32_t ea = EA_AW_8(mc68kcpu); + + m68ki_write_8((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_8_aw_aw(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_AW_8(mc68kcpu); + uint32_t ea = EA_AW_8(mc68kcpu); + + m68ki_write_8((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_8_aw_al(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_AL_8(mc68kcpu); + uint32_t ea = EA_AW_8(mc68kcpu); + + m68ki_write_8((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_8_aw_pcdi(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_PCDI_8(mc68kcpu); + uint32_t ea = EA_AW_8(mc68kcpu); + + m68ki_write_8((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_8_aw_pcix(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_PCIX_8(mc68kcpu); + uint32_t ea = EA_AW_8(mc68kcpu); + + m68ki_write_8((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_8_aw_i(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_I_8(mc68kcpu); + uint32_t ea = EA_AW_8(mc68kcpu); + + m68ki_write_8((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_8_al_d(m68000_base_device* mc68kcpu) +{ + uint32_t res = MASK_OUT_ABOVE_8(DY(mc68kcpu)); + uint32_t ea = EA_AL_8(mc68kcpu); + + m68ki_write_8((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_8_al_ai(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_AY_AI_8(mc68kcpu); + uint32_t ea = EA_AL_8(mc68kcpu); + + m68ki_write_8((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_8_al_pi(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_AY_PI_8(mc68kcpu); + uint32_t ea = EA_AL_8(mc68kcpu); + + m68ki_write_8((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_8_al_pi7(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_A7_PI_8(mc68kcpu); + uint32_t ea = EA_AL_8(mc68kcpu); + + m68ki_write_8((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_8_al_pd(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_AY_PD_8(mc68kcpu); + uint32_t ea = EA_AL_8(mc68kcpu); + + m68ki_write_8((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_8_al_pd7(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_A7_PD_8(mc68kcpu); + uint32_t ea = EA_AL_8(mc68kcpu); + + m68ki_write_8((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_8_al_di(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_AY_DI_8(mc68kcpu); + uint32_t ea = EA_AL_8(mc68kcpu); + + m68ki_write_8((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_8_al_ix(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_AY_IX_8(mc68kcpu); + uint32_t ea = EA_AL_8(mc68kcpu); + + m68ki_write_8((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_8_al_aw(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_AW_8(mc68kcpu); + uint32_t ea = EA_AL_8(mc68kcpu); + + m68ki_write_8((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_8_al_al(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_AL_8(mc68kcpu); + uint32_t ea = EA_AL_8(mc68kcpu); + + m68ki_write_8((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_8_al_pcdi(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_PCDI_8(mc68kcpu); + uint32_t ea = EA_AL_8(mc68kcpu); + + m68ki_write_8((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_8_al_pcix(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_PCIX_8(mc68kcpu); + uint32_t ea = EA_AL_8(mc68kcpu); + + m68ki_write_8((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_8_al_i(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_I_8(mc68kcpu); + uint32_t ea = EA_AL_8(mc68kcpu); + + m68ki_write_8((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_16_d_d(m68000_base_device* mc68kcpu) +{ + uint32_t res = MASK_OUT_ABOVE_16(DY(mc68kcpu)); + uint32_t* r_dst = &DX(mc68kcpu); + + *r_dst = MASK_OUT_BELOW_16(*r_dst) | res; + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_16_d_a(m68000_base_device* mc68kcpu) +{ + uint32_t res = MASK_OUT_ABOVE_16(AY(mc68kcpu)); + uint32_t* r_dst = &DX(mc68kcpu); + + *r_dst = MASK_OUT_BELOW_16(*r_dst) | res; + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_16_d_ai(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_AY_AI_16(mc68kcpu); + uint32_t* r_dst = &DX(mc68kcpu); + + *r_dst = MASK_OUT_BELOW_16(*r_dst) | res; + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_16_d_pi(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_AY_PI_16(mc68kcpu); + uint32_t* r_dst = &DX(mc68kcpu); + + *r_dst = MASK_OUT_BELOW_16(*r_dst) | res; + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_16_d_pd(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_AY_PD_16(mc68kcpu); + uint32_t* r_dst = &DX(mc68kcpu); + + *r_dst = MASK_OUT_BELOW_16(*r_dst) | res; + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_16_d_di(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_AY_DI_16(mc68kcpu); + uint32_t* r_dst = &DX(mc68kcpu); + + *r_dst = MASK_OUT_BELOW_16(*r_dst) | res; + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_16_d_ix(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_AY_IX_16(mc68kcpu); + uint32_t* r_dst = &DX(mc68kcpu); + + *r_dst = MASK_OUT_BELOW_16(*r_dst) | res; + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_16_d_aw(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_AW_16(mc68kcpu); + uint32_t* r_dst = &DX(mc68kcpu); + + *r_dst = MASK_OUT_BELOW_16(*r_dst) | res; + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_16_d_al(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_AL_16(mc68kcpu); + uint32_t* r_dst = &DX(mc68kcpu); + + *r_dst = MASK_OUT_BELOW_16(*r_dst) | res; + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_16_d_pcdi(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_PCDI_16(mc68kcpu); + uint32_t* r_dst = &DX(mc68kcpu); + + *r_dst = MASK_OUT_BELOW_16(*r_dst) | res; + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_16_d_pcix(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_PCIX_16(mc68kcpu); + uint32_t* r_dst = &DX(mc68kcpu); + + *r_dst = MASK_OUT_BELOW_16(*r_dst) | res; + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_16_d_i(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_I_16(mc68kcpu); + uint32_t* r_dst = &DX(mc68kcpu); + + *r_dst = MASK_OUT_BELOW_16(*r_dst) | res; + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_16_ai_d(m68000_base_device* mc68kcpu) +{ + uint32_t res = MASK_OUT_ABOVE_16(DY(mc68kcpu)); + uint32_t ea = EA_AX_AI_16(mc68kcpu); + + m68ki_write_16((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_16_ai_a(m68000_base_device* mc68kcpu) +{ + uint32_t res = MASK_OUT_ABOVE_16(AY(mc68kcpu)); + uint32_t ea = EA_AX_AI_16(mc68kcpu); + + m68ki_write_16((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_16_ai_ai(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_AY_AI_16(mc68kcpu); + uint32_t ea = EA_AX_AI_16(mc68kcpu); + + m68ki_write_16((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_16_ai_pi(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_AY_PI_16(mc68kcpu); + uint32_t ea = EA_AX_AI_16(mc68kcpu); + + m68ki_write_16((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_16_ai_pd(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_AY_PD_16(mc68kcpu); + uint32_t ea = EA_AX_AI_16(mc68kcpu); + + m68ki_write_16((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_16_ai_di(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_AY_DI_16(mc68kcpu); + uint32_t ea = EA_AX_AI_16(mc68kcpu); + + m68ki_write_16((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_16_ai_ix(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_AY_IX_16(mc68kcpu); + uint32_t ea = EA_AX_AI_16(mc68kcpu); + + m68ki_write_16((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_16_ai_aw(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_AW_16(mc68kcpu); + uint32_t ea = EA_AX_AI_16(mc68kcpu); + + m68ki_write_16((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_16_ai_al(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_AL_16(mc68kcpu); + uint32_t ea = EA_AX_AI_16(mc68kcpu); + + m68ki_write_16((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_16_ai_pcdi(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_PCDI_16(mc68kcpu); + uint32_t ea = EA_AX_AI_16(mc68kcpu); + + m68ki_write_16((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_16_ai_pcix(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_PCIX_16(mc68kcpu); + uint32_t ea = EA_AX_AI_16(mc68kcpu); + + m68ki_write_16((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_16_ai_i(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_I_16(mc68kcpu); + uint32_t ea = EA_AX_AI_16(mc68kcpu); + + m68ki_write_16((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_16_pi_d(m68000_base_device* mc68kcpu) +{ + uint32_t res = MASK_OUT_ABOVE_16(DY(mc68kcpu)); + uint32_t ea = EA_AX_PI_16(mc68kcpu); + + m68ki_write_16((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_16_pi_a(m68000_base_device* mc68kcpu) +{ + uint32_t res = MASK_OUT_ABOVE_16(AY(mc68kcpu)); + uint32_t ea = EA_AX_PI_16(mc68kcpu); + + m68ki_write_16((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_16_pi_ai(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_AY_AI_16(mc68kcpu); + uint32_t ea = EA_AX_PI_16(mc68kcpu); + + m68ki_write_16((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_16_pi_pi(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_AY_PI_16(mc68kcpu); + uint32_t ea = EA_AX_PI_16(mc68kcpu); + + m68ki_write_16((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_16_pi_pd(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_AY_PD_16(mc68kcpu); + uint32_t ea = EA_AX_PI_16(mc68kcpu); + + m68ki_write_16((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_16_pi_di(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_AY_DI_16(mc68kcpu); + uint32_t ea = EA_AX_PI_16(mc68kcpu); + + m68ki_write_16((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_16_pi_ix(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_AY_IX_16(mc68kcpu); + uint32_t ea = EA_AX_PI_16(mc68kcpu); + + m68ki_write_16((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_16_pi_aw(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_AW_16(mc68kcpu); + uint32_t ea = EA_AX_PI_16(mc68kcpu); + + m68ki_write_16((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_16_pi_al(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_AL_16(mc68kcpu); + uint32_t ea = EA_AX_PI_16(mc68kcpu); + + m68ki_write_16((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_16_pi_pcdi(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_PCDI_16(mc68kcpu); + uint32_t ea = EA_AX_PI_16(mc68kcpu); + + m68ki_write_16((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_16_pi_pcix(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_PCIX_16(mc68kcpu); + uint32_t ea = EA_AX_PI_16(mc68kcpu); + + m68ki_write_16((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_16_pi_i(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_I_16(mc68kcpu); + uint32_t ea = EA_AX_PI_16(mc68kcpu); + + m68ki_write_16((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_16_pd_d(m68000_base_device* mc68kcpu) +{ + uint32_t res = MASK_OUT_ABOVE_16(DY(mc68kcpu)); + uint32_t ea = EA_AX_PD_16(mc68kcpu); + + m68ki_write_16((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_16_pd_a(m68000_base_device* mc68kcpu) +{ + uint32_t res = MASK_OUT_ABOVE_16(AY(mc68kcpu)); + uint32_t ea = EA_AX_PD_16(mc68kcpu); + + m68ki_write_16((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_16_pd_ai(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_AY_AI_16(mc68kcpu); + uint32_t ea = EA_AX_PD_16(mc68kcpu); + + m68ki_write_16((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_16_pd_pi(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_AY_PI_16(mc68kcpu); + uint32_t ea = EA_AX_PD_16(mc68kcpu); + + m68ki_write_16((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_16_pd_pd(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_AY_PD_16(mc68kcpu); + uint32_t ea = EA_AX_PD_16(mc68kcpu); + + m68ki_write_16((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_16_pd_di(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_AY_DI_16(mc68kcpu); + uint32_t ea = EA_AX_PD_16(mc68kcpu); + + m68ki_write_16((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_16_pd_ix(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_AY_IX_16(mc68kcpu); + uint32_t ea = EA_AX_PD_16(mc68kcpu); + + m68ki_write_16((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_16_pd_aw(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_AW_16(mc68kcpu); + uint32_t ea = EA_AX_PD_16(mc68kcpu); + + m68ki_write_16((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_16_pd_al(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_AL_16(mc68kcpu); + uint32_t ea = EA_AX_PD_16(mc68kcpu); + + m68ki_write_16((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_16_pd_pcdi(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_PCDI_16(mc68kcpu); + uint32_t ea = EA_AX_PD_16(mc68kcpu); + + m68ki_write_16((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_16_pd_pcix(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_PCIX_16(mc68kcpu); + uint32_t ea = EA_AX_PD_16(mc68kcpu); + + m68ki_write_16((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_16_pd_i(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_I_16(mc68kcpu); + uint32_t ea = EA_AX_PD_16(mc68kcpu); + + m68ki_write_16((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_16_di_d(m68000_base_device* mc68kcpu) +{ + uint32_t res = MASK_OUT_ABOVE_16(DY(mc68kcpu)); + uint32_t ea = EA_AX_DI_16(mc68kcpu); + + m68ki_write_16((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_16_di_a(m68000_base_device* mc68kcpu) +{ + uint32_t res = MASK_OUT_ABOVE_16(AY(mc68kcpu)); + uint32_t ea = EA_AX_DI_16(mc68kcpu); + + m68ki_write_16((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_16_di_ai(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_AY_AI_16(mc68kcpu); + uint32_t ea = EA_AX_DI_16(mc68kcpu); + + m68ki_write_16((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_16_di_pi(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_AY_PI_16(mc68kcpu); + uint32_t ea = EA_AX_DI_16(mc68kcpu); + + m68ki_write_16((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_16_di_pd(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_AY_PD_16(mc68kcpu); + uint32_t ea = EA_AX_DI_16(mc68kcpu); + + m68ki_write_16((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_16_di_di(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_AY_DI_16(mc68kcpu); + uint32_t ea = EA_AX_DI_16(mc68kcpu); + + m68ki_write_16((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_16_di_ix(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_AY_IX_16(mc68kcpu); + uint32_t ea = EA_AX_DI_16(mc68kcpu); + + m68ki_write_16((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_16_di_aw(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_AW_16(mc68kcpu); + uint32_t ea = EA_AX_DI_16(mc68kcpu); + + m68ki_write_16((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_16_di_al(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_AL_16(mc68kcpu); + uint32_t ea = EA_AX_DI_16(mc68kcpu); + + m68ki_write_16((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_16_di_pcdi(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_PCDI_16(mc68kcpu); + uint32_t ea = EA_AX_DI_16(mc68kcpu); + + m68ki_write_16((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_16_di_pcix(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_PCIX_16(mc68kcpu); + uint32_t ea = EA_AX_DI_16(mc68kcpu); + + m68ki_write_16((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_16_di_i(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_I_16(mc68kcpu); + uint32_t ea = EA_AX_DI_16(mc68kcpu); + + m68ki_write_16((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_16_ix_d(m68000_base_device* mc68kcpu) +{ + uint32_t res = MASK_OUT_ABOVE_16(DY(mc68kcpu)); + uint32_t ea = EA_AX_IX_16(mc68kcpu); + + m68ki_write_16((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_16_ix_a(m68000_base_device* mc68kcpu) +{ + uint32_t res = MASK_OUT_ABOVE_16(AY(mc68kcpu)); + uint32_t ea = EA_AX_IX_16(mc68kcpu); + + m68ki_write_16((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_16_ix_ai(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_AY_AI_16(mc68kcpu); + uint32_t ea = EA_AX_IX_16(mc68kcpu); + + m68ki_write_16((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_16_ix_pi(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_AY_PI_16(mc68kcpu); + uint32_t ea = EA_AX_IX_16(mc68kcpu); + + m68ki_write_16((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_16_ix_pd(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_AY_PD_16(mc68kcpu); + uint32_t ea = EA_AX_IX_16(mc68kcpu); + + m68ki_write_16((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_16_ix_di(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_AY_DI_16(mc68kcpu); + uint32_t ea = EA_AX_IX_16(mc68kcpu); + + m68ki_write_16((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_16_ix_ix(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_AY_IX_16(mc68kcpu); + uint32_t ea = EA_AX_IX_16(mc68kcpu); + + m68ki_write_16((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_16_ix_aw(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_AW_16(mc68kcpu); + uint32_t ea = EA_AX_IX_16(mc68kcpu); + + m68ki_write_16((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_16_ix_al(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_AL_16(mc68kcpu); + uint32_t ea = EA_AX_IX_16(mc68kcpu); + + m68ki_write_16((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_16_ix_pcdi(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_PCDI_16(mc68kcpu); + uint32_t ea = EA_AX_IX_16(mc68kcpu); + + m68ki_write_16((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_16_ix_pcix(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_PCIX_16(mc68kcpu); + uint32_t ea = EA_AX_IX_16(mc68kcpu); + + m68ki_write_16((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_16_ix_i(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_I_16(mc68kcpu); + uint32_t ea = EA_AX_IX_16(mc68kcpu); + + m68ki_write_16((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_16_aw_d(m68000_base_device* mc68kcpu) +{ + uint32_t res = MASK_OUT_ABOVE_16(DY(mc68kcpu)); + uint32_t ea = EA_AW_16(mc68kcpu); + + m68ki_write_16((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_16_aw_a(m68000_base_device* mc68kcpu) +{ + uint32_t res = MASK_OUT_ABOVE_16(AY(mc68kcpu)); + uint32_t ea = EA_AW_16(mc68kcpu); + + m68ki_write_16((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_16_aw_ai(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_AY_AI_16(mc68kcpu); + uint32_t ea = EA_AW_16(mc68kcpu); + + m68ki_write_16((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_16_aw_pi(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_AY_PI_16(mc68kcpu); + uint32_t ea = EA_AW_16(mc68kcpu); + + m68ki_write_16((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_16_aw_pd(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_AY_PD_16(mc68kcpu); + uint32_t ea = EA_AW_16(mc68kcpu); + + m68ki_write_16((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_16_aw_di(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_AY_DI_16(mc68kcpu); + uint32_t ea = EA_AW_16(mc68kcpu); + + m68ki_write_16((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_16_aw_ix(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_AY_IX_16(mc68kcpu); + uint32_t ea = EA_AW_16(mc68kcpu); + + m68ki_write_16((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_16_aw_aw(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_AW_16(mc68kcpu); + uint32_t ea = EA_AW_16(mc68kcpu); + + m68ki_write_16((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_16_aw_al(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_AL_16(mc68kcpu); + uint32_t ea = EA_AW_16(mc68kcpu); + + m68ki_write_16((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_16_aw_pcdi(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_PCDI_16(mc68kcpu); + uint32_t ea = EA_AW_16(mc68kcpu); + + m68ki_write_16((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_16_aw_pcix(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_PCIX_16(mc68kcpu); + uint32_t ea = EA_AW_16(mc68kcpu); + + m68ki_write_16((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_16_aw_i(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_I_16(mc68kcpu); + uint32_t ea = EA_AW_16(mc68kcpu); + + m68ki_write_16((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_16_al_d(m68000_base_device* mc68kcpu) +{ + uint32_t res = MASK_OUT_ABOVE_16(DY(mc68kcpu)); + uint32_t ea = EA_AL_16(mc68kcpu); + + m68ki_write_16((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_16_al_a(m68000_base_device* mc68kcpu) +{ + uint32_t res = MASK_OUT_ABOVE_16(AY(mc68kcpu)); + uint32_t ea = EA_AL_16(mc68kcpu); + + m68ki_write_16((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_16_al_ai(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_AY_AI_16(mc68kcpu); + uint32_t ea = EA_AL_16(mc68kcpu); + + m68ki_write_16((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_16_al_pi(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_AY_PI_16(mc68kcpu); + uint32_t ea = EA_AL_16(mc68kcpu); + + m68ki_write_16((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_16_al_pd(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_AY_PD_16(mc68kcpu); + uint32_t ea = EA_AL_16(mc68kcpu); + + m68ki_write_16((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_16_al_di(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_AY_DI_16(mc68kcpu); + uint32_t ea = EA_AL_16(mc68kcpu); + + m68ki_write_16((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_16_al_ix(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_AY_IX_16(mc68kcpu); + uint32_t ea = EA_AL_16(mc68kcpu); + + m68ki_write_16((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_16_al_aw(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_AW_16(mc68kcpu); + uint32_t ea = EA_AL_16(mc68kcpu); + + m68ki_write_16((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_16_al_al(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_AL_16(mc68kcpu); + uint32_t ea = EA_AL_16(mc68kcpu); + + m68ki_write_16((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_16_al_pcdi(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_PCDI_16(mc68kcpu); + uint32_t ea = EA_AL_16(mc68kcpu); + + m68ki_write_16((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_16_al_pcix(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_PCIX_16(mc68kcpu); + uint32_t ea = EA_AL_16(mc68kcpu); + + m68ki_write_16((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_16_al_i(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_I_16(mc68kcpu); + uint32_t ea = EA_AL_16(mc68kcpu); + + m68ki_write_16((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_32_d_d(m68000_base_device* mc68kcpu) +{ + uint32_t res = DY(mc68kcpu); + uint32_t* r_dst = &DX(mc68kcpu); + + *r_dst = res; + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_32_d_a(m68000_base_device* mc68kcpu) +{ + uint32_t res = AY(mc68kcpu); + uint32_t* r_dst = &DX(mc68kcpu); + + *r_dst = res; + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_32_d_ai(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_AY_AI_32(mc68kcpu); + uint32_t* r_dst = &DX(mc68kcpu); + + *r_dst = res; + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_32_d_pi(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_AY_PI_32(mc68kcpu); + uint32_t* r_dst = &DX(mc68kcpu); + + *r_dst = res; + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_32_d_pd(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_AY_PD_32(mc68kcpu); + uint32_t* r_dst = &DX(mc68kcpu); + + *r_dst = res; + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_32_d_di(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_AY_DI_32(mc68kcpu); + uint32_t* r_dst = &DX(mc68kcpu); + + *r_dst = res; + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_32_d_ix(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_AY_IX_32(mc68kcpu); + uint32_t* r_dst = &DX(mc68kcpu); + + *r_dst = res; + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_32_d_aw(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_AW_32(mc68kcpu); + uint32_t* r_dst = &DX(mc68kcpu); + + *r_dst = res; + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_32_d_al(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_AL_32(mc68kcpu); + uint32_t* r_dst = &DX(mc68kcpu); + + *r_dst = res; + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_32_d_pcdi(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_PCDI_32(mc68kcpu); + uint32_t* r_dst = &DX(mc68kcpu); + + *r_dst = res; + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_32_d_pcix(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_PCIX_32(mc68kcpu); + uint32_t* r_dst = &DX(mc68kcpu); + + *r_dst = res; + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_32_d_i(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_I_32(mc68kcpu); + uint32_t* r_dst = &DX(mc68kcpu); + + *r_dst = res; + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_32_ai_d(m68000_base_device* mc68kcpu) +{ + uint32_t res = DY(mc68kcpu); + uint32_t ea = EA_AX_AI_32(mc68kcpu); + + m68ki_write_32((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_32_ai_a(m68000_base_device* mc68kcpu) +{ + uint32_t res = AY(mc68kcpu); + uint32_t ea = EA_AX_AI_32(mc68kcpu); + + m68ki_write_32((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_32_ai_ai(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_AY_AI_32(mc68kcpu); + uint32_t ea = EA_AX_AI_32(mc68kcpu); + + m68ki_write_32((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_32_ai_pi(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_AY_PI_32(mc68kcpu); + uint32_t ea = EA_AX_AI_32(mc68kcpu); + + m68ki_write_32((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_32_ai_pd(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_AY_PD_32(mc68kcpu); + uint32_t ea = EA_AX_AI_32(mc68kcpu); + + m68ki_write_32((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_32_ai_di(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_AY_DI_32(mc68kcpu); + uint32_t ea = EA_AX_AI_32(mc68kcpu); + + m68ki_write_32((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_32_ai_ix(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_AY_IX_32(mc68kcpu); + uint32_t ea = EA_AX_AI_32(mc68kcpu); + + m68ki_write_32((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_32_ai_aw(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_AW_32(mc68kcpu); + uint32_t ea = EA_AX_AI_32(mc68kcpu); + + m68ki_write_32((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_32_ai_al(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_AL_32(mc68kcpu); + uint32_t ea = EA_AX_AI_32(mc68kcpu); + + m68ki_write_32((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_32_ai_pcdi(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_PCDI_32(mc68kcpu); + uint32_t ea = EA_AX_AI_32(mc68kcpu); + + m68ki_write_32((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_32_ai_pcix(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_PCIX_32(mc68kcpu); + uint32_t ea = EA_AX_AI_32(mc68kcpu); + + m68ki_write_32((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_32_ai_i(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_I_32(mc68kcpu); + uint32_t ea = EA_AX_AI_32(mc68kcpu); + + m68ki_write_32((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_32_pi_d(m68000_base_device* mc68kcpu) +{ + uint32_t res = DY(mc68kcpu); + uint32_t ea = EA_AX_PI_32(mc68kcpu); + + m68ki_write_32((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_32_pi_a(m68000_base_device* mc68kcpu) +{ + uint32_t res = AY(mc68kcpu); + uint32_t ea = EA_AX_PI_32(mc68kcpu); + + m68ki_write_32((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_32_pi_ai(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_AY_AI_32(mc68kcpu); + uint32_t ea = EA_AX_PI_32(mc68kcpu); + + m68ki_write_32((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_32_pi_pi(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_AY_PI_32(mc68kcpu); + uint32_t ea = EA_AX_PI_32(mc68kcpu); + + m68ki_write_32((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_32_pi_pd(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_AY_PD_32(mc68kcpu); + uint32_t ea = EA_AX_PI_32(mc68kcpu); + + m68ki_write_32((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_32_pi_di(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_AY_DI_32(mc68kcpu); + uint32_t ea = EA_AX_PI_32(mc68kcpu); + + m68ki_write_32((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_32_pi_ix(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_AY_IX_32(mc68kcpu); + uint32_t ea = EA_AX_PI_32(mc68kcpu); + + m68ki_write_32((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_32_pi_aw(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_AW_32(mc68kcpu); + uint32_t ea = EA_AX_PI_32(mc68kcpu); + + m68ki_write_32((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_32_pi_al(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_AL_32(mc68kcpu); + uint32_t ea = EA_AX_PI_32(mc68kcpu); + + m68ki_write_32((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_32_pi_pcdi(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_PCDI_32(mc68kcpu); + uint32_t ea = EA_AX_PI_32(mc68kcpu); + + m68ki_write_32((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_32_pi_pcix(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_PCIX_32(mc68kcpu); + uint32_t ea = EA_AX_PI_32(mc68kcpu); + + m68ki_write_32((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_32_pi_i(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_I_32(mc68kcpu); + uint32_t ea = EA_AX_PI_32(mc68kcpu); + + m68ki_write_32((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_32_pd_d(m68000_base_device* mc68kcpu) +{ + uint32_t res = DY(mc68kcpu); + uint32_t ea = EA_AX_PD_32(mc68kcpu); + + m68ki_write_16((mc68kcpu), ea+2, res & 0xFFFF ); + m68ki_write_16((mc68kcpu), ea, (res >> 16) & 0xFFFF ); + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_32_pd_a(m68000_base_device* mc68kcpu) +{ + uint32_t res = AY(mc68kcpu); + uint32_t ea = EA_AX_PD_32(mc68kcpu); + + m68ki_write_16((mc68kcpu), ea+2, res & 0xFFFF ); + m68ki_write_16((mc68kcpu), ea, (res >> 16) & 0xFFFF ); + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_32_pd_ai(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_AY_AI_32(mc68kcpu); + uint32_t ea = EA_AX_PD_32(mc68kcpu); + + m68ki_write_16((mc68kcpu), ea+2, res & 0xFFFF ); + m68ki_write_16((mc68kcpu), ea, (res >> 16) & 0xFFFF ); + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_32_pd_pi(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_AY_PI_32(mc68kcpu); + uint32_t ea = EA_AX_PD_32(mc68kcpu); + + m68ki_write_16((mc68kcpu), ea+2, res & 0xFFFF ); + m68ki_write_16((mc68kcpu), ea, (res >> 16) & 0xFFFF ); + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_32_pd_pd(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_AY_PD_32(mc68kcpu); + uint32_t ea = EA_AX_PD_32(mc68kcpu); + + m68ki_write_16((mc68kcpu), ea+2, res & 0xFFFF ); + m68ki_write_16((mc68kcpu), ea, (res >> 16) & 0xFFFF ); + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_32_pd_di(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_AY_DI_32(mc68kcpu); + uint32_t ea = EA_AX_PD_32(mc68kcpu); + + m68ki_write_16((mc68kcpu), ea+2, res & 0xFFFF ); + m68ki_write_16((mc68kcpu), ea, (res >> 16) & 0xFFFF ); + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_32_pd_ix(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_AY_IX_32(mc68kcpu); + uint32_t ea = EA_AX_PD_32(mc68kcpu); + + m68ki_write_16((mc68kcpu), ea+2, res & 0xFFFF ); + m68ki_write_16((mc68kcpu), ea, (res >> 16) & 0xFFFF ); + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_32_pd_aw(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_AW_32(mc68kcpu); + uint32_t ea = EA_AX_PD_32(mc68kcpu); + + m68ki_write_16((mc68kcpu), ea+2, res & 0xFFFF ); + m68ki_write_16((mc68kcpu), ea, (res >> 16) & 0xFFFF ); + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_32_pd_al(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_AL_32(mc68kcpu); + uint32_t ea = EA_AX_PD_32(mc68kcpu); + + m68ki_write_16((mc68kcpu), ea+2, res & 0xFFFF ); + m68ki_write_16((mc68kcpu), ea, (res >> 16) & 0xFFFF ); + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_32_pd_pcdi(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_PCDI_32(mc68kcpu); + uint32_t ea = EA_AX_PD_32(mc68kcpu); + + m68ki_write_16((mc68kcpu), ea+2, res & 0xFFFF ); + m68ki_write_16((mc68kcpu), ea, (res >> 16) & 0xFFFF ); + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_32_pd_pcix(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_PCIX_32(mc68kcpu); + uint32_t ea = EA_AX_PD_32(mc68kcpu); + + m68ki_write_16((mc68kcpu), ea+2, res & 0xFFFF ); + m68ki_write_16((mc68kcpu), ea, (res >> 16) & 0xFFFF ); + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_32_pd_i(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_I_32(mc68kcpu); + uint32_t ea = EA_AX_PD_32(mc68kcpu); + + m68ki_write_16((mc68kcpu), ea+2, res & 0xFFFF ); + m68ki_write_16((mc68kcpu), ea, (res >> 16) & 0xFFFF ); + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_32_di_d(m68000_base_device* mc68kcpu) +{ + uint32_t res = DY(mc68kcpu); + uint32_t ea = EA_AX_DI_32(mc68kcpu); + + m68ki_write_32((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_32_di_a(m68000_base_device* mc68kcpu) +{ + uint32_t res = AY(mc68kcpu); + uint32_t ea = EA_AX_DI_32(mc68kcpu); + + m68ki_write_32((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_32_di_ai(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_AY_AI_32(mc68kcpu); + uint32_t ea = EA_AX_DI_32(mc68kcpu); + + m68ki_write_32((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_32_di_pi(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_AY_PI_32(mc68kcpu); + uint32_t ea = EA_AX_DI_32(mc68kcpu); + + m68ki_write_32((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_32_di_pd(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_AY_PD_32(mc68kcpu); + uint32_t ea = EA_AX_DI_32(mc68kcpu); + + m68ki_write_32((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_32_di_di(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_AY_DI_32(mc68kcpu); + uint32_t ea = EA_AX_DI_32(mc68kcpu); + + m68ki_write_32((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_32_di_ix(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_AY_IX_32(mc68kcpu); + uint32_t ea = EA_AX_DI_32(mc68kcpu); + + m68ki_write_32((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_32_di_aw(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_AW_32(mc68kcpu); + uint32_t ea = EA_AX_DI_32(mc68kcpu); + + m68ki_write_32((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_32_di_al(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_AL_32(mc68kcpu); + uint32_t ea = EA_AX_DI_32(mc68kcpu); + + m68ki_write_32((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_32_di_pcdi(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_PCDI_32(mc68kcpu); + uint32_t ea = EA_AX_DI_32(mc68kcpu); + + m68ki_write_32((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_32_di_pcix(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_PCIX_32(mc68kcpu); + uint32_t ea = EA_AX_DI_32(mc68kcpu); + + m68ki_write_32((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_32_di_i(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_I_32(mc68kcpu); + uint32_t ea = EA_AX_DI_32(mc68kcpu); + + m68ki_write_32((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_32_ix_d(m68000_base_device* mc68kcpu) +{ + uint32_t res = DY(mc68kcpu); + uint32_t ea = EA_AX_IX_32(mc68kcpu); + + m68ki_write_32((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_32_ix_a(m68000_base_device* mc68kcpu) +{ + uint32_t res = AY(mc68kcpu); + uint32_t ea = EA_AX_IX_32(mc68kcpu); + + m68ki_write_32((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_32_ix_ai(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_AY_AI_32(mc68kcpu); + uint32_t ea = EA_AX_IX_32(mc68kcpu); + + m68ki_write_32((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_32_ix_pi(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_AY_PI_32(mc68kcpu); + uint32_t ea = EA_AX_IX_32(mc68kcpu); + + m68ki_write_32((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_32_ix_pd(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_AY_PD_32(mc68kcpu); + uint32_t ea = EA_AX_IX_32(mc68kcpu); + + m68ki_write_32((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_32_ix_di(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_AY_DI_32(mc68kcpu); + uint32_t ea = EA_AX_IX_32(mc68kcpu); + + m68ki_write_32((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_32_ix_ix(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_AY_IX_32(mc68kcpu); + uint32_t ea = EA_AX_IX_32(mc68kcpu); + + m68ki_write_32((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_32_ix_aw(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_AW_32(mc68kcpu); + uint32_t ea = EA_AX_IX_32(mc68kcpu); + + m68ki_write_32((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_32_ix_al(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_AL_32(mc68kcpu); + uint32_t ea = EA_AX_IX_32(mc68kcpu); + + m68ki_write_32((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_32_ix_pcdi(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_PCDI_32(mc68kcpu); + uint32_t ea = EA_AX_IX_32(mc68kcpu); + + m68ki_write_32((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_32_ix_pcix(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_PCIX_32(mc68kcpu); + uint32_t ea = EA_AX_IX_32(mc68kcpu); + + m68ki_write_32((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_32_ix_i(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_I_32(mc68kcpu); + uint32_t ea = EA_AX_IX_32(mc68kcpu); + + m68ki_write_32((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_32_aw_d(m68000_base_device* mc68kcpu) +{ + uint32_t res = DY(mc68kcpu); + uint32_t ea = EA_AW_32(mc68kcpu); + + m68ki_write_32((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_32_aw_a(m68000_base_device* mc68kcpu) +{ + uint32_t res = AY(mc68kcpu); + uint32_t ea = EA_AW_32(mc68kcpu); + + m68ki_write_32((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_32_aw_ai(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_AY_AI_32(mc68kcpu); + uint32_t ea = EA_AW_32(mc68kcpu); + + m68ki_write_32((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_32_aw_pi(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_AY_PI_32(mc68kcpu); + uint32_t ea = EA_AW_32(mc68kcpu); + + m68ki_write_32((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_32_aw_pd(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_AY_PD_32(mc68kcpu); + uint32_t ea = EA_AW_32(mc68kcpu); + + m68ki_write_32((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_32_aw_di(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_AY_DI_32(mc68kcpu); + uint32_t ea = EA_AW_32(mc68kcpu); + + m68ki_write_32((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_32_aw_ix(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_AY_IX_32(mc68kcpu); + uint32_t ea = EA_AW_32(mc68kcpu); + + m68ki_write_32((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_32_aw_aw(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_AW_32(mc68kcpu); + uint32_t ea = EA_AW_32(mc68kcpu); + + m68ki_write_32((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_32_aw_al(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_AL_32(mc68kcpu); + uint32_t ea = EA_AW_32(mc68kcpu); + + m68ki_write_32((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_32_aw_pcdi(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_PCDI_32(mc68kcpu); + uint32_t ea = EA_AW_32(mc68kcpu); + + m68ki_write_32((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_32_aw_pcix(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_PCIX_32(mc68kcpu); + uint32_t ea = EA_AW_32(mc68kcpu); + + m68ki_write_32((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_32_aw_i(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_I_32(mc68kcpu); + uint32_t ea = EA_AW_32(mc68kcpu); + + m68ki_write_32((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_32_al_d(m68000_base_device* mc68kcpu) +{ + uint32_t res = DY(mc68kcpu); + uint32_t ea = EA_AL_32(mc68kcpu); + + m68ki_write_32((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_32_al_a(m68000_base_device* mc68kcpu) +{ + uint32_t res = AY(mc68kcpu); + uint32_t ea = EA_AL_32(mc68kcpu); + + m68ki_write_32((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_32_al_ai(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_AY_AI_32(mc68kcpu); + uint32_t ea = EA_AL_32(mc68kcpu); + + m68ki_write_32((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_32_al_pi(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_AY_PI_32(mc68kcpu); + uint32_t ea = EA_AL_32(mc68kcpu); + + m68ki_write_32((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_32_al_pd(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_AY_PD_32(mc68kcpu); + uint32_t ea = EA_AL_32(mc68kcpu); + + m68ki_write_32((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_32_al_di(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_AY_DI_32(mc68kcpu); + uint32_t ea = EA_AL_32(mc68kcpu); + + m68ki_write_32((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_32_al_ix(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_AY_IX_32(mc68kcpu); + uint32_t ea = EA_AL_32(mc68kcpu); + + m68ki_write_32((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_32_al_aw(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_AW_32(mc68kcpu); + uint32_t ea = EA_AL_32(mc68kcpu); + + m68ki_write_32((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_32_al_al(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_AL_32(mc68kcpu); + uint32_t ea = EA_AL_32(mc68kcpu); + + m68ki_write_32((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_32_al_pcdi(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_PCDI_32(mc68kcpu); + uint32_t ea = EA_AL_32(mc68kcpu); + + m68ki_write_32((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_32_al_pcix(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_PCIX_32(mc68kcpu); + uint32_t ea = EA_AL_32(mc68kcpu); + + m68ki_write_32((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move_32_al_i(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_I_32(mc68kcpu); + uint32_t ea = EA_AL_32(mc68kcpu); + + m68ki_write_32((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_movea_16_d(m68000_base_device* mc68kcpu) +{ + AX(mc68kcpu) = MAKE_INT_16(DY(mc68kcpu)); +} + + +static void m68k_op_movea_16_a(m68000_base_device* mc68kcpu) +{ + AX(mc68kcpu) = MAKE_INT_16(AY(mc68kcpu)); +} + + +static void m68k_op_movea_16_ai(m68000_base_device* mc68kcpu) +{ + AX(mc68kcpu) = MAKE_INT_16(OPER_AY_AI_16(mc68kcpu)); +} + + +static void m68k_op_movea_16_pi(m68000_base_device* mc68kcpu) +{ + AX(mc68kcpu) = MAKE_INT_16(OPER_AY_PI_16(mc68kcpu)); +} + + +static void m68k_op_movea_16_pd(m68000_base_device* mc68kcpu) +{ + AX(mc68kcpu) = MAKE_INT_16(OPER_AY_PD_16(mc68kcpu)); +} + + +static void m68k_op_movea_16_di(m68000_base_device* mc68kcpu) +{ + AX(mc68kcpu) = MAKE_INT_16(OPER_AY_DI_16(mc68kcpu)); +} + + +static void m68k_op_movea_16_ix(m68000_base_device* mc68kcpu) +{ + AX(mc68kcpu) = MAKE_INT_16(OPER_AY_IX_16(mc68kcpu)); +} + + +static void m68k_op_movea_16_aw(m68000_base_device* mc68kcpu) +{ + AX(mc68kcpu) = MAKE_INT_16(OPER_AW_16(mc68kcpu)); +} + + +static void m68k_op_movea_16_al(m68000_base_device* mc68kcpu) +{ + AX(mc68kcpu) = MAKE_INT_16(OPER_AL_16(mc68kcpu)); +} + + +static void m68k_op_movea_16_pcdi(m68000_base_device* mc68kcpu) +{ + AX(mc68kcpu) = MAKE_INT_16(OPER_PCDI_16(mc68kcpu)); +} + + +static void m68k_op_movea_16_pcix(m68000_base_device* mc68kcpu) +{ + AX(mc68kcpu) = MAKE_INT_16(OPER_PCIX_16(mc68kcpu)); +} + + +static void m68k_op_movea_16_i(m68000_base_device* mc68kcpu) +{ + AX(mc68kcpu) = MAKE_INT_16(OPER_I_16(mc68kcpu)); +} + + +static void m68k_op_movea_32_d(m68000_base_device* mc68kcpu) +{ + AX(mc68kcpu) = DY(mc68kcpu); +} + + +static void m68k_op_movea_32_a(m68000_base_device* mc68kcpu) +{ + AX(mc68kcpu) = AY(mc68kcpu); +} + + +static void m68k_op_movea_32_ai(m68000_base_device* mc68kcpu) +{ + AX(mc68kcpu) = OPER_AY_AI_32(mc68kcpu); +} + + +static void m68k_op_movea_32_pi(m68000_base_device* mc68kcpu) +{ + AX(mc68kcpu) = OPER_AY_PI_32(mc68kcpu); +} + + +static void m68k_op_movea_32_pd(m68000_base_device* mc68kcpu) +{ + AX(mc68kcpu) = OPER_AY_PD_32(mc68kcpu); +} + + +static void m68k_op_movea_32_di(m68000_base_device* mc68kcpu) +{ + AX(mc68kcpu) = OPER_AY_DI_32(mc68kcpu); +} + + +static void m68k_op_movea_32_ix(m68000_base_device* mc68kcpu) +{ + AX(mc68kcpu) = OPER_AY_IX_32(mc68kcpu); +} + + +static void m68k_op_movea_32_aw(m68000_base_device* mc68kcpu) +{ + AX(mc68kcpu) = OPER_AW_32(mc68kcpu); +} + + +static void m68k_op_movea_32_al(m68000_base_device* mc68kcpu) +{ + AX(mc68kcpu) = OPER_AL_32(mc68kcpu); +} + + +static void m68k_op_movea_32_pcdi(m68000_base_device* mc68kcpu) +{ + AX(mc68kcpu) = OPER_PCDI_32(mc68kcpu); +} + + +static void m68k_op_movea_32_pcix(m68000_base_device* mc68kcpu) +{ + AX(mc68kcpu) = OPER_PCIX_32(mc68kcpu); +} + + +static void m68k_op_movea_32_i(m68000_base_device* mc68kcpu) +{ + AX(mc68kcpu) = OPER_I_32(mc68kcpu); +} + + +static void m68k_op_move_16_frc_d(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_010_PLUS((mc68kcpu)->cpu_type)) + { + DY(mc68kcpu) = MASK_OUT_BELOW_16(DY(mc68kcpu)) | m68ki_get_ccr(mc68kcpu); + return; + } + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_move_16_frc_ai(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_010_PLUS((mc68kcpu)->cpu_type)) + { + m68ki_write_16((mc68kcpu), EA_AY_AI_16(mc68kcpu), m68ki_get_ccr(mc68kcpu)); + return; + } + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_move_16_frc_pi(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_010_PLUS((mc68kcpu)->cpu_type)) + { + m68ki_write_16((mc68kcpu), EA_AY_PI_16(mc68kcpu), m68ki_get_ccr(mc68kcpu)); + return; + } + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_move_16_frc_pd(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_010_PLUS((mc68kcpu)->cpu_type)) + { + m68ki_write_16((mc68kcpu), EA_AY_PD_16(mc68kcpu), m68ki_get_ccr(mc68kcpu)); + return; + } + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_move_16_frc_di(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_010_PLUS((mc68kcpu)->cpu_type)) + { + m68ki_write_16((mc68kcpu), EA_AY_DI_16(mc68kcpu), m68ki_get_ccr(mc68kcpu)); + return; + } + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_move_16_frc_ix(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_010_PLUS((mc68kcpu)->cpu_type)) + { + m68ki_write_16((mc68kcpu), EA_AY_IX_16(mc68kcpu), m68ki_get_ccr(mc68kcpu)); + return; + } + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_move_16_frc_aw(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_010_PLUS((mc68kcpu)->cpu_type)) + { + m68ki_write_16((mc68kcpu), EA_AW_16(mc68kcpu), m68ki_get_ccr(mc68kcpu)); + return; + } + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_move_16_frc_al(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_010_PLUS((mc68kcpu)->cpu_type)) + { + m68ki_write_16((mc68kcpu), EA_AL_16(mc68kcpu), m68ki_get_ccr(mc68kcpu)); + return; + } + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_move_16_toc_d(m68000_base_device* mc68kcpu) +{ + m68ki_set_ccr((mc68kcpu), DY(mc68kcpu)); +} + + +static void m68k_op_move_16_toc_ai(m68000_base_device* mc68kcpu) +{ + m68ki_set_ccr((mc68kcpu), OPER_AY_AI_16(mc68kcpu)); +} + + +static void m68k_op_move_16_toc_pi(m68000_base_device* mc68kcpu) +{ + m68ki_set_ccr((mc68kcpu), OPER_AY_PI_16(mc68kcpu)); +} + + +static void m68k_op_move_16_toc_pd(m68000_base_device* mc68kcpu) +{ + m68ki_set_ccr((mc68kcpu), OPER_AY_PD_16(mc68kcpu)); +} + + +static void m68k_op_move_16_toc_di(m68000_base_device* mc68kcpu) +{ + m68ki_set_ccr((mc68kcpu), OPER_AY_DI_16(mc68kcpu)); +} + + +static void m68k_op_move_16_toc_ix(m68000_base_device* mc68kcpu) +{ + m68ki_set_ccr((mc68kcpu), OPER_AY_IX_16(mc68kcpu)); +} + + +static void m68k_op_move_16_toc_aw(m68000_base_device* mc68kcpu) +{ + m68ki_set_ccr((mc68kcpu), OPER_AW_16(mc68kcpu)); +} + + +static void m68k_op_move_16_toc_al(m68000_base_device* mc68kcpu) +{ + m68ki_set_ccr((mc68kcpu), OPER_AL_16(mc68kcpu)); +} + + +static void m68k_op_move_16_toc_pcdi(m68000_base_device* mc68kcpu) +{ + m68ki_set_ccr((mc68kcpu), OPER_PCDI_16(mc68kcpu)); +} + + +static void m68k_op_move_16_toc_pcix(m68000_base_device* mc68kcpu) +{ + m68ki_set_ccr((mc68kcpu), OPER_PCIX_16(mc68kcpu)); +} + + +static void m68k_op_move_16_toc_i(m68000_base_device* mc68kcpu) +{ + m68ki_set_ccr((mc68kcpu), OPER_I_16(mc68kcpu)); +} + + +static void m68k_op_move_16_frs_d(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_000((mc68kcpu)->cpu_type) || (mc68kcpu)->s_flag) /* NS990408 */ + { + DY(mc68kcpu) = MASK_OUT_BELOW_16(DY(mc68kcpu)) | m68ki_get_sr(mc68kcpu); + return; + } + m68ki_exception_privilege_violation(mc68kcpu); +} + + +static void m68k_op_move_16_frs_ai(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_000((mc68kcpu)->cpu_type) || (mc68kcpu)->s_flag) /* NS990408 */ + { + uint32_t ea = EA_AY_AI_16(mc68kcpu); + m68ki_write_16((mc68kcpu), ea, m68ki_get_sr(mc68kcpu)); + return; + } + m68ki_exception_privilege_violation(mc68kcpu); +} + + +static void m68k_op_move_16_frs_pi(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_000((mc68kcpu)->cpu_type) || (mc68kcpu)->s_flag) /* NS990408 */ + { + uint32_t ea = EA_AY_PI_16(mc68kcpu); + m68ki_write_16((mc68kcpu), ea, m68ki_get_sr(mc68kcpu)); + return; + } + m68ki_exception_privilege_violation(mc68kcpu); +} + + +static void m68k_op_move_16_frs_pd(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_000((mc68kcpu)->cpu_type) || (mc68kcpu)->s_flag) /* NS990408 */ + { + uint32_t ea = EA_AY_PD_16(mc68kcpu); + m68ki_write_16((mc68kcpu), ea, m68ki_get_sr(mc68kcpu)); + return; + } + m68ki_exception_privilege_violation(mc68kcpu); +} + + +static void m68k_op_move_16_frs_di(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_000((mc68kcpu)->cpu_type) || (mc68kcpu)->s_flag) /* NS990408 */ + { + uint32_t ea = EA_AY_DI_16(mc68kcpu); + m68ki_write_16((mc68kcpu), ea, m68ki_get_sr(mc68kcpu)); + return; + } + m68ki_exception_privilege_violation(mc68kcpu); +} + + +static void m68k_op_move_16_frs_ix(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_000((mc68kcpu)->cpu_type) || (mc68kcpu)->s_flag) /* NS990408 */ + { + uint32_t ea = EA_AY_IX_16(mc68kcpu); + m68ki_write_16((mc68kcpu), ea, m68ki_get_sr(mc68kcpu)); + return; + } + m68ki_exception_privilege_violation(mc68kcpu); +} + + +static void m68k_op_move_16_frs_aw(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_000((mc68kcpu)->cpu_type) || (mc68kcpu)->s_flag) /* NS990408 */ + { + uint32_t ea = EA_AW_16(mc68kcpu); + m68ki_write_16((mc68kcpu), ea, m68ki_get_sr(mc68kcpu)); + return; + } + m68ki_exception_privilege_violation(mc68kcpu); +} + + +static void m68k_op_move_16_frs_al(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_000((mc68kcpu)->cpu_type) || (mc68kcpu)->s_flag) /* NS990408 */ + { + uint32_t ea = EA_AL_16(mc68kcpu); + m68ki_write_16((mc68kcpu), ea, m68ki_get_sr(mc68kcpu)); + return; + } + m68ki_exception_privilege_violation(mc68kcpu); +} + + +static void m68k_op_move_16_tos_d(m68000_base_device* mc68kcpu) +{ + if((mc68kcpu)->s_flag) + { + m68ki_set_sr((mc68kcpu), DY(mc68kcpu)); + return; + } + m68ki_exception_privilege_violation(mc68kcpu); +} + + +static void m68k_op_move_16_tos_ai(m68000_base_device* mc68kcpu) +{ + if((mc68kcpu)->s_flag) + { + uint32_t new_sr = OPER_AY_AI_16(mc68kcpu); + m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */ + m68ki_set_sr((mc68kcpu), new_sr); + return; + } + m68ki_exception_privilege_violation(mc68kcpu); +} + + +static void m68k_op_move_16_tos_pi(m68000_base_device* mc68kcpu) +{ + if((mc68kcpu)->s_flag) + { + uint32_t new_sr = OPER_AY_PI_16(mc68kcpu); + m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */ + m68ki_set_sr((mc68kcpu), new_sr); + return; + } + m68ki_exception_privilege_violation(mc68kcpu); +} + + +static void m68k_op_move_16_tos_pd(m68000_base_device* mc68kcpu) +{ + if((mc68kcpu)->s_flag) + { + uint32_t new_sr = OPER_AY_PD_16(mc68kcpu); + m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */ + m68ki_set_sr((mc68kcpu), new_sr); + return; + } + m68ki_exception_privilege_violation(mc68kcpu); +} + + +static void m68k_op_move_16_tos_di(m68000_base_device* mc68kcpu) +{ + if((mc68kcpu)->s_flag) + { + uint32_t new_sr = OPER_AY_DI_16(mc68kcpu); + m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */ + m68ki_set_sr((mc68kcpu), new_sr); + return; + } + m68ki_exception_privilege_violation(mc68kcpu); +} + + +static void m68k_op_move_16_tos_ix(m68000_base_device* mc68kcpu) +{ + if((mc68kcpu)->s_flag) + { + uint32_t new_sr = OPER_AY_IX_16(mc68kcpu); + m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */ + m68ki_set_sr((mc68kcpu), new_sr); + return; + } + m68ki_exception_privilege_violation(mc68kcpu); +} + + +static void m68k_op_move_16_tos_aw(m68000_base_device* mc68kcpu) +{ + if((mc68kcpu)->s_flag) + { + uint32_t new_sr = OPER_AW_16(mc68kcpu); + m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */ + m68ki_set_sr((mc68kcpu), new_sr); + return; + } + m68ki_exception_privilege_violation(mc68kcpu); +} + + +static void m68k_op_move_16_tos_al(m68000_base_device* mc68kcpu) +{ + if((mc68kcpu)->s_flag) + { + uint32_t new_sr = OPER_AL_16(mc68kcpu); + m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */ + m68ki_set_sr((mc68kcpu), new_sr); + return; + } + m68ki_exception_privilege_violation(mc68kcpu); +} + + +static void m68k_op_move_16_tos_pcdi(m68000_base_device* mc68kcpu) +{ + if((mc68kcpu)->s_flag) + { + uint32_t new_sr = OPER_PCDI_16(mc68kcpu); + m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */ + m68ki_set_sr((mc68kcpu), new_sr); + return; + } + m68ki_exception_privilege_violation(mc68kcpu); +} + + +static void m68k_op_move_16_tos_pcix(m68000_base_device* mc68kcpu) +{ + if((mc68kcpu)->s_flag) + { + uint32_t new_sr = OPER_PCIX_16(mc68kcpu); + m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */ + m68ki_set_sr((mc68kcpu), new_sr); + return; + } + m68ki_exception_privilege_violation(mc68kcpu); +} + + +static void m68k_op_move_16_tos_i(m68000_base_device* mc68kcpu) +{ + if((mc68kcpu)->s_flag) + { + uint32_t new_sr = OPER_I_16(mc68kcpu); + m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */ + m68ki_set_sr((mc68kcpu), new_sr); + return; + } + m68ki_exception_privilege_violation(mc68kcpu); +} + + +static void m68k_op_move_32_fru(m68000_base_device* mc68kcpu) +{ + if((mc68kcpu)->s_flag) + { + AY(mc68kcpu) = REG_USP(mc68kcpu); + return; + } + m68ki_exception_privilege_violation(mc68kcpu); +} + + +static void m68k_op_move_32_tou(m68000_base_device* mc68kcpu) +{ + if((mc68kcpu)->s_flag) + { + m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */ + REG_USP(mc68kcpu) = AY(mc68kcpu); + return; + } + m68ki_exception_privilege_violation(mc68kcpu); +} + + +static void m68k_op_movec_32_cr(m68000_base_device* mc68kcpu) +{ + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_movec_32_rc(m68000_base_device* mc68kcpu) +{ + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_movem_16_re_pd(m68000_base_device* mc68kcpu) +{ + uint32_t i = 0; + uint32_t register_list = OPER_I_16(mc68kcpu); + uint32_t ea = AY(mc68kcpu); + uint32_t count = 0; + + for(; i < 16; i++) + if(register_list & (1 << i)) + { + ea -= 2; + m68ki_write_16((mc68kcpu), ea, MASK_OUT_ABOVE_16(REG_DA(mc68kcpu)[15-i])); + count++; + } + AY(mc68kcpu) = ea; + + (mc68kcpu)->c.current_cycle += (count<<(mc68kcpu)->cyc_movem_w) * (mc68kcpu)->c.options->gen.clock_divider; +} + + +static void m68k_op_movem_16_re_ai(m68000_base_device* mc68kcpu) +{ + uint32_t i = 0; + uint32_t register_list = OPER_I_16(mc68kcpu); + uint32_t ea = EA_AY_AI_16(mc68kcpu); + uint32_t count = 0; + + for(; i < 16; i++) + if(register_list & (1 << i)) + { + m68ki_write_16((mc68kcpu), ea, MASK_OUT_ABOVE_16(REG_DA(mc68kcpu)[i])); + ea += 2; + count++; + } + + (mc68kcpu)->c.current_cycle += (count<<(mc68kcpu)->cyc_movem_w) * (mc68kcpu)->c.options->gen.clock_divider; +} + + +static void m68k_op_movem_16_re_di(m68000_base_device* mc68kcpu) +{ + uint32_t i = 0; + uint32_t register_list = OPER_I_16(mc68kcpu); + uint32_t ea = EA_AY_DI_16(mc68kcpu); + uint32_t count = 0; + + for(; i < 16; i++) + if(register_list & (1 << i)) + { + m68ki_write_16((mc68kcpu), ea, MASK_OUT_ABOVE_16(REG_DA(mc68kcpu)[i])); + ea += 2; + count++; + } + + (mc68kcpu)->c.current_cycle += (count<<(mc68kcpu)->cyc_movem_w) * (mc68kcpu)->c.options->gen.clock_divider; +} + + +static void m68k_op_movem_16_re_ix(m68000_base_device* mc68kcpu) +{ + uint32_t i = 0; + uint32_t register_list = OPER_I_16(mc68kcpu); + uint32_t ea = EA_AY_IX_16(mc68kcpu); + uint32_t count = 0; + + for(; i < 16; i++) + if(register_list & (1 << i)) + { + m68ki_write_16((mc68kcpu), ea, MASK_OUT_ABOVE_16(REG_DA(mc68kcpu)[i])); + ea += 2; + count++; + } + + (mc68kcpu)->c.current_cycle += (count<<(mc68kcpu)->cyc_movem_w) * (mc68kcpu)->c.options->gen.clock_divider; +} + + +static void m68k_op_movem_16_re_aw(m68000_base_device* mc68kcpu) +{ + uint32_t i = 0; + uint32_t register_list = OPER_I_16(mc68kcpu); + uint32_t ea = EA_AW_16(mc68kcpu); + uint32_t count = 0; + + for(; i < 16; i++) + if(register_list & (1 << i)) + { + m68ki_write_16((mc68kcpu), ea, MASK_OUT_ABOVE_16(REG_DA(mc68kcpu)[i])); + ea += 2; + count++; + } + + (mc68kcpu)->c.current_cycle += (count<<(mc68kcpu)->cyc_movem_w) * (mc68kcpu)->c.options->gen.clock_divider; +} + + +static void m68k_op_movem_16_re_al(m68000_base_device* mc68kcpu) +{ + uint32_t i = 0; + uint32_t register_list = OPER_I_16(mc68kcpu); + uint32_t ea = EA_AL_16(mc68kcpu); + uint32_t count = 0; + + for(; i < 16; i++) + if(register_list & (1 << i)) + { + m68ki_write_16((mc68kcpu), ea, MASK_OUT_ABOVE_16(REG_DA(mc68kcpu)[i])); + ea += 2; + count++; + } + + (mc68kcpu)->c.current_cycle += (count<<(mc68kcpu)->cyc_movem_w) * (mc68kcpu)->c.options->gen.clock_divider; +} + + +static void m68k_op_movem_32_re_pd(m68000_base_device* mc68kcpu) +{ + uint32_t i = 0; + uint32_t register_list = OPER_I_16(mc68kcpu); + uint32_t ea = AY(mc68kcpu); + uint32_t count = 0; + + for(; i < 16; i++) + if(register_list & (1 << i)) + { + ea -= 4; + m68ki_write_16((mc68kcpu), ea+2, REG_DA(mc68kcpu)[15-i] & 0xFFFF ); + m68ki_write_16((mc68kcpu), ea, (REG_DA(mc68kcpu)[15-i] >> 16) & 0xFFFF ); + count++; + } + AY(mc68kcpu) = ea; + + (mc68kcpu)->c.current_cycle += (count<<(mc68kcpu)->cyc_movem_l) * (mc68kcpu)->c.options->gen.clock_divider; +} + + +static void m68k_op_movem_32_re_ai(m68000_base_device* mc68kcpu) +{ + uint32_t i = 0; + uint32_t register_list = OPER_I_16(mc68kcpu); + uint32_t ea = EA_AY_AI_32(mc68kcpu); + uint32_t count = 0; + + for(; i < 16; i++) + if(register_list & (1 << i)) + { + m68ki_write_32((mc68kcpu), ea, REG_DA(mc68kcpu)[i]); + ea += 4; + count++; + } + + (mc68kcpu)->c.current_cycle += (count<<(mc68kcpu)->cyc_movem_l) * (mc68kcpu)->c.options->gen.clock_divider; +} + + +static void m68k_op_movem_32_re_di(m68000_base_device* mc68kcpu) +{ + uint32_t i = 0; + uint32_t register_list = OPER_I_16(mc68kcpu); + uint32_t ea = EA_AY_DI_32(mc68kcpu); + uint32_t count = 0; + + for(; i < 16; i++) + if(register_list & (1 << i)) + { + m68ki_write_32((mc68kcpu), ea, REG_DA(mc68kcpu)[i]); + ea += 4; + count++; + } + + (mc68kcpu)->c.current_cycle += (count<<(mc68kcpu)->cyc_movem_l) * (mc68kcpu)->c.options->gen.clock_divider; +} + + +static void m68k_op_movem_32_re_ix(m68000_base_device* mc68kcpu) +{ + uint32_t i = 0; + uint32_t register_list = OPER_I_16(mc68kcpu); + uint32_t ea = EA_AY_IX_32(mc68kcpu); + uint32_t count = 0; + + for(; i < 16; i++) + if(register_list & (1 << i)) + { + m68ki_write_32((mc68kcpu), ea, REG_DA(mc68kcpu)[i]); + ea += 4; + count++; + } + + (mc68kcpu)->c.current_cycle += (count<<(mc68kcpu)->cyc_movem_l) * (mc68kcpu)->c.options->gen.clock_divider; +} + + +static void m68k_op_movem_32_re_aw(m68000_base_device* mc68kcpu) +{ + uint32_t i = 0; + uint32_t register_list = OPER_I_16(mc68kcpu); + uint32_t ea = EA_AW_32(mc68kcpu); + uint32_t count = 0; + + for(; i < 16; i++) + if(register_list & (1 << i)) + { + m68ki_write_32((mc68kcpu), ea, REG_DA(mc68kcpu)[i]); + ea += 4; + count++; + } + + (mc68kcpu)->c.current_cycle += (count<<(mc68kcpu)->cyc_movem_l) * (mc68kcpu)->c.options->gen.clock_divider; +} + + +static void m68k_op_movem_32_re_al(m68000_base_device* mc68kcpu) +{ + uint32_t i = 0; + uint32_t register_list = OPER_I_16(mc68kcpu); + uint32_t ea = EA_AL_32(mc68kcpu); + uint32_t count = 0; + + for(; i < 16; i++) + if(register_list & (1 << i)) + { + m68ki_write_32((mc68kcpu), ea, REG_DA(mc68kcpu)[i]); + ea += 4; + count++; + } + + (mc68kcpu)->c.current_cycle += (count<<(mc68kcpu)->cyc_movem_l) * (mc68kcpu)->c.options->gen.clock_divider; +} + + +static void m68k_op_movem_16_er_pi(m68000_base_device* mc68kcpu) +{ + uint32_t i = 0; + uint32_t register_list = OPER_I_16(mc68kcpu); + uint32_t ea = AY(mc68kcpu); + uint32_t count = 0; + + for(; i < 16; i++) + if(register_list & (1 << i)) + { + REG_DA(mc68kcpu)[i] = MAKE_INT_16(MASK_OUT_ABOVE_16(m68ki_read_16((mc68kcpu), ea))); + ea += 2; + count++; + } + AY(mc68kcpu) = ea; + + (mc68kcpu)->c.current_cycle += (count<<(mc68kcpu)->cyc_movem_w) * (mc68kcpu)->c.options->gen.clock_divider; +} + + +static void m68k_op_movem_16_er_pcdi(m68000_base_device* mc68kcpu) +{ + uint32_t i = 0; + uint32_t register_list = OPER_I_16(mc68kcpu); + uint32_t ea = EA_PCDI_16(mc68kcpu); + uint32_t count = 0; + + for(; i < 16; i++) + if(register_list & (1 << i)) + { + REG_DA(mc68kcpu)[i] = MAKE_INT_16(MASK_OUT_ABOVE_16(m68ki_read_16((mc68kcpu), ea))); + ea += 2; + count++; + } + + (mc68kcpu)->c.current_cycle += (count<<(mc68kcpu)->cyc_movem_w) * (mc68kcpu)->c.options->gen.clock_divider; +} + + +static void m68k_op_movem_16_er_pcix(m68000_base_device* mc68kcpu) +{ + uint32_t i = 0; + uint32_t register_list = OPER_I_16(mc68kcpu); + uint32_t ea = EA_PCIX_16(mc68kcpu); + uint32_t count = 0; + + for(; i < 16; i++) + if(register_list & (1 << i)) + { + REG_DA(mc68kcpu)[i] = MAKE_INT_16(MASK_OUT_ABOVE_16(m68ki_read_16((mc68kcpu), ea))); + ea += 2; + count++; + } + + (mc68kcpu)->c.current_cycle += (count<<(mc68kcpu)->cyc_movem_w) * (mc68kcpu)->c.options->gen.clock_divider; +} + + +static void m68k_op_movem_16_er_ai(m68000_base_device* mc68kcpu) +{ + uint32_t i = 0; + uint32_t register_list = OPER_I_16(mc68kcpu); + uint32_t ea = EA_AY_AI_16(mc68kcpu); + uint32_t count = 0; + + for(; i < 16; i++) + if(register_list & (1 << i)) + { + REG_DA(mc68kcpu)[i] = MAKE_INT_16(MASK_OUT_ABOVE_16(m68ki_read_16((mc68kcpu), ea))); + ea += 2; + count++; + } + + (mc68kcpu)->c.current_cycle += (count<<(mc68kcpu)->cyc_movem_w) * (mc68kcpu)->c.options->gen.clock_divider; +} + + +static void m68k_op_movem_16_er_di(m68000_base_device* mc68kcpu) +{ + uint32_t i = 0; + uint32_t register_list = OPER_I_16(mc68kcpu); + uint32_t ea = EA_AY_DI_16(mc68kcpu); + uint32_t count = 0; + + for(; i < 16; i++) + if(register_list & (1 << i)) + { + REG_DA(mc68kcpu)[i] = MAKE_INT_16(MASK_OUT_ABOVE_16(m68ki_read_16((mc68kcpu), ea))); + ea += 2; + count++; + } + + (mc68kcpu)->c.current_cycle += (count<<(mc68kcpu)->cyc_movem_w) * (mc68kcpu)->c.options->gen.clock_divider; +} + + +static void m68k_op_movem_16_er_ix(m68000_base_device* mc68kcpu) +{ + uint32_t i = 0; + uint32_t register_list = OPER_I_16(mc68kcpu); + uint32_t ea = EA_AY_IX_16(mc68kcpu); + uint32_t count = 0; + + for(; i < 16; i++) + if(register_list & (1 << i)) + { + REG_DA(mc68kcpu)[i] = MAKE_INT_16(MASK_OUT_ABOVE_16(m68ki_read_16((mc68kcpu), ea))); + ea += 2; + count++; + } + + (mc68kcpu)->c.current_cycle += (count<<(mc68kcpu)->cyc_movem_w) * (mc68kcpu)->c.options->gen.clock_divider; +} + + +static void m68k_op_movem_16_er_aw(m68000_base_device* mc68kcpu) +{ + uint32_t i = 0; + uint32_t register_list = OPER_I_16(mc68kcpu); + uint32_t ea = EA_AW_16(mc68kcpu); + uint32_t count = 0; + + for(; i < 16; i++) + if(register_list & (1 << i)) + { + REG_DA(mc68kcpu)[i] = MAKE_INT_16(MASK_OUT_ABOVE_16(m68ki_read_16((mc68kcpu), ea))); + ea += 2; + count++; + } + + (mc68kcpu)->c.current_cycle += (count<<(mc68kcpu)->cyc_movem_w) * (mc68kcpu)->c.options->gen.clock_divider; +} + + +static void m68k_op_movem_16_er_al(m68000_base_device* mc68kcpu) +{ + uint32_t i = 0; + uint32_t register_list = OPER_I_16(mc68kcpu); + uint32_t ea = EA_AL_16(mc68kcpu); + uint32_t count = 0; + + for(; i < 16; i++) + if(register_list & (1 << i)) + { + REG_DA(mc68kcpu)[i] = MAKE_INT_16(MASK_OUT_ABOVE_16(m68ki_read_16((mc68kcpu), ea))); + ea += 2; + count++; + } + + (mc68kcpu)->c.current_cycle += (count<<(mc68kcpu)->cyc_movem_w) * (mc68kcpu)->c.options->gen.clock_divider; +} + + +static void m68k_op_movem_32_er_pi(m68000_base_device* mc68kcpu) +{ + uint32_t i = 0; + uint32_t register_list = OPER_I_16(mc68kcpu); + uint32_t ea = AY(mc68kcpu); + uint32_t count = 0; + + for(; i < 16; i++) + if(register_list & (1 << i)) + { + REG_DA(mc68kcpu)[i] = m68ki_read_32((mc68kcpu), ea); + ea += 4; + count++; + } + AY(mc68kcpu) = ea; + + (mc68kcpu)->c.current_cycle += (count<<(mc68kcpu)->cyc_movem_l) * (mc68kcpu)->c.options->gen.clock_divider; +} + + +static void m68k_op_movem_32_er_pcdi(m68000_base_device* mc68kcpu) +{ + uint32_t i = 0; + uint32_t register_list = OPER_I_16(mc68kcpu); + uint32_t ea = EA_PCDI_32(mc68kcpu); + uint32_t count = 0; + + for(; i < 16; i++) + if(register_list & (1 << i)) + { + REG_DA(mc68kcpu)[i] = m68ki_read_32((mc68kcpu), ea); + ea += 4; + count++; + } + + (mc68kcpu)->c.current_cycle += (count<<(mc68kcpu)->cyc_movem_l) * (mc68kcpu)->c.options->gen.clock_divider; +} + + +static void m68k_op_movem_32_er_pcix(m68000_base_device* mc68kcpu) +{ + uint32_t i = 0; + uint32_t register_list = OPER_I_16(mc68kcpu); + uint32_t ea = EA_PCIX_32(mc68kcpu); + uint32_t count = 0; + + for(; i < 16; i++) + if(register_list & (1 << i)) + { + REG_DA(mc68kcpu)[i] = m68ki_read_32((mc68kcpu), ea); + ea += 4; + count++; + } + + (mc68kcpu)->c.current_cycle += (count<<(mc68kcpu)->cyc_movem_l) * (mc68kcpu)->c.options->gen.clock_divider; +} + + +static void m68k_op_movem_32_er_ai(m68000_base_device* mc68kcpu) +{ + uint32_t i = 0; + uint32_t register_list = OPER_I_16(mc68kcpu); + uint32_t ea = EA_AY_AI_32(mc68kcpu); + uint32_t count = 0; + + for(; i < 16; i++) + if(register_list & (1 << i)) + { + REG_DA(mc68kcpu)[i] = m68ki_read_32((mc68kcpu), ea); + ea += 4; + count++; + } + + (mc68kcpu)->c.current_cycle += (count<<(mc68kcpu)->cyc_movem_l) * (mc68kcpu)->c.options->gen.clock_divider; +} + + +static void m68k_op_movem_32_er_di(m68000_base_device* mc68kcpu) +{ + uint32_t i = 0; + uint32_t register_list = OPER_I_16(mc68kcpu); + uint32_t ea = EA_AY_DI_32(mc68kcpu); + uint32_t count = 0; + + for(; i < 16; i++) + if(register_list & (1 << i)) + { + REG_DA(mc68kcpu)[i] = m68ki_read_32((mc68kcpu), ea); + ea += 4; + count++; + } + + (mc68kcpu)->c.current_cycle += (count<<(mc68kcpu)->cyc_movem_l) * (mc68kcpu)->c.options->gen.clock_divider; +} + + +static void m68k_op_movem_32_er_ix(m68000_base_device* mc68kcpu) +{ + uint32_t i = 0; + uint32_t register_list = OPER_I_16(mc68kcpu); + uint32_t ea = EA_AY_IX_32(mc68kcpu); + uint32_t count = 0; + + for(; i < 16; i++) + if(register_list & (1 << i)) + { + REG_DA(mc68kcpu)[i] = m68ki_read_32((mc68kcpu), ea); + ea += 4; + count++; + } + + (mc68kcpu)->c.current_cycle += (count<<(mc68kcpu)->cyc_movem_l) * (mc68kcpu)->c.options->gen.clock_divider; +} + + +static void m68k_op_movem_32_er_aw(m68000_base_device* mc68kcpu) +{ + uint32_t i = 0; + uint32_t register_list = OPER_I_16(mc68kcpu); + uint32_t ea = EA_AW_32(mc68kcpu); + uint32_t count = 0; + + for(; i < 16; i++) + if(register_list & (1 << i)) + { + REG_DA(mc68kcpu)[i] = m68ki_read_32((mc68kcpu), ea); + ea += 4; + count++; + } + + (mc68kcpu)->c.current_cycle += (count<<(mc68kcpu)->cyc_movem_l) * (mc68kcpu)->c.options->gen.clock_divider; +} + + +static void m68k_op_movem_32_er_al(m68000_base_device* mc68kcpu) +{ + uint32_t i = 0; + uint32_t register_list = OPER_I_16(mc68kcpu); + uint32_t ea = EA_AL_32(mc68kcpu); + uint32_t count = 0; + + for(; i < 16; i++) + if(register_list & (1 << i)) + { + REG_DA(mc68kcpu)[i] = m68ki_read_32((mc68kcpu), ea); + ea += 4; + count++; + } + + (mc68kcpu)->c.current_cycle += (count<<(mc68kcpu)->cyc_movem_l) * (mc68kcpu)->c.options->gen.clock_divider; +} + + +static void m68k_op_movep_16_re(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AY_DI_16(mc68kcpu); + uint32_t src = DX(mc68kcpu); + + m68ki_write_8((mc68kcpu), ea, MASK_OUT_ABOVE_8(src >> 8)); + m68ki_write_8((mc68kcpu), ea += 2, MASK_OUT_ABOVE_8(src)); +} + + +static void m68k_op_movep_32_re(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AY_DI_32(mc68kcpu); + uint32_t src = DX(mc68kcpu); + + m68ki_write_8((mc68kcpu), ea, MASK_OUT_ABOVE_8(src >> 24)); + m68ki_write_8((mc68kcpu), ea += 2, MASK_OUT_ABOVE_8(src >> 16)); + m68ki_write_8((mc68kcpu), ea += 2, MASK_OUT_ABOVE_8(src >> 8)); + m68ki_write_8((mc68kcpu), ea += 2, MASK_OUT_ABOVE_8(src)); +} + + +static void m68k_op_movep_16_er(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AY_DI_16(mc68kcpu); + uint32_t* r_dst = &DX(mc68kcpu); + + *r_dst = MASK_OUT_BELOW_16(*r_dst) | ((m68ki_read_8((mc68kcpu), ea) << 8) + m68ki_read_8((mc68kcpu), ea + 2)); +} + + +static void m68k_op_movep_32_er(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AY_DI_32(mc68kcpu); + + DX(mc68kcpu) = (m68ki_read_8((mc68kcpu), ea) << 24) + (m68ki_read_8((mc68kcpu), ea + 2) << 16) + + (m68ki_read_8((mc68kcpu), ea + 4) << 8) + m68ki_read_8((mc68kcpu), ea + 6); +} + + +static void m68k_op_moves_8_ai(m68000_base_device* mc68kcpu) +{ + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_moves_8_pi(m68000_base_device* mc68kcpu) +{ + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_moves_8_pi7(m68000_base_device* mc68kcpu) +{ + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_moves_8_pd(m68000_base_device* mc68kcpu) +{ + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_moves_8_pd7(m68000_base_device* mc68kcpu) +{ + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_moves_8_di(m68000_base_device* mc68kcpu) +{ + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_moves_8_ix(m68000_base_device* mc68kcpu) +{ + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_moves_8_aw(m68000_base_device* mc68kcpu) +{ + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_moves_8_al(m68000_base_device* mc68kcpu) +{ + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_moves_16_ai(m68000_base_device* mc68kcpu) +{ + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_moves_16_pi(m68000_base_device* mc68kcpu) +{ + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_moves_16_pd(m68000_base_device* mc68kcpu) +{ + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_moves_16_di(m68000_base_device* mc68kcpu) +{ + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_moves_16_ix(m68000_base_device* mc68kcpu) +{ + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_moves_16_aw(m68000_base_device* mc68kcpu) +{ + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_moves_16_al(m68000_base_device* mc68kcpu) +{ + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_moves_32_ai(m68000_base_device* mc68kcpu) +{ + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_moves_32_pi(m68000_base_device* mc68kcpu) +{ + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_moves_32_pd(m68000_base_device* mc68kcpu) +{ + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_moves_32_di(m68000_base_device* mc68kcpu) +{ + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_moves_32_ix(m68000_base_device* mc68kcpu) +{ + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_moves_32_aw(m68000_base_device* mc68kcpu) +{ + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_moves_32_al(m68000_base_device* mc68kcpu) +{ + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_moveq_32(m68000_base_device* mc68kcpu) +{ + uint32_t res = DX(mc68kcpu) = MAKE_INT_8(MASK_OUT_ABOVE_8((mc68kcpu)->ir)); + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_move16_32(m68000_base_device* mc68kcpu) +{ + uint16_t w2 = OPER_I_16(mc68kcpu); + int ax = (mc68kcpu)->ir & 7; + int ay = (w2 >> 12) & 7; + m68ki_write_32((mc68kcpu), REG_A(mc68kcpu)[ay], m68ki_read_32((mc68kcpu), REG_A(mc68kcpu)[ax])); + m68ki_write_32((mc68kcpu), REG_A(mc68kcpu)[ay]+4, m68ki_read_32((mc68kcpu), REG_A(mc68kcpu)[ax]+4)); + m68ki_write_32((mc68kcpu), REG_A(mc68kcpu)[ay]+8, m68ki_read_32((mc68kcpu), REG_A(mc68kcpu)[ax]+8)); + m68ki_write_32((mc68kcpu), REG_A(mc68kcpu)[ay]+12, m68ki_read_32((mc68kcpu), REG_A(mc68kcpu)[ax]+12)); + + REG_A(mc68kcpu)[ax] += 16; + REG_A(mc68kcpu)[ay] += 16; +} + + +static void m68k_op_muls_16_d(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &DX(mc68kcpu); + uint32_t res = MASK_OUT_ABOVE_32(MAKE_INT_16(DY(mc68kcpu)) * MAKE_INT_16(MASK_OUT_ABOVE_16(*r_dst))); + + *r_dst = res; + + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_muls_16_ai(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &DX(mc68kcpu); + uint32_t res = MASK_OUT_ABOVE_32(MAKE_INT_16(OPER_AY_AI_16(mc68kcpu)) * MAKE_INT_16(MASK_OUT_ABOVE_16(*r_dst))); + + *r_dst = res; + + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_muls_16_pi(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &DX(mc68kcpu); + uint32_t res = MASK_OUT_ABOVE_32(MAKE_INT_16(OPER_AY_PI_16(mc68kcpu)) * MAKE_INT_16(MASK_OUT_ABOVE_16(*r_dst))); + + *r_dst = res; + + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_muls_16_pd(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &DX(mc68kcpu); + uint32_t res = MASK_OUT_ABOVE_32(MAKE_INT_16(OPER_AY_PD_16(mc68kcpu)) * MAKE_INT_16(MASK_OUT_ABOVE_16(*r_dst))); + + *r_dst = res; + + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_muls_16_di(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &DX(mc68kcpu); + uint32_t res = MASK_OUT_ABOVE_32(MAKE_INT_16(OPER_AY_DI_16(mc68kcpu)) * MAKE_INT_16(MASK_OUT_ABOVE_16(*r_dst))); + + *r_dst = res; + + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_muls_16_ix(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &DX(mc68kcpu); + uint32_t res = MASK_OUT_ABOVE_32(MAKE_INT_16(OPER_AY_IX_16(mc68kcpu)) * MAKE_INT_16(MASK_OUT_ABOVE_16(*r_dst))); + + *r_dst = res; + + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_muls_16_aw(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &DX(mc68kcpu); + uint32_t res = MASK_OUT_ABOVE_32(MAKE_INT_16(OPER_AW_16(mc68kcpu)) * MAKE_INT_16(MASK_OUT_ABOVE_16(*r_dst))); + + *r_dst = res; + + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_muls_16_al(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &DX(mc68kcpu); + uint32_t res = MASK_OUT_ABOVE_32(MAKE_INT_16(OPER_AL_16(mc68kcpu)) * MAKE_INT_16(MASK_OUT_ABOVE_16(*r_dst))); + + *r_dst = res; + + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_muls_16_pcdi(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &DX(mc68kcpu); + uint32_t res = MASK_OUT_ABOVE_32(MAKE_INT_16(OPER_PCDI_16(mc68kcpu)) * MAKE_INT_16(MASK_OUT_ABOVE_16(*r_dst))); + + *r_dst = res; + + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_muls_16_pcix(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &DX(mc68kcpu); + uint32_t res = MASK_OUT_ABOVE_32(MAKE_INT_16(OPER_PCIX_16(mc68kcpu)) * MAKE_INT_16(MASK_OUT_ABOVE_16(*r_dst))); + + *r_dst = res; + + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_muls_16_i(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &DX(mc68kcpu); + uint32_t res = MASK_OUT_ABOVE_32(MAKE_INT_16(OPER_I_16(mc68kcpu)) * MAKE_INT_16(MASK_OUT_ABOVE_16(*r_dst))); + + *r_dst = res; + + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_mulu_16_d(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &DX(mc68kcpu); + uint32_t res = MASK_OUT_ABOVE_16(DY(mc68kcpu)) * MASK_OUT_ABOVE_16(*r_dst); + + *r_dst = res; + + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_mulu_16_ai(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &DX(mc68kcpu); + uint32_t res = OPER_AY_AI_16(mc68kcpu) * MASK_OUT_ABOVE_16(*r_dst); + + *r_dst = res; + + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_mulu_16_pi(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &DX(mc68kcpu); + uint32_t res = OPER_AY_PI_16(mc68kcpu) * MASK_OUT_ABOVE_16(*r_dst); + + *r_dst = res; + + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_mulu_16_pd(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &DX(mc68kcpu); + uint32_t res = OPER_AY_PD_16(mc68kcpu) * MASK_OUT_ABOVE_16(*r_dst); + + *r_dst = res; + + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_mulu_16_di(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &DX(mc68kcpu); + uint32_t res = OPER_AY_DI_16(mc68kcpu) * MASK_OUT_ABOVE_16(*r_dst); + + *r_dst = res; + + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_mulu_16_ix(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &DX(mc68kcpu); + uint32_t res = OPER_AY_IX_16(mc68kcpu) * MASK_OUT_ABOVE_16(*r_dst); + + *r_dst = res; + + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_mulu_16_aw(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &DX(mc68kcpu); + uint32_t res = OPER_AW_16(mc68kcpu) * MASK_OUT_ABOVE_16(*r_dst); + + *r_dst = res; + + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_mulu_16_al(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &DX(mc68kcpu); + uint32_t res = OPER_AL_16(mc68kcpu) * MASK_OUT_ABOVE_16(*r_dst); + + *r_dst = res; + + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_mulu_16_pcdi(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &DX(mc68kcpu); + uint32_t res = OPER_PCDI_16(mc68kcpu) * MASK_OUT_ABOVE_16(*r_dst); + + *r_dst = res; + + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_mulu_16_pcix(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &DX(mc68kcpu); + uint32_t res = OPER_PCIX_16(mc68kcpu) * MASK_OUT_ABOVE_16(*r_dst); + + *r_dst = res; + + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_mulu_16_i(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &DX(mc68kcpu); + uint32_t res = OPER_I_16(mc68kcpu) * MASK_OUT_ABOVE_16(*r_dst); + + *r_dst = res; + + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_mull_32_d(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + uint32_t word2 = OPER_I_16(mc68kcpu); + uint64_t src = DY(mc68kcpu); + uint64_t dst = REG_D(mc68kcpu)[(word2 >> 12) & 7]; + uint64_t res; + + (mc68kcpu)->c_flag = CFLAG_CLEAR; + + if(BIT_B(word2)) /* signed */ + { + res = (int64_t)((int32_t)src) * (int64_t)((int32_t)dst); + if(!BIT_A(word2)) + { + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res); + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->v_flag = ((int64_t)res != (int32_t)res)<<7; + REG_D(mc68kcpu)[(word2 >> 12) & 7] = (mc68kcpu)->not_z_flag; + return; + } + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res) | (res>>32); + (mc68kcpu)->n_flag = NFLAG_64(res); + (mc68kcpu)->v_flag = VFLAG_CLEAR; + REG_D(mc68kcpu)[word2 & 7] = (res >> 32); + REG_D(mc68kcpu)[(word2 >> 12) & 7] = MASK_OUT_ABOVE_32(res); + return; + } + + res = src * dst; + if(!BIT_A(word2)) + { + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res); + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->v_flag = (res > 0xffffffff)<<7; + REG_D(mc68kcpu)[(word2 >> 12) & 7] = (mc68kcpu)->not_z_flag; + return; + } + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res) | (res>>32); + (mc68kcpu)->n_flag = NFLAG_64(res); + (mc68kcpu)->v_flag = VFLAG_CLEAR; + REG_D(mc68kcpu)[word2 & 7] = (res >> 32); + REG_D(mc68kcpu)[(word2 >> 12) & 7] = MASK_OUT_ABOVE_32(res); + return; + } + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_mull_32_ai(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + uint32_t word2 = OPER_I_16(mc68kcpu); + uint64_t src = OPER_AY_AI_32(mc68kcpu); + uint64_t dst = REG_D(mc68kcpu)[(word2 >> 12) & 7]; + uint64_t res; + + (mc68kcpu)->c_flag = CFLAG_CLEAR; + + if(BIT_B(word2)) /* signed */ + { + res = (int64_t)((int32_t)src) * (int64_t)((int32_t)dst); + if(!BIT_A(word2)) + { + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res); + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->v_flag = ((int64_t)res != (int32_t)res)<<7; + REG_D(mc68kcpu)[(word2 >> 12) & 7] = (mc68kcpu)->not_z_flag; + return; + } + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res) | (res>>32); + (mc68kcpu)->n_flag = NFLAG_64(res); + (mc68kcpu)->v_flag = VFLAG_CLEAR; + REG_D(mc68kcpu)[word2 & 7] = (res >> 32); + REG_D(mc68kcpu)[(word2 >> 12) & 7] = MASK_OUT_ABOVE_32(res); + return; + } + + res = src * dst; + if(!BIT_A(word2)) + { + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res); + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->v_flag = (res > 0xffffffff)<<7; + REG_D(mc68kcpu)[(word2 >> 12) & 7] = (mc68kcpu)->not_z_flag; + return; + } + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res) | (res>>32); + (mc68kcpu)->n_flag = NFLAG_64(res); + (mc68kcpu)->v_flag = VFLAG_CLEAR; + REG_D(mc68kcpu)[word2 & 7] = (res >> 32); + REG_D(mc68kcpu)[(word2 >> 12) & 7] = MASK_OUT_ABOVE_32(res); + return; + } + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_mull_32_pi(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + uint32_t word2 = OPER_I_16(mc68kcpu); + uint64_t src = OPER_AY_PI_32(mc68kcpu); + uint64_t dst = REG_D(mc68kcpu)[(word2 >> 12) & 7]; + uint64_t res; + + (mc68kcpu)->c_flag = CFLAG_CLEAR; + + if(BIT_B(word2)) /* signed */ + { + res = (int64_t)((int32_t)src) * (int64_t)((int32_t)dst); + if(!BIT_A(word2)) + { + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res); + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->v_flag = ((int64_t)res != (int32_t)res)<<7; + REG_D(mc68kcpu)[(word2 >> 12) & 7] = (mc68kcpu)->not_z_flag; + return; + } + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res) | (res>>32); + (mc68kcpu)->n_flag = NFLAG_64(res); + (mc68kcpu)->v_flag = VFLAG_CLEAR; + REG_D(mc68kcpu)[word2 & 7] = (res >> 32); + REG_D(mc68kcpu)[(word2 >> 12) & 7] = MASK_OUT_ABOVE_32(res); + return; + } + + res = src * dst; + if(!BIT_A(word2)) + { + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res); + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->v_flag = (res > 0xffffffff)<<7; + REG_D(mc68kcpu)[(word2 >> 12) & 7] = (mc68kcpu)->not_z_flag; + return; + } + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res) | (res>>32); + (mc68kcpu)->n_flag = NFLAG_64(res); + (mc68kcpu)->v_flag = VFLAG_CLEAR; + REG_D(mc68kcpu)[word2 & 7] = (res >> 32); + REG_D(mc68kcpu)[(word2 >> 12) & 7] = MASK_OUT_ABOVE_32(res); + return; + } + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_mull_32_pd(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + uint32_t word2 = OPER_I_16(mc68kcpu); + uint64_t src = OPER_AY_PD_32(mc68kcpu); + uint64_t dst = REG_D(mc68kcpu)[(word2 >> 12) & 7]; + uint64_t res; + + (mc68kcpu)->c_flag = CFLAG_CLEAR; + + if(BIT_B(word2)) /* signed */ + { + res = (int64_t)((int32_t)src) * (int64_t)((int32_t)dst); + if(!BIT_A(word2)) + { + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res); + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->v_flag = ((int64_t)res != (int32_t)res)<<7; + REG_D(mc68kcpu)[(word2 >> 12) & 7] = (mc68kcpu)->not_z_flag; + return; + } + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res) | (res>>32); + (mc68kcpu)->n_flag = NFLAG_64(res); + (mc68kcpu)->v_flag = VFLAG_CLEAR; + REG_D(mc68kcpu)[word2 & 7] = (res >> 32); + REG_D(mc68kcpu)[(word2 >> 12) & 7] = MASK_OUT_ABOVE_32(res); + return; + } + + res = src * dst; + if(!BIT_A(word2)) + { + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res); + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->v_flag = (res > 0xffffffff)<<7; + REG_D(mc68kcpu)[(word2 >> 12) & 7] = (mc68kcpu)->not_z_flag; + return; + } + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res) | (res>>32); + (mc68kcpu)->n_flag = NFLAG_64(res); + (mc68kcpu)->v_flag = VFLAG_CLEAR; + REG_D(mc68kcpu)[word2 & 7] = (res >> 32); + REG_D(mc68kcpu)[(word2 >> 12) & 7] = MASK_OUT_ABOVE_32(res); + return; + } + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_mull_32_di(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + uint32_t word2 = OPER_I_16(mc68kcpu); + uint64_t src = OPER_AY_DI_32(mc68kcpu); + uint64_t dst = REG_D(mc68kcpu)[(word2 >> 12) & 7]; + uint64_t res; + + (mc68kcpu)->c_flag = CFLAG_CLEAR; + + if(BIT_B(word2)) /* signed */ + { + res = (int64_t)((int32_t)src) * (int64_t)((int32_t)dst); + if(!BIT_A(word2)) + { + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res); + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->v_flag = ((int64_t)res != (int32_t)res)<<7; + REG_D(mc68kcpu)[(word2 >> 12) & 7] = (mc68kcpu)->not_z_flag; + return; + } + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res) | (res>>32); + (mc68kcpu)->n_flag = NFLAG_64(res); + (mc68kcpu)->v_flag = VFLAG_CLEAR; + REG_D(mc68kcpu)[word2 & 7] = (res >> 32); + REG_D(mc68kcpu)[(word2 >> 12) & 7] = MASK_OUT_ABOVE_32(res); + return; + } + + res = src * dst; + if(!BIT_A(word2)) + { + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res); + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->v_flag = (res > 0xffffffff)<<7; + REG_D(mc68kcpu)[(word2 >> 12) & 7] = (mc68kcpu)->not_z_flag; + return; + } + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res) | (res>>32); + (mc68kcpu)->n_flag = NFLAG_64(res); + (mc68kcpu)->v_flag = VFLAG_CLEAR; + REG_D(mc68kcpu)[word2 & 7] = (res >> 32); + REG_D(mc68kcpu)[(word2 >> 12) & 7] = MASK_OUT_ABOVE_32(res); + return; + } + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_mull_32_ix(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + uint32_t word2 = OPER_I_16(mc68kcpu); + uint64_t src = OPER_AY_IX_32(mc68kcpu); + uint64_t dst = REG_D(mc68kcpu)[(word2 >> 12) & 7]; + uint64_t res; + + (mc68kcpu)->c_flag = CFLAG_CLEAR; + + if(BIT_B(word2)) /* signed */ + { + res = (int64_t)((int32_t)src) * (int64_t)((int32_t)dst); + if(!BIT_A(word2)) + { + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res); + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->v_flag = ((int64_t)res != (int32_t)res)<<7; + REG_D(mc68kcpu)[(word2 >> 12) & 7] = (mc68kcpu)->not_z_flag; + return; + } + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res) | (res>>32); + (mc68kcpu)->n_flag = NFLAG_64(res); + (mc68kcpu)->v_flag = VFLAG_CLEAR; + REG_D(mc68kcpu)[word2 & 7] = (res >> 32); + REG_D(mc68kcpu)[(word2 >> 12) & 7] = MASK_OUT_ABOVE_32(res); + return; + } + + res = src * dst; + if(!BIT_A(word2)) + { + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res); + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->v_flag = (res > 0xffffffff)<<7; + REG_D(mc68kcpu)[(word2 >> 12) & 7] = (mc68kcpu)->not_z_flag; + return; + } + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res) | (res>>32); + (mc68kcpu)->n_flag = NFLAG_64(res); + (mc68kcpu)->v_flag = VFLAG_CLEAR; + REG_D(mc68kcpu)[word2 & 7] = (res >> 32); + REG_D(mc68kcpu)[(word2 >> 12) & 7] = MASK_OUT_ABOVE_32(res); + return; + } + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_mull_32_aw(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + uint32_t word2 = OPER_I_16(mc68kcpu); + uint64_t src = OPER_AW_32(mc68kcpu); + uint64_t dst = REG_D(mc68kcpu)[(word2 >> 12) & 7]; + uint64_t res; + + (mc68kcpu)->c_flag = CFLAG_CLEAR; + + if(BIT_B(word2)) /* signed */ + { + res = (int64_t)((int32_t)src) * (int64_t)((int32_t)dst); + if(!BIT_A(word2)) + { + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res); + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->v_flag = ((int64_t)res != (int32_t)res)<<7; + REG_D(mc68kcpu)[(word2 >> 12) & 7] = (mc68kcpu)->not_z_flag; + return; + } + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res) | (res>>32); + (mc68kcpu)->n_flag = NFLAG_64(res); + (mc68kcpu)->v_flag = VFLAG_CLEAR; + REG_D(mc68kcpu)[word2 & 7] = (res >> 32); + REG_D(mc68kcpu)[(word2 >> 12) & 7] = MASK_OUT_ABOVE_32(res); + return; + } + + res = src * dst; + if(!BIT_A(word2)) + { + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res); + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->v_flag = (res > 0xffffffff)<<7; + REG_D(mc68kcpu)[(word2 >> 12) & 7] = (mc68kcpu)->not_z_flag; + return; + } + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res) | (res>>32); + (mc68kcpu)->n_flag = NFLAG_64(res); + (mc68kcpu)->v_flag = VFLAG_CLEAR; + REG_D(mc68kcpu)[word2 & 7] = (res >> 32); + REG_D(mc68kcpu)[(word2 >> 12) & 7] = MASK_OUT_ABOVE_32(res); + return; + } + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_mull_32_al(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + uint32_t word2 = OPER_I_16(mc68kcpu); + uint64_t src = OPER_AL_32(mc68kcpu); + uint64_t dst = REG_D(mc68kcpu)[(word2 >> 12) & 7]; + uint64_t res; + + (mc68kcpu)->c_flag = CFLAG_CLEAR; + + if(BIT_B(word2)) /* signed */ + { + res = (int64_t)((int32_t)src) * (int64_t)((int32_t)dst); + if(!BIT_A(word2)) + { + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res); + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->v_flag = ((int64_t)res != (int32_t)res)<<7; + REG_D(mc68kcpu)[(word2 >> 12) & 7] = (mc68kcpu)->not_z_flag; + return; + } + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res) | (res>>32); + (mc68kcpu)->n_flag = NFLAG_64(res); + (mc68kcpu)->v_flag = VFLAG_CLEAR; + REG_D(mc68kcpu)[word2 & 7] = (res >> 32); + REG_D(mc68kcpu)[(word2 >> 12) & 7] = MASK_OUT_ABOVE_32(res); + return; + } + + res = src * dst; + if(!BIT_A(word2)) + { + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res); + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->v_flag = (res > 0xffffffff)<<7; + REG_D(mc68kcpu)[(word2 >> 12) & 7] = (mc68kcpu)->not_z_flag; + return; + } + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res) | (res>>32); + (mc68kcpu)->n_flag = NFLAG_64(res); + (mc68kcpu)->v_flag = VFLAG_CLEAR; + REG_D(mc68kcpu)[word2 & 7] = (res >> 32); + REG_D(mc68kcpu)[(word2 >> 12) & 7] = MASK_OUT_ABOVE_32(res); + return; + } + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_mull_32_pcdi(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + uint32_t word2 = OPER_I_16(mc68kcpu); + uint64_t src = OPER_PCDI_32(mc68kcpu); + uint64_t dst = REG_D(mc68kcpu)[(word2 >> 12) & 7]; + uint64_t res; + + (mc68kcpu)->c_flag = CFLAG_CLEAR; + + if(BIT_B(word2)) /* signed */ + { + res = (int64_t)((int32_t)src) * (int64_t)((int32_t)dst); + if(!BIT_A(word2)) + { + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res); + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->v_flag = ((int64_t)res != (int32_t)res)<<7; + REG_D(mc68kcpu)[(word2 >> 12) & 7] = (mc68kcpu)->not_z_flag; + return; + } + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res) | (res>>32); + (mc68kcpu)->n_flag = NFLAG_64(res); + (mc68kcpu)->v_flag = VFLAG_CLEAR; + REG_D(mc68kcpu)[word2 & 7] = (res >> 32); + REG_D(mc68kcpu)[(word2 >> 12) & 7] = MASK_OUT_ABOVE_32(res); + return; + } + + res = src * dst; + if(!BIT_A(word2)) + { + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res); + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->v_flag = (res > 0xffffffff)<<7; + REG_D(mc68kcpu)[(word2 >> 12) & 7] = (mc68kcpu)->not_z_flag; + return; + } + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res) | (res>>32); + (mc68kcpu)->n_flag = NFLAG_64(res); + (mc68kcpu)->v_flag = VFLAG_CLEAR; + REG_D(mc68kcpu)[word2 & 7] = (res >> 32); + REG_D(mc68kcpu)[(word2 >> 12) & 7] = MASK_OUT_ABOVE_32(res); + return; + } + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_mull_32_pcix(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + uint32_t word2 = OPER_I_16(mc68kcpu); + uint64_t src = OPER_PCIX_32(mc68kcpu); + uint64_t dst = REG_D(mc68kcpu)[(word2 >> 12) & 7]; + uint64_t res; + + (mc68kcpu)->c_flag = CFLAG_CLEAR; + + if(BIT_B(word2)) /* signed */ + { + res = (int64_t)((int32_t)src) * (int64_t)((int32_t)dst); + if(!BIT_A(word2)) + { + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res); + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->v_flag = ((int64_t)res != (int32_t)res)<<7; + REG_D(mc68kcpu)[(word2 >> 12) & 7] = (mc68kcpu)->not_z_flag; + return; + } + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res) | (res>>32); + (mc68kcpu)->n_flag = NFLAG_64(res); + (mc68kcpu)->v_flag = VFLAG_CLEAR; + REG_D(mc68kcpu)[word2 & 7] = (res >> 32); + REG_D(mc68kcpu)[(word2 >> 12) & 7] = MASK_OUT_ABOVE_32(res); + return; + } + + res = src * dst; + if(!BIT_A(word2)) + { + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res); + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->v_flag = (res > 0xffffffff)<<7; + REG_D(mc68kcpu)[(word2 >> 12) & 7] = (mc68kcpu)->not_z_flag; + return; + } + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res) | (res>>32); + (mc68kcpu)->n_flag = NFLAG_64(res); + (mc68kcpu)->v_flag = VFLAG_CLEAR; + REG_D(mc68kcpu)[word2 & 7] = (res >> 32); + REG_D(mc68kcpu)[(word2 >> 12) & 7] = MASK_OUT_ABOVE_32(res); + return; + } + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_mull_32_i(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + uint32_t word2 = OPER_I_16(mc68kcpu); + uint64_t src = OPER_I_32(mc68kcpu); + uint64_t dst = REG_D(mc68kcpu)[(word2 >> 12) & 7]; + uint64_t res; + + (mc68kcpu)->c_flag = CFLAG_CLEAR; + + if(BIT_B(word2)) /* signed */ + { + res = (int64_t)((int32_t)src) * (int64_t)((int32_t)dst); + if(!BIT_A(word2)) + { + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res); + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->v_flag = ((int64_t)res != (int32_t)res)<<7; + REG_D(mc68kcpu)[(word2 >> 12) & 7] = (mc68kcpu)->not_z_flag; + return; + } + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res) | (res>>32); + (mc68kcpu)->n_flag = NFLAG_64(res); + (mc68kcpu)->v_flag = VFLAG_CLEAR; + REG_D(mc68kcpu)[word2 & 7] = (res >> 32); + REG_D(mc68kcpu)[(word2 >> 12) & 7] = MASK_OUT_ABOVE_32(res); + return; + } + + res = src * dst; + if(!BIT_A(word2)) + { + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res); + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->v_flag = (res > 0xffffffff)<<7; + REG_D(mc68kcpu)[(word2 >> 12) & 7] = (mc68kcpu)->not_z_flag; + return; + } + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res) | (res>>32); + (mc68kcpu)->n_flag = NFLAG_64(res); + (mc68kcpu)->v_flag = VFLAG_CLEAR; + REG_D(mc68kcpu)[word2 & 7] = (res >> 32); + REG_D(mc68kcpu)[(word2 >> 12) & 7] = MASK_OUT_ABOVE_32(res); + return; + } + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_nbcd_8_d(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &DY(mc68kcpu); + uint32_t dst = *r_dst; + uint32_t res = MASK_OUT_ABOVE_8(0x9a - dst - XFLAG_AS_1(mc68kcpu)); + + if(res != 0x9a) + { + (mc68kcpu)->v_flag = ~res; /* Undefined V behavior */ + + if((res & 0x0f) == 0xa) + res = (res & 0xf0) + 0x10; + + res = MASK_OUT_ABOVE_8(res); + + (mc68kcpu)->v_flag &= res; /* Undefined V behavior part II */ + + *r_dst = MASK_OUT_BELOW_8(*r_dst) | res; + + (mc68kcpu)->not_z_flag |= res; + (mc68kcpu)->c_flag = CFLAG_SET; + (mc68kcpu)->x_flag = XFLAG_SET; + } + else + { + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->x_flag = XFLAG_CLEAR; + } + (mc68kcpu)->n_flag = NFLAG_8(res); /* Undefined N behavior */ +} + + +static void m68k_op_nbcd_8_ai(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AY_AI_8(mc68kcpu); + uint32_t dst = m68ki_read_8((mc68kcpu), ea); + uint32_t res = MASK_OUT_ABOVE_8(0x9a - dst - XFLAG_AS_1(mc68kcpu)); + + if(res != 0x9a) + { + (mc68kcpu)->v_flag = ~res; /* Undefined V behavior */ + + if((res & 0x0f) == 0xa) + res = (res & 0xf0) + 0x10; + + res = MASK_OUT_ABOVE_8(res); + + (mc68kcpu)->v_flag &= res; /* Undefined V behavior part II */ + + m68ki_write_8((mc68kcpu), ea, MASK_OUT_ABOVE_8(res)); + + (mc68kcpu)->not_z_flag |= res; + (mc68kcpu)->c_flag = CFLAG_SET; + (mc68kcpu)->x_flag = XFLAG_SET; + } + else + { + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->x_flag = XFLAG_CLEAR; + } + (mc68kcpu)->n_flag = NFLAG_8(res); /* Undefined N behavior */ +} + + +static void m68k_op_nbcd_8_pi(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AY_PI_8(mc68kcpu); + uint32_t dst = m68ki_read_8((mc68kcpu), ea); + uint32_t res = MASK_OUT_ABOVE_8(0x9a - dst - XFLAG_AS_1(mc68kcpu)); + + if(res != 0x9a) + { + (mc68kcpu)->v_flag = ~res; /* Undefined V behavior */ + + if((res & 0x0f) == 0xa) + res = (res & 0xf0) + 0x10; + + res = MASK_OUT_ABOVE_8(res); + + (mc68kcpu)->v_flag &= res; /* Undefined V behavior part II */ + + m68ki_write_8((mc68kcpu), ea, MASK_OUT_ABOVE_8(res)); + + (mc68kcpu)->not_z_flag |= res; + (mc68kcpu)->c_flag = CFLAG_SET; + (mc68kcpu)->x_flag = XFLAG_SET; + } + else + { + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->x_flag = XFLAG_CLEAR; + } + (mc68kcpu)->n_flag = NFLAG_8(res); /* Undefined N behavior */ +} + + +static void m68k_op_nbcd_8_pi7(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_A7_PI_8(mc68kcpu); + uint32_t dst = m68ki_read_8((mc68kcpu), ea); + uint32_t res = MASK_OUT_ABOVE_8(0x9a - dst - XFLAG_AS_1(mc68kcpu)); + + if(res != 0x9a) + { + (mc68kcpu)->v_flag = ~res; /* Undefined V behavior */ + + if((res & 0x0f) == 0xa) + res = (res & 0xf0) + 0x10; + + res = MASK_OUT_ABOVE_8(res); + + (mc68kcpu)->v_flag &= res; /* Undefined V behavior part II */ + + m68ki_write_8((mc68kcpu), ea, MASK_OUT_ABOVE_8(res)); + + (mc68kcpu)->not_z_flag |= res; + (mc68kcpu)->c_flag = CFLAG_SET; + (mc68kcpu)->x_flag = XFLAG_SET; + } + else + { + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->x_flag = XFLAG_CLEAR; + } + (mc68kcpu)->n_flag = NFLAG_8(res); /* Undefined N behavior */ +} + + +static void m68k_op_nbcd_8_pd(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AY_PD_8(mc68kcpu); + uint32_t dst = m68ki_read_8((mc68kcpu), ea); + uint32_t res = MASK_OUT_ABOVE_8(0x9a - dst - XFLAG_AS_1(mc68kcpu)); + + if(res != 0x9a) + { + (mc68kcpu)->v_flag = ~res; /* Undefined V behavior */ + + if((res & 0x0f) == 0xa) + res = (res & 0xf0) + 0x10; + + res = MASK_OUT_ABOVE_8(res); + + (mc68kcpu)->v_flag &= res; /* Undefined V behavior part II */ + + m68ki_write_8((mc68kcpu), ea, MASK_OUT_ABOVE_8(res)); + + (mc68kcpu)->not_z_flag |= res; + (mc68kcpu)->c_flag = CFLAG_SET; + (mc68kcpu)->x_flag = XFLAG_SET; + } + else + { + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->x_flag = XFLAG_CLEAR; + } + (mc68kcpu)->n_flag = NFLAG_8(res); /* Undefined N behavior */ +} + + +static void m68k_op_nbcd_8_pd7(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_A7_PD_8(mc68kcpu); + uint32_t dst = m68ki_read_8((mc68kcpu), ea); + uint32_t res = MASK_OUT_ABOVE_8(0x9a - dst - XFLAG_AS_1(mc68kcpu)); + + if(res != 0x9a) + { + (mc68kcpu)->v_flag = ~res; /* Undefined V behavior */ + + if((res & 0x0f) == 0xa) + res = (res & 0xf0) + 0x10; + + res = MASK_OUT_ABOVE_8(res); + + (mc68kcpu)->v_flag &= res; /* Undefined V behavior part II */ + + m68ki_write_8((mc68kcpu), ea, MASK_OUT_ABOVE_8(res)); + + (mc68kcpu)->not_z_flag |= res; + (mc68kcpu)->c_flag = CFLAG_SET; + (mc68kcpu)->x_flag = XFLAG_SET; + } + else + { + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->x_flag = XFLAG_CLEAR; + } + (mc68kcpu)->n_flag = NFLAG_8(res); /* Undefined N behavior */ +} + + +static void m68k_op_nbcd_8_di(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AY_DI_8(mc68kcpu); + uint32_t dst = m68ki_read_8((mc68kcpu), ea); + uint32_t res = MASK_OUT_ABOVE_8(0x9a - dst - XFLAG_AS_1(mc68kcpu)); + + if(res != 0x9a) + { + (mc68kcpu)->v_flag = ~res; /* Undefined V behavior */ + + if((res & 0x0f) == 0xa) + res = (res & 0xf0) + 0x10; + + res = MASK_OUT_ABOVE_8(res); + + (mc68kcpu)->v_flag &= res; /* Undefined V behavior part II */ + + m68ki_write_8((mc68kcpu), ea, MASK_OUT_ABOVE_8(res)); + + (mc68kcpu)->not_z_flag |= res; + (mc68kcpu)->c_flag = CFLAG_SET; + (mc68kcpu)->x_flag = XFLAG_SET; + } + else + { + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->x_flag = XFLAG_CLEAR; + } + (mc68kcpu)->n_flag = NFLAG_8(res); /* Undefined N behavior */ +} + + +static void m68k_op_nbcd_8_ix(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AY_IX_8(mc68kcpu); + uint32_t dst = m68ki_read_8((mc68kcpu), ea); + uint32_t res = MASK_OUT_ABOVE_8(0x9a - dst - XFLAG_AS_1(mc68kcpu)); + + if(res != 0x9a) + { + (mc68kcpu)->v_flag = ~res; /* Undefined V behavior */ + + if((res & 0x0f) == 0xa) + res = (res & 0xf0) + 0x10; + + res = MASK_OUT_ABOVE_8(res); + + (mc68kcpu)->v_flag &= res; /* Undefined V behavior part II */ + + m68ki_write_8((mc68kcpu), ea, MASK_OUT_ABOVE_8(res)); + + (mc68kcpu)->not_z_flag |= res; + (mc68kcpu)->c_flag = CFLAG_SET; + (mc68kcpu)->x_flag = XFLAG_SET; + } + else + { + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->x_flag = XFLAG_CLEAR; + } + (mc68kcpu)->n_flag = NFLAG_8(res); /* Undefined N behavior */ +} + + +static void m68k_op_nbcd_8_aw(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AW_8(mc68kcpu); + uint32_t dst = m68ki_read_8((mc68kcpu), ea); + uint32_t res = MASK_OUT_ABOVE_8(0x9a - dst - XFLAG_AS_1(mc68kcpu)); + + if(res != 0x9a) + { + (mc68kcpu)->v_flag = ~res; /* Undefined V behavior */ + + if((res & 0x0f) == 0xa) + res = (res & 0xf0) + 0x10; + + res = MASK_OUT_ABOVE_8(res); + + (mc68kcpu)->v_flag &= res; /* Undefined V behavior part II */ + + m68ki_write_8((mc68kcpu), ea, MASK_OUT_ABOVE_8(res)); + + (mc68kcpu)->not_z_flag |= res; + (mc68kcpu)->c_flag = CFLAG_SET; + (mc68kcpu)->x_flag = XFLAG_SET; + } + else + { + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->x_flag = XFLAG_CLEAR; + } + (mc68kcpu)->n_flag = NFLAG_8(res); /* Undefined N behavior */ +} + + +static void m68k_op_nbcd_8_al(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AL_8(mc68kcpu); + uint32_t dst = m68ki_read_8((mc68kcpu), ea); + uint32_t res = MASK_OUT_ABOVE_8(0x9a - dst - XFLAG_AS_1(mc68kcpu)); + + if(res != 0x9a) + { + (mc68kcpu)->v_flag = ~res; /* Undefined V behavior */ + + if((res & 0x0f) == 0xa) + res = (res & 0xf0) + 0x10; + + res = MASK_OUT_ABOVE_8(res); + + (mc68kcpu)->v_flag &= res; /* Undefined V behavior part II */ + + m68ki_write_8((mc68kcpu), ea, MASK_OUT_ABOVE_8(res)); + + (mc68kcpu)->not_z_flag |= res; + (mc68kcpu)->c_flag = CFLAG_SET; + (mc68kcpu)->x_flag = XFLAG_SET; + } + else + { + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->x_flag = XFLAG_CLEAR; + } + (mc68kcpu)->n_flag = NFLAG_8(res); /* Undefined N behavior */ +} + + +static void m68k_op_neg_8_d(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &DY(mc68kcpu); + uint32_t res = 0 - MASK_OUT_ABOVE_8(*r_dst); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->c_flag = (mc68kcpu)->x_flag = CFLAG_8(res); + (mc68kcpu)->v_flag = *r_dst & res; + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res); + + *r_dst = MASK_OUT_BELOW_8(*r_dst) | (mc68kcpu)->not_z_flag; +} + + +static void m68k_op_neg_8_ai(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AY_AI_8(mc68kcpu); + uint32_t src = m68ki_read_8((mc68kcpu), ea); + uint32_t res = 0 - src; + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->c_flag = (mc68kcpu)->x_flag = CFLAG_8(res); + (mc68kcpu)->v_flag = src & res; + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res); + + m68ki_write_8((mc68kcpu), ea, (mc68kcpu)->not_z_flag); +} + + +static void m68k_op_neg_8_pi(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AY_PI_8(mc68kcpu); + uint32_t src = m68ki_read_8((mc68kcpu), ea); + uint32_t res = 0 - src; + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->c_flag = (mc68kcpu)->x_flag = CFLAG_8(res); + (mc68kcpu)->v_flag = src & res; + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res); + + m68ki_write_8((mc68kcpu), ea, (mc68kcpu)->not_z_flag); +} + + +static void m68k_op_neg_8_pi7(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_A7_PI_8(mc68kcpu); + uint32_t src = m68ki_read_8((mc68kcpu), ea); + uint32_t res = 0 - src; + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->c_flag = (mc68kcpu)->x_flag = CFLAG_8(res); + (mc68kcpu)->v_flag = src & res; + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res); + + m68ki_write_8((mc68kcpu), ea, (mc68kcpu)->not_z_flag); +} + + +static void m68k_op_neg_8_pd(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AY_PD_8(mc68kcpu); + uint32_t src = m68ki_read_8((mc68kcpu), ea); + uint32_t res = 0 - src; + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->c_flag = (mc68kcpu)->x_flag = CFLAG_8(res); + (mc68kcpu)->v_flag = src & res; + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res); + + m68ki_write_8((mc68kcpu), ea, (mc68kcpu)->not_z_flag); +} + + +static void m68k_op_neg_8_pd7(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_A7_PD_8(mc68kcpu); + uint32_t src = m68ki_read_8((mc68kcpu), ea); + uint32_t res = 0 - src; + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->c_flag = (mc68kcpu)->x_flag = CFLAG_8(res); + (mc68kcpu)->v_flag = src & res; + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res); + + m68ki_write_8((mc68kcpu), ea, (mc68kcpu)->not_z_flag); +} + + +static void m68k_op_neg_8_di(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AY_DI_8(mc68kcpu); + uint32_t src = m68ki_read_8((mc68kcpu), ea); + uint32_t res = 0 - src; + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->c_flag = (mc68kcpu)->x_flag = CFLAG_8(res); + (mc68kcpu)->v_flag = src & res; + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res); + + m68ki_write_8((mc68kcpu), ea, (mc68kcpu)->not_z_flag); +} + + +static void m68k_op_neg_8_ix(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AY_IX_8(mc68kcpu); + uint32_t src = m68ki_read_8((mc68kcpu), ea); + uint32_t res = 0 - src; + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->c_flag = (mc68kcpu)->x_flag = CFLAG_8(res); + (mc68kcpu)->v_flag = src & res; + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res); + + m68ki_write_8((mc68kcpu), ea, (mc68kcpu)->not_z_flag); +} + + +static void m68k_op_neg_8_aw(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AW_8(mc68kcpu); + uint32_t src = m68ki_read_8((mc68kcpu), ea); + uint32_t res = 0 - src; + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->c_flag = (mc68kcpu)->x_flag = CFLAG_8(res); + (mc68kcpu)->v_flag = src & res; + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res); + + m68ki_write_8((mc68kcpu), ea, (mc68kcpu)->not_z_flag); +} + + +static void m68k_op_neg_8_al(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AL_8(mc68kcpu); + uint32_t src = m68ki_read_8((mc68kcpu), ea); + uint32_t res = 0 - src; + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->c_flag = (mc68kcpu)->x_flag = CFLAG_8(res); + (mc68kcpu)->v_flag = src & res; + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res); + + m68ki_write_8((mc68kcpu), ea, (mc68kcpu)->not_z_flag); +} + + +static void m68k_op_neg_16_d(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &DY(mc68kcpu); + uint32_t res = 0 - MASK_OUT_ABOVE_16(*r_dst); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->c_flag = (mc68kcpu)->x_flag = CFLAG_16(res); + (mc68kcpu)->v_flag = (*r_dst & res)>>8; + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res); + + *r_dst = MASK_OUT_BELOW_16(*r_dst) | (mc68kcpu)->not_z_flag; +} + + +static void m68k_op_neg_16_ai(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AY_AI_16(mc68kcpu); + uint32_t src = m68ki_read_16((mc68kcpu), ea); + uint32_t res = 0 - src; + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->c_flag = (mc68kcpu)->x_flag = CFLAG_16(res); + (mc68kcpu)->v_flag = (src & res)>>8; + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res); + + m68ki_write_16((mc68kcpu), ea, (mc68kcpu)->not_z_flag); +} + + +static void m68k_op_neg_16_pi(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AY_PI_16(mc68kcpu); + uint32_t src = m68ki_read_16((mc68kcpu), ea); + uint32_t res = 0 - src; + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->c_flag = (mc68kcpu)->x_flag = CFLAG_16(res); + (mc68kcpu)->v_flag = (src & res)>>8; + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res); + + m68ki_write_16((mc68kcpu), ea, (mc68kcpu)->not_z_flag); +} + + +static void m68k_op_neg_16_pd(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AY_PD_16(mc68kcpu); + uint32_t src = m68ki_read_16((mc68kcpu), ea); + uint32_t res = 0 - src; + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->c_flag = (mc68kcpu)->x_flag = CFLAG_16(res); + (mc68kcpu)->v_flag = (src & res)>>8; + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res); + + m68ki_write_16((mc68kcpu), ea, (mc68kcpu)->not_z_flag); +} + + +static void m68k_op_neg_16_di(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AY_DI_16(mc68kcpu); + uint32_t src = m68ki_read_16((mc68kcpu), ea); + uint32_t res = 0 - src; + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->c_flag = (mc68kcpu)->x_flag = CFLAG_16(res); + (mc68kcpu)->v_flag = (src & res)>>8; + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res); + + m68ki_write_16((mc68kcpu), ea, (mc68kcpu)->not_z_flag); +} + + +static void m68k_op_neg_16_ix(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AY_IX_16(mc68kcpu); + uint32_t src = m68ki_read_16((mc68kcpu), ea); + uint32_t res = 0 - src; + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->c_flag = (mc68kcpu)->x_flag = CFLAG_16(res); + (mc68kcpu)->v_flag = (src & res)>>8; + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res); + + m68ki_write_16((mc68kcpu), ea, (mc68kcpu)->not_z_flag); +} + + +static void m68k_op_neg_16_aw(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AW_16(mc68kcpu); + uint32_t src = m68ki_read_16((mc68kcpu), ea); + uint32_t res = 0 - src; + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->c_flag = (mc68kcpu)->x_flag = CFLAG_16(res); + (mc68kcpu)->v_flag = (src & res)>>8; + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res); + + m68ki_write_16((mc68kcpu), ea, (mc68kcpu)->not_z_flag); +} + + +static void m68k_op_neg_16_al(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AL_16(mc68kcpu); + uint32_t src = m68ki_read_16((mc68kcpu), ea); + uint32_t res = 0 - src; + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->c_flag = (mc68kcpu)->x_flag = CFLAG_16(res); + (mc68kcpu)->v_flag = (src & res)>>8; + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res); + + m68ki_write_16((mc68kcpu), ea, (mc68kcpu)->not_z_flag); +} + + +static void m68k_op_neg_32_d(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &DY(mc68kcpu); + uint32_t res = 0 - *r_dst; + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->c_flag = (mc68kcpu)->x_flag = CFLAG_SUB_32(*r_dst, 0, res); + (mc68kcpu)->v_flag = (*r_dst & res)>>24; + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res); + + *r_dst = (mc68kcpu)->not_z_flag; +} + + +static void m68k_op_neg_32_ai(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AY_AI_32(mc68kcpu); + uint32_t src = m68ki_read_32((mc68kcpu), ea); + uint32_t res = 0 - src; + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->c_flag = (mc68kcpu)->x_flag = CFLAG_SUB_32(src, 0, res); + (mc68kcpu)->v_flag = (src & res)>>24; + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res); + + m68ki_write_32((mc68kcpu), ea, (mc68kcpu)->not_z_flag); +} + + +static void m68k_op_neg_32_pi(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AY_PI_32(mc68kcpu); + uint32_t src = m68ki_read_32((mc68kcpu), ea); + uint32_t res = 0 - src; + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->c_flag = (mc68kcpu)->x_flag = CFLAG_SUB_32(src, 0, res); + (mc68kcpu)->v_flag = (src & res)>>24; + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res); + + m68ki_write_32((mc68kcpu), ea, (mc68kcpu)->not_z_flag); +} + + +static void m68k_op_neg_32_pd(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AY_PD_32(mc68kcpu); + uint32_t src = m68ki_read_32((mc68kcpu), ea); + uint32_t res = 0 - src; + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->c_flag = (mc68kcpu)->x_flag = CFLAG_SUB_32(src, 0, res); + (mc68kcpu)->v_flag = (src & res)>>24; + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res); + + m68ki_write_32((mc68kcpu), ea, (mc68kcpu)->not_z_flag); +} + + +static void m68k_op_neg_32_di(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AY_DI_32(mc68kcpu); + uint32_t src = m68ki_read_32((mc68kcpu), ea); + uint32_t res = 0 - src; + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->c_flag = (mc68kcpu)->x_flag = CFLAG_SUB_32(src, 0, res); + (mc68kcpu)->v_flag = (src & res)>>24; + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res); + + m68ki_write_32((mc68kcpu), ea, (mc68kcpu)->not_z_flag); +} + + +static void m68k_op_neg_32_ix(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AY_IX_32(mc68kcpu); + uint32_t src = m68ki_read_32((mc68kcpu), ea); + uint32_t res = 0 - src; + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->c_flag = (mc68kcpu)->x_flag = CFLAG_SUB_32(src, 0, res); + (mc68kcpu)->v_flag = (src & res)>>24; + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res); + + m68ki_write_32((mc68kcpu), ea, (mc68kcpu)->not_z_flag); +} + + +static void m68k_op_neg_32_aw(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AW_32(mc68kcpu); + uint32_t src = m68ki_read_32((mc68kcpu), ea); + uint32_t res = 0 - src; + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->c_flag = (mc68kcpu)->x_flag = CFLAG_SUB_32(src, 0, res); + (mc68kcpu)->v_flag = (src & res)>>24; + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res); + + m68ki_write_32((mc68kcpu), ea, (mc68kcpu)->not_z_flag); +} + + +static void m68k_op_neg_32_al(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AL_32(mc68kcpu); + uint32_t src = m68ki_read_32((mc68kcpu), ea); + uint32_t res = 0 - src; + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->c_flag = (mc68kcpu)->x_flag = CFLAG_SUB_32(src, 0, res); + (mc68kcpu)->v_flag = (src & res)>>24; + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res); + + m68ki_write_32((mc68kcpu), ea, (mc68kcpu)->not_z_flag); +} + + +static void m68k_op_negx_8_d(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &DY(mc68kcpu); + uint32_t res = 0 - MASK_OUT_ABOVE_8(*r_dst) - XFLAG_AS_1(mc68kcpu); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_8(res); + (mc68kcpu)->v_flag = *r_dst & res; + + res = MASK_OUT_ABOVE_8(res); + (mc68kcpu)->not_z_flag |= res; + + *r_dst = MASK_OUT_BELOW_8(*r_dst) | res; +} + + +static void m68k_op_negx_8_ai(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AY_AI_8(mc68kcpu); + uint32_t src = m68ki_read_8((mc68kcpu), ea); + uint32_t res = 0 - src - XFLAG_AS_1(mc68kcpu); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_8(res); + (mc68kcpu)->v_flag = src & res; + + res = MASK_OUT_ABOVE_8(res); + (mc68kcpu)->not_z_flag |= res; + + m68ki_write_8((mc68kcpu), ea, res); +} + + +static void m68k_op_negx_8_pi(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AY_PI_8(mc68kcpu); + uint32_t src = m68ki_read_8((mc68kcpu), ea); + uint32_t res = 0 - src - XFLAG_AS_1(mc68kcpu); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_8(res); + (mc68kcpu)->v_flag = src & res; + + res = MASK_OUT_ABOVE_8(res); + (mc68kcpu)->not_z_flag |= res; + + m68ki_write_8((mc68kcpu), ea, res); +} + + +static void m68k_op_negx_8_pi7(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_A7_PI_8(mc68kcpu); + uint32_t src = m68ki_read_8((mc68kcpu), ea); + uint32_t res = 0 - src - XFLAG_AS_1(mc68kcpu); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_8(res); + (mc68kcpu)->v_flag = src & res; + + res = MASK_OUT_ABOVE_8(res); + (mc68kcpu)->not_z_flag |= res; + + m68ki_write_8((mc68kcpu), ea, res); +} + + +static void m68k_op_negx_8_pd(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AY_PD_8(mc68kcpu); + uint32_t src = m68ki_read_8((mc68kcpu), ea); + uint32_t res = 0 - src - XFLAG_AS_1(mc68kcpu); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_8(res); + (mc68kcpu)->v_flag = src & res; + + res = MASK_OUT_ABOVE_8(res); + (mc68kcpu)->not_z_flag |= res; + + m68ki_write_8((mc68kcpu), ea, res); +} + + +static void m68k_op_negx_8_pd7(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_A7_PD_8(mc68kcpu); + uint32_t src = m68ki_read_8((mc68kcpu), ea); + uint32_t res = 0 - src - XFLAG_AS_1(mc68kcpu); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_8(res); + (mc68kcpu)->v_flag = src & res; + + res = MASK_OUT_ABOVE_8(res); + (mc68kcpu)->not_z_flag |= res; + + m68ki_write_8((mc68kcpu), ea, res); +} + + +static void m68k_op_negx_8_di(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AY_DI_8(mc68kcpu); + uint32_t src = m68ki_read_8((mc68kcpu), ea); + uint32_t res = 0 - src - XFLAG_AS_1(mc68kcpu); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_8(res); + (mc68kcpu)->v_flag = src & res; + + res = MASK_OUT_ABOVE_8(res); + (mc68kcpu)->not_z_flag |= res; + + m68ki_write_8((mc68kcpu), ea, res); +} + + +static void m68k_op_negx_8_ix(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AY_IX_8(mc68kcpu); + uint32_t src = m68ki_read_8((mc68kcpu), ea); + uint32_t res = 0 - src - XFLAG_AS_1(mc68kcpu); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_8(res); + (mc68kcpu)->v_flag = src & res; + + res = MASK_OUT_ABOVE_8(res); + (mc68kcpu)->not_z_flag |= res; + + m68ki_write_8((mc68kcpu), ea, res); +} + + +static void m68k_op_negx_8_aw(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AW_8(mc68kcpu); + uint32_t src = m68ki_read_8((mc68kcpu), ea); + uint32_t res = 0 - src - XFLAG_AS_1(mc68kcpu); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_8(res); + (mc68kcpu)->v_flag = src & res; + + res = MASK_OUT_ABOVE_8(res); + (mc68kcpu)->not_z_flag |= res; + + m68ki_write_8((mc68kcpu), ea, res); +} + + +static void m68k_op_negx_8_al(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AL_8(mc68kcpu); + uint32_t src = m68ki_read_8((mc68kcpu), ea); + uint32_t res = 0 - src - XFLAG_AS_1(mc68kcpu); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_8(res); + (mc68kcpu)->v_flag = src & res; + + res = MASK_OUT_ABOVE_8(res); + (mc68kcpu)->not_z_flag |= res; + + m68ki_write_8((mc68kcpu), ea, res); +} + + +static void m68k_op_negx_16_d(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &DY(mc68kcpu); + uint32_t res = 0 - MASK_OUT_ABOVE_16(*r_dst) - XFLAG_AS_1(mc68kcpu); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_16(res); + (mc68kcpu)->v_flag = (*r_dst & res)>>8; + + res = MASK_OUT_ABOVE_16(res); + (mc68kcpu)->not_z_flag |= res; + + *r_dst = MASK_OUT_BELOW_16(*r_dst) | res; +} + + +static void m68k_op_negx_16_ai(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AY_AI_16(mc68kcpu); + uint32_t src = m68ki_read_16((mc68kcpu), ea); + uint32_t res = 0 - MASK_OUT_ABOVE_16(src) - XFLAG_AS_1(mc68kcpu); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_16(res); + (mc68kcpu)->v_flag = (src & res)>>8; + + res = MASK_OUT_ABOVE_16(res); + (mc68kcpu)->not_z_flag |= res; + + m68ki_write_16((mc68kcpu), ea, res); +} + + +static void m68k_op_negx_16_pi(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AY_PI_16(mc68kcpu); + uint32_t src = m68ki_read_16((mc68kcpu), ea); + uint32_t res = 0 - MASK_OUT_ABOVE_16(src) - XFLAG_AS_1(mc68kcpu); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_16(res); + (mc68kcpu)->v_flag = (src & res)>>8; + + res = MASK_OUT_ABOVE_16(res); + (mc68kcpu)->not_z_flag |= res; + + m68ki_write_16((mc68kcpu), ea, res); +} + + +static void m68k_op_negx_16_pd(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AY_PD_16(mc68kcpu); + uint32_t src = m68ki_read_16((mc68kcpu), ea); + uint32_t res = 0 - MASK_OUT_ABOVE_16(src) - XFLAG_AS_1(mc68kcpu); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_16(res); + (mc68kcpu)->v_flag = (src & res)>>8; + + res = MASK_OUT_ABOVE_16(res); + (mc68kcpu)->not_z_flag |= res; + + m68ki_write_16((mc68kcpu), ea, res); +} + + +static void m68k_op_negx_16_di(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AY_DI_16(mc68kcpu); + uint32_t src = m68ki_read_16((mc68kcpu), ea); + uint32_t res = 0 - MASK_OUT_ABOVE_16(src) - XFLAG_AS_1(mc68kcpu); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_16(res); + (mc68kcpu)->v_flag = (src & res)>>8; + + res = MASK_OUT_ABOVE_16(res); + (mc68kcpu)->not_z_flag |= res; + + m68ki_write_16((mc68kcpu), ea, res); +} + + +static void m68k_op_negx_16_ix(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AY_IX_16(mc68kcpu); + uint32_t src = m68ki_read_16((mc68kcpu), ea); + uint32_t res = 0 - MASK_OUT_ABOVE_16(src) - XFLAG_AS_1(mc68kcpu); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_16(res); + (mc68kcpu)->v_flag = (src & res)>>8; + + res = MASK_OUT_ABOVE_16(res); + (mc68kcpu)->not_z_flag |= res; + + m68ki_write_16((mc68kcpu), ea, res); +} + + +static void m68k_op_negx_16_aw(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AW_16(mc68kcpu); + uint32_t src = m68ki_read_16((mc68kcpu), ea); + uint32_t res = 0 - MASK_OUT_ABOVE_16(src) - XFLAG_AS_1(mc68kcpu); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_16(res); + (mc68kcpu)->v_flag = (src & res)>>8; + + res = MASK_OUT_ABOVE_16(res); + (mc68kcpu)->not_z_flag |= res; + + m68ki_write_16((mc68kcpu), ea, res); +} + + +static void m68k_op_negx_16_al(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AL_16(mc68kcpu); + uint32_t src = m68ki_read_16((mc68kcpu), ea); + uint32_t res = 0 - MASK_OUT_ABOVE_16(src) - XFLAG_AS_1(mc68kcpu); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_16(res); + (mc68kcpu)->v_flag = (src & res)>>8; + + res = MASK_OUT_ABOVE_16(res); + (mc68kcpu)->not_z_flag |= res; + + m68ki_write_16((mc68kcpu), ea, res); +} + + +static void m68k_op_negx_32_d(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &DY(mc68kcpu); + uint32_t res = 0 - MASK_OUT_ABOVE_32(*r_dst) - XFLAG_AS_1(mc68kcpu); + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_SUB_32(*r_dst, 0, res); + (mc68kcpu)->v_flag = (*r_dst & res)>>24; + + res = MASK_OUT_ABOVE_32(res); + (mc68kcpu)->not_z_flag |= res; + + *r_dst = res; +} + + +static void m68k_op_negx_32_ai(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AY_AI_32(mc68kcpu); + uint32_t src = m68ki_read_32((mc68kcpu), ea); + uint32_t res = 0 - MASK_OUT_ABOVE_32(src) - XFLAG_AS_1(mc68kcpu); + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_SUB_32(src, 0, res); + (mc68kcpu)->v_flag = (src & res)>>24; + + res = MASK_OUT_ABOVE_32(res); + (mc68kcpu)->not_z_flag |= res; + + m68ki_write_32((mc68kcpu), ea, res); +} + + +static void m68k_op_negx_32_pi(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AY_PI_32(mc68kcpu); + uint32_t src = m68ki_read_32((mc68kcpu), ea); + uint32_t res = 0 - MASK_OUT_ABOVE_32(src) - XFLAG_AS_1(mc68kcpu); + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_SUB_32(src, 0, res); + (mc68kcpu)->v_flag = (src & res)>>24; + + res = MASK_OUT_ABOVE_32(res); + (mc68kcpu)->not_z_flag |= res; + + m68ki_write_32((mc68kcpu), ea, res); +} + + +static void m68k_op_negx_32_pd(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AY_PD_32(mc68kcpu); + uint32_t src = m68ki_read_32((mc68kcpu), ea); + uint32_t res = 0 - MASK_OUT_ABOVE_32(src) - XFLAG_AS_1(mc68kcpu); + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_SUB_32(src, 0, res); + (mc68kcpu)->v_flag = (src & res)>>24; + + res = MASK_OUT_ABOVE_32(res); + (mc68kcpu)->not_z_flag |= res; + + m68ki_write_32((mc68kcpu), ea, res); +} + + +static void m68k_op_negx_32_di(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AY_DI_32(mc68kcpu); + uint32_t src = m68ki_read_32((mc68kcpu), ea); + uint32_t res = 0 - MASK_OUT_ABOVE_32(src) - XFLAG_AS_1(mc68kcpu); + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_SUB_32(src, 0, res); + (mc68kcpu)->v_flag = (src & res)>>24; + + res = MASK_OUT_ABOVE_32(res); + (mc68kcpu)->not_z_flag |= res; + + m68ki_write_32((mc68kcpu), ea, res); +} + + +static void m68k_op_negx_32_ix(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AY_IX_32(mc68kcpu); + uint32_t src = m68ki_read_32((mc68kcpu), ea); + uint32_t res = 0 - MASK_OUT_ABOVE_32(src) - XFLAG_AS_1(mc68kcpu); + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_SUB_32(src, 0, res); + (mc68kcpu)->v_flag = (src & res)>>24; + + res = MASK_OUT_ABOVE_32(res); + (mc68kcpu)->not_z_flag |= res; + + m68ki_write_32((mc68kcpu), ea, res); +} + + +static void m68k_op_negx_32_aw(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AW_32(mc68kcpu); + uint32_t src = m68ki_read_32((mc68kcpu), ea); + uint32_t res = 0 - MASK_OUT_ABOVE_32(src) - XFLAG_AS_1(mc68kcpu); + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_SUB_32(src, 0, res); + (mc68kcpu)->v_flag = (src & res)>>24; + + res = MASK_OUT_ABOVE_32(res); + (mc68kcpu)->not_z_flag |= res; + + m68ki_write_32((mc68kcpu), ea, res); +} + + +static void m68k_op_negx_32_al(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AL_32(mc68kcpu); + uint32_t src = m68ki_read_32((mc68kcpu), ea); + uint32_t res = 0 - MASK_OUT_ABOVE_32(src) - XFLAG_AS_1(mc68kcpu); + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_SUB_32(src, 0, res); + (mc68kcpu)->v_flag = (src & res)>>24; + + res = MASK_OUT_ABOVE_32(res); + (mc68kcpu)->not_z_flag |= res; + + m68ki_write_32((mc68kcpu), ea, res); +} + + +static void m68k_op_nop(m68000_base_device* mc68kcpu) +{ + m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */ +} + + +static void m68k_op_not_8_d(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &DY(mc68kcpu); + uint32_t res = MASK_OUT_ABOVE_8(~*r_dst); + + *r_dst = MASK_OUT_BELOW_8(*r_dst) | res; + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_not_8_ai(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AY_AI_8(mc68kcpu); + uint32_t res = MASK_OUT_ABOVE_8(~m68ki_read_8((mc68kcpu), ea)); + + m68ki_write_8((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_not_8_pi(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AY_PI_8(mc68kcpu); + uint32_t res = MASK_OUT_ABOVE_8(~m68ki_read_8((mc68kcpu), ea)); + + m68ki_write_8((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_not_8_pi7(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_A7_PI_8(mc68kcpu); + uint32_t res = MASK_OUT_ABOVE_8(~m68ki_read_8((mc68kcpu), ea)); + + m68ki_write_8((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_not_8_pd(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AY_PD_8(mc68kcpu); + uint32_t res = MASK_OUT_ABOVE_8(~m68ki_read_8((mc68kcpu), ea)); + + m68ki_write_8((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_not_8_pd7(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_A7_PD_8(mc68kcpu); + uint32_t res = MASK_OUT_ABOVE_8(~m68ki_read_8((mc68kcpu), ea)); + + m68ki_write_8((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_not_8_di(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AY_DI_8(mc68kcpu); + uint32_t res = MASK_OUT_ABOVE_8(~m68ki_read_8((mc68kcpu), ea)); + + m68ki_write_8((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_not_8_ix(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AY_IX_8(mc68kcpu); + uint32_t res = MASK_OUT_ABOVE_8(~m68ki_read_8((mc68kcpu), ea)); + + m68ki_write_8((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_not_8_aw(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AW_8(mc68kcpu); + uint32_t res = MASK_OUT_ABOVE_8(~m68ki_read_8((mc68kcpu), ea)); + + m68ki_write_8((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_not_8_al(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AL_8(mc68kcpu); + uint32_t res = MASK_OUT_ABOVE_8(~m68ki_read_8((mc68kcpu), ea)); + + m68ki_write_8((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_not_16_d(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &DY(mc68kcpu); + uint32_t res = MASK_OUT_ABOVE_16(~*r_dst); + + *r_dst = MASK_OUT_BELOW_16(*r_dst) | res; + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_not_16_ai(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AY_AI_16(mc68kcpu); + uint32_t res = MASK_OUT_ABOVE_16(~m68ki_read_16((mc68kcpu), ea)); + + m68ki_write_16((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_not_16_pi(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AY_PI_16(mc68kcpu); + uint32_t res = MASK_OUT_ABOVE_16(~m68ki_read_16((mc68kcpu), ea)); + + m68ki_write_16((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_not_16_pd(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AY_PD_16(mc68kcpu); + uint32_t res = MASK_OUT_ABOVE_16(~m68ki_read_16((mc68kcpu), ea)); + + m68ki_write_16((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_not_16_di(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AY_DI_16(mc68kcpu); + uint32_t res = MASK_OUT_ABOVE_16(~m68ki_read_16((mc68kcpu), ea)); + + m68ki_write_16((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_not_16_ix(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AY_IX_16(mc68kcpu); + uint32_t res = MASK_OUT_ABOVE_16(~m68ki_read_16((mc68kcpu), ea)); + + m68ki_write_16((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_not_16_aw(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AW_16(mc68kcpu); + uint32_t res = MASK_OUT_ABOVE_16(~m68ki_read_16((mc68kcpu), ea)); + + m68ki_write_16((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_not_16_al(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AL_16(mc68kcpu); + uint32_t res = MASK_OUT_ABOVE_16(~m68ki_read_16((mc68kcpu), ea)); + + m68ki_write_16((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_not_32_d(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &DY(mc68kcpu); + uint32_t res = *r_dst = MASK_OUT_ABOVE_32(~*r_dst); + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_not_32_ai(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AY_AI_32(mc68kcpu); + uint32_t res = MASK_OUT_ABOVE_32(~m68ki_read_32((mc68kcpu), ea)); + + m68ki_write_32((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_not_32_pi(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AY_PI_32(mc68kcpu); + uint32_t res = MASK_OUT_ABOVE_32(~m68ki_read_32((mc68kcpu), ea)); + + m68ki_write_32((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_not_32_pd(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AY_PD_32(mc68kcpu); + uint32_t res = MASK_OUT_ABOVE_32(~m68ki_read_32((mc68kcpu), ea)); + + m68ki_write_32((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_not_32_di(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AY_DI_32(mc68kcpu); + uint32_t res = MASK_OUT_ABOVE_32(~m68ki_read_32((mc68kcpu), ea)); + + m68ki_write_32((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_not_32_ix(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AY_IX_32(mc68kcpu); + uint32_t res = MASK_OUT_ABOVE_32(~m68ki_read_32((mc68kcpu), ea)); + + m68ki_write_32((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_not_32_aw(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AW_32(mc68kcpu); + uint32_t res = MASK_OUT_ABOVE_32(~m68ki_read_32((mc68kcpu), ea)); + + m68ki_write_32((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_not_32_al(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AL_32(mc68kcpu); + uint32_t res = MASK_OUT_ABOVE_32(~m68ki_read_32((mc68kcpu), ea)); + + m68ki_write_32((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_or_8_er_d(m68000_base_device* mc68kcpu) +{ + uint32_t res = MASK_OUT_ABOVE_8((DX(mc68kcpu) |= MASK_OUT_ABOVE_8(DY(mc68kcpu)))); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_or_8_er_ai(m68000_base_device* mc68kcpu) +{ + uint32_t res = MASK_OUT_ABOVE_8((DX(mc68kcpu) |= OPER_AY_AI_8(mc68kcpu))); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_or_8_er_pi(m68000_base_device* mc68kcpu) +{ + uint32_t res = MASK_OUT_ABOVE_8((DX(mc68kcpu) |= OPER_AY_PI_8(mc68kcpu))); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_or_8_er_pi7(m68000_base_device* mc68kcpu) +{ + uint32_t res = MASK_OUT_ABOVE_8((DX(mc68kcpu) |= OPER_A7_PI_8(mc68kcpu))); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_or_8_er_pd(m68000_base_device* mc68kcpu) +{ + uint32_t res = MASK_OUT_ABOVE_8((DX(mc68kcpu) |= OPER_AY_PD_8(mc68kcpu))); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_or_8_er_pd7(m68000_base_device* mc68kcpu) +{ + uint32_t res = MASK_OUT_ABOVE_8((DX(mc68kcpu) |= OPER_A7_PD_8(mc68kcpu))); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_or_8_er_di(m68000_base_device* mc68kcpu) +{ + uint32_t res = MASK_OUT_ABOVE_8((DX(mc68kcpu) |= OPER_AY_DI_8(mc68kcpu))); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_or_8_er_ix(m68000_base_device* mc68kcpu) +{ + uint32_t res = MASK_OUT_ABOVE_8((DX(mc68kcpu) |= OPER_AY_IX_8(mc68kcpu))); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_or_8_er_aw(m68000_base_device* mc68kcpu) +{ + uint32_t res = MASK_OUT_ABOVE_8((DX(mc68kcpu) |= OPER_AW_8(mc68kcpu))); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_or_8_er_al(m68000_base_device* mc68kcpu) +{ + uint32_t res = MASK_OUT_ABOVE_8((DX(mc68kcpu) |= OPER_AL_8(mc68kcpu))); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_or_8_er_pcdi(m68000_base_device* mc68kcpu) +{ + uint32_t res = MASK_OUT_ABOVE_8((DX(mc68kcpu) |= OPER_PCDI_8(mc68kcpu))); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_or_8_er_pcix(m68000_base_device* mc68kcpu) +{ + uint32_t res = MASK_OUT_ABOVE_8((DX(mc68kcpu) |= OPER_PCIX_8(mc68kcpu))); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_or_8_er_i(m68000_base_device* mc68kcpu) +{ + uint32_t res = MASK_OUT_ABOVE_8((DX(mc68kcpu) |= OPER_I_8(mc68kcpu))); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_or_16_er_d(m68000_base_device* mc68kcpu) +{ + uint32_t res = MASK_OUT_ABOVE_16((DX(mc68kcpu) |= MASK_OUT_ABOVE_16(DY(mc68kcpu)))); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_or_16_er_ai(m68000_base_device* mc68kcpu) +{ + uint32_t res = MASK_OUT_ABOVE_16((DX(mc68kcpu) |= OPER_AY_AI_16(mc68kcpu))); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_or_16_er_pi(m68000_base_device* mc68kcpu) +{ + uint32_t res = MASK_OUT_ABOVE_16((DX(mc68kcpu) |= OPER_AY_PI_16(mc68kcpu))); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_or_16_er_pd(m68000_base_device* mc68kcpu) +{ + uint32_t res = MASK_OUT_ABOVE_16((DX(mc68kcpu) |= OPER_AY_PD_16(mc68kcpu))); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_or_16_er_di(m68000_base_device* mc68kcpu) +{ + uint32_t res = MASK_OUT_ABOVE_16((DX(mc68kcpu) |= OPER_AY_DI_16(mc68kcpu))); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_or_16_er_ix(m68000_base_device* mc68kcpu) +{ + uint32_t res = MASK_OUT_ABOVE_16((DX(mc68kcpu) |= OPER_AY_IX_16(mc68kcpu))); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_or_16_er_aw(m68000_base_device* mc68kcpu) +{ + uint32_t res = MASK_OUT_ABOVE_16((DX(mc68kcpu) |= OPER_AW_16(mc68kcpu))); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_or_16_er_al(m68000_base_device* mc68kcpu) +{ + uint32_t res = MASK_OUT_ABOVE_16((DX(mc68kcpu) |= OPER_AL_16(mc68kcpu))); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_or_16_er_pcdi(m68000_base_device* mc68kcpu) +{ + uint32_t res = MASK_OUT_ABOVE_16((DX(mc68kcpu) |= OPER_PCDI_16(mc68kcpu))); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_or_16_er_pcix(m68000_base_device* mc68kcpu) +{ + uint32_t res = MASK_OUT_ABOVE_16((DX(mc68kcpu) |= OPER_PCIX_16(mc68kcpu))); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_or_16_er_i(m68000_base_device* mc68kcpu) +{ + uint32_t res = MASK_OUT_ABOVE_16((DX(mc68kcpu) |= OPER_I_16(mc68kcpu))); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_or_32_er_d(m68000_base_device* mc68kcpu) +{ + uint32_t res = DX(mc68kcpu) |= DY(mc68kcpu); + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_or_32_er_ai(m68000_base_device* mc68kcpu) +{ + uint32_t res = DX(mc68kcpu) |= OPER_AY_AI_32(mc68kcpu); + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_or_32_er_pi(m68000_base_device* mc68kcpu) +{ + uint32_t res = DX(mc68kcpu) |= OPER_AY_PI_32(mc68kcpu); + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_or_32_er_pd(m68000_base_device* mc68kcpu) +{ + uint32_t res = DX(mc68kcpu) |= OPER_AY_PD_32(mc68kcpu); + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_or_32_er_di(m68000_base_device* mc68kcpu) +{ + uint32_t res = DX(mc68kcpu) |= OPER_AY_DI_32(mc68kcpu); + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_or_32_er_ix(m68000_base_device* mc68kcpu) +{ + uint32_t res = DX(mc68kcpu) |= OPER_AY_IX_32(mc68kcpu); + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_or_32_er_aw(m68000_base_device* mc68kcpu) +{ + uint32_t res = DX(mc68kcpu) |= OPER_AW_32(mc68kcpu); + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_or_32_er_al(m68000_base_device* mc68kcpu) +{ + uint32_t res = DX(mc68kcpu) |= OPER_AL_32(mc68kcpu); + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_or_32_er_pcdi(m68000_base_device* mc68kcpu) +{ + uint32_t res = DX(mc68kcpu) |= OPER_PCDI_32(mc68kcpu); + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_or_32_er_pcix(m68000_base_device* mc68kcpu) +{ + uint32_t res = DX(mc68kcpu) |= OPER_PCIX_32(mc68kcpu); + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_or_32_er_i(m68000_base_device* mc68kcpu) +{ + uint32_t res = DX(mc68kcpu) |= OPER_I_32(mc68kcpu); + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_or_8_re_ai(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AY_AI_8(mc68kcpu); + uint32_t res = MASK_OUT_ABOVE_8(DX(mc68kcpu) | m68ki_read_8((mc68kcpu), ea)); + + m68ki_write_8((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_or_8_re_pi(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AY_PI_8(mc68kcpu); + uint32_t res = MASK_OUT_ABOVE_8(DX(mc68kcpu) | m68ki_read_8((mc68kcpu), ea)); + + m68ki_write_8((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_or_8_re_pi7(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_A7_PI_8(mc68kcpu); + uint32_t res = MASK_OUT_ABOVE_8(DX(mc68kcpu) | m68ki_read_8((mc68kcpu), ea)); + + m68ki_write_8((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_or_8_re_pd(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AY_PD_8(mc68kcpu); + uint32_t res = MASK_OUT_ABOVE_8(DX(mc68kcpu) | m68ki_read_8((mc68kcpu), ea)); + + m68ki_write_8((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_or_8_re_pd7(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_A7_PD_8(mc68kcpu); + uint32_t res = MASK_OUT_ABOVE_8(DX(mc68kcpu) | m68ki_read_8((mc68kcpu), ea)); + + m68ki_write_8((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_or_8_re_di(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AY_DI_8(mc68kcpu); + uint32_t res = MASK_OUT_ABOVE_8(DX(mc68kcpu) | m68ki_read_8((mc68kcpu), ea)); + + m68ki_write_8((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_or_8_re_ix(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AY_IX_8(mc68kcpu); + uint32_t res = MASK_OUT_ABOVE_8(DX(mc68kcpu) | m68ki_read_8((mc68kcpu), ea)); + + m68ki_write_8((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_or_8_re_aw(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AW_8(mc68kcpu); + uint32_t res = MASK_OUT_ABOVE_8(DX(mc68kcpu) | m68ki_read_8((mc68kcpu), ea)); + + m68ki_write_8((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_or_8_re_al(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AL_8(mc68kcpu); + uint32_t res = MASK_OUT_ABOVE_8(DX(mc68kcpu) | m68ki_read_8((mc68kcpu), ea)); + + m68ki_write_8((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_or_16_re_ai(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AY_AI_16(mc68kcpu); + uint32_t res = MASK_OUT_ABOVE_16(DX(mc68kcpu) | m68ki_read_16((mc68kcpu), ea)); + + m68ki_write_16((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_or_16_re_pi(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AY_PI_16(mc68kcpu); + uint32_t res = MASK_OUT_ABOVE_16(DX(mc68kcpu) | m68ki_read_16((mc68kcpu), ea)); + + m68ki_write_16((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_or_16_re_pd(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AY_PD_16(mc68kcpu); + uint32_t res = MASK_OUT_ABOVE_16(DX(mc68kcpu) | m68ki_read_16((mc68kcpu), ea)); + + m68ki_write_16((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_or_16_re_di(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AY_DI_16(mc68kcpu); + uint32_t res = MASK_OUT_ABOVE_16(DX(mc68kcpu) | m68ki_read_16((mc68kcpu), ea)); + + m68ki_write_16((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_or_16_re_ix(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AY_IX_16(mc68kcpu); + uint32_t res = MASK_OUT_ABOVE_16(DX(mc68kcpu) | m68ki_read_16((mc68kcpu), ea)); + + m68ki_write_16((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_or_16_re_aw(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AW_16(mc68kcpu); + uint32_t res = MASK_OUT_ABOVE_16(DX(mc68kcpu) | m68ki_read_16((mc68kcpu), ea)); + + m68ki_write_16((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_or_16_re_al(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AL_16(mc68kcpu); + uint32_t res = MASK_OUT_ABOVE_16(DX(mc68kcpu) | m68ki_read_16((mc68kcpu), ea)); + + m68ki_write_16((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_or_32_re_ai(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AY_AI_32(mc68kcpu); + uint32_t res = DX(mc68kcpu) | m68ki_read_32((mc68kcpu), ea); + + m68ki_write_32((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_or_32_re_pi(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AY_PI_32(mc68kcpu); + uint32_t res = DX(mc68kcpu) | m68ki_read_32((mc68kcpu), ea); + + m68ki_write_32((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_or_32_re_pd(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AY_PD_32(mc68kcpu); + uint32_t res = DX(mc68kcpu) | m68ki_read_32((mc68kcpu), ea); + + m68ki_write_32((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_or_32_re_di(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AY_DI_32(mc68kcpu); + uint32_t res = DX(mc68kcpu) | m68ki_read_32((mc68kcpu), ea); + + m68ki_write_32((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_or_32_re_ix(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AY_IX_32(mc68kcpu); + uint32_t res = DX(mc68kcpu) | m68ki_read_32((mc68kcpu), ea); + + m68ki_write_32((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_or_32_re_aw(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AW_32(mc68kcpu); + uint32_t res = DX(mc68kcpu) | m68ki_read_32((mc68kcpu), ea); + + m68ki_write_32((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_or_32_re_al(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AL_32(mc68kcpu); + uint32_t res = DX(mc68kcpu) | m68ki_read_32((mc68kcpu), ea); + + m68ki_write_32((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_ori_8_d(m68000_base_device* mc68kcpu) +{ + uint32_t res = MASK_OUT_ABOVE_8((DY(mc68kcpu) |= OPER_I_8(mc68kcpu))); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_ori_8_ai(m68000_base_device* mc68kcpu) +{ + uint32_t src = OPER_I_8(mc68kcpu); + uint32_t ea = EA_AY_AI_8(mc68kcpu); + uint32_t res = MASK_OUT_ABOVE_8(src | m68ki_read_8((mc68kcpu), ea)); + + m68ki_write_8((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_ori_8_pi(m68000_base_device* mc68kcpu) +{ + uint32_t src = OPER_I_8(mc68kcpu); + uint32_t ea = EA_AY_PI_8(mc68kcpu); + uint32_t res = MASK_OUT_ABOVE_8(src | m68ki_read_8((mc68kcpu), ea)); + + m68ki_write_8((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_ori_8_pi7(m68000_base_device* mc68kcpu) +{ + uint32_t src = OPER_I_8(mc68kcpu); + uint32_t ea = EA_A7_PI_8(mc68kcpu); + uint32_t res = MASK_OUT_ABOVE_8(src | m68ki_read_8((mc68kcpu), ea)); + + m68ki_write_8((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_ori_8_pd(m68000_base_device* mc68kcpu) +{ + uint32_t src = OPER_I_8(mc68kcpu); + uint32_t ea = EA_AY_PD_8(mc68kcpu); + uint32_t res = MASK_OUT_ABOVE_8(src | m68ki_read_8((mc68kcpu), ea)); + + m68ki_write_8((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_ori_8_pd7(m68000_base_device* mc68kcpu) +{ + uint32_t src = OPER_I_8(mc68kcpu); + uint32_t ea = EA_A7_PD_8(mc68kcpu); + uint32_t res = MASK_OUT_ABOVE_8(src | m68ki_read_8((mc68kcpu), ea)); + + m68ki_write_8((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_ori_8_di(m68000_base_device* mc68kcpu) +{ + uint32_t src = OPER_I_8(mc68kcpu); + uint32_t ea = EA_AY_DI_8(mc68kcpu); + uint32_t res = MASK_OUT_ABOVE_8(src | m68ki_read_8((mc68kcpu), ea)); + + m68ki_write_8((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_ori_8_ix(m68000_base_device* mc68kcpu) +{ + uint32_t src = OPER_I_8(mc68kcpu); + uint32_t ea = EA_AY_IX_8(mc68kcpu); + uint32_t res = MASK_OUT_ABOVE_8(src | m68ki_read_8((mc68kcpu), ea)); + + m68ki_write_8((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_ori_8_aw(m68000_base_device* mc68kcpu) +{ + uint32_t src = OPER_I_8(mc68kcpu); + uint32_t ea = EA_AW_8(mc68kcpu); + uint32_t res = MASK_OUT_ABOVE_8(src | m68ki_read_8((mc68kcpu), ea)); + + m68ki_write_8((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_ori_8_al(m68000_base_device* mc68kcpu) +{ + uint32_t src = OPER_I_8(mc68kcpu); + uint32_t ea = EA_AL_8(mc68kcpu); + uint32_t res = MASK_OUT_ABOVE_8(src | m68ki_read_8((mc68kcpu), ea)); + + m68ki_write_8((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_ori_16_d(m68000_base_device* mc68kcpu) +{ + uint32_t res = MASK_OUT_ABOVE_16(DY(mc68kcpu) |= OPER_I_16(mc68kcpu)); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_ori_16_ai(m68000_base_device* mc68kcpu) +{ + uint32_t src = OPER_I_16(mc68kcpu); + uint32_t ea = EA_AY_AI_16(mc68kcpu); + uint32_t res = MASK_OUT_ABOVE_16(src | m68ki_read_16((mc68kcpu), ea)); + + m68ki_write_16((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_ori_16_pi(m68000_base_device* mc68kcpu) +{ + uint32_t src = OPER_I_16(mc68kcpu); + uint32_t ea = EA_AY_PI_16(mc68kcpu); + uint32_t res = MASK_OUT_ABOVE_16(src | m68ki_read_16((mc68kcpu), ea)); + + m68ki_write_16((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_ori_16_pd(m68000_base_device* mc68kcpu) +{ + uint32_t src = OPER_I_16(mc68kcpu); + uint32_t ea = EA_AY_PD_16(mc68kcpu); + uint32_t res = MASK_OUT_ABOVE_16(src | m68ki_read_16((mc68kcpu), ea)); + + m68ki_write_16((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_ori_16_di(m68000_base_device* mc68kcpu) +{ + uint32_t src = OPER_I_16(mc68kcpu); + uint32_t ea = EA_AY_DI_16(mc68kcpu); + uint32_t res = MASK_OUT_ABOVE_16(src | m68ki_read_16((mc68kcpu), ea)); + + m68ki_write_16((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_ori_16_ix(m68000_base_device* mc68kcpu) +{ + uint32_t src = OPER_I_16(mc68kcpu); + uint32_t ea = EA_AY_IX_16(mc68kcpu); + uint32_t res = MASK_OUT_ABOVE_16(src | m68ki_read_16((mc68kcpu), ea)); + + m68ki_write_16((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_ori_16_aw(m68000_base_device* mc68kcpu) +{ + uint32_t src = OPER_I_16(mc68kcpu); + uint32_t ea = EA_AW_16(mc68kcpu); + uint32_t res = MASK_OUT_ABOVE_16(src | m68ki_read_16((mc68kcpu), ea)); + + m68ki_write_16((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_ori_16_al(m68000_base_device* mc68kcpu) +{ + uint32_t src = OPER_I_16(mc68kcpu); + uint32_t ea = EA_AL_16(mc68kcpu); + uint32_t res = MASK_OUT_ABOVE_16(src | m68ki_read_16((mc68kcpu), ea)); + + m68ki_write_16((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_ori_32_d(m68000_base_device* mc68kcpu) +{ + uint32_t res = DY(mc68kcpu) |= OPER_I_32(mc68kcpu); + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_ori_32_ai(m68000_base_device* mc68kcpu) +{ + uint32_t src = OPER_I_32(mc68kcpu); + uint32_t ea = EA_AY_AI_32(mc68kcpu); + uint32_t res = src | m68ki_read_32((mc68kcpu), ea); + + m68ki_write_32((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_ori_32_pi(m68000_base_device* mc68kcpu) +{ + uint32_t src = OPER_I_32(mc68kcpu); + uint32_t ea = EA_AY_PI_32(mc68kcpu); + uint32_t res = src | m68ki_read_32((mc68kcpu), ea); + + m68ki_write_32((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_ori_32_pd(m68000_base_device* mc68kcpu) +{ + uint32_t src = OPER_I_32(mc68kcpu); + uint32_t ea = EA_AY_PD_32(mc68kcpu); + uint32_t res = src | m68ki_read_32((mc68kcpu), ea); + + m68ki_write_32((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_ori_32_di(m68000_base_device* mc68kcpu) +{ + uint32_t src = OPER_I_32(mc68kcpu); + uint32_t ea = EA_AY_DI_32(mc68kcpu); + uint32_t res = src | m68ki_read_32((mc68kcpu), ea); + + m68ki_write_32((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_ori_32_ix(m68000_base_device* mc68kcpu) +{ + uint32_t src = OPER_I_32(mc68kcpu); + uint32_t ea = EA_AY_IX_32(mc68kcpu); + uint32_t res = src | m68ki_read_32((mc68kcpu), ea); + + m68ki_write_32((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_ori_32_aw(m68000_base_device* mc68kcpu) +{ + uint32_t src = OPER_I_32(mc68kcpu); + uint32_t ea = EA_AW_32(mc68kcpu); + uint32_t res = src | m68ki_read_32((mc68kcpu), ea); + + m68ki_write_32((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_ori_32_al(m68000_base_device* mc68kcpu) +{ + uint32_t src = OPER_I_32(mc68kcpu); + uint32_t ea = EA_AL_32(mc68kcpu); + uint32_t res = src | m68ki_read_32((mc68kcpu), ea); + + m68ki_write_32((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_ori_16_toc(m68000_base_device* mc68kcpu) +{ + m68ki_set_ccr((mc68kcpu), m68ki_get_ccr(mc68kcpu) | OPER_I_16(mc68kcpu)); +} + + +static void m68k_op_ori_16_tos(m68000_base_device* mc68kcpu) +{ + if((mc68kcpu)->s_flag) + { + uint32_t src = OPER_I_16(mc68kcpu); + m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */ + m68ki_set_sr((mc68kcpu), m68ki_get_sr(mc68kcpu) | src); + return; + } + m68ki_exception_privilege_violation(mc68kcpu); +} + + +static void m68k_op_pack_16_rr(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + /* Note: DX(mc68kcpu) and DY(mc68kcpu) are reversed in Motorola's docs */ + uint32_t src = DY(mc68kcpu) + OPER_I_16(mc68kcpu); + uint32_t* r_dst = &DX(mc68kcpu); + + *r_dst = MASK_OUT_BELOW_8(*r_dst) | ((src >> 4) & 0x00f0) | (src & 0x000f); + return; + } + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_pack_16_mm_ax7(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + /* Note: AX and AY are reversed in Motorola's docs */ + uint32_t ea_src = EA_AY_PD_8(mc68kcpu); + uint32_t src = m68ki_read_8((mc68kcpu), ea_src); + ea_src = EA_AY_PD_8(mc68kcpu); + src = ((src << 8) | m68ki_read_8((mc68kcpu), ea_src)) + OPER_I_16(mc68kcpu); + + m68ki_write_8((mc68kcpu), EA_A7_PD_8(mc68kcpu), ((src >> 8) & 0x000f) | ((src<<4) & 0x00f0)); + return; + } + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_pack_16_mm_ay7(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + /* Note: AX and AY are reversed in Motorola's docs */ + uint32_t ea_src = EA_A7_PD_8(mc68kcpu); + uint32_t src = m68ki_read_8((mc68kcpu), ea_src); + ea_src = EA_A7_PD_8(mc68kcpu); + src = ((src << 8) | m68ki_read_8((mc68kcpu), ea_src)) + OPER_I_16(mc68kcpu); + + m68ki_write_8((mc68kcpu), EA_AX_PD_8(mc68kcpu), ((src >> 8) & 0x000f) | ((src<<4) & 0x00f0)); + return; + } + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_pack_16_mm_axy7(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + uint32_t ea_src = EA_A7_PD_8(mc68kcpu); + uint32_t src = m68ki_read_8((mc68kcpu), ea_src); + ea_src = EA_A7_PD_8(mc68kcpu); + src = ((src << 8) | m68ki_read_8((mc68kcpu), ea_src)) + OPER_I_16(mc68kcpu); + + m68ki_write_8((mc68kcpu), EA_A7_PD_8(mc68kcpu), ((src >> 8) & 0x000f) | ((src<<4) & 0x00f0)); + return; + } + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_pack_16_mm(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + /* Note: AX and AY are reversed in Motorola's docs */ + uint32_t ea_src = EA_AY_PD_8(mc68kcpu); + uint32_t src = m68ki_read_8((mc68kcpu), ea_src); + ea_src = EA_AY_PD_8(mc68kcpu); + src = ((src << 8) | m68ki_read_8((mc68kcpu), ea_src)) + OPER_I_16(mc68kcpu); + + m68ki_write_8((mc68kcpu), EA_AX_PD_8(mc68kcpu), ((src >> 8) & 0x000f) | ((src<<4) & 0x00f0)); + return; + } + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_pea_32_ai(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AY_AI_32(mc68kcpu); + + m68ki_push_32((mc68kcpu), ea); +} + + +static void m68k_op_pea_32_di(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AY_DI_32(mc68kcpu); + + m68ki_push_32((mc68kcpu), ea); +} + + +static void m68k_op_pea_32_ix(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AY_IX_32(mc68kcpu); + + m68ki_push_32((mc68kcpu), ea); +} + + +static void m68k_op_pea_32_aw(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AW_32(mc68kcpu); + + m68ki_push_32((mc68kcpu), ea); +} + + +static void m68k_op_pea_32_al(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AL_32(mc68kcpu); + + m68ki_push_32((mc68kcpu), ea); +} + + +static void m68k_op_pea_32_pcdi(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_PCDI_32(mc68kcpu); + + m68ki_push_32((mc68kcpu), ea); +} + + +static void m68k_op_pea_32_pcix(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_PCIX_32(mc68kcpu); + + m68ki_push_32((mc68kcpu), ea); +} + + +static void m68k_op_pflusha_32(m68000_base_device* mc68kcpu) +{ + m68ki_exception_1111(mc68kcpu); +} + + +static void m68k_op_pflushan_32(m68000_base_device* mc68kcpu) +{ + m68ki_exception_1111(mc68kcpu); +} + + +static void m68k_op_pmmu_32(m68000_base_device* mc68kcpu) +{ + + m68ki_exception_1111(mc68kcpu); +} + + +static void m68k_op_ptest_32(m68000_base_device* mc68kcpu) +{ + + m68ki_exception_1111(mc68kcpu); +} + + +static void m68k_op_reset(m68000_base_device* mc68kcpu) +{ + if((mc68kcpu)->s_flag) + { + m68k_reset_handler handler = (m68k_reset_handler)(mc68kcpu)->c.reset_handler; + handler(&(mc68kcpu)->c); + (mc68kcpu)->c.current_cycle += (mc68kcpu)->cyc_reset; + return; + } + m68ki_exception_privilege_violation(mc68kcpu); +} + + +static void m68k_op_ror_8_s(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &DY(mc68kcpu); + uint32_t orig_shift = ((((mc68kcpu)->ir >> 9) - 1) & 7) + 1; + uint32_t shift = orig_shift & 7; + uint32_t src = MASK_OUT_ABOVE_8(*r_dst); + uint32_t res = ROR_8(src, shift); + + if(orig_shift != 0) + (mc68kcpu)->c.current_cycle += (orig_shift<<(mc68kcpu)->cyc_shift) * (mc68kcpu)->c.options->gen.clock_divider; + + *r_dst = MASK_OUT_BELOW_8(*r_dst) | res; + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = src << (9-orig_shift); + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_ror_16_s(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &DY(mc68kcpu); + uint32_t shift = ((((mc68kcpu)->ir >> 9) - 1) & 7) + 1; + uint32_t src = MASK_OUT_ABOVE_16(*r_dst); + uint32_t res = ROR_16(src, shift); + + if(shift != 0) + (mc68kcpu)->c.current_cycle += (shift<<(mc68kcpu)->cyc_shift) * (mc68kcpu)->c.options->gen.clock_divider; + + *r_dst = MASK_OUT_BELOW_16(*r_dst) | res; + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = src << (9-shift); + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_ror_32_s(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &DY(mc68kcpu); + uint32_t shift = ((((mc68kcpu)->ir >> 9) - 1) & 7) + 1; + uint64_t src = *r_dst; + uint32_t res = ROR_32(src, shift); + + if(shift != 0) + (mc68kcpu)->c.current_cycle += (shift<<(mc68kcpu)->cyc_shift) * (mc68kcpu)->c.options->gen.clock_divider; + + *r_dst = res; + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = src << (9-shift); + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_ror_8_r(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &DY(mc68kcpu); + uint32_t orig_shift = DX(mc68kcpu) & 0x3f; + uint32_t shift = orig_shift & 7; + uint32_t src = MASK_OUT_ABOVE_8(*r_dst); + uint32_t res = ROR_8(src, shift); + + if(orig_shift != 0) + { + (mc68kcpu)->c.current_cycle += (orig_shift<<(mc68kcpu)->cyc_shift) * (mc68kcpu)->c.options->gen.clock_divider; + + *r_dst = MASK_OUT_BELOW_8(*r_dst) | res; + (mc68kcpu)->c_flag = src << (8-((shift-1)&7)); + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + return; + } + + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->n_flag = NFLAG_8(src); + (mc68kcpu)->not_z_flag = src; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_ror_16_r(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &DY(mc68kcpu); + uint32_t orig_shift = DX(mc68kcpu) & 0x3f; + uint32_t shift = orig_shift & 15; + uint32_t src = MASK_OUT_ABOVE_16(*r_dst); + uint32_t res = ROR_16(src, shift); + + if(orig_shift != 0) + { + (mc68kcpu)->c.current_cycle += (orig_shift<<(mc68kcpu)->cyc_shift) * (mc68kcpu)->c.options->gen.clock_divider; + + *r_dst = MASK_OUT_BELOW_16(*r_dst) | res; + (mc68kcpu)->c_flag = (src >> ((shift - 1) & 15)) << 8; + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + return; + } + + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->n_flag = NFLAG_16(src); + (mc68kcpu)->not_z_flag = src; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_ror_32_r(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &DY(mc68kcpu); + uint32_t orig_shift = DX(mc68kcpu) & 0x3f; + uint32_t shift = orig_shift & 31; + uint64_t src = *r_dst; + uint32_t res = ROR_32(src, shift); + + if(orig_shift != 0) + { + (mc68kcpu)->c.current_cycle += (orig_shift<<(mc68kcpu)->cyc_shift) * (mc68kcpu)->c.options->gen.clock_divider; + + *r_dst = res; + (mc68kcpu)->c_flag = (src >> ((shift - 1) & 31)) << 8; + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + return; + } + + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->n_flag = NFLAG_32(src); + (mc68kcpu)->not_z_flag = src; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_ror_16_ai(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AY_AI_16(mc68kcpu); + uint32_t src = m68ki_read_16((mc68kcpu), ea); + uint32_t res = ROR_16(src, 1); + + m68ki_write_16((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = src << 8; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_ror_16_pi(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AY_PI_16(mc68kcpu); + uint32_t src = m68ki_read_16((mc68kcpu), ea); + uint32_t res = ROR_16(src, 1); + + m68ki_write_16((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = src << 8; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_ror_16_pd(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AY_PD_16(mc68kcpu); + uint32_t src = m68ki_read_16((mc68kcpu), ea); + uint32_t res = ROR_16(src, 1); + + m68ki_write_16((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = src << 8; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_ror_16_di(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AY_DI_16(mc68kcpu); + uint32_t src = m68ki_read_16((mc68kcpu), ea); + uint32_t res = ROR_16(src, 1); + + m68ki_write_16((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = src << 8; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_ror_16_ix(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AY_IX_16(mc68kcpu); + uint32_t src = m68ki_read_16((mc68kcpu), ea); + uint32_t res = ROR_16(src, 1); + + m68ki_write_16((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = src << 8; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_ror_16_aw(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AW_16(mc68kcpu); + uint32_t src = m68ki_read_16((mc68kcpu), ea); + uint32_t res = ROR_16(src, 1); + + m68ki_write_16((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = src << 8; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_ror_16_al(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AL_16(mc68kcpu); + uint32_t src = m68ki_read_16((mc68kcpu), ea); + uint32_t res = ROR_16(src, 1); + + m68ki_write_16((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = src << 8; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_rol_8_s(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &DY(mc68kcpu); + uint32_t orig_shift = ((((mc68kcpu)->ir >> 9) - 1) & 7) + 1; + uint32_t shift = orig_shift & 7; + uint32_t src = MASK_OUT_ABOVE_8(*r_dst); + uint32_t res = ROL_8(src, shift); + + if(orig_shift != 0) + (mc68kcpu)->c.current_cycle += (orig_shift<<(mc68kcpu)->cyc_shift) * (mc68kcpu)->c.options->gen.clock_divider; + + *r_dst = MASK_OUT_BELOW_8(*r_dst) | res; + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = src << orig_shift; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_rol_16_s(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &DY(mc68kcpu); + uint32_t shift = ((((mc68kcpu)->ir >> 9) - 1) & 7) + 1; + uint32_t src = MASK_OUT_ABOVE_16(*r_dst); + uint32_t res = ROL_16(src, shift); + + if(shift != 0) + (mc68kcpu)->c.current_cycle += (shift<<(mc68kcpu)->cyc_shift) * (mc68kcpu)->c.options->gen.clock_divider; + + *r_dst = MASK_OUT_BELOW_16(*r_dst) | res; + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = src >> (8-shift); + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_rol_32_s(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &DY(mc68kcpu); + uint32_t shift = ((((mc68kcpu)->ir >> 9) - 1) & 7) + 1; + uint64_t src = *r_dst; + uint32_t res = ROL_32(src, shift); + + if(shift != 0) + (mc68kcpu)->c.current_cycle += (shift<<(mc68kcpu)->cyc_shift) * (mc68kcpu)->c.options->gen.clock_divider; + + *r_dst = res; + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = src >> (24-shift); + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_rol_8_r(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &DY(mc68kcpu); + uint32_t orig_shift = DX(mc68kcpu) & 0x3f; + uint32_t shift = orig_shift & 7; + uint32_t src = MASK_OUT_ABOVE_8(*r_dst); + uint32_t res = ROL_8(src, shift); + + if(orig_shift != 0) + { + (mc68kcpu)->c.current_cycle += (orig_shift<<(mc68kcpu)->cyc_shift) * (mc68kcpu)->c.options->gen.clock_divider; + + if(shift != 0) + { + *r_dst = MASK_OUT_BELOW_8(*r_dst) | res; + (mc68kcpu)->c_flag = src << shift; + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + return; + } + (mc68kcpu)->c_flag = (src & 1)<<8; + (mc68kcpu)->n_flag = NFLAG_8(src); + (mc68kcpu)->not_z_flag = src; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + return; + } + + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->n_flag = NFLAG_8(src); + (mc68kcpu)->not_z_flag = src; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_rol_16_r(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &DY(mc68kcpu); + uint32_t orig_shift = DX(mc68kcpu) & 0x3f; + uint32_t shift = orig_shift & 15; + uint32_t src = MASK_OUT_ABOVE_16(*r_dst); + uint32_t res = MASK_OUT_ABOVE_16(ROL_16(src, shift)); + + if(orig_shift != 0) + { + (mc68kcpu)->c.current_cycle += (orig_shift<<(mc68kcpu)->cyc_shift) * (mc68kcpu)->c.options->gen.clock_divider; + + if(shift != 0) + { + *r_dst = MASK_OUT_BELOW_16(*r_dst) | res; + (mc68kcpu)->c_flag = (src << shift) >> 8; + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + return; + } + (mc68kcpu)->c_flag = (src & 1)<<8; + (mc68kcpu)->n_flag = NFLAG_16(src); + (mc68kcpu)->not_z_flag = src; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + return; + } + + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->n_flag = NFLAG_16(src); + (mc68kcpu)->not_z_flag = src; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_rol_32_r(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &DY(mc68kcpu); + uint32_t orig_shift = DX(mc68kcpu) & 0x3f; + uint32_t shift = orig_shift & 31; + uint64_t src = *r_dst; + uint32_t res = ROL_32(src, shift); + + if(orig_shift != 0) + { + (mc68kcpu)->c.current_cycle += (orig_shift<<(mc68kcpu)->cyc_shift) * (mc68kcpu)->c.options->gen.clock_divider; + + *r_dst = res; + + (mc68kcpu)->c_flag = (src >> ((32 - shift) & 0x1f)) << 8; + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + return; + } + + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->n_flag = NFLAG_32(src); + (mc68kcpu)->not_z_flag = src; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_rol_16_ai(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AY_AI_16(mc68kcpu); + uint32_t src = m68ki_read_16((mc68kcpu), ea); + uint32_t res = MASK_OUT_ABOVE_16(ROL_16(src, 1)); + + m68ki_write_16((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = src >> 7; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_rol_16_pi(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AY_PI_16(mc68kcpu); + uint32_t src = m68ki_read_16((mc68kcpu), ea); + uint32_t res = MASK_OUT_ABOVE_16(ROL_16(src, 1)); + + m68ki_write_16((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = src >> 7; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_rol_16_pd(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AY_PD_16(mc68kcpu); + uint32_t src = m68ki_read_16((mc68kcpu), ea); + uint32_t res = MASK_OUT_ABOVE_16(ROL_16(src, 1)); + + m68ki_write_16((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = src >> 7; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_rol_16_di(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AY_DI_16(mc68kcpu); + uint32_t src = m68ki_read_16((mc68kcpu), ea); + uint32_t res = MASK_OUT_ABOVE_16(ROL_16(src, 1)); + + m68ki_write_16((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = src >> 7; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_rol_16_ix(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AY_IX_16(mc68kcpu); + uint32_t src = m68ki_read_16((mc68kcpu), ea); + uint32_t res = MASK_OUT_ABOVE_16(ROL_16(src, 1)); + + m68ki_write_16((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = src >> 7; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_rol_16_aw(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AW_16(mc68kcpu); + uint32_t src = m68ki_read_16((mc68kcpu), ea); + uint32_t res = MASK_OUT_ABOVE_16(ROL_16(src, 1)); + + m68ki_write_16((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = src >> 7; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_rol_16_al(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AL_16(mc68kcpu); + uint32_t src = m68ki_read_16((mc68kcpu), ea); + uint32_t res = MASK_OUT_ABOVE_16(ROL_16(src, 1)); + + m68ki_write_16((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->c_flag = src >> 7; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_roxr_8_s(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &DY(mc68kcpu); + uint32_t shift = ((((mc68kcpu)->ir >> 9) - 1) & 7) + 1; + uint32_t src = MASK_OUT_ABOVE_8(*r_dst); + uint32_t res = ROR_9(src | (XFLAG_AS_1(mc68kcpu) << 8), shift); + + if(shift != 0) + (mc68kcpu)->c.current_cycle += (shift<<(mc68kcpu)->cyc_shift) * (mc68kcpu)->c.options->gen.clock_divider; + + (mc68kcpu)->c_flag = (mc68kcpu)->x_flag = res; + res = MASK_OUT_ABOVE_8(res); + + *r_dst = MASK_OUT_BELOW_8(*r_dst) | res; + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_roxr_16_s(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &DY(mc68kcpu); + uint32_t shift = ((((mc68kcpu)->ir >> 9) - 1) & 7) + 1; + uint32_t src = MASK_OUT_ABOVE_16(*r_dst); + uint32_t res = ROR_17(src | (XFLAG_AS_1(mc68kcpu) << 16), shift); + + if(shift != 0) + (mc68kcpu)->c.current_cycle += (shift<<(mc68kcpu)->cyc_shift) * (mc68kcpu)->c.options->gen.clock_divider; + + (mc68kcpu)->c_flag = (mc68kcpu)->x_flag = res >> 8; + res = MASK_OUT_ABOVE_16(res); + + *r_dst = MASK_OUT_BELOW_16(*r_dst) | res; + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_roxr_32_s(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &DY(mc68kcpu); + uint32_t shift = ((((mc68kcpu)->ir >> 9) - 1) & 7) + 1; + uint64_t src = *r_dst; + uint64_t res = src | (((uint64_t)XFLAG_AS_1(mc68kcpu)) << 32); + + if(shift != 0) + (mc68kcpu)->c.current_cycle += (shift<<(mc68kcpu)->cyc_shift) * (mc68kcpu)->c.options->gen.clock_divider; + + res = ROR_33_64(res, shift); + + (mc68kcpu)->c_flag = (mc68kcpu)->x_flag = res >> 24; + res = MASK_OUT_ABOVE_32(res); + + *r_dst = res; + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_roxr_8_r(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &DY(mc68kcpu); + uint32_t orig_shift = DX(mc68kcpu) & 0x3f; + + if(orig_shift != 0) + { + uint32_t shift = orig_shift % 9; + uint32_t src = MASK_OUT_ABOVE_8(*r_dst); + uint32_t res = ROR_9(src | (XFLAG_AS_1(mc68kcpu) << 8), shift); + + (mc68kcpu)->c.current_cycle += (orig_shift<<(mc68kcpu)->cyc_shift) * (mc68kcpu)->c.options->gen.clock_divider; + + (mc68kcpu)->c_flag = (mc68kcpu)->x_flag = res; + res = MASK_OUT_ABOVE_8(res); + + *r_dst = MASK_OUT_BELOW_8(*r_dst) | res; + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + return; + } + + (mc68kcpu)->c_flag = (mc68kcpu)->x_flag; + (mc68kcpu)->n_flag = NFLAG_8(*r_dst); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(*r_dst); + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_roxr_16_r(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &DY(mc68kcpu); + uint32_t orig_shift = DX(mc68kcpu) & 0x3f; + + if(orig_shift != 0) + { + uint32_t shift = orig_shift % 17; + uint32_t src = MASK_OUT_ABOVE_16(*r_dst); + uint32_t res = ROR_17(src | (XFLAG_AS_1(mc68kcpu) << 16), shift); + + (mc68kcpu)->c.current_cycle += (orig_shift<<(mc68kcpu)->cyc_shift) * (mc68kcpu)->c.options->gen.clock_divider; + + (mc68kcpu)->c_flag = (mc68kcpu)->x_flag = res >> 8; + res = MASK_OUT_ABOVE_16(res); + + *r_dst = MASK_OUT_BELOW_16(*r_dst) | res; + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + return; + } + + (mc68kcpu)->c_flag = (mc68kcpu)->x_flag; + (mc68kcpu)->n_flag = NFLAG_16(*r_dst); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(*r_dst); + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_roxr_32_r(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &DY(mc68kcpu); + uint32_t orig_shift = DX(mc68kcpu) & 0x3f; + + if(orig_shift != 0) + { + uint32_t shift = orig_shift % 33; + uint64_t src = *r_dst; + uint64_t res = src | (((uint64_t)XFLAG_AS_1(mc68kcpu)) << 32); + + res = ROR_33_64(res, shift); + + (mc68kcpu)->c.current_cycle += (orig_shift<<(mc68kcpu)->cyc_shift) * (mc68kcpu)->c.options->gen.clock_divider; + + (mc68kcpu)->c_flag = (mc68kcpu)->x_flag = res >> 24; + res = MASK_OUT_ABOVE_32(res); + + *r_dst = res; + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + return; + } + + (mc68kcpu)->c_flag = (mc68kcpu)->x_flag; + (mc68kcpu)->n_flag = NFLAG_32(*r_dst); + (mc68kcpu)->not_z_flag = *r_dst; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_roxr_16_ai(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AY_AI_16(mc68kcpu); + uint32_t src = m68ki_read_16((mc68kcpu), ea); + uint32_t res = ROR_17(src | (XFLAG_AS_1(mc68kcpu) << 16), 1); + + (mc68kcpu)->c_flag = (mc68kcpu)->x_flag = res >> 8; + res = MASK_OUT_ABOVE_16(res); + + m68ki_write_16((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_roxr_16_pi(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AY_PI_16(mc68kcpu); + uint32_t src = m68ki_read_16((mc68kcpu), ea); + uint32_t res = ROR_17(src | (XFLAG_AS_1(mc68kcpu) << 16), 1); + + (mc68kcpu)->c_flag = (mc68kcpu)->x_flag = res >> 8; + res = MASK_OUT_ABOVE_16(res); + + m68ki_write_16((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_roxr_16_pd(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AY_PD_16(mc68kcpu); + uint32_t src = m68ki_read_16((mc68kcpu), ea); + uint32_t res = ROR_17(src | (XFLAG_AS_1(mc68kcpu) << 16), 1); + + (mc68kcpu)->c_flag = (mc68kcpu)->x_flag = res >> 8; + res = MASK_OUT_ABOVE_16(res); + + m68ki_write_16((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_roxr_16_di(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AY_DI_16(mc68kcpu); + uint32_t src = m68ki_read_16((mc68kcpu), ea); + uint32_t res = ROR_17(src | (XFLAG_AS_1(mc68kcpu) << 16), 1); + + (mc68kcpu)->c_flag = (mc68kcpu)->x_flag = res >> 8; + res = MASK_OUT_ABOVE_16(res); + + m68ki_write_16((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_roxr_16_ix(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AY_IX_16(mc68kcpu); + uint32_t src = m68ki_read_16((mc68kcpu), ea); + uint32_t res = ROR_17(src | (XFLAG_AS_1(mc68kcpu) << 16), 1); + + (mc68kcpu)->c_flag = (mc68kcpu)->x_flag = res >> 8; + res = MASK_OUT_ABOVE_16(res); + + m68ki_write_16((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_roxr_16_aw(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AW_16(mc68kcpu); + uint32_t src = m68ki_read_16((mc68kcpu), ea); + uint32_t res = ROR_17(src | (XFLAG_AS_1(mc68kcpu) << 16), 1); + + (mc68kcpu)->c_flag = (mc68kcpu)->x_flag = res >> 8; + res = MASK_OUT_ABOVE_16(res); + + m68ki_write_16((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_roxr_16_al(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AL_16(mc68kcpu); + uint32_t src = m68ki_read_16((mc68kcpu), ea); + uint32_t res = ROR_17(src | (XFLAG_AS_1(mc68kcpu) << 16), 1); + + (mc68kcpu)->c_flag = (mc68kcpu)->x_flag = res >> 8; + res = MASK_OUT_ABOVE_16(res); + + m68ki_write_16((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_roxl_8_s(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &DY(mc68kcpu); + uint32_t shift = ((((mc68kcpu)->ir >> 9) - 1) & 7) + 1; + uint32_t src = MASK_OUT_ABOVE_8(*r_dst); + uint32_t res = ROL_9(src | (XFLAG_AS_1(mc68kcpu) << 8), shift); + + if(shift != 0) + (mc68kcpu)->c.current_cycle += (shift<<(mc68kcpu)->cyc_shift) * (mc68kcpu)->c.options->gen.clock_divider; + + (mc68kcpu)->c_flag = (mc68kcpu)->x_flag = res; + res = MASK_OUT_ABOVE_8(res); + + *r_dst = MASK_OUT_BELOW_8(*r_dst) | res; + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_roxl_16_s(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &DY(mc68kcpu); + uint32_t shift = ((((mc68kcpu)->ir >> 9) - 1) & 7) + 1; + uint32_t src = MASK_OUT_ABOVE_16(*r_dst); + uint32_t res = ROL_17(src | (XFLAG_AS_1(mc68kcpu) << 16), shift); + + if(shift != 0) + (mc68kcpu)->c.current_cycle += (shift<<(mc68kcpu)->cyc_shift) * (mc68kcpu)->c.options->gen.clock_divider; + + (mc68kcpu)->c_flag = (mc68kcpu)->x_flag = res >> 8; + res = MASK_OUT_ABOVE_16(res); + + *r_dst = MASK_OUT_BELOW_16(*r_dst) | res; + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_roxl_32_s(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &DY(mc68kcpu); + uint32_t shift = ((((mc68kcpu)->ir >> 9) - 1) & 7) + 1; + uint64_t src = *r_dst; + uint64_t res = src | (((uint64_t)XFLAG_AS_1(mc68kcpu)) << 32); + + if(shift != 0) + (mc68kcpu)->c.current_cycle += (shift<<(mc68kcpu)->cyc_shift) * (mc68kcpu)->c.options->gen.clock_divider; + + res = ROL_33_64(res, shift); + + (mc68kcpu)->c_flag = (mc68kcpu)->x_flag = res >> 24; + res = MASK_OUT_ABOVE_32(res); + + *r_dst = res; + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_roxl_8_r(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &DY(mc68kcpu); + uint32_t orig_shift = DX(mc68kcpu) & 0x3f; + + + if(orig_shift != 0) + { + uint32_t shift = orig_shift % 9; + uint32_t src = MASK_OUT_ABOVE_8(*r_dst); + uint32_t res = ROL_9(src | (XFLAG_AS_1(mc68kcpu) << 8), shift); + + (mc68kcpu)->c.current_cycle += (orig_shift<<(mc68kcpu)->cyc_shift) * (mc68kcpu)->c.options->gen.clock_divider; + + (mc68kcpu)->c_flag = (mc68kcpu)->x_flag = res; + res = MASK_OUT_ABOVE_8(res); + + *r_dst = MASK_OUT_BELOW_8(*r_dst) | res; + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + return; + } + + (mc68kcpu)->c_flag = (mc68kcpu)->x_flag; + (mc68kcpu)->n_flag = NFLAG_8(*r_dst); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(*r_dst); + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_roxl_16_r(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &DY(mc68kcpu); + uint32_t orig_shift = DX(mc68kcpu) & 0x3f; + + if(orig_shift != 0) + { + uint32_t shift = orig_shift % 17; + uint32_t src = MASK_OUT_ABOVE_16(*r_dst); + uint32_t res = ROL_17(src | (XFLAG_AS_1(mc68kcpu) << 16), shift); + + (mc68kcpu)->c.current_cycle += (orig_shift<<(mc68kcpu)->cyc_shift) * (mc68kcpu)->c.options->gen.clock_divider; + + (mc68kcpu)->c_flag = (mc68kcpu)->x_flag = res >> 8; + res = MASK_OUT_ABOVE_16(res); + + *r_dst = MASK_OUT_BELOW_16(*r_dst) | res; + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + return; + } + + (mc68kcpu)->c_flag = (mc68kcpu)->x_flag; + (mc68kcpu)->n_flag = NFLAG_16(*r_dst); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(*r_dst); + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_roxl_32_r(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &DY(mc68kcpu); + uint32_t orig_shift = DX(mc68kcpu) & 0x3f; + + if(orig_shift != 0) + { + uint32_t shift = orig_shift % 33; + uint64_t src = *r_dst; + uint64_t res = src | (((uint64_t)XFLAG_AS_1(mc68kcpu)) << 32); + + res = ROL_33_64(res, shift); + + (mc68kcpu)->c.current_cycle += (orig_shift<<(mc68kcpu)->cyc_shift) * (mc68kcpu)->c.options->gen.clock_divider; + + (mc68kcpu)->c_flag = (mc68kcpu)->x_flag = res >> 24; + res = MASK_OUT_ABOVE_32(res); + + *r_dst = res; + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + return; + } + + (mc68kcpu)->c_flag = (mc68kcpu)->x_flag; + (mc68kcpu)->n_flag = NFLAG_32(*r_dst); + (mc68kcpu)->not_z_flag = *r_dst; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_roxl_16_ai(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AY_AI_16(mc68kcpu); + uint32_t src = m68ki_read_16((mc68kcpu), ea); + uint32_t res = ROL_17(src | (XFLAG_AS_1(mc68kcpu) << 16), 1); + + (mc68kcpu)->c_flag = (mc68kcpu)->x_flag = res >> 8; + res = MASK_OUT_ABOVE_16(res); + + m68ki_write_16((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_roxl_16_pi(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AY_PI_16(mc68kcpu); + uint32_t src = m68ki_read_16((mc68kcpu), ea); + uint32_t res = ROL_17(src | (XFLAG_AS_1(mc68kcpu) << 16), 1); + + (mc68kcpu)->c_flag = (mc68kcpu)->x_flag = res >> 8; + res = MASK_OUT_ABOVE_16(res); + + m68ki_write_16((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_roxl_16_pd(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AY_PD_16(mc68kcpu); + uint32_t src = m68ki_read_16((mc68kcpu), ea); + uint32_t res = ROL_17(src | (XFLAG_AS_1(mc68kcpu) << 16), 1); + + (mc68kcpu)->c_flag = (mc68kcpu)->x_flag = res >> 8; + res = MASK_OUT_ABOVE_16(res); + + m68ki_write_16((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_roxl_16_di(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AY_DI_16(mc68kcpu); + uint32_t src = m68ki_read_16((mc68kcpu), ea); + uint32_t res = ROL_17(src | (XFLAG_AS_1(mc68kcpu) << 16), 1); + + (mc68kcpu)->c_flag = (mc68kcpu)->x_flag = res >> 8; + res = MASK_OUT_ABOVE_16(res); + + m68ki_write_16((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_roxl_16_ix(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AY_IX_16(mc68kcpu); + uint32_t src = m68ki_read_16((mc68kcpu), ea); + uint32_t res = ROL_17(src | (XFLAG_AS_1(mc68kcpu) << 16), 1); + + (mc68kcpu)->c_flag = (mc68kcpu)->x_flag = res >> 8; + res = MASK_OUT_ABOVE_16(res); + + m68ki_write_16((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_roxl_16_aw(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AW_16(mc68kcpu); + uint32_t src = m68ki_read_16((mc68kcpu), ea); + uint32_t res = ROL_17(src | (XFLAG_AS_1(mc68kcpu) << 16), 1); + + (mc68kcpu)->c_flag = (mc68kcpu)->x_flag = res >> 8; + res = MASK_OUT_ABOVE_16(res); + + m68ki_write_16((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_roxl_16_al(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AL_16(mc68kcpu); + uint32_t src = m68ki_read_16((mc68kcpu), ea); + uint32_t res = ROL_17(src | (XFLAG_AS_1(mc68kcpu) << 16), 1); + + (mc68kcpu)->c_flag = (mc68kcpu)->x_flag = res >> 8; + res = MASK_OUT_ABOVE_16(res); + + m68ki_write_16((mc68kcpu), ea, res); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_rtd_32(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_010_PLUS((mc68kcpu)->cpu_type)) + { + uint32_t new_pc = m68ki_pull_32(mc68kcpu); + + m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */ + REG_A(mc68kcpu)[7] = MASK_OUT_ABOVE_32(REG_A(mc68kcpu)[7] + MAKE_INT_16(OPER_I_16(mc68kcpu))); + m68ki_jump((mc68kcpu), new_pc); + return; + } + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_rte_32(m68000_base_device* mc68kcpu) +{ + if((mc68kcpu)->s_flag) + { + uint32_t new_sr; + uint32_t new_pc; + uint32_t format_word; + +/* if (!(mc68kcpu)->rte_instr_callback.isnull()) + ((mc68kcpu)->rte_instr_callback)(1);*/ + m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */ + + if(CPU_TYPE_IS_000((mc68kcpu)->cpu_type)) + { + new_sr = m68ki_pull_16(mc68kcpu); + new_pc = m68ki_pull_32(mc68kcpu); + m68ki_jump((mc68kcpu), new_pc); + m68ki_set_sr((mc68kcpu), new_sr); + + (mc68kcpu)->instr_mode = INSTRUCTION_YES; + (mc68kcpu)->run_mode = RUN_MODE_NORMAL; + + return; + } + + if(CPU_TYPE_IS_010((mc68kcpu)->cpu_type)) + { + format_word = m68ki_read_16((mc68kcpu), REG_A(mc68kcpu)[7]+6) >> 12; + if(format_word == 0) + { + new_sr = m68ki_pull_16(mc68kcpu); + new_pc = m68ki_pull_32(mc68kcpu); + m68ki_fake_pull_16(mc68kcpu); /* format word */ + m68ki_jump((mc68kcpu), new_pc); + m68ki_set_sr((mc68kcpu), new_sr); + (mc68kcpu)->instr_mode = INSTRUCTION_YES; + (mc68kcpu)->run_mode = RUN_MODE_NORMAL; + return; + } + (mc68kcpu)->instr_mode = INSTRUCTION_YES; + (mc68kcpu)->run_mode = RUN_MODE_NORMAL; + /* Not handling bus fault (9) */ + m68ki_exception_format_error(mc68kcpu); + return; + } + + /* Otherwise it's 020 */ +rte_loop: + format_word = m68ki_read_16((mc68kcpu), REG_A(mc68kcpu)[7]+6) >> 12; + switch(format_word) + { + case 0: /* Normal */ + new_sr = m68ki_pull_16(mc68kcpu); + new_pc = m68ki_pull_32(mc68kcpu); + m68ki_fake_pull_16(mc68kcpu); /* format word */ + m68ki_jump((mc68kcpu), new_pc); + m68ki_set_sr((mc68kcpu), new_sr); + (mc68kcpu)->instr_mode = INSTRUCTION_YES; + (mc68kcpu)->run_mode = RUN_MODE_NORMAL; + return; + case 1: /* Throwaway */ + new_sr = m68ki_pull_16(mc68kcpu); + m68ki_fake_pull_32(mc68kcpu); /* program counter */ + m68ki_fake_pull_16(mc68kcpu); /* format word */ + m68ki_set_sr_noint((mc68kcpu), new_sr); + goto rte_loop; + case 2: /* Trap */ + new_sr = m68ki_pull_16(mc68kcpu); + new_pc = m68ki_pull_32(mc68kcpu); + m68ki_fake_pull_16(mc68kcpu); /* format word */ + m68ki_fake_pull_32(mc68kcpu); /* address */ + m68ki_jump((mc68kcpu), new_pc); + m68ki_set_sr((mc68kcpu), new_sr); + (mc68kcpu)->instr_mode = INSTRUCTION_YES; + (mc68kcpu)->run_mode = RUN_MODE_NORMAL; + return; + case 7: /* 68040 access error */ + new_sr = m68ki_pull_16(mc68kcpu); + new_pc = m68ki_pull_32(mc68kcpu); + m68ki_fake_pull_16(mc68kcpu); /* $06: format word */ + m68ki_fake_pull_32(mc68kcpu); /* $08: effective address */ + m68ki_fake_pull_16(mc68kcpu); /* $0c: special status word */ + m68ki_fake_pull_16(mc68kcpu); /* $0e: wb3s */ + m68ki_fake_pull_16(mc68kcpu); /* $10: wb2s */ + m68ki_fake_pull_16(mc68kcpu); /* $12: wb1s */ + m68ki_fake_pull_32(mc68kcpu); /* $14: data fault address */ + m68ki_fake_pull_32(mc68kcpu); /* $18: wb3a */ + m68ki_fake_pull_32(mc68kcpu); /* $1c: wb3d */ + m68ki_fake_pull_32(mc68kcpu); /* $20: wb2a */ + m68ki_fake_pull_32(mc68kcpu); /* $24: wb2d */ + m68ki_fake_pull_32(mc68kcpu); /* $28: wb1a */ + m68ki_fake_pull_32(mc68kcpu); /* $2c: wb1d/pd0 */ + m68ki_fake_pull_32(mc68kcpu); /* $30: pd1 */ + m68ki_fake_pull_32(mc68kcpu); /* $34: pd2 */ + m68ki_fake_pull_32(mc68kcpu); /* $38: pd3 */ + m68ki_jump((mc68kcpu), new_pc); + m68ki_set_sr((mc68kcpu), new_sr); + (mc68kcpu)->instr_mode = INSTRUCTION_YES; + (mc68kcpu)->run_mode = RUN_MODE_NORMAL; + return; + + case 0x0a: /* Bus Error at instruction boundary */ + new_sr = m68ki_pull_16(mc68kcpu); + new_pc = m68ki_pull_32(mc68kcpu); + m68ki_fake_pull_16(mc68kcpu); /* $06: format word */ + m68ki_fake_pull_16(mc68kcpu); /* $08: internal register */ + m68ki_fake_pull_16(mc68kcpu); /* $0a: special status word */ + m68ki_fake_pull_16(mc68kcpu); /* $0c: instruction pipe stage c */ + m68ki_fake_pull_16(mc68kcpu); /* $0e: instruction pipe stage b */ + m68ki_fake_pull_32(mc68kcpu); /* $10: data fault address */ + m68ki_fake_pull_32(mc68kcpu); /* $14: internal registers */ + m68ki_fake_pull_32(mc68kcpu); /* $18: data output buffer */ + m68ki_fake_pull_32(mc68kcpu); /* $1c: internal registers */ + + m68ki_jump((mc68kcpu), new_pc); + m68ki_set_sr((mc68kcpu), new_sr); + (mc68kcpu)->instr_mode = INSTRUCTION_YES; + (mc68kcpu)->run_mode = RUN_MODE_NORMAL; + return; + case 0x0b: /* Bus Error - Instruction Execution in Progress */ + new_sr = m68ki_pull_16(mc68kcpu); + new_pc = m68ki_pull_32(mc68kcpu); + m68ki_fake_pull_16(mc68kcpu); /* $06: format word */ + m68ki_fake_pull_16(mc68kcpu); /* $08: internal register */ + m68ki_fake_pull_16(mc68kcpu); /* $0a: special status word */ + m68ki_fake_pull_16(mc68kcpu); /* $0c: instruction pipe stage c */ + m68ki_fake_pull_16(mc68kcpu); /* $0e: instruction pipe stage b */ + m68ki_fake_pull_32(mc68kcpu); /* $10: data fault address */ + m68ki_fake_pull_32(mc68kcpu); /* $14: internal registers */ + m68ki_fake_pull_32(mc68kcpu); /* $18: data output buffer */ + m68ki_fake_pull_32(mc68kcpu); /* $1c: internal registers */ + m68ki_fake_pull_32(mc68kcpu); /* $20: */ + m68ki_fake_pull_32(mc68kcpu); /* $24: stage B address */ + m68ki_fake_pull_32(mc68kcpu); /* $28: */ + m68ki_fake_pull_32(mc68kcpu); /* $2c: data input buffer */ + m68ki_fake_pull_32(mc68kcpu); /* $30: */ + m68ki_fake_pull_16(mc68kcpu); /* $34: */ + m68ki_fake_pull_16(mc68kcpu); /* $36: version #, internal information */ + m68ki_fake_pull_32(mc68kcpu); /* $38: */ + m68ki_fake_pull_32(mc68kcpu); /* $3c: */ + m68ki_fake_pull_32(mc68kcpu); /* $40: */ + m68ki_fake_pull_32(mc68kcpu); /* $44: */ + m68ki_fake_pull_32(mc68kcpu); /* $48: */ + m68ki_fake_pull_32(mc68kcpu); /* $4c: */ + m68ki_fake_pull_32(mc68kcpu); /* $50: */ + m68ki_fake_pull_32(mc68kcpu); /* $54: */ + m68ki_fake_pull_32(mc68kcpu); /* $58: */ + + m68ki_jump((mc68kcpu), new_pc); + m68ki_set_sr((mc68kcpu), new_sr); + (mc68kcpu)->instr_mode = INSTRUCTION_YES; + (mc68kcpu)->run_mode = RUN_MODE_NORMAL; + return; + } + /* Not handling long or short bus fault */ + (mc68kcpu)->instr_mode = INSTRUCTION_YES; + (mc68kcpu)->run_mode = RUN_MODE_NORMAL; + m68ki_exception_format_error(mc68kcpu); + return; + } + m68ki_exception_privilege_violation(mc68kcpu); +} + + +static void m68k_op_rtm_32(m68000_base_device* mc68kcpu) +{ + /*if(CPU_TYPE_IS_020_VARIANT((mc68kcpu)->cpu_type)) + { + m68ki_trace_t0(mc68kcpu); + mc68kcpu->logerror("%s at %08x: called unimplemented instruction %04x (rtm)\n", + (mc68kcpu)->tag(), REG_PC(mc68kcpu) - 2, (mc68kcpu)->ir); + return; + }*/ + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_rtr_32(m68000_base_device* mc68kcpu) +{ + m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */ + m68ki_set_ccr((mc68kcpu), m68ki_pull_16(mc68kcpu)); + m68ki_jump((mc68kcpu), m68ki_pull_32(mc68kcpu)); +} + + +static void m68k_op_rts_32(m68000_base_device* mc68kcpu) +{ + m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */ + m68ki_jump((mc68kcpu), m68ki_pull_32(mc68kcpu)); +} + + +static void m68k_op_sbcd_8_rr(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &DX(mc68kcpu); + uint32_t src = DY(mc68kcpu); + uint32_t dst = *r_dst; + uint32_t res = LOW_NIBBLE(dst) - LOW_NIBBLE(src) - XFLAG_AS_1(mc68kcpu); + +// (mc68kcpu)->v_flag = ~res; /* Undefined V behavior */ + (mc68kcpu)->v_flag = VFLAG_CLEAR; /* Undefined in Motorola's M68000PM/AD rev.1 and safer to assume cleared. */ + + if(res > 9) + res -= 6; + res += HIGH_NIBBLE(dst) - HIGH_NIBBLE(src); + if(res > 0x99) + { + res += 0xa0; + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_SET; + (mc68kcpu)->n_flag = NFLAG_SET; /* Undefined in Motorola's M68000PM/AD rev.1 and safer to follow carry. */ + } + else + (mc68kcpu)->n_flag = (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = 0; + + res = MASK_OUT_ABOVE_8(res); + +// (mc68kcpu)->v_flag &= res; /* Undefined V behavior part II */ +// (mc68kcpu)->n_flag = NFLAG_8(res); /* Undefined N behavior */ + (mc68kcpu)->not_z_flag |= res; + + *r_dst = MASK_OUT_BELOW_8(*r_dst) | res; +} + + +static void m68k_op_sbcd_8_mm_ax7(m68000_base_device* mc68kcpu) +{ + uint32_t src = OPER_AY_PD_8(mc68kcpu); + uint32_t ea = EA_A7_PD_8(mc68kcpu); + uint32_t dst = m68ki_read_8((mc68kcpu), ea); + uint32_t res = LOW_NIBBLE(dst) - LOW_NIBBLE(src) - XFLAG_AS_1(mc68kcpu); + +// (mc68kcpu)->v_flag = ~res; /* Undefined V behavior */ + (mc68kcpu)->v_flag = VFLAG_CLEAR; /* Undefined in Motorola's M68000PM/AD rev.1 and safer to return zero. */ + + if(res > 9) + res -= 6; + res += HIGH_NIBBLE(dst) - HIGH_NIBBLE(src); + if(res > 0x99) + { + res += 0xa0; + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_SET; + (mc68kcpu)->n_flag = NFLAG_SET; /* Undefined in Motorola's M68000PM/AD rev.1 and safer to follow carry. */ + } + else + (mc68kcpu)->n_flag = (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = 0; + + res = MASK_OUT_ABOVE_8(res); + +// (mc68kcpu)->v_flag &= res; /* Undefined V behavior part II */ +// (mc68kcpu)->n_flag = NFLAG_8(res); /* Undefined N behavior */ + (mc68kcpu)->not_z_flag |= res; + + m68ki_write_8((mc68kcpu), ea, res); +} + + +static void m68k_op_sbcd_8_mm_ay7(m68000_base_device* mc68kcpu) +{ + uint32_t src = OPER_A7_PD_8(mc68kcpu); + uint32_t ea = EA_AX_PD_8(mc68kcpu); + uint32_t dst = m68ki_read_8((mc68kcpu), ea); + uint32_t res = LOW_NIBBLE(dst) - LOW_NIBBLE(src) - XFLAG_AS_1(mc68kcpu); + +// (mc68kcpu)->v_flag = ~res; /* Undefined V behavior */ + (mc68kcpu)->v_flag = VFLAG_CLEAR; /* Undefined in Motorola's M68000PM/AD rev.1 and safer to return zero. */ + + if(res > 9) + res -= 6; + res += HIGH_NIBBLE(dst) - HIGH_NIBBLE(src); + if(res > 0x99) + { + res += 0xa0; + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_SET; + (mc68kcpu)->n_flag = NFLAG_SET; /* Undefined in Motorola's M68000PM/AD rev.1 and safer to follow carry. */ + } + else + (mc68kcpu)->n_flag = (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = 0; + + res = MASK_OUT_ABOVE_8(res); + +// (mc68kcpu)->v_flag &= res; /* Undefined V behavior part II */ +// (mc68kcpu)->n_flag = NFLAG_8(res); /* Undefined N behavior */ + (mc68kcpu)->not_z_flag |= res; + + m68ki_write_8((mc68kcpu), ea, res); +} + + +static void m68k_op_sbcd_8_mm_axy7(m68000_base_device* mc68kcpu) +{ + uint32_t src = OPER_A7_PD_8(mc68kcpu); + uint32_t ea = EA_A7_PD_8(mc68kcpu); + uint32_t dst = m68ki_read_8((mc68kcpu), ea); + uint32_t res = LOW_NIBBLE(dst) - LOW_NIBBLE(src) - XFLAG_AS_1(mc68kcpu); + +// (mc68kcpu)->v_flag = ~res; /* Undefined V behavior */ + (mc68kcpu)->v_flag = VFLAG_CLEAR; /* Undefined in Motorola's M68000PM/AD rev.1 and safer to return zero. */ + + if(res > 9) + res -= 6; + res += HIGH_NIBBLE(dst) - HIGH_NIBBLE(src); + if(res > 0x99) + { + res += 0xa0; + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_SET; + (mc68kcpu)->n_flag = NFLAG_SET; /* Undefined in Motorola's M68000PM/AD rev.1 and safer to follow carry. */ + } + else + (mc68kcpu)->n_flag = (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = 0; + + res = MASK_OUT_ABOVE_8(res); + +// (mc68kcpu)->v_flag &= res; /* Undefined V behavior part II */ +// (mc68kcpu)->n_flag = NFLAG_8(res); /* Undefined N behavior */ + (mc68kcpu)->not_z_flag |= res; + + m68ki_write_8((mc68kcpu), ea, res); +} + + +static void m68k_op_sbcd_8_mm(m68000_base_device* mc68kcpu) +{ + uint32_t src = OPER_AY_PD_8(mc68kcpu); + uint32_t ea = EA_AX_PD_8(mc68kcpu); + uint32_t dst = m68ki_read_8((mc68kcpu), ea); + uint32_t res = LOW_NIBBLE(dst) - LOW_NIBBLE(src) - XFLAG_AS_1(mc68kcpu); + +// (mc68kcpu)->v_flag = ~res; /* Undefined V behavior */ + (mc68kcpu)->v_flag = VFLAG_CLEAR; /* Undefined in Motorola's M68000PM/AD rev.1 and safer to return zero. */ + + if(res > 9) + res -= 6; + res += HIGH_NIBBLE(dst) - HIGH_NIBBLE(src); + if(res > 0x99) + { + res += 0xa0; + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_SET; + (mc68kcpu)->n_flag = NFLAG_SET; /* Undefined in Motorola's M68000PM/AD rev.1 and safer to follow carry. */ + } + else + (mc68kcpu)->n_flag = (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = 0; + + res = MASK_OUT_ABOVE_8(res); + +// (mc68kcpu)->v_flag &= res; /* Undefined V behavior part II */ +// (mc68kcpu)->n_flag = NFLAG_8(res); /* Undefined N behavior */ + (mc68kcpu)->not_z_flag |= res; + + m68ki_write_8((mc68kcpu), ea, res); +} + + +static void m68k_op_st_8_d(m68000_base_device* mc68kcpu) +{ + DY(mc68kcpu) |= 0xff; +} + + +static void m68k_op_st_8_ai(m68000_base_device* mc68kcpu) +{ + m68ki_write_8((mc68kcpu), EA_AY_AI_8(mc68kcpu), 0xff); +} + + +static void m68k_op_st_8_pi(m68000_base_device* mc68kcpu) +{ + m68ki_write_8((mc68kcpu), EA_AY_PI_8(mc68kcpu), 0xff); +} + + +static void m68k_op_st_8_pi7(m68000_base_device* mc68kcpu) +{ + m68ki_write_8((mc68kcpu), EA_A7_PI_8(mc68kcpu), 0xff); +} + + +static void m68k_op_st_8_pd(m68000_base_device* mc68kcpu) +{ + m68ki_write_8((mc68kcpu), EA_AY_PD_8(mc68kcpu), 0xff); +} + + +static void m68k_op_st_8_pd7(m68000_base_device* mc68kcpu) +{ + m68ki_write_8((mc68kcpu), EA_A7_PD_8(mc68kcpu), 0xff); +} + + +static void m68k_op_st_8_di(m68000_base_device* mc68kcpu) +{ + m68ki_write_8((mc68kcpu), EA_AY_DI_8(mc68kcpu), 0xff); +} + + +static void m68k_op_st_8_ix(m68000_base_device* mc68kcpu) +{ + m68ki_write_8((mc68kcpu), EA_AY_IX_8(mc68kcpu), 0xff); +} + + +static void m68k_op_st_8_aw(m68000_base_device* mc68kcpu) +{ + m68ki_write_8((mc68kcpu), EA_AW_8(mc68kcpu), 0xff); +} + + +static void m68k_op_st_8_al(m68000_base_device* mc68kcpu) +{ + m68ki_write_8((mc68kcpu), EA_AL_8(mc68kcpu), 0xff); +} + + +static void m68k_op_sf_8_d(m68000_base_device* mc68kcpu) +{ + DY(mc68kcpu) &= 0xffffff00; +} + + +static void m68k_op_sf_8_ai(m68000_base_device* mc68kcpu) +{ + m68ki_write_8((mc68kcpu), EA_AY_AI_8(mc68kcpu), 0); +} + + +static void m68k_op_sf_8_pi(m68000_base_device* mc68kcpu) +{ + m68ki_write_8((mc68kcpu), EA_AY_PI_8(mc68kcpu), 0); +} + + +static void m68k_op_sf_8_pi7(m68000_base_device* mc68kcpu) +{ + m68ki_write_8((mc68kcpu), EA_A7_PI_8(mc68kcpu), 0); +} + + +static void m68k_op_sf_8_pd(m68000_base_device* mc68kcpu) +{ + m68ki_write_8((mc68kcpu), EA_AY_PD_8(mc68kcpu), 0); +} + + +static void m68k_op_sf_8_pd7(m68000_base_device* mc68kcpu) +{ + m68ki_write_8((mc68kcpu), EA_A7_PD_8(mc68kcpu), 0); +} + + +static void m68k_op_sf_8_di(m68000_base_device* mc68kcpu) +{ + m68ki_write_8((mc68kcpu), EA_AY_DI_8(mc68kcpu), 0); +} + + +static void m68k_op_sf_8_ix(m68000_base_device* mc68kcpu) +{ + m68ki_write_8((mc68kcpu), EA_AY_IX_8(mc68kcpu), 0); +} + + +static void m68k_op_sf_8_aw(m68000_base_device* mc68kcpu) +{ + m68ki_write_8((mc68kcpu), EA_AW_8(mc68kcpu), 0); +} + + +static void m68k_op_sf_8_al(m68000_base_device* mc68kcpu) +{ + m68ki_write_8((mc68kcpu), EA_AL_8(mc68kcpu), 0); +} + + +static void m68k_op_shi_8_d(m68000_base_device* mc68kcpu) +{ + if(COND_HI(mc68kcpu)) + { + DY(mc68kcpu) |= 0xff; + (mc68kcpu)->c.current_cycle += (mc68kcpu)->cyc_scc_r_true; + return; + } + DY(mc68kcpu) &= 0xffffff00; +} + + +static void m68k_op_sls_8_d(m68000_base_device* mc68kcpu) +{ + if(COND_LS(mc68kcpu)) + { + DY(mc68kcpu) |= 0xff; + (mc68kcpu)->c.current_cycle += (mc68kcpu)->cyc_scc_r_true; + return; + } + DY(mc68kcpu) &= 0xffffff00; +} + + +static void m68k_op_scc_8_d(m68000_base_device* mc68kcpu) +{ + if(COND_CC(mc68kcpu)) + { + DY(mc68kcpu) |= 0xff; + (mc68kcpu)->c.current_cycle += (mc68kcpu)->cyc_scc_r_true; + return; + } + DY(mc68kcpu) &= 0xffffff00; +} + + +static void m68k_op_scs_8_d(m68000_base_device* mc68kcpu) +{ + if(COND_CS(mc68kcpu)) + { + DY(mc68kcpu) |= 0xff; + (mc68kcpu)->c.current_cycle += (mc68kcpu)->cyc_scc_r_true; + return; + } + DY(mc68kcpu) &= 0xffffff00; +} + + +static void m68k_op_sne_8_d(m68000_base_device* mc68kcpu) +{ + if(COND_NE(mc68kcpu)) + { + DY(mc68kcpu) |= 0xff; + (mc68kcpu)->c.current_cycle += (mc68kcpu)->cyc_scc_r_true; + return; + } + DY(mc68kcpu) &= 0xffffff00; +} + + +static void m68k_op_seq_8_d(m68000_base_device* mc68kcpu) +{ + if(COND_EQ(mc68kcpu)) + { + DY(mc68kcpu) |= 0xff; + (mc68kcpu)->c.current_cycle += (mc68kcpu)->cyc_scc_r_true; + return; + } + DY(mc68kcpu) &= 0xffffff00; +} + + +static void m68k_op_svc_8_d(m68000_base_device* mc68kcpu) +{ + if(COND_VC(mc68kcpu)) + { + DY(mc68kcpu) |= 0xff; + (mc68kcpu)->c.current_cycle += (mc68kcpu)->cyc_scc_r_true; + return; + } + DY(mc68kcpu) &= 0xffffff00; +} + + +static void m68k_op_svs_8_d(m68000_base_device* mc68kcpu) +{ + if(COND_VS(mc68kcpu)) + { + DY(mc68kcpu) |= 0xff; + (mc68kcpu)->c.current_cycle += (mc68kcpu)->cyc_scc_r_true; + return; + } + DY(mc68kcpu) &= 0xffffff00; +} + + +static void m68k_op_spl_8_d(m68000_base_device* mc68kcpu) +{ + if(COND_PL(mc68kcpu)) + { + DY(mc68kcpu) |= 0xff; + (mc68kcpu)->c.current_cycle += (mc68kcpu)->cyc_scc_r_true; + return; + } + DY(mc68kcpu) &= 0xffffff00; +} + + +static void m68k_op_smi_8_d(m68000_base_device* mc68kcpu) +{ + if(COND_MI(mc68kcpu)) + { + DY(mc68kcpu) |= 0xff; + (mc68kcpu)->c.current_cycle += (mc68kcpu)->cyc_scc_r_true; + return; + } + DY(mc68kcpu) &= 0xffffff00; +} + + +static void m68k_op_sge_8_d(m68000_base_device* mc68kcpu) +{ + if(COND_GE(mc68kcpu)) + { + DY(mc68kcpu) |= 0xff; + (mc68kcpu)->c.current_cycle += (mc68kcpu)->cyc_scc_r_true; + return; + } + DY(mc68kcpu) &= 0xffffff00; +} + + +static void m68k_op_slt_8_d(m68000_base_device* mc68kcpu) +{ + if(COND_LT(mc68kcpu)) + { + DY(mc68kcpu) |= 0xff; + (mc68kcpu)->c.current_cycle += (mc68kcpu)->cyc_scc_r_true; + return; + } + DY(mc68kcpu) &= 0xffffff00; +} + + +static void m68k_op_sgt_8_d(m68000_base_device* mc68kcpu) +{ + if(COND_GT(mc68kcpu)) + { + DY(mc68kcpu) |= 0xff; + (mc68kcpu)->c.current_cycle += (mc68kcpu)->cyc_scc_r_true; + return; + } + DY(mc68kcpu) &= 0xffffff00; +} + + +static void m68k_op_sle_8_d(m68000_base_device* mc68kcpu) +{ + if(COND_LE(mc68kcpu)) + { + DY(mc68kcpu) |= 0xff; + (mc68kcpu)->c.current_cycle += (mc68kcpu)->cyc_scc_r_true; + return; + } + DY(mc68kcpu) &= 0xffffff00; +} + + +static void m68k_op_shi_8_ai(m68000_base_device* mc68kcpu) +{ + m68ki_write_8((mc68kcpu), EA_AY_AI_8(mc68kcpu), COND_HI(mc68kcpu) ? 0xff : 0); +} + + +static void m68k_op_shi_8_pi(m68000_base_device* mc68kcpu) +{ + m68ki_write_8((mc68kcpu), EA_AY_PI_8(mc68kcpu), COND_HI(mc68kcpu) ? 0xff : 0); +} + + +static void m68k_op_shi_8_pi7(m68000_base_device* mc68kcpu) +{ + m68ki_write_8((mc68kcpu), EA_A7_PI_8(mc68kcpu), COND_HI(mc68kcpu) ? 0xff : 0); +} + + +static void m68k_op_shi_8_pd(m68000_base_device* mc68kcpu) +{ + m68ki_write_8((mc68kcpu), EA_AY_PD_8(mc68kcpu), COND_HI(mc68kcpu) ? 0xff : 0); +} + + +static void m68k_op_shi_8_pd7(m68000_base_device* mc68kcpu) +{ + m68ki_write_8((mc68kcpu), EA_A7_PD_8(mc68kcpu), COND_HI(mc68kcpu) ? 0xff : 0); +} + + +static void m68k_op_shi_8_di(m68000_base_device* mc68kcpu) +{ + m68ki_write_8((mc68kcpu), EA_AY_DI_8(mc68kcpu), COND_HI(mc68kcpu) ? 0xff : 0); +} + + +static void m68k_op_shi_8_ix(m68000_base_device* mc68kcpu) +{ + m68ki_write_8((mc68kcpu), EA_AY_IX_8(mc68kcpu), COND_HI(mc68kcpu) ? 0xff : 0); +} + + +static void m68k_op_shi_8_aw(m68000_base_device* mc68kcpu) +{ + m68ki_write_8((mc68kcpu), EA_AW_8(mc68kcpu), COND_HI(mc68kcpu) ? 0xff : 0); +} + + +static void m68k_op_shi_8_al(m68000_base_device* mc68kcpu) +{ + m68ki_write_8((mc68kcpu), EA_AL_8(mc68kcpu), COND_HI(mc68kcpu) ? 0xff : 0); +} + + +static void m68k_op_sls_8_ai(m68000_base_device* mc68kcpu) +{ + m68ki_write_8((mc68kcpu), EA_AY_AI_8(mc68kcpu), COND_LS(mc68kcpu) ? 0xff : 0); +} + + +static void m68k_op_sls_8_pi(m68000_base_device* mc68kcpu) +{ + m68ki_write_8((mc68kcpu), EA_AY_PI_8(mc68kcpu), COND_LS(mc68kcpu) ? 0xff : 0); +} + + +static void m68k_op_sls_8_pi7(m68000_base_device* mc68kcpu) +{ + m68ki_write_8((mc68kcpu), EA_A7_PI_8(mc68kcpu), COND_LS(mc68kcpu) ? 0xff : 0); +} + + +static void m68k_op_sls_8_pd(m68000_base_device* mc68kcpu) +{ + m68ki_write_8((mc68kcpu), EA_AY_PD_8(mc68kcpu), COND_LS(mc68kcpu) ? 0xff : 0); +} + + +static void m68k_op_sls_8_pd7(m68000_base_device* mc68kcpu) +{ + m68ki_write_8((mc68kcpu), EA_A7_PD_8(mc68kcpu), COND_LS(mc68kcpu) ? 0xff : 0); +} + + +static void m68k_op_sls_8_di(m68000_base_device* mc68kcpu) +{ + m68ki_write_8((mc68kcpu), EA_AY_DI_8(mc68kcpu), COND_LS(mc68kcpu) ? 0xff : 0); +} + + +static void m68k_op_sls_8_ix(m68000_base_device* mc68kcpu) +{ + m68ki_write_8((mc68kcpu), EA_AY_IX_8(mc68kcpu), COND_LS(mc68kcpu) ? 0xff : 0); +} + + +static void m68k_op_sls_8_aw(m68000_base_device* mc68kcpu) +{ + m68ki_write_8((mc68kcpu), EA_AW_8(mc68kcpu), COND_LS(mc68kcpu) ? 0xff : 0); +} + + +static void m68k_op_sls_8_al(m68000_base_device* mc68kcpu) +{ + m68ki_write_8((mc68kcpu), EA_AL_8(mc68kcpu), COND_LS(mc68kcpu) ? 0xff : 0); +} + + +static void m68k_op_scc_8_ai(m68000_base_device* mc68kcpu) +{ + m68ki_write_8((mc68kcpu), EA_AY_AI_8(mc68kcpu), COND_CC(mc68kcpu) ? 0xff : 0); +} + + +static void m68k_op_scc_8_pi(m68000_base_device* mc68kcpu) +{ + m68ki_write_8((mc68kcpu), EA_AY_PI_8(mc68kcpu), COND_CC(mc68kcpu) ? 0xff : 0); +} + + +static void m68k_op_scc_8_pi7(m68000_base_device* mc68kcpu) +{ + m68ki_write_8((mc68kcpu), EA_A7_PI_8(mc68kcpu), COND_CC(mc68kcpu) ? 0xff : 0); +} + + +static void m68k_op_scc_8_pd(m68000_base_device* mc68kcpu) +{ + m68ki_write_8((mc68kcpu), EA_AY_PD_8(mc68kcpu), COND_CC(mc68kcpu) ? 0xff : 0); +} + + +static void m68k_op_scc_8_pd7(m68000_base_device* mc68kcpu) +{ + m68ki_write_8((mc68kcpu), EA_A7_PD_8(mc68kcpu), COND_CC(mc68kcpu) ? 0xff : 0); +} + + +static void m68k_op_scc_8_di(m68000_base_device* mc68kcpu) +{ + m68ki_write_8((mc68kcpu), EA_AY_DI_8(mc68kcpu), COND_CC(mc68kcpu) ? 0xff : 0); +} + + +static void m68k_op_scc_8_ix(m68000_base_device* mc68kcpu) +{ + m68ki_write_8((mc68kcpu), EA_AY_IX_8(mc68kcpu), COND_CC(mc68kcpu) ? 0xff : 0); +} + + +static void m68k_op_scc_8_aw(m68000_base_device* mc68kcpu) +{ + m68ki_write_8((mc68kcpu), EA_AW_8(mc68kcpu), COND_CC(mc68kcpu) ? 0xff : 0); +} + + +static void m68k_op_scc_8_al(m68000_base_device* mc68kcpu) +{ + m68ki_write_8((mc68kcpu), EA_AL_8(mc68kcpu), COND_CC(mc68kcpu) ? 0xff : 0); +} + + +static void m68k_op_scs_8_ai(m68000_base_device* mc68kcpu) +{ + m68ki_write_8((mc68kcpu), EA_AY_AI_8(mc68kcpu), COND_CS(mc68kcpu) ? 0xff : 0); +} + + +static void m68k_op_scs_8_pi(m68000_base_device* mc68kcpu) +{ + m68ki_write_8((mc68kcpu), EA_AY_PI_8(mc68kcpu), COND_CS(mc68kcpu) ? 0xff : 0); +} + + +static void m68k_op_scs_8_pi7(m68000_base_device* mc68kcpu) +{ + m68ki_write_8((mc68kcpu), EA_A7_PI_8(mc68kcpu), COND_CS(mc68kcpu) ? 0xff : 0); +} + + +static void m68k_op_scs_8_pd(m68000_base_device* mc68kcpu) +{ + m68ki_write_8((mc68kcpu), EA_AY_PD_8(mc68kcpu), COND_CS(mc68kcpu) ? 0xff : 0); +} + + +static void m68k_op_scs_8_pd7(m68000_base_device* mc68kcpu) +{ + m68ki_write_8((mc68kcpu), EA_A7_PD_8(mc68kcpu), COND_CS(mc68kcpu) ? 0xff : 0); +} + + +static void m68k_op_scs_8_di(m68000_base_device* mc68kcpu) +{ + m68ki_write_8((mc68kcpu), EA_AY_DI_8(mc68kcpu), COND_CS(mc68kcpu) ? 0xff : 0); +} + + +static void m68k_op_scs_8_ix(m68000_base_device* mc68kcpu) +{ + m68ki_write_8((mc68kcpu), EA_AY_IX_8(mc68kcpu), COND_CS(mc68kcpu) ? 0xff : 0); +} + + +static void m68k_op_scs_8_aw(m68000_base_device* mc68kcpu) +{ + m68ki_write_8((mc68kcpu), EA_AW_8(mc68kcpu), COND_CS(mc68kcpu) ? 0xff : 0); +} + + +static void m68k_op_scs_8_al(m68000_base_device* mc68kcpu) +{ + m68ki_write_8((mc68kcpu), EA_AL_8(mc68kcpu), COND_CS(mc68kcpu) ? 0xff : 0); +} + + +static void m68k_op_sne_8_ai(m68000_base_device* mc68kcpu) +{ + m68ki_write_8((mc68kcpu), EA_AY_AI_8(mc68kcpu), COND_NE(mc68kcpu) ? 0xff : 0); +} + + +static void m68k_op_sne_8_pi(m68000_base_device* mc68kcpu) +{ + m68ki_write_8((mc68kcpu), EA_AY_PI_8(mc68kcpu), COND_NE(mc68kcpu) ? 0xff : 0); +} + + +static void m68k_op_sne_8_pi7(m68000_base_device* mc68kcpu) +{ + m68ki_write_8((mc68kcpu), EA_A7_PI_8(mc68kcpu), COND_NE(mc68kcpu) ? 0xff : 0); +} + + +static void m68k_op_sne_8_pd(m68000_base_device* mc68kcpu) +{ + m68ki_write_8((mc68kcpu), EA_AY_PD_8(mc68kcpu), COND_NE(mc68kcpu) ? 0xff : 0); +} + + +static void m68k_op_sne_8_pd7(m68000_base_device* mc68kcpu) +{ + m68ki_write_8((mc68kcpu), EA_A7_PD_8(mc68kcpu), COND_NE(mc68kcpu) ? 0xff : 0); +} + + +static void m68k_op_sne_8_di(m68000_base_device* mc68kcpu) +{ + m68ki_write_8((mc68kcpu), EA_AY_DI_8(mc68kcpu), COND_NE(mc68kcpu) ? 0xff : 0); +} + + +static void m68k_op_sne_8_ix(m68000_base_device* mc68kcpu) +{ + m68ki_write_8((mc68kcpu), EA_AY_IX_8(mc68kcpu), COND_NE(mc68kcpu) ? 0xff : 0); +} + + +static void m68k_op_sne_8_aw(m68000_base_device* mc68kcpu) +{ + m68ki_write_8((mc68kcpu), EA_AW_8(mc68kcpu), COND_NE(mc68kcpu) ? 0xff : 0); +} + + +static void m68k_op_sne_8_al(m68000_base_device* mc68kcpu) +{ + m68ki_write_8((mc68kcpu), EA_AL_8(mc68kcpu), COND_NE(mc68kcpu) ? 0xff : 0); +} + + +static void m68k_op_seq_8_ai(m68000_base_device* mc68kcpu) +{ + m68ki_write_8((mc68kcpu), EA_AY_AI_8(mc68kcpu), COND_EQ(mc68kcpu) ? 0xff : 0); +} + + +static void m68k_op_seq_8_pi(m68000_base_device* mc68kcpu) +{ + m68ki_write_8((mc68kcpu), EA_AY_PI_8(mc68kcpu), COND_EQ(mc68kcpu) ? 0xff : 0); +} + + +static void m68k_op_seq_8_pi7(m68000_base_device* mc68kcpu) +{ + m68ki_write_8((mc68kcpu), EA_A7_PI_8(mc68kcpu), COND_EQ(mc68kcpu) ? 0xff : 0); +} + + +static void m68k_op_seq_8_pd(m68000_base_device* mc68kcpu) +{ + m68ki_write_8((mc68kcpu), EA_AY_PD_8(mc68kcpu), COND_EQ(mc68kcpu) ? 0xff : 0); +} + + +static void m68k_op_seq_8_pd7(m68000_base_device* mc68kcpu) +{ + m68ki_write_8((mc68kcpu), EA_A7_PD_8(mc68kcpu), COND_EQ(mc68kcpu) ? 0xff : 0); +} + + +static void m68k_op_seq_8_di(m68000_base_device* mc68kcpu) +{ + m68ki_write_8((mc68kcpu), EA_AY_DI_8(mc68kcpu), COND_EQ(mc68kcpu) ? 0xff : 0); +} + + +static void m68k_op_seq_8_ix(m68000_base_device* mc68kcpu) +{ + m68ki_write_8((mc68kcpu), EA_AY_IX_8(mc68kcpu), COND_EQ(mc68kcpu) ? 0xff : 0); +} + + +static void m68k_op_seq_8_aw(m68000_base_device* mc68kcpu) +{ + m68ki_write_8((mc68kcpu), EA_AW_8(mc68kcpu), COND_EQ(mc68kcpu) ? 0xff : 0); +} + + +static void m68k_op_seq_8_al(m68000_base_device* mc68kcpu) +{ + m68ki_write_8((mc68kcpu), EA_AL_8(mc68kcpu), COND_EQ(mc68kcpu) ? 0xff : 0); +} + + +static void m68k_op_svc_8_ai(m68000_base_device* mc68kcpu) +{ + m68ki_write_8((mc68kcpu), EA_AY_AI_8(mc68kcpu), COND_VC(mc68kcpu) ? 0xff : 0); +} + + +static void m68k_op_svc_8_pi(m68000_base_device* mc68kcpu) +{ + m68ki_write_8((mc68kcpu), EA_AY_PI_8(mc68kcpu), COND_VC(mc68kcpu) ? 0xff : 0); +} + + +static void m68k_op_svc_8_pi7(m68000_base_device* mc68kcpu) +{ + m68ki_write_8((mc68kcpu), EA_A7_PI_8(mc68kcpu), COND_VC(mc68kcpu) ? 0xff : 0); +} + + +static void m68k_op_svc_8_pd(m68000_base_device* mc68kcpu) +{ + m68ki_write_8((mc68kcpu), EA_AY_PD_8(mc68kcpu), COND_VC(mc68kcpu) ? 0xff : 0); +} + + +static void m68k_op_svc_8_pd7(m68000_base_device* mc68kcpu) +{ + m68ki_write_8((mc68kcpu), EA_A7_PD_8(mc68kcpu), COND_VC(mc68kcpu) ? 0xff : 0); +} + + +static void m68k_op_svc_8_di(m68000_base_device* mc68kcpu) +{ + m68ki_write_8((mc68kcpu), EA_AY_DI_8(mc68kcpu), COND_VC(mc68kcpu) ? 0xff : 0); +} + + +static void m68k_op_svc_8_ix(m68000_base_device* mc68kcpu) +{ + m68ki_write_8((mc68kcpu), EA_AY_IX_8(mc68kcpu), COND_VC(mc68kcpu) ? 0xff : 0); +} + + +static void m68k_op_svc_8_aw(m68000_base_device* mc68kcpu) +{ + m68ki_write_8((mc68kcpu), EA_AW_8(mc68kcpu), COND_VC(mc68kcpu) ? 0xff : 0); +} + + +static void m68k_op_svc_8_al(m68000_base_device* mc68kcpu) +{ + m68ki_write_8((mc68kcpu), EA_AL_8(mc68kcpu), COND_VC(mc68kcpu) ? 0xff : 0); +} + + +static void m68k_op_svs_8_ai(m68000_base_device* mc68kcpu) +{ + m68ki_write_8((mc68kcpu), EA_AY_AI_8(mc68kcpu), COND_VS(mc68kcpu) ? 0xff : 0); +} + + +static void m68k_op_svs_8_pi(m68000_base_device* mc68kcpu) +{ + m68ki_write_8((mc68kcpu), EA_AY_PI_8(mc68kcpu), COND_VS(mc68kcpu) ? 0xff : 0); +} + + +static void m68k_op_svs_8_pi7(m68000_base_device* mc68kcpu) +{ + m68ki_write_8((mc68kcpu), EA_A7_PI_8(mc68kcpu), COND_VS(mc68kcpu) ? 0xff : 0); +} + + +static void m68k_op_svs_8_pd(m68000_base_device* mc68kcpu) +{ + m68ki_write_8((mc68kcpu), EA_AY_PD_8(mc68kcpu), COND_VS(mc68kcpu) ? 0xff : 0); +} + + +static void m68k_op_svs_8_pd7(m68000_base_device* mc68kcpu) +{ + m68ki_write_8((mc68kcpu), EA_A7_PD_8(mc68kcpu), COND_VS(mc68kcpu) ? 0xff : 0); +} + + +static void m68k_op_svs_8_di(m68000_base_device* mc68kcpu) +{ + m68ki_write_8((mc68kcpu), EA_AY_DI_8(mc68kcpu), COND_VS(mc68kcpu) ? 0xff : 0); +} + + +static void m68k_op_svs_8_ix(m68000_base_device* mc68kcpu) +{ + m68ki_write_8((mc68kcpu), EA_AY_IX_8(mc68kcpu), COND_VS(mc68kcpu) ? 0xff : 0); +} + + +static void m68k_op_svs_8_aw(m68000_base_device* mc68kcpu) +{ + m68ki_write_8((mc68kcpu), EA_AW_8(mc68kcpu), COND_VS(mc68kcpu) ? 0xff : 0); +} + + +static void m68k_op_svs_8_al(m68000_base_device* mc68kcpu) +{ + m68ki_write_8((mc68kcpu), EA_AL_8(mc68kcpu), COND_VS(mc68kcpu) ? 0xff : 0); +} + + +static void m68k_op_spl_8_ai(m68000_base_device* mc68kcpu) +{ + m68ki_write_8((mc68kcpu), EA_AY_AI_8(mc68kcpu), COND_PL(mc68kcpu) ? 0xff : 0); +} + + +static void m68k_op_spl_8_pi(m68000_base_device* mc68kcpu) +{ + m68ki_write_8((mc68kcpu), EA_AY_PI_8(mc68kcpu), COND_PL(mc68kcpu) ? 0xff : 0); +} + + +static void m68k_op_spl_8_pi7(m68000_base_device* mc68kcpu) +{ + m68ki_write_8((mc68kcpu), EA_A7_PI_8(mc68kcpu), COND_PL(mc68kcpu) ? 0xff : 0); +} + + +static void m68k_op_spl_8_pd(m68000_base_device* mc68kcpu) +{ + m68ki_write_8((mc68kcpu), EA_AY_PD_8(mc68kcpu), COND_PL(mc68kcpu) ? 0xff : 0); +} + + +static void m68k_op_spl_8_pd7(m68000_base_device* mc68kcpu) +{ + m68ki_write_8((mc68kcpu), EA_A7_PD_8(mc68kcpu), COND_PL(mc68kcpu) ? 0xff : 0); +} + + +static void m68k_op_spl_8_di(m68000_base_device* mc68kcpu) +{ + m68ki_write_8((mc68kcpu), EA_AY_DI_8(mc68kcpu), COND_PL(mc68kcpu) ? 0xff : 0); +} + + +static void m68k_op_spl_8_ix(m68000_base_device* mc68kcpu) +{ + m68ki_write_8((mc68kcpu), EA_AY_IX_8(mc68kcpu), COND_PL(mc68kcpu) ? 0xff : 0); +} + + +static void m68k_op_spl_8_aw(m68000_base_device* mc68kcpu) +{ + m68ki_write_8((mc68kcpu), EA_AW_8(mc68kcpu), COND_PL(mc68kcpu) ? 0xff : 0); +} + + +static void m68k_op_spl_8_al(m68000_base_device* mc68kcpu) +{ + m68ki_write_8((mc68kcpu), EA_AL_8(mc68kcpu), COND_PL(mc68kcpu) ? 0xff : 0); +} + + +static void m68k_op_smi_8_ai(m68000_base_device* mc68kcpu) +{ + m68ki_write_8((mc68kcpu), EA_AY_AI_8(mc68kcpu), COND_MI(mc68kcpu) ? 0xff : 0); +} + + +static void m68k_op_smi_8_pi(m68000_base_device* mc68kcpu) +{ + m68ki_write_8((mc68kcpu), EA_AY_PI_8(mc68kcpu), COND_MI(mc68kcpu) ? 0xff : 0); +} + + +static void m68k_op_smi_8_pi7(m68000_base_device* mc68kcpu) +{ + m68ki_write_8((mc68kcpu), EA_A7_PI_8(mc68kcpu), COND_MI(mc68kcpu) ? 0xff : 0); +} + + +static void m68k_op_smi_8_pd(m68000_base_device* mc68kcpu) +{ + m68ki_write_8((mc68kcpu), EA_AY_PD_8(mc68kcpu), COND_MI(mc68kcpu) ? 0xff : 0); +} + + +static void m68k_op_smi_8_pd7(m68000_base_device* mc68kcpu) +{ + m68ki_write_8((mc68kcpu), EA_A7_PD_8(mc68kcpu), COND_MI(mc68kcpu) ? 0xff : 0); +} + + +static void m68k_op_smi_8_di(m68000_base_device* mc68kcpu) +{ + m68ki_write_8((mc68kcpu), EA_AY_DI_8(mc68kcpu), COND_MI(mc68kcpu) ? 0xff : 0); +} + + +static void m68k_op_smi_8_ix(m68000_base_device* mc68kcpu) +{ + m68ki_write_8((mc68kcpu), EA_AY_IX_8(mc68kcpu), COND_MI(mc68kcpu) ? 0xff : 0); +} + + +static void m68k_op_smi_8_aw(m68000_base_device* mc68kcpu) +{ + m68ki_write_8((mc68kcpu), EA_AW_8(mc68kcpu), COND_MI(mc68kcpu) ? 0xff : 0); +} + + +static void m68k_op_smi_8_al(m68000_base_device* mc68kcpu) +{ + m68ki_write_8((mc68kcpu), EA_AL_8(mc68kcpu), COND_MI(mc68kcpu) ? 0xff : 0); +} + + +static void m68k_op_sge_8_ai(m68000_base_device* mc68kcpu) +{ + m68ki_write_8((mc68kcpu), EA_AY_AI_8(mc68kcpu), COND_GE(mc68kcpu) ? 0xff : 0); +} + + +static void m68k_op_sge_8_pi(m68000_base_device* mc68kcpu) +{ + m68ki_write_8((mc68kcpu), EA_AY_PI_8(mc68kcpu), COND_GE(mc68kcpu) ? 0xff : 0); +} + + +static void m68k_op_sge_8_pi7(m68000_base_device* mc68kcpu) +{ + m68ki_write_8((mc68kcpu), EA_A7_PI_8(mc68kcpu), COND_GE(mc68kcpu) ? 0xff : 0); +} + + +static void m68k_op_sge_8_pd(m68000_base_device* mc68kcpu) +{ + m68ki_write_8((mc68kcpu), EA_AY_PD_8(mc68kcpu), COND_GE(mc68kcpu) ? 0xff : 0); +} + + +static void m68k_op_sge_8_pd7(m68000_base_device* mc68kcpu) +{ + m68ki_write_8((mc68kcpu), EA_A7_PD_8(mc68kcpu), COND_GE(mc68kcpu) ? 0xff : 0); +} + + +static void m68k_op_sge_8_di(m68000_base_device* mc68kcpu) +{ + m68ki_write_8((mc68kcpu), EA_AY_DI_8(mc68kcpu), COND_GE(mc68kcpu) ? 0xff : 0); +} + + +static void m68k_op_sge_8_ix(m68000_base_device* mc68kcpu) +{ + m68ki_write_8((mc68kcpu), EA_AY_IX_8(mc68kcpu), COND_GE(mc68kcpu) ? 0xff : 0); +} + + +static void m68k_op_sge_8_aw(m68000_base_device* mc68kcpu) +{ + m68ki_write_8((mc68kcpu), EA_AW_8(mc68kcpu), COND_GE(mc68kcpu) ? 0xff : 0); +} + + +static void m68k_op_sge_8_al(m68000_base_device* mc68kcpu) +{ + m68ki_write_8((mc68kcpu), EA_AL_8(mc68kcpu), COND_GE(mc68kcpu) ? 0xff : 0); +} + + +static void m68k_op_slt_8_ai(m68000_base_device* mc68kcpu) +{ + m68ki_write_8((mc68kcpu), EA_AY_AI_8(mc68kcpu), COND_LT(mc68kcpu) ? 0xff : 0); +} + + +static void m68k_op_slt_8_pi(m68000_base_device* mc68kcpu) +{ + m68ki_write_8((mc68kcpu), EA_AY_PI_8(mc68kcpu), COND_LT(mc68kcpu) ? 0xff : 0); +} + + +static void m68k_op_slt_8_pi7(m68000_base_device* mc68kcpu) +{ + m68ki_write_8((mc68kcpu), EA_A7_PI_8(mc68kcpu), COND_LT(mc68kcpu) ? 0xff : 0); +} + + +static void m68k_op_slt_8_pd(m68000_base_device* mc68kcpu) +{ + m68ki_write_8((mc68kcpu), EA_AY_PD_8(mc68kcpu), COND_LT(mc68kcpu) ? 0xff : 0); +} + + +static void m68k_op_slt_8_pd7(m68000_base_device* mc68kcpu) +{ + m68ki_write_8((mc68kcpu), EA_A7_PD_8(mc68kcpu), COND_LT(mc68kcpu) ? 0xff : 0); +} + + +static void m68k_op_slt_8_di(m68000_base_device* mc68kcpu) +{ + m68ki_write_8((mc68kcpu), EA_AY_DI_8(mc68kcpu), COND_LT(mc68kcpu) ? 0xff : 0); +} + + +static void m68k_op_slt_8_ix(m68000_base_device* mc68kcpu) +{ + m68ki_write_8((mc68kcpu), EA_AY_IX_8(mc68kcpu), COND_LT(mc68kcpu) ? 0xff : 0); +} + + +static void m68k_op_slt_8_aw(m68000_base_device* mc68kcpu) +{ + m68ki_write_8((mc68kcpu), EA_AW_8(mc68kcpu), COND_LT(mc68kcpu) ? 0xff : 0); +} + + +static void m68k_op_slt_8_al(m68000_base_device* mc68kcpu) +{ + m68ki_write_8((mc68kcpu), EA_AL_8(mc68kcpu), COND_LT(mc68kcpu) ? 0xff : 0); +} + + +static void m68k_op_sgt_8_ai(m68000_base_device* mc68kcpu) +{ + m68ki_write_8((mc68kcpu), EA_AY_AI_8(mc68kcpu), COND_GT(mc68kcpu) ? 0xff : 0); +} + + +static void m68k_op_sgt_8_pi(m68000_base_device* mc68kcpu) +{ + m68ki_write_8((mc68kcpu), EA_AY_PI_8(mc68kcpu), COND_GT(mc68kcpu) ? 0xff : 0); +} + + +static void m68k_op_sgt_8_pi7(m68000_base_device* mc68kcpu) +{ + m68ki_write_8((mc68kcpu), EA_A7_PI_8(mc68kcpu), COND_GT(mc68kcpu) ? 0xff : 0); +} + + +static void m68k_op_sgt_8_pd(m68000_base_device* mc68kcpu) +{ + m68ki_write_8((mc68kcpu), EA_AY_PD_8(mc68kcpu), COND_GT(mc68kcpu) ? 0xff : 0); +} + + +static void m68k_op_sgt_8_pd7(m68000_base_device* mc68kcpu) +{ + m68ki_write_8((mc68kcpu), EA_A7_PD_8(mc68kcpu), COND_GT(mc68kcpu) ? 0xff : 0); +} + + +static void m68k_op_sgt_8_di(m68000_base_device* mc68kcpu) +{ + m68ki_write_8((mc68kcpu), EA_AY_DI_8(mc68kcpu), COND_GT(mc68kcpu) ? 0xff : 0); +} + + +static void m68k_op_sgt_8_ix(m68000_base_device* mc68kcpu) +{ + m68ki_write_8((mc68kcpu), EA_AY_IX_8(mc68kcpu), COND_GT(mc68kcpu) ? 0xff : 0); +} + + +static void m68k_op_sgt_8_aw(m68000_base_device* mc68kcpu) +{ + m68ki_write_8((mc68kcpu), EA_AW_8(mc68kcpu), COND_GT(mc68kcpu) ? 0xff : 0); +} + + +static void m68k_op_sgt_8_al(m68000_base_device* mc68kcpu) +{ + m68ki_write_8((mc68kcpu), EA_AL_8(mc68kcpu), COND_GT(mc68kcpu) ? 0xff : 0); +} + + +static void m68k_op_sle_8_ai(m68000_base_device* mc68kcpu) +{ + m68ki_write_8((mc68kcpu), EA_AY_AI_8(mc68kcpu), COND_LE(mc68kcpu) ? 0xff : 0); +} + + +static void m68k_op_sle_8_pi(m68000_base_device* mc68kcpu) +{ + m68ki_write_8((mc68kcpu), EA_AY_PI_8(mc68kcpu), COND_LE(mc68kcpu) ? 0xff : 0); +} + + +static void m68k_op_sle_8_pi7(m68000_base_device* mc68kcpu) +{ + m68ki_write_8((mc68kcpu), EA_A7_PI_8(mc68kcpu), COND_LE(mc68kcpu) ? 0xff : 0); +} + + +static void m68k_op_sle_8_pd(m68000_base_device* mc68kcpu) +{ + m68ki_write_8((mc68kcpu), EA_AY_PD_8(mc68kcpu), COND_LE(mc68kcpu) ? 0xff : 0); +} + + +static void m68k_op_sle_8_pd7(m68000_base_device* mc68kcpu) +{ + m68ki_write_8((mc68kcpu), EA_A7_PD_8(mc68kcpu), COND_LE(mc68kcpu) ? 0xff : 0); +} + + +static void m68k_op_sle_8_di(m68000_base_device* mc68kcpu) +{ + m68ki_write_8((mc68kcpu), EA_AY_DI_8(mc68kcpu), COND_LE(mc68kcpu) ? 0xff : 0); +} + + +static void m68k_op_sle_8_ix(m68000_base_device* mc68kcpu) +{ + m68ki_write_8((mc68kcpu), EA_AY_IX_8(mc68kcpu), COND_LE(mc68kcpu) ? 0xff : 0); +} + + +static void m68k_op_sle_8_aw(m68000_base_device* mc68kcpu) +{ + m68ki_write_8((mc68kcpu), EA_AW_8(mc68kcpu), COND_LE(mc68kcpu) ? 0xff : 0); +} + + +static void m68k_op_sle_8_al(m68000_base_device* mc68kcpu) +{ + m68ki_write_8((mc68kcpu), EA_AL_8(mc68kcpu), COND_LE(mc68kcpu) ? 0xff : 0); +} + + +static void m68k_op_stop(m68000_base_device* mc68kcpu) +{ + if((mc68kcpu)->s_flag) + { + uint32_t new_sr = OPER_I_16(mc68kcpu); + m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */ + (mc68kcpu)->stopped |= STOP_LEVEL_STOP; + m68ki_set_sr((mc68kcpu), new_sr); + (mc68kcpu)->c.current_cycle = (mc68kcpu)->c.target_cycle; + return; + } + m68ki_exception_privilege_violation(mc68kcpu); +} + + +static void m68k_op_sub_8_er_d(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &DX(mc68kcpu); + uint32_t src = MASK_OUT_ABOVE_8(DY(mc68kcpu)); + uint32_t dst = MASK_OUT_ABOVE_8(*r_dst); + uint32_t res = dst - src; + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_8(res); + (mc68kcpu)->v_flag = VFLAG_SUB_8(src, dst, res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res); + + *r_dst = MASK_OUT_BELOW_8(*r_dst) | (mc68kcpu)->not_z_flag; +} + + +static void m68k_op_sub_8_er_ai(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &DX(mc68kcpu); + uint32_t src = OPER_AY_AI_8(mc68kcpu); + uint32_t dst = MASK_OUT_ABOVE_8(*r_dst); + uint32_t res = dst - src; + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_8(res); + (mc68kcpu)->v_flag = VFLAG_SUB_8(src, dst, res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res); + + *r_dst = MASK_OUT_BELOW_8(*r_dst) | (mc68kcpu)->not_z_flag; +} + + +static void m68k_op_sub_8_er_pi(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &DX(mc68kcpu); + uint32_t src = OPER_AY_PI_8(mc68kcpu); + uint32_t dst = MASK_OUT_ABOVE_8(*r_dst); + uint32_t res = dst - src; + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_8(res); + (mc68kcpu)->v_flag = VFLAG_SUB_8(src, dst, res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res); + + *r_dst = MASK_OUT_BELOW_8(*r_dst) | (mc68kcpu)->not_z_flag; +} + + +static void m68k_op_sub_8_er_pi7(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &DX(mc68kcpu); + uint32_t src = OPER_A7_PI_8(mc68kcpu); + uint32_t dst = MASK_OUT_ABOVE_8(*r_dst); + uint32_t res = dst - src; + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_8(res); + (mc68kcpu)->v_flag = VFLAG_SUB_8(src, dst, res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res); + + *r_dst = MASK_OUT_BELOW_8(*r_dst) | (mc68kcpu)->not_z_flag; +} + + +static void m68k_op_sub_8_er_pd(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &DX(mc68kcpu); + uint32_t src = OPER_AY_PD_8(mc68kcpu); + uint32_t dst = MASK_OUT_ABOVE_8(*r_dst); + uint32_t res = dst - src; + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_8(res); + (mc68kcpu)->v_flag = VFLAG_SUB_8(src, dst, res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res); + + *r_dst = MASK_OUT_BELOW_8(*r_dst) | (mc68kcpu)->not_z_flag; +} + + +static void m68k_op_sub_8_er_pd7(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &DX(mc68kcpu); + uint32_t src = OPER_A7_PD_8(mc68kcpu); + uint32_t dst = MASK_OUT_ABOVE_8(*r_dst); + uint32_t res = dst - src; + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_8(res); + (mc68kcpu)->v_flag = VFLAG_SUB_8(src, dst, res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res); + + *r_dst = MASK_OUT_BELOW_8(*r_dst) | (mc68kcpu)->not_z_flag; +} + + +static void m68k_op_sub_8_er_di(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &DX(mc68kcpu); + uint32_t src = OPER_AY_DI_8(mc68kcpu); + uint32_t dst = MASK_OUT_ABOVE_8(*r_dst); + uint32_t res = dst - src; + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_8(res); + (mc68kcpu)->v_flag = VFLAG_SUB_8(src, dst, res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res); + + *r_dst = MASK_OUT_BELOW_8(*r_dst) | (mc68kcpu)->not_z_flag; +} + + +static void m68k_op_sub_8_er_ix(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &DX(mc68kcpu); + uint32_t src = OPER_AY_IX_8(mc68kcpu); + uint32_t dst = MASK_OUT_ABOVE_8(*r_dst); + uint32_t res = dst - src; + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_8(res); + (mc68kcpu)->v_flag = VFLAG_SUB_8(src, dst, res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res); + + *r_dst = MASK_OUT_BELOW_8(*r_dst) | (mc68kcpu)->not_z_flag; +} + + +static void m68k_op_sub_8_er_aw(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &DX(mc68kcpu); + uint32_t src = OPER_AW_8(mc68kcpu); + uint32_t dst = MASK_OUT_ABOVE_8(*r_dst); + uint32_t res = dst - src; + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_8(res); + (mc68kcpu)->v_flag = VFLAG_SUB_8(src, dst, res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res); + + *r_dst = MASK_OUT_BELOW_8(*r_dst) | (mc68kcpu)->not_z_flag; +} + + +static void m68k_op_sub_8_er_al(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &DX(mc68kcpu); + uint32_t src = OPER_AL_8(mc68kcpu); + uint32_t dst = MASK_OUT_ABOVE_8(*r_dst); + uint32_t res = dst - src; + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_8(res); + (mc68kcpu)->v_flag = VFLAG_SUB_8(src, dst, res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res); + + *r_dst = MASK_OUT_BELOW_8(*r_dst) | (mc68kcpu)->not_z_flag; +} + + +static void m68k_op_sub_8_er_pcdi(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &DX(mc68kcpu); + uint32_t src = OPER_PCDI_8(mc68kcpu); + uint32_t dst = MASK_OUT_ABOVE_8(*r_dst); + uint32_t res = dst - src; + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_8(res); + (mc68kcpu)->v_flag = VFLAG_SUB_8(src, dst, res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res); + + *r_dst = MASK_OUT_BELOW_8(*r_dst) | (mc68kcpu)->not_z_flag; +} + + +static void m68k_op_sub_8_er_pcix(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &DX(mc68kcpu); + uint32_t src = OPER_PCIX_8(mc68kcpu); + uint32_t dst = MASK_OUT_ABOVE_8(*r_dst); + uint32_t res = dst - src; + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_8(res); + (mc68kcpu)->v_flag = VFLAG_SUB_8(src, dst, res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res); + + *r_dst = MASK_OUT_BELOW_8(*r_dst) | (mc68kcpu)->not_z_flag; +} + + +static void m68k_op_sub_8_er_i(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &DX(mc68kcpu); + uint32_t src = OPER_I_8(mc68kcpu); + uint32_t dst = MASK_OUT_ABOVE_8(*r_dst); + uint32_t res = dst - src; + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_8(res); + (mc68kcpu)->v_flag = VFLAG_SUB_8(src, dst, res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res); + + *r_dst = MASK_OUT_BELOW_8(*r_dst) | (mc68kcpu)->not_z_flag; +} + + +static void m68k_op_sub_16_er_d(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &DX(mc68kcpu); + uint32_t src = MASK_OUT_ABOVE_16(DY(mc68kcpu)); + uint32_t dst = MASK_OUT_ABOVE_16(*r_dst); + uint32_t res = dst - src; + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_16(res); + (mc68kcpu)->v_flag = VFLAG_SUB_16(src, dst, res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res); + + *r_dst = MASK_OUT_BELOW_16(*r_dst) | (mc68kcpu)->not_z_flag; +} + + +static void m68k_op_sub_16_er_a(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &DX(mc68kcpu); + uint32_t src = MASK_OUT_ABOVE_16(AY(mc68kcpu)); + uint32_t dst = MASK_OUT_ABOVE_16(*r_dst); + uint32_t res = dst - src; + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_16(res); + (mc68kcpu)->v_flag = VFLAG_SUB_16(src, dst, res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res); + + *r_dst = MASK_OUT_BELOW_16(*r_dst) | (mc68kcpu)->not_z_flag; +} + + +static void m68k_op_sub_16_er_ai(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &DX(mc68kcpu); + uint32_t src = OPER_AY_AI_16(mc68kcpu); + uint32_t dst = MASK_OUT_ABOVE_16(*r_dst); + uint32_t res = dst - src; + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_16(res); + (mc68kcpu)->v_flag = VFLAG_SUB_16(src, dst, res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res); + + *r_dst = MASK_OUT_BELOW_16(*r_dst) | (mc68kcpu)->not_z_flag; +} + + +static void m68k_op_sub_16_er_pi(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &DX(mc68kcpu); + uint32_t src = OPER_AY_PI_16(mc68kcpu); + uint32_t dst = MASK_OUT_ABOVE_16(*r_dst); + uint32_t res = dst - src; + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_16(res); + (mc68kcpu)->v_flag = VFLAG_SUB_16(src, dst, res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res); + + *r_dst = MASK_OUT_BELOW_16(*r_dst) | (mc68kcpu)->not_z_flag; +} + + +static void m68k_op_sub_16_er_pd(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &DX(mc68kcpu); + uint32_t src = OPER_AY_PD_16(mc68kcpu); + uint32_t dst = MASK_OUT_ABOVE_16(*r_dst); + uint32_t res = dst - src; + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_16(res); + (mc68kcpu)->v_flag = VFLAG_SUB_16(src, dst, res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res); + + *r_dst = MASK_OUT_BELOW_16(*r_dst) | (mc68kcpu)->not_z_flag; +} + + +static void m68k_op_sub_16_er_di(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &DX(mc68kcpu); + uint32_t src = OPER_AY_DI_16(mc68kcpu); + uint32_t dst = MASK_OUT_ABOVE_16(*r_dst); + uint32_t res = dst - src; + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_16(res); + (mc68kcpu)->v_flag = VFLAG_SUB_16(src, dst, res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res); + + *r_dst = MASK_OUT_BELOW_16(*r_dst) | (mc68kcpu)->not_z_flag; +} + + +static void m68k_op_sub_16_er_ix(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &DX(mc68kcpu); + uint32_t src = OPER_AY_IX_16(mc68kcpu); + uint32_t dst = MASK_OUT_ABOVE_16(*r_dst); + uint32_t res = dst - src; + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_16(res); + (mc68kcpu)->v_flag = VFLAG_SUB_16(src, dst, res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res); + + *r_dst = MASK_OUT_BELOW_16(*r_dst) | (mc68kcpu)->not_z_flag; +} + + +static void m68k_op_sub_16_er_aw(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &DX(mc68kcpu); + uint32_t src = OPER_AW_16(mc68kcpu); + uint32_t dst = MASK_OUT_ABOVE_16(*r_dst); + uint32_t res = dst - src; + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_16(res); + (mc68kcpu)->v_flag = VFLAG_SUB_16(src, dst, res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res); + + *r_dst = MASK_OUT_BELOW_16(*r_dst) | (mc68kcpu)->not_z_flag; +} + + +static void m68k_op_sub_16_er_al(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &DX(mc68kcpu); + uint32_t src = OPER_AL_16(mc68kcpu); + uint32_t dst = MASK_OUT_ABOVE_16(*r_dst); + uint32_t res = dst - src; + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_16(res); + (mc68kcpu)->v_flag = VFLAG_SUB_16(src, dst, res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res); + + *r_dst = MASK_OUT_BELOW_16(*r_dst) | (mc68kcpu)->not_z_flag; +} + + +static void m68k_op_sub_16_er_pcdi(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &DX(mc68kcpu); + uint32_t src = OPER_PCDI_16(mc68kcpu); + uint32_t dst = MASK_OUT_ABOVE_16(*r_dst); + uint32_t res = dst - src; + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_16(res); + (mc68kcpu)->v_flag = VFLAG_SUB_16(src, dst, res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res); + + *r_dst = MASK_OUT_BELOW_16(*r_dst) | (mc68kcpu)->not_z_flag; +} + + +static void m68k_op_sub_16_er_pcix(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &DX(mc68kcpu); + uint32_t src = OPER_PCIX_16(mc68kcpu); + uint32_t dst = MASK_OUT_ABOVE_16(*r_dst); + uint32_t res = dst - src; + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_16(res); + (mc68kcpu)->v_flag = VFLAG_SUB_16(src, dst, res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res); + + *r_dst = MASK_OUT_BELOW_16(*r_dst) | (mc68kcpu)->not_z_flag; +} + + +static void m68k_op_sub_16_er_i(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &DX(mc68kcpu); + uint32_t src = OPER_I_16(mc68kcpu); + uint32_t dst = MASK_OUT_ABOVE_16(*r_dst); + uint32_t res = dst - src; + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_16(res); + (mc68kcpu)->v_flag = VFLAG_SUB_16(src, dst, res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res); + + *r_dst = MASK_OUT_BELOW_16(*r_dst) | (mc68kcpu)->not_z_flag; +} + + +static void m68k_op_sub_32_er_d(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &DX(mc68kcpu); + uint32_t src = DY(mc68kcpu); + uint32_t dst = *r_dst; + uint32_t res = dst - src; + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_SUB_32(src, dst, res); + (mc68kcpu)->v_flag = VFLAG_SUB_32(src, dst, res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res); + + *r_dst = (mc68kcpu)->not_z_flag; +} + + +static void m68k_op_sub_32_er_a(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &DX(mc68kcpu); + uint32_t src = AY(mc68kcpu); + uint32_t dst = *r_dst; + uint32_t res = dst - src; + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_SUB_32(src, dst, res); + (mc68kcpu)->v_flag = VFLAG_SUB_32(src, dst, res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res); + + *r_dst = (mc68kcpu)->not_z_flag; +} + + +static void m68k_op_sub_32_er_ai(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &DX(mc68kcpu); + uint32_t src = OPER_AY_AI_32(mc68kcpu); + uint32_t dst = *r_dst; + uint32_t res = dst - src; + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_SUB_32(src, dst, res); + (mc68kcpu)->v_flag = VFLAG_SUB_32(src, dst, res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res); + + *r_dst = (mc68kcpu)->not_z_flag; +} + + +static void m68k_op_sub_32_er_pi(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &DX(mc68kcpu); + uint32_t src = OPER_AY_PI_32(mc68kcpu); + uint32_t dst = *r_dst; + uint32_t res = dst - src; + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_SUB_32(src, dst, res); + (mc68kcpu)->v_flag = VFLAG_SUB_32(src, dst, res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res); + + *r_dst = (mc68kcpu)->not_z_flag; +} + + +static void m68k_op_sub_32_er_pd(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &DX(mc68kcpu); + uint32_t src = OPER_AY_PD_32(mc68kcpu); + uint32_t dst = *r_dst; + uint32_t res = dst - src; + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_SUB_32(src, dst, res); + (mc68kcpu)->v_flag = VFLAG_SUB_32(src, dst, res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res); + + *r_dst = (mc68kcpu)->not_z_flag; +} + + +static void m68k_op_sub_32_er_di(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &DX(mc68kcpu); + uint32_t src = OPER_AY_DI_32(mc68kcpu); + uint32_t dst = *r_dst; + uint32_t res = dst - src; + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_SUB_32(src, dst, res); + (mc68kcpu)->v_flag = VFLAG_SUB_32(src, dst, res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res); + + *r_dst = (mc68kcpu)->not_z_flag; +} + + +static void m68k_op_sub_32_er_ix(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &DX(mc68kcpu); + uint32_t src = OPER_AY_IX_32(mc68kcpu); + uint32_t dst = *r_dst; + uint32_t res = dst - src; + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_SUB_32(src, dst, res); + (mc68kcpu)->v_flag = VFLAG_SUB_32(src, dst, res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res); + + *r_dst = (mc68kcpu)->not_z_flag; +} + + +static void m68k_op_sub_32_er_aw(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &DX(mc68kcpu); + uint32_t src = OPER_AW_32(mc68kcpu); + uint32_t dst = *r_dst; + uint32_t res = dst - src; + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_SUB_32(src, dst, res); + (mc68kcpu)->v_flag = VFLAG_SUB_32(src, dst, res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res); + + *r_dst = (mc68kcpu)->not_z_flag; +} + + +static void m68k_op_sub_32_er_al(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &DX(mc68kcpu); + uint32_t src = OPER_AL_32(mc68kcpu); + uint32_t dst = *r_dst; + uint32_t res = dst - src; + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_SUB_32(src, dst, res); + (mc68kcpu)->v_flag = VFLAG_SUB_32(src, dst, res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res); + + *r_dst = (mc68kcpu)->not_z_flag; +} + + +static void m68k_op_sub_32_er_pcdi(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &DX(mc68kcpu); + uint32_t src = OPER_PCDI_32(mc68kcpu); + uint32_t dst = *r_dst; + uint32_t res = dst - src; + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_SUB_32(src, dst, res); + (mc68kcpu)->v_flag = VFLAG_SUB_32(src, dst, res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res); + + *r_dst = (mc68kcpu)->not_z_flag; +} + + +static void m68k_op_sub_32_er_pcix(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &DX(mc68kcpu); + uint32_t src = OPER_PCIX_32(mc68kcpu); + uint32_t dst = *r_dst; + uint32_t res = dst - src; + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_SUB_32(src, dst, res); + (mc68kcpu)->v_flag = VFLAG_SUB_32(src, dst, res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res); + + *r_dst = (mc68kcpu)->not_z_flag; +} + + +static void m68k_op_sub_32_er_i(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &DX(mc68kcpu); + uint32_t src = OPER_I_32(mc68kcpu); + uint32_t dst = *r_dst; + uint32_t res = dst - src; + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_SUB_32(src, dst, res); + (mc68kcpu)->v_flag = VFLAG_SUB_32(src, dst, res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res); + + *r_dst = (mc68kcpu)->not_z_flag; +} + + +static void m68k_op_sub_8_re_ai(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AY_AI_8(mc68kcpu); + uint32_t src = MASK_OUT_ABOVE_8(DX(mc68kcpu)); + uint32_t dst = m68ki_read_8((mc68kcpu), ea); + uint32_t res = dst - src; + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_8(res); + (mc68kcpu)->v_flag = VFLAG_SUB_8(src, dst, res); + + m68ki_write_8((mc68kcpu), ea, (mc68kcpu)->not_z_flag); +} + + +static void m68k_op_sub_8_re_pi(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AY_PI_8(mc68kcpu); + uint32_t src = MASK_OUT_ABOVE_8(DX(mc68kcpu)); + uint32_t dst = m68ki_read_8((mc68kcpu), ea); + uint32_t res = dst - src; + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_8(res); + (mc68kcpu)->v_flag = VFLAG_SUB_8(src, dst, res); + + m68ki_write_8((mc68kcpu), ea, (mc68kcpu)->not_z_flag); +} + + +static void m68k_op_sub_8_re_pi7(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_A7_PI_8(mc68kcpu); + uint32_t src = MASK_OUT_ABOVE_8(DX(mc68kcpu)); + uint32_t dst = m68ki_read_8((mc68kcpu), ea); + uint32_t res = dst - src; + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_8(res); + (mc68kcpu)->v_flag = VFLAG_SUB_8(src, dst, res); + + m68ki_write_8((mc68kcpu), ea, (mc68kcpu)->not_z_flag); +} + + +static void m68k_op_sub_8_re_pd(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AY_PD_8(mc68kcpu); + uint32_t src = MASK_OUT_ABOVE_8(DX(mc68kcpu)); + uint32_t dst = m68ki_read_8((mc68kcpu), ea); + uint32_t res = dst - src; + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_8(res); + (mc68kcpu)->v_flag = VFLAG_SUB_8(src, dst, res); + + m68ki_write_8((mc68kcpu), ea, (mc68kcpu)->not_z_flag); +} + + +static void m68k_op_sub_8_re_pd7(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_A7_PD_8(mc68kcpu); + uint32_t src = MASK_OUT_ABOVE_8(DX(mc68kcpu)); + uint32_t dst = m68ki_read_8((mc68kcpu), ea); + uint32_t res = dst - src; + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_8(res); + (mc68kcpu)->v_flag = VFLAG_SUB_8(src, dst, res); + + m68ki_write_8((mc68kcpu), ea, (mc68kcpu)->not_z_flag); +} + + +static void m68k_op_sub_8_re_di(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AY_DI_8(mc68kcpu); + uint32_t src = MASK_OUT_ABOVE_8(DX(mc68kcpu)); + uint32_t dst = m68ki_read_8((mc68kcpu), ea); + uint32_t res = dst - src; + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_8(res); + (mc68kcpu)->v_flag = VFLAG_SUB_8(src, dst, res); + + m68ki_write_8((mc68kcpu), ea, (mc68kcpu)->not_z_flag); +} + + +static void m68k_op_sub_8_re_ix(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AY_IX_8(mc68kcpu); + uint32_t src = MASK_OUT_ABOVE_8(DX(mc68kcpu)); + uint32_t dst = m68ki_read_8((mc68kcpu), ea); + uint32_t res = dst - src; + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_8(res); + (mc68kcpu)->v_flag = VFLAG_SUB_8(src, dst, res); + + m68ki_write_8((mc68kcpu), ea, (mc68kcpu)->not_z_flag); +} + + +static void m68k_op_sub_8_re_aw(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AW_8(mc68kcpu); + uint32_t src = MASK_OUT_ABOVE_8(DX(mc68kcpu)); + uint32_t dst = m68ki_read_8((mc68kcpu), ea); + uint32_t res = dst - src; + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_8(res); + (mc68kcpu)->v_flag = VFLAG_SUB_8(src, dst, res); + + m68ki_write_8((mc68kcpu), ea, (mc68kcpu)->not_z_flag); +} + + +static void m68k_op_sub_8_re_al(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AL_8(mc68kcpu); + uint32_t src = MASK_OUT_ABOVE_8(DX(mc68kcpu)); + uint32_t dst = m68ki_read_8((mc68kcpu), ea); + uint32_t res = dst - src; + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_8(res); + (mc68kcpu)->v_flag = VFLAG_SUB_8(src, dst, res); + + m68ki_write_8((mc68kcpu), ea, (mc68kcpu)->not_z_flag); +} + + +static void m68k_op_sub_16_re_ai(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AY_AI_16(mc68kcpu); + uint32_t src = MASK_OUT_ABOVE_16(DX(mc68kcpu)); + uint32_t dst = m68ki_read_16((mc68kcpu), ea); + uint32_t res = dst - src; + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_16(res); + (mc68kcpu)->v_flag = VFLAG_SUB_16(src, dst, res); + + m68ki_write_16((mc68kcpu), ea, (mc68kcpu)->not_z_flag); +} + + +static void m68k_op_sub_16_re_pi(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AY_PI_16(mc68kcpu); + uint32_t src = MASK_OUT_ABOVE_16(DX(mc68kcpu)); + uint32_t dst = m68ki_read_16((mc68kcpu), ea); + uint32_t res = dst - src; + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_16(res); + (mc68kcpu)->v_flag = VFLAG_SUB_16(src, dst, res); + + m68ki_write_16((mc68kcpu), ea, (mc68kcpu)->not_z_flag); +} + + +static void m68k_op_sub_16_re_pd(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AY_PD_16(mc68kcpu); + uint32_t src = MASK_OUT_ABOVE_16(DX(mc68kcpu)); + uint32_t dst = m68ki_read_16((mc68kcpu), ea); + uint32_t res = dst - src; + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_16(res); + (mc68kcpu)->v_flag = VFLAG_SUB_16(src, dst, res); + + m68ki_write_16((mc68kcpu), ea, (mc68kcpu)->not_z_flag); +} + + +static void m68k_op_sub_16_re_di(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AY_DI_16(mc68kcpu); + uint32_t src = MASK_OUT_ABOVE_16(DX(mc68kcpu)); + uint32_t dst = m68ki_read_16((mc68kcpu), ea); + uint32_t res = dst - src; + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_16(res); + (mc68kcpu)->v_flag = VFLAG_SUB_16(src, dst, res); + + m68ki_write_16((mc68kcpu), ea, (mc68kcpu)->not_z_flag); +} + + +static void m68k_op_sub_16_re_ix(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AY_IX_16(mc68kcpu); + uint32_t src = MASK_OUT_ABOVE_16(DX(mc68kcpu)); + uint32_t dst = m68ki_read_16((mc68kcpu), ea); + uint32_t res = dst - src; + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_16(res); + (mc68kcpu)->v_flag = VFLAG_SUB_16(src, dst, res); + + m68ki_write_16((mc68kcpu), ea, (mc68kcpu)->not_z_flag); +} + + +static void m68k_op_sub_16_re_aw(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AW_16(mc68kcpu); + uint32_t src = MASK_OUT_ABOVE_16(DX(mc68kcpu)); + uint32_t dst = m68ki_read_16((mc68kcpu), ea); + uint32_t res = dst - src; + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_16(res); + (mc68kcpu)->v_flag = VFLAG_SUB_16(src, dst, res); + + m68ki_write_16((mc68kcpu), ea, (mc68kcpu)->not_z_flag); +} + + +static void m68k_op_sub_16_re_al(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AL_16(mc68kcpu); + uint32_t src = MASK_OUT_ABOVE_16(DX(mc68kcpu)); + uint32_t dst = m68ki_read_16((mc68kcpu), ea); + uint32_t res = dst - src; + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_16(res); + (mc68kcpu)->v_flag = VFLAG_SUB_16(src, dst, res); + + m68ki_write_16((mc68kcpu), ea, (mc68kcpu)->not_z_flag); +} + + +static void m68k_op_sub_32_re_ai(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AY_AI_32(mc68kcpu); + uint32_t src = DX(mc68kcpu); + uint32_t dst = m68ki_read_32((mc68kcpu), ea); + uint32_t res = dst - src; + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_SUB_32(src, dst, res); + (mc68kcpu)->v_flag = VFLAG_SUB_32(src, dst, res); + + m68ki_write_32((mc68kcpu), ea, (mc68kcpu)->not_z_flag); +} + + +static void m68k_op_sub_32_re_pi(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AY_PI_32(mc68kcpu); + uint32_t src = DX(mc68kcpu); + uint32_t dst = m68ki_read_32((mc68kcpu), ea); + uint32_t res = dst - src; + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_SUB_32(src, dst, res); + (mc68kcpu)->v_flag = VFLAG_SUB_32(src, dst, res); + + m68ki_write_32((mc68kcpu), ea, (mc68kcpu)->not_z_flag); +} + + +static void m68k_op_sub_32_re_pd(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AY_PD_32(mc68kcpu); + uint32_t src = DX(mc68kcpu); + uint32_t dst = m68ki_read_32((mc68kcpu), ea); + uint32_t res = dst - src; + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_SUB_32(src, dst, res); + (mc68kcpu)->v_flag = VFLAG_SUB_32(src, dst, res); + + m68ki_write_32((mc68kcpu), ea, (mc68kcpu)->not_z_flag); +} + + +static void m68k_op_sub_32_re_di(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AY_DI_32(mc68kcpu); + uint32_t src = DX(mc68kcpu); + uint32_t dst = m68ki_read_32((mc68kcpu), ea); + uint32_t res = dst - src; + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_SUB_32(src, dst, res); + (mc68kcpu)->v_flag = VFLAG_SUB_32(src, dst, res); + + m68ki_write_32((mc68kcpu), ea, (mc68kcpu)->not_z_flag); +} + + +static void m68k_op_sub_32_re_ix(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AY_IX_32(mc68kcpu); + uint32_t src = DX(mc68kcpu); + uint32_t dst = m68ki_read_32((mc68kcpu), ea); + uint32_t res = dst - src; + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_SUB_32(src, dst, res); + (mc68kcpu)->v_flag = VFLAG_SUB_32(src, dst, res); + + m68ki_write_32((mc68kcpu), ea, (mc68kcpu)->not_z_flag); +} + + +static void m68k_op_sub_32_re_aw(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AW_32(mc68kcpu); + uint32_t src = DX(mc68kcpu); + uint32_t dst = m68ki_read_32((mc68kcpu), ea); + uint32_t res = dst - src; + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_SUB_32(src, dst, res); + (mc68kcpu)->v_flag = VFLAG_SUB_32(src, dst, res); + + m68ki_write_32((mc68kcpu), ea, (mc68kcpu)->not_z_flag); +} + + +static void m68k_op_sub_32_re_al(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AL_32(mc68kcpu); + uint32_t src = DX(mc68kcpu); + uint32_t dst = m68ki_read_32((mc68kcpu), ea); + uint32_t res = dst - src; + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_SUB_32(src, dst, res); + (mc68kcpu)->v_flag = VFLAG_SUB_32(src, dst, res); + + m68ki_write_32((mc68kcpu), ea, (mc68kcpu)->not_z_flag); +} + + +static void m68k_op_suba_16_d(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &AX(mc68kcpu); + + *r_dst = MASK_OUT_ABOVE_32(*r_dst - MAKE_INT_16(DY(mc68kcpu))); +} + + +static void m68k_op_suba_16_a(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &AX(mc68kcpu); + + *r_dst = MASK_OUT_ABOVE_32(*r_dst - MAKE_INT_16(AY(mc68kcpu))); +} + + +static void m68k_op_suba_16_ai(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &AX(mc68kcpu); + uint32_t src = MAKE_INT_16(OPER_AY_AI_16(mc68kcpu)); + + *r_dst = MASK_OUT_ABOVE_32(*r_dst - src); +} + + +static void m68k_op_suba_16_pi(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &AX(mc68kcpu); + uint32_t src = MAKE_INT_16(OPER_AY_PI_16(mc68kcpu)); + + *r_dst = MASK_OUT_ABOVE_32(*r_dst - src); +} + + +static void m68k_op_suba_16_pd(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &AX(mc68kcpu); + uint32_t src = MAKE_INT_16(OPER_AY_PD_16(mc68kcpu)); + + *r_dst = MASK_OUT_ABOVE_32(*r_dst - src); +} + + +static void m68k_op_suba_16_di(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &AX(mc68kcpu); + uint32_t src = MAKE_INT_16(OPER_AY_DI_16(mc68kcpu)); + + *r_dst = MASK_OUT_ABOVE_32(*r_dst - src); +} + + +static void m68k_op_suba_16_ix(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &AX(mc68kcpu); + uint32_t src = MAKE_INT_16(OPER_AY_IX_16(mc68kcpu)); + + *r_dst = MASK_OUT_ABOVE_32(*r_dst - src); +} + + +static void m68k_op_suba_16_aw(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &AX(mc68kcpu); + uint32_t src = MAKE_INT_16(OPER_AW_16(mc68kcpu)); + + *r_dst = MASK_OUT_ABOVE_32(*r_dst - src); +} + + +static void m68k_op_suba_16_al(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &AX(mc68kcpu); + uint32_t src = MAKE_INT_16(OPER_AL_16(mc68kcpu)); + + *r_dst = MASK_OUT_ABOVE_32(*r_dst - src); +} + + +static void m68k_op_suba_16_pcdi(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &AX(mc68kcpu); + uint32_t src = MAKE_INT_16(OPER_PCDI_16(mc68kcpu)); + + *r_dst = MASK_OUT_ABOVE_32(*r_dst - src); +} + + +static void m68k_op_suba_16_pcix(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &AX(mc68kcpu); + uint32_t src = MAKE_INT_16(OPER_PCIX_16(mc68kcpu)); + + *r_dst = MASK_OUT_ABOVE_32(*r_dst - src); +} + + +static void m68k_op_suba_16_i(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &AX(mc68kcpu); + uint32_t src = MAKE_INT_16(OPER_I_16(mc68kcpu)); + + *r_dst = MASK_OUT_ABOVE_32(*r_dst - src); +} + + +static void m68k_op_suba_32_d(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &AX(mc68kcpu); + + *r_dst = MASK_OUT_ABOVE_32(*r_dst - DY(mc68kcpu)); +} + + +static void m68k_op_suba_32_a(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &AX(mc68kcpu); + + *r_dst = MASK_OUT_ABOVE_32(*r_dst - AY(mc68kcpu)); +} + + +static void m68k_op_suba_32_ai(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &AX(mc68kcpu); + uint32_t src = OPER_AY_AI_32(mc68kcpu); + + *r_dst = MASK_OUT_ABOVE_32(*r_dst - src); +} + + +static void m68k_op_suba_32_pi(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &AX(mc68kcpu); + uint32_t src = OPER_AY_PI_32(mc68kcpu); + + *r_dst = MASK_OUT_ABOVE_32(*r_dst - src); +} + + +static void m68k_op_suba_32_pd(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &AX(mc68kcpu); + uint32_t src = OPER_AY_PD_32(mc68kcpu); + + *r_dst = MASK_OUT_ABOVE_32(*r_dst - src); +} + + +static void m68k_op_suba_32_di(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &AX(mc68kcpu); + uint32_t src = OPER_AY_DI_32(mc68kcpu); + + *r_dst = MASK_OUT_ABOVE_32(*r_dst - src); +} + + +static void m68k_op_suba_32_ix(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &AX(mc68kcpu); + uint32_t src = OPER_AY_IX_32(mc68kcpu); + + *r_dst = MASK_OUT_ABOVE_32(*r_dst - src); +} + + +static void m68k_op_suba_32_aw(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &AX(mc68kcpu); + uint32_t src = OPER_AW_32(mc68kcpu); + + *r_dst = MASK_OUT_ABOVE_32(*r_dst - src); +} + + +static void m68k_op_suba_32_al(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &AX(mc68kcpu); + uint32_t src = OPER_AL_32(mc68kcpu); + + *r_dst = MASK_OUT_ABOVE_32(*r_dst - src); +} + + +static void m68k_op_suba_32_pcdi(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &AX(mc68kcpu); + uint32_t src = OPER_PCDI_32(mc68kcpu); + + *r_dst = MASK_OUT_ABOVE_32(*r_dst - src); +} + + +static void m68k_op_suba_32_pcix(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &AX(mc68kcpu); + uint32_t src = OPER_PCIX_32(mc68kcpu); + + *r_dst = MASK_OUT_ABOVE_32(*r_dst - src); +} + + +static void m68k_op_suba_32_i(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &AX(mc68kcpu); + uint32_t src = OPER_I_32(mc68kcpu); + + *r_dst = MASK_OUT_ABOVE_32(*r_dst - src); +} + + +static void m68k_op_subi_8_d(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &DY(mc68kcpu); + uint32_t src = OPER_I_8(mc68kcpu); + uint32_t dst = MASK_OUT_ABOVE_8(*r_dst); + uint32_t res = dst - src; + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_8(res); + (mc68kcpu)->v_flag = VFLAG_SUB_8(src, dst, res); + + *r_dst = MASK_OUT_BELOW_8(*r_dst) | (mc68kcpu)->not_z_flag; +} + + +static void m68k_op_subi_8_ai(m68000_base_device* mc68kcpu) +{ + uint32_t src = OPER_I_8(mc68kcpu); + uint32_t ea = EA_AY_AI_8(mc68kcpu); + uint32_t dst = m68ki_read_8((mc68kcpu), ea); + uint32_t res = dst - src; + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_8(res); + (mc68kcpu)->v_flag = VFLAG_SUB_8(src, dst, res); + + m68ki_write_8((mc68kcpu), ea, (mc68kcpu)->not_z_flag); +} + + +static void m68k_op_subi_8_pi(m68000_base_device* mc68kcpu) +{ + uint32_t src = OPER_I_8(mc68kcpu); + uint32_t ea = EA_AY_PI_8(mc68kcpu); + uint32_t dst = m68ki_read_8((mc68kcpu), ea); + uint32_t res = dst - src; + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_8(res); + (mc68kcpu)->v_flag = VFLAG_SUB_8(src, dst, res); + + m68ki_write_8((mc68kcpu), ea, (mc68kcpu)->not_z_flag); +} + + +static void m68k_op_subi_8_pi7(m68000_base_device* mc68kcpu) +{ + uint32_t src = OPER_I_8(mc68kcpu); + uint32_t ea = EA_A7_PI_8(mc68kcpu); + uint32_t dst = m68ki_read_8((mc68kcpu), ea); + uint32_t res = dst - src; + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_8(res); + (mc68kcpu)->v_flag = VFLAG_SUB_8(src, dst, res); + + m68ki_write_8((mc68kcpu), ea, (mc68kcpu)->not_z_flag); +} + + +static void m68k_op_subi_8_pd(m68000_base_device* mc68kcpu) +{ + uint32_t src = OPER_I_8(mc68kcpu); + uint32_t ea = EA_AY_PD_8(mc68kcpu); + uint32_t dst = m68ki_read_8((mc68kcpu), ea); + uint32_t res = dst - src; + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_8(res); + (mc68kcpu)->v_flag = VFLAG_SUB_8(src, dst, res); + + m68ki_write_8((mc68kcpu), ea, (mc68kcpu)->not_z_flag); +} + + +static void m68k_op_subi_8_pd7(m68000_base_device* mc68kcpu) +{ + uint32_t src = OPER_I_8(mc68kcpu); + uint32_t ea = EA_A7_PD_8(mc68kcpu); + uint32_t dst = m68ki_read_8((mc68kcpu), ea); + uint32_t res = dst - src; + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_8(res); + (mc68kcpu)->v_flag = VFLAG_SUB_8(src, dst, res); + + m68ki_write_8((mc68kcpu), ea, (mc68kcpu)->not_z_flag); +} + + +static void m68k_op_subi_8_di(m68000_base_device* mc68kcpu) +{ + uint32_t src = OPER_I_8(mc68kcpu); + uint32_t ea = EA_AY_DI_8(mc68kcpu); + uint32_t dst = m68ki_read_8((mc68kcpu), ea); + uint32_t res = dst - src; + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_8(res); + (mc68kcpu)->v_flag = VFLAG_SUB_8(src, dst, res); + + m68ki_write_8((mc68kcpu), ea, (mc68kcpu)->not_z_flag); +} + + +static void m68k_op_subi_8_ix(m68000_base_device* mc68kcpu) +{ + uint32_t src = OPER_I_8(mc68kcpu); + uint32_t ea = EA_AY_IX_8(mc68kcpu); + uint32_t dst = m68ki_read_8((mc68kcpu), ea); + uint32_t res = dst - src; + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_8(res); + (mc68kcpu)->v_flag = VFLAG_SUB_8(src, dst, res); + + m68ki_write_8((mc68kcpu), ea, (mc68kcpu)->not_z_flag); +} + + +static void m68k_op_subi_8_aw(m68000_base_device* mc68kcpu) +{ + uint32_t src = OPER_I_8(mc68kcpu); + uint32_t ea = EA_AW_8(mc68kcpu); + uint32_t dst = m68ki_read_8((mc68kcpu), ea); + uint32_t res = dst - src; + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_8(res); + (mc68kcpu)->v_flag = VFLAG_SUB_8(src, dst, res); + + m68ki_write_8((mc68kcpu), ea, (mc68kcpu)->not_z_flag); +} + + +static void m68k_op_subi_8_al(m68000_base_device* mc68kcpu) +{ + uint32_t src = OPER_I_8(mc68kcpu); + uint32_t ea = EA_AL_8(mc68kcpu); + uint32_t dst = m68ki_read_8((mc68kcpu), ea); + uint32_t res = dst - src; + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_8(res); + (mc68kcpu)->v_flag = VFLAG_SUB_8(src, dst, res); + + m68ki_write_8((mc68kcpu), ea, (mc68kcpu)->not_z_flag); +} + + +static void m68k_op_subi_16_d(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &DY(mc68kcpu); + uint32_t src = OPER_I_16(mc68kcpu); + uint32_t dst = MASK_OUT_ABOVE_16(*r_dst); + uint32_t res = dst - src; + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_16(res); + (mc68kcpu)->v_flag = VFLAG_SUB_16(src, dst, res); + + *r_dst = MASK_OUT_BELOW_16(*r_dst) | (mc68kcpu)->not_z_flag; +} + + +static void m68k_op_subi_16_ai(m68000_base_device* mc68kcpu) +{ + uint32_t src = OPER_I_16(mc68kcpu); + uint32_t ea = EA_AY_AI_16(mc68kcpu); + uint32_t dst = m68ki_read_16((mc68kcpu), ea); + uint32_t res = dst - src; + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_16(res); + (mc68kcpu)->v_flag = VFLAG_SUB_16(src, dst, res); + + m68ki_write_16((mc68kcpu), ea, (mc68kcpu)->not_z_flag); +} + + +static void m68k_op_subi_16_pi(m68000_base_device* mc68kcpu) +{ + uint32_t src = OPER_I_16(mc68kcpu); + uint32_t ea = EA_AY_PI_16(mc68kcpu); + uint32_t dst = m68ki_read_16((mc68kcpu), ea); + uint32_t res = dst - src; + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_16(res); + (mc68kcpu)->v_flag = VFLAG_SUB_16(src, dst, res); + + m68ki_write_16((mc68kcpu), ea, (mc68kcpu)->not_z_flag); +} + + +static void m68k_op_subi_16_pd(m68000_base_device* mc68kcpu) +{ + uint32_t src = OPER_I_16(mc68kcpu); + uint32_t ea = EA_AY_PD_16(mc68kcpu); + uint32_t dst = m68ki_read_16((mc68kcpu), ea); + uint32_t res = dst - src; + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_16(res); + (mc68kcpu)->v_flag = VFLAG_SUB_16(src, dst, res); + + m68ki_write_16((mc68kcpu), ea, (mc68kcpu)->not_z_flag); +} + + +static void m68k_op_subi_16_di(m68000_base_device* mc68kcpu) +{ + uint32_t src = OPER_I_16(mc68kcpu); + uint32_t ea = EA_AY_DI_16(mc68kcpu); + uint32_t dst = m68ki_read_16((mc68kcpu), ea); + uint32_t res = dst - src; + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_16(res); + (mc68kcpu)->v_flag = VFLAG_SUB_16(src, dst, res); + + m68ki_write_16((mc68kcpu), ea, (mc68kcpu)->not_z_flag); +} + + +static void m68k_op_subi_16_ix(m68000_base_device* mc68kcpu) +{ + uint32_t src = OPER_I_16(mc68kcpu); + uint32_t ea = EA_AY_IX_16(mc68kcpu); + uint32_t dst = m68ki_read_16((mc68kcpu), ea); + uint32_t res = dst - src; + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_16(res); + (mc68kcpu)->v_flag = VFLAG_SUB_16(src, dst, res); + + m68ki_write_16((mc68kcpu), ea, (mc68kcpu)->not_z_flag); +} + + +static void m68k_op_subi_16_aw(m68000_base_device* mc68kcpu) +{ + uint32_t src = OPER_I_16(mc68kcpu); + uint32_t ea = EA_AW_16(mc68kcpu); + uint32_t dst = m68ki_read_16((mc68kcpu), ea); + uint32_t res = dst - src; + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_16(res); + (mc68kcpu)->v_flag = VFLAG_SUB_16(src, dst, res); + + m68ki_write_16((mc68kcpu), ea, (mc68kcpu)->not_z_flag); +} + + +static void m68k_op_subi_16_al(m68000_base_device* mc68kcpu) +{ + uint32_t src = OPER_I_16(mc68kcpu); + uint32_t ea = EA_AL_16(mc68kcpu); + uint32_t dst = m68ki_read_16((mc68kcpu), ea); + uint32_t res = dst - src; + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_16(res); + (mc68kcpu)->v_flag = VFLAG_SUB_16(src, dst, res); + + m68ki_write_16((mc68kcpu), ea, (mc68kcpu)->not_z_flag); +} + + +static void m68k_op_subi_32_d(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &DY(mc68kcpu); + uint32_t src = OPER_I_32(mc68kcpu); + uint32_t dst = *r_dst; + uint32_t res = dst - src; + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_SUB_32(src, dst, res); + (mc68kcpu)->v_flag = VFLAG_SUB_32(src, dst, res); + + *r_dst = (mc68kcpu)->not_z_flag; +} + + +static void m68k_op_subi_32_ai(m68000_base_device* mc68kcpu) +{ + uint32_t src = OPER_I_32(mc68kcpu); + uint32_t ea = EA_AY_AI_32(mc68kcpu); + uint32_t dst = m68ki_read_32((mc68kcpu), ea); + uint32_t res = dst - src; + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_SUB_32(src, dst, res); + (mc68kcpu)->v_flag = VFLAG_SUB_32(src, dst, res); + + m68ki_write_32((mc68kcpu), ea, (mc68kcpu)->not_z_flag); +} + + +static void m68k_op_subi_32_pi(m68000_base_device* mc68kcpu) +{ + uint32_t src = OPER_I_32(mc68kcpu); + uint32_t ea = EA_AY_PI_32(mc68kcpu); + uint32_t dst = m68ki_read_32((mc68kcpu), ea); + uint32_t res = dst - src; + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_SUB_32(src, dst, res); + (mc68kcpu)->v_flag = VFLAG_SUB_32(src, dst, res); + + m68ki_write_32((mc68kcpu), ea, (mc68kcpu)->not_z_flag); +} + + +static void m68k_op_subi_32_pd(m68000_base_device* mc68kcpu) +{ + uint32_t src = OPER_I_32(mc68kcpu); + uint32_t ea = EA_AY_PD_32(mc68kcpu); + uint32_t dst = m68ki_read_32((mc68kcpu), ea); + uint32_t res = dst - src; + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_SUB_32(src, dst, res); + (mc68kcpu)->v_flag = VFLAG_SUB_32(src, dst, res); + + m68ki_write_32((mc68kcpu), ea, (mc68kcpu)->not_z_flag); +} + + +static void m68k_op_subi_32_di(m68000_base_device* mc68kcpu) +{ + uint32_t src = OPER_I_32(mc68kcpu); + uint32_t ea = EA_AY_DI_32(mc68kcpu); + uint32_t dst = m68ki_read_32((mc68kcpu), ea); + uint32_t res = dst - src; + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_SUB_32(src, dst, res); + (mc68kcpu)->v_flag = VFLAG_SUB_32(src, dst, res); + + m68ki_write_32((mc68kcpu), ea, (mc68kcpu)->not_z_flag); +} + + +static void m68k_op_subi_32_ix(m68000_base_device* mc68kcpu) +{ + uint32_t src = OPER_I_32(mc68kcpu); + uint32_t ea = EA_AY_IX_32(mc68kcpu); + uint32_t dst = m68ki_read_32((mc68kcpu), ea); + uint32_t res = dst - src; + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_SUB_32(src, dst, res); + (mc68kcpu)->v_flag = VFLAG_SUB_32(src, dst, res); + + m68ki_write_32((mc68kcpu), ea, (mc68kcpu)->not_z_flag); +} + + +static void m68k_op_subi_32_aw(m68000_base_device* mc68kcpu) +{ + uint32_t src = OPER_I_32(mc68kcpu); + uint32_t ea = EA_AW_32(mc68kcpu); + uint32_t dst = m68ki_read_32((mc68kcpu), ea); + uint32_t res = dst - src; + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_SUB_32(src, dst, res); + (mc68kcpu)->v_flag = VFLAG_SUB_32(src, dst, res); + + m68ki_write_32((mc68kcpu), ea, (mc68kcpu)->not_z_flag); +} + + +static void m68k_op_subi_32_al(m68000_base_device* mc68kcpu) +{ + uint32_t src = OPER_I_32(mc68kcpu); + uint32_t ea = EA_AL_32(mc68kcpu); + uint32_t dst = m68ki_read_32((mc68kcpu), ea); + uint32_t res = dst - src; + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_SUB_32(src, dst, res); + (mc68kcpu)->v_flag = VFLAG_SUB_32(src, dst, res); + + m68ki_write_32((mc68kcpu), ea, (mc68kcpu)->not_z_flag); +} + + +static void m68k_op_subq_8_d(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &DY(mc68kcpu); + uint32_t src = ((((mc68kcpu)->ir >> 9) - 1) & 7) + 1; + uint32_t dst = MASK_OUT_ABOVE_8(*r_dst); + uint32_t res = dst - src; + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_8(res); + (mc68kcpu)->v_flag = VFLAG_SUB_8(src, dst, res); + + *r_dst = MASK_OUT_BELOW_8(*r_dst) | (mc68kcpu)->not_z_flag; +} + + +static void m68k_op_subq_8_ai(m68000_base_device* mc68kcpu) +{ + uint32_t src = ((((mc68kcpu)->ir >> 9) - 1) & 7) + 1; + uint32_t ea = EA_AY_AI_8(mc68kcpu); + uint32_t dst = m68ki_read_8((mc68kcpu), ea); + uint32_t res = dst - src; + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_8(res); + (mc68kcpu)->v_flag = VFLAG_SUB_8(src, dst, res); + + m68ki_write_8((mc68kcpu), ea, (mc68kcpu)->not_z_flag); +} + + +static void m68k_op_subq_8_pi(m68000_base_device* mc68kcpu) +{ + uint32_t src = ((((mc68kcpu)->ir >> 9) - 1) & 7) + 1; + uint32_t ea = EA_AY_PI_8(mc68kcpu); + uint32_t dst = m68ki_read_8((mc68kcpu), ea); + uint32_t res = dst - src; + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_8(res); + (mc68kcpu)->v_flag = VFLAG_SUB_8(src, dst, res); + + m68ki_write_8((mc68kcpu), ea, (mc68kcpu)->not_z_flag); +} + + +static void m68k_op_subq_8_pi7(m68000_base_device* mc68kcpu) +{ + uint32_t src = ((((mc68kcpu)->ir >> 9) - 1) & 7) + 1; + uint32_t ea = EA_A7_PI_8(mc68kcpu); + uint32_t dst = m68ki_read_8((mc68kcpu), ea); + uint32_t res = dst - src; + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_8(res); + (mc68kcpu)->v_flag = VFLAG_SUB_8(src, dst, res); + + m68ki_write_8((mc68kcpu), ea, (mc68kcpu)->not_z_flag); +} + + +static void m68k_op_subq_8_pd(m68000_base_device* mc68kcpu) +{ + uint32_t src = ((((mc68kcpu)->ir >> 9) - 1) & 7) + 1; + uint32_t ea = EA_AY_PD_8(mc68kcpu); + uint32_t dst = m68ki_read_8((mc68kcpu), ea); + uint32_t res = dst - src; + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_8(res); + (mc68kcpu)->v_flag = VFLAG_SUB_8(src, dst, res); + + m68ki_write_8((mc68kcpu), ea, (mc68kcpu)->not_z_flag); +} + + +static void m68k_op_subq_8_pd7(m68000_base_device* mc68kcpu) +{ + uint32_t src = ((((mc68kcpu)->ir >> 9) - 1) & 7) + 1; + uint32_t ea = EA_A7_PD_8(mc68kcpu); + uint32_t dst = m68ki_read_8((mc68kcpu), ea); + uint32_t res = dst - src; + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_8(res); + (mc68kcpu)->v_flag = VFLAG_SUB_8(src, dst, res); + + m68ki_write_8((mc68kcpu), ea, (mc68kcpu)->not_z_flag); +} + + +static void m68k_op_subq_8_di(m68000_base_device* mc68kcpu) +{ + uint32_t src = ((((mc68kcpu)->ir >> 9) - 1) & 7) + 1; + uint32_t ea = EA_AY_DI_8(mc68kcpu); + uint32_t dst = m68ki_read_8((mc68kcpu), ea); + uint32_t res = dst - src; + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_8(res); + (mc68kcpu)->v_flag = VFLAG_SUB_8(src, dst, res); + + m68ki_write_8((mc68kcpu), ea, (mc68kcpu)->not_z_flag); +} + + +static void m68k_op_subq_8_ix(m68000_base_device* mc68kcpu) +{ + uint32_t src = ((((mc68kcpu)->ir >> 9) - 1) & 7) + 1; + uint32_t ea = EA_AY_IX_8(mc68kcpu); + uint32_t dst = m68ki_read_8((mc68kcpu), ea); + uint32_t res = dst - src; + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_8(res); + (mc68kcpu)->v_flag = VFLAG_SUB_8(src, dst, res); + + m68ki_write_8((mc68kcpu), ea, (mc68kcpu)->not_z_flag); +} + + +static void m68k_op_subq_8_aw(m68000_base_device* mc68kcpu) +{ + uint32_t src = ((((mc68kcpu)->ir >> 9) - 1) & 7) + 1; + uint32_t ea = EA_AW_8(mc68kcpu); + uint32_t dst = m68ki_read_8((mc68kcpu), ea); + uint32_t res = dst - src; + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_8(res); + (mc68kcpu)->v_flag = VFLAG_SUB_8(src, dst, res); + + m68ki_write_8((mc68kcpu), ea, (mc68kcpu)->not_z_flag); +} + + +static void m68k_op_subq_8_al(m68000_base_device* mc68kcpu) +{ + uint32_t src = ((((mc68kcpu)->ir >> 9) - 1) & 7) + 1; + uint32_t ea = EA_AL_8(mc68kcpu); + uint32_t dst = m68ki_read_8((mc68kcpu), ea); + uint32_t res = dst - src; + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_8(res); + (mc68kcpu)->v_flag = VFLAG_SUB_8(src, dst, res); + + m68ki_write_8((mc68kcpu), ea, (mc68kcpu)->not_z_flag); +} + + +static void m68k_op_subq_16_d(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &DY(mc68kcpu); + uint32_t src = ((((mc68kcpu)->ir >> 9) - 1) & 7) + 1; + uint32_t dst = MASK_OUT_ABOVE_16(*r_dst); + uint32_t res = dst - src; + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_16(res); + (mc68kcpu)->v_flag = VFLAG_SUB_16(src, dst, res); + + *r_dst = MASK_OUT_BELOW_16(*r_dst) | (mc68kcpu)->not_z_flag; +} + + +static void m68k_op_subq_16_a(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &AY(mc68kcpu); + + *r_dst = MASK_OUT_ABOVE_32(*r_dst - (((((mc68kcpu)->ir >> 9) - 1) & 7) + 1)); +} + + +static void m68k_op_subq_16_ai(m68000_base_device* mc68kcpu) +{ + uint32_t src = ((((mc68kcpu)->ir >> 9) - 1) & 7) + 1; + uint32_t ea = EA_AY_AI_16(mc68kcpu); + uint32_t dst = m68ki_read_16((mc68kcpu), ea); + uint32_t res = dst - src; + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_16(res); + (mc68kcpu)->v_flag = VFLAG_SUB_16(src, dst, res); + + m68ki_write_16((mc68kcpu), ea, (mc68kcpu)->not_z_flag); +} + + +static void m68k_op_subq_16_pi(m68000_base_device* mc68kcpu) +{ + uint32_t src = ((((mc68kcpu)->ir >> 9) - 1) & 7) + 1; + uint32_t ea = EA_AY_PI_16(mc68kcpu); + uint32_t dst = m68ki_read_16((mc68kcpu), ea); + uint32_t res = dst - src; + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_16(res); + (mc68kcpu)->v_flag = VFLAG_SUB_16(src, dst, res); + + m68ki_write_16((mc68kcpu), ea, (mc68kcpu)->not_z_flag); +} + + +static void m68k_op_subq_16_pd(m68000_base_device* mc68kcpu) +{ + uint32_t src = ((((mc68kcpu)->ir >> 9) - 1) & 7) + 1; + uint32_t ea = EA_AY_PD_16(mc68kcpu); + uint32_t dst = m68ki_read_16((mc68kcpu), ea); + uint32_t res = dst - src; + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_16(res); + (mc68kcpu)->v_flag = VFLAG_SUB_16(src, dst, res); + + m68ki_write_16((mc68kcpu), ea, (mc68kcpu)->not_z_flag); +} + + +static void m68k_op_subq_16_di(m68000_base_device* mc68kcpu) +{ + uint32_t src = ((((mc68kcpu)->ir >> 9) - 1) & 7) + 1; + uint32_t ea = EA_AY_DI_16(mc68kcpu); + uint32_t dst = m68ki_read_16((mc68kcpu), ea); + uint32_t res = dst - src; + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_16(res); + (mc68kcpu)->v_flag = VFLAG_SUB_16(src, dst, res); + + m68ki_write_16((mc68kcpu), ea, (mc68kcpu)->not_z_flag); +} + + +static void m68k_op_subq_16_ix(m68000_base_device* mc68kcpu) +{ + uint32_t src = ((((mc68kcpu)->ir >> 9) - 1) & 7) + 1; + uint32_t ea = EA_AY_IX_16(mc68kcpu); + uint32_t dst = m68ki_read_16((mc68kcpu), ea); + uint32_t res = dst - src; + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_16(res); + (mc68kcpu)->v_flag = VFLAG_SUB_16(src, dst, res); + + m68ki_write_16((mc68kcpu), ea, (mc68kcpu)->not_z_flag); +} + + +static void m68k_op_subq_16_aw(m68000_base_device* mc68kcpu) +{ + uint32_t src = ((((mc68kcpu)->ir >> 9) - 1) & 7) + 1; + uint32_t ea = EA_AW_16(mc68kcpu); + uint32_t dst = m68ki_read_16((mc68kcpu), ea); + uint32_t res = dst - src; + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_16(res); + (mc68kcpu)->v_flag = VFLAG_SUB_16(src, dst, res); + + m68ki_write_16((mc68kcpu), ea, (mc68kcpu)->not_z_flag); +} + + +static void m68k_op_subq_16_al(m68000_base_device* mc68kcpu) +{ + uint32_t src = ((((mc68kcpu)->ir >> 9) - 1) & 7) + 1; + uint32_t ea = EA_AL_16(mc68kcpu); + uint32_t dst = m68ki_read_16((mc68kcpu), ea); + uint32_t res = dst - src; + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_16(res); + (mc68kcpu)->v_flag = VFLAG_SUB_16(src, dst, res); + + m68ki_write_16((mc68kcpu), ea, (mc68kcpu)->not_z_flag); +} + + +static void m68k_op_subq_32_d(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &DY(mc68kcpu); + uint32_t src = ((((mc68kcpu)->ir >> 9) - 1) & 7) + 1; + uint32_t dst = *r_dst; + uint32_t res = dst - src; + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_SUB_32(src, dst, res); + (mc68kcpu)->v_flag = VFLAG_SUB_32(src, dst, res); + + *r_dst = (mc68kcpu)->not_z_flag; +} + + +static void m68k_op_subq_32_a(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &AY(mc68kcpu); + + *r_dst = MASK_OUT_ABOVE_32(*r_dst - (((((mc68kcpu)->ir >> 9) - 1) & 7) + 1)); +} + + +static void m68k_op_subq_32_ai(m68000_base_device* mc68kcpu) +{ + uint32_t src = ((((mc68kcpu)->ir >> 9) - 1) & 7) + 1; + uint32_t ea = EA_AY_AI_32(mc68kcpu); + uint32_t dst = m68ki_read_32((mc68kcpu), ea); + uint32_t res = dst - src; + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_SUB_32(src, dst, res); + (mc68kcpu)->v_flag = VFLAG_SUB_32(src, dst, res); + + m68ki_write_32((mc68kcpu), ea, (mc68kcpu)->not_z_flag); +} + + +static void m68k_op_subq_32_pi(m68000_base_device* mc68kcpu) +{ + uint32_t src = ((((mc68kcpu)->ir >> 9) - 1) & 7) + 1; + uint32_t ea = EA_AY_PI_32(mc68kcpu); + uint32_t dst = m68ki_read_32((mc68kcpu), ea); + uint32_t res = dst - src; + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_SUB_32(src, dst, res); + (mc68kcpu)->v_flag = VFLAG_SUB_32(src, dst, res); + + m68ki_write_32((mc68kcpu), ea, (mc68kcpu)->not_z_flag); +} + + +static void m68k_op_subq_32_pd(m68000_base_device* mc68kcpu) +{ + uint32_t src = ((((mc68kcpu)->ir >> 9) - 1) & 7) + 1; + uint32_t ea = EA_AY_PD_32(mc68kcpu); + uint32_t dst = m68ki_read_32((mc68kcpu), ea); + uint32_t res = dst - src; + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_SUB_32(src, dst, res); + (mc68kcpu)->v_flag = VFLAG_SUB_32(src, dst, res); + + m68ki_write_32((mc68kcpu), ea, (mc68kcpu)->not_z_flag); +} + + +static void m68k_op_subq_32_di(m68000_base_device* mc68kcpu) +{ + uint32_t src = ((((mc68kcpu)->ir >> 9) - 1) & 7) + 1; + uint32_t ea = EA_AY_DI_32(mc68kcpu); + uint32_t dst = m68ki_read_32((mc68kcpu), ea); + uint32_t res = dst - src; + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_SUB_32(src, dst, res); + (mc68kcpu)->v_flag = VFLAG_SUB_32(src, dst, res); + + m68ki_write_32((mc68kcpu), ea, (mc68kcpu)->not_z_flag); +} + + +static void m68k_op_subq_32_ix(m68000_base_device* mc68kcpu) +{ + uint32_t src = ((((mc68kcpu)->ir >> 9) - 1) & 7) + 1; + uint32_t ea = EA_AY_IX_32(mc68kcpu); + uint32_t dst = m68ki_read_32((mc68kcpu), ea); + uint32_t res = dst - src; + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_SUB_32(src, dst, res); + (mc68kcpu)->v_flag = VFLAG_SUB_32(src, dst, res); + + m68ki_write_32((mc68kcpu), ea, (mc68kcpu)->not_z_flag); +} + + +static void m68k_op_subq_32_aw(m68000_base_device* mc68kcpu) +{ + uint32_t src = ((((mc68kcpu)->ir >> 9) - 1) & 7) + 1; + uint32_t ea = EA_AW_32(mc68kcpu); + uint32_t dst = m68ki_read_32((mc68kcpu), ea); + uint32_t res = dst - src; + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_SUB_32(src, dst, res); + (mc68kcpu)->v_flag = VFLAG_SUB_32(src, dst, res); + + m68ki_write_32((mc68kcpu), ea, (mc68kcpu)->not_z_flag); +} + + +static void m68k_op_subq_32_al(m68000_base_device* mc68kcpu) +{ + uint32_t src = ((((mc68kcpu)->ir >> 9) - 1) & 7) + 1; + uint32_t ea = EA_AL_32(mc68kcpu); + uint32_t dst = m68ki_read_32((mc68kcpu), ea); + uint32_t res = dst - src; + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_SUB_32(src, dst, res); + (mc68kcpu)->v_flag = VFLAG_SUB_32(src, dst, res); + + m68ki_write_32((mc68kcpu), ea, (mc68kcpu)->not_z_flag); +} + + +static void m68k_op_subx_8_rr(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &DX(mc68kcpu); + uint32_t src = MASK_OUT_ABOVE_8(DY(mc68kcpu)); + uint32_t dst = MASK_OUT_ABOVE_8(*r_dst); + uint32_t res = dst - src - XFLAG_AS_1(mc68kcpu); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_8(res); + (mc68kcpu)->v_flag = VFLAG_SUB_8(src, dst, res); + + res = MASK_OUT_ABOVE_8(res); + (mc68kcpu)->not_z_flag |= res; + + *r_dst = MASK_OUT_BELOW_8(*r_dst) | res; +} + + +static void m68k_op_subx_16_rr(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &DX(mc68kcpu); + uint32_t src = MASK_OUT_ABOVE_16(DY(mc68kcpu)); + uint32_t dst = MASK_OUT_ABOVE_16(*r_dst); + uint32_t res = dst - src - XFLAG_AS_1(mc68kcpu); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_16(res); + (mc68kcpu)->v_flag = VFLAG_SUB_16(src, dst, res); + + res = MASK_OUT_ABOVE_16(res); + (mc68kcpu)->not_z_flag |= res; + + *r_dst = MASK_OUT_BELOW_16(*r_dst) | res; +} + + +static void m68k_op_subx_32_rr(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &DX(mc68kcpu); + uint32_t src = DY(mc68kcpu); + uint32_t dst = *r_dst; + uint32_t res = dst - src - XFLAG_AS_1(mc68kcpu); + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_SUB_32(src, dst, res); + (mc68kcpu)->v_flag = VFLAG_SUB_32(src, dst, res); + + res = MASK_OUT_ABOVE_32(res); + (mc68kcpu)->not_z_flag |= res; + + *r_dst = res; +} + + +static void m68k_op_subx_8_mm_ax7(m68000_base_device* mc68kcpu) +{ + uint32_t src = OPER_AY_PD_8(mc68kcpu); + uint32_t ea = EA_A7_PD_8(mc68kcpu); + uint32_t dst = m68ki_read_8((mc68kcpu), ea); + uint32_t res = dst - src - XFLAG_AS_1(mc68kcpu); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_8(res); + (mc68kcpu)->v_flag = VFLAG_SUB_8(src, dst, res); + + res = MASK_OUT_ABOVE_8(res); + (mc68kcpu)->not_z_flag |= res; + + m68ki_write_8((mc68kcpu), ea, res); +} + + +static void m68k_op_subx_8_mm_ay7(m68000_base_device* mc68kcpu) +{ + uint32_t src = OPER_A7_PD_8(mc68kcpu); + uint32_t ea = EA_AX_PD_8(mc68kcpu); + uint32_t dst = m68ki_read_8((mc68kcpu), ea); + uint32_t res = dst - src - XFLAG_AS_1(mc68kcpu); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_8(res); + (mc68kcpu)->v_flag = VFLAG_SUB_8(src, dst, res); + + res = MASK_OUT_ABOVE_8(res); + (mc68kcpu)->not_z_flag |= res; + + m68ki_write_8((mc68kcpu), ea, res); +} + + +static void m68k_op_subx_8_mm_axy7(m68000_base_device* mc68kcpu) +{ + uint32_t src = OPER_A7_PD_8(mc68kcpu); + uint32_t ea = EA_A7_PD_8(mc68kcpu); + uint32_t dst = m68ki_read_8((mc68kcpu), ea); + uint32_t res = dst - src - XFLAG_AS_1(mc68kcpu); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_8(res); + (mc68kcpu)->v_flag = VFLAG_SUB_8(src, dst, res); + + res = MASK_OUT_ABOVE_8(res); + (mc68kcpu)->not_z_flag |= res; + + m68ki_write_8((mc68kcpu), ea, res); +} + + +static void m68k_op_subx_8_mm(m68000_base_device* mc68kcpu) +{ + uint32_t src = OPER_AY_PD_8(mc68kcpu); + uint32_t ea = EA_AX_PD_8(mc68kcpu); + uint32_t dst = m68ki_read_8((mc68kcpu), ea); + uint32_t res = dst - src - XFLAG_AS_1(mc68kcpu); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_8(res); + (mc68kcpu)->v_flag = VFLAG_SUB_8(src, dst, res); + + res = MASK_OUT_ABOVE_8(res); + (mc68kcpu)->not_z_flag |= res; + + m68ki_write_8((mc68kcpu), ea, res); +} + + +static void m68k_op_subx_16_mm(m68000_base_device* mc68kcpu) +{ + uint32_t src = OPER_AY_PD_16(mc68kcpu); + uint32_t ea = EA_AX_PD_16(mc68kcpu); + uint32_t dst = m68ki_read_16((mc68kcpu), ea); + uint32_t res = dst - src - XFLAG_AS_1(mc68kcpu); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_16(res); + (mc68kcpu)->v_flag = VFLAG_SUB_16(src, dst, res); + + res = MASK_OUT_ABOVE_16(res); + (mc68kcpu)->not_z_flag |= res; + + m68ki_write_16((mc68kcpu), ea, res); +} + + +static void m68k_op_subx_32_mm(m68000_base_device* mc68kcpu) +{ + uint32_t src = OPER_AY_PD_32(mc68kcpu); + uint32_t ea = EA_AX_PD_32(mc68kcpu); + uint32_t dst = m68ki_read_32((mc68kcpu), ea); + uint32_t res = dst - src - XFLAG_AS_1(mc68kcpu); + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->x_flag = (mc68kcpu)->c_flag = CFLAG_SUB_32(src, dst, res); + (mc68kcpu)->v_flag = VFLAG_SUB_32(src, dst, res); + + res = MASK_OUT_ABOVE_32(res); + (mc68kcpu)->not_z_flag |= res; + + m68ki_write_32((mc68kcpu), ea, res); +} + + +static void m68k_op_swap_32(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &DY(mc68kcpu); + + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(*r_dst<<16); + *r_dst = (*r_dst>>16) | (mc68kcpu)->not_z_flag; + + (mc68kcpu)->not_z_flag = *r_dst; + (mc68kcpu)->n_flag = NFLAG_32(*r_dst); + (mc68kcpu)->c_flag = CFLAG_CLEAR; + (mc68kcpu)->v_flag = VFLAG_CLEAR; +} + + +static void m68k_op_tas_8_d(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &DY(mc68kcpu); + + (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(*r_dst); + (mc68kcpu)->n_flag = NFLAG_8(*r_dst); + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + *r_dst |= 0x80; +} + + +static void m68k_op_tas_8_ai(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AY_AI_8(mc68kcpu); + uint32_t dst = m68ki_read_8((mc68kcpu), ea); + + (mc68kcpu)->not_z_flag = dst; + (mc68kcpu)->n_flag = NFLAG_8(dst); + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + + /* On the 68000 and 68010, the TAS instruction uses a unique bus cycle that may have + side effects (e.g. delaying DMA) or may fail to write back at all depending on the + bus implementation. + In particular, the Genesis/Megadrive games Gargoyles and Ex-Mutants need the TAS + to fail to write back in order to function properly. */ +/* if (CPU_TYPE_IS_010_LESS((mc68kcpu)->cpu_type) && !(mc68kcpu)->tas_write_callback.isnull()) + ((mc68kcpu)->tas_write_callback)(*(mc68kcpu)->program, ea, dst | 0x80, 0xff); + else + m68ki_write_8((mc68kcpu), ea, dst | 0x80);*/ +} + + +static void m68k_op_tas_8_pi(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AY_PI_8(mc68kcpu); + uint32_t dst = m68ki_read_8((mc68kcpu), ea); + + (mc68kcpu)->not_z_flag = dst; + (mc68kcpu)->n_flag = NFLAG_8(dst); + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + + /* On the 68000 and 68010, the TAS instruction uses a unique bus cycle that may have + side effects (e.g. delaying DMA) or may fail to write back at all depending on the + bus implementation. + In particular, the Genesis/Megadrive games Gargoyles and Ex-Mutants need the TAS + to fail to write back in order to function properly. */ + /*if (CPU_TYPE_IS_010_LESS((mc68kcpu)->cpu_type) && !(mc68kcpu)->tas_write_callback.isnull()) + ((mc68kcpu)->tas_write_callback)(*(mc68kcpu)->program, ea, dst | 0x80, 0xff); + else + m68ki_write_8((mc68kcpu), ea, dst | 0x80);*/ +} + + +static void m68k_op_tas_8_pi7(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_A7_PI_8(mc68kcpu); + uint32_t dst = m68ki_read_8((mc68kcpu), ea); + + (mc68kcpu)->not_z_flag = dst; + (mc68kcpu)->n_flag = NFLAG_8(dst); + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + + /* On the 68000 and 68010, the TAS instruction uses a unique bus cycle that may have + side effects (e.g. delaying DMA) or may fail to write back at all depending on the + bus implementation. + In particular, the Genesis/Megadrive games Gargoyles and Ex-Mutants need the TAS + to fail to write back in order to function properly. */ + /*if (CPU_TYPE_IS_010_LESS((mc68kcpu)->cpu_type) && !(mc68kcpu)->tas_write_callback.isnull()) + ((mc68kcpu)->tas_write_callback)(*(mc68kcpu)->program, ea, dst | 0x80, 0xff); + else + m68ki_write_8((mc68kcpu), ea, dst | 0x80);*/ +} + + +static void m68k_op_tas_8_pd(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AY_PD_8(mc68kcpu); + uint32_t dst = m68ki_read_8((mc68kcpu), ea); + + (mc68kcpu)->not_z_flag = dst; + (mc68kcpu)->n_flag = NFLAG_8(dst); + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + + /* On the 68000 and 68010, the TAS instruction uses a unique bus cycle that may have + side effects (e.g. delaying DMA) or may fail to write back at all depending on the + bus implementation. + In particular, the Genesis/Megadrive games Gargoyles and Ex-Mutants need the TAS + to fail to write back in order to function properly. */ + /*if (CPU_TYPE_IS_010_LESS((mc68kcpu)->cpu_type) && !(mc68kcpu)->tas_write_callback.isnull()) + ((mc68kcpu)->tas_write_callback)(*(mc68kcpu)->program, ea, dst | 0x80, 0xff); + else + m68ki_write_8((mc68kcpu), ea, dst | 0x80);*/ +} + + +static void m68k_op_tas_8_pd7(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_A7_PD_8(mc68kcpu); + uint32_t dst = m68ki_read_8((mc68kcpu), ea); + + (mc68kcpu)->not_z_flag = dst; + (mc68kcpu)->n_flag = NFLAG_8(dst); + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + + /* On the 68000 and 68010, the TAS instruction uses a unique bus cycle that may have + side effects (e.g. delaying DMA) or may fail to write back at all depending on the + bus implementation. + In particular, the Genesis/Megadrive games Gargoyles and Ex-Mutants need the TAS + to fail to write back in order to function properly. */ + /*if (CPU_TYPE_IS_010_LESS((mc68kcpu)->cpu_type) && !(mc68kcpu)->tas_write_callback.isnull()) + ((mc68kcpu)->tas_write_callback)(*(mc68kcpu)->program, ea, dst | 0x80, 0xff); + else + m68ki_write_8((mc68kcpu), ea, dst | 0x80);*/ +} + + +static void m68k_op_tas_8_di(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AY_DI_8(mc68kcpu); + uint32_t dst = m68ki_read_8((mc68kcpu), ea); + + (mc68kcpu)->not_z_flag = dst; + (mc68kcpu)->n_flag = NFLAG_8(dst); + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + + /* On the 68000 and 68010, the TAS instruction uses a unique bus cycle that may have + side effects (e.g. delaying DMA) or may fail to write back at all depending on the + bus implementation. + In particular, the Genesis/Megadrive games Gargoyles and Ex-Mutants need the TAS + to fail to write back in order to function properly. */ + /*if (CPU_TYPE_IS_010_LESS((mc68kcpu)->cpu_type) && !(mc68kcpu)->tas_write_callback.isnull()) + ((mc68kcpu)->tas_write_callback)(*(mc68kcpu)->program, ea, dst | 0x80, 0xff); + else + m68ki_write_8((mc68kcpu), ea, dst | 0x80);*/ +} + + +static void m68k_op_tas_8_ix(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AY_IX_8(mc68kcpu); + uint32_t dst = m68ki_read_8((mc68kcpu), ea); + + (mc68kcpu)->not_z_flag = dst; + (mc68kcpu)->n_flag = NFLAG_8(dst); + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + + /* On the 68000 and 68010, the TAS instruction uses a unique bus cycle that may have + side effects (e.g. delaying DMA) or may fail to write back at all depending on the + bus implementation. + In particular, the Genesis/Megadrive games Gargoyles and Ex-Mutants need the TAS + to fail to write back in order to function properly. */ + /*if (CPU_TYPE_IS_010_LESS((mc68kcpu)->cpu_type) && !(mc68kcpu)->tas_write_callback.isnull()) + ((mc68kcpu)->tas_write_callback)(*(mc68kcpu)->program, ea, dst | 0x80, 0xff); + else + m68ki_write_8((mc68kcpu), ea, dst | 0x80);*/ +} + + +static void m68k_op_tas_8_aw(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AW_8(mc68kcpu); + uint32_t dst = m68ki_read_8((mc68kcpu), ea); + + (mc68kcpu)->not_z_flag = dst; + (mc68kcpu)->n_flag = NFLAG_8(dst); + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + + /* On the 68000 and 68010, the TAS instruction uses a unique bus cycle that may have + side effects (e.g. delaying DMA) or may fail to write back at all depending on the + bus implementation. + In particular, the Genesis/Megadrive games Gargoyles and Ex-Mutants need the TAS + to fail to write back in order to function properly. */ + /*if (CPU_TYPE_IS_010_LESS((mc68kcpu)->cpu_type) && !(mc68kcpu)->tas_write_callback.isnull()) + ((mc68kcpu)->tas_write_callback)(*(mc68kcpu)->program, ea, dst | 0x80, 0xff); + else + m68ki_write_8((mc68kcpu), ea, dst | 0x80);*/ +} + + +static void m68k_op_tas_8_al(m68000_base_device* mc68kcpu) +{ + uint32_t ea = EA_AL_8(mc68kcpu); + uint32_t dst = m68ki_read_8((mc68kcpu), ea); + + (mc68kcpu)->not_z_flag = dst; + (mc68kcpu)->n_flag = NFLAG_8(dst); + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + + /* On the 68000 and 68010, the TAS instruction uses a unique bus cycle that may have + side effects (e.g. delaying DMA) or may fail to write back at all depending on the + bus implementation. + In particular, the Genesis/Megadrive games Gargoyles and Ex-Mutants need the TAS + to fail to write back in order to function properly. */ + /*if (CPU_TYPE_IS_010_LESS((mc68kcpu)->cpu_type) && !(mc68kcpu)->tas_write_callback.isnull()) + ((mc68kcpu)->tas_write_callback)(*(mc68kcpu)->program, ea, dst | 0x80, 0xff); + else + m68ki_write_8((mc68kcpu), ea, dst | 0x80);*/ +} + + +static void m68k_op_trap(m68000_base_device* mc68kcpu) +{ + /* Trap#n stacks exception frame type 0 */ + m68ki_exception_trapN((mc68kcpu), EXCEPTION_TRAP_BASE + ((mc68kcpu)->ir & 0xf)); /* HJB 990403 */ +} + + +static void m68k_op_trapt(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + m68ki_exception_trap((mc68kcpu), EXCEPTION_TRAPV); /* HJB 990403 */ + return; + } + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_trapt_16(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + m68ki_exception_trap((mc68kcpu), EXCEPTION_TRAPV); /* HJB 990403 */ + return; + } + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_trapt_32(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + m68ki_exception_trap((mc68kcpu), EXCEPTION_TRAPV); /* HJB 990403 */ + return; + } + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_trapf(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + return; + } + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_trapf_16(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + REG_PC(mc68kcpu) += 2; + return; + } + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_trapf_32(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + REG_PC(mc68kcpu) += 4; + return; + } + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_traphi(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + if(COND_HI(mc68kcpu)) + m68ki_exception_trap((mc68kcpu), EXCEPTION_TRAPV); /* HJB 990403 */ + return; + } + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_trapls(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + if(COND_LS(mc68kcpu)) + m68ki_exception_trap((mc68kcpu), EXCEPTION_TRAPV); /* HJB 990403 */ + return; + } + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_trapcc(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + if(COND_CC(mc68kcpu)) + m68ki_exception_trap((mc68kcpu), EXCEPTION_TRAPV); /* HJB 990403 */ + return; + } + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_trapcs(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + if(COND_CS(mc68kcpu)) + m68ki_exception_trap((mc68kcpu), EXCEPTION_TRAPV); /* HJB 990403 */ + return; + } + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_trapne(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + if(COND_NE(mc68kcpu)) + m68ki_exception_trap((mc68kcpu), EXCEPTION_TRAPV); /* HJB 990403 */ + return; + } + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_trapeq(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + if(COND_EQ(mc68kcpu)) + m68ki_exception_trap((mc68kcpu), EXCEPTION_TRAPV); /* HJB 990403 */ + return; + } + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_trapvc(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + if(COND_VC(mc68kcpu)) + m68ki_exception_trap((mc68kcpu), EXCEPTION_TRAPV); /* HJB 990403 */ + return; + } + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_trapvs(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + if(COND_VS(mc68kcpu)) + m68ki_exception_trap((mc68kcpu), EXCEPTION_TRAPV); /* HJB 990403 */ + return; + } + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_trappl(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + if(COND_PL(mc68kcpu)) + m68ki_exception_trap((mc68kcpu), EXCEPTION_TRAPV); /* HJB 990403 */ + return; + } + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_trapmi(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + if(COND_MI(mc68kcpu)) + m68ki_exception_trap((mc68kcpu), EXCEPTION_TRAPV); /* HJB 990403 */ + return; + } + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_trapge(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + if(COND_GE(mc68kcpu)) + m68ki_exception_trap((mc68kcpu), EXCEPTION_TRAPV); /* HJB 990403 */ + return; + } + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_traplt(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + if(COND_LT(mc68kcpu)) + m68ki_exception_trap((mc68kcpu), EXCEPTION_TRAPV); /* HJB 990403 */ + return; + } + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_trapgt(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + if(COND_GT(mc68kcpu)) + m68ki_exception_trap((mc68kcpu), EXCEPTION_TRAPV); /* HJB 990403 */ + return; + } + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_traple(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + if(COND_LE(mc68kcpu)) + m68ki_exception_trap((mc68kcpu), EXCEPTION_TRAPV); /* HJB 990403 */ + return; + } + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_traphi_16(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + if(COND_HI(mc68kcpu)) + { + m68ki_exception_trap((mc68kcpu), EXCEPTION_TRAPV); /* HJB 990403 */ + return; + } + REG_PC(mc68kcpu) += 2; + return; + } + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_trapls_16(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + if(COND_LS(mc68kcpu)) + { + m68ki_exception_trap((mc68kcpu), EXCEPTION_TRAPV); /* HJB 990403 */ + return; + } + REG_PC(mc68kcpu) += 2; + return; + } + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_trapcc_16(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + if(COND_CC(mc68kcpu)) + { + m68ki_exception_trap((mc68kcpu), EXCEPTION_TRAPV); /* HJB 990403 */ + return; + } + REG_PC(mc68kcpu) += 2; + return; + } + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_trapcs_16(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + if(COND_CS(mc68kcpu)) + { + m68ki_exception_trap((mc68kcpu), EXCEPTION_TRAPV); /* HJB 990403 */ + return; + } + REG_PC(mc68kcpu) += 2; + return; + } + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_trapne_16(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + if(COND_NE(mc68kcpu)) + { + m68ki_exception_trap((mc68kcpu), EXCEPTION_TRAPV); /* HJB 990403 */ + return; + } + REG_PC(mc68kcpu) += 2; + return; + } + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_trapeq_16(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + if(COND_EQ(mc68kcpu)) + { + m68ki_exception_trap((mc68kcpu), EXCEPTION_TRAPV); /* HJB 990403 */ + return; + } + REG_PC(mc68kcpu) += 2; + return; + } + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_trapvc_16(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + if(COND_VC(mc68kcpu)) + { + m68ki_exception_trap((mc68kcpu), EXCEPTION_TRAPV); /* HJB 990403 */ + return; + } + REG_PC(mc68kcpu) += 2; + return; + } + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_trapvs_16(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + if(COND_VS(mc68kcpu)) + { + m68ki_exception_trap((mc68kcpu), EXCEPTION_TRAPV); /* HJB 990403 */ + return; + } + REG_PC(mc68kcpu) += 2; + return; + } + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_trappl_16(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + if(COND_PL(mc68kcpu)) + { + m68ki_exception_trap((mc68kcpu), EXCEPTION_TRAPV); /* HJB 990403 */ + return; + } + REG_PC(mc68kcpu) += 2; + return; + } + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_trapmi_16(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + if(COND_MI(mc68kcpu)) + { + m68ki_exception_trap((mc68kcpu), EXCEPTION_TRAPV); /* HJB 990403 */ + return; + } + REG_PC(mc68kcpu) += 2; + return; + } + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_trapge_16(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + if(COND_GE(mc68kcpu)) + { + m68ki_exception_trap((mc68kcpu), EXCEPTION_TRAPV); /* HJB 990403 */ + return; + } + REG_PC(mc68kcpu) += 2; + return; + } + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_traplt_16(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + if(COND_LT(mc68kcpu)) + { + m68ki_exception_trap((mc68kcpu), EXCEPTION_TRAPV); /* HJB 990403 */ + return; + } + REG_PC(mc68kcpu) += 2; + return; + } + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_trapgt_16(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + if(COND_GT(mc68kcpu)) + { + m68ki_exception_trap((mc68kcpu), EXCEPTION_TRAPV); /* HJB 990403 */ + return; + } + REG_PC(mc68kcpu) += 2; + return; + } + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_traple_16(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + if(COND_LE(mc68kcpu)) + { + m68ki_exception_trap((mc68kcpu), EXCEPTION_TRAPV); /* HJB 990403 */ + return; + } + REG_PC(mc68kcpu) += 2; + return; + } + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_traphi_32(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + if(COND_HI(mc68kcpu)) + { + m68ki_exception_trap((mc68kcpu), EXCEPTION_TRAPV); /* HJB 990403 */ + return; + } + REG_PC(mc68kcpu) += 4; + return; + } + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_trapls_32(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + if(COND_LS(mc68kcpu)) + { + m68ki_exception_trap((mc68kcpu), EXCEPTION_TRAPV); /* HJB 990403 */ + return; + } + REG_PC(mc68kcpu) += 4; + return; + } + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_trapcc_32(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + if(COND_CC(mc68kcpu)) + { + m68ki_exception_trap((mc68kcpu), EXCEPTION_TRAPV); /* HJB 990403 */ + return; + } + REG_PC(mc68kcpu) += 4; + return; + } + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_trapcs_32(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + if(COND_CS(mc68kcpu)) + { + m68ki_exception_trap((mc68kcpu), EXCEPTION_TRAPV); /* HJB 990403 */ + return; + } + REG_PC(mc68kcpu) += 4; + return; + } + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_trapne_32(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + if(COND_NE(mc68kcpu)) + { + m68ki_exception_trap((mc68kcpu), EXCEPTION_TRAPV); /* HJB 990403 */ + return; + } + REG_PC(mc68kcpu) += 4; + return; + } + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_trapeq_32(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + if(COND_EQ(mc68kcpu)) + { + m68ki_exception_trap((mc68kcpu), EXCEPTION_TRAPV); /* HJB 990403 */ + return; + } + REG_PC(mc68kcpu) += 4; + return; + } + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_trapvc_32(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + if(COND_VC(mc68kcpu)) + { + m68ki_exception_trap((mc68kcpu), EXCEPTION_TRAPV); /* HJB 990403 */ + return; + } + REG_PC(mc68kcpu) += 4; + return; + } + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_trapvs_32(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + if(COND_VS(mc68kcpu)) + { + m68ki_exception_trap((mc68kcpu), EXCEPTION_TRAPV); /* HJB 990403 */ + return; + } + REG_PC(mc68kcpu) += 4; + return; + } + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_trappl_32(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + if(COND_PL(mc68kcpu)) + { + m68ki_exception_trap((mc68kcpu), EXCEPTION_TRAPV); /* HJB 990403 */ + return; + } + REG_PC(mc68kcpu) += 4; + return; + } + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_trapmi_32(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + if(COND_MI(mc68kcpu)) + { + m68ki_exception_trap((mc68kcpu), EXCEPTION_TRAPV); /* HJB 990403 */ + return; + } + REG_PC(mc68kcpu) += 4; + return; + } + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_trapge_32(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + if(COND_GE(mc68kcpu)) + { + m68ki_exception_trap((mc68kcpu), EXCEPTION_TRAPV); /* HJB 990403 */ + return; + } + REG_PC(mc68kcpu) += 4; + return; + } + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_traplt_32(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + if(COND_LT(mc68kcpu)) + { + m68ki_exception_trap((mc68kcpu), EXCEPTION_TRAPV); /* HJB 990403 */ + return; + } + REG_PC(mc68kcpu) += 4; + return; + } + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_trapgt_32(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + if(COND_GT(mc68kcpu)) + { + m68ki_exception_trap((mc68kcpu), EXCEPTION_TRAPV); /* HJB 990403 */ + return; + } + REG_PC(mc68kcpu) += 4; + return; + } + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_traple_32(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + if(COND_LE(mc68kcpu)) + { + m68ki_exception_trap((mc68kcpu), EXCEPTION_TRAPV); /* HJB 990403 */ + return; + } + REG_PC(mc68kcpu) += 4; + return; + } + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_trapv(m68000_base_device* mc68kcpu) +{ + if(COND_VC(mc68kcpu)) + { + return; + } + m68ki_exception_trap((mc68kcpu), EXCEPTION_TRAPV); /* HJB 990403 */ +} + + +static void m68k_op_tst_8_d(m68000_base_device* mc68kcpu) +{ + uint32_t res = MASK_OUT_ABOVE_8(DY(mc68kcpu)); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_tst_8_ai(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_AY_AI_8(mc68kcpu); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_tst_8_pi(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_AY_PI_8(mc68kcpu); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_tst_8_pi7(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_A7_PI_8(mc68kcpu); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_tst_8_pd(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_AY_PD_8(mc68kcpu); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_tst_8_pd7(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_A7_PD_8(mc68kcpu); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_tst_8_di(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_AY_DI_8(mc68kcpu); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_tst_8_ix(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_AY_IX_8(mc68kcpu); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_tst_8_aw(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_AW_8(mc68kcpu); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_tst_8_al(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_AL_8(mc68kcpu); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_tst_8_pcdi(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + uint32_t res = OPER_PCDI_8(mc68kcpu); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + return; + } + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_tst_8_pcix(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + uint32_t res = OPER_PCIX_8(mc68kcpu); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + return; + } + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_tst_8_i(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + uint32_t res = OPER_I_8(mc68kcpu); + + (mc68kcpu)->n_flag = NFLAG_8(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + return; + } + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_tst_16_d(m68000_base_device* mc68kcpu) +{ + uint32_t res = MASK_OUT_ABOVE_16(DY(mc68kcpu)); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_tst_16_a(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + uint32_t res = MAKE_INT_16(AY(mc68kcpu)); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + return; + } + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_tst_16_ai(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_AY_AI_16(mc68kcpu); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_tst_16_pi(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_AY_PI_16(mc68kcpu); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_tst_16_pd(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_AY_PD_16(mc68kcpu); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_tst_16_di(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_AY_DI_16(mc68kcpu); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_tst_16_ix(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_AY_IX_16(mc68kcpu); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_tst_16_aw(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_AW_16(mc68kcpu); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_tst_16_al(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_AL_16(mc68kcpu); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_tst_16_pcdi(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + uint32_t res = OPER_PCDI_16(mc68kcpu); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + return; + } + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_tst_16_pcix(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + uint32_t res = OPER_PCIX_16(mc68kcpu); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + return; + } + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_tst_16_i(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + uint32_t res = OPER_I_16(mc68kcpu); + + (mc68kcpu)->n_flag = NFLAG_16(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + return; + } + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_tst_32_d(m68000_base_device* mc68kcpu) +{ + uint32_t res = DY(mc68kcpu); + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_tst_32_a(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + uint32_t res = AY(mc68kcpu); + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + return; + } + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_tst_32_ai(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_AY_AI_32(mc68kcpu); + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_tst_32_pi(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_AY_PI_32(mc68kcpu); + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_tst_32_pd(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_AY_PD_32(mc68kcpu); + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_tst_32_di(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_AY_DI_32(mc68kcpu); + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_tst_32_ix(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_AY_IX_32(mc68kcpu); + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_tst_32_aw(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_AW_32(mc68kcpu); + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_tst_32_al(m68000_base_device* mc68kcpu) +{ + uint32_t res = OPER_AL_32(mc68kcpu); + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; +} + + +static void m68k_op_tst_32_pcdi(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + uint32_t res = OPER_PCDI_32(mc68kcpu); + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + return; + } + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_tst_32_pcix(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + uint32_t res = OPER_PCIX_32(mc68kcpu); + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + return; + } + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_tst_32_i(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + uint32_t res = OPER_I_32(mc68kcpu); + + (mc68kcpu)->n_flag = NFLAG_32(res); + (mc68kcpu)->not_z_flag = res; + (mc68kcpu)->v_flag = VFLAG_CLEAR; + (mc68kcpu)->c_flag = CFLAG_CLEAR; + return; + } + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_unlk_32_a7(m68000_base_device* mc68kcpu) +{ + REG_A(mc68kcpu)[7] = m68ki_read_32((mc68kcpu), REG_A(mc68kcpu)[7]); +} + + +static void m68k_op_unlk_32(m68000_base_device* mc68kcpu) +{ + uint32_t* r_dst = &AY(mc68kcpu); + + REG_A(mc68kcpu)[7] = *r_dst; + *r_dst = m68ki_pull_32(mc68kcpu); +} + + +static void m68k_op_unpk_16_rr(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + /* Note: DX(mc68kcpu) and DY(mc68kcpu) are reversed in Motorola's docs */ + uint32_t src = DY(mc68kcpu); + uint32_t* r_dst = &DX(mc68kcpu); + + *r_dst = MASK_OUT_BELOW_16(*r_dst) | (((((src << 4) & 0x0f00) | (src & 0x000f)) + OPER_I_16(mc68kcpu)) & 0xffff); + return; + } + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_unpk_16_mm_ax7(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + /* Note: AX and AY are reversed in Motorola's docs */ + uint32_t src = OPER_AY_PD_8(mc68kcpu); + uint32_t ea_dst; + + src = (((src << 4) & 0x0f00) | (src & 0x000f)) + OPER_I_16(mc68kcpu); + ea_dst = EA_A7_PD_8(mc68kcpu); + m68ki_write_8((mc68kcpu), ea_dst, src & 0xff); + ea_dst = EA_A7_PD_8(mc68kcpu); + m68ki_write_8((mc68kcpu), ea_dst, (src >> 8) & 0xff); + return; + } + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_unpk_16_mm_ay7(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + /* Note: AX and AY are reversed in Motorola's docs */ + uint32_t src = OPER_A7_PD_8(mc68kcpu); + uint32_t ea_dst; + + src = (((src << 4) & 0x0f00) | (src & 0x000f)) + OPER_I_16(mc68kcpu); + ea_dst = EA_AX_PD_8(mc68kcpu); + m68ki_write_8((mc68kcpu), ea_dst, src & 0xff); + ea_dst = EA_AX_PD_8(mc68kcpu); + m68ki_write_8((mc68kcpu), ea_dst, (src >> 8) & 0xff); + return; + } + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_unpk_16_mm_axy7(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + uint32_t src = OPER_A7_PD_8(mc68kcpu); + uint32_t ea_dst; + + src = (((src << 4) & 0x0f00) | (src & 0x000f)) + OPER_I_16(mc68kcpu); + ea_dst = EA_A7_PD_8(mc68kcpu); + m68ki_write_8((mc68kcpu), ea_dst, src & 0xff); + ea_dst = EA_A7_PD_8(mc68kcpu); + m68ki_write_8((mc68kcpu), ea_dst, (src >> 8) & 0xff); + return; + } + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_unpk_16_mm(m68000_base_device* mc68kcpu) +{ + if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) + { + /* Note: AX and AY are reversed in Motorola's docs */ + uint32_t src = OPER_AY_PD_8(mc68kcpu); + uint32_t ea_dst; + + src = (((src << 4) & 0x0f00) | (src & 0x000f)) + OPER_I_16(mc68kcpu); + ea_dst = EA_AX_PD_8(mc68kcpu); + m68ki_write_8((mc68kcpu), ea_dst, src & 0xff); + ea_dst = EA_AX_PD_8(mc68kcpu); + m68ki_write_8((mc68kcpu), ea_dst, (src >> 8) & 0xff); + return; + } + m68ki_exception_illegal(mc68kcpu); +} + + +static void m68k_op_cinv_32(m68000_base_device* mc68kcpu) +{ + m68ki_exception_1111(mc68kcpu); +} + + +static void m68k_op_cpush_32(m68000_base_device* mc68kcpu) +{ + + m68ki_exception_1111(mc68kcpu); +} + + +/* ======================================================================== */ +/* ============================== END OF FILE ============================= */ +/* ======================================================================== */ + + +/* ======================================================================== */ +/* ========================= OPCODE TABLE BUILDER ========================= */ +/* ======================================================================== */ + +#include "m68kops.h" + +#define NUM_CPU_TYPES 7 + +void (*m68ki_instruction_jump_table[NUM_CPU_TYPES][0x10000])(m68000_base_device *m68k); /* opcode handler jump table */ +unsigned char m68ki_cycles[NUM_CPU_TYPES][0x10000]; /* Cycles used by CPU type */ + +/* This is used to generate the opcode handler jump table */ +typedef struct +{ + void (*opcode_handler)(m68000_base_device *m68k); /* handler function */ + unsigned int mask; /* mask on opcode */ + unsigned int match; /* what to match after masking */ + unsigned char cycles[NUM_CPU_TYPES]; /* cycles each cpu type takes */ +} opcode_handler_struct; + + +/* Opcode handler table */ +static const opcode_handler_struct m68k_opcode_handler_table[] = +{ +/* function mask match 000 010 020 040 */ + + + {m68k_op_1010, 0xf000, 0xa000, { 4, 4, 4, 4, 4, 4, 4}}, + {m68k_op_1111, 0xf000, 0xf000, { 4, 4, 4, 4, 4, 4, 4}}, + {m68k_op_moveq_32, 0xf100, 0x7000, { 4, 4, 2, 2, 2, 2, 2}}, + {m68k_op_cpbcc_32, 0xf180, 0xf080, {255, 255, 4, 4, 255, 255, 255}}, + {m68k_op_cpgen_32, 0xf1c0, 0xf000, {255, 255, 4, 4, 255, 255, 255}}, + {m68k_op_cpscc_32, 0xf1c0, 0xf040, {255, 255, 4, 4, 255, 255, 255}}, + {m68k_op_pmmu_32, 0xfe00, 0xf000, {255, 255, 8, 8, 8, 8, 8}}, + {m68k_op_bra_8, 0xff00, 0x6000, { 10, 10, 10, 10, 10, 10, 10}}, + {m68k_op_bsr_8, 0xff00, 0x6100, { 18, 18, 7, 7, 7, 7, 7}}, + {m68k_op_bhi_8, 0xff00, 0x6200, { 10, 10, 6, 6, 6, 6, 6}}, + {m68k_op_bls_8, 0xff00, 0x6300, { 10, 10, 6, 6, 6, 6, 6}}, + {m68k_op_bcc_8, 0xff00, 0x6400, { 10, 10, 6, 6, 6, 6, 6}}, + {m68k_op_bcs_8, 0xff00, 0x6500, { 10, 10, 6, 6, 6, 6, 6}}, + {m68k_op_bne_8, 0xff00, 0x6600, { 10, 10, 6, 6, 6, 6, 6}}, + {m68k_op_beq_8, 0xff00, 0x6700, { 10, 10, 6, 6, 6, 6, 6}}, + {m68k_op_bvc_8, 0xff00, 0x6800, { 10, 10, 6, 6, 6, 6, 6}}, + {m68k_op_bvs_8, 0xff00, 0x6900, { 10, 10, 6, 6, 6, 6, 6}}, + {m68k_op_bpl_8, 0xff00, 0x6a00, { 10, 10, 6, 6, 6, 6, 6}}, + {m68k_op_bmi_8, 0xff00, 0x6b00, { 10, 10, 6, 6, 6, 6, 6}}, + {m68k_op_bge_8, 0xff00, 0x6c00, { 10, 10, 6, 6, 6, 6, 6}}, + {m68k_op_blt_8, 0xff00, 0x6d00, { 10, 10, 6, 6, 6, 6, 6}}, + {m68k_op_bgt_8, 0xff00, 0x6e00, { 10, 10, 6, 6, 6, 6, 6}}, + {m68k_op_ble_8, 0xff00, 0x6f00, { 10, 10, 6, 6, 6, 6, 6}}, + {m68k_op_040fpu0_32, 0xff00, 0xf200, {255, 255, 0, 0, 0, 0, 255}}, + {m68k_op_040fpu1_32, 0xff00, 0xf300, {255, 255, 0, 0, 0, 0, 255}}, + {m68k_op_cinv_32, 0xff20, 0xf400, {255, 255, 255, 255, 16, 255, 255}}, + {m68k_op_cpush_32, 0xff20, 0xf420, {255, 255, 255, 255, 16, 255, 255}}, + {m68k_op_btst_32_r_d, 0xf1f8, 0x0100, { 6, 6, 4, 4, 4, 4, 4}}, + {m68k_op_movep_16_er, 0xf1f8, 0x0108, { 16, 16, 12, 12, 12, 12, 12}}, + {m68k_op_btst_8_r_ai, 0xf1f8, 0x0110, { 8, 8, 8, 8, 8, 8, 4}}, + {m68k_op_btst_8_r_pi, 0xf1f8, 0x0118, { 8, 8, 8, 8, 8, 8, 4}}, + {m68k_op_btst_8_r_pd, 0xf1f8, 0x0120, { 10, 10, 9, 9, 9, 9, 4}}, + {m68k_op_btst_8_r_di, 0xf1f8, 0x0128, { 12, 12, 9, 9, 9, 9, 4}}, + {m68k_op_btst_8_r_ix, 0xf1f8, 0x0130, { 14, 14, 11, 11, 11, 11, 4}}, + {m68k_op_bchg_32_r_d, 0xf1f8, 0x0140, { 8, 8, 4, 4, 4, 4, 4}}, + {m68k_op_movep_32_er, 0xf1f8, 0x0148, { 24, 24, 18, 18, 18, 18, 18}}, + {m68k_op_bchg_8_r_ai, 0xf1f8, 0x0150, { 12, 12, 8, 8, 8, 8, 4}}, + {m68k_op_bchg_8_r_pi, 0xf1f8, 0x0158, { 12, 12, 8, 8, 8, 8, 4}}, + {m68k_op_bchg_8_r_pd, 0xf1f8, 0x0160, { 14, 14, 9, 9, 9, 9, 4}}, + {m68k_op_bchg_8_r_di, 0xf1f8, 0x0168, { 16, 16, 9, 9, 9, 9, 4}}, + {m68k_op_bchg_8_r_ix, 0xf1f8, 0x0170, { 18, 18, 11, 11, 11, 11, 4}}, + {m68k_op_bclr_32_r_d, 0xf1f8, 0x0180, { 10, 10, 4, 4, 4, 4, 4}}, + {m68k_op_movep_16_re, 0xf1f8, 0x0188, { 16, 16, 11, 11, 11, 11, 11}}, + {m68k_op_bclr_8_r_ai, 0xf1f8, 0x0190, { 12, 14, 8, 8, 8, 8, 4}}, + {m68k_op_bclr_8_r_pi, 0xf1f8, 0x0198, { 12, 14, 8, 8, 8, 8, 4}}, + {m68k_op_bclr_8_r_pd, 0xf1f8, 0x01a0, { 14, 16, 9, 9, 9, 9, 4}}, + {m68k_op_bclr_8_r_di, 0xf1f8, 0x01a8, { 16, 18, 9, 9, 9, 9, 4}}, + {m68k_op_bclr_8_r_ix, 0xf1f8, 0x01b0, { 18, 20, 11, 11, 11, 11, 4}}, + {m68k_op_bset_32_r_d, 0xf1f8, 0x01c0, { 8, 8, 4, 4, 4, 4, 4}}, + {m68k_op_movep_32_re, 0xf1f8, 0x01c8, { 24, 24, 17, 17, 17, 17, 17}}, + {m68k_op_bset_8_r_ai, 0xf1f8, 0x01d0, { 12, 12, 8, 8, 8, 8, 4}}, + {m68k_op_bset_8_r_pi, 0xf1f8, 0x01d8, { 12, 12, 8, 8, 8, 8, 4}}, + {m68k_op_bset_8_r_pd, 0xf1f8, 0x01e0, { 14, 14, 9, 9, 9, 9, 4}}, + {m68k_op_bset_8_r_di, 0xf1f8, 0x01e8, { 16, 16, 9, 9, 9, 9, 4}}, + {m68k_op_bset_8_r_ix, 0xf1f8, 0x01f0, { 18, 18, 11, 11, 11, 11, 4}}, + {m68k_op_move_8_d_d, 0xf1f8, 0x1000, { 4, 4, 2, 2, 2, 2, 2}}, + {m68k_op_move_8_d_ai, 0xf1f8, 0x1010, { 8, 8, 6, 6, 6, 6, 2}}, + {m68k_op_move_8_d_pi, 0xf1f8, 0x1018, { 8, 8, 6, 6, 6, 6, 2}}, + {m68k_op_move_8_d_pd, 0xf1f8, 0x1020, { 10, 10, 7, 7, 7, 7, 2}}, + {m68k_op_move_8_d_di, 0xf1f8, 0x1028, { 12, 12, 7, 7, 7, 7, 2}}, + {m68k_op_move_8_d_ix, 0xf1f8, 0x1030, { 14, 14, 9, 9, 9, 9, 2}}, + {m68k_op_move_8_ai_d, 0xf1f8, 0x1080, { 8, 8, 4, 4, 4, 4, 4}}, + {m68k_op_move_8_ai_ai, 0xf1f8, 0x1090, { 12, 12, 8, 8, 8, 8, 4}}, + {m68k_op_move_8_ai_pi, 0xf1f8, 0x1098, { 12, 12, 8, 8, 8, 8, 4}}, + {m68k_op_move_8_ai_pd, 0xf1f8, 0x10a0, { 14, 14, 9, 9, 9, 9, 4}}, + {m68k_op_move_8_ai_di, 0xf1f8, 0x10a8, { 16, 16, 9, 9, 9, 9, 4}}, + {m68k_op_move_8_ai_ix, 0xf1f8, 0x10b0, { 18, 18, 11, 11, 11, 11, 4}}, + {m68k_op_move_8_pi_d, 0xf1f8, 0x10c0, { 8, 8, 4, 4, 4, 4, 4}}, + {m68k_op_move_8_pi_ai, 0xf1f8, 0x10d0, { 12, 12, 8, 8, 8, 8, 4}}, + {m68k_op_move_8_pi_pi, 0xf1f8, 0x10d8, { 12, 12, 8, 8, 8, 8, 4}}, + {m68k_op_move_8_pi_pd, 0xf1f8, 0x10e0, { 14, 14, 9, 9, 9, 9, 4}}, + {m68k_op_move_8_pi_di, 0xf1f8, 0x10e8, { 16, 16, 9, 9, 9, 9, 4}}, + {m68k_op_move_8_pi_ix, 0xf1f8, 0x10f0, { 18, 18, 11, 11, 11, 11, 4}}, + {m68k_op_move_8_pd_d, 0xf1f8, 0x1100, { 8, 8, 5, 5, 5, 5, 5}}, + {m68k_op_move_8_pd_ai, 0xf1f8, 0x1110, { 12, 12, 9, 9, 9, 9, 5}}, + {m68k_op_move_8_pd_pi, 0xf1f8, 0x1118, { 12, 12, 9, 9, 9, 9, 5}}, + {m68k_op_move_8_pd_pd, 0xf1f8, 0x1120, { 14, 14, 10, 10, 10, 10, 5}}, + {m68k_op_move_8_pd_di, 0xf1f8, 0x1128, { 16, 16, 10, 10, 10, 10, 5}}, + {m68k_op_move_8_pd_ix, 0xf1f8, 0x1130, { 18, 18, 12, 12, 12, 12, 5}}, + {m68k_op_move_8_di_d, 0xf1f8, 0x1140, { 12, 12, 5, 5, 5, 5, 5}}, + {m68k_op_move_8_di_ai, 0xf1f8, 0x1150, { 16, 16, 9, 9, 9, 9, 5}}, + {m68k_op_move_8_di_pi, 0xf1f8, 0x1158, { 16, 16, 9, 9, 9, 9, 5}}, + {m68k_op_move_8_di_pd, 0xf1f8, 0x1160, { 18, 18, 10, 10, 10, 10, 5}}, + {m68k_op_move_8_di_di, 0xf1f8, 0x1168, { 20, 20, 10, 10, 10, 10, 5}}, + {m68k_op_move_8_di_ix, 0xf1f8, 0x1170, { 22, 22, 12, 12, 12, 12, 5}}, + {m68k_op_move_8_ix_d, 0xf1f8, 0x1180, { 14, 14, 7, 7, 7, 7, 7}}, + {m68k_op_move_8_ix_ai, 0xf1f8, 0x1190, { 18, 18, 11, 11, 11, 11, 7}}, + {m68k_op_move_8_ix_pi, 0xf1f8, 0x1198, { 18, 18, 11, 11, 11, 11, 7}}, + {m68k_op_move_8_ix_pd, 0xf1f8, 0x11a0, { 20, 20, 12, 12, 12, 12, 7}}, + {m68k_op_move_8_ix_di, 0xf1f8, 0x11a8, { 22, 22, 12, 12, 12, 12, 7}}, + {m68k_op_move_8_ix_ix, 0xf1f8, 0x11b0, { 24, 24, 14, 14, 14, 14, 7}}, + {m68k_op_move_32_d_d, 0xf1f8, 0x2000, { 4, 4, 2, 2, 2, 2, 2}}, + {m68k_op_move_32_d_a, 0xf1f8, 0x2008, { 4, 4, 2, 2, 2, 2, 2}}, + {m68k_op_move_32_d_ai, 0xf1f8, 0x2010, { 12, 12, 6, 6, 6, 6, 2}}, + {m68k_op_move_32_d_pi, 0xf1f8, 0x2018, { 12, 12, 6, 6, 6, 6, 2}}, + {m68k_op_move_32_d_pd, 0xf1f8, 0x2020, { 14, 14, 7, 7, 7, 7, 2}}, + {m68k_op_move_32_d_di, 0xf1f8, 0x2028, { 16, 16, 7, 7, 7, 7, 2}}, + {m68k_op_move_32_d_ix, 0xf1f8, 0x2030, { 18, 18, 9, 9, 9, 9, 2}}, + {m68k_op_movea_32_d, 0xf1f8, 0x2040, { 4, 4, 2, 2, 2, 2, 2}}, + {m68k_op_movea_32_a, 0xf1f8, 0x2048, { 4, 4, 2, 2, 2, 2, 2}}, + {m68k_op_movea_32_ai, 0xf1f8, 0x2050, { 12, 12, 6, 6, 6, 6, 2}}, + {m68k_op_movea_32_pi, 0xf1f8, 0x2058, { 12, 12, 6, 6, 6, 6, 2}}, + {m68k_op_movea_32_pd, 0xf1f8, 0x2060, { 14, 14, 7, 7, 7, 7, 2}}, + {m68k_op_movea_32_di, 0xf1f8, 0x2068, { 16, 16, 7, 7, 7, 7, 2}}, + {m68k_op_movea_32_ix, 0xf1f8, 0x2070, { 18, 18, 9, 9, 9, 9, 2}}, + {m68k_op_move_32_ai_d, 0xf1f8, 0x2080, { 12, 12, 4, 4, 4, 4, 4}}, + {m68k_op_move_32_ai_a, 0xf1f8, 0x2088, { 12, 12, 4, 4, 4, 4, 4}}, + {m68k_op_move_32_ai_ai, 0xf1f8, 0x2090, { 20, 20, 8, 8, 8, 8, 4}}, + {m68k_op_move_32_ai_pi, 0xf1f8, 0x2098, { 20, 20, 8, 8, 8, 8, 4}}, + {m68k_op_move_32_ai_pd, 0xf1f8, 0x20a0, { 22, 22, 9, 9, 9, 9, 4}}, + {m68k_op_move_32_ai_di, 0xf1f8, 0x20a8, { 24, 24, 9, 9, 9, 9, 4}}, + {m68k_op_move_32_ai_ix, 0xf1f8, 0x20b0, { 26, 26, 11, 11, 11, 11, 4}}, + {m68k_op_move_32_pi_d, 0xf1f8, 0x20c0, { 12, 12, 4, 4, 4, 4, 4}}, + {m68k_op_move_32_pi_a, 0xf1f8, 0x20c8, { 12, 12, 4, 4, 4, 4, 4}}, + {m68k_op_move_32_pi_ai, 0xf1f8, 0x20d0, { 20, 20, 8, 8, 8, 8, 4}}, + {m68k_op_move_32_pi_pi, 0xf1f8, 0x20d8, { 20, 20, 8, 8, 8, 8, 4}}, + {m68k_op_move_32_pi_pd, 0xf1f8, 0x20e0, { 22, 22, 9, 9, 9, 9, 4}}, + {m68k_op_move_32_pi_di, 0xf1f8, 0x20e8, { 24, 24, 9, 9, 9, 9, 4}}, + {m68k_op_move_32_pi_ix, 0xf1f8, 0x20f0, { 26, 26, 11, 11, 11, 11, 4}}, + {m68k_op_move_32_pd_d, 0xf1f8, 0x2100, { 12, 14, 5, 5, 5, 5, 5}}, + {m68k_op_move_32_pd_a, 0xf1f8, 0x2108, { 12, 14, 5, 5, 5, 5, 5}}, + {m68k_op_move_32_pd_ai, 0xf1f8, 0x2110, { 20, 22, 9, 9, 9, 9, 5}}, + {m68k_op_move_32_pd_pi, 0xf1f8, 0x2118, { 20, 22, 9, 9, 9, 9, 5}}, + {m68k_op_move_32_pd_pd, 0xf1f8, 0x2120, { 22, 24, 10, 10, 10, 10, 5}}, + {m68k_op_move_32_pd_di, 0xf1f8, 0x2128, { 24, 26, 10, 10, 10, 10, 5}}, + {m68k_op_move_32_pd_ix, 0xf1f8, 0x2130, { 26, 28, 12, 12, 12, 12, 5}}, + {m68k_op_move_32_di_d, 0xf1f8, 0x2140, { 16, 16, 5, 5, 5, 5, 5}}, + {m68k_op_move_32_di_a, 0xf1f8, 0x2148, { 16, 16, 5, 5, 5, 5, 5}}, + {m68k_op_move_32_di_ai, 0xf1f8, 0x2150, { 24, 24, 9, 9, 9, 9, 5}}, + {m68k_op_move_32_di_pi, 0xf1f8, 0x2158, { 24, 24, 9, 9, 9, 9, 5}}, + {m68k_op_move_32_di_pd, 0xf1f8, 0x2160, { 26, 26, 10, 10, 10, 10, 5}}, + {m68k_op_move_32_di_di, 0xf1f8, 0x2168, { 28, 28, 10, 10, 10, 10, 5}}, + {m68k_op_move_32_di_ix, 0xf1f8, 0x2170, { 30, 30, 12, 12, 12, 12, 5}}, + {m68k_op_move_32_ix_d, 0xf1f8, 0x2180, { 18, 18, 7, 7, 7, 7, 7}}, + {m68k_op_move_32_ix_a, 0xf1f8, 0x2188, { 18, 18, 7, 7, 7, 7, 7}}, + {m68k_op_move_32_ix_ai, 0xf1f8, 0x2190, { 26, 26, 11, 11, 11, 11, 7}}, + {m68k_op_move_32_ix_pi, 0xf1f8, 0x2198, { 26, 26, 11, 11, 11, 11, 7}}, + {m68k_op_move_32_ix_pd, 0xf1f8, 0x21a0, { 28, 28, 12, 12, 12, 12, 7}}, + {m68k_op_move_32_ix_di, 0xf1f8, 0x21a8, { 30, 30, 12, 12, 12, 12, 7}}, + {m68k_op_move_32_ix_ix, 0xf1f8, 0x21b0, { 32, 32, 14, 14, 14, 14, 7}}, + {m68k_op_move_16_d_d, 0xf1f8, 0x3000, { 4, 4, 2, 2, 2, 2, 2}}, + {m68k_op_move_16_d_a, 0xf1f8, 0x3008, { 4, 4, 2, 2, 2, 2, 2}}, + {m68k_op_move_16_d_ai, 0xf1f8, 0x3010, { 8, 8, 6, 6, 6, 6, 2}}, + {m68k_op_move_16_d_pi, 0xf1f8, 0x3018, { 8, 8, 6, 6, 6, 6, 2}}, + {m68k_op_move_16_d_pd, 0xf1f8, 0x3020, { 10, 10, 7, 7, 7, 7, 2}}, + {m68k_op_move_16_d_di, 0xf1f8, 0x3028, { 12, 12, 7, 7, 7, 7, 2}}, + {m68k_op_move_16_d_ix, 0xf1f8, 0x3030, { 14, 14, 9, 9, 9, 9, 2}}, + {m68k_op_movea_16_d, 0xf1f8, 0x3040, { 4, 4, 2, 2, 2, 2, 2}}, + {m68k_op_movea_16_a, 0xf1f8, 0x3048, { 4, 4, 2, 2, 2, 2, 2}}, + {m68k_op_movea_16_ai, 0xf1f8, 0x3050, { 8, 8, 6, 6, 6, 6, 2}}, + {m68k_op_movea_16_pi, 0xf1f8, 0x3058, { 8, 8, 6, 6, 6, 6, 2}}, + {m68k_op_movea_16_pd, 0xf1f8, 0x3060, { 10, 10, 7, 7, 7, 7, 2}}, + {m68k_op_movea_16_di, 0xf1f8, 0x3068, { 12, 12, 7, 7, 7, 7, 2}}, + {m68k_op_movea_16_ix, 0xf1f8, 0x3070, { 14, 14, 9, 9, 9, 9, 2}}, + {m68k_op_move_16_ai_d, 0xf1f8, 0x3080, { 8, 8, 4, 4, 4, 4, 4}}, + {m68k_op_move_16_ai_a, 0xf1f8, 0x3088, { 8, 8, 4, 4, 4, 4, 4}}, + {m68k_op_move_16_ai_ai, 0xf1f8, 0x3090, { 12, 12, 8, 8, 8, 8, 4}}, + {m68k_op_move_16_ai_pi, 0xf1f8, 0x3098, { 12, 12, 8, 8, 8, 8, 4}}, + {m68k_op_move_16_ai_pd, 0xf1f8, 0x30a0, { 14, 14, 9, 9, 9, 9, 4}}, + {m68k_op_move_16_ai_di, 0xf1f8, 0x30a8, { 16, 16, 9, 9, 9, 9, 4}}, + {m68k_op_move_16_ai_ix, 0xf1f8, 0x30b0, { 18, 18, 11, 11, 11, 11, 4}}, + {m68k_op_move_16_pi_d, 0xf1f8, 0x30c0, { 8, 8, 4, 4, 4, 4, 4}}, + {m68k_op_move_16_pi_a, 0xf1f8, 0x30c8, { 8, 8, 4, 4, 4, 4, 4}}, + {m68k_op_move_16_pi_ai, 0xf1f8, 0x30d0, { 12, 12, 8, 8, 8, 8, 4}}, + {m68k_op_move_16_pi_pi, 0xf1f8, 0x30d8, { 12, 12, 8, 8, 8, 8, 4}}, + {m68k_op_move_16_pi_pd, 0xf1f8, 0x30e0, { 14, 14, 9, 9, 9, 9, 4}}, + {m68k_op_move_16_pi_di, 0xf1f8, 0x30e8, { 16, 16, 9, 9, 9, 9, 4}}, + {m68k_op_move_16_pi_ix, 0xf1f8, 0x30f0, { 18, 18, 11, 11, 11, 11, 4}}, + {m68k_op_move_16_pd_d, 0xf1f8, 0x3100, { 8, 8, 5, 5, 5, 5, 5}}, + {m68k_op_move_16_pd_a, 0xf1f8, 0x3108, { 8, 8, 5, 5, 5, 5, 5}}, + {m68k_op_move_16_pd_ai, 0xf1f8, 0x3110, { 12, 12, 9, 9, 9, 9, 5}}, + {m68k_op_move_16_pd_pi, 0xf1f8, 0x3118, { 12, 12, 9, 9, 9, 9, 5}}, + {m68k_op_move_16_pd_pd, 0xf1f8, 0x3120, { 14, 14, 10, 10, 10, 10, 5}}, + {m68k_op_move_16_pd_di, 0xf1f8, 0x3128, { 16, 16, 10, 10, 10, 10, 5}}, + {m68k_op_move_16_pd_ix, 0xf1f8, 0x3130, { 18, 18, 12, 12, 12, 12, 5}}, + {m68k_op_move_16_di_d, 0xf1f8, 0x3140, { 12, 12, 5, 5, 5, 5, 5}}, + {m68k_op_move_16_di_a, 0xf1f8, 0x3148, { 12, 12, 5, 5, 5, 5, 5}}, + {m68k_op_move_16_di_ai, 0xf1f8, 0x3150, { 16, 16, 9, 9, 9, 9, 5}}, + {m68k_op_move_16_di_pi, 0xf1f8, 0x3158, { 16, 16, 9, 9, 9, 9, 5}}, + {m68k_op_move_16_di_pd, 0xf1f8, 0x3160, { 18, 18, 10, 10, 10, 10, 5}}, + {m68k_op_move_16_di_di, 0xf1f8, 0x3168, { 20, 20, 10, 10, 10, 10, 5}}, + {m68k_op_move_16_di_ix, 0xf1f8, 0x3170, { 22, 22, 12, 12, 12, 12, 5}}, + {m68k_op_move_16_ix_d, 0xf1f8, 0x3180, { 14, 14, 7, 7, 7, 7, 7}}, + {m68k_op_move_16_ix_a, 0xf1f8, 0x3188, { 14, 14, 7, 7, 7, 7, 7}}, + {m68k_op_move_16_ix_ai, 0xf1f8, 0x3190, { 18, 18, 11, 11, 11, 11, 7}}, + {m68k_op_move_16_ix_pi, 0xf1f8, 0x3198, { 18, 18, 11, 11, 11, 11, 7}}, + {m68k_op_move_16_ix_pd, 0xf1f8, 0x31a0, { 20, 20, 12, 12, 12, 12, 7}}, + {m68k_op_move_16_ix_di, 0xf1f8, 0x31a8, { 22, 22, 12, 12, 12, 12, 7}}, + {m68k_op_move_16_ix_ix, 0xf1f8, 0x31b0, { 24, 24, 14, 14, 14, 14, 7}}, + {m68k_op_chk_32_d, 0xf1f8, 0x4100, {255, 255, 8, 8, 8, 8, 8}}, + {m68k_op_chk_32_ai, 0xf1f8, 0x4110, {255, 255, 12, 12, 12, 12, 8}}, + {m68k_op_chk_32_pi, 0xf1f8, 0x4118, {255, 255, 12, 12, 12, 12, 8}}, + {m68k_op_chk_32_pd, 0xf1f8, 0x4120, {255, 255, 13, 13, 13, 13, 8}}, + {m68k_op_chk_32_di, 0xf1f8, 0x4128, {255, 255, 13, 13, 13, 13, 8}}, + {m68k_op_chk_32_ix, 0xf1f8, 0x4130, {255, 255, 15, 15, 15, 15, 8}}, + {m68k_op_chk_16_d, 0xf1f8, 0x4180, { 10, 8, 8, 8, 8, 8, 8}}, + {m68k_op_chk_16_ai, 0xf1f8, 0x4190, { 14, 12, 12, 12, 12, 12, 8}}, + {m68k_op_chk_16_pi, 0xf1f8, 0x4198, { 14, 12, 12, 12, 12, 12, 8}}, + {m68k_op_chk_16_pd, 0xf1f8, 0x41a0, { 16, 14, 13, 13, 13, 13, 8}}, + {m68k_op_chk_16_di, 0xf1f8, 0x41a8, { 18, 16, 13, 13, 13, 13, 8}}, + {m68k_op_chk_16_ix, 0xf1f8, 0x41b0, { 20, 18, 15, 15, 15, 15, 8}}, + {m68k_op_lea_32_ai, 0xf1f8, 0x41d0, { 4, 4, 6, 6, 6, 6, 2}}, + {m68k_op_lea_32_di, 0xf1f8, 0x41e8, { 8, 8, 7, 7, 7, 7, 2}}, + {m68k_op_lea_32_ix, 0xf1f8, 0x41f0, { 12, 12, 9, 9, 9, 9, 2}}, + {m68k_op_addq_8_d, 0xf1f8, 0x5000, { 4, 4, 2, 2, 2, 2, 2}}, + {m68k_op_addq_8_ai, 0xf1f8, 0x5010, { 12, 12, 8, 8, 8, 8, 4}}, + {m68k_op_addq_8_pi, 0xf1f8, 0x5018, { 12, 12, 8, 8, 8, 8, 4}}, + {m68k_op_addq_8_pd, 0xf1f8, 0x5020, { 14, 14, 9, 9, 9, 9, 4}}, + {m68k_op_addq_8_di, 0xf1f8, 0x5028, { 16, 16, 9, 9, 9, 9, 4}}, + {m68k_op_addq_8_ix, 0xf1f8, 0x5030, { 18, 18, 11, 11, 11, 11, 4}}, + {m68k_op_addq_16_d, 0xf1f8, 0x5040, { 4, 4, 2, 2, 2, 2, 2}}, + {m68k_op_addq_16_a, 0xf1f8, 0x5048, { 4, 4, 2, 2, 2, 2, 2}}, + {m68k_op_addq_16_ai, 0xf1f8, 0x5050, { 12, 12, 8, 8, 8, 8, 4}}, + {m68k_op_addq_16_pi, 0xf1f8, 0x5058, { 12, 12, 8, 8, 8, 8, 4}}, + {m68k_op_addq_16_pd, 0xf1f8, 0x5060, { 14, 14, 9, 9, 9, 9, 4}}, + {m68k_op_addq_16_di, 0xf1f8, 0x5068, { 16, 16, 9, 9, 9, 9, 4}}, + {m68k_op_addq_16_ix, 0xf1f8, 0x5070, { 18, 18, 11, 11, 11, 11, 4}}, + {m68k_op_addq_32_d, 0xf1f8, 0x5080, { 8, 8, 2, 2, 2, 2, 2}}, + {m68k_op_addq_32_a, 0xf1f8, 0x5088, { 8, 8, 2, 2, 2, 2, 2}}, + {m68k_op_addq_32_ai, 0xf1f8, 0x5090, { 20, 20, 8, 8, 8, 8, 4}}, + {m68k_op_addq_32_pi, 0xf1f8, 0x5098, { 20, 20, 8, 8, 8, 8, 4}}, + {m68k_op_addq_32_pd, 0xf1f8, 0x50a0, { 22, 22, 9, 9, 9, 9, 4}}, + {m68k_op_addq_32_di, 0xf1f8, 0x50a8, { 24, 24, 9, 9, 9, 9, 4}}, + {m68k_op_addq_32_ix, 0xf1f8, 0x50b0, { 26, 26, 11, 11, 11, 11, 4}}, + {m68k_op_subq_8_d, 0xf1f8, 0x5100, { 4, 4, 2, 2, 2, 2, 2}}, + {m68k_op_subq_8_ai, 0xf1f8, 0x5110, { 12, 12, 8, 8, 8, 8, 4}}, + {m68k_op_subq_8_pi, 0xf1f8, 0x5118, { 12, 12, 8, 8, 8, 8, 4}}, + {m68k_op_subq_8_pd, 0xf1f8, 0x5120, { 14, 14, 9, 9, 9, 9, 4}}, + {m68k_op_subq_8_di, 0xf1f8, 0x5128, { 16, 16, 9, 9, 9, 9, 4}}, + {m68k_op_subq_8_ix, 0xf1f8, 0x5130, { 18, 18, 11, 11, 11, 11, 4}}, + {m68k_op_subq_16_d, 0xf1f8, 0x5140, { 4, 4, 2, 2, 2, 2, 2}}, + {m68k_op_subq_16_a, 0xf1f8, 0x5148, { 8, 4, 2, 2, 2, 2, 2}}, + {m68k_op_subq_16_ai, 0xf1f8, 0x5150, { 12, 12, 8, 8, 8, 8, 4}}, + {m68k_op_subq_16_pi, 0xf1f8, 0x5158, { 12, 12, 8, 8, 8, 8, 4}}, + {m68k_op_subq_16_pd, 0xf1f8, 0x5160, { 14, 14, 9, 9, 9, 9, 4}}, + {m68k_op_subq_16_di, 0xf1f8, 0x5168, { 16, 16, 9, 9, 9, 9, 4}}, + {m68k_op_subq_16_ix, 0xf1f8, 0x5170, { 18, 18, 11, 11, 11, 11, 4}}, + {m68k_op_subq_32_d, 0xf1f8, 0x5180, { 8, 8, 2, 2, 2, 2, 2}}, + {m68k_op_subq_32_a, 0xf1f8, 0x5188, { 8, 8, 2, 2, 2, 2, 2}}, + {m68k_op_subq_32_ai, 0xf1f8, 0x5190, { 20, 20, 8, 8, 8, 8, 4}}, + {m68k_op_subq_32_pi, 0xf1f8, 0x5198, { 20, 20, 8, 8, 8, 8, 4}}, + {m68k_op_subq_32_pd, 0xf1f8, 0x51a0, { 22, 22, 9, 9, 9, 9, 4}}, + {m68k_op_subq_32_di, 0xf1f8, 0x51a8, { 24, 24, 9, 9, 9, 9, 4}}, + {m68k_op_subq_32_ix, 0xf1f8, 0x51b0, { 26, 26, 11, 11, 11, 11, 4}}, + {m68k_op_or_8_er_d, 0xf1f8, 0x8000, { 4, 4, 2, 2, 2, 2, 2}}, + {m68k_op_or_8_er_ai, 0xf1f8, 0x8010, { 8, 8, 6, 6, 6, 6, 2}}, + {m68k_op_or_8_er_pi, 0xf1f8, 0x8018, { 8, 8, 6, 6, 6, 6, 2}}, + {m68k_op_or_8_er_pd, 0xf1f8, 0x8020, { 10, 10, 7, 7, 7, 7, 2}}, + {m68k_op_or_8_er_di, 0xf1f8, 0x8028, { 12, 12, 7, 7, 7, 7, 2}}, + {m68k_op_or_8_er_ix, 0xf1f8, 0x8030, { 14, 14, 9, 9, 9, 9, 2}}, + {m68k_op_or_16_er_d, 0xf1f8, 0x8040, { 4, 4, 2, 2, 2, 2, 2}}, + {m68k_op_or_16_er_ai, 0xf1f8, 0x8050, { 8, 8, 6, 6, 6, 6, 2}}, + {m68k_op_or_16_er_pi, 0xf1f8, 0x8058, { 8, 8, 6, 6, 6, 6, 2}}, + {m68k_op_or_16_er_pd, 0xf1f8, 0x8060, { 10, 10, 7, 7, 7, 7, 2}}, + {m68k_op_or_16_er_di, 0xf1f8, 0x8068, { 12, 12, 7, 7, 7, 7, 2}}, + {m68k_op_or_16_er_ix, 0xf1f8, 0x8070, { 14, 14, 9, 9, 9, 9, 2}}, + {m68k_op_or_32_er_d, 0xf1f8, 0x8080, { 8, 6, 2, 2, 2, 2, 2}}, + {m68k_op_or_32_er_ai, 0xf1f8, 0x8090, { 14, 14, 6, 6, 6, 6, 2}}, + {m68k_op_or_32_er_pi, 0xf1f8, 0x8098, { 14, 14, 6, 6, 6, 6, 2}}, + {m68k_op_or_32_er_pd, 0xf1f8, 0x80a0, { 16, 16, 7, 7, 7, 7, 2}}, + {m68k_op_or_32_er_di, 0xf1f8, 0x80a8, { 18, 18, 7, 7, 7, 7, 2}}, + {m68k_op_or_32_er_ix, 0xf1f8, 0x80b0, { 20, 20, 9, 9, 9, 9, 2}}, + {m68k_op_divu_16_d, 0xf1f8, 0x80c0, {140, 108, 44, 44, 44, 44, 44}}, + {m68k_op_divu_16_ai, 0xf1f8, 0x80d0, {144, 112, 48, 48, 48, 48, 44}}, + {m68k_op_divu_16_pi, 0xf1f8, 0x80d8, {144, 112, 48, 48, 48, 48, 44}}, + {m68k_op_divu_16_pd, 0xf1f8, 0x80e0, {146, 114, 49, 49, 49, 49, 44}}, + {m68k_op_divu_16_di, 0xf1f8, 0x80e8, {148, 116, 49, 49, 49, 49, 44}}, + {m68k_op_divu_16_ix, 0xf1f8, 0x80f0, {150, 118, 51, 51, 51, 51, 44}}, + {m68k_op_sbcd_8_rr, 0xf1f8, 0x8100, { 6, 6, 4, 4, 4, 4, 4}}, + {m68k_op_sbcd_8_mm, 0xf1f8, 0x8108, { 18, 18, 16, 16, 16, 16, 16}}, + {m68k_op_or_8_re_ai, 0xf1f8, 0x8110, { 12, 12, 8, 8, 8, 8, 4}}, + {m68k_op_or_8_re_pi, 0xf1f8, 0x8118, { 12, 12, 8, 8, 8, 8, 4}}, + {m68k_op_or_8_re_pd, 0xf1f8, 0x8120, { 14, 14, 9, 9, 9, 9, 4}}, + {m68k_op_or_8_re_di, 0xf1f8, 0x8128, { 16, 16, 9, 9, 9, 9, 4}}, + {m68k_op_or_8_re_ix, 0xf1f8, 0x8130, { 18, 18, 11, 11, 11, 11, 4}}, + {m68k_op_pack_16_rr, 0xf1f8, 0x8140, {255, 255, 6, 6, 6, 6, 6}}, + {m68k_op_pack_16_mm, 0xf1f8, 0x8148, {255, 255, 13, 13, 13, 13, 13}}, + {m68k_op_or_16_re_ai, 0xf1f8, 0x8150, { 12, 12, 8, 8, 8, 8, 4}}, + {m68k_op_or_16_re_pi, 0xf1f8, 0x8158, { 12, 12, 8, 8, 8, 8, 4}}, + {m68k_op_or_16_re_pd, 0xf1f8, 0x8160, { 14, 14, 9, 9, 9, 9, 4}}, + {m68k_op_or_16_re_di, 0xf1f8, 0x8168, { 16, 16, 9, 9, 9, 9, 4}}, + {m68k_op_or_16_re_ix, 0xf1f8, 0x8170, { 18, 18, 11, 11, 11, 11, 4}}, + {m68k_op_unpk_16_rr, 0xf1f8, 0x8180, {255, 255, 8, 8, 8, 8, 8}}, + {m68k_op_unpk_16_mm, 0xf1f8, 0x8188, {255, 255, 13, 13, 13, 13, 13}}, + {m68k_op_or_32_re_ai, 0xf1f8, 0x8190, { 20, 20, 8, 8, 8, 8, 4}}, + {m68k_op_or_32_re_pi, 0xf1f8, 0x8198, { 20, 20, 8, 8, 8, 8, 4}}, + {m68k_op_or_32_re_pd, 0xf1f8, 0x81a0, { 22, 22, 9, 9, 9, 9, 4}}, + {m68k_op_or_32_re_di, 0xf1f8, 0x81a8, { 24, 24, 9, 9, 9, 9, 4}}, + {m68k_op_or_32_re_ix, 0xf1f8, 0x81b0, { 26, 26, 11, 11, 11, 11, 4}}, + {m68k_op_divs_16_d, 0xf1f8, 0x81c0, {158, 122, 56, 56, 56, 56, 56}}, + {m68k_op_divs_16_ai, 0xf1f8, 0x81d0, {162, 126, 60, 60, 60, 60, 56}}, + {m68k_op_divs_16_pi, 0xf1f8, 0x81d8, {162, 126, 60, 60, 60, 60, 56}}, + {m68k_op_divs_16_pd, 0xf1f8, 0x81e0, {164, 128, 61, 61, 61, 61, 56}}, + {m68k_op_divs_16_di, 0xf1f8, 0x81e8, {166, 130, 61, 61, 61, 61, 56}}, + {m68k_op_divs_16_ix, 0xf1f8, 0x81f0, {168, 132, 63, 63, 63, 63, 56}}, + {m68k_op_sub_8_er_d, 0xf1f8, 0x9000, { 4, 4, 2, 2, 2, 2, 2}}, + {m68k_op_sub_8_er_ai, 0xf1f8, 0x9010, { 8, 8, 6, 6, 6, 6, 2}}, + {m68k_op_sub_8_er_pi, 0xf1f8, 0x9018, { 8, 8, 6, 6, 6, 6, 2}}, + {m68k_op_sub_8_er_pd, 0xf1f8, 0x9020, { 10, 10, 7, 7, 7, 7, 2}}, + {m68k_op_sub_8_er_di, 0xf1f8, 0x9028, { 12, 12, 7, 7, 7, 7, 2}}, + {m68k_op_sub_8_er_ix, 0xf1f8, 0x9030, { 14, 14, 9, 9, 9, 9, 2}}, + {m68k_op_sub_16_er_d, 0xf1f8, 0x9040, { 4, 4, 2, 2, 2, 2, 2}}, + {m68k_op_sub_16_er_a, 0xf1f8, 0x9048, { 4, 4, 2, 2, 2, 2, 2}}, + {m68k_op_sub_16_er_ai, 0xf1f8, 0x9050, { 8, 8, 6, 6, 6, 6, 2}}, + {m68k_op_sub_16_er_pi, 0xf1f8, 0x9058, { 8, 8, 6, 6, 6, 6, 2}}, + {m68k_op_sub_16_er_pd, 0xf1f8, 0x9060, { 10, 10, 7, 7, 7, 7, 2}}, + {m68k_op_sub_16_er_di, 0xf1f8, 0x9068, { 12, 12, 7, 7, 7, 7, 2}}, + {m68k_op_sub_16_er_ix, 0xf1f8, 0x9070, { 14, 14, 9, 9, 9, 9, 2}}, + {m68k_op_sub_32_er_d, 0xf1f8, 0x9080, { 8, 6, 2, 2, 2, 2, 2}}, + {m68k_op_sub_32_er_a, 0xf1f8, 0x9088, { 8, 6, 2, 2, 2, 2, 2}}, + {m68k_op_sub_32_er_ai, 0xf1f8, 0x9090, { 14, 14, 6, 6, 6, 6, 2}}, + {m68k_op_sub_32_er_pi, 0xf1f8, 0x9098, { 14, 14, 6, 6, 6, 6, 2}}, + {m68k_op_sub_32_er_pd, 0xf1f8, 0x90a0, { 16, 16, 7, 7, 7, 7, 2}}, + {m68k_op_sub_32_er_di, 0xf1f8, 0x90a8, { 18, 18, 7, 7, 7, 7, 2}}, + {m68k_op_sub_32_er_ix, 0xf1f8, 0x90b0, { 20, 20, 9, 9, 9, 9, 2}}, + {m68k_op_suba_16_d, 0xf1f8, 0x90c0, { 8, 8, 2, 2, 2, 2, 2}}, + {m68k_op_suba_16_a, 0xf1f8, 0x90c8, { 8, 8, 2, 2, 2, 2, 2}}, + {m68k_op_suba_16_ai, 0xf1f8, 0x90d0, { 12, 12, 6, 6, 6, 6, 2}}, + {m68k_op_suba_16_pi, 0xf1f8, 0x90d8, { 12, 12, 6, 6, 6, 6, 2}}, + {m68k_op_suba_16_pd, 0xf1f8, 0x90e0, { 14, 14, 7, 7, 7, 7, 2}}, + {m68k_op_suba_16_di, 0xf1f8, 0x90e8, { 16, 16, 7, 7, 7, 7, 2}}, + {m68k_op_suba_16_ix, 0xf1f8, 0x90f0, { 18, 18, 9, 9, 9, 9, 2}}, + {m68k_op_subx_8_rr, 0xf1f8, 0x9100, { 4, 4, 2, 2, 2, 2, 2}}, + {m68k_op_subx_8_mm, 0xf1f8, 0x9108, { 18, 18, 12, 12, 12, 12, 12}}, + {m68k_op_sub_8_re_ai, 0xf1f8, 0x9110, { 12, 12, 8, 8, 8, 8, 4}}, + {m68k_op_sub_8_re_pi, 0xf1f8, 0x9118, { 12, 12, 8, 8, 8, 8, 4}}, + {m68k_op_sub_8_re_pd, 0xf1f8, 0x9120, { 14, 14, 9, 9, 9, 9, 4}}, + {m68k_op_sub_8_re_di, 0xf1f8, 0x9128, { 16, 16, 9, 9, 9, 9, 4}}, + {m68k_op_sub_8_re_ix, 0xf1f8, 0x9130, { 18, 18, 11, 11, 11, 11, 4}}, + {m68k_op_subx_16_rr, 0xf1f8, 0x9140, { 4, 4, 2, 2, 2, 2, 2}}, + {m68k_op_subx_16_mm, 0xf1f8, 0x9148, { 18, 18, 12, 12, 12, 12, 12}}, + {m68k_op_sub_16_re_ai, 0xf1f8, 0x9150, { 12, 12, 8, 8, 8, 8, 4}}, + {m68k_op_sub_16_re_pi, 0xf1f8, 0x9158, { 12, 12, 8, 8, 8, 8, 4}}, + {m68k_op_sub_16_re_pd, 0xf1f8, 0x9160, { 14, 14, 9, 9, 9, 9, 4}}, + {m68k_op_sub_16_re_di, 0xf1f8, 0x9168, { 16, 16, 9, 9, 9, 9, 4}}, + {m68k_op_sub_16_re_ix, 0xf1f8, 0x9170, { 18, 18, 11, 11, 11, 11, 4}}, + {m68k_op_subx_32_rr, 0xf1f8, 0x9180, { 8, 6, 2, 2, 2, 2, 2}}, + {m68k_op_subx_32_mm, 0xf1f8, 0x9188, { 30, 30, 12, 12, 12, 12, 12}}, + {m68k_op_sub_32_re_ai, 0xf1f8, 0x9190, { 20, 20, 8, 8, 8, 8, 4}}, + {m68k_op_sub_32_re_pi, 0xf1f8, 0x9198, { 20, 20, 8, 8, 8, 8, 4}}, + {m68k_op_sub_32_re_pd, 0xf1f8, 0x91a0, { 22, 22, 9, 9, 9, 9, 4}}, + {m68k_op_sub_32_re_di, 0xf1f8, 0x91a8, { 24, 24, 9, 9, 9, 9, 4}}, + {m68k_op_sub_32_re_ix, 0xf1f8, 0x91b0, { 26, 26, 11, 11, 11, 11, 4}}, + {m68k_op_suba_32_d, 0xf1f8, 0x91c0, { 8, 6, 2, 2, 2, 2, 2}}, + {m68k_op_suba_32_a, 0xf1f8, 0x91c8, { 8, 6, 2, 2, 2, 2, 2}}, + {m68k_op_suba_32_ai, 0xf1f8, 0x91d0, { 14, 14, 6, 6, 6, 6, 2}}, + {m68k_op_suba_32_pi, 0xf1f8, 0x91d8, { 14, 14, 6, 6, 6, 6, 2}}, + {m68k_op_suba_32_pd, 0xf1f8, 0x91e0, { 16, 16, 7, 7, 7, 7, 2}}, + {m68k_op_suba_32_di, 0xf1f8, 0x91e8, { 18, 18, 7, 7, 7, 7, 2}}, + {m68k_op_suba_32_ix, 0xf1f8, 0x91f0, { 20, 20, 9, 9, 9, 9, 2}}, + {m68k_op_cmp_8_d, 0xf1f8, 0xb000, { 4, 4, 2, 2, 2, 2, 2}}, + {m68k_op_cmp_8_ai, 0xf1f8, 0xb010, { 8, 8, 6, 6, 6, 6, 2}}, + {m68k_op_cmp_8_pi, 0xf1f8, 0xb018, { 8, 8, 6, 6, 6, 6, 2}}, + {m68k_op_cmp_8_pd, 0xf1f8, 0xb020, { 10, 10, 7, 7, 7, 7, 2}}, + {m68k_op_cmp_8_di, 0xf1f8, 0xb028, { 12, 12, 7, 7, 7, 7, 2}}, + {m68k_op_cmp_8_ix, 0xf1f8, 0xb030, { 14, 14, 9, 9, 9, 9, 2}}, + {m68k_op_cmp_16_d, 0xf1f8, 0xb040, { 4, 4, 2, 2, 2, 2, 2}}, + {m68k_op_cmp_16_a, 0xf1f8, 0xb048, { 4, 4, 2, 2, 2, 2, 2}}, + {m68k_op_cmp_16_ai, 0xf1f8, 0xb050, { 8, 8, 6, 6, 6, 6, 2}}, + {m68k_op_cmp_16_pi, 0xf1f8, 0xb058, { 8, 8, 6, 6, 6, 6, 2}}, + {m68k_op_cmp_16_pd, 0xf1f8, 0xb060, { 10, 10, 7, 7, 7, 7, 2}}, + {m68k_op_cmp_16_di, 0xf1f8, 0xb068, { 12, 12, 7, 7, 7, 7, 2}}, + {m68k_op_cmp_16_ix, 0xf1f8, 0xb070, { 14, 14, 9, 9, 9, 9, 2}}, + {m68k_op_cmp_32_d, 0xf1f8, 0xb080, { 6, 6, 2, 2, 2, 2, 2}}, + {m68k_op_cmp_32_a, 0xf1f8, 0xb088, { 6, 6, 2, 2, 2, 2, 2}}, + {m68k_op_cmp_32_ai, 0xf1f8, 0xb090, { 14, 14, 6, 6, 6, 6, 2}}, + {m68k_op_cmp_32_pi, 0xf1f8, 0xb098, { 14, 14, 6, 6, 6, 6, 2}}, + {m68k_op_cmp_32_pd, 0xf1f8, 0xb0a0, { 16, 16, 7, 7, 7, 7, 2}}, + {m68k_op_cmp_32_di, 0xf1f8, 0xb0a8, { 18, 18, 7, 7, 7, 7, 2}}, + {m68k_op_cmp_32_ix, 0xf1f8, 0xb0b0, { 20, 20, 9, 9, 9, 9, 2}}, + {m68k_op_cmpa_16_d, 0xf1f8, 0xb0c0, { 6, 6, 4, 4, 4, 4, 4}}, + {m68k_op_cmpa_16_a, 0xf1f8, 0xb0c8, { 6, 6, 4, 4, 4, 4, 4}}, + {m68k_op_cmpa_16_ai, 0xf1f8, 0xb0d0, { 10, 10, 8, 8, 8, 8, 4}}, + {m68k_op_cmpa_16_pi, 0xf1f8, 0xb0d8, { 10, 10, 8, 8, 8, 8, 4}}, + {m68k_op_cmpa_16_pd, 0xf1f8, 0xb0e0, { 12, 12, 9, 9, 9, 9, 4}}, + {m68k_op_cmpa_16_di, 0xf1f8, 0xb0e8, { 14, 14, 9, 9, 9, 9, 4}}, + {m68k_op_cmpa_16_ix, 0xf1f8, 0xb0f0, { 16, 16, 11, 11, 11, 11, 4}}, + {m68k_op_eor_8_d, 0xf1f8, 0xb100, { 4, 4, 2, 2, 2, 2, 2}}, + {m68k_op_cmpm_8, 0xf1f8, 0xb108, { 12, 12, 9, 9, 9, 9, 9}}, + {m68k_op_eor_8_ai, 0xf1f8, 0xb110, { 12, 12, 8, 8, 8, 8, 4}}, + {m68k_op_eor_8_pi, 0xf1f8, 0xb118, { 12, 12, 8, 8, 8, 8, 4}}, + {m68k_op_eor_8_pd, 0xf1f8, 0xb120, { 14, 14, 9, 9, 9, 9, 4}}, + {m68k_op_eor_8_di, 0xf1f8, 0xb128, { 16, 16, 9, 9, 9, 9, 4}}, + {m68k_op_eor_8_ix, 0xf1f8, 0xb130, { 18, 18, 11, 11, 11, 11, 4}}, + {m68k_op_eor_16_d, 0xf1f8, 0xb140, { 4, 4, 2, 2, 2, 2, 2}}, + {m68k_op_cmpm_16, 0xf1f8, 0xb148, { 12, 12, 9, 9, 9, 9, 9}}, + {m68k_op_eor_16_ai, 0xf1f8, 0xb150, { 12, 12, 8, 8, 8, 8, 4}}, + {m68k_op_eor_16_pi, 0xf1f8, 0xb158, { 12, 12, 8, 8, 8, 8, 4}}, + {m68k_op_eor_16_pd, 0xf1f8, 0xb160, { 14, 14, 9, 9, 9, 9, 4}}, + {m68k_op_eor_16_di, 0xf1f8, 0xb168, { 16, 16, 9, 9, 9, 9, 4}}, + {m68k_op_eor_16_ix, 0xf1f8, 0xb170, { 18, 18, 11, 11, 11, 11, 4}}, + {m68k_op_eor_32_d, 0xf1f8, 0xb180, { 8, 6, 2, 2, 2, 2, 2}}, + {m68k_op_cmpm_32, 0xf1f8, 0xb188, { 20, 20, 9, 9, 9, 9, 9}}, + {m68k_op_eor_32_ai, 0xf1f8, 0xb190, { 20, 20, 8, 8, 8, 8, 4}}, + {m68k_op_eor_32_pi, 0xf1f8, 0xb198, { 20, 20, 8, 8, 8, 8, 4}}, + {m68k_op_eor_32_pd, 0xf1f8, 0xb1a0, { 22, 22, 9, 9, 9, 9, 4}}, + {m68k_op_eor_32_di, 0xf1f8, 0xb1a8, { 24, 24, 9, 9, 9, 9, 4}}, + {m68k_op_eor_32_ix, 0xf1f8, 0xb1b0, { 26, 26, 11, 11, 11, 11, 4}}, + {m68k_op_cmpa_32_d, 0xf1f8, 0xb1c0, { 6, 6, 4, 4, 4, 4, 4}}, + {m68k_op_cmpa_32_a, 0xf1f8, 0xb1c8, { 6, 6, 4, 4, 4, 4, 4}}, + {m68k_op_cmpa_32_ai, 0xf1f8, 0xb1d0, { 14, 14, 8, 8, 8, 8, 4}}, + {m68k_op_cmpa_32_pi, 0xf1f8, 0xb1d8, { 14, 14, 8, 8, 8, 8, 4}}, + {m68k_op_cmpa_32_pd, 0xf1f8, 0xb1e0, { 16, 16, 9, 9, 9, 9, 4}}, + {m68k_op_cmpa_32_di, 0xf1f8, 0xb1e8, { 18, 18, 9, 9, 9, 9, 4}}, + {m68k_op_cmpa_32_ix, 0xf1f8, 0xb1f0, { 20, 20, 11, 11, 11, 11, 4}}, + {m68k_op_and_8_er_d, 0xf1f8, 0xc000, { 4, 4, 2, 2, 2, 2, 2}}, + {m68k_op_and_8_er_ai, 0xf1f8, 0xc010, { 8, 8, 6, 6, 6, 6, 2}}, + {m68k_op_and_8_er_pi, 0xf1f8, 0xc018, { 8, 8, 6, 6, 6, 6, 2}}, + {m68k_op_and_8_er_pd, 0xf1f8, 0xc020, { 10, 10, 7, 7, 7, 7, 2}}, + {m68k_op_and_8_er_di, 0xf1f8, 0xc028, { 12, 12, 7, 7, 7, 7, 2}}, + {m68k_op_and_8_er_ix, 0xf1f8, 0xc030, { 14, 14, 9, 9, 9, 9, 2}}, + {m68k_op_and_16_er_d, 0xf1f8, 0xc040, { 4, 4, 2, 2, 2, 2, 2}}, + {m68k_op_and_16_er_ai, 0xf1f8, 0xc050, { 8, 8, 6, 6, 6, 6, 2}}, + {m68k_op_and_16_er_pi, 0xf1f8, 0xc058, { 8, 8, 6, 6, 6, 6, 2}}, + {m68k_op_and_16_er_pd, 0xf1f8, 0xc060, { 10, 10, 7, 7, 7, 7, 2}}, + {m68k_op_and_16_er_di, 0xf1f8, 0xc068, { 12, 12, 7, 7, 7, 7, 2}}, + {m68k_op_and_16_er_ix, 0xf1f8, 0xc070, { 14, 14, 9, 9, 9, 9, 2}}, + {m68k_op_and_32_er_d, 0xf1f8, 0xc080, { 8, 6, 2, 2, 2, 2, 2}}, + {m68k_op_and_32_er_ai, 0xf1f8, 0xc090, { 14, 14, 6, 6, 6, 6, 2}}, + {m68k_op_and_32_er_pi, 0xf1f8, 0xc098, { 14, 14, 6, 6, 6, 6, 2}}, + {m68k_op_and_32_er_pd, 0xf1f8, 0xc0a0, { 16, 16, 7, 7, 7, 7, 2}}, + {m68k_op_and_32_er_di, 0xf1f8, 0xc0a8, { 18, 18, 7, 7, 7, 7, 2}}, + {m68k_op_and_32_er_ix, 0xf1f8, 0xc0b0, { 20, 20, 9, 9, 9, 9, 2}}, + {m68k_op_mulu_16_d, 0xf1f8, 0xc0c0, { 54, 30, 27, 27, 27, 27, 27}}, + {m68k_op_mulu_16_ai, 0xf1f8, 0xc0d0, { 58, 34, 31, 31, 31, 31, 27}}, + {m68k_op_mulu_16_pi, 0xf1f8, 0xc0d8, { 58, 34, 31, 31, 31, 31, 27}}, + {m68k_op_mulu_16_pd, 0xf1f8, 0xc0e0, { 60, 36, 32, 32, 32, 32, 27}}, + {m68k_op_mulu_16_di, 0xf1f8, 0xc0e8, { 62, 38, 32, 32, 32, 32, 27}}, + {m68k_op_mulu_16_ix, 0xf1f8, 0xc0f0, { 64, 40, 34, 34, 34, 34, 27}}, + {m68k_op_abcd_8_rr, 0xf1f8, 0xc100, { 6, 6, 4, 4, 4, 4, 4}}, + {m68k_op_abcd_8_mm, 0xf1f8, 0xc108, { 18, 18, 16, 16, 16, 16, 16}}, + {m68k_op_and_8_re_ai, 0xf1f8, 0xc110, { 12, 12, 8, 8, 8, 8, 4}}, + {m68k_op_and_8_re_pi, 0xf1f8, 0xc118, { 12, 12, 8, 8, 8, 8, 4}}, + {m68k_op_and_8_re_pd, 0xf1f8, 0xc120, { 14, 14, 9, 9, 9, 9, 4}}, + {m68k_op_and_8_re_di, 0xf1f8, 0xc128, { 16, 16, 9, 9, 9, 9, 4}}, + {m68k_op_and_8_re_ix, 0xf1f8, 0xc130, { 18, 18, 11, 11, 11, 11, 4}}, + {m68k_op_exg_32_dd, 0xf1f8, 0xc140, { 6, 6, 2, 2, 2, 2, 2}}, + {m68k_op_exg_32_aa, 0xf1f8, 0xc148, { 6, 6, 2, 2, 2, 2, 2}}, + {m68k_op_and_16_re_ai, 0xf1f8, 0xc150, { 12, 12, 8, 8, 8, 8, 4}}, + {m68k_op_and_16_re_pi, 0xf1f8, 0xc158, { 12, 12, 8, 8, 8, 8, 4}}, + {m68k_op_and_16_re_pd, 0xf1f8, 0xc160, { 14, 14, 9, 9, 9, 9, 4}}, + {m68k_op_and_16_re_di, 0xf1f8, 0xc168, { 16, 16, 9, 9, 9, 9, 4}}, + {m68k_op_and_16_re_ix, 0xf1f8, 0xc170, { 18, 18, 11, 11, 11, 11, 4}}, + {m68k_op_exg_32_da, 0xf1f8, 0xc188, { 6, 6, 2, 2, 2, 2, 2}}, + {m68k_op_and_32_re_ai, 0xf1f8, 0xc190, { 20, 20, 8, 8, 8, 8, 4}}, + {m68k_op_and_32_re_pi, 0xf1f8, 0xc198, { 20, 20, 8, 8, 8, 8, 4}}, + {m68k_op_and_32_re_pd, 0xf1f8, 0xc1a0, { 22, 22, 9, 9, 9, 9, 4}}, + {m68k_op_and_32_re_di, 0xf1f8, 0xc1a8, { 24, 24, 9, 9, 9, 9, 4}}, + {m68k_op_and_32_re_ix, 0xf1f8, 0xc1b0, { 26, 26, 11, 11, 11, 11, 4}}, + {m68k_op_muls_16_d, 0xf1f8, 0xc1c0, { 54, 32, 27, 27, 27, 27, 27}}, + {m68k_op_muls_16_ai, 0xf1f8, 0xc1d0, { 58, 36, 31, 31, 31, 31, 27}}, + {m68k_op_muls_16_pi, 0xf1f8, 0xc1d8, { 58, 36, 31, 31, 31, 31, 27}}, + {m68k_op_muls_16_pd, 0xf1f8, 0xc1e0, { 60, 38, 32, 32, 32, 32, 27}}, + {m68k_op_muls_16_di, 0xf1f8, 0xc1e8, { 62, 40, 32, 32, 32, 32, 27}}, + {m68k_op_muls_16_ix, 0xf1f8, 0xc1f0, { 64, 42, 34, 34, 34, 34, 27}}, + {m68k_op_add_8_er_d, 0xf1f8, 0xd000, { 4, 4, 2, 2, 2, 2, 2}}, + {m68k_op_add_8_er_ai, 0xf1f8, 0xd010, { 8, 8, 6, 6, 6, 6, 2}}, + {m68k_op_add_8_er_pi, 0xf1f8, 0xd018, { 8, 8, 6, 6, 6, 6, 2}}, + {m68k_op_add_8_er_pd, 0xf1f8, 0xd020, { 10, 10, 7, 7, 7, 7, 2}}, + {m68k_op_add_8_er_di, 0xf1f8, 0xd028, { 12, 12, 7, 7, 7, 7, 2}}, + {m68k_op_add_8_er_ix, 0xf1f8, 0xd030, { 14, 14, 9, 9, 9, 9, 2}}, + {m68k_op_add_16_er_d, 0xf1f8, 0xd040, { 4, 4, 2, 2, 2, 2, 2}}, + {m68k_op_add_16_er_a, 0xf1f8, 0xd048, { 4, 4, 2, 2, 2, 2, 2}}, + {m68k_op_add_16_er_ai, 0xf1f8, 0xd050, { 8, 8, 6, 6, 6, 6, 2}}, + {m68k_op_add_16_er_pi, 0xf1f8, 0xd058, { 8, 8, 6, 6, 6, 6, 2}}, + {m68k_op_add_16_er_pd, 0xf1f8, 0xd060, { 10, 10, 7, 7, 7, 7, 2}}, + {m68k_op_add_16_er_di, 0xf1f8, 0xd068, { 12, 12, 7, 7, 7, 7, 2}}, + {m68k_op_add_16_er_ix, 0xf1f8, 0xd070, { 14, 14, 9, 9, 9, 9, 2}}, + {m68k_op_add_32_er_d, 0xf1f8, 0xd080, { 8, 6, 2, 2, 2, 2, 2}}, + {m68k_op_add_32_er_a, 0xf1f8, 0xd088, { 8, 6, 2, 2, 2, 2, 2}}, + {m68k_op_add_32_er_ai, 0xf1f8, 0xd090, { 14, 14, 6, 6, 6, 6, 2}}, + {m68k_op_add_32_er_pi, 0xf1f8, 0xd098, { 14, 14, 6, 6, 6, 6, 2}}, + {m68k_op_add_32_er_pd, 0xf1f8, 0xd0a0, { 16, 16, 7, 7, 7, 7, 2}}, + {m68k_op_add_32_er_di, 0xf1f8, 0xd0a8, { 18, 18, 7, 7, 7, 7, 2}}, + {m68k_op_add_32_er_ix, 0xf1f8, 0xd0b0, { 20, 20, 9, 9, 9, 9, 2}}, + {m68k_op_adda_16_d, 0xf1f8, 0xd0c0, { 8, 8, 2, 2, 2, 2, 2}}, + {m68k_op_adda_16_a, 0xf1f8, 0xd0c8, { 8, 8, 2, 2, 2, 2, 2}}, + {m68k_op_adda_16_ai, 0xf1f8, 0xd0d0, { 12, 12, 6, 6, 6, 6, 2}}, + {m68k_op_adda_16_pi, 0xf1f8, 0xd0d8, { 12, 12, 6, 6, 6, 6, 2}}, + {m68k_op_adda_16_pd, 0xf1f8, 0xd0e0, { 14, 14, 7, 7, 7, 7, 2}}, + {m68k_op_adda_16_di, 0xf1f8, 0xd0e8, { 16, 16, 7, 7, 7, 7, 2}}, + {m68k_op_adda_16_ix, 0xf1f8, 0xd0f0, { 18, 18, 9, 9, 9, 9, 2}}, + {m68k_op_addx_8_rr, 0xf1f8, 0xd100, { 4, 4, 2, 2, 2, 2, 2}}, + {m68k_op_addx_8_mm, 0xf1f8, 0xd108, { 18, 18, 12, 12, 12, 12, 12}}, + {m68k_op_add_8_re_ai, 0xf1f8, 0xd110, { 12, 12, 8, 8, 8, 8, 4}}, + {m68k_op_add_8_re_pi, 0xf1f8, 0xd118, { 12, 12, 8, 8, 8, 8, 4}}, + {m68k_op_add_8_re_pd, 0xf1f8, 0xd120, { 14, 14, 9, 9, 9, 9, 4}}, + {m68k_op_add_8_re_di, 0xf1f8, 0xd128, { 16, 16, 9, 9, 9, 9, 4}}, + {m68k_op_add_8_re_ix, 0xf1f8, 0xd130, { 18, 18, 11, 11, 11, 11, 4}}, + {m68k_op_addx_16_rr, 0xf1f8, 0xd140, { 4, 4, 2, 2, 2, 2, 2}}, + {m68k_op_addx_16_mm, 0xf1f8, 0xd148, { 18, 18, 12, 12, 12, 12, 12}}, + {m68k_op_add_16_re_ai, 0xf1f8, 0xd150, { 12, 12, 8, 8, 8, 8, 4}}, + {m68k_op_add_16_re_pi, 0xf1f8, 0xd158, { 12, 12, 8, 8, 8, 8, 4}}, + {m68k_op_add_16_re_pd, 0xf1f8, 0xd160, { 14, 14, 9, 9, 9, 9, 4}}, + {m68k_op_add_16_re_di, 0xf1f8, 0xd168, { 16, 16, 9, 9, 9, 9, 4}}, + {m68k_op_add_16_re_ix, 0xf1f8, 0xd170, { 18, 18, 11, 11, 11, 11, 4}}, + {m68k_op_addx_32_rr, 0xf1f8, 0xd180, { 8, 6, 2, 2, 2, 2, 2}}, + {m68k_op_addx_32_mm, 0xf1f8, 0xd188, { 30, 30, 12, 12, 12, 12, 12}}, + {m68k_op_add_32_re_ai, 0xf1f8, 0xd190, { 20, 20, 8, 8, 8, 8, 4}}, + {m68k_op_add_32_re_pi, 0xf1f8, 0xd198, { 20, 20, 8, 8, 8, 8, 4}}, + {m68k_op_add_32_re_pd, 0xf1f8, 0xd1a0, { 22, 22, 9, 9, 9, 9, 4}}, + {m68k_op_add_32_re_di, 0xf1f8, 0xd1a8, { 24, 24, 9, 9, 9, 9, 4}}, + {m68k_op_add_32_re_ix, 0xf1f8, 0xd1b0, { 26, 26, 11, 11, 11, 11, 4}}, + {m68k_op_adda_32_d, 0xf1f8, 0xd1c0, { 8, 6, 2, 2, 2, 2, 2}}, + {m68k_op_adda_32_a, 0xf1f8, 0xd1c8, { 8, 6, 2, 2, 2, 2, 2}}, + {m68k_op_adda_32_ai, 0xf1f8, 0xd1d0, { 14, 14, 6, 6, 6, 6, 2}}, + {m68k_op_adda_32_pi, 0xf1f8, 0xd1d8, { 14, 14, 6, 6, 6, 6, 2}}, + {m68k_op_adda_32_pd, 0xf1f8, 0xd1e0, { 16, 16, 7, 7, 7, 7, 2}}, + {m68k_op_adda_32_di, 0xf1f8, 0xd1e8, { 18, 18, 7, 7, 7, 7, 2}}, + {m68k_op_adda_32_ix, 0xf1f8, 0xd1f0, { 20, 20, 9, 9, 9, 9, 2}}, + {m68k_op_asr_8_s, 0xf1f8, 0xe000, { 6, 6, 6, 6, 6, 6, 6}}, + {m68k_op_lsr_8_s, 0xf1f8, 0xe008, { 6, 6, 4, 4, 4, 4, 4}}, + {m68k_op_roxr_8_s, 0xf1f8, 0xe010, { 6, 6, 12, 12, 12, 12, 12}}, + {m68k_op_ror_8_s, 0xf1f8, 0xe018, { 6, 6, 8, 8, 8, 8, 8}}, + {m68k_op_asr_8_r, 0xf1f8, 0xe020, { 6, 6, 6, 6, 6, 6, 6}}, + {m68k_op_lsr_8_r, 0xf1f8, 0xe028, { 6, 6, 6, 6, 6, 6, 6}}, + {m68k_op_roxr_8_r, 0xf1f8, 0xe030, { 6, 6, 12, 12, 12, 12, 12}}, + {m68k_op_ror_8_r, 0xf1f8, 0xe038, { 6, 6, 8, 8, 8, 8, 8}}, + {m68k_op_asr_16_s, 0xf1f8, 0xe040, { 6, 6, 6, 6, 6, 6, 6}}, + {m68k_op_lsr_16_s, 0xf1f8, 0xe048, { 6, 6, 4, 4, 4, 4, 4}}, + {m68k_op_roxr_16_s, 0xf1f8, 0xe050, { 6, 6, 12, 12, 12, 12, 12}}, + {m68k_op_ror_16_s, 0xf1f8, 0xe058, { 6, 6, 8, 8, 8, 8, 8}}, + {m68k_op_asr_16_r, 0xf1f8, 0xe060, { 6, 6, 6, 6, 6, 6, 6}}, + {m68k_op_lsr_16_r, 0xf1f8, 0xe068, { 6, 6, 6, 6, 6, 6, 6}}, + {m68k_op_roxr_16_r, 0xf1f8, 0xe070, { 6, 6, 12, 12, 12, 12, 12}}, + {m68k_op_ror_16_r, 0xf1f8, 0xe078, { 6, 6, 8, 8, 8, 8, 8}}, + {m68k_op_asr_32_s, 0xf1f8, 0xe080, { 8, 8, 6, 6, 6, 6, 6}}, + {m68k_op_lsr_32_s, 0xf1f8, 0xe088, { 8, 8, 4, 4, 4, 4, 4}}, + {m68k_op_roxr_32_s, 0xf1f8, 0xe090, { 8, 8, 12, 12, 12, 12, 12}}, + {m68k_op_ror_32_s, 0xf1f8, 0xe098, { 8, 8, 8, 8, 8, 8, 8}}, + {m68k_op_asr_32_r, 0xf1f8, 0xe0a0, { 8, 8, 6, 6, 6, 6, 6}}, + {m68k_op_lsr_32_r, 0xf1f8, 0xe0a8, { 8, 8, 6, 6, 6, 6, 6}}, + {m68k_op_roxr_32_r, 0xf1f8, 0xe0b0, { 8, 8, 12, 12, 12, 12, 12}}, + {m68k_op_ror_32_r, 0xf1f8, 0xe0b8, { 8, 8, 8, 8, 8, 8, 8}}, + {m68k_op_asl_8_s, 0xf1f8, 0xe100, { 6, 6, 8, 8, 8, 8, 8}}, + {m68k_op_lsl_8_s, 0xf1f8, 0xe108, { 6, 6, 4, 4, 4, 4, 4}}, + {m68k_op_roxl_8_s, 0xf1f8, 0xe110, { 6, 6, 12, 12, 12, 12, 12}}, + {m68k_op_rol_8_s, 0xf1f8, 0xe118, { 6, 6, 8, 8, 8, 8, 8}}, + {m68k_op_asl_8_r, 0xf1f8, 0xe120, { 6, 6, 8, 8, 8, 8, 8}}, + {m68k_op_lsl_8_r, 0xf1f8, 0xe128, { 6, 6, 6, 6, 6, 6, 6}}, + {m68k_op_roxl_8_r, 0xf1f8, 0xe130, { 6, 6, 12, 12, 12, 12, 12}}, + {m68k_op_rol_8_r, 0xf1f8, 0xe138, { 6, 6, 8, 8, 8, 8, 8}}, + {m68k_op_asl_16_s, 0xf1f8, 0xe140, { 6, 6, 8, 8, 8, 8, 8}}, + {m68k_op_lsl_16_s, 0xf1f8, 0xe148, { 6, 6, 4, 4, 4, 4, 4}}, + {m68k_op_roxl_16_s, 0xf1f8, 0xe150, { 6, 6, 12, 12, 12, 12, 12}}, + {m68k_op_rol_16_s, 0xf1f8, 0xe158, { 6, 6, 8, 8, 8, 8, 8}}, + {m68k_op_asl_16_r, 0xf1f8, 0xe160, { 6, 6, 8, 8, 8, 8, 8}}, + {m68k_op_lsl_16_r, 0xf1f8, 0xe168, { 6, 6, 6, 6, 6, 6, 6}}, + {m68k_op_roxl_16_r, 0xf1f8, 0xe170, { 6, 6, 12, 12, 12, 12, 12}}, + {m68k_op_rol_16_r, 0xf1f8, 0xe178, { 6, 6, 8, 8, 8, 8, 8}}, + {m68k_op_asl_32_s, 0xf1f8, 0xe180, { 8, 8, 8, 8, 8, 8, 8}}, + {m68k_op_lsl_32_s, 0xf1f8, 0xe188, { 8, 8, 4, 4, 4, 4, 4}}, + {m68k_op_roxl_32_s, 0xf1f8, 0xe190, { 8, 8, 12, 12, 12, 12, 12}}, + {m68k_op_rol_32_s, 0xf1f8, 0xe198, { 8, 8, 8, 8, 8, 8, 8}}, + {m68k_op_asl_32_r, 0xf1f8, 0xe1a0, { 8, 8, 8, 8, 8, 8, 8}}, + {m68k_op_lsl_32_r, 0xf1f8, 0xe1a8, { 8, 8, 6, 6, 6, 6, 6}}, + {m68k_op_roxl_32_r, 0xf1f8, 0xe1b0, { 8, 8, 12, 12, 12, 12, 12}}, + {m68k_op_rol_32_r, 0xf1f8, 0xe1b8, { 8, 8, 8, 8, 8, 8, 8}}, + {m68k_op_cpdbcc_32, 0xf1f8, 0xf048, {255, 255, 4, 4, 255, 255, 255}}, + {m68k_op_cptrapcc_32, 0xf1f8, 0xf078, {255, 255, 4, 4, 255, 255, 255}}, + {m68k_op_ptest_32, 0xffd8, 0xf548, {255, 255, 255, 255, 8, 255, 255}}, + {m68k_op_rtm_32, 0xfff0, 0x06c0, {255, 255, 19, 19, 19, 19, 19}}, + {m68k_op_trap, 0xfff0, 0x4e40, { 4, 4, 4, 4, 4, 4, 4}}, + {m68k_op_btst_8_r_pi7, 0xf1ff, 0x011f, { 8, 8, 8, 8, 8, 8, 4}}, + {m68k_op_btst_8_r_pd7, 0xf1ff, 0x0127, { 10, 10, 9, 9, 9, 9, 4}}, + {m68k_op_btst_8_r_aw, 0xf1ff, 0x0138, { 12, 12, 8, 8, 8, 8, 4}}, + {m68k_op_btst_8_r_al, 0xf1ff, 0x0139, { 16, 16, 8, 8, 8, 8, 4}}, + {m68k_op_btst_8_r_pcdi, 0xf1ff, 0x013a, { 12, 12, 9, 9, 9, 9, 4}}, + {m68k_op_btst_8_r_pcix, 0xf1ff, 0x013b, { 14, 14, 11, 11, 11, 11, 4}}, + {m68k_op_btst_8_r_i, 0xf1ff, 0x013c, { 8, 8, 6, 6, 6, 6, 4}}, + {m68k_op_bchg_8_r_pi7, 0xf1ff, 0x015f, { 12, 12, 8, 8, 8, 8, 4}}, + {m68k_op_bchg_8_r_pd7, 0xf1ff, 0x0167, { 14, 14, 9, 9, 9, 9, 4}}, + {m68k_op_bchg_8_r_aw, 0xf1ff, 0x0178, { 16, 16, 8, 8, 8, 8, 4}}, + {m68k_op_bchg_8_r_al, 0xf1ff, 0x0179, { 20, 20, 8, 8, 8, 8, 4}}, + {m68k_op_bclr_8_r_pi7, 0xf1ff, 0x019f, { 12, 14, 8, 8, 8, 8, 4}}, + {m68k_op_bclr_8_r_pd7, 0xf1ff, 0x01a7, { 14, 16, 9, 9, 9, 9, 4}}, + {m68k_op_bclr_8_r_aw, 0xf1ff, 0x01b8, { 16, 18, 8, 8, 8, 8, 4}}, + {m68k_op_bclr_8_r_al, 0xf1ff, 0x01b9, { 20, 22, 8, 8, 8, 8, 4}}, + {m68k_op_bset_8_r_pi7, 0xf1ff, 0x01df, { 12, 12, 8, 8, 8, 8, 4}}, + {m68k_op_bset_8_r_pd7, 0xf1ff, 0x01e7, { 14, 14, 9, 9, 9, 9, 4}}, + {m68k_op_bset_8_r_aw, 0xf1ff, 0x01f8, { 16, 16, 8, 8, 8, 8, 4}}, + {m68k_op_bset_8_r_al, 0xf1ff, 0x01f9, { 20, 20, 8, 8, 8, 8, 4}}, + {m68k_op_move_8_d_pi7, 0xf1ff, 0x101f, { 8, 8, 6, 6, 6, 6, 2}}, + {m68k_op_move_8_d_pd7, 0xf1ff, 0x1027, { 10, 10, 7, 7, 7, 7, 2}}, + {m68k_op_move_8_d_aw, 0xf1ff, 0x1038, { 12, 12, 6, 6, 6, 6, 2}}, + {m68k_op_move_8_d_al, 0xf1ff, 0x1039, { 16, 16, 6, 6, 6, 6, 2}}, + {m68k_op_move_8_d_pcdi, 0xf1ff, 0x103a, { 12, 12, 7, 7, 7, 7, 2}}, + {m68k_op_move_8_d_pcix, 0xf1ff, 0x103b, { 14, 14, 9, 9, 9, 9, 2}}, + {m68k_op_move_8_d_i, 0xf1ff, 0x103c, { 8, 8, 4, 4, 4, 4, 2}}, + {m68k_op_move_8_ai_pi7, 0xf1ff, 0x109f, { 12, 12, 8, 8, 8, 8, 4}}, + {m68k_op_move_8_ai_pd7, 0xf1ff, 0x10a7, { 14, 14, 9, 9, 9, 9, 4}}, + {m68k_op_move_8_ai_aw, 0xf1ff, 0x10b8, { 16, 16, 8, 8, 8, 8, 4}}, + {m68k_op_move_8_ai_al, 0xf1ff, 0x10b9, { 20, 20, 8, 8, 8, 8, 4}}, + {m68k_op_move_8_ai_pcdi, 0xf1ff, 0x10ba, { 16, 16, 9, 9, 9, 9, 4}}, + {m68k_op_move_8_ai_pcix, 0xf1ff, 0x10bb, { 18, 18, 11, 11, 11, 11, 4}}, + {m68k_op_move_8_ai_i, 0xf1ff, 0x10bc, { 12, 12, 6, 6, 6, 6, 4}}, + {m68k_op_move_8_pi_pi7, 0xf1ff, 0x10df, { 12, 12, 8, 8, 8, 8, 4}}, + {m68k_op_move_8_pi_pd7, 0xf1ff, 0x10e7, { 14, 14, 9, 9, 9, 9, 4}}, + {m68k_op_move_8_pi_aw, 0xf1ff, 0x10f8, { 16, 16, 8, 8, 8, 8, 4}}, + {m68k_op_move_8_pi_al, 0xf1ff, 0x10f9, { 20, 20, 8, 8, 8, 8, 4}}, + {m68k_op_move_8_pi_pcdi, 0xf1ff, 0x10fa, { 16, 16, 9, 9, 9, 9, 4}}, + {m68k_op_move_8_pi_pcix, 0xf1ff, 0x10fb, { 18, 18, 11, 11, 11, 11, 4}}, + {m68k_op_move_8_pi_i, 0xf1ff, 0x10fc, { 12, 12, 6, 6, 6, 6, 4}}, + {m68k_op_move_8_pd_pi7, 0xf1ff, 0x111f, { 12, 12, 9, 9, 9, 9, 5}}, + {m68k_op_move_8_pd_pd7, 0xf1ff, 0x1127, { 14, 14, 10, 10, 10, 10, 5}}, + {m68k_op_move_8_pd_aw, 0xf1ff, 0x1138, { 16, 16, 9, 9, 9, 9, 5}}, + {m68k_op_move_8_pd_al, 0xf1ff, 0x1139, { 20, 20, 9, 9, 9, 9, 5}}, + {m68k_op_move_8_pd_pcdi, 0xf1ff, 0x113a, { 16, 16, 10, 10, 10, 10, 5}}, + {m68k_op_move_8_pd_pcix, 0xf1ff, 0x113b, { 18, 18, 12, 12, 12, 12, 5}}, + {m68k_op_move_8_pd_i, 0xf1ff, 0x113c, { 12, 12, 7, 7, 7, 7, 5}}, + {m68k_op_move_8_di_pi7, 0xf1ff, 0x115f, { 16, 16, 9, 9, 9, 9, 5}}, + {m68k_op_move_8_di_pd7, 0xf1ff, 0x1167, { 18, 18, 10, 10, 10, 10, 5}}, + {m68k_op_move_8_di_aw, 0xf1ff, 0x1178, { 20, 20, 9, 9, 9, 9, 5}}, + {m68k_op_move_8_di_al, 0xf1ff, 0x1179, { 24, 24, 9, 9, 9, 9, 5}}, + {m68k_op_move_8_di_pcdi, 0xf1ff, 0x117a, { 20, 20, 10, 10, 10, 10, 5}}, + {m68k_op_move_8_di_pcix, 0xf1ff, 0x117b, { 22, 22, 12, 12, 12, 12, 5}}, + {m68k_op_move_8_di_i, 0xf1ff, 0x117c, { 16, 16, 7, 7, 7, 7, 5}}, + {m68k_op_move_8_ix_pi7, 0xf1ff, 0x119f, { 18, 18, 11, 11, 11, 11, 7}}, + {m68k_op_move_8_ix_pd7, 0xf1ff, 0x11a7, { 20, 20, 12, 12, 12, 12, 7}}, + {m68k_op_move_8_ix_aw, 0xf1ff, 0x11b8, { 22, 22, 11, 11, 11, 11, 7}}, + {m68k_op_move_8_ix_al, 0xf1ff, 0x11b9, { 26, 26, 11, 11, 11, 11, 7}}, + {m68k_op_move_8_ix_pcdi, 0xf1ff, 0x11ba, { 22, 22, 12, 12, 12, 12, 7}}, + {m68k_op_move_8_ix_pcix, 0xf1ff, 0x11bb, { 24, 24, 14, 14, 14, 14, 7}}, + {m68k_op_move_8_ix_i, 0xf1ff, 0x11bc, { 18, 18, 9, 9, 9, 9, 7}}, + {m68k_op_move_32_d_aw, 0xf1ff, 0x2038, { 16, 16, 6, 6, 6, 6, 2}}, + {m68k_op_move_32_d_al, 0xf1ff, 0x2039, { 20, 20, 6, 6, 6, 6, 2}}, + {m68k_op_move_32_d_pcdi, 0xf1ff, 0x203a, { 16, 16, 7, 7, 7, 7, 2}}, + {m68k_op_move_32_d_pcix, 0xf1ff, 0x203b, { 18, 18, 9, 9, 9, 9, 2}}, + {m68k_op_move_32_d_i, 0xf1ff, 0x203c, { 12, 12, 6, 6, 6, 6, 2}}, + {m68k_op_movea_32_aw, 0xf1ff, 0x2078, { 16, 16, 6, 6, 6, 6, 2}}, + {m68k_op_movea_32_al, 0xf1ff, 0x2079, { 20, 20, 6, 6, 6, 6, 2}}, + {m68k_op_movea_32_pcdi, 0xf1ff, 0x207a, { 16, 16, 7, 7, 7, 7, 2}}, + {m68k_op_movea_32_pcix, 0xf1ff, 0x207b, { 18, 18, 9, 9, 9, 9, 2}}, + {m68k_op_movea_32_i, 0xf1ff, 0x207c, { 12, 12, 6, 6, 6, 6, 2}}, + {m68k_op_move_32_ai_aw, 0xf1ff, 0x20b8, { 24, 24, 8, 8, 8, 8, 4}}, + {m68k_op_move_32_ai_al, 0xf1ff, 0x20b9, { 28, 28, 8, 8, 8, 8, 4}}, + {m68k_op_move_32_ai_pcdi, 0xf1ff, 0x20ba, { 24, 24, 9, 9, 9, 9, 4}}, + {m68k_op_move_32_ai_pcix, 0xf1ff, 0x20bb, { 26, 26, 11, 11, 11, 11, 4}}, + {m68k_op_move_32_ai_i, 0xf1ff, 0x20bc, { 20, 20, 8, 8, 8, 8, 4}}, + {m68k_op_move_32_pi_aw, 0xf1ff, 0x20f8, { 24, 24, 8, 8, 8, 8, 4}}, + {m68k_op_move_32_pi_al, 0xf1ff, 0x20f9, { 28, 28, 8, 8, 8, 8, 4}}, + {m68k_op_move_32_pi_pcdi, 0xf1ff, 0x20fa, { 24, 24, 9, 9, 9, 9, 4}}, + {m68k_op_move_32_pi_pcix, 0xf1ff, 0x20fb, { 26, 26, 11, 11, 11, 11, 4}}, + {m68k_op_move_32_pi_i, 0xf1ff, 0x20fc, { 20, 20, 8, 8, 8, 8, 4}}, + {m68k_op_move_32_pd_aw, 0xf1ff, 0x2138, { 24, 26, 9, 9, 9, 9, 5}}, + {m68k_op_move_32_pd_al, 0xf1ff, 0x2139, { 28, 30, 9, 9, 9, 9, 5}}, + {m68k_op_move_32_pd_pcdi, 0xf1ff, 0x213a, { 24, 26, 10, 10, 10, 10, 5}}, + {m68k_op_move_32_pd_pcix, 0xf1ff, 0x213b, { 26, 28, 12, 12, 12, 12, 5}}, + {m68k_op_move_32_pd_i, 0xf1ff, 0x213c, { 20, 22, 9, 9, 9, 9, 5}}, + {m68k_op_move_32_di_aw, 0xf1ff, 0x2178, { 28, 28, 9, 9, 9, 9, 5}}, + {m68k_op_move_32_di_al, 0xf1ff, 0x2179, { 32, 32, 9, 9, 9, 9, 5}}, + {m68k_op_move_32_di_pcdi, 0xf1ff, 0x217a, { 28, 28, 10, 10, 10, 10, 5}}, + {m68k_op_move_32_di_pcix, 0xf1ff, 0x217b, { 30, 30, 12, 12, 12, 12, 5}}, + {m68k_op_move_32_di_i, 0xf1ff, 0x217c, { 24, 24, 9, 9, 9, 9, 5}}, + {m68k_op_move_32_ix_aw, 0xf1ff, 0x21b8, { 30, 30, 11, 11, 11, 11, 7}}, + {m68k_op_move_32_ix_al, 0xf1ff, 0x21b9, { 34, 34, 11, 11, 11, 11, 7}}, + {m68k_op_move_32_ix_pcdi, 0xf1ff, 0x21ba, { 30, 30, 12, 12, 12, 12, 7}}, + {m68k_op_move_32_ix_pcix, 0xf1ff, 0x21bb, { 32, 32, 14, 14, 14, 14, 7}}, + {m68k_op_move_32_ix_i, 0xf1ff, 0x21bc, { 26, 26, 11, 11, 11, 11, 7}}, + {m68k_op_move_16_d_aw, 0xf1ff, 0x3038, { 12, 12, 6, 6, 6, 6, 2}}, + {m68k_op_move_16_d_al, 0xf1ff, 0x3039, { 16, 16, 6, 6, 6, 6, 2}}, + {m68k_op_move_16_d_pcdi, 0xf1ff, 0x303a, { 12, 12, 7, 7, 7, 7, 2}}, + {m68k_op_move_16_d_pcix, 0xf1ff, 0x303b, { 14, 14, 9, 9, 9, 9, 2}}, + {m68k_op_move_16_d_i, 0xf1ff, 0x303c, { 8, 8, 4, 4, 4, 4, 2}}, + {m68k_op_movea_16_aw, 0xf1ff, 0x3078, { 12, 12, 6, 6, 6, 6, 2}}, + {m68k_op_movea_16_al, 0xf1ff, 0x3079, { 16, 16, 6, 6, 6, 6, 2}}, + {m68k_op_movea_16_pcdi, 0xf1ff, 0x307a, { 12, 12, 7, 7, 7, 7, 2}}, + {m68k_op_movea_16_pcix, 0xf1ff, 0x307b, { 14, 14, 9, 9, 9, 9, 2}}, + {m68k_op_movea_16_i, 0xf1ff, 0x307c, { 8, 8, 4, 4, 4, 4, 2}}, + {m68k_op_move_16_ai_aw, 0xf1ff, 0x30b8, { 16, 16, 8, 8, 8, 8, 4}}, + {m68k_op_move_16_ai_al, 0xf1ff, 0x30b9, { 20, 20, 8, 8, 8, 8, 4}}, + {m68k_op_move_16_ai_pcdi, 0xf1ff, 0x30ba, { 16, 16, 9, 9, 9, 9, 4}}, + {m68k_op_move_16_ai_pcix, 0xf1ff, 0x30bb, { 18, 18, 11, 11, 11, 11, 4}}, + {m68k_op_move_16_ai_i, 0xf1ff, 0x30bc, { 12, 12, 6, 6, 6, 6, 4}}, + {m68k_op_move_16_pi_aw, 0xf1ff, 0x30f8, { 16, 16, 8, 8, 8, 8, 4}}, + {m68k_op_move_16_pi_al, 0xf1ff, 0x30f9, { 20, 20, 8, 8, 8, 8, 4}}, + {m68k_op_move_16_pi_pcdi, 0xf1ff, 0x30fa, { 16, 16, 9, 9, 9, 9, 4}}, + {m68k_op_move_16_pi_pcix, 0xf1ff, 0x30fb, { 18, 18, 11, 11, 11, 11, 4}}, + {m68k_op_move_16_pi_i, 0xf1ff, 0x30fc, { 12, 12, 6, 6, 6, 6, 4}}, + {m68k_op_move_16_pd_aw, 0xf1ff, 0x3138, { 16, 16, 9, 9, 9, 9, 5}}, + {m68k_op_move_16_pd_al, 0xf1ff, 0x3139, { 20, 20, 9, 9, 9, 9, 5}}, + {m68k_op_move_16_pd_pcdi, 0xf1ff, 0x313a, { 16, 16, 10, 10, 10, 10, 5}}, + {m68k_op_move_16_pd_pcix, 0xf1ff, 0x313b, { 18, 18, 12, 12, 12, 12, 5}}, + {m68k_op_move_16_pd_i, 0xf1ff, 0x313c, { 12, 12, 7, 7, 7, 7, 5}}, + {m68k_op_move_16_di_aw, 0xf1ff, 0x3178, { 20, 20, 9, 9, 9, 9, 5}}, + {m68k_op_move_16_di_al, 0xf1ff, 0x3179, { 24, 24, 9, 9, 9, 9, 5}}, + {m68k_op_move_16_di_pcdi, 0xf1ff, 0x317a, { 20, 20, 10, 10, 10, 10, 5}}, + {m68k_op_move_16_di_pcix, 0xf1ff, 0x317b, { 22, 22, 12, 12, 12, 12, 5}}, + {m68k_op_move_16_di_i, 0xf1ff, 0x317c, { 16, 16, 7, 7, 7, 7, 5}}, + {m68k_op_move_16_ix_aw, 0xf1ff, 0x31b8, { 22, 22, 11, 11, 11, 11, 7}}, + {m68k_op_move_16_ix_al, 0xf1ff, 0x31b9, { 26, 26, 11, 11, 11, 11, 7}}, + {m68k_op_move_16_ix_pcdi, 0xf1ff, 0x31ba, { 22, 22, 12, 12, 12, 12, 7}}, + {m68k_op_move_16_ix_pcix, 0xf1ff, 0x31bb, { 24, 24, 14, 14, 14, 14, 7}}, + {m68k_op_move_16_ix_i, 0xf1ff, 0x31bc, { 18, 18, 9, 9, 9, 9, 7}}, + {m68k_op_chk_32_aw, 0xf1ff, 0x4138, {255, 255, 12, 12, 12, 12, 8}}, + {m68k_op_chk_32_al, 0xf1ff, 0x4139, {255, 255, 12, 12, 12, 12, 8}}, + {m68k_op_chk_32_pcdi, 0xf1ff, 0x413a, {255, 255, 13, 13, 13, 13, 8}}, + {m68k_op_chk_32_pcix, 0xf1ff, 0x413b, {255, 255, 15, 15, 15, 15, 8}}, + {m68k_op_chk_32_i, 0xf1ff, 0x413c, {255, 255, 12, 12, 12, 12, 8}}, + {m68k_op_chk_16_aw, 0xf1ff, 0x41b8, { 18, 16, 12, 12, 12, 12, 8}}, + {m68k_op_chk_16_al, 0xf1ff, 0x41b9, { 22, 20, 12, 12, 12, 12, 8}}, + {m68k_op_chk_16_pcdi, 0xf1ff, 0x41ba, { 18, 16, 13, 13, 13, 13, 8}}, + {m68k_op_chk_16_pcix, 0xf1ff, 0x41bb, { 20, 18, 15, 15, 15, 15, 8}}, + {m68k_op_chk_16_i, 0xf1ff, 0x41bc, { 14, 12, 10, 10, 10, 10, 8}}, + {m68k_op_lea_32_aw, 0xf1ff, 0x41f8, { 8, 8, 6, 6, 6, 6, 2}}, + {m68k_op_lea_32_al, 0xf1ff, 0x41f9, { 12, 12, 6, 6, 6, 6, 2}}, + {m68k_op_lea_32_pcdi, 0xf1ff, 0x41fa, { 8, 8, 7, 7, 7, 7, 2}}, + {m68k_op_lea_32_pcix, 0xf1ff, 0x41fb, { 12, 12, 9, 9, 9, 9, 2}}, + {m68k_op_addq_8_pi7, 0xf1ff, 0x501f, { 12, 12, 8, 8, 8, 8, 4}}, + {m68k_op_addq_8_pd7, 0xf1ff, 0x5027, { 14, 14, 9, 9, 9, 9, 4}}, + {m68k_op_addq_8_aw, 0xf1ff, 0x5038, { 16, 16, 8, 8, 8, 8, 4}}, + {m68k_op_addq_8_al, 0xf1ff, 0x5039, { 20, 20, 8, 8, 8, 8, 4}}, + {m68k_op_addq_16_aw, 0xf1ff, 0x5078, { 16, 16, 8, 8, 8, 8, 4}}, + {m68k_op_addq_16_al, 0xf1ff, 0x5079, { 20, 20, 8, 8, 8, 8, 4}}, + {m68k_op_addq_32_aw, 0xf1ff, 0x50b8, { 24, 24, 8, 8, 8, 8, 4}}, + {m68k_op_addq_32_al, 0xf1ff, 0x50b9, { 28, 28, 8, 8, 8, 8, 4}}, + {m68k_op_subq_8_pi7, 0xf1ff, 0x511f, { 12, 12, 8, 8, 8, 8, 4}}, + {m68k_op_subq_8_pd7, 0xf1ff, 0x5127, { 14, 14, 9, 9, 9, 9, 4}}, + {m68k_op_subq_8_aw, 0xf1ff, 0x5138, { 16, 16, 8, 8, 8, 8, 4}}, + {m68k_op_subq_8_al, 0xf1ff, 0x5139, { 20, 20, 8, 8, 8, 8, 4}}, + {m68k_op_subq_16_aw, 0xf1ff, 0x5178, { 16, 16, 8, 8, 8, 8, 4}}, + {m68k_op_subq_16_al, 0xf1ff, 0x5179, { 20, 20, 8, 8, 8, 8, 4}}, + {m68k_op_subq_32_aw, 0xf1ff, 0x51b8, { 24, 24, 8, 8, 8, 8, 4}}, + {m68k_op_subq_32_al, 0xf1ff, 0x51b9, { 28, 28, 8, 8, 8, 8, 4}}, + {m68k_op_or_8_er_pi7, 0xf1ff, 0x801f, { 8, 8, 6, 6, 6, 6, 2}}, + {m68k_op_or_8_er_pd7, 0xf1ff, 0x8027, { 10, 10, 7, 7, 7, 7, 2}}, + {m68k_op_or_8_er_aw, 0xf1ff, 0x8038, { 12, 12, 6, 6, 6, 6, 2}}, + {m68k_op_or_8_er_al, 0xf1ff, 0x8039, { 16, 16, 6, 6, 6, 6, 2}}, + {m68k_op_or_8_er_pcdi, 0xf1ff, 0x803a, { 12, 12, 7, 7, 7, 7, 2}}, + {m68k_op_or_8_er_pcix, 0xf1ff, 0x803b, { 14, 14, 9, 9, 9, 9, 2}}, + {m68k_op_or_8_er_i, 0xf1ff, 0x803c, { 8, 8, 4, 4, 4, 4, 2}}, + {m68k_op_or_16_er_aw, 0xf1ff, 0x8078, { 12, 12, 6, 6, 6, 6, 2}}, + {m68k_op_or_16_er_al, 0xf1ff, 0x8079, { 16, 16, 6, 6, 6, 6, 2}}, + {m68k_op_or_16_er_pcdi, 0xf1ff, 0x807a, { 12, 12, 7, 7, 7, 7, 2}}, + {m68k_op_or_16_er_pcix, 0xf1ff, 0x807b, { 14, 14, 9, 9, 9, 9, 2}}, + {m68k_op_or_16_er_i, 0xf1ff, 0x807c, { 8, 8, 4, 4, 4, 4, 2}}, + {m68k_op_or_32_er_aw, 0xf1ff, 0x80b8, { 18, 18, 6, 6, 6, 6, 2}}, + {m68k_op_or_32_er_al, 0xf1ff, 0x80b9, { 22, 22, 6, 6, 6, 6, 2}}, + {m68k_op_or_32_er_pcdi, 0xf1ff, 0x80ba, { 18, 18, 7, 7, 7, 7, 2}}, + {m68k_op_or_32_er_pcix, 0xf1ff, 0x80bb, { 20, 20, 9, 9, 9, 9, 2}}, + {m68k_op_or_32_er_i, 0xf1ff, 0x80bc, { 16, 14, 6, 6, 6, 6, 2}}, + {m68k_op_divu_16_aw, 0xf1ff, 0x80f8, {148, 116, 48, 48, 48, 48, 44}}, + {m68k_op_divu_16_al, 0xf1ff, 0x80f9, {152, 120, 48, 48, 48, 48, 44}}, + {m68k_op_divu_16_pcdi, 0xf1ff, 0x80fa, {148, 116, 49, 49, 49, 49, 44}}, + {m68k_op_divu_16_pcix, 0xf1ff, 0x80fb, {150, 118, 51, 51, 51, 51, 44}}, + {m68k_op_divu_16_i, 0xf1ff, 0x80fc, {144, 112, 46, 46, 46, 46, 44}}, + {m68k_op_sbcd_8_mm_ay7, 0xf1ff, 0x810f, { 18, 18, 16, 16, 16, 16, 16}}, + {m68k_op_or_8_re_pi7, 0xf1ff, 0x811f, { 12, 12, 8, 8, 8, 8, 4}}, + {m68k_op_or_8_re_pd7, 0xf1ff, 0x8127, { 14, 14, 9, 9, 9, 9, 4}}, + {m68k_op_or_8_re_aw, 0xf1ff, 0x8138, { 16, 16, 8, 8, 8, 8, 4}}, + {m68k_op_or_8_re_al, 0xf1ff, 0x8139, { 20, 20, 8, 8, 8, 8, 4}}, + {m68k_op_pack_16_mm_ay7, 0xf1ff, 0x814f, {255, 255, 13, 13, 13, 13, 13}}, + {m68k_op_or_16_re_aw, 0xf1ff, 0x8178, { 16, 16, 8, 8, 8, 8, 4}}, + {m68k_op_or_16_re_al, 0xf1ff, 0x8179, { 20, 20, 8, 8, 8, 8, 4}}, + {m68k_op_unpk_16_mm_ay7, 0xf1ff, 0x818f, {255, 255, 13, 13, 13, 13, 13}}, + {m68k_op_or_32_re_aw, 0xf1ff, 0x81b8, { 24, 24, 8, 8, 8, 8, 4}}, + {m68k_op_or_32_re_al, 0xf1ff, 0x81b9, { 28, 28, 8, 8, 8, 8, 4}}, + {m68k_op_divs_16_aw, 0xf1ff, 0x81f8, {166, 130, 60, 60, 60, 60, 56}}, + {m68k_op_divs_16_al, 0xf1ff, 0x81f9, {170, 134, 60, 60, 60, 60, 56}}, + {m68k_op_divs_16_pcdi, 0xf1ff, 0x81fa, {166, 130, 61, 61, 61, 61, 56}}, + {m68k_op_divs_16_pcix, 0xf1ff, 0x81fb, {168, 132, 63, 63, 63, 63, 56}}, + {m68k_op_divs_16_i, 0xf1ff, 0x81fc, {162, 126, 58, 58, 58, 58, 56}}, + {m68k_op_sub_8_er_pi7, 0xf1ff, 0x901f, { 8, 8, 6, 6, 6, 6, 2}}, + {m68k_op_sub_8_er_pd7, 0xf1ff, 0x9027, { 10, 10, 7, 7, 7, 7, 2}}, + {m68k_op_sub_8_er_aw, 0xf1ff, 0x9038, { 12, 12, 6, 6, 6, 6, 2}}, + {m68k_op_sub_8_er_al, 0xf1ff, 0x9039, { 16, 16, 6, 6, 6, 6, 2}}, + {m68k_op_sub_8_er_pcdi, 0xf1ff, 0x903a, { 12, 12, 7, 7, 7, 7, 2}}, + {m68k_op_sub_8_er_pcix, 0xf1ff, 0x903b, { 14, 14, 9, 9, 9, 9, 2}}, + {m68k_op_sub_8_er_i, 0xf1ff, 0x903c, { 8, 8, 4, 4, 4, 4, 2}}, + {m68k_op_sub_16_er_aw, 0xf1ff, 0x9078, { 12, 12, 6, 6, 6, 6, 2}}, + {m68k_op_sub_16_er_al, 0xf1ff, 0x9079, { 16, 16, 6, 6, 6, 6, 2}}, + {m68k_op_sub_16_er_pcdi, 0xf1ff, 0x907a, { 12, 12, 7, 7, 7, 7, 2}}, + {m68k_op_sub_16_er_pcix, 0xf1ff, 0x907b, { 14, 14, 9, 9, 9, 9, 2}}, + {m68k_op_sub_16_er_i, 0xf1ff, 0x907c, { 8, 8, 4, 4, 4, 4, 2}}, + {m68k_op_sub_32_er_aw, 0xf1ff, 0x90b8, { 18, 18, 6, 6, 6, 6, 2}}, + {m68k_op_sub_32_er_al, 0xf1ff, 0x90b9, { 22, 22, 6, 6, 6, 6, 2}}, + {m68k_op_sub_32_er_pcdi, 0xf1ff, 0x90ba, { 18, 18, 7, 7, 7, 7, 2}}, + {m68k_op_sub_32_er_pcix, 0xf1ff, 0x90bb, { 20, 20, 9, 9, 9, 9, 2}}, + {m68k_op_sub_32_er_i, 0xf1ff, 0x90bc, { 16, 14, 6, 6, 6, 6, 2}}, + {m68k_op_suba_16_aw, 0xf1ff, 0x90f8, { 16, 16, 6, 6, 6, 6, 2}}, + {m68k_op_suba_16_al, 0xf1ff, 0x90f9, { 20, 20, 6, 6, 6, 6, 2}}, + {m68k_op_suba_16_pcdi, 0xf1ff, 0x90fa, { 16, 16, 7, 7, 7, 7, 2}}, + {m68k_op_suba_16_pcix, 0xf1ff, 0x90fb, { 18, 18, 9, 9, 9, 9, 2}}, + {m68k_op_suba_16_i, 0xf1ff, 0x90fc, { 12, 12, 4, 4, 4, 4, 2}}, + {m68k_op_subx_8_mm_ay7, 0xf1ff, 0x910f, { 18, 18, 12, 12, 12, 12, 12}}, + {m68k_op_sub_8_re_pi7, 0xf1ff, 0x911f, { 12, 12, 8, 8, 8, 8, 4}}, + {m68k_op_sub_8_re_pd7, 0xf1ff, 0x9127, { 14, 14, 9, 9, 9, 9, 4}}, + {m68k_op_sub_8_re_aw, 0xf1ff, 0x9138, { 16, 16, 8, 8, 8, 8, 4}}, + {m68k_op_sub_8_re_al, 0xf1ff, 0x9139, { 20, 20, 8, 8, 8, 8, 4}}, + {m68k_op_sub_16_re_aw, 0xf1ff, 0x9178, { 16, 16, 8, 8, 8, 8, 4}}, + {m68k_op_sub_16_re_al, 0xf1ff, 0x9179, { 20, 20, 8, 8, 8, 8, 4}}, + {m68k_op_sub_32_re_aw, 0xf1ff, 0x91b8, { 24, 24, 8, 8, 8, 8, 4}}, + {m68k_op_sub_32_re_al, 0xf1ff, 0x91b9, { 28, 28, 8, 8, 8, 8, 4}}, + {m68k_op_suba_32_aw, 0xf1ff, 0x91f8, { 18, 18, 6, 6, 6, 6, 2}}, + {m68k_op_suba_32_al, 0xf1ff, 0x91f9, { 22, 22, 6, 6, 6, 6, 2}}, + {m68k_op_suba_32_pcdi, 0xf1ff, 0x91fa, { 18, 18, 7, 7, 7, 7, 2}}, + {m68k_op_suba_32_pcix, 0xf1ff, 0x91fb, { 20, 20, 9, 9, 9, 9, 2}}, + {m68k_op_suba_32_i, 0xf1ff, 0x91fc, { 16, 14, 6, 6, 6, 6, 2}}, + {m68k_op_cmp_8_pi7, 0xf1ff, 0xb01f, { 8, 8, 6, 6, 6, 6, 2}}, + {m68k_op_cmp_8_pd7, 0xf1ff, 0xb027, { 10, 10, 7, 7, 7, 7, 2}}, + {m68k_op_cmp_8_aw, 0xf1ff, 0xb038, { 12, 12, 6, 6, 6, 6, 2}}, + {m68k_op_cmp_8_al, 0xf1ff, 0xb039, { 16, 16, 6, 6, 6, 6, 2}}, + {m68k_op_cmp_8_pcdi, 0xf1ff, 0xb03a, { 12, 12, 7, 7, 7, 7, 2}}, + {m68k_op_cmp_8_pcix, 0xf1ff, 0xb03b, { 14, 14, 9, 9, 9, 9, 2}}, + {m68k_op_cmp_8_i, 0xf1ff, 0xb03c, { 8, 8, 4, 4, 4, 4, 2}}, + {m68k_op_cmp_16_aw, 0xf1ff, 0xb078, { 12, 12, 6, 6, 6, 6, 2}}, + {m68k_op_cmp_16_al, 0xf1ff, 0xb079, { 16, 16, 6, 6, 6, 6, 2}}, + {m68k_op_cmp_16_pcdi, 0xf1ff, 0xb07a, { 12, 12, 7, 7, 7, 7, 2}}, + {m68k_op_cmp_16_pcix, 0xf1ff, 0xb07b, { 14, 14, 9, 9, 9, 9, 2}}, + {m68k_op_cmp_16_i, 0xf1ff, 0xb07c, { 8, 8, 4, 4, 4, 4, 2}}, + {m68k_op_cmp_32_aw, 0xf1ff, 0xb0b8, { 18, 18, 6, 6, 6, 6, 2}}, + {m68k_op_cmp_32_al, 0xf1ff, 0xb0b9, { 22, 22, 6, 6, 6, 6, 2}}, + {m68k_op_cmp_32_pcdi, 0xf1ff, 0xb0ba, { 18, 18, 7, 7, 7, 7, 2}}, + {m68k_op_cmp_32_pcix, 0xf1ff, 0xb0bb, { 20, 20, 9, 9, 9, 9, 2}}, + {m68k_op_cmp_32_i, 0xf1ff, 0xb0bc, { 14, 14, 6, 6, 6, 6, 2}}, + {m68k_op_cmpa_16_aw, 0xf1ff, 0xb0f8, { 14, 14, 8, 8, 8, 8, 4}}, + {m68k_op_cmpa_16_al, 0xf1ff, 0xb0f9, { 18, 18, 8, 8, 8, 8, 4}}, + {m68k_op_cmpa_16_pcdi, 0xf1ff, 0xb0fa, { 14, 14, 9, 9, 9, 9, 4}}, + {m68k_op_cmpa_16_pcix, 0xf1ff, 0xb0fb, { 16, 16, 11, 11, 11, 11, 4}}, + {m68k_op_cmpa_16_i, 0xf1ff, 0xb0fc, { 10, 10, 6, 6, 6, 6, 4}}, + {m68k_op_cmpm_8_ay7, 0xf1ff, 0xb10f, { 12, 12, 9, 9, 9, 9, 9}}, + {m68k_op_eor_8_pi7, 0xf1ff, 0xb11f, { 12, 12, 8, 8, 8, 8, 4}}, + {m68k_op_eor_8_pd7, 0xf1ff, 0xb127, { 14, 14, 9, 9, 9, 9, 4}}, + {m68k_op_eor_8_aw, 0xf1ff, 0xb138, { 16, 16, 8, 8, 8, 8, 4}}, + {m68k_op_eor_8_al, 0xf1ff, 0xb139, { 20, 20, 8, 8, 8, 8, 4}}, + {m68k_op_eor_16_aw, 0xf1ff, 0xb178, { 16, 16, 8, 8, 8, 8, 4}}, + {m68k_op_eor_16_al, 0xf1ff, 0xb179, { 20, 20, 8, 8, 8, 8, 4}}, + {m68k_op_eor_32_aw, 0xf1ff, 0xb1b8, { 24, 24, 8, 8, 8, 8, 4}}, + {m68k_op_eor_32_al, 0xf1ff, 0xb1b9, { 28, 28, 8, 8, 8, 8, 4}}, + {m68k_op_cmpa_32_aw, 0xf1ff, 0xb1f8, { 18, 18, 8, 8, 8, 8, 4}}, + {m68k_op_cmpa_32_al, 0xf1ff, 0xb1f9, { 22, 22, 8, 8, 8, 8, 4}}, + {m68k_op_cmpa_32_pcdi, 0xf1ff, 0xb1fa, { 18, 18, 9, 9, 9, 9, 4}}, + {m68k_op_cmpa_32_pcix, 0xf1ff, 0xb1fb, { 20, 20, 11, 11, 11, 11, 4}}, + {m68k_op_cmpa_32_i, 0xf1ff, 0xb1fc, { 14, 14, 8, 8, 8, 8, 4}}, + {m68k_op_and_8_er_pi7, 0xf1ff, 0xc01f, { 8, 8, 6, 6, 6, 6, 2}}, + {m68k_op_and_8_er_pd7, 0xf1ff, 0xc027, { 10, 10, 7, 7, 7, 7, 2}}, + {m68k_op_and_8_er_aw, 0xf1ff, 0xc038, { 12, 12, 6, 6, 6, 6, 2}}, + {m68k_op_and_8_er_al, 0xf1ff, 0xc039, { 16, 16, 6, 6, 6, 6, 2}}, + {m68k_op_and_8_er_pcdi, 0xf1ff, 0xc03a, { 12, 12, 7, 7, 7, 7, 2}}, + {m68k_op_and_8_er_pcix, 0xf1ff, 0xc03b, { 14, 14, 9, 9, 9, 9, 2}}, + {m68k_op_and_8_er_i, 0xf1ff, 0xc03c, { 8, 8, 4, 4, 4, 4, 2}}, + {m68k_op_and_16_er_aw, 0xf1ff, 0xc078, { 12, 12, 6, 6, 6, 6, 2}}, + {m68k_op_and_16_er_al, 0xf1ff, 0xc079, { 16, 16, 6, 6, 6, 6, 2}}, + {m68k_op_and_16_er_pcdi, 0xf1ff, 0xc07a, { 12, 12, 7, 7, 7, 7, 2}}, + {m68k_op_and_16_er_pcix, 0xf1ff, 0xc07b, { 14, 14, 9, 9, 9, 9, 2}}, + {m68k_op_and_16_er_i, 0xf1ff, 0xc07c, { 8, 8, 4, 4, 4, 4, 2}}, + {m68k_op_and_32_er_aw, 0xf1ff, 0xc0b8, { 18, 18, 6, 6, 6, 6, 2}}, + {m68k_op_and_32_er_al, 0xf1ff, 0xc0b9, { 22, 22, 6, 6, 6, 6, 2}}, + {m68k_op_and_32_er_pcdi, 0xf1ff, 0xc0ba, { 18, 18, 7, 7, 7, 7, 2}}, + {m68k_op_and_32_er_pcix, 0xf1ff, 0xc0bb, { 20, 20, 9, 9, 9, 9, 2}}, + {m68k_op_and_32_er_i, 0xf1ff, 0xc0bc, { 16, 14, 6, 6, 6, 6, 2}}, + {m68k_op_mulu_16_aw, 0xf1ff, 0xc0f8, { 62, 38, 31, 31, 31, 31, 27}}, + {m68k_op_mulu_16_al, 0xf1ff, 0xc0f9, { 66, 42, 31, 31, 31, 31, 27}}, + {m68k_op_mulu_16_pcdi, 0xf1ff, 0xc0fa, { 62, 38, 32, 32, 32, 32, 27}}, + {m68k_op_mulu_16_pcix, 0xf1ff, 0xc0fb, { 64, 40, 34, 34, 34, 34, 27}}, + {m68k_op_mulu_16_i, 0xf1ff, 0xc0fc, { 58, 34, 29, 29, 29, 29, 27}}, + {m68k_op_abcd_8_mm_ay7, 0xf1ff, 0xc10f, { 18, 18, 16, 16, 16, 16, 16}}, + {m68k_op_and_8_re_pi7, 0xf1ff, 0xc11f, { 12, 12, 8, 8, 8, 8, 4}}, + {m68k_op_and_8_re_pd7, 0xf1ff, 0xc127, { 14, 14, 9, 9, 9, 9, 4}}, + {m68k_op_and_8_re_aw, 0xf1ff, 0xc138, { 16, 16, 8, 8, 8, 8, 4}}, + {m68k_op_and_8_re_al, 0xf1ff, 0xc139, { 20, 20, 8, 8, 8, 8, 4}}, + {m68k_op_and_16_re_aw, 0xf1ff, 0xc178, { 16, 16, 8, 8, 8, 8, 4}}, + {m68k_op_and_16_re_al, 0xf1ff, 0xc179, { 20, 20, 8, 8, 8, 8, 4}}, + {m68k_op_and_32_re_aw, 0xf1ff, 0xc1b8, { 24, 24, 8, 8, 8, 8, 4}}, + {m68k_op_and_32_re_al, 0xf1ff, 0xc1b9, { 28, 28, 8, 8, 8, 8, 4}}, + {m68k_op_muls_16_aw, 0xf1ff, 0xc1f8, { 62, 40, 31, 31, 31, 31, 27}}, + {m68k_op_muls_16_al, 0xf1ff, 0xc1f9, { 66, 44, 31, 31, 31, 31, 27}}, + {m68k_op_muls_16_pcdi, 0xf1ff, 0xc1fa, { 62, 40, 32, 32, 32, 32, 27}}, + {m68k_op_muls_16_pcix, 0xf1ff, 0xc1fb, { 64, 42, 34, 34, 34, 34, 27}}, + {m68k_op_muls_16_i, 0xf1ff, 0xc1fc, { 58, 36, 29, 29, 29, 29, 27}}, + {m68k_op_add_8_er_pi7, 0xf1ff, 0xd01f, { 8, 8, 6, 6, 6, 6, 2}}, + {m68k_op_add_8_er_pd7, 0xf1ff, 0xd027, { 10, 10, 7, 7, 7, 7, 2}}, + {m68k_op_add_8_er_aw, 0xf1ff, 0xd038, { 12, 12, 6, 6, 6, 6, 2}}, + {m68k_op_add_8_er_al, 0xf1ff, 0xd039, { 16, 16, 6, 6, 6, 6, 2}}, + {m68k_op_add_8_er_pcdi, 0xf1ff, 0xd03a, { 12, 12, 7, 7, 7, 7, 2}}, + {m68k_op_add_8_er_pcix, 0xf1ff, 0xd03b, { 14, 14, 9, 9, 9, 9, 2}}, + {m68k_op_add_8_er_i, 0xf1ff, 0xd03c, { 8, 8, 4, 4, 4, 4, 2}}, + {m68k_op_add_16_er_aw, 0xf1ff, 0xd078, { 12, 12, 6, 6, 6, 6, 2}}, + {m68k_op_add_16_er_al, 0xf1ff, 0xd079, { 16, 16, 6, 6, 6, 6, 2}}, + {m68k_op_add_16_er_pcdi, 0xf1ff, 0xd07a, { 12, 12, 7, 7, 7, 7, 2}}, + {m68k_op_add_16_er_pcix, 0xf1ff, 0xd07b, { 14, 14, 9, 9, 9, 9, 2}}, + {m68k_op_add_16_er_i, 0xf1ff, 0xd07c, { 8, 8, 4, 4, 4, 4, 2}}, + {m68k_op_add_32_er_aw, 0xf1ff, 0xd0b8, { 18, 18, 6, 6, 6, 6, 2}}, + {m68k_op_add_32_er_al, 0xf1ff, 0xd0b9, { 22, 22, 6, 6, 6, 6, 2}}, + {m68k_op_add_32_er_pcdi, 0xf1ff, 0xd0ba, { 18, 18, 7, 7, 7, 7, 2}}, + {m68k_op_add_32_er_pcix, 0xf1ff, 0xd0bb, { 20, 20, 9, 9, 9, 9, 2}}, + {m68k_op_add_32_er_i, 0xf1ff, 0xd0bc, { 16, 14, 6, 6, 6, 6, 2}}, + {m68k_op_adda_16_aw, 0xf1ff, 0xd0f8, { 16, 16, 6, 6, 6, 6, 2}}, + {m68k_op_adda_16_al, 0xf1ff, 0xd0f9, { 20, 20, 6, 6, 6, 6, 2}}, + {m68k_op_adda_16_pcdi, 0xf1ff, 0xd0fa, { 16, 16, 7, 7, 7, 7, 2}}, + {m68k_op_adda_16_pcix, 0xf1ff, 0xd0fb, { 18, 18, 9, 9, 9, 9, 2}}, + {m68k_op_adda_16_i, 0xf1ff, 0xd0fc, { 12, 12, 4, 4, 4, 4, 2}}, + {m68k_op_addx_8_mm_ay7, 0xf1ff, 0xd10f, { 18, 18, 12, 12, 12, 12, 12}}, + {m68k_op_add_8_re_pi7, 0xf1ff, 0xd11f, { 12, 12, 8, 8, 8, 8, 4}}, + {m68k_op_add_8_re_pd7, 0xf1ff, 0xd127, { 14, 14, 9, 9, 9, 9, 4}}, + {m68k_op_add_8_re_aw, 0xf1ff, 0xd138, { 16, 16, 8, 8, 8, 8, 4}}, + {m68k_op_add_8_re_al, 0xf1ff, 0xd139, { 20, 20, 8, 8, 8, 8, 4}}, + {m68k_op_add_16_re_aw, 0xf1ff, 0xd178, { 16, 16, 8, 8, 8, 8, 4}}, + {m68k_op_add_16_re_al, 0xf1ff, 0xd179, { 20, 20, 8, 8, 8, 8, 4}}, + {m68k_op_add_32_re_aw, 0xf1ff, 0xd1b8, { 24, 24, 8, 8, 8, 8, 4}}, + {m68k_op_add_32_re_al, 0xf1ff, 0xd1b9, { 28, 28, 8, 8, 8, 8, 4}}, + {m68k_op_adda_32_aw, 0xf1ff, 0xd1f8, { 18, 18, 6, 6, 6, 6, 2}}, + {m68k_op_adda_32_al, 0xf1ff, 0xd1f9, { 22, 22, 6, 6, 6, 6, 2}}, + {m68k_op_adda_32_pcdi, 0xf1ff, 0xd1fa, { 18, 18, 7, 7, 7, 7, 2}}, + {m68k_op_adda_32_pcix, 0xf1ff, 0xd1fb, { 20, 20, 9, 9, 9, 9, 2}}, + {m68k_op_adda_32_i, 0xf1ff, 0xd1fc, { 16, 14, 6, 6, 6, 6, 2}}, + {m68k_op_ori_8_d, 0xfff8, 0x0000, { 8, 8, 2, 2, 2, 2, 2}}, + {m68k_op_ori_8_ai, 0xfff8, 0x0010, { 16, 16, 8, 8, 8, 8, 4}}, + {m68k_op_ori_8_pi, 0xfff8, 0x0018, { 16, 16, 8, 8, 8, 8, 4}}, + {m68k_op_ori_8_pd, 0xfff8, 0x0020, { 18, 18, 9, 9, 9, 9, 4}}, + {m68k_op_ori_8_di, 0xfff8, 0x0028, { 20, 20, 9, 9, 9, 9, 4}}, + {m68k_op_ori_8_ix, 0xfff8, 0x0030, { 22, 22, 11, 11, 11, 11, 4}}, + {m68k_op_ori_16_d, 0xfff8, 0x0040, { 8, 8, 2, 2, 2, 2, 2}}, + {m68k_op_ori_16_ai, 0xfff8, 0x0050, { 16, 16, 8, 8, 8, 8, 4}}, + {m68k_op_ori_16_pi, 0xfff8, 0x0058, { 16, 16, 8, 8, 8, 8, 4}}, + {m68k_op_ori_16_pd, 0xfff8, 0x0060, { 18, 18, 9, 9, 9, 9, 4}}, + {m68k_op_ori_16_di, 0xfff8, 0x0068, { 20, 20, 9, 9, 9, 9, 4}}, + {m68k_op_ori_16_ix, 0xfff8, 0x0070, { 22, 22, 11, 11, 11, 11, 4}}, + {m68k_op_ori_32_d, 0xfff8, 0x0080, { 16, 14, 2, 2, 2, 2, 2}}, + {m68k_op_ori_32_ai, 0xfff8, 0x0090, { 28, 28, 8, 8, 8, 8, 4}}, + {m68k_op_ori_32_pi, 0xfff8, 0x0098, { 28, 28, 8, 8, 8, 8, 4}}, + {m68k_op_ori_32_pd, 0xfff8, 0x00a0, { 30, 30, 9, 9, 9, 9, 4}}, + {m68k_op_ori_32_di, 0xfff8, 0x00a8, { 32, 32, 9, 9, 9, 9, 4}}, + {m68k_op_ori_32_ix, 0xfff8, 0x00b0, { 34, 34, 11, 11, 11, 11, 4}}, + {m68k_op_chk2cmp2_8_ai, 0xfff8, 0x00d0, {255, 255, 22, 22, 22, 22, 18}}, + {m68k_op_chk2cmp2_8_di, 0xfff8, 0x00e8, {255, 255, 23, 23, 23, 23, 18}}, + {m68k_op_chk2cmp2_8_ix, 0xfff8, 0x00f0, {255, 255, 25, 25, 25, 25, 18}}, + {m68k_op_andi_8_d, 0xfff8, 0x0200, { 8, 8, 2, 2, 2, 2, 2}}, + {m68k_op_andi_8_ai, 0xfff8, 0x0210, { 16, 16, 8, 8, 8, 8, 4}}, + {m68k_op_andi_8_pi, 0xfff8, 0x0218, { 16, 16, 8, 8, 8, 8, 4}}, + {m68k_op_andi_8_pd, 0xfff8, 0x0220, { 18, 18, 9, 9, 9, 9, 4}}, + {m68k_op_andi_8_di, 0xfff8, 0x0228, { 20, 20, 9, 9, 9, 9, 4}}, + {m68k_op_andi_8_ix, 0xfff8, 0x0230, { 22, 22, 11, 11, 11, 11, 4}}, + {m68k_op_andi_16_d, 0xfff8, 0x0240, { 8, 8, 2, 2, 2, 2, 2}}, + {m68k_op_andi_16_ai, 0xfff8, 0x0250, { 16, 16, 8, 8, 8, 8, 4}}, + {m68k_op_andi_16_pi, 0xfff8, 0x0258, { 16, 16, 8, 8, 8, 8, 4}}, + {m68k_op_andi_16_pd, 0xfff8, 0x0260, { 18, 18, 9, 9, 9, 9, 4}}, + {m68k_op_andi_16_di, 0xfff8, 0x0268, { 20, 20, 9, 9, 9, 9, 4}}, + {m68k_op_andi_16_ix, 0xfff8, 0x0270, { 22, 22, 11, 11, 11, 11, 4}}, + {m68k_op_andi_32_d, 0xfff8, 0x0280, { 14, 14, 2, 2, 2, 2, 2}}, + {m68k_op_andi_32_ai, 0xfff8, 0x0290, { 28, 28, 8, 8, 8, 8, 4}}, + {m68k_op_andi_32_pi, 0xfff8, 0x0298, { 28, 28, 8, 8, 8, 8, 4}}, + {m68k_op_andi_32_pd, 0xfff8, 0x02a0, { 30, 30, 9, 9, 9, 9, 4}}, + {m68k_op_andi_32_di, 0xfff8, 0x02a8, { 32, 32, 9, 9, 9, 9, 4}}, + {m68k_op_andi_32_ix, 0xfff8, 0x02b0, { 34, 34, 11, 11, 11, 11, 4}}, + {m68k_op_chk2cmp2_16_ai, 0xfff8, 0x02d0, {255, 255, 22, 22, 22, 22, 18}}, + {m68k_op_chk2cmp2_16_di, 0xfff8, 0x02e8, {255, 255, 23, 23, 23, 23, 18}}, + {m68k_op_chk2cmp2_16_ix, 0xfff8, 0x02f0, {255, 255, 25, 25, 25, 25, 18}}, + {m68k_op_subi_8_d, 0xfff8, 0x0400, { 8, 8, 2, 2, 2, 2, 2}}, + {m68k_op_subi_8_ai, 0xfff8, 0x0410, { 16, 16, 8, 8, 8, 8, 4}}, + {m68k_op_subi_8_pi, 0xfff8, 0x0418, { 16, 16, 8, 8, 8, 8, 4}}, + {m68k_op_subi_8_pd, 0xfff8, 0x0420, { 18, 18, 9, 9, 9, 9, 4}}, + {m68k_op_subi_8_di, 0xfff8, 0x0428, { 20, 20, 9, 9, 9, 9, 4}}, + {m68k_op_subi_8_ix, 0xfff8, 0x0430, { 22, 22, 11, 11, 11, 11, 4}}, + {m68k_op_subi_16_d, 0xfff8, 0x0440, { 8, 8, 2, 2, 2, 2, 2}}, + {m68k_op_subi_16_ai, 0xfff8, 0x0450, { 16, 16, 8, 8, 8, 8, 4}}, + {m68k_op_subi_16_pi, 0xfff8, 0x0458, { 16, 16, 8, 8, 8, 8, 4}}, + {m68k_op_subi_16_pd, 0xfff8, 0x0460, { 18, 18, 9, 9, 9, 9, 4}}, + {m68k_op_subi_16_di, 0xfff8, 0x0468, { 20, 20, 9, 9, 9, 9, 4}}, + {m68k_op_subi_16_ix, 0xfff8, 0x0470, { 22, 22, 11, 11, 11, 11, 4}}, + {m68k_op_subi_32_d, 0xfff8, 0x0480, { 16, 14, 2, 2, 2, 2, 2}}, + {m68k_op_subi_32_ai, 0xfff8, 0x0490, { 28, 28, 8, 8, 8, 8, 4}}, + {m68k_op_subi_32_pi, 0xfff8, 0x0498, { 28, 28, 8, 8, 8, 8, 4}}, + {m68k_op_subi_32_pd, 0xfff8, 0x04a0, { 30, 30, 9, 9, 9, 9, 4}}, + {m68k_op_subi_32_di, 0xfff8, 0x04a8, { 32, 32, 9, 9, 9, 9, 4}}, + {m68k_op_subi_32_ix, 0xfff8, 0x04b0, { 34, 34, 11, 11, 11, 11, 4}}, + {m68k_op_chk2cmp2_32_ai, 0xfff8, 0x04d0, {255, 255, 22, 22, 22, 22, 18}}, + {m68k_op_chk2cmp2_32_di, 0xfff8, 0x04e8, {255, 255, 23, 23, 23, 23, 18}}, + {m68k_op_chk2cmp2_32_ix, 0xfff8, 0x04f0, {255, 255, 25, 25, 25, 25, 18}}, + {m68k_op_addi_8_d, 0xfff8, 0x0600, { 8, 8, 2, 2, 2, 2, 2}}, + {m68k_op_addi_8_ai, 0xfff8, 0x0610, { 16, 16, 8, 8, 8, 8, 4}}, + {m68k_op_addi_8_pi, 0xfff8, 0x0618, { 16, 16, 8, 8, 8, 8, 4}}, + {m68k_op_addi_8_pd, 0xfff8, 0x0620, { 18, 18, 9, 9, 9, 9, 4}}, + {m68k_op_addi_8_di, 0xfff8, 0x0628, { 20, 20, 9, 9, 9, 9, 4}}, + {m68k_op_addi_8_ix, 0xfff8, 0x0630, { 22, 22, 11, 11, 11, 11, 4}}, + {m68k_op_addi_16_d, 0xfff8, 0x0640, { 8, 8, 2, 2, 2, 2, 2}}, + {m68k_op_addi_16_ai, 0xfff8, 0x0650, { 16, 16, 8, 8, 8, 8, 4}}, + {m68k_op_addi_16_pi, 0xfff8, 0x0658, { 16, 16, 8, 8, 8, 8, 4}}, + {m68k_op_addi_16_pd, 0xfff8, 0x0660, { 18, 18, 9, 9, 9, 9, 4}}, + {m68k_op_addi_16_di, 0xfff8, 0x0668, { 20, 20, 9, 9, 9, 9, 4}}, + {m68k_op_addi_16_ix, 0xfff8, 0x0670, { 22, 22, 11, 11, 11, 11, 4}}, + {m68k_op_addi_32_d, 0xfff8, 0x0680, { 16, 14, 2, 2, 2, 2, 2}}, + {m68k_op_addi_32_ai, 0xfff8, 0x0690, { 28, 28, 8, 8, 8, 8, 4}}, + {m68k_op_addi_32_pi, 0xfff8, 0x0698, { 28, 28, 8, 8, 8, 8, 4}}, + {m68k_op_addi_32_pd, 0xfff8, 0x06a0, { 30, 30, 9, 9, 9, 9, 4}}, + {m68k_op_addi_32_di, 0xfff8, 0x06a8, { 32, 32, 9, 9, 9, 9, 4}}, + {m68k_op_addi_32_ix, 0xfff8, 0x06b0, { 34, 34, 11, 11, 11, 11, 4}}, + {m68k_op_callm_32_ai, 0xfff8, 0x06d0, {255, 255, 64, 64, 64, 64, 60}}, + {m68k_op_callm_32_di, 0xfff8, 0x06e8, {255, 255, 65, 65, 65, 65, 60}}, + {m68k_op_callm_32_ix, 0xfff8, 0x06f0, {255, 255, 67, 67, 67, 67, 60}}, + {m68k_op_btst_32_s_d, 0xfff8, 0x0800, { 10, 10, 4, 4, 4, 4, 4}}, + {m68k_op_btst_8_s_ai, 0xfff8, 0x0810, { 12, 12, 8, 8, 8, 8, 4}}, + {m68k_op_btst_8_s_pi, 0xfff8, 0x0818, { 12, 12, 8, 8, 8, 8, 4}}, + {m68k_op_btst_8_s_pd, 0xfff8, 0x0820, { 14, 14, 9, 9, 9, 9, 4}}, + {m68k_op_btst_8_s_di, 0xfff8, 0x0828, { 16, 16, 9, 9, 9, 9, 4}}, + {m68k_op_btst_8_s_ix, 0xfff8, 0x0830, { 18, 18, 11, 11, 11, 11, 4}}, + {m68k_op_bchg_32_s_d, 0xfff8, 0x0840, { 12, 12, 4, 4, 4, 4, 4}}, + {m68k_op_bchg_8_s_ai, 0xfff8, 0x0850, { 16, 16, 8, 8, 8, 8, 4}}, + {m68k_op_bchg_8_s_pi, 0xfff8, 0x0858, { 16, 16, 8, 8, 8, 8, 4}}, + {m68k_op_bchg_8_s_pd, 0xfff8, 0x0860, { 18, 18, 9, 9, 9, 9, 4}}, + {m68k_op_bchg_8_s_di, 0xfff8, 0x0868, { 20, 20, 9, 9, 9, 9, 4}}, + {m68k_op_bchg_8_s_ix, 0xfff8, 0x0870, { 22, 22, 11, 11, 11, 11, 4}}, + {m68k_op_bclr_32_s_d, 0xfff8, 0x0880, { 14, 14, 4, 4, 4, 4, 4}}, + {m68k_op_bclr_8_s_ai, 0xfff8, 0x0890, { 16, 16, 8, 8, 8, 8, 4}}, + {m68k_op_bclr_8_s_pi, 0xfff8, 0x0898, { 16, 16, 8, 8, 8, 8, 4}}, + {m68k_op_bclr_8_s_pd, 0xfff8, 0x08a0, { 18, 18, 9, 9, 9, 9, 4}}, + {m68k_op_bclr_8_s_di, 0xfff8, 0x08a8, { 20, 20, 9, 9, 9, 9, 4}}, + {m68k_op_bclr_8_s_ix, 0xfff8, 0x08b0, { 22, 22, 11, 11, 11, 11, 4}}, + {m68k_op_bset_32_s_d, 0xfff8, 0x08c0, { 12, 12, 4, 4, 4, 4, 4}}, + {m68k_op_bset_8_s_ai, 0xfff8, 0x08d0, { 16, 16, 8, 8, 8, 8, 4}}, + {m68k_op_bset_8_s_pi, 0xfff8, 0x08d8, { 16, 16, 8, 8, 8, 8, 4}}, + {m68k_op_bset_8_s_pd, 0xfff8, 0x08e0, { 18, 18, 9, 9, 9, 9, 4}}, + {m68k_op_bset_8_s_di, 0xfff8, 0x08e8, { 20, 20, 9, 9, 9, 9, 4}}, + {m68k_op_bset_8_s_ix, 0xfff8, 0x08f0, { 22, 22, 11, 11, 11, 11, 4}}, + {m68k_op_eori_8_d, 0xfff8, 0x0a00, { 8, 8, 2, 2, 2, 2, 2}}, + {m68k_op_eori_8_ai, 0xfff8, 0x0a10, { 16, 16, 8, 8, 8, 8, 4}}, + {m68k_op_eori_8_pi, 0xfff8, 0x0a18, { 16, 16, 8, 8, 8, 8, 4}}, + {m68k_op_eori_8_pd, 0xfff8, 0x0a20, { 18, 18, 9, 9, 9, 9, 4}}, + {m68k_op_eori_8_di, 0xfff8, 0x0a28, { 20, 20, 9, 9, 9, 9, 4}}, + {m68k_op_eori_8_ix, 0xfff8, 0x0a30, { 22, 22, 11, 11, 11, 11, 4}}, + {m68k_op_eori_16_d, 0xfff8, 0x0a40, { 8, 8, 2, 2, 2, 2, 2}}, + {m68k_op_eori_16_ai, 0xfff8, 0x0a50, { 16, 16, 8, 8, 8, 8, 4}}, + {m68k_op_eori_16_pi, 0xfff8, 0x0a58, { 16, 16, 8, 8, 8, 8, 4}}, + {m68k_op_eori_16_pd, 0xfff8, 0x0a60, { 18, 18, 9, 9, 9, 9, 4}}, + {m68k_op_eori_16_di, 0xfff8, 0x0a68, { 20, 20, 9, 9, 9, 9, 4}}, + {m68k_op_eori_16_ix, 0xfff8, 0x0a70, { 22, 22, 11, 11, 11, 11, 4}}, + {m68k_op_eori_32_d, 0xfff8, 0x0a80, { 16, 14, 2, 2, 2, 2, 2}}, + {m68k_op_eori_32_ai, 0xfff8, 0x0a90, { 28, 28, 8, 8, 8, 8, 4}}, + {m68k_op_eori_32_pi, 0xfff8, 0x0a98, { 28, 28, 8, 8, 8, 8, 4}}, + {m68k_op_eori_32_pd, 0xfff8, 0x0aa0, { 30, 30, 9, 9, 9, 9, 4}}, + {m68k_op_eori_32_di, 0xfff8, 0x0aa8, { 32, 32, 9, 9, 9, 9, 4}}, + {m68k_op_eori_32_ix, 0xfff8, 0x0ab0, { 34, 34, 11, 11, 11, 11, 4}}, + {m68k_op_cas_8_ai, 0xfff8, 0x0ad0, {255, 255, 16, 16, 16, 16, 12}}, + {m68k_op_cas_8_pi, 0xfff8, 0x0ad8, {255, 255, 16, 16, 16, 16, 12}}, + {m68k_op_cas_8_pd, 0xfff8, 0x0ae0, {255, 255, 17, 17, 17, 17, 12}}, + {m68k_op_cas_8_di, 0xfff8, 0x0ae8, {255, 255, 17, 17, 17, 17, 12}}, + {m68k_op_cas_8_ix, 0xfff8, 0x0af0, {255, 255, 19, 19, 19, 19, 12}}, + {m68k_op_cmpi_8_d, 0xfff8, 0x0c00, { 8, 8, 2, 2, 2, 2, 2}}, + {m68k_op_cmpi_8_ai, 0xfff8, 0x0c10, { 12, 12, 6, 6, 6, 6, 2}}, + {m68k_op_cmpi_8_pi, 0xfff8, 0x0c18, { 12, 12, 6, 6, 6, 6, 2}}, + {m68k_op_cmpi_8_pd, 0xfff8, 0x0c20, { 14, 14, 7, 7, 7, 7, 2}}, + {m68k_op_cmpi_8_di, 0xfff8, 0x0c28, { 16, 16, 7, 7, 7, 7, 2}}, + {m68k_op_cmpi_8_ix, 0xfff8, 0x0c30, { 18, 18, 9, 9, 9, 9, 2}}, + {m68k_op_cmpi_16_d, 0xfff8, 0x0c40, { 8, 8, 2, 2, 2, 2, 2}}, + {m68k_op_cmpi_16_ai, 0xfff8, 0x0c50, { 12, 12, 6, 6, 6, 6, 2}}, + {m68k_op_cmpi_16_pi, 0xfff8, 0x0c58, { 12, 12, 6, 6, 6, 6, 2}}, + {m68k_op_cmpi_16_pd, 0xfff8, 0x0c60, { 14, 14, 7, 7, 7, 7, 2}}, + {m68k_op_cmpi_16_di, 0xfff8, 0x0c68, { 16, 16, 7, 7, 7, 7, 2}}, + {m68k_op_cmpi_16_ix, 0xfff8, 0x0c70, { 18, 18, 9, 9, 9, 9, 2}}, + {m68k_op_cmpi_32_d, 0xfff8, 0x0c80, { 14, 12, 2, 2, 2, 2, 2}}, + {m68k_op_cmpi_32_ai, 0xfff8, 0x0c90, { 20, 20, 6, 6, 6, 6, 2}}, + {m68k_op_cmpi_32_pi, 0xfff8, 0x0c98, { 20, 20, 6, 6, 6, 6, 2}}, + {m68k_op_cmpi_32_pd, 0xfff8, 0x0ca0, { 22, 22, 7, 7, 7, 7, 2}}, + {m68k_op_cmpi_32_di, 0xfff8, 0x0ca8, { 24, 24, 7, 7, 7, 7, 2}}, + {m68k_op_cmpi_32_ix, 0xfff8, 0x0cb0, { 26, 26, 9, 9, 9, 9, 2}}, + {m68k_op_cas_16_ai, 0xfff8, 0x0cd0, {255, 255, 16, 16, 16, 16, 12}}, + {m68k_op_cas_16_pi, 0xfff8, 0x0cd8, {255, 255, 16, 16, 16, 16, 12}}, + {m68k_op_cas_16_pd, 0xfff8, 0x0ce0, {255, 255, 17, 17, 17, 17, 12}}, + {m68k_op_cas_16_di, 0xfff8, 0x0ce8, {255, 255, 17, 17, 17, 17, 12}}, + {m68k_op_cas_16_ix, 0xfff8, 0x0cf0, {255, 255, 19, 19, 19, 19, 12}}, + {m68k_op_moves_8_ai, 0xfff8, 0x0e10, {255, 18, 9, 9, 9, 9, 5}}, + {m68k_op_moves_8_pi, 0xfff8, 0x0e18, {255, 18, 9, 9, 9, 9, 5}}, + {m68k_op_moves_8_pd, 0xfff8, 0x0e20, {255, 20, 10, 10, 10, 10, 5}}, + {m68k_op_moves_8_di, 0xfff8, 0x0e28, {255, 26, 10, 10, 10, 10, 5}}, + {m68k_op_moves_8_ix, 0xfff8, 0x0e30, {255, 30, 12, 12, 12, 12, 5}}, + {m68k_op_moves_16_ai, 0xfff8, 0x0e50, {255, 18, 9, 9, 9, 9, 5}}, + {m68k_op_moves_16_pi, 0xfff8, 0x0e58, {255, 18, 9, 9, 9, 9, 5}}, + {m68k_op_moves_16_pd, 0xfff8, 0x0e60, {255, 20, 10, 10, 10, 10, 5}}, + {m68k_op_moves_16_di, 0xfff8, 0x0e68, {255, 26, 10, 10, 10, 10, 5}}, + {m68k_op_moves_16_ix, 0xfff8, 0x0e70, {255, 30, 12, 12, 12, 12, 5}}, + {m68k_op_moves_32_ai, 0xfff8, 0x0e90, {255, 22, 9, 9, 9, 9, 5}}, + {m68k_op_moves_32_pi, 0xfff8, 0x0e98, {255, 22, 9, 9, 9, 9, 5}}, + {m68k_op_moves_32_pd, 0xfff8, 0x0ea0, {255, 28, 10, 10, 10, 10, 5}}, + {m68k_op_moves_32_di, 0xfff8, 0x0ea8, {255, 32, 10, 10, 10, 10, 5}}, + {m68k_op_moves_32_ix, 0xfff8, 0x0eb0, {255, 36, 12, 12, 12, 12, 5}}, + {m68k_op_cas_32_ai, 0xfff8, 0x0ed0, {255, 255, 16, 16, 16, 16, 12}}, + {m68k_op_cas_32_pi, 0xfff8, 0x0ed8, {255, 255, 16, 16, 16, 16, 12}}, + {m68k_op_cas_32_pd, 0xfff8, 0x0ee0, {255, 255, 17, 17, 17, 17, 12}}, + {m68k_op_cas_32_di, 0xfff8, 0x0ee8, {255, 255, 17, 17, 17, 17, 12}}, + {m68k_op_cas_32_ix, 0xfff8, 0x0ef0, {255, 255, 19, 19, 19, 19, 12}}, + {m68k_op_move_8_aw_d, 0xfff8, 0x11c0, { 12, 12, 4, 4, 4, 4, 4}}, + {m68k_op_move_8_aw_ai, 0xfff8, 0x11d0, { 16, 16, 8, 8, 8, 8, 4}}, + {m68k_op_move_8_aw_pi, 0xfff8, 0x11d8, { 16, 16, 8, 8, 8, 8, 4}}, + {m68k_op_move_8_aw_pd, 0xfff8, 0x11e0, { 18, 18, 9, 9, 9, 9, 4}}, + {m68k_op_move_8_aw_di, 0xfff8, 0x11e8, { 20, 20, 9, 9, 9, 9, 4}}, + {m68k_op_move_8_aw_ix, 0xfff8, 0x11f0, { 22, 22, 11, 11, 11, 11, 4}}, + {m68k_op_move_8_al_d, 0xfff8, 0x13c0, { 16, 16, 6, 6, 6, 6, 6}}, + {m68k_op_move_8_al_ai, 0xfff8, 0x13d0, { 20, 20, 10, 10, 10, 10, 6}}, + {m68k_op_move_8_al_pi, 0xfff8, 0x13d8, { 20, 20, 10, 10, 10, 10, 6}}, + {m68k_op_move_8_al_pd, 0xfff8, 0x13e0, { 22, 22, 11, 11, 11, 11, 6}}, + {m68k_op_move_8_al_di, 0xfff8, 0x13e8, { 24, 24, 11, 11, 11, 11, 6}}, + {m68k_op_move_8_al_ix, 0xfff8, 0x13f0, { 26, 26, 13, 13, 13, 13, 6}}, + {m68k_op_move_8_pi7_d, 0xfff8, 0x1ec0, { 8, 8, 4, 4, 4, 4, 4}}, + {m68k_op_move_8_pi7_ai, 0xfff8, 0x1ed0, { 12, 12, 8, 8, 8, 8, 4}}, + {m68k_op_move_8_pi7_pi, 0xfff8, 0x1ed8, { 12, 12, 8, 8, 8, 8, 4}}, + {m68k_op_move_8_pi7_pd, 0xfff8, 0x1ee0, { 14, 14, 9, 9, 9, 9, 4}}, + {m68k_op_move_8_pi7_di, 0xfff8, 0x1ee8, { 16, 16, 9, 9, 9, 9, 4}}, + {m68k_op_move_8_pi7_ix, 0xfff8, 0x1ef0, { 18, 18, 11, 11, 11, 11, 4}}, + {m68k_op_move_8_pd7_d, 0xfff8, 0x1f00, { 8, 8, 5, 5, 5, 5, 5}}, + {m68k_op_move_8_pd7_ai, 0xfff8, 0x1f10, { 12, 12, 9, 9, 9, 9, 5}}, + {m68k_op_move_8_pd7_pi, 0xfff8, 0x1f18, { 12, 12, 9, 9, 9, 9, 5}}, + {m68k_op_move_8_pd7_pd, 0xfff8, 0x1f20, { 14, 14, 10, 10, 10, 10, 5}}, + {m68k_op_move_8_pd7_di, 0xfff8, 0x1f28, { 16, 16, 10, 10, 10, 10, 5}}, + {m68k_op_move_8_pd7_ix, 0xfff8, 0x1f30, { 18, 18, 12, 12, 12, 12, 5}}, + {m68k_op_move_32_aw_d, 0xfff8, 0x21c0, { 16, 16, 4, 4, 4, 4, 4}}, + {m68k_op_move_32_aw_a, 0xfff8, 0x21c8, { 16, 16, 4, 4, 4, 4, 4}}, + {m68k_op_move_32_aw_ai, 0xfff8, 0x21d0, { 24, 24, 8, 8, 8, 8, 4}}, + {m68k_op_move_32_aw_pi, 0xfff8, 0x21d8, { 24, 24, 8, 8, 8, 8, 4}}, + {m68k_op_move_32_aw_pd, 0xfff8, 0x21e0, { 26, 26, 9, 9, 9, 9, 4}}, + {m68k_op_move_32_aw_di, 0xfff8, 0x21e8, { 28, 28, 9, 9, 9, 9, 4}}, + {m68k_op_move_32_aw_ix, 0xfff8, 0x21f0, { 30, 30, 11, 11, 11, 11, 4}}, + {m68k_op_move_32_al_d, 0xfff8, 0x23c0, { 20, 20, 6, 6, 6, 6, 6}}, + {m68k_op_move_32_al_a, 0xfff8, 0x23c8, { 20, 20, 6, 6, 6, 6, 6}}, + {m68k_op_move_32_al_ai, 0xfff8, 0x23d0, { 28, 28, 10, 10, 10, 10, 6}}, + {m68k_op_move_32_al_pi, 0xfff8, 0x23d8, { 28, 28, 10, 10, 10, 10, 6}}, + {m68k_op_move_32_al_pd, 0xfff8, 0x23e0, { 30, 30, 11, 11, 11, 11, 6}}, + {m68k_op_move_32_al_di, 0xfff8, 0x23e8, { 32, 32, 11, 11, 11, 11, 6}}, + {m68k_op_move_32_al_ix, 0xfff8, 0x23f0, { 34, 34, 13, 13, 13, 13, 6}}, + {m68k_op_move_16_aw_d, 0xfff8, 0x31c0, { 12, 12, 4, 4, 4, 4, 4}}, + {m68k_op_move_16_aw_a, 0xfff8, 0x31c8, { 12, 12, 4, 4, 4, 4, 4}}, + {m68k_op_move_16_aw_ai, 0xfff8, 0x31d0, { 16, 16, 8, 8, 8, 8, 4}}, + {m68k_op_move_16_aw_pi, 0xfff8, 0x31d8, { 16, 16, 8, 8, 8, 8, 4}}, + {m68k_op_move_16_aw_pd, 0xfff8, 0x31e0, { 18, 18, 9, 9, 9, 9, 4}}, + {m68k_op_move_16_aw_di, 0xfff8, 0x31e8, { 20, 20, 9, 9, 9, 9, 4}}, + {m68k_op_move_16_aw_ix, 0xfff8, 0x31f0, { 22, 22, 11, 11, 11, 11, 4}}, + {m68k_op_move_16_al_d, 0xfff8, 0x33c0, { 16, 16, 6, 6, 6, 6, 6}}, + {m68k_op_move_16_al_a, 0xfff8, 0x33c8, { 16, 16, 6, 6, 6, 6, 6}}, + {m68k_op_move_16_al_ai, 0xfff8, 0x33d0, { 20, 20, 10, 10, 10, 10, 6}}, + {m68k_op_move_16_al_pi, 0xfff8, 0x33d8, { 20, 20, 10, 10, 10, 10, 6}}, + {m68k_op_move_16_al_pd, 0xfff8, 0x33e0, { 22, 22, 11, 11, 11, 11, 6}}, + {m68k_op_move_16_al_di, 0xfff8, 0x33e8, { 24, 24, 11, 11, 11, 11, 6}}, + {m68k_op_move_16_al_ix, 0xfff8, 0x33f0, { 26, 26, 13, 13, 13, 13, 6}}, + {m68k_op_negx_8_d, 0xfff8, 0x4000, { 4, 4, 2, 2, 2, 2, 2}}, + {m68k_op_negx_8_ai, 0xfff8, 0x4010, { 12, 12, 8, 8, 8, 8, 4}}, + {m68k_op_negx_8_pi, 0xfff8, 0x4018, { 12, 12, 8, 8, 8, 8, 4}}, + {m68k_op_negx_8_pd, 0xfff8, 0x4020, { 14, 14, 9, 9, 9, 9, 4}}, + {m68k_op_negx_8_di, 0xfff8, 0x4028, { 16, 16, 9, 9, 9, 9, 4}}, + {m68k_op_negx_8_ix, 0xfff8, 0x4030, { 18, 18, 11, 11, 11, 11, 4}}, + {m68k_op_negx_16_d, 0xfff8, 0x4040, { 4, 4, 2, 2, 2, 2, 2}}, + {m68k_op_negx_16_ai, 0xfff8, 0x4050, { 12, 12, 8, 8, 8, 8, 4}}, + {m68k_op_negx_16_pi, 0xfff8, 0x4058, { 12, 12, 8, 8, 8, 8, 4}}, + {m68k_op_negx_16_pd, 0xfff8, 0x4060, { 14, 14, 9, 9, 9, 9, 4}}, + {m68k_op_negx_16_di, 0xfff8, 0x4068, { 16, 16, 9, 9, 9, 9, 4}}, + {m68k_op_negx_16_ix, 0xfff8, 0x4070, { 18, 18, 11, 11, 11, 11, 4}}, + {m68k_op_negx_32_d, 0xfff8, 0x4080, { 6, 6, 2, 2, 2, 2, 2}}, + {m68k_op_negx_32_ai, 0xfff8, 0x4090, { 20, 20, 8, 8, 8, 8, 4}}, + {m68k_op_negx_32_pi, 0xfff8, 0x4098, { 20, 20, 8, 8, 8, 8, 4}}, + {m68k_op_negx_32_pd, 0xfff8, 0x40a0, { 22, 22, 9, 9, 9, 9, 4}}, + {m68k_op_negx_32_di, 0xfff8, 0x40a8, { 24, 24, 9, 9, 9, 9, 4}}, + {m68k_op_negx_32_ix, 0xfff8, 0x40b0, { 26, 26, 11, 11, 11, 11, 4}}, + {m68k_op_move_16_frs_d, 0xfff8, 0x40c0, { 6, 4, 8, 8, 8, 8, 8}}, + {m68k_op_move_16_frs_ai, 0xfff8, 0x40d0, { 12, 12, 12, 12, 12, 12, 8}}, + {m68k_op_move_16_frs_pi, 0xfff8, 0x40d8, { 12, 12, 12, 12, 12, 12, 8}}, + {m68k_op_move_16_frs_pd, 0xfff8, 0x40e0, { 14, 14, 13, 13, 13, 13, 8}}, + {m68k_op_move_16_frs_di, 0xfff8, 0x40e8, { 16, 16, 13, 13, 13, 13, 8}}, + {m68k_op_move_16_frs_ix, 0xfff8, 0x40f0, { 18, 18, 15, 15, 15, 15, 8}}, + {m68k_op_clr_8_d, 0xfff8, 0x4200, { 4, 4, 2, 2, 2, 2, 2}}, + {m68k_op_clr_8_ai, 0xfff8, 0x4210, { 12, 8, 8, 8, 8, 8, 4}}, + {m68k_op_clr_8_pi, 0xfff8, 0x4218, { 12, 8, 8, 8, 8, 8, 4}}, + {m68k_op_clr_8_pd, 0xfff8, 0x4220, { 14, 10, 9, 9, 9, 9, 4}}, + {m68k_op_clr_8_di, 0xfff8, 0x4228, { 16, 12, 9, 9, 9, 9, 4}}, + {m68k_op_clr_8_ix, 0xfff8, 0x4230, { 18, 14, 11, 11, 11, 11, 4}}, + {m68k_op_clr_16_d, 0xfff8, 0x4240, { 4, 4, 2, 2, 2, 2, 2}}, + {m68k_op_clr_16_ai, 0xfff8, 0x4250, { 12, 8, 8, 8, 8, 8, 4}}, + {m68k_op_clr_16_pi, 0xfff8, 0x4258, { 12, 8, 8, 8, 8, 8, 4}}, + {m68k_op_clr_16_pd, 0xfff8, 0x4260, { 14, 10, 9, 9, 9, 9, 4}}, + {m68k_op_clr_16_di, 0xfff8, 0x4268, { 16, 12, 9, 9, 9, 9, 4}}, + {m68k_op_clr_16_ix, 0xfff8, 0x4270, { 18, 14, 11, 11, 11, 11, 4}}, + {m68k_op_clr_32_d, 0xfff8, 0x4280, { 6, 6, 2, 2, 2, 2, 2}}, + {m68k_op_clr_32_ai, 0xfff8, 0x4290, { 20, 12, 8, 8, 8, 8, 4}}, + {m68k_op_clr_32_pi, 0xfff8, 0x4298, { 20, 12, 8, 8, 8, 8, 4}}, + {m68k_op_clr_32_pd, 0xfff8, 0x42a0, { 22, 14, 9, 9, 9, 9, 4}}, + {m68k_op_clr_32_di, 0xfff8, 0x42a8, { 24, 16, 9, 9, 9, 9, 4}}, + {m68k_op_clr_32_ix, 0xfff8, 0x42b0, { 26, 20, 11, 11, 11, 11, 4}}, + {m68k_op_move_16_frc_d, 0xfff8, 0x42c0, {255, 4, 4, 4, 4, 4, 4}}, + {m68k_op_move_16_frc_ai, 0xfff8, 0x42d0, {255, 12, 8, 8, 8, 8, 4}}, + {m68k_op_move_16_frc_pi, 0xfff8, 0x42d8, {255, 12, 8, 8, 8, 8, 4}}, + {m68k_op_move_16_frc_pd, 0xfff8, 0x42e0, {255, 14, 9, 9, 9, 9, 4}}, + {m68k_op_move_16_frc_di, 0xfff8, 0x42e8, {255, 16, 9, 9, 9, 9, 4}}, + {m68k_op_move_16_frc_ix, 0xfff8, 0x42f0, {255, 18, 11, 11, 11, 11, 4}}, + {m68k_op_neg_8_d, 0xfff8, 0x4400, { 4, 4, 2, 2, 2, 2, 2}}, + {m68k_op_neg_8_ai, 0xfff8, 0x4410, { 12, 12, 8, 8, 8, 8, 4}}, + {m68k_op_neg_8_pi, 0xfff8, 0x4418, { 12, 12, 8, 8, 8, 8, 4}}, + {m68k_op_neg_8_pd, 0xfff8, 0x4420, { 14, 14, 9, 9, 9, 9, 4}}, + {m68k_op_neg_8_di, 0xfff8, 0x4428, { 16, 16, 9, 9, 9, 9, 4}}, + {m68k_op_neg_8_ix, 0xfff8, 0x4430, { 18, 18, 11, 11, 11, 11, 4}}, + {m68k_op_neg_16_d, 0xfff8, 0x4440, { 4, 4, 2, 2, 2, 2, 2}}, + {m68k_op_neg_16_ai, 0xfff8, 0x4450, { 12, 12, 8, 8, 8, 8, 4}}, + {m68k_op_neg_16_pi, 0xfff8, 0x4458, { 12, 12, 8, 8, 8, 8, 4}}, + {m68k_op_neg_16_pd, 0xfff8, 0x4460, { 14, 14, 9, 9, 9, 9, 4}}, + {m68k_op_neg_16_di, 0xfff8, 0x4468, { 16, 16, 9, 9, 9, 9, 4}}, + {m68k_op_neg_16_ix, 0xfff8, 0x4470, { 18, 18, 11, 11, 11, 11, 4}}, + {m68k_op_neg_32_d, 0xfff8, 0x4480, { 6, 6, 2, 2, 2, 2, 2}}, + {m68k_op_neg_32_ai, 0xfff8, 0x4490, { 20, 20, 8, 8, 8, 8, 4}}, + {m68k_op_neg_32_pi, 0xfff8, 0x4498, { 20, 20, 8, 8, 8, 8, 4}}, + {m68k_op_neg_32_pd, 0xfff8, 0x44a0, { 22, 22, 9, 9, 9, 9, 4}}, + {m68k_op_neg_32_di, 0xfff8, 0x44a8, { 24, 24, 9, 9, 9, 9, 4}}, + {m68k_op_neg_32_ix, 0xfff8, 0x44b0, { 26, 26, 11, 11, 11, 11, 4}}, + {m68k_op_move_16_toc_d, 0xfff8, 0x44c0, { 12, 12, 4, 4, 4, 4, 4}}, + {m68k_op_move_16_toc_ai, 0xfff8, 0x44d0, { 16, 16, 8, 8, 8, 8, 4}}, + {m68k_op_move_16_toc_pi, 0xfff8, 0x44d8, { 16, 16, 8, 8, 8, 8, 4}}, + {m68k_op_move_16_toc_pd, 0xfff8, 0x44e0, { 18, 18, 9, 9, 9, 9, 4}}, + {m68k_op_move_16_toc_di, 0xfff8, 0x44e8, { 20, 20, 9, 9, 9, 9, 4}}, + {m68k_op_move_16_toc_ix, 0xfff8, 0x44f0, { 22, 22, 11, 11, 11, 11, 4}}, + {m68k_op_not_8_d, 0xfff8, 0x4600, { 4, 4, 2, 2, 2, 2, 2}}, + {m68k_op_not_8_ai, 0xfff8, 0x4610, { 12, 12, 8, 8, 8, 8, 4}}, + {m68k_op_not_8_pi, 0xfff8, 0x4618, { 12, 12, 8, 8, 8, 8, 4}}, + {m68k_op_not_8_pd, 0xfff8, 0x4620, { 14, 14, 9, 9, 9, 9, 4}}, + {m68k_op_not_8_di, 0xfff8, 0x4628, { 16, 16, 9, 9, 9, 9, 4}}, + {m68k_op_not_8_ix, 0xfff8, 0x4630, { 18, 18, 11, 11, 11, 11, 4}}, + {m68k_op_not_16_d, 0xfff8, 0x4640, { 4, 4, 2, 2, 2, 2, 2}}, + {m68k_op_not_16_ai, 0xfff8, 0x4650, { 12, 12, 8, 8, 8, 8, 4}}, + {m68k_op_not_16_pi, 0xfff8, 0x4658, { 12, 12, 8, 8, 8, 8, 4}}, + {m68k_op_not_16_pd, 0xfff8, 0x4660, { 14, 14, 9, 9, 9, 9, 4}}, + {m68k_op_not_16_di, 0xfff8, 0x4668, { 16, 16, 9, 9, 9, 9, 4}}, + {m68k_op_not_16_ix, 0xfff8, 0x4670, { 18, 18, 11, 11, 11, 11, 4}}, + {m68k_op_not_32_d, 0xfff8, 0x4680, { 6, 6, 2, 2, 2, 2, 2}}, + {m68k_op_not_32_ai, 0xfff8, 0x4690, { 20, 20, 8, 8, 8, 8, 4}}, + {m68k_op_not_32_pi, 0xfff8, 0x4698, { 20, 20, 8, 8, 8, 8, 4}}, + {m68k_op_not_32_pd, 0xfff8, 0x46a0, { 22, 22, 9, 9, 9, 9, 4}}, + {m68k_op_not_32_di, 0xfff8, 0x46a8, { 24, 24, 9, 9, 9, 9, 4}}, + {m68k_op_not_32_ix, 0xfff8, 0x46b0, { 26, 26, 11, 11, 11, 11, 4}}, + {m68k_op_move_16_tos_d, 0xfff8, 0x46c0, { 12, 12, 8, 8, 8, 8, 8}}, + {m68k_op_move_16_tos_ai, 0xfff8, 0x46d0, { 16, 16, 12, 12, 12, 12, 8}}, + {m68k_op_move_16_tos_pi, 0xfff8, 0x46d8, { 16, 16, 12, 12, 12, 12, 8}}, + {m68k_op_move_16_tos_pd, 0xfff8, 0x46e0, { 18, 18, 13, 13, 13, 13, 8}}, + {m68k_op_move_16_tos_di, 0xfff8, 0x46e8, { 20, 20, 13, 13, 13, 13, 8}}, + {m68k_op_move_16_tos_ix, 0xfff8, 0x46f0, { 22, 22, 15, 15, 15, 15, 8}}, + {m68k_op_nbcd_8_d, 0xfff8, 0x4800, { 6, 6, 6, 6, 6, 6, 6}}, + {m68k_op_link_32, 0xfff8, 0x4808, {255, 255, 6, 6, 6, 6, 6}}, + {m68k_op_nbcd_8_ai, 0xfff8, 0x4810, { 12, 12, 10, 10, 10, 10, 6}}, + {m68k_op_nbcd_8_pi, 0xfff8, 0x4818, { 12, 12, 10, 10, 10, 10, 6}}, + {m68k_op_nbcd_8_pd, 0xfff8, 0x4820, { 14, 14, 11, 11, 11, 11, 6}}, + {m68k_op_nbcd_8_di, 0xfff8, 0x4828, { 16, 16, 11, 11, 11, 11, 6}}, + {m68k_op_nbcd_8_ix, 0xfff8, 0x4830, { 18, 18, 13, 13, 13, 13, 6}}, + {m68k_op_swap_32, 0xfff8, 0x4840, { 4, 4, 4, 4, 4, 4, 4}}, + {m68k_op_bkpt, 0xfff8, 0x4848, {255, 10, 10, 10, 10, 10, 10}}, + {m68k_op_pea_32_ai, 0xfff8, 0x4850, { 12, 12, 9, 9, 9, 9, 5}}, + {m68k_op_pea_32_di, 0xfff8, 0x4868, { 16, 16, 10, 10, 10, 10, 5}}, + {m68k_op_pea_32_ix, 0xfff8, 0x4870, { 20, 20, 12, 12, 12, 12, 5}}, + {m68k_op_ext_16, 0xfff8, 0x4880, { 4, 4, 4, 4, 4, 4, 4}}, + {m68k_op_movem_16_re_ai, 0xfff8, 0x4890, { 8, 8, 8, 8, 8, 8, 4}}, + {m68k_op_movem_16_re_pd, 0xfff8, 0x48a0, { 8, 8, 4, 4, 4, 4, 4}}, + {m68k_op_movem_16_re_di, 0xfff8, 0x48a8, { 12, 12, 9, 9, 9, 9, 4}}, + {m68k_op_movem_16_re_ix, 0xfff8, 0x48b0, { 14, 14, 11, 11, 11, 11, 4}}, + {m68k_op_ext_32, 0xfff8, 0x48c0, { 4, 4, 4, 4, 4, 4, 4}}, + {m68k_op_movem_32_re_ai, 0xfff8, 0x48d0, { 8, 8, 8, 8, 8, 8, 4}}, + {m68k_op_movem_32_re_pd, 0xfff8, 0x48e0, { 8, 8, 4, 4, 4, 4, 4}}, + {m68k_op_movem_32_re_di, 0xfff8, 0x48e8, { 12, 12, 9, 9, 9, 9, 4}}, + {m68k_op_movem_32_re_ix, 0xfff8, 0x48f0, { 14, 14, 11, 11, 11, 11, 4}}, + {m68k_op_extb_32, 0xfff8, 0x49c0, {255, 255, 4, 4, 4, 4, 4}}, + {m68k_op_tst_8_d, 0xfff8, 0x4a00, { 4, 4, 2, 2, 2, 2, 2}}, + {m68k_op_tst_8_ai, 0xfff8, 0x4a10, { 8, 8, 6, 6, 6, 6, 2}}, + {m68k_op_tst_8_pi, 0xfff8, 0x4a18, { 8, 8, 6, 6, 6, 6, 2}}, + {m68k_op_tst_8_pd, 0xfff8, 0x4a20, { 10, 10, 7, 7, 7, 7, 2}}, + {m68k_op_tst_8_di, 0xfff8, 0x4a28, { 12, 12, 7, 7, 7, 7, 2}}, + {m68k_op_tst_8_ix, 0xfff8, 0x4a30, { 14, 14, 9, 9, 9, 9, 2}}, + {m68k_op_tst_16_d, 0xfff8, 0x4a40, { 4, 4, 2, 2, 2, 2, 2}}, + {m68k_op_tst_16_a, 0xfff8, 0x4a48, {255, 255, 2, 2, 2, 2, 2}}, + {m68k_op_tst_16_ai, 0xfff8, 0x4a50, { 8, 8, 6, 6, 6, 6, 2}}, + {m68k_op_tst_16_pi, 0xfff8, 0x4a58, { 8, 8, 6, 6, 6, 6, 2}}, + {m68k_op_tst_16_pd, 0xfff8, 0x4a60, { 10, 10, 7, 7, 7, 7, 2}}, + {m68k_op_tst_16_di, 0xfff8, 0x4a68, { 12, 12, 7, 7, 7, 7, 2}}, + {m68k_op_tst_16_ix, 0xfff8, 0x4a70, { 14, 14, 9, 9, 9, 9, 2}}, + {m68k_op_tst_32_d, 0xfff8, 0x4a80, { 4, 4, 2, 2, 2, 2, 2}}, + {m68k_op_tst_32_a, 0xfff8, 0x4a88, {255, 255, 2, 2, 2, 2, 2}}, + {m68k_op_tst_32_ai, 0xfff8, 0x4a90, { 12, 12, 6, 6, 6, 6, 2}}, + {m68k_op_tst_32_pi, 0xfff8, 0x4a98, { 12, 12, 6, 6, 6, 6, 2}}, + {m68k_op_tst_32_pd, 0xfff8, 0x4aa0, { 14, 14, 7, 7, 7, 7, 2}}, + {m68k_op_tst_32_di, 0xfff8, 0x4aa8, { 16, 16, 7, 7, 7, 7, 2}}, + {m68k_op_tst_32_ix, 0xfff8, 0x4ab0, { 18, 18, 9, 9, 9, 9, 2}}, + {m68k_op_tas_8_d, 0xfff8, 0x4ac0, { 4, 4, 4, 4, 4, 4, 4}}, + {m68k_op_tas_8_ai, 0xfff8, 0x4ad0, { 18, 18, 16, 16, 16, 16, 12}}, + {m68k_op_tas_8_pi, 0xfff8, 0x4ad8, { 18, 18, 16, 16, 16, 16, 12}}, + {m68k_op_tas_8_pd, 0xfff8, 0x4ae0, { 20, 20, 17, 17, 17, 17, 12}}, + {m68k_op_tas_8_di, 0xfff8, 0x4ae8, { 22, 22, 17, 17, 17, 17, 12}}, + {m68k_op_tas_8_ix, 0xfff8, 0x4af0, { 24, 24, 19, 19, 19, 19, 12}}, + {m68k_op_mull_32_d, 0xfff8, 0x4c00, {255, 255, 43, 43, 43, 43, 43}}, + {m68k_op_mull_32_ai, 0xfff8, 0x4c10, {255, 255, 47, 47, 47, 47, 43}}, + {m68k_op_mull_32_pi, 0xfff8, 0x4c18, {255, 255, 47, 47, 47, 47, 43}}, + {m68k_op_mull_32_pd, 0xfff8, 0x4c20, {255, 255, 48, 48, 48, 48, 43}}, + {m68k_op_mull_32_di, 0xfff8, 0x4c28, {255, 255, 48, 48, 48, 48, 43}}, + {m68k_op_mull_32_ix, 0xfff8, 0x4c30, {255, 255, 50, 50, 50, 50, 43}}, + {m68k_op_divl_32_d, 0xfff8, 0x4c40, {255, 255, 84, 84, 84, 84, 84}}, + {m68k_op_divl_32_ai, 0xfff8, 0x4c50, {255, 255, 88, 88, 88, 88, 84}}, + {m68k_op_divl_32_pi, 0xfff8, 0x4c58, {255, 255, 88, 88, 88, 88, 84}}, + {m68k_op_divl_32_pd, 0xfff8, 0x4c60, {255, 255, 89, 89, 89, 89, 84}}, + {m68k_op_divl_32_di, 0xfff8, 0x4c68, {255, 255, 89, 89, 89, 89, 84}}, + {m68k_op_divl_32_ix, 0xfff8, 0x4c70, {255, 255, 91, 91, 91, 91, 84}}, + {m68k_op_movem_16_er_ai, 0xfff8, 0x4c90, { 12, 12, 12, 12, 12, 12, 8}}, + {m68k_op_movem_16_er_pi, 0xfff8, 0x4c98, { 12, 12, 8, 8, 8, 8, 8}}, + {m68k_op_movem_16_er_di, 0xfff8, 0x4ca8, { 16, 16, 13, 13, 13, 13, 8}}, + {m68k_op_movem_16_er_ix, 0xfff8, 0x4cb0, { 18, 18, 15, 15, 15, 15, 8}}, + {m68k_op_movem_32_er_ai, 0xfff8, 0x4cd0, { 12, 12, 12, 12, 12, 12, 8}}, + {m68k_op_movem_32_er_pi, 0xfff8, 0x4cd8, { 12, 12, 8, 8, 8, 8, 8}}, + {m68k_op_movem_32_er_di, 0xfff8, 0x4ce8, { 16, 16, 13, 13, 13, 13, 8}}, + {m68k_op_movem_32_er_ix, 0xfff8, 0x4cf0, { 18, 18, 15, 15, 15, 15, 8}}, + {m68k_op_link_16, 0xfff8, 0x4e50, { 16, 16, 5, 5, 5, 5, 5}}, + {m68k_op_unlk_32, 0xfff8, 0x4e58, { 12, 12, 6, 6, 6, 6, 6}}, + {m68k_op_move_32_tou, 0xfff8, 0x4e60, { 4, 6, 2, 2, 2, 2, 2}}, + {m68k_op_move_32_fru, 0xfff8, 0x4e68, { 4, 6, 2, 2, 2, 2, 2}}, + {m68k_op_jsr_32_ai, 0xfff8, 0x4e90, { 16, 16, 4, 4, 4, 4, 0}}, + {m68k_op_jsr_32_di, 0xfff8, 0x4ea8, { 18, 18, 5, 5, 5, 5, 0}}, + {m68k_op_jsr_32_ix, 0xfff8, 0x4eb0, { 22, 22, 7, 7, 7, 7, 0}}, + {m68k_op_jmp_32_ai, 0xfff8, 0x4ed0, { 8, 8, 4, 4, 4, 4, 0}}, + {m68k_op_jmp_32_di, 0xfff8, 0x4ee8, { 10, 10, 5, 5, 5, 5, 0}}, + {m68k_op_jmp_32_ix, 0xfff8, 0x4ef0, { 14, 14, 7, 7, 7, 7, 0}}, + {m68k_op_st_8_d, 0xfff8, 0x50c0, { 6, 4, 4, 4, 4, 4, 4}}, + {m68k_op_dbt_16, 0xfff8, 0x50c8, { 12, 12, 6, 6, 6, 6, 6}}, + {m68k_op_st_8_ai, 0xfff8, 0x50d0, { 12, 12, 10, 10, 10, 10, 6}}, + {m68k_op_st_8_pi, 0xfff8, 0x50d8, { 12, 12, 10, 10, 10, 10, 6}}, + {m68k_op_st_8_pd, 0xfff8, 0x50e0, { 14, 14, 11, 11, 11, 11, 6}}, + {m68k_op_st_8_di, 0xfff8, 0x50e8, { 16, 16, 11, 11, 11, 11, 6}}, + {m68k_op_st_8_ix, 0xfff8, 0x50f0, { 18, 18, 13, 13, 13, 13, 6}}, + {m68k_op_sf_8_d, 0xfff8, 0x51c0, { 4, 4, 4, 4, 4, 4, 4}}, + {m68k_op_dbf_16, 0xfff8, 0x51c8, { 12, 12, 6, 4, 4, 4, 4}}, + {m68k_op_sf_8_ai, 0xfff8, 0x51d0, { 12, 12, 10, 10, 10, 10, 6}}, + {m68k_op_sf_8_pi, 0xfff8, 0x51d8, { 12, 12, 10, 10, 10, 10, 6}}, + {m68k_op_sf_8_pd, 0xfff8, 0x51e0, { 14, 14, 11, 11, 11, 11, 6}}, + {m68k_op_sf_8_di, 0xfff8, 0x51e8, { 16, 16, 11, 11, 11, 11, 6}}, + {m68k_op_sf_8_ix, 0xfff8, 0x51f0, { 18, 18, 13, 13, 13, 13, 6}}, + {m68k_op_shi_8_d, 0xfff8, 0x52c0, { 4, 4, 4, 4, 4, 4, 4}}, + {m68k_op_dbhi_16, 0xfff8, 0x52c8, { 12, 12, 6, 6, 6, 6, 6}}, + {m68k_op_shi_8_ai, 0xfff8, 0x52d0, { 12, 12, 10, 10, 10, 10, 6}}, + {m68k_op_shi_8_pi, 0xfff8, 0x52d8, { 12, 12, 10, 10, 10, 10, 6}}, + {m68k_op_shi_8_pd, 0xfff8, 0x52e0, { 14, 14, 11, 11, 11, 11, 6}}, + {m68k_op_shi_8_di, 0xfff8, 0x52e8, { 16, 16, 11, 11, 11, 11, 6}}, + {m68k_op_shi_8_ix, 0xfff8, 0x52f0, { 18, 18, 13, 13, 13, 13, 6}}, + {m68k_op_sls_8_d, 0xfff8, 0x53c0, { 4, 4, 4, 4, 4, 4, 4}}, + {m68k_op_dbls_16, 0xfff8, 0x53c8, { 12, 12, 6, 6, 6, 6, 6}}, + {m68k_op_sls_8_ai, 0xfff8, 0x53d0, { 12, 12, 10, 10, 10, 10, 6}}, + {m68k_op_sls_8_pi, 0xfff8, 0x53d8, { 12, 12, 10, 10, 10, 10, 6}}, + {m68k_op_sls_8_pd, 0xfff8, 0x53e0, { 14, 14, 11, 11, 11, 11, 6}}, + {m68k_op_sls_8_di, 0xfff8, 0x53e8, { 16, 16, 11, 11, 11, 11, 6}}, + {m68k_op_sls_8_ix, 0xfff8, 0x53f0, { 18, 18, 13, 13, 13, 13, 6}}, + {m68k_op_scc_8_d, 0xfff8, 0x54c0, { 4, 4, 4, 4, 4, 4, 4}}, + {m68k_op_dbcc_16, 0xfff8, 0x54c8, { 12, 12, 6, 6, 6, 6, 6}}, + {m68k_op_scc_8_ai, 0xfff8, 0x54d0, { 12, 12, 10, 10, 10, 10, 6}}, + {m68k_op_scc_8_pi, 0xfff8, 0x54d8, { 12, 12, 10, 10, 10, 10, 6}}, + {m68k_op_scc_8_pd, 0xfff8, 0x54e0, { 14, 14, 11, 11, 11, 11, 6}}, + {m68k_op_scc_8_di, 0xfff8, 0x54e8, { 16, 16, 11, 11, 11, 11, 6}}, + {m68k_op_scc_8_ix, 0xfff8, 0x54f0, { 18, 18, 13, 13, 13, 13, 6}}, + {m68k_op_scs_8_d, 0xfff8, 0x55c0, { 4, 4, 4, 4, 4, 4, 4}}, + {m68k_op_dbcs_16, 0xfff8, 0x55c8, { 12, 12, 6, 6, 6, 6, 6}}, + {m68k_op_scs_8_ai, 0xfff8, 0x55d0, { 12, 12, 10, 10, 10, 10, 6}}, + {m68k_op_scs_8_pi, 0xfff8, 0x55d8, { 12, 12, 10, 10, 10, 10, 6}}, + {m68k_op_scs_8_pd, 0xfff8, 0x55e0, { 14, 14, 11, 11, 11, 11, 6}}, + {m68k_op_scs_8_di, 0xfff8, 0x55e8, { 16, 16, 11, 11, 11, 11, 6}}, + {m68k_op_scs_8_ix, 0xfff8, 0x55f0, { 18, 18, 13, 13, 13, 13, 6}}, + {m68k_op_sne_8_d, 0xfff8, 0x56c0, { 4, 4, 4, 4, 4, 4, 4}}, + {m68k_op_dbne_16, 0xfff8, 0x56c8, { 12, 12, 6, 6, 6, 6, 6}}, + {m68k_op_sne_8_ai, 0xfff8, 0x56d0, { 12, 12, 10, 10, 10, 10, 6}}, + {m68k_op_sne_8_pi, 0xfff8, 0x56d8, { 12, 12, 10, 10, 10, 10, 6}}, + {m68k_op_sne_8_pd, 0xfff8, 0x56e0, { 14, 14, 11, 11, 11, 11, 6}}, + {m68k_op_sne_8_di, 0xfff8, 0x56e8, { 16, 16, 11, 11, 11, 11, 6}}, + {m68k_op_sne_8_ix, 0xfff8, 0x56f0, { 18, 18, 13, 13, 13, 13, 6}}, + {m68k_op_seq_8_d, 0xfff8, 0x57c0, { 4, 4, 4, 4, 4, 4, 4}}, + {m68k_op_dbeq_16, 0xfff8, 0x57c8, { 12, 12, 6, 6, 6, 6, 6}}, + {m68k_op_seq_8_ai, 0xfff8, 0x57d0, { 12, 12, 10, 10, 10, 10, 6}}, + {m68k_op_seq_8_pi, 0xfff8, 0x57d8, { 12, 12, 10, 10, 10, 10, 6}}, + {m68k_op_seq_8_pd, 0xfff8, 0x57e0, { 14, 14, 11, 11, 11, 11, 6}}, + {m68k_op_seq_8_di, 0xfff8, 0x57e8, { 16, 16, 11, 11, 11, 11, 6}}, + {m68k_op_seq_8_ix, 0xfff8, 0x57f0, { 18, 18, 13, 13, 13, 13, 6}}, + {m68k_op_svc_8_d, 0xfff8, 0x58c0, { 4, 4, 4, 4, 4, 4, 4}}, + {m68k_op_dbvc_16, 0xfff8, 0x58c8, { 12, 12, 6, 6, 6, 6, 6}}, + {m68k_op_svc_8_ai, 0xfff8, 0x58d0, { 12, 12, 10, 10, 10, 10, 6}}, + {m68k_op_svc_8_pi, 0xfff8, 0x58d8, { 12, 12, 10, 10, 10, 10, 6}}, + {m68k_op_svc_8_pd, 0xfff8, 0x58e0, { 14, 14, 11, 11, 11, 11, 6}}, + {m68k_op_svc_8_di, 0xfff8, 0x58e8, { 16, 16, 11, 11, 11, 11, 6}}, + {m68k_op_svc_8_ix, 0xfff8, 0x58f0, { 18, 18, 13, 13, 13, 13, 6}}, + {m68k_op_svs_8_d, 0xfff8, 0x59c0, { 4, 4, 4, 4, 4, 4, 4}}, + {m68k_op_dbvs_16, 0xfff8, 0x59c8, { 12, 12, 6, 6, 6, 6, 6}}, + {m68k_op_svs_8_ai, 0xfff8, 0x59d0, { 12, 12, 10, 10, 10, 10, 6}}, + {m68k_op_svs_8_pi, 0xfff8, 0x59d8, { 12, 12, 10, 10, 10, 10, 6}}, + {m68k_op_svs_8_pd, 0xfff8, 0x59e0, { 14, 14, 11, 11, 11, 11, 6}}, + {m68k_op_svs_8_di, 0xfff8, 0x59e8, { 16, 16, 11, 11, 11, 11, 6}}, + {m68k_op_svs_8_ix, 0xfff8, 0x59f0, { 18, 18, 13, 13, 13, 13, 6}}, + {m68k_op_spl_8_d, 0xfff8, 0x5ac0, { 4, 4, 4, 4, 4, 4, 4}}, + {m68k_op_dbpl_16, 0xfff8, 0x5ac8, { 12, 12, 6, 6, 6, 6, 6}}, + {m68k_op_spl_8_ai, 0xfff8, 0x5ad0, { 12, 12, 10, 10, 10, 10, 6}}, + {m68k_op_spl_8_pi, 0xfff8, 0x5ad8, { 12, 12, 10, 10, 10, 10, 6}}, + {m68k_op_spl_8_pd, 0xfff8, 0x5ae0, { 14, 14, 11, 11, 11, 11, 6}}, + {m68k_op_spl_8_di, 0xfff8, 0x5ae8, { 16, 16, 11, 11, 11, 11, 6}}, + {m68k_op_spl_8_ix, 0xfff8, 0x5af0, { 18, 18, 13, 13, 13, 13, 6}}, + {m68k_op_smi_8_d, 0xfff8, 0x5bc0, { 4, 4, 4, 4, 4, 4, 4}}, + {m68k_op_dbmi_16, 0xfff8, 0x5bc8, { 12, 12, 6, 6, 6, 6, 6}}, + {m68k_op_smi_8_ai, 0xfff8, 0x5bd0, { 12, 12, 10, 10, 10, 10, 6}}, + {m68k_op_smi_8_pi, 0xfff8, 0x5bd8, { 12, 12, 10, 10, 10, 10, 6}}, + {m68k_op_smi_8_pd, 0xfff8, 0x5be0, { 14, 14, 11, 11, 11, 11, 6}}, + {m68k_op_smi_8_di, 0xfff8, 0x5be8, { 16, 16, 11, 11, 11, 11, 6}}, + {m68k_op_smi_8_ix, 0xfff8, 0x5bf0, { 18, 18, 13, 13, 13, 13, 6}}, + {m68k_op_sge_8_d, 0xfff8, 0x5cc0, { 4, 4, 4, 4, 4, 4, 4}}, + {m68k_op_dbge_16, 0xfff8, 0x5cc8, { 12, 12, 6, 6, 6, 6, 6}}, + {m68k_op_sge_8_ai, 0xfff8, 0x5cd0, { 12, 12, 10, 10, 10, 10, 6}}, + {m68k_op_sge_8_pi, 0xfff8, 0x5cd8, { 12, 12, 10, 10, 10, 10, 6}}, + {m68k_op_sge_8_pd, 0xfff8, 0x5ce0, { 14, 14, 11, 11, 11, 11, 6}}, + {m68k_op_sge_8_di, 0xfff8, 0x5ce8, { 16, 16, 11, 11, 11, 11, 6}}, + {m68k_op_sge_8_ix, 0xfff8, 0x5cf0, { 18, 18, 13, 13, 13, 13, 6}}, + {m68k_op_slt_8_d, 0xfff8, 0x5dc0, { 4, 4, 4, 4, 4, 4, 4}}, + {m68k_op_dblt_16, 0xfff8, 0x5dc8, { 12, 12, 6, 6, 6, 6, 6}}, + {m68k_op_slt_8_ai, 0xfff8, 0x5dd0, { 12, 12, 10, 10, 10, 10, 6}}, + {m68k_op_slt_8_pi, 0xfff8, 0x5dd8, { 12, 12, 10, 10, 10, 10, 6}}, + {m68k_op_slt_8_pd, 0xfff8, 0x5de0, { 14, 14, 11, 11, 11, 11, 6}}, + {m68k_op_slt_8_di, 0xfff8, 0x5de8, { 16, 16, 11, 11, 11, 11, 6}}, + {m68k_op_slt_8_ix, 0xfff8, 0x5df0, { 18, 18, 13, 13, 13, 13, 6}}, + {m68k_op_sgt_8_d, 0xfff8, 0x5ec0, { 4, 4, 4, 4, 4, 4, 4}}, + {m68k_op_dbgt_16, 0xfff8, 0x5ec8, { 12, 12, 6, 6, 6, 6, 6}}, + {m68k_op_sgt_8_ai, 0xfff8, 0x5ed0, { 12, 12, 10, 10, 10, 10, 6}}, + {m68k_op_sgt_8_pi, 0xfff8, 0x5ed8, { 12, 12, 10, 10, 10, 10, 6}}, + {m68k_op_sgt_8_pd, 0xfff8, 0x5ee0, { 14, 14, 11, 11, 11, 11, 6}}, + {m68k_op_sgt_8_di, 0xfff8, 0x5ee8, { 16, 16, 11, 11, 11, 11, 6}}, + {m68k_op_sgt_8_ix, 0xfff8, 0x5ef0, { 18, 18, 13, 13, 13, 13, 6}}, + {m68k_op_sle_8_d, 0xfff8, 0x5fc0, { 4, 4, 4, 4, 4, 4, 4}}, + {m68k_op_dble_16, 0xfff8, 0x5fc8, { 12, 12, 6, 6, 6, 6, 6}}, + {m68k_op_sle_8_ai, 0xfff8, 0x5fd0, { 12, 12, 10, 10, 10, 10, 6}}, + {m68k_op_sle_8_pi, 0xfff8, 0x5fd8, { 12, 12, 10, 10, 10, 10, 6}}, + {m68k_op_sle_8_pd, 0xfff8, 0x5fe0, { 14, 14, 11, 11, 11, 11, 6}}, + {m68k_op_sle_8_di, 0xfff8, 0x5fe8, { 16, 16, 11, 11, 11, 11, 6}}, + {m68k_op_sle_8_ix, 0xfff8, 0x5ff0, { 18, 18, 13, 13, 13, 13, 6}}, + {m68k_op_sbcd_8_mm_ax7, 0xfff8, 0x8f08, { 18, 18, 16, 16, 16, 16, 16}}, + {m68k_op_pack_16_mm_ax7, 0xfff8, 0x8f48, {255, 255, 13, 13, 13, 13, 13}}, + {m68k_op_unpk_16_mm_ax7, 0xfff8, 0x8f88, {255, 255, 13, 13, 13, 13, 13}}, + {m68k_op_subx_8_mm_ax7, 0xfff8, 0x9f08, { 18, 18, 12, 12, 12, 12, 12}}, + {m68k_op_cmpm_8_ax7, 0xfff8, 0xbf08, { 12, 12, 9, 9, 9, 9, 9}}, + {m68k_op_abcd_8_mm_ax7, 0xfff8, 0xcf08, { 18, 18, 16, 16, 16, 16, 16}}, + {m68k_op_addx_8_mm_ax7, 0xfff8, 0xdf08, { 18, 18, 12, 12, 12, 12, 12}}, + {m68k_op_asr_16_ai, 0xfff8, 0xe0d0, { 12, 12, 9, 9, 9, 9, 5}}, + {m68k_op_asr_16_pi, 0xfff8, 0xe0d8, { 12, 12, 9, 9, 9, 9, 5}}, + {m68k_op_asr_16_pd, 0xfff8, 0xe0e0, { 14, 14, 10, 10, 10, 10, 5}}, + {m68k_op_asr_16_di, 0xfff8, 0xe0e8, { 16, 16, 10, 10, 10, 10, 5}}, + {m68k_op_asr_16_ix, 0xfff8, 0xe0f0, { 18, 18, 12, 12, 12, 12, 5}}, + {m68k_op_asl_16_ai, 0xfff8, 0xe1d0, { 12, 12, 10, 10, 10, 10, 6}}, + {m68k_op_asl_16_pi, 0xfff8, 0xe1d8, { 12, 12, 10, 10, 10, 10, 6}}, + {m68k_op_asl_16_pd, 0xfff8, 0xe1e0, { 14, 14, 11, 11, 11, 11, 6}}, + {m68k_op_asl_16_di, 0xfff8, 0xe1e8, { 16, 16, 11, 11, 11, 11, 6}}, + {m68k_op_asl_16_ix, 0xfff8, 0xe1f0, { 18, 18, 13, 13, 13, 13, 6}}, + {m68k_op_lsr_16_ai, 0xfff8, 0xe2d0, { 12, 12, 9, 9, 9, 9, 5}}, + {m68k_op_lsr_16_pi, 0xfff8, 0xe2d8, { 12, 12, 9, 9, 9, 9, 5}}, + {m68k_op_lsr_16_pd, 0xfff8, 0xe2e0, { 14, 14, 10, 10, 10, 10, 5}}, + {m68k_op_lsr_16_di, 0xfff8, 0xe2e8, { 16, 16, 10, 10, 10, 10, 5}}, + {m68k_op_lsr_16_ix, 0xfff8, 0xe2f0, { 18, 18, 12, 12, 12, 12, 5}}, + {m68k_op_lsl_16_ai, 0xfff8, 0xe3d0, { 12, 12, 9, 9, 9, 9, 5}}, + {m68k_op_lsl_16_pi, 0xfff8, 0xe3d8, { 12, 12, 9, 9, 9, 9, 5}}, + {m68k_op_lsl_16_pd, 0xfff8, 0xe3e0, { 14, 14, 10, 10, 10, 10, 5}}, + {m68k_op_lsl_16_di, 0xfff8, 0xe3e8, { 16, 16, 10, 10, 10, 10, 5}}, + {m68k_op_lsl_16_ix, 0xfff8, 0xe3f0, { 18, 18, 12, 12, 12, 12, 5}}, + {m68k_op_roxr_16_ai, 0xfff8, 0xe4d0, { 12, 12, 9, 9, 9, 9, 5}}, + {m68k_op_roxr_16_pi, 0xfff8, 0xe4d8, { 12, 12, 9, 9, 9, 9, 5}}, + {m68k_op_roxr_16_pd, 0xfff8, 0xe4e0, { 14, 14, 10, 10, 10, 10, 5}}, + {m68k_op_roxr_16_di, 0xfff8, 0xe4e8, { 16, 16, 10, 10, 10, 10, 5}}, + {m68k_op_roxr_16_ix, 0xfff8, 0xe4f0, { 18, 18, 12, 12, 12, 12, 5}}, + {m68k_op_roxl_16_ai, 0xfff8, 0xe5d0, { 12, 12, 9, 9, 9, 9, 5}}, + {m68k_op_roxl_16_pi, 0xfff8, 0xe5d8, { 12, 12, 9, 9, 9, 9, 5}}, + {m68k_op_roxl_16_pd, 0xfff8, 0xe5e0, { 14, 14, 10, 10, 10, 10, 5}}, + {m68k_op_roxl_16_di, 0xfff8, 0xe5e8, { 16, 16, 10, 10, 10, 10, 5}}, + {m68k_op_roxl_16_ix, 0xfff8, 0xe5f0, { 18, 18, 12, 12, 12, 12, 5}}, + {m68k_op_ror_16_ai, 0xfff8, 0xe6d0, { 12, 12, 11, 11, 11, 11, 7}}, + {m68k_op_ror_16_pi, 0xfff8, 0xe6d8, { 12, 12, 11, 11, 11, 11, 7}}, + {m68k_op_ror_16_pd, 0xfff8, 0xe6e0, { 14, 14, 12, 12, 12, 12, 7}}, + {m68k_op_ror_16_di, 0xfff8, 0xe6e8, { 16, 16, 12, 12, 12, 12, 7}}, + {m68k_op_ror_16_ix, 0xfff8, 0xe6f0, { 18, 18, 14, 14, 14, 14, 7}}, + {m68k_op_rol_16_ai, 0xfff8, 0xe7d0, { 12, 12, 11, 11, 11, 11, 7}}, + {m68k_op_rol_16_pi, 0xfff8, 0xe7d8, { 12, 12, 11, 11, 11, 11, 7}}, + {m68k_op_rol_16_pd, 0xfff8, 0xe7e0, { 14, 14, 12, 12, 12, 12, 7}}, + {m68k_op_rol_16_di, 0xfff8, 0xe7e8, { 16, 16, 12, 12, 12, 12, 7}}, + {m68k_op_rol_16_ix, 0xfff8, 0xe7f0, { 18, 18, 14, 14, 14, 14, 7}}, + {m68k_op_bftst_32_d, 0xfff8, 0xe8c0, {255, 255, 6, 6, 6, 6, 6}}, + {m68k_op_bftst_32_ai, 0xfff8, 0xe8d0, {255, 255, 17, 17, 17, 17, 13}}, + {m68k_op_bftst_32_di, 0xfff8, 0xe8e8, {255, 255, 18, 18, 18, 18, 13}}, + {m68k_op_bftst_32_ix, 0xfff8, 0xe8f0, {255, 255, 20, 20, 20, 20, 13}}, + {m68k_op_bfextu_32_d, 0xfff8, 0xe9c0, {255, 255, 8, 8, 8, 8, 8}}, + {m68k_op_bfextu_32_ai, 0xfff8, 0xe9d0, {255, 255, 19, 19, 19, 19, 15}}, + {m68k_op_bfextu_32_di, 0xfff8, 0xe9e8, {255, 255, 20, 20, 20, 20, 15}}, + {m68k_op_bfextu_32_ix, 0xfff8, 0xe9f0, {255, 255, 22, 22, 22, 22, 15}}, + {m68k_op_bfchg_32_d, 0xfff8, 0xeac0, {255, 255, 12, 12, 12, 12, 12}}, + {m68k_op_bfchg_32_ai, 0xfff8, 0xead0, {255, 255, 24, 24, 24, 24, 20}}, + {m68k_op_bfchg_32_di, 0xfff8, 0xeae8, {255, 255, 25, 25, 25, 25, 20}}, + {m68k_op_bfchg_32_ix, 0xfff8, 0xeaf0, {255, 255, 27, 27, 27, 27, 20}}, + {m68k_op_bfexts_32_d, 0xfff8, 0xebc0, {255, 255, 8, 8, 8, 8, 8}}, + {m68k_op_bfexts_32_ai, 0xfff8, 0xebd0, {255, 255, 19, 19, 19, 19, 15}}, + {m68k_op_bfexts_32_di, 0xfff8, 0xebe8, {255, 255, 20, 20, 20, 20, 15}}, + {m68k_op_bfexts_32_ix, 0xfff8, 0xebf0, {255, 255, 22, 22, 22, 22, 15}}, + {m68k_op_bfclr_32_d, 0xfff8, 0xecc0, {255, 255, 12, 12, 12, 12, 12}}, + {m68k_op_bfclr_32_ai, 0xfff8, 0xecd0, {255, 255, 24, 24, 24, 24, 20}}, + {m68k_op_bfclr_32_di, 0xfff8, 0xece8, {255, 255, 25, 25, 25, 25, 20}}, + {m68k_op_bfclr_32_ix, 0xfff8, 0xecf0, {255, 255, 27, 27, 27, 27, 20}}, + {m68k_op_bfffo_32_d, 0xfff8, 0xedc0, {255, 255, 18, 18, 18, 18, 18}}, + {m68k_op_bfffo_32_ai, 0xfff8, 0xedd0, {255, 255, 32, 32, 32, 32, 28}}, + {m68k_op_bfffo_32_di, 0xfff8, 0xede8, {255, 255, 33, 33, 33, 33, 28}}, + {m68k_op_bfffo_32_ix, 0xfff8, 0xedf0, {255, 255, 35, 35, 35, 35, 28}}, + {m68k_op_bfset_32_d, 0xfff8, 0xeec0, {255, 255, 12, 12, 12, 12, 12}}, + {m68k_op_bfset_32_ai, 0xfff8, 0xeed0, {255, 255, 24, 24, 24, 24, 20}}, + {m68k_op_bfset_32_di, 0xfff8, 0xeee8, {255, 255, 25, 25, 25, 25, 20}}, + {m68k_op_bfset_32_ix, 0xfff8, 0xeef0, {255, 255, 27, 27, 27, 27, 20}}, + {m68k_op_bfins_32_d, 0xfff8, 0xefc0, {255, 255, 10, 10, 10, 10, 10}}, + {m68k_op_bfins_32_ai, 0xfff8, 0xefd0, {255, 255, 21, 21, 21, 21, 17}}, + {m68k_op_bfins_32_di, 0xfff8, 0xefe8, {255, 255, 22, 22, 22, 22, 17}}, + {m68k_op_bfins_32_ix, 0xfff8, 0xeff0, {255, 255, 24, 24, 24, 24, 17}}, + {m68k_op_ftrapcc_32, 0xfff8, 0xf278, {255, 255, 4, 4, 255, 255, 255}}, + {m68k_op_pflushan_32, 0xfff8, 0xf510, {255, 255, 255, 255, 4, 4, 4}}, + {m68k_op_pflusha_32, 0xfff8, 0xf518, {255, 255, 255, 255, 4, 4, 4}}, + {m68k_op_move16_32, 0xfff8, 0xf620, {255, 255, 255, 255, 4, 4, 4}}, + {m68k_op_ori_8_pi7, 0xffff, 0x001f, { 16, 16, 8, 8, 8, 8, 4}}, + {m68k_op_ori_8_pd7, 0xffff, 0x0027, { 18, 18, 9, 9, 9, 9, 4}}, + {m68k_op_ori_8_aw, 0xffff, 0x0038, { 20, 20, 8, 8, 8, 8, 4}}, + {m68k_op_ori_8_al, 0xffff, 0x0039, { 24, 24, 8, 8, 8, 8, 4}}, + {m68k_op_ori_16_toc, 0xffff, 0x003c, { 20, 16, 12, 12, 12, 12, 12}}, + {m68k_op_ori_16_aw, 0xffff, 0x0078, { 20, 20, 8, 8, 8, 8, 4}}, + {m68k_op_ori_16_al, 0xffff, 0x0079, { 24, 24, 8, 8, 8, 8, 4}}, + {m68k_op_ori_16_tos, 0xffff, 0x007c, { 20, 16, 12, 12, 12, 12, 12}}, + {m68k_op_ori_32_aw, 0xffff, 0x00b8, { 32, 32, 8, 8, 8, 8, 4}}, + {m68k_op_ori_32_al, 0xffff, 0x00b9, { 36, 36, 8, 8, 8, 8, 4}}, + {m68k_op_chk2cmp2_8_aw, 0xffff, 0x00f8, {255, 255, 22, 22, 22, 22, 18}}, + {m68k_op_chk2cmp2_8_al, 0xffff, 0x00f9, {255, 255, 22, 22, 22, 22, 18}}, + {m68k_op_chk2cmp2_8_pcdi, 0xffff, 0x00fa, {255, 255, 23, 23, 23, 23, 23}}, + {m68k_op_chk2cmp2_8_pcix, 0xffff, 0x00fb, {255, 255, 23, 23, 23, 23, 23}}, + {m68k_op_andi_8_pi7, 0xffff, 0x021f, { 16, 16, 8, 8, 8, 8, 4}}, + {m68k_op_andi_8_pd7, 0xffff, 0x0227, { 18, 18, 9, 9, 9, 9, 4}}, + {m68k_op_andi_8_aw, 0xffff, 0x0238, { 20, 20, 8, 8, 8, 8, 4}}, + {m68k_op_andi_8_al, 0xffff, 0x0239, { 24, 24, 8, 8, 8, 8, 4}}, + {m68k_op_andi_16_toc, 0xffff, 0x023c, { 20, 16, 12, 12, 12, 12, 12}}, + {m68k_op_andi_16_aw, 0xffff, 0x0278, { 20, 20, 8, 8, 8, 8, 4}}, + {m68k_op_andi_16_al, 0xffff, 0x0279, { 24, 24, 8, 8, 8, 8, 4}}, + {m68k_op_andi_16_tos, 0xffff, 0x027c, { 20, 16, 12, 12, 12, 12, 12}}, + {m68k_op_andi_32_aw, 0xffff, 0x02b8, { 32, 32, 8, 8, 8, 8, 4}}, + {m68k_op_andi_32_al, 0xffff, 0x02b9, { 36, 36, 8, 8, 8, 8, 4}}, + {m68k_op_chk2cmp2_16_aw, 0xffff, 0x02f8, {255, 255, 22, 22, 22, 22, 18}}, + {m68k_op_chk2cmp2_16_al, 0xffff, 0x02f9, {255, 255, 22, 22, 22, 22, 18}}, + {m68k_op_chk2cmp2_16_pcdi, 0xffff, 0x02fa, {255, 255, 23, 23, 23, 23, 23}}, + {m68k_op_chk2cmp2_16_pcix, 0xffff, 0x02fb, {255, 255, 23, 23, 23, 23, 23}}, + {m68k_op_subi_8_pi7, 0xffff, 0x041f, { 16, 16, 8, 8, 8, 8, 4}}, + {m68k_op_subi_8_pd7, 0xffff, 0x0427, { 18, 18, 9, 9, 9, 9, 4}}, + {m68k_op_subi_8_aw, 0xffff, 0x0438, { 20, 20, 8, 8, 8, 8, 4}}, + {m68k_op_subi_8_al, 0xffff, 0x0439, { 24, 24, 8, 8, 8, 8, 4}}, + {m68k_op_subi_16_aw, 0xffff, 0x0478, { 20, 20, 8, 8, 8, 8, 4}}, + {m68k_op_subi_16_al, 0xffff, 0x0479, { 24, 24, 8, 8, 8, 8, 4}}, + {m68k_op_subi_32_aw, 0xffff, 0x04b8, { 32, 32, 8, 8, 8, 8, 4}}, + {m68k_op_subi_32_al, 0xffff, 0x04b9, { 36, 36, 8, 8, 8, 8, 4}}, + {m68k_op_chk2cmp2_32_aw, 0xffff, 0x04f8, {255, 255, 22, 22, 22, 22, 18}}, + {m68k_op_chk2cmp2_32_al, 0xffff, 0x04f9, {255, 255, 22, 22, 22, 22, 18}}, + {m68k_op_chk2cmp2_32_pcdi, 0xffff, 0x04fa, {255, 255, 23, 23, 23, 23, 23}}, + {m68k_op_chk2cmp2_32_pcix, 0xffff, 0x04fb, {255, 255, 23, 23, 23, 23, 23}}, + {m68k_op_addi_8_pi7, 0xffff, 0x061f, { 16, 16, 8, 8, 8, 8, 4}}, + {m68k_op_addi_8_pd7, 0xffff, 0x0627, { 18, 18, 9, 9, 9, 9, 4}}, + {m68k_op_addi_8_aw, 0xffff, 0x0638, { 20, 20, 8, 8, 8, 8, 4}}, + {m68k_op_addi_8_al, 0xffff, 0x0639, { 24, 24, 8, 8, 8, 8, 4}}, + {m68k_op_addi_16_aw, 0xffff, 0x0678, { 20, 20, 8, 8, 8, 8, 4}}, + {m68k_op_addi_16_al, 0xffff, 0x0679, { 24, 24, 8, 8, 8, 8, 4}}, + {m68k_op_addi_32_aw, 0xffff, 0x06b8, { 32, 32, 8, 8, 8, 8, 4}}, + {m68k_op_addi_32_al, 0xffff, 0x06b9, { 36, 36, 8, 8, 8, 8, 4}}, + {m68k_op_callm_32_aw, 0xffff, 0x06f8, {255, 255, 64, 64, 64, 64, 60}}, + {m68k_op_callm_32_al, 0xffff, 0x06f9, {255, 255, 64, 64, 64, 64, 60}}, + {m68k_op_callm_32_pcdi, 0xffff, 0x06fa, {255, 255, 65, 65, 65, 65, 60}}, + {m68k_op_callm_32_pcix, 0xffff, 0x06fb, {255, 255, 67, 67, 67, 67, 60}}, + {m68k_op_btst_8_s_pi7, 0xffff, 0x081f, { 12, 12, 8, 8, 8, 8, 4}}, + {m68k_op_btst_8_s_pd7, 0xffff, 0x0827, { 14, 14, 9, 9, 9, 9, 4}}, + {m68k_op_btst_8_s_aw, 0xffff, 0x0838, { 16, 16, 8, 8, 8, 8, 4}}, + {m68k_op_btst_8_s_al, 0xffff, 0x0839, { 20, 20, 8, 8, 8, 8, 4}}, + {m68k_op_btst_8_s_pcdi, 0xffff, 0x083a, { 16, 16, 9, 9, 9, 9, 4}}, + {m68k_op_btst_8_s_pcix, 0xffff, 0x083b, { 18, 18, 11, 11, 11, 11, 4}}, + {m68k_op_bchg_8_s_pi7, 0xffff, 0x085f, { 16, 16, 8, 8, 8, 8, 4}}, + {m68k_op_bchg_8_s_pd7, 0xffff, 0x0867, { 18, 18, 9, 9, 9, 9, 4}}, + {m68k_op_bchg_8_s_aw, 0xffff, 0x0878, { 20, 20, 8, 8, 8, 8, 4}}, + {m68k_op_bchg_8_s_al, 0xffff, 0x0879, { 24, 24, 8, 8, 8, 8, 4}}, + {m68k_op_bclr_8_s_pi7, 0xffff, 0x089f, { 16, 16, 8, 8, 8, 8, 4}}, + {m68k_op_bclr_8_s_pd7, 0xffff, 0x08a7, { 18, 18, 9, 9, 9, 9, 4}}, + {m68k_op_bclr_8_s_aw, 0xffff, 0x08b8, { 20, 20, 8, 8, 8, 8, 4}}, + {m68k_op_bclr_8_s_al, 0xffff, 0x08b9, { 24, 24, 8, 8, 8, 8, 4}}, + {m68k_op_bset_8_s_pi7, 0xffff, 0x08df, { 16, 16, 8, 8, 8, 8, 4}}, + {m68k_op_bset_8_s_pd7, 0xffff, 0x08e7, { 18, 18, 9, 9, 9, 9, 4}}, + {m68k_op_bset_8_s_aw, 0xffff, 0x08f8, { 20, 20, 8, 8, 8, 8, 4}}, + {m68k_op_bset_8_s_al, 0xffff, 0x08f9, { 24, 24, 8, 8, 8, 8, 4}}, + {m68k_op_eori_8_pi7, 0xffff, 0x0a1f, { 16, 16, 8, 8, 8, 8, 4}}, + {m68k_op_eori_8_pd7, 0xffff, 0x0a27, { 18, 18, 9, 9, 9, 9, 4}}, + {m68k_op_eori_8_aw, 0xffff, 0x0a38, { 20, 20, 8, 8, 8, 8, 4}}, + {m68k_op_eori_8_al, 0xffff, 0x0a39, { 24, 24, 8, 8, 8, 8, 4}}, + {m68k_op_eori_16_toc, 0xffff, 0x0a3c, { 20, 16, 12, 12, 12, 12, 12}}, + {m68k_op_eori_16_aw, 0xffff, 0x0a78, { 20, 20, 8, 8, 8, 8, 4}}, + {m68k_op_eori_16_al, 0xffff, 0x0a79, { 24, 24, 8, 8, 8, 8, 4}}, + {m68k_op_eori_16_tos, 0xffff, 0x0a7c, { 20, 16, 12, 12, 12, 12, 12}}, + {m68k_op_eori_32_aw, 0xffff, 0x0ab8, { 32, 32, 8, 8, 8, 8, 4}}, + {m68k_op_eori_32_al, 0xffff, 0x0ab9, { 36, 36, 8, 8, 8, 8, 4}}, + {m68k_op_cas_8_pi7, 0xffff, 0x0adf, {255, 255, 16, 16, 16, 16, 12}}, + {m68k_op_cas_8_pd7, 0xffff, 0x0ae7, {255, 255, 17, 17, 17, 17, 12}}, + {m68k_op_cas_8_aw, 0xffff, 0x0af8, {255, 255, 16, 16, 16, 16, 12}}, + {m68k_op_cas_8_al, 0xffff, 0x0af9, {255, 255, 16, 16, 16, 16, 12}}, + {m68k_op_cmpi_8_pi7, 0xffff, 0x0c1f, { 12, 12, 6, 6, 6, 6, 2}}, + {m68k_op_cmpi_8_pd7, 0xffff, 0x0c27, { 14, 14, 7, 7, 7, 7, 2}}, + {m68k_op_cmpi_8_aw, 0xffff, 0x0c38, { 16, 16, 6, 6, 6, 6, 2}}, + {m68k_op_cmpi_8_al, 0xffff, 0x0c39, { 20, 20, 6, 6, 6, 6, 2}}, + {m68k_op_cmpi_8_pcdi, 0xffff, 0x0c3a, {255, 255, 7, 7, 7, 7, 7}}, + {m68k_op_cmpi_8_pcix, 0xffff, 0x0c3b, {255, 255, 9, 9, 9, 9, 9}}, + {m68k_op_cmpi_16_aw, 0xffff, 0x0c78, { 16, 16, 6, 6, 6, 6, 2}}, + {m68k_op_cmpi_16_al, 0xffff, 0x0c79, { 20, 20, 6, 6, 6, 6, 2}}, + {m68k_op_cmpi_16_pcdi, 0xffff, 0x0c7a, {255, 255, 7, 7, 7, 7, 7}}, + {m68k_op_cmpi_16_pcix, 0xffff, 0x0c7b, {255, 255, 9, 9, 9, 9, 9}}, + {m68k_op_cmpi_32_aw, 0xffff, 0x0cb8, { 24, 24, 6, 6, 6, 6, 2}}, + {m68k_op_cmpi_32_al, 0xffff, 0x0cb9, { 28, 28, 6, 6, 6, 6, 2}}, + {m68k_op_cmpi_32_pcdi, 0xffff, 0x0cba, {255, 255, 7, 7, 7, 7, 7}}, + {m68k_op_cmpi_32_pcix, 0xffff, 0x0cbb, {255, 255, 9, 9, 9, 9, 9}}, + {m68k_op_cas_16_aw, 0xffff, 0x0cf8, {255, 255, 16, 16, 16, 16, 12}}, + {m68k_op_cas_16_al, 0xffff, 0x0cf9, {255, 255, 16, 16, 16, 16, 12}}, + {m68k_op_cas2_16, 0xffff, 0x0cfc, {255, 255, 12, 12, 12, 12, 12}}, + {m68k_op_moves_8_pi7, 0xffff, 0x0e1f, {255, 18, 9, 9, 9, 9, 5}}, + {m68k_op_moves_8_pd7, 0xffff, 0x0e27, {255, 20, 10, 10, 10, 10, 5}}, + {m68k_op_moves_8_aw, 0xffff, 0x0e38, {255, 26, 9, 9, 9, 9, 5}}, + {m68k_op_moves_8_al, 0xffff, 0x0e39, {255, 30, 9, 9, 9, 9, 5}}, + {m68k_op_moves_16_aw, 0xffff, 0x0e78, {255, 26, 9, 9, 9, 9, 5}}, + {m68k_op_moves_16_al, 0xffff, 0x0e79, {255, 30, 9, 9, 9, 9, 5}}, + {m68k_op_moves_32_aw, 0xffff, 0x0eb8, {255, 32, 9, 9, 9, 9, 5}}, + {m68k_op_moves_32_al, 0xffff, 0x0eb9, {255, 36, 9, 9, 9, 9, 5}}, + {m68k_op_cas_32_aw, 0xffff, 0x0ef8, {255, 255, 16, 16, 16, 16, 12}}, + {m68k_op_cas_32_al, 0xffff, 0x0ef9, {255, 255, 16, 16, 16, 16, 12}}, + {m68k_op_cas2_32, 0xffff, 0x0efc, {255, 255, 12, 12, 12, 12, 12}}, + {m68k_op_move_8_aw_pi7, 0xffff, 0x11df, { 16, 16, 8, 8, 8, 8, 4}}, + {m68k_op_move_8_aw_pd7, 0xffff, 0x11e7, { 18, 18, 9, 9, 9, 9, 4}}, + {m68k_op_move_8_aw_aw, 0xffff, 0x11f8, { 20, 20, 8, 8, 8, 8, 4}}, + {m68k_op_move_8_aw_al, 0xffff, 0x11f9, { 24, 24, 8, 8, 8, 8, 4}}, + {m68k_op_move_8_aw_pcdi, 0xffff, 0x11fa, { 20, 20, 9, 9, 9, 9, 4}}, + {m68k_op_move_8_aw_pcix, 0xffff, 0x11fb, { 22, 22, 11, 11, 11, 11, 4}}, + {m68k_op_move_8_aw_i, 0xffff, 0x11fc, { 16, 16, 6, 6, 6, 6, 4}}, + {m68k_op_move_8_al_pi7, 0xffff, 0x13df, { 20, 20, 10, 10, 10, 10, 6}}, + {m68k_op_move_8_al_pd7, 0xffff, 0x13e7, { 22, 22, 11, 11, 11, 11, 6}}, + {m68k_op_move_8_al_aw, 0xffff, 0x13f8, { 24, 24, 10, 10, 10, 10, 6}}, + {m68k_op_move_8_al_al, 0xffff, 0x13f9, { 28, 28, 10, 10, 10, 10, 6}}, + {m68k_op_move_8_al_pcdi, 0xffff, 0x13fa, { 24, 24, 11, 11, 11, 11, 6}}, + {m68k_op_move_8_al_pcix, 0xffff, 0x13fb, { 26, 26, 13, 13, 13, 13, 6}}, + {m68k_op_move_8_al_i, 0xffff, 0x13fc, { 20, 20, 8, 8, 8, 8, 6}}, + {m68k_op_move_8_pi7_pi7, 0xffff, 0x1edf, { 12, 12, 8, 8, 8, 8, 4}}, + {m68k_op_move_8_pi7_pd7, 0xffff, 0x1ee7, { 14, 14, 9, 9, 9, 9, 4}}, + {m68k_op_move_8_pi7_aw, 0xffff, 0x1ef8, { 16, 16, 8, 8, 8, 8, 4}}, + {m68k_op_move_8_pi7_al, 0xffff, 0x1ef9, { 20, 20, 8, 8, 8, 8, 4}}, + {m68k_op_move_8_pi7_pcdi, 0xffff, 0x1efa, { 16, 16, 9, 9, 9, 9, 4}}, + {m68k_op_move_8_pi7_pcix, 0xffff, 0x1efb, { 18, 18, 11, 11, 11, 11, 4}}, + {m68k_op_move_8_pi7_i, 0xffff, 0x1efc, { 12, 12, 6, 6, 6, 6, 4}}, + {m68k_op_move_8_pd7_pi7, 0xffff, 0x1f1f, { 12, 12, 9, 9, 9, 9, 5}}, + {m68k_op_move_8_pd7_pd7, 0xffff, 0x1f27, { 14, 14, 10, 10, 10, 10, 5}}, + {m68k_op_move_8_pd7_aw, 0xffff, 0x1f38, { 16, 16, 9, 9, 9, 9, 5}}, + {m68k_op_move_8_pd7_al, 0xffff, 0x1f39, { 20, 20, 9, 9, 9, 9, 5}}, + {m68k_op_move_8_pd7_pcdi, 0xffff, 0x1f3a, { 16, 16, 10, 10, 10, 10, 5}}, + {m68k_op_move_8_pd7_pcix, 0xffff, 0x1f3b, { 18, 18, 12, 12, 12, 12, 5}}, + {m68k_op_move_8_pd7_i, 0xffff, 0x1f3c, { 12, 12, 7, 7, 7, 7, 5}}, + {m68k_op_move_32_aw_aw, 0xffff, 0x21f8, { 28, 28, 8, 8, 8, 8, 4}}, + {m68k_op_move_32_aw_al, 0xffff, 0x21f9, { 32, 32, 8, 8, 8, 8, 4}}, + {m68k_op_move_32_aw_pcdi, 0xffff, 0x21fa, { 28, 28, 9, 9, 9, 9, 4}}, + {m68k_op_move_32_aw_pcix, 0xffff, 0x21fb, { 30, 30, 11, 11, 11, 11, 4}}, + {m68k_op_move_32_aw_i, 0xffff, 0x21fc, { 24, 24, 8, 8, 8, 8, 4}}, + {m68k_op_move_32_al_aw, 0xffff, 0x23f8, { 32, 32, 10, 10, 10, 10, 6}}, + {m68k_op_move_32_al_al, 0xffff, 0x23f9, { 36, 36, 10, 10, 10, 10, 6}}, + {m68k_op_move_32_al_pcdi, 0xffff, 0x23fa, { 32, 32, 11, 11, 11, 11, 6}}, + {m68k_op_move_32_al_pcix, 0xffff, 0x23fb, { 34, 34, 13, 13, 13, 13, 6}}, + {m68k_op_move_32_al_i, 0xffff, 0x23fc, { 28, 28, 10, 10, 10, 10, 6}}, + {m68k_op_move_16_aw_aw, 0xffff, 0x31f8, { 20, 20, 8, 8, 8, 8, 4}}, + {m68k_op_move_16_aw_al, 0xffff, 0x31f9, { 24, 24, 8, 8, 8, 8, 4}}, + {m68k_op_move_16_aw_pcdi, 0xffff, 0x31fa, { 20, 20, 9, 9, 9, 9, 4}}, + {m68k_op_move_16_aw_pcix, 0xffff, 0x31fb, { 22, 22, 11, 11, 11, 11, 4}}, + {m68k_op_move_16_aw_i, 0xffff, 0x31fc, { 16, 16, 6, 6, 6, 6, 4}}, + {m68k_op_move_16_al_aw, 0xffff, 0x33f8, { 24, 24, 10, 10, 10, 10, 6}}, + {m68k_op_move_16_al_al, 0xffff, 0x33f9, { 28, 28, 10, 10, 10, 10, 6}}, + {m68k_op_move_16_al_pcdi, 0xffff, 0x33fa, { 24, 24, 11, 11, 11, 11, 6}}, + {m68k_op_move_16_al_pcix, 0xffff, 0x33fb, { 26, 26, 13, 13, 13, 13, 6}}, + {m68k_op_move_16_al_i, 0xffff, 0x33fc, { 20, 20, 8, 8, 8, 8, 6}}, + {m68k_op_negx_8_pi7, 0xffff, 0x401f, { 12, 12, 8, 8, 8, 8, 4}}, + {m68k_op_negx_8_pd7, 0xffff, 0x4027, { 14, 14, 9, 9, 9, 9, 4}}, + {m68k_op_negx_8_aw, 0xffff, 0x4038, { 16, 16, 8, 8, 8, 8, 4}}, + {m68k_op_negx_8_al, 0xffff, 0x4039, { 20, 20, 8, 8, 8, 8, 4}}, + {m68k_op_negx_16_aw, 0xffff, 0x4078, { 16, 16, 8, 8, 8, 8, 4}}, + {m68k_op_negx_16_al, 0xffff, 0x4079, { 20, 20, 8, 8, 8, 8, 4}}, + {m68k_op_negx_32_aw, 0xffff, 0x40b8, { 24, 24, 8, 8, 8, 8, 4}}, + {m68k_op_negx_32_al, 0xffff, 0x40b9, { 28, 28, 8, 8, 8, 8, 4}}, + {m68k_op_move_16_frs_aw, 0xffff, 0x40f8, { 16, 16, 12, 12, 12, 12, 8}}, + {m68k_op_move_16_frs_al, 0xffff, 0x40f9, { 20, 20, 12, 12, 12, 12, 8}}, + {m68k_op_clr_8_pi7, 0xffff, 0x421f, { 12, 8, 8, 8, 8, 8, 4}}, + {m68k_op_clr_8_pd7, 0xffff, 0x4227, { 14, 10, 9, 9, 9, 9, 4}}, + {m68k_op_clr_8_aw, 0xffff, 0x4238, { 16, 12, 8, 8, 8, 8, 4}}, + {m68k_op_clr_8_al, 0xffff, 0x4239, { 20, 14, 8, 8, 8, 8, 4}}, + {m68k_op_clr_16_aw, 0xffff, 0x4278, { 16, 12, 8, 8, 8, 8, 4}}, + {m68k_op_clr_16_al, 0xffff, 0x4279, { 20, 14, 8, 8, 8, 8, 4}}, + {m68k_op_clr_32_aw, 0xffff, 0x42b8, { 24, 16, 8, 8, 8, 8, 4}}, + {m68k_op_clr_32_al, 0xffff, 0x42b9, { 28, 20, 8, 8, 8, 8, 4}}, + {m68k_op_move_16_frc_aw, 0xffff, 0x42f8, {255, 16, 8, 8, 8, 8, 4}}, + {m68k_op_move_16_frc_al, 0xffff, 0x42f9, {255, 20, 8, 8, 8, 8, 4}}, + {m68k_op_neg_8_pi7, 0xffff, 0x441f, { 12, 12, 8, 8, 8, 8, 4}}, + {m68k_op_neg_8_pd7, 0xffff, 0x4427, { 14, 14, 9, 9, 9, 9, 4}}, + {m68k_op_neg_8_aw, 0xffff, 0x4438, { 16, 16, 8, 8, 8, 8, 4}}, + {m68k_op_neg_8_al, 0xffff, 0x4439, { 20, 20, 8, 8, 8, 8, 4}}, + {m68k_op_neg_16_aw, 0xffff, 0x4478, { 16, 16, 8, 8, 8, 8, 4}}, + {m68k_op_neg_16_al, 0xffff, 0x4479, { 20, 20, 8, 8, 8, 8, 4}}, + {m68k_op_neg_32_aw, 0xffff, 0x44b8, { 24, 24, 8, 8, 8, 8, 4}}, + {m68k_op_neg_32_al, 0xffff, 0x44b9, { 28, 28, 8, 8, 8, 8, 4}}, + {m68k_op_move_16_toc_aw, 0xffff, 0x44f8, { 20, 20, 8, 8, 8, 8, 4}}, + {m68k_op_move_16_toc_al, 0xffff, 0x44f9, { 24, 24, 8, 8, 8, 8, 4}}, + {m68k_op_move_16_toc_pcdi, 0xffff, 0x44fa, { 20, 20, 9, 9, 9, 9, 4}}, + {m68k_op_move_16_toc_pcix, 0xffff, 0x44fb, { 22, 22, 11, 11, 11, 11, 4}}, + {m68k_op_move_16_toc_i, 0xffff, 0x44fc, { 16, 16, 6, 6, 6, 6, 4}}, + {m68k_op_not_8_pi7, 0xffff, 0x461f, { 12, 12, 8, 8, 8, 8, 4}}, + {m68k_op_not_8_pd7, 0xffff, 0x4627, { 14, 14, 9, 9, 9, 9, 4}}, + {m68k_op_not_8_aw, 0xffff, 0x4638, { 16, 16, 8, 8, 8, 8, 4}}, + {m68k_op_not_8_al, 0xffff, 0x4639, { 20, 20, 8, 8, 8, 8, 4}}, + {m68k_op_not_16_aw, 0xffff, 0x4678, { 16, 16, 8, 8, 8, 8, 4}}, + {m68k_op_not_16_al, 0xffff, 0x4679, { 20, 20, 8, 8, 8, 8, 4}}, + {m68k_op_not_32_aw, 0xffff, 0x46b8, { 24, 24, 8, 8, 8, 8, 4}}, + {m68k_op_not_32_al, 0xffff, 0x46b9, { 28, 28, 8, 8, 8, 8, 4}}, + {m68k_op_move_16_tos_aw, 0xffff, 0x46f8, { 20, 20, 12, 12, 12, 12, 8}}, + {m68k_op_move_16_tos_al, 0xffff, 0x46f9, { 24, 24, 12, 12, 12, 12, 8}}, + {m68k_op_move_16_tos_pcdi, 0xffff, 0x46fa, { 20, 20, 13, 13, 13, 13, 8}}, + {m68k_op_move_16_tos_pcix, 0xffff, 0x46fb, { 22, 22, 15, 15, 15, 15, 8}}, + {m68k_op_move_16_tos_i, 0xffff, 0x46fc, { 16, 16, 10, 10, 10, 10, 8}}, + {m68k_op_link_32_a7, 0xffff, 0x480f, {255, 255, 6, 6, 6, 6, 6}}, + {m68k_op_nbcd_8_pi7, 0xffff, 0x481f, { 12, 12, 10, 10, 10, 10, 6}}, + {m68k_op_nbcd_8_pd7, 0xffff, 0x4827, { 14, 14, 11, 11, 11, 11, 6}}, + {m68k_op_nbcd_8_aw, 0xffff, 0x4838, { 16, 16, 10, 10, 10, 10, 6}}, + {m68k_op_nbcd_8_al, 0xffff, 0x4839, { 20, 20, 10, 10, 10, 10, 6}}, + {m68k_op_pea_32_aw, 0xffff, 0x4878, { 16, 16, 9, 9, 9, 9, 5}}, + {m68k_op_pea_32_al, 0xffff, 0x4879, { 20, 20, 9, 9, 9, 9, 5}}, + {m68k_op_pea_32_pcdi, 0xffff, 0x487a, { 16, 16, 10, 10, 10, 10, 5}}, + {m68k_op_pea_32_pcix, 0xffff, 0x487b, { 20, 20, 12, 12, 12, 12, 5}}, + {m68k_op_movem_16_re_aw, 0xffff, 0x48b8, { 12, 12, 8, 8, 8, 8, 4}}, + {m68k_op_movem_16_re_al, 0xffff, 0x48b9, { 16, 16, 8, 8, 8, 8, 4}}, + {m68k_op_movem_32_re_aw, 0xffff, 0x48f8, { 12, 12, 8, 8, 8, 8, 4}}, + {m68k_op_movem_32_re_al, 0xffff, 0x48f9, { 16, 16, 8, 8, 8, 8, 4}}, + {m68k_op_tst_8_pi7, 0xffff, 0x4a1f, { 8, 8, 6, 6, 6, 6, 2}}, + {m68k_op_tst_8_pd7, 0xffff, 0x4a27, { 10, 10, 7, 7, 7, 7, 2}}, + {m68k_op_tst_8_aw, 0xffff, 0x4a38, { 12, 12, 6, 6, 6, 6, 2}}, + {m68k_op_tst_8_al, 0xffff, 0x4a39, { 16, 16, 6, 6, 6, 6, 2}}, + {m68k_op_tst_8_pcdi, 0xffff, 0x4a3a, {255, 255, 7, 7, 7, 7, 7}}, + {m68k_op_tst_8_pcix, 0xffff, 0x4a3b, {255, 255, 9, 9, 9, 9, 9}}, + {m68k_op_tst_8_i, 0xffff, 0x4a3c, {255, 255, 6, 6, 6, 6, 6}}, + {m68k_op_tst_16_aw, 0xffff, 0x4a78, { 12, 12, 6, 6, 6, 6, 2}}, + {m68k_op_tst_16_al, 0xffff, 0x4a79, { 16, 16, 6, 6, 6, 6, 2}}, + {m68k_op_tst_16_pcdi, 0xffff, 0x4a7a, {255, 255, 7, 7, 7, 7, 7}}, + {m68k_op_tst_16_pcix, 0xffff, 0x4a7b, {255, 255, 9, 9, 9, 9, 9}}, + {m68k_op_tst_16_i, 0xffff, 0x4a7c, {255, 255, 6, 6, 6, 6, 6}}, + {m68k_op_tst_32_aw, 0xffff, 0x4ab8, { 16, 16, 6, 6, 6, 6, 2}}, + {m68k_op_tst_32_al, 0xffff, 0x4ab9, { 20, 20, 6, 6, 6, 6, 2}}, + {m68k_op_tst_32_pcdi, 0xffff, 0x4aba, {255, 255, 7, 7, 7, 7, 7}}, + {m68k_op_tst_32_pcix, 0xffff, 0x4abb, {255, 255, 9, 9, 9, 9, 9}}, + {m68k_op_tst_32_i, 0xffff, 0x4abc, {255, 255, 6, 6, 6, 6, 6}}, + {m68k_op_tas_8_pi7, 0xffff, 0x4adf, { 18, 18, 16, 16, 16, 16, 12}}, + {m68k_op_tas_8_pd7, 0xffff, 0x4ae7, { 20, 20, 17, 17, 17, 17, 12}}, + {m68k_op_tas_8_aw, 0xffff, 0x4af8, { 22, 22, 16, 16, 16, 16, 12}}, + {m68k_op_tas_8_al, 0xffff, 0x4af9, { 26, 26, 16, 16, 16, 16, 12}}, + {m68k_op_illegal, 0xffff, 0x4afc, { 4, 4, 4, 4, 4, 4, 4}}, + {m68k_op_mull_32_aw, 0xffff, 0x4c38, {255, 255, 47, 47, 47, 47, 43}}, + {m68k_op_mull_32_al, 0xffff, 0x4c39, {255, 255, 47, 47, 47, 47, 43}}, + {m68k_op_mull_32_pcdi, 0xffff, 0x4c3a, {255, 255, 48, 48, 48, 48, 43}}, + {m68k_op_mull_32_pcix, 0xffff, 0x4c3b, {255, 255, 50, 50, 50, 50, 43}}, + {m68k_op_mull_32_i, 0xffff, 0x4c3c, {255, 255, 47, 47, 47, 47, 43}}, + {m68k_op_divl_32_aw, 0xffff, 0x4c78, {255, 255, 88, 88, 88, 88, 84}}, + {m68k_op_divl_32_al, 0xffff, 0x4c79, {255, 255, 88, 88, 88, 88, 84}}, + {m68k_op_divl_32_pcdi, 0xffff, 0x4c7a, {255, 255, 89, 89, 89, 89, 84}}, + {m68k_op_divl_32_pcix, 0xffff, 0x4c7b, {255, 255, 91, 91, 91, 91, 84}}, + {m68k_op_divl_32_i, 0xffff, 0x4c7c, {255, 255, 88, 88, 88, 88, 84}}, + {m68k_op_movem_16_er_aw, 0xffff, 0x4cb8, { 16, 16, 12, 12, 12, 12, 8}}, + {m68k_op_movem_16_er_al, 0xffff, 0x4cb9, { 20, 20, 12, 12, 12, 12, 8}}, + {m68k_op_movem_16_er_pcdi, 0xffff, 0x4cba, { 16, 16, 9, 9, 9, 9, 9}}, + {m68k_op_movem_16_er_pcix, 0xffff, 0x4cbb, { 18, 18, 11, 11, 11, 11, 11}}, + {m68k_op_movem_32_er_aw, 0xffff, 0x4cf8, { 16, 16, 12, 12, 12, 12, 8}}, + {m68k_op_movem_32_er_al, 0xffff, 0x4cf9, { 20, 20, 12, 12, 12, 12, 8}}, + {m68k_op_movem_32_er_pcdi, 0xffff, 0x4cfa, { 16, 16, 9, 9, 9, 9, 9}}, + {m68k_op_movem_32_er_pcix, 0xffff, 0x4cfb, { 18, 18, 11, 11, 11, 11, 11}}, + {m68k_op_link_16_a7, 0xffff, 0x4e57, { 16, 16, 5, 5, 5, 5, 5}}, + {m68k_op_unlk_32_a7, 0xffff, 0x4e5f, { 12, 12, 6, 6, 6, 6, 6}}, + {m68k_op_reset, 0xffff, 0x4e70, { 0, 0, 0, 0, 0, 0, 0}}, + {m68k_op_nop, 0xffff, 0x4e71, { 4, 4, 2, 2, 2, 2, 2}}, + {m68k_op_stop, 0xffff, 0x4e72, { 4, 4, 8, 8, 8, 8, 8}}, + {m68k_op_rte_32, 0xffff, 0x4e73, { 20, 24, 20, 20, 20, 20, 20}}, + {m68k_op_rtd_32, 0xffff, 0x4e74, {255, 16, 10, 10, 10, 10, 10}}, + {m68k_op_rts_32, 0xffff, 0x4e75, { 16, 16, 10, 10, 10, 10, 10}}, + {m68k_op_trapv, 0xffff, 0x4e76, { 4, 4, 4, 4, 4, 4, 4}}, + {m68k_op_rtr_32, 0xffff, 0x4e77, { 20, 20, 14, 14, 14, 14, 14}}, + {m68k_op_movec_32_cr, 0xffff, 0x4e7a, {255, 12, 6, 6, 6, 6, 6}}, + {m68k_op_movec_32_rc, 0xffff, 0x4e7b, {255, 10, 12, 12, 12, 12, 12}}, + {m68k_op_jsr_32_aw, 0xffff, 0x4eb8, { 18, 18, 4, 4, 4, 4, 0}}, + {m68k_op_jsr_32_al, 0xffff, 0x4eb9, { 20, 20, 4, 4, 4, 4, 0}}, + {m68k_op_jsr_32_pcdi, 0xffff, 0x4eba, { 18, 18, 5, 5, 5, 5, 0}}, + {m68k_op_jsr_32_pcix, 0xffff, 0x4ebb, { 22, 22, 7, 7, 7, 7, 0}}, + {m68k_op_jmp_32_aw, 0xffff, 0x4ef8, { 10, 10, 4, 4, 4, 4, 0}}, + {m68k_op_jmp_32_al, 0xffff, 0x4ef9, { 12, 12, 4, 4, 4, 4, 0}}, + {m68k_op_jmp_32_pcdi, 0xffff, 0x4efa, { 10, 10, 5, 5, 5, 5, 0}}, + {m68k_op_jmp_32_pcix, 0xffff, 0x4efb, { 14, 14, 7, 7, 7, 7, 0}}, + {m68k_op_st_8_pi7, 0xffff, 0x50df, { 12, 12, 10, 10, 10, 10, 6}}, + {m68k_op_st_8_pd7, 0xffff, 0x50e7, { 14, 14, 11, 11, 11, 11, 6}}, + {m68k_op_st_8_aw, 0xffff, 0x50f8, { 16, 16, 10, 10, 10, 10, 6}}, + {m68k_op_st_8_al, 0xffff, 0x50f9, { 20, 20, 10, 10, 10, 10, 6}}, + {m68k_op_trapt_16, 0xffff, 0x50fa, {255, 255, 6, 6, 6, 6, 6}}, + {m68k_op_trapt_32, 0xffff, 0x50fb, {255, 255, 8, 8, 8, 8, 8}}, + {m68k_op_trapt, 0xffff, 0x50fc, {255, 255, 4, 4, 4, 4, 4}}, + {m68k_op_sf_8_pi7, 0xffff, 0x51df, { 12, 12, 10, 10, 10, 10, 6}}, + {m68k_op_sf_8_pd7, 0xffff, 0x51e7, { 14, 14, 11, 11, 11, 11, 6}}, + {m68k_op_sf_8_aw, 0xffff, 0x51f8, { 16, 16, 10, 10, 10, 10, 6}}, + {m68k_op_sf_8_al, 0xffff, 0x51f9, { 20, 20, 10, 10, 10, 10, 6}}, + {m68k_op_trapf_16, 0xffff, 0x51fa, {255, 255, 6, 6, 6, 6, 6}}, + {m68k_op_trapf_32, 0xffff, 0x51fb, {255, 255, 8, 8, 8, 8, 8}}, + {m68k_op_trapf, 0xffff, 0x51fc, {255, 255, 4, 4, 4, 4, 4}}, + {m68k_op_shi_8_pi7, 0xffff, 0x52df, { 12, 12, 10, 10, 10, 10, 6}}, + {m68k_op_shi_8_pd7, 0xffff, 0x52e7, { 14, 14, 11, 11, 11, 11, 6}}, + {m68k_op_shi_8_aw, 0xffff, 0x52f8, { 16, 16, 10, 10, 10, 10, 6}}, + {m68k_op_shi_8_al, 0xffff, 0x52f9, { 20, 20, 10, 10, 10, 10, 6}}, + {m68k_op_traphi_16, 0xffff, 0x52fa, {255, 255, 6, 6, 6, 6, 6}}, + {m68k_op_traphi_32, 0xffff, 0x52fb, {255, 255, 8, 8, 8, 8, 8}}, + {m68k_op_traphi, 0xffff, 0x52fc, {255, 255, 4, 4, 4, 4, 4}}, + {m68k_op_sls_8_pi7, 0xffff, 0x53df, { 12, 12, 10, 10, 10, 10, 6}}, + {m68k_op_sls_8_pd7, 0xffff, 0x53e7, { 14, 14, 11, 11, 11, 11, 6}}, + {m68k_op_sls_8_aw, 0xffff, 0x53f8, { 16, 16, 10, 10, 10, 10, 6}}, + {m68k_op_sls_8_al, 0xffff, 0x53f9, { 20, 20, 10, 10, 10, 10, 6}}, + {m68k_op_trapls_16, 0xffff, 0x53fa, {255, 255, 6, 6, 6, 6, 6}}, + {m68k_op_trapls_32, 0xffff, 0x53fb, {255, 255, 8, 8, 8, 8, 8}}, + {m68k_op_trapls, 0xffff, 0x53fc, {255, 255, 4, 4, 4, 4, 4}}, + {m68k_op_scc_8_pi7, 0xffff, 0x54df, { 12, 12, 10, 10, 10, 10, 6}}, + {m68k_op_scc_8_pd7, 0xffff, 0x54e7, { 14, 14, 11, 11, 11, 11, 6}}, + {m68k_op_scc_8_aw, 0xffff, 0x54f8, { 16, 16, 10, 10, 10, 10, 6}}, + {m68k_op_scc_8_al, 0xffff, 0x54f9, { 20, 20, 10, 10, 10, 10, 6}}, + {m68k_op_trapcc_16, 0xffff, 0x54fa, {255, 255, 6, 6, 6, 6, 6}}, + {m68k_op_trapcc_32, 0xffff, 0x54fb, {255, 255, 8, 8, 8, 8, 8}}, + {m68k_op_trapcc, 0xffff, 0x54fc, {255, 255, 4, 4, 4, 4, 4}}, + {m68k_op_scs_8_pi7, 0xffff, 0x55df, { 12, 12, 10, 10, 10, 10, 6}}, + {m68k_op_scs_8_pd7, 0xffff, 0x55e7, { 14, 14, 11, 11, 11, 11, 6}}, + {m68k_op_scs_8_aw, 0xffff, 0x55f8, { 16, 16, 10, 10, 10, 10, 6}}, + {m68k_op_scs_8_al, 0xffff, 0x55f9, { 20, 20, 10, 10, 10, 10, 6}}, + {m68k_op_trapcs_16, 0xffff, 0x55fa, {255, 255, 6, 6, 6, 6, 6}}, + {m68k_op_trapcs_32, 0xffff, 0x55fb, {255, 255, 8, 8, 8, 8, 8}}, + {m68k_op_trapcs, 0xffff, 0x55fc, {255, 255, 4, 4, 4, 4, 4}}, + {m68k_op_sne_8_pi7, 0xffff, 0x56df, { 12, 12, 10, 10, 10, 10, 6}}, + {m68k_op_sne_8_pd7, 0xffff, 0x56e7, { 14, 14, 11, 11, 11, 11, 6}}, + {m68k_op_sne_8_aw, 0xffff, 0x56f8, { 16, 16, 10, 10, 10, 10, 6}}, + {m68k_op_sne_8_al, 0xffff, 0x56f9, { 20, 20, 10, 10, 10, 10, 6}}, + {m68k_op_trapne_16, 0xffff, 0x56fa, {255, 255, 6, 6, 6, 6, 6}}, + {m68k_op_trapne_32, 0xffff, 0x56fb, {255, 255, 8, 8, 8, 8, 8}}, + {m68k_op_trapne, 0xffff, 0x56fc, {255, 255, 4, 4, 4, 4, 4}}, + {m68k_op_seq_8_pi7, 0xffff, 0x57df, { 12, 12, 10, 10, 10, 10, 6}}, + {m68k_op_seq_8_pd7, 0xffff, 0x57e7, { 14, 14, 11, 11, 11, 11, 6}}, + {m68k_op_seq_8_aw, 0xffff, 0x57f8, { 16, 16, 10, 10, 10, 10, 6}}, + {m68k_op_seq_8_al, 0xffff, 0x57f9, { 20, 20, 10, 10, 10, 10, 6}}, + {m68k_op_trapeq_16, 0xffff, 0x57fa, {255, 255, 6, 6, 6, 6, 6}}, + {m68k_op_trapeq_32, 0xffff, 0x57fb, {255, 255, 8, 8, 8, 8, 8}}, + {m68k_op_trapeq, 0xffff, 0x57fc, {255, 255, 4, 4, 4, 4, 4}}, + {m68k_op_svc_8_pi7, 0xffff, 0x58df, { 12, 12, 10, 10, 10, 10, 6}}, + {m68k_op_svc_8_pd7, 0xffff, 0x58e7, { 14, 14, 11, 11, 11, 11, 6}}, + {m68k_op_svc_8_aw, 0xffff, 0x58f8, { 16, 16, 10, 10, 10, 10, 6}}, + {m68k_op_svc_8_al, 0xffff, 0x58f9, { 20, 20, 10, 10, 10, 10, 6}}, + {m68k_op_trapvc_16, 0xffff, 0x58fa, {255, 255, 6, 6, 6, 6, 6}}, + {m68k_op_trapvc_32, 0xffff, 0x58fb, {255, 255, 8, 8, 8, 8, 8}}, + {m68k_op_trapvc, 0xffff, 0x58fc, {255, 255, 4, 4, 4, 4, 4}}, + {m68k_op_svs_8_pi7, 0xffff, 0x59df, { 12, 12, 10, 10, 10, 10, 6}}, + {m68k_op_svs_8_pd7, 0xffff, 0x59e7, { 14, 14, 11, 11, 11, 11, 6}}, + {m68k_op_svs_8_aw, 0xffff, 0x59f8, { 16, 16, 10, 10, 10, 10, 6}}, + {m68k_op_svs_8_al, 0xffff, 0x59f9, { 20, 20, 10, 10, 10, 10, 6}}, + {m68k_op_trapvs_16, 0xffff, 0x59fa, {255, 255, 6, 6, 6, 6, 6}}, + {m68k_op_trapvs_32, 0xffff, 0x59fb, {255, 255, 8, 8, 8, 8, 8}}, + {m68k_op_trapvs, 0xffff, 0x59fc, {255, 255, 4, 4, 4, 4, 4}}, + {m68k_op_spl_8_pi7, 0xffff, 0x5adf, { 12, 12, 10, 10, 10, 10, 6}}, + {m68k_op_spl_8_pd7, 0xffff, 0x5ae7, { 14, 14, 11, 11, 11, 11, 6}}, + {m68k_op_spl_8_aw, 0xffff, 0x5af8, { 16, 16, 10, 10, 10, 10, 6}}, + {m68k_op_spl_8_al, 0xffff, 0x5af9, { 20, 20, 10, 10, 10, 10, 6}}, + {m68k_op_trappl_16, 0xffff, 0x5afa, {255, 255, 6, 6, 6, 6, 6}}, + {m68k_op_trappl_32, 0xffff, 0x5afb, {255, 255, 8, 8, 8, 8, 8}}, + {m68k_op_trappl, 0xffff, 0x5afc, {255, 255, 4, 4, 4, 4, 4}}, + {m68k_op_smi_8_pi7, 0xffff, 0x5bdf, { 12, 12, 10, 10, 10, 10, 6}}, + {m68k_op_smi_8_pd7, 0xffff, 0x5be7, { 14, 14, 11, 11, 11, 11, 6}}, + {m68k_op_smi_8_aw, 0xffff, 0x5bf8, { 16, 16, 10, 10, 10, 10, 6}}, + {m68k_op_smi_8_al, 0xffff, 0x5bf9, { 20, 20, 10, 10, 10, 10, 6}}, + {m68k_op_trapmi_16, 0xffff, 0x5bfa, {255, 255, 6, 6, 6, 6, 6}}, + {m68k_op_trapmi_32, 0xffff, 0x5bfb, {255, 255, 8, 8, 8, 8, 8}}, + {m68k_op_trapmi, 0xffff, 0x5bfc, {255, 255, 4, 4, 4, 4, 4}}, + {m68k_op_sge_8_pi7, 0xffff, 0x5cdf, { 12, 12, 10, 10, 10, 10, 6}}, + {m68k_op_sge_8_pd7, 0xffff, 0x5ce7, { 14, 14, 11, 11, 11, 11, 6}}, + {m68k_op_sge_8_aw, 0xffff, 0x5cf8, { 16, 16, 10, 10, 10, 10, 6}}, + {m68k_op_sge_8_al, 0xffff, 0x5cf9, { 20, 20, 10, 10, 10, 10, 6}}, + {m68k_op_trapge_16, 0xffff, 0x5cfa, {255, 255, 6, 6, 6, 6, 6}}, + {m68k_op_trapge_32, 0xffff, 0x5cfb, {255, 255, 8, 8, 8, 8, 8}}, + {m68k_op_trapge, 0xffff, 0x5cfc, {255, 255, 4, 4, 4, 4, 4}}, + {m68k_op_slt_8_pi7, 0xffff, 0x5ddf, { 12, 12, 10, 10, 10, 10, 6}}, + {m68k_op_slt_8_pd7, 0xffff, 0x5de7, { 14, 14, 11, 11, 11, 11, 6}}, + {m68k_op_slt_8_aw, 0xffff, 0x5df8, { 16, 16, 10, 10, 10, 10, 6}}, + {m68k_op_slt_8_al, 0xffff, 0x5df9, { 20, 20, 10, 10, 10, 10, 6}}, + {m68k_op_traplt_16, 0xffff, 0x5dfa, {255, 255, 6, 6, 6, 6, 6}}, + {m68k_op_traplt_32, 0xffff, 0x5dfb, {255, 255, 8, 8, 8, 8, 8}}, + {m68k_op_traplt, 0xffff, 0x5dfc, {255, 255, 4, 4, 4, 4, 4}}, + {m68k_op_sgt_8_pi7, 0xffff, 0x5edf, { 12, 12, 10, 10, 10, 10, 6}}, + {m68k_op_sgt_8_pd7, 0xffff, 0x5ee7, { 14, 14, 11, 11, 11, 11, 6}}, + {m68k_op_sgt_8_aw, 0xffff, 0x5ef8, { 16, 16, 10, 10, 10, 10, 6}}, + {m68k_op_sgt_8_al, 0xffff, 0x5ef9, { 20, 20, 10, 10, 10, 10, 6}}, + {m68k_op_trapgt_16, 0xffff, 0x5efa, {255, 255, 6, 6, 6, 6, 6}}, + {m68k_op_trapgt_32, 0xffff, 0x5efb, {255, 255, 8, 8, 8, 8, 8}}, + {m68k_op_trapgt, 0xffff, 0x5efc, {255, 255, 4, 4, 4, 4, 4}}, + {m68k_op_sle_8_pi7, 0xffff, 0x5fdf, { 12, 12, 10, 10, 10, 10, 6}}, + {m68k_op_sle_8_pd7, 0xffff, 0x5fe7, { 14, 14, 11, 11, 11, 11, 6}}, + {m68k_op_sle_8_aw, 0xffff, 0x5ff8, { 16, 16, 10, 10, 10, 10, 6}}, + {m68k_op_sle_8_al, 0xffff, 0x5ff9, { 20, 20, 10, 10, 10, 10, 6}}, + {m68k_op_traple_16, 0xffff, 0x5ffa, {255, 255, 6, 6, 6, 6, 6}}, + {m68k_op_traple_32, 0xffff, 0x5ffb, {255, 255, 8, 8, 8, 8, 8}}, + {m68k_op_traple, 0xffff, 0x5ffc, {255, 255, 4, 4, 4, 4, 4}}, + {m68k_op_bra_16, 0xffff, 0x6000, { 10, 10, 10, 10, 10, 10, 10}}, + {m68k_op_bra_32, 0xffff, 0x60ff, { 10, 10, 10, 10, 10, 10, 10}}, + {m68k_op_bsr_16, 0xffff, 0x6100, { 18, 18, 7, 7, 7, 7, 7}}, + {m68k_op_bsr_32, 0xffff, 0x61ff, { 18, 18, 7, 7, 7, 7, 7}}, + {m68k_op_bhi_16, 0xffff, 0x6200, { 10, 10, 6, 6, 6, 6, 6}}, + {m68k_op_bhi_32, 0xffff, 0x62ff, { 10, 10, 6, 6, 6, 6, 6}}, + {m68k_op_bls_16, 0xffff, 0x6300, { 10, 10, 6, 6, 6, 6, 6}}, + {m68k_op_bls_32, 0xffff, 0x63ff, { 10, 10, 6, 6, 6, 6, 6}}, + {m68k_op_bcc_16, 0xffff, 0x6400, { 10, 10, 6, 6, 6, 6, 6}}, + {m68k_op_bcc_32, 0xffff, 0x64ff, { 10, 10, 6, 6, 6, 6, 6}}, + {m68k_op_bcs_16, 0xffff, 0x6500, { 10, 10, 6, 6, 6, 6, 6}}, + {m68k_op_bcs_32, 0xffff, 0x65ff, { 10, 10, 6, 6, 6, 6, 6}}, + {m68k_op_bne_16, 0xffff, 0x6600, { 10, 10, 6, 6, 6, 6, 6}}, + {m68k_op_bne_32, 0xffff, 0x66ff, { 10, 10, 6, 6, 6, 6, 6}}, + {m68k_op_beq_16, 0xffff, 0x6700, { 10, 10, 6, 6, 6, 6, 6}}, + {m68k_op_beq_32, 0xffff, 0x67ff, { 10, 10, 6, 6, 6, 6, 6}}, + {m68k_op_bvc_16, 0xffff, 0x6800, { 10, 10, 6, 6, 6, 6, 6}}, + {m68k_op_bvc_32, 0xffff, 0x68ff, { 10, 10, 6, 6, 6, 6, 6}}, + {m68k_op_bvs_16, 0xffff, 0x6900, { 10, 10, 6, 6, 6, 6, 6}}, + {m68k_op_bvs_32, 0xffff, 0x69ff, { 10, 10, 6, 6, 6, 6, 6}}, + {m68k_op_bpl_16, 0xffff, 0x6a00, { 10, 10, 6, 6, 6, 6, 6}}, + {m68k_op_bpl_32, 0xffff, 0x6aff, { 10, 10, 6, 6, 6, 6, 6}}, + {m68k_op_bmi_16, 0xffff, 0x6b00, { 10, 10, 6, 6, 6, 6, 6}}, + {m68k_op_bmi_32, 0xffff, 0x6bff, { 10, 10, 6, 6, 6, 6, 6}}, + {m68k_op_bge_16, 0xffff, 0x6c00, { 10, 10, 6, 6, 6, 6, 6}}, + {m68k_op_bge_32, 0xffff, 0x6cff, { 10, 10, 6, 6, 6, 6, 6}}, + {m68k_op_blt_16, 0xffff, 0x6d00, { 10, 10, 6, 6, 6, 6, 6}}, + {m68k_op_blt_32, 0xffff, 0x6dff, { 10, 10, 6, 6, 6, 6, 6}}, + {m68k_op_bgt_16, 0xffff, 0x6e00, { 10, 10, 6, 6, 6, 6, 6}}, + {m68k_op_bgt_32, 0xffff, 0x6eff, { 10, 10, 6, 6, 6, 6, 6}}, + {m68k_op_ble_16, 0xffff, 0x6f00, { 10, 10, 6, 6, 6, 6, 6}}, + {m68k_op_ble_32, 0xffff, 0x6fff, { 10, 10, 6, 6, 6, 6, 6}}, + {m68k_op_sbcd_8_mm_axy7, 0xffff, 0x8f0f, { 18, 18, 16, 16, 16, 16, 16}}, + {m68k_op_pack_16_mm_axy7, 0xffff, 0x8f4f, {255, 255, 13, 13, 13, 13, 13}}, + {m68k_op_unpk_16_mm_axy7, 0xffff, 0x8f8f, {255, 255, 13, 13, 13, 13, 13}}, + {m68k_op_subx_8_mm_axy7, 0xffff, 0x9f0f, { 18, 18, 12, 12, 12, 12, 12}}, + {m68k_op_cmpm_8_axy7, 0xffff, 0xbf0f, { 12, 12, 9, 9, 9, 9, 9}}, + {m68k_op_abcd_8_mm_axy7, 0xffff, 0xcf0f, { 18, 18, 16, 16, 16, 16, 16}}, + {m68k_op_addx_8_mm_axy7, 0xffff, 0xdf0f, { 18, 18, 12, 12, 12, 12, 12}}, + {m68k_op_asr_16_aw, 0xffff, 0xe0f8, { 16, 16, 9, 9, 9, 9, 5}}, + {m68k_op_asr_16_al, 0xffff, 0xe0f9, { 20, 20, 9, 9, 9, 9, 5}}, + {m68k_op_asl_16_aw, 0xffff, 0xe1f8, { 16, 16, 10, 10, 10, 10, 6}}, + {m68k_op_asl_16_al, 0xffff, 0xe1f9, { 20, 20, 10, 10, 10, 10, 6}}, + {m68k_op_lsr_16_aw, 0xffff, 0xe2f8, { 16, 16, 9, 9, 9, 9, 5}}, + {m68k_op_lsr_16_al, 0xffff, 0xe2f9, { 20, 20, 9, 9, 9, 9, 5}}, + {m68k_op_lsl_16_aw, 0xffff, 0xe3f8, { 16, 16, 9, 9, 9, 9, 5}}, + {m68k_op_lsl_16_al, 0xffff, 0xe3f9, { 20, 20, 9, 9, 9, 9, 5}}, + {m68k_op_roxr_16_aw, 0xffff, 0xe4f8, { 16, 16, 9, 9, 9, 9, 5}}, + {m68k_op_roxr_16_al, 0xffff, 0xe4f9, { 20, 20, 9, 9, 9, 9, 5}}, + {m68k_op_roxl_16_aw, 0xffff, 0xe5f8, { 16, 16, 9, 9, 9, 9, 5}}, + {m68k_op_roxl_16_al, 0xffff, 0xe5f9, { 20, 20, 9, 9, 9, 9, 5}}, + {m68k_op_ror_16_aw, 0xffff, 0xe6f8, { 16, 16, 11, 11, 11, 11, 7}}, + {m68k_op_ror_16_al, 0xffff, 0xe6f9, { 20, 20, 11, 11, 11, 11, 7}}, + {m68k_op_rol_16_aw, 0xffff, 0xe7f8, { 16, 16, 11, 11, 11, 11, 7}}, + {m68k_op_rol_16_al, 0xffff, 0xe7f9, { 20, 20, 11, 11, 11, 11, 7}}, + {m68k_op_bftst_32_aw, 0xffff, 0xe8f8, {255, 255, 17, 17, 17, 17, 13}}, + {m68k_op_bftst_32_al, 0xffff, 0xe8f9, {255, 255, 17, 17, 17, 17, 13}}, + {m68k_op_bftst_32_pcdi, 0xffff, 0xe8fa, {255, 255, 18, 18, 18, 18, 13}}, + {m68k_op_bftst_32_pcix, 0xffff, 0xe8fb, {255, 255, 20, 20, 20, 20, 13}}, + {m68k_op_bfextu_32_aw, 0xffff, 0xe9f8, {255, 255, 19, 19, 19, 19, 15}}, + {m68k_op_bfextu_32_al, 0xffff, 0xe9f9, {255, 255, 19, 19, 19, 19, 15}}, + {m68k_op_bfextu_32_pcdi, 0xffff, 0xe9fa, {255, 255, 20, 20, 20, 20, 15}}, + {m68k_op_bfextu_32_pcix, 0xffff, 0xe9fb, {255, 255, 22, 22, 22, 22, 15}}, + {m68k_op_bfchg_32_aw, 0xffff, 0xeaf8, {255, 255, 24, 24, 24, 24, 20}}, + {m68k_op_bfchg_32_al, 0xffff, 0xeaf9, {255, 255, 24, 24, 24, 24, 20}}, + {m68k_op_bfexts_32_aw, 0xffff, 0xebf8, {255, 255, 19, 19, 19, 19, 15}}, + {m68k_op_bfexts_32_al, 0xffff, 0xebf9, {255, 255, 19, 19, 19, 19, 15}}, + {m68k_op_bfexts_32_pcdi, 0xffff, 0xebfa, {255, 255, 20, 20, 20, 20, 15}}, + {m68k_op_bfexts_32_pcix, 0xffff, 0xebfb, {255, 255, 22, 22, 22, 22, 15}}, + {m68k_op_bfclr_32_aw, 0xffff, 0xecf8, {255, 255, 24, 24, 24, 24, 20}}, + {m68k_op_bfclr_32_al, 0xffff, 0xecf9, {255, 255, 24, 24, 24, 24, 20}}, + {m68k_op_bfffo_32_aw, 0xffff, 0xedf8, {255, 255, 32, 32, 32, 32, 28}}, + {m68k_op_bfffo_32_al, 0xffff, 0xedf9, {255, 255, 32, 32, 32, 32, 28}}, + {m68k_op_bfffo_32_pcdi, 0xffff, 0xedfa, {255, 255, 33, 33, 33, 33, 28}}, + {m68k_op_bfffo_32_pcix, 0xffff, 0xedfb, {255, 255, 35, 35, 35, 35, 28}}, + {m68k_op_bfset_32_aw, 0xffff, 0xeef8, {255, 255, 24, 24, 24, 24, 20}}, + {m68k_op_bfset_32_al, 0xffff, 0xeef9, {255, 255, 24, 24, 24, 24, 20}}, + {m68k_op_bfins_32_aw, 0xffff, 0xeff8, {255, 255, 21, 21, 21, 21, 17}}, + {m68k_op_bfins_32_al, 0xffff, 0xeff9, {255, 255, 21, 21, 21, 21, 17}}, + {NULL, 0, 0, {0, 0, 0, 0, 0}} +}; + + +/* Build the opcode handler jump table */ + +static void m68ki_set_one(unsigned short opcode, const opcode_handler_struct *s) +{ + for(int i=0; icycles[i] != 0xff) { + m68ki_cycles[i][opcode] = s->cycles[i]; + m68ki_instruction_jump_table[i][opcode] = s->opcode_handler; + } +} + +void m68ki_build_opcode_table(void) +{ + const opcode_handler_struct *ostruct; + int i; + int j; + int k; + + for(i = 0; i < 0x10000; i++) + { + /* default to illegal */ + for(k=0;kmask != 0xff00) + { + for(i = 0;i < 0x10000;i++) + { + if((i & ostruct->mask) == ostruct->match) + m68ki_set_one(i, ostruct); + } + ostruct++; + } + while(ostruct->mask == 0xff00) + { + for(i = 0;i <= 0xff;i++) + m68ki_set_one(ostruct->match | i, ostruct); + ostruct++; + } + while(ostruct->mask == 0xff20) + { + for(i = 0;i < 4;i++) + { + for(j = 0;j < 32;j++) + { + m68ki_set_one(ostruct->match | (i << 6) | j, ostruct); + } + } + ostruct++; + } + while(ostruct->mask == 0xf1f8) + { + for(i = 0;i < 8;i++) + { + for(j = 0;j < 8;j++) + m68ki_set_one(ostruct->match | (i << 9) | j, ostruct); + } + ostruct++; + } + while(ostruct->mask == 0xffd8) + { + for(i = 0;i < 2;i++) + { + for(j = 0;j < 8;j++) + { + m68ki_set_one(ostruct->match | (i << 5) | j, ostruct); + } + } + ostruct++; + } + while(ostruct->mask == 0xfff0) + { + for(i = 0;i <= 0x0f;i++) + m68ki_set_one(ostruct->match | i, ostruct); + ostruct++; + } + while(ostruct->mask == 0xf1ff) + { + for(i = 0;i <= 0x07;i++) + m68ki_set_one(ostruct->match | (i << 9), ostruct); + ostruct++; + } + while(ostruct->mask == 0xfff8) + { + for(i = 0;i <= 0x07;i++) + m68ki_set_one(ostruct->match | i, ostruct); + ostruct++; + } + while(ostruct->mask == 0xffff) + { + m68ki_set_one(ostruct->match, ostruct); + ostruct++; + } + + // if we fell all the way through with a non-zero mask, the opcode table wasn't built properly + if (ostruct->mask != 0) + { + fatal_error("m68ki_build_opcode_table: unhandled opcode mask %x (match %x), m68k core will not function!\n", ostruct->mask, ostruct->match); + } +} + + +/* ======================================================================== */ +/* ============================== END OF FILE ============================= */ +/* ======================================================================== */ + + diff -r f23e70fb6607 -r 2c1c88cd1a3f musashi/m68kops.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/musashi/m68kops.h Sun Apr 19 00:59:09 2020 -0700 @@ -0,0 +1,1995 @@ +// license:BSD-3-Clause +// copyright-holders:Karl Stenerud +/* ======================================================================== */ +/* ============================ OPCODE HANDLERS =========================== */ +/* ======================================================================== */ + + +#ifdef OPCODE_PROTOTYPES + +static void m68k_op_1010(m68000_base_device* mc68kcpu); +static void m68k_op_1111(m68000_base_device* mc68kcpu); +static void m68k_op_040fpu0_32(m68000_base_device* mc68kcpu); +static void m68k_op_040fpu1_32(m68000_base_device* mc68kcpu); +static void m68k_op_abcd_8_rr(m68000_base_device* mc68kcpu); +static void m68k_op_abcd_8_mm_ax7(m68000_base_device* mc68kcpu); +static void m68k_op_abcd_8_mm_ay7(m68000_base_device* mc68kcpu); +static void m68k_op_abcd_8_mm_axy7(m68000_base_device* mc68kcpu); +static void m68k_op_abcd_8_mm(m68000_base_device* mc68kcpu); +static void m68k_op_add_8_er_d(m68000_base_device* mc68kcpu); +static void m68k_op_add_8_er_ai(m68000_base_device* mc68kcpu); +static void m68k_op_add_8_er_pi(m68000_base_device* mc68kcpu); +static void m68k_op_add_8_er_pi7(m68000_base_device* mc68kcpu); +static void m68k_op_add_8_er_pd(m68000_base_device* mc68kcpu); +static void m68k_op_add_8_er_pd7(m68000_base_device* mc68kcpu); +static void m68k_op_add_8_er_di(m68000_base_device* mc68kcpu); +static void m68k_op_add_8_er_ix(m68000_base_device* mc68kcpu); +static void m68k_op_add_8_er_aw(m68000_base_device* mc68kcpu); +static void m68k_op_add_8_er_al(m68000_base_device* mc68kcpu); +static void m68k_op_add_8_er_pcdi(m68000_base_device* mc68kcpu); +static void m68k_op_add_8_er_pcix(m68000_base_device* mc68kcpu); +static void m68k_op_add_8_er_i(m68000_base_device* mc68kcpu); +static void m68k_op_add_16_er_d(m68000_base_device* mc68kcpu); +static void m68k_op_add_16_er_a(m68000_base_device* mc68kcpu); +static void m68k_op_add_16_er_ai(m68000_base_device* mc68kcpu); +static void m68k_op_add_16_er_pi(m68000_base_device* mc68kcpu); +static void m68k_op_add_16_er_pd(m68000_base_device* mc68kcpu); +static void m68k_op_add_16_er_di(m68000_base_device* mc68kcpu); +static void m68k_op_add_16_er_ix(m68000_base_device* mc68kcpu); +static void m68k_op_add_16_er_aw(m68000_base_device* mc68kcpu); +static void m68k_op_add_16_er_al(m68000_base_device* mc68kcpu); +static void m68k_op_add_16_er_pcdi(m68000_base_device* mc68kcpu); +static void m68k_op_add_16_er_pcix(m68000_base_device* mc68kcpu); +static void m68k_op_add_16_er_i(m68000_base_device* mc68kcpu); +static void m68k_op_add_32_er_d(m68000_base_device* mc68kcpu); +static void m68k_op_add_32_er_a(m68000_base_device* mc68kcpu); +static void m68k_op_add_32_er_ai(m68000_base_device* mc68kcpu); +static void m68k_op_add_32_er_pi(m68000_base_device* mc68kcpu); +static void m68k_op_add_32_er_pd(m68000_base_device* mc68kcpu); +static void m68k_op_add_32_er_di(m68000_base_device* mc68kcpu); +static void m68k_op_add_32_er_ix(m68000_base_device* mc68kcpu); +static void m68k_op_add_32_er_aw(m68000_base_device* mc68kcpu); +static void m68k_op_add_32_er_al(m68000_base_device* mc68kcpu); +static void m68k_op_add_32_er_pcdi(m68000_base_device* mc68kcpu); +static void m68k_op_add_32_er_pcix(m68000_base_device* mc68kcpu); +static void m68k_op_add_32_er_i(m68000_base_device* mc68kcpu); +static void m68k_op_add_8_re_ai(m68000_base_device* mc68kcpu); +static void m68k_op_add_8_re_pi(m68000_base_device* mc68kcpu); +static void m68k_op_add_8_re_pi7(m68000_base_device* mc68kcpu); +static void m68k_op_add_8_re_pd(m68000_base_device* mc68kcpu); +static void m68k_op_add_8_re_pd7(m68000_base_device* mc68kcpu); +static void m68k_op_add_8_re_di(m68000_base_device* mc68kcpu); +static void m68k_op_add_8_re_ix(m68000_base_device* mc68kcpu); +static void m68k_op_add_8_re_aw(m68000_base_device* mc68kcpu); +static void m68k_op_add_8_re_al(m68000_base_device* mc68kcpu); +static void m68k_op_add_16_re_ai(m68000_base_device* mc68kcpu); +static void m68k_op_add_16_re_pi(m68000_base_device* mc68kcpu); +static void m68k_op_add_16_re_pd(m68000_base_device* mc68kcpu); +static void m68k_op_add_16_re_di(m68000_base_device* mc68kcpu); +static void m68k_op_add_16_re_ix(m68000_base_device* mc68kcpu); +static void m68k_op_add_16_re_aw(m68000_base_device* mc68kcpu); +static void m68k_op_add_16_re_al(m68000_base_device* mc68kcpu); +static void m68k_op_add_32_re_ai(m68000_base_device* mc68kcpu); +static void m68k_op_add_32_re_pi(m68000_base_device* mc68kcpu); +static void m68k_op_add_32_re_pd(m68000_base_device* mc68kcpu); +static void m68k_op_add_32_re_di(m68000_base_device* mc68kcpu); +static void m68k_op_add_32_re_ix(m68000_base_device* mc68kcpu); +static void m68k_op_add_32_re_aw(m68000_base_device* mc68kcpu); +static void m68k_op_add_32_re_al(m68000_base_device* mc68kcpu); +static void m68k_op_adda_16_d(m68000_base_device* mc68kcpu); +static void m68k_op_adda_16_a(m68000_base_device* mc68kcpu); +static void m68k_op_adda_16_ai(m68000_base_device* mc68kcpu); +static void m68k_op_adda_16_pi(m68000_base_device* mc68kcpu); +static void m68k_op_adda_16_pd(m68000_base_device* mc68kcpu); +static void m68k_op_adda_16_di(m68000_base_device* mc68kcpu); +static void m68k_op_adda_16_ix(m68000_base_device* mc68kcpu); +static void m68k_op_adda_16_aw(m68000_base_device* mc68kcpu); +static void m68k_op_adda_16_al(m68000_base_device* mc68kcpu); +static void m68k_op_adda_16_pcdi(m68000_base_device* mc68kcpu); +static void m68k_op_adda_16_pcix(m68000_base_device* mc68kcpu); +static void m68k_op_adda_16_i(m68000_base_device* mc68kcpu); +static void m68k_op_adda_32_d(m68000_base_device* mc68kcpu); +static void m68k_op_adda_32_a(m68000_base_device* mc68kcpu); +static void m68k_op_adda_32_ai(m68000_base_device* mc68kcpu); +static void m68k_op_adda_32_pi(m68000_base_device* mc68kcpu); +static void m68k_op_adda_32_pd(m68000_base_device* mc68kcpu); +static void m68k_op_adda_32_di(m68000_base_device* mc68kcpu); +static void m68k_op_adda_32_ix(m68000_base_device* mc68kcpu); +static void m68k_op_adda_32_aw(m68000_base_device* mc68kcpu); +static void m68k_op_adda_32_al(m68000_base_device* mc68kcpu); +static void m68k_op_adda_32_pcdi(m68000_base_device* mc68kcpu); +static void m68k_op_adda_32_pcix(m68000_base_device* mc68kcpu); +static void m68k_op_adda_32_i(m68000_base_device* mc68kcpu); +static void m68k_op_addi_8_d(m68000_base_device* mc68kcpu); +static void m68k_op_addi_8_ai(m68000_base_device* mc68kcpu); +static void m68k_op_addi_8_pi(m68000_base_device* mc68kcpu); +static void m68k_op_addi_8_pi7(m68000_base_device* mc68kcpu); +static void m68k_op_addi_8_pd(m68000_base_device* mc68kcpu); +static void m68k_op_addi_8_pd7(m68000_base_device* mc68kcpu); +static void m68k_op_addi_8_di(m68000_base_device* mc68kcpu); +static void m68k_op_addi_8_ix(m68000_base_device* mc68kcpu); +static void m68k_op_addi_8_aw(m68000_base_device* mc68kcpu); +static void m68k_op_addi_8_al(m68000_base_device* mc68kcpu); +static void m68k_op_addi_16_d(m68000_base_device* mc68kcpu); +static void m68k_op_addi_16_ai(m68000_base_device* mc68kcpu); +static void m68k_op_addi_16_pi(m68000_base_device* mc68kcpu); +static void m68k_op_addi_16_pd(m68000_base_device* mc68kcpu); +static void m68k_op_addi_16_di(m68000_base_device* mc68kcpu); +static void m68k_op_addi_16_ix(m68000_base_device* mc68kcpu); +static void m68k_op_addi_16_aw(m68000_base_device* mc68kcpu); +static void m68k_op_addi_16_al(m68000_base_device* mc68kcpu); +static void m68k_op_addi_32_d(m68000_base_device* mc68kcpu); +static void m68k_op_addi_32_ai(m68000_base_device* mc68kcpu); +static void m68k_op_addi_32_pi(m68000_base_device* mc68kcpu); +static void m68k_op_addi_32_pd(m68000_base_device* mc68kcpu); +static void m68k_op_addi_32_di(m68000_base_device* mc68kcpu); +static void m68k_op_addi_32_ix(m68000_base_device* mc68kcpu); +static void m68k_op_addi_32_aw(m68000_base_device* mc68kcpu); +static void m68k_op_addi_32_al(m68000_base_device* mc68kcpu); +static void m68k_op_addq_8_d(m68000_base_device* mc68kcpu); +static void m68k_op_addq_8_ai(m68000_base_device* mc68kcpu); +static void m68k_op_addq_8_pi(m68000_base_device* mc68kcpu); +static void m68k_op_addq_8_pi7(m68000_base_device* mc68kcpu); +static void m68k_op_addq_8_pd(m68000_base_device* mc68kcpu); +static void m68k_op_addq_8_pd7(m68000_base_device* mc68kcpu); +static void m68k_op_addq_8_di(m68000_base_device* mc68kcpu); +static void m68k_op_addq_8_ix(m68000_base_device* mc68kcpu); +static void m68k_op_addq_8_aw(m68000_base_device* mc68kcpu); +static void m68k_op_addq_8_al(m68000_base_device* mc68kcpu); +static void m68k_op_addq_16_d(m68000_base_device* mc68kcpu); +static void m68k_op_addq_16_a(m68000_base_device* mc68kcpu); +static void m68k_op_addq_16_ai(m68000_base_device* mc68kcpu); +static void m68k_op_addq_16_pi(m68000_base_device* mc68kcpu); +static void m68k_op_addq_16_pd(m68000_base_device* mc68kcpu); +static void m68k_op_addq_16_di(m68000_base_device* mc68kcpu); +static void m68k_op_addq_16_ix(m68000_base_device* mc68kcpu); +static void m68k_op_addq_16_aw(m68000_base_device* mc68kcpu); +static void m68k_op_addq_16_al(m68000_base_device* mc68kcpu); +static void m68k_op_addq_32_d(m68000_base_device* mc68kcpu); +static void m68k_op_addq_32_a(m68000_base_device* mc68kcpu); +static void m68k_op_addq_32_ai(m68000_base_device* mc68kcpu); +static void m68k_op_addq_32_pi(m68000_base_device* mc68kcpu); +static void m68k_op_addq_32_pd(m68000_base_device* mc68kcpu); +static void m68k_op_addq_32_di(m68000_base_device* mc68kcpu); +static void m68k_op_addq_32_ix(m68000_base_device* mc68kcpu); +static void m68k_op_addq_32_aw(m68000_base_device* mc68kcpu); +static void m68k_op_addq_32_al(m68000_base_device* mc68kcpu); +static void m68k_op_addx_8_rr(m68000_base_device* mc68kcpu); +static void m68k_op_addx_16_rr(m68000_base_device* mc68kcpu); +static void m68k_op_addx_32_rr(m68000_base_device* mc68kcpu); +static void m68k_op_addx_8_mm_ax7(m68000_base_device* mc68kcpu); +static void m68k_op_addx_8_mm_ay7(m68000_base_device* mc68kcpu); +static void m68k_op_addx_8_mm_axy7(m68000_base_device* mc68kcpu); +static void m68k_op_addx_8_mm(m68000_base_device* mc68kcpu); +static void m68k_op_addx_16_mm(m68000_base_device* mc68kcpu); +static void m68k_op_addx_32_mm(m68000_base_device* mc68kcpu); +static void m68k_op_and_8_er_d(m68000_base_device* mc68kcpu); +static void m68k_op_and_8_er_ai(m68000_base_device* mc68kcpu); +static void m68k_op_and_8_er_pi(m68000_base_device* mc68kcpu); +static void m68k_op_and_8_er_pi7(m68000_base_device* mc68kcpu); +static void m68k_op_and_8_er_pd(m68000_base_device* mc68kcpu); +static void m68k_op_and_8_er_pd7(m68000_base_device* mc68kcpu); +static void m68k_op_and_8_er_di(m68000_base_device* mc68kcpu); +static void m68k_op_and_8_er_ix(m68000_base_device* mc68kcpu); +static void m68k_op_and_8_er_aw(m68000_base_device* mc68kcpu); +static void m68k_op_and_8_er_al(m68000_base_device* mc68kcpu); +static void m68k_op_and_8_er_pcdi(m68000_base_device* mc68kcpu); +static void m68k_op_and_8_er_pcix(m68000_base_device* mc68kcpu); +static void m68k_op_and_8_er_i(m68000_base_device* mc68kcpu); +static void m68k_op_and_16_er_d(m68000_base_device* mc68kcpu); +static void m68k_op_and_16_er_ai(m68000_base_device* mc68kcpu); +static void m68k_op_and_16_er_pi(m68000_base_device* mc68kcpu); +static void m68k_op_and_16_er_pd(m68000_base_device* mc68kcpu); +static void m68k_op_and_16_er_di(m68000_base_device* mc68kcpu); +static void m68k_op_and_16_er_ix(m68000_base_device* mc68kcpu); +static void m68k_op_and_16_er_aw(m68000_base_device* mc68kcpu); +static void m68k_op_and_16_er_al(m68000_base_device* mc68kcpu); +static void m68k_op_and_16_er_pcdi(m68000_base_device* mc68kcpu); +static void m68k_op_and_16_er_pcix(m68000_base_device* mc68kcpu); +static void m68k_op_and_16_er_i(m68000_base_device* mc68kcpu); +static void m68k_op_and_32_er_d(m68000_base_device* mc68kcpu); +static void m68k_op_and_32_er_ai(m68000_base_device* mc68kcpu); +static void m68k_op_and_32_er_pi(m68000_base_device* mc68kcpu); +static void m68k_op_and_32_er_pd(m68000_base_device* mc68kcpu); +static void m68k_op_and_32_er_di(m68000_base_device* mc68kcpu); +static void m68k_op_and_32_er_ix(m68000_base_device* mc68kcpu); +static void m68k_op_and_32_er_aw(m68000_base_device* mc68kcpu); +static void m68k_op_and_32_er_al(m68000_base_device* mc68kcpu); +static void m68k_op_and_32_er_pcdi(m68000_base_device* mc68kcpu); +static void m68k_op_and_32_er_pcix(m68000_base_device* mc68kcpu); +static void m68k_op_and_32_er_i(m68000_base_device* mc68kcpu); +static void m68k_op_and_8_re_ai(m68000_base_device* mc68kcpu); +static void m68k_op_and_8_re_pi(m68000_base_device* mc68kcpu); +static void m68k_op_and_8_re_pi7(m68000_base_device* mc68kcpu); +static void m68k_op_and_8_re_pd(m68000_base_device* mc68kcpu); +static void m68k_op_and_8_re_pd7(m68000_base_device* mc68kcpu); +static void m68k_op_and_8_re_di(m68000_base_device* mc68kcpu); +static void m68k_op_and_8_re_ix(m68000_base_device* mc68kcpu); +static void m68k_op_and_8_re_aw(m68000_base_device* mc68kcpu); +static void m68k_op_and_8_re_al(m68000_base_device* mc68kcpu); +static void m68k_op_and_16_re_ai(m68000_base_device* mc68kcpu); +static void m68k_op_and_16_re_pi(m68000_base_device* mc68kcpu); +static void m68k_op_and_16_re_pd(m68000_base_device* mc68kcpu); +static void m68k_op_and_16_re_di(m68000_base_device* mc68kcpu); +static void m68k_op_and_16_re_ix(m68000_base_device* mc68kcpu); +static void m68k_op_and_16_re_aw(m68000_base_device* mc68kcpu); +static void m68k_op_and_16_re_al(m68000_base_device* mc68kcpu); +static void m68k_op_and_32_re_ai(m68000_base_device* mc68kcpu); +static void m68k_op_and_32_re_pi(m68000_base_device* mc68kcpu); +static void m68k_op_and_32_re_pd(m68000_base_device* mc68kcpu); +static void m68k_op_and_32_re_di(m68000_base_device* mc68kcpu); +static void m68k_op_and_32_re_ix(m68000_base_device* mc68kcpu); +static void m68k_op_and_32_re_aw(m68000_base_device* mc68kcpu); +static void m68k_op_and_32_re_al(m68000_base_device* mc68kcpu); +static void m68k_op_andi_8_d(m68000_base_device* mc68kcpu); +static void m68k_op_andi_8_ai(m68000_base_device* mc68kcpu); +static void m68k_op_andi_8_pi(m68000_base_device* mc68kcpu); +static void m68k_op_andi_8_pi7(m68000_base_device* mc68kcpu); +static void m68k_op_andi_8_pd(m68000_base_device* mc68kcpu); +static void m68k_op_andi_8_pd7(m68000_base_device* mc68kcpu); +static void m68k_op_andi_8_di(m68000_base_device* mc68kcpu); +static void m68k_op_andi_8_ix(m68000_base_device* mc68kcpu); +static void m68k_op_andi_8_aw(m68000_base_device* mc68kcpu); +static void m68k_op_andi_8_al(m68000_base_device* mc68kcpu); +static void m68k_op_andi_16_d(m68000_base_device* mc68kcpu); +static void m68k_op_andi_16_ai(m68000_base_device* mc68kcpu); +static void m68k_op_andi_16_pi(m68000_base_device* mc68kcpu); +static void m68k_op_andi_16_pd(m68000_base_device* mc68kcpu); +static void m68k_op_andi_16_di(m68000_base_device* mc68kcpu); +static void m68k_op_andi_16_ix(m68000_base_device* mc68kcpu); +static void m68k_op_andi_16_aw(m68000_base_device* mc68kcpu); +static void m68k_op_andi_16_al(m68000_base_device* mc68kcpu); +static void m68k_op_andi_32_d(m68000_base_device* mc68kcpu); +static void m68k_op_andi_32_ai(m68000_base_device* mc68kcpu); +static void m68k_op_andi_32_pi(m68000_base_device* mc68kcpu); +static void m68k_op_andi_32_pd(m68000_base_device* mc68kcpu); +static void m68k_op_andi_32_di(m68000_base_device* mc68kcpu); +static void m68k_op_andi_32_ix(m68000_base_device* mc68kcpu); +static void m68k_op_andi_32_aw(m68000_base_device* mc68kcpu); +static void m68k_op_andi_32_al(m68000_base_device* mc68kcpu); +static void m68k_op_andi_16_toc(m68000_base_device* mc68kcpu); +static void m68k_op_andi_16_tos(m68000_base_device* mc68kcpu); +static void m68k_op_asr_8_s(m68000_base_device* mc68kcpu); +static void m68k_op_asr_16_s(m68000_base_device* mc68kcpu); +static void m68k_op_asr_32_s(m68000_base_device* mc68kcpu); +static void m68k_op_asr_8_r(m68000_base_device* mc68kcpu); +static void m68k_op_asr_16_r(m68000_base_device* mc68kcpu); +static void m68k_op_asr_32_r(m68000_base_device* mc68kcpu); +static void m68k_op_asr_16_ai(m68000_base_device* mc68kcpu); +static void m68k_op_asr_16_pi(m68000_base_device* mc68kcpu); +static void m68k_op_asr_16_pd(m68000_base_device* mc68kcpu); +static void m68k_op_asr_16_di(m68000_base_device* mc68kcpu); +static void m68k_op_asr_16_ix(m68000_base_device* mc68kcpu); +static void m68k_op_asr_16_aw(m68000_base_device* mc68kcpu); +static void m68k_op_asr_16_al(m68000_base_device* mc68kcpu); +static void m68k_op_asl_8_s(m68000_base_device* mc68kcpu); +static void m68k_op_asl_16_s(m68000_base_device* mc68kcpu); +static void m68k_op_asl_32_s(m68000_base_device* mc68kcpu); +static void m68k_op_asl_8_r(m68000_base_device* mc68kcpu); +static void m68k_op_asl_16_r(m68000_base_device* mc68kcpu); +static void m68k_op_asl_32_r(m68000_base_device* mc68kcpu); +static void m68k_op_asl_16_ai(m68000_base_device* mc68kcpu); +static void m68k_op_asl_16_pi(m68000_base_device* mc68kcpu); +static void m68k_op_asl_16_pd(m68000_base_device* mc68kcpu); +static void m68k_op_asl_16_di(m68000_base_device* mc68kcpu); +static void m68k_op_asl_16_ix(m68000_base_device* mc68kcpu); +static void m68k_op_asl_16_aw(m68000_base_device* mc68kcpu); +static void m68k_op_asl_16_al(m68000_base_device* mc68kcpu); +static void m68k_op_bhi_8(m68000_base_device* mc68kcpu); +static void m68k_op_bls_8(m68000_base_device* mc68kcpu); +static void m68k_op_bcc_8(m68000_base_device* mc68kcpu); +static void m68k_op_bcs_8(m68000_base_device* mc68kcpu); +static void m68k_op_bne_8(m68000_base_device* mc68kcpu); +static void m68k_op_beq_8(m68000_base_device* mc68kcpu); +static void m68k_op_bvc_8(m68000_base_device* mc68kcpu); +static void m68k_op_bvs_8(m68000_base_device* mc68kcpu); +static void m68k_op_bpl_8(m68000_base_device* mc68kcpu); +static void m68k_op_bmi_8(m68000_base_device* mc68kcpu); +static void m68k_op_bge_8(m68000_base_device* mc68kcpu); +static void m68k_op_blt_8(m68000_base_device* mc68kcpu); +static void m68k_op_bgt_8(m68000_base_device* mc68kcpu); +static void m68k_op_ble_8(m68000_base_device* mc68kcpu); +static void m68k_op_bhi_16(m68000_base_device* mc68kcpu); +static void m68k_op_bls_16(m68000_base_device* mc68kcpu); +static void m68k_op_bcc_16(m68000_base_device* mc68kcpu); +static void m68k_op_bcs_16(m68000_base_device* mc68kcpu); +static void m68k_op_bne_16(m68000_base_device* mc68kcpu); +static void m68k_op_beq_16(m68000_base_device* mc68kcpu); +static void m68k_op_bvc_16(m68000_base_device* mc68kcpu); +static void m68k_op_bvs_16(m68000_base_device* mc68kcpu); +static void m68k_op_bpl_16(m68000_base_device* mc68kcpu); +static void m68k_op_bmi_16(m68000_base_device* mc68kcpu); +static void m68k_op_bge_16(m68000_base_device* mc68kcpu); +static void m68k_op_blt_16(m68000_base_device* mc68kcpu); +static void m68k_op_bgt_16(m68000_base_device* mc68kcpu); +static void m68k_op_ble_16(m68000_base_device* mc68kcpu); +static void m68k_op_bhi_32(m68000_base_device* mc68kcpu); +static void m68k_op_bls_32(m68000_base_device* mc68kcpu); +static void m68k_op_bcc_32(m68000_base_device* mc68kcpu); +static void m68k_op_bcs_32(m68000_base_device* mc68kcpu); +static void m68k_op_bne_32(m68000_base_device* mc68kcpu); +static void m68k_op_beq_32(m68000_base_device* mc68kcpu); +static void m68k_op_bvc_32(m68000_base_device* mc68kcpu); +static void m68k_op_bvs_32(m68000_base_device* mc68kcpu); +static void m68k_op_bpl_32(m68000_base_device* mc68kcpu); +static void m68k_op_bmi_32(m68000_base_device* mc68kcpu); +static void m68k_op_bge_32(m68000_base_device* mc68kcpu); +static void m68k_op_blt_32(m68000_base_device* mc68kcpu); +static void m68k_op_bgt_32(m68000_base_device* mc68kcpu); +static void m68k_op_ble_32(m68000_base_device* mc68kcpu); +static void m68k_op_bchg_32_r_d(m68000_base_device* mc68kcpu); +static void m68k_op_bchg_8_r_ai(m68000_base_device* mc68kcpu); +static void m68k_op_bchg_8_r_pi(m68000_base_device* mc68kcpu); +static void m68k_op_bchg_8_r_pi7(m68000_base_device* mc68kcpu); +static void m68k_op_bchg_8_r_pd(m68000_base_device* mc68kcpu); +static void m68k_op_bchg_8_r_pd7(m68000_base_device* mc68kcpu); +static void m68k_op_bchg_8_r_di(m68000_base_device* mc68kcpu); +static void m68k_op_bchg_8_r_ix(m68000_base_device* mc68kcpu); +static void m68k_op_bchg_8_r_aw(m68000_base_device* mc68kcpu); +static void m68k_op_bchg_8_r_al(m68000_base_device* mc68kcpu); +static void m68k_op_bchg_32_s_d(m68000_base_device* mc68kcpu); +static void m68k_op_bchg_8_s_ai(m68000_base_device* mc68kcpu); +static void m68k_op_bchg_8_s_pi(m68000_base_device* mc68kcpu); +static void m68k_op_bchg_8_s_pi7(m68000_base_device* mc68kcpu); +static void m68k_op_bchg_8_s_pd(m68000_base_device* mc68kcpu); +static void m68k_op_bchg_8_s_pd7(m68000_base_device* mc68kcpu); +static void m68k_op_bchg_8_s_di(m68000_base_device* mc68kcpu); +static void m68k_op_bchg_8_s_ix(m68000_base_device* mc68kcpu); +static void m68k_op_bchg_8_s_aw(m68000_base_device* mc68kcpu); +static void m68k_op_bchg_8_s_al(m68000_base_device* mc68kcpu); +static void m68k_op_bclr_32_r_d(m68000_base_device* mc68kcpu); +static void m68k_op_bclr_8_r_ai(m68000_base_device* mc68kcpu); +static void m68k_op_bclr_8_r_pi(m68000_base_device* mc68kcpu); +static void m68k_op_bclr_8_r_pi7(m68000_base_device* mc68kcpu); +static void m68k_op_bclr_8_r_pd(m68000_base_device* mc68kcpu); +static void m68k_op_bclr_8_r_pd7(m68000_base_device* mc68kcpu); +static void m68k_op_bclr_8_r_di(m68000_base_device* mc68kcpu); +static void m68k_op_bclr_8_r_ix(m68000_base_device* mc68kcpu); +static void m68k_op_bclr_8_r_aw(m68000_base_device* mc68kcpu); +static void m68k_op_bclr_8_r_al(m68000_base_device* mc68kcpu); +static void m68k_op_bclr_32_s_d(m68000_base_device* mc68kcpu); +static void m68k_op_bclr_8_s_ai(m68000_base_device* mc68kcpu); +static void m68k_op_bclr_8_s_pi(m68000_base_device* mc68kcpu); +static void m68k_op_bclr_8_s_pi7(m68000_base_device* mc68kcpu); +static void m68k_op_bclr_8_s_pd(m68000_base_device* mc68kcpu); +static void m68k_op_bclr_8_s_pd7(m68000_base_device* mc68kcpu); +static void m68k_op_bclr_8_s_di(m68000_base_device* mc68kcpu); +static void m68k_op_bclr_8_s_ix(m68000_base_device* mc68kcpu); +static void m68k_op_bclr_8_s_aw(m68000_base_device* mc68kcpu); +static void m68k_op_bclr_8_s_al(m68000_base_device* mc68kcpu); +static void m68k_op_bfchg_32_d(m68000_base_device* mc68kcpu); +static void m68k_op_bfchg_32_ai(m68000_base_device* mc68kcpu); +static void m68k_op_bfchg_32_di(m68000_base_device* mc68kcpu); +static void m68k_op_bfchg_32_ix(m68000_base_device* mc68kcpu); +static void m68k_op_bfchg_32_aw(m68000_base_device* mc68kcpu); +static void m68k_op_bfchg_32_al(m68000_base_device* mc68kcpu); +static void m68k_op_bfclr_32_d(m68000_base_device* mc68kcpu); +static void m68k_op_bfclr_32_ai(m68000_base_device* mc68kcpu); +static void m68k_op_bfclr_32_di(m68000_base_device* mc68kcpu); +static void m68k_op_bfclr_32_ix(m68000_base_device* mc68kcpu); +static void m68k_op_bfclr_32_aw(m68000_base_device* mc68kcpu); +static void m68k_op_bfclr_32_al(m68000_base_device* mc68kcpu); +static void m68k_op_bfexts_32_d(m68000_base_device* mc68kcpu); +static void m68k_op_bfexts_32_ai(m68000_base_device* mc68kcpu); +static void m68k_op_bfexts_32_di(m68000_base_device* mc68kcpu); +static void m68k_op_bfexts_32_ix(m68000_base_device* mc68kcpu); +static void m68k_op_bfexts_32_aw(m68000_base_device* mc68kcpu); +static void m68k_op_bfexts_32_al(m68000_base_device* mc68kcpu); +static void m68k_op_bfexts_32_pcdi(m68000_base_device* mc68kcpu); +static void m68k_op_bfexts_32_pcix(m68000_base_device* mc68kcpu); +static void m68k_op_bfextu_32_d(m68000_base_device* mc68kcpu); +static void m68k_op_bfextu_32_ai(m68000_base_device* mc68kcpu); +static void m68k_op_bfextu_32_di(m68000_base_device* mc68kcpu); +static void m68k_op_bfextu_32_ix(m68000_base_device* mc68kcpu); +static void m68k_op_bfextu_32_aw(m68000_base_device* mc68kcpu); +static void m68k_op_bfextu_32_al(m68000_base_device* mc68kcpu); +static void m68k_op_bfextu_32_pcdi(m68000_base_device* mc68kcpu); +static void m68k_op_bfextu_32_pcix(m68000_base_device* mc68kcpu); +static void m68k_op_bfffo_32_d(m68000_base_device* mc68kcpu); +static void m68k_op_bfffo_32_ai(m68000_base_device* mc68kcpu); +static void m68k_op_bfffo_32_di(m68000_base_device* mc68kcpu); +static void m68k_op_bfffo_32_ix(m68000_base_device* mc68kcpu); +static void m68k_op_bfffo_32_aw(m68000_base_device* mc68kcpu); +static void m68k_op_bfffo_32_al(m68000_base_device* mc68kcpu); +static void m68k_op_bfffo_32_pcdi(m68000_base_device* mc68kcpu); +static void m68k_op_bfffo_32_pcix(m68000_base_device* mc68kcpu); +static void m68k_op_bfins_32_d(m68000_base_device* mc68kcpu); +static void m68k_op_bfins_32_ai(m68000_base_device* mc68kcpu); +static void m68k_op_bfins_32_di(m68000_base_device* mc68kcpu); +static void m68k_op_bfins_32_ix(m68000_base_device* mc68kcpu); +static void m68k_op_bfins_32_aw(m68000_base_device* mc68kcpu); +static void m68k_op_bfins_32_al(m68000_base_device* mc68kcpu); +static void m68k_op_bfset_32_d(m68000_base_device* mc68kcpu); +static void m68k_op_bfset_32_ai(m68000_base_device* mc68kcpu); +static void m68k_op_bfset_32_di(m68000_base_device* mc68kcpu); +static void m68k_op_bfset_32_ix(m68000_base_device* mc68kcpu); +static void m68k_op_bfset_32_aw(m68000_base_device* mc68kcpu); +static void m68k_op_bfset_32_al(m68000_base_device* mc68kcpu); +static void m68k_op_bftst_32_d(m68000_base_device* mc68kcpu); +static void m68k_op_bftst_32_ai(m68000_base_device* mc68kcpu); +static void m68k_op_bftst_32_di(m68000_base_device* mc68kcpu); +static void m68k_op_bftst_32_ix(m68000_base_device* mc68kcpu); +static void m68k_op_bftst_32_aw(m68000_base_device* mc68kcpu); +static void m68k_op_bftst_32_al(m68000_base_device* mc68kcpu); +static void m68k_op_bftst_32_pcdi(m68000_base_device* mc68kcpu); +static void m68k_op_bftst_32_pcix(m68000_base_device* mc68kcpu); +static void m68k_op_bkpt(m68000_base_device* mc68kcpu); +static void m68k_op_bra_8(m68000_base_device* mc68kcpu); +static void m68k_op_bra_16(m68000_base_device* mc68kcpu); +static void m68k_op_bra_32(m68000_base_device* mc68kcpu); +static void m68k_op_bset_32_r_d(m68000_base_device* mc68kcpu); +static void m68k_op_bset_8_r_ai(m68000_base_device* mc68kcpu); +static void m68k_op_bset_8_r_pi(m68000_base_device* mc68kcpu); +static void m68k_op_bset_8_r_pi7(m68000_base_device* mc68kcpu); +static void m68k_op_bset_8_r_pd(m68000_base_device* mc68kcpu); +static void m68k_op_bset_8_r_pd7(m68000_base_device* mc68kcpu); +static void m68k_op_bset_8_r_di(m68000_base_device* mc68kcpu); +static void m68k_op_bset_8_r_ix(m68000_base_device* mc68kcpu); +static void m68k_op_bset_8_r_aw(m68000_base_device* mc68kcpu); +static void m68k_op_bset_8_r_al(m68000_base_device* mc68kcpu); +static void m68k_op_bset_32_s_d(m68000_base_device* mc68kcpu); +static void m68k_op_bset_8_s_ai(m68000_base_device* mc68kcpu); +static void m68k_op_bset_8_s_pi(m68000_base_device* mc68kcpu); +static void m68k_op_bset_8_s_pi7(m68000_base_device* mc68kcpu); +static void m68k_op_bset_8_s_pd(m68000_base_device* mc68kcpu); +static void m68k_op_bset_8_s_pd7(m68000_base_device* mc68kcpu); +static void m68k_op_bset_8_s_di(m68000_base_device* mc68kcpu); +static void m68k_op_bset_8_s_ix(m68000_base_device* mc68kcpu); +static void m68k_op_bset_8_s_aw(m68000_base_device* mc68kcpu); +static void m68k_op_bset_8_s_al(m68000_base_device* mc68kcpu); +static void m68k_op_bsr_8(m68000_base_device* mc68kcpu); +static void m68k_op_bsr_16(m68000_base_device* mc68kcpu); +static void m68k_op_bsr_32(m68000_base_device* mc68kcpu); +static void m68k_op_btst_32_r_d(m68000_base_device* mc68kcpu); +static void m68k_op_btst_8_r_ai(m68000_base_device* mc68kcpu); +static void m68k_op_btst_8_r_pi(m68000_base_device* mc68kcpu); +static void m68k_op_btst_8_r_pi7(m68000_base_device* mc68kcpu); +static void m68k_op_btst_8_r_pd(m68000_base_device* mc68kcpu); +static void m68k_op_btst_8_r_pd7(m68000_base_device* mc68kcpu); +static void m68k_op_btst_8_r_di(m68000_base_device* mc68kcpu); +static void m68k_op_btst_8_r_ix(m68000_base_device* mc68kcpu); +static void m68k_op_btst_8_r_aw(m68000_base_device* mc68kcpu); +static void m68k_op_btst_8_r_al(m68000_base_device* mc68kcpu); +static void m68k_op_btst_8_r_pcdi(m68000_base_device* mc68kcpu); +static void m68k_op_btst_8_r_pcix(m68000_base_device* mc68kcpu); +static void m68k_op_btst_8_r_i(m68000_base_device* mc68kcpu); +static void m68k_op_btst_32_s_d(m68000_base_device* mc68kcpu); +static void m68k_op_btst_8_s_ai(m68000_base_device* mc68kcpu); +static void m68k_op_btst_8_s_pi(m68000_base_device* mc68kcpu); +static void m68k_op_btst_8_s_pi7(m68000_base_device* mc68kcpu); +static void m68k_op_btst_8_s_pd(m68000_base_device* mc68kcpu); +static void m68k_op_btst_8_s_pd7(m68000_base_device* mc68kcpu); +static void m68k_op_btst_8_s_di(m68000_base_device* mc68kcpu); +static void m68k_op_btst_8_s_ix(m68000_base_device* mc68kcpu); +static void m68k_op_btst_8_s_aw(m68000_base_device* mc68kcpu); +static void m68k_op_btst_8_s_al(m68000_base_device* mc68kcpu); +static void m68k_op_btst_8_s_pcdi(m68000_base_device* mc68kcpu); +static void m68k_op_btst_8_s_pcix(m68000_base_device* mc68kcpu); +static void m68k_op_callm_32_ai(m68000_base_device* mc68kcpu); +static void m68k_op_callm_32_di(m68000_base_device* mc68kcpu); +static void m68k_op_callm_32_ix(m68000_base_device* mc68kcpu); +static void m68k_op_callm_32_aw(m68000_base_device* mc68kcpu); +static void m68k_op_callm_32_al(m68000_base_device* mc68kcpu); +static void m68k_op_callm_32_pcdi(m68000_base_device* mc68kcpu); +static void m68k_op_callm_32_pcix(m68000_base_device* mc68kcpu); +static void m68k_op_cas_8_ai(m68000_base_device* mc68kcpu); +static void m68k_op_cas_8_pi(m68000_base_device* mc68kcpu); +static void m68k_op_cas_8_pi7(m68000_base_device* mc68kcpu); +static void m68k_op_cas_8_pd(m68000_base_device* mc68kcpu); +static void m68k_op_cas_8_pd7(m68000_base_device* mc68kcpu); +static void m68k_op_cas_8_di(m68000_base_device* mc68kcpu); +static void m68k_op_cas_8_ix(m68000_base_device* mc68kcpu); +static void m68k_op_cas_8_aw(m68000_base_device* mc68kcpu); +static void m68k_op_cas_8_al(m68000_base_device* mc68kcpu); +static void m68k_op_cas_16_ai(m68000_base_device* mc68kcpu); +static void m68k_op_cas_16_pi(m68000_base_device* mc68kcpu); +static void m68k_op_cas_16_pd(m68000_base_device* mc68kcpu); +static void m68k_op_cas_16_di(m68000_base_device* mc68kcpu); +static void m68k_op_cas_16_ix(m68000_base_device* mc68kcpu); +static void m68k_op_cas_16_aw(m68000_base_device* mc68kcpu); +static void m68k_op_cas_16_al(m68000_base_device* mc68kcpu); +static void m68k_op_cas_32_ai(m68000_base_device* mc68kcpu); +static void m68k_op_cas_32_pi(m68000_base_device* mc68kcpu); +static void m68k_op_cas_32_pd(m68000_base_device* mc68kcpu); +static void m68k_op_cas_32_di(m68000_base_device* mc68kcpu); +static void m68k_op_cas_32_ix(m68000_base_device* mc68kcpu); +static void m68k_op_cas_32_aw(m68000_base_device* mc68kcpu); +static void m68k_op_cas_32_al(m68000_base_device* mc68kcpu); +static void m68k_op_cas2_16(m68000_base_device* mc68kcpu); +static void m68k_op_cas2_32(m68000_base_device* mc68kcpu); +static void m68k_op_chk_16_d(m68000_base_device* mc68kcpu); +static void m68k_op_chk_16_ai(m68000_base_device* mc68kcpu); +static void m68k_op_chk_16_pi(m68000_base_device* mc68kcpu); +static void m68k_op_chk_16_pd(m68000_base_device* mc68kcpu); +static void m68k_op_chk_16_di(m68000_base_device* mc68kcpu); +static void m68k_op_chk_16_ix(m68000_base_device* mc68kcpu); +static void m68k_op_chk_16_aw(m68000_base_device* mc68kcpu); +static void m68k_op_chk_16_al(m68000_base_device* mc68kcpu); +static void m68k_op_chk_16_pcdi(m68000_base_device* mc68kcpu); +static void m68k_op_chk_16_pcix(m68000_base_device* mc68kcpu); +static void m68k_op_chk_16_i(m68000_base_device* mc68kcpu); +static void m68k_op_chk_32_d(m68000_base_device* mc68kcpu); +static void m68k_op_chk_32_ai(m68000_base_device* mc68kcpu); +static void m68k_op_chk_32_pi(m68000_base_device* mc68kcpu); +static void m68k_op_chk_32_pd(m68000_base_device* mc68kcpu); +static void m68k_op_chk_32_di(m68000_base_device* mc68kcpu); +static void m68k_op_chk_32_ix(m68000_base_device* mc68kcpu); +static void m68k_op_chk_32_aw(m68000_base_device* mc68kcpu); +static void m68k_op_chk_32_al(m68000_base_device* mc68kcpu); +static void m68k_op_chk_32_pcdi(m68000_base_device* mc68kcpu); +static void m68k_op_chk_32_pcix(m68000_base_device* mc68kcpu); +static void m68k_op_chk_32_i(m68000_base_device* mc68kcpu); +static void m68k_op_chk2cmp2_8_pcdi(m68000_base_device* mc68kcpu); +static void m68k_op_chk2cmp2_8_pcix(m68000_base_device* mc68kcpu); +static void m68k_op_chk2cmp2_8_ai(m68000_base_device* mc68kcpu); +static void m68k_op_chk2cmp2_8_di(m68000_base_device* mc68kcpu); +static void m68k_op_chk2cmp2_8_ix(m68000_base_device* mc68kcpu); +static void m68k_op_chk2cmp2_8_aw(m68000_base_device* mc68kcpu); +static void m68k_op_chk2cmp2_8_al(m68000_base_device* mc68kcpu); +static void m68k_op_chk2cmp2_16_pcdi(m68000_base_device* mc68kcpu); +static void m68k_op_chk2cmp2_16_pcix(m68000_base_device* mc68kcpu); +static void m68k_op_chk2cmp2_16_ai(m68000_base_device* mc68kcpu); +static void m68k_op_chk2cmp2_16_di(m68000_base_device* mc68kcpu); +static void m68k_op_chk2cmp2_16_ix(m68000_base_device* mc68kcpu); +static void m68k_op_chk2cmp2_16_aw(m68000_base_device* mc68kcpu); +static void m68k_op_chk2cmp2_16_al(m68000_base_device* mc68kcpu); +static void m68k_op_chk2cmp2_32_pcdi(m68000_base_device* mc68kcpu); +static void m68k_op_chk2cmp2_32_pcix(m68000_base_device* mc68kcpu); +static void m68k_op_chk2cmp2_32_ai(m68000_base_device* mc68kcpu); +static void m68k_op_chk2cmp2_32_di(m68000_base_device* mc68kcpu); +static void m68k_op_chk2cmp2_32_ix(m68000_base_device* mc68kcpu); +static void m68k_op_chk2cmp2_32_aw(m68000_base_device* mc68kcpu); +static void m68k_op_chk2cmp2_32_al(m68000_base_device* mc68kcpu); +static void m68k_op_clr_8_d(m68000_base_device* mc68kcpu); +static void m68k_op_clr_8_ai(m68000_base_device* mc68kcpu); +static void m68k_op_clr_8_pi(m68000_base_device* mc68kcpu); +static void m68k_op_clr_8_pi7(m68000_base_device* mc68kcpu); +static void m68k_op_clr_8_pd(m68000_base_device* mc68kcpu); +static void m68k_op_clr_8_pd7(m68000_base_device* mc68kcpu); +static void m68k_op_clr_8_di(m68000_base_device* mc68kcpu); +static void m68k_op_clr_8_ix(m68000_base_device* mc68kcpu); +static void m68k_op_clr_8_aw(m68000_base_device* mc68kcpu); +static void m68k_op_clr_8_al(m68000_base_device* mc68kcpu); +static void m68k_op_clr_16_d(m68000_base_device* mc68kcpu); +static void m68k_op_clr_16_ai(m68000_base_device* mc68kcpu); +static void m68k_op_clr_16_pi(m68000_base_device* mc68kcpu); +static void m68k_op_clr_16_pd(m68000_base_device* mc68kcpu); +static void m68k_op_clr_16_di(m68000_base_device* mc68kcpu); +static void m68k_op_clr_16_ix(m68000_base_device* mc68kcpu); +static void m68k_op_clr_16_aw(m68000_base_device* mc68kcpu); +static void m68k_op_clr_16_al(m68000_base_device* mc68kcpu); +static void m68k_op_clr_32_d(m68000_base_device* mc68kcpu); +static void m68k_op_clr_32_ai(m68000_base_device* mc68kcpu); +static void m68k_op_clr_32_pi(m68000_base_device* mc68kcpu); +static void m68k_op_clr_32_pd(m68000_base_device* mc68kcpu); +static void m68k_op_clr_32_di(m68000_base_device* mc68kcpu); +static void m68k_op_clr_32_ix(m68000_base_device* mc68kcpu); +static void m68k_op_clr_32_aw(m68000_base_device* mc68kcpu); +static void m68k_op_clr_32_al(m68000_base_device* mc68kcpu); +static void m68k_op_cmp_8_d(m68000_base_device* mc68kcpu); +static void m68k_op_cmp_8_ai(m68000_base_device* mc68kcpu); +static void m68k_op_cmp_8_pi(m68000_base_device* mc68kcpu); +static void m68k_op_cmp_8_pi7(m68000_base_device* mc68kcpu); +static void m68k_op_cmp_8_pd(m68000_base_device* mc68kcpu); +static void m68k_op_cmp_8_pd7(m68000_base_device* mc68kcpu); +static void m68k_op_cmp_8_di(m68000_base_device* mc68kcpu); +static void m68k_op_cmp_8_ix(m68000_base_device* mc68kcpu); +static void m68k_op_cmp_8_aw(m68000_base_device* mc68kcpu); +static void m68k_op_cmp_8_al(m68000_base_device* mc68kcpu); +static void m68k_op_cmp_8_pcdi(m68000_base_device* mc68kcpu); +static void m68k_op_cmp_8_pcix(m68000_base_device* mc68kcpu); +static void m68k_op_cmp_8_i(m68000_base_device* mc68kcpu); +static void m68k_op_cmp_16_d(m68000_base_device* mc68kcpu); +static void m68k_op_cmp_16_a(m68000_base_device* mc68kcpu); +static void m68k_op_cmp_16_ai(m68000_base_device* mc68kcpu); +static void m68k_op_cmp_16_pi(m68000_base_device* mc68kcpu); +static void m68k_op_cmp_16_pd(m68000_base_device* mc68kcpu); +static void m68k_op_cmp_16_di(m68000_base_device* mc68kcpu); +static void m68k_op_cmp_16_ix(m68000_base_device* mc68kcpu); +static void m68k_op_cmp_16_aw(m68000_base_device* mc68kcpu); +static void m68k_op_cmp_16_al(m68000_base_device* mc68kcpu); +static void m68k_op_cmp_16_pcdi(m68000_base_device* mc68kcpu); +static void m68k_op_cmp_16_pcix(m68000_base_device* mc68kcpu); +static void m68k_op_cmp_16_i(m68000_base_device* mc68kcpu); +static void m68k_op_cmp_32_d(m68000_base_device* mc68kcpu); +static void m68k_op_cmp_32_a(m68000_base_device* mc68kcpu); +static void m68k_op_cmp_32_ai(m68000_base_device* mc68kcpu); +static void m68k_op_cmp_32_pi(m68000_base_device* mc68kcpu); +static void m68k_op_cmp_32_pd(m68000_base_device* mc68kcpu); +static void m68k_op_cmp_32_di(m68000_base_device* mc68kcpu); +static void m68k_op_cmp_32_ix(m68000_base_device* mc68kcpu); +static void m68k_op_cmp_32_aw(m68000_base_device* mc68kcpu); +static void m68k_op_cmp_32_al(m68000_base_device* mc68kcpu); +static void m68k_op_cmp_32_pcdi(m68000_base_device* mc68kcpu); +static void m68k_op_cmp_32_pcix(m68000_base_device* mc68kcpu); +static void m68k_op_cmp_32_i(m68000_base_device* mc68kcpu); +static void m68k_op_cmpa_16_d(m68000_base_device* mc68kcpu); +static void m68k_op_cmpa_16_a(m68000_base_device* mc68kcpu); +static void m68k_op_cmpa_16_ai(m68000_base_device* mc68kcpu); +static void m68k_op_cmpa_16_pi(m68000_base_device* mc68kcpu); +static void m68k_op_cmpa_16_pd(m68000_base_device* mc68kcpu); +static void m68k_op_cmpa_16_di(m68000_base_device* mc68kcpu); +static void m68k_op_cmpa_16_ix(m68000_base_device* mc68kcpu); +static void m68k_op_cmpa_16_aw(m68000_base_device* mc68kcpu); +static void m68k_op_cmpa_16_al(m68000_base_device* mc68kcpu); +static void m68k_op_cmpa_16_pcdi(m68000_base_device* mc68kcpu); +static void m68k_op_cmpa_16_pcix(m68000_base_device* mc68kcpu); +static void m68k_op_cmpa_16_i(m68000_base_device* mc68kcpu); +static void m68k_op_cmpa_32_d(m68000_base_device* mc68kcpu); +static void m68k_op_cmpa_32_a(m68000_base_device* mc68kcpu); +static void m68k_op_cmpa_32_ai(m68000_base_device* mc68kcpu); +static void m68k_op_cmpa_32_pi(m68000_base_device* mc68kcpu); +static void m68k_op_cmpa_32_pd(m68000_base_device* mc68kcpu); +static void m68k_op_cmpa_32_di(m68000_base_device* mc68kcpu); +static void m68k_op_cmpa_32_ix(m68000_base_device* mc68kcpu); +static void m68k_op_cmpa_32_aw(m68000_base_device* mc68kcpu); +static void m68k_op_cmpa_32_al(m68000_base_device* mc68kcpu); +static void m68k_op_cmpa_32_pcdi(m68000_base_device* mc68kcpu); +static void m68k_op_cmpa_32_pcix(m68000_base_device* mc68kcpu); +static void m68k_op_cmpa_32_i(m68000_base_device* mc68kcpu); +static void m68k_op_cmpi_8_d(m68000_base_device* mc68kcpu); +static void m68k_op_cmpi_8_ai(m68000_base_device* mc68kcpu); +static void m68k_op_cmpi_8_pi(m68000_base_device* mc68kcpu); +static void m68k_op_cmpi_8_pi7(m68000_base_device* mc68kcpu); +static void m68k_op_cmpi_8_pd(m68000_base_device* mc68kcpu); +static void m68k_op_cmpi_8_pd7(m68000_base_device* mc68kcpu); +static void m68k_op_cmpi_8_di(m68000_base_device* mc68kcpu); +static void m68k_op_cmpi_8_ix(m68000_base_device* mc68kcpu); +static void m68k_op_cmpi_8_aw(m68000_base_device* mc68kcpu); +static void m68k_op_cmpi_8_al(m68000_base_device* mc68kcpu); +static void m68k_op_cmpi_8_pcdi(m68000_base_device* mc68kcpu); +static void m68k_op_cmpi_8_pcix(m68000_base_device* mc68kcpu); +static void m68k_op_cmpi_16_d(m68000_base_device* mc68kcpu); +static void m68k_op_cmpi_16_ai(m68000_base_device* mc68kcpu); +static void m68k_op_cmpi_16_pi(m68000_base_device* mc68kcpu); +static void m68k_op_cmpi_16_pd(m68000_base_device* mc68kcpu); +static void m68k_op_cmpi_16_di(m68000_base_device* mc68kcpu); +static void m68k_op_cmpi_16_ix(m68000_base_device* mc68kcpu); +static void m68k_op_cmpi_16_aw(m68000_base_device* mc68kcpu); +static void m68k_op_cmpi_16_al(m68000_base_device* mc68kcpu); +static void m68k_op_cmpi_16_pcdi(m68000_base_device* mc68kcpu); +static void m68k_op_cmpi_16_pcix(m68000_base_device* mc68kcpu); +static void m68k_op_cmpi_32_d(m68000_base_device* mc68kcpu); +static void m68k_op_cmpi_32_ai(m68000_base_device* mc68kcpu); +static void m68k_op_cmpi_32_pi(m68000_base_device* mc68kcpu); +static void m68k_op_cmpi_32_pd(m68000_base_device* mc68kcpu); +static void m68k_op_cmpi_32_di(m68000_base_device* mc68kcpu); +static void m68k_op_cmpi_32_ix(m68000_base_device* mc68kcpu); +static void m68k_op_cmpi_32_aw(m68000_base_device* mc68kcpu); +static void m68k_op_cmpi_32_al(m68000_base_device* mc68kcpu); +static void m68k_op_cmpi_32_pcdi(m68000_base_device* mc68kcpu); +static void m68k_op_cmpi_32_pcix(m68000_base_device* mc68kcpu); +static void m68k_op_cmpm_8_ax7(m68000_base_device* mc68kcpu); +static void m68k_op_cmpm_8_ay7(m68000_base_device* mc68kcpu); +static void m68k_op_cmpm_8_axy7(m68000_base_device* mc68kcpu); +static void m68k_op_cmpm_8(m68000_base_device* mc68kcpu); +static void m68k_op_cmpm_16(m68000_base_device* mc68kcpu); +static void m68k_op_cmpm_32(m68000_base_device* mc68kcpu); +static void m68k_op_cpbcc_32(m68000_base_device* mc68kcpu); +static void m68k_op_cpdbcc_32(m68000_base_device* mc68kcpu); +static void m68k_op_cpgen_32(m68000_base_device* mc68kcpu); +static void m68k_op_cpscc_32(m68000_base_device* mc68kcpu); +static void m68k_op_cptrapcc_32(m68000_base_device* mc68kcpu); +static void m68k_op_ftrapcc_32(m68000_base_device* mc68kcpu); +static void m68k_op_dbt_16(m68000_base_device* mc68kcpu); +static void m68k_op_dbf_16(m68000_base_device* mc68kcpu); +static void m68k_op_dbhi_16(m68000_base_device* mc68kcpu); +static void m68k_op_dbls_16(m68000_base_device* mc68kcpu); +static void m68k_op_dbcc_16(m68000_base_device* mc68kcpu); +static void m68k_op_dbcs_16(m68000_base_device* mc68kcpu); +static void m68k_op_dbne_16(m68000_base_device* mc68kcpu); +static void m68k_op_dbeq_16(m68000_base_device* mc68kcpu); +static void m68k_op_dbvc_16(m68000_base_device* mc68kcpu); +static void m68k_op_dbvs_16(m68000_base_device* mc68kcpu); +static void m68k_op_dbpl_16(m68000_base_device* mc68kcpu); +static void m68k_op_dbmi_16(m68000_base_device* mc68kcpu); +static void m68k_op_dbge_16(m68000_base_device* mc68kcpu); +static void m68k_op_dblt_16(m68000_base_device* mc68kcpu); +static void m68k_op_dbgt_16(m68000_base_device* mc68kcpu); +static void m68k_op_dble_16(m68000_base_device* mc68kcpu); +static void m68k_op_divs_16_d(m68000_base_device* mc68kcpu); +static void m68k_op_divs_16_ai(m68000_base_device* mc68kcpu); +static void m68k_op_divs_16_pi(m68000_base_device* mc68kcpu); +static void m68k_op_divs_16_pd(m68000_base_device* mc68kcpu); +static void m68k_op_divs_16_di(m68000_base_device* mc68kcpu); +static void m68k_op_divs_16_ix(m68000_base_device* mc68kcpu); +static void m68k_op_divs_16_aw(m68000_base_device* mc68kcpu); +static void m68k_op_divs_16_al(m68000_base_device* mc68kcpu); +static void m68k_op_divs_16_pcdi(m68000_base_device* mc68kcpu); +static void m68k_op_divs_16_pcix(m68000_base_device* mc68kcpu); +static void m68k_op_divs_16_i(m68000_base_device* mc68kcpu); +static void m68k_op_divu_16_d(m68000_base_device* mc68kcpu); +static void m68k_op_divu_16_ai(m68000_base_device* mc68kcpu); +static void m68k_op_divu_16_pi(m68000_base_device* mc68kcpu); +static void m68k_op_divu_16_pd(m68000_base_device* mc68kcpu); +static void m68k_op_divu_16_di(m68000_base_device* mc68kcpu); +static void m68k_op_divu_16_ix(m68000_base_device* mc68kcpu); +static void m68k_op_divu_16_aw(m68000_base_device* mc68kcpu); +static void m68k_op_divu_16_al(m68000_base_device* mc68kcpu); +static void m68k_op_divu_16_pcdi(m68000_base_device* mc68kcpu); +static void m68k_op_divu_16_pcix(m68000_base_device* mc68kcpu); +static void m68k_op_divu_16_i(m68000_base_device* mc68kcpu); +static void m68k_op_divl_32_d(m68000_base_device* mc68kcpu); +static void m68k_op_divl_32_ai(m68000_base_device* mc68kcpu); +static void m68k_op_divl_32_pi(m68000_base_device* mc68kcpu); +static void m68k_op_divl_32_pd(m68000_base_device* mc68kcpu); +static void m68k_op_divl_32_di(m68000_base_device* mc68kcpu); +static void m68k_op_divl_32_ix(m68000_base_device* mc68kcpu); +static void m68k_op_divl_32_aw(m68000_base_device* mc68kcpu); +static void m68k_op_divl_32_al(m68000_base_device* mc68kcpu); +static void m68k_op_divl_32_pcdi(m68000_base_device* mc68kcpu); +static void m68k_op_divl_32_pcix(m68000_base_device* mc68kcpu); +static void m68k_op_divl_32_i(m68000_base_device* mc68kcpu); +static void m68k_op_eor_8_d(m68000_base_device* mc68kcpu); +static void m68k_op_eor_8_ai(m68000_base_device* mc68kcpu); +static void m68k_op_eor_8_pi(m68000_base_device* mc68kcpu); +static void m68k_op_eor_8_pi7(m68000_base_device* mc68kcpu); +static void m68k_op_eor_8_pd(m68000_base_device* mc68kcpu); +static void m68k_op_eor_8_pd7(m68000_base_device* mc68kcpu); +static void m68k_op_eor_8_di(m68000_base_device* mc68kcpu); +static void m68k_op_eor_8_ix(m68000_base_device* mc68kcpu); +static void m68k_op_eor_8_aw(m68000_base_device* mc68kcpu); +static void m68k_op_eor_8_al(m68000_base_device* mc68kcpu); +static void m68k_op_eor_16_d(m68000_base_device* mc68kcpu); +static void m68k_op_eor_16_ai(m68000_base_device* mc68kcpu); +static void m68k_op_eor_16_pi(m68000_base_device* mc68kcpu); +static void m68k_op_eor_16_pd(m68000_base_device* mc68kcpu); +static void m68k_op_eor_16_di(m68000_base_device* mc68kcpu); +static void m68k_op_eor_16_ix(m68000_base_device* mc68kcpu); +static void m68k_op_eor_16_aw(m68000_base_device* mc68kcpu); +static void m68k_op_eor_16_al(m68000_base_device* mc68kcpu); +static void m68k_op_eor_32_d(m68000_base_device* mc68kcpu); +static void m68k_op_eor_32_ai(m68000_base_device* mc68kcpu); +static void m68k_op_eor_32_pi(m68000_base_device* mc68kcpu); +static void m68k_op_eor_32_pd(m68000_base_device* mc68kcpu); +static void m68k_op_eor_32_di(m68000_base_device* mc68kcpu); +static void m68k_op_eor_32_ix(m68000_base_device* mc68kcpu); +static void m68k_op_eor_32_aw(m68000_base_device* mc68kcpu); +static void m68k_op_eor_32_al(m68000_base_device* mc68kcpu); +static void m68k_op_eori_8_d(m68000_base_device* mc68kcpu); +static void m68k_op_eori_8_ai(m68000_base_device* mc68kcpu); +static void m68k_op_eori_8_pi(m68000_base_device* mc68kcpu); +static void m68k_op_eori_8_pi7(m68000_base_device* mc68kcpu); +static void m68k_op_eori_8_pd(m68000_base_device* mc68kcpu); +static void m68k_op_eori_8_pd7(m68000_base_device* mc68kcpu); +static void m68k_op_eori_8_di(m68000_base_device* mc68kcpu); +static void m68k_op_eori_8_ix(m68000_base_device* mc68kcpu); +static void m68k_op_eori_8_aw(m68000_base_device* mc68kcpu); +static void m68k_op_eori_8_al(m68000_base_device* mc68kcpu); +static void m68k_op_eori_16_d(m68000_base_device* mc68kcpu); +static void m68k_op_eori_16_ai(m68000_base_device* mc68kcpu); +static void m68k_op_eori_16_pi(m68000_base_device* mc68kcpu); +static void m68k_op_eori_16_pd(m68000_base_device* mc68kcpu); +static void m68k_op_eori_16_di(m68000_base_device* mc68kcpu); +static void m68k_op_eori_16_ix(m68000_base_device* mc68kcpu); +static void m68k_op_eori_16_aw(m68000_base_device* mc68kcpu); +static void m68k_op_eori_16_al(m68000_base_device* mc68kcpu); +static void m68k_op_eori_32_d(m68000_base_device* mc68kcpu); +static void m68k_op_eori_32_ai(m68000_base_device* mc68kcpu); +static void m68k_op_eori_32_pi(m68000_base_device* mc68kcpu); +static void m68k_op_eori_32_pd(m68000_base_device* mc68kcpu); +static void m68k_op_eori_32_di(m68000_base_device* mc68kcpu); +static void m68k_op_eori_32_ix(m68000_base_device* mc68kcpu); +static void m68k_op_eori_32_aw(m68000_base_device* mc68kcpu); +static void m68k_op_eori_32_al(m68000_base_device* mc68kcpu); +static void m68k_op_eori_16_toc(m68000_base_device* mc68kcpu); +static void m68k_op_eori_16_tos(m68000_base_device* mc68kcpu); +static void m68k_op_exg_32_dd(m68000_base_device* mc68kcpu); +static void m68k_op_exg_32_aa(m68000_base_device* mc68kcpu); +static void m68k_op_exg_32_da(m68000_base_device* mc68kcpu); +static void m68k_op_ext_16(m68000_base_device* mc68kcpu); +static void m68k_op_ext_32(m68000_base_device* mc68kcpu); +static void m68k_op_extb_32(m68000_base_device* mc68kcpu); +static void m68k_op_illegal(m68000_base_device* mc68kcpu); +static void m68k_op_jmp_32_ai(m68000_base_device* mc68kcpu); +static void m68k_op_jmp_32_di(m68000_base_device* mc68kcpu); +static void m68k_op_jmp_32_ix(m68000_base_device* mc68kcpu); +static void m68k_op_jmp_32_aw(m68000_base_device* mc68kcpu); +static void m68k_op_jmp_32_al(m68000_base_device* mc68kcpu); +static void m68k_op_jmp_32_pcdi(m68000_base_device* mc68kcpu); +static void m68k_op_jmp_32_pcix(m68000_base_device* mc68kcpu); +static void m68k_op_jsr_32_ai(m68000_base_device* mc68kcpu); +static void m68k_op_jsr_32_di(m68000_base_device* mc68kcpu); +static void m68k_op_jsr_32_ix(m68000_base_device* mc68kcpu); +static void m68k_op_jsr_32_aw(m68000_base_device* mc68kcpu); +static void m68k_op_jsr_32_al(m68000_base_device* mc68kcpu); +static void m68k_op_jsr_32_pcdi(m68000_base_device* mc68kcpu); +static void m68k_op_jsr_32_pcix(m68000_base_device* mc68kcpu); +static void m68k_op_lea_32_ai(m68000_base_device* mc68kcpu); +static void m68k_op_lea_32_di(m68000_base_device* mc68kcpu); +static void m68k_op_lea_32_ix(m68000_base_device* mc68kcpu); +static void m68k_op_lea_32_aw(m68000_base_device* mc68kcpu); +static void m68k_op_lea_32_al(m68000_base_device* mc68kcpu); +static void m68k_op_lea_32_pcdi(m68000_base_device* mc68kcpu); +static void m68k_op_lea_32_pcix(m68000_base_device* mc68kcpu); +static void m68k_op_link_16_a7(m68000_base_device* mc68kcpu); +static void m68k_op_link_16(m68000_base_device* mc68kcpu); +static void m68k_op_link_32_a7(m68000_base_device* mc68kcpu); +static void m68k_op_link_32(m68000_base_device* mc68kcpu); +static void m68k_op_lsr_8_s(m68000_base_device* mc68kcpu); +static void m68k_op_lsr_16_s(m68000_base_device* mc68kcpu); +static void m68k_op_lsr_32_s(m68000_base_device* mc68kcpu); +static void m68k_op_lsr_8_r(m68000_base_device* mc68kcpu); +static void m68k_op_lsr_16_r(m68000_base_device* mc68kcpu); +static void m68k_op_lsr_32_r(m68000_base_device* mc68kcpu); +static void m68k_op_lsr_16_ai(m68000_base_device* mc68kcpu); +static void m68k_op_lsr_16_pi(m68000_base_device* mc68kcpu); +static void m68k_op_lsr_16_pd(m68000_base_device* mc68kcpu); +static void m68k_op_lsr_16_di(m68000_base_device* mc68kcpu); +static void m68k_op_lsr_16_ix(m68000_base_device* mc68kcpu); +static void m68k_op_lsr_16_aw(m68000_base_device* mc68kcpu); +static void m68k_op_lsr_16_al(m68000_base_device* mc68kcpu); +static void m68k_op_lsl_8_s(m68000_base_device* mc68kcpu); +static void m68k_op_lsl_16_s(m68000_base_device* mc68kcpu); +static void m68k_op_lsl_32_s(m68000_base_device* mc68kcpu); +static void m68k_op_lsl_8_r(m68000_base_device* mc68kcpu); +static void m68k_op_lsl_16_r(m68000_base_device* mc68kcpu); +static void m68k_op_lsl_32_r(m68000_base_device* mc68kcpu); +static void m68k_op_lsl_16_ai(m68000_base_device* mc68kcpu); +static void m68k_op_lsl_16_pi(m68000_base_device* mc68kcpu); +static void m68k_op_lsl_16_pd(m68000_base_device* mc68kcpu); +static void m68k_op_lsl_16_di(m68000_base_device* mc68kcpu); +static void m68k_op_lsl_16_ix(m68000_base_device* mc68kcpu); +static void m68k_op_lsl_16_aw(m68000_base_device* mc68kcpu); +static void m68k_op_lsl_16_al(m68000_base_device* mc68kcpu); +static void m68k_op_move_8_d_d(m68000_base_device* mc68kcpu); +static void m68k_op_move_8_d_ai(m68000_base_device* mc68kcpu); +static void m68k_op_move_8_d_pi(m68000_base_device* mc68kcpu); +static void m68k_op_move_8_d_pi7(m68000_base_device* mc68kcpu); +static void m68k_op_move_8_d_pd(m68000_base_device* mc68kcpu); +static void m68k_op_move_8_d_pd7(m68000_base_device* mc68kcpu); +static void m68k_op_move_8_d_di(m68000_base_device* mc68kcpu); +static void m68k_op_move_8_d_ix(m68000_base_device* mc68kcpu); +static void m68k_op_move_8_d_aw(m68000_base_device* mc68kcpu); +static void m68k_op_move_8_d_al(m68000_base_device* mc68kcpu); +static void m68k_op_move_8_d_pcdi(m68000_base_device* mc68kcpu); +static void m68k_op_move_8_d_pcix(m68000_base_device* mc68kcpu); +static void m68k_op_move_8_d_i(m68000_base_device* mc68kcpu); +static void m68k_op_move_8_ai_d(m68000_base_device* mc68kcpu); +static void m68k_op_move_8_ai_ai(m68000_base_device* mc68kcpu); +static void m68k_op_move_8_ai_pi(m68000_base_device* mc68kcpu); +static void m68k_op_move_8_ai_pi7(m68000_base_device* mc68kcpu); +static void m68k_op_move_8_ai_pd(m68000_base_device* mc68kcpu); +static void m68k_op_move_8_ai_pd7(m68000_base_device* mc68kcpu); +static void m68k_op_move_8_ai_di(m68000_base_device* mc68kcpu); +static void m68k_op_move_8_ai_ix(m68000_base_device* mc68kcpu); +static void m68k_op_move_8_ai_aw(m68000_base_device* mc68kcpu); +static void m68k_op_move_8_ai_al(m68000_base_device* mc68kcpu); +static void m68k_op_move_8_ai_pcdi(m68000_base_device* mc68kcpu); +static void m68k_op_move_8_ai_pcix(m68000_base_device* mc68kcpu); +static void m68k_op_move_8_ai_i(m68000_base_device* mc68kcpu); +static void m68k_op_move_8_pi7_d(m68000_base_device* mc68kcpu); +static void m68k_op_move_8_pi_d(m68000_base_device* mc68kcpu); +static void m68k_op_move_8_pi7_ai(m68000_base_device* mc68kcpu); +static void m68k_op_move_8_pi7_pi(m68000_base_device* mc68kcpu); +static void m68k_op_move_8_pi7_pi7(m68000_base_device* mc68kcpu); +static void m68k_op_move_8_pi7_pd(m68000_base_device* mc68kcpu); +static void m68k_op_move_8_pi7_pd7(m68000_base_device* mc68kcpu); +static void m68k_op_move_8_pi7_di(m68000_base_device* mc68kcpu); +static void m68k_op_move_8_pi7_ix(m68000_base_device* mc68kcpu); +static void m68k_op_move_8_pi7_aw(m68000_base_device* mc68kcpu); +static void m68k_op_move_8_pi7_al(m68000_base_device* mc68kcpu); +static void m68k_op_move_8_pi7_pcdi(m68000_base_device* mc68kcpu); +static void m68k_op_move_8_pi7_pcix(m68000_base_device* mc68kcpu); +static void m68k_op_move_8_pi7_i(m68000_base_device* mc68kcpu); +static void m68k_op_move_8_pi_ai(m68000_base_device* mc68kcpu); +static void m68k_op_move_8_pi_pi(m68000_base_device* mc68kcpu); +static void m68k_op_move_8_pi_pi7(m68000_base_device* mc68kcpu); +static void m68k_op_move_8_pi_pd(m68000_base_device* mc68kcpu); +static void m68k_op_move_8_pi_pd7(m68000_base_device* mc68kcpu); +static void m68k_op_move_8_pi_di(m68000_base_device* mc68kcpu); +static void m68k_op_move_8_pi_ix(m68000_base_device* mc68kcpu); +static void m68k_op_move_8_pi_aw(m68000_base_device* mc68kcpu); +static void m68k_op_move_8_pi_al(m68000_base_device* mc68kcpu); +static void m68k_op_move_8_pi_pcdi(m68000_base_device* mc68kcpu); +static void m68k_op_move_8_pi_pcix(m68000_base_device* mc68kcpu); +static void m68k_op_move_8_pi_i(m68000_base_device* mc68kcpu); +static void m68k_op_move_8_pd7_d(m68000_base_device* mc68kcpu); +static void m68k_op_move_8_pd_d(m68000_base_device* mc68kcpu); +static void m68k_op_move_8_pd7_ai(m68000_base_device* mc68kcpu); +static void m68k_op_move_8_pd7_pi(m68000_base_device* mc68kcpu); +static void m68k_op_move_8_pd7_pi7(m68000_base_device* mc68kcpu); +static void m68k_op_move_8_pd7_pd(m68000_base_device* mc68kcpu); +static void m68k_op_move_8_pd7_pd7(m68000_base_device* mc68kcpu); +static void m68k_op_move_8_pd7_di(m68000_base_device* mc68kcpu); +static void m68k_op_move_8_pd7_ix(m68000_base_device* mc68kcpu); +static void m68k_op_move_8_pd7_aw(m68000_base_device* mc68kcpu); +static void m68k_op_move_8_pd7_al(m68000_base_device* mc68kcpu); +static void m68k_op_move_8_pd7_pcdi(m68000_base_device* mc68kcpu); +static void m68k_op_move_8_pd7_pcix(m68000_base_device* mc68kcpu); +static void m68k_op_move_8_pd7_i(m68000_base_device* mc68kcpu); +static void m68k_op_move_8_pd_ai(m68000_base_device* mc68kcpu); +static void m68k_op_move_8_pd_pi(m68000_base_device* mc68kcpu); +static void m68k_op_move_8_pd_pi7(m68000_base_device* mc68kcpu); +static void m68k_op_move_8_pd_pd(m68000_base_device* mc68kcpu); +static void m68k_op_move_8_pd_pd7(m68000_base_device* mc68kcpu); +static void m68k_op_move_8_pd_di(m68000_base_device* mc68kcpu); +static void m68k_op_move_8_pd_ix(m68000_base_device* mc68kcpu); +static void m68k_op_move_8_pd_aw(m68000_base_device* mc68kcpu); +static void m68k_op_move_8_pd_al(m68000_base_device* mc68kcpu); +static void m68k_op_move_8_pd_pcdi(m68000_base_device* mc68kcpu); +static void m68k_op_move_8_pd_pcix(m68000_base_device* mc68kcpu); +static void m68k_op_move_8_pd_i(m68000_base_device* mc68kcpu); +static void m68k_op_move_8_di_d(m68000_base_device* mc68kcpu); +static void m68k_op_move_8_di_ai(m68000_base_device* mc68kcpu); +static void m68k_op_move_8_di_pi(m68000_base_device* mc68kcpu); +static void m68k_op_move_8_di_pi7(m68000_base_device* mc68kcpu); +static void m68k_op_move_8_di_pd(m68000_base_device* mc68kcpu); +static void m68k_op_move_8_di_pd7(m68000_base_device* mc68kcpu); +static void m68k_op_move_8_di_di(m68000_base_device* mc68kcpu); +static void m68k_op_move_8_di_ix(m68000_base_device* mc68kcpu); +static void m68k_op_move_8_di_aw(m68000_base_device* mc68kcpu); +static void m68k_op_move_8_di_al(m68000_base_device* mc68kcpu); +static void m68k_op_move_8_di_pcdi(m68000_base_device* mc68kcpu); +static void m68k_op_move_8_di_pcix(m68000_base_device* mc68kcpu); +static void m68k_op_move_8_di_i(m68000_base_device* mc68kcpu); +static void m68k_op_move_8_ix_d(m68000_base_device* mc68kcpu); +static void m68k_op_move_8_ix_ai(m68000_base_device* mc68kcpu); +static void m68k_op_move_8_ix_pi(m68000_base_device* mc68kcpu); +static void m68k_op_move_8_ix_pi7(m68000_base_device* mc68kcpu); +static void m68k_op_move_8_ix_pd(m68000_base_device* mc68kcpu); +static void m68k_op_move_8_ix_pd7(m68000_base_device* mc68kcpu); +static void m68k_op_move_8_ix_di(m68000_base_device* mc68kcpu); +static void m68k_op_move_8_ix_ix(m68000_base_device* mc68kcpu); +static void m68k_op_move_8_ix_aw(m68000_base_device* mc68kcpu); +static void m68k_op_move_8_ix_al(m68000_base_device* mc68kcpu); +static void m68k_op_move_8_ix_pcdi(m68000_base_device* mc68kcpu); +static void m68k_op_move_8_ix_pcix(m68000_base_device* mc68kcpu); +static void m68k_op_move_8_ix_i(m68000_base_device* mc68kcpu); +static void m68k_op_move_8_aw_d(m68000_base_device* mc68kcpu); +static void m68k_op_move_8_aw_ai(m68000_base_device* mc68kcpu); +static void m68k_op_move_8_aw_pi(m68000_base_device* mc68kcpu); +static void m68k_op_move_8_aw_pi7(m68000_base_device* mc68kcpu); +static void m68k_op_move_8_aw_pd(m68000_base_device* mc68kcpu); +static void m68k_op_move_8_aw_pd7(m68000_base_device* mc68kcpu); +static void m68k_op_move_8_aw_di(m68000_base_device* mc68kcpu); +static void m68k_op_move_8_aw_ix(m68000_base_device* mc68kcpu); +static void m68k_op_move_8_aw_aw(m68000_base_device* mc68kcpu); +static void m68k_op_move_8_aw_al(m68000_base_device* mc68kcpu); +static void m68k_op_move_8_aw_pcdi(m68000_base_device* mc68kcpu); +static void m68k_op_move_8_aw_pcix(m68000_base_device* mc68kcpu); +static void m68k_op_move_8_aw_i(m68000_base_device* mc68kcpu); +static void m68k_op_move_8_al_d(m68000_base_device* mc68kcpu); +static void m68k_op_move_8_al_ai(m68000_base_device* mc68kcpu); +static void m68k_op_move_8_al_pi(m68000_base_device* mc68kcpu); +static void m68k_op_move_8_al_pi7(m68000_base_device* mc68kcpu); +static void m68k_op_move_8_al_pd(m68000_base_device* mc68kcpu); +static void m68k_op_move_8_al_pd7(m68000_base_device* mc68kcpu); +static void m68k_op_move_8_al_di(m68000_base_device* mc68kcpu); +static void m68k_op_move_8_al_ix(m68000_base_device* mc68kcpu); +static void m68k_op_move_8_al_aw(m68000_base_device* mc68kcpu); +static void m68k_op_move_8_al_al(m68000_base_device* mc68kcpu); +static void m68k_op_move_8_al_pcdi(m68000_base_device* mc68kcpu); +static void m68k_op_move_8_al_pcix(m68000_base_device* mc68kcpu); +static void m68k_op_move_8_al_i(m68000_base_device* mc68kcpu); +static void m68k_op_move_16_d_d(m68000_base_device* mc68kcpu); +static void m68k_op_move_16_d_a(m68000_base_device* mc68kcpu); +static void m68k_op_move_16_d_ai(m68000_base_device* mc68kcpu); +static void m68k_op_move_16_d_pi(m68000_base_device* mc68kcpu); +static void m68k_op_move_16_d_pd(m68000_base_device* mc68kcpu); +static void m68k_op_move_16_d_di(m68000_base_device* mc68kcpu); +static void m68k_op_move_16_d_ix(m68000_base_device* mc68kcpu); +static void m68k_op_move_16_d_aw(m68000_base_device* mc68kcpu); +static void m68k_op_move_16_d_al(m68000_base_device* mc68kcpu); +static void m68k_op_move_16_d_pcdi(m68000_base_device* mc68kcpu); +static void m68k_op_move_16_d_pcix(m68000_base_device* mc68kcpu); +static void m68k_op_move_16_d_i(m68000_base_device* mc68kcpu); +static void m68k_op_move_16_ai_d(m68000_base_device* mc68kcpu); +static void m68k_op_move_16_ai_a(m68000_base_device* mc68kcpu); +static void m68k_op_move_16_ai_ai(m68000_base_device* mc68kcpu); +static void m68k_op_move_16_ai_pi(m68000_base_device* mc68kcpu); +static void m68k_op_move_16_ai_pd(m68000_base_device* mc68kcpu); +static void m68k_op_move_16_ai_di(m68000_base_device* mc68kcpu); +static void m68k_op_move_16_ai_ix(m68000_base_device* mc68kcpu); +static void m68k_op_move_16_ai_aw(m68000_base_device* mc68kcpu); +static void m68k_op_move_16_ai_al(m68000_base_device* mc68kcpu); +static void m68k_op_move_16_ai_pcdi(m68000_base_device* mc68kcpu); +static void m68k_op_move_16_ai_pcix(m68000_base_device* mc68kcpu); +static void m68k_op_move_16_ai_i(m68000_base_device* mc68kcpu); +static void m68k_op_move_16_pi_d(m68000_base_device* mc68kcpu); +static void m68k_op_move_16_pi_a(m68000_base_device* mc68kcpu); +static void m68k_op_move_16_pi_ai(m68000_base_device* mc68kcpu); +static void m68k_op_move_16_pi_pi(m68000_base_device* mc68kcpu); +static void m68k_op_move_16_pi_pd(m68000_base_device* mc68kcpu); +static void m68k_op_move_16_pi_di(m68000_base_device* mc68kcpu); +static void m68k_op_move_16_pi_ix(m68000_base_device* mc68kcpu); +static void m68k_op_move_16_pi_aw(m68000_base_device* mc68kcpu); +static void m68k_op_move_16_pi_al(m68000_base_device* mc68kcpu); +static void m68k_op_move_16_pi_pcdi(m68000_base_device* mc68kcpu); +static void m68k_op_move_16_pi_pcix(m68000_base_device* mc68kcpu); +static void m68k_op_move_16_pi_i(m68000_base_device* mc68kcpu); +static void m68k_op_move_16_pd_d(m68000_base_device* mc68kcpu); +static void m68k_op_move_16_pd_a(m68000_base_device* mc68kcpu); +static void m68k_op_move_16_pd_ai(m68000_base_device* mc68kcpu); +static void m68k_op_move_16_pd_pi(m68000_base_device* mc68kcpu); +static void m68k_op_move_16_pd_pd(m68000_base_device* mc68kcpu); +static void m68k_op_move_16_pd_di(m68000_base_device* mc68kcpu); +static void m68k_op_move_16_pd_ix(m68000_base_device* mc68kcpu); +static void m68k_op_move_16_pd_aw(m68000_base_device* mc68kcpu); +static void m68k_op_move_16_pd_al(m68000_base_device* mc68kcpu); +static void m68k_op_move_16_pd_pcdi(m68000_base_device* mc68kcpu); +static void m68k_op_move_16_pd_pcix(m68000_base_device* mc68kcpu); +static void m68k_op_move_16_pd_i(m68000_base_device* mc68kcpu); +static void m68k_op_move_16_di_d(m68000_base_device* mc68kcpu); +static void m68k_op_move_16_di_a(m68000_base_device* mc68kcpu); +static void m68k_op_move_16_di_ai(m68000_base_device* mc68kcpu); +static void m68k_op_move_16_di_pi(m68000_base_device* mc68kcpu); +static void m68k_op_move_16_di_pd(m68000_base_device* mc68kcpu); +static void m68k_op_move_16_di_di(m68000_base_device* mc68kcpu); +static void m68k_op_move_16_di_ix(m68000_base_device* mc68kcpu); +static void m68k_op_move_16_di_aw(m68000_base_device* mc68kcpu); +static void m68k_op_move_16_di_al(m68000_base_device* mc68kcpu); +static void m68k_op_move_16_di_pcdi(m68000_base_device* mc68kcpu); +static void m68k_op_move_16_di_pcix(m68000_base_device* mc68kcpu); +static void m68k_op_move_16_di_i(m68000_base_device* mc68kcpu); +static void m68k_op_move_16_ix_d(m68000_base_device* mc68kcpu); +static void m68k_op_move_16_ix_a(m68000_base_device* mc68kcpu); +static void m68k_op_move_16_ix_ai(m68000_base_device* mc68kcpu); +static void m68k_op_move_16_ix_pi(m68000_base_device* mc68kcpu); +static void m68k_op_move_16_ix_pd(m68000_base_device* mc68kcpu); +static void m68k_op_move_16_ix_di(m68000_base_device* mc68kcpu); +static void m68k_op_move_16_ix_ix(m68000_base_device* mc68kcpu); +static void m68k_op_move_16_ix_aw(m68000_base_device* mc68kcpu); +static void m68k_op_move_16_ix_al(m68000_base_device* mc68kcpu); +static void m68k_op_move_16_ix_pcdi(m68000_base_device* mc68kcpu); +static void m68k_op_move_16_ix_pcix(m68000_base_device* mc68kcpu); +static void m68k_op_move_16_ix_i(m68000_base_device* mc68kcpu); +static void m68k_op_move_16_aw_d(m68000_base_device* mc68kcpu); +static void m68k_op_move_16_aw_a(m68000_base_device* mc68kcpu); +static void m68k_op_move_16_aw_ai(m68000_base_device* mc68kcpu); +static void m68k_op_move_16_aw_pi(m68000_base_device* mc68kcpu); +static void m68k_op_move_16_aw_pd(m68000_base_device* mc68kcpu); +static void m68k_op_move_16_aw_di(m68000_base_device* mc68kcpu); +static void m68k_op_move_16_aw_ix(m68000_base_device* mc68kcpu); +static void m68k_op_move_16_aw_aw(m68000_base_device* mc68kcpu); +static void m68k_op_move_16_aw_al(m68000_base_device* mc68kcpu); +static void m68k_op_move_16_aw_pcdi(m68000_base_device* mc68kcpu); +static void m68k_op_move_16_aw_pcix(m68000_base_device* mc68kcpu); +static void m68k_op_move_16_aw_i(m68000_base_device* mc68kcpu); +static void m68k_op_move_16_al_d(m68000_base_device* mc68kcpu); +static void m68k_op_move_16_al_a(m68000_base_device* mc68kcpu); +static void m68k_op_move_16_al_ai(m68000_base_device* mc68kcpu); +static void m68k_op_move_16_al_pi(m68000_base_device* mc68kcpu); +static void m68k_op_move_16_al_pd(m68000_base_device* mc68kcpu); +static void m68k_op_move_16_al_di(m68000_base_device* mc68kcpu); +static void m68k_op_move_16_al_ix(m68000_base_device* mc68kcpu); +static void m68k_op_move_16_al_aw(m68000_base_device* mc68kcpu); +static void m68k_op_move_16_al_al(m68000_base_device* mc68kcpu); +static void m68k_op_move_16_al_pcdi(m68000_base_device* mc68kcpu); +static void m68k_op_move_16_al_pcix(m68000_base_device* mc68kcpu); +static void m68k_op_move_16_al_i(m68000_base_device* mc68kcpu); +static void m68k_op_move_32_d_d(m68000_base_device* mc68kcpu); +static void m68k_op_move_32_d_a(m68000_base_device* mc68kcpu); +static void m68k_op_move_32_d_ai(m68000_base_device* mc68kcpu); +static void m68k_op_move_32_d_pi(m68000_base_device* mc68kcpu); +static void m68k_op_move_32_d_pd(m68000_base_device* mc68kcpu); +static void m68k_op_move_32_d_di(m68000_base_device* mc68kcpu); +static void m68k_op_move_32_d_ix(m68000_base_device* mc68kcpu); +static void m68k_op_move_32_d_aw(m68000_base_device* mc68kcpu); +static void m68k_op_move_32_d_al(m68000_base_device* mc68kcpu); +static void m68k_op_move_32_d_pcdi(m68000_base_device* mc68kcpu); +static void m68k_op_move_32_d_pcix(m68000_base_device* mc68kcpu); +static void m68k_op_move_32_d_i(m68000_base_device* mc68kcpu); +static void m68k_op_move_32_ai_d(m68000_base_device* mc68kcpu); +static void m68k_op_move_32_ai_a(m68000_base_device* mc68kcpu); +static void m68k_op_move_32_ai_ai(m68000_base_device* mc68kcpu); +static void m68k_op_move_32_ai_pi(m68000_base_device* mc68kcpu); +static void m68k_op_move_32_ai_pd(m68000_base_device* mc68kcpu); +static void m68k_op_move_32_ai_di(m68000_base_device* mc68kcpu); +static void m68k_op_move_32_ai_ix(m68000_base_device* mc68kcpu); +static void m68k_op_move_32_ai_aw(m68000_base_device* mc68kcpu); +static void m68k_op_move_32_ai_al(m68000_base_device* mc68kcpu); +static void m68k_op_move_32_ai_pcdi(m68000_base_device* mc68kcpu); +static void m68k_op_move_32_ai_pcix(m68000_base_device* mc68kcpu); +static void m68k_op_move_32_ai_i(m68000_base_device* mc68kcpu); +static void m68k_op_move_32_pi_d(m68000_base_device* mc68kcpu); +static void m68k_op_move_32_pi_a(m68000_base_device* mc68kcpu); +static void m68k_op_move_32_pi_ai(m68000_base_device* mc68kcpu); +static void m68k_op_move_32_pi_pi(m68000_base_device* mc68kcpu); +static void m68k_op_move_32_pi_pd(m68000_base_device* mc68kcpu); +static void m68k_op_move_32_pi_di(m68000_base_device* mc68kcpu); +static void m68k_op_move_32_pi_ix(m68000_base_device* mc68kcpu); +static void m68k_op_move_32_pi_aw(m68000_base_device* mc68kcpu); +static void m68k_op_move_32_pi_al(m68000_base_device* mc68kcpu); +static void m68k_op_move_32_pi_pcdi(m68000_base_device* mc68kcpu); +static void m68k_op_move_32_pi_pcix(m68000_base_device* mc68kcpu); +static void m68k_op_move_32_pi_i(m68000_base_device* mc68kcpu); +static void m68k_op_move_32_pd_d(m68000_base_device* mc68kcpu); +static void m68k_op_move_32_pd_a(m68000_base_device* mc68kcpu); +static void m68k_op_move_32_pd_ai(m68000_base_device* mc68kcpu); +static void m68k_op_move_32_pd_pi(m68000_base_device* mc68kcpu); +static void m68k_op_move_32_pd_pd(m68000_base_device* mc68kcpu); +static void m68k_op_move_32_pd_di(m68000_base_device* mc68kcpu); +static void m68k_op_move_32_pd_ix(m68000_base_device* mc68kcpu); +static void m68k_op_move_32_pd_aw(m68000_base_device* mc68kcpu); +static void m68k_op_move_32_pd_al(m68000_base_device* mc68kcpu); +static void m68k_op_move_32_pd_pcdi(m68000_base_device* mc68kcpu); +static void m68k_op_move_32_pd_pcix(m68000_base_device* mc68kcpu); +static void m68k_op_move_32_pd_i(m68000_base_device* mc68kcpu); +static void m68k_op_move_32_di_d(m68000_base_device* mc68kcpu); +static void m68k_op_move_32_di_a(m68000_base_device* mc68kcpu); +static void m68k_op_move_32_di_ai(m68000_base_device* mc68kcpu); +static void m68k_op_move_32_di_pi(m68000_base_device* mc68kcpu); +static void m68k_op_move_32_di_pd(m68000_base_device* mc68kcpu); +static void m68k_op_move_32_di_di(m68000_base_device* mc68kcpu); +static void m68k_op_move_32_di_ix(m68000_base_device* mc68kcpu); +static void m68k_op_move_32_di_aw(m68000_base_device* mc68kcpu); +static void m68k_op_move_32_di_al(m68000_base_device* mc68kcpu); +static void m68k_op_move_32_di_pcdi(m68000_base_device* mc68kcpu); +static void m68k_op_move_32_di_pcix(m68000_base_device* mc68kcpu); +static void m68k_op_move_32_di_i(m68000_base_device* mc68kcpu); +static void m68k_op_move_32_ix_d(m68000_base_device* mc68kcpu); +static void m68k_op_move_32_ix_a(m68000_base_device* mc68kcpu); +static void m68k_op_move_32_ix_ai(m68000_base_device* mc68kcpu); +static void m68k_op_move_32_ix_pi(m68000_base_device* mc68kcpu); +static void m68k_op_move_32_ix_pd(m68000_base_device* mc68kcpu); +static void m68k_op_move_32_ix_di(m68000_base_device* mc68kcpu); +static void m68k_op_move_32_ix_ix(m68000_base_device* mc68kcpu); +static void m68k_op_move_32_ix_aw(m68000_base_device* mc68kcpu); +static void m68k_op_move_32_ix_al(m68000_base_device* mc68kcpu); +static void m68k_op_move_32_ix_pcdi(m68000_base_device* mc68kcpu); +static void m68k_op_move_32_ix_pcix(m68000_base_device* mc68kcpu); +static void m68k_op_move_32_ix_i(m68000_base_device* mc68kcpu); +static void m68k_op_move_32_aw_d(m68000_base_device* mc68kcpu); +static void m68k_op_move_32_aw_a(m68000_base_device* mc68kcpu); +static void m68k_op_move_32_aw_ai(m68000_base_device* mc68kcpu); +static void m68k_op_move_32_aw_pi(m68000_base_device* mc68kcpu); +static void m68k_op_move_32_aw_pd(m68000_base_device* mc68kcpu); +static void m68k_op_move_32_aw_di(m68000_base_device* mc68kcpu); +static void m68k_op_move_32_aw_ix(m68000_base_device* mc68kcpu); +static void m68k_op_move_32_aw_aw(m68000_base_device* mc68kcpu); +static void m68k_op_move_32_aw_al(m68000_base_device* mc68kcpu); +static void m68k_op_move_32_aw_pcdi(m68000_base_device* mc68kcpu); +static void m68k_op_move_32_aw_pcix(m68000_base_device* mc68kcpu); +static void m68k_op_move_32_aw_i(m68000_base_device* mc68kcpu); +static void m68k_op_move_32_al_d(m68000_base_device* mc68kcpu); +static void m68k_op_move_32_al_a(m68000_base_device* mc68kcpu); +static void m68k_op_move_32_al_ai(m68000_base_device* mc68kcpu); +static void m68k_op_move_32_al_pi(m68000_base_device* mc68kcpu); +static void m68k_op_move_32_al_pd(m68000_base_device* mc68kcpu); +static void m68k_op_move_32_al_di(m68000_base_device* mc68kcpu); +static void m68k_op_move_32_al_ix(m68000_base_device* mc68kcpu); +static void m68k_op_move_32_al_aw(m68000_base_device* mc68kcpu); +static void m68k_op_move_32_al_al(m68000_base_device* mc68kcpu); +static void m68k_op_move_32_al_pcdi(m68000_base_device* mc68kcpu); +static void m68k_op_move_32_al_pcix(m68000_base_device* mc68kcpu); +static void m68k_op_move_32_al_i(m68000_base_device* mc68kcpu); +static void m68k_op_movea_16_d(m68000_base_device* mc68kcpu); +static void m68k_op_movea_16_a(m68000_base_device* mc68kcpu); +static void m68k_op_movea_16_ai(m68000_base_device* mc68kcpu); +static void m68k_op_movea_16_pi(m68000_base_device* mc68kcpu); +static void m68k_op_movea_16_pd(m68000_base_device* mc68kcpu); +static void m68k_op_movea_16_di(m68000_base_device* mc68kcpu); +static void m68k_op_movea_16_ix(m68000_base_device* mc68kcpu); +static void m68k_op_movea_16_aw(m68000_base_device* mc68kcpu); +static void m68k_op_movea_16_al(m68000_base_device* mc68kcpu); +static void m68k_op_movea_16_pcdi(m68000_base_device* mc68kcpu); +static void m68k_op_movea_16_pcix(m68000_base_device* mc68kcpu); +static void m68k_op_movea_16_i(m68000_base_device* mc68kcpu); +static void m68k_op_movea_32_d(m68000_base_device* mc68kcpu); +static void m68k_op_movea_32_a(m68000_base_device* mc68kcpu); +static void m68k_op_movea_32_ai(m68000_base_device* mc68kcpu); +static void m68k_op_movea_32_pi(m68000_base_device* mc68kcpu); +static void m68k_op_movea_32_pd(m68000_base_device* mc68kcpu); +static void m68k_op_movea_32_di(m68000_base_device* mc68kcpu); +static void m68k_op_movea_32_ix(m68000_base_device* mc68kcpu); +static void m68k_op_movea_32_aw(m68000_base_device* mc68kcpu); +static void m68k_op_movea_32_al(m68000_base_device* mc68kcpu); +static void m68k_op_movea_32_pcdi(m68000_base_device* mc68kcpu); +static void m68k_op_movea_32_pcix(m68000_base_device* mc68kcpu); +static void m68k_op_movea_32_i(m68000_base_device* mc68kcpu); +static void m68k_op_move_16_frc_d(m68000_base_device* mc68kcpu); +static void m68k_op_move_16_frc_ai(m68000_base_device* mc68kcpu); +static void m68k_op_move_16_frc_pi(m68000_base_device* mc68kcpu); +static void m68k_op_move_16_frc_pd(m68000_base_device* mc68kcpu); +static void m68k_op_move_16_frc_di(m68000_base_device* mc68kcpu); +static void m68k_op_move_16_frc_ix(m68000_base_device* mc68kcpu); +static void m68k_op_move_16_frc_aw(m68000_base_device* mc68kcpu); +static void m68k_op_move_16_frc_al(m68000_base_device* mc68kcpu); +static void m68k_op_move_16_toc_d(m68000_base_device* mc68kcpu); +static void m68k_op_move_16_toc_ai(m68000_base_device* mc68kcpu); +static void m68k_op_move_16_toc_pi(m68000_base_device* mc68kcpu); +static void m68k_op_move_16_toc_pd(m68000_base_device* mc68kcpu); +static void m68k_op_move_16_toc_di(m68000_base_device* mc68kcpu); +static void m68k_op_move_16_toc_ix(m68000_base_device* mc68kcpu); +static void m68k_op_move_16_toc_aw(m68000_base_device* mc68kcpu); +static void m68k_op_move_16_toc_al(m68000_base_device* mc68kcpu); +static void m68k_op_move_16_toc_pcdi(m68000_base_device* mc68kcpu); +static void m68k_op_move_16_toc_pcix(m68000_base_device* mc68kcpu); +static void m68k_op_move_16_toc_i(m68000_base_device* mc68kcpu); +static void m68k_op_move_16_frs_d(m68000_base_device* mc68kcpu); +static void m68k_op_move_16_frs_ai(m68000_base_device* mc68kcpu); +static void m68k_op_move_16_frs_pi(m68000_base_device* mc68kcpu); +static void m68k_op_move_16_frs_pd(m68000_base_device* mc68kcpu); +static void m68k_op_move_16_frs_di(m68000_base_device* mc68kcpu); +static void m68k_op_move_16_frs_ix(m68000_base_device* mc68kcpu); +static void m68k_op_move_16_frs_aw(m68000_base_device* mc68kcpu); +static void m68k_op_move_16_frs_al(m68000_base_device* mc68kcpu); +static void m68k_op_move_16_tos_d(m68000_base_device* mc68kcpu); +static void m68k_op_move_16_tos_ai(m68000_base_device* mc68kcpu); +static void m68k_op_move_16_tos_pi(m68000_base_device* mc68kcpu); +static void m68k_op_move_16_tos_pd(m68000_base_device* mc68kcpu); +static void m68k_op_move_16_tos_di(m68000_base_device* mc68kcpu); +static void m68k_op_move_16_tos_ix(m68000_base_device* mc68kcpu); +static void m68k_op_move_16_tos_aw(m68000_base_device* mc68kcpu); +static void m68k_op_move_16_tos_al(m68000_base_device* mc68kcpu); +static void m68k_op_move_16_tos_pcdi(m68000_base_device* mc68kcpu); +static void m68k_op_move_16_tos_pcix(m68000_base_device* mc68kcpu); +static void m68k_op_move_16_tos_i(m68000_base_device* mc68kcpu); +static void m68k_op_move_32_fru(m68000_base_device* mc68kcpu); +static void m68k_op_move_32_tou(m68000_base_device* mc68kcpu); +static void m68k_op_movec_32_cr(m68000_base_device* mc68kcpu); +static void m68k_op_movec_32_rc(m68000_base_device* mc68kcpu); +static void m68k_op_movem_16_re_pd(m68000_base_device* mc68kcpu); +static void m68k_op_movem_16_re_ai(m68000_base_device* mc68kcpu); +static void m68k_op_movem_16_re_di(m68000_base_device* mc68kcpu); +static void m68k_op_movem_16_re_ix(m68000_base_device* mc68kcpu); +static void m68k_op_movem_16_re_aw(m68000_base_device* mc68kcpu); +static void m68k_op_movem_16_re_al(m68000_base_device* mc68kcpu); +static void m68k_op_movem_32_re_pd(m68000_base_device* mc68kcpu); +static void m68k_op_movem_32_re_ai(m68000_base_device* mc68kcpu); +static void m68k_op_movem_32_re_di(m68000_base_device* mc68kcpu); +static void m68k_op_movem_32_re_ix(m68000_base_device* mc68kcpu); +static void m68k_op_movem_32_re_aw(m68000_base_device* mc68kcpu); +static void m68k_op_movem_32_re_al(m68000_base_device* mc68kcpu); +static void m68k_op_movem_16_er_pi(m68000_base_device* mc68kcpu); +static void m68k_op_movem_16_er_pcdi(m68000_base_device* mc68kcpu); +static void m68k_op_movem_16_er_pcix(m68000_base_device* mc68kcpu); +static void m68k_op_movem_16_er_ai(m68000_base_device* mc68kcpu); +static void m68k_op_movem_16_er_di(m68000_base_device* mc68kcpu); +static void m68k_op_movem_16_er_ix(m68000_base_device* mc68kcpu); +static void m68k_op_movem_16_er_aw(m68000_base_device* mc68kcpu); +static void m68k_op_movem_16_er_al(m68000_base_device* mc68kcpu); +static void m68k_op_movem_32_er_pi(m68000_base_device* mc68kcpu); +static void m68k_op_movem_32_er_pcdi(m68000_base_device* mc68kcpu); +static void m68k_op_movem_32_er_pcix(m68000_base_device* mc68kcpu); +static void m68k_op_movem_32_er_ai(m68000_base_device* mc68kcpu); +static void m68k_op_movem_32_er_di(m68000_base_device* mc68kcpu); +static void m68k_op_movem_32_er_ix(m68000_base_device* mc68kcpu); +static void m68k_op_movem_32_er_aw(m68000_base_device* mc68kcpu); +static void m68k_op_movem_32_er_al(m68000_base_device* mc68kcpu); +static void m68k_op_movep_16_re(m68000_base_device* mc68kcpu); +static void m68k_op_movep_32_re(m68000_base_device* mc68kcpu); +static void m68k_op_movep_16_er(m68000_base_device* mc68kcpu); +static void m68k_op_movep_32_er(m68000_base_device* mc68kcpu); +static void m68k_op_moves_8_ai(m68000_base_device* mc68kcpu); +static void m68k_op_moves_8_pi(m68000_base_device* mc68kcpu); +static void m68k_op_moves_8_pi7(m68000_base_device* mc68kcpu); +static void m68k_op_moves_8_pd(m68000_base_device* mc68kcpu); +static void m68k_op_moves_8_pd7(m68000_base_device* mc68kcpu); +static void m68k_op_moves_8_di(m68000_base_device* mc68kcpu); +static void m68k_op_moves_8_ix(m68000_base_device* mc68kcpu); +static void m68k_op_moves_8_aw(m68000_base_device* mc68kcpu); +static void m68k_op_moves_8_al(m68000_base_device* mc68kcpu); +static void m68k_op_moves_16_ai(m68000_base_device* mc68kcpu); +static void m68k_op_moves_16_pi(m68000_base_device* mc68kcpu); +static void m68k_op_moves_16_pd(m68000_base_device* mc68kcpu); +static void m68k_op_moves_16_di(m68000_base_device* mc68kcpu); +static void m68k_op_moves_16_ix(m68000_base_device* mc68kcpu); +static void m68k_op_moves_16_aw(m68000_base_device* mc68kcpu); +static void m68k_op_moves_16_al(m68000_base_device* mc68kcpu); +static void m68k_op_moves_32_ai(m68000_base_device* mc68kcpu); +static void m68k_op_moves_32_pi(m68000_base_device* mc68kcpu); +static void m68k_op_moves_32_pd(m68000_base_device* mc68kcpu); +static void m68k_op_moves_32_di(m68000_base_device* mc68kcpu); +static void m68k_op_moves_32_ix(m68000_base_device* mc68kcpu); +static void m68k_op_moves_32_aw(m68000_base_device* mc68kcpu); +static void m68k_op_moves_32_al(m68000_base_device* mc68kcpu); +static void m68k_op_moveq_32(m68000_base_device* mc68kcpu); +static void m68k_op_move16_32(m68000_base_device* mc68kcpu); +static void m68k_op_muls_16_d(m68000_base_device* mc68kcpu); +static void m68k_op_muls_16_ai(m68000_base_device* mc68kcpu); +static void m68k_op_muls_16_pi(m68000_base_device* mc68kcpu); +static void m68k_op_muls_16_pd(m68000_base_device* mc68kcpu); +static void m68k_op_muls_16_di(m68000_base_device* mc68kcpu); +static void m68k_op_muls_16_ix(m68000_base_device* mc68kcpu); +static void m68k_op_muls_16_aw(m68000_base_device* mc68kcpu); +static void m68k_op_muls_16_al(m68000_base_device* mc68kcpu); +static void m68k_op_muls_16_pcdi(m68000_base_device* mc68kcpu); +static void m68k_op_muls_16_pcix(m68000_base_device* mc68kcpu); +static void m68k_op_muls_16_i(m68000_base_device* mc68kcpu); +static void m68k_op_mulu_16_d(m68000_base_device* mc68kcpu); +static void m68k_op_mulu_16_ai(m68000_base_device* mc68kcpu); +static void m68k_op_mulu_16_pi(m68000_base_device* mc68kcpu); +static void m68k_op_mulu_16_pd(m68000_base_device* mc68kcpu); +static void m68k_op_mulu_16_di(m68000_base_device* mc68kcpu); +static void m68k_op_mulu_16_ix(m68000_base_device* mc68kcpu); +static void m68k_op_mulu_16_aw(m68000_base_device* mc68kcpu); +static void m68k_op_mulu_16_al(m68000_base_device* mc68kcpu); +static void m68k_op_mulu_16_pcdi(m68000_base_device* mc68kcpu); +static void m68k_op_mulu_16_pcix(m68000_base_device* mc68kcpu); +static void m68k_op_mulu_16_i(m68000_base_device* mc68kcpu); +static void m68k_op_mull_32_d(m68000_base_device* mc68kcpu); +static void m68k_op_mull_32_ai(m68000_base_device* mc68kcpu); +static void m68k_op_mull_32_pi(m68000_base_device* mc68kcpu); +static void m68k_op_mull_32_pd(m68000_base_device* mc68kcpu); +static void m68k_op_mull_32_di(m68000_base_device* mc68kcpu); +static void m68k_op_mull_32_ix(m68000_base_device* mc68kcpu); +static void m68k_op_mull_32_aw(m68000_base_device* mc68kcpu); +static void m68k_op_mull_32_al(m68000_base_device* mc68kcpu); +static void m68k_op_mull_32_pcdi(m68000_base_device* mc68kcpu); +static void m68k_op_mull_32_pcix(m68000_base_device* mc68kcpu); +static void m68k_op_mull_32_i(m68000_base_device* mc68kcpu); +static void m68k_op_nbcd_8_d(m68000_base_device* mc68kcpu); +static void m68k_op_nbcd_8_ai(m68000_base_device* mc68kcpu); +static void m68k_op_nbcd_8_pi(m68000_base_device* mc68kcpu); +static void m68k_op_nbcd_8_pi7(m68000_base_device* mc68kcpu); +static void m68k_op_nbcd_8_pd(m68000_base_device* mc68kcpu); +static void m68k_op_nbcd_8_pd7(m68000_base_device* mc68kcpu); +static void m68k_op_nbcd_8_di(m68000_base_device* mc68kcpu); +static void m68k_op_nbcd_8_ix(m68000_base_device* mc68kcpu); +static void m68k_op_nbcd_8_aw(m68000_base_device* mc68kcpu); +static void m68k_op_nbcd_8_al(m68000_base_device* mc68kcpu); +static void m68k_op_neg_8_d(m68000_base_device* mc68kcpu); +static void m68k_op_neg_8_ai(m68000_base_device* mc68kcpu); +static void m68k_op_neg_8_pi(m68000_base_device* mc68kcpu); +static void m68k_op_neg_8_pi7(m68000_base_device* mc68kcpu); +static void m68k_op_neg_8_pd(m68000_base_device* mc68kcpu); +static void m68k_op_neg_8_pd7(m68000_base_device* mc68kcpu); +static void m68k_op_neg_8_di(m68000_base_device* mc68kcpu); +static void m68k_op_neg_8_ix(m68000_base_device* mc68kcpu); +static void m68k_op_neg_8_aw(m68000_base_device* mc68kcpu); +static void m68k_op_neg_8_al(m68000_base_device* mc68kcpu); +static void m68k_op_neg_16_d(m68000_base_device* mc68kcpu); +static void m68k_op_neg_16_ai(m68000_base_device* mc68kcpu); +static void m68k_op_neg_16_pi(m68000_base_device* mc68kcpu); +static void m68k_op_neg_16_pd(m68000_base_device* mc68kcpu); +static void m68k_op_neg_16_di(m68000_base_device* mc68kcpu); +static void m68k_op_neg_16_ix(m68000_base_device* mc68kcpu); +static void m68k_op_neg_16_aw(m68000_base_device* mc68kcpu); +static void m68k_op_neg_16_al(m68000_base_device* mc68kcpu); +static void m68k_op_neg_32_d(m68000_base_device* mc68kcpu); +static void m68k_op_neg_32_ai(m68000_base_device* mc68kcpu); +static void m68k_op_neg_32_pi(m68000_base_device* mc68kcpu); +static void m68k_op_neg_32_pd(m68000_base_device* mc68kcpu); +static void m68k_op_neg_32_di(m68000_base_device* mc68kcpu); +static void m68k_op_neg_32_ix(m68000_base_device* mc68kcpu); +static void m68k_op_neg_32_aw(m68000_base_device* mc68kcpu); +static void m68k_op_neg_32_al(m68000_base_device* mc68kcpu); +static void m68k_op_negx_8_d(m68000_base_device* mc68kcpu); +static void m68k_op_negx_8_ai(m68000_base_device* mc68kcpu); +static void m68k_op_negx_8_pi(m68000_base_device* mc68kcpu); +static void m68k_op_negx_8_pi7(m68000_base_device* mc68kcpu); +static void m68k_op_negx_8_pd(m68000_base_device* mc68kcpu); +static void m68k_op_negx_8_pd7(m68000_base_device* mc68kcpu); +static void m68k_op_negx_8_di(m68000_base_device* mc68kcpu); +static void m68k_op_negx_8_ix(m68000_base_device* mc68kcpu); +static void m68k_op_negx_8_aw(m68000_base_device* mc68kcpu); +static void m68k_op_negx_8_al(m68000_base_device* mc68kcpu); +static void m68k_op_negx_16_d(m68000_base_device* mc68kcpu); +static void m68k_op_negx_16_ai(m68000_base_device* mc68kcpu); +static void m68k_op_negx_16_pi(m68000_base_device* mc68kcpu); +static void m68k_op_negx_16_pd(m68000_base_device* mc68kcpu); +static void m68k_op_negx_16_di(m68000_base_device* mc68kcpu); +static void m68k_op_negx_16_ix(m68000_base_device* mc68kcpu); +static void m68k_op_negx_16_aw(m68000_base_device* mc68kcpu); +static void m68k_op_negx_16_al(m68000_base_device* mc68kcpu); +static void m68k_op_negx_32_d(m68000_base_device* mc68kcpu); +static void m68k_op_negx_32_ai(m68000_base_device* mc68kcpu); +static void m68k_op_negx_32_pi(m68000_base_device* mc68kcpu); +static void m68k_op_negx_32_pd(m68000_base_device* mc68kcpu); +static void m68k_op_negx_32_di(m68000_base_device* mc68kcpu); +static void m68k_op_negx_32_ix(m68000_base_device* mc68kcpu); +static void m68k_op_negx_32_aw(m68000_base_device* mc68kcpu); +static void m68k_op_negx_32_al(m68000_base_device* mc68kcpu); +static void m68k_op_nop(m68000_base_device* mc68kcpu); +static void m68k_op_not_8_d(m68000_base_device* mc68kcpu); +static void m68k_op_not_8_ai(m68000_base_device* mc68kcpu); +static void m68k_op_not_8_pi(m68000_base_device* mc68kcpu); +static void m68k_op_not_8_pi7(m68000_base_device* mc68kcpu); +static void m68k_op_not_8_pd(m68000_base_device* mc68kcpu); +static void m68k_op_not_8_pd7(m68000_base_device* mc68kcpu); +static void m68k_op_not_8_di(m68000_base_device* mc68kcpu); +static void m68k_op_not_8_ix(m68000_base_device* mc68kcpu); +static void m68k_op_not_8_aw(m68000_base_device* mc68kcpu); +static void m68k_op_not_8_al(m68000_base_device* mc68kcpu); +static void m68k_op_not_16_d(m68000_base_device* mc68kcpu); +static void m68k_op_not_16_ai(m68000_base_device* mc68kcpu); +static void m68k_op_not_16_pi(m68000_base_device* mc68kcpu); +static void m68k_op_not_16_pd(m68000_base_device* mc68kcpu); +static void m68k_op_not_16_di(m68000_base_device* mc68kcpu); +static void m68k_op_not_16_ix(m68000_base_device* mc68kcpu); +static void m68k_op_not_16_aw(m68000_base_device* mc68kcpu); +static void m68k_op_not_16_al(m68000_base_device* mc68kcpu); +static void m68k_op_not_32_d(m68000_base_device* mc68kcpu); +static void m68k_op_not_32_ai(m68000_base_device* mc68kcpu); +static void m68k_op_not_32_pi(m68000_base_device* mc68kcpu); +static void m68k_op_not_32_pd(m68000_base_device* mc68kcpu); +static void m68k_op_not_32_di(m68000_base_device* mc68kcpu); +static void m68k_op_not_32_ix(m68000_base_device* mc68kcpu); +static void m68k_op_not_32_aw(m68000_base_device* mc68kcpu); +static void m68k_op_not_32_al(m68000_base_device* mc68kcpu); +static void m68k_op_or_8_er_d(m68000_base_device* mc68kcpu); +static void m68k_op_or_8_er_ai(m68000_base_device* mc68kcpu); +static void m68k_op_or_8_er_pi(m68000_base_device* mc68kcpu); +static void m68k_op_or_8_er_pi7(m68000_base_device* mc68kcpu); +static void m68k_op_or_8_er_pd(m68000_base_device* mc68kcpu); +static void m68k_op_or_8_er_pd7(m68000_base_device* mc68kcpu); +static void m68k_op_or_8_er_di(m68000_base_device* mc68kcpu); +static void m68k_op_or_8_er_ix(m68000_base_device* mc68kcpu); +static void m68k_op_or_8_er_aw(m68000_base_device* mc68kcpu); +static void m68k_op_or_8_er_al(m68000_base_device* mc68kcpu); +static void m68k_op_or_8_er_pcdi(m68000_base_device* mc68kcpu); +static void m68k_op_or_8_er_pcix(m68000_base_device* mc68kcpu); +static void m68k_op_or_8_er_i(m68000_base_device* mc68kcpu); +static void m68k_op_or_16_er_d(m68000_base_device* mc68kcpu); +static void m68k_op_or_16_er_ai(m68000_base_device* mc68kcpu); +static void m68k_op_or_16_er_pi(m68000_base_device* mc68kcpu); +static void m68k_op_or_16_er_pd(m68000_base_device* mc68kcpu); +static void m68k_op_or_16_er_di(m68000_base_device* mc68kcpu); +static void m68k_op_or_16_er_ix(m68000_base_device* mc68kcpu); +static void m68k_op_or_16_er_aw(m68000_base_device* mc68kcpu); +static void m68k_op_or_16_er_al(m68000_base_device* mc68kcpu); +static void m68k_op_or_16_er_pcdi(m68000_base_device* mc68kcpu); +static void m68k_op_or_16_er_pcix(m68000_base_device* mc68kcpu); +static void m68k_op_or_16_er_i(m68000_base_device* mc68kcpu); +static void m68k_op_or_32_er_d(m68000_base_device* mc68kcpu); +static void m68k_op_or_32_er_ai(m68000_base_device* mc68kcpu); +static void m68k_op_or_32_er_pi(m68000_base_device* mc68kcpu); +static void m68k_op_or_32_er_pd(m68000_base_device* mc68kcpu); +static void m68k_op_or_32_er_di(m68000_base_device* mc68kcpu); +static void m68k_op_or_32_er_ix(m68000_base_device* mc68kcpu); +static void m68k_op_or_32_er_aw(m68000_base_device* mc68kcpu); +static void m68k_op_or_32_er_al(m68000_base_device* mc68kcpu); +static void m68k_op_or_32_er_pcdi(m68000_base_device* mc68kcpu); +static void m68k_op_or_32_er_pcix(m68000_base_device* mc68kcpu); +static void m68k_op_or_32_er_i(m68000_base_device* mc68kcpu); +static void m68k_op_or_8_re_ai(m68000_base_device* mc68kcpu); +static void m68k_op_or_8_re_pi(m68000_base_device* mc68kcpu); +static void m68k_op_or_8_re_pi7(m68000_base_device* mc68kcpu); +static void m68k_op_or_8_re_pd(m68000_base_device* mc68kcpu); +static void m68k_op_or_8_re_pd7(m68000_base_device* mc68kcpu); +static void m68k_op_or_8_re_di(m68000_base_device* mc68kcpu); +static void m68k_op_or_8_re_ix(m68000_base_device* mc68kcpu); +static void m68k_op_or_8_re_aw(m68000_base_device* mc68kcpu); +static void m68k_op_or_8_re_al(m68000_base_device* mc68kcpu); +static void m68k_op_or_16_re_ai(m68000_base_device* mc68kcpu); +static void m68k_op_or_16_re_pi(m68000_base_device* mc68kcpu); +static void m68k_op_or_16_re_pd(m68000_base_device* mc68kcpu); +static void m68k_op_or_16_re_di(m68000_base_device* mc68kcpu); +static void m68k_op_or_16_re_ix(m68000_base_device* mc68kcpu); +static void m68k_op_or_16_re_aw(m68000_base_device* mc68kcpu); +static void m68k_op_or_16_re_al(m68000_base_device* mc68kcpu); +static void m68k_op_or_32_re_ai(m68000_base_device* mc68kcpu); +static void m68k_op_or_32_re_pi(m68000_base_device* mc68kcpu); +static void m68k_op_or_32_re_pd(m68000_base_device* mc68kcpu); +static void m68k_op_or_32_re_di(m68000_base_device* mc68kcpu); +static void m68k_op_or_32_re_ix(m68000_base_device* mc68kcpu); +static void m68k_op_or_32_re_aw(m68000_base_device* mc68kcpu); +static void m68k_op_or_32_re_al(m68000_base_device* mc68kcpu); +static void m68k_op_ori_8_d(m68000_base_device* mc68kcpu); +static void m68k_op_ori_8_ai(m68000_base_device* mc68kcpu); +static void m68k_op_ori_8_pi(m68000_base_device* mc68kcpu); +static void m68k_op_ori_8_pi7(m68000_base_device* mc68kcpu); +static void m68k_op_ori_8_pd(m68000_base_device* mc68kcpu); +static void m68k_op_ori_8_pd7(m68000_base_device* mc68kcpu); +static void m68k_op_ori_8_di(m68000_base_device* mc68kcpu); +static void m68k_op_ori_8_ix(m68000_base_device* mc68kcpu); +static void m68k_op_ori_8_aw(m68000_base_device* mc68kcpu); +static void m68k_op_ori_8_al(m68000_base_device* mc68kcpu); +static void m68k_op_ori_16_d(m68000_base_device* mc68kcpu); +static void m68k_op_ori_16_ai(m68000_base_device* mc68kcpu); +static void m68k_op_ori_16_pi(m68000_base_device* mc68kcpu); +static void m68k_op_ori_16_pd(m68000_base_device* mc68kcpu); +static void m68k_op_ori_16_di(m68000_base_device* mc68kcpu); +static void m68k_op_ori_16_ix(m68000_base_device* mc68kcpu); +static void m68k_op_ori_16_aw(m68000_base_device* mc68kcpu); +static void m68k_op_ori_16_al(m68000_base_device* mc68kcpu); +static void m68k_op_ori_32_d(m68000_base_device* mc68kcpu); +static void m68k_op_ori_32_ai(m68000_base_device* mc68kcpu); +static void m68k_op_ori_32_pi(m68000_base_device* mc68kcpu); +static void m68k_op_ori_32_pd(m68000_base_device* mc68kcpu); +static void m68k_op_ori_32_di(m68000_base_device* mc68kcpu); +static void m68k_op_ori_32_ix(m68000_base_device* mc68kcpu); +static void m68k_op_ori_32_aw(m68000_base_device* mc68kcpu); +static void m68k_op_ori_32_al(m68000_base_device* mc68kcpu); +static void m68k_op_ori_16_toc(m68000_base_device* mc68kcpu); +static void m68k_op_ori_16_tos(m68000_base_device* mc68kcpu); +static void m68k_op_pack_16_rr(m68000_base_device* mc68kcpu); +static void m68k_op_pack_16_mm_ax7(m68000_base_device* mc68kcpu); +static void m68k_op_pack_16_mm_ay7(m68000_base_device* mc68kcpu); +static void m68k_op_pack_16_mm_axy7(m68000_base_device* mc68kcpu); +static void m68k_op_pack_16_mm(m68000_base_device* mc68kcpu); +static void m68k_op_pea_32_ai(m68000_base_device* mc68kcpu); +static void m68k_op_pea_32_di(m68000_base_device* mc68kcpu); +static void m68k_op_pea_32_ix(m68000_base_device* mc68kcpu); +static void m68k_op_pea_32_aw(m68000_base_device* mc68kcpu); +static void m68k_op_pea_32_al(m68000_base_device* mc68kcpu); +static void m68k_op_pea_32_pcdi(m68000_base_device* mc68kcpu); +static void m68k_op_pea_32_pcix(m68000_base_device* mc68kcpu); +static void m68k_op_pflusha_32(m68000_base_device* mc68kcpu); +static void m68k_op_pflushan_32(m68000_base_device* mc68kcpu); +static void m68k_op_pmmu_32(m68000_base_device* mc68kcpu); +static void m68k_op_ptest_32(m68000_base_device* mc68kcpu); +static void m68k_op_reset(m68000_base_device* mc68kcpu); +static void m68k_op_ror_8_s(m68000_base_device* mc68kcpu); +static void m68k_op_ror_16_s(m68000_base_device* mc68kcpu); +static void m68k_op_ror_32_s(m68000_base_device* mc68kcpu); +static void m68k_op_ror_8_r(m68000_base_device* mc68kcpu); +static void m68k_op_ror_16_r(m68000_base_device* mc68kcpu); +static void m68k_op_ror_32_r(m68000_base_device* mc68kcpu); +static void m68k_op_ror_16_ai(m68000_base_device* mc68kcpu); +static void m68k_op_ror_16_pi(m68000_base_device* mc68kcpu); +static void m68k_op_ror_16_pd(m68000_base_device* mc68kcpu); +static void m68k_op_ror_16_di(m68000_base_device* mc68kcpu); +static void m68k_op_ror_16_ix(m68000_base_device* mc68kcpu); +static void m68k_op_ror_16_aw(m68000_base_device* mc68kcpu); +static void m68k_op_ror_16_al(m68000_base_device* mc68kcpu); +static void m68k_op_rol_8_s(m68000_base_device* mc68kcpu); +static void m68k_op_rol_16_s(m68000_base_device* mc68kcpu); +static void m68k_op_rol_32_s(m68000_base_device* mc68kcpu); +static void m68k_op_rol_8_r(m68000_base_device* mc68kcpu); +static void m68k_op_rol_16_r(m68000_base_device* mc68kcpu); +static void m68k_op_rol_32_r(m68000_base_device* mc68kcpu); +static void m68k_op_rol_16_ai(m68000_base_device* mc68kcpu); +static void m68k_op_rol_16_pi(m68000_base_device* mc68kcpu); +static void m68k_op_rol_16_pd(m68000_base_device* mc68kcpu); +static void m68k_op_rol_16_di(m68000_base_device* mc68kcpu); +static void m68k_op_rol_16_ix(m68000_base_device* mc68kcpu); +static void m68k_op_rol_16_aw(m68000_base_device* mc68kcpu); +static void m68k_op_rol_16_al(m68000_base_device* mc68kcpu); +static void m68k_op_roxr_8_s(m68000_base_device* mc68kcpu); +static void m68k_op_roxr_16_s(m68000_base_device* mc68kcpu); +static void m68k_op_roxr_32_s(m68000_base_device* mc68kcpu); +static void m68k_op_roxr_8_r(m68000_base_device* mc68kcpu); +static void m68k_op_roxr_16_r(m68000_base_device* mc68kcpu); +static void m68k_op_roxr_32_r(m68000_base_device* mc68kcpu); +static void m68k_op_roxr_16_ai(m68000_base_device* mc68kcpu); +static void m68k_op_roxr_16_pi(m68000_base_device* mc68kcpu); +static void m68k_op_roxr_16_pd(m68000_base_device* mc68kcpu); +static void m68k_op_roxr_16_di(m68000_base_device* mc68kcpu); +static void m68k_op_roxr_16_ix(m68000_base_device* mc68kcpu); +static void m68k_op_roxr_16_aw(m68000_base_device* mc68kcpu); +static void m68k_op_roxr_16_al(m68000_base_device* mc68kcpu); +static void m68k_op_roxl_8_s(m68000_base_device* mc68kcpu); +static void m68k_op_roxl_16_s(m68000_base_device* mc68kcpu); +static void m68k_op_roxl_32_s(m68000_base_device* mc68kcpu); +static void m68k_op_roxl_8_r(m68000_base_device* mc68kcpu); +static void m68k_op_roxl_16_r(m68000_base_device* mc68kcpu); +static void m68k_op_roxl_32_r(m68000_base_device* mc68kcpu); +static void m68k_op_roxl_16_ai(m68000_base_device* mc68kcpu); +static void m68k_op_roxl_16_pi(m68000_base_device* mc68kcpu); +static void m68k_op_roxl_16_pd(m68000_base_device* mc68kcpu); +static void m68k_op_roxl_16_di(m68000_base_device* mc68kcpu); +static void m68k_op_roxl_16_ix(m68000_base_device* mc68kcpu); +static void m68k_op_roxl_16_aw(m68000_base_device* mc68kcpu); +static void m68k_op_roxl_16_al(m68000_base_device* mc68kcpu); +static void m68k_op_rtd_32(m68000_base_device* mc68kcpu); +static void m68k_op_rte_32(m68000_base_device* mc68kcpu); +static void m68k_op_rtm_32(m68000_base_device* mc68kcpu); +static void m68k_op_rtr_32(m68000_base_device* mc68kcpu); +static void m68k_op_rts_32(m68000_base_device* mc68kcpu); +static void m68k_op_sbcd_8_rr(m68000_base_device* mc68kcpu); +static void m68k_op_sbcd_8_mm_ax7(m68000_base_device* mc68kcpu); +static void m68k_op_sbcd_8_mm_ay7(m68000_base_device* mc68kcpu); +static void m68k_op_sbcd_8_mm_axy7(m68000_base_device* mc68kcpu); +static void m68k_op_sbcd_8_mm(m68000_base_device* mc68kcpu); +static void m68k_op_st_8_d(m68000_base_device* mc68kcpu); +static void m68k_op_st_8_ai(m68000_base_device* mc68kcpu); +static void m68k_op_st_8_pi(m68000_base_device* mc68kcpu); +static void m68k_op_st_8_pi7(m68000_base_device* mc68kcpu); +static void m68k_op_st_8_pd(m68000_base_device* mc68kcpu); +static void m68k_op_st_8_pd7(m68000_base_device* mc68kcpu); +static void m68k_op_st_8_di(m68000_base_device* mc68kcpu); +static void m68k_op_st_8_ix(m68000_base_device* mc68kcpu); +static void m68k_op_st_8_aw(m68000_base_device* mc68kcpu); +static void m68k_op_st_8_al(m68000_base_device* mc68kcpu); +static void m68k_op_sf_8_d(m68000_base_device* mc68kcpu); +static void m68k_op_sf_8_ai(m68000_base_device* mc68kcpu); +static void m68k_op_sf_8_pi(m68000_base_device* mc68kcpu); +static void m68k_op_sf_8_pi7(m68000_base_device* mc68kcpu); +static void m68k_op_sf_8_pd(m68000_base_device* mc68kcpu); +static void m68k_op_sf_8_pd7(m68000_base_device* mc68kcpu); +static void m68k_op_sf_8_di(m68000_base_device* mc68kcpu); +static void m68k_op_sf_8_ix(m68000_base_device* mc68kcpu); +static void m68k_op_sf_8_aw(m68000_base_device* mc68kcpu); +static void m68k_op_sf_8_al(m68000_base_device* mc68kcpu); +static void m68k_op_shi_8_d(m68000_base_device* mc68kcpu); +static void m68k_op_sls_8_d(m68000_base_device* mc68kcpu); +static void m68k_op_scc_8_d(m68000_base_device* mc68kcpu); +static void m68k_op_scs_8_d(m68000_base_device* mc68kcpu); +static void m68k_op_sne_8_d(m68000_base_device* mc68kcpu); +static void m68k_op_seq_8_d(m68000_base_device* mc68kcpu); +static void m68k_op_svc_8_d(m68000_base_device* mc68kcpu); +static void m68k_op_svs_8_d(m68000_base_device* mc68kcpu); +static void m68k_op_spl_8_d(m68000_base_device* mc68kcpu); +static void m68k_op_smi_8_d(m68000_base_device* mc68kcpu); +static void m68k_op_sge_8_d(m68000_base_device* mc68kcpu); +static void m68k_op_slt_8_d(m68000_base_device* mc68kcpu); +static void m68k_op_sgt_8_d(m68000_base_device* mc68kcpu); +static void m68k_op_sle_8_d(m68000_base_device* mc68kcpu); +static void m68k_op_shi_8_ai(m68000_base_device* mc68kcpu); +static void m68k_op_shi_8_pi(m68000_base_device* mc68kcpu); +static void m68k_op_shi_8_pi7(m68000_base_device* mc68kcpu); +static void m68k_op_shi_8_pd(m68000_base_device* mc68kcpu); +static void m68k_op_shi_8_pd7(m68000_base_device* mc68kcpu); +static void m68k_op_shi_8_di(m68000_base_device* mc68kcpu); +static void m68k_op_shi_8_ix(m68000_base_device* mc68kcpu); +static void m68k_op_shi_8_aw(m68000_base_device* mc68kcpu); +static void m68k_op_shi_8_al(m68000_base_device* mc68kcpu); +static void m68k_op_sls_8_ai(m68000_base_device* mc68kcpu); +static void m68k_op_sls_8_pi(m68000_base_device* mc68kcpu); +static void m68k_op_sls_8_pi7(m68000_base_device* mc68kcpu); +static void m68k_op_sls_8_pd(m68000_base_device* mc68kcpu); +static void m68k_op_sls_8_pd7(m68000_base_device* mc68kcpu); +static void m68k_op_sls_8_di(m68000_base_device* mc68kcpu); +static void m68k_op_sls_8_ix(m68000_base_device* mc68kcpu); +static void m68k_op_sls_8_aw(m68000_base_device* mc68kcpu); +static void m68k_op_sls_8_al(m68000_base_device* mc68kcpu); +static void m68k_op_scc_8_ai(m68000_base_device* mc68kcpu); +static void m68k_op_scc_8_pi(m68000_base_device* mc68kcpu); +static void m68k_op_scc_8_pi7(m68000_base_device* mc68kcpu); +static void m68k_op_scc_8_pd(m68000_base_device* mc68kcpu); +static void m68k_op_scc_8_pd7(m68000_base_device* mc68kcpu); +static void m68k_op_scc_8_di(m68000_base_device* mc68kcpu); +static void m68k_op_scc_8_ix(m68000_base_device* mc68kcpu); +static void m68k_op_scc_8_aw(m68000_base_device* mc68kcpu); +static void m68k_op_scc_8_al(m68000_base_device* mc68kcpu); +static void m68k_op_scs_8_ai(m68000_base_device* mc68kcpu); +static void m68k_op_scs_8_pi(m68000_base_device* mc68kcpu); +static void m68k_op_scs_8_pi7(m68000_base_device* mc68kcpu); +static void m68k_op_scs_8_pd(m68000_base_device* mc68kcpu); +static void m68k_op_scs_8_pd7(m68000_base_device* mc68kcpu); +static void m68k_op_scs_8_di(m68000_base_device* mc68kcpu); +static void m68k_op_scs_8_ix(m68000_base_device* mc68kcpu); +static void m68k_op_scs_8_aw(m68000_base_device* mc68kcpu); +static void m68k_op_scs_8_al(m68000_base_device* mc68kcpu); +static void m68k_op_sne_8_ai(m68000_base_device* mc68kcpu); +static void m68k_op_sne_8_pi(m68000_base_device* mc68kcpu); +static void m68k_op_sne_8_pi7(m68000_base_device* mc68kcpu); +static void m68k_op_sne_8_pd(m68000_base_device* mc68kcpu); +static void m68k_op_sne_8_pd7(m68000_base_device* mc68kcpu); +static void m68k_op_sne_8_di(m68000_base_device* mc68kcpu); +static void m68k_op_sne_8_ix(m68000_base_device* mc68kcpu); +static void m68k_op_sne_8_aw(m68000_base_device* mc68kcpu); +static void m68k_op_sne_8_al(m68000_base_device* mc68kcpu); +static void m68k_op_seq_8_ai(m68000_base_device* mc68kcpu); +static void m68k_op_seq_8_pi(m68000_base_device* mc68kcpu); +static void m68k_op_seq_8_pi7(m68000_base_device* mc68kcpu); +static void m68k_op_seq_8_pd(m68000_base_device* mc68kcpu); +static void m68k_op_seq_8_pd7(m68000_base_device* mc68kcpu); +static void m68k_op_seq_8_di(m68000_base_device* mc68kcpu); +static void m68k_op_seq_8_ix(m68000_base_device* mc68kcpu); +static void m68k_op_seq_8_aw(m68000_base_device* mc68kcpu); +static void m68k_op_seq_8_al(m68000_base_device* mc68kcpu); +static void m68k_op_svc_8_ai(m68000_base_device* mc68kcpu); +static void m68k_op_svc_8_pi(m68000_base_device* mc68kcpu); +static void m68k_op_svc_8_pi7(m68000_base_device* mc68kcpu); +static void m68k_op_svc_8_pd(m68000_base_device* mc68kcpu); +static void m68k_op_svc_8_pd7(m68000_base_device* mc68kcpu); +static void m68k_op_svc_8_di(m68000_base_device* mc68kcpu); +static void m68k_op_svc_8_ix(m68000_base_device* mc68kcpu); +static void m68k_op_svc_8_aw(m68000_base_device* mc68kcpu); +static void m68k_op_svc_8_al(m68000_base_device* mc68kcpu); +static void m68k_op_svs_8_ai(m68000_base_device* mc68kcpu); +static void m68k_op_svs_8_pi(m68000_base_device* mc68kcpu); +static void m68k_op_svs_8_pi7(m68000_base_device* mc68kcpu); +static void m68k_op_svs_8_pd(m68000_base_device* mc68kcpu); +static void m68k_op_svs_8_pd7(m68000_base_device* mc68kcpu); +static void m68k_op_svs_8_di(m68000_base_device* mc68kcpu); +static void m68k_op_svs_8_ix(m68000_base_device* mc68kcpu); +static void m68k_op_svs_8_aw(m68000_base_device* mc68kcpu); +static void m68k_op_svs_8_al(m68000_base_device* mc68kcpu); +static void m68k_op_spl_8_ai(m68000_base_device* mc68kcpu); +static void m68k_op_spl_8_pi(m68000_base_device* mc68kcpu); +static void m68k_op_spl_8_pi7(m68000_base_device* mc68kcpu); +static void m68k_op_spl_8_pd(m68000_base_device* mc68kcpu); +static void m68k_op_spl_8_pd7(m68000_base_device* mc68kcpu); +static void m68k_op_spl_8_di(m68000_base_device* mc68kcpu); +static void m68k_op_spl_8_ix(m68000_base_device* mc68kcpu); +static void m68k_op_spl_8_aw(m68000_base_device* mc68kcpu); +static void m68k_op_spl_8_al(m68000_base_device* mc68kcpu); +static void m68k_op_smi_8_ai(m68000_base_device* mc68kcpu); +static void m68k_op_smi_8_pi(m68000_base_device* mc68kcpu); +static void m68k_op_smi_8_pi7(m68000_base_device* mc68kcpu); +static void m68k_op_smi_8_pd(m68000_base_device* mc68kcpu); +static void m68k_op_smi_8_pd7(m68000_base_device* mc68kcpu); +static void m68k_op_smi_8_di(m68000_base_device* mc68kcpu); +static void m68k_op_smi_8_ix(m68000_base_device* mc68kcpu); +static void m68k_op_smi_8_aw(m68000_base_device* mc68kcpu); +static void m68k_op_smi_8_al(m68000_base_device* mc68kcpu); +static void m68k_op_sge_8_ai(m68000_base_device* mc68kcpu); +static void m68k_op_sge_8_pi(m68000_base_device* mc68kcpu); +static void m68k_op_sge_8_pi7(m68000_base_device* mc68kcpu); +static void m68k_op_sge_8_pd(m68000_base_device* mc68kcpu); +static void m68k_op_sge_8_pd7(m68000_base_device* mc68kcpu); +static void m68k_op_sge_8_di(m68000_base_device* mc68kcpu); +static void m68k_op_sge_8_ix(m68000_base_device* mc68kcpu); +static void m68k_op_sge_8_aw(m68000_base_device* mc68kcpu); +static void m68k_op_sge_8_al(m68000_base_device* mc68kcpu); +static void m68k_op_slt_8_ai(m68000_base_device* mc68kcpu); +static void m68k_op_slt_8_pi(m68000_base_device* mc68kcpu); +static void m68k_op_slt_8_pi7(m68000_base_device* mc68kcpu); +static void m68k_op_slt_8_pd(m68000_base_device* mc68kcpu); +static void m68k_op_slt_8_pd7(m68000_base_device* mc68kcpu); +static void m68k_op_slt_8_di(m68000_base_device* mc68kcpu); +static void m68k_op_slt_8_ix(m68000_base_device* mc68kcpu); +static void m68k_op_slt_8_aw(m68000_base_device* mc68kcpu); +static void m68k_op_slt_8_al(m68000_base_device* mc68kcpu); +static void m68k_op_sgt_8_ai(m68000_base_device* mc68kcpu); +static void m68k_op_sgt_8_pi(m68000_base_device* mc68kcpu); +static void m68k_op_sgt_8_pi7(m68000_base_device* mc68kcpu); +static void m68k_op_sgt_8_pd(m68000_base_device* mc68kcpu); +static void m68k_op_sgt_8_pd7(m68000_base_device* mc68kcpu); +static void m68k_op_sgt_8_di(m68000_base_device* mc68kcpu); +static void m68k_op_sgt_8_ix(m68000_base_device* mc68kcpu); +static void m68k_op_sgt_8_aw(m68000_base_device* mc68kcpu); +static void m68k_op_sgt_8_al(m68000_base_device* mc68kcpu); +static void m68k_op_sle_8_ai(m68000_base_device* mc68kcpu); +static void m68k_op_sle_8_pi(m68000_base_device* mc68kcpu); +static void m68k_op_sle_8_pi7(m68000_base_device* mc68kcpu); +static void m68k_op_sle_8_pd(m68000_base_device* mc68kcpu); +static void m68k_op_sle_8_pd7(m68000_base_device* mc68kcpu); +static void m68k_op_sle_8_di(m68000_base_device* mc68kcpu); +static void m68k_op_sle_8_ix(m68000_base_device* mc68kcpu); +static void m68k_op_sle_8_aw(m68000_base_device* mc68kcpu); +static void m68k_op_sle_8_al(m68000_base_device* mc68kcpu); +static void m68k_op_stop(m68000_base_device* mc68kcpu); +static void m68k_op_sub_8_er_d(m68000_base_device* mc68kcpu); +static void m68k_op_sub_8_er_ai(m68000_base_device* mc68kcpu); +static void m68k_op_sub_8_er_pi(m68000_base_device* mc68kcpu); +static void m68k_op_sub_8_er_pi7(m68000_base_device* mc68kcpu); +static void m68k_op_sub_8_er_pd(m68000_base_device* mc68kcpu); +static void m68k_op_sub_8_er_pd7(m68000_base_device* mc68kcpu); +static void m68k_op_sub_8_er_di(m68000_base_device* mc68kcpu); +static void m68k_op_sub_8_er_ix(m68000_base_device* mc68kcpu); +static void m68k_op_sub_8_er_aw(m68000_base_device* mc68kcpu); +static void m68k_op_sub_8_er_al(m68000_base_device* mc68kcpu); +static void m68k_op_sub_8_er_pcdi(m68000_base_device* mc68kcpu); +static void m68k_op_sub_8_er_pcix(m68000_base_device* mc68kcpu); +static void m68k_op_sub_8_er_i(m68000_base_device* mc68kcpu); +static void m68k_op_sub_16_er_d(m68000_base_device* mc68kcpu); +static void m68k_op_sub_16_er_a(m68000_base_device* mc68kcpu); +static void m68k_op_sub_16_er_ai(m68000_base_device* mc68kcpu); +static void m68k_op_sub_16_er_pi(m68000_base_device* mc68kcpu); +static void m68k_op_sub_16_er_pd(m68000_base_device* mc68kcpu); +static void m68k_op_sub_16_er_di(m68000_base_device* mc68kcpu); +static void m68k_op_sub_16_er_ix(m68000_base_device* mc68kcpu); +static void m68k_op_sub_16_er_aw(m68000_base_device* mc68kcpu); +static void m68k_op_sub_16_er_al(m68000_base_device* mc68kcpu); +static void m68k_op_sub_16_er_pcdi(m68000_base_device* mc68kcpu); +static void m68k_op_sub_16_er_pcix(m68000_base_device* mc68kcpu); +static void m68k_op_sub_16_er_i(m68000_base_device* mc68kcpu); +static void m68k_op_sub_32_er_d(m68000_base_device* mc68kcpu); +static void m68k_op_sub_32_er_a(m68000_base_device* mc68kcpu); +static void m68k_op_sub_32_er_ai(m68000_base_device* mc68kcpu); +static void m68k_op_sub_32_er_pi(m68000_base_device* mc68kcpu); +static void m68k_op_sub_32_er_pd(m68000_base_device* mc68kcpu); +static void m68k_op_sub_32_er_di(m68000_base_device* mc68kcpu); +static void m68k_op_sub_32_er_ix(m68000_base_device* mc68kcpu); +static void m68k_op_sub_32_er_aw(m68000_base_device* mc68kcpu); +static void m68k_op_sub_32_er_al(m68000_base_device* mc68kcpu); +static void m68k_op_sub_32_er_pcdi(m68000_base_device* mc68kcpu); +static void m68k_op_sub_32_er_pcix(m68000_base_device* mc68kcpu); +static void m68k_op_sub_32_er_i(m68000_base_device* mc68kcpu); +static void m68k_op_sub_8_re_ai(m68000_base_device* mc68kcpu); +static void m68k_op_sub_8_re_pi(m68000_base_device* mc68kcpu); +static void m68k_op_sub_8_re_pi7(m68000_base_device* mc68kcpu); +static void m68k_op_sub_8_re_pd(m68000_base_device* mc68kcpu); +static void m68k_op_sub_8_re_pd7(m68000_base_device* mc68kcpu); +static void m68k_op_sub_8_re_di(m68000_base_device* mc68kcpu); +static void m68k_op_sub_8_re_ix(m68000_base_device* mc68kcpu); +static void m68k_op_sub_8_re_aw(m68000_base_device* mc68kcpu); +static void m68k_op_sub_8_re_al(m68000_base_device* mc68kcpu); +static void m68k_op_sub_16_re_ai(m68000_base_device* mc68kcpu); +static void m68k_op_sub_16_re_pi(m68000_base_device* mc68kcpu); +static void m68k_op_sub_16_re_pd(m68000_base_device* mc68kcpu); +static void m68k_op_sub_16_re_di(m68000_base_device* mc68kcpu); +static void m68k_op_sub_16_re_ix(m68000_base_device* mc68kcpu); +static void m68k_op_sub_16_re_aw(m68000_base_device* mc68kcpu); +static void m68k_op_sub_16_re_al(m68000_base_device* mc68kcpu); +static void m68k_op_sub_32_re_ai(m68000_base_device* mc68kcpu); +static void m68k_op_sub_32_re_pi(m68000_base_device* mc68kcpu); +static void m68k_op_sub_32_re_pd(m68000_base_device* mc68kcpu); +static void m68k_op_sub_32_re_di(m68000_base_device* mc68kcpu); +static void m68k_op_sub_32_re_ix(m68000_base_device* mc68kcpu); +static void m68k_op_sub_32_re_aw(m68000_base_device* mc68kcpu); +static void m68k_op_sub_32_re_al(m68000_base_device* mc68kcpu); +static void m68k_op_suba_16_d(m68000_base_device* mc68kcpu); +static void m68k_op_suba_16_a(m68000_base_device* mc68kcpu); +static void m68k_op_suba_16_ai(m68000_base_device* mc68kcpu); +static void m68k_op_suba_16_pi(m68000_base_device* mc68kcpu); +static void m68k_op_suba_16_pd(m68000_base_device* mc68kcpu); +static void m68k_op_suba_16_di(m68000_base_device* mc68kcpu); +static void m68k_op_suba_16_ix(m68000_base_device* mc68kcpu); +static void m68k_op_suba_16_aw(m68000_base_device* mc68kcpu); +static void m68k_op_suba_16_al(m68000_base_device* mc68kcpu); +static void m68k_op_suba_16_pcdi(m68000_base_device* mc68kcpu); +static void m68k_op_suba_16_pcix(m68000_base_device* mc68kcpu); +static void m68k_op_suba_16_i(m68000_base_device* mc68kcpu); +static void m68k_op_suba_32_d(m68000_base_device* mc68kcpu); +static void m68k_op_suba_32_a(m68000_base_device* mc68kcpu); +static void m68k_op_suba_32_ai(m68000_base_device* mc68kcpu); +static void m68k_op_suba_32_pi(m68000_base_device* mc68kcpu); +static void m68k_op_suba_32_pd(m68000_base_device* mc68kcpu); +static void m68k_op_suba_32_di(m68000_base_device* mc68kcpu); +static void m68k_op_suba_32_ix(m68000_base_device* mc68kcpu); +static void m68k_op_suba_32_aw(m68000_base_device* mc68kcpu); +static void m68k_op_suba_32_al(m68000_base_device* mc68kcpu); +static void m68k_op_suba_32_pcdi(m68000_base_device* mc68kcpu); +static void m68k_op_suba_32_pcix(m68000_base_device* mc68kcpu); +static void m68k_op_suba_32_i(m68000_base_device* mc68kcpu); +static void m68k_op_subi_8_d(m68000_base_device* mc68kcpu); +static void m68k_op_subi_8_ai(m68000_base_device* mc68kcpu); +static void m68k_op_subi_8_pi(m68000_base_device* mc68kcpu); +static void m68k_op_subi_8_pi7(m68000_base_device* mc68kcpu); +static void m68k_op_subi_8_pd(m68000_base_device* mc68kcpu); +static void m68k_op_subi_8_pd7(m68000_base_device* mc68kcpu); +static void m68k_op_subi_8_di(m68000_base_device* mc68kcpu); +static void m68k_op_subi_8_ix(m68000_base_device* mc68kcpu); +static void m68k_op_subi_8_aw(m68000_base_device* mc68kcpu); +static void m68k_op_subi_8_al(m68000_base_device* mc68kcpu); +static void m68k_op_subi_16_d(m68000_base_device* mc68kcpu); +static void m68k_op_subi_16_ai(m68000_base_device* mc68kcpu); +static void m68k_op_subi_16_pi(m68000_base_device* mc68kcpu); +static void m68k_op_subi_16_pd(m68000_base_device* mc68kcpu); +static void m68k_op_subi_16_di(m68000_base_device* mc68kcpu); +static void m68k_op_subi_16_ix(m68000_base_device* mc68kcpu); +static void m68k_op_subi_16_aw(m68000_base_device* mc68kcpu); +static void m68k_op_subi_16_al(m68000_base_device* mc68kcpu); +static void m68k_op_subi_32_d(m68000_base_device* mc68kcpu); +static void m68k_op_subi_32_ai(m68000_base_device* mc68kcpu); +static void m68k_op_subi_32_pi(m68000_base_device* mc68kcpu); +static void m68k_op_subi_32_pd(m68000_base_device* mc68kcpu); +static void m68k_op_subi_32_di(m68000_base_device* mc68kcpu); +static void m68k_op_subi_32_ix(m68000_base_device* mc68kcpu); +static void m68k_op_subi_32_aw(m68000_base_device* mc68kcpu); +static void m68k_op_subi_32_al(m68000_base_device* mc68kcpu); +static void m68k_op_subq_8_d(m68000_base_device* mc68kcpu); +static void m68k_op_subq_8_ai(m68000_base_device* mc68kcpu); +static void m68k_op_subq_8_pi(m68000_base_device* mc68kcpu); +static void m68k_op_subq_8_pi7(m68000_base_device* mc68kcpu); +static void m68k_op_subq_8_pd(m68000_base_device* mc68kcpu); +static void m68k_op_subq_8_pd7(m68000_base_device* mc68kcpu); +static void m68k_op_subq_8_di(m68000_base_device* mc68kcpu); +static void m68k_op_subq_8_ix(m68000_base_device* mc68kcpu); +static void m68k_op_subq_8_aw(m68000_base_device* mc68kcpu); +static void m68k_op_subq_8_al(m68000_base_device* mc68kcpu); +static void m68k_op_subq_16_d(m68000_base_device* mc68kcpu); +static void m68k_op_subq_16_a(m68000_base_device* mc68kcpu); +static void m68k_op_subq_16_ai(m68000_base_device* mc68kcpu); +static void m68k_op_subq_16_pi(m68000_base_device* mc68kcpu); +static void m68k_op_subq_16_pd(m68000_base_device* mc68kcpu); +static void m68k_op_subq_16_di(m68000_base_device* mc68kcpu); +static void m68k_op_subq_16_ix(m68000_base_device* mc68kcpu); +static void m68k_op_subq_16_aw(m68000_base_device* mc68kcpu); +static void m68k_op_subq_16_al(m68000_base_device* mc68kcpu); +static void m68k_op_subq_32_d(m68000_base_device* mc68kcpu); +static void m68k_op_subq_32_a(m68000_base_device* mc68kcpu); +static void m68k_op_subq_32_ai(m68000_base_device* mc68kcpu); +static void m68k_op_subq_32_pi(m68000_base_device* mc68kcpu); +static void m68k_op_subq_32_pd(m68000_base_device* mc68kcpu); +static void m68k_op_subq_32_di(m68000_base_device* mc68kcpu); +static void m68k_op_subq_32_ix(m68000_base_device* mc68kcpu); +static void m68k_op_subq_32_aw(m68000_base_device* mc68kcpu); +static void m68k_op_subq_32_al(m68000_base_device* mc68kcpu); +static void m68k_op_subx_8_rr(m68000_base_device* mc68kcpu); +static void m68k_op_subx_16_rr(m68000_base_device* mc68kcpu); +static void m68k_op_subx_32_rr(m68000_base_device* mc68kcpu); +static void m68k_op_subx_8_mm_ax7(m68000_base_device* mc68kcpu); +static void m68k_op_subx_8_mm_ay7(m68000_base_device* mc68kcpu); +static void m68k_op_subx_8_mm_axy7(m68000_base_device* mc68kcpu); +static void m68k_op_subx_8_mm(m68000_base_device* mc68kcpu); +static void m68k_op_subx_16_mm(m68000_base_device* mc68kcpu); +static void m68k_op_subx_32_mm(m68000_base_device* mc68kcpu); +static void m68k_op_swap_32(m68000_base_device* mc68kcpu); +static void m68k_op_tas_8_d(m68000_base_device* mc68kcpu); +static void m68k_op_tas_8_ai(m68000_base_device* mc68kcpu); +static void m68k_op_tas_8_pi(m68000_base_device* mc68kcpu); +static void m68k_op_tas_8_pi7(m68000_base_device* mc68kcpu); +static void m68k_op_tas_8_pd(m68000_base_device* mc68kcpu); +static void m68k_op_tas_8_pd7(m68000_base_device* mc68kcpu); +static void m68k_op_tas_8_di(m68000_base_device* mc68kcpu); +static void m68k_op_tas_8_ix(m68000_base_device* mc68kcpu); +static void m68k_op_tas_8_aw(m68000_base_device* mc68kcpu); +static void m68k_op_tas_8_al(m68000_base_device* mc68kcpu); +static void m68k_op_trap(m68000_base_device* mc68kcpu); +static void m68k_op_trapt(m68000_base_device* mc68kcpu); +static void m68k_op_trapt_16(m68000_base_device* mc68kcpu); +static void m68k_op_trapt_32(m68000_base_device* mc68kcpu); +static void m68k_op_trapf(m68000_base_device* mc68kcpu); +static void m68k_op_trapf_16(m68000_base_device* mc68kcpu); +static void m68k_op_trapf_32(m68000_base_device* mc68kcpu); +static void m68k_op_traphi(m68000_base_device* mc68kcpu); +static void m68k_op_trapls(m68000_base_device* mc68kcpu); +static void m68k_op_trapcc(m68000_base_device* mc68kcpu); +static void m68k_op_trapcs(m68000_base_device* mc68kcpu); +static void m68k_op_trapne(m68000_base_device* mc68kcpu); +static void m68k_op_trapeq(m68000_base_device* mc68kcpu); +static void m68k_op_trapvc(m68000_base_device* mc68kcpu); +static void m68k_op_trapvs(m68000_base_device* mc68kcpu); +static void m68k_op_trappl(m68000_base_device* mc68kcpu); +static void m68k_op_trapmi(m68000_base_device* mc68kcpu); +static void m68k_op_trapge(m68000_base_device* mc68kcpu); +static void m68k_op_traplt(m68000_base_device* mc68kcpu); +static void m68k_op_trapgt(m68000_base_device* mc68kcpu); +static void m68k_op_traple(m68000_base_device* mc68kcpu); +static void m68k_op_traphi_16(m68000_base_device* mc68kcpu); +static void m68k_op_trapls_16(m68000_base_device* mc68kcpu); +static void m68k_op_trapcc_16(m68000_base_device* mc68kcpu); +static void m68k_op_trapcs_16(m68000_base_device* mc68kcpu); +static void m68k_op_trapne_16(m68000_base_device* mc68kcpu); +static void m68k_op_trapeq_16(m68000_base_device* mc68kcpu); +static void m68k_op_trapvc_16(m68000_base_device* mc68kcpu); +static void m68k_op_trapvs_16(m68000_base_device* mc68kcpu); +static void m68k_op_trappl_16(m68000_base_device* mc68kcpu); +static void m68k_op_trapmi_16(m68000_base_device* mc68kcpu); +static void m68k_op_trapge_16(m68000_base_device* mc68kcpu); +static void m68k_op_traplt_16(m68000_base_device* mc68kcpu); +static void m68k_op_trapgt_16(m68000_base_device* mc68kcpu); +static void m68k_op_traple_16(m68000_base_device* mc68kcpu); +static void m68k_op_traphi_32(m68000_base_device* mc68kcpu); +static void m68k_op_trapls_32(m68000_base_device* mc68kcpu); +static void m68k_op_trapcc_32(m68000_base_device* mc68kcpu); +static void m68k_op_trapcs_32(m68000_base_device* mc68kcpu); +static void m68k_op_trapne_32(m68000_base_device* mc68kcpu); +static void m68k_op_trapeq_32(m68000_base_device* mc68kcpu); +static void m68k_op_trapvc_32(m68000_base_device* mc68kcpu); +static void m68k_op_trapvs_32(m68000_base_device* mc68kcpu); +static void m68k_op_trappl_32(m68000_base_device* mc68kcpu); +static void m68k_op_trapmi_32(m68000_base_device* mc68kcpu); +static void m68k_op_trapge_32(m68000_base_device* mc68kcpu); +static void m68k_op_traplt_32(m68000_base_device* mc68kcpu); +static void m68k_op_trapgt_32(m68000_base_device* mc68kcpu); +static void m68k_op_traple_32(m68000_base_device* mc68kcpu); +static void m68k_op_trapv(m68000_base_device* mc68kcpu); +static void m68k_op_tst_8_d(m68000_base_device* mc68kcpu); +static void m68k_op_tst_8_ai(m68000_base_device* mc68kcpu); +static void m68k_op_tst_8_pi(m68000_base_device* mc68kcpu); +static void m68k_op_tst_8_pi7(m68000_base_device* mc68kcpu); +static void m68k_op_tst_8_pd(m68000_base_device* mc68kcpu); +static void m68k_op_tst_8_pd7(m68000_base_device* mc68kcpu); +static void m68k_op_tst_8_di(m68000_base_device* mc68kcpu); +static void m68k_op_tst_8_ix(m68000_base_device* mc68kcpu); +static void m68k_op_tst_8_aw(m68000_base_device* mc68kcpu); +static void m68k_op_tst_8_al(m68000_base_device* mc68kcpu); +static void m68k_op_tst_8_pcdi(m68000_base_device* mc68kcpu); +static void m68k_op_tst_8_pcix(m68000_base_device* mc68kcpu); +static void m68k_op_tst_8_i(m68000_base_device* mc68kcpu); +static void m68k_op_tst_16_d(m68000_base_device* mc68kcpu); +static void m68k_op_tst_16_a(m68000_base_device* mc68kcpu); +static void m68k_op_tst_16_ai(m68000_base_device* mc68kcpu); +static void m68k_op_tst_16_pi(m68000_base_device* mc68kcpu); +static void m68k_op_tst_16_pd(m68000_base_device* mc68kcpu); +static void m68k_op_tst_16_di(m68000_base_device* mc68kcpu); +static void m68k_op_tst_16_ix(m68000_base_device* mc68kcpu); +static void m68k_op_tst_16_aw(m68000_base_device* mc68kcpu); +static void m68k_op_tst_16_al(m68000_base_device* mc68kcpu); +static void m68k_op_tst_16_pcdi(m68000_base_device* mc68kcpu); +static void m68k_op_tst_16_pcix(m68000_base_device* mc68kcpu); +static void m68k_op_tst_16_i(m68000_base_device* mc68kcpu); +static void m68k_op_tst_32_d(m68000_base_device* mc68kcpu); +static void m68k_op_tst_32_a(m68000_base_device* mc68kcpu); +static void m68k_op_tst_32_ai(m68000_base_device* mc68kcpu); +static void m68k_op_tst_32_pi(m68000_base_device* mc68kcpu); +static void m68k_op_tst_32_pd(m68000_base_device* mc68kcpu); +static void m68k_op_tst_32_di(m68000_base_device* mc68kcpu); +static void m68k_op_tst_32_ix(m68000_base_device* mc68kcpu); +static void m68k_op_tst_32_aw(m68000_base_device* mc68kcpu); +static void m68k_op_tst_32_al(m68000_base_device* mc68kcpu); +static void m68k_op_tst_32_pcdi(m68000_base_device* mc68kcpu); +static void m68k_op_tst_32_pcix(m68000_base_device* mc68kcpu); +static void m68k_op_tst_32_i(m68000_base_device* mc68kcpu); +static void m68k_op_unlk_32_a7(m68000_base_device* mc68kcpu); +static void m68k_op_unlk_32(m68000_base_device* mc68kcpu); +static void m68k_op_unpk_16_rr(m68000_base_device* mc68kcpu); +static void m68k_op_unpk_16_mm_ax7(m68000_base_device* mc68kcpu); +static void m68k_op_unpk_16_mm_ay7(m68000_base_device* mc68kcpu); +static void m68k_op_unpk_16_mm_axy7(m68000_base_device* mc68kcpu); +static void m68k_op_unpk_16_mm(m68000_base_device* mc68kcpu); +static void m68k_op_cinv_32(m68000_base_device* mc68kcpu); +static void m68k_op_cpush_32(m68000_base_device* mc68kcpu); +#else +/* Build the opcode handler table */ +void m68ki_build_opcode_table(void); + +extern void (*m68ki_instruction_jump_table[][0x10000])(m68000_base_device *m68k); /* opcode handler jump table */ +extern unsigned char m68ki_cycles[][0x10000]; + + +/* ======================================================================== */ +/* ============================== END OF FILE ============================= */ +/* ======================================================================== */ + + +#endif diff -r f23e70fb6607 -r 2c1c88cd1a3f nuklear_ui/font_android.c --- a/nuklear_ui/font_android.c Sat Apr 18 23:14:43 2020 -0700 +++ b/nuklear_ui/font_android.c Sun Apr 19 00:59:09 2020 -0700 @@ -2,6 +2,7 @@ #include #include #include +#include #include "../util.h" #include "../paths.h" #include "sfnt.h" @@ -186,9 +187,9 @@ } error: //try some likely suspects if we failed to parse fonts.xml or failed to find the indicated font - ret = try_load_font("/system/fonts/Roboto-Regular.ttf", size_out); + ret = try_load_font(strdup("/system/fonts/Roboto-Regular.ttf"), size_out); if (!ret) { - ret = try_load_font("/system/fonts/DroidSans.ttf", size_out); + ret = try_load_font(strdup("/system/fonts/DroidSans.ttf"), size_out); } return ret; } diff -r f23e70fb6607 -r 2c1c88cd1a3f nuklear_ui/nuklear.h --- a/nuklear_ui/nuklear.h Sat Apr 18 23:14:43 2020 -0700 +++ b/nuklear_ui/nuklear.h Sun Apr 19 00:59:09 2020 -0700 @@ -5560,23 +5560,35 @@ { /* 32-Bit MurmurHash3: https://code.google.com/p/smhasher/wiki/MurmurHash3*/ #define NK_ROTL(x,r) ((x) << (r) | ((x) >> (32 - r))) - union {const nk_uint *i; const nk_byte *b;} conv = {0}; const nk_byte *data = (const nk_byte*)key; const int nblocks = len/4; nk_uint h1 = seed; const nk_uint c1 = 0xcc9e2d51; const nk_uint c2 = 0x1b873593; const nk_byte *tail; +#if defined(X86_32) || defined(X86_64) const nk_uint *blocks; +#else + const nk_byte *blocks; +#endif nk_uint k1; int i; /* body */ if (!key) return 0; - conv.b = (data + nblocks*4); - blocks = (const nk_uint*)conv.i; - for (i = -nblocks; i; ++i) { - k1 = blocks[i]; +#if defined(X86_32) || defined(X86_64) + blocks = (const nk_uint*)(data + nblocks*4); + for (i = -nblocks; i; ++i) { + k1 = blocks[i]; +#else + blocks = data + nblocks*4; + for (i = -4 * nblocks; i; ++i) { + k1 = blocks[i++] << 24; + k1 |= blocks[i++] << 16; + k1 |= blocks[i++] << 8; + k1 |= blocks[i] << 16; +#endif + k1 *= c1; k1 = NK_ROTL(k1,15); k1 *= c2; diff -r f23e70fb6607 -r 2c1c88cd1a3f sega_mapper.c --- a/sega_mapper.c Sat Apr 18 23:14:43 2020 -0700 +++ b/sega_mapper.c Sun Apr 19 00:59:09 2020 -0700 @@ -119,8 +119,8 @@ } else if (gen->mapper_type == MAPPER_SEGA) { void *new_ptr = gen->cart + 0x40000*value; if (context->mem_pointers[gen->mapper_start_index + address] != new_ptr) { - m68k_invalidate_code_range(gen->m68k, address * 0x80000, (address + 1) * 0x80000); context->mem_pointers[gen->mapper_start_index + address] = new_ptr; + m68k_invalidate_code_range(gen->m68k, address * 0x80000, (address + 1) * 0x80000); } } return context; diff -r f23e70fb6607 -r 2c1c88cd1a3f sms.c --- a/sms.c Sat Apr 18 23:14:43 2020 -0700 +++ b/sms.c Sun Apr 19 00:59:09 2020 -0700 @@ -381,6 +381,7 @@ render_set_video_standard(VID_NTSC); while (!sms->should_return) { +#ifndef NEW_CORE if (system->delayed_load_slot) { load_state(system, system->delayed_load_slot - 1); system->delayed_load_slot = 0; @@ -390,10 +391,9 @@ system->enter_debugger = 0; zdebugger(sms->z80, sms->z80->pc); } -#ifdef NEW_CORE + if (sms->z80->nmi_start == CYCLE_NEVER) { +#else if (sms->z80->nmi_cycle == CYCLE_NEVER) { -#else - if (sms->z80->nmi_start == CYCLE_NEVER) { #endif uint32_t nmi = vdp_next_nmi(sms->vdp); if (nmi != CYCLE_NEVER) { @@ -408,6 +408,7 @@ vdp_run_context(sms->vdp, target_cycle); psg_run(sms->psg, target_cycle); +#ifndef NEW_CORE if (system->save_state) { while (!sms->z80->pc) { //advance Z80 to an instruction boundary @@ -416,6 +417,7 @@ save_state(sms, system->save_state - 1); system->save_state = 0; } +#endif target_cycle += 3420*16; if (target_cycle > 0x10000000) { @@ -458,10 +460,12 @@ load_state_path(sms, statefile); } +#ifndef NEW_CORE if (system->enter_debugger) { system->enter_debugger = 0; zinsert_breakpoint(sms->z80, sms->z80->pc, (uint8_t *)zdebugger); } +#endif run_sms(system); } @@ -471,7 +475,7 @@ sms_context *sms = (sms_context *)system; z80_assert_reset(sms->z80, sms->z80->Z80_CYCLE); #ifndef NEW_CORE - sms->z80->target_cycle = sms->z80->sync_cycle = sms->z80->Z80_CYCLE; + sms->z80->target_cycle = sms->z80->sync_cycle = sms->z80->current_cycle; #endif } @@ -663,4 +667,4 @@ sms->header.type = SYSTEM_SMS; return sms; -} \ No newline at end of file +} diff -r f23e70fb6607 -r 2c1c88cd1a3f sms.h --- a/sms.h Sat Apr 18 23:14:43 2020 -0700 +++ b/sms.h Sun Apr 19 00:59:09 2020 -0700 @@ -4,10 +4,10 @@ #include "system.h" #include "vdp.h" #include "psg.h" -#ifdef NEW_CORE +#ifndef NEW_CORE +#include "z80_to_x86.h" +#else #include "z80.h" -#else -#include "z80_to_x86.h" #endif #include "io.h" diff -r f23e70fb6607 -r 2c1c88cd1a3f trans.c --- a/trans.c Sat Apr 18 23:14:43 2020 -0700 +++ b/trans.c Sun Apr 19 00:59:09 2020 -0700 @@ -4,11 +4,7 @@ BlastEm is free software distributed under the terms of the GNU General Public License version 3 or greater. See COPYING for full license text. */ #include "68kinst.h" -#ifdef NEW_CORE -#include "m68k.h" -#else #include "m68k_core.h" -#endif #include "mem.h" #include #include @@ -23,22 +19,25 @@ { } -#ifndef NEW_CORE +uint64_t total_cycles; + m68k_context * sync_components(m68k_context * context, uint32_t address) { if (context->current_cycle > 0x80000000) { context->current_cycle -= 0x80000000; + total_cycles += 0x80000000; } if (context->status & M68K_STATUS_TRACE || context->trace_pending) { context->target_cycle = context->current_cycle; } return context; } -#endif m68k_context *reset_handler(m68k_context *context) { m68k_print_regs(context); + total_cycles += context->current_cycle; + printf("%ld cycles\n", total_cycles); exit(0); //unreachable return context; @@ -76,21 +75,16 @@ memmap[1].flags = MMAP_READ | MMAP_WRITE | MMAP_CODE; memmap[1].buffer = malloc(64 * 1024); memset(memmap[1].buffer, 0, 64 * 1024); - init_m68k_opts(&opts, memmap, 2, 1); + init_m68k_opts(&opts, memmap, 2, 7); m68k_context * context = init_68k_context(&opts, reset_handler); context->mem_pointers[0] = memmap[0].buffer; context->mem_pointers[1] = memmap[1].buffer; -#ifndef NEW_CORE context->target_cycle = context->sync_cycle = 0x80000000; -#endif + /* + uint32_t address; + address = filebuf[2] << 16 | filebuf[3]; + translate_m68k_stream(address, context);*/ m68k_reset(context); -#ifdef NEW_CORE - for (;;) - { - m68k_execute(context, 0x80000000); - context->cycles = 0; - } -#endif return 0; } diff -r f23e70fb6607 -r 2c1c88cd1a3f ztestrun.c