diff options
Diffstat (limited to 'src/mame/drivers/atari400.cpp')
-rw-r--r-- | src/mame/drivers/atari400.cpp | 260 |
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 +} /************************************************************** |