From 1f2ee4ce237ac24d0b615bcc22a44a4fe8afa7e8 Mon Sep 17 00:00:00 2001 From: Barry Harris <44396066+barry65536@users.noreply.github.com> Date: Thu, 27 Dec 2012 14:59:54 +0000 Subject: [PATCH] m68k fix for non-68000 opcode 0x6fff (iq, if you have a cleaner solution feel free to change it) --- src/cpu/m68k/m68k_in.c | 6 +++--- src/cpu/m68k/m68kcpu.c | 14 ++++++++------ 2 files changed, 11 insertions(+), 9 deletions(-) diff --git a/src/cpu/m68k/m68k_in.c b/src/cpu/m68k/m68k_in.c index 10f048775..a07d2e494 100644 --- a/src/cpu/m68k/m68k_in.c +++ b/src/cpu/m68k/m68k_in.c @@ -102,7 +102,7 @@ M68KMAKE_PROTOTYPE_FOOTER /* Build the opcode handler table */ -void m68ki_build_opcode_table(void); +void m68ki_build_opcode_table(int is_000); extern void (*m68ki_instruction_jump_table[0x10000])(void); /* opcode handler jump table */ extern unsigned char m68ki_cycles[][0x10000]; @@ -162,7 +162,7 @@ static void m68k_66ff(void) } /* Build the opcode handler jump table */ -void m68ki_build_opcode_table(void) +void m68ki_build_opcode_table(int is_000) { opcode_handler_struct *ostruct; int instr; @@ -256,7 +256,7 @@ void m68ki_build_opcode_table(void) ostruct++; } - m68ki_instruction_jump_table[0x66ff] = m68k_66ff; // hack + if (is_000) m68ki_instruction_jump_table[0x66ff] = m68k_66ff; // hack } diff --git a/src/cpu/m68k/m68kcpu.c b/src/cpu/m68k/m68kcpu.c index b87af4e66..4eda6aa61 100644 --- a/src/cpu/m68k/m68kcpu.c +++ b/src/cpu/m68k/m68kcpu.c @@ -607,7 +607,7 @@ void m68k_set_cpu_type(unsigned int cpu_type) CYC_MOVEM_L = 3; CYC_SHIFT = 1; CYC_RESET = 132; - return; + break; case M68K_CPU_TYPE_68008: CPU_TYPE = CPU_TYPE_008; CPU_ADDRESS_MASK = 0x003fffff; @@ -623,7 +623,7 @@ void m68k_set_cpu_type(unsigned int cpu_type) CYC_MOVEM_L = 3; CYC_SHIFT = 1; CYC_RESET = 132; - return; + break; case M68K_CPU_TYPE_68010: CPU_TYPE = CPU_TYPE_010; CPU_ADDRESS_MASK = 0x00ffffff; @@ -639,7 +639,7 @@ void m68k_set_cpu_type(unsigned int cpu_type) CYC_MOVEM_L = 3; CYC_SHIFT = 1; CYC_RESET = 130; - return; + break; case M68K_CPU_TYPE_68EC020: CPU_TYPE = CPU_TYPE_EC020; CPU_ADDRESS_MASK = 0x00ffffff; @@ -655,7 +655,7 @@ void m68k_set_cpu_type(unsigned int cpu_type) CYC_MOVEM_L = 2; CYC_SHIFT = 0; CYC_RESET = 518; - return; + break; case M68K_CPU_TYPE_68020: CPU_TYPE = CPU_TYPE_020; CPU_ADDRESS_MASK = 0xffffffff; @@ -671,8 +671,10 @@ void m68k_set_cpu_type(unsigned int cpu_type) CYC_MOVEM_L = 2; CYC_SHIFT = 0; CYC_RESET = 518; - return; + break; } + + m68ki_build_opcode_table(CPU_TYPE_IS_000(CPU_TYPE)); } /* Execute some instructions until we use up num_cycles clock cycles */ @@ -785,7 +787,7 @@ void m68k_init(void) /* The first call to this function initializes the opcode handler jump table */ if(!emulation_initialized) { - m68ki_build_opcode_table(); + m68ki_build_opcode_table(CPU_TYPE_IS_000(CPU_TYPE)); emulation_initialized = 1; }