(MESS) Added keyboard inputs for Pasopia and Pasopia 7, z80pio irq still doesn't work [Angelo Salese]

This commit is contained in:
Angelo Salese 2012-09-06 00:51:10 +00:00
parent ec94908b35
commit 18d55aaad6
4 changed files with 215 additions and 129 deletions

1
.gitattributes vendored
View File

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

View File

@ -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();
}
}
}
return res ^ 0xff;
}
WRITE_LINE_MEMBER( pasopia_state::testa_w )
WRITE8_MEMBER( pasopia_state::mux_w )
{
printf("A %02x\n",state);
}
WRITE_LINE_MEMBER( pasopia_state::testb_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 */

View File

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

135
src/mess/includes/pasopia.h Normal file
View File

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