Mac ROM Shadowing


The ROM in the 840av and 660av has the ability to copy its self into RAM during booting, based on a value in PRAM. The ROM typically operates slower than RAM, and depending on the specifics of the machine, significantly slower than RAM. Copying the ROM contents into RAM can product a bit of a speed boost.

During ROM initialization, byte 11, bit 1 is consulted to determine if ROM should be copied into RAM. Here is the check from the Quadra 660av ROM:

1A6    264F                      Move.L    A7, A3 
1A8    263C 0001 000B            Move.L    $1000B, D3
1AE    61FF 0000 B45A            Bsr       PramIO
1B4    301F                      Move      (A7)+, D0
1B6    0240 0100                 And       $100, D0
1BA    6700 00AA                 BEQ       NoROMinRAM
1BE    41FA FE40                 Lea.L     BaseOfRom, A0
The rest of this code proceeds to do the copy and setup all the various vector tables to point to the right places in RAM.

Copying the ROM into RAM will obviously use more RAM (specifically, the size of the ROM, which is 2MB for the AV ROM), however the Finder's About This Mac dialog doesn't seem to change its memory reporting to reflect this.

I haven't done extensive testing of the performance difference, but I did write a simple test of making a ROM toolbox call in a loop. There was a slight increase in the speed of that loop on the 660av, but it was about a 30% improvement on the 840av. For normal operation, like booting and just mousing around Finder, I didn't notice a qualitative difference in speed.

If your workload involves lots of time in ROM traps, this might provide a noticeable difference.

Files:
ROMinRAM.sit.hqx 2 simple tools to set and unset the flag in PRAM controlling this feature. There is no UI, they just set or unset and exit.

Discussion:
There is a thread on the subject on the mac68k.info forums.

Updated September 30 2012