• Hello, Guest! Welcome back, and be sure to check out this post for more info about the recent service interruption and migration.

ROM Memory/Address Space in PCI Power Macs?


Well-known member
In the Hardware Developer Guides for the 68K Macs, Apple published address maps showing where everything was located in address space and how much addressing space was available for each device.

This is how the ROMinator builders knew that they could put an 8MB ROM in a Mac II family machine instead of just 512KB or 1 MB.

However, looking at the Hardware Developer Notes for the X500 machines, there's no address map. I guess Apple stopped providing that level of hardware description. It makes sense because they didn't want folks addressing the hardware directly; they wanted them to use the appropriate system calls.

So, does anyone know how much address space is available for the ROM in the X500 macs? The standard ROM module is 4MB in capacity. But there could be a lot more space allocated. You'd think there'd be at least as much as in the Mac II series.


Well-known member
I just read through the 7500/8500 Developer Note and the more I learn about 90's Apple, the less I understand WTF was going on there.

The 7500/8500 are the same logic board (as with their later incarnations), but things change depending on if a 601 is installed or if a later processor is installed. There's big discrepancies between how firmware and software operates because the 601 has POWER instructions that aren't present with the 603 and higher, and the 603 and higher having instructions not in the 601. I'm really shocked Apple ever put a 601 in a PCI machine knowing there was going to be compatibility issues. I guess they had a bunch of them left over.

Then there's the case of the 603 Macs based on 68k logic boards, and it's understandable why Apple stopped publishing address maps—it would have shown how fucked up their engineering was at that point, and would have revealed Spindler's "slash and burn" tactics trying to make everything cheaper to make while also trying to sell off Apple to a larger company.


Well-known member
Well, if the machine in question is capable of running Darwin, I suppose at least some of that information should be in the kernel source code?


Well-known member
You may want to boot Linux on it to get it out (or check Linux or NetBSD source code)
The boot up process gives a lot of information like this.

