Become a MacRumors Supporter for $50/year with no ads, ability to filter front page stories, and private forums.

dosdude1

macrumors 68030
Original poster
Feb 16, 2012
2,841
7,558
For years now, myself and many others have made attempts to upgrade soldered RAM on PowerPC-based Macs, without any success. As I've found from my vast experience doing such upgrades on Intel machines, just swapping the chips is not all that needs to be done; the system's BootROM also has to be modified in such a way that it actually knows the memory configuration that is installed, in lieu of having the SPD, or "Serial Presence Detect" EEPROM that is present on all removable DIMM memory modules. On Intel systems, this was easy to figure out, as the Intel system BIOS is designed to load hard-coded entries of data in the exact same format as it would be found on the SPD EEPROM of a memory module. On PowerPC Macs, however, they have a completely custom config entry format that describes the soldered memory configuration, as well as a lot of other configuration options of the machine, which I was finally able to figure out all thanks to @LightBulbFun's discovery of this "Boot Flash System Configuration Block" document he was somehow able to find (attached). With that, I was able to edit the data appropriately to successfully upgrade the onboard RAM of a 1st gen iBook G3 Clamshell from 64MB to 128MB! Below, I will describe the exact process, which should apply to any PowerPC Mac with soldered RAM.

Upgrading the actual hardware

