diff options
Diffstat (limited to 'src/mame/drivers/dragon.cpp')
-rw-r--r-- | src/mame/drivers/dragon.cpp | 141 |
1 files changed, 74 insertions, 67 deletions
diff --git a/src/mame/drivers/dragon.cpp b/src/mame/drivers/dragon.cpp index 17d373ef071..c336b62b628 100644 --- a/src/mame/drivers/dragon.cpp +++ b/src/mame/drivers/dragon.cpp @@ -187,13 +187,13 @@ static void dragon_alpha_floppies(device_slot_interface &device) device.option_add("dd", FLOPPY_35_DD); } -MACHINE_CONFIG_START(dragon_state::dragon_base) - MCFG_DEVICE_MODIFY(":") - MCFG_DEVICE_CLOCK(14.218_MHz_XTAL / 16) +void dragon_state::dragon_base(machine_config &config) +{ + this->set_clock(14.218_MHz_XTAL / 16); // basic machine hardware - MCFG_DEVICE_ADD("maincpu", MC6809E, DERIVED_CLOCK(1, 1)) - MCFG_DEVICE_PROGRAM_MAP(dragon_mem) + MC6809E(config, m_maincpu, DERIVED_CLOCK(1, 1)); + m_maincpu->set_addrmap(AS_PROGRAM, &dragon_state::dragon_mem); // devices pia6821_device &pia0(PIA6821(config, PIA0_TAG, 0)); @@ -216,20 +216,21 @@ MACHINE_CONFIG_START(dragon_state::dragon_base) SAM6883(config, m_sam, 14.218_MHz_XTAL, m_maincpu); m_sam->res_rd_callback().set(FUNC(dragon_state::sam_read)); - MCFG_CASSETTE_ADD("cassette") - MCFG_CASSETTE_FORMATS(coco_cassette_formats) - MCFG_CASSETTE_DEFAULT_STATE(CASSETTE_PLAY | CASSETTE_MOTOR_DISABLED | CASSETTE_SPEAKER_MUTED) - MCFG_CASSETTE_INTERFACE("dragon_cass") + CASSETTE(config, m_cassette); + m_cassette->set_formats(coco_cassette_formats); + m_cassette->set_default_state(CASSETTE_PLAY | CASSETTE_MOTOR_DISABLED | CASSETTE_SPEAKER_MUTED); + m_cassette->set_interface("dragon_cass"); - MCFG_DEVICE_ADD(PRINTER_TAG, PRINTER, 0) + PRINTER(config, m_printer, 0); // video hardware - MCFG_SCREEN_MC6847_PAL_ADD(SCREEN_TAG, VDG_TAG) + SCREEN(config, SCREEN_TAG, SCREEN_TYPE_RASTER); - MCFG_DEVICE_ADD(VDG_TAG, MC6847_PAL, 4.433619_MHz_XTAL) - MCFG_MC6847_HSYNC_CALLBACK(WRITELINE(*this, dragon_state, horizontal_sync)) - MCFG_MC6847_FSYNC_CALLBACK(WRITELINE(*this, dragon_state, field_sync)) - MCFG_MC6847_INPUT_CALLBACK(READ8(m_sam, sam6883_device, display_read)) + MC6847_PAL(config, m_vdg, 4.433619_MHz_XTAL); + m_vdg->set_screen(SCREEN_TAG); + m_vdg->hsync_wr_callback().set(FUNC(dragon_state::horizontal_sync)); + m_vdg->fsync_wr_callback().set(FUNC(dragon_state::field_sync)); + m_vdg->input_callback().set(m_sam, FUNC(sam6883_device::display_read)); // sound hardware coco_sound(config); @@ -238,13 +239,14 @@ MACHINE_CONFIG_START(dragon_state::dragon_base) coco_floating(config); // software lists - MCFG_SOFTWARE_LIST_ADD("dragon_cart_list", "dragon_cart") - MCFG_SOFTWARE_LIST_ADD("dragon_cass_list", "dragon_cass") - MCFG_SOFTWARE_LIST_ADD("dragon_flop_list", "dragon_flop") - MCFG_SOFTWARE_LIST_COMPATIBLE_ADD("coco_cart_list", "coco_cart") -MACHINE_CONFIG_END + SOFTWARE_LIST(config, "dragon_cart_list").set_original("dragon_cart"); + SOFTWARE_LIST(config, "dragon_cass_list").set_original("dragon_cass"); + SOFTWARE_LIST(config, "dragon_flop_list").set_original("dragon_flop"); + SOFTWARE_LIST(config, "coco_cart_list").set_compatible("coco_cart"); +} -MACHINE_CONFIG_START(dragon_state::dragon32) +void dragon_state::dragon32(machine_config &config) +{ dragon_base(config); // internal ram RAM(config, m_ram).set_default_size("32K").set_extra_options("64K"); @@ -254,9 +256,10 @@ MACHINE_CONFIG_START(dragon_state::dragon32) cartslot.cart_callback().set([this] (int state) { cart_w(state != 0); }); // lambda because name is overloaded cartslot.nmi_callback().set_inputline(m_maincpu, INPUT_LINE_NMI); cartslot.halt_callback().set_inputline(m_maincpu, INPUT_LINE_HALT); -MACHINE_CONFIG_END +} -MACHINE_CONFIG_START(dragon64_state::dragon64) +void dragon64_state::dragon64(machine_config &config) +{ dragon_base(config); // internal ram RAM(config, m_ram).set_default_size("64K"); @@ -272,34 +275,36 @@ MACHINE_CONFIG_START(dragon64_state::dragon64) acia.set_xtal(1.8432_MHz_XTAL); // software lists - MCFG_SOFTWARE_LIST_ADD("dragon_flex_list", "dragon_flex") - MCFG_SOFTWARE_LIST_ADD("dragon_os9_list", "dragon_os9") -MACHINE_CONFIG_END + SOFTWARE_LIST(config, "dragon_flex_list").set_original("dragon_flex"); + SOFTWARE_LIST(config, "dragon_os9_list").set_original("dragon_os9"); +} -MACHINE_CONFIG_START(dragon64_state::dragon64h) +void dragon64_state::dragon64h(machine_config &config) +{ dragon64(config); // Replace M6809 with HD6309 - MCFG_DEVICE_REPLACE(MAINCPU_TAG, HD6309E, DERIVED_CLOCK(1, 1)) - MCFG_DEVICE_PROGRAM_MAP(dragon_mem) + HD6309E(config.replace(), m_maincpu, DERIVED_CLOCK(1, 1)); + m_maincpu->set_addrmap(AS_PROGRAM, &dragon64_state::dragon_mem); m_ram->set_default_size("64K"); -MACHINE_CONFIG_END +} -MACHINE_CONFIG_START(dragon200e_state::dragon200e) +void dragon200e_state::dragon200e(machine_config &config) +{ dragon64(config); // video hardware - MCFG_DEVICE_MODIFY(VDG_TAG) - MCFG_MC6847_CHARROM_CALLBACK(dragon200e_state, char_rom_r) -MACHINE_CONFIG_END + m_vdg->set_get_char_rom(FUNC(dragon200e_state::char_rom_r)); +} -MACHINE_CONFIG_START(d64plus_state::d64plus) +void d64plus_state::d64plus(machine_config &config) +{ dragon64(config); // video hardware - MCFG_SCREEN_ADD("plus_screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(50) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) /* not accurate */ - MCFG_SCREEN_SIZE(640, 264) - MCFG_SCREEN_VISIBLE_AREA(0, 640-1, 0, 264-1) - MCFG_SCREEN_UPDATE_DEVICE("crtc", hd6845_device, screen_update) + screen_device &plus_screen(SCREEN(config, "plus_screen", SCREEN_TYPE_RASTER)); + plus_screen.set_refresh_hz(50); + plus_screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500)); /* not accurate */ + plus_screen.set_size(640, 264); + plus_screen.set_visarea_full(); + plus_screen.set_screen_update("crtc", FUNC(hd6845_device::screen_update)); PALETTE(config, m_palette, palette_device::MONOCHROME); // crtc @@ -308,9 +313,10 @@ MACHINE_CONFIG_START(d64plus_state::d64plus) m_crtc->set_show_border_area(false); m_crtc->set_char_width(8); m_crtc->set_update_row_callback(FUNC(d64plus_state::crtc_update_row), this); -MACHINE_CONFIG_END +} -MACHINE_CONFIG_START(dragon_alpha_state::dgnalpha) +void dragon_alpha_state::dgnalpha(machine_config &config) +{ dragon_base(config); // internal ram RAM(config, RAM_TAG).set_default_size("64K"); @@ -330,14 +336,10 @@ MACHINE_CONFIG_START(dragon_alpha_state::dgnalpha) m_fdc->intrq_wr_callback().set(FUNC(dragon_alpha_state::fdc_intrq_w)); m_fdc->drq_wr_callback().set(FUNC(dragon_alpha_state::fdc_drq_w)); - MCFG_FLOPPY_DRIVE_ADD(WD2797_TAG ":0", dragon_alpha_floppies, "dd", dragon_alpha_state::dragon_formats) - MCFG_FLOPPY_DRIVE_SOUND(true) - MCFG_FLOPPY_DRIVE_ADD(WD2797_TAG ":1", dragon_alpha_floppies, "dd", dragon_alpha_state::dragon_formats) - MCFG_FLOPPY_DRIVE_SOUND(true) - MCFG_FLOPPY_DRIVE_ADD(WD2797_TAG ":2", dragon_alpha_floppies, nullptr, dragon_alpha_state::dragon_formats) - MCFG_FLOPPY_DRIVE_SOUND(true) - MCFG_FLOPPY_DRIVE_ADD(WD2797_TAG ":3", dragon_alpha_floppies, nullptr, dragon_alpha_state::dragon_formats) - MCFG_FLOPPY_DRIVE_SOUND(true) + FLOPPY_CONNECTOR(config, WD2797_TAG ":0", dragon_alpha_floppies, "dd", dragon_alpha_state::dragon_formats).enable_sound(true); + FLOPPY_CONNECTOR(config, WD2797_TAG ":1", dragon_alpha_floppies, "dd", dragon_alpha_state::dragon_formats).enable_sound(true); + FLOPPY_CONNECTOR(config, WD2797_TAG ":2", dragon_alpha_floppies, nullptr, dragon_alpha_state::dragon_formats).enable_sound(true); + FLOPPY_CONNECTOR(config, WD2797_TAG ":3", dragon_alpha_floppies, nullptr, dragon_alpha_state::dragon_formats).enable_sound(true); // sound hardware ay8912_device &ay8912(AY8912(config, AY8912_TAG, 1000000)); @@ -352,32 +354,37 @@ MACHINE_CONFIG_START(dragon_alpha_state::dgnalpha) pia2.irqb_handler().set(FUNC(dragon_alpha_state::pia2_firq_b)); // software lists - MCFG_SOFTWARE_LIST_ADD("dgnalpha_flop_list", "dgnalpha_flop") - MCFG_SOFTWARE_LIST_ADD("dragon_flex_list", "dragon_flex") - MCFG_SOFTWARE_LIST_ADD("dragon_os9_list", "dragon_os9") -MACHINE_CONFIG_END + SOFTWARE_LIST(config, "dgnalpha_flop_list").set_original("dgnalpha_flop"); + SOFTWARE_LIST(config, "dragon_flex_list").set_original("dragon_flex"); + SOFTWARE_LIST(config, "dragon_os9_list").set_original("dragon_os9"); +} -MACHINE_CONFIG_START(dragon64_state::tanodr64) +void dragon64_state::tanodr64(machine_config &config) +{ dragon64(config); - MCFG_DEVICE_MODIFY(":") - MCFG_DEVICE_CLOCK(14.318181_MHz_XTAL / 4) + this->set_clock(14.318181_MHz_XTAL / 16); + + m_sam->set_clock(14.318181_MHz_XTAL); // video hardware - MCFG_SCREEN_MODIFY(SCREEN_TAG) - MCFG_SCREEN_REFRESH_RATE(60) + MC6847_NTSC(config.replace(), m_vdg, 14.318181_MHz_XTAL / 4); + m_vdg->set_screen(SCREEN_TAG); + m_vdg->hsync_wr_callback().set(FUNC(dragon_state::horizontal_sync)); + m_vdg->fsync_wr_callback().set(FUNC(dragon_state::field_sync)); + m_vdg->input_callback().set(m_sam, FUNC(sam6883_device::display_read)); // cartridge - MCFG_DEVICE_MODIFY(CARTRIDGE_TAG) - MCFG_DEVICE_SLOT_INTERFACE(dragon_cart, "sdtandy_fdc", false) -MACHINE_CONFIG_END + subdevice<cococart_slot_device>(CARTRIDGE_TAG)->set_default_option("sdtandy_fdc"); +} -MACHINE_CONFIG_START(dragon64_state::tanodr64h) +void dragon64_state::tanodr64h(machine_config &config) +{ tanodr64(config); // Replace M6809 CPU with HD6309 CPU - MCFG_DEVICE_REPLACE(MAINCPU_TAG, HD6309E, DERIVED_CLOCK(1, 1)) - MCFG_DEVICE_PROGRAM_MAP(dragon_mem) + HD6309E(config.replace(), m_maincpu, DERIVED_CLOCK(1, 1)); + m_maincpu->set_addrmap(AS_PROGRAM, &dragon64_state::dragon_mem); m_ram->set_default_size("64K"); -MACHINE_CONFIG_END +} /*************************************************************************** |