NES Reproduction Board Guide – MMC3

Please look at the main entry for more information on how to prepare the ROM file!

Here’s a guide on how to populate my custom designed NES reproduction PCB. This board supports most MMC3 games with the TxROM board name (where the lowercase ‘x’ is a stand-in for other board types). This means you can make games that use boards like TLROM, TGROM, etc. Check out the Nesdev wiki entry on TxROM games here. The board can use an original MMC3 chip harvested from an NES game, and is also capable of using the SMD133 clone chip to imitate the MMC3 mapper (but its function hasn’t been thoroughly tested – your results will likely vary).

Here is a table of the various TxROM boards and their required hardware. Note that a few board types are not supported: TQROM, TR1ROM, and TVROM.

I’ll break down the different parts used for each kind of game here. Some ways you can find information about the game you want to make include using a tool like FamiROM, or possibly by looking it up on NesCartDB.

Top Side Parts

U4 – PRG ROM

Needed for: All game types
Part Number: EPROMs: 27C010, 27C020, 27C040, 27C080; Flash memory: 39SF010, 39SF020, 39SF040
Function: Holds the Program ROM file. This is placed in the socket marked PRG.
How to Program: Check the reproduction article for information (Steps 1, 3, and 4)

U3 – CHR ROM

Needed for: Most TxROM games, notably TLROM – check your board type using FamiROM
Part Number: EPROMs: 27C010, 27C020, 27C040, 27C080; Flash memory: 39SF010, 39SF020, 39SF040
Function: Holds the Character ROM file (sprite data). This is placed in the socket marked CHR.
How to Program: Check the reproduction article for information (Steps 1, 3, and 4)

U3 – CHR SRAM

Needed for: Some TxROM games – check your board type using FamiROM
Part Number: 6264 series (like the AS6C6264)
Function: Holds the ROM’s sprite data. This is placed in the socket marked CHR.

U7 – PRG RAM (WRAM)

Needed for: Some TxROM games – check your board type using FamiROM
Part Number: 6264 series (like the AS6C6264)
Function: Used for normal operation of some games, and/or holds save data. This is placed in the socket marked WRAM. Note that some games use WRAM without utilizing save functionality.

U2 – CIC

Needed for: All game types (unless using a top-loader NES, modded NES, or clone console)
Part Number: Original CIC, or programmed ATTiny13 (instructions for programming provided below)
Function: Completes the region check and allows the game to run on the console.

U5 and U6 – Mapper

Needed for: All games (use either U5 or U6, not both)
Part Number: MMC3 (for U5), SMD133 (for U6 – UNTESTED!)
Function: Used by the NES for memory management, allowing for increased memory size and features. Note that the SMD133 is not the original MMC3 chip, it is a clone chip that acts as a replacement for the MMC3 which is a proprietary chip designed by Nintendo. I have not tested the SMD133 very much at all, so consider its use experimental.

R1, R2, R3, D1, D2 – Resistor and Diodes

Needed for: Games that save
Value: 1kΩ for R1, 10kΩ for R2, 27kΩ for R3; low reverse leakage diodes (BAT85) for D1 and D2
Function: R1 acts as a current limiting resistor from the battery supply to the RAM chip that holds save data. R2 and R3 are pull-down resistors for two pins on the mapper. Diodes combine the voltage from the NES and the voltage from the backup battery to power the RAM. To lengthen save data retention, it’s better to get diodes that have a low reverse leakage.

C1 – Electrolytic Capacitor

Needed for: All game types
Value: ~22 uF, at least 10 V rated
Function: Smooths out supply voltage for the board due to transients on the power supply, prevents quick changes in supply voltage when power is turned off.

C2, C3, C4, C5/C6 – Ceramic Capacitors

Needed for: All game types
Value: ~0.1 uF, at least 10 V rated
Function: 
Filters out high-frequency noise on the EPROMs, RAM, mapper, and importantly, the CIC. There are two places for C2, depending on the CIC you are using – you only need to use the one closest to the chip you use. And you only need C5 if you are using U5, or C6 if you are using U6.

CC – Ceramic Capacitor

Needed for: All game types
Value: 220 pF, at least 10 V rated
Function: 
This was included in original NES boards, and it connects to the PPU A12 line. It is likely for noise filtering.

C7 – Ceramic Capacitor

Needed for: Games that have PRG RAM (WRAM)
Value: ~0.1 uF, at least 10 V rated
Function: 
Filters out high-frequency noise.

