summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author Angelo Salese <angelosa@users.noreply.github.com>2012-09-06 00:51:10 +0000
committer Angelo Salese <angelosa@users.noreply.github.com>2012-09-06 00:51:10 +0000
commit18d55aaad63f0e8776c8651f4655b7574495683b (patch)
tree59dc843c232d07f198a1aabea2f62aaa2e4c4219
parentec94908b351fef1990102cf15b8766d90de130fa (diff)
(MESS) Added keyboard inputs for Pasopia and Pasopia 7, z80pio irq still doesn't work [Angelo Salese]
-rw-r--r--.gitattributes1
-rw-r--r--src/mess/drivers/pasopia.c69
-rw-r--r--src/mess/drivers/pasopia7.c137
-rw-r--r--src/mess/includes/pasopia.h135
4 files changed, 214 insertions, 128 deletions
diff --git a/.gitattributes b/.gitattributes
index ec8b6fc39b3..666655783a1 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -6135,6 +6135,7 @@ src/mess/includes/osborne1.h svneol=native#text/plain
src/mess/includes/osi.h svneol=native#text/plain
src/mess/includes/p2000t.h svneol=native#text/plain
src/mess/includes/partner.h svneol=native#text/plain
+src/mess/includes/pasopia.h svneol=native#text/plain
src/mess/includes/pc.h svneol=native#text/plain
src/mess/includes/pc1251.h svneol=native#text/plain
src/mess/includes/pc1350.h svneol=native#text/plain
diff --git a/src/mess/drivers/pasopia.c b/src/mess/drivers/pasopia.c
index 19ff9d318de..13b9960cd1c 100644
--- a/src/mess/drivers/pasopia.c
+++ b/src/mess/drivers/pasopia.c
@@ -17,6 +17,7 @@
#include "machine/z80pio.h"
#include "video/mc6845.h"
#include "machine/keyboard.h"
+#include "includes/pasopia.h"
class pasopia_state : public driver_device
{
@@ -55,12 +56,16 @@ public:
DECLARE_WRITE_LINE_MEMBER(testa_w);
DECLARE_WRITE_LINE_MEMBER(testb_w);
DECLARE_WRITE8_MEMBER(kbd_put);
+ DECLARE_READ8_MEMBER(mux_r);
+ DECLARE_READ8_MEMBER(keyb_r);
+ DECLARE_WRITE8_MEMBER(mux_w);
UINT8 m_hblank;
UINT16 m_vram_addr;
UINT8 m_vram_latch;
UINT8 m_attr_latch;
// UINT8 m_gfx_mode;
+ UINT8 m_mux_data;
bool m_video_wl;
bool m_ram_bank;
UINT8 *m_p_vram;
@@ -125,13 +130,14 @@ static ADDRESS_MAP_START(pasopia_io, AS_IO, 8, pasopia_state)
// 0x1c - 0x1f something
AM_RANGE(0x20,0x23) AM_DEVREADWRITE("ppi8255_2", i8255_device, read, write)
AM_RANGE(0x28,0x2b) AM_DEVREADWRITE("z80ctc", z80ctc_device, read, write)
- AM_RANGE(0x30,0x33) AM_DEVREADWRITE("z80pio", z80pio_device, read_alt, write_alt)
+ AM_RANGE(0x30,0x33) AM_DEVREADWRITE("z80pio", z80pio_device, read, write)
// 0x38 printer
AM_RANGE(0x3c,0x3c) AM_WRITE(pasopia_ctrl_w)
ADDRESS_MAP_END
/* Input ports */
static INPUT_PORTS_START( pasopia )
+ PASOPIA_KEYBOARD
INPUT_PORTS_END
static MACHINE_START(pasopia)
@@ -243,37 +249,49 @@ static Z80CTC_INTERFACE( ctc_intf )
DEVCB_DEVICE_LINE_MEMBER("z80ctc", z80ctc_device, trg3) // ZC/TO2 callback
};
-READ8_MEMBER( pasopia_state::testa_r )
+READ8_MEMBER( pasopia_state::mux_r )
{
- printf("A R\n");
- return 0xff;
+ return m_mux_data;
}
-READ8_MEMBER( pasopia_state::testb_r )
+READ8_MEMBER( pasopia_state::keyb_r )
{
- printf("B R\n");
- return 0xff;
-}
+ const char *const keynames[3][4] = { { "KEY0", "KEY1", "KEY2", "KEY3" },
+ { "KEY4", "KEY5", "KEY6", "KEY7" },
+ { "KEY8", "KEY9", "KEYA", "KEYB" } };
+ int i,j;
+ UINT8 res;
+
+ res = 0;
+ for(j=0;j<3;j++)
+ {
+ if(m_mux_data & 0x10 << j)
+ {
+ for(i=0;i<4;i++)
+ {
+ if(m_mux_data & 1 << i)
+ res |= ioport(keynames[j][i])->read();
+ }
+ }
+ }
-WRITE_LINE_MEMBER( pasopia_state::testa_w )
-{
- printf("A %02x\n",state);
+ return res ^ 0xff;
}
-WRITE_LINE_MEMBER( pasopia_state::testb_w )
+WRITE8_MEMBER( pasopia_state::mux_w )
{
- printf("B %02x\n",state);
+ m_mux_data = data;
}
static Z80PIO_INTERFACE( z80pio_intf )
{
DEVCB_CPU_INPUT_LINE("maincpu", INPUT_LINE_IRQ0), //doesn't work?
- DEVCB_DRIVER_MEMBER(pasopia_state, testa_r), // port A read
- DEVCB_NULL, // port A write
- DEVCB_DRIVER_LINE_MEMBER(pasopia_state, testa_w), // ready A
- DEVCB_DRIVER_MEMBER(pasopia_state, testb_r), // port B read
- DEVCB_NULL, // port B write
- DEVCB_DRIVER_LINE_MEMBER(pasopia_state, testb_w) // ready B
+ DEVCB_DRIVER_MEMBER(pasopia_state, mux_r),
+ DEVCB_DRIVER_MEMBER(pasopia_state, mux_w),
+ DEVCB_NULL,
+ DEVCB_DRIVER_MEMBER(pasopia_state, keyb_r),
+ DEVCB_NULL,
+ DEVCB_NULL
};
static const mc6845_interface mc6845_intf =
@@ -313,17 +331,7 @@ static const z80_daisy_config pasopia_daisy[] =
{ NULL }
};
-// temporary hack
-WRITE8_MEMBER( pasopia_state::kbd_put )
-{
- address_space *mem = m_maincpu->memory().space(AS_PROGRAM);
- mem->write_byte(0xfe79, data);
-}
-static ASCII_KEYBOARD_INTERFACE( keyboard_intf )
-{
- DEVCB_DRIVER_MEMBER(pasopia_state, kbd_put)
-};
DRIVER_INIT_MEMBER(pasopia_state,pasopia)
{
@@ -364,9 +372,6 @@ static MACHINE_CONFIG_START( pasopia, pasopia_state )
MCFG_I8255A_ADD( "ppi8255_2", ppi8255_intf_2 )
MCFG_Z80CTC_ADD( "z80ctc", XTAL_4MHz, ctc_intf )
MCFG_Z80PIO_ADD( "z80pio", XTAL_4MHz, z80pio_intf )
-
- // temporary hack
- MCFG_ASCII_KEYBOARD_ADD(KEYBOARD_TAG, keyboard_intf)
MACHINE_CONFIG_END
/* ROM definition */
diff --git a/src/mess/drivers/pasopia7.c b/src/mess/drivers/pasopia7.c
index 8b392320856..2e0642076f0 100644
--- a/src/mess/drivers/pasopia7.c
+++ b/src/mess/drivers/pasopia7.c
@@ -23,6 +23,7 @@
#include "sound/sn76496.h"
#include "video/mc6845.h"
#include "rendlay.h"
+#include "includes/pasopia.h"
class pasopia7_state : public driver_device
{
@@ -63,9 +64,9 @@ public:
DECLARE_WRITE8_MEMBER(pasopia7_fdc_w);
DECLARE_READ8_MEMBER(pasopia7_io_r);
DECLARE_WRITE8_MEMBER(pasopia7_io_w);
- DECLARE_READ8_MEMBER(test_r);
- DECLARE_WRITE_LINE_MEMBER(testa_w);
- DECLARE_WRITE_LINE_MEMBER(testb_w);
+ DECLARE_READ8_MEMBER(mux_r);
+ DECLARE_READ8_MEMBER(keyb_r);
+ DECLARE_WRITE8_MEMBER(mux_w);
DECLARE_READ8_MEMBER(crtc_portb_r);
DECLARE_WRITE8_MEMBER(screen_mode_w);
DECLARE_WRITE8_MEMBER(plane_reg_w);
@@ -101,6 +102,7 @@ public:
UINT8 m_screen_type;
int m_addr_latch;
void pasopia_nmi_trap();
+ UINT8 m_mux_data;
DECLARE_DRIVER_INIT(p7_lcd);
DECLARE_DRIVER_INIT(p7_raster);
};
@@ -128,76 +130,6 @@ static VIDEO_START( pasopia7 )
ram_space->write_byte(0xfce1,_charset_); \
} \
-/* cheap kludge to use the keyboard without going nuts with the debugger ... */
-static void fake_keyboard_data(running_machine &machine)
-{
- address_space *ram_space = machine.device("maincpu")->memory().space(AS_PROGRAM);
-
- ram_space->write_byte(0xfda4,0x00); //clear flag
-
- keyb_press(KEYCODE_Z, 'z');
- keyb_press(KEYCODE_X, 'x');
- keyb_press(KEYCODE_C, 'c');
- keyb_press(KEYCODE_V, 'v');
- keyb_press(KEYCODE_B, 'b');
- keyb_press(KEYCODE_N, 'n');
- keyb_press(KEYCODE_M, 'm');
-
- keyb_press(KEYCODE_A, 'a');
- keyb_press(KEYCODE_S, 's');
- keyb_press(KEYCODE_D, 'd');
- keyb_press(KEYCODE_F, 'f');
- keyb_press(KEYCODE_G, 'g');
- keyb_press(KEYCODE_H, 'h');
- keyb_press(KEYCODE_J, 'j');
- keyb_press(KEYCODE_K, 'k');
- keyb_press(KEYCODE_L, 'l');
-
- keyb_press(KEYCODE_Q, 'q');
- keyb_press(KEYCODE_W, 'w');
- keyb_press(KEYCODE_E, 'e');
- keyb_press(KEYCODE_R, 'r');
- keyb_press(KEYCODE_T, 't');
- keyb_press(KEYCODE_Y, 'y');
- keyb_press(KEYCODE_U, 'u');
- keyb_press(KEYCODE_I, 'i');
- keyb_press(KEYCODE_O, 'o');
- keyb_press(KEYCODE_P, 'p');
-
- keyb_press(KEYCODE_0, '0');
- keyb_press(KEYCODE_1, '1');
- keyb_press(KEYCODE_2, '2');
- keyb_press(KEYCODE_3, '3');
- keyb_press(KEYCODE_4, '4');
- keyb_press(KEYCODE_5, '5');
- keyb_press(KEYCODE_6, '6');
- keyb_press(KEYCODE_7, '7');
- keyb_press(KEYCODE_8, '8');
- keyb_press(KEYCODE_9, '9');
-
- keyb_shift_press(KEYCODE_0, '=');
- keyb_shift_press(KEYCODE_1, '!');
- keyb_shift_press(KEYCODE_2, '"');
- keyb_shift_press(KEYCODE_3, '?');
- keyb_shift_press(KEYCODE_4, '$');
- keyb_shift_press(KEYCODE_5, '%');
- keyb_shift_press(KEYCODE_6, '&');
- keyb_shift_press(KEYCODE_7, '/');
- keyb_shift_press(KEYCODE_8, '(');
- keyb_shift_press(KEYCODE_9, ')');
-
- keyb_press(KEYCODE_ENTER, 0x0d);
- keyb_press(KEYCODE_SPACE, ' ');
- keyb_press(KEYCODE_STOP, '.');
- keyb_shift_press(KEYCODE_STOP, ':');
- keyb_press(KEYCODE_BACKSPACE, 0x08);
- keyb_press(KEYCODE_0_PAD, '@'); //@
- keyb_press(KEYCODE_COMMA, ',');
- keyb_shift_press(KEYCODE_COMMA, ';');
- keyb_press(KEYCODE_MINUS_PAD, '-');
- keyb_press(KEYCODE_PLUS_PAD, '+');
- keyb_press(KEYCODE_ASTERISK, '*');
-}
static void draw_cg4_screen(running_machine &machine, bitmap_ind16 &bitmap,const rectangle &cliprect,int width)
{
@@ -376,8 +308,6 @@ static SCREEN_UPDATE_IND16( pasopia7 )
bitmap.fill(screen.machine().pens[0], cliprect);
- fake_keyboard_data(screen.machine());
-
width = state->m_x_width ? 80 : 40;
if(state->m_gfx_mode)
@@ -656,9 +586,6 @@ READ8_MEMBER( pasopia7_state::pasopia7_io_r )
io_port = offset & 0xff; //trim down to 8-bit bus
- if(io_port >= 0x30 && io_port <= 0x33)
- printf("[%02x]\n",offset & 3);
-
if(io_port >= 0x08 && io_port <= 0x0b)
return m_ppi0->read(space, io_port & 3);
else
@@ -679,7 +606,7 @@ READ8_MEMBER( pasopia7_state::pasopia7_io_r )
return m_ctc->read(space,io_port & 3);
else
if(io_port >= 0x30 && io_port <= 0x33)
- return m_pio->read_alt(space, io_port & 3);
+ return m_pio->read(space, io_port & 3);
// else if(io_port == 0x3a) { SN1 }
// else if(io_port == 0x3b) { SN2 }
// else if(io_port == 0x3c) { bankswitch }
@@ -708,9 +635,6 @@ WRITE8_MEMBER( pasopia7_state::pasopia7_io_w )
io_port = offset & 0xff; //trim down to 8-bit bus
- if(io_port >= 0x30 && io_port <= 0x33)
- printf("[%02x] <- %02x\n",offset & 3,data);
-
if(io_port >= 0x08 && io_port <= 0x0b)
m_ppi0->write(space, io_port & 3, data);
else
@@ -733,7 +657,7 @@ WRITE8_MEMBER( pasopia7_state::pasopia7_io_w )
m_ctc->write(space, io_port & 3, data);
else
if(io_port >= 0x30 && io_port <= 0x33)
- m_pio->write_alt(space, io_port & 3, data);
+ m_pio->write(space, io_port & 3, data);
else
if(io_port == 0x3a)
m_sn1->write(space, 0, data);
@@ -766,8 +690,9 @@ static ADDRESS_MAP_START(pasopia7_io, AS_IO, 8, pasopia7_state)
AM_RANGE( 0x0000, 0xffff) AM_READWRITE( pasopia7_io_r, pasopia7_io_w )
ADDRESS_MAP_END
-/* Input ports */
+/* TODO: where are SPACE and RETURN keys? */
static INPUT_PORTS_START( pasopia7 )
+ PASOPIA_KEYBOARD
INPUT_PORTS_END
static const gfx_layout p7_chars_8x8 =
@@ -819,30 +744,50 @@ static Z80CTC_INTERFACE( z80ctc_intf )
DEVCB_DEVICE_LINE_MEMBER("z80ctc", z80ctc_device, trg3) // ZC/TO2 callback
};
-READ8_MEMBER( pasopia7_state::test_r )
+
+READ8_MEMBER( pasopia7_state::mux_r )
{
- return machine().rand();
+ return m_mux_data;
}
-WRITE_LINE_MEMBER( pasopia7_state::testa_w )
+READ8_MEMBER( pasopia7_state::keyb_r )
{
- printf("A %02x\n",state);
+ const char *const keynames[3][4] = { { "KEY0", "KEY1", "KEY2", "KEY3" },
+ { "KEY4", "KEY5", "KEY6", "KEY7" },
+ { "KEY8", "KEY9", "KEYA", "KEYB" } };
+ int i,j;
+ UINT8 res;
+
+ res = 0;
+ for(j=0;j<3;j++)
+ {
+ if(m_mux_data & 0x10 << j)
+ {
+ for(i=0;i<4;i++)
+ {
+ if(m_mux_data & 1 << i)
+ res |= ioport(keynames[j][i])->read();
+ }
+ }
+ }
+
+ return res ^ 0xff;
}
-WRITE_LINE_MEMBER( pasopia7_state::testb_w )
+WRITE8_MEMBER( pasopia7_state::mux_w )
{
- printf("B %02x\n",state);
+ m_mux_data = data;
}
static Z80PIO_INTERFACE( z80pio_intf )
{
DEVCB_CPU_INPUT_LINE("maincpu", INPUT_LINE_IRQ0), //doesn't work?
- DEVCB_DRIVER_MEMBER(pasopia7_state, test_r),
+ DEVCB_DRIVER_MEMBER(pasopia7_state, mux_r),
+ DEVCB_DRIVER_MEMBER(pasopia7_state, mux_w),
DEVCB_NULL,
- DEVCB_DRIVER_LINE_MEMBER(pasopia7_state, testa_w),
- DEVCB_DRIVER_MEMBER(pasopia7_state, test_r),
+ DEVCB_DRIVER_MEMBER(pasopia7_state, keyb_r),
DEVCB_NULL,
- DEVCB_DRIVER_LINE_MEMBER(pasopia7_state, testb_w)
+ DEVCB_NULL
};
static const z80_daisy_config p7_daisy[] =
@@ -1049,8 +994,8 @@ static const floppy_interface pasopia7_floppy_interface =
* Sound interface
*
*************************************/
-
-
+
+
//-------------------------------------------------
// sn76496_config psg_intf
//-------------------------------------------------
diff --git a/src/mess/includes/pasopia.h b/src/mess/includes/pasopia.h
new file mode 100644
index 00000000000..e39e7cf803b
--- /dev/null
+++ b/src/mess/includes/pasopia.h
@@ -0,0 +1,135 @@
+#define PASOPIA_KEYBOARD \
+ PORT_START("KEY0") \
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("CTRL") PORT_CODE(KEYCODE_LCONTROL) PORT_CODE(KEYCODE_RCONTROL) \
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("SHIFT") PORT_CODE(KEYCODE_LSHIFT) PORT_CODE(KEYCODE_RSHIFT) \
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("CAPS LOCK") PORT_CODE(KEYCODE_CAPSLOCK) \
+ PORT_DIPNAME( 0x08, 0x00, DEF_STR( Unknown ) ) \
+ PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) \
+ PORT_DIPSETTING( 0x08, DEF_STR( On ) ) \
+ PORT_DIPNAME( 0x10, 0x00, DEF_STR( Unknown ) ) \
+ PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) \
+ PORT_DIPSETTING( 0x10, DEF_STR( On ) ) \
+ PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("KANA LOCK") \
+ PORT_DIPNAME( 0x40, 0x00, DEF_STR( Unknown ) ) \
+ PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) \
+ PORT_DIPSETTING( 0x40, DEF_STR( On ) ) \
+ PORT_DIPNAME( 0x80, 0x00, DEF_STR( Unknown ) ) \
+ PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) \
+ PORT_DIPSETTING( 0x80, DEF_STR( On ) ) \
+ PORT_START("KEY1") \
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_0_PAD) \
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_1_PAD) \
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_2_PAD) \
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_3_PAD) \
+ PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_4_PAD) \
+ PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_5_PAD) \
+ PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_6_PAD) \
+ PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_7_PAD) \
+ PORT_START("KEY2") \
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_8_PAD) \
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_9_PAD) \
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_MINUS_PAD) \
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_PLUS_PAD) \
+ PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_ASTERISK) \
+ PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_SLASH_PAD) \
+ PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_DEL_PAD) \
+ PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_ENTER_PAD) PORT_CODE(KEYCODE_ENTER) \
+ PORT_START("KEY3") \
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_RIGHT) PORT_NAME("RIGHT") \
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Status?") \
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_BACKSPACE) PORT_NAME("BACKSPACE") \
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_TAB) \
+ PORT_DIPNAME( 0x10, 0x00, DEF_STR( Unknown ) ) \
+ PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) \
+ PORT_DIPSETTING( 0x10, DEF_STR( On ) ) \
+ PORT_DIPNAME( 0x20, 0x00, DEF_STR( Unknown ) ) \
+ PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) \
+ PORT_DIPSETTING( 0x20, DEF_STR( On ) ) \
+ PORT_DIPNAME( 0x40, 0x00, DEF_STR( Unknown ) ) \
+ PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) \
+ PORT_DIPSETTING( 0x40, DEF_STR( On ) ) \
+ PORT_DIPNAME( 0x80, 0x00, DEF_STR( Unknown ) ) \
+ PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) \
+ PORT_DIPSETTING( 0x80, DEF_STR( On ) ) \
+ PORT_START("KEY4") \
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_HOME) PORT_NAME("CLS") \
+ PORT_DIPNAME( 0x02, 0x00, "4" ) \
+ PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) \
+ PORT_DIPSETTING( 0x02, DEF_STR( On ) ) \
+ PORT_DIPNAME( 0x04, 0x00, DEF_STR( Unknown ) ) \
+ PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) \
+ PORT_DIPSETTING( 0x04, DEF_STR( On ) ) \
+ PORT_DIPNAME( 0x08, 0x00, DEF_STR( Unknown ) ) \
+ PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) \
+ PORT_DIPSETTING( 0x08, DEF_STR( On ) ) \
+ PORT_DIPNAME( 0x10, 0x00, DEF_STR( Unknown ) ) \
+ PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) \
+ PORT_DIPSETTING( 0x10, DEF_STR( On ) ) \
+ PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_LEFT) PORT_NAME("LEFT") \
+ PORT_DIPNAME( 0x40, 0x00, DEF_STR( Unknown ) ) \
+ PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) \
+ PORT_DIPSETTING( 0x40, DEF_STR( On ) ) \
+ PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_SPACE) PORT_NAME("SPACE") \
+ PORT_START("KEY5") \
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_F1) PORT_NAME("F1") \
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_F2) PORT_NAME("F2") \
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_F3) PORT_NAME("F3") \
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_F4) PORT_NAME("F4") \
+ PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_F5) PORT_NAME("F5") \
+ PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_F6) PORT_NAME("F6") \
+ PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_F7) PORT_NAME("F7") \
+ PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_F8) PORT_NAME("F8") \
+ PORT_START("KEY6") \
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_1) PORT_NAME("1") \
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_0) PORT_NAME("2") \
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_4) PORT_NAME("4") \
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_R) PORT_NAME("R") \
+ PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_Y) PORT_NAME("Y") \
+ PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_EQUALS) PORT_NAME("=") \
+ PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("^") \
+ PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Yen Symbol") \
+ PORT_START("KEY7") \
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_2) PORT_NAME("2") \
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_3) PORT_NAME("3") \
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_8) PORT_NAME("8") \
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_T) PORT_NAME("T") \
+ PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_U) PORT_NAME("U") \
+ PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_7) PORT_NAME("7") \
+ PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("@") \
+ PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("[") \
+ PORT_START("KEY8") \
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_MINUS) PORT_NAME("-") \
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_5) PORT_NAME("5") \
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_6) PORT_NAME("6") \
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_F) PORT_NAME("F") \
+ PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_H) PORT_NAME("H") \
+ PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_9) PORT_NAME("9") \
+ PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME(":") \
+ PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("]") \
+ PORT_START("KEY9") \
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_Q) PORT_NAME("Q") \
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_W) PORT_NAME("W") \
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_E) PORT_NAME("E") \
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_G) PORT_NAME("G") \
+ PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_J) PORT_NAME("J") \
+ PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_I) PORT_NAME("I") \
+ PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_O) PORT_NAME("O") \
+ PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_P) PORT_NAME("P") \
+ PORT_START("KEYA") \
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_A) PORT_NAME("A") \
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_S) PORT_NAME("S") \
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_D) PORT_NAME("D") \
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_V) PORT_NAME("V") \
+ PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_N) PORT_NAME("N") \
+ PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_K) PORT_NAME("K") \
+ PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_L) PORT_NAME("L") \
+ PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME(";") \
+ PORT_START("KEYB") \
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_Z) PORT_NAME("Z") \
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_X) PORT_NAME("X") \
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_C) PORT_NAME("C") \
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_B) PORT_NAME("B") \
+ PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_M) PORT_NAME("M") \
+ PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME(",") \
+ PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME(".") \
+ PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("/")