Here is a stripped version of it:

 Total memory = 640MB; using 2048kB for hash table (at cfe00000)
 RAM mapped without BATs
 Linux version 4.14.222-g3 (root@pulse.lostwave.net) (gcc version 4.9.2 (Debian 4.9.2-10+deb8u1)) #2 Sat Feb 27 17:23:22 CET 2021
 Found a Heathrow mac-io controller, rev: 1, mapped at 0xfdf80000
 PowerMac motherboard: PowerMac G3 (Gossamer)
 Using PowerMac machine description
 bootconsole [udbg0] enabled
 Hash_size         = 0x200000
 phys_mem_size     = 0x28000000
 dcache_bsize      = 0x20
 icache_bsize      = 0x20
 cpu_features      = 0x0000000000200472
   possible        = 0x0000000005a6fd77
   always          = 0x0000000000000000
 cpu_user_features = 0x8c000001 0x00000000
 mmu_features      = 0x00000001
 Hash              = 0xcfe00000
 Hash_mask         = 0x7fff
 Found Grackle (MPC106) PCI host bridge at 0x0000000080000000. Firmware bus number: 0->0
 PCI host bridge /pci (primary) ranges:
   IO 0x00000000fe000000..0x00000000fe7fffff -> 0x0000000000000000
  MEM 0x00000000fd000000..0x00000000fdffffff -> 0x0000000000000000
  MEM 0x0000000080000000..0x00000000fcffffff -> 0x0000000080000000
 nvram: OF partition at 0x1800
 nvram: XP partition at 0x1300
 nvram: NR partition at 0x1400
 Top of RAM: 0x28000000, Total RAM: 0x28000000
 Memory hole size: 0MB
 Zone ranges:
   DMA      [mem 0x0000000000000000-0x0000000027ffffff]
   Normal   empty
 Movable zone start for each node
 Early memory node ranges
   node   0: [mem 0x0000000000000000-0x0000000027ffffff]
 Initmem setup node 0 [mem 0x0000000000000000-0x0000000027ffffff]
 On node 0 totalpages: 163840
 free_area_init_node: node 0, pgdat c04ab378, node_mem_map e7af0000
   DMA zone: 1280 pages used for memmap
   DMA zone: 0 pages reserved
   DMA zone: 163840 pages, LIFO batch:31
 pcpu-alloc: s0 r0 d32768 u32768 alloc=1*32768
 pcpu-alloc: [0] 0
 Built 1 zonelists, mobility grouping on.  Total pages: 162560
 Kernel command line: root=/dev/sda6
 PID hash table entries: 4096 (order: 2, 16384 bytes)
 Dentry cache hash table entries: 131072 (order: 7, 524288 bytes)
 Inode-cache hash table entries: 65536 (order: 6, 262144 bytes)
 Memory: 636148K/655360K available (3760K kernel code, 172K rwdata, 724K rodata, 184K init, 349K bss, 19212K reserved, 0K cma-reserved)
 Kernel virtual memory layout:
   * 0xfffdf000..0xfffff000  : fixmap
   * 0xfd70f000..0xfe000000  : early ioremap
   * 0xe9000000..0xfd70f000  : vmalloc & ioremap
 SLUB: HWalign=32, Order=0-3, MinObjects=0, CPUs=1, Nodes=1
 NR_IRQS: 96, nr_irqs: 96, preallocated irqs: 16
 irq: Found primary Apple PIC /pci/mac-io for 64 irqs
 irq: System has 64 possible interrupts
 GMT Delta read from XPRAM: 0 minutes, DST: off
 time_init: decrementer frequency = 16.707883 MHz
 time_init: processor frequency   = 501.150000 MHz
 clocksource: timebase: mask: 0xffffffffffffffff max_cycles: 0x3da751e7c, max_idle_ns: 440795202974 ns
 clocksource: timebase mult[3bda1bd6] shift[24] registered
 clockevent: decrementer mult[446f7c3] shift[32] cpu[0]
 Console: colour dummy device 80x25
 console [tty0] enabled
 bootconsole [udbg0] disabled
 pid_max: default: 32768 minimum: 301
 Mount-cache hash table entries: 2048 (order: 1, 8192 bytes)
 Mountpoint-cache hash table entries: 2048 (order: 1, 8192 bytes)
 devtmpfs: initialized
 OF: Duplicate name in PowerPC,750, renamed to l2-cache#1
 OF: Duplicate name in mac-io, renamed to ide#1
 random: get_random_u32 called from bucket_table_alloc+0x94/0x1ec with crng_init=0
 clocksource: jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 19112604462750000 ns
 futex hash table entries: 256 (order: -1, 3072 bytes)
 prandom: seed boundary self test passed
 prandom: 100 self tests passed
 NET: Registered protocol family 16
 PCI: Probing PCI hardware
 PCI host bridge to bus 0000:00
 pci_bus 0000:00: root bus resource [io  0x0000-0x7fffff]
 pci_bus 0000:00: root bus resource [mem 0xfd000000-0xfdffffff] (bus address [0x00000000-0x00ffffff])
 pci_bus 0000:00: root bus resource [mem 0x80000000-0xfcffffff]
 pci_bus 0000:00: root bus resource [bus 00-ff]
 pci_bus 0000:00: busn_res: [bus 00-ff] end is updated to ff
 pci 0000:00:00.0: [1057:0002] type 00 class 0x060000
 pci 0000:00:0d.0: [10b7:9055] type 00 class 0x020000
 pci 0000:00:0d.0: reg 0x10: [io  0x0400-0x047f]
 pci 0000:00:0d.0: reg 0x14: [mem 0x81800000-0x8180007f]
 pci 0000:00:0d.0: reg 0x30: [mem 0x81820000-0x8183ffff pref]
 pci 0000:00:0d.0: supports D1 D2
 pci 0000:00:0d.0: PME# supported from D1 D2 D3hot
 pci 0000:00:0e.0: [9004:8178] type 00 class 0x010000
 pci 0000:00:0e.0: reg 0x10: [io  0x0000-0x00ff]
 pci 0000:00:0e.0: reg 0x14: [mem 0x81801000-0x81801fff]
 pci 0000:00:0e.0: reg 0x30: [mem 0x81810000-0x8181ffff pref]
 pci 0000:00:0f.0: [1095:3112] type 00 class 0x018000
 pci 0000:00:0f.0: reg 0x10: [io  0x04c0-0x04c7]
 pci 0000:00:0f.0: reg 0x14: [io  0x04b0-0x04b3]
 pci 0000:00:0f.0: reg 0x18: [io  0x04a0-0x04a7]
 pci 0000:00:0f.0: reg 0x1c: [io  0x0490-0x0493]
 pci 0000:00:0f.0: reg 0x20: [io  0x0480-0x048f]
 pci 0000:00:0f.0: reg 0x24: [mem 0x81802000-0x818021ff]
 pci 0000:00:0f.0: reg 0x30: [mem 0x81880000-0x818fffff pref]
 pci 0000:00:0f.0: supports D1 D2
 pci 0000:00:10.0: [106b:0010] type 00 class 0xff0000
 pci 0000:00:10.0: reg 0x10: [mem 0xf3000000-0xf307ffff]
 pci 0000:00:12.0: [1002:4754] type 00 class 0x030000
 pci 0000:00:12.0: reg 0x10: [mem 0x82000000-0x82ffffff]
 pci 0000:00:12.0: reg 0x14: [io  0x0400-0x04ff]
 pci 0000:00:12.0: reg 0x18: [mem 0xfd000000-0xfd000fff]
 pci 0000:00:12.0: reg 0x30: [mem 0xfd000000-0xfd01ffff pref]
 pci_bus 0000:00: busn_res: [bus 00-ff] end is updated to 00
 PCI: Cannot allocate resource region 1 of device 0000:00:12.0, will remap
 PCI 0000:00 Cannot reserve Legacy IO [io  0x0000-0x0fff]
 pci 0000:00:12.0: BAR 6: assigned [mem 0xfd000000-0xfd01ffff pref]
 pci 0000:00:12.0: BAR 2: assigned [mem 0xfd020000-0xfd020fff]
 pci 0000:00:0e.0: BAR 0: assigned [io  0x1000-0x10ff]
 pci 0000:00:12.0: BAR 1: assigned [io  0x1100-0x11ff]
 pci_bus 0000:00: resource 4 [io  0x0000-0x7fffff]
 pci_bus 0000:00: resource 5 [mem 0xfd000000-0xfdffffff]
 pci_bus 0000:00: resource 6 [mem 0x80000000-0xfcffffff]
 SCSI subsystem initialized

