summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/drivers/vsnes.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/drivers/vsnes.cpp')
-rw-r--r--src/mame/drivers/vsnes.cpp197
1 files changed, 96 insertions, 101 deletions
diff --git a/src/mame/drivers/vsnes.cpp b/src/mame/drivers/vsnes.cpp
index d616886b95c..8185f2aa921 100644
--- a/src/mame/drivers/vsnes.cpp
+++ b/src/mame/drivers/vsnes.cpp
@@ -1701,160 +1701,155 @@ static INPUT_PORTS_START( supxevs )
PORT_DIPSETTING( 0xc0, "RP2C04-0004" )
INPUT_PORTS_END
-MACHINE_CONFIG_START(vsnes_state::vsnes)
-
+void vsnes_state::vsnes(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", N2A03, NTSC_APU_CLOCK)
- MCFG_DEVICE_PROGRAM_MAP(vsnes_cpu1_map)
- /* some carts also trigger IRQs */
+ N2A03(config, m_maincpu, NTSC_APU_CLOCK);
+ m_maincpu->set_addrmap(AS_PROGRAM, &vsnes_state::vsnes_cpu1_map);
+ /* some carts also trigger IRQs */
MCFG_MACHINE_RESET_OVERRIDE(vsnes_state,vsnes)
MCFG_MACHINE_START_OVERRIDE(vsnes_state,vsnes)
/* video hardware */
- MCFG_SCREEN_ADD("screen1", RASTER)
- MCFG_SCREEN_REFRESH_RATE(60)
- MCFG_SCREEN_SIZE(32*8, 262)
- MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 0*8, 30*8-1)
- MCFG_SCREEN_UPDATE_DEVICE("ppu1", ppu2c0x_device, screen_update)
+ screen_device &screen1(SCREEN(config, "screen1", SCREEN_TYPE_RASTER));
+ screen1.set_refresh_hz(60);
+ screen1.set_size(32*8, 262);
+ screen1.set_visarea(0*8, 32*8-1, 0*8, 30*8-1);
+ screen1.set_screen_update("ppu1", FUNC(ppu2c0x_device::screen_update));
- MCFG_PPU2C04_ADD("ppu1")
- MCFG_PPU2C0X_SET_SCREEN("screen1")
- MCFG_PPU2C0X_CPU("maincpu")
- MCFG_PPU2C0X_INT_CALLBACK(INPUTLINE("maincpu", INPUT_LINE_NMI))
+ PPU_2C04(config, m_ppu1);
+ m_ppu1->set_screen("screen1");
+ m_ppu1->set_cpu_tag(m_maincpu);
+ m_ppu1->int_callback().set_inputline(m_maincpu, INPUT_LINE_NMI);
/* sound hardware */
SPEAKER(config, "mono").front_center();
-MACHINE_CONFIG_END
+}
-MACHINE_CONFIG_START(vsnes_state::jajamaru)
+void vsnes_state::jajamaru(machine_config &config)
+{
vsnes(config);
- MCFG_DEVICE_REMOVE( "ppu1" )
- MCFG_PPU2C05_01_ADD("ppu1")
- MCFG_PPU2C0X_SET_SCREEN("screen1")
- MCFG_PPU2C0X_CPU("maincpu")
- MCFG_PPU2C0X_INT_CALLBACK(INPUTLINE("maincpu", INPUT_LINE_NMI))
-MACHINE_CONFIG_END
+ PPU_2C05_01(config.replace(), m_ppu1);
+ m_ppu1->set_screen("screen1");
+ m_ppu1->set_cpu_tag(m_maincpu);
+ m_ppu1->int_callback().set_inputline(m_maincpu, INPUT_LINE_NMI);
+}
-MACHINE_CONFIG_START(vsnes_state::mightybj)
+void vsnes_state::mightybj(machine_config &config)
+{
vsnes(config);
- MCFG_DEVICE_REMOVE( "ppu1" )
- MCFG_PPU2C05_02_ADD("ppu1")
- MCFG_PPU2C0X_SET_SCREEN("screen1")
- MCFG_PPU2C0X_CPU("maincpu")
- MCFG_PPU2C0X_INT_CALLBACK(INPUTLINE("maincpu", INPUT_LINE_NMI))
-MACHINE_CONFIG_END
+ PPU_2C05_02(config.replace(), m_ppu1);
+ m_ppu1->set_screen("screen1");
+ m_ppu1->set_cpu_tag(m_maincpu);
+ m_ppu1->int_callback().set_inputline(m_maincpu, INPUT_LINE_NMI);
+}
-MACHINE_CONFIG_START(vsnes_state::vsgshoe)
+void vsnes_state::vsgshoe(machine_config &config)
+{
vsnes(config);
- MCFG_DEVICE_REMOVE( "ppu1" )
- MCFG_PPU2C05_03_ADD("ppu1")
- MCFG_PPU2C0X_SET_SCREEN("screen1")
- MCFG_PPU2C0X_CPU("maincpu")
- MCFG_PPU2C0X_INT_CALLBACK(INPUTLINE("maincpu", INPUT_LINE_NMI))
-MACHINE_CONFIG_END
+ PPU_2C05_03(config.replace(), m_ppu1);
+ m_ppu1->set_screen("screen1");
+ m_ppu1->set_cpu_tag(m_maincpu);
+ m_ppu1->int_callback().set_inputline(m_maincpu, INPUT_LINE_NMI);
+}
-MACHINE_CONFIG_START(vsnes_state::topgun)
+void vsnes_state::topgun(machine_config &config)
+{
vsnes(config);
- MCFG_DEVICE_REMOVE( "ppu1" )
- MCFG_PPU2C05_04_ADD("ppu1")
- MCFG_PPU2C0X_SET_SCREEN("screen1")
- MCFG_PPU2C0X_CPU("maincpu")
- MCFG_PPU2C0X_INT_CALLBACK(INPUTLINE("maincpu", INPUT_LINE_NMI))
-MACHINE_CONFIG_END
-
-MACHINE_CONFIG_START(vsnes_state::vsdual)
+ PPU_2C05_04(config.replace(), m_ppu1);
+ m_ppu1->set_screen("screen1");
+ m_ppu1->set_cpu_tag(m_maincpu);
+ m_ppu1->int_callback().set_inputline(m_maincpu, INPUT_LINE_NMI);
+}
+void vsnes_state::vsdual(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", N2A03, NTSC_APU_CLOCK)
- MCFG_DEVICE_PROGRAM_MAP(vsnes_cpu1_map)
+ N2A03(config, m_maincpu, NTSC_APU_CLOCK);
+ m_maincpu->set_addrmap(AS_PROGRAM, &vsnes_state::vsnes_cpu1_map);
- MCFG_DEVICE_ADD("sub", N2A03, NTSC_APU_CLOCK)
- MCFG_DEVICE_PROGRAM_MAP(vsnes_cpu2_map)
+ N2A03(config, m_subcpu, NTSC_APU_CLOCK);
+ m_subcpu->set_addrmap(AS_PROGRAM, &vsnes_state::vsnes_cpu2_map);
MCFG_MACHINE_RESET_OVERRIDE(vsnes_state,vsdual)
MCFG_MACHINE_START_OVERRIDE(vsnes_state,vsdual)
config.set_default_layout(layout_dualhsxs);
- MCFG_SCREEN_ADD("screen1", RASTER)
- MCFG_SCREEN_REFRESH_RATE(60)
- MCFG_SCREEN_SIZE(32*8, 262)
- MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 0*8, 30*8-1)
- MCFG_SCREEN_UPDATE_DEVICE("ppu1", ppu2c0x_device, screen_update)
+ screen_device &screen1(SCREEN(config, "screen1", SCREEN_TYPE_RASTER));
+ screen1.set_refresh_hz(60);
+ screen1.set_size(32*8, 262);
+ screen1.set_visarea(0*8, 32*8-1, 0*8, 30*8-1);
+ screen1.set_screen_update("ppu1", FUNC(ppu2c0x_device::screen_update));
- MCFG_SCREEN_ADD("screen2", RASTER)
- MCFG_SCREEN_REFRESH_RATE(60)
- MCFG_SCREEN_SIZE(32*8, 262)
- MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 0*8, 30*8-1)
- MCFG_SCREEN_UPDATE_DEVICE("ppu2", ppu2c0x_device, screen_update)
+ screen_device &screen2(SCREEN(config, "screen2", SCREEN_TYPE_RASTER));
+ screen2.set_refresh_hz(60);
+ screen2.set_size(32*8, 262);
+ screen2.set_visarea(0*8, 32*8-1, 0*8, 30*8-1);
+ screen2.set_screen_update("ppu2", FUNC(ppu2c0x_device::screen_update));
- MCFG_PPU2C04_ADD("ppu1")
- MCFG_PPU2C0X_SET_SCREEN("screen1")
- MCFG_PPU2C0X_CPU("maincpu")
- MCFG_PPU2C0X_INT_CALLBACK(INPUTLINE("maincpu", INPUT_LINE_NMI))
+ PPU_2C04(config, m_ppu1);
+ m_ppu1->set_screen("screen1");
+ m_ppu1->set_cpu_tag(m_maincpu);
+ m_ppu1->int_callback().set_inputline(m_maincpu, INPUT_LINE_NMI);
- MCFG_PPU2C04_ADD("ppu2")
- MCFG_PPU2C0X_SET_SCREEN("screen2")
- MCFG_PPU2C0X_CPU("sub")
- MCFG_PPU2C0X_INT_CALLBACK(INPUTLINE("sub", INPUT_LINE_NMI))
+ PPU_2C04(config, m_ppu2);
+ m_ppu2->set_screen("screen2");
+ m_ppu2->set_cpu_tag(m_subcpu);
+ m_ppu2->int_callback().set_inputline(m_subcpu, INPUT_LINE_NMI);
/* sound hardware */
SPEAKER(config, "mono").front_center();
-MACHINE_CONFIG_END
+}
-MACHINE_CONFIG_START(vsnes_state::vsdual_pi)
+void vsnes_state::vsdual_pi(machine_config &config)
+{
vsdual(config);
- MCFG_QUANTUM_PERFECT_CPU("maincpu")
+ config.m_perfect_cpu_quantum = subtag("maincpu");
// need high level of interleave to keep screens in sync in Balloon Fight.
// however vsmahjng doesn't like perfect interleave? you end up needing to reset it to boot? maybe something in a bad default state? watchdog?
// as the board would always be running in 'perfect interleave' the fact the Mahjong game doesn't work like this needs investigating.
-MACHINE_CONFIG_END
-
-
-MACHINE_CONFIG_START(vsnes_state::vsnes_bootleg)
+}
+void vsnes_state::vsnes_bootleg(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", M6502,XTAL(16'000'000)/4) // 4mhz? seems too high but flickers badly otherwise, issue elsewhere?
- MCFG_DEVICE_PROGRAM_MAP(vsnes_cpu1_bootleg_map)
- /* some carts also trigger IRQs */
+ M6502(config, m_maincpu, XTAL(16'000'000)/4); // 4mhz? seems too high but flickers badly otherwise, issue elsewhere?
+ m_maincpu->set_addrmap(AS_PROGRAM, &vsnes_state::vsnes_cpu1_bootleg_map);
+ /* some carts also trigger IRQs */
MCFG_MACHINE_RESET_OVERRIDE(vsnes_state,vsnes)
MCFG_MACHINE_START_OVERRIDE(vsnes_state,vsnes)
- MCFG_DEVICE_ADD("sub", Z80,XTAL(16'000'000)/4) /* ? MHz */ // Z8400APS-Z80CPU
- MCFG_DEVICE_PROGRAM_MAP(vsnes_bootleg_z80_map)
- MCFG_DEVICE_VBLANK_INT_DRIVER("screen1", vsnes_state, irq0_line_hold)
-// MCFG_DEVICE_PERIODIC_INT_DRIVER(vsnes_state, nmi_line_pulse)
+ Z80(config, m_subcpu, XTAL(16'000'000)/4); /* ? MHz */ // Z8400APS-Z80CPU
+ m_subcpu->set_addrmap(AS_PROGRAM, &vsnes_state::vsnes_bootleg_z80_map);
+ m_subcpu->set_vblank_int("screen1", FUNC(vsnes_state::irq0_line_hold));
+// m_subcpu->set_periodic_int(FUNC(vsnes_state::nmi_line_pulse));
/* video hardware */
- MCFG_SCREEN_ADD("screen1", RASTER)
- MCFG_SCREEN_REFRESH_RATE(60)
- MCFG_SCREEN_SIZE(32*8, 262)
- MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 0*8, 30*8-1)
- MCFG_SCREEN_UPDATE_DEVICE("ppu1", ppu2c0x_device, screen_update)
-
- MCFG_PPU2C04_ADD("ppu1")
- MCFG_PPU2C0X_CPU("maincpu")
- MCFG_PPU2C0X_SET_SCREEN("screen1")
- MCFG_PPU2C0X_INT_CALLBACK(INPUTLINE("maincpu", INPUT_LINE_NMI))
- MCFG_PPU2C0X_IGNORE_SPRITE_WRITE_LIMIT // bootleg seems to need this - code to set the sprite address is replaced with complete copy loops??
+ screen_device &screen1(SCREEN(config, "screen1", SCREEN_TYPE_RASTER));
+ screen1.set_refresh_hz(60);
+ screen1.set_size(32*8, 262);
+ screen1.set_visarea(0*8, 32*8-1, 0*8, 30*8-1);
+ screen1.set_screen_update("ppu1", FUNC(ppu2c0x_device::screen_update));
+
+ PPU_2C04(config, m_ppu1);
+ m_ppu1->set_cpu_tag(m_maincpu);
+ m_ppu1->set_screen("screen1");
+ m_ppu1->int_callback().set_inputline(m_maincpu, INPUT_LINE_NMI);
+ m_ppu1->use_sprite_write_limitation_disable(); // bootleg seems to need this - code to set the sprite address is replaced with complete copy loops??
/* sound hardware */
SPEAKER(config, "mono").front_center();
// PCB has 2, code accesses 3? which 2 really exist?
- MCFG_DEVICE_ADD("sn1", SN76489, XTAL(16'000'000)/4)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50)
-
- MCFG_DEVICE_ADD("sn2", SN76489, XTAL(16'000'000)/4)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50)
-
- MCFG_DEVICE_ADD("sn3", SN76489, XTAL(16'000'000)/4)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50)
-MACHINE_CONFIG_END
+ SN76489(config, "sn1", XTAL(16'000'000)/4).add_route(ALL_OUTPUTS, "mono", 0.50);
+ SN76489(config, "sn2", XTAL(16'000'000)/4).add_route(ALL_OUTPUTS, "mono", 0.50);
+ SN76489(config, "sn3", XTAL(16'000'000)/4).add_route(ALL_OUTPUTS, "mono", 0.50);
+}
/******************************************************************************/