model1io: Various updates

- Map the 3 dip switches, remove bogus IN3, IN4 and IN5 callbacks
- Set swa to use epr14869b
- Clock for 315_5338A
- Add missing save state variable
- Update comments
- Document vcop dip switch settings
This commit is contained in:
Dirk Best 2018-05-20 19:46:01 +02:00
parent 53b791f756
commit c0dff0ebcb
4 changed files with 119 additions and 93 deletions

View File

@ -968,6 +968,38 @@ void model1_state::model1_comm_mem(address_map &map)
map(0xb01002, 0xb01002).rw(m_m1comm, FUNC(m1comm_device::fg_r), FUNC(m1comm_device::fg_w));
}
static INPUT_PORTS_START( ioboard_dipswitches )
PORT_START("ioboard:dsw1")
PORT_DIPUNUSED_DIPLOC(0x01, 0x01, "DSW1:1")
PORT_DIPUNUSED_DIPLOC(0x02, 0x02, "DSW1:2")
PORT_DIPUNUSED_DIPLOC(0x04, 0x04, "DSW1:3")
PORT_DIPUNUSED_DIPLOC(0x08, 0x08, "DSW1:4")
PORT_DIPUNUSED_DIPLOC(0x10, 0x10, "DSW1:5")
PORT_DIPUNUSED_DIPLOC(0x20, 0x20, "DSW1:6")
PORT_DIPUNUSED_DIPLOC(0x40, 0x40, "DSW1:7")
PORT_DIPUNUSED_DIPLOC(0x80, 0x80, "DSW1:8")
PORT_START("ioboard:dsw2")
PORT_DIPUNUSED_DIPLOC(0x01, 0x01, "DSW2:1")
PORT_DIPUNUSED_DIPLOC(0x02, 0x02, "DSW2:2")
PORT_DIPUNUSED_DIPLOC(0x04, 0x04, "DSW2:3")
PORT_DIPUNUSED_DIPLOC(0x08, 0x08, "DSW2:4")
PORT_DIPUNUSED_DIPLOC(0x10, 0x10, "DSW2:5")
PORT_DIPUNUSED_DIPLOC(0x20, 0x20, "DSW2:6")
PORT_DIPUNUSED_DIPLOC(0x40, 0x40, "DSW2:7")
PORT_DIPUNUSED_DIPLOC(0x80, 0x80, "DSW2:8")
PORT_START("ioboard:dsw3")
PORT_DIPUNUSED_DIPLOC(0x01, 0x01, "DSW3:1")
PORT_DIPUNUSED_DIPLOC(0x02, 0x02, "DSW3:2")
PORT_DIPUNUSED_DIPLOC(0x04, 0x04, "DSW3:3")
PORT_DIPUNUSED_DIPLOC(0x08, 0x08, "DSW3:4")
PORT_DIPUNUSED_DIPLOC(0x10, 0x10, "DSW3:5")
PORT_DIPUNUSED_DIPLOC(0x20, 0x20, "DSW3:6")
PORT_DIPUNUSED_DIPLOC(0x40, 0x40, "DSW3:7")
PORT_DIPUNUSED_DIPLOC(0x80, 0x80, "DSW3:8")
INPUT_PORTS_END
static INPUT_PORTS_START( vf )
PORT_START("IN.0")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 )
@ -998,6 +1030,8 @@ static INPUT_PORTS_START( vf )
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(2) PORT_8WAY
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(2) PORT_8WAY
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(2) PORT_8WAY
PORT_INCLUDE(ioboard_dipswitches)
INPUT_PORTS_END
static INPUT_PORTS_START( vr )
@ -1033,6 +1067,7 @@ static INPUT_PORTS_START( vr )
PORT_START("BRAKE")
PORT_BIT( 0xff, 0x30, IPT_PEDAL2 ) PORT_MINMAX(1,0xff) PORT_SENSITIVITY(100) PORT_KEYDELTA(16)
PORT_INCLUDE(ioboard_dipswitches)
INPUT_PORTS_END
static INPUT_PORTS_START( swa )
@ -1070,6 +1105,8 @@ static INPUT_PORTS_START( swa )
PORT_START("STICK2Y")
PORT_BIT( 0xff, 0x7f, IPT_AD_STICK_Y ) PORT_MINMAX(27,227) PORT_SENSITIVITY(100) PORT_KEYDELTA(4) PORT_PLAYER(2)
PORT_INCLUDE(ioboard_dipswitches)
INPUT_PORTS_END
static INPUT_PORTS_START( wingwar )
@ -1102,35 +1139,7 @@ static INPUT_PORTS_START( wingwar )
PORT_START("THROTTLE")
PORT_BIT( 0xff, 0x01, IPT_PEDAL ) PORT_MINMAX(1,0xff) PORT_SENSITIVITY(100) PORT_KEYDELTA(16)
PORT_START("ioboard:dsw1")
PORT_DIPUNKNOWN_DIPLOC(0x01, 0x01, "DSW1:1")
PORT_DIPUNKNOWN_DIPLOC(0x02, 0x02, "DSW1:2")
PORT_DIPUNKNOWN_DIPLOC(0x04, 0x04, "DSW1:3")
PORT_DIPUNKNOWN_DIPLOC(0x08, 0x08, "DSW1:4")
PORT_DIPUNKNOWN_DIPLOC(0x10, 0x10, "DSW1:5")
PORT_DIPUNKNOWN_DIPLOC(0x20, 0x20, "DSW1:6")
PORT_DIPUNKNOWN_DIPLOC(0x40, 0x40, "DSW1:7")
PORT_DIPUNKNOWN_DIPLOC(0x80, 0x80, "DSW1:8")
PORT_START("ioboard:dsw2")
PORT_DIPUNKNOWN_DIPLOC(0x01, 0x01, "DSW2:1")
PORT_DIPUNKNOWN_DIPLOC(0x02, 0x02, "DSW2:2")
PORT_DIPUNKNOWN_DIPLOC(0x04, 0x04, "DSW2:3")
PORT_DIPUNKNOWN_DIPLOC(0x08, 0x08, "DSW2:4")
PORT_DIPUNKNOWN_DIPLOC(0x10, 0x10, "DSW2:5")
PORT_DIPUNKNOWN_DIPLOC(0x20, 0x20, "DSW2:6")
PORT_DIPUNKNOWN_DIPLOC(0x40, 0x40, "DSW2:7")
PORT_DIPUNKNOWN_DIPLOC(0x80, 0x80, "DSW2:8")
PORT_START("ioboard:dsw3")
PORT_DIPUNKNOWN_DIPLOC(0x01, 0x01, "DSW3:1")
PORT_DIPUNKNOWN_DIPLOC(0x02, 0x02, "DSW3:2")
PORT_DIPUNKNOWN_DIPLOC(0x04, 0x04, "DSW3:3")
PORT_DIPUNKNOWN_DIPLOC(0x08, 0x08, "DSW3:4")
PORT_DIPUNKNOWN_DIPLOC(0x10, 0x10, "DSW3:5")
PORT_DIPUNKNOWN_DIPLOC(0x20, 0x20, "DSW3:6")
PORT_DIPUNKNOWN_DIPLOC(0x40, 0x40, "DSW3:7")
PORT_DIPUNKNOWN_DIPLOC(0x80, 0x80, "DSW3:8")
PORT_INCLUDE(ioboard_dipswitches)
INPUT_PORTS_END
static INPUT_PORTS_START( wingwar360 )
@ -1170,35 +1179,7 @@ static INPUT_PORTS_START( netmerc )
PORT_START("STICKY")
PORT_BIT( 0xff, 0x7f, IPT_AD_STICK_Y ) PORT_SENSITIVITY(100) PORT_KEYDELTA(4) PORT_REVERSE
PORT_START("ioboard:dsw1")
PORT_DIPUNKNOWN_DIPLOC(0x01, 0x01, "DSW1:1")
PORT_DIPUNKNOWN_DIPLOC(0x02, 0x02, "DSW1:2")
PORT_DIPUNKNOWN_DIPLOC(0x04, 0x04, "DSW1:3")
PORT_DIPUNKNOWN_DIPLOC(0x08, 0x08, "DSW1:4")
PORT_DIPUNKNOWN_DIPLOC(0x10, 0x10, "DSW1:5")
PORT_DIPUNKNOWN_DIPLOC(0x20, 0x20, "DSW1:6")
PORT_DIPUNKNOWN_DIPLOC(0x40, 0x40, "DSW1:7")
PORT_DIPUNKNOWN_DIPLOC(0x80, 0x80, "DSW1:8")
PORT_START("ioboard:dsw2")
PORT_DIPUNKNOWN_DIPLOC(0x01, 0x01, "DSW2:1")
PORT_DIPUNKNOWN_DIPLOC(0x02, 0x02, "DSW2:2")
PORT_DIPUNKNOWN_DIPLOC(0x04, 0x04, "DSW2:3")
PORT_DIPUNKNOWN_DIPLOC(0x08, 0x08, "DSW2:4")
PORT_DIPUNKNOWN_DIPLOC(0x10, 0x10, "DSW2:5")
PORT_DIPUNKNOWN_DIPLOC(0x20, 0x20, "DSW2:6")
PORT_DIPUNKNOWN_DIPLOC(0x40, 0x40, "DSW2:7")
PORT_DIPUNKNOWN_DIPLOC(0x80, 0x80, "DSW2:8")
PORT_START("ioboard:dsw3")
PORT_DIPUNKNOWN_DIPLOC(0x01, 0x01, "DSW3:1")
PORT_DIPUNKNOWN_DIPLOC(0x02, 0x02, "DSW3:2")
PORT_DIPUNKNOWN_DIPLOC(0x04, 0x04, "DSW3:3")
PORT_DIPUNKNOWN_DIPLOC(0x08, 0x08, "DSW3:4")
PORT_DIPUNKNOWN_DIPLOC(0x10, 0x10, "DSW3:5")
PORT_DIPUNKNOWN_DIPLOC(0x20, 0x20, "DSW3:6")
PORT_DIPUNKNOWN_DIPLOC(0x40, 0x40, "DSW3:7")
PORT_DIPUNKNOWN_DIPLOC(0x80, 0x80, "DSW3:8")
PORT_INCLUDE(ioboard_dipswitches)
INPUT_PORTS_END
@ -1785,6 +1766,7 @@ MACHINE_CONFIG_START(model1_state::swa)
model1_hle(config);
MCFG_DEVICE_MODIFY("ioboard")
MCFG_DEVICE_BIOS("epr14869b");
MCFG_MODEL1IO_AN0_CB(IOPORT("STICK1X"))
MCFG_MODEL1IO_AN1_CB(IOPORT("STICK1Y"))
MCFG_MODEL1IO_AN2_CB(IOPORT("THROTTLE"))

