From 0121b9e491347bc277971104b8c4e49a4c18ff3e Mon Sep 17 00:00:00 2001 From: Robbbert Date: Sat, 7 Mar 2015 17:01:48 +1100 Subject: [PATCH] (MESS) mbee : some work on the old keyboard (nw) --- src/mess/drivers/mbee.c | 14 +++---------- src/mess/includes/mbee.h | 8 +++---- src/mess/video/mbee.c | 45 ++++++++++++++++++++++++++++------------ 3 files changed, 39 insertions(+), 28 deletions(-) diff --git a/src/mess/drivers/mbee.c b/src/mess/drivers/mbee.c index 609ffdd337e..3914aa7bda6 100644 --- a/src/mess/drivers/mbee.c +++ b/src/mess/drivers/mbee.c @@ -370,7 +370,7 @@ static INPUT_PORTS_START( mbee ) PORT_START("X.3") /* IN3 KEY ROW 3 [180] */ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("X") PORT_CODE(KEYCODE_X) PORT_CHAR('x') PORT_CHAR('X') PORT_CHAR(0x18) - PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Y") PORT_CODE(KEYCODE_Y) PORT_CHAR('u') PORT_CHAR('Y') PORT_CHAR(0x19) + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Y") PORT_CODE(KEYCODE_Y) PORT_CHAR('y') PORT_CHAR('Y') PORT_CHAR(0x19) PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Z") PORT_CODE(KEYCODE_Z) PORT_CHAR('z') PORT_CHAR('Z') PORT_CHAR(0x1a) PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("[") PORT_CODE(KEYCODE_OPENBRACE) PORT_CHAR('[') PORT_CHAR('{') PORT_CHAR(0x1b) PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("\\") PORT_CODE(KEYCODE_BACKSLASH) PORT_CHAR('\\') PORT_CHAR('|') PORT_CHAR(0x1c) @@ -391,8 +391,8 @@ static INPUT_PORTS_START( mbee ) PORT_START("X.5") /* IN5 KEY ROW 5 [280] */ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("8 (") PORT_CODE(KEYCODE_8) PORT_CHAR('8') PORT_CHAR('(') PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("9 )") PORT_CODE(KEYCODE_9) PORT_CHAR('9') PORT_CHAR(')') - PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("; +") PORT_CODE(KEYCODE_COLON) PORT_CHAR(';') PORT_CHAR('+') - PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME(": *") PORT_CODE(KEYCODE_QUOTE) PORT_CHAR(':') PORT_CHAR('*') + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME(": *") PORT_CODE(KEYCODE_COLON) PORT_CHAR(':') PORT_CHAR('*') + PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("; +") PORT_CODE(KEYCODE_QUOTE) PORT_CHAR(';') PORT_CHAR('+') PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME(", <") PORT_CODE(KEYCODE_COMMA) PORT_CHAR(',') PORT_CHAR('<') PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("- =") PORT_CODE(KEYCODE_MINUS) PORT_CHAR('-') PORT_CHAR('=') PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME(". >") PORT_CODE(KEYCODE_STOP) PORT_CHAR('.') PORT_CHAR('>') @@ -418,14 +418,6 @@ static INPUT_PORTS_START( mbee ) PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("(Right)") PORT_CODE(KEYCODE_RIGHT) PORT_CHAR(UCHAR_MAMEKEY(RIGHT)) PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Shift") PORT_CODE(KEYCODE_LSHIFT) PORT_CODE(KEYCODE_RSHIFT) PORT_CHAR(UCHAR_SHIFT_1) - PORT_START("EXTRA") /* IN8 extra keys (non-premium keyboard only) */ - PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("(Up)") PORT_CODE(KEYCODE_UP) PORT_CHAR(UCHAR_MAMEKEY(UP)) - PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("(Down)") PORT_CODE(KEYCODE_DOWN) PORT_CHAR(UCHAR_MAMEKEY(DOWN)) - PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("(Left)") PORT_CODE(KEYCODE_LEFT) PORT_CHAR(UCHAR_MAMEKEY(LEFT)) - PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("(Right)") PORT_CODE(KEYCODE_RIGHT) PORT_CHAR(UCHAR_MAMEKEY(RIGHT)) - PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("(Insert)") PORT_CODE(KEYCODE_INSERT) PORT_CHAR(UCHAR_MAMEKEY(INSERT)) - PORT_BIT( 0xc0, IP_ACTIVE_HIGH, IPT_UNUSED ) - // Autorun on quickload PORT_START("CONFIG") PORT_CONFNAME( 0x01, 0x01, "Autorun on Quickload") diff --git a/src/mess/includes/mbee.h b/src/mess/includes/mbee.h index 2cf47160adc..d078a72f3db 100644 --- a/src/mess/includes/mbee.h +++ b/src/mess/includes/mbee.h @@ -49,10 +49,10 @@ public: , m_pak(*this, "pak") , m_telcom(*this, "telcom") , m_basic(*this, "basic") - , m_io_extra(*this, "EXTRA") - , m_io_config(*this, "CONFIG") + , m_io_x7(*this, "X.7") , m_io_oldkb(*this, "X") , m_io_newkb(*this, "Y") + , m_io_config(*this, "CONFIG") , m_screen(*this, "screen") { } @@ -164,10 +164,10 @@ private: optional_memory_bank m_pak; optional_memory_bank m_telcom; optional_memory_bank m_basic; - optional_ioport m_io_extra; - required_ioport m_io_config; + optional_ioport m_io_x7; optional_ioport_array<8> m_io_oldkb; optional_ioport_array<15> m_io_newkb; + required_ioport m_io_config; required_device m_screen; }; diff --git a/src/mess/video/mbee.c b/src/mess/video/mbee.c index c9097c057bd..01f90c040fa 100644 --- a/src/mess/video/mbee.c +++ b/src/mess/video/mbee.c @@ -156,28 +156,47 @@ void mbee_state::oldkb_matrix_r(UINT16 offs) { if (m_has_oldkb) { + offs &= 0x3f0; // safety check UINT8 port = (offs >> 7) & 7; UINT8 bit = (offs >> 4) & 7; + UINT8 extra = 0; UINT8 data = m_io_oldkb[port]->read(); + if ((port == 0) || (port == 2) || (port == 3)) + extra = m_io_x7->read(); + else + if (port == 7) + extra = data; + bool keydown = ( data >> bit ) & 1; - // This adds premium-style cursor keys to the old keyboard - // They are used by the pc85 & ppc menu, and the 128k shell. - if (!keydown) + // This adds premium-style cursor keys to the old keyboard. + // They are used by the pc85 menu. Premium keyboards already + // have these keys fitted. + if (!keydown && !m_is_premium && extra) { - UINT8 extra = m_io_extra->read(); - - if (extra && port == 7 && bit == 1) keydown = 1; /* Control */ - - if (BIT(extra, 0) && ( port == 0 && bit == 5 )) keydown = 1; // cursor up = ^E + if BIT(extra, 0) // cursor up + { + if( port == 7 && bit == 1 ) keydown = 1; + if( port == 0 && bit == 5 ) keydown = 1; // control E + } else - if (BIT(extra, 1) && ( port == 3 && bit == 0 )) keydown = 1; // cursor down = ^X + if BIT(extra, 2) // cursor down + { + if( port == 7 && bit == 1 ) keydown = 1; + if( port == 3 && bit == 0 ) keydown = 1; // control X + } else - if (BIT(extra, 2) && ( port == 2 && bit == 3 )) keydown = 1; // cursor left = ^S + if BIT(extra, 3) // cursor left + { + if( port == 7 && bit == 1 ) keydown = 1; + if( port == 2 && bit == 3 ) keydown = 1; // control S + } else - if (BIT(extra, 3) && ( port == 0 && bit == 4 )) keydown = 1; // cursor right = ^D - else - if (BIT(extra, 4) && ( port == 2 && bit == 6 )) keydown = 1; // insert = ^V + if BIT(extra, 6) // cursor right + { + if( port == 7 && bit == 1 ) keydown = 1; + if( port == 0 && bit == 4 ) keydown = 1; // control D + } } if( keydown )