Old World Macs
Architectural Considerations for Operating Systems on Old World Apple HardwareDuring research into getting OpenBSD working on Old World Macs, several issues were identified. Most prominent of those were related to Open Firmware, but also there were differences in the first generation PCI Macs wh ich used Host/PCI Bridges instead of PCI-PCI Bridges and the use of the "vci" node which behaved much like a PCI node with some differences. There are three discussions available, originally posted to the OpenBSD ppc mailing list:
The code discussed in the posts is one of three places:
./code, ../bootloader/code, and ../PowerPC/code/L2Config.c.
There are also comments in the code itself. Additional discussion of the bootloader is available here.
One issue not discussed in the posts above is that contiguousness of the kernel image file is absolutely required for Old World Macs using MSDOS partitions during booting. This is because Old World Open Firmware does not contain any true MSDOS file system and is merely a raw block device reader. If you are getting odd or unusual freezes or OF exceptions (DSI or ISI) during booting, examine the byte size and block size of the kernel file. A block size (end block address minus start block address) that calc ulates out to be larger than the byte size indicates a non-contiguous file.
An operational OpenBSD 3.5-release RAMDISK-based shell that will run on Old World Macs is available at ./code/bsdOWc.rd. This kernel has been heavily tested on Open Firmware 1.0.5 and should work with newer Open Firmware Macs. It has no mesh, esp, or mace support, but will operate from either a serial console or the local monitor and keyboard, if that keyboard is ADB based (there is also no USB support in it). The files available in the "./code directory ca n be used to create a GENERIC kernel over NFS, if that kernel has an Ethernet driver compatible with a third party Ethernet card installed. All of the common code has been successfully tested on a AGP G4 running 3.5 GENERIC, which is to be expected as the code relates only to the hardware attachment layer and not in the kernel itself.