When choosing new chips to install, you must be aware of the following:
  • The data width (8-bit, 16-bit, 32-bit) of the new chips must match that of the originals (this can be determined by the respective datasheets).
  • The number of required address lines on larger memory chips will likely be increased. You must make sure that the target board actually has these extra lines routed out; you can check using a multimeter in diode mode. In this example I am not actually increasing the chip density, but adding 4 extra chips omitted from the factory, though in most cases this won't be the case.
    • In some cases, if your board doesn't have the address lines needed for larger density chips routed, you may be able to bodge them out from another chip or location on the board using wire, though I won't be covering this here.
  • You must ensure the memory config you choose is actually supported by the platform you're working with.
  • The footprint/package of the new chips must match that of the originals (otherwise you couldn't even solder them onto the board).
  • All installed memory chips must match in specification, though the manufacturer doesn't matter (you can mix and match whatever chips you want as long as their specs match).
Once you have determined and obtained the desired chips, all you have to do is solder them on. In the case of the Clamshell iBook here, since I am adding an additional 4 chips, I had to add some decoupling capacitors that were also omitted. I ended up finding a PC-100 SO-DIMM module I had laying around to pull the new chips from, so I just used the capacitors from that as well. I ended up adding 4x 128Mbit 16-bit memory chips to the original 4x 128Mbit 16-bit chips. I should note that this particular board did NOT have any extra address lines routed (only the 12 needed for 128Mbit chips), so bodging would be required to use larger density chips here.

IMG_4030.JPG IMG_4031.JPG

Once you solder everything on, boot the machine as-is and make sure it works. It will not detect any more memory than it had originally at this point, but should still boot and work just fine. If it fails to boot, you have a soldering issue (or bad/incompatible chip(s)), which needs to be resolved before continuing.

Making the BootROM modifications

If all has gone well so far, now is the final part of the process that makes all your soldering work worth it; actually getting the machine to detect all the memory you installed.

Dumping EEPROM

To begin, the first thing you need to do is get a clean dump of your machine's BootROM. There are two ways to do this; either desolder and dump your system's EEPROM externally using an EEPROM programmer, or boot Linux on the machine and use Flashrom to dump the EEPROM. Be aware that to do this, you must ensure the machine is booted into firmware programming mode (hold power button at boot until power LED starts flashing), otherwise the EEPROM will not be exposed to the OS. The correct command to dump a BootROM with Flashrom is:
Code:
flashrom -p internal -r backup.bin

Modifying content

Once you obtain a dump of your machine's BootROM, open it in a hex editor of your choice. Following the attached document, you need to start by searching for the "signature" hex value, which is C99C. There may be multiple entries of this value, but the correct one is easy to spot, and will be right before the NVRAM section (which is denoted by "nvram" in ASCII, so it is easy to spot.)

Screen Shot 2025-07-27 at 10.44.15 PM.png
Going back to the document once again, you need to locate the memory configuration section of this block. It is located at offset 0x50, or 80 bytes from the first 0xC9 (which is considered offset 0, you can copy and paste the whole section (0x100 or 256 bytes) to a new document for easier parsing). From the datasheet for your new chips, you need to determine the following values:
  • Number of row addresses
  • Number of column addresses
  • Number of banks on SDRAM device
You can determine each of these values from the datasheet for your new chips, which is normally laid out as shown here:

Screen Shot 2025-07-27 at 10.54.47 PM.png Screen Shot 2025-07-27 at 11.00.42 PM.png
These values are just set as raw hex values, so for the 128Mbit chips here, that looks like the following:

Screen Shot 2025-07-27 at 11.03.42 PM.png


0x0C = 12 row addresses, 0x09 = 9 column addresses, 0x04 = 4 banks on SDRAM device.

If you are adding another set of chips, like in the case of this iBook, there is one more value that needs to be updated, "Number of soldered memory controller banks". This is just a raw hex value once again, located at offet 0x5C, and in my case I simply had to change this from 0x01 to 0x02 (to singnify the added 4 chips (or "bank") of memory). If you are not adding chips, this value should not be altered.

Updating checksum

The last modification that has to be made is to update the Adler32 checksum of this section with the content of the edited data. There are many ways do do this, but I find the easiest way to be copying the data you need to calculate the checksum on into a new file, then use any tool to calculate the Adler32 checksum of that file. The layout is shown below:

Screen Shot 2025-07-27 at 11.17.07 PM.png

If you don't have a local tool to calculate the checksum, you can always use this site.

Flashing EEPROM with modified content

With all those edits complete, you're done! Now, all you need to do is write the modified BootROM image back onto the EEPROM. Again, this can be done externally using an EEPROM programmer, or using Flashrom under Linux with the following command:
Code:
flashrom -p internal -w modified_bootrom.bin

Make SURE that Flashrom writes and verifies successfully! If not, try flashing again, it usually works the second time (not sure why this is the case). Once your EEPROM has been successfully flashed, reboot and hope for the best! If it fails to boot, you unfortunately will have to dump and flash externally from that point on to resolve the issue.

Final upgrade image

My G4-upgraded first gen iBook G3 Clamshell, now with 128MB of onboard memory!

IMG_5365.JPG
 

Attachments

  • Configblk_2.5.15.pdf
    82.8 KB · Views: 24
Last edited:
This is a great discovery! This would really be good for the 12" PowerBook G4. 2GB like the rest of the Aluminum PowerBooks perhaps?
Should be possible with the exact same process shown here. If you’re missing address lines, you can probably bodge them over from the SO-DIMM slot. May have to add a termination resistor too, but that’s easy. Will experiment with this later.
 
Those are arguably better than the 12" PowerBook, the 9550 is much better than the Geforce 5200. I have no idea why they thought it was okay to pick that GPU for a "pro" machine.
Because Apple wanted to make sure every new computer after Tiger’s release (I guess except for the Mac mini) supported Core Image. Meanwhile the PowerBook G4 12” never got a mid/late 2005 refresh.

The 9550 in the iBook G4 is cut down even with half the vram it could have and it still is better than the Go FX 5200
 
  • Like
Reactions: Project Alice
Those are arguably better than the 12" PowerBook, the 9550 is much better than the Geforce 5200. I have no idea why they thought it was okay to pick that GPU for a "pro" machine.
I wondered why Apple went with nVidia GPUs in any of the 12" PowerBooks G4. It just seemed like a weird choice next to the 15 and 17 (save for the original) and the iBooks with their Radeons. Was it a power consumption thing? Thermals? We'll never know.
 
I wondered why Apple went with nVidia GPUs in any of the 12" PowerBooks G4. It just seemed like a weird choice next to the 15 and 17 (save for the original) and the iBooks with their Radeons. Was it a power consumption thing? Thermals? We'll never know.
I think it is possible that with the 12” they pulled a Mac Pro Trashcan and designed themselves into a thermal corner. It could also be possible they did this to keep the price down and have the 12” continue to be the mid range laptop option and it just fell out of favor as time went on since it never got an Intel update.
 
Because Apple wanted to make sure every new computer after Tiger’s release (I guess except for the Mac mini) supported Core Image. Meanwhile the PowerBook G4 12” never got a mid/late 2005 refresh.

The 9550 in the iBook G4 is cut down even with half the vram it could have and it still is better than the Go FX 5200

Speaking of the Mini, I wish we could get a 9550 swapped in there. I'm fortunate to have the 1.5 model but even the extra VRAM doesn't cancel out the Core Image in software penalty.

I'd definitely like to see more RAM on a 12" G4 though, the iBooks are such a nightmare to take apart even if the 14" is quite 'nice' to use overall that I much prefer the relative ease of maintenance on the PowerBook. 18 screws > aging plastic clips.
 
  • Like
Reactions: Project Alice
Speaking of the Mini, I wish we could get a 9550 swapped in there. I'm fortunate to have the 1.5 model but even the extra VRAM doesn't cancel out the Core Image in software penalty.

I'd definitely like to see more RAM on a 12" G4 though, the iBooks are such a nightmare to take apart even if the 14" is quite 'nice' to use overall that I much prefer the relative ease of maintenance on the PowerBook. 18 screws > aging plastic clips.
The 12" PB is just as awful to take apart as the iBooks. But yeah, the 15" and 17" take me like 5 minutes to get into.
 
  • Like
Reactions: AF_APPLETALK
I have a version of flashrom on GitHub for Mac OS X. You can use it to get the ROM without going into programmer mode (not using internal)
https://forums.macrumors.com/thread...3.2303689/page-38?post=33883037#post-33883037

I don't know if the programmer mode (using internal) method works for reading and writing the ROM in Mac OS X.

The system config block is always 0x80 bytes at offset 0x3f00. It exists in New World Macs newer than 1999 (those with Open Firmware 3.2.x or later).
The system config block contains the product code of your Mac (for example, PowerMac2,1). It ends with a checksum. 0x80 bytes at 0x3f80 is Configuration Test Data Section (though it might be used for config block overflow? At least, the firmware updaters keep the two 0x80 blocks separate). The Configuration Test Data Section does not have a checksum.

The format of the system config block changed over time. There's a Version 1.5 (1999) of the Boot Flash System Configuration Block document. At least the product code is in the same location in all versions of Open Firmware that I have.

I have ROMs with config blocks for these versions of Open Firmware:
2000-02-17 ... 3.2.4f1
2000-07-10 ... 3.3.2f1
2000-08-11 ... 3.2.7f2
2000-12-04 ... 4.1.0f1
2001-03-20 ... 4.1.7f4
2001-03-21 ... 4.1.8f5
2001-08-16 ... 4.2.5f1
2001-09-12 ... 4.2.7f1
2001-09-14 ... 4.1.9f1
2001-10-11 ... 4.2.8f1
2001-11-20 ... 4.2.9f1
2001-12-06 ... 4.3.2f1
2002-04-08 ... 4.4.0f1
2002-05-17 ... 4.4.1f1
2002-07-23 ... 4.4.5f3
2002-09-30 ... 4.4.8f2
2002-11-11 ... 4.5.4f1
2003-01-13 ... 4.5.8f1
2003-01-15 ... 4.5.7f1
2003-02-18 ... 4.6.2f1
2003-02-20 ... 4.6.0f1
2003-03-15 ... 4.6.4f1
2003-09-04 ... 4.7.1f1
2003-11-21 ... 5.1.4f0
2004-04-06 ... 4.8.5f0
2004-08-25 ... 5.1.7f1
2004-09-21 ... 5.1.5f2
2004-09-23 ... 4.8.7f1
2004-10-26 ... 5.1.8f7
2005-03-23 ... 4.8.9f4
2005-07-05 ... 4.9.3f0
2005-07-12 ... 4.9.4f1
2005-09-22 ... 4.9.5f3
2005-09-30 ... 5.2.7f1
2005-10-05 ... 4.9.6f0

A firmware updater contains multiple config blocks so that it can update multiple different Macs (more Macs than what the Read Me for each Firmware Updater suggests but it is unknown if the firmware in each firmware updater can work with every Mac that has a corresponding config block in the firmware updater). For example, Firmware Updater 3.2.4f1 contains 8 config blocks, while Firmware Updater 4.4.8f2 contains config blocks for 40 different Macs. Firmware updaters do not include info for the Configuration Test Data Section (just like for nvram sections).
 

Attachments

  • Power Mac product model platform.txt
    12 KB · Views: 7
  • all_updaterinfo.txt
    87.9 KB · Views: 4
For years now, myself and many others have made attempts to upgrade soldered RAM on PowerPC-based Macs, without any success. As I've found from my vast experience doing such upgrades on Intel machines, just swapping the chips is not all that needs to be done; the system's BootROM also has to be modified in such a way that it actually knows the memory configuration that is installed, in lieu of having the SPD, or "Serial Presence Detect" EEPROM that is present on all removable DIMM memory modules. On Intel systems, this was easy to figure out, as the Intel system BIOS is designed to load hard-coded entries of data in the exact same format as it would be found on the SPD EEPROM of a memory module. On PowerPC Macs, however, they have a completely custom config entry format that describes the soldered memory configuration, as well as a lot of other configuration options of the machine, which I was finally able to figure out all thanks to @LightBulbFun's discovery of this "Boot Flash System Configuration Block" document he was somehow able to find (attached). With that, I was able to edit the data appropriately to successfully upgrade the onboard RAM of a 1st gen iBook G3 Clamshell from 64MB to 128MB! Below, I will describe the exact process, which should apply to any PowerPC Mac with soldered RAM.

Upgrading the actual hardware

When choosing new chips to install, you must be aware of the following:
  • The data width (8-bit, 16-bit, 32-bit) of the new chips must match that of the originals (this can be determined by the respective datasheets).
  • The number of required address lines on larger memory chips will likely be increased. You must make sure that the target board actually has these extra lines routed out; you can check using a multimeter in diode mode. In this example I am not actually increasing the chip density, but adding 4 extra chips omitted from the factory, though in most cases this won't be the case.
    • In some cases, if your board doesn't have the address lines needed for larger density chips routed, you may be able to bodge them out from another chip or location on the board using wire, though I won't be covering this here.
  • You must ensure the memory config you choose is actually supported by the platform you're working with.
  • The footprint/package of the new chips must match that of the originals (otherwise you couldn't even solder them onto the board).
  • All installed memory chips must match in specification, though the manufacturer doesn't matter (you can mix and match whatever chips you want as long as their specs match).
Once you have determined and obtained the desired chips, all you have to do is solder them on. In the case of the Clamshell iBook here, since I am adding an additional 4 chips, I had to add some decoupling capacitors that were also omitted. I ended up finding a PC-100 SO-DIMM module I had laying around to pull the new chips from, so I just used the capacitors from that as well. I ended up adding 4x 128Mbit 16-bit memory chips to the original 4x 128Mbit 16-bit chips. I should note that this particular board did NOT have any extra address lines routed (only the 12 needed for 128Mbit chips), so bodging would be required to use larger density chips here.

View attachment 2532395 View attachment 2532396

Once you solder everything on, boot the machine as-is and make sure it works. It will not detect any more memory than it had originally at this point, but should still boot and work just fine. If it fails to boot, you have a soldering issue (or bad/incompatible chip(s)), which needs to be resolved before continuing.

Making the BootROM modifications

If all has gone well so far, now is the final part of the process that makes all your soldering work worth it; actually getting the machine to detect all the memory you installed.

Dumping EEPROM

To begin, the first thing you need to do is get a clean dump of your machine's BootROM. There are two ways to do this; either desolder and dump your system's EEPROM externally using an EEPROM programmer, or boot Linux on the machine and use Flashrom to dump the EEPROM. Be aware that to do this, you must ensure the machine is booted into firmware programming mode (hold power button at boot until power LED starts flashing), otherwise the EEPROM will not be exposed to the OS. The correct command to dump a BootROM with Flashrom is:
Code:
flashrom -p internal -r backup.bin

Modifying content

Once you obtain a dump of your machine's BootROM, open it in a hex editor of your choice. Following the attached document, you need to start by searching for the "signature" hex value, which is C99C. There may be multiple entries of this value, but the correct one is easy to spot, and will be right before the NVRAM section (which is denoted by "nvram" in ASCII, so it is easy to spot.)

View attachment 2532400
Going back to the document once again, you need to locate the memory configuration section of this block. It is located at offset 0x50, or 80 bytes from the first 0xC9 (which is considered offset 0, you can copy and paste the whole section (0x100 or 256 bytes) to a new document for easier parsing). From the datasheet for your new chips, you need to determine the following values:
  • Number of row addresses
  • Number of column addresses
  • Number of banks on SDRAM device
You can determine each of these values from the datasheet for your new chips, which is normally laid out as shown here:

View attachment 2532402 View attachment 2532404
These values are just set as raw hex values, so for the 128Mbit chips here, that looks like the following:

View attachment 2532405

0x0C = 12 row addresses, 0x09 = 9 column addresses, 0x04 = 4 banks on SDRAM device.

If you are adding another set of chips, like in the case of this iBook, there is one more value that needs to be updated, "Number of soldered memory controller banks". This is just a raw hex value once again, located at offet 0x5C, and in my case I simply had to change this from 0x01 to 0x02 (to singnify the added 4 chips (or "bank") of memory). If you are not adding chips, this value should not be altered.

Updating checksum

The last modification that has to be made is to update the Adler32 checksum of this section with the content of the edited data. There are many ways do do this, but I find the easiest way to be copying the data you need to calculate the checksum on into a new file, then use any tool to calculate the Adler32 checksum of that file. The layout is shown below:

View attachment 2532408

If you don't have a local tool to calculate the checksum, you can always use this site.

Flashing EEPROM with modified content

With all those edits complete, you're done! Now, all you need to do is write the modified BootROM image back onto the EEPROM. Again, this can be done externally using an EEPROM programmer, or using Flashrom under Linux with the following command:
Code:
flashrom -p internal -w modified_bootrom.bin

Make SURE that Flashrom writes and verifies successfully! If not, try flashing again, it usually works the second time (not sure why this is the case). Once your EEPROM has been successfully flashed, reboot and hope for the best! If it fails to boot, you unfortunately will have to dump and flash externally from that point on to resolve the issue.

Final upgrade image

My G4-upgraded first gen iBook G3 Clamshell, now with 128MB of onboard memory!

View attachment 2532409
awesome work, but for what? You could just use a 512 MB SO-DIMM.
 
A firmware updater contains multiple config blocks...

Do you think there's an easier route to changing the config block (vs flashrom)? Could the updater/patcher be patched, or an Open Firmware script be used instead?
 
Do you think there's an easier route to changing the config block (vs flashrom)? Could the updater/patcher be patched, or an Open Firmware script be used instead?
A firmware updater contains all the code needed to flash changes to several different Macs. I suppose one could edit the Forth script that contains the code so that it only changes the config block.

Another option is the NewerTech MAXPower_3.1b5FW rom patcher which can patch specific bytes.

In either case, after creating the changes to the Forth scripts, you need to boot in Programmer mode, get into Open Firmware and load/execute the Forth script.
 

Attachments

  • NewerTech ROM 3.1b5 joevt v2.zip
    38.6 KB · Views: 2
Register on MacRumors! This sidebar will go away, and you'll see fewer ads.