From 820e0ba0ee01017eb7d434f625cfe79e2def4358 Mon Sep 17 00:00:00 2001 From: Vas Crabb Date: Sat, 23 Jul 2016 15:20:00 +1000 Subject: [PATCH] sun keyboard: add Type 5 Japan option type5jphle --- src/devices/bus/sunkbd/hlekbd.cpp | 110 +++++++++++++++++++++++++++++- src/devices/bus/sunkbd/hlekbd.h | 17 ++++- src/devices/bus/sunkbd/sunkbd.cpp | 1 + 3 files changed, 124 insertions(+), 4 deletions(-) diff --git a/src/devices/bus/sunkbd/hlekbd.cpp b/src/devices/bus/sunkbd/hlekbd.cpp index 996d7479d71..87f5d799905 100644 --- a/src/devices/bus/sunkbd/hlekbd.cpp +++ b/src/devices/bus/sunkbd/hlekbd.cpp @@ -19,7 +19,7 @@ 0000 0011 bell off 0000 1010 enable keyclick (5ms duration 480us period on make) 0000 1011 disable keyclick - 0000 1110 ---- lscn LED (1 = on, l = caps lock, s = scroll lock, c = compose, n = num lock) + 0000 1110 ---k lscn LED (1 = on, k = kana, l = caps lock, s = scroll lock, c = compose, n = num lock) 0000 1111 layout request (keyboard responds with layout response) message from keyboad to host: @@ -110,6 +110,23 @@ 5f 61 4c 13 78 79 7a 43 0d 18 1b 1c 5e 32 5a double-height return key, 58 (US backslash) moved to home row, 7c added on left of bottom row + + + Type 5 Japanese layout: + + 76 1d 05 06 08 0a 0c 0e 10 11 12 07 09 0b 16 17 15 2d 02 04 30 + + 01 03 2a 1e 1f 20 21 22 23 24 25 26 27 28 29 2b 2c 34 60 62 2e 2f 47 + 19 1a 35 36 37 38 39 3a 3b 3c 3d 3e 3f 40 41 42 4a 7b 44 45 46 + 31 33 77 4d 4e 4f 50 51 52 53 54 55 56 57 58 59 5b 5c 5d 7d + 48 49 63 64 65 66 67 68 69 6a 6b 6c 6d 6f 6e 14 70 71 72 + 5f 61 4c 13 78 73 79 74 75 7a 43 0d 18 1b 1c 5e 32 5a + + double-height return key + yen/pipe replaces backtick/tilde at top left corner of main area + linefeed scancode repurposed for backslash/underscore + kana replaces alt graph (with LED window) + extra kakutei, henkan and nihongo on-off keys */ @@ -122,6 +139,7 @@ device_type const SUN_TYPE4_HLE_KEYBOARD = &device_creator; device_type const SUN_TYPE5_GB_HLE_KEYBOARD = &device_creator; device_type const SUN_TYPE5_SE_HLE_KEYBOARD = &device_creator; +device_type const SUN_TYPE5_JP_HLE_KEYBOARD = &device_creator; @@ -372,6 +390,41 @@ INPUT_PORTS_START( basic_se ) INPUT_PORTS_END +INPUT_PORTS_START( basic_jp ) + PORT_INCLUDE( basic ) + + PORT_MODIFY("ROW1") + PORT_BIT( 0x8000, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_2) PORT_CHAR('2') PORT_CHAR('"') + + PORT_MODIFY("ROW2") + PORT_BIT( 0x0008, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_6) PORT_CHAR('6') PORT_CHAR('&') + PORT_BIT( 0x0010, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_7) PORT_CHAR('7') PORT_CHAR('\'') + PORT_BIT( 0x0020, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_8) PORT_CHAR('8') PORT_CHAR('(') + PORT_BIT( 0x0040, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_9) PORT_CHAR('9') PORT_CHAR(')') + PORT_BIT( 0x0080, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_0) PORT_CHAR('0') + PORT_BIT( 0x0100, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_MINUS) PORT_CHAR('-') PORT_CHAR('=') + PORT_BIT( 0x0200, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_EQUALS) PORT_CHAR('^') PORT_CHAR('~') + PORT_BIT( 0x0400, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_TILDE) PORT_CHAR(0x00a5U) PORT_CHAR('|') + + PORT_MODIFY("ROW4") + PORT_BIT( 0x0001, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_OPENBRACE) PORT_CHAR('@') PORT_CHAR('`') + PORT_BIT( 0x0002, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_CLOSEBRACE) PORT_CHAR('[') PORT_CHAR('{') + + PORT_MODIFY("ROW5") + PORT_BIT( 0x0040, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_COLON) PORT_CHAR(';') PORT_CHAR('+') + PORT_BIT( 0x0080, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_QUOTE) PORT_CHAR(':') PORT_CHAR('*') + PORT_BIT( 0x0100, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_BACKSLASH) PORT_CHAR(']') PORT_CHAR('}') + + PORT_MODIFY("ROW6") + PORT_BIT( 0x8000, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_BACKSLASH2) PORT_CHAR('\\') PORT_CHAR('_') + + PORT_MODIFY("ROW7") + PORT_BIT( 0x0008, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Kakutei") + PORT_BIT( 0x0010, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Henkan") + PORT_BIT( 0x0020, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Nihongo On-Off") PORT_CODE(KEYCODE_MENU) +INPUT_PORTS_END + + INPUT_PORTS_START( tenkey ) PORT_MODIFY("ROW2") PORT_BIT( 0x4000, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("KP /") PORT_CODE(KEYCODE_SLASH_PAD) @@ -662,6 +715,16 @@ INPUT_PORTS_START( hle_type5_se_device ) INPUT_PORTS_END +INPUT_PORTS_START( hle_type5_jp_device ) + PORT_INCLUDE(basic_jp) + PORT_INCLUDE(type5_ext) + TYPE5_DIPS(0x11) + + PORT_MODIFY("ROW0") + PORT_BIT( 0x2000, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Kana") PORT_CODE(KEYCODE_RALT) +INPUT_PORTS_END + + /*************************************************************************** MACHINE CONFIGURATION FRAGMENTS @@ -809,6 +872,7 @@ void hle_device_base::device_reset() machine().output().set_led_value(LED_COMPOSE, 0); machine().output().set_led_value(LED_SCROLL, 0); machine().output().set_led_value(LED_CAPS, 0); + machine().output().set_led_value(LED_KANA, 0); // send reset response send_byte(0xffU); @@ -900,6 +964,7 @@ void hle_device_base::rcv_complete() machine().output().set_led_value(LED_COMPOSE, BIT(code, 1)); machine().output().set_led_value(LED_SCROLL, BIT(code, 2)); machine().output().set_led_value(LED_CAPS, BIT(code, 3)); + machine().output().set_led_value(LED_KANA, BIT(code, 4)); m_rx_state = RX_IDLE; break; @@ -1208,7 +1273,7 @@ hle_type5_gb_device::hle_type5_gb_device( tag, owner, clock, - "type5_hle_kbd", + "type5_gb_hle_kbd", __FILE__) { } @@ -1247,7 +1312,7 @@ hle_type5_se_device::hle_type5_se_device( tag, owner, clock, - "type5_hle_kbd", + "type5_se_hle_kbd", __FILE__) { } @@ -1263,4 +1328,43 @@ ioport_constructor hle_type5_se_device::device_input_ports() const return INPUT_PORTS_NAME(hle_type5_se_device); } + + +/*************************************************************************** + TYPE 5 JAPANESE HLE KEYBOARD DEVICE +***************************************************************************/ + +/*-------------------------------------------------- + hle_type5_jp_device::hle_type5_jp_device + abbreviated constructor +--------------------------------------------------*/ + +hle_type5_jp_device::hle_type5_jp_device( + machine_config const &mconfig, + char const *tag, + device_t *owner, + UINT32 clock) + : hle_type4_device_base( + mconfig, + SUN_TYPE5_HLE_KEYBOARD, + "Sun Type 5 Keyboard (Japan - HLE)", + tag, + owner, + clock, + "type5_jp_hle_kbd", + __FILE__) +{ +} + + +/*-------------------------------------------------- + hle_type5_jp_device::device_input_ports + get input ports for this device +--------------------------------------------------*/ + +ioport_constructor hle_type5_jp_device::device_input_ports() const +{ + return INPUT_PORTS_NAME(hle_type5_jp_device); +} + } } // namespace bus::sunkbd diff --git a/src/devices/bus/sunkbd/hlekbd.h b/src/devices/bus/sunkbd/hlekbd.h index 53c28c31d2b..545817783e5 100644 --- a/src/devices/bus/sunkbd/hlekbd.h +++ b/src/devices/bus/sunkbd/hlekbd.h @@ -14,6 +14,7 @@ extern device_type const SUN_TYPE4_HLE_KEYBOARD; extern device_type const SUN_TYPE5_HLE_KEYBOARD; extern device_type const SUN_TYPE5_GB_HLE_KEYBOARD; extern device_type const SUN_TYPE5_SE_HLE_KEYBOARD; +extern device_type const SUN_TYPE5_JP_HLE_KEYBOARD; namespace bus { namespace sunkbd { @@ -61,7 +62,8 @@ private: LED_NUM = 0, LED_COMPOSE, LED_SCROLL, - LED_CAPS + LED_CAPS, + LED_KANA }; enum : UINT8 { @@ -184,6 +186,19 @@ public: virtual ioport_constructor device_input_ports() const override; }; + +class hle_type5_jp_device : public hle_type4_device_base +{ +public: + hle_type5_jp_device( + machine_config const &mconfig, + char const *tag, + device_t *owner, + UINT32 clock); + + virtual ioport_constructor device_input_ports() const override; +}; + } } // namespace bus::sunkbd #endif // MAME_DEVICES_SUNKBD_HLEKBD_H diff --git a/src/devices/bus/sunkbd/sunkbd.cpp b/src/devices/bus/sunkbd/sunkbd.cpp index ba4ad1091cd..23037d82904 100644 --- a/src/devices/bus/sunkbd/sunkbd.cpp +++ b/src/devices/bus/sunkbd/sunkbd.cpp @@ -95,4 +95,5 @@ SLOT_INTERFACE_START( default_sun_keyboard_devices ) SLOT_INTERFACE("type5hle", SUN_TYPE5_HLE_KEYBOARD) SLOT_INTERFACE("type5gbhle", SUN_TYPE5_GB_HLE_KEYBOARD) SLOT_INTERFACE("type5sehle", SUN_TYPE5_SE_HLE_KEYBOARD) + SLOT_INTERFACE("type5jphle", SUN_TYPE5_JP_HLE_KEYBOARD) SLOT_INTERFACE_END