summaryrefslogtreecommitdiffstatshomepage
path: root/src
diff options
context:
space:
mode:
author robjustice <j.robert.justice@gmail.com>2023-08-17 05:13:32 +1000
committer GitHub <noreply@github.com>2023-08-17 05:13:32 +1000
commit54ea3debf372419b6877a6331a4b7fda2890e002 (patch)
tree9406e4475e64ed988b93ac1c3db9a8c1935349ce /src
parent14d06f63779808b24a157ba22c9dad591a75f82d (diff)
apple/apple3_m.cpp: Trigger reset/NMI when reset key combinations are pressed. (#11487)
Diffstat (limited to 'src')
-rw-r--r--src/mame/apple/apple3.cpp4
-rw-r--r--src/mame/apple/apple3.h5
-rw-r--r--src/mame/apple/apple3_m.cpp21
3 files changed, 25 insertions, 5 deletions
diff --git a/src/mame/apple/apple3.cpp b/src/mame/apple/apple3.cpp
index 36968d01fdc..fbd46b208e0 100644
--- a/src/mame/apple/apple3.cpp
+++ b/src/mame/apple/apple3.cpp
@@ -316,10 +316,10 @@ static INPUT_PORTS_START( apple3 )
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Caps Lock") PORT_CODE(KEYCODE_CAPSLOCK) PORT_TOGGLE
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Left Shift") PORT_CODE(KEYCODE_LSHIFT) PORT_CHAR(UCHAR_SHIFT_1)
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Right Shift") PORT_CODE(KEYCODE_RSHIFT) PORT_CHAR(UCHAR_SHIFT_1)
- PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Control") PORT_CODE(KEYCODE_LCONTROL) PORT_CHAR(UCHAR_SHIFT_2)
+ PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Control") PORT_CHANGED_MEMBER(DEVICE_SELF, apple3_state, apple3_state::keyb_special_changed, 0) PORT_CODE(KEYCODE_LCONTROL) PORT_CHAR(UCHAR_SHIFT_2)
PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Open Apple") PORT_CODE(KEYCODE_LALT)
PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Solid Apple") PORT_CODE(KEYCODE_RALT)
- PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("RESET") PORT_CODE(KEYCODE_F12)
+ PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("RESET") PORT_CHANGED_MEMBER(DEVICE_SELF, apple3_state, apple3_state::keyb_special_changed, 0) PORT_CODE(KEYCODE_F12)
PORT_START("joy_1_x") /* Joystick 1 X Axis */
PORT_BIT( 0xff, 0x80, IPT_AD_STICK_X) PORT_SENSITIVITY(100) PORT_KEYDELTA(1) PORT_NAME("P1 Joystick X")
diff --git a/src/mame/apple/apple3.h b/src/mame/apple/apple3.h
index d3d3e947d9e..b391884f912 100644
--- a/src/mame/apple/apple3.h
+++ b/src/mame/apple/apple3.h
@@ -65,7 +65,8 @@ public:
floppy1(*this, "1"),
floppy2(*this, "2"),
floppy3(*this, "3"),
- m_reset_latch(false)
+ m_reset_latch(false),
+ m_nmi_latch(false)
{
}
@@ -129,6 +130,7 @@ public:
void a2bus_nmi_w(int state);
void vbl_w(int state);
void a2bus_inh_w(int state);
+ DECLARE_INPUT_CHANGED_MEMBER(keyb_special_changed);
// these need to be public for now
uint32_t m_flags = 0;
@@ -138,6 +140,7 @@ public:
void apple3_map(address_map &map);
private:
bool m_reset_latch;
+ bool m_nmi_latch;
uint8_t m_via_0_a = 0;
uint8_t m_via_0_b = 0;
uint8_t m_via_1_a = 0;
diff --git a/src/mame/apple/apple3_m.cpp b/src/mame/apple/apple3_m.cpp
index 98aaddf8df2..6bfe49647b1 100644
--- a/src/mame/apple/apple3_m.cpp
+++ b/src/mame/apple/apple3_m.cpp
@@ -1123,9 +1123,12 @@ TIMER_CALLBACK_MEMBER(apple3_state::scanend_cb)
m_via[1]->write_pb6(1);
m_scanstart->adjust(m_screen->time_until_pos((scanline+1) % 224, 0));
+}
- // check for ctrl-reset
- if ((m_kbspecial->read() & 0x88) == 0x88)
+INPUT_CHANGED_MEMBER(apple3_state::keyb_special_changed)
+{
+ // check for ctrl-reset (RESET)
+ if (((m_kbspecial->read() & 0x88) == 0x88) && (m_via_0_a & ENV_NMIENABLE))
{
if (!m_reset_latch)
{
@@ -1133,6 +1136,15 @@ TIMER_CALLBACK_MEMBER(apple3_state::scanend_cb)
m_maincpu->set_input_line(INPUT_LINE_RESET, ASSERT_LINE);
}
}
+ // check for reset key only (NMI)
+ else if ((m_kbspecial->read() & 0x80) && (m_via_0_a & ENV_NMIENABLE))
+ {
+ if (!m_nmi_latch)
+ {
+ m_nmi_latch = true;
+ m_maincpu->set_input_line(INPUT_LINE_NMI, ASSERT_LINE);
+ }
+ }
else
{
if (m_reset_latch)
@@ -1142,6 +1154,11 @@ TIMER_CALLBACK_MEMBER(apple3_state::scanend_cb)
m_a2bus->reset_bus();
m_maincpu->set_input_line(INPUT_LINE_RESET, CLEAR_LINE);
}
+ else if (m_nmi_latch)
+ {
+ m_nmi_latch = false;
+ m_maincpu->set_input_line(INPUT_LINE_NMI, CLEAR_LINE);
+ }
}
}