summaryrefslogtreecommitdiffstats
path: root/docs/release/src/mame/drivers/model2.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'docs/release/src/mame/drivers/model2.cpp')
-rw-r--r--docs/release/src/mame/drivers/model2.cpp439
1 files changed, 229 insertions, 210 deletions
diff --git a/docs/release/src/mame/drivers/model2.cpp b/docs/release/src/mame/drivers/model2.cpp
index 7be1d1ec39d..8a931aca689 100644
--- a/docs/release/src/mame/drivers/model2.cpp
+++ b/docs/release/src/mame/drivers/model2.cpp
@@ -2445,13 +2445,13 @@ MACHINE_CONFIG_START(model2_state::model2_scsp)
MCFG_SOUND_ROUTE(0, "lspeaker", 2.0)
MCFG_SOUND_ROUTE(0, "rspeaker", 2.0)
- MCFG_DEVICE_ADD("uart", I8251, 8000000) // uPD71051C, clock unknown
-// MCFG_I8251_RXRDY_HANDLER(WRITELINE(*this, model2_state, sound_ready_w))
-// MCFG_I8251_TXRDY_HANDLER(WRITELINE(*this, model2_state, sound_ready_w))
+ I8251(config, m_uart, 8000000); // uPD71051C, clock unknown
+// m_uart->rxrdy_handler().set(FUNC(model2_state::sound_ready_w));
+// m_uart->txrdy_handler().set(FUNC(model2_state::sound_ready_w));
- MCFG_CLOCK_ADD("uart_clock", 500000) // 16 times 31.25MHz (standard Sega/MIDI sound data rate)
- MCFG_CLOCK_SIGNAL_HANDLER(WRITELINE("uart", i8251_device, write_txc))
- MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("uart", i8251_device, write_rxc))
+ clock_device &uart_clock(CLOCK(config, "uart_clock", 500000)); // 16 times 31.25MHz (standard Sega/MIDI sound data rate)
+ uart_clock.signal_handler().set(m_uart, FUNC(i8251_device::write_txc));
+ uart_clock.signal_handler().append(m_uart, FUNC(i8251_device::write_rxc));
MACHINE_CONFIG_END
/* original Model 2 */
@@ -2466,45 +2466,45 @@ MACHINE_CONFIG_START(model2o_state::model2o)
MCFG_DEVICE_IO_MAP(copro_tgp_io_map)
MCFG_DEVICE_ADDRESS_MAP(mb86233_device::AS_RF, copro_tgp_rf_map)
- MCFG_DEVICE_ADD("copro_tgp_bank", ADDRESS_MAP_BANK, 0)
- MCFG_DEVICE_PROGRAM_MAP(copro_tgp_bank_map)
- MCFG_ADDRESS_MAP_BANK_ENDIANNESS(ENDIANNESS_LITTLE)
- MCFG_ADDRESS_MAP_BANK_DATA_WIDTH(32)
- MCFG_ADDRESS_MAP_BANK_ADDR_WIDTH(17)
- MCFG_ADDRESS_MAP_BANK_SHIFT(-2)
- MCFG_ADDRESS_MAP_BANK_STRIDE(0x10000)
+ ADDRESS_MAP_BANK(config, m_copro_tgp_bank, 0);
+ m_copro_tgp_bank->set_addrmap(0, &model2o_state::copro_tgp_bank_map);
+ m_copro_tgp_bank->set_endianness(ENDIANNESS_LITTLE);
+ m_copro_tgp_bank->set_data_width(32);
+ m_copro_tgp_bank->set_addr_width(17);
+ m_copro_tgp_bank->set_shift(-2);
+ m_copro_tgp_bank->set_stride(0x10000);
- MCFG_DEVICE_ADD("copro_fifo_in", GENERIC_FIFO_U32, 0)
- MCFG_DEVICE_ADD("copro_fifo_out", GENERIC_FIFO_U32, 0)
+ GENERIC_FIFO_U32(config, m_copro_fifo_in, 0);
+ GENERIC_FIFO_U32(config, m_copro_fifo_out, 0);
MCFG_MACHINE_START_OVERRIDE(model2_tgp_state,model2_tgp)
MCFG_MACHINE_RESET_OVERRIDE(model2o_state,model2o)
MCFG_NVRAM_ADD_1FILL("backup1")
- MCFG_DEVICE_ADD("ioboard", SEGA_MODEL1IO, 0)
- MCFG_DEVICE_BIOS("epr14869c");
- MCFG_MODEL1IO_READ_CB(READ8("dpram", mb8421_device, left_r))
- MCFG_MODEL1IO_WRITE_CB(WRITE8("dpram", mb8421_device, left_w))
- MCFG_MODEL1IO_IN0_CB(IOPORT("IN0"))
- MCFG_MODEL1IO_IN1_CB(IOPORT("IN1"))
+ model1io_device &ioboard(SEGA_MODEL1IO(config, "ioboard", 0));
+ ioboard.set_default_bios_tag("epr14869c");
+ ioboard.read_callback().set("dpram", FUNC(mb8421_device::left_r));
+ ioboard.write_callback().set("dpram", FUNC(mb8421_device::left_w));
+ ioboard.in_callback<0>().set_ioport("IN0");
+ ioboard.in_callback<1>().set_ioport("IN1");
- MCFG_DEVICE_ADD("dpram", MB8421, 0)
+ MB8421(config, "dpram", 0);
model2_timers(config);
model2_screen(config);
- MCFG_SEGAM1AUDIO_ADD(M1AUDIO_TAG)
- MCFG_SEGAM1AUDIO_RXD_HANDLER(WRITELINE("uart", i8251_device, write_rxd))
+ SEGAM1AUDIO(config, m_m1audio, 0);
+ m_m1audio->rxd_handler().set(m_uart, FUNC(i8251_device::write_rxd));
- MCFG_DEVICE_ADD("uart", I8251, 8000000) // uPD71051C, clock unknown
- MCFG_I8251_TXD_HANDLER(WRITELINE(M1AUDIO_TAG, segam1audio_device, write_txd))
+ I8251(config, m_uart, 8000000); // uPD71051C, clock unknown
+ m_uart->txd_handler().set(m_m1audio, FUNC(segam1audio_device::write_txd));
- MCFG_CLOCK_ADD("uart_clock", 500000) // 16 times 31.25MHz (standard Sega/MIDI sound data rate)
- MCFG_CLOCK_SIGNAL_HANDLER(WRITELINE("uart", i8251_device, write_txc))
- MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("uart", i8251_device, write_rxc))
+ clock_device &uart_clock(CLOCK(config, "uart_clock", 500000)); // 16 times 31.25MHz (standard Sega/MIDI sound data rate)
+ uart_clock.signal_handler().set(m_uart, FUNC(i8251_device::write_txc));
+ uart_clock.signal_handler().append(m_uart, FUNC(i8251_device::write_rxc));
- MCFG_M2COMM_ADD("m2comm")
+ M2COMM(config, "m2comm", 0);
MACHINE_CONFIG_END
READ8_MEMBER(model2_state::driveio_portg_r)
@@ -2544,27 +2544,28 @@ MACHINE_CONFIG_START(model2_state::sj25_0207_01)
MCFG_DEVICE_IO_MAP(drive_io_map)
MCFG_DEVICE_VBLANK_INT_DRIVER("screen", model2_state, irq0_line_hold)
- MCFG_DEVICE_ADD("driveio1", SEGA_315_5296, 0) // unknown clock
- MCFG_315_5296_OUT_PORTD_CB(WRITE8(*this, model2_state, driveio_port_w))
- MCFG_315_5296_IN_PORTG_CB(READ8(*this, model2_state, driveio_portg_r))
- MCFG_315_5296_IN_PORTH_CB(READ8(*this, model2_state, driveio_porth_r))
+ sega_315_5296_device &driveio1(SEGA_315_5296(config, "driveio1", 0)); // unknown clock
+ driveio1.out_pd_callback().set(FUNC(model2_state::driveio_port_w));
+ driveio1.in_pg_callback().set(FUNC(model2_state::driveio_portg_r));
+ driveio1.in_ph_callback().set(FUNC(model2_state::driveio_porth_r));
- MCFG_DEVICE_ADD("driveio2", SEGA_315_5296, 0) // unknown clock
+ SEGA_315_5296(config, "driveio2", 0); // unknown clock
- MCFG_DEVICE_ADD("driveadc", MSM6253, 0)
+ MSM6253(config, "driveadc", 0);
MACHINE_CONFIG_END
-MACHINE_CONFIG_START(model2o_state::daytona)
+void model2o_state::daytona(machine_config &config)
+{
model2o(config);
sj25_0207_01(config);
- MCFG_DEVICE_MODIFY("ioboard")
- MCFG_MODEL1IO_DRIVE_WRITE_CB(WRITE8(*this, model2o_state, drive_board_w))
- MCFG_MODEL1IO_AN0_CB(IOPORT("STEER"))
- MCFG_MODEL1IO_AN1_CB(IOPORT("ACCEL"))
- MCFG_MODEL1IO_AN2_CB(IOPORT("BRAKE"))
- MCFG_MODEL1IO_OUTPUT_CB(WRITE8(*this, model2o_state, daytona_output_w))
-MACHINE_CONFIG_END
+ model1io_device &ioboard(*subdevice<model1io_device>("ioboard"));
+ ioboard.drive_write_callback().set(FUNC(model2o_state::drive_board_w));
+ ioboard.an_callback<0>().set_ioport("STEER");
+ ioboard.an_callback<1>().set_ioport("ACCEL");
+ ioboard.an_callback<2>().set_ioport("BRAKE");
+ ioboard.output_callback().set(FUNC(model2o_state::daytona_output_w));
+}
MACHINE_CONFIG_START(model2o_maxx_state::daytona_maxx)
daytona(config);
@@ -2580,35 +2581,36 @@ MACHINE_CONFIG_START(model2o_gtx_state::daytona_gtx)
MCFG_DEVICE_PROGRAM_MAP(model2o_gtx_mem)
MACHINE_CONFIG_END
-MACHINE_CONFIG_START(model2o_state::desert)
+void model2o_state::desert(machine_config &config)
+{
model2o(config);
- MCFG_DEVICE_MODIFY("ioboard")
- MCFG_MODEL1IO_AN0_CB(IOPORT("STEER"))
- MCFG_MODEL1IO_AN1_CB(IOPORT("ACCEL"))
- MCFG_MODEL1IO_AN2_CB(IOPORT("BRAKE"))
- MCFG_MODEL1IO_OUTPUT_CB(WRITE8(*this, model2o_state, desert_output_w))
-MACHINE_CONFIG_END
+ model1io_device &ioboard(*subdevice<model1io_device>("ioboard"));
+ ioboard.an_callback<0>().set_ioport("STEER");
+ ioboard.an_callback<1>().set_ioport("ACCEL");
+ ioboard.an_callback<2>().set_ioport("BRAKE");
+ ioboard.output_callback().set(FUNC(model2o_state::desert_output_w));
+}
MACHINE_CONFIG_START(model2o_state::vcop)
model2o(config);
MCFG_DEVICE_REMOVE("ioboard")
#if 0
- MCFG_DEVICE_ADD("ioboard", SEGA_MODEL1IO2, 0)
- MCFG_DEVICE_BIOS("epr17181");
- MCFG_MODEL1IO2_READ_CB(READ8("dpram", mb8421_device, left_r))
- MCFG_MODEL1IO2_WRITE_CB(WRITE8("dpram", mb8421_device, left_w))
- MCFG_MODEL1IO2_IN0_CB(IOPORT("IN0"))
- MCFG_MODEL1IO2_IN1_CB(IOPORT("IN1"))
- MCFG_MODEL1IO2_IN2_CB(IOPORT("IN2"))
- MCFG_MODEL1IO2_OUTPUT_CB(WRITE8(*this, model2o_state, vcop_output_w))
- MCFG_MODEL1IO2_LIGHTGUN_P1X_TAG("P1_X")
- MCFG_MODEL1IO2_LIGHTGUN_P1Y_TAG("P1_Y")
- MCFG_MODEL1IO2_LIGHTGUN_P2X_TAG("P2_X")
- MCFG_MODEL1IO2_LIGHTGUN_P2Y_TAG("P2_Y")
-
- MCFG_DEFAULT_LAYOUT(layout_model1io2)
+ model1io2_device &ioboard(SEGA_MODEL1IO2(config.replace(), "ioboard", 0));
+ ioboard.set_default_bios_tag("epr17181");
+ ioboard.read_callback().set("dpram", FUNC(mb8421_device::left_r));
+ ioboard.write_callback().set("dpram", FUNC(mb8421_device::left_w));
+ ioboard.in_callback<0>().set_ioport("IN0");
+ ioboard.in_callback<1>().set_ioport("IN1");
+ ioboard.in_callback<2>().set_ioport("IN2");
+ ioboard.output_callback().set(FUNC(model2o_state::vcop_output_w));
+ ioboard.set_lightgun_p1x_tag("P1_X");
+ ioboard.set_lightgun_p1y_tag("P1_Y");
+ ioboard.set_lightgun_p2x_tag("P2_X");
+ ioboard.set_lightgun_p2y_tag("P2_Y");
+
+ config.set_default_layout(layout_model1io2);
#endif
MACHINE_CONFIG_END
@@ -2624,16 +2626,16 @@ MACHINE_CONFIG_START(model2a_state::model2a)
MCFG_DEVICE_IO_MAP(copro_tgp_io_map)
MCFG_DEVICE_ADDRESS_MAP(mb86233_device::AS_RF, copro_tgp_rf_map)
- MCFG_DEVICE_ADD("copro_tgp_bank", ADDRESS_MAP_BANK, 0)
- MCFG_DEVICE_PROGRAM_MAP(copro_tgp_bank_map)
- MCFG_ADDRESS_MAP_BANK_ENDIANNESS(ENDIANNESS_LITTLE)
- MCFG_ADDRESS_MAP_BANK_DATA_WIDTH(32)
- MCFG_ADDRESS_MAP_BANK_ADDR_WIDTH(17)
- MCFG_ADDRESS_MAP_BANK_SHIFT(-2)
- MCFG_ADDRESS_MAP_BANK_STRIDE(0x10000)
+ ADDRESS_MAP_BANK(config, m_copro_tgp_bank, 0);
+ m_copro_tgp_bank->set_addrmap(0, &model2a_state::copro_tgp_bank_map);
+ m_copro_tgp_bank->set_endianness(ENDIANNESS_LITTLE);
+ m_copro_tgp_bank->set_data_width(32);
+ m_copro_tgp_bank->set_addr_width(17);
+ m_copro_tgp_bank->set_shift(-2);
+ m_copro_tgp_bank->set_stride(0x10000);
- MCFG_DEVICE_ADD("copro_fifo_in", GENERIC_FIFO_U32, 0)
- MCFG_DEVICE_ADD("copro_fifo_out", GENERIC_FIFO_U32, 0)
+ GENERIC_FIFO_U32(config, m_copro_fifo_in, 0);
+ GENERIC_FIFO_U32(config, m_copro_fifo_out, 0);
MCFG_MACHINE_START_OVERRIDE(model2_tgp_state,model2_tgp)
MCFG_MACHINE_RESET_OVERRIDE(model2a_state,model2a)
@@ -2641,64 +2643,69 @@ MACHINE_CONFIG_START(model2a_state::model2a)
MCFG_DEVICE_ADD("eeprom", EEPROM_SERIAL_93C46_16BIT)
MCFG_NVRAM_ADD_1FILL("backup1")
- MCFG_DEVICE_ADD("io", SEGA_315_5649, 0)
- MCFG_315_5649_OUT_PA_CB(WRITE8(*this, model2a_state, eeprom_w))
- MCFG_315_5649_IN_PB_CB(READ8(*this, model2a_state, in0_r))
- MCFG_315_5649_IN_PC_CB(IOPORT("IN1"))
- MCFG_315_5649_IN_PD_CB(IOPORT("IN2"))
+ sega_315_5649_device &io(SEGA_315_5649(config, "io", 0));
+ io.out_pa_callback().set(FUNC(model2a_state::eeprom_w));
+ io.in_pb_callback().set(FUNC(model2a_state::in0_r));
+ io.in_pc_callback().set_ioport("IN1");
+ io.in_pd_callback().set_ioport("IN2");
model2_timers(config);
model2_screen(config);
model2_scsp(config);
- MCFG_M2COMM_ADD("m2comm")
+ M2COMM(config, "m2comm", 0);
MACHINE_CONFIG_END
-MACHINE_CONFIG_START(model2a_state::manxtt)
+void model2a_state::manxtt(machine_config &config)
+{
model2a(config);
- MCFG_DEVICE_MODIFY("io")
- MCFG_315_5649_AN0_CB(IOPORT("THROTTLE"))
- MCFG_315_5649_AN1_CB(IOPORT("BRAKE"))
- MCFG_315_5649_AN2_CB(IOPORT("BANK"))
-MACHINE_CONFIG_END
+ sega_315_5649_device &io(*subdevice<sega_315_5649_device>("io"));
+ io.an_port_callback<0>().set_ioport("THROTTLE");
+ io.an_port_callback<1>().set_ioport("BRAKE");
+ io.an_port_callback<2>().set_ioport("BANK");
+}
// Includes a Model 1 Sound board for additional sounds - Deluxe version only
-MACHINE_CONFIG_START(model2a_state::manxttdx)
+void model2a_state::manxttdx(machine_config &config)
+{
manxtt(config);
- MCFG_SEGAM1AUDIO_ADD(M1AUDIO_TAG)
- MCFG_SEGAM1AUDIO_RXD_HANDLER(WRITELINE("uart", i8251_device, write_rxd))
- MCFG_DEVICE_MODIFY("uart")
- MCFG_I8251_TXD_HANDLER(WRITELINE(M1AUDIO_TAG, segam1audio_device, write_txd))
-MACHINE_CONFIG_END
+ SEGAM1AUDIO(config, m_m1audio, 0);
+ m_m1audio->rxd_handler().set(m_uart, FUNC(i8251_device::write_rxd));
+
+ m_uart->txd_handler().set(m_m1audio, FUNC(segam1audio_device::write_txd));
+}
-MACHINE_CONFIG_START( model2a_state::srallyc )
+void model2a_state::srallyc(machine_config &config)
+{
model2a(config);
sj25_0207_01(config);
- MCFG_DEVICE_MODIFY("io")
- MCFG_315_5649_OUT_PE_CB(WRITE8(*this, model2a_state, drive_board_w))
- MCFG_315_5649_AN0_CB(IOPORT("STEER"))
- MCFG_315_5649_AN1_CB(IOPORT("ACCEL"))
- MCFG_315_5649_AN2_CB(IOPORT("BRAKE"))
-MACHINE_CONFIG_END
+ sega_315_5649_device &io(*subdevice<sega_315_5649_device>("io"));
+ io.out_pe_callback().set(FUNC(model2a_state::drive_board_w));
+ io.an_port_callback<0>().set_ioport("STEER");
+ io.an_port_callback<1>().set_ioport("ACCEL");
+ io.an_port_callback<2>().set_ioport("BRAKE");
+}
-MACHINE_CONFIG_START( model2a_state::vcop2 )
+void model2a_state::vcop2(machine_config &config)
+{
model2a(config);
- MCFG_DEVICE_MODIFY("io")
- MCFG_315_5649_SERIAL_CH2_READ_CB(READ8(*this, model2a_state, lightgun_mux_r))
- MCFG_315_5649_SERIAL_CH2_WRITE_CB(WRITE8(*this, model2a_state, lightgun_mux_w))
-MACHINE_CONFIG_END
+ sega_315_5649_device &io(*subdevice<sega_315_5649_device>("io"));
+ io.serial_ch2_rd_callback().set(FUNC(model2a_state::lightgun_mux_r));
+ io.serial_ch2_wr_callback().set(FUNC(model2a_state::lightgun_mux_w));
+}
-MACHINE_CONFIG_START( model2a_state::skytargt )
+void model2a_state::skytargt(machine_config &config)
+{
model2a(config);
- MCFG_DEVICE_MODIFY("io")
- MCFG_315_5649_AN0_CB(IOPORT("STICKY"))
- MCFG_315_5649_AN2_CB(IOPORT("STICKX"))
-MACHINE_CONFIG_END
+ sega_315_5649_device &io(*subdevice<sega_315_5649_device>("io"));
+ io.an_port_callback<0>().set_ioport("STICKY");
+ io.an_port_callback<2>().set_ioport("STICKX");
+}
uint16_t model2_state::crypt_read_callback(uint32_t addr)
{
@@ -2722,12 +2729,13 @@ MACHINE_CONFIG_START(model2a_state::model2a_0229)
// MCFG_SET_5838_READ_CALLBACK(model2_state, crypt_read_callback)
MACHINE_CONFIG_END
-MACHINE_CONFIG_START( model2a_state::zeroguna )
+void model2a_state::zeroguna(machine_config &config)
+{
model2a_5881(config);
- MCFG_DEVICE_MODIFY("io")
- MCFG_315_5649_IN_PG_CB(IOPORT("DSW"))
-MACHINE_CONFIG_END
+ sega_315_5649_device &io(*subdevice<sega_315_5649_device>("io"));
+ io.in_pg_callback().set_ioport("DSW");
+}
/* 2B-CRX */
MACHINE_CONFIG_START(model2b_state::model2b)
@@ -2745,8 +2753,8 @@ MACHINE_CONFIG_START(model2b_state::model2b)
MCFG_QUANTUM_TIME(attotime::from_hz(18000))
- MCFG_DEVICE_ADD("copro_fifo_in", GENERIC_FIFO_U32, 0)
- MCFG_DEVICE_ADD("copro_fifo_out", GENERIC_FIFO_U32, 0)
+ GENERIC_FIFO_U32(config, m_copro_fifo_in, 0);
+ GENERIC_FIFO_U32(config, m_copro_fifo_out, 0);
MCFG_MACHINE_START_OVERRIDE(model2b_state,model2b)
MCFG_MACHINE_RESET_OVERRIDE(model2b_state,model2b)
@@ -2754,17 +2762,17 @@ MACHINE_CONFIG_START(model2b_state::model2b)
MCFG_DEVICE_ADD("eeprom", EEPROM_SERIAL_93C46_16BIT)
MCFG_NVRAM_ADD_1FILL("backup1")
- MCFG_DEVICE_ADD("io", SEGA_315_5649, 0)
- MCFG_315_5649_OUT_PA_CB(WRITE8(*this, model2b_state, eeprom_w))
- MCFG_315_5649_IN_PB_CB(READ8(*this, model2b_state, in0_r))
- MCFG_315_5649_IN_PC_CB(IOPORT("IN1"))
- MCFG_315_5649_IN_PD_CB(IOPORT("IN2"))
+ sega_315_5649_device &io(SEGA_315_5649(config, "io", 0));
+ io.out_pa_callback().set(FUNC(model2b_state::eeprom_w));
+ io.in_pb_callback().set(FUNC(model2b_state::in0_r));
+ io.in_pc_callback().set_ioport("IN1");
+ io.in_pd_callback().set_ioport("IN2");
model2_timers(config);
model2_screen(config);
model2_scsp(config);
- MCFG_M2COMM_ADD("m2comm")
+ M2COMM(config, "m2comm", 0);
MACHINE_CONFIG_END
MACHINE_CONFIG_START(model2b_state::model2b_5881)
@@ -2783,14 +2791,15 @@ MACHINE_CONFIG_START(model2b_state::model2b_0229)
// MCFG_SET_5838_READ_CALLBACK(model2_state, crypt_read_callback)
MACHINE_CONFIG_END
-MACHINE_CONFIG_START(model2b_state::indy500)
+void model2b_state::indy500(machine_config &config)
+{
model2b(config);
- MCFG_DEVICE_MODIFY("io")
- MCFG_315_5649_AN0_CB(IOPORT("STEER"))
- MCFG_315_5649_AN1_CB(IOPORT("ACCEL"))
- MCFG_315_5649_AN2_CB(IOPORT("BRAKE"))
-MACHINE_CONFIG_END
+ sega_315_5649_device &io(*subdevice<sega_315_5649_device>("io"));
+ io.an_port_callback<0>().set_ioport("STEER");
+ io.an_port_callback<1>().set_ioport("ACCEL");
+ io.an_port_callback<2>().set_ioport("BRAKE");
+}
void model2b_state::rchase2_iocpu_map(address_map &map)
@@ -2812,41 +2821,44 @@ MACHINE_CONFIG_START( model2b_state::rchase2 )
MCFG_DEVICE_PROGRAM_MAP(rchase2_iocpu_map)
MCFG_DEVICE_IO_MAP(rchase2_ioport_map)
- MCFG_DEVICE_ADD("ioexp", CXD1095, 0)
+ CXD1095(config, "ioexp", 0);
- MCFG_DEVICE_MODIFY("io")
- MCFG_315_5649_IN_PD_CB(READ8(*this, model2b_state, rchase2_drive_board_r))
- MCFG_315_5649_OUT_PE_CB(WRITE8(*this, model2b_state, rchase2_drive_board_w))
- MCFG_315_5649_AN0_CB(IOPORT("P2_X"))
- MCFG_315_5649_AN1_CB(IOPORT("P1_X"))
- MCFG_315_5649_AN2_CB(IOPORT("P2_Y"))
- MCFG_315_5649_AN3_CB(IOPORT("P1_Y"))
+ sega_315_5649_device &io(*subdevice<sega_315_5649_device>("io"));
+ io.in_pd_callback().set(FUNC(model2b_state::rchase2_drive_board_r));
+ io.out_pe_callback().set(FUNC(model2b_state::rchase2_drive_board_w));
+ io.an_port_callback<0>().set_ioport("P2_X");
+ io.an_port_callback<1>().set_ioport("P1_X");
+ io.an_port_callback<2>().set_ioport("P2_Y");
+ io.an_port_callback<3>().set_ioport("P1_Y");
MACHINE_CONFIG_END
-MACHINE_CONFIG_START( model2b_state::gunblade )
+void model2b_state::gunblade(machine_config &config)
+{
model2b(config);
- MCFG_DEVICE_MODIFY("io")
- MCFG_315_5649_AN0_CB(IOPORT("P1_X"))
- MCFG_315_5649_AN1_CB(IOPORT("P2_X"))
- MCFG_315_5649_AN2_CB(IOPORT("P1_Y"))
- MCFG_315_5649_AN3_CB(IOPORT("P2_Y"))
-MACHINE_CONFIG_END
+ sega_315_5649_device &io(*subdevice<sega_315_5649_device>("io"));
+ io.an_port_callback<0>().set_ioport("P1_X");
+ io.an_port_callback<1>().set_ioport("P2_X");
+ io.an_port_callback<2>().set_ioport("P1_Y");
+ io.an_port_callback<3>().set_ioport("P2_Y");
+}
-MACHINE_CONFIG_START( model2b_state::dynabb )
+void model2b_state::dynabb(machine_config &config)
+{
model2b(config);
- MCFG_DEVICE_MODIFY("io")
- MCFG_315_5649_AN0_CB(IOPORT("BAT1"))
- MCFG_315_5649_AN1_CB(IOPORT("BAT2"))
-MACHINE_CONFIG_END
+ sega_315_5649_device &io(*subdevice<sega_315_5649_device>("io"));
+ io.an_port_callback<0>().set_ioport("BAT1");
+ io.an_port_callback<1>().set_ioport("BAT2");
+}
-MACHINE_CONFIG_START( model2b_state::zerogun )
+void model2b_state::zerogun(machine_config &config)
+{
model2b_5881(config);
- MCFG_DEVICE_MODIFY("io")
- MCFG_315_5649_IN_PG_CB(IOPORT("DSW"))
-MACHINE_CONFIG_END
+ sega_315_5649_device &io(*subdevice<sega_315_5649_device>("io"));
+ io.in_pg_callback().set_ioport("DSW");
+}
/* 2C-CRX */
MACHINE_CONFIG_START(model2c_state::model2c)
@@ -2860,8 +2872,8 @@ MACHINE_CONFIG_START(model2c_state::model2c)
MCFG_MB86235_FIFOIN("copro_fifo_in")
MCFG_MB86235_FIFOOUT0("copro_fifo_out")
- MCFG_DEVICE_ADD("copro_fifo_in", GENERIC_FIFO_U32, 0)
- MCFG_DEVICE_ADD("copro_fifo_out", GENERIC_FIFO_U32, 0)
+ GENERIC_FIFO_U32(config, m_copro_fifo_in, 0);
+ GENERIC_FIFO_U32(config, m_copro_fifo_out, 0);
MCFG_MACHINE_START_OVERRIDE(model2c_state,model2c)
MCFG_MACHINE_RESET_OVERRIDE(model2c_state,model2c)
@@ -2869,70 +2881,74 @@ MACHINE_CONFIG_START(model2c_state::model2c)
MCFG_DEVICE_ADD("eeprom", EEPROM_SERIAL_93C46_16BIT)
MCFG_NVRAM_ADD_1FILL("backup1")
- MCFG_DEVICE_ADD("io", SEGA_315_5649, 0)
- MCFG_315_5649_OUT_PA_CB(WRITE8(*this, model2c_state, eeprom_w))
- MCFG_315_5649_IN_PB_CB(READ8(*this, model2c_state, in0_r))
- MCFG_315_5649_IN_PC_CB(IOPORT("IN1"))
- MCFG_315_5649_IN_PD_CB(IOPORT("IN2"))
+ sega_315_5649_device &io(SEGA_315_5649(config, "io", 0));
+ io.out_pa_callback().set(FUNC(model2c_state::eeprom_w));
+ io.in_pb_callback().set(FUNC(model2c_state::in0_r));
+ io.in_pc_callback().set_ioport("IN1");
+ io.in_pd_callback().set_ioport("IN2");
model2_timers(config);
model2_screen(config);
model2_scsp(config);
- MCFG_M2COMM_ADD("m2comm")
+ M2COMM(config, "m2comm", 0);
MACHINE_CONFIG_END
-MACHINE_CONFIG_START( model2c_state::skisuprg )
+void model2c_state::skisuprg(machine_config &config)
+{
model2c(config);
- MCFG_DEVICE_MODIFY("io")
- MCFG_315_5649_AN0_CB(IOPORT("SWING"))
- MCFG_315_5649_AN1_CB(IOPORT("INCLINING"))
-MACHINE_CONFIG_END
+ sega_315_5649_device &io(*subdevice<sega_315_5649_device>("io"));
+ io.an_port_callback<0>().set_ioport("SWING");
+ io.an_port_callback<1>().set_ioport("INCLINING");
+}
-MACHINE_CONFIG_START( model2c_state::stcc )
+void model2c_state::stcc(machine_config &config)
+{
model2c(config);
- MCFG_DEVICE_MODIFY("io")
- MCFG_315_5649_AN0_CB(IOPORT("STEER"))
- MCFG_315_5649_AN1_CB(IOPORT("ACCEL"))
- MCFG_315_5649_AN2_CB(IOPORT("BRAKE"))
+ sega_315_5649_device &io(*subdevice<sega_315_5649_device>("io"));
+ io.an_port_callback<0>().set_ioport("STEER");
+ io.an_port_callback<1>().set_ioport("ACCEL");
+ io.an_port_callback<2>().set_ioport("BRAKE");
- MCFG_DSBZ80_ADD(DSBZ80_TAG)
- MCFG_SOUND_ROUTE(0, "lspeaker", 1.0)
- MCFG_SOUND_ROUTE(1, "rspeaker", 1.0)
+ DSBZ80(config, m_dsbz80, 0);
+ m_dsbz80->add_route(0, "lspeaker", 1.0);
+ m_dsbz80->add_route(1, "rspeaker", 1.0);
- MCFG_DEVICE_MODIFY("uart")
- MCFG_I8251_TXD_HANDLER(WRITELINE(DSBZ80_TAG, dsbz80_device, write_txd))
-MACHINE_CONFIG_END
+ m_uart->txd_handler().set(m_dsbz80, FUNC(dsbz80_device::write_txd));
+}
-MACHINE_CONFIG_START( model2c_state::waverunr )
+void model2c_state::waverunr(machine_config &config)
+{
model2c(config);
- MCFG_DEVICE_MODIFY("io")
- MCFG_315_5649_AN0_CB(IOPORT("HANDLE"))
- MCFG_315_5649_AN1_CB(IOPORT("ROLL"))
- MCFG_315_5649_AN2_CB(IOPORT("THROTTLE"))
- MCFG_315_5649_AN3_CB(IOPORT("PITCH"))
-MACHINE_CONFIG_END
+ sega_315_5649_device &io(*subdevice<sega_315_5649_device>("io"));
+ io.an_port_callback<0>().set_ioport("HANDLE");
+ io.an_port_callback<1>().set_ioport("ROLL");
+ io.an_port_callback<2>().set_ioport("THROTTLE");
+ io.an_port_callback<3>().set_ioport("PITCH");
+}
-MACHINE_CONFIG_START( model2c_state::bel )
+void model2c_state::bel(machine_config &config)
+{
model2c(config);
- MCFG_DEVICE_MODIFY("io")
- MCFG_315_5649_AN0_CB(IOPORT("P1_X"))
- MCFG_315_5649_AN1_CB(IOPORT("P2_X"))
- MCFG_315_5649_AN2_CB(IOPORT("P1_Y"))
- MCFG_315_5649_AN3_CB(IOPORT("P2_Y"))
-MACHINE_CONFIG_END
+ sega_315_5649_device &io(*subdevice<sega_315_5649_device>("io"));
+ io.an_port_callback<0>().set_ioport("P1_X");
+ io.an_port_callback<1>().set_ioport("P2_X");
+ io.an_port_callback<2>().set_ioport("P1_Y");
+ io.an_port_callback<3>().set_ioport("P2_Y");
+}
-MACHINE_CONFIG_START( model2c_state::hotd )
+void model2c_state::hotd(machine_config &config)
+{
model2c(config);
- MCFG_DEVICE_MODIFY("io")
- MCFG_315_5649_SERIAL_CH2_READ_CB(READ8(*this, model2c_state, lightgun_mux_r))
- MCFG_315_5649_SERIAL_CH2_WRITE_CB(WRITE8(*this, model2c_state, lightgun_mux_w))
-MACHINE_CONFIG_END
+ sega_315_5649_device &io(*subdevice<sega_315_5649_device>("io"));
+ io.serial_ch2_rd_callback().set(FUNC(model2c_state::lightgun_mux_r));
+ io.serial_ch2_wr_callback().set(FUNC(model2c_state::lightgun_mux_w));
+}
MACHINE_CONFIG_START(model2c_state::model2c_5881)
model2c(config);
@@ -2944,29 +2960,32 @@ MACHINE_CONFIG_START(model2c_state::model2c_5881)
MCFG_SET_READ_CALLBACK(model2_state, crypt_read_callback)
MACHINE_CONFIG_END
-MACHINE_CONFIG_START( model2c_state::overrev2c )
+void model2c_state::overrev2c(machine_config &config)
+{
model2c(config);
- MCFG_DEVICE_MODIFY("io")
- MCFG_315_5649_AN0_CB(IOPORT("STEER"))
- MCFG_315_5649_AN1_CB(IOPORT("ACCEL"))
- MCFG_315_5649_AN2_CB(IOPORT("BRAKE"))
-MACHINE_CONFIG_END
+ sega_315_5649_device &io(*subdevice<sega_315_5649_device>("io"));
+ io.an_port_callback<0>().set_ioport("STEER");
+ io.an_port_callback<1>().set_ioport("ACCEL");
+ io.an_port_callback<2>().set_ioport("BRAKE");
+}
-MACHINE_CONFIG_START( model2c_state::segawski )
+void model2c_state::segawski(machine_config &config)
+{
model2c(config);
- MCFG_DEVICE_MODIFY("io")
- MCFG_315_5649_AN0_CB(IOPORT("SLIDE"))
-MACHINE_CONFIG_END
+ sega_315_5649_device &io(*subdevice<sega_315_5649_device>("io"));
+ io.an_port_callback<0>().set_ioport("SLIDE");
+}
-MACHINE_CONFIG_START( model2c_state::topskatr )
+void model2c_state::topskatr(machine_config &config)
+{
model2c(config);
- MCFG_DEVICE_MODIFY("io")
- MCFG_315_5649_AN0_CB(IOPORT("CURVING"))
- MCFG_315_5649_AN1_CB(IOPORT("SLIDE"))
-MACHINE_CONFIG_END
+ sega_315_5649_device &io(*subdevice<sega_315_5649_device>("io"));
+ io.an_port_callback<0>().set_ioport("CURVING");
+ io.an_port_callback<1>().set_ioport("SLIDE");
+}
/* ROM definitions */
@@ -6478,7 +6497,7 @@ ROM_START( vcopa ) /* Virtua Cop Revision A, Model 2 */
MODEL2_CPU_BOARD
ROM_END
-ROM_START( desert ) /* Desert Tank, Model 2 */
+ROM_START( desert ) /* Desert Tank, Model 2, Sega Game ID# 833-11002, ROM board ID# 834-11003 */
ROM_REGION( 0x200000, "maincpu", 0 ) // i960 program
ROM_LOAD32_WORD("epr-16976.12", 0x000000, 0x020000, CRC(d036dff0) SHA1(f3e5f22ef1f3ff9c9a1ff7352cdad3e2c2977a51) )
ROM_LOAD32_WORD("epr-16977.13", 0x000002, 0x020000, CRC(e91194bd) SHA1(cec8eb8d4b52c387d5750ee5a0c6e6ce7c0fe80d) )