diff options
Diffstat (limited to 'src/mame/drivers/amiga.cpp')
-rw-r--r-- | src/mame/drivers/amiga.cpp | 612 |
1 files changed, 288 insertions, 324 deletions
diff --git a/src/mame/drivers/amiga.cpp b/src/mame/drivers/amiga.cpp index a8d41f300ae..c963688ee98 100644 --- a/src/mame/drivers/amiga.cpp +++ b/src/mame/drivers/amiga.cpp @@ -29,6 +29,14 @@ //************************************************************************** +// CONSTANTS / MACROS +//************************************************************************** + +#define EXP_SLOT_TAG "exp" +#define ZORROBUS_TAG "zorrobus" + + +//************************************************************************** // PRIVATE DEVICES //************************************************************************** @@ -609,7 +617,7 @@ WRITE16_MEMBER( a500p_state::clock_w ) READ8_MEMBER( cdtv_state::dmac_scsi_data_read ) { if (offset >= 0xb0 && offset <= 0xbf) - return m_tpi->read(space, offset); + return m_tpi->read(offset); return 0xff; } @@ -617,7 +625,7 @@ READ8_MEMBER( cdtv_state::dmac_scsi_data_read ) WRITE8_MEMBER( cdtv_state::dmac_scsi_data_write ) { if (offset >= 0xb0 && offset <= 0xbf) - m_tpi->write(space, offset, data); + m_tpi->write(offset, data); } READ8_MEMBER( cdtv_state::dmac_io_read ) @@ -1152,7 +1160,7 @@ WRITE8_MEMBER( cd32_state::akiko_cia_0_port_a_write ) // bit 1, power led m_power_led = BIT(~data, 1); - handle_joystick_cia(data, m_cia_0->read(space, 2)); + handle_joystick_cia(data, m_cia_0->read(2)); } @@ -1557,7 +1565,8 @@ static void amiga_floppies(device_slot_interface &device) } // basic elements common to all amigas -MACHINE_CONFIG_START(amiga_state::amiga_base) +void amiga_state::amiga_base(machine_config &config) +{ // video pal_video(config); @@ -1583,13 +1592,13 @@ MACHINE_CONFIG_START(amiga_state::amiga_base) // audio SPEAKER(config, "lspeaker").front_left(); SPEAKER(config, "rspeaker").front_right(); - paula_8364_device &paula(PAULA_8364(config, "amiga", amiga_state::CLK_C1_PAL)); - paula.add_route(0, "lspeaker", 0.50); - paula.add_route(1, "rspeaker", 0.50); - paula.add_route(2, "rspeaker", 0.50); - paula.add_route(3, "lspeaker", 0.50); - paula.mem_read_cb().set(FUNC(amiga_state::chip_ram_r)); - paula.int_cb().set(FUNC(amiga_state::paula_int_w)); + PAULA_8364(config, m_paula, amiga_state::CLK_C1_PAL); + m_paula->add_route(0, "lspeaker", 0.50); + m_paula->add_route(1, "rspeaker", 0.50); + m_paula->add_route(2, "rspeaker", 0.50); + m_paula->add_route(3, "lspeaker", 0.50); + m_paula->mem_read_cb().set(FUNC(amiga_state::chip_ram_r)); + m_paula->int_cb().set(FUNC(amiga_state::paula_int_w)); // floppy drives AMIGA_FDC(config, m_fdc, amiga_state::CLK_7M_PAL); @@ -1597,14 +1606,10 @@ MACHINE_CONFIG_START(amiga_state::amiga_base) m_fdc->write_dma_callback().set(FUNC(amiga_state::chip_ram_w)); m_fdc->dskblk_callback().set(FUNC(amiga_state::fdc_dskblk_w)); m_fdc->dsksyn_callback().set(FUNC(amiga_state::fdc_dsksyn_w)); - MCFG_FLOPPY_DRIVE_ADD("fdc:0", amiga_floppies, "35dd", amiga_fdc_device::floppy_formats) - MCFG_FLOPPY_DRIVE_SOUND(true) - MCFG_FLOPPY_DRIVE_ADD("fdc:1", amiga_floppies, nullptr, amiga_fdc_device::floppy_formats) - MCFG_FLOPPY_DRIVE_SOUND(true) - MCFG_FLOPPY_DRIVE_ADD("fdc:2", amiga_floppies, nullptr, amiga_fdc_device::floppy_formats) - MCFG_FLOPPY_DRIVE_SOUND(true) - MCFG_FLOPPY_DRIVE_ADD("fdc:3", amiga_floppies, nullptr, amiga_fdc_device::floppy_formats) - MCFG_FLOPPY_DRIVE_SOUND(true) + FLOPPY_CONNECTOR(config, "fdc:0", amiga_floppies, "35dd", amiga_fdc_device::floppy_formats).enable_sound(true); + FLOPPY_CONNECTOR(config, "fdc:1", amiga_floppies, nullptr, amiga_fdc_device::floppy_formats).enable_sound(true); + FLOPPY_CONNECTOR(config, "fdc:2", amiga_floppies, nullptr, amiga_fdc_device::floppy_formats).enable_sound(true); + FLOPPY_CONNECTOR(config, "fdc:3", amiga_floppies, nullptr, amiga_fdc_device::floppy_formats).enable_sound(true); // rs232 rs232_port_device &rs232(RS232_PORT(config, "rs232", default_rs232_devices, nullptr)); @@ -1615,22 +1620,25 @@ MACHINE_CONFIG_START(amiga_state::amiga_base) rs232.cts_handler().set(FUNC(amiga_state::rs232_cts_w)); // centronics - MCFG_DEVICE_ADD("centronics", CENTRONICS, centronics_devices, "printer") - MCFG_CENTRONICS_ACK_HANDLER(WRITELINE(*this, amiga_state, centronics_ack_w)) - MCFG_CENTRONICS_BUSY_HANDLER(WRITELINE(*this, amiga_state, centronics_busy_w)) - MCFG_CENTRONICS_PERROR_HANDLER(WRITELINE(*this, amiga_state, centronics_perror_w)) - MCFG_CENTRONICS_SELECT_HANDLER(WRITELINE(*this, amiga_state, centronics_select_w)) - MCFG_CENTRONICS_OUTPUT_LATCH_ADD("cent_data_out", "centronics") + CENTRONICS(config, m_centronics, centronics_devices, "printer"); + m_centronics->ack_handler().set(FUNC(amiga_state::centronics_ack_w)); + m_centronics->busy_handler().set(FUNC(amiga_state::centronics_busy_w)); + m_centronics->perror_handler().set(FUNC(amiga_state::centronics_perror_w)); + m_centronics->select_handler().set(FUNC(amiga_state::centronics_select_w)); + + output_latch_device ¢_data_out(OUTPUT_LATCH(config, "cent_data_out")); + m_centronics->set_output_latch(cent_data_out); // software - MCFG_SOFTWARE_LIST_ADD("wb_list", "amiga_workbench") - MCFG_SOFTWARE_LIST_ADD("hardware_list", "amiga_hardware") - MCFG_SOFTWARE_LIST_ADD("apps_list", "amiga_apps") - MCFG_SOFTWARE_LIST_ADD("flop_list", "amiga_flop") - MCFG_SOFTWARE_LIST_ADD("ocs_list", "amigaocs_flop") -MACHINE_CONFIG_END - -MACHINE_CONFIG_START(a1000_state::a1000) + SOFTWARE_LIST(config, "wb_list").set_original("amiga_workbench"); + SOFTWARE_LIST(config, "hardware_list").set_original("amiga_hardware"); + SOFTWARE_LIST(config, "apps_list").set_original("amiga_apps"); + SOFTWARE_LIST(config, "flop_list").set_original("amiga_flop"); + SOFTWARE_LIST(config, "ocs_list").set_original("amigaocs_flop"); +} + +void a1000_state::a1000(machine_config &config) +{ amiga_base(config); // keyboard @@ -1643,33 +1651,30 @@ MACHINE_CONFIG_START(a1000_state::a1000) .kbrst_cb().set(FUNC(a1000_state::kbreset_w)); // main cpu - MCFG_DEVICE_ADD("maincpu", M68000, amiga_state::CLK_7M_PAL) - MCFG_DEVICE_PROGRAM_MAP(a1000_mem) + M68000(config, m_maincpu, amiga_state::CLK_7M_PAL); + m_maincpu->set_addrmap(AS_PROGRAM, &a1000_state::a1000_mem); ADDRESS_MAP_BANK(config, "overlay").set_map(&a1000_state::a1000_overlay_map).set_options(ENDIANNESS_BIG, 16, 22, 0x200000); ADDRESS_MAP_BANK(config, "bootrom").set_map(&a1000_state::a1000_bootrom_map).set_options(ENDIANNESS_BIG, 16, 19, 0x40000); - MCFG_SOFTWARE_LIST_ADD("a1000_list", "amiga_a1000") -MACHINE_CONFIG_END + SOFTWARE_LIST(config, "a1000_list").set_original("amiga_a1000"); +} -MACHINE_CONFIG_START(a1000_state::a1000n) +void a1000_state::a1000n(machine_config &config) +{ a1000(config); - MCFG_DEVICE_MODIFY("maincpu") - MCFG_DEVICE_CLOCK(amiga_state::CLK_7M_NTSC) - MCFG_DEVICE_REMOVE("screen") + m_maincpu->set_clock(amiga_state::CLK_7M_NTSC); + config.device_remove("screen"); ntsc_video(config); - MCFG_DEVICE_MODIFY("amiga") - MCFG_DEVICE_CLOCK(amiga_state::CLK_C1_NTSC) - MCFG_DEVICE_MODIFY("cia_0") - MCFG_DEVICE_CLOCK(amiga_state::CLK_E_NTSC) - MCFG_DEVICE_MODIFY("cia_1") - MCFG_DEVICE_CLOCK(amiga_state::CLK_E_NTSC) - MCFG_DEVICE_MODIFY("fdc") - MCFG_DEVICE_CLOCK(amiga_state::CLK_7M_NTSC) -MACHINE_CONFIG_END - -MACHINE_CONFIG_START(a2000_state::a2000) + m_paula->set_clock(amiga_state::CLK_C1_NTSC); + m_cia_0->set_clock(amiga_state::CLK_E_NTSC); + m_cia_1->set_clock(amiga_state::CLK_E_NTSC); + m_fdc->set_clock(amiga_state::CLK_7M_NTSC); +} + +void a2000_state::a2000(machine_config &config) +{ amiga_base(config); // keyboard @@ -1682,46 +1687,45 @@ MACHINE_CONFIG_START(a2000_state::a2000) .kbrst_cb().set(FUNC(a2000_state::kbreset_w)); // main cpu - MCFG_DEVICE_ADD("maincpu", M68000, amiga_state::CLK_7M_PAL) - MCFG_DEVICE_PROGRAM_MAP(a2000_mem) + M68000(config, m_maincpu, amiga_state::CLK_7M_PAL); + m_maincpu->set_addrmap(AS_PROGRAM, &a2000_state::a2000_mem); ADDRESS_MAP_BANK(config, "overlay").set_map(&amiga_state::overlay_512kb_map).set_options(ENDIANNESS_BIG, 16, 22, 0x200000); // real-time clock - MCFG_DEVICE_ADD("u65", MSM6242, XTAL(32'768)) + MSM6242(config, m_rtc, XTAL(32'768)); // cpu slot - MCFG_EXPANSION_SLOT_ADD("maincpu", a2000_expansion_cards, nullptr) + EXP_SLOT(config, EXP_SLOT_TAG, 0).set_space(m_maincpu, AS_PROGRAM); + ZORRO_SLOT(config, "slot", EXP_SLOT_TAG, a2000_expansion_cards, nullptr); // zorro slots - MCFG_ZORRO2_ADD("maincpu") - MCFG_ZORRO2_INT2_HANDLER(WRITELINE(*this, a2000_state, zorro2_int2_w)) - MCFG_ZORRO2_INT6_HANDLER(WRITELINE(*this, a2000_state, zorro2_int6_w)) - MCFG_ZORRO2_SLOT_ADD("zorro1", zorro2_cards, nullptr) - MCFG_ZORRO2_SLOT_ADD("zorro2", zorro2_cards, nullptr) - MCFG_ZORRO2_SLOT_ADD("zorro3", zorro2_cards, nullptr) - MCFG_ZORRO2_SLOT_ADD("zorro4", zorro2_cards, nullptr) - MCFG_ZORRO2_SLOT_ADD("zorro5", zorro2_cards, nullptr) -MACHINE_CONFIG_END - -MACHINE_CONFIG_START(a2000_state::a2000n) + ZORRO2(config, m_zorro, 0); + m_zorro->set_space(m_maincpu, AS_PROGRAM); + m_zorro->int2_handler().set(FUNC(a2000_state::zorro2_int2_w)); + m_zorro->int6_handler().set(FUNC(a2000_state::zorro2_int6_w)); + ZORRO_SLOT(config, "zorro1", m_zorro, zorro2_cards, nullptr); + ZORRO_SLOT(config, "zorro2", m_zorro, zorro2_cards, nullptr); + ZORRO_SLOT(config, "zorro3", m_zorro, zorro2_cards, nullptr); + ZORRO_SLOT(config, "zorro4", m_zorro, zorro2_cards, nullptr); + ZORRO_SLOT(config, "zorro5", m_zorro, zorro2_cards, nullptr); +} + +void a2000_state::a2000n(machine_config &config) +{ a2000(config); - MCFG_DEVICE_MODIFY("maincpu") - MCFG_DEVICE_CLOCK(amiga_state::CLK_7M_NTSC) - MCFG_DEVICE_REMOVE("screen") + m_maincpu->set_clock(amiga_state::CLK_7M_NTSC); + config.device_remove("screen"); ntsc_video(config); - MCFG_DEVICE_MODIFY("amiga") - MCFG_DEVICE_CLOCK(amiga_state::CLK_C1_NTSC) - MCFG_DEVICE_MODIFY("cia_0") - MCFG_DEVICE_CLOCK(amiga_state::CLK_E_NTSC) - MCFG_DEVICE_MODIFY("cia_1") - MCFG_DEVICE_CLOCK(amiga_state::CLK_E_NTSC) - MCFG_DEVICE_MODIFY("fdc") - MCFG_DEVICE_CLOCK(amiga_state::CLK_7M_NTSC) -MACHINE_CONFIG_END - -MACHINE_CONFIG_START(a500_state::a500) + m_paula->set_clock(amiga_state::CLK_C1_NTSC); + m_cia_0->set_clock(amiga_state::CLK_E_NTSC); + m_cia_1->set_clock(amiga_state::CLK_E_NTSC); + m_fdc->set_clock(amiga_state::CLK_7M_NTSC); +} + +void a500_state::a500(machine_config &config) +{ amiga_base(config); // keyboard @@ -1731,34 +1735,32 @@ MACHINE_CONFIG_START(a500_state::a500) kbd.krst_handler().set(FUNC(amiga_state::kbreset_w)); // main cpu - MCFG_DEVICE_ADD("maincpu", M68000, amiga_state::CLK_7M_PAL) - MCFG_DEVICE_PROGRAM_MAP(a500_mem) + M68000(config, m_maincpu, amiga_state::CLK_7M_PAL); + m_maincpu->set_addrmap(AS_PROGRAM, &a500_state::a500_mem); ADDRESS_MAP_BANK(config, "overlay").set_map(&amiga_state::overlay_1mb_map).set_options(ENDIANNESS_BIG, 16, 22, 0x200000); // cpu slot - MCFG_EXPANSION_SLOT_ADD("maincpu", a500_expansion_cards, nullptr) - MCFG_EXPANSION_SLOT_INT2_HANDLER(WRITELINE(*this, a500_state, side_int2_w)) - MCFG_EXPANSION_SLOT_INT6_HANDLER(WRITELINE(*this, a500_state, side_int6_w)) -MACHINE_CONFIG_END + EXP_SLOT(config, m_side, 0).set_space(m_maincpu, AS_PROGRAM); + m_side->int2_handler().set(FUNC(a500_state::side_int2_w)); + m_side->int6_handler().set(FUNC(a500_state::side_int6_w)); + ZORRO_SLOT(config, "slot", m_side, a500_expansion_cards, nullptr); +} -MACHINE_CONFIG_START(a500_state::a500n) +void a500_state::a500n(machine_config &config) +{ a500(config); - MCFG_DEVICE_MODIFY("maincpu") - MCFG_DEVICE_CLOCK(amiga_state::CLK_7M_NTSC) - MCFG_DEVICE_REMOVE("screen") + m_maincpu->set_clock(amiga_state::CLK_7M_NTSC); + config.device_remove("screen"); ntsc_video(config); - MCFG_DEVICE_MODIFY("amiga") - MCFG_DEVICE_CLOCK(amiga_state::CLK_C1_NTSC) - MCFG_DEVICE_MODIFY("cia_0") - MCFG_DEVICE_CLOCK(amiga_state::CLK_E_NTSC) - MCFG_DEVICE_MODIFY("cia_1") - MCFG_DEVICE_CLOCK(amiga_state::CLK_E_NTSC) - MCFG_DEVICE_MODIFY("fdc") - MCFG_DEVICE_CLOCK(amiga_state::CLK_7M_NTSC) -MACHINE_CONFIG_END - -MACHINE_CONFIG_START(cdtv_state::cdtv) + m_paula->set_clock(amiga_state::CLK_C1_NTSC); + m_cia_0->set_clock(amiga_state::CLK_E_NTSC); + m_cia_1->set_clock(amiga_state::CLK_E_NTSC); + m_fdc->set_clock(amiga_state::CLK_7M_NTSC); +} + +void cdtv_state::cdtv(machine_config &config) +{ amiga_base(config); // keyboard @@ -1771,18 +1773,18 @@ MACHINE_CONFIG_START(cdtv_state::cdtv) .kbrst_cb().set(FUNC(a1000_state::kbreset_w)); // main cpu - MCFG_DEVICE_ADD("maincpu", M68000, amiga_state::CLK_7M_PAL) - MCFG_DEVICE_PROGRAM_MAP(cdtv_mem) + M68000(config, m_maincpu, amiga_state::CLK_7M_PAL); + m_maincpu->set_addrmap(AS_PROGRAM, &cdtv_state::cdtv_mem); // remote control input converter - MCFG_DEVICE_ADD("u75", M6502, XTAL(3'000'000)) - MCFG_DEVICE_PROGRAM_MAP(cdtv_rc_mem) - MCFG_DEVICE_DISABLE() + m6502_device &u75(M6502(config, "u75", XTAL(3'000'000))); + u75.set_addrmap(AS_PROGRAM, &cdtv_state::cdtv_rc_mem); + u75.set_disable(); // lcd controller #if 0 - MCFG_DEVICE_ADD("u62", LC6554, XTAL(4'000'000)) - MCFG_DEVICE_PROGRAM_MAP(lcd_mem) + lc6554_device &u62(LC6554(config, "u62", XTAL(4'000'000))); // device isn't emulated yet + u62.set_addrmap(AS_PROGRAM, &cdtv_state::lcd_mem); #endif ADDRESS_MAP_BANK(config, "overlay").set_map(&amiga_state::overlay_1mb_map).set_options(ENDIANNESS_BIG, 16, 22, 0x200000); @@ -1794,7 +1796,7 @@ MACHINE_CONFIG_START(cdtv_state::cdtv) NVRAM(config, "memcard", nvram_device::DEFAULT_ALL_0); // real-time clock - MCFG_DEVICE_ADD("u61", MSM6242, XTAL(32'768)) + MSM6242(config, m_rtc, XTAL(32'768)); // cd-rom controller AMIGA_DMAC(config, m_dmac, amiga_state::CLK_7M_PAL); @@ -1804,42 +1806,38 @@ MACHINE_CONFIG_START(cdtv_state::cdtv) m_dmac->io_write_handler().set(FUNC(cdtv_state::dmac_io_write)); m_dmac->int_handler().set(FUNC(cdtv_state::dmac_int_w)); - tpi6525_device &tpi(TPI6525(config, "u32", 0)); - tpi.out_irq_cb().set(FUNC(cdtv_state::tpi_int_w)); - tpi.out_pb_cb().set(FUNC(cdtv_state::tpi_port_b_write)); + TPI6525(config, m_tpi, 0); + m_tpi->out_irq_cb().set(FUNC(cdtv_state::tpi_int_w)); + m_tpi->out_pb_cb().set(FUNC(cdtv_state::tpi_port_b_write)); // cd-rom CR511B(config, m_cdrom, 0); - m_cdrom->scor_handler().set("u32", FUNC(tpi6525_device::i1_w)).invert(); - m_cdrom->stch_handler().set("u32", FUNC(tpi6525_device::i2_w)).invert(); - m_cdrom->sten_handler().set("u32", FUNC(tpi6525_device::i3_w)); - m_cdrom->xaen_handler().set("u32", FUNC(tpi6525_device::pb2_w)); - m_cdrom->drq_handler().set("u36", FUNC(amiga_dmac_device::xdreq_w)); - m_cdrom->dten_handler().set("u36", FUNC(amiga_dmac_device::xdreq_w)); + m_cdrom->scor_handler().set(m_tpi, FUNC(tpi6525_device::i1_w)).invert(); + m_cdrom->stch_handler().set(m_tpi, FUNC(tpi6525_device::i2_w)).invert(); + m_cdrom->sten_handler().set(m_tpi, FUNC(tpi6525_device::i3_w)); + m_cdrom->xaen_handler().set(m_tpi, FUNC(tpi6525_device::pb2_w)); + m_cdrom->drq_handler().set(m_dmac, FUNC(amiga_dmac_device::xdreq_w)); + m_cdrom->dten_handler().set(m_dmac, FUNC(amiga_dmac_device::xdreq_w)); // software - MCFG_SOFTWARE_LIST_ADD("cd_list", "cdtv") -MACHINE_CONFIG_END + SOFTWARE_LIST(config, "cd_list").set_original("cdtv"); +} -MACHINE_CONFIG_START(cdtv_state::cdtvn) +void cdtv_state::cdtvn(machine_config &config) +{ cdtv(config); - MCFG_DEVICE_MODIFY("maincpu") - MCFG_DEVICE_CLOCK(amiga_state::CLK_7M_NTSC) - MCFG_DEVICE_REMOVE("screen") + m_maincpu->set_clock(amiga_state::CLK_7M_NTSC); + config.device_remove("screen"); ntsc_video(config); - MCFG_DEVICE_MODIFY("amiga") - MCFG_DEVICE_CLOCK(amiga_state::CLK_C1_NTSC) - MCFG_DEVICE_MODIFY("cia_0") - MCFG_DEVICE_CLOCK(amiga_state::CLK_E_NTSC) - MCFG_DEVICE_MODIFY("cia_1") - MCFG_DEVICE_CLOCK(amiga_state::CLK_E_NTSC) - MCFG_DEVICE_MODIFY("u36") - MCFG_DEVICE_CLOCK(amiga_state::CLK_7M_NTSC) - MCFG_DEVICE_MODIFY("fdc") - MCFG_DEVICE_CLOCK(amiga_state::CLK_7M_NTSC) -MACHINE_CONFIG_END - -MACHINE_CONFIG_START(a3000_state::a3000) + m_paula->set_clock(amiga_state::CLK_C1_NTSC); + m_cia_0->set_clock(amiga_state::CLK_E_NTSC); + m_cia_1->set_clock(amiga_state::CLK_E_NTSC); + m_dmac->set_clock(amiga_state::CLK_7M_NTSC); + m_fdc->set_clock(amiga_state::CLK_7M_NTSC); +} + +void a3000_state::a3000(machine_config &config) +{ amiga_base(config); // keyboard @@ -1848,8 +1846,8 @@ MACHINE_CONFIG_START(a3000_state::a3000) kbd.kdat_handler().set("cia_0", FUNC(mos8520_device::sp_w)); // main cpu - MCFG_DEVICE_ADD("maincpu", M68030, XTAL(32'000'000) / 2) - MCFG_DEVICE_PROGRAM_MAP(a3000_mem) + M68030(config, m_maincpu, XTAL(32'000'000) / 2); + m_maincpu->set_addrmap(AS_PROGRAM, &a3000_state::a3000_mem); ADDRESS_MAP_BANK(config, "overlay").set_map(&amiga_state::overlay_1mb_map32).set_options(ENDIANNESS_BIG, 32, 22, 0x200000); @@ -1859,23 +1857,22 @@ MACHINE_CONFIG_START(a3000_state::a3000) // todo: zorro3 slots, super dmac, scsi // software - MCFG_SOFTWARE_LIST_ADD("a3000_list", "amiga_a3000") - MCFG_SOFTWARE_LIST_ADD("ecs_list", "amigaecs_flop") -MACHINE_CONFIG_END + SOFTWARE_LIST(config, "a3000_list").set_original("amiga_a3000"); + SOFTWARE_LIST(config, "ecs_list").set_original("amigaecs_flop"); +} -MACHINE_CONFIG_START(a3000_state::a3000n) +void a3000_state::a3000n(machine_config &config) +{ a3000(config); - MCFG_DEVICE_REMOVE("screen") + config.device_remove("screen"); ntsc_video(config); - MCFG_DEVICE_MODIFY("cia_0") - MCFG_DEVICE_CLOCK(amiga_state::CLK_E_NTSC) - MCFG_DEVICE_MODIFY("cia_1") - MCFG_DEVICE_CLOCK(amiga_state::CLK_E_NTSC) - MCFG_DEVICE_MODIFY("fdc") - MCFG_DEVICE_CLOCK(amiga_state::CLK_7M_NTSC) -MACHINE_CONFIG_END - -MACHINE_CONFIG_START(a500p_state::a500p) + m_cia_0->set_clock(amiga_state::CLK_E_NTSC); + m_cia_1->set_clock(amiga_state::CLK_E_NTSC); + m_fdc->set_clock(amiga_state::CLK_7M_NTSC); +} + +void a500p_state::a500p(machine_config &config) +{ amiga_base(config); // keyboard @@ -1885,38 +1882,36 @@ MACHINE_CONFIG_START(a500p_state::a500p) kbd.krst_handler().set(FUNC(amiga_state::kbreset_w)); // main cpu - MCFG_DEVICE_ADD("maincpu", M68000, amiga_state::CLK_7M_PAL) - MCFG_DEVICE_PROGRAM_MAP(a500p_mem) + M68000(config, m_maincpu, amiga_state::CLK_7M_PAL); + m_maincpu->set_addrmap(AS_PROGRAM, &a500p_state::a500p_mem); ADDRESS_MAP_BANK(config, "overlay").set_map(&amiga_state::overlay_1mb_map).set_options(ENDIANNESS_BIG, 16, 22, 0x200000); // real-time clock - MCFG_DEVICE_ADD("u9", MSM6242, XTAL(32'768)) + MSM6242(config, m_rtc, XTAL(32'768)); // cpu slot - MCFG_EXPANSION_SLOT_ADD("maincpu", a500_expansion_cards, nullptr) + EXP_SLOT(config, m_side, 0).set_space(m_maincpu, AS_PROGRAM); + ZORRO_SLOT(config, "slot", m_side, a500_expansion_cards, nullptr); // software - MCFG_SOFTWARE_LIST_ADD("ecs_list", "amigaecs_flop") -MACHINE_CONFIG_END + SOFTWARE_LIST(config, "ecs_list").set_original("amigaecs_flop"); +} -MACHINE_CONFIG_START(a500p_state::a500pn) +void a500p_state::a500pn(machine_config &config) +{ a500p(config); - MCFG_DEVICE_MODIFY("maincpu") - MCFG_DEVICE_CLOCK(amiga_state::CLK_7M_NTSC) - MCFG_DEVICE_REMOVE("screen") + m_maincpu->set_clock(amiga_state::CLK_7M_NTSC); + config.device_remove("screen"); ntsc_video(config); - MCFG_DEVICE_MODIFY("amiga") - MCFG_DEVICE_CLOCK(amiga_state::CLK_C1_NTSC) - MCFG_DEVICE_MODIFY("cia_0") - MCFG_DEVICE_CLOCK(amiga_state::CLK_E_NTSC) - MCFG_DEVICE_MODIFY("cia_1") - MCFG_DEVICE_CLOCK(amiga_state::CLK_E_NTSC) - MCFG_DEVICE_MODIFY("fdc") - MCFG_DEVICE_CLOCK(amiga_state::CLK_7M_NTSC) -MACHINE_CONFIG_END - -MACHINE_CONFIG_START(a600_state::a600) + m_paula->set_clock(amiga_state::CLK_C1_NTSC); + m_cia_0->set_clock(amiga_state::CLK_E_NTSC); + m_cia_1->set_clock(amiga_state::CLK_E_NTSC); + m_fdc->set_clock(amiga_state::CLK_7M_NTSC); +} + +void a600_state::a600(machine_config &config) +{ amiga_base(config); // keyboard @@ -1926,8 +1921,8 @@ MACHINE_CONFIG_START(a600_state::a600) kbd.krst_handler().set(FUNC(amiga_state::kbreset_w)); // main cpu - MCFG_DEVICE_ADD("maincpu", M68000, amiga_state::CLK_7M_PAL) - MCFG_DEVICE_PROGRAM_MAP(a600_mem) + M68000(config, m_maincpu, amiga_state::CLK_7M_PAL); + m_maincpu->set_addrmap(AS_PROGRAM, &a600_state::a600_mem); ADDRESS_MAP_BANK(config, "overlay").set_map(&amiga_state::overlay_2mb_map16).set_options(ENDIANNESS_BIG, 16, 22, 0x200000); @@ -1945,28 +1940,24 @@ MACHINE_CONFIG_START(a600_state::a600) // todo: pcmcia // software - MCFG_SOFTWARE_LIST_ADD("ecs_list", "amigaecs_flop") -MACHINE_CONFIG_END + SOFTWARE_LIST(config, "ecs_list").set_original("amigaecs_flop"); +} -MACHINE_CONFIG_START(a600_state::a600n) +void a600_state::a600n(machine_config &config) +{ a600(config); - MCFG_DEVICE_MODIFY("maincpu") - MCFG_DEVICE_CLOCK(amiga_state::CLK_7M_NTSC) - MCFG_DEVICE_MODIFY("gayle") - MCFG_DEVICE_CLOCK(amiga_state::CLK_28M_NTSC / 2) - MCFG_DEVICE_REMOVE("screen") + m_maincpu->set_clock(amiga_state::CLK_7M_NTSC); + subdevice<gayle_device>("gayle")->set_clock(amiga_state::CLK_28M_NTSC / 2); + config.device_remove("screen"); ntsc_video(config); - MCFG_DEVICE_MODIFY("amiga") - MCFG_DEVICE_CLOCK(amiga_state::CLK_C1_NTSC) - MCFG_DEVICE_MODIFY("cia_0") - MCFG_DEVICE_CLOCK(amiga_state::CLK_E_NTSC) - MCFG_DEVICE_MODIFY("cia_1") - MCFG_DEVICE_CLOCK(amiga_state::CLK_E_NTSC) - MCFG_DEVICE_MODIFY("fdc") - MCFG_DEVICE_CLOCK(amiga_state::CLK_7M_NTSC) -MACHINE_CONFIG_END - -MACHINE_CONFIG_START(a1200_state::a1200) + m_paula->set_clock(amiga_state::CLK_C1_NTSC); + m_cia_0->set_clock(amiga_state::CLK_E_NTSC); + m_cia_1->set_clock(amiga_state::CLK_E_NTSC); + m_fdc->set_clock(amiga_state::CLK_7M_NTSC); +} + +void a1200_state::a1200(machine_config &config) +{ amiga_base(config); // keyboard @@ -1976,16 +1967,15 @@ MACHINE_CONFIG_START(a1200_state::a1200) kbd.krst_handler().set(FUNC(amiga_state::kbreset_w)); // main cpu - MCFG_DEVICE_ADD("maincpu", M68EC020, amiga_state::CLK_28M_PAL / 2) - MCFG_DEVICE_PROGRAM_MAP(a1200_mem) + M68EC020(config, m_maincpu, amiga_state::CLK_28M_PAL / 2); + m_maincpu->set_addrmap(AS_PROGRAM, &a1200_state::a1200_mem); ADDRESS_MAP_BANK(config, "overlay").set_map(&amiga_state::overlay_2mb_map32).set_options(ENDIANNESS_BIG, 32, 22, 0x200000); - MCFG_DEVICE_MODIFY("screen") - MCFG_SCREEN_UPDATE_DRIVER(amiga_state, screen_update_amiga_aga) - MCFG_SCREEN_NO_PALETTE + m_screen->set_screen_update(FUNC(amiga_state::screen_update_amiga_aga)); + m_screen->set_palette(finder_base::DUMMY_TAG); - MCFG_DEVICE_REMOVE("palette") + config.device_remove("palette"); MCFG_VIDEO_START_OVERRIDE(amiga_state, amiga_aga) @@ -2002,39 +1992,33 @@ MACHINE_CONFIG_START(a1200_state::a1200) // keyboard #if 0 - MCFG_DEVICE_MODIFY("kbd") - MCFG_SLOT_DEFAULT_OPTION("a1200_us") + subdevice<amiga_keyboard_bus_device>("kbd").set_default_option("a1200_us"); #endif // todo: pcmcia // software - MCFG_SOFTWARE_LIST_ADD("aga_list", "amigaaga_flop") - MCFG_SOFTWARE_LIST_ADD("ecs_list", "amigaecs_flop") -MACHINE_CONFIG_END + SOFTWARE_LIST(config, "aga_list").set_original("amigaaga_flop"); + SOFTWARE_LIST(config, "ecs_list").set_original("amigaecs_flop"); +} -MACHINE_CONFIG_START(a1200_state::a1200n) +void a1200_state::a1200n(machine_config &config) +{ a1200(config); - MCFG_DEVICE_MODIFY("maincpu") - MCFG_DEVICE_CLOCK(amiga_state::CLK_28M_NTSC / 2) - MCFG_DEVICE_MODIFY("gayle") - MCFG_DEVICE_CLOCK(amiga_state::CLK_28M_NTSC / 2) - MCFG_DEVICE_REMOVE("screen") + m_maincpu->set_clock(amiga_state::CLK_28M_NTSC / 2); + subdevice<gayle_device>("gayle")->set_clock(amiga_state::CLK_28M_NTSC / 2); + config.device_remove("screen"); ntsc_video(config); - MCFG_DEVICE_MODIFY("screen") - MCFG_SCREEN_UPDATE_DRIVER(amiga_state, screen_update_amiga_aga) - MCFG_SCREEN_NO_PALETTE - MCFG_DEVICE_MODIFY("amiga") - MCFG_DEVICE_CLOCK(amiga_state::CLK_C1_NTSC) - MCFG_DEVICE_MODIFY("cia_0") - MCFG_DEVICE_CLOCK(amiga_state::CLK_E_NTSC) - MCFG_DEVICE_MODIFY("cia_1") - MCFG_DEVICE_CLOCK(amiga_state::CLK_E_NTSC) - MCFG_DEVICE_MODIFY("fdc") - MCFG_DEVICE_CLOCK(amiga_state::CLK_7M_NTSC) -MACHINE_CONFIG_END - -MACHINE_CONFIG_START(a4000_state::a4000) + m_screen->set_screen_update(FUNC(amiga_state::screen_update_amiga_aga)); + m_screen->set_palette(finder_base::DUMMY_TAG); + m_paula->set_clock(amiga_state::CLK_C1_NTSC); + m_cia_0->set_clock(amiga_state::CLK_E_NTSC); + m_cia_1->set_clock(amiga_state::CLK_E_NTSC); + m_fdc->set_clock(amiga_state::CLK_7M_NTSC); +} + +void a4000_state::a4000(machine_config &config) +{ amiga_base(config); // keyboard @@ -2043,16 +2027,15 @@ MACHINE_CONFIG_START(a4000_state::a4000) kbd.kdat_handler().set("cia_0", FUNC(mos8520_device::sp_w)); // main cpu - MCFG_DEVICE_ADD("maincpu", M68040, XTAL(50'000'000) / 2) - MCFG_DEVICE_PROGRAM_MAP(a4000_mem) + M68040(config, m_maincpu, XTAL(50'000'000) / 2); + m_maincpu->set_addrmap(AS_PROGRAM, &a4000_state::a4000_mem); ADDRESS_MAP_BANK(config, "overlay").set_map(&amiga_state::overlay_2mb_map32).set_options(ENDIANNESS_BIG, 32, 22, 0x200000); - MCFG_DEVICE_MODIFY("screen") - MCFG_SCREEN_UPDATE_DRIVER(amiga_state, screen_update_amiga_aga) - MCFG_SCREEN_NO_PALETTE + m_screen->set_screen_update(FUNC(amiga_state::screen_update_amiga_aga)); + m_screen->set_palette(finder_base::DUMMY_TAG); - MCFG_DEVICE_REMOVE("palette") + config.device_remove("palette"); MCFG_VIDEO_START_OVERRIDE(amiga_state, amiga_aga) @@ -2066,61 +2049,54 @@ MACHINE_CONFIG_START(a4000_state::a4000) // todo: zorro3 // software - MCFG_SOFTWARE_LIST_ADD("aga_list", "amigaaga_flop") - MCFG_SOFTWARE_LIST_ADD("ecs_list", "amigaecs_flop") -MACHINE_CONFIG_END + SOFTWARE_LIST(config, "aga_list").set_original("amigaaga_flop"); + SOFTWARE_LIST(config, "ecs_list").set_original("amigaecs_flop"); +} -MACHINE_CONFIG_START(a4000_state::a4000n) +void a4000_state::a4000n(machine_config &config) +{ a4000(config); - MCFG_DEVICE_REMOVE("screen") + config.device_remove("screen"); ntsc_video(config); - MCFG_DEVICE_MODIFY("screen") - MCFG_SCREEN_UPDATE_DRIVER(amiga_state, screen_update_amiga_aga) - MCFG_SCREEN_NO_PALETTE - MCFG_DEVICE_MODIFY("amiga") - MCFG_DEVICE_CLOCK(amiga_state::CLK_C1_NTSC) - MCFG_DEVICE_MODIFY("cia_0") - MCFG_DEVICE_CLOCK(amiga_state::CLK_E_NTSC) - MCFG_DEVICE_MODIFY("cia_1") - MCFG_DEVICE_CLOCK(amiga_state::CLK_E_NTSC) - MCFG_DEVICE_MODIFY("fdc") - MCFG_DEVICE_CLOCK(amiga_state::CLK_7M_NTSC) -MACHINE_CONFIG_END - -MACHINE_CONFIG_START(a4000_state::a400030) + m_screen->set_screen_update(FUNC(amiga_state::screen_update_amiga_aga)); + m_screen->set_palette(finder_base::DUMMY_TAG); + m_paula->set_clock(amiga_state::CLK_C1_NTSC); + m_cia_0->set_clock(amiga_state::CLK_E_NTSC); + m_cia_1->set_clock(amiga_state::CLK_E_NTSC); + m_fdc->set_clock(amiga_state::CLK_7M_NTSC); +} + +void a4000_state::a400030(machine_config &config) +{ a4000(config); // main cpu - MCFG_DEVICE_REMOVE("maincpu") - MCFG_DEVICE_ADD("maincpu", M68EC030, XTAL(50'000'000) / 2) - MCFG_DEVICE_PROGRAM_MAP(a400030_mem) + M68EC030(config.replace(), m_maincpu, XTAL(50'000'000) / 2); + m_maincpu->set_addrmap(AS_PROGRAM, &a4000_state::a400030_mem); // todo: ide -MACHINE_CONFIG_END +} -MACHINE_CONFIG_START(a4000_state::a400030n) +void a4000_state::a400030n(machine_config &config) +{ a400030(config); - MCFG_DEVICE_REMOVE("screen") + config.device_remove("screen"); ntsc_video(config); - MCFG_DEVICE_MODIFY("screen") - MCFG_SCREEN_UPDATE_DRIVER(amiga_state, screen_update_amiga_aga) - MCFG_SCREEN_NO_PALETTE - MCFG_DEVICE_MODIFY("amiga") - MCFG_DEVICE_CLOCK(amiga_state::CLK_C1_NTSC) - MCFG_DEVICE_MODIFY("cia_0") - MCFG_DEVICE_CLOCK(amiga_state::CLK_E_NTSC) - MCFG_DEVICE_MODIFY("cia_1") - MCFG_DEVICE_CLOCK(amiga_state::CLK_E_NTSC) - MCFG_DEVICE_MODIFY("fdc") - MCFG_DEVICE_CLOCK(amiga_state::CLK_7M_NTSC) -MACHINE_CONFIG_END - -MACHINE_CONFIG_START(cd32_state::cd32) + m_screen->set_screen_update(FUNC(amiga_state::screen_update_amiga_aga)); + m_screen->set_palette(finder_base::DUMMY_TAG); + m_paula->set_clock(amiga_state::CLK_C1_NTSC); + m_cia_0->set_clock(amiga_state::CLK_E_NTSC); + m_cia_1->set_clock(amiga_state::CLK_E_NTSC); + m_fdc->set_clock(amiga_state::CLK_7M_NTSC); +} + +void cd32_state::cd32(machine_config &config) +{ amiga_base(config); // main cpu - MCFG_DEVICE_ADD("maincpu", M68EC020, amiga_state::CLK_28M_PAL / 2) - MCFG_DEVICE_PROGRAM_MAP(cd32_mem) + M68EC020(config, m_maincpu, amiga_state::CLK_28M_PAL / 2); + m_maincpu->set_addrmap(AS_PROGRAM, &cd32_state::cd32_mem); ADDRESS_MAP_BANK(config, "overlay").set_map(&amiga_state::overlay_2mb_map32).set_options(ENDIANNESS_BIG, 32, 22, 0x200000); @@ -2134,74 +2110,62 @@ MACHINE_CONFIG_START(cd32_state::cd32) akiko.sda_r_callback().set("i2cmem", FUNC(i2cmem_device::read_sda)); akiko.sda_w_callback().set("i2cmem", FUNC(i2cmem_device::write_sda)); - MCFG_DEVICE_MODIFY("screen") - MCFG_SCREEN_UPDATE_DRIVER(amiga_state, screen_update_amiga_aga) - MCFG_SCREEN_NO_PALETTE + m_screen->set_screen_update(FUNC(amiga_state::screen_update_amiga_aga)); + m_screen->set_palette(finder_base::DUMMY_TAG); - MCFG_DEVICE_REMOVE("palette") + config.device_remove("palette"); MCFG_VIDEO_START_OVERRIDE(amiga_state, amiga_aga) - MCFG_DEVICE_ADD("cdda", CDDA) - MCFG_SOUND_ROUTE(0, "lspeaker", 0.50) - MCFG_SOUND_ROUTE(1, "rspeaker", 0.50) + CDDA(config, m_cdda); + m_cdda->add_route(0, "lspeaker", 0.50); + m_cdda->add_route(1, "rspeaker", 0.50); - MCFG_DEVICE_MODIFY("cia_0") - MCFG_MOS6526_PA_OUTPUT_CALLBACK(WRITE8(*this, cd32_state, akiko_cia_0_port_a_write)) - MCFG_MOS6526_SP_CALLBACK(NOOP) + m_cia_0->pa_wr_callback().set(FUNC(cd32_state::akiko_cia_0_port_a_write)); + m_cia_0->sp_wr_callback().set_nop(); - MCFG_CDROM_ADD("cdrom") - MCFG_CDROM_INTERFACE("cd32_cdrom") - MCFG_SOFTWARE_LIST_ADD("cd_list", "cd32") -MACHINE_CONFIG_END + CDROM(config, "cdrom").set_interface("cd32_cdrom"); + SOFTWARE_LIST(config, "cd_list").set_original("cd32"); +} -MACHINE_CONFIG_START(cd32_state::cd32n) +void cd32_state::cd32n(machine_config &config) +{ cd32(config); - MCFG_DEVICE_MODIFY("maincpu") - MCFG_DEVICE_CLOCK(amiga_state::CLK_28M_NTSC / 2) - MCFG_DEVICE_REMOVE("screen") + m_maincpu->set_clock(amiga_state::CLK_28M_NTSC / 2); + config.device_remove("screen"); ntsc_video(config); - MCFG_DEVICE_MODIFY("screen") - MCFG_SCREEN_UPDATE_DRIVER(amiga_state, screen_update_amiga_aga) - MCFG_SCREEN_NO_PALETTE - MCFG_DEVICE_MODIFY("amiga") - MCFG_DEVICE_CLOCK(amiga_state::CLK_C1_NTSC) - MCFG_DEVICE_MODIFY("cia_0") - MCFG_DEVICE_CLOCK(amiga_state::CLK_E_NTSC) - MCFG_DEVICE_MODIFY("cia_1") - MCFG_DEVICE_CLOCK(amiga_state::CLK_E_NTSC) - MCFG_DEVICE_MODIFY("fdc") - MCFG_DEVICE_CLOCK(amiga_state::CLK_7M_NTSC) -MACHINE_CONFIG_END - -MACHINE_CONFIG_START(a4000_state::a4000t) + m_screen->set_screen_update(FUNC(amiga_state::screen_update_amiga_aga)); + m_screen->set_palette(finder_base::DUMMY_TAG); + m_paula->set_clock(amiga_state::CLK_C1_NTSC); + m_cia_0->set_clock(amiga_state::CLK_E_NTSC); + m_cia_1->set_clock(amiga_state::CLK_E_NTSC); + m_fdc->set_clock(amiga_state::CLK_7M_NTSC); +} + +void a4000_state::a4000t(machine_config &config) +{ a4000(config); // main cpu - MCFG_DEVICE_REMOVE("maincpu") - MCFG_DEVICE_ADD("maincpu", M68040, XTAL(50'000'000) / 2) - MCFG_DEVICE_PROGRAM_MAP(a4000t_mem) + M68040(config.replace(), m_maincpu, XTAL(50'000'000) / 2); + m_maincpu->set_addrmap(AS_PROGRAM, &a4000_state::a4000t_mem); // todo: ide, zorro3, scsi, super dmac -MACHINE_CONFIG_END +} -MACHINE_CONFIG_START(a4000_state::a4000tn) +void a4000_state::a4000tn(machine_config &config) +{ a4000(config); - MCFG_DEVICE_REMOVE("screen") + config.device_remove("screen"); ntsc_video(config); - MCFG_DEVICE_MODIFY("screen") - MCFG_SCREEN_UPDATE_DRIVER(amiga_state, screen_update_amiga_aga) - MCFG_SCREEN_NO_PALETTE - MCFG_DEVICE_MODIFY("amiga") - MCFG_DEVICE_CLOCK(amiga_state::CLK_C1_NTSC) - MCFG_DEVICE_MODIFY("cia_0") - MCFG_DEVICE_CLOCK(amiga_state::CLK_E_NTSC) - MCFG_DEVICE_MODIFY("cia_1") - MCFG_DEVICE_CLOCK(amiga_state::CLK_E_NTSC) - MCFG_DEVICE_MODIFY("fdc") - MCFG_DEVICE_CLOCK(amiga_state::CLK_7M_NTSC) -MACHINE_CONFIG_END + m_screen->set_screen_update(FUNC(amiga_state::screen_update_amiga_aga)); + m_screen->set_palette(finder_base::DUMMY_TAG); + m_paula->set_clock(amiga_state::CLK_C1_NTSC); + m_cia_0->set_clock(amiga_state::CLK_E_NTSC); + m_cia_1->set_clock(amiga_state::CLK_E_NTSC); + m_fdc->set_clock(amiga_state::CLK_7M_NTSC); +} //************************************************************************** |