summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/drivers/taito_b.cpp
diff options
context:
space:
mode:
author Vas Crabb <vas@vastheman.com>2018-07-07 02:40:29 +1000
committer Vas Crabb <vas@vastheman.com>2018-07-07 02:40:29 +1000
commitc3fb11c2c98a5c28ece6a27093a0f9def350ac64 (patch)
treec68b38f05ed1d32358add721fda7f45e8803479f /src/mame/drivers/taito_b.cpp
parent5d9e33b786d7ef452317439359f3cbd8cc920513 (diff)
devcb3
There are multiple issues with the current device callbacks: * They always dispatch through a pointer-to-member * Chained callbacks are a linked list so the branch unit can't predict the early * There's a runtime decision made on the left/right shift direction * There are runtime NULL checks on various objects * Binding a lambda isn't practical * Arbitrary transformations are not supported * When chaining callbacks it isn't clear what the MCFG_DEVCB_ modifiers apply to * It isn't possible to just append to a callback in derived configuration * The macros need a magic, hidden local called devcb * Moving code that uses the magic locals around is error-prone * Writing the MCFG_ macros to make a device usable is a pain * You can't discover applicable MCFG_ macros with intellisense * Macros are not scoped * Using an inappropriate macro isn't detected at compile time * Lots of other things This changeset overcomes the biggest obstacle to remving MCFG_ macros altogether. Essentially, to allow a devcb to be configured, call .bind() and expose the result (a bind target for the callback). Bind target methods starting with "set" repace the current callbacks; methods starting with "append" append to them. You can't reconfigure a callback after resolving it. There's no need to use a macro matching the handler signatures - use FUNC for everything. Current device is implied if no tag/finder is supplied (no need for explicit this). Lambdas are supported, and the memory space and offset are optional. These kinds of things work: * .read_cb().set([this] () { return something; }); * .read_cb().set([this] (offs_t offset) { return ~offset; }); * .write_cb().set([this] (offs_t offset, u8 data) { m_array[offset] = data; }); * .write_cb().set([this] (int state) { some_var = state; }); Arbitrary transforms are allowed, and they can modify offset/mask for example: * .read_cb().set(FUNC(my_state::handler)).transform([] (u8 data) { return bitswap<4>(data, 1, 3, 0, 2); }); * .read_cb().set(m_dev, FUNC(some_device::member)).transform([] (offs_t &offset, u8 data) { offset ^= 3; return data; }); It's possible to stack arbitrary transforms, at the cost of compile time (the whole transform stack gets inlined at compile time). Shifts count as an arbitrary transform, but mask/exor does not. Order of mask/shift/exor now matters. Modifications are applied in the specified order. These are NOT EQUIVALENT: * .read_cb().set(FUNC(my_state::handler)).mask(0x06).lshift(2); * .read_cb().set(FUNC(my_state::handler)).lshift(2).mask(0x06); The bit helper no longer reverses its behaviour for read callbacks, and I/O ports are no longer aware of the field mask. Binding a read callback to no-op is not supported - specify a constant. The GND and VCC aliases have been removed intentionally - they're TTL-centric, and were already being abused. Other quirks have been preserved, including write logger only logging when the data is non-zero (quite unhelpful in many of the cases where it's used). Legacy syntax is still supported for simple cases, but will be phased out. New devices should not have MCFG_ macros. I don't think I've missed any fundamental issues, but if I've broken something, let me know.
Diffstat (limited to 'src/mame/drivers/taito_b.cpp')
-rw-r--r--src/mame/drivers/taito_b.cpp302
1 files changed, 151 insertions, 151 deletions
diff --git a/src/mame/drivers/taito_b.cpp b/src/mame/drivers/taito_b.cpp
index 54e5cfe0af4..d6a56729cac 100644
--- a/src/mame/drivers/taito_b.cpp
+++ b/src/mame/drivers/taito_b.cpp
@@ -239,7 +239,7 @@ WRITE16_MEMBER(taitob_state::gain_control_w)
}
}
-INPUT_CHANGED_MEMBER(taitob_state::realpunc_sensor)
+INPUT_CHANGED_MEMBER(taitob_c_state::realpunc_sensor)
{
m_maincpu->set_input_line(4, HOLD_LINE);
}
@@ -319,7 +319,7 @@ WRITE16_MEMBER(taitob_state::spacedxo_tc0220ioc_w)
}
}
-WRITE16_MEMBER(taitob_state::realpunc_output_w)
+WRITE16_MEMBER(taitob_c_state::realpunc_output_w)
{
/*
15 = Camera Enable?
@@ -561,19 +561,19 @@ void taitob_state::sbm_map(address_map &map)
map(0x900000, 0x97ffff).m(m_tc0180vcu, FUNC(tc0180vcu_device::tc0180vcu_memrw));
}
-void taitob_state::realpunc_map(address_map &map)
+void taitob_c_state::realpunc_map(address_map &map)
{
map(0x000000, 0x0fffff).rom();
map(0x100000, 0x10ffff).ram();
map(0x110000, 0x12ffff).ram();
map(0x130000, 0x13ffff).ram(); // Check me
map(0x180000, 0x18000f).rw(m_tc0510nio, FUNC(tc0510nio_device::halfword_wordswap_r), FUNC(tc0510nio_device::halfword_wordswap_w));
- map(0x184000, 0x184001).w(FUNC(taitob_state::realpunc_video_ctrl_w));
+ map(0x184000, 0x184001).w(FUNC(taitob_c_state::realpunc_video_ctrl_w));
map(0x188000, 0x188001).nopr();
map(0x188000, 0x188000).w("tc0140syt", FUNC(tc0140syt_device::master_port_w));
map(0x188002, 0x188003).nopr();
map(0x188002, 0x188002).w("tc0140syt", FUNC(tc0140syt_device::master_comm_w));
- map(0x18c000, 0x18c001).w(FUNC(taitob_state::realpunc_output_w));
+ map(0x18c000, 0x18c001).w(FUNC(taitob_c_state::realpunc_output_w));
map(0x200000, 0x27ffff).m(m_tc0180vcu, FUNC(tc0180vcu_device::tc0180vcu_memrw));
map(0x280000, 0x281fff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette");
map(0x300000, 0x300001).rw("hd63484", FUNC(hd63484_device::status16_r), FUNC(hd63484_device::address16_w));
@@ -583,7 +583,7 @@ void taitob_state::realpunc_map(address_map &map)
map(0x320002, 0x320002).w("tc0140syt", FUNC(tc0140syt_device::master_comm_w));
}
-void taitob_state::realpunc_hd63484_map(address_map &map)
+void taitob_c_state::realpunc_hd63484_map(address_map &map)
{
map(0x00000, 0x7ffff).ram();
}
@@ -1701,9 +1701,9 @@ static INPUT_PORTS_START( realpunc )
PORT_BIT( 0x02, IP_ACTIVE_LOW,IPT_UNKNOWN )
PORT_BIT( 0x04, IP_ACTIVE_LOW,IPT_UNKNOWN )
PORT_BIT( 0x08, IP_ACTIVE_LOW,IPT_UNKNOWN )
- PORT_BIT( 0x10, IP_ACTIVE_LOW,IPT_BUTTON2 ) PORT_NAME("Pad Photosensor 1 (N)") PORT_CHANGED_MEMBER(DEVICE_SELF, taitob_state,realpunc_sensor, 0)
- PORT_BIT( 0x20, IP_ACTIVE_LOW,IPT_BUTTON3 ) PORT_NAME("Pad Photosensor 2 (U)") PORT_CHANGED_MEMBER(DEVICE_SELF, taitob_state,realpunc_sensor, 0)
- PORT_BIT( 0x40, IP_ACTIVE_LOW,IPT_BUTTON4 ) PORT_NAME("Pad Photosensor 3 (D)") PORT_CHANGED_MEMBER(DEVICE_SELF, taitob_state,realpunc_sensor, 0)
+ PORT_BIT( 0x10, IP_ACTIVE_LOW,IPT_BUTTON2 ) PORT_NAME("Pad Photosensor 1 (N)") PORT_CHANGED_MEMBER(DEVICE_SELF, taitob_c_state,realpunc_sensor, 0)
+ PORT_BIT( 0x20, IP_ACTIVE_LOW,IPT_BUTTON3 ) PORT_NAME("Pad Photosensor 2 (U)") PORT_CHANGED_MEMBER(DEVICE_SELF, taitob_c_state,realpunc_sensor, 0)
+ PORT_BIT( 0x40, IP_ACTIVE_LOW,IPT_BUTTON4 ) PORT_NAME("Pad Photosensor 3 (D)") PORT_CHANGED_MEMBER(DEVICE_SELF, taitob_c_state,realpunc_sensor, 0)
PORT_BIT( 0x80, IP_ACTIVE_LOW,IPT_UNKNOWN )
INPUT_PORTS_END
@@ -1757,13 +1757,13 @@ MACHINE_CONFIG_START(taitob_state::rastsag2)
MCFG_QUANTUM_TIME(attotime::from_hz(600))
- MCFG_DEVICE_ADD("tc0220ioc", TC0220IOC, 0)
- MCFG_TC0220IOC_READ_0_CB(IOPORT("DSWA"))
- MCFG_TC0220IOC_READ_1_CB(IOPORT("DSWB"))
- MCFG_TC0220IOC_READ_2_CB(IOPORT("IN0"))
- MCFG_TC0220IOC_READ_3_CB(IOPORT("IN1"))
- MCFG_TC0220IOC_WRITE_4_CB(WRITE8(*this, taitob_state, player_12_coin_ctrl_w))
- MCFG_TC0220IOC_READ_7_CB(IOPORT("IN2"))
+ TC0220IOC(config, m_tc0220ioc, 0);
+ m_tc0220ioc->read_0_callback().set_ioport("DSWA");
+ m_tc0220ioc->read_1_callback().set_ioport("DSWB");
+ m_tc0220ioc->read_2_callback().set_ioport("IN0");
+ m_tc0220ioc->read_3_callback().set_ioport("IN1");
+ m_tc0220ioc->write_4_callback().set(FUNC(taitob_state::player_12_coin_ctrl_w));
+ m_tc0220ioc->read_7_callback().set_ioport("IN2");
/* video hardware */
MCFG_SCREEN_ADD("screen", RASTER)
@@ -1815,13 +1815,13 @@ MACHINE_CONFIG_START(taitob_state::masterw)
MCFG_QUANTUM_TIME(attotime::from_hz(600))
- MCFG_DEVICE_ADD("tc0040ioc", TC0040IOC, 0)
- MCFG_TC0040IOC_READ_0_CB(IOPORT("DSWA"))
- MCFG_TC0040IOC_READ_1_CB(IOPORT("DSWB"))
- MCFG_TC0040IOC_READ_2_CB(IOPORT("IN0"))
- MCFG_TC0040IOC_READ_3_CB(IOPORT("IN1"))
- MCFG_TC0040IOC_WRITE_4_CB(WRITE8(*this, taitob_state, player_12_coin_ctrl_w))
- MCFG_TC0040IOC_READ_7_CB(IOPORT("IN2"))
+ tc0040ioc_device &tc0040ioc(TC0040IOC(config, "tc0040ioc", 0));
+ tc0040ioc.read_0_callback().set_ioport("DSWA");
+ tc0040ioc.read_1_callback().set_ioport("DSWB");
+ tc0040ioc.read_2_callback().set_ioport("IN0");
+ tc0040ioc.read_3_callback().set_ioport("IN1");
+ tc0040ioc.write_4_callback().set(FUNC(taitob_state::player_12_coin_ctrl_w));
+ tc0040ioc.read_7_callback().set_ioport("IN2");
/* video hardware */
MCFG_SCREEN_ADD("screen", RASTER)
@@ -1850,13 +1850,13 @@ MACHINE_CONFIG_START(taitob_state::masterw)
/* sound hardware */
SPEAKER(config, "mono").front_center();
- MCFG_DEVICE_ADD("ymsnd", YM2203, 24_MHz_XTAL / 8) /* 3 MHz */
- MCFG_YM2203_IRQ_HANDLER(INPUTLINE("audiocpu", 0))
- MCFG_AY8910_PORT_A_WRITE_CB(MEMBANK("audiobank")) MCFG_DEVCB_MASK(0x03)
- MCFG_SOUND_ROUTE(0, "mono", 0.25)
- MCFG_SOUND_ROUTE(1, "mono", 0.25)
- MCFG_SOUND_ROUTE(2, "mono", 0.25)
- MCFG_SOUND_ROUTE(3, "mono", 0.80)
+ ym2203_device &ymsnd(YM2203(config, m_ym, 24_MHz_XTAL / 8)); /* 3 MHz */
+ ymsnd.irq_handler().set_inputline(m_audiocpu, 0);
+ ymsnd.port_a_write_callback().set_membank(m_audiobank).mask(0x03);
+ ymsnd.add_route(0, "mono", 0.25);
+ ymsnd.add_route(1, "mono", 0.25);
+ ymsnd.add_route(2, "mono", 0.25);
+ ymsnd.add_route(3, "mono", 0.80);
MCFG_DEVICE_ADD("ciu", PC060HA, 0)
MCFG_PC060HA_MASTER_CPU("maincpu")
@@ -1894,13 +1894,13 @@ MACHINE_CONFIG_START(taitob_state::ashura)
MCFG_QUANTUM_TIME(attotime::from_hz(600))
- MCFG_DEVICE_ADD("tc0220ioc", TC0220IOC, 0)
- MCFG_TC0220IOC_READ_0_CB(IOPORT("DSWA"))
- MCFG_TC0220IOC_READ_1_CB(IOPORT("DSWB"))
- MCFG_TC0220IOC_READ_2_CB(IOPORT("IN0"))
- MCFG_TC0220IOC_READ_3_CB(IOPORT("IN1"))
- MCFG_TC0220IOC_WRITE_4_CB(WRITE8(*this, taitob_state, player_12_coin_ctrl_w))
- MCFG_TC0220IOC_READ_7_CB(IOPORT("IN2"))
+ TC0220IOC(config, m_tc0220ioc, 0);
+ m_tc0220ioc->read_0_callback().set_ioport("DSWA");
+ m_tc0220ioc->read_1_callback().set_ioport("DSWB");
+ m_tc0220ioc->read_2_callback().set_ioport("IN0");
+ m_tc0220ioc->read_3_callback().set_ioport("IN1");
+ m_tc0220ioc->write_4_callback().set(FUNC(taitob_state::player_12_coin_ctrl_w));
+ m_tc0220ioc->read_7_callback().set_ioport("IN2");
/* video hardware */
MCFG_SCREEN_ADD("screen", RASTER)
@@ -1952,13 +1952,13 @@ MACHINE_CONFIG_START(taitob_state::crimec)
MCFG_QUANTUM_TIME(attotime::from_hz(600))
- MCFG_DEVICE_ADD("tc0220ioc", TC0220IOC, 0)
- MCFG_TC0220IOC_READ_0_CB(IOPORT("DSWA"))
- MCFG_TC0220IOC_READ_1_CB(IOPORT("DSWB"))
- MCFG_TC0220IOC_READ_2_CB(IOPORT("IN0"))
- MCFG_TC0220IOC_READ_3_CB(IOPORT("IN1"))
- MCFG_TC0220IOC_WRITE_4_CB(WRITE8(*this, taitob_state, player_12_coin_ctrl_w))
- MCFG_TC0220IOC_READ_7_CB(IOPORT("IN2"))
+ TC0220IOC(config, m_tc0220ioc, 0);
+ m_tc0220ioc->read_0_callback().set_ioport("DSWA");
+ m_tc0220ioc->read_1_callback().set_ioport("DSWB");
+ m_tc0220ioc->read_2_callback().set_ioport("IN0");
+ m_tc0220ioc->read_3_callback().set_ioport("IN1");
+ m_tc0220ioc->write_4_callback().set(FUNC(taitob_state::player_12_coin_ctrl_w));
+ m_tc0220ioc->read_7_callback().set_ioport("IN2");
/* video hardware */
MCFG_SCREEN_ADD("screen", RASTER)
@@ -2011,13 +2011,13 @@ MACHINE_CONFIG_START(taitob_state::hitice)
MCFG_QUANTUM_TIME(attotime::from_hz(600))
- MCFG_DEVICE_ADD("tc0220ioc", TC0220IOC, 0)
- MCFG_TC0220IOC_READ_0_CB(IOPORT("DSWA"))
- MCFG_TC0220IOC_READ_1_CB(IOPORT("DSWB"))
- MCFG_TC0220IOC_READ_2_CB(IOPORT("IN0"))
- MCFG_TC0220IOC_READ_3_CB(IOPORT("IN1"))
- MCFG_TC0220IOC_WRITE_4_CB(WRITE8(*this, taitob_state, player_12_coin_ctrl_w))
- MCFG_TC0220IOC_READ_7_CB(IOPORT("IN2"))
+ TC0220IOC(config, m_tc0220ioc, 0);
+ m_tc0220ioc->read_0_callback().set_ioport("DSWA");
+ m_tc0220ioc->read_1_callback().set_ioport("DSWB");
+ m_tc0220ioc->read_2_callback().set_ioport("IN0");
+ m_tc0220ioc->read_3_callback().set_ioport("IN1");
+ m_tc0220ioc->write_4_callback().set(FUNC(taitob_state::player_12_coin_ctrl_w));
+ m_tc0220ioc->read_7_callback().set_ioport("IN2");
/* video hardware */
MCFG_SCREEN_ADD("screen", RASTER)
@@ -2047,13 +2047,13 @@ MACHINE_CONFIG_START(taitob_state::hitice)
/* sound hardware */
SPEAKER(config, "mono").front_center();
- MCFG_DEVICE_ADD("ymsnd", YM2203, 24_MHz_XTAL / 8) /* 3 MHz */
- MCFG_YM2203_IRQ_HANDLER(INPUTLINE("audiocpu", 0))
- MCFG_AY8910_PORT_A_WRITE_CB(MEMBANK("audiobank")) MCFG_DEVCB_MASK(0x03)
- MCFG_SOUND_ROUTE(0, "mono", 0.25)
- MCFG_SOUND_ROUTE(1, "mono", 0.25)
- MCFG_SOUND_ROUTE(2, "mono", 0.25)
- MCFG_SOUND_ROUTE(3, "mono", 0.80)
+ ym2203_device &ymsnd(YM2203(config, m_ym, 24_MHz_XTAL / 8)); /* 3 MHz */
+ ymsnd.irq_handler().set_inputline(m_audiocpu, 0);
+ ymsnd.port_a_write_callback().set_membank(m_audiobank).mask(0x03);
+ ymsnd.add_route(0, "mono", 0.25);
+ ymsnd.add_route(1, "mono", 0.25);
+ ymsnd.add_route(2, "mono", 0.25);
+ ymsnd.add_route(3, "mono", 0.80);
MCFG_DEVICE_ADD("oki", OKIM6295, 1056000, okim6295_device::PIN7_HIGH) // clock frequency & pin 7 not verified
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50)
@@ -2075,13 +2075,13 @@ MACHINE_CONFIG_START(taitob_state::rambo3p)
MCFG_QUANTUM_TIME(attotime::from_hz(600))
- MCFG_DEVICE_ADD("tc0220ioc", TC0220IOC, 0)
- MCFG_TC0220IOC_READ_0_CB(IOPORT("DSWA"))
- MCFG_TC0220IOC_READ_1_CB(IOPORT("DSWB"))
- MCFG_TC0220IOC_READ_2_CB(IOPORT("IN0"))
- MCFG_TC0220IOC_READ_3_CB(IOPORT("IN1"))
- MCFG_TC0220IOC_WRITE_4_CB(WRITE8(*this, taitob_state, player_12_coin_ctrl_w))
- MCFG_TC0220IOC_READ_7_CB(IOPORT("IN2"))
+ TC0220IOC(config, m_tc0220ioc, 0);
+ m_tc0220ioc->read_0_callback().set_ioport("DSWA");
+ m_tc0220ioc->read_1_callback().set_ioport("DSWB");
+ m_tc0220ioc->read_2_callback().set_ioport("IN0");
+ m_tc0220ioc->read_3_callback().set_ioport("IN1");
+ m_tc0220ioc->write_4_callback().set(FUNC(taitob_state::player_12_coin_ctrl_w));
+ m_tc0220ioc->read_7_callback().set_ioport("IN2");
/* video hardware */
MCFG_SCREEN_ADD("screen", RASTER)
@@ -2134,13 +2134,13 @@ MACHINE_CONFIG_START(taitob_state::rambo3)
MCFG_QUANTUM_TIME(attotime::from_hz(600))
- MCFG_DEVICE_ADD("tc0220ioc", TC0220IOC, 0)
- MCFG_TC0220IOC_READ_0_CB(IOPORT("DSWA"))
- MCFG_TC0220IOC_READ_1_CB(IOPORT("DSWB"))
- MCFG_TC0220IOC_READ_2_CB(IOPORT("IN0"))
- MCFG_TC0220IOC_READ_3_CB(IOPORT("IN1"))
- MCFG_TC0220IOC_WRITE_4_CB(WRITE8(*this, taitob_state, player_12_coin_ctrl_w))
- MCFG_TC0220IOC_READ_7_CB(IOPORT("IN2"))
+ TC0220IOC(config, m_tc0220ioc, 0);
+ m_tc0220ioc->read_0_callback().set_ioport("DSWA");
+ m_tc0220ioc->read_1_callback().set_ioport("DSWB");
+ m_tc0220ioc->read_2_callback().set_ioport("IN0");
+ m_tc0220ioc->read_3_callback().set_ioport("IN1");
+ m_tc0220ioc->write_4_callback().set(FUNC(taitob_state::player_12_coin_ctrl_w));
+ m_tc0220ioc->read_7_callback().set_ioport("IN2");
/* video hardware */
MCFG_SCREEN_ADD("screen", RASTER)
@@ -2195,13 +2195,13 @@ MACHINE_CONFIG_START(taitob_state::pbobble)
MCFG_DEVICE_ADD("eeprom", EEPROM_SERIAL_93C46_16BIT)
- MCFG_DEVICE_ADD("tc0640fio", TC0640FIO, 0)
- MCFG_TC0640FIO_READ_0_CB(IOPORT("SERVICE"))
- MCFG_TC0640FIO_READ_1_CB(IOPORT("COIN"))
- MCFG_TC0640FIO_READ_2_CB(IOPORT("START"))
- MCFG_TC0640FIO_READ_3_CB(IOPORT("P1_P2_A"))
- MCFG_TC0640FIO_WRITE_4_CB(WRITE8(*this, taitob_state, player_12_coin_ctrl_w))
- MCFG_TC0640FIO_READ_7_CB(IOPORT("P1_P2_B"))
+ TC0640FIO(config, m_tc0640fio, 0);
+ m_tc0640fio->read_0_callback().set_ioport("SERVICE");
+ m_tc0640fio->read_1_callback().set_ioport("COIN");
+ m_tc0640fio->read_2_callback().set_ioport("START");
+ m_tc0640fio->read_3_callback().set_ioport("P1_P2_A");
+ m_tc0640fio->write_4_callback().set(FUNC(taitob_state::player_12_coin_ctrl_w));
+ m_tc0640fio->read_7_callback().set_ioport("P1_P2_B");
MCFG_DEVICE_ADD("mb87078", MB87078, 0)
MCFG_MB87078_GAIN_CHANGED_CB(WRITE8(*this, taitob_state, mb87078_gain_changed))
@@ -2259,13 +2259,13 @@ MACHINE_CONFIG_START(taitob_state::spacedx)
MCFG_DEVICE_ADD("eeprom", EEPROM_SERIAL_93C46_16BIT)
- MCFG_DEVICE_ADD("tc0640fio", TC0640FIO, 0)
- MCFG_TC0640FIO_READ_0_CB(IOPORT("SERVICE"))
- MCFG_TC0640FIO_READ_1_CB(IOPORT("COIN"))
- MCFG_TC0640FIO_READ_2_CB(IOPORT("START"))
- MCFG_TC0640FIO_READ_3_CB(IOPORT("P1_P2_A"))
- MCFG_TC0640FIO_WRITE_4_CB(WRITE8(*this, taitob_state, player_12_coin_ctrl_w))
- MCFG_TC0640FIO_READ_7_CB(IOPORT("P1_P2_B"))
+ TC0640FIO(config, m_tc0640fio, 0);
+ m_tc0640fio->read_0_callback().set_ioport("SERVICE");
+ m_tc0640fio->read_1_callback().set_ioport("COIN");
+ m_tc0640fio->read_2_callback().set_ioport("START");
+ m_tc0640fio->read_3_callback().set_ioport("P1_P2_A");
+ m_tc0640fio->write_4_callback().set(FUNC(taitob_state::player_12_coin_ctrl_w));
+ m_tc0640fio->read_7_callback().set_ioport("P1_P2_B");
MCFG_DEVICE_ADD("mb87078", MB87078, 0)
MCFG_MB87078_GAIN_CHANGED_CB(WRITE8(*this, taitob_state, mb87078_gain_changed))
@@ -2320,13 +2320,13 @@ MACHINE_CONFIG_START(taitob_state::spacedxo)
MCFG_QUANTUM_TIME(attotime::from_hz(600))
- MCFG_DEVICE_ADD("tc0220ioc", TC0220IOC, 0)
- MCFG_TC0220IOC_READ_0_CB(IOPORT("DSWA"))
- MCFG_TC0220IOC_READ_1_CB(IOPORT("DSWB"))
- MCFG_TC0220IOC_READ_2_CB(IOPORT("IN0"))
- MCFG_TC0220IOC_READ_3_CB(IOPORT("IN1"))
- MCFG_TC0220IOC_WRITE_4_CB(WRITE8(*this, taitob_state, player_12_coin_ctrl_w))
- MCFG_TC0220IOC_READ_7_CB(IOPORT("IN2"))
+ TC0220IOC(config, m_tc0220ioc, 0);
+ m_tc0220ioc->read_0_callback().set_ioport("DSWA");
+ m_tc0220ioc->read_1_callback().set_ioport("DSWB");
+ m_tc0220ioc->read_2_callback().set_ioport("IN0");
+ m_tc0220ioc->read_3_callback().set_ioport("IN1");
+ m_tc0220ioc->write_4_callback().set(FUNC(taitob_state::player_12_coin_ctrl_w));
+ m_tc0220ioc->read_7_callback().set_ioport("IN2");
/* video hardware */
MCFG_SCREEN_ADD("screen", RASTER)
@@ -2381,13 +2381,13 @@ MACHINE_CONFIG_START(taitob_state::qzshowby)
MCFG_DEVICE_ADD("eeprom", EEPROM_SERIAL_93C46_16BIT)
- MCFG_DEVICE_ADD("tc0640fio", TC0640FIO, 0)
- MCFG_TC0640FIO_READ_0_CB(IOPORT("SERVICE"))
- MCFG_TC0640FIO_READ_1_CB(IOPORT("COIN"))
- MCFG_TC0640FIO_READ_2_CB(IOPORT("START"))
- MCFG_TC0640FIO_READ_3_CB(IOPORT("P1_P2_A"))
- MCFG_TC0640FIO_WRITE_4_CB(WRITE8(*this, taitob_state, player_12_coin_ctrl_w))
- MCFG_TC0640FIO_READ_7_CB(IOPORT("P1_P2_B"))
+ TC0640FIO(config, m_tc0640fio, 0);
+ m_tc0640fio->read_0_callback().set_ioport("SERVICE");
+ m_tc0640fio->read_1_callback().set_ioport("COIN");
+ m_tc0640fio->read_2_callback().set_ioport("START");
+ m_tc0640fio->read_3_callback().set_ioport("P1_P2_A");
+ m_tc0640fio->write_4_callback().set(FUNC(taitob_state::player_12_coin_ctrl_w));
+ m_tc0640fio->read_7_callback().set_ioport("P1_P2_B");
MCFG_DEVICE_ADD("mb87078", MB87078, 0)
MCFG_MB87078_GAIN_CHANGED_CB(WRITE8(*this, taitob_state, mb87078_gain_changed))
@@ -2442,13 +2442,13 @@ MACHINE_CONFIG_START(taitob_state::viofight)
MCFG_QUANTUM_TIME(attotime::from_hz(600))
- MCFG_DEVICE_ADD("tc0220ioc", TC0220IOC, 0)
- MCFG_TC0220IOC_READ_0_CB(IOPORT("DSWA"))
- MCFG_TC0220IOC_READ_1_CB(IOPORT("DSWB"))
- MCFG_TC0220IOC_READ_2_CB(IOPORT("IN0"))
- MCFG_TC0220IOC_READ_3_CB(IOPORT("IN1"))
- MCFG_TC0220IOC_WRITE_4_CB(WRITE8(*this, taitob_state, player_12_coin_ctrl_w))
- MCFG_TC0220IOC_READ_7_CB(IOPORT("IN2"))
+ TC0220IOC(config, m_tc0220ioc, 0);
+ m_tc0220ioc->read_0_callback().set_ioport("DSWA");
+ m_tc0220ioc->read_1_callback().set_ioport("DSWB");
+ m_tc0220ioc->read_2_callback().set_ioport("IN0");
+ m_tc0220ioc->read_3_callback().set_ioport("IN1");
+ m_tc0220ioc->write_4_callback().set(FUNC(taitob_state::player_12_coin_ctrl_w));
+ m_tc0220ioc->read_7_callback().set_ioport("IN2");
/* video hardware */
MCFG_SCREEN_ADD("screen", RASTER)
@@ -2477,13 +2477,13 @@ MACHINE_CONFIG_START(taitob_state::viofight)
/* sound hardware */
SPEAKER(config, "mono").front_center();
- MCFG_DEVICE_ADD("ymsnd", YM2203, 24_MHz_XTAL / 8) /* 3 MHz */
- MCFG_YM2203_IRQ_HANDLER(INPUTLINE("audiocpu", 0))
- MCFG_AY8910_PORT_A_WRITE_CB(MEMBANK("audiobank")) MCFG_DEVCB_MASK(0x03)
- MCFG_SOUND_ROUTE(0, "mono", 0.25)
- MCFG_SOUND_ROUTE(1, "mono", 0.25)
- MCFG_SOUND_ROUTE(2, "mono", 0.25)
- MCFG_SOUND_ROUTE(3, "mono", 0.80)
+ ym2203_device &ymsnd(YM2203(config, m_ym, 24_MHz_XTAL / 8)); /* 3 MHz */
+ ymsnd.irq_handler().set_inputline(m_audiocpu, 0);
+ ymsnd.port_a_write_callback().set_membank(m_audiobank).mask(0x03);
+ ymsnd.add_route(0, "mono", 0.25);
+ ymsnd.add_route(1, "mono", 0.25);
+ ymsnd.add_route(2, "mono", 0.25);
+ ymsnd.add_route(3, "mono", 0.80);
MCFG_DEVICE_ADD("oki", OKIM6295, 4.224_MHz_XTAL / 4, okim6295_device::PIN7_HIGH) // 1.056MHz clock frequency, but pin 7 not verified
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50)
@@ -2505,13 +2505,13 @@ MACHINE_CONFIG_START(taitob_state::silentd)
MCFG_QUANTUM_TIME(attotime::from_hz(600))
- MCFG_DEVICE_ADD("tc0220ioc", TC0220IOC, 0)
- MCFG_TC0220IOC_READ_0_CB(IOPORT("DSWA"))
- MCFG_TC0220IOC_READ_1_CB(IOPORT("DSWB"))
- MCFG_TC0220IOC_READ_2_CB(IOPORT("IN0"))
- MCFG_TC0220IOC_READ_3_CB(IOPORT("IN1"))
- MCFG_TC0220IOC_WRITE_4_CB(WRITE8(*this, taitob_state, player_12_coin_ctrl_w))
- MCFG_TC0220IOC_READ_7_CB(IOPORT("IN2"))
+ TC0220IOC(config, m_tc0220ioc, 0);
+ m_tc0220ioc->read_0_callback().set_ioport("DSWA");
+ m_tc0220ioc->read_1_callback().set_ioport("DSWB");
+ m_tc0220ioc->read_2_callback().set_ioport("IN0");
+ m_tc0220ioc->read_3_callback().set_ioport("IN1");
+ m_tc0220ioc->write_4_callback().set(FUNC(taitob_state::player_12_coin_ctrl_w));
+ m_tc0220ioc->read_7_callback().set_ioport("IN2");
/* video hardware */
MCFG_SCREEN_ADD("screen", RASTER)
@@ -2563,13 +2563,13 @@ MACHINE_CONFIG_START(taitob_state::selfeena)
MCFG_QUANTUM_TIME(attotime::from_hz(600))
- MCFG_DEVICE_ADD("tc0220ioc", TC0220IOC, 0)
- MCFG_TC0220IOC_READ_0_CB(IOPORT("DSWA"))
- MCFG_TC0220IOC_READ_1_CB(IOPORT("DSWB"))
- MCFG_TC0220IOC_READ_2_CB(IOPORT("IN0"))
- MCFG_TC0220IOC_READ_3_CB(IOPORT("IN1"))
- MCFG_TC0220IOC_WRITE_4_CB(WRITE8(*this, taitob_state, player_12_coin_ctrl_w))
- MCFG_TC0220IOC_READ_7_CB(IOPORT("IN2"))
+ TC0220IOC(config, m_tc0220ioc, 0);
+ m_tc0220ioc->read_0_callback().set_ioport("DSWA");
+ m_tc0220ioc->read_1_callback().set_ioport("DSWB");
+ m_tc0220ioc->read_2_callback().set_ioport("IN0");
+ m_tc0220ioc->read_3_callback().set_ioport("IN1");
+ m_tc0220ioc->write_4_callback().set(FUNC(taitob_state::player_12_coin_ctrl_w));
+ m_tc0220ioc->read_7_callback().set_ioport("IN2");
/* video hardware */
MCFG_SCREEN_ADD("screen", RASTER)
@@ -2630,13 +2630,13 @@ MACHINE_CONFIG_START(taitob_state::ryujin)
MCFG_QUANTUM_TIME(attotime::from_hz(600))
- MCFG_DEVICE_ADD("tc0220ioc", TC0220IOC, 0)
- MCFG_TC0220IOC_READ_0_CB(IOPORT("DSWA"))
- MCFG_TC0220IOC_READ_1_CB(IOPORT("DSWB"))
- MCFG_TC0220IOC_READ_2_CB(IOPORT("IN0"))
- MCFG_TC0220IOC_READ_3_CB(IOPORT("IN1"))
- MCFG_TC0220IOC_WRITE_4_CB(WRITE8(*this, taitob_state, player_12_coin_ctrl_w))
- MCFG_TC0220IOC_READ_7_CB(IOPORT("IN2"))
+ TC0220IOC(config, m_tc0220ioc, 0);
+ m_tc0220ioc->read_0_callback().set_ioport("DSWA");
+ m_tc0220ioc->read_1_callback().set_ioport("DSWB");
+ m_tc0220ioc->read_2_callback().set_ioport("IN0");
+ m_tc0220ioc->read_3_callback().set_ioport("IN1");
+ m_tc0220ioc->write_4_callback().set(FUNC(taitob_state::player_12_coin_ctrl_w));
+ m_tc0220ioc->read_7_callback().set_ioport("IN2");
/* video hardware */
MCFG_SCREEN_ADD("screen", RASTER)
@@ -2695,13 +2695,13 @@ MACHINE_CONFIG_START(taitob_state::sbm)
MCFG_QUANTUM_TIME(attotime::from_hz(600))
- MCFG_DEVICE_ADD("tc0510nio", TC0510NIO, 0)
- MCFG_TC0510NIO_READ_0_CB(IOPORT("DSWA"))
- MCFG_TC0510NIO_READ_1_CB(IOPORT("DSWB"))
- MCFG_TC0510NIO_READ_2_CB(IOPORT("JOY"))
- MCFG_TC0510NIO_READ_3_CB(IOPORT("START"))
- MCFG_TC0510NIO_WRITE_4_CB(WRITE8(*this, taitob_state, player_12_coin_ctrl_w))
- MCFG_TC0510NIO_READ_7_CB(IOPORT("PHOTOSENSOR"))
+ TC0510NIO(config, m_tc0510nio, 0);
+ m_tc0510nio->read_0_callback().set_ioport("DSWA");
+ m_tc0510nio->read_1_callback().set_ioport("DSWB");
+ m_tc0510nio->read_2_callback().set_ioport("JOY");
+ m_tc0510nio->read_3_callback().set_ioport("START");
+ m_tc0510nio->write_4_callback().set(FUNC(taitob_state::player_12_coin_ctrl_w));
+ m_tc0510nio->read_7_callback().set_ioport("PHOTOSENSOR");
/* video hardware */
MCFG_SCREEN_ADD("screen", RASTER)
@@ -2752,13 +2752,13 @@ MACHINE_CONFIG_START(taitob_c_state::realpunc)
MCFG_QUANTUM_TIME(attotime::from_hz(600))
- MCFG_DEVICE_ADD("tc0510nio", TC0510NIO, 0)
- MCFG_TC0510NIO_READ_0_CB(IOPORT("DSWA"))
- MCFG_TC0510NIO_READ_1_CB(IOPORT("DSWB"))
- MCFG_TC0510NIO_READ_2_CB(IOPORT("IN0"))
- MCFG_TC0510NIO_READ_3_CB(IOPORT("IN1"))
- MCFG_TC0510NIO_WRITE_4_CB(WRITE8(*this, taitob_state, player_12_coin_ctrl_w))
- MCFG_TC0510NIO_READ_7_CB(IOPORT("IN2"))
+ TC0510NIO(config, m_tc0510nio, 0);
+ m_tc0510nio->read_0_callback().set_ioport("DSWA");
+ m_tc0510nio->read_1_callback().set_ioport("DSWB");
+ m_tc0510nio->read_2_callback().set_ioport("IN0");
+ m_tc0510nio->read_3_callback().set_ioport("IN1");
+ m_tc0510nio->write_4_callback().set(FUNC(taitob_c_state::player_12_coin_ctrl_w));
+ m_tc0510nio->read_7_callback().set_ioport("IN2");
/* video hardware */
MCFG_SCREEN_ADD("screen", RASTER)
@@ -2766,13 +2766,13 @@ MACHINE_CONFIG_START(taitob_c_state::realpunc)
MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
MCFG_SCREEN_SIZE(64*8, 32*8)
MCFG_SCREEN_VISIBLE_AREA(0*8, 40*8-1, 2*8, 30*8-1)
- MCFG_SCREEN_UPDATE_DRIVER(taitob_state, screen_update_realpunc)
+ MCFG_SCREEN_UPDATE_DRIVER(taitob_c_state, screen_update_realpunc)
MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE("tc0180vcu", tc0180vcu_device, screen_vblank))
MCFG_PALETTE_ADD("palette", 4096)
MCFG_PALETTE_FORMAT(RRRRGGGGBBBBxxxx)
- MCFG_VIDEO_START_OVERRIDE(taitob_state,realpunc)
+ MCFG_VIDEO_START_OVERRIDE(taitob_c_state,realpunc)
MCFG_HD63484_ADD("hd63484", 0, realpunc_hd63484_map)
MCFG_HD63484_AUTO_CONFIGURE_SCREEN(false)