Here is the output for a 6400:

Using PowerMac machine description
Linux version (root@orbe) (gcc version 4.3.2 (Debian 4.3.2-1.1) ) #1 Sat Apr 11 11:03:35 CEST 2009
Found a OHare mac-io controller, rev: 1, mapped at 0xfdf00000
PowerMac motherboard: Alchemy
console [udbg0] enabled
Cache coherency enabled for bandit/PSX
Found Bandit PCI host bridge at 0x00000000f2000000. Firmware bus number: 0->1
PCI host bridge /bandit (primary) ranges:
 MEM 0x00000000f3000000..0x00000000f3ffffff -> 0x00000000f3000000
  IO 0x00000000f2000000..0x00000000f27fffff -> 0x0000000000000000
 MEM 0x0000000080000000..0x000000008fffffff -> 0x0000000080000000
Top of RAM: 0x8800000, Total RAM: 0x8800000
Memory hole size: 0MB
Zone PFN ranges:
  DMA      0x00000000 -> 0x00008800
  Normal   0x00008800 -> 0x00008800
Movable zone start PFN for each node
early_node_map[1] active PFN ranges
    0: 0x00000000 -> 0x00008800
On node 0 totalpages: 34816
free_area_init_node: node 0, pgdat c03f90cc, node_mem_map c087f000
  DMA zone: 272 pages used for memmap
  DMA zone: 0 pages reserved
  DMA zone: 34544 pages, LIFO batch:7
