summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/cpu/m6805/m68hc05.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/devices/cpu/m6805/m68hc05.cpp')
-rw-r--r--src/devices/cpu/m6805/m68hc05.cpp13
1 files changed, 9 insertions, 4 deletions
diff --git a/src/devices/cpu/m6805/m68hc05.cpp b/src/devices/cpu/m6805/m68hc05.cpp
index a0f459a20f8..eab6c86e554 100644
--- a/src/devices/cpu/m6805/m68hc05.cpp
+++ b/src/devices/cpu/m6805/m68hc05.cpp
@@ -109,6 +109,7 @@ m68hc05_device::m68hc05_device(
u32 clock,
device_type type,
u32 addr_width,
+ u16 vector_mask,
address_map_constructor internal_map)
: m6805_base_device(
mconfig,
@@ -116,7 +117,7 @@ m68hc05_device::m68hc05_device(
owner,
clock,
type,
- { s_hc_ops, s_hc_cycles, addr_width, 0x00ff, 0x00c0, M68HC05_VECTOR_SWI },
+ { s_hc_ops, s_hc_cycles, addr_width, 0x00ff, 0x00c0, vector_mask, M68HC05_VECTOR_SWI },
internal_map)
, m_port_cb_r{ *this, *this, *this, *this }
, m_port_cb_w{ *this, *this, *this, *this }
@@ -567,12 +568,12 @@ void m68hc05_device::interrupt()
LOGINT("servicing external interrupt\n");
m_irq_latch = 0;
m_pending_interrupts &= ~M68HC05_INT_IRQ;
- rm16(M68HC05_VECTOR_IRQ, m_pc);
+ rm16(M68HC05_VECTOR_IRQ & m_params.m_vector_mask, m_pc);
}
else if (m_pending_interrupts & M68HC05_INT_TIMER)
{
LOGINT("servicing timer interrupt\n");
- rm16(M68HC05_VECTOR_TIMER, m_pc);
+ rm16(M68HC05_VECTOR_TIMER & m_params.m_vector_mask, m_pc);
}
else
{
@@ -712,7 +713,7 @@ m68hc705_device::m68hc705_device(
device_type type,
u32 addr_width,
address_map_constructor internal_map)
- : m68hc05_device(mconfig, tag, owner, clock, type, addr_width, internal_map)
+ : m68hc05_device(mconfig, tag, owner, clock, type, addr_width, (1U << addr_width) - 1, internal_map)
{
}
@@ -762,6 +763,7 @@ m68hc05c4_device::m68hc05c4_device(machine_config const &mconfig, char const *ta
clock,
M68HC05C4,
13,
+ 0x1fff,
address_map_constructor(FUNC(m68hc05c4_device::c4_map), this))
{
set_port_bits(std::array<u8, PORT_COUNT>{{ 0xff, 0xff, 0xff, 0xbf }});
@@ -828,6 +830,7 @@ m68hc05c8_device::m68hc05c8_device(machine_config const &mconfig, char const *ta
clock,
M68HC05C8,
13,
+ 0x1fff,
address_map_constructor(FUNC(m68hc05c8_device::c8_map), this))
{
set_port_bits(std::array<u8, PORT_COUNT>{{ 0xff, 0xff, 0xff, 0xbf }});
@@ -989,6 +992,7 @@ m68hc05l9_device::m68hc05l9_device(machine_config const &mconfig, char const *ta
clock,
M68HC05L9,
16,
+ 0x1fff,
address_map_constructor(FUNC(m68hc05l9_device::l9_map), this))
{
set_port_bits(std::array<u8, PORT_COUNT>{{ 0xff, 0xff, 0xff, 0x1f }});
@@ -1071,6 +1075,7 @@ m68hc05l11_device::m68hc05l11_device(machine_config const &mconfig, char const *
clock,
M68HC05L11,
16, // FIXME: 16 logical mapped to 23 physical
+ 0x7fff,
address_map_constructor(FUNC(m68hc05l11_device::l11_map), this))
{
set_port_bits(std::array<u8, PORT_COUNT>{{ 0xff, 0xff, 0xff, 0xff }});