So I decided a better idea was to keep the OpenBIOS ROM where it is and then instead use the location 0x06800000 for the memory allocations so that the 0x4000 block doesn't get smashed. It was far more feasible than moving where the ROM is stored, and I don't think anything cares about the contents of 0x06800000 to 06FFFFFF anyway.
Also, the reason I was getting "invalid opcode" was because Open Hack'Ware's XCOFF loader didn't take into account some other unknown variable which PearPC accounted for. I added the necessary code to make that work.
So now instead of an invalid opcode, we get this (which I don't know how to debug. it looks like a Forth exception):
Alcarin:qemu steven$ make -C ppc-softmmu && ppc-softmmu/qemu-system-ppc -L pc-bios -cdrom ~/Development/MacOSX-10.4.iso -boot d -M mac99 -nographic make: Nothing to be done for `all'.
============================================================= OpenBIOS 1.0 [Apr 20 2009 03:23] Configuration device id QEMU version 1 machine id 1 CPUs: 1 Memory: 128M UUID: 00000000-0000-0000-0000-000000000000 CPU type PowerPC,G4
Welcome to OpenBIOS v1.0 built on Apr 20 2009 03:23
YABOOT - yaboot_startup: Entering boot, no path CHRP - try_chrp_script: Trying cd:0,ppc\bootinfo.txt MAC-PARTS: macparts_probe 4552 ?= 4552 MAC-PARTS: macparts_open 0 MAC-PARTS: macparts_get_info 0 2832209920 MAC-PARTS: macparts_block_size = 200 ELF - try_chrp_script: Can't open cd:0,ppc\bootinfo.txt CHRP - try_chrp_script: Trying cd:0,System\Library\CoreServices\BootX MAC-PARTS: macparts_probe 4552 ?= 4552 MAC-PARTS: macparts_open 0 MAC-PARTS: macparts_get_info 0 2832209920 MAC-PARTS: macparts_block_size = 200 CHRP - try_chrp_script: got bootscript load-base begin dup 6 " </CHRP" $= if 6 + dup 6 " -BOOT>" $= if 8 + true else false then else 1+ false then until ( xcoff-base ) load-size over load-base - - ( xcoff-base xcoff-size ) load-base swap move init-program go
ELF - encode_bootpath: bootpath cd:0,<NULL>\ bootargs <NULL>
$=:>> XCOFF - load_xcoff: Loading 'System\Library\CoreServices\BootX'
XCOFF - load_xcoff: XCOFF file with 3 sections entry:05616ecc XCOFF - load_xcoff: Read next header (5c) XCOFF - load_xcoff: Load '.text' section from 5c d4 to 5600000 (28000) XCOFF - load_xcoff: Found entry point offset in '.text': 94112 XCOFF - load_xcoff: Read next header (84) XCOFF - load_xcoff: Load '.data' section from 84 280d4 to 5628000 (2000) XCOFF - load_xcoff: Read next header (ac) XCOFF - load_xcoff: Erase '.bss' section at 562a000 size: 3a000 XCOFF - load_xcoff: Found actual entry point: 05600adc ELF - transfer_control_to_elf: Starting ELF boot loader
unselect-dev:interpret: exception -13 caught EXIT 0 > Killed
Any ideas?
- Steven