summaryrefslogtreecommitdiffstatshomepage
path: root/src/emu/cpu/m6809/m6809.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/emu/cpu/m6809/m6809.c')
-rw-r--r--src/emu/cpu/m6809/m6809.c46
1 files changed, 39 insertions, 7 deletions
diff --git a/src/emu/cpu/m6809/m6809.c b/src/emu/cpu/m6809/m6809.c
index 3b7fc33d94f..d69b0417453 100644
--- a/src/emu/cpu/m6809/m6809.c
+++ b/src/emu/cpu/m6809/m6809.c
@@ -113,8 +113,10 @@ m6809_base_device::m6809_base_device(const machine_config &mconfig, const char *
: cpu_device(mconfig, type, name, tag, owner, clock, shortname, source),
m_lic_func(*this),
m_program_config("program", ENDIANNESS_BIG, 8, 16),
+ m_sprogram_config("decrypted_opcodes", ENDIANNESS_BIG, 8, 16),
m_clock_divider(divider)
{
+ m_mintf = NULL;
}
@@ -124,7 +126,14 @@ m6809_base_device::m6809_base_device(const machine_config &mconfig, const char *
void m6809_base_device::device_start()
{
- m_direct = &m_addrspace[AS_PROGRAM]->direct();
+ if (!m_mintf)
+ m_mintf = new mi_default;
+
+ m_mintf->m_program = &space(AS_PROGRAM);
+ m_mintf->m_sprogram = has_space(AS_DECRYPTED_OPCODES) ? &space(AS_DECRYPTED_OPCODES) : m_mintf->m_program;
+
+ m_mintf->m_direct = &m_mintf->m_program->direct();
+ m_mintf->m_sdirect = &m_mintf->m_sprogram->direct();
m_lic_func.resolve_safe();
@@ -280,11 +289,12 @@ void m6809_base_device::device_post_load()
const address_space_config *m6809_base_device::memory_space_config(address_spacenum spacenum) const
{
- if (spacenum == AS_PROGRAM)
+ switch(spacenum)
{
- return &m_program_config;
+ case AS_PROGRAM: return &m_program_config;
+ case AS_DECRYPTED_OPCODES: return has_configured_map(AS_DECRYPTED_OPCODES) ? &m_sprogram_config : NULL;
+ default: return NULL;
}
- return NULL;
}
@@ -456,7 +466,7 @@ const char *m6809_base_device::inputnum_string(int inputnum)
// read_exgtfr_register
//-------------------------------------------------
-ATTR_FORCE_INLINE m6809_base_device::exgtfr_register m6809_base_device::read_exgtfr_register(UINT8 reg)
+m6809_base_device::exgtfr_register m6809_base_device::read_exgtfr_register(UINT8 reg)
{
exgtfr_register result;
result.byte_value = 0xFF;
@@ -483,7 +493,7 @@ ATTR_FORCE_INLINE m6809_base_device::exgtfr_register m6809_base_device::read_exg
// write_exgtfr_register
//-------------------------------------------------
-ATTR_FORCE_INLINE void m6809_base_device::write_exgtfr_register(UINT8 reg, m6809_base_device::exgtfr_register value)
+void m6809_base_device::write_exgtfr_register(UINT8 reg, m6809_base_device::exgtfr_register value)
{
switch(reg & 0x0F)
{
@@ -516,7 +526,7 @@ void m6809_base_device::log_illegal()
// execute_one - try to execute a single instruction
//-------------------------------------------------
-ATTR_FORCE_INLINE void m6809_base_device::execute_one()
+void m6809_base_device::execute_one()
{
switch(pop_state())
{
@@ -539,6 +549,28 @@ void m6809_base_device::execute_run()
}
+UINT8 m6809_base_device::mi_default::read(UINT16 adr)
+{
+ return m_program->read_byte(adr);
+}
+
+UINT8 m6809_base_device::mi_default::read_opcode(UINT16 adr)
+{
+ return m_sdirect->read_byte(adr);
+}
+
+UINT8 m6809_base_device::mi_default::read_opcode_arg(UINT16 adr)
+{
+ return m_direct->read_byte(adr);
+}
+
+
+void m6809_base_device::mi_default::write(UINT16 adr, UINT8 val)
+{
+ m_program->write_byte(adr, val);
+}
+
+
//-------------------------------------------------
// m6809_device