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(); + } + } + } + + 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 */ 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("/")