C9 – Ceramic Capacitor

Needed for: Games that have PRG RAM (WRAM)
Value: 1 nF, at least 10 V rated
Function: 
Modern SRAM replacements (like the AS6C6264) sometimes have too fast of a response time, so this cap slows it down slightly. If you are using older SRAM, you might not need this component.

C8 – Electrolytic Capacitor

Needed for: Games that save
Value: ~22 uF, at least 10 V rated
Function: 
Smooths out supply voltage for the board due to transients on the power supply, prevents quick changes in supply voltage when power is turned off. This is a contingency for preventing loss of save data.

CR2032 – Battery

Needed for: Games that hold save data
Value: CR2032
Function: 
Keeps the WRAM powered on after the NES is powered off to hold save data.

Top Side Solder Pads

There are four sets of solder pads on the board – one set on the top, three on the back. Except for the battery bypass solder pads on the back, you must bridge these solder pads on every game in the proper setting. To choose a setting, simply add solder across the middle pad to the left/right or top/bottom depending on the pads, and depending on the setting you require. Be sure not to accidentally solder all three pads together.

TxSROM Enable

Solder the middle two pads to the top if you are making a TKSROM or TLSROM game. If you are not, solder the two middle pads to the bottom setting, labeled “OTHERS.”

Back Side Solder Pads

CHR ROM/RAM Solder Pads

Solder the middle three pads to the top if you are making a game that uses CHR ROM, or to the bottom if you are making a game that uses CHR RAM.

Battery Bypass Solder Pad

This solder pad bypasses D2 for games that don’t hold save data, but use PRG RAM (WRAM). Only solder this if you are using WRAM without a back-up battery. If you solder this with a battery on the board, it will drain the battery power quickly. You do not need to solder this if your game does not use WRAM, but soldering it won’t cause any problems.

Flash/EPROM Solder Pads

Solder the middle pads to the left if using Flash memory (39SF series) for the PRG ROM chip. Solder to the right if using UV EPROMs (27C series) instead.

Backside Components

In rare cases, you might encounter some sprite glitching even if everything is configured properly. This usually only happens when you have things like a Famicom-NES adapter or Game Genie in your system. What sets this aside from other graphical glitches is that it affects the sprites, not the entire screen. So if you’re getting strange palettes, missing backgrounds, or weird tiles, your problem is something else, probably a bad cartridge connector or dirty cartridge edge. What you’ll see if you’re getting this kind of error, known as OAM corruption, looks something like this:

Fixing this error involves adding ~100 ohm resistors in series with the PRG D0 to D7 lines. This can be done by cutting the exposed traces in the middle of RD0 to RD7 with a blade, and soldering resistors in place (surface mount size 0603). Be careful not to cut other parts of the board (or yourself).

Again, this is quite rare, so chances are you will be leaving these alone.

PRG RAM Fix for MMC3 Games (v3.1 and earlier)

In some cases, if you’re using the board for an MMC3 game that uses SRAM (TKROM, TKSROM, TSROM, TNROM), you may notice some glitchy behavior. For example, sometimes on Super Mario Bros. 3, you might get a mystery block that spawns in the middle of the map. Or some games that use the PRG RAM for saving, you might find the game freezes when trying to access save files. If this is the case, you can add a 1 nF capacitor across the RAM pins 20 and 22. (A spot for this capacitor is included in v4.0 and later)

Programming the CIC

The CIC clone by krikzz uses the ATtiny13 microcontroller. You need an AVR programmer to properly load the program into the chip. You can use the GQ-4×4 or the TL866.

In order to program the ATtiny13, first load up the chip in the programmer, and load the code found here (I could not find the original file uploaded on kirkzz’s website, but you should still check out his stuff). Make sure you load the .hex file, and load it in as a .hex file. The ASCII code on line 0x380 should read “krikzz was here!” – that’s how you know it loaded correctly.

If you’re using the GQ-4×4, first write the software to the chip, and then set the config bits – so program the chip first. If you’re using the TL866, you can write the code and the config bits at the same time. To set the config bits, hit “CFG” for the GQ-4×4, or the “Config” tab on the right of the screen for the TL866. Then, set the bits like this:

Hit “Write” and then you should be good to go!

When you put it into a cartridge and load it on the NES, you will probably need to hit the reset button five to ten times to get it to recognize the region of the NES you’re using. If you happen to use the cart in another region NES, just do this reset process again to reset the region correctly.

One thought on “NES Reproduction Board Guide – MMC3

Leave a comment