mirror of
https://github.com/holub/mame
synced 2025-10-06 17:08:28 +03:00
(MESS) Added keyboard inputs for Pasopia and Pasopia 7, z80pio irq still doesn't work [Angelo Salese]
This commit is contained in:
parent
ec94908b35
commit
18d55aaad6
1
.gitattributes
vendored
1
.gitattributes
vendored
@ -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/osi.h svneol=native#text/plain
|
||||||
src/mess/includes/p2000t.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/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/pc.h svneol=native#text/plain
|
||||||
src/mess/includes/pc1251.h svneol=native#text/plain
|
src/mess/includes/pc1251.h svneol=native#text/plain
|
||||||
src/mess/includes/pc1350.h svneol=native#text/plain
|
src/mess/includes/pc1350.h svneol=native#text/plain
|
||||||
|
@ -17,6 +17,7 @@
|
|||||||
#include "machine/z80pio.h"
|
#include "machine/z80pio.h"
|
||||||
#include "video/mc6845.h"
|
#include "video/mc6845.h"
|
||||||
#include "machine/keyboard.h"
|
#include "machine/keyboard.h"
|
||||||
|
#include "includes/pasopia.h"
|
||||||
|
|
||||||
class pasopia_state : public driver_device
|
class pasopia_state : public driver_device
|
||||||
{
|
{
|
||||||
@ -55,12 +56,16 @@ public:
|
|||||||
DECLARE_WRITE_LINE_MEMBER(testa_w);
|
DECLARE_WRITE_LINE_MEMBER(testa_w);
|
||||||
DECLARE_WRITE_LINE_MEMBER(testb_w);
|
DECLARE_WRITE_LINE_MEMBER(testb_w);
|
||||||
DECLARE_WRITE8_MEMBER(kbd_put);
|
DECLARE_WRITE8_MEMBER(kbd_put);
|
||||||
|
DECLARE_READ8_MEMBER(mux_r);
|
||||||
|
DECLARE_READ8_MEMBER(keyb_r);
|
||||||
|
DECLARE_WRITE8_MEMBER(mux_w);
|
||||||
|
|
||||||
UINT8 m_hblank;
|
UINT8 m_hblank;
|
||||||
UINT16 m_vram_addr;
|
UINT16 m_vram_addr;
|
||||||
UINT8 m_vram_latch;
|
UINT8 m_vram_latch;
|
||||||
UINT8 m_attr_latch;
|
UINT8 m_attr_latch;
|
||||||
// UINT8 m_gfx_mode;
|
// UINT8 m_gfx_mode;
|
||||||
|
UINT8 m_mux_data;
|
||||||
bool m_video_wl;
|
bool m_video_wl;
|
||||||
bool m_ram_bank;
|
bool m_ram_bank;
|
||||||
UINT8 *m_p_vram;
|
UINT8 *m_p_vram;
|
||||||
@ -125,13 +130,14 @@ static ADDRESS_MAP_START(pasopia_io, AS_IO, 8, pasopia_state)
|
|||||||
// 0x1c - 0x1f something
|
// 0x1c - 0x1f something
|
||||||
AM_RANGE(0x20,0x23) AM_DEVREADWRITE("ppi8255_2", i8255_device, read, write)
|
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(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
|
// 0x38 printer
|
||||||
AM_RANGE(0x3c,0x3c) AM_WRITE(pasopia_ctrl_w)
|
AM_RANGE(0x3c,0x3c) AM_WRITE(pasopia_ctrl_w)
|
||||||
ADDRESS_MAP_END
|
ADDRESS_MAP_END
|
||||||
|
|
||||||
/* Input ports */
|
/* Input ports */
|
||||||
static INPUT_PORTS_START( pasopia )
|
static INPUT_PORTS_START( pasopia )
|
||||||
|
PASOPIA_KEYBOARD
|
||||||
INPUT_PORTS_END
|
INPUT_PORTS_END
|
||||||
|
|
||||||
static MACHINE_START(pasopia)
|
static MACHINE_START(pasopia)
|
||||||
@ -243,37 +249,49 @@ static Z80CTC_INTERFACE( ctc_intf )
|
|||||||
DEVCB_DEVICE_LINE_MEMBER("z80ctc", z80ctc_device, trg3) // ZC/TO2 callback
|
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 m_mux_data;
|
||||||
return 0xff;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
READ8_MEMBER( pasopia_state::testb_r )
|
READ8_MEMBER( pasopia_state::keyb_r )
|
||||||
{
|
{
|
||||||
printf("B R\n");
|
const char *const keynames[3][4] = { { "KEY0", "KEY1", "KEY2", "KEY3" },
|
||||||
return 0xff;
|
{ "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);
|
m_mux_data = data;
|
||||||
}
|
|
||||||
|
|
||||||
WRITE_LINE_MEMBER( pasopia_state::testb_w )
|
|
||||||
{
|
|
||||||
printf("B %02x\n",state);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static Z80PIO_INTERFACE( z80pio_intf )
|
static Z80PIO_INTERFACE( z80pio_intf )
|
||||||
{
|
{
|
||||||
DEVCB_CPU_INPUT_LINE("maincpu", INPUT_LINE_IRQ0), //doesn't work?
|
DEVCB_CPU_INPUT_LINE("maincpu", INPUT_LINE_IRQ0), //doesn't work?
|
||||||
DEVCB_DRIVER_MEMBER(pasopia_state, testa_r), // port A read
|
DEVCB_DRIVER_MEMBER(pasopia_state, mux_r),
|
||||||
DEVCB_NULL, // port A write
|
DEVCB_DRIVER_MEMBER(pasopia_state, mux_w),
|
||||||
DEVCB_DRIVER_LINE_MEMBER(pasopia_state, testa_w), // ready A
|
DEVCB_NULL,
|
||||||
DEVCB_DRIVER_MEMBER(pasopia_state, testb_r), // port B read
|
DEVCB_DRIVER_MEMBER(pasopia_state, keyb_r),
|
||||||
DEVCB_NULL, // port B write
|
DEVCB_NULL,
|
||||||
DEVCB_DRIVER_LINE_MEMBER(pasopia_state, testb_w) // ready B
|
DEVCB_NULL
|
||||||
};
|
};
|
||||||
|
|
||||||
static const mc6845_interface mc6845_intf =
|
static const mc6845_interface mc6845_intf =
|
||||||
@ -313,17 +331,7 @@ static const z80_daisy_config pasopia_daisy[] =
|
|||||||
{ NULL }
|
{ 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)
|
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_I8255A_ADD( "ppi8255_2", ppi8255_intf_2 )
|
||||||
MCFG_Z80CTC_ADD( "z80ctc", XTAL_4MHz, ctc_intf )
|
MCFG_Z80CTC_ADD( "z80ctc", XTAL_4MHz, ctc_intf )
|
||||||
MCFG_Z80PIO_ADD( "z80pio", XTAL_4MHz, z80pio_intf )
|
MCFG_Z80PIO_ADD( "z80pio", XTAL_4MHz, z80pio_intf )
|
||||||
|
|
||||||
// temporary hack
|
|
||||||
MCFG_ASCII_KEYBOARD_ADD(KEYBOARD_TAG, keyboard_intf)
|
|
||||||
MACHINE_CONFIG_END
|
MACHINE_CONFIG_END
|
||||||
|
|
||||||
/* ROM definition */
|
/* ROM definition */
|
||||||
|
@ -23,6 +23,7 @@
|
|||||||
#include "sound/sn76496.h"
|
#include "sound/sn76496.h"
|
||||||
#include "video/mc6845.h"
|
#include "video/mc6845.h"
|
||||||
#include "rendlay.h"
|
#include "rendlay.h"
|
||||||
|
#include "includes/pasopia.h"
|
||||||
|
|
||||||
class pasopia7_state : public driver_device
|
class pasopia7_state : public driver_device
|
||||||
{
|
{
|
||||||
@ -63,9 +64,9 @@ public:
|
|||||||
DECLARE_WRITE8_MEMBER(pasopia7_fdc_w);
|
DECLARE_WRITE8_MEMBER(pasopia7_fdc_w);
|
||||||
DECLARE_READ8_MEMBER(pasopia7_io_r);
|
DECLARE_READ8_MEMBER(pasopia7_io_r);
|
||||||
DECLARE_WRITE8_MEMBER(pasopia7_io_w);
|
DECLARE_WRITE8_MEMBER(pasopia7_io_w);
|
||||||
DECLARE_READ8_MEMBER(test_r);
|
DECLARE_READ8_MEMBER(mux_r);
|
||||||
DECLARE_WRITE_LINE_MEMBER(testa_w);
|
DECLARE_READ8_MEMBER(keyb_r);
|
||||||
DECLARE_WRITE_LINE_MEMBER(testb_w);
|
DECLARE_WRITE8_MEMBER(mux_w);
|
||||||
DECLARE_READ8_MEMBER(crtc_portb_r);
|
DECLARE_READ8_MEMBER(crtc_portb_r);
|
||||||
DECLARE_WRITE8_MEMBER(screen_mode_w);
|
DECLARE_WRITE8_MEMBER(screen_mode_w);
|
||||||
DECLARE_WRITE8_MEMBER(plane_reg_w);
|
DECLARE_WRITE8_MEMBER(plane_reg_w);
|
||||||
@ -101,6 +102,7 @@ public:
|
|||||||
UINT8 m_screen_type;
|
UINT8 m_screen_type;
|
||||||
int m_addr_latch;
|
int m_addr_latch;
|
||||||
void pasopia_nmi_trap();
|
void pasopia_nmi_trap();
|
||||||
|
UINT8 m_mux_data;
|
||||||
DECLARE_DRIVER_INIT(p7_lcd);
|
DECLARE_DRIVER_INIT(p7_lcd);
|
||||||
DECLARE_DRIVER_INIT(p7_raster);
|
DECLARE_DRIVER_INIT(p7_raster);
|
||||||
};
|
};
|
||||||
@ -128,76 +130,6 @@ static VIDEO_START( pasopia7 )
|
|||||||
ram_space->write_byte(0xfce1,_charset_); \
|
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)
|
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);
|
bitmap.fill(screen.machine().pens[0], cliprect);
|
||||||
|
|
||||||
fake_keyboard_data(screen.machine());
|
|
||||||
|
|
||||||
width = state->m_x_width ? 80 : 40;
|
width = state->m_x_width ? 80 : 40;
|
||||||
|
|
||||||
if(state->m_gfx_mode)
|
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
|
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)
|
if(io_port >= 0x08 && io_port <= 0x0b)
|
||||||
return m_ppi0->read(space, io_port & 3);
|
return m_ppi0->read(space, io_port & 3);
|
||||||
else
|
else
|
||||||
@ -679,7 +606,7 @@ READ8_MEMBER( pasopia7_state::pasopia7_io_r )
|
|||||||
return m_ctc->read(space,io_port & 3);
|
return m_ctc->read(space,io_port & 3);
|
||||||
else
|
else
|
||||||
if(io_port >= 0x30 && io_port <= 0x33)
|
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 == 0x3a) { SN1 }
|
||||||
// else if(io_port == 0x3b) { SN2 }
|
// else if(io_port == 0x3b) { SN2 }
|
||||||
// else if(io_port == 0x3c) { bankswitch }
|
// 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
|
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)
|
if(io_port >= 0x08 && io_port <= 0x0b)
|
||||||
m_ppi0->write(space, io_port & 3, data);
|
m_ppi0->write(space, io_port & 3, data);
|
||||||
else
|
else
|
||||||
@ -733,7 +657,7 @@ WRITE8_MEMBER( pasopia7_state::pasopia7_io_w )
|
|||||||
m_ctc->write(space, io_port & 3, data);
|
m_ctc->write(space, io_port & 3, data);
|
||||||
else
|
else
|
||||||
if(io_port >= 0x30 && io_port <= 0x33)
|
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
|
else
|
||||||
if(io_port == 0x3a)
|
if(io_port == 0x3a)
|
||||||
m_sn1->write(space, 0, data);
|
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 )
|
AM_RANGE( 0x0000, 0xffff) AM_READWRITE( pasopia7_io_r, pasopia7_io_w )
|
||||||
ADDRESS_MAP_END
|
ADDRESS_MAP_END
|
||||||
|
|
||||||
/* Input ports */
|
/* TODO: where are SPACE and RETURN keys? */
|
||||||
static INPUT_PORTS_START( pasopia7 )
|
static INPUT_PORTS_START( pasopia7 )
|
||||||
|
PASOPIA_KEYBOARD
|
||||||
INPUT_PORTS_END
|
INPUT_PORTS_END
|
||||||
|
|
||||||
static const gfx_layout p7_chars_8x8 =
|
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
|
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 )
|
static Z80PIO_INTERFACE( z80pio_intf )
|
||||||
{
|
{
|
||||||
DEVCB_CPU_INPUT_LINE("maincpu", INPUT_LINE_IRQ0), //doesn't work?
|
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_NULL,
|
||||||
DEVCB_DRIVER_LINE_MEMBER(pasopia7_state, testa_w),
|
DEVCB_DRIVER_MEMBER(pasopia7_state, keyb_r),
|
||||||
DEVCB_DRIVER_MEMBER(pasopia7_state, test_r),
|
|
||||||
DEVCB_NULL,
|
DEVCB_NULL,
|
||||||
DEVCB_DRIVER_LINE_MEMBER(pasopia7_state, testb_w)
|
DEVCB_NULL
|
||||||
};
|
};
|
||||||
|
|
||||||
static const z80_daisy_config p7_daisy[] =
|
static const z80_daisy_config p7_daisy[] =
|
||||||
|
135
src/mess/includes/pasopia.h
Normal file
135
src/mess/includes/pasopia.h
Normal 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("/")
|
Loading…
Reference in New Issue
Block a user