summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author Robbbert <pac0446@bigpond.net.au>2015-03-07 17:01:48 +1100
committer Robbbert <pac0446@bigpond.net.au>2015-03-07 17:01:48 +1100
commit0121b9e491347bc277971104b8c4e49a4c18ff3e (patch)
tree85760b64ddb61d190286b56ebf732dde5a46d884
parente85b10a655238bcaee55625f027955ef6c60ed2c (diff)
(MESS) mbee : some work on the old keyboard (nw)
-rw-r--r--src/mess/drivers/mbee.c14
-rw-r--r--src/mess/includes/mbee.h8
-rw-r--r--src/mess/video/mbee.c45
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<screen_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
- else
- if (BIT(extra, 1) && ( port == 3 && bit == 0 )) keydown = 1; // cursor down = ^X
+ 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, 2) && ( port == 2 && bit == 3 )) keydown = 1; // cursor left = ^S
+ 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, 3) && ( port == 0 && bit == 4 )) keydown = 1; // cursor right = ^D
+ 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, 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 )