diff options
Diffstat (limited to 'src/mess/drivers/mac.c')
-rw-r--r-- | src/mess/drivers/mac.c | 2174 |
1 files changed, 2174 insertions, 0 deletions
diff --git a/src/mess/drivers/mac.c b/src/mess/drivers/mac.c new file mode 100644 index 00000000000..315f6330330 --- /dev/null +++ b/src/mess/drivers/mac.c @@ -0,0 +1,2174 @@ +/**************************************************************************** + + drivers/mac.c + Macintosh family emulation + + Nate Woods, Raphael Nabet, R. Belmont + + 0x000000 - 0x3fffff RAM/ROM (switches based on overlay) + 0x400000 - 0x4fffff ROM + 0x580000 - 0x5fffff 5380 NCR/Symbios SCSI peripherals chip (Mac Plus only) + 0x600000 - 0x6fffff RAM + 0x800000 - 0x9fffff Zilog 8530 SCC (Serial Control Chip) Read + 0xa00000 - 0xbfffff Zilog 8530 SCC (Serial Control Chip) Write + 0xc00000 - 0xdfffff IWM (Integrated Woz Machine; floppy) + 0xe80000 - 0xefffff Rockwell 6522 VIA + 0xf00000 - 0xffffef ??? (the ROM appears to be accessing here) + 0xfffff0 - 0xffffff Auto Vector + + + Interrupts: + M68K: + Level 1 from VIA + Level 2 from SCC + Level 4 : Interrupt switch (not implemented) + + VIA: + CA1 from VBLANK + CA2 from 1 Hz clock (RTC) + CB1 from Keyboard Clock + CB2 from Keyboard Data + SR from Keyboard Data Ready + + SCC: + PB_EXT from mouse Y circuitry + PA_EXT from mouse X circuitry + +****************************************************************************/ + + +#include "emu.h" +#include "cpu/m68000/m68000.h" +#include "cpu/powerpc/ppc.h" +#include "cpu/m6805/m6805.h" +#include "machine/6522via.h" +#include "machine/ncr5380.h" +#include "machine/applefdc.h" +#include "devices/sonydriv.h" +#include "imagedev/harddriv.h" +#include "formats/ap_dsk35.h" +#include "machine/ram.h" +#include "machine/scsihd.h" +#include "imagedev/chd_cd.h" +#include "sound/asc.h" +#include "sound/awacs.h" +#include "sound/cdda.h" +#include "video/nubus_48gc.h" +#include "video/nubus_cb264.h" +#include "video/nubus_vikbw.h" +#include "video/nubus_specpdq.h" +#include "video/nubus_m2hires.h" +#include "video/nubus_spec8.h" +//#include "video/nubus_thundergx.h" +#include "video/nubus_radiustpd.h" +#include "video/nubus_wsportrait.h" +#include "machine/nubus_asntmc3b.h" +#include "includes/mac.h" +#include "mac.lh" + +#define C7M (7833600) +#define C15M (C7M*2) +#define C32M (C15M*2) + +// do this here - SCREEN_UPDATE_IND16 is called each scanline when stepping in the +// debugger, which means you can't escape the VIA2 IRQ handler +// +// RBV/MDU bits in IER/IFR: +// +// CA1: any slot interrupt = 0x02 +// CA2: SCSI interrupt = 0x01 +// CB1: ASC interrupt = 0x10 + +static INTERRUPT_GEN( mac_rbv_vbl ) +{ + mac_state *mac = device->machine().driver_data<mac_state>(); + + mac->m_rbv_regs[2] &= ~0x40; // set vblank signal + mac->m_rbv_vbltime = 10; + +// printf("RBV: raising VBL!\n"); + + if (mac->m_rbv_regs[0x12] & 0x40) + { + mac->rbv_recalc_irqs(); + } +} + +READ32_MEMBER( mac_state::rbv_ramdac_r ) +{ + return 0; +} + +WRITE32_MEMBER( mac_state::rbv_ramdac_w ) +{ + if (!offset) + { + m_rbv_clutoffs = data>>24; + m_rbv_count = 0; + } + else + { + m_rbv_colors[m_rbv_count++] = data>>24; + + if (m_rbv_count == 3) + { + // for portrait display, force monochrome by using the blue channel + if (m_model != MODEL_MAC_CLASSIC_II) + { + // Color Classic has no MONTYPE so the safe read gets us 512x384, which is right + if (space.machine().root_device().ioport("MONTYPE")->read_safe(2) == 1) + { + palette_set_color(space.machine(), m_rbv_clutoffs, MAKE_RGB(m_rbv_colors[2], m_rbv_colors[2], m_rbv_colors[2])); + m_rbv_palette[m_rbv_clutoffs] = MAKE_RGB(m_rbv_colors[2], m_rbv_colors[2], m_rbv_colors[2]); + m_rbv_clutoffs++; + m_rbv_count = 0; + } + else + { + palette_set_color(space.machine(), m_rbv_clutoffs, MAKE_RGB(m_rbv_colors[0], m_rbv_colors[1], m_rbv_colors[2])); + m_rbv_palette[m_rbv_clutoffs] = MAKE_RGB(m_rbv_colors[0], m_rbv_colors[1], m_rbv_colors[2]); + m_rbv_clutoffs++; + m_rbv_count = 0; + } + } + } + } +} + +WRITE32_MEMBER( mac_state::ariel_ramdac_w ) // this is for the "Ariel" style RAMDAC +{ + if (mem_mask == 0xff000000) + { + m_rbv_clutoffs = data>>24; + m_rbv_count = 0; + } + else if (mem_mask == 0x00ff0000) + { + m_rbv_colors[m_rbv_count++] = data>>16; + + if (m_rbv_count == 3) + { + // for portrait display, force monochrome by using the blue channel + if (m_model != MODEL_MAC_CLASSIC_II) + { + // Color Classic has no MONTYPE so the safe read gets us 512x384, which is right + if (space.machine().root_device().ioport("MONTYPE")->read_safe(2) == 1) + { + palette_set_color(space.machine(), m_rbv_clutoffs, MAKE_RGB(m_rbv_colors[2], m_rbv_colors[2], m_rbv_colors[2])); + m_rbv_palette[m_rbv_clutoffs] = MAKE_RGB(m_rbv_colors[2], m_rbv_colors[2], m_rbv_colors[2]); + m_rbv_clutoffs++; + m_rbv_count = 0; + } + else + { + palette_set_color(space.machine(), m_rbv_clutoffs, MAKE_RGB(m_rbv_colors[0], m_rbv_colors[1], m_rbv_colors[2])); + m_rbv_palette[m_rbv_clutoffs] = MAKE_RGB(m_rbv_colors[0], m_rbv_colors[1], m_rbv_colors[2]); + m_rbv_clutoffs++; + m_rbv_count = 0; + } + } + } + } + else if (mem_mask == 0x0000ff00) + { + // config reg +// printf("Ariel: %02x to config\n", (data>>8)&0xff); + } + else // color key reg + { + } +} + +READ8_MEMBER( mac_state::mac_sonora_vctl_r ) +{ + if (offset == 2) + { +// printf("Sonora: read monitor ID at PC=%x\n", cpu_get_pc(m_maincpu)); + return (6 << 4); // 640x480 RGB monitor + } + + return m_sonora_vctl[offset]; +} + +WRITE8_MEMBER( mac_state::mac_sonora_vctl_w ) +{ +// printf("Sonora: %02x to vctl %x\n", data, offset); + m_sonora_vctl[offset] = data; +} + +void mac_state::rbv_recalc_irqs() +{ + // check slot interrupts and bubble them down to IFR + UINT8 slot_irqs = (~m_rbv_regs[2]) & 0x78; + slot_irqs &= (m_rbv_regs[0x12] & 0x78); + + if (slot_irqs) + { + m_rbv_regs[3] |= 2; // any slot + } + else // no slot irqs, clear the pending bit + { + m_rbv_regs[3] &= ~2; // any slot + } + + UINT8 ifr = (m_rbv_regs[3] & m_rbv_ier) & 0x1b; //m_rbv_regs[0x13]); + +// printf("ifr = %02x (reg3 %02x reg13 %02x)\n", ifr, m_rbv_regs[3], m_rbv_regs[0x13]); + if (ifr != 0) + { + m_rbv_regs[3] = ifr | 0x80; + m_rbv_ifr = ifr | 0x80; + +// printf("VIA2 raise\n"); + set_via2_interrupt(1); + } + else + { +// printf("VIA2 lower\n"); + set_via2_interrupt(0); + } +} + +READ8_MEMBER ( mac_state::mac_rbv_r ) +{ + int data = 0; + + if (offset < 0x100) + { + data = m_rbv_regs[offset]; + + if (offset == 0x10) + { + data &= ~0x38; + data |= (space.machine().root_device().ioport("MONTYPE")->read_safe(2)<<3); +// printf("rbv_r montype: %02x (PC %x)\n", data, cpu_get_pc(space.cpu)); + } + + // bit 7 of these registers always reads as 0 on RBV + if ((offset == 0x12) || (offset == 0x13)) + { + data &= ~0x80; + } + } + else + { + offset >>= 9; + + switch (offset) + { + case 13: // IFR +// printf("Read IER = %02x (PC=%x) 2=%02x\n", m_rbv_ier, cpu_get_pc(m_maincpu), m_rbv_regs[2]); + return m_rbv_ifr; + break; + + case 14: // IER +// printf("Read IFR = %02x (PC=%x) 2=%02x\n", m_rbv_ifr, cpu_get_pc(m_maincpu), m_rbv_regs[2]); + return m_rbv_ier; + break; + + default: + logerror("rbv_r: Unknown extended RBV VIA register %d access\n", offset); + break; + } + } + +// printf("rbv_r: %x = %02x (PC=%x)\n", offset, data, cpu_get_pc(m_maincpu)); + + return data; +} + +WRITE8_MEMBER ( mac_state::mac_rbv_w ) +{ + if (offset < 0x100) + { +// if (offset == 0x10) +// printf("rbv_w: %02x to offset %x (PC=%x)\n", data, offset, cpu_get_pc(m_maincpu)); + switch (offset) + { + case 0x00: + if (m_model == MODEL_MAC_LC) + { + m68k_set_hmmu_enable(m_maincpu, (data & 0x8) ? M68K_HMMU_DISABLE : M68K_HMMU_ENABLE_LC); + } + break; + + case 0x01: + if (((data & 0xc0) != (m_rbv_regs[1] & 0xc0)) && (m_rbv_type == RBV_TYPE_V8)) + { + m_rbv_regs[1] = data; + this->v8_resize(); + } + break; + + case 0x02: + data &= 0x40; + m_rbv_regs[offset] &= ~data; + rbv_recalc_irqs(); + break; + + case 0x03: // write here to ack + if (data & 0x80) // 1 bits write 1s + { + m_rbv_regs[offset] |= data & 0x7f; + m_rbv_ifr |= data & 0x7f; + } + else // 1 bits write 0s + { + m_rbv_regs[offset] &= ~(data & 0x7f); + m_rbv_ifr &= ~(data & 0x7f); + } + rbv_recalc_irqs(); + break; + + case 0x10: + if (data != 0) + { + m_rbv_immed10wr = 1; + } + m_rbv_regs[offset] = data; + break; + + case 0x12: + if (data & 0x80) // 1 bits write 1s + { + m_rbv_regs[offset] |= data & 0x7f; + } + else // 1 bits write 0s + { + m_rbv_regs[offset] &= ~(data & 0x7f); + } + rbv_recalc_irqs(); + break; + + case 0x13: + if (data & 0x80) // 1 bits write 1s + { + m_rbv_regs[offset] |= data & 0x7f; + + if (data == 0xff) m_rbv_regs[offset] = 0x1f; // I don't know why this is special, but the IIci ROM's POST demands it + } + else // 1 bits write 0s + { + m_rbv_regs[offset] &= ~(data & 0x7f); + } + break; + + default: + m_rbv_regs[offset] = data; + break; + } + } + else + { + offset >>= 9; + + switch (offset) + { + case 13: // IFR +// printf("%02x to IFR (PC=%x)\n", data, cpu_get_pc(m_maincpu)); + if (data & 0x80) + { + data = 0x7f; + } + rbv_recalc_irqs(); + break; + + case 14: // IER +// printf("%02x to IER (PC=%x)\n", data, cpu_get_pc(m_maincpu)); + if (data & 0x80) // 1 bits write 1s + { + m_rbv_ier |= data & 0x7f; + } + else // 1 bits write 0s + { + m_rbv_ier &= ~(data & 0x7f); + } + rbv_recalc_irqs(); + break; + + default: + logerror("rbv_w: Unknown extended RBV VIA register %d access\n", offset); + break; + } + } +} + +// Portable/PB100 video +static VIDEO_START( macprtb ) +{ +} + +READ16_MEMBER(mac_state::mac_config_r) +{ + return 0xffff; // returns nonzero if no PDS RAM expansion, 0 if present +} + +// IIfx +READ32_MEMBER(mac_state::biu_r) +{ +// printf("biu_r @ %x, mask %08x\n", offset, mem_mask); + return 0; +} + +WRITE32_MEMBER(mac_state::biu_w) +{ +// printf("biu_w %x @ %x, mask %08x\n", data, offset, mem_mask); +} + +READ8_MEMBER(mac_state::oss_r) +{ +// printf("oss_r @ %x\n", offset); +// if (offset <= 0xe) // for interrupt mask registers, we're intended to return something different than is written in the low 3 bits (?) +// { +// return m_oss_regs[offset]<<4; +// } + + return m_oss_regs[offset]; +} + +WRITE8_MEMBER(mac_state::oss_w) +{ +// printf("oss_w %x @ %x\n", data, offset); + m_oss_regs[offset] = data; +} + +READ32_MEMBER(mac_state::buserror_r) +{ + cputag_set_input_line(machine(), "maincpu", M68K_LINE_BUSERROR, ASSERT_LINE); + cputag_set_input_line(machine(), "maincpu", M68K_LINE_BUSERROR, CLEAR_LINE); + return 0; +} + +READ8_MEMBER(mac_state::scciop_r) +{ +// printf("scciop_r @ %x (PC=%x)\n", offset, cpu_get_pc(m_maincpu)); + return 0; +} + +WRITE8_MEMBER(mac_state::scciop_w) +{ +// printf("scciop_w %x @ %x (PC=%x)\n", data, offset, cpu_get_pc(m_maincpu)); +} + +READ8_MEMBER(mac_state::swimiop_r) +{ +// printf("swimiop_r @ %x (PC=%x)\n", offset, cpu_get_pc(m_maincpu)); + return 0; +} + +WRITE8_MEMBER(mac_state::swimiop_w) +{ +// printf("swimiop_w %x @ %x (PC=%x)\n", data, offset, cpu_get_pc(m_maincpu)); +} + +READ8_MEMBER(mac_state::pmac_diag_r) +{ + switch (offset) + { + case 0: // return 0 here to get the 'car crash' sound after the boot bong, 1 otherwise + return 1; + } + + return 0; +} + +READ8_MEMBER(mac_state::amic_dma_r) +{ + return 0; +} + +WRITE8_MEMBER(mac_state::amic_dma_w) +{ +// printf("amic_dma_w: %02x at %x (PC=%x)\n", data, offset+0x1000, cpu_get_pc(m_maincpu)); +} + +// HMC has one register: a 35-bit shift register which is accessed one bit at a time (see pmac6100 code at 4030383c which makes this obvious) +READ8_MEMBER(mac_state::hmc_r) +{ + UINT8 rv = (UINT8)(m_hmc_shiftout&1); + m_hmc_shiftout>>= 1; + return rv; +} + +WRITE8_MEMBER(mac_state::hmc_w) +{ + // writes to xxx8 reset the bit shift position + if ((offset&0x8) == 8) + { + m_hmc_shiftout = m_hmc_reg; + } + else + { + UINT64 temp = (data & 1) ? U64(0x400000000) : U64(0x0); + m_hmc_reg >>= 1; + m_hmc_reg |= temp; + } +} + +READ8_MEMBER(mac_state::mac_gsc_r) +{ + if (offset == 1) + { + return 5; + } + + return 0; +} + +WRITE8_MEMBER(mac_state::mac_gsc_w) +{ +} + +READ8_MEMBER(mac_state::mac_5396_r) +{ + if (offset < 0x100) + { + return m_539x_1->read(space, offset>>4); + } + else // pseudo-DMA: read from the FIFO + { + return m_539x_1->read(space, 2); + } + + return 0; +} + +WRITE8_MEMBER(mac_state::mac_5396_w) +{ + if (offset < 0x100) + { + m_539x_1->write(space, offset>>4, data); + } + else // pseudo-DMA: write to the FIFO + { + m_539x_1->write(space, 2, data); + } +} + +/*************************************************************************** + ADDRESS MAPS +***************************************************************************/ + +static ADDRESS_MAP_START(mac512ke_map, AS_PROGRAM, 16, mac_state ) + AM_RANGE(0x800000, 0x9fffff) AM_READ(mac_scc_r) + AM_RANGE(0xa00000, 0xbfffff) AM_WRITE(mac_scc_w) + AM_RANGE(0xc00000, 0xdfffff) AM_READWRITE(mac_iwm_r, mac_iwm_w) + AM_RANGE(0xe80000, 0xefffff) AM_READWRITE(mac_via_r, mac_via_w) + AM_RANGE(0xfffff0, 0xffffff) AM_READWRITE(mac_autovector_r, mac_autovector_w) +ADDRESS_MAP_END + +static ADDRESS_MAP_START(macplus_map, AS_PROGRAM, 16, mac_state ) + AM_RANGE(0x580000, 0x5fffff) AM_READWRITE(macplus_scsi_r, macplus_scsi_w) + AM_RANGE(0x800000, 0x9fffff) AM_READ(mac_scc_r) + AM_RANGE(0xa00000, 0xbfffff) AM_WRITE(mac_scc_w) + AM_RANGE(0xc00000, 0xdfffff) AM_READWRITE(mac_iwm_r, mac_iwm_w) + AM_RANGE(0xe80000, 0xefffff) AM_READWRITE(mac_via_r, mac_via_w) + AM_RANGE(0xfffff0, 0xffffff) AM_READWRITE(mac_autovector_r, mac_autovector_w) +ADDRESS_MAP_END + +static ADDRESS_MAP_START(macprtb_map, AS_PROGRAM, 16, mac_state ) + AM_RANGE(0x900000, 0x93ffff) AM_ROM AM_REGION("bootrom", 0) AM_MIRROR(0x0c0000) + AM_RANGE(0xf60000, 0xf6ffff) AM_READWRITE(mac_iwm_r, mac_iwm_w) + AM_RANGE(0xf70000, 0xf7ffff) AM_READWRITE(mac_via_r, mac_via_w) + AM_RANGE(0xf90000, 0xf9ffff) AM_READWRITE(macplus_scsi_r, macplus_scsi_w) + AM_RANGE(0xfa8000, 0xfaffff) AM_RAM AM_SHARE("vram16") // VRAM + AM_RANGE(0xfb0000, 0xfbffff) AM_DEVREADWRITE8("asc", asc_device, read, write, 0xffff) + AM_RANGE(0xfc0000, 0xfcffff) AM_READ(mac_config_r) + AM_RANGE(0xfd0000, 0xfdffff) AM_READWRITE(mac_scc_r, mac_scc_2_w) + AM_RANGE(0xfffff0, 0xffffff) AM_READWRITE(mac_autovector_r, mac_autovector_w) +ADDRESS_MAP_END + +static ADDRESS_MAP_START(maclc_map, AS_PROGRAM, 32, mac_state ) + ADDRESS_MAP_GLOBAL_MASK(0x80ffffff) // V8 uses bit 31 and 23-0 for address decoding only + + AM_RANGE(0xa00000, 0xafffff) AM_ROM AM_REGION("bootrom", 0) // ROM (in 32-bit mode) + + AM_RANGE(0xf00000, 0xf01fff) AM_READWRITE16(mac_via_r, mac_via_w, 0xffffffff) + AM_RANGE(0xf04000, 0xf05fff) AM_READWRITE16(mac_scc_r, mac_scc_2_w, 0xffffffff) + AM_RANGE(0xf06000, 0xf07fff) AM_READWRITE(macii_scsi_drq_r, macii_scsi_drq_w) + AM_RANGE(0xf10000, 0xf11fff) AM_READWRITE16(macplus_scsi_r, macii_scsi_w, 0xffffffff) + AM_RANGE(0xf12000, 0xf13fff) AM_READWRITE(macii_scsi_drq_r, macii_scsi_drq_w) + AM_RANGE(0xf14000, 0xf15fff) AM_DEVREADWRITE8("asc", asc_device, read, write, 0xffffffff) + AM_RANGE(0xf16000, 0xf17fff) AM_READWRITE16(mac_iwm_r, mac_iwm_w, 0xffffffff) + AM_RANGE(0xf24000, 0xf24003) AM_READWRITE(rbv_ramdac_r, ariel_ramdac_w) + AM_RANGE(0xf26000, 0xf27fff) AM_READWRITE8(mac_rbv_r, mac_rbv_w, 0xffffffff) // VIA2 (V8) + AM_RANGE(0xf40000, 0xfbffff) AM_RAM AM_SHARE("vram") +ADDRESS_MAP_END + +static ADDRESS_MAP_START(maclc3_map, AS_PROGRAM, 32, mac_state ) + AM_RANGE(0x40000000, 0x400fffff) AM_ROM AM_REGION("bootrom", 0) AM_MIRROR(0x0ff00000) + + AM_RANGE(0x50000000, 0x50001fff) AM_READWRITE16(mac_via_r, mac_via_w, 0xffffffff) AM_MIRROR(0x00f00000) + AM_RANGE(0x50004000, 0x50005fff) AM_READWRITE16(mac_scc_r, mac_scc_2_w, 0xffffffff) AM_MIRROR(0x00f00000) + AM_RANGE(0x50006000, 0x50007fff) AM_READWRITE(macii_scsi_drq_r, macii_scsi_drq_w) AM_MIRROR(0x00f00000) + AM_RANGE(0x50010000, 0x50011fff) AM_READWRITE16(macplus_scsi_r, macii_scsi_w, 0xffffffff) AM_MIRROR(0x00f00000) + AM_RANGE(0x50012000, 0x50013fff) AM_READWRITE(macii_scsi_drq_r, macii_scsi_drq_w) AM_MIRROR(0x00f00000) + AM_RANGE(0x50014000, 0x50015fff) AM_DEVREADWRITE8("asc", asc_device, read, write, 0xffffffff) AM_MIRROR(0x00f00000) + AM_RANGE(0x50016000, 0x50017fff) AM_READWRITE16(mac_iwm_r, mac_iwm_w, 0xffffffff) AM_MIRROR(0x00f00000) + AM_RANGE(0x50024000, 0x50025fff) AM_WRITE( ariel_ramdac_w ) AM_MIRROR(0x00f00000) + AM_RANGE(0x50026000, 0x50027fff) AM_READWRITE8(mac_rbv_r, mac_rbv_w, 0xffffffff) AM_MIRROR(0x00f00000) + AM_RANGE(0x50028000, 0x50028003) AM_READWRITE8(mac_sonora_vctl_r, mac_sonora_vctl_w, 0xffffffff) AM_MIRROR(0x00f00000) + + AM_RANGE(0x5ffffffc, 0x5fffffff) AM_READ(mac_read_id) + + AM_RANGE(0x60000000, 0x600fffff) AM_RAM AM_MIRROR(0x0ff00000) AM_SHARE("vram") +ADDRESS_MAP_END + +static ADDRESS_MAP_START(macii_map, AS_PROGRAM, 32, mac_state ) + AM_RANGE(0x40000000, 0x4003ffff) AM_ROM AM_REGION("bootrom", 0) AM_MIRROR(0x0ffc0000) + + // MMU remaps I/O without the F + AM_RANGE(0x50000000, 0x50001fff) AM_READWRITE16(mac_via_r, mac_via_w, 0xffffffff) AM_MIRROR(0x00f00000) + AM_RANGE(0x50002000, 0x50003fff) AM_READWRITE16(mac_via2_r, mac_via2_w, 0xffffffff) AM_MIRROR(0x00f00000) + AM_RANGE(0x50004000, 0x50005fff) AM_READWRITE16(mac_scc_r, mac_scc_2_w, 0xffffffff) AM_MIRROR(0x00f00000) + AM_RANGE(0x50006000, 0x50006003) AM_WRITE(macii_scsi_drq_w) AM_MIRROR(0x00f00000) + AM_RANGE(0x50006060, 0x50006063) AM_READ(macii_scsi_drq_r) AM_MIRROR(0x00f00000) + AM_RANGE(0x50010000, 0x50011fff) AM_READWRITE16(macplus_scsi_r, macii_scsi_w, 0xffffffff) AM_MIRROR(0x00f00000) + AM_RANGE(0x50012060, 0x50012063) AM_READ(macii_scsi_drq_r) AM_MIRROR(0x00f00000) + AM_RANGE(0x50014000, 0x50015fff) AM_DEVREADWRITE8("asc", asc_device, read, write, 0xffffffff) AM_MIRROR(0x00f00000) + AM_RANGE(0x50016000, 0x50017fff) AM_READWRITE16(mac_iwm_r, mac_iwm_w, 0xffffffff) AM_MIRROR(0x00f00000) + AM_RANGE(0x50040000, 0x50041fff) AM_READWRITE16(mac_via_r, mac_via_w, 0xffffffff) AM_MIRROR(0x00f00000) +ADDRESS_MAP_END + +static ADDRESS_MAP_START(maciici_map, AS_PROGRAM, 32, mac_state ) + AM_RANGE(0x40000000, 0x4007ffff) AM_ROM AM_REGION("bootrom", 0) AM_MIRROR(0x0ff80000) + + AM_RANGE(0x50000000, 0x50001fff) AM_READWRITE16(mac_via_r, mac_via_w, 0xffffffff) AM_MIRROR(0x00f00000) + AM_RANGE(0x50004000, 0x50005fff) AM_READWRITE16(mac_scc_r, mac_scc_2_w, 0xffffffff) AM_MIRROR(0x00f00000) + AM_RANGE(0x50006000, 0x50007fff) AM_READWRITE(macii_scsi_drq_r, macii_scsi_drq_w) AM_MIRROR(0x00f00000) + AM_RANGE(0x50010000, 0x50011fff) AM_READWRITE16(macplus_scsi_r, macii_scsi_w, 0xffffffff) AM_MIRROR(0x00f00000) + AM_RANGE(0x50012060, 0x50012063) AM_READ(macii_scsi_drq_r) AM_MIRROR(0x00f00000) + AM_RANGE(0x50014000, 0x50015fff) AM_DEVREADWRITE8("asc", asc_device, read, write, 0xffffffff) AM_MIRROR(0x00f00000) + AM_RANGE(0x50016000, 0x50017fff) AM_READWRITE16(mac_iwm_r, mac_iwm_w, 0xffffffff) AM_MIRROR(0x00f00000) + AM_RANGE(0x50024000, 0x50024007) AM_WRITE( rbv_ramdac_w ) AM_MIRROR(0x00f00000) + AM_RANGE(0x50026000, 0x50027fff) AM_READWRITE8(mac_rbv_r, mac_rbv_w, 0xffffffff) AM_MIRROR(0x00f00000) + AM_RANGE(0x50040000, 0x50041fff) AM_READWRITE16(mac_via_r, mac_via_w, 0xffffffff) AM_MIRROR(0x00f00000) +ADDRESS_MAP_END + +static ADDRESS_MAP_START(macse30_map, AS_PROGRAM, 32, mac_state ) + AM_RANGE(0x40000000, 0x4003ffff) AM_ROM AM_REGION("bootrom", 0) AM_MIRROR(0x0ffc0000) + + AM_RANGE(0x50000000, 0x50001fff) AM_READWRITE16(mac_via_r, mac_via_w, 0xffffffff) AM_MIRROR(0x00f00000) + AM_RANGE(0x50002000, 0x50003fff) AM_READWRITE16(mac_via2_r, mac_via2_w, 0xffffffff) AM_MIRROR(0x00f00000) + AM_RANGE(0x50004000, 0x50005fff) AM_READWRITE16(mac_scc_r, mac_scc_2_w, 0xffffffff) AM_MIRROR(0x00f00000) + AM_RANGE(0x50006000, 0x50007fff) AM_READWRITE(macii_scsi_drq_r, macii_scsi_drq_w) AM_MIRROR(0x00f00000) + AM_RANGE(0x50010000, 0x50011fff) AM_READWRITE16(macplus_scsi_r, macii_scsi_w, 0xffffffff) AM_MIRROR(0x00f00000) + AM_RANGE(0x50012060, 0x50012063) AM_READ(macii_scsi_drq_r) AM_MIRROR(0x00f00000) + AM_RANGE(0x50014000, 0x50015fff) AM_DEVREADWRITE8("asc", asc_device, read, write, 0xffffffff) AM_MIRROR(0x00f00000) + AM_RANGE(0x50016000, 0x50017fff) AM_READWRITE16(mac_iwm_r, mac_iwm_w, 0xffffffff) AM_MIRROR(0x00f00000) + AM_RANGE(0x50040000, 0x50041fff) AM_READWRITE16(mac_via_r, mac_via_w, 0xffffffff) AM_MIRROR(0x00f00000) // mirror + + AM_RANGE(0xfe000000, 0xfe00ffff) AM_RAM AM_SHARE("vram") + AM_RANGE(0xfeffe000, 0xfeffffff) AM_ROM AM_REGION("se30vrom", 0x0) +ADDRESS_MAP_END + +static ADDRESS_MAP_START(maciifx_map, AS_PROGRAM, 32, mac_state ) + AM_RANGE(0x40000000, 0x4007ffff) AM_ROM AM_REGION("bootrom", 0) AM_MIRROR(0x0ff80000) + + AM_RANGE(0x50000000, 0x50001fff) AM_READWRITE16(mac_via_r, mac_via_w, 0xffffffff) AM_MIRROR(0x00f00000) + AM_RANGE(0x50004000, 0x50005fff) AM_READWRITE8(scciop_r, scciop_w, 0xffffffff) AM_MIRROR(0x00f00000) + AM_RANGE(0x5000a000, 0x5000bfff) AM_READWRITE16(macplus_scsi_r, macii_scsi_w, 0xffffffff) AM_MIRROR(0x00f00000) + AM_RANGE(0x5000c060, 0x5000c063) AM_READ(macii_scsi_drq_r) AM_MIRROR(0x00f00000) + AM_RANGE(0x5000d000, 0x5000d003) AM_WRITE(macii_scsi_drq_w) AM_MIRROR(0x00f00000) + AM_RANGE(0x5000d060, 0x5000d063) AM_READ(macii_scsi_drq_r) AM_MIRROR(0x00f00000) + AM_RANGE(0x50010000, 0x50011fff) AM_DEVREADWRITE8("asc", asc_device, read, write, 0xffffffff) AM_MIRROR(0x00f00000) + AM_RANGE(0x50012000, 0x50013fff) AM_READWRITE8(swimiop_r, swimiop_w, 0xffffffff) AM_MIRROR(0x00f00000) + AM_RANGE(0x50018000, 0x50019fff) AM_READWRITE(biu_r, biu_w) AM_MIRROR(0x00f00000) + AM_RANGE(0x5001a000, 0x5001bfff) AM_READWRITE8(oss_r, oss_w, 0xffffffff) AM_MIRROR(0x00f00000) + AM_RANGE(0x50024000, 0x50027fff) AM_READ(buserror_r) AM_MIRROR(0x00f00000) // must bus error on access here so ROM can determine we're an FMC + AM_RANGE(0x50040000, 0x50041fff) AM_READWRITE16(mac_via_r, mac_via_w, 0xffffffff) AM_MIRROR(0x00f00000) +ADDRESS_MAP_END + +// ROM detects the "Jaws" ASIC by checking for I/O space mirrored at 0x01000000 boundries +static ADDRESS_MAP_START(macpb140_map, AS_PROGRAM, 32, mac_state ) + AM_RANGE(0x40000000, 0x400fffff) AM_ROM AM_REGION("bootrom", 0) AM_MIRROR(0x0ff00000) + + AM_RANGE(0x50000000, 0x50001fff) AM_READWRITE16(mac_via_r, mac_via_w, 0xffffffff) AM_MIRROR(0x01f00000) + AM_RANGE(0x50002000, 0x50003fff) AM_READWRITE16(mac_via2_r, mac_via2_w, 0xffffffff) AM_MIRROR(0x01f00000) + AM_RANGE(0x50004000, 0x50005fff) AM_READWRITE16(mac_scc_r, mac_scc_2_w, 0xffffffff) AM_MIRROR(0x01f00000) + AM_RANGE(0x50006000, 0x50007fff) AM_READWRITE(macii_scsi_drq_r, macii_scsi_drq_w) AM_MIRROR(0x01f00000) + AM_RANGE(0x50010000, 0x50011fff) AM_READWRITE16(macplus_scsi_r, macii_scsi_w, 0xffffffff) AM_MIRROR(0x01f00000) + AM_RANGE(0x50012060, 0x50012063) AM_READ(macii_scsi_drq_r) AM_MIRROR(0x01f00000) + AM_RANGE(0x50014000, 0x50015fff) AM_DEVREADWRITE8("asc", asc_device, read, write, 0xffffffff) AM_MIRROR(0x01f00000) + AM_RANGE(0x50016000, 0x50017fff) AM_READWRITE16(mac_iwm_r, mac_iwm_w, 0xffffffff) AM_MIRROR(0x01f00000) + AM_RANGE(0x50024000, 0x50027fff) AM_READ(buserror_r) AM_MIRROR(0x01f00000) // bus error here to make sure we aren't mistaken for another decoder + + AM_RANGE(0xfee08000, 0xfeffffff) AM_RAM AM_SHARE("vram") +ADDRESS_MAP_END + +static ADDRESS_MAP_START(macpb160_map, AS_PROGRAM, 32, mac_state ) + AM_RANGE(0x40000000, 0x400fffff) AM_ROM AM_REGION("bootrom", 0) AM_MIRROR(0x0ff00000) + + AM_RANGE(0x50f00000, 0x50f01fff) AM_READWRITE16(mac_via_r, mac_via_w, 0xffffffff) + AM_RANGE(0x50f02000, 0x50f03fff) AM_READWRITE16(mac_via2_r, mac_via2_w, 0xffffffff) + AM_RANGE(0x50f04000, 0x50f05fff) AM_READWRITE16(mac_scc_r, mac_scc_2_w, 0xffffffff) + AM_RANGE(0x50f06000, 0x50f07fff) AM_READWRITE(macii_scsi_drq_r, macii_scsi_drq_w) + AM_RANGE(0x50f10000, 0x50f11fff) AM_READWRITE16(macplus_scsi_r, macii_scsi_w, 0xffffffff) + AM_RANGE(0x50f12060, 0x50f12063) AM_READ(macii_scsi_drq_r) + AM_RANGE(0x50f14000, 0x50f15fff) AM_DEVREADWRITE8("asc", asc_device, read, write, 0xffffffff) + AM_RANGE(0x50f16000, 0x50f17fff) AM_READWRITE16(mac_iwm_r, mac_iwm_w, 0xffffffff) + AM_RANGE(0x50f20000, 0x50f21fff) AM_READWRITE8(mac_gsc_r, mac_gsc_w, 0xffffffff) + AM_RANGE(0x50f24000, 0x50f27fff) AM_READ(buserror_r) // bus error here to make sure we aren't mistaken for another decoder + + AM_RANGE(0x60000000, 0x6001ffff) AM_RAM AM_SHARE("vram") AM_MIRROR(0x0ffe0000) +ADDRESS_MAP_END + +static ADDRESS_MAP_START(macpb165c_map, AS_PROGRAM, 32, mac_state ) + AM_RANGE(0x40000000, 0x400fffff) AM_ROM AM_REGION("bootrom", 0) AM_MIRROR(0x0ff00000) + + AM_RANGE(0x50f00000, 0x50f01fff) AM_READWRITE16(mac_via_r, mac_via_w, 0xffffffff) + AM_RANGE(0x50f02000, 0x50f03fff) AM_READWRITE16(mac_via2_r, mac_via2_w, 0xffffffff) + AM_RANGE(0x50f04000, 0x50f05fff) AM_READWRITE16(mac_scc_r, mac_scc_2_w, 0xffffffff) + AM_RANGE(0x50f06000, 0x50f07fff) AM_READWRITE(macii_scsi_drq_r, macii_scsi_drq_w) + AM_RANGE(0x50f10000, 0x50f11fff) AM_READWRITE16(macplus_scsi_r, macii_scsi_w, 0xffffffff) + AM_RANGE(0x50f12060, 0x50f12063) AM_READ(macii_scsi_drq_r) + AM_RANGE(0x50f14000, 0x50f15fff) AM_DEVREADWRITE8("asc", asc_device, read, write, 0xffffffff) + AM_RANGE(0x50f16000, 0x50f17fff) AM_READWRITE16(mac_iwm_r, mac_iwm_w, 0xffffffff) + AM_RANGE(0x50f20000, 0x50f21fff) AM_READ(buserror_r) // bus error here to detect we're not the grayscale 160/165/180 + AM_RANGE(0x50f24000, 0x50f27fff) AM_READ(buserror_r) // bus error here to make sure we aren't mistaken for another decoder + + // on-board color video on 165c/180c + AM_RANGE(0xfc000000, 0xfc07ffff) AM_RAM AM_SHARE("vram") AM_MIRROR(0x00380000) // 512k of VRAM + AM_RANGE(0xfc400000, 0xfcefffff) AM_READWRITE(macwd_r, macwd_w) +// fc4003c8 = DAC control, fc4003c9 = DAC data +// fc4003da bit 3 is VBL + AM_RANGE(0xfcff8000, 0xfcffffff) AM_ROM AM_REGION("vrom", 0x0000) +ADDRESS_MAP_END +#if 0 +static ADDRESS_MAP_START(macpd210_map, AS_PROGRAM, 32, mac_state ) + AM_RANGE(0x40000000, 0x400fffff) AM_ROM AM_REGION("bootrom", 0) AM_MIRROR(0x0ff00000) + + AM_RANGE(0x50f00000, 0x50f01fff) AM_READWRITE16(mac_via_r, mac_via_w, 0xffffffff) + AM_RANGE(0x50f02000, 0x50f03fff) AM_READWRITE16(mac_via2_r, mac_via2_w, 0xffffffff) + AM_RANGE(0x50f04000, 0x50f05fff) AM_READWRITE16(mac_scc_r, mac_scc_2_w, 0xffffffff) + AM_RANGE(0x50f06000, 0x50f07fff) AM_READWRITE(macii_scsi_drq_r, macii_scsi_drq_w) + AM_RANGE(0x50f10000, 0x50f11fff) AM_READWRITE16(macplus_scsi_r, macii_scsi_w, 0xffffffff) + AM_RANGE(0x50f12060, 0x50f12063) AM_READ(macii_scsi_drq_r) + AM_RANGE(0x50f14000, 0x50f15fff) AM_DEVREADWRITE8("asc", asc_device, read, write, 0xffffffff) + AM_RANGE(0x50f16000, 0x50f17fff) AM_READWRITE16(mac_iwm_r, mac_iwm_w, 0xffffffff) + AM_RANGE(0x50f20000, 0x50f21fff) AM_READWRITE8(mac_gsc_r, mac_gsc_w, 0xffffffff) + AM_RANGE(0x50f24000, 0x50f27fff) AM_READ(buserror_r) // bus error here to make sure we aren't mistaken for another decoder + + AM_RANGE(0x5ffffffc, 0x5fffffff) AM_READ(mac_read_id) + + AM_RANGE(0x60000000, 0x6001ffff) AM_RAM AM_SHARE("vram") AM_MIRROR(0x0ffe0000) +ADDRESS_MAP_END +#endif +static ADDRESS_MAP_START(quadra700_map, AS_PROGRAM, 32, mac_state ) + AM_RANGE(0x40000000, 0x400fffff) AM_ROM AM_REGION("bootrom", 0) AM_MIRROR(0x0ff00000) + + AM_RANGE(0x50000000, 0x50001fff) AM_READWRITE16(mac_via_r, mac_via_w, 0xffffffff) AM_MIRROR(0x00fc0000) + AM_RANGE(0x50002000, 0x50003fff) AM_READWRITE16(mac_via2_r, mac_via2_w, 0xffffffff) AM_MIRROR(0x00fc0000) +// 50008000 = Ethernet MAC ID PROM +// 5000a000 = Sonic (DP83932) ethernet +// 5000f000 = SCSI cf96, 5000f402 = SCSI #2 cf96 + AM_RANGE(0x5000f000, 0x5000f3ff) AM_READWRITE8(mac_5396_r, mac_5396_w, 0xffffffff) AM_MIRROR(0x00fc0000) + AM_RANGE(0x5000c000, 0x5000dfff) AM_READWRITE16(mac_scc_r, mac_scc_2_w, 0xffffffff) AM_MIRROR(0x00fc0000) + AM_RANGE(0x50014000, 0x50015fff) AM_DEVREADWRITE8("asc", asc_device, read, write, 0xffffffff) AM_MIRROR(0x00fc0000) + AM_RANGE(0x5001e000, 0x5001ffff) AM_READWRITE16(mac_iwm_r, mac_iwm_w, 0xffffffff) AM_MIRROR(0x00fc0000) + + AM_RANGE(0x50040000, 0x50041fff) AM_READWRITE16(mac_via_r, mac_via_w, 0xffffffff) AM_MIRROR(0x00fc0000) + // f9800000 = VDAC / DAFB + AM_RANGE(0xf9000000, 0xf91fffff) AM_RAM AM_SHARE("vram") + AM_RANGE(0xf9800000, 0xf98001ff) AM_READWRITE(dafb_r, dafb_w) + AM_RANGE(0xf9800200, 0xf980023f) AM_READWRITE(dafb_dac_r, dafb_dac_w) +ADDRESS_MAP_END + +static ADDRESS_MAP_START(pwrmac_map, AS_PROGRAM, 64, mac_state ) + AM_RANGE(0x00000000, 0x007fffff) AM_RAM // 8 MB standard + + AM_RANGE(0x40000000, 0x403fffff) AM_ROM AM_REGION("bootrom", 0) AM_MIRROR(0x0fc00000) + + AM_RANGE(0x50000000, 0x50001fff) AM_READWRITE16(mac_via_r, mac_via_w, U64(0xffffffffffffffff)) AM_MIRROR(0x00f00000) + AM_RANGE(0x50004000, 0x50005fff) AM_READWRITE16(mac_scc_r, mac_scc_2_w, U64(0xffffffffffffffff)) AM_MIRROR(0x00f00000) + // 50008000 = ethernet ID PROM + // 5000a000 = MACE ethernet controller + AM_RANGE(0x50010000, 0x50011fff) AM_READWRITE16(macplus_scsi_r, macii_scsi_w, U64(0xffffffffffffffff)) AM_MIRROR(0x00f00000) + // 50014000 = sound registers (AWACS) + AM_RANGE(0x50014000, 0x50015fff) AM_DEVREADWRITE8("awacs", awacs_device, read, write, U64(0xffffffffffffffff)) AM_MIRROR(0x01f00000) + AM_RANGE(0x50016000, 0x50017fff) AM_READWRITE16(mac_iwm_r, mac_iwm_w, U64(0xffffffffffffffff)) AM_MIRROR(0x00f00000) + AM_RANGE(0x50024000, 0x50025fff) AM_WRITE32( ariel_ramdac_w, U64(0xffffffffffffffff) ) AM_MIRROR(0x00f00000) + AM_RANGE(0x50026000, 0x50027fff) AM_READWRITE16(mac_via2_r, mac_via2_w, U64(0xffffffffffffffff)) AM_MIRROR(0x00f00000) + AM_RANGE(0x50028000, 0x50028007) AM_READWRITE8(mac_sonora_vctl_r, mac_sonora_vctl_w, U64(0xffffffffffffffff)) AM_MIRROR(0x00f00000) + // 5002a000 = interrupt controller + // 5002c000 = diagnostic registers + AM_RANGE(0x5002c000, 0x5002dfff) AM_READ8(pmac_diag_r, U64(0xffffffffffffffff)) AM_MIRROR(0x00f00000) + AM_RANGE(0x50031000, 0x50032fff) AM_READWRITE8(amic_dma_r, amic_dma_w, U64(0xffffffffffffffff)) AM_MIRROR(0x00f00000) + AM_RANGE(0x50040000, 0x5004000f) AM_READWRITE8(hmc_r, hmc_w, U64(0xffffffffffffffff)) AM_MIRROR(0x00f00000) + AM_RANGE(0x5ffffff8, 0x5fffffff) AM_READ32(mac_read_id, U64(0xffffffffffffffff)) + + AM_RANGE(0xffc00000, 0xffffffff) AM_ROM AM_REGION("bootrom", 0) +ADDRESS_MAP_END + +/*************************************************************************** + DEVICE CONFIG +***************************************************************************/ + +static const applefdc_interface mac_iwm_interface = +{ + sony_set_lines, + mac_fdc_set_enable_lines, + + sony_read_data, + sony_write_data, + sony_read_status +}; + +static const SCSIConfigTable dev_table = +{ + 2, /* 2 SCSI devices */ + { + { SCSI_ID_6, "harddisk1" }, /* SCSI ID 6, using harddisk1 */ + { SCSI_ID_5, "harddisk2" } /* SCSI ID 5, using harddisk2 */ + } +}; + +static const struct NCR5380interface macplus_5380intf = +{ + &dev_table, // SCSI device table + mac_scsi_irq // IRQ (unconnected on the Mac Plus) +}; + +static const struct NCR539Xinterface mac_539x_intf = +{ + &dev_table, // SCSI device table + DEVCB_DRIVER_LINE_MEMBER(mac_state, irq_539x_1_w), + DEVCB_DRIVER_LINE_MEMBER(mac_state, drq_539x_1_w) +}; + +static const struct nbbus_interface nubus_intf = +{ + // interrupt lines + DEVCB_DRIVER_LINE_MEMBER(mac_state, nubus_irq_9_w), + DEVCB_DRIVER_LINE_MEMBER(mac_state, nubus_irq_a_w), + DEVCB_DRIVER_LINE_MEMBER(mac_state, nubus_irq_b_w), + DEVCB_DRIVER_LINE_MEMBER(mac_state, nubus_irq_c_w), + DEVCB_DRIVER_LINE_MEMBER(mac_state, nubus_irq_d_w), + DEVCB_DRIVER_LINE_MEMBER(mac_state, nubus_irq_e_w) +}; + +static SLOT_INTERFACE_START(mac_nubus_cards) + SLOT_INTERFACE("48gc", NUBUS_48GC) /* Apple 4*8 Graphics Card */ + SLOT_INTERFACE("824gc", NUBUS_824GC) /* Apple 8*24 Graphics Card */ + SLOT_INTERFACE("cb264", NUBUS_CB264) /* RasterOps ColorBoard 264 */ + SLOT_INTERFACE("vikbw", NUBUS_VIKBW) /* Moniterm Viking board */ + SLOT_INTERFACE("specpdq", NUBUS_SPECPDQ) /* SuperMac Spectrum PDQ */ + SLOT_INTERFACE("m2hires", NUBUS_M2HIRES) /* Apple Macintosh II Hi-Resolution Card */ + SLOT_INTERFACE("spec8s3", NUBUS_SPEC8S3) /* SuperMac Spectrum/8 Series III */ +// SLOT_INTERFACE("thundergx", NUBUS_THUNDERGX) /* Radius Thunder GX (not yet) */ + SLOT_INTERFACE("radiustpd", NUBUS_RADIUSTPD) /* Radius Two Page Display */ + SLOT_INTERFACE("asmc3nb", NUBUS_ASNTMC3NB) /* Asante MC3NB Ethernet card */ + SLOT_INTERFACE("portrait", NUBUS_WSPORTRAIT) /* Apple Macintosh II Portrait video card */ + SLOT_INTERFACE("enetnb", NUBUS_APPLEENET) /* Apple NuBus Ethernet */ +SLOT_INTERFACE_END + +/*************************************************************************** + MACHINE DRIVERS +***************************************************************************/ + +static const floppy_interface mac_floppy_interface = +{ + DEVCB_NULL, + DEVCB_NULL, + DEVCB_NULL, + DEVCB_NULL, + DEVCB_NULL, + FLOPPY_STANDARD_3_5_DSHD, + LEGACY_FLOPPY_OPTIONS_NAME(apple35_mac), + "floppy_3_5", + NULL +}; + +static const cuda_interface mac_cuda_interface = +{ + DEVCB_DRIVER_LINE_MEMBER(mac_state, cuda_reset_w) +}; + +static MACHINE_CONFIG_START( mac512ke, mac_state ) + + /* basic machine hardware */ + MCFG_CPU_ADD("maincpu", M68000, C7M) /* 7.8336 MHz */ + MCFG_CPU_PROGRAM_MAP(mac512ke_map) + MCFG_SCREEN_ADD(MAC_SCREEN_NAME, RASTER) + MCFG_SCREEN_REFRESH_RATE(60.15) + MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(1260)) + MCFG_QUANTUM_TIME(attotime::from_hz(60)) + + /* video hardware */ + MCFG_VIDEO_ATTRIBUTES(VIDEO_UPDATE_BEFORE_VBLANK) + 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_STATIC(mac) + + MCFG_PALETTE_LENGTH(2) + MCFG_PALETTE_INIT(mac) + + MCFG_VIDEO_START(mac) + + /* sound hardware */ + MCFG_SPEAKER_STANDARD_MONO("mono") + MCFG_SOUND_ADD("custom", MAC_SOUND, 0) + MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.00) + + /* nvram */ + MCFG_NVRAM_HANDLER(mac) + + /* devices */ + MCFG_IWM_ADD("fdc", mac_iwm_interface) + MCFG_LEGACY_FLOPPY_SONY_2_DRIVES_ADD(mac_floppy_interface) + + MCFG_SCC8530_ADD("scc", C7M, line_cb_t(FUNC(mac_state::set_scc_interrupt), static_cast<mac_state *>(owner))) + MCFG_VIA6522_ADD("via6522_0", 1000000, mac_via6522_intf) + + MCFG_MACKBD_ADD() + + /* internal ram */ + MCFG_RAM_ADD(RAM_TAG) + MCFG_RAM_DEFAULT_SIZE("512K") +MACHINE_CONFIG_END + +static MACHINE_CONFIG_DERIVED( mac128k, mac512ke ) + + /* internal ram */ + MCFG_RAM_MODIFY(RAM_TAG) + MCFG_RAM_DEFAULT_SIZE("128K") +MACHINE_CONFIG_END + + +static MACHINE_CONFIG_DERIVED( macplus, mac512ke ) + MCFG_CPU_MODIFY( "maincpu" ) + MCFG_CPU_PROGRAM_MAP(macplus_map) + + MCFG_NCR5380_ADD("ncr5380", C7M, macplus_5380intf) + + MCFG_DEVICE_ADD("harddisk1", SCSIHD, 0) + MCFG_DEVICE_ADD("harddisk2", SCSIHD, 0) + + 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") + + // software list + MCFG_SOFTWARE_LIST_ADD("flop35_list","mac_flop") + MCFG_SOFTWARE_LIST_ADD("hdd_list", "mac_hdd") +MACHINE_CONFIG_END + +static MACHINE_CONFIG_DERIVED( macse, macplus ) + + MCFG_DEVICE_REMOVE("via6522_0") + MCFG_VIA6522_ADD("via6522_0", 1000000, mac_via6522_adb_intf) + + /* internal ram */ + MCFG_RAM_MODIFY(RAM_TAG) + MCFG_RAM_DEFAULT_SIZE("4M") + MCFG_RAM_EXTRA_OPTIONS("2M,2560K,4M") +MACHINE_CONFIG_END + +static MACHINE_CONFIG_START( macprtb, mac_state ) + + /* basic machine hardware */ + MCFG_CPU_ADD("maincpu", M68000, C15M) + MCFG_CPU_PROGRAM_MAP(macprtb_map) + MCFG_SCREEN_ADD(MAC_SCREEN_NAME, RASTER) + MCFG_SCREEN_REFRESH_RATE(60.15) + MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(1260)) + MCFG_QUANTUM_TIME(attotime::from_hz(60)) + + /* video hardware */ + MCFG_VIDEO_ATTRIBUTES(VIDEO_UPDATE_BEFORE_VBLANK) + MCFG_SCREEN_SIZE(700, 480) + MCFG_SCREEN_VISIBLE_AREA(0, 639, 0, 399) + MCFG_SCREEN_UPDATE_STATIC(macprtb) + + MCFG_PALETTE_LENGTH(2) + MCFG_PALETTE_INIT(mac) + + MCFG_VIDEO_START(macprtb) + + /* sound hardware */ + MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") + MCFG_ASC_ADD("asc", C15M, ASC_TYPE_ASC, mac_asc_irq) + MCFG_SOUND_ROUTE(0, "lspeaker", 1.0) + MCFG_SOUND_ROUTE(1, "rspeaker", 1.0) + + /* nvram */ + MCFG_NVRAM_HANDLER(mac) + + /* devices */ + MCFG_NCR5380_ADD("ncr5380", C7M, macplus_5380intf) + + MCFG_IWM_ADD("fdc", mac_iwm_interface) + MCFG_LEGACY_FLOPPY_SONY_2_DRIVES_ADD(mac_floppy_interface) + + MCFG_SCC8530_ADD("scc", C7M, line_cb_t(FUNC(mac_state::set_scc_interrupt), static_cast<mac_state *>(owner))) + MCFG_VIA6522_ADD("via6522_0", 783360, mac_via6522_intf) + + MCFG_DEVICE_ADD("harddisk1", SCSIHD, 0) + MCFG_DEVICE_ADD("harddisk2", SCSIHD, 0) + + /* internal ram */ + MCFG_RAM_ADD(RAM_TAG) + MCFG_RAM_DEFAULT_SIZE("1M") + MCFG_RAM_EXTRA_OPTIONS("1M,3M,5M,7M,9M") + + // software list + MCFG_SOFTWARE_LIST_ADD("hdd_list", "mac_hdd") +MACHINE_CONFIG_END + +static MACHINE_CONFIG_START( macii, mac_state ) + + /* basic machine hardware */ + MCFG_CPU_ADD("maincpu", M68020PMMU, C15M) + MCFG_CPU_PROGRAM_MAP(macii_map) + + MCFG_PALETTE_LENGTH(256) + + /* sound hardware */ + MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") + MCFG_ASC_ADD("asc", C15M, ASC_TYPE_ASC, mac_asc_irq) + MCFG_SOUND_ROUTE(0, "lspeaker", 1.0) + MCFG_SOUND_ROUTE(1, "rspeaker", 1.0) + + /* nvram */ + MCFG_NVRAM_HANDLER(mac) + + /* devices */ + MCFG_NUBUS_BUS_ADD("nubus", "maincpu", nubus_intf) + MCFG_NUBUS_SLOT_ADD("nubus","nb9", mac_nubus_cards, "48gc", NULL) + MCFG_NUBUS_SLOT_ADD("nubus","nba", mac_nubus_cards, NULL, NULL) + MCFG_NUBUS_SLOT_ADD("nubus","nbb", mac_nubus_cards, NULL, NULL) + MCFG_NUBUS_SLOT_ADD("nubus","nbc", mac_nubus_cards, NULL, NULL) + MCFG_NUBUS_SLOT_ADD("nubus","nbd", mac_nubus_cards, NULL, NULL) + MCFG_NUBUS_SLOT_ADD("nubus","nbe", mac_nubus_cards, NULL, NULL) + + MCFG_NCR5380_ADD("ncr5380", C7M, macplus_5380intf) + + MCFG_IWM_ADD("fdc", mac_iwm_interface) + MCFG_LEGACY_FLOPPY_SONY_2_DRIVES_ADD(mac_floppy_interface) + + MCFG_SCC8530_ADD("scc", C7M, line_cb_t(FUNC(mac_state::set_scc_interrupt), static_cast<mac_state *>(owner))) + + MCFG_VIA6522_ADD("via6522_0", C7M/10, mac_via6522_adb_intf) + MCFG_VIA6522_ADD("via6522_1", C7M/10, mac_via6522_2_intf) + + MCFG_DEVICE_ADD("harddisk1", SCSIHD, 0) + MCFG_DEVICE_ADD("harddisk2", SCSIHD, 0) + + /* 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 + +static MACHINE_CONFIG_DERIVED( maciihmu, macii ) + MCFG_CPU_REPLACE("maincpu", M68020HMMU, C15M) + MCFG_CPU_PROGRAM_MAP(macii_map) +MACHINE_CONFIG_END + +static MACHINE_CONFIG_START( maciifx, mac_state ) + + /* basic machine hardware */ + MCFG_CPU_ADD("maincpu", M68030, 40000000) + MCFG_CPU_PROGRAM_MAP(maciifx_map) + + /* sound hardware */ + MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") + MCFG_ASC_ADD("asc", C15M, ASC_TYPE_ASC, mac_asc_irq) + MCFG_SOUND_ROUTE(0, "lspeaker", 1.0) + MCFG_SOUND_ROUTE(1, "rspeaker", 1.0) + + /* nvram */ + MCFG_NVRAM_HANDLER(mac) + + /* devices */ + MCFG_NUBUS_BUS_ADD("nubus", "maincpu", nubus_intf) + MCFG_NUBUS_SLOT_ADD("nubus","nb9", mac_nubus_cards, "48gc", NULL) + MCFG_NUBUS_SLOT_ADD("nubus","nba", mac_nubus_cards, NULL, NULL) + MCFG_NUBUS_SLOT_ADD("nubus","nbb", mac_nubus_cards, NULL, NULL) + MCFG_NUBUS_SLOT_ADD("nubus","nbc", mac_nubus_cards, NULL, NULL) + MCFG_NUBUS_SLOT_ADD("nubus","nbd", mac_nubus_cards, NULL, NULL) + MCFG_NUBUS_SLOT_ADD("nubus","nbe", mac_nubus_cards, NULL, NULL) + + MCFG_NCR5380_ADD("ncr5380", C7M, macplus_5380intf) + + MCFG_IWM_ADD("fdc", mac_iwm_interface) + MCFG_LEGACY_FLOPPY_SONY_2_DRIVES_ADD(mac_floppy_interface) + + MCFG_SCC8530_ADD("scc", C7M, line_cb_t(FUNC(mac_state::set_scc_interrupt), static_cast<mac_state *>(owner))) + + MCFG_VIA6522_ADD("via6522_0", C7M/10, mac_via6522_adb_intf) + + MCFG_DEVICE_ADD("harddisk1", SCSIHD, 0) + MCFG_DEVICE_ADD("harddisk2", SCSIHD, 0) + + /* 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 + +static MACHINE_CONFIG_DERIVED( maclc, macii ) + + MCFG_CPU_REPLACE("maincpu", M68020HMMU, C15M) + MCFG_CPU_PROGRAM_MAP(maclc_map) + MCFG_CPU_VBLANK_INT(MAC_SCREEN_NAME, mac_rbv_vbl) + + MCFG_PALETTE_LENGTH(256) + + MCFG_VIDEO_START(macv8) + MCFG_VIDEO_RESET(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_STATIC(macrbvvram) + + MCFG_RAM_MODIFY(RAM_TAG) + MCFG_RAM_DEFAULT_SIZE("2M") + MCFG_RAM_EXTRA_OPTIONS("4M,6M,8M,10M") + + 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_NUBUS_BUS_REMOVE("nubus") + + MCFG_ASC_REPLACE("asc", C15M, ASC_TYPE_V8, mac_asc_irq) + MCFG_SOUND_ROUTE(0, "lspeaker", 1.0) + MCFG_SOUND_ROUTE(1, "rspeaker", 1.0) + + MCFG_EGRET_ADD(EGRET_341S0850) + MCFG_QUANTUM_PERFECT_CPU("maincpu") +MACHINE_CONFIG_END + +static MACHINE_CONFIG_DERIVED( maclc2, maclc ) + + MCFG_CPU_REPLACE("maincpu", M68030, C15M) + MCFG_CPU_PROGRAM_MAP(maclc_map) + MCFG_CPU_VBLANK_INT(MAC_SCREEN_NAME, mac_rbv_vbl) + + MCFG_RAM_MODIFY(RAM_TAG) + MCFG_RAM_DEFAULT_SIZE("4M") + MCFG_RAM_EXTRA_OPTIONS("6M,8M,10M") +MACHINE_CONFIG_END + +static MACHINE_CONFIG_DERIVED( maccclas, maclc2 ) + + MCFG_EGRET_REMOVE() + MCFG_CUDA_ADD(CUDA_341S0788, mac_cuda_interface) // should be 341s0417, but only the color classic used that rev and those are "collectable" ($$$$) +MACHINE_CONFIG_END + +static MACHINE_CONFIG_DERIVED( maclc3, maclc ) + + MCFG_CPU_REPLACE("maincpu", M68030, 25000000) + MCFG_CPU_PROGRAM_MAP(maclc3_map) + MCFG_CPU_VBLANK_INT(MAC_SCREEN_NAME, mac_rbv_vbl) + + MCFG_VIDEO_START(macsonora) + MCFG_VIDEO_RESET(macsonora) + + MCFG_SCREEN_MODIFY(MAC_SCREEN_NAME) + MCFG_SCREEN_UPDATE_STATIC(macrbvvram) + + MCFG_RAM_MODIFY(RAM_TAG) + MCFG_RAM_DEFAULT_SIZE("4M") + MCFG_RAM_EXTRA_OPTIONS("8M,12M,16M,20M,24M,28M,32M,36M") + + MCFG_ASC_REPLACE("asc", C15M, ASC_TYPE_SONORA, mac_asc_irq) + MCFG_SOUND_ROUTE(0, "lspeaker", 1.0) + MCFG_SOUND_ROUTE(1, "rspeaker", 1.0) + + MCFG_EGRET_REPLACE(EGRET_341S0851) +MACHINE_CONFIG_END + +static MACHINE_CONFIG_DERIVED( maclc520, maclc3 ) + + MCFG_EGRET_REMOVE() + MCFG_CUDA_ADD(CUDA_341S0060, mac_cuda_interface) +MACHINE_CONFIG_END + +static MACHINE_CONFIG_DERIVED( maciivx, maclc ) + + MCFG_CPU_REPLACE("maincpu", M68030, C32M) + MCFG_CPU_PROGRAM_MAP(maclc3_map) + MCFG_CPU_VBLANK_INT(MAC_SCREEN_NAME, mac_rbv_vbl) + + MCFG_VIDEO_START(macv8) + MCFG_VIDEO_RESET(macrbv) + + MCFG_SCREEN_MODIFY(MAC_SCREEN_NAME) + MCFG_SCREEN_UPDATE_STATIC(macrbvvram) + + MCFG_NUBUS_BUS_ADD("nubus", "maincpu", nubus_intf) + MCFG_NUBUS_SLOT_ADD("nubus","nbc", mac_nubus_cards, NULL, NULL) + MCFG_NUBUS_SLOT_ADD("nubus","nbd", mac_nubus_cards, NULL, NULL) + MCFG_NUBUS_SLOT_ADD("nubus","nbe", mac_nubus_cards, NULL, NULL) + + 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) +MACHINE_CONFIG_END + +static MACHINE_CONFIG_DERIVED( maciivi, maclc ) + + MCFG_CPU_REPLACE("maincpu", M68030, C15M) + MCFG_CPU_PROGRAM_MAP(maclc3_map) + MCFG_CPU_VBLANK_INT(MAC_SCREEN_NAME, mac_rbv_vbl) + + MCFG_VIDEO_START(macv8) + MCFG_VIDEO_RESET(macrbv) + + MCFG_SCREEN_MODIFY(MAC_SCREEN_NAME) + MCFG_SCREEN_UPDATE_STATIC(macrbvvram) + + MCFG_NUBUS_BUS_ADD("nubus", "maincpu", nubus_intf) + MCFG_NUBUS_SLOT_ADD("nubus","nbc", mac_nubus_cards, NULL, NULL) + MCFG_NUBUS_SLOT_ADD("nubus","nbd", mac_nubus_cards, NULL, NULL) + MCFG_NUBUS_SLOT_ADD("nubus","nbe", mac_nubus_cards, NULL, NULL) + + 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) +MACHINE_CONFIG_END + +static MACHINE_CONFIG_DERIVED( maciix, macii ) + + MCFG_CPU_REPLACE("maincpu", M68030, C15M) + MCFG_CPU_PROGRAM_MAP(macii_map) + + MCFG_RAM_MODIFY(RAM_TAG) + MCFG_RAM_DEFAULT_SIZE("2M") + MCFG_RAM_EXTRA_OPTIONS("8M,32M,64M,96M,128M") +MACHINE_CONFIG_END + +static MACHINE_CONFIG_DERIVED( maciicx, maciix ) // IIcx is a IIx with only slots 9/a/b + MCFG_NUBUS_SLOT_REMOVE("nbc") + MCFG_NUBUS_SLOT_REMOVE("nbd") + MCFG_NUBUS_SLOT_REMOVE("nbe") +MACHINE_CONFIG_END + +static MACHINE_CONFIG_START( macse30, mac_state ) + + MCFG_CPU_ADD("maincpu", M68030, C15M) + MCFG_CPU_PROGRAM_MAP(macse30_map) + + /* video hardware */ + MCFG_VIDEO_ATTRIBUTES(VIDEO_UPDATE_BEFORE_VBLANK) + MCFG_SCREEN_ADD(MAC_SCREEN_NAME, RASTER) + 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_STATIC(macse30) + + MCFG_PALETTE_LENGTH(2) + MCFG_PALETTE_INIT(mac) + + MCFG_VIDEO_START(mac) + + /* sound hardware */ + MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") + MCFG_ASC_ADD("asc", C15M, ASC_TYPE_ASC, mac_asc_irq) + MCFG_SOUND_ROUTE(0, "lspeaker", 1.0) + MCFG_SOUND_ROUTE(1, "rspeaker", 1.0) + + /* nvram */ + MCFG_NVRAM_HANDLER(mac) + + /* devices */ + MCFG_NCR5380_ADD("ncr5380", C7M, macplus_5380intf) + + MCFG_SWIM_ADD("fdc", mac_iwm_interface) + MCFG_LEGACY_FLOPPY_SONY_2_DRIVES_ADD(mac_floppy_interface) + + MCFG_SCC8530_ADD("scc", C7M, line_cb_t(FUNC(mac_state::set_scc_interrupt), static_cast<mac_state *>(owner))) + + MCFG_VIA6522_ADD("via6522_0", 783360, mac_via6522_adb_intf) + MCFG_VIA6522_ADD("via6522_1", 783360, mac_via6522_2_intf) + + MCFG_DEVICE_ADD("harddisk1", SCSIHD, 0) + MCFG_DEVICE_ADD("harddisk2", SCSIHD, 0) + + /* 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 + +static MACHINE_CONFIG_START( macpb140, mac_state ) + + MCFG_CPU_ADD("maincpu", M68030, C15M) + MCFG_CPU_PROGRAM_MAP(macpb140_map) + + /* video hardware */ + MCFG_VIDEO_ATTRIBUTES(VIDEO_UPDATE_BEFORE_VBLANK) + MCFG_SCREEN_ADD(MAC_SCREEN_NAME, RASTER) + 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_STATIC(macpb140) + + MCFG_PALETTE_LENGTH(2) + MCFG_PALETTE_INIT(mac) + + MCFG_VIDEO_START(macprtb) + + /* sound hardware */ + MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") + MCFG_ASC_ADD("asc", C15M, ASC_TYPE_ASC, mac_asc_irq) + MCFG_SOUND_ROUTE(0, "lspeaker", 1.0) + MCFG_SOUND_ROUTE(1, "rspeaker", 1.0) + + /* nvram */ + MCFG_NVRAM_HANDLER(mac) + + /* devices */ + MCFG_NCR5380_ADD("ncr5380", C7M, macplus_5380intf) + + MCFG_SWIM_ADD("fdc", mac_iwm_interface) + MCFG_LEGACY_FLOPPY_SONY_2_DRIVES_ADD(mac_floppy_interface) + + MCFG_SCC8530_ADD("scc", C7M, line_cb_t(FUNC(mac_state::set_scc_interrupt), static_cast<mac_state *>(owner))) + + MCFG_VIA6522_ADD("via6522_0", 783360, mac_via6522_adb_intf) + MCFG_VIA6522_ADD("via6522_1", 783360, mac_via6522_2_intf) + + MCFG_DEVICE_ADD("harddisk1", SCSIHD, 0) + MCFG_DEVICE_ADD("harddisk2", SCSIHD, 0) + + /* 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 + +// PowerBook 145 = 140 @ 25 MHz (still 2MB RAM - the 145B upped that to 4MB) +static MACHINE_CONFIG_DERIVED( macpb145, macpb140 ) + MCFG_CPU_REPLACE("maincpu", M68030, 25000000) + MCFG_CPU_PROGRAM_MAP(macpb140_map) + + MCFG_RAM_MODIFY(RAM_TAG) + MCFG_RAM_DEFAULT_SIZE("4M") + MCFG_RAM_EXTRA_OPTIONS("6M,8M") +MACHINE_CONFIG_END + +// PowerBook 170 = 140 @ 25 MHz with an active-matrix LCD (140/145/145B were passive) +static MACHINE_CONFIG_DERIVED( macpb170, macpb140 ) + MCFG_CPU_REPLACE("maincpu", M68030, 25000000) + MCFG_CPU_PROGRAM_MAP(macpb140_map) + + MCFG_RAM_MODIFY(RAM_TAG) + MCFG_RAM_DEFAULT_SIZE("4M") + MCFG_RAM_EXTRA_OPTIONS("6M,8M") +MACHINE_CONFIG_END + +static MACHINE_CONFIG_START( macpb160, mac_state ) + + MCFG_CPU_ADD("maincpu", M68030, 25000000) + MCFG_CPU_PROGRAM_MAP(macpb160_map) + + /* video hardware */ + MCFG_VIDEO_ATTRIBUTES(VIDEO_UPDATE_BEFORE_VBLANK) + MCFG_SCREEN_ADD(MAC_SCREEN_NAME, RASTER) + 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_STATIC(macpb160) + + MCFG_PALETTE_LENGTH(16) + MCFG_PALETTE_INIT(macgsc) + + MCFG_VIDEO_START(macprtb) + + /* sound hardware */ + MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") + MCFG_ASC_ADD("asc", C15M, ASC_TYPE_ASC, mac_asc_irq) + MCFG_SOUND_ROUTE(0, "lspeaker", 1.0) + MCFG_SOUND_ROUTE(1, "rspeaker", 1.0) + + /* nvram */ + MCFG_NVRAM_HANDLER(mac) + + /* devices */ + MCFG_NCR5380_ADD("ncr5380", C7M, macplus_5380intf) + + MCFG_SWIM_ADD("fdc", mac_iwm_interface) + MCFG_LEGACY_FLOPPY_SONY_2_DRIVES_ADD(mac_floppy_interface) + + MCFG_SCC8530_ADD("scc", C7M, line_cb_t(FUNC(mac_state::set_scc_interrupt), static_cast<mac_state *>(owner))) + + MCFG_VIA6522_ADD("via6522_0", 783360, mac_via6522_adb_intf) + MCFG_VIA6522_ADD("via6522_1", 783360, mac_via6522_2_intf) + + MCFG_DEVICE_ADD("harddisk1", SCSIHD, 0) + MCFG_DEVICE_ADD("harddisk2", SCSIHD, 0) + + /* 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 + +static MACHINE_CONFIG_DERIVED( macpb180, macpb160 ) + MCFG_CPU_REPLACE("maincpu", M68030, 33000000) + MCFG_CPU_PROGRAM_MAP(macpb160_map) + + MCFG_RAM_MODIFY(RAM_TAG) + MCFG_RAM_DEFAULT_SIZE("4M") + MCFG_RAM_EXTRA_OPTIONS("8M,12M,16M") +MACHINE_CONFIG_END + +static MACHINE_CONFIG_DERIVED( macpb180c, macpb160 ) + MCFG_CPU_REPLACE("maincpu", M68030, 33000000) + MCFG_CPU_PROGRAM_MAP(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_STATIC(macpbwd) + + MCFG_RAM_MODIFY(RAM_TAG) + MCFG_RAM_DEFAULT_SIZE("4M") + MCFG_RAM_EXTRA_OPTIONS("8M,12M,16M") +MACHINE_CONFIG_END +#if 0 +static MACHINE_CONFIG_DERIVED( macpd210, macpb160 ) + MCFG_CPU_REPLACE("maincpu", M68030, 25000000) + MCFG_CPU_PROGRAM_MAP(macpd210_map) + + MCFG_RAM_MODIFY(RAM_TAG) + MCFG_RAM_DEFAULT_SIZE("4M") + MCFG_RAM_EXTRA_OPTIONS("8M,12M,16M,20M,24M") +MACHINE_CONFIG_END +#endif +static MACHINE_CONFIG_DERIVED( macclas2, maclc ) + + MCFG_CPU_REPLACE("maincpu", M68030, C15M) + MCFG_CPU_PROGRAM_MAP(maclc_map) + + MCFG_VIDEO_START(macv8) + MCFG_VIDEO_RESET(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_STATIC(macrbv) + + MCFG_ASC_REPLACE("asc", C15M, ASC_TYPE_EAGLE, mac_asc_irq) + MCFG_SOUND_ROUTE(0, "lspeaker", 1.0) + MCFG_SOUND_ROUTE(1, "rspeaker", 1.0) + + MCFG_RAM_MODIFY(RAM_TAG) + MCFG_RAM_DEFAULT_SIZE("10M") + MCFG_RAM_EXTRA_OPTIONS("2M,4M,6M,8M,10M") + + MCFG_EGRET_REPLACE(EGRET_341S0851) +MACHINE_CONFIG_END + +static MACHINE_CONFIG_DERIVED( maciici, macii ) + + MCFG_CPU_REPLACE("maincpu", M68030, 25000000) + MCFG_CPU_PROGRAM_MAP(maciici_map) + MCFG_CPU_VBLANK_INT(MAC_SCREEN_NAME, mac_rbv_vbl) + + MCFG_PALETTE_LENGTH(256) + + // IIci only has slots c/d/e + MCFG_NUBUS_SLOT_REMOVE("nb9") + MCFG_NUBUS_SLOT_REMOVE("nba") + MCFG_NUBUS_SLOT_REMOVE("nbb") + + MCFG_VIDEO_START(macrbv) + MCFG_VIDEO_RESET(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_STATIC(macrbv) + MCFG_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 + +static MACHINE_CONFIG_DERIVED( maciisi, macii ) + + MCFG_CPU_REPLACE("maincpu", M68030, 20000000) + MCFG_CPU_PROGRAM_MAP(maciici_map) + MCFG_CPU_VBLANK_INT(MAC_SCREEN_NAME, mac_rbv_vbl) + + MCFG_PALETTE_LENGTH(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_NUBUS_BUS_REMOVE("nubus") + + MCFG_VIDEO_START(macrbv) + MCFG_VIDEO_RESET(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_STATIC(macrbv) + + /* internal ram */ + MCFG_RAM_MODIFY(RAM_TAG) + MCFG_RAM_DEFAULT_SIZE("2M") + MCFG_RAM_EXTRA_OPTIONS("4M,8M,16M,32M,48M,64M,128M") + + MCFG_EGRET_ADD(EGRET_344S0100) + MCFG_QUANTUM_PERFECT_CPU("maincpu") +MACHINE_CONFIG_END + +static MACHINE_CONFIG_START( pwrmac, mac_state ) + + /* basic machine hardware */ + MCFG_CPU_ADD("maincpu", PPC601, 60000000) + MCFG_CPU_PROGRAM_MAP(pwrmac_map) + + /* video hardware */ + MCFG_SCREEN_ADD(MAC_SCREEN_NAME, RASTER) + // dot clock, htotal, hstart, hend, vtotal, vstart, vend + MCFG_SCREEN_RAW_PARAMS(25175000, 800, 0, 640, 525, 0, 480) + MCFG_VIDEO_ATTRIBUTES(VIDEO_UPDATE_BEFORE_VBLANK) + MCFG_SCREEN_SIZE(1024, 768) + MCFG_SCREEN_VISIBLE_AREA(0, 640-1, 0, 480-1) + MCFG_SCREEN_UPDATE_STATIC(macrbv) + + MCFG_PALETTE_LENGTH(256) + + MCFG_VIDEO_START(macsonora) + MCFG_VIDEO_RESET(macrbv) + + /* sound hardware */ + MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") + MCFG_AWACS_ADD("awacs", 44100) + MCFG_SOUND_ROUTE(0, "lspeaker", 1.0) + MCFG_SOUND_ROUTE(1, "rspeaker", 1.0) + + /* nvram */ + MCFG_NVRAM_HANDLER(mac) + + /* devices */ + MCFG_NCR5380_ADD("ncr5380", C7M, macplus_5380intf) + + MCFG_IWM_ADD("fdc", mac_iwm_interface) + MCFG_LEGACY_FLOPPY_SONY_2_DRIVES_ADD(mac_floppy_interface) + + MCFG_SCC8530_ADD("scc", C7M, line_cb_t(FUNC(mac_state::set_scc_interrupt), static_cast<mac_state *>(owner))) + + MCFG_VIA6522_ADD("via6522_0", 783360, mac_via6522_adb_intf) + MCFG_VIA6522_ADD("via6522_1", 783360, mac_via6522_2_intf) + + MCFG_DEVICE_ADD("harddisk1", SCSIHD, 0) + MCFG_DEVICE_ADD("harddisk2", SCSIHD, 0) + + /* 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, mac_cuda_interface) +MACHINE_CONFIG_END + +static MACHINE_CONFIG_START( macqd700, mac_state ) + /* basic machine hardware */ + MCFG_CPU_ADD("maincpu", M68040, 25000000) + MCFG_CPU_PROGRAM_MAP(quadra700_map) + + 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_STATIC(macdafb) + + MCFG_VIDEO_START(macdafb) + MCFG_VIDEO_RESET(macdafb) + + MCFG_PALETTE_LENGTH(256) + + /* sound hardware */ + MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") + MCFG_ASC_ADD("asc", C15M, ASC_TYPE_EASC, mac_asc_irq) + MCFG_SOUND_ROUTE(0, "lspeaker", 1.0) + MCFG_SOUND_ROUTE(1, "rspeaker", 1.0) + + /* nvram */ + MCFG_NVRAM_HANDLER(mac) + + /* devices */ + MCFG_NUBUS_BUS_ADD("nubus", "maincpu", nubus_intf) + MCFG_NUBUS_SLOT_ADD("nubus","nbd", mac_nubus_cards, NULL, NULL) + MCFG_NUBUS_SLOT_ADD("nubus","nbe", mac_nubus_cards, NULL, NULL) + + MCFG_IWM_ADD("fdc", mac_iwm_interface) + MCFG_LEGACY_FLOPPY_SONY_2_DRIVES_ADD(mac_floppy_interface) + + MCFG_SCC8530_ADD("scc", C7M, line_cb_t(FUNC(mac_state::set_scc_interrupt), static_cast<mac_state *>(owner))) + + MCFG_VIA6522_ADD("via6522_0", C7M/10, mac_via6522_adb_intf) + MCFG_VIA6522_ADD("via6522_1", C7M/10, mac_via6522_2_intf) + + MCFG_NCR539X_ADD(MAC_539X_1_TAG, C7M, mac_539x_intf) + + MCFG_DEVICE_ADD("harddisk1", SCSIHD, 0) + MCFG_DEVICE_ADD("harddisk2", SCSIHD, 0) + + /* 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") + + // software list + MCFG_SOFTWARE_LIST_ADD("flop35_list","mac_flop") + MCFG_SOFTWARE_LIST_ADD("hdd_list", "mac_hdd") +MACHINE_CONFIG_END + +static INPUT_PORTS_START( macplus ) + PORT_START("MOUSE0") /* Mouse - button */ + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON1) PORT_NAME("Mouse Button") PORT_CODE(MOUSECODE_BUTTON1) + + PORT_START("MOUSE1") /* Mouse - X AXIS */ + PORT_BIT( 0xff, 0x00, IPT_MOUSE_X) PORT_SENSITIVITY(100) PORT_KEYDELTA(0) PORT_PLAYER(1) + + PORT_START("MOUSE2") /* Mouse - Y AXIS */ + PORT_BIT( 0xff, 0x00, IPT_MOUSE_Y) PORT_SENSITIVITY(100) PORT_KEYDELTA(0) PORT_PLAYER(1) + + /* R Nabet 000531 : pseudo-input ports with keyboard layout */ + /* we only define US layout for keyboard - international layout is different! */ + /* note : 16 bits at most per port! */ + + /* main keyboard pad */ + + PORT_START("KEY0") + PORT_BIT(0x0001, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_A) PORT_CHAR('a') PORT_CHAR('A') + PORT_BIT(0x0002, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_S) PORT_CHAR('s') PORT_CHAR('S') + PORT_BIT(0x0004, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_D) PORT_CHAR('d') PORT_CHAR('D') + PORT_BIT(0x0008, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_F) PORT_CHAR('f') PORT_CHAR('F') + PORT_BIT(0x0010, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_H) PORT_CHAR('h') PORT_CHAR('H') + PORT_BIT(0x0020, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_G) PORT_CHAR('g') PORT_CHAR('G') + PORT_BIT(0x0040, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_Z) PORT_CHAR('z') PORT_CHAR('Z') + PORT_BIT(0x0080, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_X) PORT_CHAR('x') PORT_CHAR('X') + PORT_BIT(0x0100, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_C) PORT_CHAR('c') PORT_CHAR('C') + PORT_BIT(0x0200, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_V) PORT_CHAR('v') PORT_CHAR('V') + PORT_BIT(0x0400, IP_ACTIVE_HIGH, IPT_UNUSED) /* extra key on ISO : */ + PORT_BIT(0x0800, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_B) PORT_CHAR('b') PORT_CHAR('B') + PORT_BIT(0x1000, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_Q) PORT_CHAR('q') PORT_CHAR('Q') + PORT_BIT(0x2000, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_W) PORT_CHAR('w') PORT_CHAR('W') + PORT_BIT(0x4000, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_E) PORT_CHAR('e') PORT_CHAR('E') + PORT_BIT(0x8000, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_R) PORT_CHAR('r') PORT_CHAR('R') + + PORT_START("KEY1") + PORT_BIT(0x0001, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_Y) PORT_CHAR('y') PORT_CHAR('Y') + PORT_BIT(0x0002, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_T) PORT_CHAR('t') PORT_CHAR('T') + PORT_BIT(0x0004, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_1) PORT_CHAR('1') PORT_CHAR('!') + PORT_BIT(0x0008, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_2) PORT_CHAR('2') PORT_CHAR('@') + PORT_BIT(0x0010, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_3) PORT_CHAR('3') PORT_CHAR('#') + PORT_BIT(0x0020, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_4) PORT_CHAR('4') PORT_CHAR('$') + PORT_BIT(0x0040, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_6) PORT_CHAR('6') PORT_CHAR('^') + PORT_BIT(0x0080, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_5) PORT_CHAR('5') PORT_CHAR('%') + PORT_BIT(0x0100, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_EQUALS) PORT_CHAR('=') PORT_CHAR('+') + PORT_BIT(0x0200, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_9) PORT_CHAR('9') PORT_CHAR('(') + PORT_BIT(0x0400, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_7) PORT_CHAR('7') PORT_CHAR('&') + PORT_BIT(0x0800, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_MINUS) PORT_CHAR('-') PORT_CHAR('_') + PORT_BIT(0x1000, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_8) PORT_CHAR('8') PORT_CHAR('*') + PORT_BIT(0x2000, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_0) PORT_CHAR('0') PORT_CHAR(')') + PORT_BIT(0x4000, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_CLOSEBRACE) PORT_CHAR(']') PORT_CHAR('}') + PORT_BIT(0x8000, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_O) PORT_CHAR('o') PORT_CHAR('O') + + PORT_START("KEY2") + PORT_BIT(0x0001, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_U) PORT_CHAR('u') PORT_CHAR('U') + PORT_BIT(0x0002, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_OPENBRACE) PORT_CHAR('[') PORT_CHAR('{') + PORT_BIT(0x0004, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_I) PORT_CHAR('i') PORT_CHAR('I') + PORT_BIT(0x0008, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_P) PORT_CHAR('p') PORT_CHAR('P') + PORT_BIT(0x0010, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Return") PORT_CODE(KEYCODE_ENTER) PORT_CHAR('\r') + PORT_BIT(0x0020, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_L) PORT_CHAR('l') PORT_CHAR('L') + PORT_BIT(0x0040, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_J) PORT_CHAR('j') PORT_CHAR('J') + PORT_BIT(0x0080, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_QUOTE) PORT_CHAR('\'') PORT_CHAR('"') + PORT_BIT(0x0100, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_K) PORT_CHAR('k') PORT_CHAR('K') + PORT_BIT(0x0200, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_COLON) PORT_CHAR(';') PORT_CHAR(':') + PORT_BIT(0x0400, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_BACKSLASH) PORT_CHAR('\\') PORT_CHAR('|') + PORT_BIT(0x0800, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_COMMA) PORT_CHAR(',') PORT_CHAR('<') + PORT_BIT(0x1000, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_SLASH) PORT_CHAR('/') PORT_CHAR('?') + PORT_BIT(0x2000, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_N) PORT_CHAR('n') PORT_CHAR('N') + PORT_BIT(0x4000, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_M) PORT_CHAR('m') PORT_CHAR('M') + PORT_BIT(0x8000, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_STOP) PORT_CHAR('.') PORT_CHAR('>') + + PORT_START("KEY3") + PORT_BIT(0x0001, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_TAB) PORT_CHAR('\t') + PORT_BIT(0x0002, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_SPACE) PORT_CHAR(' ') + PORT_BIT(0x0004, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_TILDE) PORT_CHAR('`') PORT_CHAR('~') + PORT_BIT(0x0008, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_BACKSPACE) PORT_CHAR(8) + PORT_BIT(0x0010, IP_ACTIVE_HIGH, IPT_UNUSED) /* keyboard Enter : */ + PORT_BIT(0x0020, IP_ACTIVE_HIGH, IPT_UNUSED) /* escape: */ + PORT_BIT(0x0040, IP_ACTIVE_HIGH, IPT_UNUSED) /* ??? */ + PORT_BIT(0x0080, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Command") PORT_CODE(KEYCODE_LCONTROL) + PORT_BIT(0x0100, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Shift") PORT_CODE(KEYCODE_LSHIFT) PORT_CODE(KEYCODE_RSHIFT) PORT_CHAR(UCHAR_SHIFT_1) + PORT_BIT(0x0200, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Caps Lock") PORT_CODE(KEYCODE_CAPSLOCK) PORT_TOGGLE + PORT_BIT(0x0400, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Option") PORT_CODE(KEYCODE_LALT) PORT_CHAR(UCHAR_SHIFT_2) + PORT_BIT(0x0800, IP_ACTIVE_HIGH, IPT_UNUSED) /* Control: */ + PORT_BIT(0x1000, IP_ACTIVE_HIGH, IPT_UNUSED) /* keypad pseudo-keycode */ + PORT_BIT(0xE000, IP_ACTIVE_HIGH, IPT_UNUSED) /* ??? */ + + /* keypad */ + PORT_START("KEY4") + PORT_BIT(0x0001, IP_ACTIVE_HIGH, IPT_UNUSED) + PORT_BIT(0x0002, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_DEL_PAD) PORT_CHAR(UCHAR_MAMEKEY(DEL_PAD)) + PORT_BIT(0x0004, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_ASTERISK) PORT_CHAR(UCHAR_MAMEKEY(ASTERISK)) + PORT_BIT(0x0038, IP_ACTIVE_HIGH, IPT_UNUSED) + PORT_BIT(0x0040, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_PLUS_PAD) PORT_CHAR(UCHAR_MAMEKEY(PLUS_PAD)) + PORT_BIT(0x0080, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Keypad Clear") PORT_CODE(/*KEYCODE_NUMLOCK*/KEYCODE_DEL) PORT_CHAR(UCHAR_MAMEKEY(DEL)) + PORT_BIT(0x0100, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Keypad =") PORT_CODE(/*CODE_OTHER*/KEYCODE_NUMLOCK) PORT_CHAR(UCHAR_MAMEKEY(NUMLOCK)) + PORT_BIT(0x0E00, IP_ACTIVE_HIGH, IPT_UNUSED) + PORT_BIT(0x1000, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_ENTER_PAD) PORT_CHAR(UCHAR_MAMEKEY(ENTER_PAD)) + PORT_BIT(0x2000, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_SLASH_PAD) PORT_CHAR(UCHAR_MAMEKEY(SLASH_PAD)) + PORT_BIT(0x4000, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_MINUS_PAD) PORT_CHAR(UCHAR_MAMEKEY(MINUS_PAD)) + PORT_BIT(0x8000, IP_ACTIVE_HIGH, IPT_UNUSED) + + PORT_START("KEY5") + PORT_BIT(0x0001, IP_ACTIVE_HIGH, IPT_UNUSED) + PORT_BIT(0x0002, IP_ACTIVE_HIGH, IPT_UNUSED) + PORT_BIT(0x0004, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_0_PAD) PORT_CHAR(UCHAR_MAMEKEY(0_PAD)) + PORT_BIT(0x0008, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_1_PAD) PORT_CHAR(UCHAR_MAMEKEY(1_PAD)) + PORT_BIT(0x0010, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_2_PAD) PORT_CHAR(UCHAR_MAMEKEY(2_PAD)) + PORT_BIT(0x0020, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_3_PAD) PORT_CHAR(UCHAR_MAMEKEY(3_PAD)) + PORT_BIT(0x0040, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_4_PAD) PORT_CHAR(UCHAR_MAMEKEY(4_PAD)) + PORT_BIT(0x0080, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_5_PAD) PORT_CHAR(UCHAR_MAMEKEY(5_PAD)) + PORT_BIT(0x0100, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_6_PAD) PORT_CHAR(UCHAR_MAMEKEY(6_PAD)) + PORT_BIT(0x0200, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_7_PAD) PORT_CHAR(UCHAR_MAMEKEY(7_PAD)) + PORT_BIT(0x0400, IP_ACTIVE_HIGH, IPT_UNUSED) + PORT_BIT(0x0800, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_8_PAD) PORT_CHAR(UCHAR_MAMEKEY(8_PAD)) + PORT_BIT(0x1000, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_9_PAD) PORT_CHAR(UCHAR_MAMEKEY(9_PAD)) + PORT_BIT(0xE000, IP_ACTIVE_HIGH, IPT_UNUSED) + + /* Arrow keys */ + PORT_START("KEY6") + PORT_BIT(0x0003, IP_ACTIVE_HIGH, IPT_UNUSED) + PORT_BIT(0x0004, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Right Arrow") PORT_CODE(KEYCODE_RIGHT) PORT_CHAR(UCHAR_MAMEKEY(RIGHT)) + PORT_BIT(0x0038, IP_ACTIVE_HIGH, IPT_UNUSED ) + PORT_BIT(0x0040, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Left Arrow") PORT_CODE(KEYCODE_LEFT) PORT_CHAR(UCHAR_MAMEKEY(LEFT)) + PORT_BIT(0x0080, IP_ACTIVE_HIGH, IPT_UNUSED) + PORT_BIT(0x0100, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Down Arrow") PORT_CODE(KEYCODE_DOWN) PORT_CHAR(UCHAR_MAMEKEY(DOWN)) + PORT_BIT(0x1E00, IP_ACTIVE_HIGH, IPT_UNUSED) + PORT_BIT(0x2000, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Up Arrow") PORT_CODE(KEYCODE_UP) PORT_CHAR(UCHAR_MAMEKEY(UP)) + PORT_BIT(0xC000, IP_ACTIVE_HIGH, IPT_UNUSED) +INPUT_PORTS_END + +static INPUT_PORTS_START( macadb ) + PORT_START("MOUSE0") /* Mouse - button */ + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON1) PORT_NAME("Mouse Button") PORT_CODE(MOUSECODE_BUTTON1) + + PORT_START("MOUSE1") /* Mouse - X AXIS */ + PORT_BIT( 0xff, 0x00, IPT_MOUSE_X) PORT_SENSITIVITY(100) PORT_KEYDELTA(0) PORT_PLAYER(1) + + PORT_START("MOUSE2") /* Mouse - Y AXIS */ + PORT_BIT( 0xff, 0x00, IPT_MOUSE_Y) PORT_SENSITIVITY(100) PORT_KEYDELTA(0) PORT_PLAYER(1) + + /* This handles the standard (not Extended) Apple ADB keyboard, which is similar to the IIgs's */ + /* main keyboard */ + + PORT_START("KEY0") + PORT_BIT(0x0001, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_A) PORT_CHAR('a') PORT_CHAR('A') + PORT_BIT(0x0002, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_S) PORT_CHAR('s') PORT_CHAR('S') + PORT_BIT(0x0004, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_D) PORT_CHAR('d') PORT_CHAR('D') + PORT_BIT(0x0008, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_F) PORT_CHAR('f') PORT_CHAR('F') + PORT_BIT(0x0010, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_H) PORT_CHAR('h') PORT_CHAR('H') + PORT_BIT(0x0020, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_G) PORT_CHAR('g') PORT_CHAR('G') + PORT_BIT(0x0040, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_Z) PORT_CHAR('z') PORT_CHAR('Z') + PORT_BIT(0x0080, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_X) PORT_CHAR('x') PORT_CHAR('X') + PORT_BIT(0x0100, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_C) PORT_CHAR('c') PORT_CHAR('C') + PORT_BIT(0x0200, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_V) PORT_CHAR('v') PORT_CHAR('V') + PORT_BIT(0x0400, IP_ACTIVE_HIGH, IPT_UNUSED) /* extra key on ISO : */ + PORT_BIT(0x0800, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_B) PORT_CHAR('b') PORT_CHAR('B') + PORT_BIT(0x1000, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_Q) PORT_CHAR('q') PORT_CHAR('Q') + PORT_BIT(0x2000, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_W) PORT_CHAR('w') PORT_CHAR('W') + PORT_BIT(0x4000, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_E) PORT_CHAR('e') PORT_CHAR('E') + PORT_BIT(0x8000, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_R) PORT_CHAR('r') PORT_CHAR('R') + + PORT_START("KEY1") + PORT_BIT(0x0001, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_Y) PORT_CHAR('y') PORT_CHAR('Y') + PORT_BIT(0x0002, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_T) PORT_CHAR('t') PORT_CHAR('T') + PORT_BIT(0x0004, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_1) PORT_CHAR('1') PORT_CHAR('!') + PORT_BIT(0x0008, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_2) PORT_CHAR('2') PORT_CHAR('@') + PORT_BIT(0x0010, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_3) PORT_CHAR('3') PORT_CHAR('#') + PORT_BIT(0x0020, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_4) PORT_CHAR('4') PORT_CHAR('$') + PORT_BIT(0x0040, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_6) PORT_CHAR('6') PORT_CHAR('^') + PORT_BIT(0x0080, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_5) PORT_CHAR('5') PORT_CHAR('%') + PORT_BIT(0x0100, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_EQUALS) PORT_CHAR('=') PORT_CHAR('+') + PORT_BIT(0x0200, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_9) PORT_CHAR('9') PORT_CHAR('(') + PORT_BIT(0x0400, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_7) PORT_CHAR('7') PORT_CHAR('&') + PORT_BIT(0x0800, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_MINUS) PORT_CHAR('-') PORT_CHAR('_') + PORT_BIT(0x1000, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_8) PORT_CHAR('8') PORT_CHAR('*') + PORT_BIT(0x2000, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_0) PORT_CHAR('0') PORT_CHAR(')') + PORT_BIT(0x4000, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_CLOSEBRACE) PORT_CHAR(']') PORT_CHAR('}') + PORT_BIT(0x8000, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_O) PORT_CHAR('o') PORT_CHAR('O') + + PORT_START("KEY2") + PORT_BIT(0x0001, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_U) PORT_CHAR('u') PORT_CHAR('U') + PORT_BIT(0x0002, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_OPENBRACE) PORT_CHAR('[') PORT_CHAR('{') + PORT_BIT(0x0004, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_I) PORT_CHAR('i') PORT_CHAR('I') + PORT_BIT(0x0008, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_P) PORT_CHAR('p') PORT_CHAR('P') + PORT_BIT(0x0010, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Return") PORT_CODE(KEYCODE_ENTER) PORT_CHAR('\r') + PORT_BIT(0x0020, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_L) PORT_CHAR('l') PORT_CHAR('L') + PORT_BIT(0x0040, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_J) PORT_CHAR('j') PORT_CHAR('J') + PORT_BIT(0x0080, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_QUOTE) PORT_CHAR('\'') PORT_CHAR('"') + PORT_BIT(0x0100, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_K) PORT_CHAR('k') PORT_CHAR('K') + PORT_BIT(0x0200, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_COLON) PORT_CHAR(';') PORT_CHAR(':') + PORT_BIT(0x0400, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_BACKSLASH) PORT_CHAR('\\') PORT_CHAR('|') + PORT_BIT(0x0800, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_COMMA) PORT_CHAR(',') PORT_CHAR('<') + PORT_BIT(0x1000, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_SLASH) PORT_CHAR('/') PORT_CHAR('?') + PORT_BIT(0x2000, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_N) PORT_CHAR('n') PORT_CHAR('N') + PORT_BIT(0x4000, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_M) PORT_CHAR('m') PORT_CHAR('M') + PORT_BIT(0x8000, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_STOP) PORT_CHAR('.') PORT_CHAR('>') + + PORT_START("KEY3") + PORT_BIT(0x0001, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_TAB) PORT_CHAR('\t') + PORT_BIT(0x0002, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_SPACE) PORT_CHAR(' ') + PORT_BIT(0x0004, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_TILDE) PORT_CHAR('`') PORT_CHAR('~') + PORT_BIT(0x0008, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_BACKSPACE) PORT_CHAR(8) + PORT_BIT(0x0010, IP_ACTIVE_HIGH, IPT_UNUSED) /* keyboard Enter : */ + PORT_BIT(0x0020, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Esc") PORT_CODE(KEYCODE_ESC) PORT_CHAR(27) + PORT_BIT(0x0040, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Control") PORT_CODE(KEYCODE_LCONTROL) + PORT_BIT(0x0080, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Command / Open Apple") PORT_CODE(KEYCODE_LALT) + PORT_BIT(0x0100, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Shift") PORT_CODE(KEYCODE_LSHIFT) PORT_CODE(KEYCODE_RSHIFT) PORT_CHAR(UCHAR_SHIFT_1) + PORT_BIT(0x0200, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Caps Lock") PORT_CODE(KEYCODE_CAPSLOCK) PORT_TOGGLE + PORT_BIT(0x0400, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Option / Solid Apple") PORT_CODE(KEYCODE_RALT) + PORT_BIT(0x0800, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Left Arrow") PORT_CODE(KEYCODE_LEFT) PORT_CHAR(UCHAR_MAMEKEY(LEFT)) + PORT_BIT(0x1000, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Right Arrow") PORT_CODE(KEYCODE_RIGHT) PORT_CHAR(UCHAR_MAMEKEY(RIGHT)) + PORT_BIT(0x2000, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Down Arrow") PORT_CODE(KEYCODE_DOWN) PORT_CHAR(UCHAR_MAMEKEY(DOWN)) + PORT_BIT(0x4000, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Up Arrow") PORT_CODE(KEYCODE_UP) PORT_CHAR(UCHAR_MAMEKEY(UP)) + PORT_BIT(0x8000, IP_ACTIVE_HIGH, IPT_UNUSED) /* ??? */ + + /* keypad */ + PORT_START("KEY4") + PORT_BIT(0x0001, IP_ACTIVE_HIGH, IPT_UNUSED) // 0x40 + PORT_BIT(0x0002, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_DEL_PAD) PORT_CHAR(UCHAR_MAMEKEY(DEL_PAD)) // 0x41 + PORT_BIT(0x0004, IP_ACTIVE_HIGH, IPT_UNUSED) // 0x42 + PORT_BIT(0x0008, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_ASTERISK) PORT_CHAR(UCHAR_MAMEKEY(ASTERISK)) // 0x43 + PORT_BIT(0x0010, IP_ACTIVE_HIGH, IPT_UNUSED) // 0x44 + PORT_BIT(0x0020, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_PLUS_PAD) PORT_CHAR(UCHAR_MAMEKEY(PLUS_PAD)) // 0x45 + PORT_BIT(0x0040, IP_ACTIVE_HIGH, IPT_UNUSED) // 0x46 + PORT_BIT(0x0080, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Keypad Clear") PORT_CODE(/*KEYCODE_NUMLOCK*/KEYCODE_DEL) PORT_CHAR(UCHAR_MAMEKEY(DEL)) // 0x47 + PORT_BIT(0x0700, IP_ACTIVE_HIGH, IPT_UNUSED) // 0x48, 49, 4a + PORT_BIT(0x0800, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_SLASH_PAD) PORT_CHAR(UCHAR_MAMEKEY(SLASH_PAD)) // 0x4b + PORT_BIT(0x1000, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_ENTER_PAD) PORT_CHAR(UCHAR_MAMEKEY(ENTER_PAD)) // 0x4c + PORT_BIT(0x2000, IP_ACTIVE_HIGH, IPT_UNUSED) // 0x4d + PORT_BIT(0x4000, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_MINUS_PAD) PORT_CHAR(UCHAR_MAMEKEY(MINUS_PAD)) // 0x4e + PORT_BIT(0x8000, IP_ACTIVE_HIGH, IPT_UNUSED) // 0x4f + + PORT_START("KEY5") + PORT_BIT(0x0001, IP_ACTIVE_HIGH, IPT_UNUSED) // 0x50 + PORT_BIT(0x0002, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Keypad =") PORT_CODE(/*CODE_OTHER*/KEYCODE_NUMLOCK) PORT_CHAR(UCHAR_MAMEKEY(NUMLOCK)) // 0x51 + PORT_BIT(0x0004, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_0_PAD) PORT_CHAR(UCHAR_MAMEKEY(0_PAD)) // 0x52 + PORT_BIT(0x0008, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_1_PAD) PORT_CHAR(UCHAR_MAMEKEY(1_PAD)) // 0x53 + PORT_BIT(0x0010, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_2_PAD) PORT_CHAR(UCHAR_MAMEKEY(2_PAD)) // 0x54 + PORT_BIT(0x0020, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_3_PAD) PORT_CHAR(UCHAR_MAMEKEY(3_PAD)) // 0x55 + PORT_BIT(0x0040, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_4_PAD) PORT_CHAR(UCHAR_MAMEKEY(4_PAD)) // 0x56 + PORT_BIT(0x0080, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_5_PAD) PORT_CHAR(UCHAR_MAMEKEY(5_PAD)) // 0x57 + PORT_BIT(0x0100, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_6_PAD) PORT_CHAR(UCHAR_MAMEKEY(6_PAD)) // 0x58 + PORT_BIT(0x0200, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_7_PAD) PORT_CHAR(UCHAR_MAMEKEY(7_PAD)) // 0x59 + PORT_BIT(0x0400, IP_ACTIVE_HIGH, IPT_UNUSED) // 0x5a + PORT_BIT(0x0800, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_8_PAD) PORT_CHAR(UCHAR_MAMEKEY(8_PAD)) // 0x5b + PORT_BIT(0x1000, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_9_PAD) PORT_CHAR(UCHAR_MAMEKEY(9_PAD)) // 0x5c + PORT_BIT(0xE000, IP_ACTIVE_HIGH, IPT_UNUSED) +INPUT_PORTS_END + +INPUT_PORTS_START( maciici ) + PORT_INCLUDE(macadb) + + PORT_START("MONTYPE") + PORT_CONFNAME(0x0f, 0x06, "Connected monitor") + PORT_CONFSETTING( 0x01, "15\" Portrait Display (640x870)") + PORT_CONFSETTING( 0x02, "12\" RGB (512x384)") + PORT_CONFSETTING( 0x06, "13\" RGB (640x480)") +INPUT_PORTS_END + +/*************************************************************************** + + Game driver(s) + + The Mac driver uses a convention of placing the BIOS in "bootrom" + +***************************************************************************/ + +ROM_START( mac128k ) + ROM_REGION16_BE(0x20000, "bootrom", 0) + ROM_LOAD16_WORD( "mac128k.rom", 0x00000, 0x10000, CRC(6d0c8a28) SHA1(9d86c883aa09f7ef5f086d9e32330ef85f1bc93b) ) +ROM_END + +ROM_START( mac512k ) + ROM_REGION16_BE(0x20000, "bootrom", 0) + ROM_LOAD16_WORD( "mac512k.rom", 0x00000, 0x10000, CRC(cf759e0d) SHA1(5b1ced181b74cecd3834c49c2a4aa1d7ffe944d7) ) +ROM_END + +ROM_START( unitron ) + ROM_REGION16_BE(0x20000, "bootrom", 0) + ROM_LOAD16_WORD( "unitron_512.rom", 0x00000, 0x10000, CRC(1eabd37f) SHA1(a3d3696c08feac6805effb7ee07b68c2bf1a8dd7) ) +ROM_END + +ROM_START( mac512ke ) + ROM_REGION16_BE(0x20000, "bootrom", 0) + ROM_LOAD16_WORD( "macplus.rom", 0x00000, 0x20000, CRC(b2102e8e) SHA1(7d2f808a045aa3a1b242764f0e2c7d13e288bf1f)) +ROM_END + + +ROM_START( macplus ) + ROM_REGION16_BE(0x20000, "bootrom", 0) + ROM_LOAD16_WORD( "macplus.rom", 0x00000, 0x20000, CRC(b2102e8e) SHA1(7d2f808a045aa3a1b242764f0e2c7d13e288bf1f)) +ROM_END + + +ROM_START( macse ) + ROM_REGION16_BE(0x40000, "bootrom", 0) + ROM_LOAD16_WORD( "macse.rom", 0x00000, 0x40000, CRC(0f7ff80c) SHA1(58532b7d0d49659fd5228ac334a1b094f0241968)) +ROM_END + +ROM_START( macsefd ) + ROM_REGION16_BE(0x40000, "bootrom", 0) + ROM_LOAD( "be06e171.rom", 0x000000, 0x040000, CRC(f530cb10) SHA1(d3670a90273d12e53d86d1228c068cb660b8c9d1) ) +ROM_END + +ROM_START( macclasc ) + ROM_REGION16_BE(0x80000, "bootrom", 0) + ROM_LOAD( "a49f9914.rom", 0x000000, 0x080000, CRC(510d7d38) SHA1(ccd10904ddc0fb6a1d216b2e9effd5ec6cf5a83d) ) +ROM_END + +ROM_START( maclc ) + ROM_REGION32_BE(0x100000, "bootrom", 0) + ROM_LOAD("350eacf0.rom", 0x000000, 0x080000, CRC(71681726) SHA1(6bef5853ae736f3f06c2b4e79772f65910c3b7d4)) + + ROM_REGION(0x1100, "egret", 0) + ROM_LOAD( "341s0851.bin", 0x000000, 0x001100, CRC(ea9ea6e4) SHA1(8b0dae3ec66cdddbf71567365d2c462688aeb571) ) +ROM_END + +ROM_START( macii ) + ROM_REGION32_BE(0x40000, "bootrom", 0) + ROM_SYSTEM_BIOS(0, "default", "rev. B") + ROMX_LOAD( "9779d2c4.rom", 0x000000, 0x040000, CRC(4df6d054) SHA1(db6b504744281369794e26ba71a6e385cf6227fa), ROM_BIOS(1) ) + ROM_SYSTEM_BIOS(1, "original", "rev. A") + ROMX_LOAD( "97851db6.rom", 0x000000, 0x040000, CRC(8c8b9d03) SHA1(5c264fe976f1e8495d364947c932a5e8309b4300), ROM_BIOS(2) ) +ROM_END + +ROM_START( maciihmu ) + ROM_REGION32_BE(0x40000, "bootrom", 0) + ROM_SYSTEM_BIOS(0, "default", "rev. B") + ROMX_LOAD( "9779d2c4.rom", 0x000000, 0x040000, CRC(4df6d054) SHA1(db6b504744281369794e26ba71a6e385cf6227fa), ROM_BIOS(1) ) + ROM_SYSTEM_BIOS(1, "original", "rev. A") + ROMX_LOAD( "97851db6.rom", 0x000000, 0x040000, CRC(8c8b9d03) SHA1(5c264fe976f1e8495d364947c932a5e8309b4300), ROM_BIOS(2) ) +ROM_END + +ROM_START( mac2fdhd ) // same ROM for II FDHD, IIx, IIcx, and SE/30 + ROM_REGION32_BE(0x40000, "bootrom", 0) + ROM_LOAD( "97221136.rom", 0x000000, 0x040000, CRC(ce3b966f) SHA1(753b94351d94c369616c2c87b19d568dc5e2764e) ) +ROM_END + +ROM_START( maciix ) + ROM_REGION32_BE(0x40000, "bootrom", 0) + ROM_LOAD( "97221136.rom", 0x000000, 0x040000, CRC(ce3b966f) SHA1(753b94351d94c369616c2c87b19d568dc5e2764e) ) +ROM_END + +ROM_START( maciicx ) + ROM_REGION32_BE(0x40000, "bootrom", 0) + ROM_LOAD( "97221136.rom", 0x000000, 0x040000, CRC(ce3b966f) SHA1(753b94351d94c369616c2c87b19d568dc5e2764e) ) +ROM_END + +ROM_START( macse30 ) + ROM_REGION32_BE(0x40000, "bootrom", 0) + ROM_LOAD( "97221136.rom", 0x000000, 0x040000, CRC(ce3b966f) SHA1(753b94351d94c369616c2c87b19d568dc5e2764e) ) + + ROM_REGION32_BE(0x2000, "se30vrom", 0) + ROM_LOAD( "se30vrom.uk6", 0x000000, 0x002000, CRC(b74c3463) SHA1(584201cc67d9452b2488f7aaaf91619ed8ce8f03) ) +ROM_END + +ROM_START( maciifx ) + ROM_REGION32_BE(0x80000, "bootrom", 0) + ROM_LOAD( "4147dd77.rom", 0x000000, 0x080000, CRC(ef441bbd) SHA1(9fba3d4f672a630745d65788b1d1119afa2c6728) ) +ROM_END + +ROM_START( maciici ) + ROM_REGION32_BE(0x80000, "bootrom", 0) + ROM_LOAD( "368cadfe.rom", 0x000000, 0x080000, CRC(46adbf74) SHA1(b54f9d2ed16b63c49ed55adbe4685ebe73eb6e80) ) +ROM_END + +ROM_START( maciisi ) + ROM_REGION32_BE(0x80000, "bootrom", 0) + ROM_LOAD( "36b7fb6c.rom", 0x000000, 0x080000, CRC(f304d973) SHA1(f923de4125aae810796527ff6e25364cf1d54eec) ) +ROM_END + +ROM_START( maciivx ) + ROM_REGION32_BE(0x100000, "bootrom", 0) + ROM_LOAD( "4957eb49.rom", 0x000000, 0x100000, CRC(61be06e5) SHA1(560ce203d65178657ad09d03f532f86fa512bb40) ) +ROM_END + +ROM_START( maciivi ) + ROM_REGION32_BE(0x100000, "bootrom", 0) + ROM_LOAD( "4957eb49.rom", 0x000000, 0x100000, CRC(61be06e5) SHA1(560ce203d65178657ad09d03f532f86fa512bb40) ) +ROM_END + +ROM_START( macclas2 ) + ROM_REGION32_BE(0x100000, "bootrom", 0) + ROM_LOAD( "3193670e.rom", 0x000000, 0x080000, CRC(96d2e1fd) SHA1(50df69c1b6e805e12a405dc610bc2a1471b2eac2) ) +ROM_END + +ROM_START( maclc2 ) + ROM_REGION32_BE(0x100000, "bootrom", 0) + ROM_LOAD32_BYTE( "341-0476_ue2-hh.bin", 0x000000, 0x020000, CRC(0c3b0ce4) SHA1(e4e8c883d7f2e002a3f7b7aefaa3840991e57025) ) + ROM_LOAD32_BYTE( "341-0475_ud2-mh.bin", 0x000001, 0x020000, CRC(7b013595) SHA1(0b82d8fac570270db9774f6254017d28611ae756) ) + ROM_LOAD32_BYTE( "341-0474_uc2-ml.bin", 0x000002, 0x020000, CRC(2ff2f52b) SHA1(876850df61d0233c1dd3c00d48d8d6690186b164) ) + ROM_LOAD32_BYTE( "341-0473_ub2-ll.bin", 0x000003, 0x020000, CRC(8843c37c) SHA1(bb5104110507ca543d106f11c6061245fd90c1a7) ) +ROM_END + +ROM_START( maclc3 ) + ROM_REGION32_BE(0x100000, "bootrom", 0) + ROM_LOAD( "ecbbc41c.rom", 0x000000, 0x100000, CRC(e578f5f3) SHA1(c77df3220c861f37a2c553b6ee9241b202dfdffc) ) +ROM_END + +ROM_START( pmac6100 ) + ROM_REGION64_BE(0x400000, "bootrom", 0) + ROM_LOAD( "9feb69b3.rom", 0x000000, 0x400000, CRC(a43fadbc) SHA1(6fac1c4e920a077c077b03902fef9199d5e8f2c3) ) +ROM_END + +ROM_START( macprtb ) + ROM_REGION16_BE(0x40000, "bootrom", 0) + ROM_LOAD16_WORD( "93ca3846.rom", 0x000000, 0x040000, CRC(497348f8) SHA1(79b468b33fc53f11e87e2e4b195aac981bf0c0a6) ) +ROM_END + +ROM_START( macpb100 ) + ROM_REGION16_BE(0x40000, "bootrom", 0) + ROM_LOAD16_WORD( "96645f9c.rom", 0x000000, 0x040000, CRC(29ac7ee9) SHA1(7f3acf40b1f63612de2314a2e9fcfeafca0711fc) ) +ROM_END + +ROM_START( macpb140 ) + ROM_REGION32_BE(0x100000, "bootrom", 0) + ROM_LOAD( "420dbff3.rom", 0x000000, 0x100000, CRC(88ea2081) SHA1(7a8ee468d16e64f2ad10cb8d1a45e6f07cc9e212) ) +ROM_END + +ROM_START( macpb145 ) + ROM_REGION32_BE(0x100000, "bootrom", 0) + ROM_LOAD( "420dbff3.rom", 0x000000, 0x100000, CRC(88ea2081) SHA1(7a8ee468d16e64f2ad10cb8d1a45e6f07cc9e212) ) +ROM_END + +ROM_START( macpb145b ) + ROM_REGION32_BE(0x100000, "bootrom", 0) + ROM_LOAD( "420dbff3.rom", 0x000000, 0x100000, CRC(88ea2081) SHA1(7a8ee468d16e64f2ad10cb8d1a45e6f07cc9e212) ) +ROM_END + +ROM_START( macpb170 ) + ROM_REGION32_BE(0x100000, "bootrom", 0) + ROM_LOAD( "420dbff3.rom", 0x000000, 0x100000, CRC(88ea2081) SHA1(7a8ee468d16e64f2ad10cb8d1a45e6f07cc9e212) ) +ROM_END + +ROM_START( macqd700 ) + ROM_REGION32_BE(0x100000, "bootrom", 0) + ROM_LOAD( "420dbff3.rom", 0x000000, 0x100000, CRC(88ea2081) SHA1(7a8ee468d16e64f2ad10cb8d1a45e6f07cc9e212) ) +ROM_END + +ROM_START( macpb160 ) + ROM_REGION32_BE(0x100000, "bootrom", 0) + ROM_LOAD( "e33b2724.rom", 0x000000, 0x100000, CRC(536c60f4) SHA1(c0510682ae6d973652d7e17f3c3b27629c47afac) ) +ROM_END + +ROM_START( macpb180 ) + ROM_REGION32_BE(0x100000, "bootrom", 0) + ROM_LOAD( "e33b2724.rom", 0x000000, 0x100000, CRC(536c60f4) SHA1(c0510682ae6d973652d7e17f3c3b27629c47afac) ) +ROM_END + +ROM_START( macpb180c ) + ROM_REGION32_BE(0x100000, "bootrom", 0) + ROM_LOAD( "e33b2724.rom", 0x000000, 0x100000, CRC(536c60f4) SHA1(c0510682ae6d973652d7e17f3c3b27629c47afac) ) + + ROM_REGION32_BE(0x8000, "vrom", 0) + ROM_LOAD( "pb180cvrom.bin", 0x0000, 0x8000, CRC(810c75ad) SHA1(3a936e97dee5ceeb25e50197ef504e514ae689a4)) +ROM_END + +ROM_START( maccclas ) + ROM_REGION32_BE(0x100000, "bootrom", 0) + ROM_LOAD( "ecd99dc0.rom", 0x000000, 0x100000, CRC(c84c3aa5) SHA1(fd9e852e2d77fe17287ba678709b9334d4d74f1e) ) +ROM_END + +/*ROM_START( macpd210 ) + ROM_REGION32_BE(0x100000, "bootrom", 0) + ROM_LOAD( "ecfa989b.rom", 0x000000, 0x100000, CRC(b86ed854) SHA1(ed1371c97117a5884da4a6605ecfc5abed48ae5a) ) +ROM_END*/ + +ROM_START( maclc520 ) + ROM_REGION32_BE(0x100000, "bootrom", 0) + ROM_LOAD( "ede66cbd.rom", 0x000000, 0x100000, CRC(a893cb0f) SHA1(c54ee2f45020a4adeb7451adce04cd6e5fb69790) ) +ROM_END + +/* YEAR NAME PARENT COMPAT MACHINE INPUT INIT COMPANY FULLNAME */ +COMP( 1984, mac128k, 0, 0, mac128k, macplus, mac_state, mac128k512k, "Apple Computer", "Macintosh 128k", GAME_NOT_WORKING ) +COMP( 1984, mac512k, mac128k, 0, mac512ke, macplus, mac_state, mac128k512k, "Apple Computer", "Macintosh 512k", GAME_NOT_WORKING ) +COMP( 1986, mac512ke, macplus, 0, mac512ke, macplus, mac_state, mac512ke, "Apple Computer", "Macintosh 512ke", 0 ) +COMP( 1985, unitron, macplus, 0, mac512ke, macplus, mac_state, mac512ke, "bootleg (Unitron)", "Mac 512", GAME_NOT_WORKING ) +COMP( 1986, macplus, 0, 0, macplus, macplus, mac_state, macplus, "Apple Computer", "Macintosh Plus", 0 ) +COMP( 1987, macse, 0, 0, macse, macadb, mac_state, macse, "Apple Computer", "Macintosh SE", 0 ) +COMP( 1987, macsefd, 0, 0, macse, macadb, mac_state, macse, "Apple Computer", "Macintosh SE (FDHD)", 0 ) +COMP( 1987, macii, 0, 0, macii, macadb, mac_state, macii, "Apple Computer", "Macintosh II", 0 ) +COMP( 1987, maciihmu, macii, 0, maciihmu, macadb, mac_state, macii, "Apple Computer", "Macintosh II (w/o 68851 MMU)", 0 ) +COMP( 1988, mac2fdhd, 0, 0, macii, macadb, mac_state, maciifdhd, "Apple Computer", "Macintosh II (FDHD)", 0 ) +COMP( 1988, maciix, mac2fdhd, 0, maciix, macadb, mac_state, maciix, "Apple Computer", "Macintosh IIx", 0 ) +COMP( 1989, macprtb, 0, 0, macprtb, macadb, mac_state, macprtb, "Apple Computer", "Macintosh Portable", GAME_NOT_WORKING ) +COMP( 1989, macse30, mac2fdhd, 0, macse30, macadb, mac_state, macse30, "Apple Computer", "Macintosh SE/30", 0 ) +COMP( 1989, maciicx, mac2fdhd, 0, maciicx, macadb, mac_state, maciicx, "Apple Computer", "Macintosh IIcx", 0 ) +COMP( 1989, maciici, 0, 0, maciici, maciici, mac_state, maciici, "Apple Computer", "Macintosh IIci", 0 ) +COMP( 1990, maciifx, 0, 0, maciifx, macadb, mac_state, maciifx, "Apple Computer", "Macintosh IIfx", GAME_NOT_WORKING ) +COMP( 1990, macclasc, 0, 0, macse, macadb, mac_state, macclassic, "Apple Computer", "Macintosh Classic", 0 ) +COMP( 1990, maclc, 0, 0, maclc, maciici, mac_state, maclc, "Apple Computer", "Macintosh LC", GAME_NOT_WORKING ) +COMP( 1990, maciisi, 0, 0, maciisi, maciici, mac_state, maciisi, "Apple Computer", "Macintosh IIsi", GAME_NOT_WORKING ) +COMP( 1991, macpb100, 0, 0, macprtb, macadb, mac_state, macprtb, "Apple Computer", "Macintosh PowerBook 100", GAME_NOT_WORKING ) +COMP( 1991, macpb140, 0, 0, macpb140, macadb, mac_state, macpb140, "Apple Computer", "Macintosh PowerBook 140", GAME_NOT_WORKING ) +COMP( 1991, macpb170, macpb140, 0, macpb170, macadb, mac_state, macpb140, "Apple Computer", "Macintosh PowerBook 170", GAME_NOT_WORKING ) +COMP( 1991, macqd700, macpb140, 0, macqd700, macadb, mac_state, macquadra700, "Apple Computer", "Macintosh Quadra 700", GAME_NOT_WORKING ) +COMP( 1991, macclas2, 0, 0, macclas2, macadb, mac_state, macclassic2, "Apple Computer", "Macintosh Classic II", GAME_NOT_WORKING ) +COMP( 1991, maclc2, 0, 0, maclc2, maciici, mac_state, maclc2, "Apple Computer", "Macintosh LC II", GAME_NOT_WORKING ) +COMP( 1992, macpb145, macpb140, 0, macpb145, macadb, mac_state, macpb140, "Apple Computer", "Macintosh PowerBook 145", GAME_NOT_WORKING ) +COMP( 1992, macpb160, 0, 0, macpb160, macadb, mac_state, macpb160, "Apple Computer", "Macintosh PowerBook 160", GAME_NOT_WORKING ) +COMP( 1992, macpb180, macpb160, 0, macpb180, macadb, mac_state, macpb160, "Apple Computer", "Macintosh PowerBook 180", GAME_NOT_WORKING ) +COMP( 1992, macpb180c,macpb160, 0, macpb180c,macadb, mac_state, macpb160, "Apple Computer", "Macintosh PowerBook 180c", GAME_NOT_WORKING ) +//COMP( 1992, macpd210, 0, 0, macpd210, macadb, mac_state, macpd210, "Apple Computer", "Macintosh PowerBook Duo 210", GAME_NOT_WORKING ) +COMP( 1993, maccclas, 0, 0, maccclas, macadb, mac_state, maclrcclassic,"Apple Computer", "Macintosh Color Classic", GAME_NOT_WORKING ) +COMP( 1992, macpb145b,macpb140, 0, macpb170, macadb, mac_state, macpb140, "Apple Computer", "Macintosh PowerBook 145B", GAME_NOT_WORKING ) +COMP( 1993, maclc3, 0, 0, maclc3, maciici, mac_state, maclc3, "Apple Computer", "Macintosh LC III", GAME_NOT_WORKING ) +COMP( 1993, maciivx, 0, 0, maciivx, maciici, mac_state, maciivx, "Apple Computer", "Macintosh IIvx", GAME_NOT_WORKING ) +COMP( 1993, maciivi, maciivx, 0, maciivi, maciici, mac_state, maciivx, "Apple Computer", "Macintosh IIvi", GAME_NOT_WORKING ) +COMP( 1993, maclc520, 0, 0, maclc520, maciici, mac_state, maclc520, "Apple Computer", "Macintosh LC 520", GAME_NOT_WORKING ) +COMP( 1994, pmac6100, 0, 0, pwrmac, macadb, mac_state, macpm6100, "Apple Computer", "Power Macintosh 6100/60", GAME_NOT_WORKING | GAME_NO_SOUND ) |