From 9b4eaaf6f8b23f3bd4a617a3d117d25a0fe0944e Mon Sep 17 00:00:00 2001 From: "Alex W. Jackson" Date: Wed, 21 May 2014 08:01:56 +0000 Subject: [PATCH] m37710: support direct read [Alex Jackson] --- src/emu/cpu/m37710/m37710.c | 33 +++++++++++---------------------- src/emu/cpu/m37710/m37710.h | 1 + src/emu/cpu/m37710/m37710cm.h | 8 ++------ src/emu/cpu/m37710/m37710op.h | 20 ++++++++++---------- 4 files changed, 24 insertions(+), 38 deletions(-) diff --git a/src/emu/cpu/m37710/m37710.c b/src/emu/cpu/m37710/m37710.c index cfad4414570..37065bcd83c 100644 --- a/src/emu/cpu/m37710/m37710.c +++ b/src/emu/cpu/m37710/m37710.c @@ -990,6 +990,7 @@ void m37710_cpu_device::device_start() memset(m_m37710_regs, 0, sizeof(m_m37710_regs)); m_program = &space(AS_PROGRAM); + m_direct = &m_program->direct(); m_io = &space(AS_IO); m_ICount = 0; @@ -1192,59 +1193,49 @@ void m37710_cpu_device::m37710i_set_execution_mode(UINT32 mode) /* ================================= MEMORY =============================== */ /* ======================================================================== */ -#define ADDRESS_37710(A) ((A)&0xffffff) - UINT32 m37710_cpu_device::m37710i_read_8_normal(UINT32 address) { - address = ADDRESS_37710(address); return m37710_read_8(address); } UINT32 m37710_cpu_device::m37710i_read_8_immediate(UINT32 address) { - address = ADDRESS_37710(address); return m37710_read_8_immediate(address); } UINT32 m37710_cpu_device::m37710i_read_8_direct(UINT32 address) { - address = ADDRESS_37710(address); return m37710_read_8(address); } void m37710_cpu_device::m37710i_write_8_normal(UINT32 address, UINT32 value) { - address = ADDRESS_37710(address); - m37710_write_8(address, MAKE_UINT_8(value)); + m37710_write_8(address, value); } void m37710_cpu_device::m37710i_write_8_direct(UINT32 address, UINT32 value) { - address = ADDRESS_37710(address); - m37710_write_8(address, MAKE_UINT_8(value)); + m37710_write_8(address, value); } UINT32 m37710_cpu_device::m37710i_read_16_normal(UINT32 address) { - address = ADDRESS_37710(address); if (address & 1) - return m37710i_read_8_normal(address) | m37710i_read_8_normal(address+1)<<8; + return m37710_read_8(address) | m37710_read_8(address+1)<<8; else return m37710_read_16(address); } UINT32 m37710_cpu_device::m37710i_read_16_immediate(UINT32 address) { - address = ADDRESS_37710(address); if (address & 1) return m37710_read_8_immediate(address) | m37710_read_8_immediate(address+1)<<8; else - return m37710_read_16(address); + return m37710_read_16_immediate(address); } UINT32 m37710_cpu_device::m37710i_read_16_direct(UINT32 address) { - address = ADDRESS_37710(address); if (address & 1) return m37710_read_8(address) | m37710_read_8((address)+1)<<8; else @@ -1253,7 +1244,6 @@ UINT32 m37710_cpu_device::m37710i_read_16_direct(UINT32 address) void m37710_cpu_device::m37710i_write_16_normal(UINT32 address, UINT32 value) { - address = ADDRESS_37710(address); if (address & 1) { m37710_write_8(address, value); @@ -1265,7 +1255,6 @@ void m37710_cpu_device::m37710i_write_16_normal(UINT32 address, UINT32 value) void m37710_cpu_device::m37710i_write_16_direct(UINT32 address, UINT32 value) { - address = ADDRESS_37710(address); if (address & 1) { m37710_write_8(address, value); @@ -1277,20 +1266,20 @@ void m37710_cpu_device::m37710i_write_16_direct(UINT32 address, UINT32 value) UINT32 m37710_cpu_device::m37710i_read_24_normal(UINT32 address) { - return m37710i_read_16_normal(address) | - (m37710i_read_8_normal(address+2)<<16); + return m37710_read_16(address) | + (m37710_read_8(address+2)<<16); } UINT32 m37710_cpu_device::m37710i_read_24_immediate(UINT32 address) { - return m37710i_read_16_immediate(address) | - (m37710i_read_8_immediate(address+2)<<16); + return m37710_read_16_immediate(address) | + (m37710_read_8_immediate(address+2)<<16); } UINT32 m37710_cpu_device::m37710i_read_24_direct(UINT32 address) { - return m37710i_read_16_direct(address) | - (m37710i_read_8_direct(address+2)<<16); + return m37710_read_16(address) | + (m37710_read_8(address+2)<<16); } diff --git a/src/emu/cpu/m37710/m37710.h b/src/emu/cpu/m37710/m37710.h index 1aa492f99cb..454cece8777 100644 --- a/src/emu/cpu/m37710/m37710.h +++ b/src/emu/cpu/m37710/m37710.h @@ -159,6 +159,7 @@ private: UINT32 m_source; /* temp register */ UINT32 m_destination; /* temp register */ address_space *m_program; + direct_read_data *m_direct; address_space *m_io; UINT32 m_stopped; /* Sets how the CPU is stopped */ diff --git a/src/emu/cpu/m37710/m37710cm.h b/src/emu/cpu/m37710/m37710cm.h index 0c77df11e5c..c31b927bd26 100644 --- a/src/emu/cpu/m37710/m37710cm.h +++ b/src/emu/cpu/m37710/m37710cm.h @@ -24,9 +24,10 @@ #define M37710_CALL_DEBUGGER(x) debugger_instruction_hook(this, x) #define m37710_read_8(addr) m_program->read_byte(addr) #define m37710_write_8(addr,data) m_program->write_byte(addr,data) -#define m37710_read_8_immediate(A) m_program->read_byte(A) +#define m37710_read_8_immediate(A) m_direct->read_decrypted_byte(A, BYTE_XOR_LE(0)) #define m37710_read_16(addr) m_program->read_word(addr) #define m37710_write_16(addr,data) m_program->write_word(addr,data) +#define m37710_read_16_immediate(A) m_direct->read_decrypted_word(A) #define m37710_jumping(A) #define m37710_branching(A) @@ -64,11 +65,6 @@ INLINE int MAKE_INT_8(int A) {return (A & 0x80) ? A | ~0xff : A & 0xff;} /* ================================== CPU ================================= */ /* ======================================================================== */ - -extern UINT32 m37710i_adc_tbl[]; -extern UINT32 m37710i_sbc_tbl[]; - - #define REG_A m_a /* Accumulator */ #define REG_B m_b /* Accumulator hi byte */ #define REG_BA m_ba /* Secondary Accumulator */ diff --git a/src/emu/cpu/m37710/m37710op.h b/src/emu/cpu/m37710/m37710op.h index 047baf0ad63..fb349eea6bd 100644 --- a/src/emu/cpu/m37710/m37710op.h +++ b/src/emu/cpu/m37710/m37710op.h @@ -767,14 +767,14 @@ void m37710_cpu_device::m37710i_set_reg_p(UINT32 value) #define OP_LDM(MODE) \ CLK(CLK_OP + CLK_R8 + CLK_##MODE); \ REG_IM2 = EA_##MODE(); \ - REG_IM = read_8_NORM(REG_PB|REG_PC); \ + REG_IM = read_8_IMM(REG_PB | REG_PC); \ REG_PC++; \ write_8_##MODE(REG_IM2, REG_IM) #else #define OP_LDM(MODE) \ CLK(CLK_OP + CLK_R16 + CLK_##MODE); \ REG_IM2 = EA_##MODE(); \ - REG_IM = read_16_NORM(REG_PB|REG_PC); \ + REG_IM = read_16_IMM(REG_PB | REG_PC); \ REG_PC+=2; \ write_16_##MODE(REG_IM2, REG_IM) #endif @@ -785,7 +785,7 @@ void m37710_cpu_device::m37710i_set_reg_p(UINT32 value) #define OP_BBS(MODE) \ CLK(CLK_OP + CLK_R8 + CLK_##MODE); \ REG_IM2 = read_8_NORM(EA_##MODE()); \ - REG_IM = read_8_NORM(REG_PB | REG_PC); \ + REG_IM = read_8_IMM(REG_PB | REG_PC); \ REG_PC++; \ DST = OPER_8_IMM(); \ if ((REG_IM2 & REG_IM) == REG_IM) \ @@ -798,7 +798,7 @@ void m37710_cpu_device::m37710i_set_reg_p(UINT32 value) #define OP_BBS(MODE) \ CLK(CLK_OP + CLK_R16 + CLK_##MODE); \ REG_IM2 = read_16_NORM(EA_##MODE()); \ - REG_IM = read_16_NORM(REG_PB | REG_PC); \ + REG_IM = read_16_IMM(REG_PB | REG_PC); \ REG_PC++; \ REG_PC++; \ DST = OPER_8_IMM(); \ @@ -816,7 +816,7 @@ void m37710_cpu_device::m37710i_set_reg_p(UINT32 value) #define OP_BBC(MODE) \ CLK(CLK_OP + CLK_R8 + CLK_##MODE); \ REG_IM2 = read_8_NORM(EA_##MODE()); \ - REG_IM = read_8_NORM(REG_PB | REG_PC); \ + REG_IM = read_8_IMM(REG_PB | REG_PC); \ REG_PC++; \ DST = OPER_8_IMM(); \ if ((REG_IM2 & REG_IM) == 0) \ @@ -829,7 +829,7 @@ void m37710_cpu_device::m37710i_set_reg_p(UINT32 value) #define OP_BBC(MODE) \ CLK(CLK_OP + CLK_R16 + CLK_##MODE); \ REG_IM2 = read_16_NORM(EA_##MODE()); \ - REG_IM = read_16_NORM(REG_PB | REG_PC); \ + REG_IM = read_16_IMM(REG_PB | REG_PC); \ REG_PC++; \ REG_PC++; \ DST = OPER_8_IMM(); \ @@ -1820,7 +1820,7 @@ void m37710_cpu_device::m37710i_set_reg_p(UINT32 value) CLK(CLK_OP + CLK_RMW8 + CLK_W_##MODE); \ DST = EA_##MODE(); \ REG_IM = read_8_##MODE(DST); \ - REG_IM2 = read_8_NORM(REG_PB | REG_PC); \ + REG_IM2 = read_8_IMM(REG_PB | REG_PC); \ REG_PC++; \ write_8_##MODE(DST, REG_IM & ~REG_IM2); #else @@ -1828,7 +1828,7 @@ void m37710_cpu_device::m37710i_set_reg_p(UINT32 value) CLK(CLK_OP + CLK_RMW16 + CLK_W_##MODE); \ DST = EA_##MODE(); \ REG_IM = read_16_##MODE(DST); \ - REG_IM2 = read_16_NORM(REG_PB | REG_PC); \ + REG_IM2 = read_16_IMM(REG_PB | REG_PC); \ REG_PC+=2; \ write_16_##MODE(DST, REG_IM & ~REG_IM2); #endif @@ -1840,7 +1840,7 @@ void m37710_cpu_device::m37710i_set_reg_p(UINT32 value) CLK(CLK_OP + CLK_RMW8 + CLK_W_##MODE); \ DST = EA_##MODE(); \ REG_IM = read_8_##MODE(DST); \ - REG_IM2 = read_8_NORM(REG_PB | REG_PC); \ + REG_IM2 = read_8_IMM(REG_PB | REG_PC); \ REG_PC++; \ write_8_##MODE(DST, REG_IM | REG_IM2); #else @@ -1848,7 +1848,7 @@ void m37710_cpu_device::m37710i_set_reg_p(UINT32 value) CLK(CLK_OP + CLK_RMW16 + CLK_W_##MODE); \ DST = EA_##MODE(); \ REG_IM = read_16_##MODE(DST); \ - REG_IM2 = read_16_NORM(REG_PB | REG_PC); \ + REG_IM2 = read_16_IMM(REG_PB | REG_PC); \ REG_PC+=2; \ write_16_##MODE(DST, REG_IM | REG_IM2); #endif