From 37287b94d3749084741257cc3509717f246d10df Mon Sep 17 00:00:00 2001 From: Curt Coder Date: Tue, 7 Mar 2023 10:36:16 +0200 Subject: abc1600: Fix cursor keys. [Curt Coder] --- src/devices/bus/abckb/abc99.cpp | 57 +++++++++++++++++++++++++++++++++++++---- src/devices/bus/abckb/abc99.h | 4 +++ 2 files changed, 56 insertions(+), 5 deletions(-) diff --git a/src/devices/bus/abckb/abc99.cpp b/src/devices/bus/abckb/abc99.cpp index 4f8fafcc392..8f9dbdac16e 100644 --- a/src/devices/bus/abckb/abc99.cpp +++ b/src/devices/bus/abckb/abc99.cpp @@ -43,7 +43,7 @@ Notes: TODO: - - verify cursor keys + - watchdog - language DIP - mouse @@ -196,6 +196,48 @@ INPUT_CHANGED_MEMBER( abc99_device::keyboard_reset ) // INPUT_PORTS( abc99 ) //------------------------------------------------- +CUSTOM_INPUT_MEMBER( abc99_device::cursor_x4_r ) +{ + u8 cursor = m_cursor->read(); + u8 data = 0; + switch (cursor & 0xf) + { + case 0x1: // up + case 0x9: // up-right + data = 0x1; + break; + case 0x2: // down + case 0xa: // down-right + data = 0x2; + break; + case 0x8: // right + data = 0x3; + break; + } + return data; +} + +CUSTOM_INPUT_MEMBER( abc99_device::cursor_x6_r ) +{ + u8 cursor = m_cursor->read(); + u8 data = 0; + switch (cursor & 0xf) + { + case 0x1: // up + case 0x5: // up-left + data = 0x1; + break; + case 0x2: // down + case 0x6: // down-left + data = 0x2; + break; + case 0x4: // left + data = 0x3; + break; + } + return data; +} + INPUT_PORTS_START( abc99 ) PORT_START("X0") PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_UNUSED ) @@ -242,8 +284,7 @@ INPUT_PORTS_START( abc99 ) PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("PF15") PORT_CODE(KEYCODE_PAUSE) PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("DEL") PORT_CODE(KEYCODE_DEL) PORT_CHAR(UCHAR_MAMEKEY(DEL)) PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_UNUSED ) - PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME(UTF8_RIGHT) PORT_CODE(KEYCODE_RIGHT) PORT_CHAR(UCHAR_MAMEKEY(RIGHT)) // cursor B - PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME(UTF8_LEFT) PORT_CODE(KEYCODE_LEFT) PORT_CHAR(UCHAR_MAMEKEY(LEFT)) // cursor D + PORT_BIT( 0x30, IP_ACTIVE_HIGH, IPT_CUSTOM) PORT_CUSTOM_MEMBER(abc99_device, cursor_x4_r) PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_X) PORT_CHAR('x') PORT_CHAR('X') PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNUSED ) @@ -262,8 +303,7 @@ INPUT_PORTS_START( abc99 ) PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("PF14") PORT_CODE(KEYCODE_SCRLOCK) PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("INS") PORT_CODE(KEYCODE_INSERT) PORT_CHAR(UCHAR_MAMEKEY(INSERT)) PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_UNUSED ) - PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME(UTF8_UP) PORT_CODE(KEYCODE_UP) PORT_CHAR(UCHAR_MAMEKEY(UP)) // cursor A - PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME(UTF8_DOWN) PORT_CODE(KEYCODE_DOWN) PORT_CHAR(UCHAR_MAMEKEY(DOWN)) // cursor C + PORT_BIT( 0x30, IP_ACTIVE_HIGH, IPT_CUSTOM) PORT_CUSTOM_MEMBER(abc99_device, cursor_x6_r) PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("CTRL") PORT_CODE(KEYCODE_LCONTROL) PORT_CHAR(UCHAR_MAMEKEY(LCONTROL)) PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("CAPS LOCK") PORT_CODE(KEYCODE_CAPSLOCK) PORT_CHAR(UCHAR_MAMEKEY(CAPSLOCK)) @@ -371,6 +411,12 @@ INPUT_PORTS_START( abc99 ) PORT_DIPSETTING( 0x00, "Internal (8048)" ) PORT_DIPSETTING( 0x08, "External PROM" ) + PORT_START("CURSOR") + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME(UTF8_UP) PORT_CODE(KEYCODE_UP) PORT_CHAR(UCHAR_MAMEKEY(UP)) + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME(UTF8_DOWN) PORT_CODE(KEYCODE_DOWN) PORT_CHAR(UCHAR_MAMEKEY(DOWN)) + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME(UTF8_LEFT) PORT_CODE(KEYCODE_LEFT) PORT_CHAR(UCHAR_MAMEKEY(LEFT)) + PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME(UTF8_RIGHT) PORT_CODE(KEYCODE_RIGHT) PORT_CHAR(UCHAR_MAMEKEY(RIGHT)) + PORT_START("MOUSEB") PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("Left Mouse Button") PORT_CODE(MOUSECODE_BUTTON1) PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("Middle Mouse Button") PORT_CODE(MOUSECODE_BUTTON3) @@ -447,6 +493,7 @@ abc99_device::abc99_device(const machine_config &mconfig, const char *tag, devic m_mousecpu(*this, I8035_Z5_TAG), m_speaker(*this, "speaker"), m_z14(*this, "Z14"), + m_cursor(*this, "CURSOR"), m_mouseb(*this, "MOUSEB"), m_leds(*this, "led%u", 0U), m_si(1), diff --git a/src/devices/bus/abckb/abc99.h b/src/devices/bus/abckb/abc99.h index adbd4a35705..78257884612 100644 --- a/src/devices/bus/abckb/abc99.h +++ b/src/devices/bus/abckb/abc99.h @@ -31,6 +31,9 @@ public: // construction/destruction abc99_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + DECLARE_CUSTOM_INPUT_MEMBER( cursor_x4_r ); + DECLARE_CUSTOM_INPUT_MEMBER( cursor_x6_r ); + DECLARE_INPUT_CHANGED_MEMBER( keyboard_reset ); protected: @@ -87,6 +90,7 @@ private: required_device m_mousecpu; required_device m_speaker; required_ioport m_z14; + required_ioport m_cursor; required_ioport m_mouseb; output_finder<11> m_leds; -- cgit v1.2.3