diff options
Diffstat (limited to 'src/mame/machine/mac.cpp')
-rw-r--r-- | src/mame/machine/mac.cpp | 113 |
1 files changed, 13 insertions, 100 deletions
diff --git a/src/mame/machine/mac.cpp b/src/mame/machine/mac.cpp index f7007df15e3..0830f5e79c7 100644 --- a/src/mame/machine/mac.cpp +++ b/src/mame/machine/mac.cpp @@ -4,7 +4,7 @@ machine/mac.c - Mac hardware - Mac 128k, 512k, 512ke, Plus, SE, Classic, II, PowerBook (SCSI, SCC, ADB, etc) + Mac II series hardware Nate Woods Ernesto Corvi @@ -13,14 +13,6 @@ Mac Model Feature Summary: CPU FDC Kbd/Mouse PRAM Video - - Mac 128k 68k IWM orig orig Original - - Mac 512k 68k IWM orig orig Original - - Mac 512ke 68k IWM orig orig Original - - Mac Plus 68k IWM orig ext Original - - Mac SE 68k IWM MacII ADB ext Original - - Mac Classic 68k SWIM MacII ADB ext Original - - Mac Portable 68k (16 MHz) SWIM ADB-PMU PMU 640x400 B&W - - PowerBook 100 68k (16 MHz) SWIM ADB-PMU PMU 640x400 B&W - Mac II 020 IWM MacII ADB ext NuBus card - Mac IIx 030 SWIM MacII ADB ext NuBus card - Mac IIfx 030 SWIM IOP ADB ext NuBus card @@ -28,22 +20,14 @@ - Mac IIcx 030 SWIM MacII ADB ext NuBus card - Mac IIci 030 SWIM MacII ADB ext Internal "RBV" type - Mac IIsi 030 SWIM Egret ADB n/a Internal "RBV" type - - PowerBook 140/145(B) 030 (16/25 MHz) SWIM ADB-PMU PMU 640x400 B&W (passive matrix) - - PowerBook 170 030 (25 MHz) SWIM ADB-PMU PMU 640x400 B&W (active matrix) - Mac IIvx/IIvi 030 SWIM Egret ADB n/a Internal "VASP" type - Mac LC 020 SWIM Egret ADB n/a Internal "V8" type - Mac LC II 030 SWIM Egret ADB n/a Internal "V8" type - Mac LC III 030 SWIM Egret ADB n/a Internal "Sonora" type - Mac Classic II 030 SWIM Egret ADB n/a Internal "Eagle" type (V8 clone) - Mac Color Classic 030 SWIM Cuda ADB n/a Internal "Spice" type (V8 clone) - - Mac Quadra 700 040 (25 MHz) SWIM II MacII ADB ext Internal "DAFB" type - - Mac Quadra 900 040 (33 MHz) SWIM II IOP ADB ext Internal "DAFB" type Notes: - - The Mac Plus boot code seems to check to see the extent of ROM - mirroring to determine if SCSI is available. If the ROM is mirrored, - then SCSI is not available. Thanks to R. Belmont for making this - discovery. - On the SE and most later Macs, the first access to ROM turns off the overlay. However, the Mac II/IIx/IIcx (and others?) have the old-style VIA overlay control bit! - The Mac II can have either a 68551 PMMU fitted or an Apple custom that handles 24 vs. 32 @@ -96,14 +80,8 @@ #include "machine/iwm.h" #include "machine/swim1.h" -#define AUDIO_IS_CLASSIC (m_model <= MODEL_MAC_CLASSIC) -#define MAC_HAS_VIA2 ((m_model >= MODEL_MAC_II) && (m_model != MODEL_MAC_IIFX)) - #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 @@ -162,18 +140,7 @@ void mac_state::field_interrupts() { int take_interrupt = -1; - if (m_model < MODEL_MAC_PORTABLE) - { - if ((m_scc_interrupt) || (m_scsi_interrupt)) - { - take_interrupt = 2; - } - else if (m_via_interrupt) - { - take_interrupt = 1; - } - } - else if ((m_model < MODEL_MAC_POWERMAC_6100) && (m_model != MODEL_MAC_IIFX)) + if (m_model != MODEL_MAC_IIFX) { if (m_scc_interrupt) { @@ -190,7 +157,7 @@ void mac_state::field_interrupts() } else { - return; // no interrupts for PowerPC yet + return; // no interrupts for IIfx yet } if (m_last_taken_interrupt > -1) @@ -240,7 +207,7 @@ WRITE_LINE_MEMBER(mac_state::mac_asc_irq) rbv_recalc_irqs(); } } - else if ((m_model >= MODEL_MAC_II) && (m_model != MODEL_MAC_IIFX)) + else if (m_model != MODEL_MAC_IIFX) { m_via2->write_cb1(state^1); } @@ -411,12 +378,6 @@ void mac_state::set_memory_overlay(int overlay) space.unmap_write(0x000000, 0x9fffff); mac_install_memory(0x000000, memory_size-1, memory_size, memory_data, is_rom); } - else if ((m_model == MODEL_MAC_PB140) || (m_model == MODEL_MAC_PB160) || ((m_model >= MODEL_MAC_PBDUO_210) && (m_model <= MODEL_MAC_PBDUO_270c))) - { - address_space& space = m_maincpu->space(AS_PROGRAM); - space.unmap_write(0x000000, 0xffffff); - mac_install_memory(0x000000, memory_size-1, memory_size, memory_data, is_rom); - } else if ((m_model >= MODEL_MAC_II) && (m_model <= MODEL_MAC_SE30) && (m_model != MODEL_MAC_IIVX) && (m_model != MODEL_MAC_IIVI)) { mac_install_memory(0x00000000, 0x3fffffff, memory_size, memory_data, is_rom); @@ -435,14 +396,6 @@ void mac_state::set_memory_overlay(int overlay) m_maincpu->space(AS_PROGRAM).install_rom(0x40000000, 0x4fffffff & ~rom_mirror, rom_mirror, m_rom_ptr); } } - else if (m_model == MODEL_MAC_QUADRA_700) - { - if (!is_rom) - { - mac_install_memory(0x40000000, 0x400fffff, m_rom_size, m_rom_ptr, true); - } - mac_install_memory(0x00000000, memory_size-1, memory_size, memory_data, is_rom); - } else { mac_install_memory(0x00000000, 0x003fffff, memory_size, memory_data, is_rom); @@ -746,13 +699,9 @@ uint8_t mac_state::mac_via_in_a() switch (m_model) { - case MODEL_MAC_CLASSIC: case MODEL_MAC_II: case MODEL_MAC_II_FDHD: case MODEL_MAC_IIX: - case MODEL_MAC_POWERMAC_6100: - case MODEL_MAC_POWERMAC_7100: - case MODEL_MAC_POWERMAC_8100: return 0x81; // bit 0 must be set on most Macs to avoid attempting to boot from AppleTalk case MODEL_MAC_SE30: @@ -776,15 +725,10 @@ uint8_t mac_state::mac_via_in_a() case MODEL_MAC_IICX: return 0x81 | PA6; - case MODEL_MAC_PB140: // since the ASICs are different, these are allowed to "collide" - case MODEL_MAC_PB160: case MODEL_MAC_CLASSIC_II: case MODEL_MAC_QUADRA_800: return 0x81 | PA4 | PA1; - case MODEL_MAC_QUADRA_700: - return 0x81 | PA6; - case MODEL_MAC_QUADRA_900: return 0x81 | PA6 | PA4; @@ -1130,11 +1074,8 @@ void mac_state::machine_reset() m_last_taken_interrupt = -1; /* setup the memory overlay */ - if (m_model < MODEL_MAC_POWERMAC_6100) // no overlay for PowerPC - { - m_overlay = -1; // insure no match - this->set_memory_overlay(1); - } + m_overlay = -1; // insure no match + this->set_memory_overlay(1); if (m_overlay_timeout != (emu_timer *)nullptr) { @@ -1159,7 +1100,7 @@ void mac_state::machine_reset() /* setup videoram */ this->m_screen_buffer = 1; - if (MAC_HAS_VIA2) // prime CB1 for ASC and slot interrupts + if (m_model != MODEL_MAC_IIFX) // prime CB1 for ASC and slot interrupts { m_via2_ca1_hack = 1; m_via2->write_ca1(1); @@ -1176,7 +1117,7 @@ void mac_state::machine_reset() WRITE_LINE_MEMBER(mac_state::cuda_reset_w) { - if ((state == ASSERT_LINE) && (m_model < MODEL_MAC_POWERMAC_6100)) + if (state == ASSERT_LINE) { set_memory_overlay(0); set_memory_overlay(1); @@ -1190,11 +1131,8 @@ void mac_state::mac_state_load() { int overlay; overlay = m_overlay; - if (m_model < MODEL_MAC_POWERMAC_6100) // no overlay for PowerPC - { - m_overlay = -1; - set_memory_overlay(overlay); - } + m_overlay = -1; + set_memory_overlay(overlay); } @@ -1273,25 +1211,12 @@ void mac_state::mac_driver_init(model_t model) m_rom_size = memregion("bootrom")->bytes(); m_rom_ptr = reinterpret_cast<uint32_t *>(memregion("bootrom")->base()); - if (model < MODEL_MAC_PORTABLE) - { - /* set up RAM mirror at 0x600000-0x6fffff (0x7fffff ???) */ - mac_install_memory(0x600000, 0x6fffff, m_ram->size(), m_ram->pointer(), false); - - /* set up ROM at 0x400000-0x4fffff (-0x5fffff for mac 128k/512k/512ke) */ - mac_install_memory(0x400000, (model >= MODEL_MAC_PLUS) ? 0x4fffff : 0x5fffff, - m_rom_size, m_rom_ptr, true); - } - m_overlay = -1; - if (m_model < MODEL_MAC_POWERMAC_6100) // no overlay for PowerPC - { - set_memory_overlay(1); - } + set_memory_overlay(1); memset(m_ram->pointer(), 0, m_ram->size()); - if ((model == MODEL_MAC_SE) || (model == MODEL_MAC_CLASSIC) || (model == MODEL_MAC_CLASSIC_II) || (model == MODEL_MAC_LC) || (model == MODEL_MAC_COLOR_CLASSIC) || (model >= MODEL_MAC_LC_475 && model <= MODEL_MAC_LC_580) || + if ((model == MODEL_MAC_CLASSIC_II) || (model == MODEL_MAC_LC) || (model == MODEL_MAC_COLOR_CLASSIC) || (model >= MODEL_MAC_LC_475 && model <= MODEL_MAC_LC_580) || (model == MODEL_MAC_LC_II) || (model == MODEL_MAC_LC_III) || (model == MODEL_MAC_LC_III_PLUS) || ((m_model >= MODEL_MAC_II) && (m_model <= MODEL_MAC_SE30))) { m_overlay_timeout = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(mac_state::overlay_timeout_func),this)); @@ -1311,8 +1236,6 @@ void mac_state::init_##label() \ mac_driver_init(model); \ } -MAC_DRIVER_INIT(macse, MODEL_MAC_SE) -MAC_DRIVER_INIT(macclassic, MODEL_MAC_CLASSIC) MAC_DRIVER_INIT(maclc, MODEL_MAC_LC) MAC_DRIVER_INIT(maclc2, MODEL_MAC_LC_II) MAC_DRIVER_INIT(maclc3, MODEL_MAC_LC_III) @@ -1323,9 +1246,6 @@ MAC_DRIVER_INIT(macii, MODEL_MAC_II) MAC_DRIVER_INIT(macse30, MODEL_MAC_SE30) MAC_DRIVER_INIT(macclassic2, MODEL_MAC_CLASSIC_II) MAC_DRIVER_INIT(maclrcclassic, MODEL_MAC_COLOR_CLASSIC) -MAC_DRIVER_INIT(macpm6100, MODEL_MAC_POWERMAC_6100) -MAC_DRIVER_INIT(macpm7100, MODEL_MAC_POWERMAC_7100) -MAC_DRIVER_INIT(macpm8100, MODEL_MAC_POWERMAC_8100) MAC_DRIVER_INIT(maciivx, MODEL_MAC_IIVX) MAC_DRIVER_INIT(maciivi, MODEL_MAC_IIVI) MAC_DRIVER_INIT(maciifx, MODEL_MAC_IIFX) @@ -1380,18 +1300,11 @@ void mac_state::nubus_slot_interrupt(uint8_t slot, uint32_t state) void mac_state::vblank_irq() { /* handle ADB keyboard/mouse */ - if (has_adb() && m_macadb) + if (m_macadb) { m_macadb->adb_vblank(); } - /* signal VBlank on CA1 input on the VIA */ - if ((m_model < MODEL_MAC_II) || (m_model == MODEL_MAC_PB140) || (m_model == MODEL_MAC_PB160) || (m_model == MODEL_MAC_QUADRA_700)) - { - ca1_data ^= 1; - m_via1->write_ca1(ca1_data); - } - if (++irq_count == 60) { irq_count = 0; |