summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/drivers/nes.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/drivers/nes.cpp')
-rw-r--r--src/mame/drivers/nes.cpp194
1 files changed, 94 insertions, 100 deletions
diff --git a/src/mame/drivers/nes.cpp b/src/mame/drivers/nes.cpp
index d7f787efb32..e7113c8cd1b 100644
--- a/src/mame/drivers/nes.cpp
+++ b/src/mame/drivers/nes.cpp
@@ -16,7 +16,6 @@
#include "includes/nes.h"
#include "cpu/m6502/n2a03.h"
-#include "screen.h"
#include "softlist.h"
#include "speaker.h"
@@ -49,120 +48,115 @@ static INPUT_PORTS_START( famicom )
INPUT_PORTS_END
-MACHINE_CONFIG_START(nes_state::nes)
+void nes_state::nes(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", N2A03, NTSC_APU_CLOCK)
- MCFG_DEVICE_PROGRAM_MAP(nes_map)
+ N2A03(config, m_maincpu, NTSC_APU_CLOCK);
+ m_maincpu->set_addrmap(AS_PROGRAM, &nes_state::nes_map);
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_REFRESH_RATE(60.0988)
+ SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
+ m_screen->set_refresh_hz(60.0988);
// This isn't used so much to calulate the vblank duration (the PPU code tracks that manually) but to determine
// the number of cycles in each scanline for the PPU scanline timer. Since the PPU has 20 vblank scanlines + 2
// non-rendering scanlines, we compensate. This ends up being 2500 cycles for the non-rendering portion, 2273
// cycles for the actual vblank period.
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC((113.66/(NTSC_APU_CLOCK.dvalue()/1000000)) * (ppu2c0x_device::VBLANK_LAST_SCANLINE_NTSC-ppu2c0x_device::VBLANK_FIRST_SCANLINE+1+2)))
- MCFG_SCREEN_SIZE(32*8, 262)
- MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 0*8, 30*8-1)
- MCFG_SCREEN_UPDATE_DRIVER(nes_state, screen_update_nes)
+ m_screen->set_vblank_time(ATTOSECONDS_IN_USEC((113.66/(NTSC_APU_CLOCK.dvalue()/1000000)) *
+ (ppu2c0x_device::VBLANK_LAST_SCANLINE_NTSC-ppu2c0x_device::VBLANK_FIRST_SCANLINE+1+2)));
+ m_screen->set_size(32*8, 262);
+ m_screen->set_visarea(0*8, 32*8-1, 0*8, 30*8-1);
+ m_screen->set_screen_update(FUNC(nes_state::screen_update_nes));
- MCFG_PPU2C02_ADD("ppu")
- MCFG_PPU2C0X_CPU("maincpu")
- MCFG_PPU2C0X_INT_CALLBACK(INPUTLINE("maincpu", INPUT_LINE_NMI))
+ PPU_2C02(config, m_ppu);
+ m_ppu->set_cpu_tag(m_maincpu);
+ m_ppu->int_callback().set_inputline(m_maincpu, INPUT_LINE_NMI);
/* sound hardware */
SPEAKER(config, "mono").front_center();
// note APU sound level here was specified as 0.90, not 0.50 like the others
// not sure how to adjust it when it's inside the CPU?
- MCFG_NES_CONTROL_PORT_ADD("ctrl1", nes_control_port1_devices, "joypad")
- MCFG_NESCTRL_BRIGHTPIXEL_CB(nes_state, bright_pixel)
- MCFG_NES_CONTROL_PORT_ADD("ctrl2", nes_control_port2_devices, "joypad")
- MCFG_NESCTRL_BRIGHTPIXEL_CB(nes_state, bright_pixel)
-
- MCFG_DEVICE_ADD("nes_slot", NES_CART_SLOT, NTSC_APU_CLOCK, nes_cart, nullptr)
- MCFG_SOFTWARE_LIST_ADD("cart_list", "nes")
- MCFG_SOFTWARE_LIST_ADD("ade_list", "nes_ade") // Camerica/Codemasters Aladdin Deck Enhancer mini-carts
- MCFG_SOFTWARE_LIST_ADD("ntb_list", "nes_ntbrom") // Sunsoft Nantettate! Baseball mini-carts
- MCFG_SOFTWARE_LIST_ADD("kstudio_list", "nes_kstudio") // Bandai Karaoke Studio expansion carts
- MCFG_SOFTWARE_LIST_ADD("datach_list", "nes_datach") // Bandai Datach Joint ROM System mini-carts
-MACHINE_CONFIG_END
+ NES_CONTROL_PORT(config, m_ctrl1, nes_control_port1_devices, "joypad");
+ m_ctrl1->set_brightpixel_callback(FUNC(nes_state::bright_pixel));
+ NES_CONTROL_PORT(config, m_ctrl2, nes_control_port2_devices, "joypad");
+ m_ctrl2->set_brightpixel_callback(FUNC(nes_state::bright_pixel));
+
+ NES_CART_SLOT(config, m_cartslot, NTSC_APU_CLOCK, nes_cart, nullptr);
+ SOFTWARE_LIST(config, "cart_list").set_original("nes");
+ SOFTWARE_LIST(config, "ade_list").set_original("nes_ade"); // Camerica/Codemasters Aladdin Deck Enhancer mini-carts
+ SOFTWARE_LIST(config, "ntb_list").set_original("nes_ntbrom"); // Sunsoft Nantettate! Baseball mini-carts
+ SOFTWARE_LIST(config, "kstudio_list").set_original("nes_kstudio"); // Bandai Karaoke Studio expansion carts
+ SOFTWARE_LIST(config, "datach_list").set_original("nes_datach"); // Bandai Datach Joint ROM System mini-carts
+}
-MACHINE_CONFIG_START(nes_state::nespal)
+void nes_state::nespal(machine_config &config)
+{
nes(config);
/* basic machine hardware */
- MCFG_DEVICE_MODIFY("maincpu")
- MCFG_DEVICE_CLOCK(PAL_APU_CLOCK)
- MCFG_DEVICE_PROGRAM_MAP(nes_map)
+ m_maincpu->set_clock(PAL_APU_CLOCK);
- MCFG_DEVICE_REMOVE("ppu")
- MCFG_PPU2C07_ADD("ppu")
- MCFG_PPU2C0X_CPU("maincpu")
- MCFG_PPU2C0X_INT_CALLBACK(INPUTLINE("maincpu", INPUT_LINE_NMI))
+ PPU_2C07(config.replace(), m_ppu);
+ m_ppu->set_cpu_tag(m_maincpu);
+ m_ppu->int_callback().set_inputline(m_maincpu, INPUT_LINE_NMI);
- MCFG_DEVICE_MODIFY("nes_slot")
- MCFG_DEVICE_CLOCK(PAL_APU_CLOCK)
+ m_cartslot->set_clock(PAL_APU_CLOCK);
/* video hardware */
- MCFG_SCREEN_MODIFY("screen")
- MCFG_SCREEN_REFRESH_RATE(50.0070)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC((106.53/(PAL_APU_CLOCK.dvalue()/1000000)) * (ppu2c0x_device::VBLANK_LAST_SCANLINE_PAL-ppu2c0x_device::VBLANK_FIRST_SCANLINE+1+2)))
- MCFG_SCREEN_SIZE(32*8, 312)
- MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 0*8, 30*8-1)
-MACHINE_CONFIG_END
-
-MACHINE_CONFIG_START(nes_state::famicom)
+ m_screen->set_refresh_hz(50.0070);
+ m_screen->set_vblank_time(ATTOSECONDS_IN_USEC((106.53/(PAL_APU_CLOCK.dvalue()/1000000)) *
+ (ppu2c0x_device::VBLANK_LAST_SCANLINE_PAL-ppu2c0x_device::VBLANK_FIRST_SCANLINE+1+2)));
+ m_screen->set_size(32*8, 312);
+ m_screen->set_visarea(0*8, 32*8-1, 0*8, 30*8-1);
+}
+
+void nes_state::famicom(machine_config &config)
+{
nes(config);
- MCFG_DEVICE_REMOVE("ctrl1")
- MCFG_DEVICE_REMOVE("ctrl2")
- MCFG_NES_CONTROL_PORT_ADD("ctrl1", fc_control_port1_devices, "joypad")
- MCFG_NES_CONTROL_PORT_ADD("ctrl2", fc_control_port2_devices, "joypad")
- MCFG_FC_EXPANSION_PORT_ADD("exp", fc_expansion_devices, nullptr)
- MCFG_NESCTRL_BRIGHTPIXEL_CB(nes_state, bright_pixel)
-
- MCFG_SOFTWARE_LIST_ADD("flop_list", "famicom_flop")
- MCFG_SOFTWARE_LIST_ADD("cass_list", "famicom_cass")
-MACHINE_CONFIG_END
-
-MACHINE_CONFIG_START(nes_state::nespalc)
+ NES_CONTROL_PORT(config.replace(), m_ctrl1, fc_control_port1_devices, "joypad");
+ NES_CONTROL_PORT(config.replace(), m_ctrl2, fc_control_port2_devices, "joypad");
+ NES_CONTROL_PORT(config, m_exp, fc_expansion_devices, nullptr);
+ m_exp->set_brightpixel_callback(FUNC(nes_state::bright_pixel));
+
+ SOFTWARE_LIST(config, "flop_list").set_original("famicom_flop");
+ SOFTWARE_LIST(config, "cass_list").set_original("famicom_cass");
+}
+
+void nes_state::nespalc(machine_config &config)
+{
nespal(config);
- MCFG_DEVICE_MODIFY( "maincpu" )
- MCFG_DEVICE_CLOCK(PALC_APU_CLOCK)
- MCFG_DEVICE_PROGRAM_MAP(nes_map)
+ m_maincpu->set_clock(PALC_APU_CLOCK);
+ m_maincpu->set_addrmap(AS_PROGRAM, &nes_state::nes_map);
/* UMC 6538 and friends -- extends time for rendering dummy scanlines */
- MCFG_DEVICE_REMOVE("ppu")
- MCFG_PPUPALC_ADD("ppu")
- MCFG_PPU2C0X_CPU("maincpu")
- MCFG_PPU2C0X_INT_CALLBACK(INPUTLINE("maincpu", INPUT_LINE_NMI))
+ PPU_PALC(config.replace(), m_ppu);
+ m_ppu->set_cpu_tag(m_maincpu);
+ m_ppu->int_callback().set_inputline("maincpu", INPUT_LINE_NMI);
- MCFG_DEVICE_MODIFY("nes_slot")
- MCFG_DEVICE_CLOCK(PALC_APU_CLOCK)
+ m_cartslot->set_clock(PALC_APU_CLOCK);
/* video hardware */
- MCFG_SCREEN_MODIFY("screen")
- MCFG_SCREEN_REFRESH_RATE(50.0070)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC((113.66/(PALC_APU_CLOCK.dvalue()/1000000)) * (ppu2c0x_device::VBLANK_LAST_SCANLINE_PAL-ppu2c0x_device::VBLANK_FIRST_SCANLINE_PALC+1+2)))
-MACHINE_CONFIG_END
+ m_screen->set_refresh_hz(50.0070);
+ m_screen->set_vblank_time(ATTOSECONDS_IN_USEC((113.66/(PALC_APU_CLOCK.dvalue()/1000000)) *
+ (ppu2c0x_device::VBLANK_LAST_SCANLINE_PAL-ppu2c0x_device::VBLANK_FIRST_SCANLINE_PALC+1+2)));
+}
-MACHINE_CONFIG_START(nes_state::famipalc)
+void nes_state::famipalc(machine_config &config)
+{
nespalc(config);
- MCFG_DEVICE_REMOVE("ctrl1")
- MCFG_DEVICE_REMOVE("ctrl2")
- MCFG_NES_CONTROL_PORT_ADD("ctrl1", fc_control_port1_devices, "joypad")
- MCFG_NES_CONTROL_PORT_ADD("ctrl2", fc_control_port2_devices, "joypad")
- MCFG_FC_EXPANSION_PORT_ADD("exp", fc_expansion_devices, nullptr)
- MCFG_NESCTRL_BRIGHTPIXEL_CB(nes_state, bright_pixel)
+ NES_CONTROL_PORT(config.replace(), m_ctrl1, fc_control_port1_devices, "joypad");
+ NES_CONTROL_PORT(config.replace(), m_ctrl2, fc_control_port2_devices, "joypad");
+ NES_CONTROL_PORT(config, m_exp, fc_expansion_devices, nullptr);
+ m_exp->set_brightpixel_callback(FUNC(nes_state::bright_pixel));
- MCFG_SOFTWARE_LIST_ADD("cass_list", "famicom_cass")
-MACHINE_CONFIG_END
+ SOFTWARE_LIST(config, "cass_list").set_original("famicom_cass");
+}
-MACHINE_CONFIG_START(nes_state::suborkbd)
+void nes_state::suborkbd(machine_config &config)
+{
famipalc(config);
/* TODO: emulate the parallel port bus! */
- MCFG_DEVICE_MODIFY("exp")
- MCFG_SLOT_DEFAULT_OPTION("subor_keyboard")
- MCFG_SLOT_FIXED(true)
-MACHINE_CONFIG_END
+ m_exp->set_default_option("subor_keyboard");
+ m_exp->set_fixed(true);
+}
void nes_state::setup_disk(nes_disksys_device *slot)
{
@@ -192,7 +186,6 @@ void nes_state::setup_disk(nes_disksys_device *slot)
}
}
-
MACHINE_START_MEMBER( nes_state, fds )
{
m_ciram = std::make_unique<uint8_t[]>(0x800);
@@ -213,22 +206,23 @@ MACHINE_RESET_MEMBER( nes_state, fds )
m_maincpu->reset();
}
-MACHINE_CONFIG_START(nes_state::fds)
+void nes_state::fds(machine_config &config)
+{
famicom(config);
- MCFG_MACHINE_START_OVERRIDE( nes_state, fds )
- MCFG_MACHINE_RESET_OVERRIDE( nes_state, fds )
- MCFG_DEVICE_REMOVE("nes_slot")
- MCFG_DEVICE_ADD("disk", NES_DISKSYS, 0)
+ MCFG_MACHINE_START_OVERRIDE(nes_state, fds)
+ MCFG_MACHINE_RESET_OVERRIDE(nes_state, fds)
- MCFG_DEVICE_REMOVE("cart_list")
- MCFG_DEVICE_REMOVE("cass_list")
- MCFG_DEVICE_REMOVE("ade_list")
- MCFG_DEVICE_REMOVE("ntb_list")
- MCFG_DEVICE_REMOVE("kstudio_list")
- MCFG_DEVICE_REMOVE("datach_list")
-MACHINE_CONFIG_END
+ config.device_remove("nes_slot");
+ NES_DISKSYS(config, "disk", 0);
+ config.device_remove("cart_list");
+ config.device_remove("cass_list");
+ config.device_remove("ade_list");
+ config.device_remove("ntb_list");
+ config.device_remove("kstudio_list");
+ config.device_remove("datach_list");
+}
MACHINE_START_MEMBER( nes_state, famitwin )
{
@@ -258,17 +252,17 @@ MACHINE_RESET_MEMBER( nes_state, famitwin )
m_maincpu->reset();
}
-MACHINE_CONFIG_START(nes_state::famitwin)
+void nes_state::famitwin(machine_config &config)
+{
famicom(config);
MCFG_MACHINE_START_OVERRIDE( nes_state, famitwin )
MCFG_MACHINE_RESET_OVERRIDE( nes_state, famitwin )
- MCFG_DEVICE_MODIFY("nes_slot")
- MCFG_NES_CARTRIDGE_NOT_MANDATORY
+ m_cartslot->set_must_be_loaded(false);
- MCFG_DEVICE_ADD("disk", NES_DISKSYS, 0)
-MACHINE_CONFIG_END
+ NES_DISKSYS(config, "disk", 0);
+}