(MESS) mbee : some work on the old keyboard (nw)

This commit is contained in:
Robbbert 2015-03-07 17:01:48 +11:00
parent e85b10a655
commit 0121b9e491
3 changed files with 39 additions and 28 deletions

View File

@ -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")

View File

@ -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;
};

View File

@ -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 )