Update to djMEMC Support For Large SIMMs


This is an update to the now nearly 13 year old post about djMEMC Support For Large SIMMs. In that post, it documents enabling 64MB banks for djMEMC based Mac systems, which allows the use of 128MB SIMMs, and access to up to 520MB of RAM on machines with 4 SIMM slots. One downside has been that above about 364MB of physical RAM, and the system didn't boot unless it had a large RAMDisk configured. This post explores that and how to allow the system to boot with the full 520MB.

The tl;dr for why the system wouldn't boot with large amounts of RAM is because it overran its stack space while constructing the page tables for the MMU. 368MB is 47104 pages if we're using 8k pages. With a single long word per page, that's about 188KB. Where the ROM constructs the page tables, it is also using an intermediate table in order to construct the final table for the MMU, which adds additional overhead. This is where the Q800 ROM is allocating space on the stack for the intermediate tables (using m68k-apple-macos-objdump -D -b binary -m m68k <romfile>) :

   81cb6:       480c fffc ff62  linkl %a4,#-196766
Meaning it is allocating 196766 bytes. We can simply bump this number up and we can use the full amount of RAM:
   81cb6:       480c fffa 0000  linkl %a4,#-393216

Files:
c610+bigmem2+nocrc+noramtest.bin ROM image supporting 128MB SIMMs, and larger page tables, with both ROM checksum and RAM tests disabled.

This was primarily developed and debugged under qemu's Quadra 800 emulation, with some changes I made to emulate djMEMC banking. Under qemu with this change, you can have up to 640MB because the 2 banks allocated to what would be soldered RAM on a physical machine can be configured for 64MB each instead of the 4MB/4MB or 4MB/0MB that came from the factory.

Updated January 16 2026