diff options
-rw-r--r-- | src/mame/apple/apple3.cpp | 4 | ||||
-rw-r--r-- | src/mame/apple/apple3.h | 5 | ||||
-rw-r--r-- | src/mame/apple/apple3_m.cpp | 21 |
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); + } } } |