From 7c11e8a5685d4af0e367e4d3d074c918bfc85a7c Mon Sep 17 00:00:00 2001 From: mooglyguy Date: Sat, 4 Nov 2017 20:52:56 +0100 Subject: elfin 315% -> 330% on my machine. (nw) --- src/devices/cpu/e132xs/32xsdefs.h | 168 +++++++ src/devices/cpu/e132xs/e132xs.cpp | 573 +++++++---------------- src/devices/cpu/e132xs/e132xs.h | 147 +++++- src/devices/cpu/e132xs/e132xsop.hxx | 906 +++++++++++++++++++++++++----------- 4 files changed, 1121 insertions(+), 673 deletions(-) diff --git a/src/devices/cpu/e132xs/32xsdefs.h b/src/devices/cpu/e132xs/32xsdefs.h index 164377f0060..1e4a6e5b1cc 100644 --- a/src/devices/cpu/e132xs/32xsdefs.h +++ b/src/devices/cpu/e132xs/32xsdefs.h @@ -93,4 +93,172 @@ #define E132XS_ENTRY_IRAM 3 #define E132XS_ENTRY_MEM3 7 +/* Memory access */ +/* read byte */ +#define READ_B(addr) m_program->read_byte((addr)) +/* read half-word */ +#define READ_HW(addr) m_program->read_word((addr) & ~1) +/* read word */ +#define READ_W(addr) m_program->read_dword((addr) & ~3) + +/* write byte */ +#define WRITE_B(addr, data) m_program->write_byte(addr, data) +/* write half-word */ +#define WRITE_HW(addr, data) m_program->write_word((addr) & ~1, data) +/* write word */ +#define WRITE_W(addr, data) m_program->write_dword((addr) & ~3, data) + + +/* I/O access */ +/* read word */ +#define IO_READ_W(addr) m_io->read_dword(((addr) >> 11) & 0x7ffc) +/* write word */ +#define IO_WRITE_W(addr, data) m_io->write_dword(((addr) >> 11) & 0x7ffc, data) + + +#define READ_OP(addr) m_direct->read_word((addr), m_opcodexor) + +// set C in adds/addsi/subs/sums +#define SETCARRYS 0 +#define MISSIONCRAFT_FLAGS 1 + +/* Registers */ + +/* Internal registers */ + +#define SREG decode.src_value +#define SREGF decode.next_src_value +#define DREG decode.dst_value +#define DREGF decode.next_dst_value +#define EXTRA_U decode.extra.u +#define EXTRA_S decode.extra.s + +#define SET_SREG( _data_ ) (decode.src_is_local ? set_local_register(decode.src, (uint32_t)_data_) : set_global_register(decode.src, (uint32_t)_data_)) +#define SET_SREGF( _data_ ) (decode.src_is_local ? set_local_register(decode.src + 1, (uint32_t)_data_) : set_global_register(decode.src + 1, (uint32_t)_data_)) +#define SET_DREG( _data_ ) (decode.dst_is_local ? set_local_register(decode.dst, (uint32_t)_data_) : set_global_register(decode.dst, (uint32_t)_data_)) +#define SET_DREGF( _data_ ) (decode.dst_is_local ? set_local_register(decode.dst + 1, (uint32_t)_data_) : set_global_register(decode.dst + 1, (uint32_t)_data_)) + +#define SRC_IS_PC (!decode.src_is_local && decode.src == PC_REGISTER) +#define DST_IS_PC (!decode.dst_is_local && decode.dst == PC_REGISTER) +#define SRC_IS_SR (!decode.src_is_local && decode.src == SR_REGISTER) +#define DST_IS_SR (!decode.dst_is_local && decode.dst == SR_REGISTER) +#define SAME_SRC_DST decode.same_src_dst +#define SAME_SRC_DSTF decode.same_src_dstf +#define SAME_SRCF_DST decode.same_srcf_dst + + +/* Memory access */ +/* read byte */ +#define READ_B(addr) m_program->read_byte((addr)) +/* read half-word */ +#define READ_HW(addr) m_program->read_word((addr) & ~1) +/* read word */ +#define READ_W(addr) m_program->read_dword((addr) & ~3) + +/* write byte */ +#define WRITE_B(addr, data) m_program->write_byte(addr, data) +/* write half-word */ +#define WRITE_HW(addr, data) m_program->write_word((addr) & ~1, data) +/* write word */ +#define WRITE_W(addr, data) m_program->write_dword((addr) & ~3, data) + + +/* I/O access */ +/* read word */ +#define IO_READ_W(addr) m_io->read_dword(((addr) >> 11) & 0x7ffc) +/* write word */ +#define IO_WRITE_W(addr, data) m_io->write_dword(((addr) >> 11) & 0x7ffc, data) + + +#define READ_OP(addr) m_direct->read_word((addr), m_opcodexor) + +#define OP m_op +#define PPC m_ppc //previous pc +#define PC m_global_regs[0] //Program Counter +#define SR m_global_regs[1] //Status Register +#define FER m_global_regs[2] //Floating-Point Exception Register +// 03 - 15 General Purpose Registers +// 16 - 17 Reserved +#define SP m_global_regs[18] //Stack Pointer +#define UB m_global_regs[19] //Upper Stack Bound +#define BCR m_global_regs[20] //Bus Control Register +#define TPR m_global_regs[21] //Timer Prescaler Register +#define TCR m_global_regs[22] //Timer Compare Register +#define TR compute_tr() //Timer Register +#define WCR m_global_regs[24] //Watchdog Compare Register +#define ISR m_global_regs[25] //Input Status Register +#define FCR m_global_regs[26] //Function Control Register +#define MCR m_global_regs[27] //Memory Control Register +// 28 - 31 Reserved + +#define C_MASK 0x00000001 +#define Z_MASK 0x00000002 +#define N_MASK 0x00000004 +#define V_MASK 0x00000008 +#define M_MASK 0x00000010 +#define H_MASK 0x00000020 +#define I_MASK 0x00000080 +#define L_MASK 0x00008000 +#define T_MASK 0x00010000 +#define P_MASK 0x00020000 +#define S_MASK 0x00040000 + +/* SR flags */ +#define GET_C ( SR & C_MASK) // bit 0 //CARRY +#define GET_Z ((SR & Z_MASK)>>1) // bit 1 //ZERO +#define GET_N ((SR & N_MASK)>>2) // bit 2 //NEGATIVE +#define GET_V ((SR & V_MASK)>>3) // bit 3 //OVERFLOW +#define GET_M ((SR & M_MASK)>>4) // bit 4 //CACHE-MODE +#define GET_H ((SR & H_MASK)>>5) // bit 5 //HIGHGLOBAL +// bit 6 RESERVED (always 0) +#define GET_I ((SR & I_MASK)>>7) // bit 7 //INTERRUPT-MODE +#define GET_FTE ((SR & 0x00001f00)>>8) // bits 12 - 8 //Floating-Point Trap Enable +#define GET_FRM ((SR & 0x00006000)>>13) // bits 14 - 13 //Floating-Point Rounding Mode +#define GET_L ((SR & L_MASK)>>15) // bit 15 //INTERRUPT-LOCK +#define GET_T ((SR & T_MASK)>>16) // bit 16 //TRACE-MODE +#define GET_P ((SR & P_MASK)>>17) // bit 17 //TRACE PENDING +#define GET_S ((SR & S_MASK)>>18) // bit 18 //SUPERVISOR STATE +#define GET_ILC ((SR & 0x00180000)>>19) // bits 20 - 19 //INSTRUCTION-LENGTH +/* if FL is zero it is always interpreted as 16 */ +#define GET_FL ((SR & 0x01e00000) ? ((SR & 0x01e00000)>>21) : 16) // bits 24 - 21 //FRAME LENGTH +#define GET_FP ((SR & 0xfe000000)>>25) // bits 31 - 25 //FRAME POINTER + +#define SET_C(val) (SR = (SR & ~C_MASK) | (val)) +#define SET_Z(val) (SR = (SR & ~Z_MASK) | ((val) << 1)) +#define SET_N(val) (SR = (SR & ~N_MASK) | ((val) << 2)) +#define SET_V(val) (SR = (SR & ~V_MASK) | ((val) << 3)) +#define SET_M(val) (SR = (SR & ~M_MASK) | ((val) << 4)) +#define SET_H(val) (SR = (SR & ~H_MASK) | ((val) << 5)) +#define SET_I(val) (SR = (SR & ~I_MASK) | ((val) << 7)) +#define SET_FTE(val) (SR = (SR & ~0x00001f00) | ((val) << 8)) +#define SET_FRM(val) (SR = (SR & ~0x00006000) | ((val) << 13)) +#define SET_L(val) (SR = (SR & ~L_MASK) | ((val) << 15)) +#define SET_T(val) (SR = (SR & ~T_MASK) | ((val) << 16)) +#define SET_P(val) (SR = (SR & ~P_MASK) | ((val) << 17)) +#define SET_S(val) (SR = (SR & ~S_MASK) | ((val) << 18)) +#define SET_ILC(val) (SR = (SR & 0xffe7ffff) | (val)) +#define SET_FL(val) (SR = (SR & ~0x01e00000) | ((val) << 21)) +#define SET_FP(val) (SR = (SR & ~0xfe000000) | ((val) << 25)) + +#define SET_PC(val) PC = ((val) & 0xfffffffe) //PC(0) = 0 +#define SET_SP(val) SP = ((val) & 0xfffffffc) //SP(0) = SP(1) = 0 +#define SET_UB(val) UB = ((val) & 0xfffffffc) //UB(0) = UB(1) = 0 + +#define SET_LOW_SR(val) (SR = (SR & 0xffff0000) | ((val) & 0x0000ffff)) // when SR is addressed, only low 16 bits can be changed + + +#define CHECK_C(x) (SR = (SR & ~0x00000001) | (((x) & (((uint64_t)1) << 32)) ? 1 : 0 )) +#define CHECK_VADD(x,y,z) (SR = (SR & ~0x00000008) | ((((x) ^ (z)) & ((y) ^ (z)) & 0x80000000) ? 8: 0)) +#define CHECK_VADD3(x,y,w,z) (SR = (SR & ~0x00000008) | ((((x) ^ (z)) & ((y) ^ (z)) & ((w) ^ (z)) & 0x80000000) ? 8: 0)) +#define CHECK_VSUB(x,y,z) (SR = (SR & ~0x00000008) | ((((z) ^ (y)) & ((y) ^ (x)) & 0x80000000) ? 8: 0)) + + +/* FER flags */ +#define GET_ACCRUED (FER & 0x0000001f) //bits 4 - 0 //Floating-Point Accrued Exceptions +#define GET_ACTUAL (FER & 0x00001f00) //bits 12 - 8 //Floating-Point Actual Exceptions +//other bits are reversed, in particular 7 - 5 for the operating system. +//the user program can only changes the above 2 flags + + #endif // MAME_CPU_E132XS_XS32DEFS_H + diff --git a/src/devices/cpu/e132xs/e132xs.cpp b/src/devices/cpu/e132xs/e132xs.cpp index c5c8e7388a0..e9db1c8500b 100644 --- a/src/devices/cpu/e132xs/e132xs.cpp +++ b/src/devices/cpu/e132xs/e132xs.cpp @@ -226,85 +226,6 @@ #define DEBUG_PRINTF(x) do { } while (0) #endif -/* Memory access */ -/* read byte */ -#define READ_B(addr) m_program->read_byte((addr)) -/* read half-word */ -#define READ_HW(addr) m_program->read_word((addr) & ~1) -/* read word */ -#define READ_W(addr) m_program->read_dword((addr) & ~3) - -/* write byte */ -#define WRITE_B(addr, data) m_program->write_byte(addr, data) -/* write half-word */ -#define WRITE_HW(addr, data) m_program->write_word((addr) & ~1, data) -/* write word */ -#define WRITE_W(addr, data) m_program->write_dword((addr) & ~3, data) - - -/* I/O access */ -/* read word */ -#define IO_READ_W(addr) m_io->read_dword(((addr) >> 11) & 0x7ffc) -/* write word */ -#define IO_WRITE_W(addr, data) m_io->write_dword(((addr) >> 11) & 0x7ffc, data) - - -#define READ_OP(addr) m_direct->read_word((addr), m_opcodexor) - -// set C in adds/addsi/subs/sums -#define SETCARRYS 0 -#define MISSIONCRAFT_FLAGS 1 - -/* Registers */ - -/* Internal registers */ - -#define SREG decode.src_value -#define SREGF decode.next_src_value -#define DREG decode.dst_value -#define DREGF decode.next_dst_value -#define EXTRA_U decode.extra.u -#define EXTRA_S decode.extra.s - -#define SET_SREG( _data_ ) (decode.src_is_local ? set_local_register(decode.src, (uint32_t)_data_) : set_global_register(decode.src, (uint32_t)_data_)) -#define SET_SREGF( _data_ ) (decode.src_is_local ? set_local_register(decode.src + 1, (uint32_t)_data_) : set_global_register(decode.src + 1, (uint32_t)_data_)) -#define SET_DREG( _data_ ) (decode.dst_is_local ? set_local_register(decode.dst, (uint32_t)_data_) : set_global_register(decode.dst, (uint32_t)_data_)) -#define SET_DREGF( _data_ ) (decode.dst_is_local ? set_local_register(decode.dst + 1, (uint32_t)_data_) : set_global_register(decode.dst + 1, (uint32_t)_data_)) - -#define SRC_IS_PC (!decode.src_is_local && decode.src == PC_REGISTER) -#define DST_IS_PC (!decode.dst_is_local && decode.dst == PC_REGISTER) -#define SRC_IS_SR (!decode.src_is_local && decode.src == SR_REGISTER) -#define DST_IS_SR (!decode.dst_is_local && decode.dst == SR_REGISTER) -#define SAME_SRC_DST decode.same_src_dst -#define SAME_SRC_DSTF decode.same_src_dstf -#define SAME_SRCF_DST decode.same_srcf_dst - - -/* Memory access */ -/* read byte */ -#define READ_B(addr) m_program->read_byte((addr)) -/* read half-word */ -#define READ_HW(addr) m_program->read_word((addr) & ~1) -/* read word */ -#define READ_W(addr) m_program->read_dword((addr) & ~3) - -/* write byte */ -#define WRITE_B(addr, data) m_program->write_byte(addr, data) -/* write half-word */ -#define WRITE_HW(addr, data) m_program->write_word((addr) & ~1, data) -/* write word */ -#define WRITE_W(addr, data) m_program->write_dword((addr) & ~3, data) - - -/* I/O access */ -/* read word */ -#define IO_READ_W(addr) m_io->read_dword(((addr) >> 11) & 0x7ffc) -/* write word */ -#define IO_WRITE_W(addr, data) m_io->write_dword(((addr) >> 11) & 0x7ffc, data) - - -#define READ_OP(addr) m_direct->read_word((addr), m_opcodexor) - //************************************************************************** // INTERNAL ADDRESS MAP //************************************************************************** @@ -560,82 +481,6 @@ void hyperstone_device::hyperstone_set_trap_entry(int which) } } -#define OP m_op -#define PPC m_ppc //previous pc -#define PC m_global_regs[0] //Program Counter -#define SR m_global_regs[1] //Status Register -#define FER m_global_regs[2] //Floating-Point Exception Register -// 03 - 15 General Purpose Registers -// 16 - 17 Reserved -#define SP m_global_regs[18] //Stack Pointer -#define UB m_global_regs[19] //Upper Stack Bound -#define BCR m_global_regs[20] //Bus Control Register -#define TPR m_global_regs[21] //Timer Prescaler Register -#define TCR m_global_regs[22] //Timer Compare Register -#define TR compute_tr() //Timer Register -#define WCR m_global_regs[24] //Watchdog Compare Register -#define ISR m_global_regs[25] //Input Status Register -#define FCR m_global_regs[26] //Function Control Register -#define MCR m_global_regs[27] //Memory Control Register -// 28 - 31 Reserved - -/* SR flags */ -#define GET_C ( SR & 0x00000001) // bit 0 //CARRY -#define GET_Z ((SR & 0x00000002)>>1) // bit 1 //ZERO -#define GET_N ((SR & 0x00000004)>>2) // bit 2 //NEGATIVE -#define GET_V ((SR & 0x00000008)>>3) // bit 3 //OVERFLOW -#define GET_M ((SR & 0x00000010)>>4) // bit 4 //CACHE-MODE -#define GET_H ((SR & 0x00000020)>>5) // bit 5 //HIGHGLOBAL -// bit 6 RESERVED (always 0) -#define GET_I ((SR & 0x00000080)>>7) // bit 7 //INTERRUPT-MODE -#define GET_FTE ((SR & 0x00001f00)>>8) // bits 12 - 8 //Floating-Point Trap Enable -#define GET_FRM ((SR & 0x00006000)>>13) // bits 14 - 13 //Floating-Point Rounding Mode -#define GET_L ((SR & 0x00008000)>>15) // bit 15 //INTERRUPT-LOCK -#define GET_T ((SR & 0x00010000)>>16) // bit 16 //TRACE-MODE -#define GET_P ((SR & 0x00020000)>>17) // bit 17 //TRACE PENDING -#define GET_S ((SR & 0x00040000)>>18) // bit 18 //SUPERVISOR STATE -#define GET_ILC ((SR & 0x00180000)>>19) // bits 20 - 19 //INSTRUCTION-LENGTH -/* if FL is zero it is always interpreted as 16 */ -#define GET_FL ((SR & 0x01e00000) ? ((SR & 0x01e00000)>>21) : 16) // bits 24 - 21 //FRAME LENGTH -#define GET_FP ((SR & 0xfe000000)>>25) // bits 31 - 25 //FRAME POINTER - -#define SET_C(val) (SR = (SR & ~0x00000001) | (val)) -#define SET_Z(val) (SR = (SR & ~0x00000002) | ((val) << 1)) -#define SET_N(val) (SR = (SR & ~0x00000004) | ((val) << 2)) -#define SET_V(val) (SR = (SR & ~0x00000008) | ((val) << 3)) -#define SET_M(val) (SR = (SR & ~0x00000010) | ((val) << 4)) -#define SET_H(val) (SR = (SR & ~0x00000020) | ((val) << 5)) -#define SET_I(val) (SR = (SR & ~0x00000080) | ((val) << 7)) -#define SET_FTE(val) (SR = (SR & ~0x00001f00) | ((val) << 8)) -#define SET_FRM(val) (SR = (SR & ~0x00006000) | ((val) << 13)) -#define SET_L(val) (SR = (SR & ~0x00008000) | ((val) << 15)) -#define SET_T(val) (SR = (SR & ~0x00010000) | ((val) << 16)) -#define SET_P(val) (SR = (SR & ~0x00020000) | ((val) << 17)) -#define SET_S(val) (SR = (SR & ~0x00040000) | ((val) << 18)) -#define SET_ILC(val) (SR = (SR & 0xffe7ffff) | (val)) -#define SET_FL(val) (SR = (SR & ~0x01e00000) | ((val) << 21)) -#define SET_FP(val) (SR = (SR & ~0xfe000000) | ((val) << 25)) - -#define SET_PC(val) PC = ((val) & 0xfffffffe) //PC(0) = 0 -#define SET_SP(val) SP = ((val) & 0xfffffffc) //SP(0) = SP(1) = 0 -#define SET_UB(val) UB = ((val) & 0xfffffffc) //UB(0) = UB(1) = 0 - -#define SET_LOW_SR(val) (SR = (SR & 0xffff0000) | ((val) & 0x0000ffff)) // when SR is addressed, only low 16 bits can be changed - - -#define CHECK_C(x) (SR = (SR & ~0x00000001) | (((x) & (((uint64_t)1) << 32)) ? 1 : 0 )) -#define CHECK_VADD(x,y,z) (SR = (SR & ~0x00000008) | ((((x) ^ (z)) & ((y) ^ (z)) & 0x80000000) ? 8: 0)) -#define CHECK_VADD3(x,y,w,z) (SR = (SR & ~0x00000008) | ((((x) ^ (z)) & ((y) ^ (z)) & ((w) ^ (z)) & 0x80000000) ? 8: 0)) -#define CHECK_VSUB(x,y,z) (SR = (SR & ~0x00000008) | ((((z) ^ (y)) & ((y) ^ (x)) & 0x80000000) ? 8: 0)) - - -/* FER flags */ -#define GET_ACCRUED (FER & 0x0000001f) //bits 4 - 0 //Floating-Point Accrued Exceptions -#define GET_ACTUAL (FER & 0x00001f00) //bits 12 - 8 //Floating-Point Actual Exceptions -//other bits are reversed, in particular 7 - 5 for the operating system. -//the user program can only changes the above 2 flags - - uint32_t hyperstone_device::compute_tr() { uint64_t cycles_since_base = total_cycles() - m_tr_base_cycles; @@ -895,115 +740,164 @@ static const int32_t immediate_values[32] = #define WRITE_ONLY_REGMASK ((1 << BCR_REGISTER) | (1 << TPR_REGISTER) | (1 << FCR_REGISTER) | (1 << MCR_REGISTER)) -#define decode_source(decode, local, hflag) \ +#define decode_source_local(decode) \ do \ { \ - if(local) \ + decode.src_is_local = 1; \ + uint8_t code = (decode.src + GET_FP) % 64; \ + SREG = m_local_regs[code]; \ + code = (decode.src + 1 + GET_FP) % 64; \ + SREGF = m_local_regs[code]; \ +} while (0) + +#define decode_source_noh(decode) \ +do \ +{ \ + decode.src_is_local = 0; \ + \ + SREG = get_global_register(decode.src); \ + \ + /* bound safe */ \ + if (decode.src != 15) \ + SREGF = get_global_register(decode.src + 1); \ + else \ + SREGF = 0; \ +} while (0) + +#define decode_source(decode, hflag) \ +do \ +{ \ + decode.src_is_local = 0; \ + \ + if (!hflag) \ { \ - uint8_t code = decode.src; \ - decode.src_is_local = 1; \ - code = (decode.src + GET_FP) % 64; /* registers offset by frame pointer */ \ - SREG = m_local_regs[code]; \ - code = (decode.src + 1 + GET_FP) % 64; \ - SREGF = m_local_regs[code]; \ + SREG = get_global_register(decode.src); \ + \ + /* bound safe */ \ + if (decode.src != 15) \ + SREGF = get_global_register(decode.src + 1); \ + else \ + SREGF = 0; \ } \ else \ { \ - decode.src_is_local = 0; \ - \ - if (!hflag) \ - { \ - SREG = get_global_register(decode.src); \ - \ - /* bound safe */ \ - if (decode.src != 15) \ - SREGF = get_global_register(decode.src + 1); \ - else \ - SREGF = 0; \ - } \ + decode.src += 16; \ + \ + SREG = get_global_register(decode.src); \ + if ((WRITE_ONLY_REGMASK >> decode.src) & 1) \ + SREG = 0; /* write-only registers */ \ + else if (decode.src == ISR_REGISTER) \ + DEBUG_PRINTF(("read src ISR. PC = %08X\n",PPC)); \ + \ + /* bound safe */ \ + if (decode.src != 31) \ + SREGF = get_global_register(decode.src + 1); \ else \ - { \ - decode.src += 16; \ - \ - SREG = get_global_register(decode.src); \ - if ((WRITE_ONLY_REGMASK >> decode.src) & 1) \ - SREG = 0; /* write-only registers */ \ - else if (decode.src == ISR_REGISTER) \ - DEBUG_PRINTF(("read src ISR. PC = %08X\n",PPC)); \ - \ - /* bound safe */ \ - if (decode.src != 31) \ - SREGF = get_global_register(decode.src + 1); \ - else \ - SREGF = 0; \ - } \ + SREGF = 0; \ } \ } while (0) -#define decode_dest(decode, local, hflag) \ +#define decode_dest_noh(decode) \ do \ { \ - if(local) \ + decode.dst_is_local = 0; \ + \ + DREG = get_global_register(decode.dst); \ + \ + /* bound safe */ \ + if (decode.dst != 15) \ + DREGF = get_global_register(decode.dst + 1); \ +} while (0) + + +#define decode_dest(decode, hflag) \ +do \ +{ \ + decode.dst_is_local = 0; \ + \ + if (!hflag) \ { \ - uint8_t code = decode.dst; \ - decode.dst_is_local = 1; \ - code = (decode.dst + GET_FP) % 64; /* registers offset by frame pointer */ \ - DREG = m_local_regs[code]; \ - code = (decode.dst + 1 + GET_FP) % 64; \ - DREGF = m_local_regs[code]; \ + DREG = get_global_register(decode.dst); \ + \ + /* bound safe */ \ + if (decode.dst != 15) \ + DREGF = get_global_register(decode.dst + 1); \ } \ else \ { \ - decode.dst_is_local = 0; \ - \ - if (!hflag) \ - { \ - DREG = get_global_register(decode.dst); \ - \ - /* bound safe */ \ - if (decode.dst != 15) \ - DREGF = get_global_register(decode.dst + 1); \ - } \ - else \ - { \ - decode.dst += 16; \ + decode.dst += 16; \ + \ + DREG = get_global_register(decode.dst); \ + if( decode.dst == ISR_REGISTER ) \ + DEBUG_PRINTF(("read dst ISR. PC = %08X\n",PPC)); \ + \ + /* bound safe */ \ + if (decode.dst != 31) \ + DREGF = get_global_register(decode.dst + 1); \ + } \ +} while (0) + +#define decode_dest_local(decode) \ +do \ +{ \ + uint8_t code = decode.dst; \ + decode.dst_is_local = 1; \ + code = (decode.dst + GET_FP) % 64; /* registers offset by frame pointer */ \ + DREG = m_local_regs[code]; \ + code = (decode.dst + 1 + GET_FP) % 64; \ + DREGF = m_local_regs[code]; \ +} while (0) + +#define decode_RR00(decode) \ +do \ +{ \ + decode.src = SRC_CODE; \ + decode.dst = DST_CODE; \ + decode_source_noh(decode); \ + decode_dest_noh(decode); \ \ - DREG = get_global_register(decode.dst); \ - if( decode.dst == ISR_REGISTER ) \ - DEBUG_PRINTF(("read dst ISR. PC = %08X\n",PPC)); \ + SAME_SRC_DST = (SRC_CODE == DST_CODE); \ + SAME_SRC_DSTF = (SRC_CODE == (DST_CODE + 1)); \ + SAME_SRCF_DST = ((SRC_CODE + 1) == DST_CODE); \ +} while (0) + +#define decode_RR01(decode) \ +do \ +{ \ + decode.src = SRC_CODE; \ + decode.dst = DST_CODE; \ + decode_source_local(decode); \ + decode_dest_noh(decode); \ \ - /* bound safe */ \ - if (decode.dst != 31) \ - DREGF = get_global_register(decode.dst + 1); \ - } \ - } \ + SAME_SRC_DST = 0; \ + SAME_SRC_DSTF = 0; \ + SAME_SRCF_DST = 0; \ } while (0) -#define decode_RR(decode, dlocal, slocal) \ +#define decode_RR10(decode) \ do \ { \ decode.src = SRC_CODE; \ decode.dst = DST_CODE; \ - decode_source(decode, slocal, 0); \ - decode_dest(decode, dlocal, 0); \ + decode_source_noh(decode); \ + decode_dest_local(decode); \ \ - SAME_SRC_DST = ((slocal) == (dlocal) && SRC_CODE == DST_CODE); \ + SAME_SRC_DST = 0; \ + SAME_SRC_DSTF = 0; \ + SAME_SRCF_DST = 0; \ +} while (0) + +#define decode_RR11(decode) \ +do \ +{ \ + decode.src = SRC_CODE; \ + decode.dst = DST_CODE; \ + decode_source_local(decode); \ + decode_dest_local(decode); \ \ - if ((slocal) && (dlocal)) \ - { \ - SAME_SRC_DSTF = (SRC_CODE == ((DST_CODE + 1) % 64)); \ - SAME_SRCF_DST = (((SRC_CODE + 1) % 64) == DST_CODE); \ - } \ - else if ((slocal) == 0 && (dlocal) == 0) \ - { \ - SAME_SRC_DSTF = (SRC_CODE == (DST_CODE + 1)); \ - SAME_SRCF_DST = ((SRC_CODE + 1) == DST_CODE); \ - } \ - else \ - { \ - SAME_SRC_DSTF = 0; \ - SAME_SRCF_DST = 0; \ - } \ + SAME_SRC_DST = (SRC_CODE == DST_CODE); \ + SAME_SRC_DSTF = (SRC_CODE == ((DST_CODE + 1) % 64)); \ + SAME_SRCF_DST = (((SRC_CODE + 1) % 64) == DST_CODE); \ } while (0) #define decode_LL(decode) \ @@ -1011,8 +905,8 @@ do { \ decode.src = SRC_CODE; \ decode.dst = DST_CODE; \ - decode_source(decode, LOCAL, 0); \ - decode_dest(decode, LOCAL, 0); \ + decode_source_local(decode); \ + decode_dest_local(decode); \ \ SAME_SRC_DST = (SRC_CODE == DST_CODE); \ SAME_SRC_DSTF = (SRC_CODE == ((DST_CODE + 1) % 64)); \ @@ -1024,8 +918,11 @@ do { \ decode.src = SRC_CODE; \ decode.dst = DST_CODE; \ - decode_source(decode, slocal, 0); \ - decode_dest(decode, LOCAL, 0); \ + if (slocal) \ + decode_source_local(decode); \ + else \ + decode_source_noh(decode); \ + decode_dest_local(decode); \ \ SAME_SRC_DST = 0; \ SAME_SRC_DSTF = 0; \ @@ -1043,36 +940,39 @@ do } \ } while (0) -#define decode_immediate(decode, nbit) \ +#define decode_immediate_u(decode) \ do \ { \ - if (!nbit) \ EXTRA_U = immediate_values[OP & 0x0f]; \ - else \ - switch( OP & 0x0f ) \ - { \ - default: \ - EXTRA_U = immediate_values[0x10 + (OP & 0x0f)]; \ - break; \ - \ - case 1: \ - m_instruction_length = (3<<19); \ - EXTRA_U = (READ_OP(PC) << 16) | READ_OP(PC + 2); \ - PC += 4; \ - break; \ - \ - case 2: \ - m_instruction_length = (2<<19); \ - EXTRA_U = READ_OP(PC); \ - PC += 2; \ - break; \ - \ - case 3: \ - m_instruction_length = (2<<19); \ - EXTRA_U = 0xffff0000 | READ_OP(PC); \ - PC += 2; \ - break; \ - } \ +} while (0) + +#define decode_immediate_s(decode) \ +do \ +{ \ + switch( OP & 0x0f ) \ + { \ + default: \ + EXTRA_U = immediate_values[0x10 + (OP & 0x0f)]; \ + break; \ + \ + case 1: \ + m_instruction_length = (3<<19); \ + EXTRA_U = (READ_OP(PC) << 16) | READ_OP(PC + 2); \ + PC += 4; \ + break; \ + \ + case 2: \ + m_instruction_length = (2<<19); \ + EXTRA_U = READ_OP(PC); \ + PC += 2; \ + break; \ + \ + case 3: \ + m_instruction_length = (2<<19); \ + EXTRA_U = 0xffff0000 | READ_OP(PC); \ + PC += 2; \ + break; \ + } \ } while (0) #define decode_const(decode) \ @@ -1191,136 +1091,6 @@ do } \ } while (0) -#define RRdecode(decode, dlocal, slocal) \ -do \ -{ \ - check_delay_PC(); \ - decode_RR(decode, dlocal, slocal); \ -} while (0) - -#define RRlimdecode(decode, dlocal, slocal) \ -do \ -{ \ - decode_lim(decode); \ - check_delay_PC(); \ - decode_RR(decode, dlocal, slocal); \ -} while (0) - -#define RRconstdecode(decode, dlocal, slocal) \ -do \ -{ \ - decode_const(decode); \ - check_delay_PC(); \ - decode_RR(decode, dlocal, slocal); \ -} while (0) - -#define RRdisdecode(decode, dlocal, slocal) \ -do \ -{ \ - decode_dis(decode); \ - check_delay_PC(); \ - decode_RR(decode, dlocal, slocal); \ -} while (0) - -#define RRdecodewithHflag(decode, dlocal, slocal) \ -do \ -{ \ - check_delay_PC(); \ - decode.src = SRC_CODE; \ - decode.dst = DST_CODE; \ - decode_source(decode, slocal, GET_H); \ - decode_dest(decode, dlocal, GET_H); \ - \ - if(GET_H) \ - if(slocal == 0 && dlocal == 0) \ - DEBUG_PRINTF(("MOV with hflag and 2 GRegs! PC = %08X\n",PPC)); \ -} while (0) - -#define Rimmdecode(decode, dlocal, nbit) \ -do \ -{ \ - decode_immediate(decode, nbit); \ - check_delay_PC(); \ - decode.dst = DST_CODE; \ - decode_dest(decode, dlocal, 0); \ -} while (0) - -#define Rndecode(decode, dlocal) \ -do \ -{ \ - check_delay_PC(); \ - decode.dst = DST_CODE; \ - decode_dest(decode, dlocal, 0); \ -} while (0) - -#define RimmdecodewithHflag(decode, dlocal, nbit) \ -do \ -{ \ - decode_immediate(decode, nbit); \ - check_delay_PC(); \ - decode.dst = DST_CODE; \ - decode_dest(decode, dlocal, GET_H); \ -} while (0) - -#define Lndecode(decode) \ -do \ -{ \ - check_delay_PC(); \ - decode.dst = DST_CODE; \ - decode_dest(decode, LOCAL, 0); \ -} while (0) - -#define LLdecode(decode) \ -do \ -{ \ - check_delay_PC(); \ - decode_LL(decode); \ -} while (0) - -#define LLextdecode(decode) \ -do \ -{ \ - m_instruction_length = (2<<19); \ - EXTRA_U = READ_OP(PC); \ - PC += 2; \ - check_delay_PC(); \ - decode_LL(decode); \ -} while (0) - -#define LRdecode(decode, slocal) \ -do \ -{ \ - check_delay_PC(); \ - decode_LR(decode, slocal); \ -} while (0) - -#define LRconstdecode(decode, slocal) \ -do \ -{ \ - decode_const(decode); \ - check_delay_PC(); \ - decode_LR(decode, slocal); \ -} while (0) - -#define PCreldecode(decode) \ -do \ -{ \ - decode_pcrel(decode); \ - check_delay_PC(); \ -} while (0) - -#define PCadrdecode(decode) \ -do \ -{ \ - check_delay_PC(); \ -} while (0) - -#define no_decode(decode) \ -do \ -{ \ -} while (0) - - void hyperstone_device::execute_br(regs_decode &decode) { PPC = PC; @@ -3103,11 +2873,6 @@ void hyperstone_device::hyperstone_shl(regs_decode &decode) m_icount -= m_clock_cycles_1; } -void hyperstone_device::reserved(regs_decode &decode) -{ - DEBUG_PRINTF(("Executed Reserved opcode. PC = %08X OP = %04X\n", PC, OP)); -} - void hyperstone_device::hyperstone_testlz(regs_decode &decode) { uint8_t zeros = 0; diff --git a/src/devices/cpu/e132xs/e132xs.h b/src/devices/cpu/e132xs/e132xs.h index 2395d64f85b..2d6e9c94ebd 100644 --- a/src/devices/cpu/e132xs/e132xs.h +++ b/src/devices/cpu/e132xs/e132xs.h @@ -340,7 +340,21 @@ private: void hyperstone_trap(regs_decode &decode); void hyperstone_do(regs_decode &decode); - void reserved(regs_decode &decode); +#if 0 + void execute_run_drc(); + void flush_drc_cache(); + void code_flush_cache(); + void code_compile_block(offs_t pc); + inline void ccfunc_unimplemented(); + void static_generate_entry_point(); + void static_generate_nocode_handler(); + void static_generate_out_of_cycles(); + void static_generate_memory_accessor(int size, int iswrite, const char *name, code_handle *&handleptr); + void generate_update_cycles(drcuml_block *block, compiler_state *compiler, uml::parameter param, bool allow_exception); + void generate_checksum_block(drcuml_block *block, compiler_state *compiler, const opcode_desc *seqhead, const opcode_desc *seqlast); + void generate_sequence_instruction(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); + bool generate_opcode(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); +#endif void op00(); void op01(); void op02(); void op03(); void op04(); void op05(); void op06(); void op07(); void op08(); void op09(); void op0a(); void op0b(); void op0c(); void op0d(); void op0e(); void op0f(); @@ -374,6 +388,137 @@ private: void ope8(); void ope9(); void opea(); void opeb(); void opec(); void oped(); void opee(); void opef(); void opf0(); void opf1(); void opf2(); void opf3(); void opf4(); void opf5(); void opf6(); void opf7(); void opf8(); void opf9(); void opfa(); void opfb(); void opfc(); void opfd(); void opfe(); void opff(); + +#if 0 + void generate_op00(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); void generate_op01(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); + void generate_op02(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); void generate_op03(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); + void generate_op04(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); void generate_op05(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); + void generate_op06(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); void generate_op07(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); + void generate_op08(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); void generate_op09(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); + void generate_op0a(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); void generate_op0b(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); + void generate_op0c(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); void generate_op0d(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); + void generate_op0e(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); void generate_op0f(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); + void generate_op10(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); void generate_op11(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); + void generate_op12(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); void generate_op13(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); + void generate_op14(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); void generate_op15(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); + void generate_op16(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); void generate_op17(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); + void generate_op18(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); void generate_op19(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); + void generate_op1a(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); void generate_op1b(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); + void generate_op1c(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); void generate_op1d(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); + void generate_op1e(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); void generate_op1f(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); + void generate_op20(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); void generate_op21(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); + void generate_op22(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); void generate_op23(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); + void generate_op24(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); void generate_op25(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); + void generate_op26(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); void generate_op27(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); + void generate_op28(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); void generate_op29(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); + void generate_op2a(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); void generate_op2b(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); + void generate_op2c(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); void generate_op2d(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); + void generate_op2e(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); void generate_op2f(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); + void generate_op30(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); void generate_op31(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); + void generate_op32(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); void generate_op33(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); + void generate_op34(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); void generate_op35(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); + void generate_op36(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); void generate_op37(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); + void generate_op38(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); void generate_op39(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); + void generate_op3a(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); void generate_op3b(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); + void generate_op3c(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); void generate_op3d(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); + void generate_op3e(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); void generate_op3f(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); + void generate_op40(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); void generate_op41(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); + void generate_op42(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); void generate_op43(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); + void generate_op44(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); void generate_op45(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); + void generate_op46(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); void generate_op47(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); + void generate_op48(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); void generate_op49(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); + void generate_op4a(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); void generate_op4b(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); + void generate_op4c(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); void generate_op4d(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); + void generate_op4e(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); void generate_op4f(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); + void generate_op50(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); void generate_op51(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); + void generate_op52(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); void generate_op53(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); + void generate_op54(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); void generate_op55(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); + void generate_op56(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); void generate_op57(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); + void generate_op58(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); void generate_op59(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); + void generate_op5a(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); void generate_op5b(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); + void generate_op5c(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); void generate_op5d(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); + void generate_op5e(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); void generate_op5f(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); + void generate_op60(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); void generate_op61(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); + void generate_op62(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); void generate_op63(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); + void generate_op64(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); void generate_op65(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); + void generate_op66(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); void generate_op67(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); + void generate_op68(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); void generate_op69(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); + void generate_op6a(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); void generate_op6b(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); + void generate_op6c(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); void generate_op6d(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); + void generate_op6e(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); void generate_op6f(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); + void generate_op70(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); void generate_op71(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); + void generate_op72(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); void generate_op73(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); + void generate_op74(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); void generate_op75(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); + void generate_op76(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); void generate_op77(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); + void generate_op78(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); void generate_op79(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); + void generate_op7a(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); void generate_op7b(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); + void generate_op7c(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); void generate_op7d(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); + void generate_op7e(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); void generate_op7f(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); + void generate_op80(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); void generate_op81(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); + void generate_op82(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); void generate_op83(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); + void generate_op84(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); void generate_op85(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); + void generate_op86(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); void generate_op87(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); + void generate_op88(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); void generate_op89(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); + void generate_op8a(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); void generate_op8b(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); + void generate_op8c(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); void generate_op8d(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); + void generate_op8e(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); void generate_op8f(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); + void generate_op90(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); void generate_op91(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); + void generate_op92(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); void generate_op93(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); + void generate_op94(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); void generate_op95(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); + void generate_op96(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); void generate_op97(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); + void generate_op98(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); void generate_op99(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); + void generate_op9a(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); void generate_op9b(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); + void generate_op9c(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); void generate_op9d(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); + void generate_op9e(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); void generate_op9f(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); + void generate_opa0(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); void generate_opa1(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); + void generate_opa2(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); void generate_opa3(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); + void generate_opa4(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); void generate_opa5(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); + void generate_opa6(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); void generate_opa7(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); + void generate_opa8(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); void generate_opa9(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); + void generate_opaa(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); void generate_opab(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); + void generate_opac(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); void generate_opad(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); + void generate_opae(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); void generate_opaf(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); + void generate_opb0(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); void generate_opb1(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); + void generate_opb2(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); void generate_opb3(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); + void generate_opb4(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); void generate_opb5(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); + void generate_opb6(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); void generate_opb7(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); + void generate_opb8(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); void generate_opb9(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); + void generate_opba(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); void generate_opbb(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); + void generate_opbc(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); void generate_opbd(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); + void generate_opbe(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); void generate_opbf(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); + void generate_opc0(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); void generate_opc1(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); + void generate_opc2(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); void generate_opc3(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); + void generate_opc4(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); void generate_opc5(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); + void generate_opc6(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); void generate_opc7(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); + void generate_opc8(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); void generate_opc9(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); + void generate_opca(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); void generate_opcb(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); + void generate_opcc(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); void generate_opcd(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); + void generate_opce(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); void generate_opcf(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); + void generate_opd0(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); void generate_opd1(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); + void generate_opd2(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); void generate_opd3(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); + void generate_opd4(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); void generate_opd5(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); + void generate_opd6(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); void generate_opd7(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); + void generate_opd8(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); void generate_opd9(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); + void generate_opda(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); void generate_opdb(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); + void generate_opdc(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); void generate_opdd(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); + void generate_opde(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); void generate_opdf(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); + void generate_ope0(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); void generate_ope1(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); + void generate_ope2(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); void generate_ope3(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); + void generate_ope4(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); void generate_ope5(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); + void generate_ope6(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); void generate_ope7(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); + void generate_ope8(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); void generate_ope9(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); + void generate_opea(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); void generate_opeb(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); + void generate_opec(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); void generate_oped(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); + void generate_opee(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); void generate_opef(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); + void generate_opf0(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); void generate_opf1(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); + void generate_opf2(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); void generate_opf3(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); + void generate_opf4(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); void generate_opf5(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); + void generate_opf6(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); void generate_opf7(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); + void generate_opf8(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); void generate_opf9(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); + void generate_opfa(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); void generate_opfb(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); + void generate_opfc(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); void generate_opfd(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); + void generate_opfe(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); void generate_opff(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); +#endif }; // device type definition diff --git a/src/devices/cpu/e132xs/e132xsop.hxx b/src/devices/cpu/e132xs/e132xsop.hxx index 8b0b15f14a6..95c9553c846 100644 --- a/src/devices/cpu/e132xs/e132xsop.hxx +++ b/src/devices/cpu/e132xs/e132xsop.hxx @@ -3,112 +3,128 @@ void hyperstone_device::op00() { regs_decode decode; - RRdecode(decode, 0, 0); + check_delay_PC(); + decode_RR00(decode); hyperstone_chk(decode); } void hyperstone_device::op01() { regs_decode decode; - RRdecode(decode, 0, 1); + check_delay_PC(); + decode_RR01(decode); hyperstone_chk(decode); } void hyperstone_device::op02() { regs_decode decode; - RRdecode(decode, 1, 0); + check_delay_PC(); + decode_RR10(decode); hyperstone_chk(decode); } void hyperstone_device::op03() { regs_decode decode; - RRdecode(decode, 1, 1); + check_delay_PC(); + decode_RR11(decode); hyperstone_chk(decode); } void hyperstone_device::op04() { regs_decode decode; - RRdecode(decode, 0, 0); + check_delay_PC(); + decode_RR00(decode); hyperstone_movd(decode); } void hyperstone_device::op05() { regs_decode decode; - RRdecode(decode, 0, 1); + check_delay_PC(); + decode_RR01(decode); hyperstone_movd(decode); } void hyperstone_device::op06() { regs_decode decode; - RRdecode(decode, 1, 0); + check_delay_PC(); + decode_RR10(decode); hyperstone_movd(decode); } void hyperstone_device::op07() { regs_decode decode; - RRdecode(decode, 1, 1); + check_delay_PC(); + decode_RR11(decode); hyperstone_movd(decode); } void hyperstone_device::op08() { regs_decode decode; - RRdecode(decode, 0, 0); + check_delay_PC(); + decode_RR00(decode); hyperstone_divu(decode); } void hyperstone_device::op09() { regs_decode decode; - RRdecode(decode, 0, 1); + check_delay_PC(); + decode_RR01(decode); hyperstone_divu(decode); } void hyperstone_device::op0a() { regs_decode decode; - RRdecode(decode, 1, 0); + check_delay_PC(); + decode_RR10(decode); hyperstone_divu(decode); } void hyperstone_device::op0b() { regs_decode decode; - RRdecode(decode, 1, 1); + check_delay_PC(); + decode_RR11(decode); hyperstone_divu(decode); } void hyperstone_device::op0c() { regs_decode decode; - RRdecode(decode, 0, 0); + check_delay_PC(); + decode_RR00(decode); hyperstone_divs(decode); } void hyperstone_device::op0d() { regs_decode decode; - RRdecode(decode, 0, 1); + check_delay_PC(); + decode_RR01(decode); hyperstone_divs(decode); } void hyperstone_device::op0e() { regs_decode decode; - RRdecode(decode, 1, 0); + check_delay_PC(); + decode_RR10(decode); hyperstone_divs(decode); } void hyperstone_device::op0f() { regs_decode decode; - RRdecode(decode, 1, 1); + check_delay_PC(); + decode_RR11(decode); hyperstone_divs(decode); } @@ -117,112 +133,144 @@ void hyperstone_device::op0f() void hyperstone_device::op10() { regs_decode decode; - RRlimdecode(decode, 0, 0); + decode_lim(decode); + check_delay_PC(); + decode_RR00(decode); hyperstone_xm(decode); } void hyperstone_device::op11() { regs_decode decode; - RRlimdecode(decode, 0, 1); + decode_lim(decode); + check_delay_PC(); + decode_RR01(decode); hyperstone_xm(decode); } void hyperstone_device::op12() { regs_decode decode; - RRlimdecode(decode, 1, 0); + decode_lim(decode); + check_delay_PC(); + decode_RR10(decode); hyperstone_xm(decode); } void hyperstone_device::op13() { regs_decode decode; - RRlimdecode(decode, 1, 1); + decode_lim(decode); + check_delay_PC(); + decode_RR11(decode); hyperstone_xm(decode); } void hyperstone_device::op14() { regs_decode decode; - RRconstdecode(decode, 0, 0); + decode_const(decode); + check_delay_PC(); + decode_RR00(decode); hyperstone_mask(decode); } void hyperstone_device::op15() { regs_decode decode; - RRconstdecode(decode, 0, 1); + decode_const(decode); + check_delay_PC(); + decode_RR01(decode); hyperstone_mask(decode); } void hyperstone_device::op16() { regs_decode decode; - RRconstdecode(decode, 1, 0); + decode_const(decode); + check_delay_PC(); + decode_RR10(decode); hyperstone_mask(decode); } void hyperstone_device::op17() { regs_decode decode; - RRconstdecode(decode, 1, 1); + decode_const(decode); + check_delay_PC(); + decode_RR11(decode); hyperstone_mask(decode); } void hyperstone_device::op18() { regs_decode decode; - RRconstdecode(decode, 0, 0); + decode_const(decode); + check_delay_PC(); + decode_RR00(decode); hyperstone_sum(decode); } void hyperstone_device::op19() { regs_decode decode; - RRconstdecode(decode, 0, 1); + decode_const(decode); + check_delay_PC(); + decode_RR01(decode); hyperstone_sum(decode); } void hyperstone_device::op1a() { regs_decode decode; - RRconstdecode(decode, 1, 0); + decode_const(decode); + check_delay_PC(); + decode_RR10(decode); hyperstone_sum(decode); } void hyperstone_device::op1b() { regs_decode decode; - RRconstdecode(decode, 1, 1); + decode_const(decode); + check_delay_PC(); + decode_RR11(decode); hyperstone_sum(decode); } void hyperstone_device::op1c() { regs_decode decode; - RRconstdecode(decode, 0, 0); + decode_const(decode); + check_delay_PC(); + decode_RR00(decode); hyperstone_sums(decode); } void hyperstone_device::op1d() { regs_decode decode; - RRconstdecode(decode, 0, 1); + decode_const(decode); + check_delay_PC(); + decode_RR01(decode); hyperstone_sums(decode); } void hyperstone_device::op1e() { regs_decode decode; - RRconstdecode(decode, 1, 0); + decode_const(decode); + check_delay_PC(); + decode_RR10(decode); hyperstone_sums(decode); } void hyperstone_device::op1f() { regs_decode decode; - RRconstdecode(decode, 1, 1); + decode_const(decode); + check_delay_PC(); + decode_RR11(decode); hyperstone_sums(decode); } @@ -231,112 +279,140 @@ void hyperstone_device::op1f() void hyperstone_device::op20() { regs_decode decode; - RRdecode(decode, 0, 0); + check_delay_PC(); + decode_RR00(decode); hyperstone_cmp(decode); } void hyperstone_device::op21() { regs_decode decode; - RRdecode(decode, 0, 1); + check_delay_PC(); + decode_RR01(decode); hyperstone_cmp(decode); } void hyperstone_device::op22() { regs_decode decode; - RRdecode(decode, 1, 0); + check_delay_PC(); + decode_RR10(decode); hyperstone_cmp(decode); } void hyperstone_device::op23() { regs_decode decode; - RRdecode(decode, 1, 1); + check_delay_PC(); + decode_RR11(decode); hyperstone_cmp(decode); } void hyperstone_device::op24() { regs_decode decode; - RRdecodewithHflag(decode, 0, 0); + check_delay_PC(); + decode.src = SRC_CODE; + decode.dst = DST_CODE; + decode_source(decode, GET_H); + decode_dest(decode, GET_H); hyperstone_mov(decode); } void hyperstone_device::op25() { regs_decode decode; - RRdecodewithHflag(decode, 0, 1); + check_delay_PC(); + decode.src = SRC_CODE; + decode.dst = DST_CODE; + decode_source_local(decode); + decode_dest(decode, GET_H); hyperstone_mov(decode); } void hyperstone_device::op26() { regs_decode decode; - RRdecodewithHflag(decode, 1, 0); + check_delay_PC(); + decode.src = SRC_CODE; + decode.dst = DST_CODE; + decode_source(decode, GET_H); + decode_dest_local(decode); hyperstone_mov(decode); } void hyperstone_device::op27() { regs_decode decode; - RRdecodewithHflag(decode, 1, 1); + check_delay_PC(); + decode.src = SRC_CODE; + decode.dst = DST_CODE; + decode_source_local(decode); + decode_dest_local(decode); hyperstone_mov(decode); } void hyperstone_device::op28() { regs_decode decode; - RRdecode(decode, 0, 0); + check_delay_PC(); + decode_RR00(decode); hyperstone_add(decode); } void hyperstone_device::op29() { regs_decode decode; - RRdecode(decode, 0, 1); + check_delay_PC(); + decode_RR01(decode); hyperstone_add(decode); } void hyperstone_device::op2a() { regs_decode decode; - RRdecode(decode, 1, 0); + check_delay_PC(); + decode_RR10(decode); hyperstone_add(decode); } void hyperstone_device::op2b() { regs_decode decode; - RRdecode(decode, 1, 1); + check_delay_PC(); + decode_RR11(decode); hyperstone_add(decode); } void hyperstone_device::op2c() { regs_decode decode; - RRdecode(decode, 0, 0); + check_delay_PC(); + decode_RR00(decode); hyperstone_adds(decode); } void hyperstone_device::op2d() { regs_decode decode; - RRdecode(decode, 0, 1); + check_delay_PC(); + decode_RR01(decode); hyperstone_adds(decode); } void hyperstone_device::op2e() { regs_decode decode; - RRdecode(decode, 1, 0); + check_delay_PC(); + decode_RR10(decode); hyperstone_adds(decode); } void hyperstone_device::op2f() { regs_decode decode; - RRdecode(decode, 1, 1); + check_delay_PC(); + decode_RR11(decode); hyperstone_adds(decode); } @@ -345,112 +421,128 @@ void hyperstone_device::op2f() void hyperstone_device::op30() { regs_decode decode; - RRdecode(decode, 0, 0); + check_delay_PC(); + decode_RR00(decode); hyperstone_cmpb(decode); } void hyperstone_device::op31() { regs_decode decode; - RRdecode(decode, 0, 1); + check_delay_PC(); + decode_RR01(decode); hyperstone_cmpb(decode); } void hyperstone_device::op32() { regs_decode decode; - RRdecode(decode, 1, 0); + check_delay_PC(); + decode_RR10(decode); hyperstone_cmpb(decode); } void hyperstone_device::op33() { regs_decode decode; - RRdecode(decode, 1, 1); + check_delay_PC(); + decode_RR11(decode); hyperstone_cmpb(decode); } void hyperstone_device::op34() { regs_decode decode; - RRdecode(decode, 0, 0); + check_delay_PC(); + decode_RR00(decode); hyperstone_andn(decode); } void hyperstone_device::op35() { regs_decode decode; - RRdecode(decode, 0, 1); + check_delay_PC(); + decode_RR01(decode); hyperstone_andn(decode); } void hyperstone_device::op36() { regs_decode decode; - RRdecode(decode, 1, 0); + check_delay_PC(); + decode_RR10(decode); hyperstone_andn(decode); } void hyperstone_device::op37() { regs_decode decode; - RRdecode(decode, 1, 1); + check_delay_PC(); + decode_RR11(decode); hyperstone_andn(decode); } void hyperstone_device::op38() { regs_decode decode; - RRdecode(decode, 0, 0); + check_delay_PC(); + decode_RR00(decode); hyperstone_or(decode); } void hyperstone_device::op39() { regs_decode decode; - RRdecode(decode, 0, 1); + check_delay_PC(); + decode_RR01(decode); hyperstone_or(decode); } void hyperstone_device::op3a() { regs_decode decode; - RRdecode(decode, 1, 0); + check_delay_PC(); + decode_RR10(decode); hyperstone_or(decode); } void hyperstone_device::op3b() { regs_decode decode; - RRdecode(decode, 1, 1); + check_delay_PC(); + decode_RR11(decode); hyperstone_or(decode); } void hyperstone_device::op3c() { regs_decode decode; - RRdecode(decode, 0, 0); + check_delay_PC(); + decode_RR00(decode); hyperstone_xor(decode); } void hyperstone_device::op3d() { regs_decode decode; - RRdecode(decode, 0, 1); + check_delay_PC(); + decode_RR01(decode); hyperstone_xor(decode); } void hyperstone_device::op3e() { regs_decode decode; - RRdecode(decode, 1, 0); + check_delay_PC(); + decode_RR10(decode); hyperstone_xor(decode); } void hyperstone_device::op3f() { regs_decode decode; - RRdecode(decode, 1, 1); + check_delay_PC(); + decode_RR11(decode); hyperstone_xor(decode); } @@ -459,112 +551,128 @@ void hyperstone_device::op3f() void hyperstone_device::op40() { regs_decode decode; - RRdecode(decode, 0, 0); + check_delay_PC(); + decode_RR00(decode); hyperstone_subc(decode); } void hyperstone_device::op41() { regs_decode decode; - RRdecode(decode, 0, 1); + check_delay_PC(); + decode_RR01(decode); hyperstone_subc(decode); } void hyperstone_device::op42() { regs_decode decode; - RRdecode(decode, 1, 0); + check_delay_PC(); + decode_RR10(decode); hyperstone_subc(decode); } void hyperstone_device::op43() { regs_decode decode; - RRdecode(decode, 1, 1); + check_delay_PC(); + decode_RR11(decode); hyperstone_subc(decode); } void hyperstone_device::op44() { regs_decode decode; - RRdecode(decode, 0, 0); + check_delay_PC(); + decode_RR00(decode); hyperstone_not(decode); } void hyperstone_device::op45() { regs_decode decode; - RRdecode(decode, 0, 1); + check_delay_PC(); + decode_RR01(decode); hyperstone_not(decode); } void hyperstone_device::op46() { regs_decode decode; - RRdecode(decode, 1, 0); + check_delay_PC(); + decode_RR10(decode); hyperstone_not(decode); } void hyperstone_device::op47() { regs_decode decode; - RRdecode(decode, 1, 1); + check_delay_PC(); + decode_RR11(decode); hyperstone_not(decode); } void hyperstone_device::op48() { regs_decode decode; - RRdecode(decode, 0, 0); + check_delay_PC(); + decode_RR00(decode); hyperstone_sub(decode); } void hyperstone_device::op49() { regs_decode decode; - RRdecode(decode, 0, 1); + check_delay_PC(); + decode_RR01(decode); hyperstone_sub(decode); } void hyperstone_device::op4a() { regs_decode decode; - RRdecode(decode, 1, 0); + check_delay_PC(); + decode_RR10(decode); hyperstone_sub(decode); } void hyperstone_device::op4b() { regs_decode decode; - RRdecode(decode, 1, 1); + check_delay_PC(); + decode_RR11(decode); hyperstone_sub(decode); } void hyperstone_device::op4c() { regs_decode decode; - RRdecode(decode, 0, 0); + check_delay_PC(); + decode_RR00(decode); hyperstone_subs(decode); } void hyperstone_device::op4d() { regs_decode decode; - RRdecode(decode, 0, 1); + check_delay_PC(); + decode_RR01(decode); hyperstone_subs(decode); } void hyperstone_device::op4e() { regs_decode decode; - RRdecode(decode, 1, 0); + check_delay_PC(); + decode_RR10(decode); hyperstone_subs(decode); } void hyperstone_device::op4f() { regs_decode decode; - RRdecode(decode, 1, 1); + check_delay_PC(); + decode_RR11(decode); hyperstone_subs(decode); } @@ -573,112 +681,128 @@ void hyperstone_device::op4f() void hyperstone_device::op50() { regs_decode decode; - RRdecode(decode, 0, 0); + check_delay_PC(); + decode_RR00(decode); hyperstone_addc(decode); } void hyperstone_device::op51() { regs_decode decode; - RRdecode(decode, 0, 1); + check_delay_PC(); + decode_RR01(decode); hyperstone_addc(decode); } void hyperstone_device::op52() { regs_decode decode; - RRdecode(decode, 1, 0); + check_delay_PC(); + decode_RR10(decode); hyperstone_addc(decode); } void hyperstone_device::op53() { regs_decode decode; - RRdecode(decode, 1, 1); + check_delay_PC(); + decode_RR11(decode); hyperstone_addc(decode); } void hyperstone_device::op54() { regs_decode decode; - RRdecode(decode, 0, 0); + check_delay_PC(); + decode_RR00(decode); hyperstone_and(decode); } void hyperstone_device::op55() { regs_decode decode; - RRdecode(decode, 0, 1); + check_delay_PC(); + decode_RR01(decode); hyperstone_and(decode); } void hyperstone_device::op56() { regs_decode decode; - RRdecode(decode, 1, 0); + check_delay_PC(); + decode_RR10(decode); hyperstone_and(decode); } void hyperstone_device::op57() { regs_decode decode; - RRdecode(decode, 1, 1); + check_delay_PC(); + decode_RR11(decode); hyperstone_and(decode); } void hyperstone_device::op58() { regs_decode decode; - RRdecode(decode, 0, 0); + check_delay_PC(); + decode_RR00(decode); hyperstone_neg(decode); } void hyperstone_device::op59() { regs_decode decode; - RRdecode(decode, 0, 1); + check_delay_PC(); + decode_RR01(decode); hyperstone_neg(decode); } void hyperstone_device::op5a() { regs_decode decode; - RRdecode(decode, 1, 0); + check_delay_PC(); + decode_RR10(decode); hyperstone_neg(decode); } void hyperstone_device::op5b() { regs_decode decode; - RRdecode(decode, 1, 1); + check_delay_PC(); + decode_RR11(decode); hyperstone_neg(decode); } void hyperstone_device::op5c() { regs_decode decode; - RRdecode(decode, 0, 0); + check_delay_PC(); + decode_RR00(decode); hyperstone_negs(decode); } void hyperstone_device::op5d() { regs_decode decode; - RRdecode(decode, 0, 1); + check_delay_PC(); + decode_RR01(decode); hyperstone_negs(decode); } void hyperstone_device::op5e() { regs_decode decode; - RRdecode(decode, 1, 0); + check_delay_PC(); + decode_RR10(decode); hyperstone_negs(decode); } void hyperstone_device::op5f() { regs_decode decode; - RRdecode(decode, 1, 1); + check_delay_PC(); + decode_RR11(decode); hyperstone_negs(decode); } @@ -687,112 +811,160 @@ void hyperstone_device::op5f() void hyperstone_device::op60() { regs_decode decode; - Rimmdecode(decode, 0, 0); + decode_immediate_u(decode); + check_delay_PC(); + decode.dst = DST_CODE; + decode_dest_noh(decode); hyperstone_cmpi(decode); } void hyperstone_device::op61() { regs_decode decode; - Rimmdecode(decode, 0, 1); + decode_immediate_s(decode); + check_delay_PC(); + decode.dst = DST_CODE; + decode_dest_noh(decode); hyperstone_cmpi(decode); } void hyperstone_device::op62() { regs_decode decode; - Rimmdecode(decode, 1, 0); + decode_immediate_u(decode); + check_delay_PC(); + decode.dst = DST_CODE; + decode_dest_local(decode); hyperstone_cmpi(decode); } void hyperstone_device::op63() { regs_decode decode; - Rimmdecode(decode, 1, 1); + decode_immediate_s(decode); + check_delay_PC(); + decode.dst = DST_CODE; + decode_dest_local(decode); hyperstone_cmpi(decode); } void hyperstone_device::op64() { regs_decode decode; - RimmdecodewithHflag(decode, 0, 0); + decode_immediate_u(decode); + check_delay_PC(); + decode.dst = DST_CODE; + decode_dest(decode, GET_H); hyperstone_movi(decode); } void hyperstone_device::op65() { regs_decode decode; - RimmdecodewithHflag(decode, 0, 1); + decode_immediate_s(decode); + check_delay_PC(); + decode.dst = DST_CODE; + decode_dest(decode, GET_H); hyperstone_movi(decode); } void hyperstone_device::op66() { regs_decode decode; - RimmdecodewithHflag(decode, 1, 0); + decode_immediate_u(decode); + check_delay_PC(); + decode.dst = DST_CODE; + decode_dest_local(decode); hyperstone_movi(decode); } void hyperstone_device::op67() { regs_decode decode; - RimmdecodewithHflag(decode, 1, 1); + decode_immediate_s(decode); + check_delay_PC(); + decode.dst = DST_CODE; + decode_dest_local(decode); hyperstone_movi(decode); } void hyperstone_device::op68() { regs_decode decode; - Rimmdecode(decode, 0, 0); + decode_immediate_u(decode); + check_delay_PC(); + decode.dst = DST_CODE; + decode_dest_noh(decode); hyperstone_addi(decode); } void hyperstone_device::op69() { regs_decode decode; - Rimmdecode(decode, 0, 1); + decode_immediate_s(decode); + check_delay_PC(); + decode.dst = DST_CODE; + decode_dest_noh(decode); hyperstone_addi(decode); } void hyperstone_device::op6a() { regs_decode decode; - Rimmdecode(decode, 1, 0); + decode_immediate_u(decode); + check_delay_PC(); + decode.dst = DST_CODE; + decode_dest_local(decode); hyperstone_addi(decode); } void hyperstone_device::op6b() { regs_decode decode; - Rimmdecode(decode, 1, 1); + decode_immediate_s(decode); + check_delay_PC(); + decode.dst = DST_CODE; + decode_dest_local(decode); hyperstone_addi(decode); } void hyperstone_device::op6c() { regs_decode decode; - Rimmdecode(decode, 0, 0); + decode_immediate_u(decode); + check_delay_PC(); + decode.dst = DST_CODE; + decode_dest_noh(decode); hyperstone_addsi(decode); } void hyperstone_device::op6d() { regs_decode decode; - Rimmdecode(decode, 0, 1); + decode_immediate_s(decode); + check_delay_PC(); + decode.dst = DST_CODE; + decode_dest_noh(decode); hyperstone_addsi(decode); } void hyperstone_device::op6e() { regs_decode decode; - Rimmdecode(decode, 1, 0); + decode_immediate_u(decode); + check_delay_PC(); + decode.dst = DST_CODE; + decode_dest_local(decode); hyperstone_addsi(decode); } void hyperstone_device::op6f() { regs_decode decode; - Rimmdecode(decode, 1, 1); + decode_immediate_s(decode); + check_delay_PC(); + decode.dst = DST_CODE; + decode_dest_local(decode); hyperstone_addsi(decode); } @@ -801,112 +973,160 @@ void hyperstone_device::op6f() void hyperstone_device::op70() { regs_decode decode; - Rimmdecode(decode, 0, 0); + decode_immediate_u(decode); + check_delay_PC(); + decode.dst = DST_CODE; + decode_dest_noh(decode); hyperstone_cmpbi(decode); } void hyperstone_device::op71() { regs_decode decode; - Rimmdecode(decode, 0, 1); + decode_immediate_s(decode); + check_delay_PC(); + decode.dst = DST_CODE; + decode_dest_noh(decode); hyperstone_cmpbi(decode); } void hyperstone_device::op72() { regs_decode decode; - Rimmdecode(decode, 1, 0); + decode_immediate_u(decode); + check_delay_PC(); + decode.dst = DST_CODE; + decode_dest_local(decode); hyperstone_cmpbi(decode); } void hyperstone_device::op73() { regs_decode decode; - Rimmdecode(decode, 1, 1); + decode_immediate_s(decode); + check_delay_PC(); + decode.dst = DST_CODE; + decode_dest_local(decode); hyperstone_cmpbi(decode); } void hyperstone_device::op74() { regs_decode decode; - Rimmdecode(decode, 0, 0); + decode_immediate_u(decode); + check_delay_PC(); + decode.dst = DST_CODE; + decode_dest_noh(decode); hyperstone_andni(decode); } void hyperstone_device::op75() { regs_decode decode; - Rimmdecode(decode, 0, 1); + decode_immediate_s(decode); + check_delay_PC(); + decode.dst = DST_CODE; + decode_dest_noh(decode); hyperstone_andni(decode); } void hyperstone_device::op76() { regs_decode decode; - Rimmdecode(decode, 1, 0); + decode_immediate_u(decode); + check_delay_PC(); + decode.dst = DST_CODE; + decode_dest_local(decode); hyperstone_andni(decode); } void hyperstone_device::op77() { regs_decode decode; - Rimmdecode(decode, 1, 1); + decode_immediate_s(decode); + check_delay_PC(); + decode.dst = DST_CODE; + decode_dest_local(decode); hyperstone_andni(decode); } void hyperstone_device::op78() { regs_decode decode; - Rimmdecode(decode, 0, 0); + decode_immediate_u(decode); + check_delay_PC(); + decode.dst = DST_CODE; + decode_dest_noh(decode); hyperstone_ori(decode); } void hyperstone_device::op79() { regs_decode decode; - Rimmdecode(decode, 0, 1); + decode_immediate_s(decode); + check_delay_PC(); + decode.dst = DST_CODE; + decode_dest_noh(decode); hyperstone_ori(decode); } void hyperstone_device::op7a() { regs_decode decode; - Rimmdecode(decode, 1, 0); + decode_immediate_u(decode); + check_delay_PC(); + decode.dst = DST_CODE; + decode_dest_local(decode); hyperstone_ori(decode); } void hyperstone_device::op7b() { regs_decode decode; - Rimmdecode(decode, 1, 1); + decode_immediate_s(decode); + check_delay_PC(); + decode.dst = DST_CODE; + decode_dest_local(decode); hyperstone_ori(decode); } void hyperstone_device::op7c() { regs_decode decode; - Rimmdecode(decode, 0, 0); + decode_immediate_u(decode); + check_delay_PC(); + decode.dst = DST_CODE; + decode_dest_noh(decode); hyperstone_xori(decode); } void hyperstone_device::op7d() { regs_decode decode; - Rimmdecode(decode, 0, 1); + decode_immediate_s(decode); + check_delay_PC(); + decode.dst = DST_CODE; + decode_dest_noh(decode); hyperstone_xori(decode); } void hyperstone_device::op7e() { regs_decode decode; - Rimmdecode(decode, 1, 0); + decode_immediate_u(decode); + check_delay_PC(); + decode.dst = DST_CODE; + decode_dest_local(decode); hyperstone_xori(decode); } void hyperstone_device::op7f() { regs_decode decode; - Rimmdecode(decode, 1, 1); + decode_immediate_s(decode); + check_delay_PC(); + decode.dst = DST_CODE; + decode_dest_local(decode); hyperstone_xori(decode); } @@ -915,112 +1135,128 @@ void hyperstone_device::op7f() void hyperstone_device::op80() { regs_decode decode; - Lndecode(decode); + check_delay_PC(); + decode.dst = DST_CODE; + decode_dest_local(decode); hyperstone_shrdi(decode); } void hyperstone_device::op81() { regs_decode decode; - Lndecode(decode); + check_delay_PC(); + decode.dst = DST_CODE; + decode_dest_local(decode); hyperstone_shrdi(decode); } void hyperstone_device::op82() { regs_decode decode; - LLdecode(decode); + check_delay_PC(); + decode_LL(decode); hyperstone_shrd(decode); } void hyperstone_device::op83() { regs_decode decode; - LLdecode(decode); + check_delay_PC(); + decode_LL(decode); hyperstone_shr(decode); } void hyperstone_device::op84() { regs_decode decode; - Lndecode(decode); + check_delay_PC(); + decode.dst = DST_CODE; + decode_dest_local(decode); hyperstone_sardi(decode); } void hyperstone_device::op85() { regs_decode decode; - Lndecode(decode); + check_delay_PC(); + decode.dst = DST_CODE; + decode_dest_local(decode); hyperstone_sardi(decode); } void hyperstone_device::op86() { regs_decode decode; - LLdecode(decode); + check_delay_PC(); + decode_LL(decode); hyperstone_sard(decode); } void hyperstone_device::op87() { regs_decode decode; - LLdecode(decode); + check_delay_PC(); + decode_LL(decode); hyperstone_sar(decode); } void hyperstone_device::op88() { regs_decode decode; - Lndecode(decode); + check_delay_PC(); + decode.dst = DST_CODE; + decode_dest_local(decode); hyperstone_shldi(decode); } void hyperstone_device::op89() { regs_decode decode; - Lndecode(decode); + check_delay_PC(); + decode.dst = DST_CODE; + decode_dest_local(decode); hyperstone_shldi(decode); } void hyperstone_device::op8a() { regs_decode decode; - LLdecode(decode); + check_delay_PC(); + decode_LL(decode); hyperstone_shld(decode); } void hyperstone_device::op8b() { regs_decode decode; - LLdecode(decode); + check_delay_PC(); + decode_LL(decode); hyperstone_shl(decode); } void hyperstone_device::op8c() { - regs_decode decode; - no_decode(decode); - reserved(decode); + DEBUG_PRINTF(("Executed Reserved opcode. PC = %08X OP = %04X\n", PC, OP)); } void hyperstone_device::op8d() { - regs_decode decode; - no_decode(decode); - reserved(decode); + DEBUG_PRINTF(("Executed Reserved opcode. PC = %08X OP = %04X\n", PC, OP)); } void hyperstone_device::op8e() { regs_decode decode; - LLdecode(decode); + check_delay_PC(); + decode_LL(decode); hyperstone_testlz(decode); } void hyperstone_device::op8f() { regs_decode decode; - LLdecode(decode); + check_delay_PC(); + decode_LL(decode); hyperstone_rol(decode); } @@ -1029,112 +1265,144 @@ void hyperstone_device::op8f() void hyperstone_device::op90() { regs_decode decode; - RRdisdecode(decode, 0, 0); + decode_dis(decode); + check_delay_PC(); + decode_RR00(decode); hyperstone_ldxx1(decode); } void hyperstone_device::op91() { regs_decode decode; - RRdisdecode(decode, 0, 1); + decode_dis(decode); + check_delay_PC(); + decode_RR01(decode); hyperstone_ldxx1(decode); } void hyperstone_device::op92() { regs_decode decode; - RRdisdecode(decode, 1, 0); + decode_dis(decode); + check_delay_PC(); + decode_RR10(decode); hyperstone_ldxx1(decode); } void hyperstone_device::op93() { regs_decode decode; - RRdisdecode(decode, 1, 1); + decode_dis(decode); + check_delay_PC(); + decode_RR11(decode); hyperstone_ldxx1(decode); } void hyperstone_device::op94() { regs_decode decode; - RRdisdecode(decode, 0, 0); + decode_dis(decode); + check_delay_PC(); + decode_RR00(decode); hyperstone_ldxx2(decode); } void hyperstone_device::op95() { regs_decode decode; - RRdisdecode(decode, 0, 1); + decode_dis(decode); + check_delay_PC(); + decode_RR01(decode); hyperstone_ldxx2(decode); } void hyperstone_device::op96() { regs_decode decode; - RRdisdecode(decode, 1, 0); + decode_dis(decode); + check_delay_PC(); + decode_RR10(decode); hyperstone_ldxx2(decode); } void hyperstone_device::op97() { regs_decode decode; - RRdisdecode(decode, 1, 1); + decode_dis(decode); + check_delay_PC(); + decode_RR11(decode); hyperstone_ldxx2(decode); } void hyperstone_device::op98() { regs_decode decode; - RRdisdecode(decode, 0, 0); + decode_dis(decode); + check_delay_PC(); + decode_RR00(decode); hyperstone_stxx1(decode); } void hyperstone_device::op99() { regs_decode decode; - RRdisdecode(decode, 0, 1); + decode_dis(decode); + check_delay_PC(); + decode_RR01(decode); hyperstone_stxx1(decode); } void hyperstone_device::op9a() { regs_decode decode; - RRdisdecode(decode, 1, 0); + decode_dis(decode); + check_delay_PC(); + decode_RR10(decode); hyperstone_stxx1(decode); } void hyperstone_device::op9b() { regs_decode decode; - RRdisdecode(decode, 1, 1); + decode_dis(decode); + check_delay_PC(); + decode_RR11(decode); hyperstone_stxx1(decode); } void hyperstone_device::op9c() { regs_decode decode; - RRdisdecode(decode, 0, 0); + decode_dis(decode); + check_delay_PC(); + decode_RR00(decode); hyperstone_stxx2(decode); } void hyperstone_device::op9d() { regs_decode decode; - RRdisdecode(decode, 0, 1); + decode_dis(decode); + check_delay_PC(); + decode_RR01(decode); hyperstone_stxx2(decode); } void hyperstone_device::op9e() { regs_decode decode; - RRdisdecode(decode, 1, 0); + decode_dis(decode); + check_delay_PC(); + decode_RR10(decode); hyperstone_stxx2(decode); } void hyperstone_device::op9f() { regs_decode decode; - RRdisdecode(decode, 1, 1); + decode_dis(decode); + check_delay_PC(); + decode_RR11(decode); hyperstone_stxx2(decode); } @@ -1143,113 +1411,129 @@ void hyperstone_device::op9f() void hyperstone_device::opa0() { regs_decode decode; - Rndecode(decode, 0); + check_delay_PC(); + decode.dst = DST_CODE; + decode_dest_noh(decode); hyperstone_shri(decode); } void hyperstone_device::opa1() { regs_decode decode; - Rndecode(decode, 0); + check_delay_PC(); + decode.dst = DST_CODE; + decode_dest_noh(decode); hyperstone_shri(decode); } void hyperstone_device::opa2() { regs_decode decode; - Rndecode(decode, 1); + check_delay_PC(); + decode.dst = DST_CODE; + decode_dest_local(decode); hyperstone_shri(decode); } void hyperstone_device::opa3() { regs_decode decode; - Rndecode(decode, 1); + check_delay_PC(); + decode.dst = DST_CODE; + decode_dest_local(decode); hyperstone_shri(decode); } void hyperstone_device::opa4() { regs_decode decode; - Rndecode(decode, 0); + check_delay_PC(); + decode.dst = DST_CODE; + decode_dest_noh(decode); hyperstone_sari(decode); } void hyperstone_device::opa5() { regs_decode decode; - Rndecode(decode, 0); + check_delay_PC(); + decode.dst = DST_CODE; + decode_dest_noh(decode); hyperstone_sari(decode); } void hyperstone_device::opa6() { regs_decode decode; - Rndecode(decode, 1); + check_delay_PC(); + decode.dst = DST_CODE; + decode_dest_local(decode); hyperstone_sari(decode); } void hyperstone_device::opa7() { regs_decode decode; - Rndecode(decode, 1); + check_delay_PC(); + decode.dst = DST_CODE; + decode_dest_local(decode); hyperstone_sari(decode); } void hyperstone_device::opa8() { regs_decode decode; - Rndecode(decode, 0); + check_delay_PC(); + decode.dst = DST_CODE; + decode_dest_noh(decode); hyperstone_shli(decode); } void hyperstone_device::opa9() { regs_decode decode; - Rndecode(decode, 0); + check_delay_PC(); + decode.dst = DST_CODE; + decode_dest_noh(decode); hyperstone_shli(decode); } void hyperstone_device::opaa() { regs_decode decode; - Rndecode(decode, 1); + check_delay_PC(); + decode.dst = DST_CODE; + decode_dest_local(decode); hyperstone_shli(decode); } void hyperstone_device::opab() { regs_decode decode; - Rndecode(decode, 1); + check_delay_PC(); + decode.dst = DST_CODE; + decode_dest_local(decode); hyperstone_shli(decode); } void hyperstone_device::opac() { - regs_decode decode; - no_decode(decode); - reserved(decode); + DEBUG_PRINTF(("Executed Reserved opcode. PC = %08X OP = %04X\n", PC, OP)); } void hyperstone_device::opad() { - regs_decode decode; - no_decode(decode); - reserved(decode); + DEBUG_PRINTF(("Executed Reserved opcode. PC = %08X OP = %04X\n", PC, OP)); } void hyperstone_device::opae() { - regs_decode decode; - no_decode(decode); - reserved(decode); + DEBUG_PRINTF(("Executed Reserved opcode. PC = %08X OP = %04X\n", PC, OP)); } void hyperstone_device::opaf() { - regs_decode decode; - no_decode(decode); - reserved(decode); + DEBUG_PRINTF(("Executed Reserved opcode. PC = %08X OP = %04X\n", PC, OP)); } @@ -1257,112 +1541,132 @@ void hyperstone_device::opaf() void hyperstone_device::opb0() { regs_decode decode; - RRdecode(decode, 0, 0); + check_delay_PC(); + decode_RR00(decode); hyperstone_mulu(decode); } void hyperstone_device::opb1() { regs_decode decode; - RRdecode(decode, 0, 1); + check_delay_PC(); + decode_RR01(decode); hyperstone_mulu(decode); } void hyperstone_device::opb2() { regs_decode decode; - RRdecode(decode, 1, 0); + check_delay_PC(); + decode_RR10(decode); hyperstone_mulu(decode); } void hyperstone_device::opb3() { regs_decode decode; - RRdecode(decode, 1, 1); + check_delay_PC(); + decode_RR11(decode); hyperstone_mulu(decode); } void hyperstone_device::opb4() { regs_decode decode; - RRdecode(decode, 0, 0); + check_delay_PC(); + decode_RR00(decode); hyperstone_muls(decode); } void hyperstone_device::opb5() { regs_decode decode; - RRdecode(decode, 0, 1); + check_delay_PC(); + decode_RR01(decode); hyperstone_muls(decode); } void hyperstone_device::opb6() { regs_decode decode; - RRdecode(decode, 1, 0); + check_delay_PC(); + decode_RR10(decode); hyperstone_muls(decode); } void hyperstone_device::opb7() { regs_decode decode; - RRdecode(decode, 1, 1); + check_delay_PC(); + decode_RR11(decode); hyperstone_muls(decode); } void hyperstone_device::opb8() { regs_decode decode; - Rndecode(decode, 0); + check_delay_PC(); + decode.dst = DST_CODE; + decode_dest_noh(decode); hyperstone_set(decode); } void hyperstone_device::opb9() { regs_decode decode; - Rndecode(decode, 0); + check_delay_PC(); + decode.dst = DST_CODE; + decode_dest_noh(decode); hyperstone_set(decode); } void hyperstone_device::opba() { regs_decode decode; - Rndecode(decode, 1); + check_delay_PC(); + decode.dst = DST_CODE; + decode_dest_local(decode); hyperstone_set(decode); } void hyperstone_device::opbb() { regs_decode decode; - Rndecode(decode, 1); + check_delay_PC(); + decode.dst = DST_CODE; + decode_dest_local(decode); hyperstone_set(decode); } void hyperstone_device::opbc() { regs_decode decode; - RRdecode(decode, 0, 0); + check_delay_PC(); + decode_RR00(decode); hyperstone_mul(decode); } void hyperstone_device::opbd() { regs_decode decode; - RRdecode(decode, 0, 1); + check_delay_PC(); + decode_RR01(decode); hyperstone_mul(decode); } void hyperstone_device::opbe() { regs_decode decode; - RRdecode(decode, 1, 0); + check_delay_PC(); + decode_RR10(decode); hyperstone_mul(decode); } void hyperstone_device::opbf() { regs_decode decode; - RRdecode(decode, 1, 1); + check_delay_PC(); + decode_RR11(decode); hyperstone_mul(decode); } @@ -1371,112 +1675,131 @@ void hyperstone_device::opbf() void hyperstone_device::opc0() { regs_decode decode; - LLdecode(decode); + check_delay_PC(); + decode_LL(decode); hyperstone_fadd(decode); } void hyperstone_device::opc1() { regs_decode decode; - LLdecode(decode); + check_delay_PC(); + decode_LL(decode); hyperstone_faddd(decode); } void hyperstone_device::opc2() { regs_decode decode; - LLdecode(decode); + check_delay_PC(); + decode_LL(decode); hyperstone_fsub(decode); } void hyperstone_device::opc3() { regs_decode decode; - LLdecode(decode); + check_delay_PC(); + decode_LL(decode); hyperstone_fsubd(decode); } void hyperstone_device::opc4() { regs_decode decode; - LLdecode(decode); + check_delay_PC(); + decode_LL(decode); hyperstone_fmul(decode); } void hyperstone_device::opc5() { regs_decode decode; - LLdecode(decode); + check_delay_PC(); + decode_LL(decode); hyperstone_fmuld(decode); } void hyperstone_device::opc6() { regs_decode decode; - LLdecode(decode); + check_delay_PC(); + decode_LL(decode); hyperstone_fdiv(decode); } void hyperstone_device::opc7() { regs_decode decode; - LLdecode(decode); + check_delay_PC(); + decode_LL(decode); hyperstone_fdivd(decode); } void hyperstone_device::opc8() { regs_decode decode; - LLdecode(decode); + check_delay_PC(); + decode_LL(decode); hyperstone_fcmp(decode); } void hyperstone_device::opc9() { regs_decode decode; - LLdecode(decode); + check_delay_PC(); + decode_LL(decode); hyperstone_fcmpd(decode); } void hyperstone_device::opca() { regs_decode decode; - LLdecode(decode); + check_delay_PC(); + decode_LL(decode); hyperstone_fcmpu(decode); } void hyperstone_device::opcb() { regs_decode decode; - LLdecode(decode); + check_delay_PC(); + decode_LL(decode); hyperstone_fcmpud(decode); } void hyperstone_device::opcc() { regs_decode decode; - LLdecode(decode); + check_delay_PC(); + decode_LL(decode); hyperstone_fcvt(decode); } void hyperstone_device::opcd() { regs_decode decode; - LLdecode(decode); + check_delay_PC(); + decode_LL(decode); hyperstone_fcvtd(decode); } void hyperstone_device::opce() { regs_decode decode; - LLextdecode(decode); + m_instruction_length = (2<<19); + EXTRA_U = READ_OP(PC); + PC += 2; + check_delay_PC(); + decode_LL(decode); hyperstone_extend(decode); } void hyperstone_device::opcf() { regs_decode decode; - LLdecode(decode); + check_delay_PC(); + decode_LL(decode); hyperstone_do(decode); } @@ -1485,112 +1808,128 @@ void hyperstone_device::opcf() void hyperstone_device::opd0() { regs_decode decode; - LRdecode(decode, 0); + check_delay_PC(); + decode_LR(decode, 0); hyperstone_ldwr(decode); } void hyperstone_device::opd1() { regs_decode decode; - LRdecode(decode, 1); + check_delay_PC(); + decode_LR(decode, 1); hyperstone_ldwr(decode); } void hyperstone_device::opd2() { regs_decode decode; - LRdecode(decode, 0); + check_delay_PC(); + decode_LR(decode, 0); hyperstone_lddr(decode); } void hyperstone_device::opd3() { regs_decode decode; - LRdecode(decode, 1); + check_delay_PC(); + decode_LR(decode, 1); hyperstone_lddr(decode); } void hyperstone_device::opd4() { regs_decode decode; - LRdecode(decode, 0); + check_delay_PC(); + decode_LR(decode, 0); hyperstone_ldwp(decode); } void hyperstone_device::opd5() { regs_decode decode; - LRdecode(decode, 1); + check_delay_PC(); + decode_LR(decode, 1); hyperstone_ldwp(decode); } void hyperstone_device::opd6() { regs_decode decode; - LRdecode(decode, 0); + check_delay_PC(); + decode_LR(decode, 0); hyperstone_lddp(decode); } void hyperstone_device::opd7() { regs_decode decode; - LRdecode(decode, 1); + check_delay_PC(); + decode_LR(decode, 1); hyperstone_lddp(decode); } void hyperstone_device::opd8() { regs_decode decode; - LRdecode(decode, 0); + check_delay_PC(); + decode_LR(decode, 0); hyperstone_stwr(decode); } void hyperstone_device::opd9() { regs_decode decode; - LRdecode(decode, 1); + check_delay_PC(); + decode_LR(decode, 1); hyperstone_stwr(decode); } void hyperstone_device::opda() { regs_decode decode; - LRdecode(decode, 0); + check_delay_PC(); + decode_LR(decode, 0); hyperstone_stdr(decode); } void hyperstone_device::opdb() { regs_decode decode; - LRdecode(decode, 1); + check_delay_PC(); + decode_LR(decode, 1); hyperstone_stdr(decode); } void hyperstone_device::opdc() { regs_decode decode; - LRdecode(decode, 0); + check_delay_PC(); + decode_LR(decode, 0); hyperstone_stwp(decode); } void hyperstone_device::opdd() { regs_decode decode; - LRdecode(decode, 1); + check_delay_PC(); + decode_LR(decode, 1); hyperstone_stwp(decode); } void hyperstone_device::opde() { regs_decode decode; - LRdecode(decode, 0); + check_delay_PC(); + decode_LR(decode, 0); hyperstone_stdp(decode); } void hyperstone_device::opdf() { regs_decode decode; - LRdecode(decode, 1); + check_delay_PC(); + decode_LR(decode, 1); hyperstone_stdp(decode); } @@ -1599,112 +1938,130 @@ void hyperstone_device::opdf() void hyperstone_device::ope0() { regs_decode decode; - PCreldecode(decode); + decode_pcrel(decode); + check_delay_PC(); hyperstone_dbv(decode); } void hyperstone_device::ope1() { regs_decode decode; - PCreldecode(decode); + decode_pcrel(decode); + check_delay_PC(); hyperstone_dbnv(decode); } void hyperstone_device::ope2() { regs_decode decode; - PCreldecode(decode); + decode_pcrel(decode); + check_delay_PC(); hyperstone_dbe(decode); } void hyperstone_device::ope3() { regs_decode decode; - PCreldecode(decode); + decode_pcrel(decode); + check_delay_PC(); hyperstone_dbne(decode); } void hyperstone_device::ope4() { regs_decode decode; - PCreldecode(decode); + decode_pcrel(decode); + check_delay_PC(); hyperstone_dbc(decode); } void hyperstone_device::ope5() { regs_decode decode; - PCreldecode(decode); + decode_pcrel(decode); + check_delay_PC(); hyperstone_dbnc(decode); } void hyperstone_device::ope6() { regs_decode decode; - PCreldecode(decode); + decode_pcrel(decode); + check_delay_PC(); hyperstone_dbse(decode); } void hyperstone_device::ope7() { regs_decode decode; - PCreldecode(decode); + decode_pcrel(decode); + check_delay_PC(); hyperstone_dbht(decode); } void hyperstone_device::ope8() { regs_decode decode; - PCreldecode(decode); + decode_pcrel(decode); + check_delay_PC(); hyperstone_dbn(decode); } void hyperstone_device::ope9() { regs_decode decode; - PCreldecode(decode); + decode_pcrel(decode); + check_delay_PC(); hyperstone_dbnn(decode); } void hyperstone_device::opea() { regs_decode decode; - PCreldecode(decode); + decode_pcrel(decode); + check_delay_PC(); hyperstone_dble(decode); } void hyperstone_device::opeb() { regs_decode decode; - PCreldecode(decode); + decode_pcrel(decode); + check_delay_PC(); hyperstone_dbgt(decode); } void hyperstone_device::opec() { regs_decode decode; - PCreldecode(decode); + decode_pcrel(decode); + check_delay_PC(); hyperstone_dbr(decode); } void hyperstone_device::oped() { regs_decode decode; - LLdecode(decode); + check_delay_PC(); + decode_LL(decode); hyperstone_frame(decode); } void hyperstone_device::opee() { regs_decode decode; - LRconstdecode(decode, 0); + decode_const(decode); + check_delay_PC(); + decode_LR(decode, 0); hyperstone_call(decode); } void hyperstone_device::opef() { regs_decode decode; - LRconstdecode(decode, 1); + decode_const(decode); + check_delay_PC(); + decode_LR(decode, 1); hyperstone_call(decode); } @@ -1713,112 +2070,125 @@ void hyperstone_device::opef() void hyperstone_device::opf0() { regs_decode decode; - PCreldecode(decode); + decode_pcrel(decode); + check_delay_PC(); hyperstone_bv(decode); } void hyperstone_device::opf1() { regs_decode decode; - PCreldecode(decode); + decode_pcrel(decode); + check_delay_PC(); hyperstone_bnv(decode); } void hyperstone_device::opf2() { regs_decode decode; - PCreldecode(decode); + decode_pcrel(decode); + check_delay_PC(); hyperstone_be(decode); } void hyperstone_device::opf3() { regs_decode decode; - PCreldecode(decode); + decode_pcrel(decode); + check_delay_PC(); hyperstone_bne(decode); } void hyperstone_device::opf4() { regs_decode decode; - PCreldecode(decode); + decode_pcrel(decode); + check_delay_PC(); hyperstone_bc(decode); } void hyperstone_device::opf5() { regs_decode decode; - PCreldecode(decode); + decode_pcrel(decode); + check_delay_PC(); hyperstone_bnc(decode); } void hyperstone_device::opf6() { regs_decode decode; - PCreldecode(decode); + decode_pcrel(decode); + check_delay_PC(); hyperstone_bse(decode); } void hyperstone_device::opf7() { regs_decode decode; - PCreldecode(decode); + decode_pcrel(decode); + check_delay_PC(); hyperstone_bht(decode); } void hyperstone_device::opf8() { regs_decode decode; - PCreldecode(decode); + decode_pcrel(decode); + check_delay_PC(); hyperstone_bn(decode); } void hyperstone_device::opf9() { regs_decode decode; - PCreldecode(decode); + decode_pcrel(decode); + check_delay_PC(); hyperstone_bnn(decode); } void hyperstone_device::opfa() { regs_decode decode; - PCreldecode(decode); + decode_pcrel(decode); + check_delay_PC(); hyperstone_ble(decode); } void hyperstone_device::opfb() { regs_decode decode; - PCreldecode(decode); + decode_pcrel(decode); + check_delay_PC(); hyperstone_bgt(decode); } void hyperstone_device::opfc() { regs_decode decode; - PCreldecode(decode); + decode_pcrel(decode); + check_delay_PC(); hyperstone_br(decode); } void hyperstone_device::opfd() { regs_decode decode; - PCadrdecode(decode); + check_delay_PC(); hyperstone_trap(decode); } void hyperstone_device::opfe() { regs_decode decode; - PCadrdecode(decode); + check_delay_PC(); hyperstone_trap(decode); } void hyperstone_device::opff() { regs_decode decode; - PCadrdecode(decode); + check_delay_PC(); hyperstone_trap(decode); } -- cgit v1.2.3