Built 1 zonelists in Zone order, mobility grouping on.  Total pages: 34544
Kernel command line: root=/dev/sda6 console=ttyS0,9600
irq: Found primary Apple PIC /bandit/ohare for 32 irqs
irq: System has 32 possible interrupts
PID hash table entries: 1024 (order: 10, 4096 bytes)
time_init: decrementer frequency = 10.000383 MHz
time_init: processor frequency   = 200.000000 MHz
clocksource: timebase mult[18ffc140] shift[22] registered
clockevent: decrementer mult[28f] shift[16] cpu[0]
Console: colour dummy device 80x25
console handover: boot [udbg0] -> real [ttyS0]
Dentry cache hash table entries: 32768 (order: 5, 131072 bytes)
Inode-cache hash table entries: 16384 (order: 4, 65536 bytes)
Memory: 129192k/139264k available (3904k kernel code, 9924k reserved, 172k data, 139k bss, 156k init)
Calibrating delay loop... 19.96 BogoMIPS (lpj=99840)
Mount-cache hash table entries: 512
device-tree: Duplicate name in /bandit/pci-bridge, renamed to "pcie11,b163#1"
net_namespace: 964 bytes
NET: Registered protocol family 16
PCI: Probing PCI hardware
pci 0000:00:0d.0: reg 10 io port: [0x2040-0x2047]
pci 0000:00:0d.0: reg 14 io port: [0x2030-0x2033]
pci 0000:00:0d.0: reg 18 io port: [0x2020-0x2027]
pci 0000:00:0d.0: reg 1c io port: [0x2010-0x2013]
pci 0000:00:0d.0: reg 20 io port: [0x2000-0x200f]
pci 0000:00:0d.0: reg 24 32bit mmio: [0x80b00000-0x80b001ff]
pci 0000:00:0d.0: reg 30 32bit mmio: [0x80b80000-0x80bfffff]
pci 0000:00:0d.0: supports D1 D2
pci 0000:00:10.0: reg 10 32bit mmio: [0xf3000000-0xf307ffff]
pci 0000:01:04.0: reg 10 32bit mmio: [0x80801000-0x80801fff]
pci 0000:01:04.0: reg 14 io port: [0x1040-0x107f]
pci 0000:01:04.0: reg 18 32bit mmio: [0x80a00000-0x80afffff]
pci 0000:01:04.0: supports D1 D2
pci 0000:01:04.0: PME# supported from D0 D1 D2 D3hot
pci 0000:01:04.0: PME# disabled
pci 0000:01:05.0: reg 10 32bit mmio: [0x80800000-0x80800fff]
pci 0000:01:05.0: reg 14 io port: [0x1000-0x103f]
pci 0000:01:05.0: reg 18 32bit mmio: [0x80900000-0x809fffff]
pci 0000:01:05.0: supports D1 D2
pci 0000:01:05.0: PME# supported from D0 D1 D2 D3hot
pci 0000:01:05.0: PME# disabled
pci 0000:00:0e.0: bridge io port: [0x1000-0x1fff]
pci 0000:00:0e.0: bridge 32bit mmio: [0x80800000-0x80afffff]
pci 0000:00:0e.0: PCI bridge, secondary bus 0000:01
pci 0000:00:0e.0:   IO window: 0x1000-0x1fff
pci 0000:00:0e.0:   MEM window: 0x80800000-0x80afffff
pci 0000:00:0e.0:   PREFETCH window: disabled
pci_bus 0000:00: resource 0 io:  [0x00-0x7fffff]
pci_bus 0000:00: resource 1 mem: [0xf3000000-0xf3ffffff]
pci_bus 0000:00: resource 2 mem: [0x80000000-0x8fffffff]
pci_bus 0000:01: resource 0 io:  [0x1000-0x1fff]
pci_bus 0000:01: resource 1 mem: [0x80800000-0x80afffff]
pci_bus 0000:01: resource 2 mem: [0x0-0x0]
pci_bus 0000:01: resource 3 mem: [0x0-0x0]
Registering pmac pic with sysfs...
bio: create slab <bio-0> at 0
SCSI subsystem initialized

It seems pretty similar to what you would expect from a PCI Mac. I'm sure x500 Macs are similar
Random guesses: ROM is 0x0, RAM is 0x80000000, IO is on top (fd000000+)