diff options
author | 2014-05-22 10:11:47 +0000 | |
---|---|---|
committer | 2014-05-22 10:11:47 +0000 | |
commit | d5122094dd1a8db77cb3a218687c1670c3e6c9bc (patch) | |
tree | 55a5149e7bcdfbd81bfa5bf25b7e87f0950e28bf /src/emu/cpu/m37710/m37710il.h | |
parent | e806dfd320f5ecbfc1903c7bb0ac3e3e914164b4 (diff) |
m37710: make memory helpers inline; remove more obsolete cruft (nw)
Diffstat (limited to 'src/emu/cpu/m37710/m37710il.h')
-rw-r--r-- | src/emu/cpu/m37710/m37710il.h | 206 |
1 files changed, 206 insertions, 0 deletions
diff --git a/src/emu/cpu/m37710/m37710il.h b/src/emu/cpu/m37710/m37710il.h new file mode 100644 index 00000000000..96c818b8429 --- /dev/null +++ b/src/emu/cpu/m37710/m37710il.h @@ -0,0 +1,206 @@ +#pragma once + +#ifndef __M37710IL_H__ +#define __M37710IL_H__ + + +/* ======================================================================== */ +/* ================================= MEMORY =============================== */ +/* ======================================================================== */ + +inline UINT32 m37710_cpu_device::m37710i_read_8_normal(UINT32 address) +{ + return m37710_read_8(address); +} + +inline UINT32 m37710_cpu_device::m37710i_read_8_immediate(UINT32 address) +{ + return m37710_read_8_immediate(address); +} + +inline UINT32 m37710_cpu_device::m37710i_read_8_direct(UINT32 address) +{ + return m37710_read_8(address); +} + +inline void m37710_cpu_device::m37710i_write_8_normal(UINT32 address, UINT32 value) +{ + m37710_write_8(address, value); +} + +inline void m37710_cpu_device::m37710i_write_8_direct(UINT32 address, UINT32 value) +{ + m37710_write_8(address, value); +} + +inline UINT32 m37710_cpu_device::m37710i_read_16_normal(UINT32 address) +{ + return m37710_read_16(address); +} + +inline UINT32 m37710_cpu_device::m37710i_read_16_immediate(UINT32 address) +{ + if (address & 1) + return m37710_read_8_immediate(address) | (m37710_read_8_immediate(address+1)<<8); + else + return m37710_read_16_immediate(address); +} + +inline UINT32 m37710_cpu_device::m37710i_read_16_direct(UINT32 address) +{ + return m37710_read_16(address); +} + +inline void m37710_cpu_device::m37710i_write_16_normal(UINT32 address, UINT32 value) +{ + m37710_write_16(address, value); +} + +inline void m37710_cpu_device::m37710i_write_16_direct(UINT32 address, UINT32 value) +{ + m37710_write_16(address, value); +} + +inline UINT32 m37710_cpu_device::m37710i_read_24_normal(UINT32 address) +{ + if (address & 1) + return m37710_read_8(address) | (m37710_read_16(address+1)<<8); + else + return m37710_read_16(address) | (m37710_read_8(address+2)<<16); +} + +inline UINT32 m37710_cpu_device::m37710i_read_24_immediate(UINT32 address) +{ + if (address & 1) + return m37710_read_8_immediate(address) | (m37710_read_16_immediate(address+1)<<8); + else + return m37710_read_16_immediate(address) | (m37710_read_8_immediate(address+2)<<16); +} + +inline UINT32 m37710_cpu_device::m37710i_read_24_direct(UINT32 address) +{ + if (address & 1) + return m37710_read_8(address) | (m37710_read_16(address+1)<<8); + else + return m37710_read_16(address) | (m37710_read_8(address+2)<<16); +} + + +/* ======================================================================== */ +/* ================================= STACK ================================ */ +/* ======================================================================== */ + +inline void m37710_cpu_device::m37710i_push_8(UINT32 value) +{ + m37710_write_8(REG_S, value); + REG_S = MAKE_UINT_16(REG_S-1); +} + +inline UINT32 m37710_cpu_device::m37710i_pull_8() +{ + REG_S = MAKE_UINT_16(REG_S+1); + return m37710_read_8(REG_S); +} + +inline void m37710_cpu_device::m37710i_push_16(UINT32 value) +{ + m37710i_push_8(value>>8); + m37710i_push_8(value); +} + +inline UINT32 m37710_cpu_device::m37710i_pull_16() +{ + UINT32 res = m37710i_pull_8(); + return res | (m37710i_pull_8() << 8); +} + +inline void m37710_cpu_device::m37710i_push_24(UINT32 value) +{ + m37710i_push_8(value>>16); + m37710i_push_8((value>>8)); + m37710i_push_8(value); +} + +inline UINT32 m37710_cpu_device::m37710i_pull_24() +{ + UINT32 res = m37710i_pull_8(); + res |= m37710i_pull_8() << 8; + return res | (m37710i_pull_8() << 16); +} + + +/* ======================================================================== */ +/* ============================ PROGRAM COUNTER =========================== */ +/* ======================================================================== */ + +inline void m37710_cpu_device::m37710i_jump_16(UINT32 address) +{ + REG_PC = MAKE_UINT_16(address); +} + +inline void m37710_cpu_device::m37710i_jump_24(UINT32 address) +{ + REG_PB = address&0xff0000; + REG_PC = MAKE_UINT_16(address); +} + +inline void m37710_cpu_device::m37710i_branch_8(UINT32 offset) +{ + REG_PC = MAKE_UINT_16(REG_PC + MAKE_INT_8(offset)); +} + +inline void m37710_cpu_device::m37710i_branch_16(UINT32 offset) +{ + REG_PC = MAKE_UINT_16(REG_PC + offset); +} + + +/* ======================================================================== */ +/* ============================ STATUS REGISTER =========================== */ +/* ======================================================================== */ + +inline UINT32 m37710_cpu_device::m37710i_get_reg_p() +{ + return (FLAG_N&0x80) | + ((FLAG_V>>1)&0x40) | + FLAG_M | + FLAG_X | + FLAG_D | + FLAG_I | + ((!FLAG_Z)<<1) | + ((FLAG_C>>8)&1); +} + +inline void m37710_cpu_device::m37710i_set_reg_ipl(UINT32 value) +{ + m_ipl = value & 7; +} + + +/* ======================================================================== */ +/* ============================= ADDRESS MODES ============================ */ +/* ======================================================================== */ + +inline UINT32 m37710_cpu_device::EA_IMM8() {REG_PC += 1; return REG_PB | MAKE_UINT_16(REG_PC-1);} +inline UINT32 m37710_cpu_device::EA_IMM16() {REG_PC += 2; return REG_PB | MAKE_UINT_16(REG_PC-2);} +inline UINT32 m37710_cpu_device::EA_IMM24() {REG_PC += 3; return REG_PB | MAKE_UINT_16(REG_PC-3);} +inline UINT32 m37710_cpu_device::EA_D() {if(MAKE_UINT_8(REG_D)) CLK(1); return MAKE_UINT_16(REG_D + OPER_8_IMM());} +inline UINT32 m37710_cpu_device::EA_A() {return REG_DB | OPER_16_IMM();} +inline UINT32 m37710_cpu_device::EA_AL() {return OPER_24_IMM();} +inline UINT32 m37710_cpu_device::EA_DX() {return MAKE_UINT_16(REG_D + OPER_8_IMM() + REG_X);} +inline UINT32 m37710_cpu_device::EA_DY() {return MAKE_UINT_16(REG_D + OPER_8_IMM() + REG_Y);} +inline UINT32 m37710_cpu_device::EA_AX() {UINT32 tmp = EA_A(); if((tmp^(tmp+REG_X))&0xff00) CLK(1); return tmp + REG_X;} +inline UINT32 m37710_cpu_device::EA_ALX() {return EA_AL() + REG_X;} +inline UINT32 m37710_cpu_device::EA_AY() {UINT32 tmp = EA_A(); if((tmp^(tmp+REG_X))&0xff00) CLK(1); return tmp + REG_Y;} +inline UINT32 m37710_cpu_device::EA_DI() {return REG_DB | OPER_16_D();} +inline UINT32 m37710_cpu_device::EA_DLI() {return OPER_24_D();} +inline UINT32 m37710_cpu_device::EA_AI() {return read_16_A(OPER_16_IMM());} +inline UINT32 m37710_cpu_device::EA_ALI() {return OPER_24_A();} +inline UINT32 m37710_cpu_device::EA_DXI() {return REG_DB | OPER_16_DX();} +inline UINT32 m37710_cpu_device::EA_DIY() {UINT32 tmp = REG_DB | OPER_16_D(); if((tmp^(tmp+REG_X))&0xff00) CLK(1); return tmp + REG_Y;} +inline UINT32 m37710_cpu_device::EA_DLIY() {return OPER_24_D() + REG_Y;} +inline UINT32 m37710_cpu_device::EA_AXI() {return read_16_AXI(MAKE_UINT_16(OPER_16_IMM() + REG_X));} +inline UINT32 m37710_cpu_device::EA_S() {return MAKE_UINT_16(REG_S + OPER_8_IMM());} +inline UINT32 m37710_cpu_device::EA_SIY() {return MAKE_UINT_16(read_16_SIY(REG_S + OPER_8_IMM()) + REG_Y) | REG_DB;} + +#endif /* __M37710IL_H__ */ |