View File

@ -1689,6 +1689,38 @@ static INPUT_PORTS_START( model2 )
PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT) PORT_PLAYER(2)
INPUT_PORTS_END
static INPUT_PORTS_START( ioboard_dipswitches )
PORT_START("ioboard:dsw1")
PORT_DIPUNUSED_DIPLOC(0x01, 0x01, "DSW1:1")
PORT_DIPUNUSED_DIPLOC(0x02, 0x02, "DSW1:2")
PORT_DIPUNUSED_DIPLOC(0x04, 0x04, "DSW1:3")
PORT_DIPUNUSED_DIPLOC(0x08, 0x08, "DSW1:4")
PORT_DIPUNUSED_DIPLOC(0x10, 0x10, "DSW1:5")
PORT_DIPUNUSED_DIPLOC(0x20, 0x20, "DSW1:6")
PORT_DIPUNUSED_DIPLOC(0x40, 0x40, "DSW1:7")
PORT_DIPUNUSED_DIPLOC(0x80, 0x80, "DSW1:8")
PORT_START("ioboard:dsw2")
PORT_DIPUNUSED_DIPLOC(0x01, 0x01, "DSW2:1")
PORT_DIPUNUSED_DIPLOC(0x02, 0x02, "DSW2:2")
PORT_DIPUNUSED_DIPLOC(0x04, 0x04, "DSW2:3")
PORT_DIPUNUSED_DIPLOC(0x08, 0x08, "DSW2:4")
PORT_DIPUNUSED_DIPLOC(0x10, 0x10, "DSW2:5")
PORT_DIPUNUSED_DIPLOC(0x20, 0x20, "DSW2:6")
PORT_DIPUNUSED_DIPLOC(0x40, 0x40, "DSW2:7")
PORT_DIPUNUSED_DIPLOC(0x80, 0x80, "DSW2:8")
PORT_START("ioboard:dsw3")
PORT_DIPUNUSED_DIPLOC(0x01, 0x01, "DSW3:1")
PORT_DIPUNUSED_DIPLOC(0x02, 0x02, "DSW3:2")
PORT_DIPUNUSED_DIPLOC(0x04, 0x04, "DSW3:3")
PORT_DIPUNUSED_DIPLOC(0x08, 0x08, "DSW3:4")
PORT_DIPUNUSED_DIPLOC(0x10, 0x10, "DSW3:5")
PORT_DIPUNUSED_DIPLOC(0x20, 0x20, "DSW3:6")
PORT_DIPUNUSED_DIPLOC(0x40, 0x40, "DSW3:7")
PORT_DIPUNUSED_DIPLOC(0x80, 0x80, "DSW3:8")
INPUT_PORTS_END
static INPUT_PORTS_START( gears )
PORT_START("GEARS") // fake to handle gear bits
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_BUTTON1) PORT_NAME("GEAR N")
@ -1724,6 +1756,8 @@ static INPUT_PORTS_START( daytona )
PORT_START("BRAKE")
PORT_BIT(0xff, 0x00, IPT_PEDAL2) PORT_SENSITIVITY(30) PORT_KEYDELTA(10)
PORT_INCLUDE(ioboard_dipswitches)
INPUT_PORTS_END
static INPUT_PORTS_START( desert )
@ -1752,6 +1786,8 @@ static INPUT_PORTS_START( desert )
PORT_START("BRAKE")
PORT_BIT(0xff, 0x00, IPT_AD_STICK_Y) PORT_SENSITIVITY(60) PORT_KEYDELTA(20)
PORT_INCLUDE(ioboard_dipswitches)
INPUT_PORTS_END
static INPUT_PORTS_START( vcop )
@ -1764,7 +1800,7 @@ static INPUT_PORTS_START( vcop )
PORT_MODIFY("IN2")
PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_UNUSED)
PORT_DIPNAME(0x02, 0x02, "No enemies") PORT_DIPLOCATION("DEBUG:1")
PORT_DIPNAME(0x02, 0x02, "No Enemies") // I/O board connector CN5
PORT_DIPSETTING( 0x02, DEF_STR( Off ))
PORT_DIPSETTING( 0x00, DEF_STR( On ))
PORT_BIT(0xfc, IP_ACTIVE_LOW, IPT_UNUSED)
@ -1780,6 +1816,16 @@ static INPUT_PORTS_START( vcop )
PORT_START("P2_Y")
PORT_BIT(0x3ff, 0x0e8, IPT_LIGHTGUN_Y) PORT_CROSSHAIR(Y, 1.0, 0.0, 0) PORT_MINMAX(0x027, 0x1a9) PORT_SENSITIVITY(50) PORT_KEYDELTA(10) PORT_PLAYER(2)
PORT_INCLUDE(ioboard_dipswitches)
PORT_MODIFY("ioboard:dsw1")
PORT_DIPNAME(0x80, 0x80, "Reloading") PORT_DIPLOCATION("DSW1:8")
PORT_DIPSETTING( 0x80, "Normal")
PORT_DIPSETTING( 0x00, "Auto Reload")
PORT_DIPNAME(0x40, 0x40, "Enemy Character") PORT_DIPLOCATION("DSW1:7")
PORT_DIPSETTING( 0x40, "Normal")
PORT_DIPSETTING( 0x00, "Robot")
INPUT_PORTS_END
INPUT_PORTS_START( vf2 )

