X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=m68kcpu.h;fp=m68kcpu.h;h=a2c7e5c5560252c4a43c7d71d27616f0af8367a7;hb=d06400230faba867eed3e18c8f16742a4403964f;hp=dd8d1cfbfe11e98cc05a1f530a7d8c7e00747178;hpb=6d74804193233a5fe5c57a2eb776219e6e1a31c1;p=pistorm diff --git a/m68kcpu.h b/m68kcpu.h index dd8d1cf..a2c7e5c 100644 --- a/m68kcpu.h +++ b/m68kcpu.h @@ -473,12 +473,12 @@ typedef uint32 uint64; #if !M68K_SEPARATE_READS -#define m68k_read_immediate_16(A) m68ki_read_program_16(A) -#define m68k_read_immediate_32(A) m68ki_read_program_32(A) +#define m68k_read_immediate_16(state, A) m68ki_read_program_16(state, A) +#define m68k_read_immediate_32(state, A) m68ki_read_program_32(state, A) -#define m68k_read_pcrelative_8(A) m68ki_read_program_8(A) -#define m68k_read_pcrelative_16(A) m68ki_read_program_16(A) -#define m68k_read_pcrelative_32(A) m68ki_read_program_32(A) +#define m68k_read_pcrelative_8(state, A) m68ki_read_program_8(state, A) +#define m68k_read_pcrelative_16(state, A) m68ki_read_program_16(state, A) +#define m68k_read_pcrelative_32(state, A) m68ki_read_program_32(state, A) #endif /* M68K_SEPARATE_READS */ @@ -895,35 +895,35 @@ extern jmp_buf m68ki_aerr_trap; /* ----------------------------- Read / Write ----------------------------- */ /* Read from the current address space */ -#define m68ki_read_8(A) m68ki_read_8_fc (A, FLAG_S | m68ki_get_address_space()) -#define m68ki_read_16(A) m68ki_read_16_fc(A, FLAG_S | m68ki_get_address_space()) -#define m68ki_read_32(A) m68ki_read_32_fc(A, FLAG_S | m68ki_get_address_space()) +#define m68ki_read_8(state, A) m68ki_read_8_fc (state, A, FLAG_S | m68ki_get_address_space()) +#define m68ki_read_16(state, A) m68ki_read_16_fc(state, A, FLAG_S | m68ki_get_address_space()) +#define m68ki_read_32(state, A) m68ki_read_32_fc(state, A, FLAG_S | m68ki_get_address_space()) /* Write to the current data space */ -#define m68ki_write_8(A, V) m68ki_write_8_fc (A, FLAG_S | FUNCTION_CODE_USER_DATA, V) -#define m68ki_write_16(A, V) m68ki_write_16_fc(A, FLAG_S | FUNCTION_CODE_USER_DATA, V) -#define m68ki_write_32(A, V) m68ki_write_32_fc(A, FLAG_S | FUNCTION_CODE_USER_DATA, V) +#define m68ki_write_8(state, A, V) m68ki_write_8_fc (state, A, FLAG_S | FUNCTION_CODE_USER_DATA, V) +#define m68ki_write_16(state, A, V) m68ki_write_16_fc(state, A, FLAG_S | FUNCTION_CODE_USER_DATA, V) +#define m68ki_write_32(state, A, V) m68ki_write_32_fc(state, A, FLAG_S | FUNCTION_CODE_USER_DATA, V) #if M68K_SIMULATE_PD_WRITES #define m68ki_write_32_pd(A, V) m68ki_write_32_pd_fc(A, FLAG_S | FUNCTION_CODE_USER_DATA, V) #else -#define m68ki_write_32_pd(A, V) m68ki_write_32_fc(A, FLAG_S | FUNCTION_CODE_USER_DATA, V) +#define m68ki_write_32_pd(state, A, V) m68ki_write_32_fc(state, A, FLAG_S | FUNCTION_CODE_USER_DATA, V) #endif /* Map PC-relative reads */ -#define m68ki_read_pcrel_8(A) m68k_read_pcrelative_8(A) -#define m68ki_read_pcrel_16(A) m68k_read_pcrelative_16(A) -#define m68ki_read_pcrel_32(A) m68k_read_pcrelative_32(A) +#define m68ki_read_pcrel_8(state, A) m68k_read_pcrelative_8(state, A) +#define m68ki_read_pcrel_16(state, A) m68k_read_pcrelative_16(state, A) +#define m68ki_read_pcrel_32(state, A) m68k_read_pcrelative_32(state, A) /* Read from the program space */ -#define m68ki_read_program_8(A) m68ki_read_8_fc(A, FLAG_S | FUNCTION_CODE_USER_PROGRAM) -#define m68ki_read_program_16(A) m68ki_read_16_fc(A, FLAG_S | FUNCTION_CODE_USER_PROGRAM) -#define m68ki_read_program_32(A) m68ki_read_32_fc(A, FLAG_S | FUNCTION_CODE_USER_PROGRAM) +#define m68ki_read_program_8(state, A) m68ki_read_8_fc(state, A, FLAG_S | FUNCTION_CODE_USER_PROGRAM) +#define m68ki_read_program_16(state, A) m68ki_read_16_fc(state, A, FLAG_S | FUNCTION_CODE_USER_PROGRAM) +#define m68ki_read_program_32(state, A) m68ki_read_32_fc(state, A, FLAG_S | FUNCTION_CODE_USER_PROGRAM) /* Read from the data space */ -#define m68ki_read_data_8(A) m68ki_read_8_fc(A, FLAG_S | FUNCTION_CODE_USER_DATA) -#define m68ki_read_data_16(A) m68ki_read_16_fc(A, FLAG_S | FUNCTION_CODE_USER_DATA) -#define m68ki_read_data_32(A) m68ki_read_32_fc(A, FLAG_S | FUNCTION_CODE_USER_DATA) +#define m68ki_read_data_8(state, A) m68ki_read_8_fc(state, A, FLAG_S | FUNCTION_CODE_USER_DATA) +#define m68ki_read_data_16(state, A) m68ki_read_16_fc(state, A, FLAG_S | FUNCTION_CODE_USER_DATA) +#define m68ki_read_data_32(state, A) m68ki_read_32_fc(state, A, FLAG_S | FUNCTION_CODE_USER_DATA) @@ -1082,8 +1082,8 @@ extern uint m68ki_aerr_write_mode; extern uint m68ki_aerr_fc; /* Forward declarations to keep some of the macros happy */ -static inline uint m68ki_read_16_fc (uint address, uint fc); -static inline uint m68ki_read_32_fc (uint address, uint fc); +static inline uint m68ki_read_16_fc(m68ki_cpu_core *state, uint address, uint fc); +static inline uint m68ki_read_32_fc(m68ki_cpu_core *state, uint address, uint fc); static inline uint m68ki_get_ea_ix(m68ki_cpu_core *state, uint An); static inline void m68ki_check_interrupts(m68ki_cpu_core *state); /* ASG: check for interrupts */ @@ -1111,7 +1111,7 @@ extern uint32 pmmu_translate_addr(m68ki_cpu_core *state, uint32 addr_in, uint16 // read immediate word using the instruction cache -static inline uint32 m68ki_ic_readimm16(uint32 address) +static inline uint32 m68ki_ic_readimm16(m68ki_cpu_core *state, uint32 address) { if (m68ki_cpu.cacr & M68K_CACR_EI) { @@ -1127,10 +1127,10 @@ static inline uint32 m68ki_ic_readimm16(uint32 address) // if the cache is frozen, don't update it if (m68ki_cpu.cacr & M68K_CACR_FI) { - return m68k_read_immediate_16(address); + return m68k_read_immediate_16(state, address); } - uint32 data = m68ki_read_32(address & ~3); + uint32 data = m68ki_read_32(state, address & ~3); //printf("m68k: doing cache fill at %08x (tag %08x idx %d)\n", address, tag, idx); @@ -1143,7 +1143,7 @@ static inline uint32 m68ki_ic_readimm16(uint32 address) } else { - return m68k_read_immediate_16(address); + return m68k_read_immediate_16(state, address); } } @@ -1159,13 +1159,13 @@ static inline uint32 m68ki_ic_readimm16(uint32 address) } } } - return m68k_read_immediate_16(address); + return m68k_read_immediate_16(state, address); } /* Handles all immediate reads, does address error check, function code setting, * and prefetching if they are enabled in m68kconf.h */ -uint m68ki_read_imm6_addr_slowpath(uint32_t pc, address_translation_cache *cache); +uint m68ki_read_imm16_addr_slowpath(m68ki_cpu_core *state, uint32_t pc, address_translation_cache *cache); @@ -1179,7 +1179,7 @@ static inline uint m68ki_read_imm_16(m68ki_cpu_core *state) REG_PC += 2; return be16toh(((unsigned short *)(cache->offset + pc))[0]); } - return m68ki_read_imm6_addr_slowpath(pc, cache); + return m68ki_read_imm16_addr_slowpath(state, pc, cache); } static inline uint m68ki_read_imm_8(m68ki_cpu_core *state) @@ -1216,16 +1216,16 @@ static inline uint m68ki_read_imm_32(m68ki_cpu_core *state) if(REG_PC != CPU_PREF_ADDR) { CPU_PREF_ADDR = REG_PC; - CPU_PREF_DATA = m68ki_ic_readimm16(ADDRESS_68K(CPU_PREF_ADDR)); + CPU_PREF_DATA = m68ki_ic_readimm16(state, ADDRESS_68K(CPU_PREF_ADDR)); } temp_val = MASK_OUT_ABOVE_16(CPU_PREF_DATA); REG_PC += 2; CPU_PREF_ADDR = REG_PC; - CPU_PREF_DATA = m68ki_ic_readimm16(ADDRESS_68K(CPU_PREF_ADDR)); + CPU_PREF_DATA = m68ki_ic_readimm16(state, ADDRESS_68K(CPU_PREF_ADDR)); temp_val = MASK_OUT_ABOVE_32((temp_val << 16) | MASK_OUT_ABOVE_16(CPU_PREF_DATA)); REG_PC += 2; - CPU_PREF_DATA = m68ki_ic_readimm16(REG_PC); + CPU_PREF_DATA = m68ki_ic_readimm16(state, REG_PC); CPU_PREF_ADDR = m68ki_cpu.mmu_tmp_buserror_occurred ? ((uint32)~0) : REG_PC; return temp_val; @@ -1245,7 +1245,7 @@ static inline uint m68ki_read_imm_32(m68ki_cpu_core *state) * code if they are enabled in m68kconf.h. */ -static inline uint m68ki_read_8_fc(uint address, uint fc) +static inline uint m68ki_read_8_fc(m68ki_cpu_core *state, uint address, uint fc) { (void)fc; m68ki_set_fc(fc); /* auto-disable (see m68kcpu.h) */ @@ -1266,7 +1266,7 @@ static inline uint m68ki_read_8_fc(uint address, uint fc) return m68k_read_memory_8(ADDRESS_68K(address)); } -static inline uint m68ki_read_16_fc(uint address, uint fc) +static inline uint m68ki_read_16_fc(m68ki_cpu_core *state, uint address, uint fc) { m68ki_set_fc(fc); /* auto-disable (see m68kcpu.h) */ m68ki_cpu.mmu_tmp_fc = fc; @@ -1276,7 +1276,7 @@ static inline uint m68ki_read_16_fc(uint address, uint fc) #if M68K_EMULATE_PMMU if (PMMU_ENABLED) - address = pmmu_translate_addr(address,1); + address = pmmu_translate_addr(state, address,1); #endif for (int i = 0; i < m68ki_cpu.read_ranges; i++) { @@ -1287,7 +1287,7 @@ static inline uint m68ki_read_16_fc(uint address, uint fc) return m68k_read_memory_16(ADDRESS_68K(address)); } -static inline uint m68ki_read_32_fc(uint address, uint fc) +static inline uint m68ki_read_32_fc(m68ki_cpu_core *state, uint address, uint fc) { m68ki_set_fc(fc); /* auto-disable (see m68kcpu.h) */ m68ki_cpu.mmu_tmp_fc = fc; @@ -1297,7 +1297,7 @@ static inline uint m68ki_read_32_fc(uint address, uint fc) #if M68K_EMULATE_PMMU if (PMMU_ENABLED) - address = pmmu_translate_addr(address,1); + address = pmmu_translate_addr(state, address,1); #endif for (int i = 0; i < m68ki_cpu.read_ranges; i++) { @@ -1309,7 +1309,7 @@ static inline uint m68ki_read_32_fc(uint address, uint fc) return m68k_read_memory_32(ADDRESS_68K(address)); } -static inline void m68ki_write_8_fc(uint address, uint fc, uint value) +static inline void m68ki_write_8_fc(m68ki_cpu_core *state, uint address, uint fc, uint value) { m68ki_set_fc(fc); /* auto-disable (see m68kcpu.h) */ m68ki_cpu.mmu_tmp_fc = fc; @@ -1330,7 +1330,7 @@ static inline void m68ki_write_8_fc(uint address, uint fc, uint value) m68k_write_memory_8(ADDRESS_68K(address), value); } -static inline void m68ki_write_16_fc(uint address, uint fc, uint value) +static inline void m68ki_write_16_fc(m68ki_cpu_core *state, uint address, uint fc, uint value) { m68ki_set_fc(fc); /* auto-disable (see m68kcpu.h) */ m68ki_cpu.mmu_tmp_fc = fc; @@ -1352,7 +1352,7 @@ static inline void m68ki_write_16_fc(uint address, uint fc, uint value) m68k_write_memory_16(ADDRESS_68K(address), value); } -static inline void m68ki_write_32_fc(uint address, uint fc, uint value) +static inline void m68ki_write_32_fc(m68ki_cpu_core *state, uint address, uint fc, uint value) { m68ki_set_fc(fc); /* auto-disable (see m68kcpu.h) */ m68ki_cpu.mmu_tmp_fc = fc; @@ -1524,111 +1524,111 @@ static inline uint m68ki_get_ea_ix(m68ki_cpu_core *state, uint An) /* Postindex */ if(BIT_2(extension)) /* I/IS: 0 = preindex, 1 = postindex */ - return m68ki_read_32(An + bd) + Xn + od; + return m68ki_read_32(state, An + bd) + Xn + od; /* Preindex */ - return m68ki_read_32(An + bd + Xn) + od; + return m68ki_read_32(state, An + bd + Xn) + od; } /* Fetch operands */ -static inline uint OPER_AY_AI_8(m68ki_cpu_core *state) {uint ea = EA_AY_AI_8(); return m68ki_read_8(ea); } -static inline uint OPER_AY_AI_16(m68ki_cpu_core *state) {uint ea = EA_AY_AI_16(); return m68ki_read_16(ea);} -static inline uint OPER_AY_AI_32(m68ki_cpu_core *state) {uint ea = EA_AY_AI_32(); return m68ki_read_32(ea);} -static inline uint OPER_AY_PI_8(m68ki_cpu_core *state) {uint ea = EA_AY_PI_8(); return m68ki_read_8(ea); } -static inline uint OPER_AY_PI_16(m68ki_cpu_core *state) {uint ea = EA_AY_PI_16(); return m68ki_read_16(ea);} -static inline uint OPER_AY_PI_32(m68ki_cpu_core *state) {uint ea = EA_AY_PI_32(); return m68ki_read_32(ea);} -static inline uint OPER_AY_PD_8(m68ki_cpu_core *state) {uint ea = EA_AY_PD_8(); return m68ki_read_8(ea); } -static inline uint OPER_AY_PD_16(m68ki_cpu_core *state) {uint ea = EA_AY_PD_16(); return m68ki_read_16(ea);} -static inline uint OPER_AY_PD_32(m68ki_cpu_core *state) {uint ea = EA_AY_PD_32(); return m68ki_read_32(ea);} -static inline uint OPER_AY_DI_8(m68ki_cpu_core *state) {uint ea = EA_AY_DI_8(); return m68ki_read_8(ea); } -static inline uint OPER_AY_DI_16(m68ki_cpu_core *state) {uint ea = EA_AY_DI_16(); return m68ki_read_16(ea);} -static inline uint OPER_AY_DI_32(m68ki_cpu_core *state) {uint ea = EA_AY_DI_32(); return m68ki_read_32(ea);} -static inline uint OPER_AY_IX_8(m68ki_cpu_core *state) {uint ea = EA_AY_IX_8(); return m68ki_read_8(ea); } -static inline uint OPER_AY_IX_16(m68ki_cpu_core *state) {uint ea = EA_AY_IX_16(); return m68ki_read_16(ea);} -static inline uint OPER_AY_IX_32(m68ki_cpu_core *state) {uint ea = EA_AY_IX_32(); return m68ki_read_32(ea);} - -static inline uint OPER_AX_AI_8(m68ki_cpu_core *state) {uint ea = EA_AX_AI_8(); return m68ki_read_8(ea); } -static inline uint OPER_AX_AI_16(m68ki_cpu_core *state) {uint ea = EA_AX_AI_16(); return m68ki_read_16(ea);} -static inline uint OPER_AX_AI_32(m68ki_cpu_core *state) {uint ea = EA_AX_AI_32(); return m68ki_read_32(ea);} -static inline uint OPER_AX_PI_8(m68ki_cpu_core *state) {uint ea = EA_AX_PI_8(); return m68ki_read_8(ea); } -static inline uint OPER_AX_PI_16(m68ki_cpu_core *state) {uint ea = EA_AX_PI_16(); return m68ki_read_16(ea);} -static inline uint OPER_AX_PI_32(m68ki_cpu_core *state) {uint ea = EA_AX_PI_32(); return m68ki_read_32(ea);} -static inline uint OPER_AX_PD_8(m68ki_cpu_core *state) {uint ea = EA_AX_PD_8(); return m68ki_read_8(ea); } -static inline uint OPER_AX_PD_16(m68ki_cpu_core *state) {uint ea = EA_AX_PD_16(); return m68ki_read_16(ea);} -static inline uint OPER_AX_PD_32(m68ki_cpu_core *state) {uint ea = EA_AX_PD_32(); return m68ki_read_32(ea);} -static inline uint OPER_AX_DI_8(m68ki_cpu_core *state) {uint ea = EA_AX_DI_8(); return m68ki_read_8(ea); } -static inline uint OPER_AX_DI_16(m68ki_cpu_core *state) {uint ea = EA_AX_DI_16(); return m68ki_read_16(ea);} -static inline uint OPER_AX_DI_32(m68ki_cpu_core *state) {uint ea = EA_AX_DI_32(); return m68ki_read_32(ea);} -static inline uint OPER_AX_IX_8(m68ki_cpu_core *state) {uint ea = EA_AX_IX_8(); return m68ki_read_8(ea); } -static inline uint OPER_AX_IX_16(m68ki_cpu_core *state) {uint ea = EA_AX_IX_16(); return m68ki_read_16(ea);} -static inline uint OPER_AX_IX_32(m68ki_cpu_core *state) {uint ea = EA_AX_IX_32(); return m68ki_read_32(ea);} - -static inline uint OPER_A7_PI_8(m68ki_cpu_core *state) {uint ea = EA_A7_PI_8(); return m68ki_read_8(ea); } -static inline uint OPER_A7_PD_8(m68ki_cpu_core *state) {uint ea = EA_A7_PD_8(); return m68ki_read_8(ea); } - -static inline uint OPER_AW_8(m68ki_cpu_core *state) {uint ea = EA_AW_8(); return m68ki_read_8(ea); } -static inline uint OPER_AW_16(m68ki_cpu_core *state) {uint ea = EA_AW_16(); return m68ki_read_16(ea);} -static inline uint OPER_AW_32(m68ki_cpu_core *state) {uint ea = EA_AW_32(); return m68ki_read_32(ea);} -static inline uint OPER_AL_8(m68ki_cpu_core *state) {uint ea = EA_AL_8(); return m68ki_read_8(ea); } -static inline uint OPER_AL_16(m68ki_cpu_core *state) {uint ea = EA_AL_16(); return m68ki_read_16(ea);} -static inline uint OPER_AL_32(m68ki_cpu_core *state) {uint ea = EA_AL_32(); return m68ki_read_32(ea);} -static inline uint OPER_PCDI_8(m68ki_cpu_core *state) {uint ea = EA_PCDI_8(); return m68ki_read_pcrel_8(ea); } -static inline uint OPER_PCDI_16(m68ki_cpu_core *state) {uint ea = EA_PCDI_16(); return m68ki_read_pcrel_16(ea);} -static inline uint OPER_PCDI_32(m68ki_cpu_core *state) {uint ea = EA_PCDI_32(); return m68ki_read_pcrel_32(ea);} -static inline uint OPER_PCIX_8(m68ki_cpu_core *state) {uint ea = EA_PCIX_8(); return m68ki_read_pcrel_8(ea); } -static inline uint OPER_PCIX_16(m68ki_cpu_core *state) {uint ea = EA_PCIX_16(); return m68ki_read_pcrel_16(ea);} -static inline uint OPER_PCIX_32(m68ki_cpu_core *state) {uint ea = EA_PCIX_32(); return m68ki_read_pcrel_32(ea);} +static inline uint OPER_AY_AI_8(m68ki_cpu_core *state) {uint ea = EA_AY_AI_8(); return m68ki_read_8(state, ea); } +static inline uint OPER_AY_AI_16(m68ki_cpu_core *state) {uint ea = EA_AY_AI_16(); return m68ki_read_16(state, ea);} +static inline uint OPER_AY_AI_32(m68ki_cpu_core *state) {uint ea = EA_AY_AI_32(); return m68ki_read_32(state, ea);} +static inline uint OPER_AY_PI_8(m68ki_cpu_core *state) {uint ea = EA_AY_PI_8(); return m68ki_read_8(state, ea); } +static inline uint OPER_AY_PI_16(m68ki_cpu_core *state) {uint ea = EA_AY_PI_16(); return m68ki_read_16(state, ea);} +static inline uint OPER_AY_PI_32(m68ki_cpu_core *state) {uint ea = EA_AY_PI_32(); return m68ki_read_32(state, ea);} +static inline uint OPER_AY_PD_8(m68ki_cpu_core *state) {uint ea = EA_AY_PD_8(); return m68ki_read_8(state, ea); } +static inline uint OPER_AY_PD_16(m68ki_cpu_core *state) {uint ea = EA_AY_PD_16(); return m68ki_read_16(state, ea);} +static inline uint OPER_AY_PD_32(m68ki_cpu_core *state) {uint ea = EA_AY_PD_32(); return m68ki_read_32(state, ea);} +static inline uint OPER_AY_DI_8(m68ki_cpu_core *state) {uint ea = EA_AY_DI_8(); return m68ki_read_8(state, ea); } +static inline uint OPER_AY_DI_16(m68ki_cpu_core *state) {uint ea = EA_AY_DI_16(); return m68ki_read_16(state, ea);} +static inline uint OPER_AY_DI_32(m68ki_cpu_core *state) {uint ea = EA_AY_DI_32(); return m68ki_read_32(state, ea);} +static inline uint OPER_AY_IX_8(m68ki_cpu_core *state) {uint ea = EA_AY_IX_8(); return m68ki_read_8(state, ea); } +static inline uint OPER_AY_IX_16(m68ki_cpu_core *state) {uint ea = EA_AY_IX_16(); return m68ki_read_16(state, ea);} +static inline uint OPER_AY_IX_32(m68ki_cpu_core *state) {uint ea = EA_AY_IX_32(); return m68ki_read_32(state, ea);} + +static inline uint OPER_AX_AI_8(m68ki_cpu_core *state) {uint ea = EA_AX_AI_8(); return m68ki_read_8(state, ea); } +static inline uint OPER_AX_AI_16(m68ki_cpu_core *state) {uint ea = EA_AX_AI_16(); return m68ki_read_16(state, ea);} +static inline uint OPER_AX_AI_32(m68ki_cpu_core *state) {uint ea = EA_AX_AI_32(); return m68ki_read_32(state, ea);} +static inline uint OPER_AX_PI_8(m68ki_cpu_core *state) {uint ea = EA_AX_PI_8(); return m68ki_read_8(state, ea); } +static inline uint OPER_AX_PI_16(m68ki_cpu_core *state) {uint ea = EA_AX_PI_16(); return m68ki_read_16(state, ea);} +static inline uint OPER_AX_PI_32(m68ki_cpu_core *state) {uint ea = EA_AX_PI_32(); return m68ki_read_32(state, ea);} +static inline uint OPER_AX_PD_8(m68ki_cpu_core *state) {uint ea = EA_AX_PD_8(); return m68ki_read_8(state, ea); } +static inline uint OPER_AX_PD_16(m68ki_cpu_core *state) {uint ea = EA_AX_PD_16(); return m68ki_read_16(state, ea);} +static inline uint OPER_AX_PD_32(m68ki_cpu_core *state) {uint ea = EA_AX_PD_32(); return m68ki_read_32(state, ea);} +static inline uint OPER_AX_DI_8(m68ki_cpu_core *state) {uint ea = EA_AX_DI_8(); return m68ki_read_8(state, ea); } +static inline uint OPER_AX_DI_16(m68ki_cpu_core *state) {uint ea = EA_AX_DI_16(); return m68ki_read_16(state, ea);} +static inline uint OPER_AX_DI_32(m68ki_cpu_core *state) {uint ea = EA_AX_DI_32(); return m68ki_read_32(state, ea);} +static inline uint OPER_AX_IX_8(m68ki_cpu_core *state) {uint ea = EA_AX_IX_8(); return m68ki_read_8(state, ea); } +static inline uint OPER_AX_IX_16(m68ki_cpu_core *state) {uint ea = EA_AX_IX_16(); return m68ki_read_16(state, ea);} +static inline uint OPER_AX_IX_32(m68ki_cpu_core *state) {uint ea = EA_AX_IX_32(); return m68ki_read_32(state, ea);} + +static inline uint OPER_A7_PI_8(m68ki_cpu_core *state) {uint ea = EA_A7_PI_8(); return m68ki_read_8(state, ea); } +static inline uint OPER_A7_PD_8(m68ki_cpu_core *state) {uint ea = EA_A7_PD_8(); return m68ki_read_8(state, ea); } + +static inline uint OPER_AW_8(m68ki_cpu_core *state) {uint ea = EA_AW_8(); return m68ki_read_8(state, ea); } +static inline uint OPER_AW_16(m68ki_cpu_core *state) {uint ea = EA_AW_16(); return m68ki_read_16(state, ea);} +static inline uint OPER_AW_32(m68ki_cpu_core *state) {uint ea = EA_AW_32(); return m68ki_read_32(state, ea);} +static inline uint OPER_AL_8(m68ki_cpu_core *state) {uint ea = EA_AL_8(); return m68ki_read_8(state, ea); } +static inline uint OPER_AL_16(m68ki_cpu_core *state) {uint ea = EA_AL_16(); return m68ki_read_16(state, ea);} +static inline uint OPER_AL_32(m68ki_cpu_core *state) {uint ea = EA_AL_32(); return m68ki_read_32(state, ea);} +static inline uint OPER_PCDI_8(m68ki_cpu_core *state) {uint ea = EA_PCDI_8(); return m68ki_read_pcrel_8(state, ea);} +static inline uint OPER_PCDI_16(m68ki_cpu_core *state) {uint ea = EA_PCDI_16(); return m68ki_read_pcrel_16(state, ea);} +static inline uint OPER_PCDI_32(m68ki_cpu_core *state) {uint ea = EA_PCDI_32(); return m68ki_read_pcrel_32(state, ea);} +static inline uint OPER_PCIX_8(m68ki_cpu_core *state) {uint ea = EA_PCIX_8(); return m68ki_read_pcrel_8(state, ea);} +static inline uint OPER_PCIX_16(m68ki_cpu_core *state) {uint ea = EA_PCIX_16(); return m68ki_read_pcrel_16(state, ea);} +static inline uint OPER_PCIX_32(m68ki_cpu_core *state) {uint ea = EA_PCIX_32(); return m68ki_read_pcrel_32(state, ea);} /* ---------------------------- Stack Functions --------------------------- */ /* Push/pull data from the stack */ -static inline void m68ki_push_16(uint value) +static inline void m68ki_push_16(m68ki_cpu_core *state, uint value) { REG_SP = MASK_OUT_ABOVE_32(REG_SP - 2); - m68ki_write_16(REG_SP, value); + m68ki_write_16(state, REG_SP, value); } -static inline void m68ki_push_32(uint value) +static inline void m68ki_push_32(m68ki_cpu_core *state, uint value) { REG_SP = MASK_OUT_ABOVE_32(REG_SP - 4); - m68ki_write_32(REG_SP, value); + m68ki_write_32(state, REG_SP, value); } -static inline uint m68ki_pull_16(void) +static inline uint m68ki_pull_16(m68ki_cpu_core *state) { REG_SP = MASK_OUT_ABOVE_32(REG_SP + 2); - return m68ki_read_16(REG_SP-2); + return m68ki_read_16(state, REG_SP - 2); } -static inline uint m68ki_pull_32(void) +static inline uint m68ki_pull_32(m68ki_cpu_core *state) { REG_SP = MASK_OUT_ABOVE_32(REG_SP + 4); - return m68ki_read_32(REG_SP-4); + return m68ki_read_32(state, REG_SP - 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(void) +static inline void m68ki_fake_push_16(m68ki_cpu_core *state) { REG_SP = MASK_OUT_ABOVE_32(REG_SP - 2); } -static inline void m68ki_fake_push_32(void) +static inline void m68ki_fake_push_32(m68ki_cpu_core *state) { REG_SP = MASK_OUT_ABOVE_32(REG_SP - 4); } -static inline void m68ki_fake_pull_16(void) +static inline void m68ki_fake_pull_16(m68ki_cpu_core *state) { REG_SP = MASK_OUT_ABOVE_32(REG_SP + 2); } -static inline void m68ki_fake_pull_32(void) +static inline void m68ki_fake_pull_32(m68ki_cpu_core *state) { REG_SP = MASK_OUT_ABOVE_32(REG_SP + 4); } @@ -1646,10 +1646,10 @@ static inline void m68ki_jump(uint new_pc) m68ki_pc_changed(REG_PC); } -static inline void m68ki_jump_vector(uint vector) +static inline void m68ki_jump_vector(m68ki_cpu_core *state, uint vector) { REG_PC = (vector<<2) + REG_VBR; - REG_PC = m68ki_read_data_32(REG_PC); + REG_PC = m68ki_read_data_32(state, REG_PC); m68ki_pc_changed(REG_PC); } @@ -1779,116 +1779,116 @@ static inline uint m68ki_init_exception(void) } /* 3 word stack frame (68000 only) */ -static inline void m68ki_stack_frame_3word(uint pc, uint sr) +static inline void m68ki_stack_frame_3word(m68ki_cpu_core *state, uint pc, uint sr) { - m68ki_push_32(pc); - m68ki_push_16(sr); + m68ki_push_32(state, pc); + m68ki_push_16(state, sr); } /* Format 0 stack frame. * This is the standard stack frame for 68010+. */ -static inline void m68ki_stack_frame_0000(uint pc, uint sr, uint vector) +static inline void m68ki_stack_frame_0000(m68ki_cpu_core *state, uint pc, uint sr, uint vector) { /* Stack a 3-word frame if we are 68000 */ if(CPU_TYPE == CPU_TYPE_000) { - m68ki_stack_frame_3word(pc, sr); + m68ki_stack_frame_3word(state, pc, sr); return; } - m68ki_push_16(vector<<2); - m68ki_push_32(pc); - m68ki_push_16(sr); + m68ki_push_16(state, vector << 2); + m68ki_push_32(state, pc); + m68ki_push_16(state, sr); } /* Format 1 stack frame (68020). * For 68020, this is the 4 word throwaway frame. */ -static inline void m68ki_stack_frame_0001(uint pc, uint sr, uint vector) +static inline void m68ki_stack_frame_0001(m68ki_cpu_core *state, uint pc, uint sr, uint vector) { - m68ki_push_16(0x1000 | (vector<<2)); - m68ki_push_32(pc); - m68ki_push_16(sr); + m68ki_push_16(state, 0x1000 | (vector << 2)); + m68ki_push_32(state, pc); + m68ki_push_16(state, sr); } /* Format 2 stack frame. * This is used only by 68020 for trap exceptions. */ -static inline void m68ki_stack_frame_0010(uint sr, uint vector) +static inline void m68ki_stack_frame_0010(m68ki_cpu_core *state, uint sr, uint vector) { - m68ki_push_32(REG_PPC); - m68ki_push_16(0x2000 | (vector<<2)); - m68ki_push_32(REG_PC); - m68ki_push_16(sr); + m68ki_push_32(state, REG_PPC); + m68ki_push_16(state, 0x2000 | (vector << 2)); + m68ki_push_32(state, REG_PC); + m68ki_push_16(state, sr); } /* Bus error stack frame (68000 only). */ -static inline void m68ki_stack_frame_buserr(uint sr) +static inline void m68ki_stack_frame_buserr(m68ki_cpu_core *state, uint sr) { - m68ki_push_32(REG_PC); - m68ki_push_16(sr); - m68ki_push_16(REG_IR); - m68ki_push_32(m68ki_aerr_address); /* access address */ + m68ki_push_32(state, REG_PC); + m68ki_push_16(state, sr); + m68ki_push_16(state, REG_IR); + m68ki_push_32(state, m68ki_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(m68ki_aerr_write_mode | CPU_INSTR_MODE | m68ki_aerr_fc); + m68ki_push_16(state, m68ki_aerr_write_mode | CPU_INSTR_MODE | m68ki_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(uint pc, uint sr, uint vector) +static inline void m68ki_stack_frame_1000(m68ki_cpu_core *state, uint pc, uint sr, uint vector) { /* VERSION * NUMBER * INTERNAL INFORMATION, 16 WORDS */ - m68ki_fake_push_32(); - m68ki_fake_push_32(); - m68ki_fake_push_32(); - m68ki_fake_push_32(); - m68ki_fake_push_32(); - m68ki_fake_push_32(); - m68ki_fake_push_32(); - m68ki_fake_push_32(); + m68ki_fake_push_32(state); + m68ki_fake_push_32(state); + m68ki_fake_push_32(state); + m68ki_fake_push_32(state); + m68ki_fake_push_32(state); + m68ki_fake_push_32(state); + m68ki_fake_push_32(state); + m68ki_fake_push_32(state); /* INSTRUCTION INPUT BUFFER */ - m68ki_push_16(0); + m68ki_push_16(state, 0); /* UNUSED, RESERVED (not written) */ - m68ki_fake_push_16(); + m68ki_fake_push_16(state); /* DATA INPUT BUFFER */ - m68ki_push_16(0); + m68ki_push_16(state, 0); /* UNUSED, RESERVED (not written) */ - m68ki_fake_push_16(); + m68ki_fake_push_16(state); /* DATA OUTPUT BUFFER */ - m68ki_push_16(0); + m68ki_push_16(state, 0); /* UNUSED, RESERVED (not written) */ - m68ki_fake_push_16(); + m68ki_fake_push_16(state); /* FAULT ADDRESS */ - m68ki_push_32(0); + m68ki_push_32(state, 0); /* SPECIAL STATUS WORD */ - m68ki_push_16(0); + m68ki_push_16(state, 0); /* 1000, VECTOR OFFSET */ - m68ki_push_16(0x8000 | (vector<<2)); + m68ki_push_16(state, 0x8000 | (vector << 2)); /* PROGRAM COUNTER */ - m68ki_push_32(pc); + m68ki_push_32(state, pc); /* STATUS REGISTER */ - m68ki_push_16(sr); + m68ki_push_16(state, sr); } /* Format A stack frame (short bus fault). @@ -1896,52 +1896,52 @@ static inline void m68ki_stack_frame_1000(uint pc, uint sr, uint vector) * if the error happens at an instruction boundary. * PC stacked is address of next instruction. */ -static inline void m68ki_stack_frame_1010(uint sr, uint vector, uint pc, uint fault_address) +static inline void m68ki_stack_frame_1010(m68ki_cpu_core *state, uint sr, uint vector, uint pc, uint fault_address) { int orig_rw = m68ki_cpu.mmu_tmp_buserror_rw; // this gets splatted by the following pushes, so save it now int orig_fc = m68ki_cpu.mmu_tmp_buserror_fc; int orig_sz = m68ki_cpu.mmu_tmp_buserror_sz; /* INTERNAL REGISTER */ - m68ki_push_16(0); + m68ki_push_16(state, 0); /* INTERNAL REGISTER */ - m68ki_push_16(0); + m68ki_push_16(state, 0); /* DATA OUTPUT BUFFER (2 words) */ - m68ki_push_32(0); + m68ki_push_32(state, 0); /* INTERNAL REGISTER */ - m68ki_push_16(0); + m68ki_push_16(state, 0); /* INTERNAL REGISTER */ - m68ki_push_16(0); + m68ki_push_16(state, 0); /* DATA CYCLE FAULT ADDRESS (2 words) */ - m68ki_push_32(fault_address); + m68ki_push_32(state, fault_address); /* INSTRUCTION PIPE STAGE B */ - m68ki_push_16(0); + m68ki_push_16(state, 0); /* INSTRUCTION PIPE STAGE C */ - m68ki_push_16(0); + m68ki_push_16(state, 0); /* SPECIAL STATUS REGISTER */ // set bit for: Rerun Faulted bus Cycle, or run pending prefetch // set FC - m68ki_push_16(0x0100 | orig_fc | orig_rw<<6 | orig_sz<<4); + m68ki_push_16(state, 0x0100 | orig_fc | orig_rw << 6 | orig_sz << 4); /* INTERNAL REGISTER */ - m68ki_push_16(0); + m68ki_push_16(state, 0); /* 1010, VECTOR OFFSET */ - m68ki_push_16(0xa000 | (vector<<2)); + m68ki_push_16(state, 0xa000 | (vector << 2)); /* PROGRAM COUNTER */ - m68ki_push_32(pc); + m68ki_push_32(state, pc); /* STATUS REGISTER */ - m68ki_push_16(sr); + m68ki_push_16(state, sr); } /* Format B stack frame (long bus fault). @@ -1949,150 +1949,151 @@ static inline void m68ki_stack_frame_1010(uint sr, uint vector, uint pc, uint fa * if the error happens during instruction execution. * PC stacked is address of instruction in progress. */ -static inline void m68ki_stack_frame_1011(uint sr, uint vector, uint pc, uint fault_address) +static inline void m68ki_stack_frame_1011(m68ki_cpu_core *state, uint sr, uint vector, uint pc, uint fault_address) { int orig_rw = m68ki_cpu.mmu_tmp_buserror_rw; // this gets splatted by the following pushes, so save it now int orig_fc = m68ki_cpu.mmu_tmp_buserror_fc; int orig_sz = m68ki_cpu.mmu_tmp_buserror_sz; /* INTERNAL REGISTERS (18 words) */ - m68ki_push_32(0); - m68ki_push_32(0); - m68ki_push_32(0); - m68ki_push_32(0); - m68ki_push_32(0); - m68ki_push_32(0); - m68ki_push_32(0); - m68ki_push_32(0); - m68ki_push_32(0); + m68ki_push_32(state, 0); + m68ki_push_32(state, 0); + m68ki_push_32(state, 0); + m68ki_push_32(state, 0); + m68ki_push_32(state, 0); + m68ki_push_32(state, 0); + m68ki_push_32(state, 0); + m68ki_push_32(state, 0); + m68ki_push_32(state, 0); /* VERSION# (4 bits), INTERNAL INFORMATION */ - m68ki_push_16(0); + m68ki_push_16(state, 0); /* INTERNAL REGISTERS (3 words) */ - m68ki_push_32(0); - m68ki_push_16(0); + m68ki_push_32(state, 0); + m68ki_push_16(state, 0); /* DATA INTPUT BUFFER (2 words) */ - m68ki_push_32(0); + m68ki_push_32(state, 0); /* INTERNAL REGISTERS (2 words) */ - m68ki_push_32(0); + m68ki_push_32(state, 0); /* STAGE B ADDRESS (2 words) */ - m68ki_push_32(0); + m68ki_push_32(state, 0); /* INTERNAL REGISTER (4 words) */ - m68ki_push_32(0); - m68ki_push_32(0); + m68ki_push_32(state, 0); + m68ki_push_32(state, 0); /* DATA OUTPUT BUFFER (2 words) */ - m68ki_push_32(0); + m68ki_push_32(state, 0); /* INTERNAL REGISTER */ - m68ki_push_16(0); + m68ki_push_16(state, 0); /* INTERNAL REGISTER */ - m68ki_push_16(0); + m68ki_push_16(state, 0); /* DATA CYCLE FAULT ADDRESS (2 words) */ - m68ki_push_32(fault_address); + m68ki_push_32(state, fault_address); /* INSTRUCTION PIPE STAGE B */ - m68ki_push_16(0); + m68ki_push_16(state, 0); /* INSTRUCTION PIPE STAGE C */ - m68ki_push_16(0); + m68ki_push_16(state, 0); /* SPECIAL STATUS REGISTER */ - m68ki_push_16(0x0100 | orig_fc | (orig_rw<<6) | (orig_sz<<4)); + m68ki_push_16(state, 0x0100 | orig_fc | (orig_rw << 6) | (orig_sz << 4)); /* INTERNAL REGISTER */ - m68ki_push_16(0); + m68ki_push_16(state, 0); /* 1011, VECTOR OFFSET */ - m68ki_push_16(0xb000 | (vector<<2)); + m68ki_push_16(state, 0xb000 | (vector << 2)); /* PROGRAM COUNTER */ - m68ki_push_32(pc); + m68ki_push_32(state, pc); /* STATUS REGISTER */ - m68ki_push_16(sr); + m68ki_push_16(state, 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(uint sr, uint vector, uint pc, uint fault_address, uint8 in_mmu) +static inline void +m68ki_stack_frame_0111(m68ki_cpu_core *state, uint sr, uint vector, uint pc, uint fault_address, uint8 in_mmu) { int orig_rw = m68ki_cpu.mmu_tmp_buserror_rw; // this gets splatted by the following pushes, so save it now int orig_fc = m68ki_cpu.mmu_tmp_buserror_fc; /* INTERNAL REGISTERS (18 words) */ - m68ki_push_32(0); - m68ki_push_32(0); - m68ki_push_32(0); - m68ki_push_32(0); - m68ki_push_32(0); - m68ki_push_32(0); - m68ki_push_32(0); - m68ki_push_32(0); - m68ki_push_32(0); + m68ki_push_32(state, 0); + m68ki_push_32(state, 0); + m68ki_push_32(state, 0); + m68ki_push_32(state, 0); + m68ki_push_32(state, 0); + m68ki_push_32(state, 0); + m68ki_push_32(state, 0); + m68ki_push_32(state, 0); + m68ki_push_32(state, 0); /* FAULT ADDRESS (2 words) */ - m68ki_push_32(fault_address); + m68ki_push_32(state, fault_address); /* INTERNAL REGISTERS (3 words) */ - m68ki_push_32(0); - m68ki_push_16(0); + m68ki_push_32(state, 0); + m68ki_push_16(state, 0); /* SPECIAL STATUS REGISTER (1 word) */ - m68ki_push_16((in_mmu ? 0x400 : 0) | orig_fc | (orig_rw<<8)); + m68ki_push_16(state, (in_mmu ? 0x400 : 0) | orig_fc | (orig_rw << 8)); /* EFFECTIVE ADDRESS (2 words) */ - m68ki_push_32(fault_address); + m68ki_push_32(state, fault_address); /* 0111, VECTOR OFFSET (1 word) */ - m68ki_push_16(0x7000 | (vector<<2)); + m68ki_push_16(state, 0x7000 | (vector << 2)); /* PROGRAM COUNTER (2 words) */ - m68ki_push_32(pc); + m68ki_push_32(state, pc); /* STATUS REGISTER (1 word) */ - m68ki_push_16(sr); + m68ki_push_16(state, sr); } /* Used for Group 2 exceptions. * These stack a type 2 frame on the 020. */ -static inline void m68ki_exception_trap(uint vector) +static inline void m68ki_exception_trap(m68ki_cpu_core *state, uint vector) { uint sr = m68ki_init_exception(); if(CPU_TYPE_IS_010_LESS(CPU_TYPE)) - m68ki_stack_frame_0000(REG_PC, sr, vector); + m68ki_stack_frame_0000(state, REG_PC, sr, vector); else - m68ki_stack_frame_0010(sr, vector); + m68ki_stack_frame_0010(state, sr, vector); - m68ki_jump_vector(vector); + m68ki_jump_vector(state, vector); /* Use up some clock cycles and undo the instruction's cycles */ USE_CYCLES(CYC_EXCEPTION[vector] - CYC_INSTRUCTION[REG_IR]); } /* Trap#n stacks a 0 frame but behaves like group2 otherwise */ -static inline void m68ki_exception_trapN(uint vector) +static inline void m68ki_exception_trapN(m68ki_cpu_core *state, uint vector) { uint sr = m68ki_init_exception(); - m68ki_stack_frame_0000(REG_PC, sr, vector); - m68ki_jump_vector(vector); + m68ki_stack_frame_0000(state, REG_PC, sr, vector); + m68ki_jump_vector(state, vector); /* Use up some clock cycles and undo the instruction's cycles */ USE_CYCLES(CYC_EXCEPTION[vector] - CYC_INSTRUCTION[REG_IR]); } /* Exception for trace mode */ -static inline void m68ki_exception_trace(void) +static inline void m68ki_exception_trace(m68ki_cpu_core *state) { uint sr = m68ki_init_exception(); @@ -2104,12 +2105,12 @@ static inline void m68ki_exception_trace(void) CPU_INSTR_MODE = INSTRUCTION_NO; } #endif /* M68K_EMULATE_ADDRESS_ERROR */ - m68ki_stack_frame_0000(REG_PC, sr, EXCEPTION_TRACE); + m68ki_stack_frame_0000(state, REG_PC, sr, EXCEPTION_TRACE); } else - m68ki_stack_frame_0010(sr, EXCEPTION_TRACE); + m68ki_stack_frame_0010(state, sr, EXCEPTION_TRACE); - m68ki_jump_vector(EXCEPTION_TRACE); + m68ki_jump_vector(state, EXCEPTION_TRACE); /* Trace nullifies a STOP instruction */ CPU_STOPPED &= ~STOP_LEVEL_STOP; @@ -2119,7 +2120,7 @@ static inline void m68ki_exception_trace(void) } /* Exception for privilege violation */ -static inline void m68ki_exception_privilege_violation(void) +static inline void m68ki_exception_privilege_violation(m68ki_cpu_core *state) { uint sr = m68ki_init_exception(); @@ -2130,8 +2131,8 @@ static inline void m68ki_exception_privilege_violation(void) } #endif /* M68K_EMULATE_ADDRESS_ERROR */ - m68ki_stack_frame_0000(REG_PPC, sr, EXCEPTION_PRIVILEGE_VIOLATION); - m68ki_jump_vector(EXCEPTION_PRIVILEGE_VIOLATION); + m68ki_stack_frame_0000(state, REG_PPC, sr, EXCEPTION_PRIVILEGE_VIOLATION); + m68ki_jump_vector(state, EXCEPTION_PRIVILEGE_VIOLATION); /* Use up some clock cycles and undo the instruction's cycles */ USE_CYCLES(CYC_EXCEPTION[EXCEPTION_PRIVILEGE_VIOLATION] - CYC_INSTRUCTION[REG_IR]); @@ -2142,7 +2143,7 @@ extern jmp_buf m68ki_bus_error_jmp_buf; #define m68ki_check_bus_error_trap() setjmp(m68ki_bus_error_jmp_buf) /* Exception for bus error */ -static inline void m68ki_exception_bus_error(void) +static inline void m68ki_exception_bus_error(m68ki_cpu_core *state) { int i; @@ -2166,16 +2167,16 @@ static inline void m68ki_exception_bus_error(void) } uint sr = m68ki_init_exception(); - m68ki_stack_frame_1000(REG_PPC, sr, EXCEPTION_BUS_ERROR); + m68ki_stack_frame_1000(state, REG_PPC, sr, EXCEPTION_BUS_ERROR); - m68ki_jump_vector(EXCEPTION_BUS_ERROR); + m68ki_jump_vector(state, EXCEPTION_BUS_ERROR); longjmp(m68ki_bus_error_jmp_buf, 1); } extern int cpu_log_enabled; /* Exception for A-Line instructions */ -static inline void m68ki_exception_1010(void) +static inline void m68ki_exception_1010(m68ki_cpu_core *state) { uint sr; #if M68K_LOG_1010_1111 == OPT_ON @@ -2185,15 +2186,15 @@ static inline void m68ki_exception_1010(void) #endif sr = m68ki_init_exception(); - m68ki_stack_frame_0000(REG_PPC, sr, EXCEPTION_1010); - m68ki_jump_vector(EXCEPTION_1010); + m68ki_stack_frame_0000(state, REG_PPC, sr, EXCEPTION_1010); + m68ki_jump_vector(state, EXCEPTION_1010); /* Use up some clock cycles and undo the instruction's cycles */ USE_CYCLES(CYC_EXCEPTION[EXCEPTION_1010] - CYC_INSTRUCTION[REG_IR]); } /* Exception for F-Line instructions */ -static inline void m68ki_exception_1111(void) +static inline void m68ki_exception_1111(m68ki_cpu_core *state) { uint sr; @@ -2204,8 +2205,8 @@ static inline void m68ki_exception_1111(void) #endif sr = m68ki_init_exception(); - m68ki_stack_frame_0000(REG_PPC, sr, EXCEPTION_1111); - m68ki_jump_vector(EXCEPTION_1111); + m68ki_stack_frame_0000(state, REG_PPC, sr, EXCEPTION_1111); + m68ki_jump_vector(state, EXCEPTION_1111); /* Use up some clock cycles and undo the instruction's cycles */ USE_CYCLES(CYC_EXCEPTION[EXCEPTION_1111] - CYC_INSTRUCTION[REG_IR]); @@ -2216,7 +2217,7 @@ extern int m68ki_illg_callback(int); #endif /* Exception for illegal instructions */ -static inline void m68ki_exception_illegal(void) +static inline void m68ki_exception_illegal(m68ki_cpu_core *state) { uint sr; @@ -2235,26 +2236,26 @@ static inline void m68ki_exception_illegal(void) } #endif /* M68K_EMULATE_ADDRESS_ERROR */ - m68ki_stack_frame_0000(REG_PPC, sr, EXCEPTION_ILLEGAL_INSTRUCTION); - m68ki_jump_vector(EXCEPTION_ILLEGAL_INSTRUCTION); + m68ki_stack_frame_0000(state, REG_PPC, sr, EXCEPTION_ILLEGAL_INSTRUCTION); + m68ki_jump_vector(state, EXCEPTION_ILLEGAL_INSTRUCTION); /* Use up some clock cycles and undo the instruction's cycles */ USE_CYCLES(CYC_EXCEPTION[EXCEPTION_ILLEGAL_INSTRUCTION] - CYC_INSTRUCTION[REG_IR]); } /* Exception for format errror in RTE */ -static inline void m68ki_exception_format_error(void) +static inline void m68ki_exception_format_error(m68ki_cpu_core *state) { uint sr = m68ki_init_exception(); - m68ki_stack_frame_0000(REG_PC, sr, EXCEPTION_FORMAT_ERROR); - m68ki_jump_vector(EXCEPTION_FORMAT_ERROR); + m68ki_stack_frame_0000(state, REG_PC, sr, EXCEPTION_FORMAT_ERROR); + m68ki_jump_vector(state, EXCEPTION_FORMAT_ERROR); /* Use up some clock cycles and undo the instruction's cycles */ USE_CYCLES(CYC_EXCEPTION[EXCEPTION_FORMAT_ERROR] - CYC_INSTRUCTION[REG_IR]); } /* Exception for address error */ -static inline void m68ki_exception_address_error(void) +static inline void m68ki_exception_address_error(m68ki_cpu_core *state) { uint32 sr = m68ki_init_exception(); @@ -2274,23 +2275,23 @@ static inline void m68ki_exception_address_error(void) if (CPU_TYPE_IS_000(CPU_TYPE)) { /* Note: This is implemented for 68000 only! */ - m68ki_stack_frame_buserr(sr); + m68ki_stack_frame_buserr(state, sr); } else if (CPU_TYPE_IS_010(CPU_TYPE)) { /* only the 68010 throws this unique type-1000 frame */ - m68ki_stack_frame_1000(REG_PPC, sr, EXCEPTION_BUS_ERROR); + m68ki_stack_frame_1000(state, REG_PPC, sr, EXCEPTION_BUS_ERROR); } else if (m68ki_cpu.mmu_tmp_buserror_address == REG_PPC) { - m68ki_stack_frame_1010(sr, EXCEPTION_BUS_ERROR, REG_PPC, m68ki_cpu.mmu_tmp_buserror_address); + m68ki_stack_frame_1010(state, sr, EXCEPTION_BUS_ERROR, REG_PPC, m68ki_cpu.mmu_tmp_buserror_address); } else { - m68ki_stack_frame_1011(sr, EXCEPTION_BUS_ERROR, REG_PPC, m68ki_cpu.mmu_tmp_buserror_address); + m68ki_stack_frame_1011(state, sr, EXCEPTION_BUS_ERROR, REG_PPC, m68ki_cpu.mmu_tmp_buserror_address); } - m68ki_jump_vector(EXCEPTION_ADDRESS_ERROR); + m68ki_jump_vector(state, EXCEPTION_ADDRESS_ERROR); m68ki_cpu.run_mode = RUN_MODE_BERR_AERR_RESET; @@ -2303,7 +2304,7 @@ static inline void m68ki_exception_address_error(void) /* Service an interrupt request and start exception processing */ -static inline void m68ki_exception_interrupt(uint int_level) +static inline void m68ki_exception_interrupt(m68ki_cpu_core *state, uint int_level) { uint vector; uint sr; @@ -2347,20 +2348,20 @@ static inline void m68ki_exception_interrupt(uint int_level) FLAG_INT_MASK = int_level<<8; /* Get the new PC */ - new_pc = m68ki_read_data_32((vector<<2) + REG_VBR); + new_pc = m68ki_read_data_32(state, (vector << 2) + REG_VBR); /* If vector is uninitialized, call the uninitialized interrupt vector */ if(new_pc == 0) - new_pc = m68ki_read_data_32((EXCEPTION_UNINITIALIZED_INTERRUPT<<2) + REG_VBR); + new_pc = m68ki_read_data_32(state, (EXCEPTION_UNINITIALIZED_INTERRUPT << 2) + REG_VBR); /* Generate a stack frame */ - m68ki_stack_frame_0000(REG_PC, sr, vector); + m68ki_stack_frame_0000(state, REG_PC, sr, vector); if(FLAG_M && CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) { /* Create throwaway frame */ m68ki_set_sm_flag(FLAG_S); /* clear M */ sr |= 0x2000; /* Same as SR in master stack frame except S is forced high */ - m68ki_stack_frame_0001(REG_PC, sr, vector); + m68ki_stack_frame_0001(state, REG_PC, sr, vector); } m68ki_jump(new_pc); @@ -2381,10 +2382,10 @@ static inline void m68ki_check_interrupts(m68ki_cpu_core *state) if(m68ki_cpu.nmi_pending) { m68ki_cpu.nmi_pending = FALSE; - m68ki_exception_interrupt(7); + m68ki_exception_interrupt(state, 7); } else if(CPU_INT_LEVEL > FLAG_INT_MASK) - m68ki_exception_interrupt(CPU_INT_LEVEL>>8); + m68ki_exception_interrupt(state, CPU_INT_LEVEL >> 8); }