summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/drivers/segas32.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/drivers/segas32.cpp')
-rw-r--r--src/mame/drivers/segas32.cpp214
1 files changed, 108 insertions, 106 deletions
diff --git a/src/mame/drivers/segas32.cpp b/src/mame/drivers/segas32.cpp
index dc27583457b..2741a33d812 100644
--- a/src/mame/drivers/segas32.cpp
+++ b/src/mame/drivers/segas32.cpp
@@ -2306,12 +2306,12 @@ GFXDECODE_END
*************************************/
-MACHINE_CONFIG_START(segas32_state::device_add_mconfig)
-
+void segas32_state::device_add_mconfig(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", V60, MASTER_CLOCK/2)
- MCFG_DEVICE_PROGRAM_MAP(system32_map)
- MCFG_DEVICE_VBLANK_INT_DRIVER("screen", segas32_state, start_of_vblank_int)
+ V60(config, m_maincpu, MASTER_CLOCK/2);
+ m_maincpu->set_addrmap(AS_PROGRAM, &segas32_state::system32_map);
+ m_maincpu->set_vblank_int("screen", FUNC(segas32_state::start_of_vblank_int));
Z80(config, m_soundcpu, MASTER_CLOCK/4);
m_soundcpu->set_addrmap(AS_PROGRAM, &segas32_state::system32_sound_map);
@@ -2334,39 +2334,39 @@ MACHINE_CONFIG_START(segas32_state::device_add_mconfig)
EEPROM_93C46_16BIT(config, "eeprom");
- MCFG_TIMER_DRIVER_ADD("v60_irq0", segas32_state, signal_v60_irq_callback)
- MCFG_TIMER_DRIVER_ADD("v60_irq1", segas32_state, signal_v60_irq_callback)
+ TIMER(config, "v60_irq0").configure_generic(FUNC(segas32_state::signal_v60_irq_callback));
+ TIMER(config, "v60_irq1").configure_generic(FUNC(segas32_state::signal_v60_irq_callback));
/* video hardware */
- MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_segas32)
- MCFG_PALETTE_ADD("palette", 0x4000)
+ GFXDECODE(config, m_gfxdecode, m_palette, gfx_segas32);
+ PALETTE(config, m_palette).set_entries(0x4000);
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_REFRESH_RATE(60)
- MCFG_SCREEN_SIZE(52*8, 262)
- MCFG_SCREEN_VISIBLE_AREA(0*8, 52*8-1, 0*8, 28*8-1)
- MCFG_SCREEN_UPDATE_DRIVER(segas32_state, screen_update_system32)
+ SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
+ m_screen->set_refresh_hz(60);
+ m_screen->set_size(52*8, 262);
+ m_screen->set_visarea(0*8, 52*8-1, 0*8, 28*8-1);
+ m_screen->set_screen_update(FUNC(segas32_state::screen_update_system32));
/* sound hardware */
SPEAKER(config, "lspeaker").front_left();
SPEAKER(config, "rspeaker").front_right();
- MCFG_DEVICE_ADD("ym1", YM3438, MASTER_CLOCK/4)
- MCFG_YM2612_IRQ_HANDLER(WRITELINE(*this, segas32_state, ym3438_irq_handler))
- MCFG_SOUND_ROUTE(0, "lspeaker", 0.40)
- MCFG_SOUND_ROUTE(1, "rspeaker", 0.40)
+ ym3438_device &ym1(YM3438(config, "ym1", MASTER_CLOCK/4));
+ ym1.irq_handler().set(FUNC(segas32_state::ym3438_irq_handler));
+ ym1.add_route(0, "lspeaker", 0.40);
+ ym1.add_route(1, "rspeaker", 0.40);
- MCFG_DEVICE_ADD("ym2", YM3438, MASTER_CLOCK/4)
- MCFG_SOUND_ROUTE(0, "lspeaker", 0.40)
- MCFG_SOUND_ROUTE(1, "rspeaker", 0.40)
+ ym3438_device &ym2(YM3438(config, "ym2", MASTER_CLOCK/4));
+ ym2.add_route(0, "lspeaker", 0.40);
+ ym2.add_route(1, "rspeaker", 0.40);
- MCFG_DEVICE_ADD("rfsnd", RF5C68, RFC_CLOCK/4)
- MCFG_SOUND_ROUTE(0, "lspeaker", 0.55)
- MCFG_SOUND_ROUTE(1, "rspeaker", 0.55)
- MCFG_DEVICE_ADDRESS_MAP(0, rf5c68_map)
+ rf5c68_device &rfsnd(RF5C68(config, "rfsnd", RFC_CLOCK/4));
+ rfsnd.add_route(0, "lspeaker", 0.55);
+ rfsnd.add_route(1, "rspeaker", 0.55);
+ rfsnd.set_addrmap(0, &segas32_state::rf5c68_map);
S32COMM(config, m_s32comm, 0);
-MACHINE_CONFIG_END
+}
DEFINE_DEVICE_TYPE(SEGA_S32_REGULAR_DEVICE, segas32_regular_state, "segas32_pcb_regular", "Sega System 32 regular PCB")
@@ -2386,18 +2386,18 @@ void segas32_state::system32_analog_map(address_map &map)
map(0xc00050, 0xc00057).mirror(0x0fff80).rw("adc", FUNC(msm6253_device::d7_r), FUNC(msm6253_device::address_w)).umask16(0x00ff);
}
-MACHINE_CONFIG_START(segas32_analog_state::device_add_mconfig)
+void segas32_analog_state::device_add_mconfig(machine_config &config)
+{
segas32_state::device_add_mconfig(config);
- MCFG_DEVICE_MODIFY("maincpu")
- MCFG_DEVICE_PROGRAM_MAP(system32_analog_map)
+ m_maincpu->set_addrmap(AS_PROGRAM, &segas32_analog_state::system32_analog_map);
- MCFG_DEVICE_ADD("adc", MSM6253, 0)
- MCFG_MSM6253_IN0_ANALOG_PORT("ANALOG1")
- MCFG_MSM6253_IN1_ANALOG_PORT("ANALOG2")
- MCFG_MSM6253_IN2_ANALOG_PORT("ANALOG3")
- MCFG_MSM6253_IN3_ANALOG_PORT("ANALOG4")
-MACHINE_CONFIG_END
+ msm6253_device &adc(MSM6253(config, "adc", 0));
+ adc.set_input_tag<0>("ANALOG1");
+ adc.set_input_tag<1>("ANALOG2");
+ adc.set_input_tag<2>("ANALOG3");
+ adc.set_input_tag<3>("ANALOG4");
+}
DEFINE_DEVICE_TYPE(SEGA_S32_ANALOG_DEVICE, segas32_analog_state, "segas32_pcb_analog", "Sega System 32 analog PCB")
@@ -2425,11 +2425,11 @@ void segas32_trackball_state::system32_trackball_map(address_map &map)
map(0xc00050, 0xc00057).mirror(0x0fff80).rw("upd3", FUNC(upd4701_device::read_xy), FUNC(upd4701_device::reset_xy_w)).umask16(0x00ff);
}
-MACHINE_CONFIG_START(segas32_trackball_state::device_add_mconfig)
+void segas32_trackball_state::device_add_mconfig(machine_config &config)
+{
segas32_state::device_add_mconfig(config);
- MCFG_DEVICE_MODIFY("maincpu")
- MCFG_DEVICE_PROGRAM_MAP(system32_trackball_map)
+ m_maincpu->set_addrmap(AS_PROGRAM, &segas32_trackball_state::system32_trackball_map);
upd4701_device &upd1(UPD4701A(config, "upd1"));
upd1.set_portx_tag("TRACKX1");
@@ -2444,7 +2444,7 @@ MACHINE_CONFIG_START(segas32_trackball_state::device_add_mconfig)
upd3.set_porty_tag("TRACKY3");
// 837-8685 I/O board has an unpopulated space for a fourth UPD4701A
-MACHINE_CONFIG_END
+}
DEFINE_DEVICE_TYPE(SEGA_S32_TRACKBALL_DEVICE, segas32_trackball_state, "segas32_pcb_trackball", "Sega System 32 trackball PCB")
@@ -2464,17 +2464,17 @@ void segas32_state::system32_4player_map(address_map &map)
map(0xc00060, 0xc00067).mirror(0x0fff80).rw("ppi", FUNC(i8255_device::read), FUNC(i8255_device::write)).umask16(0x00ff);
}
-MACHINE_CONFIG_START(segas32_4player_state::device_add_mconfig)
+void segas32_4player_state::device_add_mconfig(machine_config &config)
+{
segas32_state::device_add_mconfig(config);
- MCFG_DEVICE_MODIFY("maincpu")
- MCFG_DEVICE_PROGRAM_MAP(system32_4player_map)
+ m_maincpu->set_addrmap(AS_PROGRAM, &segas32_4player_state::system32_4player_map);
i8255_device &ppi(I8255A(config, "ppi"));
ppi.in_pa_callback().set_ioport("EXTRA1");
ppi.in_pb_callback().set_ioport("EXTRA2");
ppi.in_pc_callback().set_ioport("EXTRA3");
-MACHINE_CONFIG_END
+}
DEFINE_DEVICE_TYPE(SEGA_S32_4PLAYER_DEVICE, segas32_4player_state, "segas32_pcb_4player", "Sega System 32 4-player/fighting PCB")
@@ -2499,18 +2499,18 @@ void segas32_state::ga2_main_map(address_map &map)
map(0xa00000, 0xa00fff).rw("dpram", FUNC(mb8421_device::right_r), FUNC(mb8421_device::right_w)).umask16(0x00ff);
}
-MACHINE_CONFIG_START(segas32_v25_state::device_add_mconfig)
+void segas32_v25_state::device_add_mconfig(machine_config &config)
+{
segas32_4player_state::device_add_mconfig(config);
- MCFG_DEVICE_MODIFY("maincpu")
- MCFG_DEVICE_PROGRAM_MAP(ga2_main_map)
+ m_maincpu->set_addrmap(AS_PROGRAM, &segas32_v25_state::ga2_main_map);
- MCFG_DEVICE_ADD("dpram", MB8421, 0)
+ MB8421(config, "dpram", 0);
/* add a V25 for protection */
- MCFG_DEVICE_ADD("mcu", V25, 10000000)
- MCFG_DEVICE_PROGRAM_MAP(v25_map)
-MACHINE_CONFIG_END
+ v25_device &mcu(V25(config, "mcu", 10000000));
+ mcu.set_addrmap(AS_PROGRAM, &segas32_v25_state::v25_map);
+}
DEFINE_DEVICE_TYPE(SEGA_S32_V25_DEVICE, segas32_v25_state, "segas32_pcb_v25", "Sega System 32 V25 PCB")
@@ -2523,19 +2523,20 @@ segas32_v25_state::segas32_v25_state(const machine_config &mconfig, const char *
-MACHINE_CONFIG_START(segas32_upd7725_state::device_add_mconfig)
+void segas32_upd7725_state::device_add_mconfig(machine_config &config)
+{
segas32_analog_state::device_add_mconfig(config);
/* add a upd7725; this is on the 837-8341 daughterboard which plugs into the socket on the master pcb's ROM board where an fd1149 could go */
- MCFG_DEVICE_ADD("dsp", UPD7725, 8000000) // TODO: Find real clock speed for the upd7725; this is a canned oscillator on the 837-8341 pcb
- MCFG_DEVICE_PROGRAM_MAP(upd7725_prg_map)
- MCFG_DEVICE_DATA_MAP(upd7725_data_map)
- MCFG_DEVICE_DISABLE() // TODO: disable for now, needs DMA pins and interrupts implemented in upd7725 core
+ upd7725_device &dsp(UPD7725(config, "dsp", 8000000)); // TODO: Find real clock speed for the upd7725; this is a canned oscillator on the 837-8341 pcb
+ dsp.set_addrmap(AS_PROGRAM, &segas32_upd7725_state::upd7725_prg_map);
+ dsp.set_addrmap(AS_DATA, &segas32_upd7725_state::upd7725_data_map);
+ dsp.set_disable(); // TODO: disable for now, needs DMA pins and interrupts implemented in upd7725 core
// TODO: find /INT source for upd7725
// TODO: figure out how the p0 and p1 lines from the upd7725 affect the mainboard; do they select one of four (or 8) latches to/from the mainboard?
// TODO: trace out the 837-8341 pcb
// See HLE of this dsp in /src/mame/machine/segas32.cpp : arescue_dsp_r and arescue_dsp_w
-MACHINE_CONFIG_END
+}
DEFINE_DEVICE_TYPE(SEGA_S32_UPD7725_DEVICE, segas32_upd7725_state, "segas32_pcb_upd7725", "Sega System 32 uPD7725 PCB")
@@ -2589,26 +2590,26 @@ void segas32_cd_state::cdrom_config(device_t *device)
MCFG_SOUND_ROUTE( 1, "^^rspeaker", 0.30 )
}
-MACHINE_CONFIG_START(segas32_cd_state::device_add_mconfig)
+void segas32_cd_state::device_add_mconfig(machine_config &config)
+{
segas32_state::device_add_mconfig(config);
- MCFG_DEVICE_MODIFY("maincpu")
- MCFG_DEVICE_PROGRAM_MAP(system32_cd_map)
+ m_maincpu->set_addrmap(AS_PROGRAM, &segas32_cd_state::system32_cd_map);
mb89352_device &scsictrl(MB89352A(config, "mb89352", 8000000));
scsictrl.set_scsi_port("scsi");
scsictrl.irq_cb().set(FUNC(segas32_cd_state::scsi_irq_w));
scsictrl.drq_cb().set(FUNC(segas32_cd_state::scsi_drq_w));
- MCFG_DEVICE_ADD("scsi", SCSI_PORT, 0)
- MCFG_SCSIDEV_ADD("scsi:" SCSI_PORT_DEVICE1, "cdrom", SCSICD, SCSI_ID_0)
- MCFG_SLOT_OPTION_MACHINE_CONFIG("cdrom", cdrom_config)
+ scsi_port_device &scsi(SCSI_PORT(config, "scsi"));
+ scsi.set_slot_device(1, "cdrom", SCSICD, DEVICE_INPUT_DEFAULTS_NAME(SCSI_ID_0));
+ scsi.slot(1).set_option_machine_config("cdrom", cdrom_config);
cxd1095_device &cxdio(CXD1095(config, "cxdio", 0));
cxdio.out_porta_cb().set(FUNC(segas32_cd_state::lamps1_w));
cxdio.out_portb_cb().set(FUNC(segas32_cd_state::lamps2_w));
cxdio.in_portd_cb().set_constant(0xff); // Ports C-E used for IEEE-488 printer interface
-MACHINE_CONFIG_END
+}
DEFINE_DEVICE_TYPE(SEGA_S32_CD_DEVICE, segas32_cd_state, "segas32_pcb_cd", "Sega System 32 CD PCB")
@@ -2620,15 +2621,16 @@ segas32_cd_state::segas32_cd_state(const machine_config &mconfig, const char *ta
-MACHINE_CONFIG_START(sega_multi32_state::device_add_mconfig)
+void sega_multi32_state::device_add_mconfig(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", V70, MULTI32_CLOCK/2)
- MCFG_DEVICE_PROGRAM_MAP(multi32_map)
- MCFG_DEVICE_VBLANK_INT_DRIVER("screen", segas32_state, start_of_vblank_int)
+ V70(config, m_maincpu, MULTI32_CLOCK/2);
+ m_maincpu->set_addrmap(AS_PROGRAM, &sega_multi32_state::multi32_map);
+ m_maincpu->set_vblank_int("screen", FUNC(segas32_state::start_of_vblank_int));
- MCFG_DEVICE_ADD("soundcpu", Z80, MASTER_CLOCK/4)
- MCFG_DEVICE_PROGRAM_MAP(multi32_sound_map)
- MCFG_DEVICE_IO_MAP(multi32_sound_portmap)
+ Z80(config, m_soundcpu, MASTER_CLOCK/4);
+ m_soundcpu->set_addrmap(AS_PROGRAM, &sega_multi32_state::multi32_sound_map);
+ m_soundcpu->set_addrmap(AS_IO, &sega_multi32_state::multi32_sound_portmap);
sega_315_5296_device &io_chip_0(SEGA_315_5296(config, "io_chip_0", 0)); // unknown clock
io_chip_0.in_pa_callback().set_ioport("P1_A");
@@ -2657,42 +2659,42 @@ MACHINE_CONFIG_START(sega_multi32_state::device_add_mconfig)
EEPROM_93C46_16BIT(config, "eeprom");
- MCFG_TIMER_DRIVER_ADD("v60_irq0", segas32_state, signal_v60_irq_callback)
- MCFG_TIMER_DRIVER_ADD("v60_irq1", segas32_state, signal_v60_irq_callback)
+ TIMER(config, "v60_irq0").configure_generic(FUNC(segas32_state::signal_v60_irq_callback));
+ TIMER(config, "v60_irq1").configure_generic(FUNC(segas32_state::signal_v60_irq_callback));
/* video hardware */
- MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_segas32)
- MCFG_PALETTE_ADD("palette", 0x8000)
+ GFXDECODE(config, m_gfxdecode, m_palette, gfx_segas32);
+ PALETTE(config, m_palette).set_entries(0x8000);
config.set_default_layout(layout_dualhsxs);
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_REFRESH_RATE(60)
- MCFG_SCREEN_SIZE(52*8, 262)
- MCFG_SCREEN_VISIBLE_AREA(0*8, 52*8-1, 0*8, 28*8-1)
- MCFG_SCREEN_UPDATE_DRIVER(segas32_state, screen_update_multi32_left)
+ SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
+ m_screen->set_refresh_hz(60);
+ m_screen->set_size(52*8, 262);
+ m_screen->set_visarea(0*8, 52*8-1, 0*8, 28*8-1);
+ m_screen->set_screen_update(FUNC(segas32_state::screen_update_multi32_left));
- MCFG_SCREEN_ADD("screen2", RASTER)
- MCFG_SCREEN_REFRESH_RATE(60)
- MCFG_SCREEN_SIZE(52*8, 262)
- MCFG_SCREEN_VISIBLE_AREA(0*8, 52*8-1, 0*8, 28*8-1)
- MCFG_SCREEN_UPDATE_DRIVER(segas32_state, screen_update_multi32_right)
+ screen_device &screen2(SCREEN(config, "screen2", SCREEN_TYPE_RASTER));
+ screen2.set_refresh_hz(60);
+ screen2.set_size(52*8, 262);
+ screen2.set_visarea(0*8, 52*8-1, 0*8, 28*8-1);
+ screen2.set_screen_update(FUNC(segas32_state::screen_update_multi32_right));
/* sound hardware */
SPEAKER(config, "lspeaker").front_left();
SPEAKER(config, "rspeaker").front_right();
- MCFG_DEVICE_ADD("ymsnd", YM3438, MASTER_CLOCK/4)
- MCFG_YM2612_IRQ_HANDLER(WRITELINE(*this, segas32_state, ym3438_irq_handler))
- MCFG_SOUND_ROUTE(1, "lspeaker", 0.40)
- MCFG_SOUND_ROUTE(0, "rspeaker", 0.40)
+ ym3438_device &ymsnd(YM3438(config, "ymsnd", MASTER_CLOCK/4));
+ ymsnd.irq_handler().set(FUNC(segas32_state::ym3438_irq_handler));
+ ymsnd.add_route(1, "lspeaker", 0.40);
+ ymsnd.add_route(0, "rspeaker", 0.40);
- MCFG_DEVICE_ADD("sega", MULTIPCM, MASTER_CLOCK/4)
- MCFG_DEVICE_ADDRESS_MAP(0, multipcm_map)
- MCFG_SOUND_ROUTE(1, "lspeaker", 1.0)
- MCFG_SOUND_ROUTE(0, "rspeaker", 1.0)
+ MULTIPCM(config, m_multipcm, MASTER_CLOCK/4);
+ m_multipcm->set_addrmap(0, &sega_multi32_state::multipcm_map);
+ m_multipcm->add_route(1, "lspeaker", 1.0);
+ m_multipcm->add_route(0, "rspeaker", 1.0);
S32COMM(config, m_s32comm, 0);
-MACHINE_CONFIG_END
+}
DEFINE_DEVICE_TYPE(SEGA_MULTI32_DEVICE, sega_multi32_state, "segas32_pcb_multi", "Sega Multi 32")
@@ -2717,18 +2719,18 @@ void sega_multi32_analog_state::multi32_analog_map(address_map &map)
map(0xc00060, 0xc00060).mirror(0x07ff80).w(FUNC(sega_multi32_analog_state::analog_bank_w));
}
-MACHINE_CONFIG_START(sega_multi32_analog_state::device_add_mconfig)
+void sega_multi32_analog_state::device_add_mconfig(machine_config &config)
+{
sega_multi32_state::device_add_mconfig(config);
- MCFG_DEVICE_MODIFY("maincpu")
- MCFG_DEVICE_PROGRAM_MAP(multi32_analog_map)
+ m_maincpu->set_addrmap(AS_PROGRAM, &sega_multi32_analog_state::multi32_analog_map);
- MCFG_DEVICE_ADD("adc", MSM6253, 0)
- MCFG_MSM6253_IN0_ANALOG_PORT("ANALOG1")
- MCFG_MSM6253_IN1_ANALOG_PORT("ANALOG2")
- MCFG_MSM6253_IN2_ANALOG_READ(sega_multi32_analog_state, in2_analog_read)
- MCFG_MSM6253_IN3_ANALOG_READ(sega_multi32_analog_state, in3_analog_read)
-MACHINE_CONFIG_END
+ msm6253_device &adc(MSM6253(config, "adc", 0));
+ adc.set_input_tag<0>("ANALOG1");
+ adc.set_input_tag<1>("ANALOG2");
+ adc.set_input_cb<2>(FUNC(sega_multi32_analog_state::in2_analog_read));
+ adc.set_input_cb<3>(FUNC(sega_multi32_analog_state::in3_analog_read));
+}
ioport_value sega_multi32_analog_state::in2_analog_read()
{
@@ -2762,17 +2764,17 @@ void segas32_state::multi32_6player_map(address_map &map)
map(0xc00060, 0xc00067).mirror(0x07ff80).rw("ppi", FUNC(i8255_device::read), FUNC(i8255_device::write)).umask32(0x00ff00ff);
}
-MACHINE_CONFIG_START(sega_multi32_6player_state::device_add_mconfig)
+void sega_multi32_6player_state::device_add_mconfig(machine_config &config)
+{
sega_multi32_state::device_add_mconfig(config);
- MCFG_DEVICE_MODIFY("maincpu")
- MCFG_DEVICE_PROGRAM_MAP(multi32_6player_map)
+ m_maincpu->set_addrmap(AS_PROGRAM, &sega_multi32_6player_state::multi32_6player_map);
i8255_device &ppi(I8255A(config, "ppi"));
ppi.in_pa_callback().set_ioport("EXTRA1");
ppi.in_pb_callback().set_ioport("EXTRA2");
ppi.in_pc_callback().set_ioport("EXTRA3");
-MACHINE_CONFIG_END
+}
DEFINE_DEVICE_TYPE(SEGA_MULTI32_6PLAYER_DEVICE, sega_multi32_6player_state, "segas32_pcb_multi_6player", "Sega Multi 32 6-player PCB")