Become a MacRumors Supporter for $50/year with no ads, ability to filter front page stories, and private forums.
Status
The first post of this thread is a WikiPost and can be edited by anyone with the appropiate permissions. Your edits will be public.
The problem is not the OS. Old World Macs don't have firmware that know how to boot from HFS+.
...so it’s important for Old World. But has no influence on XPF's helper disk function to help New World Macs to boot of AHCI devices. That was basically what i was trying to say. Sorry for expressing missleadingly.

So in the end, no need or point to do any of this in a G5 running Leo?
 
...so it’s important for Old World. But has no influence on XPF's helper disk function to help New World Macs to boot of AHCI devices. That was basically what i was trying to say. Sorry for expressing missleadingly.

So in the end, no need or point to do any of this in a G5 running Leo?
Correct. No need of wrapper for New World Mac.

How hard is it to make a block driver for Mac OS X Tiger or Leopard? Find some AHCI code in UEFI source code or Linux source code then port it to a kext?

Do the same for NVMe (it's been done before but the source code was not released).
 
  • Like
Reactions: Amethyst1
How hard is it to make a block driver for Mac OS X Tiger or Leopard? Find some AHCI code in UEFI source code or Linux source code then port it to a kext?
Sounds very "hard" to me! Or at least far beyond my very limited skills in this concern... 😭
 
Added 512MB BAR patch for Open Firmware 2.0.3 (Power Mac 5500, 6500, and TAM)

It includes a patch that changes the order of PCI slot probing. It probes the ATI GPU (device @12) last instead of first. This fixes a problem where Open Firmware would not probe devices behind a PCI bridge (e.g. the USB and FireWire and ATA controllers of a Sonnet Tempo Trio). The patch should work with any such PCI card (the patches from Sonnet only worked with specific Sonnet cards). See #232
 
Yes. It looks like every rom does it slightly differently. I find the parts (one for early new world Macs, multiple for later new world starting from G4 MDD) using offset and length in the header, extract the parts, use a lzss command compiled from Apple Open Source code to do the decompression, catenate the parts together (if there's more than one), then pass it through my DumpMacRom.sh script for disassembly of the precompiled part, detokeniing for the fcode images, and converting the detokenized fcode images to forth.
I catenate the parts together because some of the fcode images may use words defined in other fcode images. My detokenzer goes through all the fcode images and remembers words from each.
Do you have any additional info on extracting these FCode images from a Mac's BootROM? I'd like to extract the FCode ROMs for some onboard video cards of some machines, as well as see if it's possible to modify the necessary (SPD?) data in, say, an iMac G3 slot-loading BootROM, to get it to detect larger L2 cache chips being installed. This is normally done by way of modifying a small I2C EEPROM on machines with removable CPU cards, but in the iMac G3 slot-loader, the CPU/L2 cache chips are on the main board, and the L2 cache ratio and capacity data is hard-coded in the BootROM.
 
Do you have any additional info on extracting these FCode images from a Mac's BootROM? I'd like to extract the FCode ROMs for some onboard video cards of some machines, as well as see if it's possible to modify the necessary (SPD?) data in, say, an iMac G3 slot-loading BootROM, to get it to detect larger L2 cache chips being installed. This is normally done by way of modifying a small I2C EEPROM on machines with removable CPU cards, but in the iMac G3 slot-loader, the CPU/L2 cache chips are on the main board, and the L2 cache ratio and capacity data is hard-coded in the BootROM.
Is your iMac G3 slot-loader rom listed in the "List of Open Firmware versions" spoiler of #1 ? If not, then I wouldn't mind getting a dump to look at.

Is the L2 cache ratio and capacity data in the Open Firmware part of the rom or in the HWInit part (which happens before Open Firmware)? I see there's a l2-cache-props word that sets up some properties depending on the CPU and whatever is in the L2CR register. This is used by make-cpu-properties.

For Old World ROMs, the fcode images are not compressed and exist in ROM where byte_load_file can load them. My detok command handles all the fcode images in that case.
I've posted my commands at https://www.dropbox.com/s/t1zkywm7cc1dc45/JoesOpenBIOSStuff.zip?dl=0
detok is used by DumpPCIRom.sh which can dump an individual fcode image or a PCI rom that includes an fcode image. It is also used by DumpMacRom.sh which works with the Open Firmware part of a Mac ROM and dumps assembly part of Open Firmware and the fcode images (the result of detok is converted to Forth using a perl script).

For New World ROMs, you have to get the ROM, extract the fcode images individually, decompress them, then concatenate the parts together for my DumpMacRom.sh command to disassemble, detokenize, and convert to Forth. Instructions for getting the New World ROM are in the first post in the "nvramrc Patches for PowerPC Macs to support GPUs up to 512MB" spoiler which directs you to #137
I've posted the New World ROMs at https://www.dropbox.com/s/8v2nhupgcx7t4uw/NewWorldROMs.zip?dl=0

In my detok command, the decode.cpp source file contains functions decode_rom_token2, decode_rom_token203, and decode_rom_token3 which detect the start of a new fcode image in an Old World ROM or a decompressed and concatenated New World ROM. These functions mostly ignore the structures that byte_load_file uses because byte_load_file looks at fcode images starting from the last image, while detok looks at fcode images in order). The functions just look for bytes that may indicate the start of another fcode image or they skip bytes that are probably not the start of another fcode image.

I've posted Open Firmware dumps at https://www.dropbox.com/s/ya5gfv67eqvrwil/ROMDumps.zip?dl=0
A dump consists of Part1.txt which is the compiled part of Open Firmware, and Part2.of which is the fcode images of Open Firmware converted to Forth. Each fcode image starts with \ detokenizing start at offset ........ and ends with \ detokenizing finished after ...... of ...... bytes.. These comments exist in both Part1.txt and Part2.of. You can see the bytes that precede each fcode image in Part1.txt. Part1.txt does't include the fcode and Part2.of doesn't include the bytes that surround the fcode.

Thinking about this a bit more, it seems to me you could look at how byte_load_file works. For Old World Macs, check the dump for "ROM PM G3". This contains Open Firmware 2.4 which is useful because it includes all the names for the words. For New World Macs, "ROM Quad G5" is the latest (that I have) and also has all the names. The byte_load_file code starts with the last fcode image in the rom (pointed to by the >fcfiles field of the @startvec structure). It compares the vendor/product ID (>of.dev-ven) and/or class code/fcode image# (>of.class) of an fcode image structure. if it matches, then it executes the fcode image, otherwise it goes to the next fcode image (>of.offset is a negative offset). You can create a word to list these images by looping through them like byte_load_file does. You can dump the bytes of the fcode images so that you can detokenize / convert to Forth using my DumpPCIRom.sh script. To determine the length of an fcode image, you could use the address of the fcode structure of the following fcode image (by address) as the end address, or you can parse the length from the start of the fcode image (but only if the start has fcode-version2 or similar).

The >fcfiles chain does not include the main fcode image. It exists separately before the first fcode-image by address of the >fcfiles chain (or last fcode-image by link) and after the assembly part of Open Firmware (after cold-load in Part1.txt). The main fcode image is pointed to by the >fcimage field of the @startvec structure. The attached file "OF 2.4 list of fcode images.txt" is the end of Part1.txt showing the parsed values for the fcode-image chain. The dumps of the main fcode image and the fcode images of the chain are in Part2.of.

Open Firmware startup:
cold-load is executed, which loads the main fcode image pointed to by >fcimage, which builds the device tree (including cpus) and compiles all the words. Then cold-load calls cold-init which does the nvramrc and probe-all then one of reset-nvram, diagnostic-boot, target-mode, Open Firmware UI, multi-boot, boot-command, or boot.
Some versions of Open Firmware have .time-stamps and .time-stamps\ words that will output a log of what happened during Open Firmware startup. I've never tried them before. Some versions of Open Firmware have the time-stamps info but don't have the words to dump the info. I suppose you could copy those words from another version of Open Firmware.

To find the fcode image for built-in GPU:
You would perform the same analysis for the ROM you are working with as I did in "OF 2.4 list of fcode images.txt". Find at the end of Part1.txt an fcode image structure that matches the graphics controller. ATI GPUs have a vendor of 1002 and maybe a class code of 03:00:00 like in this example:
Code:
0269CC: FFFF D8C0    ; >of.next                
0269D0: 4750 1002    ; >of.dev-ven                00:12.0 VGA compatible controller [0300]: Advanced Micro Devices, Inc. [AMD/ATI] 3D Rage Pro PCI [1002:4750] (rev 5c) (prog-if 00 [VGA controller])
0269D4: 0003 0000    ; >of.class                  VGA compatible controller : VGA controller
        0000 0010    ; >of.offset
                     ; >of.fcode      
0269DC: \ detokenizing start at offset 0269DC
028C84: \ detokenizing finished after 8872 of 8872 bytes.

Included in the Open Firmware dumps is a BBEdit worksheet which contains the commands for creating the Open Firmware dumps. In "ROM iMac.worksheet", you start with the "Divide the ROM" section.

First it divides the entire New World ROM into 5 parts: the start part, two copies of nvram, a rom image part, and a recovery part which is mostly a copy of the rom image part.
@FFF00000 len-4000 Start.rom
@FFF04000 len-2000 Nvram1.rom
@FFF06000 len-2000 Nvram2.rom
@FFF08000 len-78000 Recovery.rom
@FFF80000 len-80000 Rom Image.rom

Next it decompresses the Recovery and Rom Image parts. The decompressrom function gets the start and length of each part from offset 0x20 and 0x24. It uses lzss to decompress the parts. https://www.dropbox.com/s/v93d0o3k9wc5b32/joevt-lzss.zip?dl=0
The only reason to do both the Recovery and Rom Image parts is to compare them to see if any interesting differences exist.

The iMac only has one decompression step. Things get more complicated with later Open Firmware versions such as for the G4 FW 800. it has multiple compressed parts (one per fcode image). In this case, they are concatenated together so my detok can parse them like older Open Firmware versions. Even later Open Firmware versions such as for the G5 or iBook G4 give each compressed part a name. What I haven't done is compare my concatenated New World ROMs with what byte_load_file sees but at least my detok can parse the concatenated New World ROMs.

Back to the "ROM iMac.worksheet", once the ROM parts are decompressed and concatenated together (if there's more than one part), you can go up to the "Dump ROM" section to use the DumpMacRom.sh script to disassemble, detokenize, and convert to Forth the created decompressed rom. All the files are generated in the Dump directory. The two important files are Part1.txt and Part2.of. The other files are logs and statistics, not really errors.
 

Attachments

  • OF 2.4 list of fcode images.txt
    5.6 KB · Views: 123
joevt, thanks for all of your work on this subject. Your posts are informative and a great contribution to the forum, but could your tools and files be posted or mirrored someplace accessible? Those URL links only load a blank page on my computer, even if I let it run 150+ scripts. I'm interested in looking at some of this on my own using your software, but when the first step to tinker with an older computer is to "Go rent a new computer..." then the endeavor is already finished for me.
 
It is, there was a windows tool made for nVidia's board partners for the GeForce2 that could edit all the properties of the BMP, but I never had a copy of it, Arti did, and I just never asked for it as it didn't work for later cards.

I assume such a tool exists for the laters cards, just it's never been leaked.

Closest thing to open source tools I know was nvclock, sadly Thunderbird who wrote it has gone off the grid like Atri,gotch, and Aquamac.

If we could dump the properties of the BMP on x86 and compare them to PPC we could likely have a go at the Die Shrink cards based on the G7x, but I don't know of any tools that can dump that the way we can dump properties OF builds in the Device-Tree.
I happen to have a G71 based Gainward BLISS card I'd be willing to work with/send out if someone thinks they have the passion to create a ROM for it after all these years. Bought it hoping it was a G70 a while back.
 
I happen to have a G71 based Gainward BLISS card I'd be willing to work with/send out if someone thinks they have the passion to create a ROM for it after all these years. Bought it hoping it was a G70 a while back.
Sadly G71 is NoGo in Powermacs. No one ever got one to work...

...not to mention the beige G3, which is the topic here. 😉
 
not so(entirely) true , 7800GS+ has G71 gpu on AGP + bridge , that works... (on G5 ) but that's it.
Sorry, but i think you are wrong in this case.

If you are talking about the famous Gainward Bliss 512MB, there where two of them: One with a G70 (which i used for years and still own, sadly broken now). And another with a G71, which did not work in Powermacs, as there has never been an FCode-Rom for this generation.

All the „more modern“ AGP-GPUs like the 6600GT and 7800GS used these PCIe-AGP-bridges. But that did not get the G71 to work in PPC-Macs.
 
Sorry, but i think you are wrong in this case.

If you are talking about the famous Gainward Bliss 512MB, there where two of them: One with a G70 (which i used for years and still own, sadly broken now). And another with a G71, which did not work in Powermacs, as there has never been an FCode-Rom for this generation.

All the „more modern“ AGP-GPUs like the 6600GT and 7800GS used these PCIe-AGP-bridges. But that did not get the G71 to work in PPC-Macs.
I will check my 7800GS Leadtek to be 100% sure or not. (most were G71)
 
New World Mac ROM grabber at #42 . The attachment has a command "get-new-world-rom.command" that you can double-click to save a copy of the Mac's ROM. The macrom.bin file is saved to the same folder. Tested on my B&W G3 with G4 upgrade.

flashrom itself can grab the ROM of PCI cards (unless the PCI card's firmware or driver has somehow disabled reading the ROM).
 
  • Like
Reactions: pc297 and dosdude1
New World Mac ROM grabber at #42 . The attachment has a command "get-new-world-rom.command" that you can double-click to save a copy of the Mac's ROM. The macrom.bin file is saved to the same folder. Tested on my B&W G3 with G4 upgrade.

flashrom itself can grab the ROM of PCI cards (unless the PCI card's firmware or driver has somehow disabled reading the ROM).

interesting! ill have to give that a try at some point, I am curious can it also do write operations? if I put the machine into programmer mode to unlock read protection on the BootROM can it flash a ROM back?
 
  • Like
Reactions: eastone
interesting! ill have to give that a try at some point, I am curious can it also do write operations? if I put the machine into programmer mode to unlock read protection on the BootROM can it flash a ROM back?
My flashrom anymem programmer only does memory mapping of the Mac's ROM. This method of accessing the Mac ROM doesn't require programmer mode. No write access that way.

My flashrom anypci programmer only does memory mapping of a specified PCI card's option ROM so there's no write access.

flashrom has programmers that can do writing to some PCI option ROMs such as the satasii programmer which can work in macOS.
https://flashrom.org/classic_cli_manpage.html

@dosdude1 has a linux version of flashrom that can do Mac ROM programming in Linux on some Power Macs. I don't know if it's just a re-compiled version or if he had to add some new code. You have to boot into programmer mode for it to work. I don't know why it doesn't work with some Power Macs such as the Pismo.

I think motherboard flashrom detection and writing is done by the internal programmer. I tried adding that to ppc darwin flashrom but it causes a hang so I'm looking into how that works and what needs to be added.
 
interesting, yeah the PPC Linux one was something me and Colin worked on, to just be able to dump and write PPC Mac BootROM's in some fashion, during the early days of 7448 upgrading etc

but it only supports the later 1MB EEPROM's apple used in later G4's and G5's, earlier sorts used in the Pismo etc are not supported sadly

but I think it would be pretty easy to add, they are all still simple parallel TSOP flash, its just the specific definitions,

I had found some work, some Linux guys did many years ago trying to get flashrom to work on their Mac Mini G4, and once I passed this onto @dosdude1 he was able to polish it off so to speak/compile it into a more modern version of flashrom :)


I think it might been from here I found the initial patches/code so to speak

 
interesting, yeah the PPC Linux one was something me and Colin worked on, to just be able to dump and write PPC Mac BootROM's in some fashion, during the early days of 7448 upgrading etc

but it only supports the later 1MB EEPROM's apple used in later G4's and G5's, earlier sorts used in the Pismo etc are not supported sadly

but I think it would be pretty easy to add, they are all still simple parallel TSOP flash, its just the specific definitions,

I had found some work, some Linux guys did many years ago trying to get flashrom to work on their Mac Mini G4, and once I passed this onto @dosdude1 he was able to polish it off so to speak/compile it into a more modern version of flashrom :)


I think it might been from here I found the initial patches/code so to speak

If it just needs more EEPROM support added, that is easy. That's what I had to do initially to add the compatibility it has currently.
 
  • Like
Reactions: LightBulbFun
sudo ./flashrom -L
Lists the supported flash chips and chipsets.
Darwin PPC doesn't have supported chipsets.

The basic probing command is sudo ./flashrom -p internal
It loops through all the supported flash chips, starting with "Am29F002(N)BB", probing certain memory locations to determine if that flash chip exists.
You can use -c LH28F008BJT-BTLZ1 to probe for only that flash chip type.

Probing maps physical memory with the size of the flash at the end of the 4GB address space. Then certain ID bytes in the range are written and read.
The memory location used can be overriden by changing flashbase. You might want to do this in processor_enable.c or chipset_enable.c or board_enable.c but you would probably want a method that uses ioreg info instead of pci info.

"Am29F002(N)BB" is 256K so a memory range is mapped at 0xFFFC0000. This flash chip uses the PROBE_JEDEC probing method which calls probe_jedec. This calls chip_writeb which eventually calls mmio_writeb. This hangs on my B&W G3 but maybe this probing doesn't hang on newer Power Macs such as the ones that work with the Linux version of flashrom? I have not tried the Linux version of flashrom.

I don't know if I have to change the call to withPhysicalAddress in DirectHW.cpp to add DirectionOut. Changing it doesn't help my B&W G3.

The methods for flashing B&W G3 ROM can be determined by looking at the Open Firmware Forth code included in the "G3 Firmware" file of the "G3 Firmware Update 1.1" disk image. It has to do stuff like change some registers of the MPC106 grackle device to enable rom writes. One of the registers indicates if flashing is allowed. Another register indicates if 8-bit accesses should be used which affects the base address that is used to access the flash. It has to determine what kind of flash is used (micron, atmel, amd, sharp, intel-4m, AMD-4M). It changes the msr in a couple places. The grackle register handling should probably be added to a B&W G3 board handler in board_enable.c. The B&W G3 ROM is 1 MB like all new world Macs, but the flash may be accessed using addresses that are 8MB from the end of 32-bit address space.

I don't think I'll be making any more changes because I don't want to mess with my B&W G3 ROM at this time. I've linked my latest build of flashrom in case anyone wants to test if the internal programmer can probe their Power Mac without hanging.

flashrom for 10.3 to 10.5 at https://forums.macrumors.com/thread...the-fruit-colored-imacs.2428418/post-33206738
 
Last edited:
Am29F002(N)BB" is 256K so a memory range is mapped at 0xFFFC0000.
Slightly off-topic, do you by any chance know the address at which VBIOS get mapped on ppc systems, if at all, and if this is a constant address? I have been trying to port osx86-driver-radeonhd to ppc from x86 (itself forked and ported from the Linux driver) but realised that it looks for VBIOS at legacy Intel addresses, and the only around it I can think of so far is to read roms from file as is done on the linux ppc driver, but this involves identifying the card first and getting the right ROM.

I guess I could read the address from PCI config space as suggested by @DearthnVader but I don't know how to do that, but if that address is fixed I could change it from 0xC0000 (Intel shadow memory) to whatever it is, it would be easier

 
Slightly off-topic, do you by any chance know the address at which VBIOS get mapped on ppc systems, if at all, and if this is a constant address? I have been trying to port osx86-driver-radeonhd to ppc from x86 (itself forked and ported from the Linux driver) but realised that it looks for VBIOS at legacy Intel addresses, and the only around it I can think of so far is to read roms from file as is done on the linux ppc driver, but this involves identifying the card first and getting the right ROM.

I guess I could read the address from PCI config space as suggested by @DearthnVader but I don't know how to do that, but if that address is fixed I could change it from 0xC0000 (Intel shadow memory) to whatever it is, it would be easier

You want to use a non-Mac VGA card that doesn't have an Open Firmware driver in a Power Mac?

Does osx86-driver-radeonhd not depend on initialization code performed by a BIOS or EFI driver?

Power Macs use Open Firmware, not BIOS, so it's not going to copy the VBIOS to 0xc0000.

Is the Radeon driver using VGA registers or Radeon registers? I don't think you can do VGA on Power Macs.
https://wiki.osdev.org/VGA_Hardware
https://wiki.osdev.org/Memory_Map_(x86)
I think Port I/O works but MMIO probably doesn't. You can't map the first 1MB of memory of a Power Mac to PCI so you can't access the VGA frame buffer at 0xa0000-0xbffff. If you can't map the first 1MB of memory, maybe the range can be accessed through a PCI BAR? That way you could use a standard VGA driver with only modifications to the frame address.

To read the option ROM in a kext, map the ROM BAR, set the PCI device's memory enable bit, set the the ROM BAR's enable bit, then use the virtual address to read bytes from the ROM.
Code:
                // provider is the IOPCIDevice for this driver
                memoryMap = provider->mapDeviceMemoryWithRegister(kIOPCIConfigExpansionROMBase);
                if (memoryMap != 0)
                {
                    virtAddr = memoryMap->getVirtualAddress();
                    provider->setMemoryEnable(true);
                    expRomReg = provider->configRead32(kIOPCIConfigExpansionROMBase);
                    provider->configWrite32(kIOPCIConfigExpansionROMBase, expRomReg | 1);

                   ... read rom at virtAddr

                    provider->configWrite32(kIOPCIConfigExpansionROMBase, expRomReg);

                    provider->setMemoryEnable(false); // only do this if it wasn't enabled in the first place.

                    memoryMap->release();
                }

You probably need to parse the option ROM to find the BIOS image that would get loaded to 0xc0000.
 
  • Like
Reactions: pc297
T
You want to use a non-Mac VGA card that doesn't have an Open Firmware driver in a Power Mac?

Does osx86-driver-radeonhd not depend on initialization code performed by a BIOS or EFI driver?

Power Macs use Open Firmware, not BIOS, so it's not going to copy the VBIOS to 0xc0000.

Is the Radeon driver using VGA registers or Radeon registers? I don't think you can do VGA on Power Macs.
https://wiki.osdev.org/VGA_Hardware
https://wiki.osdev.org/Memory_Map_(x86)
I think Port I/O works but MMIO probably doesn't. You can't map the first 1MB of memory of a Power Mac to PCI so you can't access the VGA frame buffer at 0xa0000-0xbffff. If you can't map the first 1MB of memory, maybe the range can be accessed through a PCI BAR? That way you could use a standard VGA driver with only modifications to the frame address.

To read the option ROM in a kext, map the ROM BAR, set the PCI device's memory enable bit, set the the ROM BAR's enable bit, then use the virtual address to read bytes from the ROM.
Code:
                // provider is the IOPCIDevice for this driver
                memoryMap = provider->mapDeviceMemoryWithRegister(kIOPCIConfigExpansionROMBase);
                if (memoryMap != 0)
                {
                    virtAddr = memoryMap->getVirtualAddress();
                    provider->setMemoryEnable(true);
                    expRomReg = provider->configRead32(kIOPCIConfigExpansionROMBase);
                    provider->configWrite32(kIOPCIConfigExpansionROMBase, expRomReg | 1);

                   ... read rom at virtAddr

                    provider->configWrite32(kIOPCIConfigExpansionROMBase, expRomReg);

                    provider->setMemoryEnable(false); // only do this if it wasn't enabled in the first place.

                    memoryMap->release();
                }

You probably need to parse the option ROM to find the BIOS image that would get loaded to 0xc0000.
Thanks, the linux ppc radeon driver doesn't seem to depend on OF AFAIK. Initialisation is done way after in the boot process under e.g. debian ppc, hence one still needs another card with an FCode rom for the boot menus, the radeon comes online as linux boots.

I guess I need to find the code in the Linux ppc radeon driver that initialises radeon vga cards and copy it over to the mac osx86 port or find it in there (there are some ppc-specific methods that were likely carried over from the linux driver but they are not called in the osx86 port), but I will try the pci BAR as you suggested!
 
Compressed (64KB) 7800 GT ROM at #4
Fixed and tested in Quad G5 (includes compressed 64KB and uncompressed 128KB ROMs): #28
 
Last edited:
  • Like
Reactions: LightBulbFun
I've attached my latest build of flashrom in case anyone wants to test if the internal programmer can probe their Power Mac without hanging.
Tested on my Quad G5. The internal and anymem flashrom programmers can both extract the ROM but the internal programmer requires booting the Quad G5 into programmer mode (hold power button on boot until it restarts - it restarts into Open Firmware where you can type bye to continue booting into Mac OS X Leopard).
The log says:
Code:
Found Sharp flash chip "LH28F008BJT-BTLZ1" (1024 kB, Parallel).
That's the same chip as the B&W G3 but the Quad G5 doesn't require extra setup to access the flash which causes the B&W G3 to hang.
 
Last edited:
  • Like
Reactions: LightBulbFun
Tested on my Quad G5. The internal and anymem flashrom programmers can both extract the ROM but the internal programmer requires booting the Quad G5 into programmer mode (hold power button on boot until it restarts - it restarts into Open Firmware where you can type bye to continue booting into Mac OS X Leopard).
The log says:
Code:
Found Sharp flash chip "LH28F008BJT-BTLZ1" (1024 kB, Parallel).
That's the same chip as the B&W G3 but the Quad G5 doesn't require extra setup to access the flash which causes the B&W G3 to hang.
very cool! have you tried also putting the PowerMac G3 into programmer mode to see if it behaves itself better in that mode? (you push and hold down the interrupt switch until you hear a tone IIRC)
 
Register on MacRumors! This sidebar will go away, and you'll see fewer ads.