mirror of
https://github.com/holub/mame
synced 2025-10-04 08:28:39 +03:00
m37710: make memory helpers inline; remove more obsolete cruft (nw)
This commit is contained in:
parent
e806dfd320
commit
d5122094dd
1
.gitattributes
vendored
1
.gitattributes
vendored
@ -1770,6 +1770,7 @@ src/emu/cpu/lr35902/opc_main.h svneol=native#text/plain
|
|||||||
src/emu/cpu/m37710/m37710.c svneol=native#text/plain
|
src/emu/cpu/m37710/m37710.c svneol=native#text/plain
|
||||||
src/emu/cpu/m37710/m37710.h svneol=native#text/plain
|
src/emu/cpu/m37710/m37710.h svneol=native#text/plain
|
||||||
src/emu/cpu/m37710/m37710cm.h svneol=native#text/plain
|
src/emu/cpu/m37710/m37710cm.h svneol=native#text/plain
|
||||||
|
src/emu/cpu/m37710/m37710il.h svneol=native#text/plain
|
||||||
src/emu/cpu/m37710/m37710o0.c svneol=native#text/plain
|
src/emu/cpu/m37710/m37710o0.c svneol=native#text/plain
|
||||||
src/emu/cpu/m37710/m37710o1.c svneol=native#text/plain
|
src/emu/cpu/m37710/m37710o1.c svneol=native#text/plain
|
||||||
src/emu/cpu/m37710/m37710o2.c svneol=native#text/plain
|
src/emu/cpu/m37710/m37710o2.c svneol=native#text/plain
|
||||||
|
@ -1205,6 +1205,8 @@ endif
|
|||||||
|
|
||||||
M37710DEPS = \
|
M37710DEPS = \
|
||||||
$(CPUSRC)/m37710/m37710.h \
|
$(CPUSRC)/m37710/m37710.h \
|
||||||
|
$(CPUSRC)/m37710/m37710cm.h \
|
||||||
|
$(CPUSRC)/m37710/m37710il.h \
|
||||||
$(CPUSRC)/m37710/m37710op.h \
|
$(CPUSRC)/m37710/m37710op.h \
|
||||||
$(CPUSRC)/m37710/m7700ds.h
|
$(CPUSRC)/m37710/m7700ds.h
|
||||||
|
|
||||||
|
@ -55,6 +55,7 @@
|
|||||||
#include "debugger.h"
|
#include "debugger.h"
|
||||||
#include "m37710.h"
|
#include "m37710.h"
|
||||||
#include "m37710cm.h"
|
#include "m37710cm.h"
|
||||||
|
#include "m37710il.h"
|
||||||
|
|
||||||
#define M37710_DEBUG (0) // enables verbose logging for peripherals, etc.
|
#define M37710_DEBUG (0) // enables verbose logging for peripherals, etc.
|
||||||
|
|
||||||
@ -704,30 +705,6 @@ const m37710_cpu_device::execute_func m37710_cpu_device::m37710i_execute[4] =
|
|||||||
|
|
||||||
/* internal functions */
|
/* internal functions */
|
||||||
|
|
||||||
void m37710_cpu_device::m37710i_push_8(UINT32 value)
|
|
||||||
{
|
|
||||||
m37710_write_8(REG_S, value);
|
|
||||||
REG_S = MAKE_UINT_16(REG_S-1);
|
|
||||||
}
|
|
||||||
|
|
||||||
void m37710_cpu_device::m37710i_push_16(UINT32 value)
|
|
||||||
{
|
|
||||||
m37710i_push_8(value>>8);
|
|
||||||
m37710i_push_8(value&0xff);
|
|
||||||
}
|
|
||||||
|
|
||||||
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);
|
|
||||||
}
|
|
||||||
|
|
||||||
void m37710_cpu_device::m37710i_update_irqs()
|
void m37710_cpu_device::m37710i_update_irqs()
|
||||||
{
|
{
|
||||||
int curirq, pending = LINE_IRQ;
|
int curirq, pending = LINE_IRQ;
|
||||||
@ -786,10 +763,8 @@ void m37710_cpu_device::m37710i_update_irqs()
|
|||||||
m_ipl = curpri;
|
m_ipl = curpri;
|
||||||
// then PB=0, PC=(vector)
|
// then PB=0, PC=(vector)
|
||||||
REG_PB = 0;
|
REG_PB = 0;
|
||||||
REG_PC = m37710_read_8(m37710_irq_vectors[wantedIRQ]) |
|
REG_PC = m37710_read_16(m37710_irq_vectors[wantedIRQ]);
|
||||||
m37710_read_8(m37710_irq_vectors[wantedIRQ]+1)<<8;
|
|
||||||
// logerror("IRQ @ %06x\n", REG_PB | REG_PC);
|
// logerror("IRQ @ %06x\n", REG_PB | REG_PC);
|
||||||
m37710i_jumping(REG_PB | REG_PC);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -876,8 +851,7 @@ void m37710_cpu_device::device_reset()
|
|||||||
m37710i_set_execution_mode(EXECUTION_MODE_M0X0);
|
m37710i_set_execution_mode(EXECUTION_MODE_M0X0);
|
||||||
|
|
||||||
/* Fetch the reset vector */
|
/* Fetch the reset vector */
|
||||||
REG_PC = m37710_read_8(0xfffe) | (m37710_read_8(0xffff)<<8);
|
REG_PC = m37710_read_16(0xfffe);
|
||||||
m37710i_jumping(REG_PB | REG_PC);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Execute some instructions */
|
/* Execute some instructions */
|
||||||
@ -894,7 +868,6 @@ void m37710_cpu_device::execute_run()
|
|||||||
void m37710_cpu_device::m37710_set_pc(unsigned val)
|
void m37710_cpu_device::m37710_set_pc(unsigned val)
|
||||||
{
|
{
|
||||||
REG_PC = MAKE_UINT_16(val);
|
REG_PC = MAKE_UINT_16(val);
|
||||||
m37710_jumping(REG_PB | REG_PC);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Get the current Stack Pointer */
|
/* Get the current Stack Pointer */
|
||||||
@ -947,9 +920,6 @@ void m37710_cpu_device::m37710_restore_state()
|
|||||||
{
|
{
|
||||||
// restore proper function pointers
|
// restore proper function pointers
|
||||||
m37710i_set_execution_mode((FLAG_M>>4) | (FLAG_X>>4));
|
m37710i_set_execution_mode((FLAG_M>>4) | (FLAG_X>>4));
|
||||||
|
|
||||||
// make sure the memory system can keep up
|
|
||||||
m37710i_jumping(REG_PB | REG_PC);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void m37710_cpu_device::device_start()
|
void m37710_cpu_device::device_start()
|
||||||
@ -1189,184 +1159,6 @@ void m37710_cpu_device::m37710i_set_execution_mode(UINT32 mode)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* ======================================================================== */
|
|
||||||
/* ================================= MEMORY =============================== */
|
|
||||||
/* ======================================================================== */
|
|
||||||
|
|
||||||
UINT32 m37710_cpu_device::m37710i_read_8_normal(UINT32 address)
|
|
||||||
{
|
|
||||||
return m37710_read_8(address);
|
|
||||||
}
|
|
||||||
|
|
||||||
UINT32 m37710_cpu_device::m37710i_read_8_immediate(UINT32 address)
|
|
||||||
{
|
|
||||||
return m37710_read_8_immediate(address);
|
|
||||||
}
|
|
||||||
|
|
||||||
UINT32 m37710_cpu_device::m37710i_read_8_direct(UINT32 address)
|
|
||||||
{
|
|
||||||
return m37710_read_8(address);
|
|
||||||
}
|
|
||||||
|
|
||||||
void m37710_cpu_device::m37710i_write_8_normal(UINT32 address, UINT32 value)
|
|
||||||
{
|
|
||||||
m37710_write_8(address, value);
|
|
||||||
}
|
|
||||||
|
|
||||||
void m37710_cpu_device::m37710i_write_8_direct(UINT32 address, UINT32 value)
|
|
||||||
{
|
|
||||||
m37710_write_8(address, value);
|
|
||||||
}
|
|
||||||
|
|
||||||
UINT32 m37710_cpu_device::m37710i_read_16_normal(UINT32 address)
|
|
||||||
{
|
|
||||||
if (address & 1)
|
|
||||||
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)
|
|
||||||
{
|
|
||||||
if (address & 1)
|
|
||||||
return m37710_read_8_immediate(address) | m37710_read_8_immediate(address+1)<<8;
|
|
||||||
else
|
|
||||||
return m37710_read_16_immediate(address);
|
|
||||||
}
|
|
||||||
|
|
||||||
UINT32 m37710_cpu_device::m37710i_read_16_direct(UINT32 address)
|
|
||||||
{
|
|
||||||
if (address & 1)
|
|
||||||
return m37710_read_8(address) | m37710_read_8((address)+1)<<8;
|
|
||||||
else
|
|
||||||
return m37710_read_16(address);
|
|
||||||
}
|
|
||||||
|
|
||||||
void m37710_cpu_device::m37710i_write_16_normal(UINT32 address, UINT32 value)
|
|
||||||
{
|
|
||||||
if (address & 1)
|
|
||||||
{
|
|
||||||
m37710_write_8(address, value);
|
|
||||||
m37710_write_8(address+1, value>>8);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
m37710_write_16(address, value);
|
|
||||||
}
|
|
||||||
|
|
||||||
void m37710_cpu_device::m37710i_write_16_direct(UINT32 address, UINT32 value)
|
|
||||||
{
|
|
||||||
if (address & 1)
|
|
||||||
{
|
|
||||||
m37710_write_8(address, value);
|
|
||||||
m37710_write_8(address+1, value>>8);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
m37710_write_16(address, value);
|
|
||||||
}
|
|
||||||
|
|
||||||
UINT32 m37710_cpu_device::m37710i_read_24_normal(UINT32 address)
|
|
||||||
{
|
|
||||||
return m37710_read_16(address) |
|
|
||||||
(m37710_read_8(address+2)<<16);
|
|
||||||
}
|
|
||||||
|
|
||||||
UINT32 m37710_cpu_device::m37710i_read_24_immediate(UINT32 address)
|
|
||||||
{
|
|
||||||
return m37710_read_16_immediate(address) |
|
|
||||||
(m37710_read_8_immediate(address+2)<<16);
|
|
||||||
}
|
|
||||||
|
|
||||||
UINT32 m37710_cpu_device::m37710i_read_24_direct(UINT32 address)
|
|
||||||
{
|
|
||||||
return m37710_read_16(address) |
|
|
||||||
(m37710_read_8(address+2)<<16);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* ======================================================================== */
|
|
||||||
/* ================================= STACK ================================ */
|
|
||||||
/* ======================================================================== */
|
|
||||||
|
|
||||||
UINT32 m37710_cpu_device::m37710i_pull_8()
|
|
||||||
{
|
|
||||||
REG_S = MAKE_UINT_16(REG_S+1);
|
|
||||||
return m37710i_read_8_normal(REG_S);
|
|
||||||
}
|
|
||||||
|
|
||||||
UINT32 m37710_cpu_device::m37710i_pull_16()
|
|
||||||
{
|
|
||||||
UINT32 res = m37710i_pull_8();
|
|
||||||
return res | (m37710i_pull_8() << 8);
|
|
||||||
}
|
|
||||||
|
|
||||||
void m37710_cpu_device::m37710i_push_24(UINT32 value)
|
|
||||||
{
|
|
||||||
m37710i_push_8(value>>16);
|
|
||||||
m37710i_push_8((value>>8)&0xff);
|
|
||||||
m37710i_push_8(value&0xff);
|
|
||||||
}
|
|
||||||
|
|
||||||
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 =========================== */
|
|
||||||
/* ======================================================================== */
|
|
||||||
|
|
||||||
void m37710_cpu_device::m37710i_jump_16(UINT32 address)
|
|
||||||
{
|
|
||||||
REG_PC = MAKE_UINT_16(address);
|
|
||||||
m37710i_jumping(REG_PC);
|
|
||||||
}
|
|
||||||
|
|
||||||
void m37710_cpu_device::m37710i_jump_24(UINT32 address)
|
|
||||||
{
|
|
||||||
REG_PB = address&0xff0000;
|
|
||||||
REG_PC = MAKE_UINT_16(address);
|
|
||||||
m37710i_jumping(REG_PC);
|
|
||||||
}
|
|
||||||
|
|
||||||
void m37710_cpu_device::m37710i_branch_8(UINT32 offset)
|
|
||||||
{
|
|
||||||
REG_PC = MAKE_UINT_16(REG_PC + MAKE_INT_8(offset));
|
|
||||||
m37710i_branching(REG_PC);
|
|
||||||
}
|
|
||||||
|
|
||||||
void m37710_cpu_device::m37710i_branch_16(UINT32 offset)
|
|
||||||
{
|
|
||||||
REG_PC = MAKE_UINT_16(REG_PC + offset);
|
|
||||||
m37710i_branching(REG_PC);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/* ======================================================================== */
|
|
||||||
/* ============================ STATUS REGISTER =========================== */
|
|
||||||
/* ======================================================================== */
|
|
||||||
|
|
||||||
void m37710_cpu_device::m37710i_set_flag_i(UINT32 value)
|
|
||||||
{
|
|
||||||
value &= FLAGPOS_I;
|
|
||||||
if(!FLAG_I || value)
|
|
||||||
{
|
|
||||||
FLAG_I = value;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
FLAG_I = value;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void m37710_cpu_device::m37710i_set_reg_ipl(UINT32 value)
|
|
||||||
{
|
|
||||||
m_ipl = value & 7;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/* ======================================================================== */
|
/* ======================================================================== */
|
||||||
/* =============================== INTERRUPTS ============================= */
|
/* =============================== INTERRUPTS ============================= */
|
||||||
/* ======================================================================== */
|
/* ======================================================================== */
|
||||||
@ -1378,33 +1170,12 @@ void m37710_cpu_device::m37710i_interrupt_software(UINT32 vector)
|
|||||||
m37710i_push_16(REG_PC);
|
m37710i_push_16(REG_PC);
|
||||||
m37710i_push_8(m_ipl);
|
m37710i_push_8(m_ipl);
|
||||||
m37710i_push_8(m37710i_get_reg_p());
|
m37710i_push_8(m37710i_get_reg_p());
|
||||||
m37710i_set_flag_i(IFLAG_SET);
|
FLAG_I = IFLAG_SET;
|
||||||
REG_PB = 0;
|
REG_PB = 0;
|
||||||
m37710i_jump_16(m37710i_read_16_normal(vector));
|
REG_PC = m37710_read_16(vector);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
UINT32 m37710_cpu_device::EA_IMM8() {REG_PC += 1; return REG_PB | MAKE_UINT_16(REG_PC-1);}
|
|
||||||
UINT32 m37710_cpu_device::EA_IMM16() {REG_PC += 2; return REG_PB | MAKE_UINT_16(REG_PC-2);}
|
|
||||||
UINT32 m37710_cpu_device::EA_IMM24() {REG_PC += 3; return REG_PB | MAKE_UINT_16(REG_PC-3);}
|
|
||||||
UINT32 m37710_cpu_device::EA_D() {if(MAKE_UINT_8(REG_D)) CLK(1); return MAKE_UINT_16(REG_D + OPER_8_IMM());}
|
|
||||||
UINT32 m37710_cpu_device::EA_A() {return REG_DB | OPER_16_IMM();}
|
|
||||||
UINT32 m37710_cpu_device::EA_AL() {return OPER_24_IMM();}
|
|
||||||
UINT32 m37710_cpu_device::EA_DX() {return MAKE_UINT_16(REG_D + OPER_8_IMM() + REG_X);}
|
|
||||||
UINT32 m37710_cpu_device::EA_DY() {return MAKE_UINT_16(REG_D + OPER_8_IMM() + REG_Y);}
|
|
||||||
UINT32 m37710_cpu_device::EA_AX() {UINT32 tmp = EA_A(); if((tmp^(tmp+REG_X))&0xff00) CLK(1); return tmp + REG_X;}
|
|
||||||
UINT32 m37710_cpu_device::EA_ALX() {return EA_AL() + REG_X;}
|
|
||||||
UINT32 m37710_cpu_device::EA_AY() {UINT32 tmp = EA_A(); if((tmp^(tmp+REG_X))&0xff00) CLK(1); return tmp + REG_Y;}
|
|
||||||
UINT32 m37710_cpu_device::EA_DI() {return REG_DB | OPER_16_D();}
|
|
||||||
UINT32 m37710_cpu_device::EA_DLI() {return OPER_24_D();}
|
|
||||||
UINT32 m37710_cpu_device::EA_AI() {return read_16_A(OPER_16_IMM());}
|
|
||||||
UINT32 m37710_cpu_device::EA_ALI() {return OPER_24_A();}
|
|
||||||
UINT32 m37710_cpu_device::EA_DXI() {return REG_DB | OPER_16_DX();}
|
|
||||||
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;}
|
|
||||||
UINT32 m37710_cpu_device::EA_DLIY() {return OPER_24_D() + REG_Y;}
|
|
||||||
UINT32 m37710_cpu_device::EA_AXI() {return read_16_AXI(MAKE_UINT_16(OPER_16_IMM() + REG_X));}
|
|
||||||
UINT32 m37710_cpu_device::EA_S() {return MAKE_UINT_16(REG_S + OPER_8_IMM());}
|
|
||||||
UINT32 m37710_cpu_device::EA_SIY() {return MAKE_UINT_16(read_16_SIY(REG_S + OPER_8_IMM()) + REG_Y) | REG_DB;}
|
|
||||||
|
|
||||||
/* ======================================================================== */
|
/* ======================================================================== */
|
||||||
/* ============================== END OF FILE ============================= */
|
/* ============================== END OF FILE ============================= */
|
||||||
|
@ -238,9 +238,6 @@ private:
|
|||||||
int m37710i_execute_M0X1(int cycles);
|
int m37710i_execute_M0X1(int cycles);
|
||||||
int m37710i_execute_M1X0(int cycles);
|
int m37710i_execute_M1X0(int cycles);
|
||||||
int m37710i_execute_M1X1(int cycles);
|
int m37710i_execute_M1X1(int cycles);
|
||||||
void m37710i_push_8(UINT32 value);
|
|
||||||
void m37710i_push_16(UINT32 value);
|
|
||||||
UINT32 m37710i_get_reg_p();
|
|
||||||
void m37710i_update_irqs();
|
void m37710i_update_irqs();
|
||||||
void m37710_set_pc(unsigned val);
|
void m37710_set_pc(unsigned val);
|
||||||
unsigned m37710_get_sp();
|
unsigned m37710_get_sp();
|
||||||
@ -262,7 +259,9 @@ private:
|
|||||||
UINT32 m37710i_read_24_normal(UINT32 address);
|
UINT32 m37710i_read_24_normal(UINT32 address);
|
||||||
UINT32 m37710i_read_24_immediate(UINT32 address);
|
UINT32 m37710i_read_24_immediate(UINT32 address);
|
||||||
UINT32 m37710i_read_24_direct(UINT32 address);
|
UINT32 m37710i_read_24_direct(UINT32 address);
|
||||||
|
void m37710i_push_8(UINT32 value);
|
||||||
UINT32 m37710i_pull_8();
|
UINT32 m37710i_pull_8();
|
||||||
|
void m37710i_push_16(UINT32 value);
|
||||||
UINT32 m37710i_pull_16();
|
UINT32 m37710i_pull_16();
|
||||||
void m37710i_push_24(UINT32 value);
|
void m37710i_push_24(UINT32 value);
|
||||||
UINT32 m37710i_pull_24();
|
UINT32 m37710i_pull_24();
|
||||||
@ -270,7 +269,7 @@ private:
|
|||||||
void m37710i_jump_24(UINT32 address);
|
void m37710i_jump_24(UINT32 address);
|
||||||
void m37710i_branch_8(UINT32 offset);
|
void m37710i_branch_8(UINT32 offset);
|
||||||
void m37710i_branch_16(UINT32 offset);
|
void m37710i_branch_16(UINT32 offset);
|
||||||
void m37710i_set_flag_i(UINT32 value);
|
UINT32 m37710i_get_reg_p();
|
||||||
void m37710i_set_reg_ipl(UINT32 value);
|
void m37710i_set_reg_ipl(UINT32 value);
|
||||||
void m37710i_interrupt_software(UINT32 vector);
|
void m37710i_interrupt_software(UINT32 vector);
|
||||||
void m37710i_set_flag_m0x0(UINT32 value);
|
void m37710i_set_flag_m0x0(UINT32 value);
|
||||||
|
@ -3,9 +3,6 @@
|
|||||||
#ifndef __M37710CM_H__
|
#ifndef __M37710CM_H__
|
||||||
#define __M37710CM_H__
|
#define __M37710CM_H__
|
||||||
|
|
||||||
#define m37710i_branching(A)
|
|
||||||
#define m37710i_jumping(A)
|
|
||||||
|
|
||||||
|
|
||||||
/* ======================================================================== */
|
/* ======================================================================== */
|
||||||
/* ================================ INCLUDES ============================== */
|
/* ================================ INCLUDES ============================== */
|
||||||
@ -25,11 +22,9 @@
|
|||||||
#define m37710_read_8(addr) m_program->read_byte(addr)
|
#define m37710_read_8(addr) m_program->read_byte(addr)
|
||||||
#define m37710_write_8(addr,data) m_program->write_byte(addr,data)
|
#define m37710_write_8(addr,data) m_program->write_byte(addr,data)
|
||||||
#define m37710_read_8_immediate(A) m_direct->read_decrypted_byte(A, BYTE_XOR_LE(0))
|
#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_read_16(addr) m_program->read_word_unaligned(addr)
|
||||||
#define m37710_write_16(addr,data) m_program->write_word(addr,data)
|
#define m37710_write_16(addr,data) m_program->write_word_unaligned(addr,data)
|
||||||
#define m37710_read_16_immediate(A) m_direct->read_decrypted_word(A)
|
#define m37710_read_16_immediate(A) m_direct->read_decrypted_word(A)
|
||||||
#define m37710_jumping(A)
|
|
||||||
#define m37710_branching(A)
|
|
||||||
|
|
||||||
|
|
||||||
/* ======================================================================== */
|
/* ======================================================================== */
|
||||||
|
206
src/emu/cpu/m37710/m37710il.h
Normal file
206
src/emu/cpu/m37710/m37710il.h
Normal file
@ -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__ */
|
@ -1,5 +1,6 @@
|
|||||||
#include "emu.h"
|
#include "emu.h"
|
||||||
#include "debugger.h"
|
#include "debugger.h"
|
||||||
#include "m37710cm.h"
|
#include "m37710cm.h"
|
||||||
|
#include "m37710il.h"
|
||||||
#define EXECUTION_MODE EXECUTION_MODE_M0X0
|
#define EXECUTION_MODE EXECUTION_MODE_M0X0
|
||||||
#include "m37710op.h"
|
#include "m37710op.h"
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
#include "emu.h"
|
#include "emu.h"
|
||||||
#include "debugger.h"
|
#include "debugger.h"
|
||||||
#include "m37710cm.h"
|
#include "m37710cm.h"
|
||||||
|
#include "m37710il.h"
|
||||||
#define EXECUTION_MODE EXECUTION_MODE_M0X1
|
#define EXECUTION_MODE EXECUTION_MODE_M0X1
|
||||||
#include "m37710op.h"
|
#include "m37710op.h"
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
#include "emu.h"
|
#include "emu.h"
|
||||||
#include "debugger.h"
|
#include "debugger.h"
|
||||||
#include "m37710cm.h"
|
#include "m37710cm.h"
|
||||||
|
#include "m37710il.h"
|
||||||
#define EXECUTION_MODE EXECUTION_MODE_M1X0
|
#define EXECUTION_MODE EXECUTION_MODE_M1X0
|
||||||
#include "m37710op.h"
|
#include "m37710op.h"
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
#include "emu.h"
|
#include "emu.h"
|
||||||
#include "debugger.h"
|
#include "debugger.h"
|
||||||
#include "m37710cm.h"
|
#include "m37710cm.h"
|
||||||
|
#include "m37710il.h"
|
||||||
#define EXECUTION_MODE EXECUTION_MODE_M1X1
|
#define EXECUTION_MODE EXECUTION_MODE_M1X1
|
||||||
#include "m37710op.h"
|
#include "m37710op.h"
|
||||||
|
@ -88,7 +88,7 @@ void m37710_cpu_device::m37710i_set_reg_p(UINT32 value)
|
|||||||
FLAG_Z = !(value & FLAGPOS_Z);
|
FLAG_Z = !(value & FLAGPOS_Z);
|
||||||
FLAG_C = value << 8;
|
FLAG_C = value << 8;
|
||||||
m37710i_set_flag_mx(value);
|
m37710i_set_flag_mx(value);
|
||||||
m37710i_set_flag_i(value);
|
FLAG_I = value & FLAGPOS_I;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -485,7 +485,7 @@ void m37710_cpu_device::m37710i_set_reg_p(UINT32 value)
|
|||||||
#undef OP_CLI
|
#undef OP_CLI
|
||||||
#define OP_CLI() \
|
#define OP_CLI() \
|
||||||
CLK(CLK_OP + CLK_IMPLIED); \
|
CLK(CLK_OP + CLK_IMPLIED); \
|
||||||
m37710i_set_flag_i(IFLAG_CLEAR); \
|
FLAG_I = IFLAG_CLEAR; \
|
||||||
m37710i_update_irqs()
|
m37710i_update_irqs()
|
||||||
|
|
||||||
/* M37710 Clear oVerflow flag */
|
/* M37710 Clear oVerflow flag */
|
||||||
@ -1362,7 +1362,6 @@ void m37710_cpu_device::m37710i_set_reg_p(UINT32 value)
|
|||||||
m37710i_set_reg_ipl(m37710i_pull_8()); \
|
m37710i_set_reg_ipl(m37710i_pull_8()); \
|
||||||
m37710i_jump_16(m37710i_pull_16()); \
|
m37710i_jump_16(m37710i_pull_16()); \
|
||||||
REG_PB = m37710i_pull_8() << 16; \
|
REG_PB = m37710i_pull_8() << 16; \
|
||||||
m37710i_jumping(REG_PB | REG_PC); \
|
|
||||||
m37710i_update_irqs()
|
m37710i_update_irqs()
|
||||||
|
|
||||||
/* M37710 Return from Subroutine Long */
|
/* M37710 Return from Subroutine Long */
|
||||||
@ -1506,7 +1505,7 @@ void m37710_cpu_device::m37710i_set_reg_p(UINT32 value)
|
|||||||
#undef OP_SEI
|
#undef OP_SEI
|
||||||
#define OP_SEI() \
|
#define OP_SEI() \
|
||||||
CLK(CLK_OP + CLK_IMPLIED); \
|
CLK(CLK_OP + CLK_IMPLIED); \
|
||||||
m37710i_set_flag_i(IFLAG_SET)
|
FLAG_I = IFLAG_SET
|
||||||
|
|
||||||
/* M37710 Set Program status word */
|
/* M37710 Set Program status word */
|
||||||
#undef OP_SEP
|
#undef OP_SEP
|
||||||
|
Loading…
Reference in New Issue
Block a user