summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/machine/mac.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/machine/mac.cpp')
-rw-r--r--src/mame/machine/mac.cpp113
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;