summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author arbee <rb6502@users.noreply.github.com>2020-09-28 20:12:01 -0400
committer arbee <rb6502@users.noreply.github.com>2020-09-28 20:12:01 -0400
commit44fd97da4e759b793242f7bc446302560f9e00b2 (patch)
tree9cb2dd9b69ec5b32956489f798549df2a53569df
parent1a298e6670306eef5f7d2f8023d33efeb66447c4 (diff)
apple3: fix low-memory indirection through the X byte and get slot IRQs working [Rob Justice]
-rw-r--r--src/devices/bus/a2bus/a2bus.cpp4
-rw-r--r--src/mame/machine/apple3.cpp12
2 files changed, 8 insertions, 8 deletions
diff --git a/src/devices/bus/a2bus/a2bus.cpp b/src/devices/bus/a2bus/a2bus.cpp
index ae5dbf82643..e09671f8f16 100644
--- a/src/devices/bus/a2bus/a2bus.cpp
+++ b/src/devices/bus/a2bus/a2bus.cpp
@@ -205,8 +205,6 @@ uint8_t a2bus_device::get_a2bus_nmi_mask()
void a2bus_device::set_irq_line(int state, int slot)
{
- m_out_irq_cb(state);
-
if (state == CLEAR_LINE)
{
m_slot_irq_mask &= ~(1<<slot);
@@ -215,6 +213,8 @@ void a2bus_device::set_irq_line(int state, int slot)
{
m_slot_irq_mask |= (1<<slot);
}
+
+ m_out_irq_cb(state);
}
void a2bus_device::set_nmi_line(int state, int slot)
diff --git a/src/mame/machine/apple3.cpp b/src/mame/machine/apple3.cpp
index f5849d8ca85..a875d6dfc9e 100644
--- a/src/mame/machine/apple3.cpp
+++ b/src/mame/machine/apple3.cpp
@@ -680,7 +680,7 @@ uint8_t *apple3_state::apple3_get_indexed_addr(offs_t offset)
if ((offset >= 0xFFD0) && (offset <= 0xFFEF))
result = apple3_bankaddr(~0, offset & 0x7FFF);
else if (offset < 0x2000)
- result = apple3_bankaddr(~0, offset - 0x2000);
+ result = apple3_bankaddr(~0, offset);
else if (offset > 0x9FFF)
result = apple3_bankaddr(~0, offset - 0x8000);
else
@@ -1367,24 +1367,24 @@ WRITE_LINE_MEMBER(apple3_state::a2bus_irq_w)
{
uint8_t irq_mask = m_a2bus->get_a2bus_irq_mask();
- m_via[0]->write_ca1(state);
+ m_via[0]->write_ca1(!state);
if (irq_mask & (1<<4))
{
- m_via[1]->write_pa4(ASSERT_LINE);
+ m_via[1]->write_pa4(CLEAR_LINE);
}
else
{
- m_via[1]->write_pa4(CLEAR_LINE);
+ m_via[1]->write_pa4(ASSERT_LINE);
}
if (irq_mask & (1<<3))
{
- m_via[1]->write_pa5(ASSERT_LINE);
+ m_via[1]->write_pa5(CLEAR_LINE);
}
else
{
- m_via[1]->write_pa5(CLEAR_LINE);
+ m_via[1]->write_pa5(ASSERT_LINE);
}
}