summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/drivers/atari400.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/drivers/atari400.cpp')
-rw-r--r--src/mame/drivers/atari400.cpp260
1 files changed, 120 insertions, 140 deletions
diff --git a/src/mame/drivers/atari400.cpp b/src/mame/drivers/atari400.cpp
index eb3fcc4afa1..e5867a55297 100644
--- a/src/mame/drivers/atari400.cpp
+++ b/src/mame/drivers/atari400.cpp
@@ -2017,7 +2017,7 @@ TIMER_DEVICE_CALLBACK_MEMBER( a400_state::a5200_interrupt )
MACHINE_RESET_MEMBER( a400_state, a400 )
{
- subdevice<pokey_device>("pokey")->write(machine().dummy_space(), 15, 0);
+ m_pokey->write(machine().dummy_space(), 15, 0);
}
@@ -2109,21 +2109,21 @@ WRITE8_MEMBER(a400_state::a800xl_pia_pb_w)
**************************************************************/
-MACHINE_CONFIG_START(a400_state::atari_common_nodac)
+void a400_state::atari_common_nodac(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", M6502, pokey_device::FREQ_17_EXACT)
+ M6502(config, m_maincpu, pokey_device::FREQ_17_EXACT);
MCFG_MACHINE_RESET_OVERRIDE( a400_state, a400 )
/* video hardware */
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(1))
- MCFG_SCREEN_VISIBLE_AREA(antic_device::MIN_X, antic_device::MAX_X, antic_device::MIN_Y, antic_device::MAX_Y)
- MCFG_SCREEN_UPDATE_DEVICE("antic", antic_device, screen_update)
- MCFG_SCREEN_PALETTE("palette")
+ SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
+ m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(1));
+ m_screen->set_visarea(antic_device::MIN_X, antic_device::MAX_X, antic_device::MIN_Y, antic_device::MAX_Y);
+ m_screen->set_screen_update("antic", FUNC(antic_device::screen_update));
+ m_screen->set_palette("palette");
- MCFG_PALETTE_ADD("palette", sizeof(atari_palette) / 3)
- MCFG_PALETTE_INIT_OWNER(a400_state, a400)
+ PALETTE(config, "palette", sizeof(atari_palette) / 3).set_init(FUNC(a400_state::palette_init_a400));
PIA6821(config, m_pia, 0);
m_pia->readpa_handler().set_ioport("djoy_0_1");
@@ -2131,34 +2131,34 @@ MACHINE_CONFIG_START(a400_state::atari_common_nodac)
m_pia->ca2_handler().set("a8sio", FUNC(a8sio_device::motor_w));
m_pia->cb2_handler().set("fdc", FUNC(atari_fdc_device::pia_cb2_w));
- MCFG_DEVICE_ADD("a8sio", A8SIO, 0)
- MCFG_A8SIO_DATA_IN_CB(WRITELINE("pokey", pokey_device, sid_w))
- MCFG_A8SIO_SLOT_ADD("a8sio", "sio", nullptr)
+ A8SIO(config, "a8sio", 0).data_in().set("pokey", FUNC(pokey_device::sid_w));
+ A8SIO_SLOT(config, "sio", nullptr).set_a8sio_slot("a8sio", "sio");
/* sound hardware */
SPEAKER(config, "speaker").front_center();
- MCFG_DEVICE_ADD("pokey", POKEY, pokey_device::FREQ_17_EXACT)
- MCFG_POKEY_POT0_R_CB(IOPORT("analog_0"))
- MCFG_POKEY_POT1_R_CB(IOPORT("analog_1"))
- MCFG_POKEY_POT2_R_CB(IOPORT("analog_2"))
- MCFG_POKEY_POT3_R_CB(IOPORT("analog_3"))
- MCFG_POKEY_POT4_R_CB(IOPORT("analog_4"))
- MCFG_POKEY_POT5_R_CB(IOPORT("analog_5"))
- MCFG_POKEY_POT6_R_CB(IOPORT("analog_6"))
- MCFG_POKEY_POT7_R_CB(IOPORT("analog_7"))
- MCFG_POKEY_SERIN_R_CB(READ8("fdc", atari_fdc_device, serin_r))
- MCFG_POKEY_SEROUT_W_CB(WRITE8("fdc", atari_fdc_device, serout_w))
- MCFG_POKEY_KEYBOARD_CB(a400_state, a800_keyboard)
- MCFG_POKEY_INTERRUPT_CB(a400_state, interrupt_cb)
-
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "speaker", 1.0)
-MACHINE_CONFIG_END
-
-MACHINE_CONFIG_START(a400_state::atari_common)
+ POKEY(config, m_pokey, pokey_device::FREQ_17_EXACT);
+ m_pokey->pot_r<0>().set_ioport("analog_0");
+ m_pokey->pot_r<1>().set_ioport("analog_1");
+ m_pokey->pot_r<2>().set_ioport("analog_2");
+ m_pokey->pot_r<3>().set_ioport("analog_3");
+ m_pokey->pot_r<4>().set_ioport("analog_4");
+ m_pokey->pot_r<5>().set_ioport("analog_5");
+ m_pokey->pot_r<6>().set_ioport("analog_6");
+ m_pokey->pot_r<7>().set_ioport("analog_7");
+ m_pokey->serin_r().set("fdc", FUNC(atari_fdc_device::serin_r));
+ m_pokey->serout_w().set("fdc", FUNC(atari_fdc_device::serout_w));
+ m_pokey->set_keyboard_callback(FUNC(a400_state::a800_keyboard));
+ m_pokey->set_interrupt_callback(FUNC(a400_state::interrupt_cb));
+ m_pokey->add_route(ALL_OUTPUTS, "speaker", 1.0);
+}
+
+void a400_state::atari_common(machine_config &config)
+{
atari_common_nodac(config);
- MCFG_DEVICE_ADD("dac", DAC_1BIT, 0) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "speaker", 0.03)
- MCFG_DEVICE_ADD("vref", VOLTAGE_REGULATOR, 0) MCFG_VOLTAGE_REGULATOR_OUTPUT(5.0)
- MCFG_SOUND_ROUTE(0, "dac", 1.0, DAC_VREF_POS_INPUT)
+ DAC_1BIT(config, "dac", 0).add_route(ALL_OUTPUTS, "speaker", 0.03);
+ voltage_regulator_device &vref(VOLTAGE_REGULATOR(config, "vref", 0));
+ vref.set_output(5.0);
+ vref.add_route(0, "dac", 1.0, DAC_VREF_POS_INPUT);
/* internal ram */
RAM(config, m_ram).set_default_size("48K");
@@ -2171,122 +2171,113 @@ MACHINE_CONFIG_START(a400_state::atari_common)
m_antic->set_gtia_tag(m_gtia);
/* devices */
- MCFG_DEVICE_ADD("fdc", ATARI_FDC, 0)
+ ATARI_FDC(config, "fdc", 0);
- MCFG_A800_CARTRIDGE_ADD("cartleft", a800_left, nullptr)
+ A800_CART_SLOT(config, "cartleft", a800_left, nullptr);
/* software lists */
- MCFG_SOFTWARE_LIST_ADD("flop_list","a800_flop")
- MCFG_SOFTWARE_LIST_ADD("cart_list","a800")
- MCFG_SOFTWARE_LIST_ADD("xegs_list","xegs")
-MACHINE_CONFIG_END
-
+ SOFTWARE_LIST(config, "flop_list").set_original("a800_flop");
+ SOFTWARE_LIST(config, "cart_list").set_original("a800");
+ SOFTWARE_LIST(config, "xegs_list").set_original("xegs");
+}
// memory map A400 + NTSC screen
-MACHINE_CONFIG_START(a400_state::a400)
+void a400_state::a400(machine_config &config)
+{
atari_common(config);
- MCFG_DEVICE_MODIFY( "maincpu" )
- MCFG_DEVICE_PROGRAM_MAP(a400_mem)
- MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", a400_state, a400_interrupt, "screen", 0, 1)
+ m_maincpu->set_addrmap(AS_PROGRAM, &a400_state::a400_mem);
+ TIMER(config, "scantimer").configure_scanline(FUNC(a400_state::a400_interrupt), "screen", 0, 1);
MCFG_MACHINE_START_OVERRIDE( a400_state, a400 )
- MCFG_SCREEN_MODIFY("screen")
- MCFG_SCREEN_REFRESH_RATE(antic_device::FRAME_RATE_60HZ)
- MCFG_SCREEN_SIZE(antic_device::HWIDTH * 8, antic_device::TOTAL_LINES_60HZ)
+ m_screen->set_refresh_hz(antic_device::FRAME_RATE_60HZ);
+ m_screen->set_size(antic_device::HWIDTH * 8, antic_device::TOTAL_LINES_60HZ);
m_gtia->set_region(GTIA_NTSC);
-MACHINE_CONFIG_END
-
+}
// memory map A400 + PAL screen
-MACHINE_CONFIG_START(a400_state::a400pal)
+void a400_state::a400pal(machine_config &config)
+{
atari_common(config);
- MCFG_DEVICE_MODIFY( "maincpu" )
- MCFG_DEVICE_PROGRAM_MAP(a400_mem)
- MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", a400_state, a400_interrupt, "screen", 0, 1)
+ m_maincpu->set_addrmap(AS_PROGRAM, &a400_state::a400_mem);
+ TIMER(config, "scantimer").configure_scanline(FUNC(a400_state::a400_interrupt), "screen", 0, 1);
MCFG_MACHINE_START_OVERRIDE( a400_state, a400 )
- MCFG_SCREEN_MODIFY("screen")
- MCFG_SCREEN_REFRESH_RATE(antic_device::FRAME_RATE_50HZ)
- MCFG_SCREEN_SIZE(antic_device::HWIDTH * 8, antic_device::TOTAL_LINES_50HZ)
+ m_screen->set_refresh_hz(antic_device::FRAME_RATE_50HZ);
+ m_screen->set_size(antic_device::HWIDTH * 8, antic_device::TOTAL_LINES_50HZ);
m_gtia->set_region(GTIA_PAL);
-MACHINE_CONFIG_END
-
+}
// memory map A800 + NTSC screen + Right cartslot
-MACHINE_CONFIG_START(a400_state::a800)
+void a400_state::a800(machine_config &config)
+{
atari_common(config);
- MCFG_DEVICE_MODIFY( "maincpu" )
- MCFG_DEVICE_PROGRAM_MAP(a400_mem)
- MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", a400_state, a400_interrupt, "screen", 0, 1)
+ m_maincpu->set_addrmap(AS_PROGRAM, &a400_state::a400_mem);
+ TIMER(config, "scantimer").configure_scanline(FUNC(a400_state::a400_interrupt), "screen", 0, 1);
MCFG_MACHINE_START_OVERRIDE( a400_state, a800 )
- MCFG_SCREEN_MODIFY("screen")
- MCFG_SCREEN_REFRESH_RATE(antic_device::FRAME_RATE_60HZ)
- MCFG_SCREEN_SIZE(antic_device::HWIDTH * 8, antic_device::TOTAL_LINES_60HZ)
+ m_screen->set_refresh_hz(antic_device::FRAME_RATE_60HZ);
+ m_screen->set_size(antic_device::HWIDTH * 8, antic_device::TOTAL_LINES_60HZ);
m_gtia->set_region(GTIA_NTSC);
- MCFG_A800_CARTRIDGE_ADD("cartright", a800_right, nullptr)
-MACHINE_CONFIG_END
+ A800_CART_SLOT(config, "cartright", a800_right, nullptr);
+}
// memory map A800 + PAL screen + Right cartslot
-MACHINE_CONFIG_START(a400_state::a800pal)
+void a400_state::a800pal(machine_config &config)
+{
atari_common(config);
- MCFG_DEVICE_MODIFY( "maincpu" )
- MCFG_DEVICE_PROGRAM_MAP(a400_mem)
- MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", a400_state, a400_interrupt, "screen", 0, 1)
+ m_maincpu->set_addrmap(AS_PROGRAM, &a400_state::a400_mem);
+ TIMER(config, "scantimer").configure_scanline(FUNC(a400_state::a400_interrupt), "screen", 0, 1);
MCFG_MACHINE_START_OVERRIDE( a400_state, a800 )
- MCFG_SCREEN_MODIFY("screen")
- MCFG_SCREEN_REFRESH_RATE(antic_device::FRAME_RATE_50HZ)
- MCFG_SCREEN_SIZE(antic_device::HWIDTH * 8, antic_device::TOTAL_LINES_50HZ)
+ m_screen->set_refresh_hz(antic_device::FRAME_RATE_50HZ);
+ m_screen->set_size(antic_device::HWIDTH * 8, antic_device::TOTAL_LINES_50HZ);
m_gtia->set_region(GTIA_PAL);
- MCFG_A800_CARTRIDGE_ADD("cartright", a800_right, nullptr)
-MACHINE_CONFIG_END
+ A800_CART_SLOT(config, "cartright", a800_right, nullptr);
+}
// memory map A600XL (same as 800XL but less RAM) + NTSC screen + MMU via PIA portB
-MACHINE_CONFIG_START(a400_state::a600xl)
+void a400_state::a600xl(machine_config &config)
+{
atari_common(config);
- MCFG_DEVICE_MODIFY( "maincpu" )
- MCFG_DEVICE_PROGRAM_MAP(a600xl_mem)
- MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", a400_state, a800xl_interrupt, "screen", 0, 1)
+ m_maincpu->set_addrmap(AS_PROGRAM, &a400_state::a600xl_mem);
+ TIMER(config, "scantimer").configure_scanline(FUNC(a400_state::a800xl_interrupt), "screen", 0, 1);
m_pia->writepb_handler().set(FUNC(a400_state::a600xl_pia_pb_w));
MCFG_MACHINE_START_OVERRIDE( a400_state, a800xl )
- MCFG_SCREEN_MODIFY("screen")
- MCFG_SCREEN_REFRESH_RATE(antic_device::FRAME_RATE_60HZ)
- MCFG_SCREEN_SIZE(antic_device::HWIDTH * 8, antic_device::TOTAL_LINES_60HZ)
+ m_screen->set_refresh_hz(antic_device::FRAME_RATE_60HZ);
+ m_screen->set_size(antic_device::HWIDTH * 8, antic_device::TOTAL_LINES_60HZ);
m_gtia->set_region(GTIA_NTSC);
m_ram->set_default_size("16K");
-MACHINE_CONFIG_END
-
+}
// memory map A800XL + NTSC screen + MMU via PIA portB
-MACHINE_CONFIG_START(a400_state::a800xl)
+void a400_state::a800xl(machine_config &config)
+{
atari_common(config);
- MCFG_DEVICE_MODIFY( "maincpu" )
- MCFG_DEVICE_PROGRAM_MAP(a800xl_mem)
- MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", a400_state, a800xl_interrupt, "screen", 0, 1)
+ m_maincpu->set_addrmap(AS_PROGRAM, &a400_state::a800xl_mem);
+ TIMER(config, "scantimer").configure_scanline(FUNC(a400_state::a800xl_interrupt), "screen", 0, 1);
m_pia->writepb_handler().set(FUNC(a400_state::a800xl_pia_pb_w));
@@ -2294,84 +2285,74 @@ MACHINE_CONFIG_START(a400_state::a800xl)
m_ram->set_default_size("64K");
- MCFG_SCREEN_MODIFY("screen")
- MCFG_SCREEN_REFRESH_RATE(antic_device::FRAME_RATE_60HZ)
- MCFG_SCREEN_SIZE(antic_device::HWIDTH * 8, antic_device::TOTAL_LINES_60HZ)
+ m_screen->set_refresh_hz(antic_device::FRAME_RATE_60HZ);
+ m_screen->set_size(antic_device::HWIDTH * 8, antic_device::TOTAL_LINES_60HZ);
m_gtia->set_region(GTIA_NTSC);
-MACHINE_CONFIG_END
+}
// memory map A800XL + PAL screen + MMU via PIA portB
-MACHINE_CONFIG_START(a400_state::a800xlpal)
+void a400_state::a800xlpal(machine_config &config)
+{
a800xl(config);
- MCFG_DEVICE_MODIFY( "maincpu" )
- MCFG_DEVICE_CLOCK( 1773000 )
+ m_maincpu->set_clock(1773000);
- MCFG_SCREEN_MODIFY("screen")
- MCFG_SCREEN_REFRESH_RATE(antic_device::FRAME_RATE_50HZ)
- MCFG_SCREEN_SIZE(antic_device::HWIDTH * 8, antic_device::TOTAL_LINES_50HZ)
+ m_screen->set_refresh_hz(antic_device::FRAME_RATE_50HZ);
+ m_screen->set_size(antic_device::HWIDTH * 8, antic_device::TOTAL_LINES_50HZ);
m_gtia->set_region(GTIA_PAL);
- MCFG_DEVICE_MODIFY("pokey")
- MCFG_DEVICE_CLOCK(1773000)
-MACHINE_CONFIG_END
+ m_pokey->set_clock(1773000);
+}
// memory map A1200XL+ MMU via PIA portB
-MACHINE_CONFIG_START(a400_state::a1200xl)
+void a400_state::a1200xl(machine_config &config)
+{
a800xl(config);
- MCFG_DEVICE_MODIFY( "maincpu" )
- MCFG_DEVICE_PROGRAM_MAP(a1200xl_mem)
-
+ m_maincpu->set_addrmap(AS_PROGRAM, &a400_state::a1200xl_mem);
m_pia->writepb_handler().set(FUNC(a400_state::a800xl_pia_pb_w));
-MACHINE_CONFIG_END
-
+}
// memory map A130XE (extra RAM only partially emulated)
-MACHINE_CONFIG_START(a400_state::a130xe)
+void a400_state::a130xe(machine_config &config)
+{
a800xl(config);
- MCFG_DEVICE_MODIFY( "maincpu" )
- MCFG_DEVICE_PROGRAM_MAP(a130xe_mem)
-
+ m_maincpu->set_addrmap(AS_PROGRAM, &a400_state::a130xe_mem);
m_ram->set_default_size("128K");
-MACHINE_CONFIG_END
-
+}
// memory map XEGS, only XEGS bankswitch supported
-MACHINE_CONFIG_START(a400_state::xegs)
+void a400_state::xegs(machine_config &config)
+{
a800xl(config);
- MCFG_DEVICE_MODIFY( "maincpu" )
- MCFG_DEVICE_PROGRAM_MAP(xegs_mem)
-
- MCFG_DEVICE_REMOVE("cartleft")
- MCFG_DEVICE_REMOVE("cart_list")
+ m_maincpu->set_addrmap(AS_PROGRAM, &a400_state::xegs_mem);
- MCFG_XEGS_CARTRIDGE_ADD("cartleft", xegs_carts, nullptr)
-MACHINE_CONFIG_END
+ config.device_remove("cartleft");
+ config.device_remove("cart_list");
+ XEGS_CART_SLOT(config, "cartleft", xegs_carts, nullptr);
+}
// memory map A5200, different ports, less RAM
-MACHINE_CONFIG_START(a400_state::a5200)
+void a400_state::a5200(machine_config &config)
+{
atari_common_nodac(config);
- MCFG_DEVICE_MODIFY( "maincpu" )
- MCFG_DEVICE_PROGRAM_MAP(a5200_mem)
- MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", a400_state, a5200_interrupt, "screen", 0, 1)
+ m_maincpu->set_addrmap(AS_PROGRAM, &a400_state::a5200_mem);
+ TIMER(config, "scantimer").configure_scanline(FUNC(a400_state::a5200_interrupt), "screen", 0, 1);
// FIXME: should there be anything connected where other system have the fdc?
- MCFG_DEVICE_MODIFY("pokey")
- MCFG_POKEY_SERIN_R_CB(CONSTANT(0))
- MCFG_POKEY_SEROUT_W_CB(NOOP)
- MCFG_POKEY_KEYBOARD_CB(a400_state, a5200_keypads)
- MCFG_POKEY_INTERRUPT_CB(a400_state, interrupt_cb)
-
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "speaker", 1.0)
+ m_pokey->serin_r().set_constant(0);
+ m_pokey->serout_w().set_nop();
+ m_pokey->set_keyboard_callback(FUNC(a400_state::a5200_keypads));
+ m_pokey->set_interrupt_callback(FUNC(a400_state::interrupt_cb));
+ m_pokey->add_route(ALL_OUTPUTS, "speaker", 1.0);
ATARI_GTIA(config, m_gtia, 0);
m_gtia->set_region(GTIA_NTSC);
@@ -2385,18 +2366,17 @@ MACHINE_CONFIG_START(a400_state::a5200)
MCFG_MACHINE_START_OVERRIDE( a400_state, a5200 )
- MCFG_SCREEN_MODIFY( "screen" )
- MCFG_SCREEN_REFRESH_RATE(antic_device::FRAME_RATE_60HZ)
- MCFG_SCREEN_SIZE(antic_device::HWIDTH * 8, antic_device::TOTAL_LINES_60HZ)
+ m_screen->set_refresh_hz(antic_device::FRAME_RATE_60HZ);
+ m_screen->set_size(antic_device::HWIDTH * 8, antic_device::TOTAL_LINES_60HZ);
- MCFG_A5200_CARTRIDGE_ADD("cartleft", a5200_carts, nullptr)
+ A5200_CART_SLOT(config, "cartleft", a5200_carts, nullptr);
/* Software lists */
- MCFG_SOFTWARE_LIST_ADD("cart_list","a5200")
+ SOFTWARE_LIST(config, "cart_list").set_original("a5200");
/* internal ram */
RAM(config, m_ram).set_default_size("16K");
-MACHINE_CONFIG_END
+}
/**************************************************************