Atari 2600 Cartridge Emulation – Part 3
After having had a bit of a look at how the cartridges work in general in Part 1 and working on the Pico photo frame application in Part 2 this post looks at a few options for actual custom 2600 ROMs.
Specifically, I’m looking at two options a the moment, one for a basic single ROM image and one that allows switching between different images.
Single ROM
For the single ROM variant, I’ve created a variation of the following: https://www.pcbway.com/project/shareproject/A_simple_Atari_VCS_2600_2_or_4K_game_cartridge_f6e80523.html
To be honest, I’m not sure where I found the original (the above is apparently based on this one: https://longhornengineer.com/2011/07/26/atari-2600-cart-2k4k-pcb/), but I wanted a way to break out the cart signals for some future experiments, so I added some extra headers into the KiCAD project.
This has a footprint for a 2732 EPROM on the back with a single 74LS04 and 100nF capacitor on the front.
I managed to get some 2732 EPROMs online and was able to successfully read them with my XGecu Pro, but could see they already had some data in them. After asking on Mastodon about UV EPROM erasers, I eventually decided I could work with a cheap one from overseas. As long as I wasn’t going to hang around in the same room whilst it was on 😉
The EPROMs erased fine, as far as I could see, but when it came to reprogramming them I was struggling. The devices all have the markings “MBM2732-45” and what, according to this list, is the logo for Fujitsu. Sure enough, in my XGecu programmer that is an option, but when selected, the programming doesn’t work.
What does seem to happen however, is that a single byte, or sometimes half a byte, gets programmed before verification fails. From this, I wondered if either the programming voltage wasn’t high enough or maybe the pulses used for programming weren’t long enough.
Looking at the chips in detail, I also suspect it is quite likely they’ve been rebadged at some point, so to be honest, they could be anything under the markings.
I took a punt on some different options, looking for some other models with an “M” and tried Intel, “M2732” and curiously that seemed to work fine!
The key differences were programming voltage (VPP=25V) and Pulse delay (500uS) compared to the MBM2732 settings (21V, 200uS). Both use the same VDD Write (5.5V) and VCC Verify (5.0V). After a little experimenting, it turns out that even back on the Fujitsu MBM2732 setting, changing VPP up to 25V from 21V is enough to reprogram all four of the devices I have.
Loading up a basic 4K Space Invaders ROM, seems to now work fine.
Switched ROM
To support switching between different ROM image, I’m using this one unmodified, i.e. straight as it comes: https://www.pcbway.com/project/shareproject/ATARI_2600_MULTI_GAME_CARTRIDGE_PCB.html
This PCB supports up to a 27C512 ROM, allowing for 16 x 4K images. It states it could also be used with a 27C64, 128 or 256 with naturally less images available. It uses four DIP switches (or jumper headers if preferred) to set the state of A12-A15 for the ROM and thus determine which part of the 64K ROM will be in use.
Here is an annotated version of the PCB.
From this we can see that the EPROMs A12-A15 will be pulled HIGH by default via the resistors, but that setting any of the DIP switches will pull them to GND. This provides ROM addresses as follows:
A15A14A13A12ROM Addr2600 AddrHHHHF000-FFFFF000-FFFFHHHLE000-EFFFF000-FFFFHHLHD000-DFFFF000-FFFFLLLL0000-0FFFF000-FFFFAs is common with the 2600 the convention is to put the ROM at F000 in the Atari’s memory map, even though, with just 13 address lines, it could be at any of 8 mirrored positions in the address space.
Also as is common with 2600 cartridges, the Atari’s A12 line is used, via one of the inverters in a 74LS04, as the ROM chip enable /CE line. The unused inputs for the 74LS04 are tied to 5V.
To load 16 4K ROMs onto the device, I’ve used my XGecu Pro to program a 27C512. It is possible to load 4K binary files at different addresses as shown below.
The “TO Buffer Start Addr(Hex)” should be set to the relevant 4K chunk, so 00000, 01000, 02000, through to 0E000 and finally 0F000. But the “Clear Buffer when loading the file” option has to be selected to “Disable” otherwise it clears the rest of the buffer on load. Unfortunately this has to be selected every time.
But once all 16 bin files have been loaded the resultant buffer can be saved as a new, combined bin file for later use.
Here is the full BOM for this PCB:
- 1x 27C512 EEPROM
- 1x 74LS04 hex inverter
- 4x 10K resistors
- 1x 100nF capacitor
- 1x 4-way DIP switch or 2×4 pin headers
- 1x 28-way wide DIP socket
- 1x 14-way DIP socket
Having used the cart, I am wondering if I should build another one with a ZIF socket for the ROM as getting it in and out of the socket feels like I am guaranteed to lose a leg off the chip at some point…
Conclusion
After a few false starts, eventually both of these options turned out to be fairly straightforward to get going.
I already have an option for a “soft ROM”, as described in Atari 2600 Cartridge Emulation – Part 2, but having recently read about OneROM, I’m now wondering if that could act as a drop-in replacement for the 2732.
It is designed to replace the 2332 used on Commodore computers, but the pinouts are very similar and I think there might be options in the code to configure it for use as a 2732 too.
I’ve sent off my first PCB assembly order using the details provided by Piers Rocks for the OneROM Fire (RP2350 – 24 pin variant – fire-24-c), so fingers crossed. There was one component from the BOM that seemed unavailable – the 4u7 0402 capacitors, but I’ve substituted in what appear to be compatible ones.
When I get it back, I’ll come back here and add a note about how it goes. I suspect getting it up and running with be a complete post in its own right.
Another option is the Uno Cart 2600, more on that here: https://github.com/robinhedwards/UnoCart-2600.
Kevin

