View File

@ -2,7 +2,7 @@
// copyright-holders: Dirk Best
/***************************************************************************
Sega Model 1/2 I/O Board
Sega Model 1 I/O Board
I/O PCB
@ -85,17 +85,17 @@ void model1io_device::mem_map(address_map &map)
// input_ports - device-specific input ports
//-------------------------------------------------
static INPUT_PORTS_START( model1io )
static INPUT_PORTS_START( ioboard_buttons )
PORT_START("buttons")
PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("Board 0")
PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("Board 1")
PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("Board 2")
PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("Board 3")
PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("Board 0 (SW4)")
PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("Board 1 (SW5)")
PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("Board 2 (SW6)")
PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("Board 3 (SW7)")
INPUT_PORTS_END
ioport_constructor model1io_device::device_input_ports() const
{
return INPUT_PORTS_NAME(model1io);
return INPUT_PORTS_NAME(ioboard_buttons);
}
//-------------------------------------------------
@ -110,7 +110,7 @@ ROM_START( model1io )
ROM_SYSTEM_BIOS(0, "epr14869", "EPR-14869")
ROMX_LOAD("epr-14869.25", 0x0000, 0x10000, CRC(6187cd7a) SHA1(b65fdd0ad31794a565a0ca4dc67a3f16b329fd71), ROM_BIOS(1))
// Virtua Fighter (837-8936)
// Virtua Fighter (837-8936), Star Wars Arcade
ROM_SYSTEM_BIOS(1, "epr14869b", "EPR-14869B")
ROMX_LOAD("epr-14869b.25", 0x0000, 0x10000, CRC(2d093304) SHA1(af0fe245eb9fa3c3c60e4b685f1e779f83d894f9), ROM_BIOS(2))
@ -134,7 +134,7 @@ MACHINE_CONFIG_START( model1io_device::device_add_mconfig )
MCFG_EEPROM_SERIAL_93C46_ADD("eeprom") // 93C45
MCFG_DEVICE_ADD("io", SEGA_315_5338A, 0)
MCFG_DEVICE_ADD("io", SEGA_315_5338A, 32_MHz_XTAL)
MCFG_315_5338A_READ_CB(READ8(*this, model1io_device, io_r))
MCFG_315_5338A_WRITE_CB(WRITE8(*this, model1io_device, io_w))
MCFG_315_5338A_OUT_PA_CB(WRITE8(*this, model1io_device, io_pa_w))
@ -159,15 +159,16 @@ MACHINE_CONFIG_END
//**************************************************************************
//-------------------------------------------------
// m1io_device - constructor
// model1io_device - constructor
//-------------------------------------------------
model1io_device::model1io_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) :
device_t(mconfig, SEGA_MODEL1IO, tag, owner, clock),
m_eeprom(*this, "eeprom"),
m_buttons(*this, "buttons"),
m_dsw(*this, "dsw%u", 1U),
m_read_cb(*this), m_write_cb(*this),
m_in_cb{ {*this}, {*this}, {*this}, {*this}, {*this}, {*this} },
m_in_cb{ {*this}, {*this}, {*this} },
m_drive_read_cb(*this), m_drive_write_cb(*this),
m_an_cb{ {*this}, {*this}, {*this}, {*this}, {*this}, {*this}, {*this}, {*this} },
m_output_cb(*this),
@ -185,7 +186,7 @@ void model1io_device::device_start()
m_read_cb.resolve_safe(0xff);
m_write_cb.resolve_safe();
for (unsigned i = 0; i < 6; i++)
for (unsigned i = 0; i < 3; i++)
m_in_cb[i].resolve_safe(0xff);
m_drive_read_cb.resolve_safe(0xff);
@ -195,6 +196,9 @@ void model1io_device::device_start()
m_an_cb[i].resolve_safe(0xff);
m_output_cb.resolve_safe();
// register for save states
save_item(NAME(m_secondary_controls));
}
@ -217,10 +221,10 @@ WRITE8_MEMBER( model1io_device::io_pa_w )
// 7------- eeprom clk
// -6------ eeprom cs
// --5----- eeprom di
// ---4---- eeprom related (0 on reads, 1 on writes)
// ----32-- unknown (not used?)
// ------1- led? set to 1 in startup, after eeprom written to ram
// -------0 control panel switch (0 = first, 1 = second)
// ---4---- eeprom pe
// ----32-- not used
// ------1- led2
// -------0 control switch (0 = first, 1 = second)
m_eeprom->clk_write(BIT(data, 7) ? ASSERT_LINE : CLEAR_LINE);
m_eeprom->di_write(BIT(data, 5));
@ -231,17 +235,17 @@ WRITE8_MEMBER( model1io_device::io_pa_w )
READ8_MEMBER( model1io_device::io_pb_r )
{
return m_secondary_controls ? m_in_cb[3](0) : m_in_cb[0](0);
return m_secondary_controls ? m_dsw[0]->read() : m_in_cb[0](0);
}
READ8_MEMBER( model1io_device::io_pc_r )
{
return m_secondary_controls ? m_in_cb[4](0) : m_in_cb[1](0);
return m_secondary_controls ? m_dsw[1]->read() : m_in_cb[1](0);
}
READ8_MEMBER( model1io_device::io_pd_r )
{
return m_secondary_controls ? m_in_cb[5](0) : m_in_cb[2](0);
return m_secondary_controls ? m_dsw[2]->read() : m_in_cb[2](0);
}
READ8_MEMBER( model1io_device::io_pe_r )
@ -262,11 +266,12 @@ WRITE8_MEMBER( model1io_device::io_pf_w )
READ8_MEMBER( model1io_device::io_pg_r )
{
// 7------- eeprom do
// -654---- unknown
// ----3--- button board 3
// -----2-- button board 2
// ------1- button board 1
// -------0 button board 0
// -6------ eeprom nc
// --54---- not used
// ----3--- button board 3 (sw7)
// -----2-- button board 2 (sw6)
// ------1- button board 1 (sw5)
// -------0 button board 0 (sw4)
uint8_t data = 0;
@ -277,6 +282,7 @@ READ8_MEMBER( model1io_device::io_pg_r )
return data;
}
// analog port switching is handled by two 74hc4066 analog switches
ioport_value model1io_device::analog0_r()
{
return m_secondary_controls ? m_an_cb[4](0) : m_an_cb[0](0);

View File

@ -37,15 +37,6 @@
#define MCFG_MODEL1IO_IN2_CB(_devcb) \
devcb = &downcast<model1io_device &>(*device).set_in_callback(DEVCB_##_devcb, 2);
#define MCFG_MODEL1IO_IN3_CB(_devcb) \
devcb = &downcast<model1io_device &>(*device).set_in_callback(DEVCB_##_devcb, 3);
#define MCFG_MODEL1IO_IN4_CB(_devcb) \
devcb = &downcast<model1io_device &>(*device).set_in_callback(DEVCB_##_devcb, 4);
#define MCFG_MODEL1IO_IN5_CB(_devcb) \
devcb = &downcast<model1io_device &>(*device).set_in_callback(DEVCB_##_devcb, 5);
#define MCFG_MODEL1IO_DRIVE_READ_CB(_devcb) \
devcb = &downcast<model1io_device &>(*device).set_drive_read_callback(DEVCB_##_devcb);
@ -124,6 +115,7 @@ protected:
private:
required_device<eeprom_serial_93cxx_device> m_eeprom;
required_ioport m_buttons;
required_ioport_array<3> m_dsw;
DECLARE_READ8_MEMBER(io_r);
DECLARE_WRITE8_MEMBER(io_w);
@ -144,7 +136,7 @@ private:
devcb_read8 m_read_cb;
devcb_write8 m_write_cb;
devcb_read8 m_in_cb[6];
devcb_read8 m_in_cb[3];
devcb_read8 m_drive_read_cb;
devcb_write8 m_drive_write_cb;
devcb_read8 m_an_cb[8];