diff --git a/src/devices/bus/macpds/macpds.h b/src/devices/bus/macpds/macpds.h index 7e92ec71087..d37a393a78a 100644 --- a/src/devices/bus/macpds/macpds.h +++ b/src/devices/bus/macpds/macpds.h @@ -19,15 +19,6 @@ // INTERFACE CONFIGURATION MACROS //************************************************************************** -#define MCFG_MACPDS_BUS_ADD(_tag, _cputag) \ - MCFG_DEVICE_ADD(_tag, MACPDS, 0) \ - downcast(*device).set_cputag(_cputag); - -#define MCFG_MACPDS_SLOT_ADD(_nbtag, _tag, _slot_intf, _def_slot) \ - MCFG_DEVICE_ADD(_tag, MACPDS_SLOT, 0) \ - MCFG_DEVICE_SLOT_INTERFACE(_slot_intf, _def_slot, false) \ - downcast(*device).set_macpds_slot(_nbtag, _tag); - #define MCFG_MACPDS_SLOT_REMOVE(_tag) \ MCFG_DEVICE_REMOVE(_tag) @@ -50,6 +41,16 @@ class macpds_slot_device : public device_t, { public: // construction/destruction + template + macpds_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, const char *nbtag, T &&opts, const char *dflt) + : macpds_slot_device(mconfig, tag, owner, (uint32_t)0) + { + option_reset(); + opts(*this); + set_default_option(dflt); + set_macpds_slot(nbtag, tag); + } + macpds_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); // inline configuration @@ -76,7 +77,14 @@ class macpds_device : public device_t { public: // construction/destruction + macpds_device(const machine_config &mconfig, const char *tag, device_t *owner, const char *cputag) + : macpds_device(mconfig, tag, owner, (uint32_t)0) + { + set_cputag(cputag); + } + macpds_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + ~macpds_device() { m_device_list.detach_all(); } // inline configuration void set_cputag(const char *tag) { m_cputag = tag; } diff --git a/src/devices/bus/nubus/nubus.h b/src/devices/bus/nubus/nubus.h index 37c5700df6e..919f989ebfb 100644 --- a/src/devices/bus/nubus/nubus.h +++ b/src/devices/bus/nubus/nubus.h @@ -62,6 +62,16 @@ class nubus_slot_device : public device_t, public device_slot_interface { public: // construction/destruction + template + nubus_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, const char *nbtag, T &&opts, const char *dflt) + : nubus_slot_device(mconfig, tag, owner, (uint32_t)0) + { + option_reset(); + opts(*this); + set_default_option(dflt); + set_nubus_slot(nbtag, tag); + } + nubus_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); // inline configuration @@ -97,6 +107,12 @@ public: template devcb_base &set_out_irqc_callback(Object &&cb) { return m_out_irqc_cb.set_callback(std::forward(cb)); } template devcb_base &set_out_irqd_callback(Object &&cb) { return m_out_irqd_cb.set_callback(std::forward(cb)); } template devcb_base &set_out_irqe_callback(Object &&cb) { return m_out_irqe_cb.set_callback(std::forward(cb)); } + auto out_irq9_callback() { return m_out_irq9_cb.bind(); } + auto out_irqa_callback() { return m_out_irqa_cb.bind(); } + auto out_irqb_callback() { return m_out_irqb_cb.bind(); } + auto out_irqc_callback() { return m_out_irqc_cb.bind(); } + auto out_irqd_callback() { return m_out_irqd_cb.bind(); } + auto out_irqe_callback() { return m_out_irqe_cb.bind(); } void add_nubus_card(device_nubus_card_interface *card); void install_device(offs_t start, offs_t end, read8_delegate rhandler, write8_delegate whandler, uint32_t mask=0xffffffff); diff --git a/src/devices/machine/8530scc.h b/src/devices/machine/8530scc.h index 457a0d36334..c95d2d7bdc7 100644 --- a/src/devices/machine/8530scc.h +++ b/src/devices/machine/8530scc.h @@ -32,6 +32,7 @@ public: scc8530_t(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); template devcb_base &set_intrq_wr_callback(Object &&cb) { return intrq_cb.set_callback(std::forward(cb)); } + auto intrq_callback() { return intrq_cb.bind(); } uint8_t get_reg_a(int reg); uint8_t get_reg_b(int reg); diff --git a/src/devices/machine/applefdc.h b/src/devices/machine/applefdc.h index 3e70a8630ab..eede57199f7 100644 --- a/src/devices/machine/applefdc.h +++ b/src/devices/machine/applefdc.h @@ -136,6 +136,12 @@ public: class iwm_device : public applefdc_base_device { public: + iwm_device(const machine_config &mconfig, const char *tag, device_t *owner, const applefdc_interface *intrf) + : iwm_device(mconfig, tag, owner, (uint32_t)0) + { + set_config(intrf); + } + iwm_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); }; diff --git a/src/devices/machine/ncr539x.h b/src/devices/machine/ncr539x.h index 2f024d643ec..8caa26c25a1 100644 --- a/src/devices/machine/ncr539x.h +++ b/src/devices/machine/ncr539x.h @@ -28,6 +28,8 @@ public: template devcb_base &set_out_irq_callback(Object &&cb) { return m_out_irq_cb.set_callback(std::forward(cb)); } template devcb_base &set_out_drq_callback(Object &&cb) { return m_out_drq_cb.set_callback(std::forward(cb)); } + auto irq_callback() { return m_out_irq_cb.bind(); } + auto drq_callback() { return m_out_drq_cb.bind(); } // our API DECLARE_READ8_MEMBER(read); diff --git a/src/devices/sound/asc.h b/src/devices/sound/asc.h index a723707a9e9..582f7ce5e93 100644 --- a/src/devices/sound/asc.h +++ b/src/devices/sound/asc.h @@ -59,18 +59,20 @@ public: ARDBEG = 7 // Subset of ASC included in the Ardbeg ASIC (LC520) }; + asc_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock, asc_type type) + : asc_device(mconfig, tag, owner, clock) + { + set_type(type); + } - // construction/destruction asc_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); - // inline configuration helpers void set_type(asc_type type) { m_chip_type = type; } - - template devcb_base &set_irqf(Write &&wr) { return write_irq.set_callback(std::forward(wr)); } + auto irqf_callback() { return write_irq.bind(); } DECLARE_READ8_MEMBER(read); DECLARE_WRITE8_MEMBER(write); diff --git a/src/emu/didisasm.h b/src/emu/didisasm.h index 407fb69f399..751ba86b2b6 100644 --- a/src/emu/didisasm.h +++ b/src/emu/didisasm.h @@ -39,6 +39,12 @@ public: // Override template void set_dasm_override(Obj &&cb) { m_dasm_override = std::forward(cb); } + void set_dasm_override(dasm_override_delegate callback) { m_dasm_override = callback; } + template void set_dasm_override(offs_t (FunctionClass::*callback)(std::ostream &, offs_t, + const util::disasm_interface::data_buffer &, const util::disasm_interface::data_buffer &), const char *name) + { + set_dasm_override(dasm_override_delegate(callback, name, nullptr, static_cast(nullptr))); + } // disassembler request util::disasm_interface &get_disassembler(); diff --git a/src/mame/drivers/mac.cpp b/src/mame/drivers/mac.cpp index 40721c34360..eed486c4216 100644 --- a/src/mame/drivers/mac.cpp +++ b/src/mame/drivers/mac.cpp @@ -569,27 +569,6 @@ WRITE8_MEMBER(mac_state::mac_5396_w) } } -#define MAC_MAIN_SND_BUF_OFFSET 0x0300 -#define MAC_ALT_SND_BUF_OFFSET 0x5F00 - -TIMER_DEVICE_CALLBACK_MEMBER(mac_state::mac_scanline) -{ - int scanline = param; - uint16_t *mac_snd_buf_ptr; - - if (m_main_buffer) - { - mac_snd_buf_ptr = (uint16_t *)(m_ram->pointer() + m_ram->size() - MAC_MAIN_SND_BUF_OFFSET); - } - else - { - mac_snd_buf_ptr = (uint16_t *)(m_ram->pointer() + m_ram->size() - MAC_ALT_SND_BUF_OFFSET); - } - - m_dac->write(mac_snd_buf_ptr[scanline] >> 8); -} - - /*************************************************************************** ADDRESS MAPS ***************************************************************************/ @@ -933,1082 +912,780 @@ static const floppy_interface mac_floppy_interface = "floppy_3_5" }; -MACHINE_CONFIG_START(mac_state::mac512ke) +void mac_state::add_base_devices(machine_config &config, bool rtc, bool super_woz) +{ + if (rtc) + RTC3430042(config, m_rtc, XTAL(32'768)); - /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", M68000, C7M) /* 7.8336 MHz */ - MCFG_DEVICE_PROGRAM_MAP(mac512ke_map) - MCFG_DEVICE_DISASSEMBLE_OVERRIDE(mac_state, mac_dasm_override) - MCFG_QUANTUM_TIME(attotime::from_hz(60)) + if (super_woz) + SWIM(config, m_fdc, &mac_iwm_interface); + else + IWM(config, m_fdc, &mac_iwm_interface); + sonydriv_floppy_image_device::legacy_2_drives_add(config, &mac_floppy_interface); - /* video hardware */ - MCFG_SCREEN_ADD(MAC_SCREEN_NAME, RASTER) - MCFG_SCREEN_RAW_PARAMS(C7M*2, MAC_H_TOTAL, 0, MAC_H_VIS, MAC_V_TOTAL, 0, MAC_V_VIS) - MCFG_SCREEN_UPDATE_DRIVER(mac_state, screen_update_mac) - MCFG_SCREEN_PALETTE("palette") + SCC8530(config, m_scc, C7M); + m_scc->intrq_callback().set(FUNC(mac_state::set_scc_interrupt)); +} - MCFG_PALETTE_ADD("palette", 2) - MCFG_PALETTE_INIT_OWNER(mac_state,mac) +void mac_state::add_mackbd(machine_config &config) +{ +#ifdef MAC_USE_EMULATED_KBD + MACKBD(config, m_mackbd, 0); + m_mackbd->dataout_handler().set(m_via, FUNC(via6522_device::write_cb2)); + m_mackbd->clkout_handler().set(FUNC(mac_state::mac_kbd_clk_in)); +#else + MACKBD(config, m_mackbd, 0); +#endif +} + +void mac_state::add_scsi(machine_config &config, bool cdrom) +{ + scsi_port_device &scsibus(SCSI_PORT(config, "scsi")); + scsibus.set_slot_device(1, "harddisk", SCSIHD, DEVICE_INPUT_DEFAULTS_NAME(SCSI_ID_6)); + scsibus.set_slot_device(2, "harddisk", SCSIHD, DEVICE_INPUT_DEFAULTS_NAME(SCSI_ID_5)); + if (cdrom) + scsibus.set_slot_device(3, "cdrom", SCSICD, DEVICE_INPUT_DEFAULTS_NAME(SCSI_ID_4)); + + NCR5380(config, m_ncr5380, C7M); + m_ncr5380->set_scsi_port("scsi"); + m_ncr5380->irq_callback().set(FUNC(mac_state::mac_scsi_irq)); + + SOFTWARE_LIST(config, "hdd_list").set_type("mac_hdd", SOFTWARE_LIST_ORIGINAL_SYSTEM); +} + +void mac_state::add_via1_adb(machine_config &config, bool macii) +{ + VIA6522(config, m_via1, C7M/10); + m_via1->readpa_handler().set(FUNC(mac_state::mac_via_in_a)); + if (macii) + m_via1->readpb_handler().set(FUNC(mac_state::mac_via_in_b_ii)); + else + m_via1->readpb_handler().set(FUNC(mac_state::mac_via_in_b)); + m_via1->writepa_handler().set(FUNC(mac_state::mac_via_out_a)); + m_via1->writepb_handler().set(FUNC(mac_state::mac_via_out_b_bbadb)); + m_via1->cb2_handler().set(FUNC(mac_state::mac_adb_via_out_cb2)); + m_via1->irq_handler().set(FUNC(mac_state::mac_via_irq)); +} + +void mac_state::add_via2(machine_config &config) +{ + VIA6522(config, m_via2, C7M/10); + m_via2->readpa_handler().set(FUNC(mac_state::mac_via2_in_a)); + m_via2->readpb_handler().set(FUNC(mac_state::mac_via2_in_b)); + m_via2->writepa_handler().set(FUNC(mac_state::mac_via2_out_a)); + m_via2->writepb_handler().set(FUNC(mac_state::mac_via2_out_b)); + m_via2->irq_handler().set(FUNC(mac_state::mac_via2_irq)); +} + +void mac_state::add_egret(machine_config &config, int type) +{ + EGRET(config, m_egret, type); + m_egret->reset_callback().set(FUNC(mac_state::cuda_reset_w)); + m_egret->linechange_callback().set(FUNC(mac_state::adb_linechange_w)); + m_egret->via_clock_callback().set(m_via1, FUNC(via6522_device::write_cb1)); + m_egret->via_data_callback().set(m_via1, FUNC(via6522_device::write_cb2)); + config.m_perfect_cpu_quantum = subtag("maincpu"); +} + +void mac_state::add_cuda(machine_config &config, int type) +{ + CUDA(config, m_cuda, type); + m_cuda->reset_callback().set(FUNC(mac_state::cuda_reset_w)); + m_cuda->linechange_callback().set(FUNC(mac_state::adb_linechange_w)); + m_cuda->via_clock_callback().set(m_via1, FUNC(via6522_device::write_cb1)); + m_cuda->via_data_callback().set(m_via1, FUNC(via6522_device::write_cb2)); +} + +void mac_state::add_asc(machine_config &config, asc_device::asc_type type) +{ + SPEAKER(config, "lspeaker").front_left(); + SPEAKER(config, "rspeaker").front_right(); + ASC(config, m_asc, C15M, type); + m_asc->irqf_callback().set(FUNC(mac_state::mac_asc_irq)); + m_asc->add_route(0, "lspeaker", 1.0); + m_asc->add_route(1, "rspeaker", 1.0); +} + +void mac_state::add_pb1xx_screen(machine_config &config) +{ + SCREEN(config, m_screen, SCREEN_TYPE_RASTER); + m_screen->set_refresh_hz(60.15); + m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(1260)); + m_screen->set_video_attributes(VIDEO_UPDATE_BEFORE_VBLANK); + m_screen->set_size(700, 480); + m_screen->set_visarea(0, 639, 0, 399); + m_screen->set_palette(m_palette); +} + +void mac_state::add_pb1xx_vias(machine_config &config) +{ + VIA6522(config, m_via1, 783360); + m_via1->readpa_handler().set(FUNC(mac_state::mac_via_in_a)); + m_via1->readpb_handler().set(FUNC(mac_state::mac_via_in_b_via2pmu)); + m_via1->writepa_handler().set(FUNC(mac_state::mac_via_out_a)); + m_via1->writepb_handler().set(FUNC(mac_state::mac_via_out_b_via2pmu)); + m_via1->cb2_handler().set(FUNC(mac_state::mac_adb_via_out_cb2)); + m_via1->irq_handler().set(FUNC(mac_state::mac_via_irq)); + + VIA6522(config, m_via2, 783360); + m_via2->readpa_handler().set(FUNC(mac_state::mac_via2_in_a_pmu)); + m_via2->readpb_handler().set(FUNC(mac_state::mac_via2_in_b_pmu)); + m_via2->writepa_handler().set(FUNC(mac_state::mac_via2_out_a_pmu)); + m_via2->writepb_handler().set(FUNC(mac_state::mac_via2_out_b_pmu)); + m_via2->irq_handler().set(FUNC(mac_state::mac_via2_irq)); +} + +void mac_state::mac512ke_base(machine_config &config) +{ + M68000(config, m_maincpu, C7M); /* 7.8336 MHz */ + m_maincpu->set_addrmap(AS_PROGRAM, &mac_state::mac512ke_map); + m_maincpu->set_dasm_override(FUNC(mac_state::mac_dasm_override)); + config.m_minimum_quantum = attotime::from_hz(60); + + SCREEN(config, m_screen, SCREEN_TYPE_RASTER); + m_screen->set_raw(C7M*2, MAC_H_TOTAL, 0, MAC_H_VIS, MAC_V_TOTAL, 0, MAC_V_VIS); + m_screen->set_screen_update(FUNC(mac_state::screen_update_mac)); + m_screen->set_palette(m_palette); + + PALETTE(config, m_palette, 2); + m_palette->set_init(DEVICE_SELF_OWNER, FUNC(mac_state::palette_init_mac)); MCFG_VIDEO_START_OVERRIDE(mac_state,mac) - MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", mac_state, mac_scanline, "screen", 0, 1) - - /* sound hardware */ SPEAKER(config, "speaker").front_center(); - MCFG_DEVICE_ADD("dac", DAC_8BIT_PWM, 0) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "speaker", 0.25) // 2 x ls161 - MCFG_DEVICE_ADD("vref", VOLTAGE_REGULATOR, 0) MCFG_VOLTAGE_REGULATOR_OUTPUT(5.0) - MCFG_SOUND_ROUTE(0, "dac", 1.0, DAC_VREF_POS_INPUT) MCFG_SOUND_ROUTE(0, "dac", -1.0, DAC_VREF_NEG_INPUT) + DAC_8BIT_PWM(config, m_dac, 0); + m_dac->add_route(ALL_OUTPUTS, "speaker", 0.25); // 2 x ls161 + voltage_regulator_device &vreg(VOLTAGE_REGULATOR(config, "vref", 0)); + vreg.set_output(5.0); + vreg.add_route(0, "dac", 1.0, DAC_VREF_POS_INPUT); + vreg.add_route(0, "dac", -1.0, DAC_VREF_NEG_INPUT); - /* devices */ - MCFG_RTC3430042_ADD("rtc", XTAL(32'768)) - MCFG_IWM_ADD("fdc", mac_iwm_interface) - MCFG_LEGACY_FLOPPY_SONY_2_DRIVES_ADD(mac_floppy_interface) + add_base_devices(config, true, false); - MCFG_DEVICE_ADD("scc", SCC8530, C7M) - MCFG_Z8530_INTRQ_CALLBACK(WRITELINE(*this, mac_state, set_scc_interrupt)) + VIA6522(config, m_via1, 1000000); + m_via1->readpa_handler().set(FUNC(mac_state::mac_via_in_a)); + m_via1->readpb_handler().set(FUNC(mac_state::mac_via_in_b)); + m_via1->writepa_handler().set(FUNC(mac_state::mac_via_out_a)); + m_via1->writepb_handler().set(FUNC(mac_state::mac_via_out_b)); + m_via1->cb2_handler().set(FUNC(mac_state::mac_via_out_cb2)); + m_via1->irq_handler().set(FUNC(mac_state::mac_via_irq)); - MCFG_DEVICE_ADD("via6522_0", VIA6522, 1000000) - MCFG_VIA6522_READPA_HANDLER(READ8(*this, mac_state,mac_via_in_a)) - MCFG_VIA6522_READPB_HANDLER(READ8(*this, mac_state,mac_via_in_b)) - MCFG_VIA6522_WRITEPA_HANDLER(WRITE8(*this, mac_state,mac_via_out_a)) - MCFG_VIA6522_WRITEPB_HANDLER(WRITE8(*this, mac_state,mac_via_out_b)) - MCFG_VIA6522_CB2_HANDLER(WRITELINE(*this, mac_state,mac_via_out_cb2)) - MCFG_VIA6522_IRQ_HANDLER(WRITELINE(*this, mac_state,mac_via_irq)) + RAM(config, m_ram); + m_ram->set_default_size("512K"); +} - MCFG_MACKBD_ADD(MACKBD_TAG) -#ifdef MAC_USE_EMULATED_KBD - MCFG_MACKBD_DATAOUT_HANDLER(WRITELINE("via6522_0", via6522_device, write_cb2)) - MCFG_MACKBD_CLKOUT_HANDLER(WRITELINE(*this, mac_state, mac_kbd_clk_in)) -#endif +void mac_state::mac512ke(machine_config &config) +{ + mac512ke_base(config); + add_mackbd(config); +} + +void mac_state::add_macplus_additions(machine_config &config) +{ + m_maincpu->set_addrmap(AS_PROGRAM, &mac_state::macplus_map); + + add_scsi(config); /* internal ram */ - MCFG_RAM_ADD(RAM_TAG) - MCFG_RAM_DEFAULT_SIZE("512K") -MACHINE_CONFIG_END - -MACHINE_CONFIG_START(mac_state::macplus) - mac512ke(config); - MCFG_DEVICE_MODIFY( "maincpu" ) - MCFG_DEVICE_PROGRAM_MAP(macplus_map) - - MCFG_DEVICE_ADD("scsi", SCSI_PORT, 0) - MCFG_SCSIDEV_ADD("scsi:" SCSI_PORT_DEVICE1, "harddisk", SCSIHD, SCSI_ID_6) - MCFG_SCSIDEV_ADD("scsi:" SCSI_PORT_DEVICE2, "harddisk", SCSIHD, SCSI_ID_5) - - MCFG_DEVICE_ADD("ncr5380", NCR5380, C7M) - MCFG_LEGACY_SCSI_PORT("scsi") - MCFG_NCR5380_IRQ_CB(WRITELINE(*this, mac_state, mac_scsi_irq)) - - MCFG_LEGACY_FLOPPY_SONY_2_DRIVES_MODIFY(mac_floppy_interface) - - /* internal ram */ - MCFG_RAM_MODIFY(RAM_TAG) - MCFG_RAM_DEFAULT_SIZE("4M") - MCFG_RAM_EXTRA_OPTIONS("1M,2M,2560K,4M") + m_ram->set_default_size("4M"); + m_ram->set_extra_options("1M,2M,2560K,4M"); // software list - MCFG_SOFTWARE_LIST_ADD("flop35_list","mac_flop") - MCFG_SOFTWARE_LIST_ADD("hdd_list", "mac_hdd") -MACHINE_CONFIG_END + SOFTWARE_LIST(config, "flop35_list").set_type("mac_flop", SOFTWARE_LIST_ORIGINAL_SYSTEM); +} -MACHINE_CONFIG_START(mac_state::macse) - macplus(config); - MCFG_DEVICE_MODIFY("maincpu") - MCFG_DEVICE_PROGRAM_MAP(macse_map) +void mac_state::add_nubus(machine_config &config, bool bank1, bool bank2) +{ + nubus_device &nubus(NUBUS(config, "nubus", 0)); + nubus.set_cputag("maincpu"); + nubus.out_irq9_callback().set(FUNC(mac_state::nubus_irq_9_w)); + nubus.out_irqa_callback().set(FUNC(mac_state::nubus_irq_a_w)); + nubus.out_irqb_callback().set(FUNC(mac_state::nubus_irq_b_w)); + nubus.out_irqc_callback().set(FUNC(mac_state::nubus_irq_c_w)); + nubus.out_irqd_callback().set(FUNC(mac_state::nubus_irq_d_w)); + nubus.out_irqe_callback().set(FUNC(mac_state::nubus_irq_e_w)); + if (bank1) + { + NUBUS_SLOT(config, "nb9", "nubus", mac_nubus_cards, "48gc"); + NUBUS_SLOT(config, "nba", "nubus", mac_nubus_cards, nullptr); + NUBUS_SLOT(config, "nbb", "nubus", mac_nubus_cards, nullptr); + } + if (bank2) + { + NUBUS_SLOT(config, "nbc", "nubus", mac_nubus_cards, nullptr); + NUBUS_SLOT(config, "nbd", "nubus", mac_nubus_cards, nullptr); + NUBUS_SLOT(config, "nbe", "nubus", mac_nubus_cards, nullptr); + } +} - MCFG_DEVICE_REMOVE("via6522_0") - MCFG_DEVICE_ADD("via6522_0", VIA6522, 1000000) - MCFG_VIA6522_READPA_HANDLER(READ8(*this, mac_state,mac_via_in_a)) - MCFG_VIA6522_READPB_HANDLER(READ8(*this, mac_state,mac_via_in_b)) - MCFG_VIA6522_WRITEPA_HANDLER(WRITE8(*this, mac_state,mac_via_out_a)) - MCFG_VIA6522_WRITEPB_HANDLER(WRITE8(*this, mac_state,mac_via_out_b_bbadb)) - MCFG_VIA6522_CB2_HANDLER(WRITELINE(*this, mac_state,mac_adb_via_out_cb2)) - MCFG_VIA6522_IRQ_HANDLER(WRITELINE(*this, mac_state,mac_via_irq)) +template void mac_state::add_nubus_pds(machine_config &config, const char *slot_tag, T &&opts) +{ + nubus_device &nubus(NUBUS(config, "pds", 0)); + nubus.set_cputag("maincpu"); + nubus.out_irq9_callback().set(FUNC(mac_state::nubus_irq_9_w)); + nubus.out_irqa_callback().set(FUNC(mac_state::nubus_irq_a_w)); + nubus.out_irqb_callback().set(FUNC(mac_state::nubus_irq_b_w)); + nubus.out_irqc_callback().set(FUNC(mac_state::nubus_irq_c_w)); + nubus.out_irqd_callback().set(FUNC(mac_state::nubus_irq_d_w)); + nubus.out_irqe_callback().set(FUNC(mac_state::nubus_irq_e_w)); + NUBUS_SLOT(config, slot_tag, "pds", std::forward(opts), nullptr); +} + +void mac_state::macplus(machine_config &config) +{ + mac512ke_base(config); + add_macplus_additions(config); + add_mackbd(config); +} + +void mac_state::macse(machine_config &config) +{ + mac512ke_base(config); + add_macplus_additions(config); + m_maincpu->set_addrmap(AS_PROGRAM, mac_state::macse_map); + + m_via1->writepb_handler().set(FUNC(mac_state::mac_via_out_b_bbadb)); + m_via1->cb2_handler().set(FUNC(mac_state::mac_adb_via_out_cb2)); /* internal ram */ - MCFG_RAM_MODIFY(RAM_TAG) - MCFG_RAM_DEFAULT_SIZE("4M") - MCFG_RAM_EXTRA_OPTIONS("2M,2560K,4M") + m_ram->set_default_size("4M"); + m_ram->set_extra_options("2M,2560K,4M"); - MCFG_MACKBD_REMOVE(MACKBD_TAG) + MACPDS(config, "sepds", "maincpu"); + MACPDS_SLOT(config, "pds", "sepds", mac_sepds_cards, nullptr); +} - MCFG_MACPDS_BUS_ADD("sepds", "maincpu") - MCFG_MACPDS_SLOT_ADD("sepds", "pds", mac_sepds_cards, nullptr) -MACHINE_CONFIG_END +void mac_state::macclasc(machine_config &config) +{ + mac512ke_base(config); + add_macplus_additions(config); + m_maincpu->set_addrmap(AS_PROGRAM, &mac_state::macse_map); -MACHINE_CONFIG_START(mac_state::macclasc) - macplus(config); - MCFG_DEVICE_MODIFY("maincpu") - MCFG_DEVICE_PROGRAM_MAP(macse_map) - - MCFG_DEVICE_REMOVE("via6522_0") - MCFG_DEVICE_ADD("via6522_0", VIA6522, 1000000) - MCFG_VIA6522_READPA_HANDLER(READ8(*this, mac_state,mac_via_in_a)) - MCFG_VIA6522_READPB_HANDLER(READ8(*this, mac_state,mac_via_in_b)) - MCFG_VIA6522_WRITEPA_HANDLER(WRITE8(*this, mac_state,mac_via_out_a)) - MCFG_VIA6522_WRITEPB_HANDLER(WRITE8(*this, mac_state,mac_via_out_b_bbadb)) - MCFG_VIA6522_CB2_HANDLER(WRITELINE(*this, mac_state,mac_adb_via_out_cb2)) - MCFG_VIA6522_IRQ_HANDLER(WRITELINE(*this, mac_state,mac_via_irq)) + m_via1->writepb_handler().set(FUNC(mac_state::mac_via_out_b_bbadb)); + m_via1->cb2_handler().set(FUNC(mac_state::mac_adb_via_out_cb2)); /* internal ram */ - MCFG_RAM_MODIFY(RAM_TAG) - MCFG_RAM_DEFAULT_SIZE("4M") - MCFG_RAM_EXTRA_OPTIONS("2M,2560K,4M") + m_ram->set_default_size("4M"); + m_ram->set_extra_options("2M,2560K,4M"); +} - MCFG_MACKBD_REMOVE(MACKBD_TAG) -MACHINE_CONFIG_END - -MACHINE_CONFIG_START(mac_state::macprtb) +void mac_state::macprtb(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", M68000, C15M) - MCFG_DEVICE_PROGRAM_MAP(macprtb_map) - MCFG_DEVICE_DISASSEMBLE_OVERRIDE(mac_state, mac_dasm_override) - MCFG_QUANTUM_TIME(attotime::from_hz(60)) + M68000(config, m_maincpu, C15M); + m_maincpu->set_addrmap(AS_PROGRAM, &mac_state::macprtb_map); + m_maincpu->set_dasm_override(FUNC(mac_state::mac_dasm_override)); - /* video hardware */ - MCFG_SCREEN_ADD(MAC_SCREEN_NAME, RASTER) - MCFG_SCREEN_REFRESH_RATE(60.15) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(1260)) - MCFG_SCREEN_VIDEO_ATTRIBUTES(VIDEO_UPDATE_BEFORE_VBLANK) - MCFG_SCREEN_SIZE(700, 480) - MCFG_SCREEN_VISIBLE_AREA(0, 639, 0, 399) - MCFG_SCREEN_UPDATE_DRIVER(mac_state, screen_update_macprtb) - MCFG_SCREEN_PALETTE("palette") + config.m_minimum_quantum = attotime::from_hz(60); - MCFG_PALETTE_ADD("palette", 2) - MCFG_PALETTE_INIT_OWNER(mac_state,mac) + add_pb1xx_screen(config); + m_screen->set_screen_update(FUNC(mac_state::screen_update_macprtb)); + + PALETTE(config, m_palette, 2); + m_palette->set_init(DEVICE_SELF_OWNER, FUNC(mac_state::palette_init_mac)); MCFG_VIDEO_START_OVERRIDE(mac_state,macprtb) - /* sound hardware */ - SPEAKER(config, "lspeaker").front_left(); - SPEAKER(config, "rspeaker").front_right(); - MCFG_ASC_ADD("asc", C15M, ASC, WRITELINE(*this, mac_state, mac_asc_irq)) - MCFG_SOUND_ROUTE(0, "lspeaker", 1.0) - MCFG_SOUND_ROUTE(1, "rspeaker", 1.0) - /* devices */ - MCFG_RTC3430042_ADD("rtc", XTAL(32'768)) + add_base_devices(config); + add_scsi(config); + add_asc(config, asc_device::asc_type::ASC); - MCFG_DEVICE_ADD("scsi", SCSI_PORT, 0) - MCFG_SCSIDEV_ADD("scsi:" SCSI_PORT_DEVICE1, "harddisk", SCSIHD, SCSI_ID_6) - MCFG_SCSIDEV_ADD("scsi:" SCSI_PORT_DEVICE2, "harddisk", SCSIHD, SCSI_ID_5) + VIA6522(config, m_via1, 783360); + m_via1->readpa_handler().set(FUNC(mac_state::mac_via_in_a_pmu)); + m_via1->readpb_handler().set(FUNC(mac_state::mac_via_in_b_pmu)); + m_via1->writepa_handler().set(FUNC(mac_state::mac_via_out_a_pmu)); + m_via1->writepb_handler().set(FUNC(mac_state::mac_via_out_b_pmu)); + m_via1->cb2_handler().set(FUNC(mac_state::mac_via_out_cb2)); + m_via1->irq_handler().set(FUNC(mac_state::mac_via_irq)); - MCFG_DEVICE_ADD("ncr5380", NCR5380, C7M) - MCFG_LEGACY_SCSI_PORT("scsi") - MCFG_NCR5380_IRQ_CB(WRITELINE(*this, mac_state, mac_scsi_irq)) + RAM(config, m_ram); + m_ram->set_default_size("1M"); + m_ram->set_extra_options("1M,3M,5M,7M,9M"); +} - MCFG_IWM_ADD("fdc", mac_iwm_interface) - MCFG_LEGACY_FLOPPY_SONY_2_DRIVES_ADD(mac_floppy_interface) +void mac_state::macii(machine_config &config, bool cpu, asc_device::asc_type asc_type, bool nubus, bool nubus_bank1, bool nubus_bank2) +{ + if (cpu) + { + M68020PMMU(config, m_maincpu, C15M); + m_maincpu->set_addrmap(AS_PROGRAM, &mac_state::macii_map); + m_maincpu->set_dasm_override(FUNC(mac_state::mac_dasm_override)); + } - MCFG_DEVICE_ADD("scc", SCC8530, C7M) - MCFG_Z8530_INTRQ_CALLBACK(WRITELINE(*this, mac_state, set_scc_interrupt)) - MCFG_DEVICE_ADD("via6522_0", VIA6522, 783360) - MCFG_VIA6522_READPA_HANDLER(READ8(*this, mac_state,mac_via_in_a_pmu)) - MCFG_VIA6522_READPB_HANDLER(READ8(*this, mac_state,mac_via_in_b_pmu)) - MCFG_VIA6522_WRITEPA_HANDLER(WRITE8(*this, mac_state,mac_via_out_a_pmu)) - MCFG_VIA6522_WRITEPB_HANDLER(WRITE8(*this, mac_state,mac_via_out_b_pmu)) - MCFG_VIA6522_CB2_HANDLER(WRITELINE(*this, mac_state,mac_via_out_cb2)) - MCFG_VIA6522_IRQ_HANDLER(WRITELINE(*this, mac_state,mac_via_irq)) + PALETTE(config, m_palette, 256); - /* internal ram */ - MCFG_RAM_ADD(RAM_TAG) - MCFG_RAM_DEFAULT_SIZE("1M") - MCFG_RAM_EXTRA_OPTIONS("1M,3M,5M,7M,9M") + add_asc(config, asc_type); + add_base_devices(config); + add_scsi(config, true); + if (nubus) + add_nubus(config, nubus_bank1, nubus_bank2); - // software list - MCFG_SOFTWARE_LIST_ADD("hdd_list", "mac_hdd") -MACHINE_CONFIG_END + add_via1_adb(config, true); + add_via2(config); -MACHINE_CONFIG_START(mac_state::macii) + RAM(config, m_ram); + m_ram->set_default_size("2M"); + m_ram->set_extra_options("8M,32M,64M,96M,128M"); + SOFTWARE_LIST(config, "flop35_list").set_type("mac_flop", SOFTWARE_LIST_ORIGINAL_SYSTEM); +} + +void mac_state::maciihmu(machine_config &config) +{ + macii(config, false); + + M68020HMMU(config, m_maincpu, C15M); + m_maincpu->set_addrmap(AS_PROGRAM, &mac_state::macii_map); + m_maincpu->set_dasm_override(FUNC(mac_state::mac_dasm_override)); +} + +void mac_state::maciifx(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", M68020PMMU, C15M) - MCFG_DEVICE_PROGRAM_MAP(macii_map) - MCFG_DEVICE_DISASSEMBLE_OVERRIDE(mac_state, mac_dasm_override) + M68030(config, m_maincpu, 40000000); + m_maincpu->set_addrmap(AS_PROGRAM, &mac_state::maciifx_map); + m_maincpu->set_dasm_override(FUNC(mac_state::mac_dasm_override)); - MCFG_PALETTE_ADD("palette", 256) + add_asc(config, asc_device::asc_type::ASC); + add_base_devices(config); + add_scsi(config); - /* sound hardware */ - SPEAKER(config, "lspeaker").front_left(); - SPEAKER(config, "rspeaker").front_right(); - MCFG_ASC_ADD("asc", C15M, ASC, WRITELINE(*this, mac_state, mac_asc_irq)) - MCFG_SOUND_ROUTE(0, "lspeaker", 1.0) - MCFG_SOUND_ROUTE(1, "rspeaker", 1.0) + VIA6522(config, m_via1, C7M/10); + m_via1->readpa_handler().set(FUNC(mac_state::mac_via_in_a)); + m_via1->readpb_handler().set(FUNC(mac_state::mac_via_in_b_ii)); + m_via1->writepa_handler().set(FUNC(mac_state::mac_via_out_a)); + m_via1->writepb_handler().set(FUNC(mac_state::mac_via_out_b)); + m_via1->cb2_handler().set(FUNC(mac_state::mac_adb_via_out_cb2)); + m_via1->irq_handler().set(FUNC(mac_state::mac_via_irq)); - /* devices */ - MCFG_RTC3430042_ADD("rtc", XTAL(32'768)) - MCFG_DEVICE_ADD("nubus", NUBUS, 0) - MCFG_NUBUS_CPU("maincpu") - MCFG_NUBUS_OUT_IRQ9_CB(WRITELINE(*this, mac_state, nubus_irq_9_w)) - MCFG_NUBUS_OUT_IRQA_CB(WRITELINE(*this, mac_state, nubus_irq_a_w)) - MCFG_NUBUS_OUT_IRQB_CB(WRITELINE(*this, mac_state, nubus_irq_b_w)) - MCFG_NUBUS_OUT_IRQC_CB(WRITELINE(*this, mac_state, nubus_irq_c_w)) - MCFG_NUBUS_OUT_IRQD_CB(WRITELINE(*this, mac_state, nubus_irq_d_w)) - MCFG_NUBUS_OUT_IRQE_CB(WRITELINE(*this, mac_state, nubus_irq_e_w)) - MCFG_NUBUS_SLOT_ADD("nubus","nb9", mac_nubus_cards, "48gc") - MCFG_NUBUS_SLOT_ADD("nubus","nba", mac_nubus_cards, nullptr) - MCFG_NUBUS_SLOT_ADD("nubus","nbb", mac_nubus_cards, nullptr) - MCFG_NUBUS_SLOT_ADD("nubus","nbc", mac_nubus_cards, nullptr) - MCFG_NUBUS_SLOT_ADD("nubus","nbd", mac_nubus_cards, nullptr) - MCFG_NUBUS_SLOT_ADD("nubus","nbe", mac_nubus_cards, nullptr) + RAM(config, m_ram); + m_ram->set_default_size("4M"); + m_ram->set_extra_options("8M,16M,32M,64M,96M,128M"); - MCFG_DEVICE_ADD("scsi", SCSI_PORT, 0) - MCFG_SCSIDEV_ADD("scsi:" SCSI_PORT_DEVICE1, "harddisk", SCSIHD, SCSI_ID_6) - MCFG_SCSIDEV_ADD("scsi:" SCSI_PORT_DEVICE2, "harddisk", SCSIHD, SCSI_ID_5) - MCFG_SCSIDEV_ADD("scsi:" SCSI_PORT_DEVICE3, "cdrom", SCSICD, SCSI_ID_4) + SOFTWARE_LIST(config, "flop35_list").set_type("mac_flop", SOFTWARE_LIST_ORIGINAL_SYSTEM); - MCFG_DEVICE_ADD("ncr5380", NCR5380, C7M) - MCFG_LEGACY_SCSI_PORT("scsi") - MCFG_NCR5380_IRQ_CB(WRITELINE(*this, mac_state, mac_scsi_irq)) + add_nubus(config); +} - MCFG_IWM_ADD("fdc", mac_iwm_interface) - MCFG_LEGACY_FLOPPY_SONY_2_DRIVES_ADD(mac_floppy_interface) +void mac_state::maclc(machine_config &config, bool cpu, bool egret, asc_device::asc_type asc_type) +{ + macii(config, false, asc_type, false); - MCFG_DEVICE_ADD("scc", SCC8530, C7M) - MCFG_Z8530_INTRQ_CALLBACK(WRITELINE(*this, mac_state, set_scc_interrupt)) - - MCFG_DEVICE_ADD("via6522_0", VIA6522, C7M/10) - MCFG_VIA6522_READPA_HANDLER(READ8(*this, mac_state,mac_via_in_a)) - MCFG_VIA6522_READPB_HANDLER(READ8(*this, mac_state,mac_via_in_b_ii)) - MCFG_VIA6522_WRITEPA_HANDLER(WRITE8(*this, mac_state,mac_via_out_a)) - MCFG_VIA6522_WRITEPB_HANDLER(WRITE8(*this, mac_state,mac_via_out_b_bbadb)) - MCFG_VIA6522_CB2_HANDLER(WRITELINE(*this, mac_state,mac_adb_via_out_cb2)) - MCFG_VIA6522_IRQ_HANDLER(WRITELINE(*this, mac_state,mac_via_irq)) - - MCFG_DEVICE_ADD("via6522_1", VIA6522, C7M/10) - MCFG_VIA6522_READPA_HANDLER(READ8(*this, mac_state, mac_via2_in_a)) - MCFG_VIA6522_READPB_HANDLER(READ8(*this, mac_state, mac_via2_in_b)) - MCFG_VIA6522_WRITEPA_HANDLER(WRITE8(*this, mac_state,mac_via2_out_a)) - MCFG_VIA6522_WRITEPB_HANDLER(WRITE8(*this, mac_state,mac_via2_out_b)) - MCFG_VIA6522_IRQ_HANDLER(WRITELINE(*this, mac_state,mac_via2_irq)) - - /* internal ram */ - MCFG_RAM_ADD(RAM_TAG) - MCFG_RAM_DEFAULT_SIZE("2M") - MCFG_RAM_EXTRA_OPTIONS("8M,32M,64M,96M,128M") - - // software list - MCFG_SOFTWARE_LIST_ADD("flop35_list","mac_flop") - MCFG_SOFTWARE_LIST_ADD("hdd_list", "mac_hdd") -MACHINE_CONFIG_END - -MACHINE_CONFIG_START(mac_state::maciihmu) - macii(config); - MCFG_DEVICE_REPLACE("maincpu", M68020HMMU, C15M) - MCFG_DEVICE_PROGRAM_MAP(macii_map) - MCFG_DEVICE_DISASSEMBLE_OVERRIDE(mac_state, mac_dasm_override) -MACHINE_CONFIG_END - -MACHINE_CONFIG_START(mac_state::maciifx) - - /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", M68030, 40000000) - MCFG_DEVICE_PROGRAM_MAP(maciifx_map) - MCFG_DEVICE_DISASSEMBLE_OVERRIDE(mac_state, mac_dasm_override) - - /* sound hardware */ - SPEAKER(config, "lspeaker").front_left(); - SPEAKER(config, "rspeaker").front_right(); - MCFG_ASC_ADD("asc", C15M, ASC, WRITELINE(*this, mac_state, mac_asc_irq)) - MCFG_SOUND_ROUTE(0, "lspeaker", 1.0) - MCFG_SOUND_ROUTE(1, "rspeaker", 1.0) - - /* devices */ - MCFG_RTC3430042_ADD("rtc", XTAL(32'768)) - MCFG_DEVICE_ADD("nubus", NUBUS, 0) - MCFG_NUBUS_CPU("maincpu") - MCFG_NUBUS_OUT_IRQ9_CB(WRITELINE(*this, mac_state, nubus_irq_9_w)) - MCFG_NUBUS_OUT_IRQA_CB(WRITELINE(*this, mac_state, nubus_irq_a_w)) - MCFG_NUBUS_OUT_IRQB_CB(WRITELINE(*this, mac_state, nubus_irq_b_w)) - MCFG_NUBUS_OUT_IRQC_CB(WRITELINE(*this, mac_state, nubus_irq_c_w)) - MCFG_NUBUS_OUT_IRQD_CB(WRITELINE(*this, mac_state, nubus_irq_d_w)) - MCFG_NUBUS_OUT_IRQE_CB(WRITELINE(*this, mac_state, nubus_irq_e_w)) - MCFG_NUBUS_SLOT_ADD("nubus","nb9", mac_nubus_cards, "48gc") - MCFG_NUBUS_SLOT_ADD("nubus","nba", mac_nubus_cards, nullptr) - MCFG_NUBUS_SLOT_ADD("nubus","nbb", mac_nubus_cards, nullptr) - MCFG_NUBUS_SLOT_ADD("nubus","nbc", mac_nubus_cards, nullptr) - MCFG_NUBUS_SLOT_ADD("nubus","nbd", mac_nubus_cards, nullptr) - MCFG_NUBUS_SLOT_ADD("nubus","nbe", mac_nubus_cards, nullptr) - - MCFG_DEVICE_ADD("scsi", SCSI_PORT, 0) - MCFG_SCSIDEV_ADD("scsi:" SCSI_PORT_DEVICE1, "harddisk", SCSIHD, SCSI_ID_6) - MCFG_SCSIDEV_ADD("scsi:" SCSI_PORT_DEVICE2, "harddisk", SCSIHD, SCSI_ID_5) - - MCFG_DEVICE_ADD("ncr5380", NCR5380, C7M) - MCFG_LEGACY_SCSI_PORT("scsi") - MCFG_NCR5380_IRQ_CB(WRITELINE(*this, mac_state, mac_scsi_irq)) - - MCFG_IWM_ADD("fdc", mac_iwm_interface) - MCFG_LEGACY_FLOPPY_SONY_2_DRIVES_ADD(mac_floppy_interface) - - MCFG_DEVICE_ADD("scc", SCC8530, C7M) - MCFG_Z8530_INTRQ_CALLBACK(WRITELINE(*this, mac_state, set_scc_interrupt)) - - MCFG_DEVICE_ADD("via6522_0", VIA6522, C7M/10) - MCFG_VIA6522_READPA_HANDLER(READ8(*this, mac_state,mac_via_in_a)) - MCFG_VIA6522_READPB_HANDLER(READ8(*this, mac_state,mac_via_in_b_ii)) - MCFG_VIA6522_WRITEPA_HANDLER(WRITE8(*this, mac_state,mac_via_out_a)) - MCFG_VIA6522_WRITEPB_HANDLER(WRITE8(*this, mac_state,mac_via_out_b)) - MCFG_VIA6522_CB2_HANDLER(WRITELINE(*this, mac_state,mac_adb_via_out_cb2)) - MCFG_VIA6522_IRQ_HANDLER(WRITELINE(*this, mac_state,mac_via_irq)) - - /* internal ram */ - MCFG_RAM_ADD(RAM_TAG) - MCFG_RAM_DEFAULT_SIZE("4M") - MCFG_RAM_EXTRA_OPTIONS("8M,16M,32M,64M,96M,128M") - - // software list - MCFG_SOFTWARE_LIST_ADD("flop35_list","mac_flop") - MCFG_SOFTWARE_LIST_ADD("hdd_list", "mac_hdd") -MACHINE_CONFIG_END - -MACHINE_CONFIG_START(mac_state::maclc) - macii(config); - - MCFG_DEVICE_REPLACE("maincpu", M68020HMMU, C15M) - MCFG_DEVICE_PROGRAM_MAP(maclc_map) - MCFG_DEVICE_DISASSEMBLE_OVERRIDE(mac_state, mac_dasm_override) - - MCFG_PALETTE_MODIFY("palette") - MCFG_PALETTE_ENTRIES(256) + if (cpu) + { + M68020HMMU(config, m_maincpu, C15M); + m_maincpu->set_addrmap(AS_PROGRAM, &mac_state::maclc_map); + m_maincpu->set_dasm_override(FUNC(mac_state::mac_dasm_override)); + } MCFG_VIDEO_START_OVERRIDE(mac_state,macv8) MCFG_VIDEO_RESET_OVERRIDE(mac_state,macrbv) - MCFG_SCREEN_ADD(MAC_SCREEN_NAME, RASTER) - MCFG_SCREEN_RAW_PARAMS(25175000, 800, 0, 640, 525, 0, 480) - MCFG_SCREEN_SIZE(1024,768) - MCFG_SCREEN_VISIBLE_AREA(0, 640-1, 0, 480-1) - MCFG_SCREEN_UPDATE_DRIVER(mac_state, screen_update_macv8) - MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(*this, mac_state, mac_rbv_vbl)) + SCREEN(config, m_screen, SCREEN_TYPE_RASTER); + m_screen->set_raw(25175000, 800, 0, 640, 525, 0, 480); + m_screen->set_size(1024, 768); + m_screen->set_visarea(0, 640-1, 0, 480-1); + m_screen->set_screen_update(FUNC(mac_state::screen_update_macv8)); + m_screen->screen_vblank().set(FUNC(mac_state::mac_rbv_vbl)); config.set_default_layout(layout_mac); - MCFG_RAM_MODIFY(RAM_TAG) - MCFG_RAM_DEFAULT_SIZE("2M") - MCFG_RAM_EXTRA_OPTIONS("4M,6M,8M,10M") + m_ram->set_default_size("2M"); + m_ram->set_extra_options("4M,6M,8M,10M"); - MCFG_DEVICE_MODIFY("via6522_0") - MCFG_VIA6522_WRITEPB_HANDLER(WRITE8(*this, mac_state,mac_via_out_b_egadb)) + m_via1->writepb_handler().set(FUNC(mac_state::mac_via_out_b_egadb)); - MCFG_NUBUS_SLOT_REMOVE("nb9") - MCFG_NUBUS_SLOT_REMOVE("nba") - MCFG_NUBUS_SLOT_REMOVE("nbb") - MCFG_NUBUS_SLOT_REMOVE("nbc") - MCFG_NUBUS_SLOT_REMOVE("nbd") - MCFG_NUBUS_SLOT_REMOVE("nbe") - MCFG_DEVICE_REMOVE("nubus") + add_nubus_pds(config, "lcpds", mac_lcpds_cards); - MCFG_DEVICE_ADD("pds", NUBUS, 0) - MCFG_NUBUS_CPU("maincpu") - MCFG_NUBUS_OUT_IRQ9_CB(WRITELINE(*this, mac_state, nubus_irq_9_w)) - MCFG_NUBUS_OUT_IRQA_CB(WRITELINE(*this, mac_state, nubus_irq_a_w)) - MCFG_NUBUS_OUT_IRQB_CB(WRITELINE(*this, mac_state, nubus_irq_b_w)) - MCFG_NUBUS_OUT_IRQC_CB(WRITELINE(*this, mac_state, nubus_irq_c_w)) - MCFG_NUBUS_OUT_IRQD_CB(WRITELINE(*this, mac_state, nubus_irq_d_w)) - MCFG_NUBUS_OUT_IRQE_CB(WRITELINE(*this, mac_state, nubus_irq_e_w)) - MCFG_NUBUS_SLOT_ADD("pds","lcpds", mac_lcpds_cards, nullptr) + if (egret) + add_egret(config, EGRET_341S0850); +} - MCFG_ASC_REPLACE("asc", C15M, V8, WRITELINE(*this, mac_state, mac_asc_irq)) - MCFG_SOUND_ROUTE(0, "lspeaker", 1.0) - MCFG_SOUND_ROUTE(1, "rspeaker", 1.0) +void mac_state::maclc2(machine_config &config, bool egret) +{ + maclc(config, false, egret); - MCFG_EGRET_ADD(EGRET_341S0850) - MCFG_EGRET_RESET_CALLBACK(WRITELINE(*this, mac_state, cuda_reset_w)) - MCFG_EGRET_LINECHANGE_CALLBACK(WRITELINE(*this, mac_state, adb_linechange_w)) - MCFG_EGRET_VIA_CLOCK_CALLBACK(WRITELINE("via6522_0", via6522_device, write_cb1)) - MCFG_EGRET_VIA_DATA_CALLBACK(WRITELINE("via6522_0", via6522_device, write_cb2)) - MCFG_QUANTUM_PERFECT_CPU("maincpu") -MACHINE_CONFIG_END + M68030(config, m_maincpu, C15M); + m_maincpu->set_addrmap(AS_PROGRAM, &mac_state::maclc_map); + m_maincpu->set_dasm_override(FUNC(mac_state::mac_dasm_override)); -MACHINE_CONFIG_START(mac_state::maclc2) - maclc(config); + m_ram->set_default_size("4M"); + m_ram->set_extra_options("6M,8M,10M"); +} - MCFG_DEVICE_REPLACE("maincpu", M68030, C15M) - MCFG_DEVICE_PROGRAM_MAP(maclc_map) - MCFG_DEVICE_DISASSEMBLE_OVERRIDE(mac_state, mac_dasm_override) +void mac_state::maccclas(machine_config &config) +{ + maclc2(config, false); + add_cuda(config, CUDA_341S0788); // should be 0417, but that version won't sync up properly with the '030 right now + m_via1->writepb_handler().set(FUNC(mac_state::mac_via_out_b_cdadb)); +} - MCFG_RAM_MODIFY(RAM_TAG) - MCFG_RAM_DEFAULT_SIZE("4M") - MCFG_RAM_EXTRA_OPTIONS("6M,8M,10M") -MACHINE_CONFIG_END +void mac_state::maclc3(machine_config &config, bool egret) +{ + maclc(config, false, false, asc_device::asc_type::SONORA); -MACHINE_CONFIG_START(mac_state::maccclas) - maclc2(config); - - MCFG_EGRET_REMOVE() - MCFG_CUDA_ADD(CUDA_341S0788) // should be 0417, but that version won't sync up properly with the '030 right now - MCFG_CUDA_RESET_CALLBACK(WRITELINE(*this, mac_state, cuda_reset_w)) - MCFG_CUDA_LINECHANGE_CALLBACK(WRITELINE(*this, mac_state, adb_linechange_w)) - MCFG_CUDA_VIA_CLOCK_CALLBACK(WRITELINE("via6522_0", via6522_device, write_cb1)) - MCFG_CUDA_VIA_DATA_CALLBACK(WRITELINE("via6522_0", via6522_device, write_cb2)) - - MCFG_DEVICE_MODIFY("via6522_0") - MCFG_VIA6522_WRITEPB_HANDLER(WRITE8(*this, mac_state,mac_via_out_b_cdadb)) -MACHINE_CONFIG_END - -MACHINE_CONFIG_START(mac_state::maclc3) - maclc(config); - - MCFG_DEVICE_REPLACE("maincpu", M68030, 25000000) - MCFG_DEVICE_PROGRAM_MAP(maclc3_map) - MCFG_DEVICE_DISASSEMBLE_OVERRIDE(mac_state, mac_dasm_override) + M68030(config, m_maincpu, 25000000); + m_maincpu->set_addrmap(AS_PROGRAM, &mac_state::maclc3_map); + m_maincpu->set_dasm_override(FUNC(mac_state::mac_dasm_override)); MCFG_VIDEO_START_OVERRIDE(mac_state,macsonora) MCFG_VIDEO_RESET_OVERRIDE(mac_state,macsonora) - MCFG_SCREEN_MODIFY(MAC_SCREEN_NAME) - MCFG_SCREEN_UPDATE_DRIVER(mac_state, screen_update_macsonora) + m_screen->set_screen_update(FUNC(mac_state::screen_update_macsonora)); - MCFG_RAM_MODIFY(RAM_TAG) - MCFG_RAM_DEFAULT_SIZE("4M") - MCFG_RAM_EXTRA_OPTIONS("8M,16M,32M,48M,64M,80M") + m_ram->set_default_size("4M"); + m_ram->set_extra_options("8M,16M,32M,48M,64M,80M"); - MCFG_ASC_REPLACE("asc", C15M, SONORA, WRITELINE(*this, mac_state, mac_asc_irq)) - MCFG_SOUND_ROUTE(0, "lspeaker", 1.0) - MCFG_SOUND_ROUTE(1, "rspeaker", 1.0) + if (egret) + add_egret(config, EGRET_341S0851); +} - MCFG_EGRET_REPLACE(EGRET_341S0851) - MCFG_EGRET_RESET_CALLBACK(WRITELINE(*this, mac_state, cuda_reset_w)) - MCFG_EGRET_LINECHANGE_CALLBACK(WRITELINE(*this, mac_state, adb_linechange_w)) - MCFG_EGRET_VIA_CLOCK_CALLBACK(WRITELINE("via6522_0", via6522_device, write_cb1)) - MCFG_EGRET_VIA_DATA_CALLBACK(WRITELINE("via6522_0", via6522_device, write_cb2)) -MACHINE_CONFIG_END +void mac_state::maclc520(machine_config &config) +{ + maclc3(config, false); + add_cuda(config, CUDA_341S0060); + m_via1->writepb_handler().set(FUNC(mac_state::mac_via_out_b_cdadb)); +} -MACHINE_CONFIG_START(mac_state::maclc520) - maclc3(config); +void mac_state::maciivx(machine_config &config) +{ + maclc(config, false); - MCFG_EGRET_REMOVE() - MCFG_CUDA_ADD(CUDA_341S0060) - MCFG_CUDA_RESET_CALLBACK(WRITELINE(*this, mac_state, cuda_reset_w)) - MCFG_CUDA_LINECHANGE_CALLBACK(WRITELINE(*this, mac_state, adb_linechange_w)) - MCFG_CUDA_VIA_CLOCK_CALLBACK(WRITELINE("via6522_0", via6522_device, write_cb1)) - MCFG_CUDA_VIA_DATA_CALLBACK(WRITELINE("via6522_0", via6522_device, write_cb2)) - - MCFG_DEVICE_MODIFY("via6522_0") - MCFG_VIA6522_WRITEPB_HANDLER(WRITE8(*this, mac_state,mac_via_out_b_cdadb)) -MACHINE_CONFIG_END - -MACHINE_CONFIG_START(mac_state::maciivx) - maclc(config); - - MCFG_DEVICE_REPLACE("maincpu", M68030, C32M) - MCFG_DEVICE_PROGRAM_MAP(maclc3_map) - MCFG_DEVICE_DISASSEMBLE_OVERRIDE(mac_state, mac_dasm_override) + M68030(config, m_maincpu, C32M); + m_maincpu->set_addrmap(AS_PROGRAM, &mac_state::maclc3_map); + m_maincpu->set_dasm_override(FUNC(mac_state::mac_dasm_override)); MCFG_VIDEO_START_OVERRIDE(mac_state,macv8) MCFG_VIDEO_RESET_OVERRIDE(mac_state,macrbv) - MCFG_SCREEN_MODIFY(MAC_SCREEN_NAME) - MCFG_SCREEN_UPDATE_DRIVER(mac_state, screen_update_macrbvvram) + m_screen->set_screen_update(FUNC(mac_state::screen_update_macrbvvram)); - MCFG_DEVICE_ADD("nubus", NUBUS, 0) - MCFG_NUBUS_CPU("maincpu") - MCFG_NUBUS_OUT_IRQ9_CB(WRITELINE(*this, mac_state, nubus_irq_9_w)) - MCFG_NUBUS_OUT_IRQA_CB(WRITELINE(*this, mac_state, nubus_irq_a_w)) - MCFG_NUBUS_OUT_IRQB_CB(WRITELINE(*this, mac_state, nubus_irq_b_w)) - MCFG_NUBUS_OUT_IRQC_CB(WRITELINE(*this, mac_state, nubus_irq_c_w)) - MCFG_NUBUS_OUT_IRQD_CB(WRITELINE(*this, mac_state, nubus_irq_d_w)) - MCFG_NUBUS_OUT_IRQE_CB(WRITELINE(*this, mac_state, nubus_irq_e_w)) - MCFG_NUBUS_SLOT_ADD("nubus","nbc", mac_nubus_cards, nullptr) - MCFG_NUBUS_SLOT_ADD("nubus","nbd", mac_nubus_cards, nullptr) - MCFG_NUBUS_SLOT_ADD("nubus","nbe", mac_nubus_cards, nullptr) + add_nubus(config, false); - MCFG_RAM_MODIFY(RAM_TAG) - MCFG_RAM_DEFAULT_SIZE("4M") - MCFG_RAM_EXTRA_OPTIONS("8M,12M,16M,20M,24M,28M,32M,36M,40M,44M,48M,52M,56M,60M,64M") + m_ram->set_default_size("4M"); + m_ram->set_extra_options("8M,12M,16M,20M,24M,28M,32M,36M,40M,44M,48M,52M,56M,60M,64M"); - MCFG_EGRET_REPLACE(EGRET_341S0851) - MCFG_EGRET_RESET_CALLBACK(WRITELINE(*this, mac_state, cuda_reset_w)) - MCFG_EGRET_LINECHANGE_CALLBACK(WRITELINE(*this, mac_state, adb_linechange_w)) - MCFG_EGRET_VIA_CLOCK_CALLBACK(WRITELINE("via6522_0", via6522_device, write_cb1)) - MCFG_EGRET_VIA_DATA_CALLBACK(WRITELINE("via6522_0", via6522_device, write_cb2)) -MACHINE_CONFIG_END + m_egret->set_type(EGRET_341S0851); +} -MACHINE_CONFIG_START(mac_state::maciivi) - maclc(config); +void mac_state::maciivi(machine_config &config) +{ + maciivx(config); + m_maincpu->set_clock(C15M); +} - MCFG_DEVICE_REPLACE("maincpu", M68030, C15M) - MCFG_DEVICE_PROGRAM_MAP(maclc3_map) - MCFG_DEVICE_DISASSEMBLE_OVERRIDE(mac_state, mac_dasm_override) +void mac_state::maciix(machine_config &config, bool nubus_bank1, bool nubus_bank2) +{ + macii(config, false, asc_device::asc_type::ASC, true, nubus_bank1, nubus_bank2); - MCFG_VIDEO_START_OVERRIDE(mac_state,macv8) - MCFG_VIDEO_RESET_OVERRIDE(mac_state,macrbv) + M68030(config, m_maincpu, C15M); + m_maincpu->set_addrmap(AS_PROGRAM, &mac_state::macii_map); + m_maincpu->set_dasm_override(FUNC(mac_state::mac_dasm_override)); - MCFG_SCREEN_MODIFY(MAC_SCREEN_NAME) - MCFG_SCREEN_UPDATE_DRIVER(mac_state, screen_update_macrbvvram) + m_ram->set_default_size("2M"); + m_ram->set_extra_options("8M,32M,64M,96M,128M"); +} - MCFG_DEVICE_ADD("nubus", NUBUS, 0) - MCFG_NUBUS_CPU("maincpu") - MCFG_NUBUS_OUT_IRQ9_CB(WRITELINE(*this, mac_state, nubus_irq_9_w)) - MCFG_NUBUS_OUT_IRQA_CB(WRITELINE(*this, mac_state, nubus_irq_a_w)) - MCFG_NUBUS_OUT_IRQB_CB(WRITELINE(*this, mac_state, nubus_irq_b_w)) - MCFG_NUBUS_OUT_IRQC_CB(WRITELINE(*this, mac_state, nubus_irq_c_w)) - MCFG_NUBUS_OUT_IRQD_CB(WRITELINE(*this, mac_state, nubus_irq_d_w)) - MCFG_NUBUS_OUT_IRQE_CB(WRITELINE(*this, mac_state, nubus_irq_e_w)) - MCFG_NUBUS_SLOT_ADD("nubus","nbc", mac_nubus_cards, nullptr) - MCFG_NUBUS_SLOT_ADD("nubus","nbd", mac_nubus_cards, nullptr) - MCFG_NUBUS_SLOT_ADD("nubus","nbe", mac_nubus_cards, nullptr) +void mac_state::maciicx(machine_config &config) // IIcx is a IIx with only slots 9/a/b +{ + maciix(config, true, false); +} - MCFG_RAM_MODIFY(RAM_TAG) - MCFG_RAM_DEFAULT_SIZE("4M") - MCFG_RAM_EXTRA_OPTIONS("8M,12M,16M,20M,24M,28M,32M,36M,40M,44M,48M,52M,56M,60M,64M") - - MCFG_EGRET_REPLACE(EGRET_341S0851) - MCFG_EGRET_RESET_CALLBACK(WRITELINE(*this, mac_state, cuda_reset_w)) - MCFG_EGRET_LINECHANGE_CALLBACK(WRITELINE(*this, mac_state, adb_linechange_w)) - MCFG_EGRET_VIA_CLOCK_CALLBACK(WRITELINE("via6522_0", via6522_device, write_cb1)) - MCFG_EGRET_VIA_DATA_CALLBACK(WRITELINE("via6522_0", via6522_device, write_cb2)) -MACHINE_CONFIG_END - -MACHINE_CONFIG_START(mac_state::maciix) - macii(config); - - MCFG_DEVICE_REPLACE("maincpu", M68030, C15M) - MCFG_DEVICE_PROGRAM_MAP(macii_map) - MCFG_DEVICE_DISASSEMBLE_OVERRIDE(mac_state, mac_dasm_override) - - MCFG_RAM_MODIFY(RAM_TAG) - MCFG_RAM_DEFAULT_SIZE("2M") - MCFG_RAM_EXTRA_OPTIONS("8M,32M,64M,96M,128M") -MACHINE_CONFIG_END - -MACHINE_CONFIG_START(mac_state::maciicx) // IIcx is a IIx with only slots 9/a/b - maciix(config); - MCFG_NUBUS_SLOT_REMOVE("nbc") - MCFG_NUBUS_SLOT_REMOVE("nbd") - MCFG_NUBUS_SLOT_REMOVE("nbe") -MACHINE_CONFIG_END - -MACHINE_CONFIG_START(mac_state::macse30) - - MCFG_DEVICE_ADD("maincpu", M68030, C15M) - MCFG_DEVICE_PROGRAM_MAP(macse30_map) - MCFG_DEVICE_DISASSEMBLE_OVERRIDE(mac_state, mac_dasm_override) +void mac_state::macse30(machine_config &config) +{ + M68030(config, m_maincpu, C15M); + m_maincpu->set_addrmap(AS_PROGRAM, &mac_state::macse30_map); + m_maincpu->set_dasm_override(FUNC(mac_state::mac_dasm_override)); /* video hardware */ - MCFG_SCREEN_ADD(MAC_SCREEN_NAME, RASTER) - MCFG_SCREEN_VIDEO_ATTRIBUTES(VIDEO_UPDATE_BEFORE_VBLANK) - MCFG_SCREEN_REFRESH_RATE(60.15) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(1260)) - MCFG_SCREEN_SIZE(MAC_H_TOTAL, MAC_V_TOTAL) - MCFG_SCREEN_VISIBLE_AREA(0, MAC_H_VIS-1, 0, MAC_V_VIS-1) - MCFG_SCREEN_UPDATE_DRIVER(mac_state, screen_update_macse30) - MCFG_SCREEN_PALETTE("palette") + SCREEN(config, m_screen, SCREEN_TYPE_RASTER); + m_screen->set_video_attributes(VIDEO_UPDATE_BEFORE_VBLANK); + m_screen->set_refresh_hz(60.15); + m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(1260)); + m_screen->set_size(MAC_H_TOTAL, MAC_V_TOTAL); + m_screen->set_visarea(0, MAC_H_VIS-1, 0, MAC_V_VIS-1); + m_screen->set_screen_update(FUNC(mac_state::screen_update_macse30)); + m_screen->set_palette(m_palette); - MCFG_PALETTE_ADD("palette", 2) - MCFG_PALETTE_INIT_OWNER(mac_state,mac) + PALETTE(config, m_palette, 2); + m_palette->set_init(DEVICE_SELF_OWNER, FUNC(mac_state::palette_init_mac)); MCFG_VIDEO_START_OVERRIDE(mac_state,mac) - /* sound hardware */ - SPEAKER(config, "lspeaker").front_left(); - SPEAKER(config, "rspeaker").front_right(); - MCFG_ASC_ADD("asc", C15M, ASC, WRITELINE(*this, mac_state, mac_asc_irq)) - MCFG_SOUND_ROUTE(0, "lspeaker", 1.0) - MCFG_SOUND_ROUTE(1, "rspeaker", 1.0) + add_base_devices(config, true, true); + add_asc(config, asc_device::asc_type::ASC); + add_scsi(config); - /* devices */ - MCFG_RTC3430042_ADD("rtc", XTAL(32'768)) + add_nubus_pds(config, "pds030", mac_pds030_cards); - MCFG_DEVICE_ADD("scsi", SCSI_PORT, 0) - MCFG_SCSIDEV_ADD("scsi:" SCSI_PORT_DEVICE1, "harddisk", SCSIHD, SCSI_ID_6) - MCFG_SCSIDEV_ADD("scsi:" SCSI_PORT_DEVICE2, "harddisk", SCSIHD, SCSI_ID_5) + add_via1_adb(config, false); + add_via2(config); - MCFG_DEVICE_ADD("ncr5380", NCR5380, C7M) - MCFG_LEGACY_SCSI_PORT("scsi") - MCFG_NCR5380_IRQ_CB(WRITELINE(*this, mac_state, mac_scsi_irq)) + RAM(config, m_ram); + m_ram->set_default_size("2M"); + m_ram->set_extra_options("8M,16M,32M,48M,64M,96M,128M"); - MCFG_DEVICE_ADD("pds", NUBUS, 0) - MCFG_NUBUS_CPU("maincpu") - MCFG_NUBUS_OUT_IRQ9_CB(WRITELINE(*this, mac_state, nubus_irq_9_w)) - MCFG_NUBUS_OUT_IRQA_CB(WRITELINE(*this, mac_state, nubus_irq_a_w)) - MCFG_NUBUS_OUT_IRQB_CB(WRITELINE(*this, mac_state, nubus_irq_b_w)) - MCFG_NUBUS_OUT_IRQC_CB(WRITELINE(*this, mac_state, nubus_irq_c_w)) - MCFG_NUBUS_OUT_IRQD_CB(WRITELINE(*this, mac_state, nubus_irq_d_w)) - MCFG_NUBUS_OUT_IRQE_CB(WRITELINE(*this, mac_state, nubus_irq_e_w)) - MCFG_NUBUS_SLOT_ADD("pds","pds030", mac_pds030_cards, nullptr) + SOFTWARE_LIST(config, "flop35_list").set_type("mac_flop", SOFTWARE_LIST_ORIGINAL_SYSTEM); +} - MCFG_SWIM_ADD("fdc", mac_iwm_interface) - MCFG_LEGACY_FLOPPY_SONY_2_DRIVES_ADD(mac_floppy_interface) +void mac_state::macpb140(machine_config &config) +{ + M68030(config, m_maincpu, C15M); + m_maincpu->set_addrmap(AS_PROGRAM, &mac_state::macpb140_map); + m_maincpu->set_dasm_override(FUNC(mac_state::mac_dasm_override)); - MCFG_DEVICE_ADD("scc", SCC8530, C7M) - MCFG_Z8530_INTRQ_CALLBACK(WRITELINE(*this, mac_state, set_scc_interrupt)) + add_pb1xx_screen(config); + m_screen->set_screen_update(FUNC(mac_state::screen_update_macpb140)); - MCFG_DEVICE_ADD("via6522_0", VIA6522, 783360) - MCFG_VIA6522_READPA_HANDLER(READ8(*this, mac_state,mac_via_in_a)) - MCFG_VIA6522_READPB_HANDLER(READ8(*this, mac_state,mac_via_in_b)) - MCFG_VIA6522_WRITEPA_HANDLER(WRITE8(*this, mac_state,mac_via_out_a)) - MCFG_VIA6522_WRITEPB_HANDLER(WRITE8(*this, mac_state,mac_via_out_b_bbadb)) - MCFG_VIA6522_CB2_HANDLER(WRITELINE(*this, mac_state,mac_adb_via_out_cb2)) - MCFG_VIA6522_IRQ_HANDLER(WRITELINE(*this, mac_state,mac_via_irq)) - - MCFG_DEVICE_ADD("via6522_1", VIA6522, 783360) - MCFG_VIA6522_READPA_HANDLER(READ8(*this, mac_state, mac_via2_in_a)) - MCFG_VIA6522_READPB_HANDLER(READ8(*this, mac_state, mac_via2_in_b)) - MCFG_VIA6522_WRITEPA_HANDLER(WRITE8(*this, mac_state,mac_via2_out_a)) - MCFG_VIA6522_WRITEPB_HANDLER(WRITE8(*this, mac_state,mac_via2_out_b)) - MCFG_VIA6522_IRQ_HANDLER(WRITELINE(*this, mac_state,mac_via2_irq)) - - /* internal ram */ - MCFG_RAM_ADD(RAM_TAG) - MCFG_RAM_DEFAULT_SIZE("2M") - MCFG_RAM_EXTRA_OPTIONS("8M,16M,32M,48M,64M,96M,128M") - - MCFG_SOFTWARE_LIST_ADD("flop35_list","mac_flop") - MCFG_SOFTWARE_LIST_ADD("hdd_list", "mac_hdd") -MACHINE_CONFIG_END - -MACHINE_CONFIG_START(mac_state::macpb140) - - MCFG_DEVICE_ADD("maincpu", M68030, C15M) - MCFG_DEVICE_PROGRAM_MAP(macpb140_map) - MCFG_DEVICE_DISASSEMBLE_OVERRIDE(mac_state, mac_dasm_override) - - /* video hardware */ - MCFG_SCREEN_ADD(MAC_SCREEN_NAME, RASTER) - MCFG_SCREEN_VIDEO_ATTRIBUTES(VIDEO_UPDATE_BEFORE_VBLANK) - MCFG_SCREEN_REFRESH_RATE(60.15) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(1260)) - MCFG_SCREEN_SIZE(700, 480) - MCFG_SCREEN_VISIBLE_AREA(0, 639, 0, 399) - MCFG_SCREEN_UPDATE_DRIVER(mac_state, screen_update_macpb140) - MCFG_SCREEN_PALETTE("palette") - - MCFG_PALETTE_ADD("palette", 2) - MCFG_PALETTE_INIT_OWNER(mac_state,mac) + PALETTE(config, m_palette, 2); + m_palette->set_init(DEVICE_SELF_OWNER, FUNC(mac_state::palette_init_mac)); MCFG_VIDEO_START_OVERRIDE(mac_state,macprtb) - /* sound hardware */ - SPEAKER(config, "lspeaker").front_left(); - SPEAKER(config, "rspeaker").front_right(); - MCFG_ASC_ADD("asc", C15M, ASC, WRITELINE(*this, mac_state, mac_asc_irq)) - MCFG_SOUND_ROUTE(0, "lspeaker", 1.0) - MCFG_SOUND_ROUTE(1, "rspeaker", 1.0) + add_asc(config, asc_device::asc_type::ASC); + add_scsi(config); + add_base_devices(config, false, true); + add_pb1xx_vias(config); - /* devices */ - MCFG_DEVICE_ADD("scsi", SCSI_PORT, 0) - MCFG_SCSIDEV_ADD("scsi:" SCSI_PORT_DEVICE1, "harddisk", SCSIHD, SCSI_ID_6) - MCFG_SCSIDEV_ADD("scsi:" SCSI_PORT_DEVICE2, "harddisk", SCSIHD, SCSI_ID_5) + RAM(config, m_ram); + m_ram->set_default_size("2M"); + m_ram->set_extra_options("4M,6M,8M"); - MCFG_DEVICE_ADD("ncr5380", NCR5380, C7M) - MCFG_LEGACY_SCSI_PORT("scsi") - MCFG_NCR5380_IRQ_CB(WRITELINE(*this, mac_state, mac_scsi_irq)) - - MCFG_SWIM_ADD("fdc", mac_iwm_interface) - MCFG_LEGACY_FLOPPY_SONY_2_DRIVES_ADD(mac_floppy_interface) - - MCFG_DEVICE_ADD("scc", SCC8530, C7M) - MCFG_Z8530_INTRQ_CALLBACK(WRITELINE(*this, mac_state, set_scc_interrupt)) - - MCFG_DEVICE_ADD("via6522_0", VIA6522, 783360) - MCFG_VIA6522_READPA_HANDLER(READ8(*this, mac_state,mac_via_in_a)) - MCFG_VIA6522_READPB_HANDLER(READ8(*this, mac_state,mac_via_in_b_via2pmu)) - MCFG_VIA6522_WRITEPA_HANDLER(WRITE8(*this, mac_state,mac_via_out_a)) - MCFG_VIA6522_WRITEPB_HANDLER(WRITE8(*this, mac_state,mac_via_out_b_via2pmu)) - MCFG_VIA6522_CB2_HANDLER(WRITELINE(*this, mac_state,mac_adb_via_out_cb2)) - MCFG_VIA6522_IRQ_HANDLER(WRITELINE(*this, mac_state,mac_via_irq)) - - MCFG_DEVICE_ADD("via6522_1", VIA6522, 783360) - MCFG_VIA6522_READPA_HANDLER(READ8(*this, mac_state, mac_via2_in_a_pmu)) - MCFG_VIA6522_READPB_HANDLER(READ8(*this, mac_state, mac_via2_in_b_pmu)) - MCFG_VIA6522_WRITEPA_HANDLER(WRITE8(*this, mac_state,mac_via2_out_a_pmu)) - MCFG_VIA6522_WRITEPB_HANDLER(WRITE8(*this, mac_state,mac_via2_out_b_pmu)) - MCFG_VIA6522_IRQ_HANDLER(WRITELINE(*this, mac_state,mac_via2_irq)) - - /* internal ram */ - MCFG_RAM_ADD(RAM_TAG) - MCFG_RAM_DEFAULT_SIZE("2M") - MCFG_RAM_EXTRA_OPTIONS("4M,6M,8M") - - MCFG_SOFTWARE_LIST_ADD("flop35_list","mac_flop") - MCFG_SOFTWARE_LIST_ADD("hdd_list", "mac_hdd") -MACHINE_CONFIG_END + SOFTWARE_LIST(config, "flop35_list").set_type("mac_flop", SOFTWARE_LIST_ORIGINAL_SYSTEM); +} // PowerBook 145 = 140 @ 25 MHz (still 2MB RAM - the 145B upped that to 4MB) -MACHINE_CONFIG_START(mac_state::macpb145) +void mac_state::macpb145(machine_config &config) +{ macpb140(config); - MCFG_DEVICE_REPLACE("maincpu", M68030, 25000000) - MCFG_DEVICE_PROGRAM_MAP(macpb140_map) - MCFG_DEVICE_DISASSEMBLE_OVERRIDE(mac_state, mac_dasm_override) + m_maincpu->set_clock(25000000); - MCFG_RAM_MODIFY(RAM_TAG) - MCFG_RAM_DEFAULT_SIZE("4M") - MCFG_RAM_EXTRA_OPTIONS("6M,8M") -MACHINE_CONFIG_END + m_ram->set_default_size("4M"); + m_ram->set_extra_options("6M,8M"); +} // PowerBook 170 = 140 @ 25 MHz with an active-matrix LCD (140/145/145B were passive) -MACHINE_CONFIG_START(mac_state::macpb170) +void mac_state::macpb170(machine_config &config) +{ macpb140(config); - MCFG_DEVICE_REPLACE("maincpu", M68030, 25000000) - MCFG_DEVICE_PROGRAM_MAP(macpb140_map) - MCFG_DEVICE_DISASSEMBLE_OVERRIDE(mac_state, mac_dasm_override) + m_maincpu->set_clock(25000000); - MCFG_RAM_MODIFY(RAM_TAG) - MCFG_RAM_DEFAULT_SIZE("4M") - MCFG_RAM_EXTRA_OPTIONS("6M,8M") -MACHINE_CONFIG_END + m_ram->set_default_size("4M"); + m_ram->set_extra_options("6M,8M"); +} -MACHINE_CONFIG_START(mac_state::macpb160) +void mac_state::macpb160(machine_config &config) +{ + M68030(config, m_maincpu, 25000000); + m_maincpu->set_addrmap(AS_PROGRAM, &mac_state::macpb160_map); + m_maincpu->set_dasm_override(FUNC(mac_state::mac_dasm_override)); - MCFG_DEVICE_ADD("maincpu", M68030, 25000000) - MCFG_DEVICE_PROGRAM_MAP(macpb160_map) - MCFG_DEVICE_DISASSEMBLE_OVERRIDE(mac_state, mac_dasm_override) + add_pb1xx_screen(config); + m_screen->set_screen_update(FUNC(mac_state::screen_update_macpb160)); - /* video hardware */ - MCFG_SCREEN_ADD(MAC_SCREEN_NAME, RASTER) - MCFG_SCREEN_VIDEO_ATTRIBUTES(VIDEO_UPDATE_BEFORE_VBLANK) - MCFG_SCREEN_REFRESH_RATE(60.15) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(1260)) - MCFG_SCREEN_SIZE(700, 480) - MCFG_SCREEN_VISIBLE_AREA(0, 639, 0, 399) - MCFG_SCREEN_UPDATE_DRIVER(mac_state, screen_update_macpb160) - MCFG_SCREEN_PALETTE("palette") - - MCFG_PALETTE_ADD("palette", 16) - MCFG_PALETTE_INIT_OWNER(mac_state,macgsc) + PALETTE(config, m_palette, 16); + m_palette->set_init(DEVICE_SELF_OWNER, FUNC(mac_state::palette_init_macgsc)); MCFG_VIDEO_START_OVERRIDE(mac_state,macprtb) - /* sound hardware */ - SPEAKER(config, "lspeaker").front_left(); - SPEAKER(config, "rspeaker").front_right(); - MCFG_ASC_ADD("asc", C15M, ASC, WRITELINE(*this, mac_state, mac_asc_irq)) - MCFG_SOUND_ROUTE(0, "lspeaker", 1.0) - MCFG_SOUND_ROUTE(1, "rspeaker", 1.0) + add_asc(config, asc_device::asc_type::ASC); + add_scsi(config); + add_base_devices(config, false, true); + add_pb1xx_vias(config); - /* devices */ - MCFG_DEVICE_ADD("scsi", SCSI_PORT, 0) - MCFG_SCSIDEV_ADD("scsi:" SCSI_PORT_DEVICE1, "harddisk", SCSIHD, SCSI_ID_6) - MCFG_SCSIDEV_ADD("scsi:" SCSI_PORT_DEVICE2, "harddisk", SCSIHD, SCSI_ID_5) + RAM(config, m_ram); + m_ram->set_default_size("4M"); + m_ram->set_extra_options("8M,12M,16M"); - MCFG_DEVICE_ADD("ncr5380", NCR5380, C7M) - MCFG_LEGACY_SCSI_PORT("scsi") - MCFG_NCR5380_IRQ_CB(WRITELINE(*this, mac_state, mac_scsi_irq)) + SOFTWARE_LIST(config, "flop35_list").set_type("mac_flop", SOFTWARE_LIST_ORIGINAL_SYSTEM); +} - MCFG_SWIM_ADD("fdc", mac_iwm_interface) - MCFG_LEGACY_FLOPPY_SONY_2_DRIVES_ADD(mac_floppy_interface) - - MCFG_DEVICE_ADD("scc", SCC8530, C7M) - MCFG_Z8530_INTRQ_CALLBACK(WRITELINE(*this, mac_state, set_scc_interrupt)) - - MCFG_DEVICE_ADD("via6522_0", VIA6522, 783360) - MCFG_VIA6522_READPA_HANDLER(READ8(*this, mac_state,mac_via_in_a)) - MCFG_VIA6522_READPB_HANDLER(READ8(*this, mac_state,mac_via_in_b_via2pmu)) - MCFG_VIA6522_WRITEPA_HANDLER(WRITE8(*this, mac_state,mac_via_out_a)) - MCFG_VIA6522_WRITEPB_HANDLER(WRITE8(*this, mac_state,mac_via_out_b_via2pmu)) - MCFG_VIA6522_CB2_HANDLER(WRITELINE(*this, mac_state,mac_adb_via_out_cb2)) - MCFG_VIA6522_IRQ_HANDLER(WRITELINE(*this, mac_state,mac_via_irq)) - - MCFG_DEVICE_ADD("via6522_1", VIA6522, 783360) - MCFG_VIA6522_READPA_HANDLER(READ8(*this, mac_state, mac_via2_in_a_pmu)) - MCFG_VIA6522_READPB_HANDLER(READ8(*this, mac_state, mac_via2_in_b_pmu)) - MCFG_VIA6522_WRITEPA_HANDLER(WRITE8(*this, mac_state,mac_via2_out_a_pmu)) - MCFG_VIA6522_WRITEPB_HANDLER(WRITE8(*this, mac_state,mac_via2_out_b_pmu)) - MCFG_VIA6522_IRQ_HANDLER(WRITELINE(*this, mac_state,mac_via2_irq)) - - /* internal ram */ - MCFG_RAM_ADD(RAM_TAG) - MCFG_RAM_DEFAULT_SIZE("4M") - MCFG_RAM_EXTRA_OPTIONS("8M,12M,16M") - - MCFG_SOFTWARE_LIST_ADD("flop35_list","mac_flop") - MCFG_SOFTWARE_LIST_ADD("hdd_list", "mac_hdd") -MACHINE_CONFIG_END - -MACHINE_CONFIG_START(mac_state::macpb180) +void mac_state::macpb180(machine_config &config) +{ macpb160(config); - MCFG_DEVICE_REPLACE("maincpu", M68030, 33000000) - MCFG_DEVICE_PROGRAM_MAP(macpb160_map) - MCFG_DEVICE_DISASSEMBLE_OVERRIDE(mac_state, mac_dasm_override) + m_maincpu->set_clock(33000000); +} - MCFG_RAM_MODIFY(RAM_TAG) - MCFG_RAM_DEFAULT_SIZE("4M") - MCFG_RAM_EXTRA_OPTIONS("8M,12M,16M") -MACHINE_CONFIG_END - -MACHINE_CONFIG_START(mac_state::macpb180c) +void mac_state::macpb180c(machine_config &config) +{ macpb160(config); - MCFG_DEVICE_REPLACE("maincpu", M68030, 33000000) - MCFG_DEVICE_PROGRAM_MAP(macpb165c_map) - MCFG_DEVICE_DISASSEMBLE_OVERRIDE(mac_state, mac_dasm_override) + m_maincpu->set_clock(33000000); + m_maincpu->set_addrmap(AS_PROGRAM, &mac_state::macpb165c_map); - MCFG_SCREEN_MODIFY(MAC_SCREEN_NAME) - MCFG_SCREEN_SIZE(800, 525) - MCFG_SCREEN_VISIBLE_AREA(0, 640-1, 0, 480-1) - MCFG_SCREEN_UPDATE_DRIVER(mac_state, screen_update_macpbwd) - MCFG_SCREEN_NO_PALETTE + m_screen->set_size(800, 525); + m_screen->set_visarea(0, 640-1, 0, 480-1); + m_screen->set_screen_update(FUNC(mac_state::screen_update_macpbwd)); + m_screen->set_palette(finder_base::DUMMY_TAG); +} - MCFG_RAM_MODIFY(RAM_TAG) - MCFG_RAM_DEFAULT_SIZE("4M") - MCFG_RAM_EXTRA_OPTIONS("8M,12M,16M") -MACHINE_CONFIG_END - -MACHINE_CONFIG_START(mac_state::macpd210) +void mac_state::macpd210(machine_config &config) +{ macpb160(config); - MCFG_DEVICE_REPLACE("maincpu", M68030, 25000000) - MCFG_DEVICE_PROGRAM_MAP(macpd210_map) - MCFG_DEVICE_DISASSEMBLE_OVERRIDE(mac_state, mac_dasm_override) + m_maincpu->set_addrmap(AS_PROGRAM, &mac_state::macpd210_map); - MCFG_RAM_MODIFY(RAM_TAG) - MCFG_RAM_DEFAULT_SIZE("4M") - MCFG_RAM_EXTRA_OPTIONS("8M,12M,16M,20M,24M") -MACHINE_CONFIG_END + m_ram->set_extra_options("8M,12M,16M,20M,24M"); +} -MACHINE_CONFIG_START(mac_state::macclas2) - maclc(config); - MCFG_DEVICE_REPLACE("maincpu", M68030, C15M) - MCFG_DEVICE_PROGRAM_MAP(maclc_map) - MCFG_DEVICE_DISASSEMBLE_OVERRIDE(mac_state, mac_dasm_override) +void mac_state::macclas2(machine_config &config) +{ + maclc(config, false, true, asc_device::asc_type::EAGLE); + + M68030(config, m_maincpu, C15M); + m_maincpu->set_addrmap(AS_PROGRAM, &mac_state::maclc_map); + m_maincpu->set_dasm_override(FUNC(mac_state::mac_dasm_override)); MCFG_VIDEO_START_OVERRIDE(mac_state,macv8) MCFG_VIDEO_RESET_OVERRIDE(mac_state,maceagle) - MCFG_SCREEN_MODIFY(MAC_SCREEN_NAME) - MCFG_SCREEN_SIZE(MAC_H_TOTAL, MAC_V_TOTAL) - MCFG_SCREEN_VISIBLE_AREA(0, MAC_H_VIS-1, 0, MAC_V_VIS-1) - MCFG_SCREEN_UPDATE_DRIVER(mac_state, screen_update_macrbv) + m_screen->set_size(MAC_H_TOTAL, MAC_V_TOTAL); + m_screen->set_visarea(0, MAC_H_VIS-1, 0, MAC_V_VIS-1); + m_screen->set_screen_update(FUNC(mac_state::screen_update_macrbv)); - MCFG_ASC_REPLACE("asc", C15M, EAGLE, WRITELINE(*this, mac_state, mac_asc_irq)) - MCFG_SOUND_ROUTE(0, "lspeaker", 1.0) - MCFG_SOUND_ROUTE(1, "rspeaker", 1.0) + m_asc->set_type(asc_device::asc_type::EAGLE); - MCFG_RAM_MODIFY(RAM_TAG) - MCFG_RAM_DEFAULT_SIZE("10M") - MCFG_RAM_EXTRA_OPTIONS("2M,4M,6M,8M,10M") + m_ram->set_default_size("10M"); + m_ram->set_extra_options("2M,4M,6M,8M,10M"); - MCFG_EGRET_REPLACE(EGRET_341S0851) - MCFG_EGRET_RESET_CALLBACK(WRITELINE(*this, mac_state, cuda_reset_w)) - MCFG_EGRET_LINECHANGE_CALLBACK(WRITELINE(*this, mac_state, adb_linechange_w)) - MCFG_EGRET_VIA_CLOCK_CALLBACK(WRITELINE("via6522_0", via6522_device, write_cb1)) - MCFG_EGRET_VIA_DATA_CALLBACK(WRITELINE("via6522_0", via6522_device, write_cb2)) -MACHINE_CONFIG_END + m_egret->set_type(EGRET_341S0851); +} -MACHINE_CONFIG_START(mac_state::maciici) - macii(config); +void mac_state::maciici(machine_config &config) +{ + macii(config, false, asc_device::asc_type::ASC, true, false, true); - MCFG_DEVICE_REPLACE("maincpu", M68030, 25000000) - MCFG_DEVICE_PROGRAM_MAP(maciici_map) - MCFG_DEVICE_DISASSEMBLE_OVERRIDE(mac_state, mac_dasm_override) - - MCFG_PALETTE_MODIFY("palette") - MCFG_PALETTE_ENTRIES(256) - - // IIci only has slots c/d/e - MCFG_NUBUS_SLOT_REMOVE("nb9") - MCFG_NUBUS_SLOT_REMOVE("nba") - MCFG_NUBUS_SLOT_REMOVE("nbb") + M68030(config, m_maincpu, 25000000); + m_maincpu->set_addrmap(AS_PROGRAM, &mac_state::maciici_map); + m_maincpu->set_dasm_override(FUNC(mac_state::mac_dasm_override)); MCFG_VIDEO_START_OVERRIDE(mac_state,macrbv) MCFG_VIDEO_RESET_OVERRIDE(mac_state,macrbv) - MCFG_SCREEN_ADD(MAC_SCREEN_NAME, RASTER) - MCFG_SCREEN_RAW_PARAMS(25175000, 800, 0, 640, 525, 0, 480) - MCFG_SCREEN_SIZE(640, 870) - MCFG_SCREEN_VISIBLE_AREA(0, 640-1, 0, 480-1) - MCFG_SCREEN_UPDATE_DRIVER(mac_state, screen_update_macrbv) - MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(*this, mac_state, mac_rbv_vbl)) + SCREEN(config, m_screen, SCREEN_TYPE_RASTER); + m_screen->set_raw(25175000, 800, 0, 640, 525, 0, 480); + m_screen->set_size(640, 870); + m_screen->set_visarea(0, 640-1, 0, 480-1); + m_screen->set_screen_update(FUNC(mac_state::screen_update_macrbv)); + m_screen->screen_vblank().set(FUNC(mac_state::mac_rbv_vbl)); config.set_default_layout(layout_mac); /* internal ram */ - MCFG_RAM_MODIFY(RAM_TAG) - MCFG_RAM_DEFAULT_SIZE("2M") - MCFG_RAM_EXTRA_OPTIONS("4M,8M,16M,32M,48M,64M,128M") -MACHINE_CONFIG_END + m_ram->set_default_size("2M"); + m_ram->set_extra_options("4M,8M,16M,32M,48M,64M,128M"); +} -MACHINE_CONFIG_START(mac_state::maciisi) - macii(config); +void mac_state::maciisi(machine_config &config) +{ + macii(config, false, asc_device::asc_type::ASC, false); - MCFG_DEVICE_REPLACE("maincpu", M68030, 20000000) - MCFG_DEVICE_PROGRAM_MAP(maciici_map) - MCFG_DEVICE_DISASSEMBLE_OVERRIDE(mac_state, mac_dasm_override) - - MCFG_PALETTE_MODIFY("palette") - MCFG_PALETTE_ENTRIES(256) - - MCFG_NUBUS_SLOT_REMOVE("nb9") - MCFG_NUBUS_SLOT_REMOVE("nba") - MCFG_NUBUS_SLOT_REMOVE("nbb") - MCFG_NUBUS_SLOT_REMOVE("nbc") - MCFG_NUBUS_SLOT_REMOVE("nbd") - MCFG_NUBUS_SLOT_REMOVE("nbe") - MCFG_DEVICE_REMOVE("nubus") + M68030(config, m_maincpu, 20000000); + m_maincpu->set_addrmap(AS_PROGRAM, &mac_state::maciici_map); + m_maincpu->set_dasm_override(FUNC(mac_state::mac_dasm_override)); MCFG_VIDEO_START_OVERRIDE(mac_state,macrbv) MCFG_VIDEO_RESET_OVERRIDE(mac_state,macrbv) - MCFG_SCREEN_ADD(MAC_SCREEN_NAME, RASTER) - MCFG_SCREEN_RAW_PARAMS(25175000, 800, 0, 640, 525, 0, 480) - MCFG_SCREEN_SIZE(640, 870) - MCFG_SCREEN_VISIBLE_AREA(0, 640-1, 0, 480-1) - MCFG_SCREEN_UPDATE_DRIVER(mac_state, screen_update_macrbv) - MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(*this, mac_state, mac_rbv_vbl)) + SCREEN(config, m_screen, SCREEN_TYPE_RASTER); + m_screen->set_raw(25175000, 800, 0, 640, 525, 0, 480); + m_screen->set_size(640, 870); + m_screen->set_visarea(0, 640-1, 0, 480-1); + m_screen->set_screen_update(FUNC(mac_state::screen_update_macrbv)); + m_screen->screen_vblank().set(FUNC(mac_state::mac_rbv_vbl)); config.set_default_layout(layout_mac); - /* internal ram */ - MCFG_RAM_MODIFY(RAM_TAG) - MCFG_RAM_DEFAULT_SIZE("2M") - MCFG_RAM_EXTRA_OPTIONS("4M,8M,16M,32M,48M,64M,128M") + m_ram->set_default_size("2M"); + m_ram->set_extra_options("4M,8M,16M,32M,48M,64M,128M"); - MCFG_DEVICE_MODIFY("via6522_0") - MCFG_VIA6522_WRITEPB_HANDLER(WRITE8(*this, mac_state,mac_via_out_b_egadb)) + m_via1->writepb_handler().set(FUNC(mac_state::mac_via_out_b_egadb)); - MCFG_EGRET_ADD(EGRET_344S0100) - MCFG_EGRET_RESET_CALLBACK(WRITELINE(*this, mac_state, cuda_reset_w)) - MCFG_EGRET_LINECHANGE_CALLBACK(WRITELINE(*this, mac_state, adb_linechange_w)) - MCFG_EGRET_VIA_CLOCK_CALLBACK(WRITELINE("via6522_0", via6522_device, write_cb1)) - MCFG_EGRET_VIA_DATA_CALLBACK(WRITELINE("via6522_0", via6522_device, write_cb2)) - MCFG_QUANTUM_PERFECT_CPU("maincpu") -MACHINE_CONFIG_END + add_egret(config, EGRET_344S0100); +} -MACHINE_CONFIG_START(mac_state::pwrmac) +void mac_state::pwrmac(machine_config &config) +{ + PPC601(config, m_maincpu, 60000000); + m_maincpu->set_addrmap(AS_PROGRAM, &mac_state::pwrmac_map); - /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", PPC601, 60000000) - MCFG_DEVICE_PROGRAM_MAP(pwrmac_map) - - /* video hardware */ - MCFG_SCREEN_ADD(MAC_SCREEN_NAME, RASTER) + SCREEN(config, m_screen, SCREEN_TYPE_RASTER); // dot clock, htotal, hstart, hend, vtotal, vstart, vend - MCFG_SCREEN_RAW_PARAMS(25175000, 800, 0, 640, 525, 0, 480) - MCFG_SCREEN_VIDEO_ATTRIBUTES(VIDEO_UPDATE_BEFORE_VBLANK) - MCFG_SCREEN_SIZE(1024, 768) - MCFG_SCREEN_VISIBLE_AREA(0, 640-1, 0, 480-1) - MCFG_SCREEN_UPDATE_DRIVER(mac_state, screen_update_macrbv) + m_screen->set_raw(25175000, 800, 0, 640, 525, 0, 480); + m_screen->set_video_attributes(VIDEO_UPDATE_BEFORE_VBLANK); + m_screen->set_size(1024, 768); + m_screen->set_visarea(0, 640-1, 0, 480-1); + m_screen->set_screen_update(FUNC(mac_state::screen_update_macrbv)); - MCFG_PALETTE_ADD("palette", 256) + PALETTE(config, m_palette, 256); MCFG_VIDEO_START_OVERRIDE(mac_state,macsonora) MCFG_VIDEO_RESET_OVERRIDE(mac_state,macrbv) - /* sound hardware */ SPEAKER(config, "lspeaker").front_left(); SPEAKER(config, "rspeaker").front_right(); - MCFG_AWACS_ADD("awacs", 44100) - MCFG_SOUND_ROUTE(0, "lspeaker", 1.0) - MCFG_SOUND_ROUTE(1, "rspeaker", 1.0) + AWACS(config, m_awacs, 44100); + m_awacs->add_route(0, "lspeaker", 1.0); + m_awacs->add_route(1, "rspeaker", 1.0); - /* devices */ - MCFG_DEVICE_ADD("scsi", SCSI_PORT, 0) - MCFG_SCSIDEV_ADD("scsi:" SCSI_PORT_DEVICE1, "harddisk", SCSIHD, SCSI_ID_6) - MCFG_SCSIDEV_ADD("scsi:" SCSI_PORT_DEVICE2, "harddisk", SCSIHD, SCSI_ID_5) + add_scsi(config); + add_base_devices(config, false, false); - MCFG_DEVICE_ADD("ncr5380", NCR5380, C7M) - MCFG_LEGACY_SCSI_PORT("scsi") - MCFG_NCR5380_IRQ_CB(WRITELINE(*this, mac_state, mac_scsi_irq)) + add_via1_adb(config, false); + m_via1->writepb_handler().set(FUNC(mac_state::mac_via_out_b_cdadb)); - MCFG_IWM_ADD("fdc", mac_iwm_interface) - MCFG_LEGACY_FLOPPY_SONY_2_DRIVES_ADD(mac_floppy_interface) + add_via2(config); - MCFG_DEVICE_ADD("scc", SCC8530, C7M) - MCFG_Z8530_INTRQ_CALLBACK(WRITELINE(*this, mac_state, set_scc_interrupt)) + RAM(config, m_ram); + m_ram->set_default_size("8M"); + m_ram->set_extra_options("16M,32M,64M,128M"); - MCFG_DEVICE_ADD("via6522_0", VIA6522, 783360) - MCFG_VIA6522_READPA_HANDLER(READ8(*this, mac_state,mac_via_in_a)) - MCFG_VIA6522_READPB_HANDLER(READ8(*this, mac_state,mac_via_in_b)) - MCFG_VIA6522_WRITEPA_HANDLER(WRITE8(*this, mac_state,mac_via_out_a)) - MCFG_VIA6522_WRITEPB_HANDLER(WRITE8(*this, mac_state,mac_via_out_b_cdadb)) - MCFG_VIA6522_CB2_HANDLER(WRITELINE(*this, mac_state,mac_adb_via_out_cb2)) - MCFG_VIA6522_IRQ_HANDLER(WRITELINE(*this, mac_state,mac_via_irq)) + add_cuda(config, CUDA_341S0060); +} - MCFG_DEVICE_ADD("via6522_1", VIA6522, 783360) - MCFG_VIA6522_READPA_HANDLER(READ8(*this, mac_state, mac_via2_in_a)) - MCFG_VIA6522_READPB_HANDLER(READ8(*this, mac_state, mac_via2_in_b)) - MCFG_VIA6522_WRITEPA_HANDLER(WRITE8(*this, mac_state,mac_via2_out_a)) - MCFG_VIA6522_WRITEPB_HANDLER(WRITE8(*this, mac_state,mac_via2_out_b)) - MCFG_VIA6522_IRQ_HANDLER(WRITELINE(*this, mac_state,mac_via2_irq)) - - /* internal ram */ - MCFG_RAM_ADD(RAM_TAG) - MCFG_RAM_DEFAULT_SIZE("8M") - MCFG_RAM_EXTRA_OPTIONS("16M,32M,64M,128M") - - MCFG_CUDA_ADD(CUDA_341S0060) - MCFG_CUDA_RESET_CALLBACK(WRITELINE(*this, mac_state, cuda_reset_w)) - MCFG_CUDA_LINECHANGE_CALLBACK(WRITELINE(*this, mac_state, adb_linechange_w)) - MCFG_CUDA_VIA_CLOCK_CALLBACK(WRITELINE("via6522_0", via6522_device, write_cb1)) - MCFG_CUDA_VIA_DATA_CALLBACK(WRITELINE("via6522_0", via6522_device, write_cb2)) -MACHINE_CONFIG_END - -MACHINE_CONFIG_START(mac_state::macqd700) +void mac_state::macqd700(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", M68040, 25000000) - MCFG_DEVICE_PROGRAM_MAP(quadra700_map) - MCFG_DEVICE_DISASSEMBLE_OVERRIDE(mac_state, mac_dasm_override) + M68040(config, m_maincpu, 25000000); + m_maincpu->set_addrmap(AS_PROGRAM, &mac_state::quadra700_map); + m_maincpu->set_dasm_override(FUNC(mac_state::mac_dasm_override)); - MCFG_SCREEN_ADD(MAC_SCREEN_NAME, RASTER) - MCFG_SCREEN_REFRESH_RATE(75.08) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(1260)) - MCFG_SCREEN_SIZE(1152, 870) - MCFG_SCREEN_VISIBLE_AREA(0, 1152-1, 0, 870-1) - MCFG_SCREEN_UPDATE_DRIVER(mac_state, screen_update_macdafb) + SCREEN(config, m_screen, SCREEN_TYPE_RASTER); + m_screen->set_refresh_hz(75.08); + m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(1260)); + m_screen->set_size(1152, 870); + m_screen->set_visarea(0, 1152-1, 0, 870-1); + m_screen->set_screen_update(FUNC(mac_state::screen_update_macdafb)); MCFG_VIDEO_START_OVERRIDE(mac_state,macdafb) MCFG_VIDEO_RESET_OVERRIDE(mac_state,macdafb) - MCFG_PALETTE_ADD("palette", 256) + PALETTE(config, m_palette, 256); - /* sound hardware */ - SPEAKER(config, "lspeaker").front_left(); - SPEAKER(config, "rspeaker").front_right(); - MCFG_ASC_ADD("asc", C15M, EASC, WRITELINE(*this, mac_state, mac_asc_irq)) - MCFG_SOUND_ROUTE(0, "lspeaker", 1.0) - MCFG_SOUND_ROUTE(1, "rspeaker", 1.0) + add_asc(config, asc_device::asc_type::EASC); + add_base_devices(config, true, false); - /* devices */ - MCFG_RTC3430042_ADD("rtc", XTAL(32'768)) - MCFG_DEVICE_ADD("nubus", NUBUS, 0) - MCFG_NUBUS_CPU("maincpu") - MCFG_NUBUS_OUT_IRQ9_CB(WRITELINE(*this, mac_state, nubus_irq_9_w)) - MCFG_NUBUS_OUT_IRQA_CB(WRITELINE(*this, mac_state, nubus_irq_a_w)) - MCFG_NUBUS_OUT_IRQB_CB(WRITELINE(*this, mac_state, nubus_irq_b_w)) - MCFG_NUBUS_OUT_IRQC_CB(WRITELINE(*this, mac_state, nubus_irq_c_w)) - MCFG_NUBUS_OUT_IRQD_CB(WRITELINE(*this, mac_state, nubus_irq_d_w)) - MCFG_NUBUS_OUT_IRQE_CB(WRITELINE(*this, mac_state, nubus_irq_e_w)) - MCFG_NUBUS_SLOT_ADD("nubus","nbd", mac_nubus_cards, nullptr) - MCFG_NUBUS_SLOT_ADD("nubus","nbe", mac_nubus_cards, nullptr) + add_nubus(config, false, false); + NUBUS_SLOT(config, "nbd", "nubus", mac_nubus_cards, nullptr); + NUBUS_SLOT(config, "nbe", "nubus", mac_nubus_cards, nullptr); - MCFG_IWM_ADD("fdc", mac_iwm_interface) - MCFG_LEGACY_FLOPPY_SONY_2_DRIVES_ADD(mac_floppy_interface) + add_via1_adb(config, false); + m_via1->readpb_handler().set(FUNC(mac_state::mac_via_in_b)); - MCFG_DEVICE_ADD("scc", SCC8530, C7M) - MCFG_Z8530_INTRQ_CALLBACK(WRITELINE(*this, mac_state, set_scc_interrupt)) + add_via2(config); - MCFG_DEVICE_ADD("via6522_0", VIA6522, C7M/10) - MCFG_VIA6522_READPA_HANDLER(READ8(*this, mac_state,mac_via_in_a)) - MCFG_VIA6522_READPB_HANDLER(READ8(*this, mac_state,mac_via_in_b)) - MCFG_VIA6522_WRITEPA_HANDLER(WRITE8(*this, mac_state,mac_via_out_a)) - MCFG_VIA6522_WRITEPB_HANDLER(WRITE8(*this, mac_state,mac_via_out_b_bbadb)) - MCFG_VIA6522_CB2_HANDLER(WRITELINE(*this, mac_state,mac_adb_via_out_cb2)) - MCFG_VIA6522_IRQ_HANDLER(WRITELINE(*this, mac_state,mac_via_irq)) + scsi_port_device &scsibus(SCSI_PORT(config, "scsi")); + scsibus.set_slot_device(1, "harddisk", SCSIHD, DEVICE_INPUT_DEFAULTS_NAME(SCSI_ID_6)); + scsibus.set_slot_device(2, "harddisk", SCSIHD, DEVICE_INPUT_DEFAULTS_NAME(SCSI_ID_5)); - MCFG_DEVICE_ADD("via6522_1", VIA6522, C7M/10) - MCFG_VIA6522_READPA_HANDLER(READ8(*this, mac_state, mac_via2_in_a)) - MCFG_VIA6522_READPB_HANDLER(READ8(*this, mac_state, mac_via2_in_b)) - MCFG_VIA6522_WRITEPA_HANDLER(WRITE8(*this, mac_state,mac_via2_out_a)) - MCFG_VIA6522_WRITEPB_HANDLER(WRITE8(*this, mac_state,mac_via2_out_b)) - MCFG_VIA6522_IRQ_HANDLER(WRITELINE(*this, mac_state,mac_via2_irq)) - - MCFG_DEVICE_ADD("scsi", SCSI_PORT, 0) - MCFG_SCSIDEV_ADD("scsi:" SCSI_PORT_DEVICE1, "harddisk", SCSIHD, SCSI_ID_6) - MCFG_SCSIDEV_ADD("scsi:" SCSI_PORT_DEVICE2, "harddisk", SCSIHD, SCSI_ID_5) - - MCFG_DEVICE_ADD(MAC_539X_1_TAG, NCR539X, C7M) - MCFG_LEGACY_SCSI_PORT("scsi") - MCFG_NCR539X_OUT_IRQ_CB(WRITELINE(*this, mac_state, irq_539x_1_w)) - MCFG_NCR539X_OUT_DRQ_CB(WRITELINE(*this, mac_state, drq_539x_1_w)) + NCR539X(config, m_539x_1, C7M); + m_539x_1->set_scsi_port("scsi"); + m_539x_1->irq_callback().set(FUNC(mac_state::irq_539x_1_w)); + m_539x_1->drq_callback().set(FUNC(mac_state::drq_539x_1_w)); /* internal ram */ - MCFG_RAM_ADD(RAM_TAG) - MCFG_RAM_DEFAULT_SIZE("4M") - MCFG_RAM_EXTRA_OPTIONS("8M,16M,32M,64M,68M,72M,80M,96M,128M") + RAM(config, m_ram); + m_ram->set_default_size("4M"); + m_ram->set_extra_options("8M,16M,32M,64M,68M,72M,80M,96M,128M"); - // software list - MCFG_SOFTWARE_LIST_ADD("flop35_list","mac_flop") - MCFG_SOFTWARE_LIST_ADD("hdd_list", "mac_hdd") -MACHINE_CONFIG_END + SOFTWARE_LIST(config, "flop35_list").set_type("mac_flop", SOFTWARE_LIST_ORIGINAL_SYSTEM); +} static INPUT_PORTS_START( macadb ) PORT_START("MOUSE0") /* Mouse - button */ diff --git a/src/mame/drivers/mac128.cpp b/src/mame/drivers/mac128.cpp index 928f179fd1a..84ab5acf0ca 100644 --- a/src/mame/drivers/mac128.cpp +++ b/src/mame/drivers/mac128.cpp @@ -1363,9 +1363,9 @@ void mac128_state::mac512ke(machine_config &config) IWM(config, m_iwm, 0).set_config(&mac_iwm_interface); sonydriv_floppy_image_device::legacy_2_drives_add(config, &mac_floppy_interface); - scc85c30_device &scc(SCC85C30(config, "scc", C7M)); - scc.configure_channels(C3_7M, 0, C3_7M, 0); - scc.out_int_callback().set(FUNC(mac128_state::set_scc_interrupt)); + SCC85C30(config, m_scc, C7M); + m_scc->configure_channels(C3_7M, 0, C3_7M, 0); + m_scc->out_int_callback().set(FUNC(mac128_state::set_scc_interrupt)); VIA6522(config, m_via, 1000000); m_via->readpa_handler().set(FUNC(mac128_state::mac_via_in_a)); diff --git a/src/mame/includes/mac.h b/src/mame/includes/mac.h index 10764e03750..3bba73a8bb9 100644 --- a/src/mame/includes/mac.h +++ b/src/mame/includes/mac.h @@ -99,19 +99,34 @@ public: { } + void add_mackbd(machine_config &config); + void add_scsi(machine_config &config, bool cdrom = false); + void add_base_devices(machine_config &config, bool rtc = true, bool super_woz = false); + void add_asc(machine_config &config, asc_device::asc_type type = asc_device::asc_type::ASC); + void add_macplus_additions(machine_config &config); + void add_nubus(machine_config &config, bool bank1 = true, bool bank2 = true); + template void add_nubus_pds(machine_config &config, const char *slot_tag, T &&opts); + void add_via1_adb(machine_config &config, bool macii); + void add_via2(machine_config &config); + void add_pb1xx_vias(machine_config &config); + void add_pb1xx_screen(machine_config &config); + void add_egret(machine_config &config, int type); + void add_cuda(machine_config &config, int type); + + void mac512ke_base(machine_config &config); void mac512ke(machine_config &config); void macplus(machine_config &config); - void maclc(machine_config &config); + void maclc(machine_config &config, bool cpu = true, bool egret = true, asc_device::asc_type asc_type = asc_device::asc_type::V8); void macpb170(machine_config &config); void macclasc(machine_config &config); void maciisi(machine_config &config); - void maclc2(machine_config &config); + void maclc2(machine_config &config, bool egret = true); void macse(machine_config &config); - void maclc3(machine_config &config); + void maclc3(machine_config &config, bool egret = true); void macpd210(machine_config &config); void maciici(machine_config &config); void macprtb(machine_config &config); - void maciix(machine_config &config); + void maciix(machine_config &config, bool nubus_bank1 = true, bool nubus_bank2 = true); void maclc520(machine_config &config); void pwrmac(machine_config &config); void maciivx(machine_config &config); @@ -127,7 +142,8 @@ public: void maciifx(machine_config &config); void macpb140(machine_config &config); void macclas2(machine_config &config); - void macii(machine_config &config); + void macii(machine_config &config, bool cpu = true, asc_device::asc_type asc_type = asc_device::asc_type::ASC, + bool nubus = true, bool nubus_bank1 = true, bool nubus_bank2 = true); void maciihmu(machine_config &config); void init_maclc2(); @@ -287,7 +303,6 @@ private: TIMER_CALLBACK_MEMBER(overlay_timeout_func); DECLARE_READ32_MEMBER(rom_switch_r); - TIMER_DEVICE_CALLBACK_MEMBER(mac_scanline); bool m_snd_enable; bool m_main_buffer; int m_snd_vol; @@ -514,10 +529,11 @@ private: emu_timer *m_scanline_timer; emu_timer *m_adb_timer; + void palette_init_mac(palette_device &palette); + void palette_init_macgsc(palette_device &palette); + DECLARE_VIDEO_START(mac); - DECLARE_PALETTE_INIT(mac); DECLARE_VIDEO_START(macprtb); - DECLARE_PALETTE_INIT(macgsc); DECLARE_VIDEO_START(macsonora); DECLARE_VIDEO_RESET(macrbv); DECLARE_VIDEO_START(macdafb); diff --git a/src/mame/machine/cuda.h b/src/mame/machine/cuda.h index d0bbc029204..4c0e96f9f60 100644 --- a/src/mame/machine/cuda.h +++ b/src/mame/machine/cuda.h @@ -59,6 +59,12 @@ class cuda_device : public device_t, public device_nvram_interface { public: // construction/destruction + cuda_device(const machine_config &mconfig, const char *tag, device_t *owner, int type) + : cuda_device(mconfig, tag, owner, (uint32_t)0) + { + set_type(type); + } + cuda_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); // inline configuration helpers diff --git a/src/mame/machine/egret.h b/src/mame/machine/egret.h index c94cf56be0f..df0ea8b03e8 100644 --- a/src/mame/machine/egret.h +++ b/src/mame/machine/egret.h @@ -57,6 +57,12 @@ class egret_device : public device_t, public device_nvram_interface { public: // construction/destruction + egret_device(const machine_config &mconfig, const char *tag, device_t *owner, int type) + : egret_device(mconfig, tag, owner, (uint32_t)0) + { + set_type(type); + } + egret_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); // inline configuration helpers @@ -98,6 +104,10 @@ public: template devcb_base &set_linechange_cb(Object &&wr) { return write_linechange.set_callback(std::forward(wr)); } template devcb_base &set_via_clock_cb(Object &&wr) { return write_via_clock.set_callback(std::forward(wr)); } template devcb_base &set_via_data_cb(Object &&wr) { return write_via_data.set_callback(std::forward(wr)); } + auto reset_callback() { return write_reset.bind(); } + auto linechange_callback() { return write_linechange.bind(); } + auto via_clock_callback() { return write_via_clock.bind(); } + auto via_data_callback() { return write_via_data.bind(); } devcb_write_line write_reset, write_linechange, write_via_clock, write_via_data; diff --git a/src/mame/machine/mac.cpp b/src/mame/machine/mac.cpp index b8a6c3daed2..b32134fe22a 100644 --- a/src/mame/machine/mac.cpp +++ b/src/mame/machine/mac.cpp @@ -99,6 +99,9 @@ #define INTS_RBV ((m_model >= MODEL_MAC_IICI) && (m_model <= MODEL_MAC_IIVI)) || ((m_model >= MODEL_MAC_LC) && (m_model <= MODEL_MAC_LC_580)) +#define MAC_MAIN_SND_BUF_OFFSET 0x0300 +#define MAC_ALT_SND_BUF_OFFSET 0x5F00 + #ifdef MAME_DEBUG #define LOG_ADB 0 #define LOG_VIA 0 @@ -2354,7 +2357,23 @@ TIMER_CALLBACK_MEMBER(mac_state::mac_scanline_tick) mouse_callback(); } - m_scanline_timer->adjust(m_screen->time_until_pos((scanline+1) % MAC_V_TOTAL, 0)); + if (m_dac) + { + uint16_t *snd_buf_ptr; + if (m_main_buffer) + { + snd_buf_ptr = (uint16_t *)(m_ram->pointer() + m_ram->size() - MAC_MAIN_SND_BUF_OFFSET); + } + else + { + snd_buf_ptr = (uint16_t *)(m_ram->pointer() + m_ram->size() - MAC_ALT_SND_BUF_OFFSET); + } + + m_dac->write(snd_buf_ptr[scanline] >> 8); + } + + int next_scanline = (scanline+1) % MAC_V_TOTAL; + m_scanline_timer->adjust(m_screen->time_until_pos(next_scanline), next_scanline); } WRITE_LINE_MEMBER(mac_state::nubus_irq_9_w) diff --git a/src/mame/machine/swim.h b/src/mame/machine/swim.h index 93d326c32b4..ffef9637be8 100644 --- a/src/mame/machine/swim.h +++ b/src/mame/machine/swim.h @@ -24,6 +24,12 @@ DECLARE_DEVICE_TYPE(SWIM, swim_device) class swim_device : public applefdc_base_device { public: + swim_device(const machine_config &mconfig, const char *tag, device_t *owner, const applefdc_interface *intrf) + : swim_device(mconfig, tag, owner, (uint32_t)0) + { + set_config(intrf); + } + swim_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); // read/write diff --git a/src/mame/video/mac.cpp b/src/mame/video/mac.cpp index ccf6bcfc245..0b354c7dfba 100644 --- a/src/mame/video/mac.cpp +++ b/src/mame/video/mac.cpp @@ -59,14 +59,14 @@ Apple color FPD 01 11 10 (FPD = Full Page Display) #include "machine/ram.h" #include "render.h" -PALETTE_INIT_MEMBER(mac_state,mac) +void mac_state::palette_init_mac(palette_device &palette) { palette.set_pen_color(0, 0xff, 0xff, 0xff); palette.set_pen_color(1, 0x00, 0x00, 0x00); } // 4-level grayscale -PALETTE_INIT_MEMBER(mac_state,macgsc) +void mac_state::palette_init_macgsc(palette_device &palette) { palette.set_pen_color(0, 0xff, 0xff, 0xff); palette.set_pen_color(1, 0x7f, 0x7f, 0x7f);