diff options
Diffstat (limited to 'docs/release/src/mame/drivers/model2.cpp')
-rw-r--r-- | docs/release/src/mame/drivers/model2.cpp | 439 |
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) ) |