NES Reproduction Board Guide – MMC1/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 that can make MMC1 or MMC3 games. This board supports most MMC1 games with the SxROM board name, as well as 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 SLROM, SNROM, TLROM, TGROM, etc. Check out the Nesdev wiki entry on SxROM games here and TxROM games here. The board utilizes the AX5904 to imitate the MMC1 mapper, or the AX5202 to imitate the MMC3 mapper.

Here is a table of the various SxROM and TxROM boards and their required hardware. Note that a few board types are not supported: SOROM, SXROM, SZROM, TQROM, TR1ROM, and TVROM. Fortunately, these board types are used by only a handful of games.

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.

Front Side Components

PRG ROM

Needed for: All games
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)

CHR ROM

Needed for: Many SxROM and TxROM games – check above table for board type list (or by using another tool)
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)

CHR SRAM

Needed for: Some SxROM and TxROM games – check above table for board type list (or by using another tool)
Part Number: 6264 series
Function: Holds the ROM’s sprite data. This is placed in the socket marked CHR.

PRG RAM (WRAM)

Needed for: Some SxROM and TxROM games (including all games that save data) – check above table for board type list (or by using another tool)
Part Number: 6264 series
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.

CIC

Needed for: All games (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.

MMC1 – Mapper

Needed for: All SxROM games
Part Number: AX5904
Function: Used by the NES for memory management, allowing for increased memory size and features. Note that the AX5904 is not the original MMC1 chip, it is a clone chip that acts as a replacement for the MMC1 which is a proprietary chip designed by Nintendo. Many sources of AX5904 chips have been known to provide faulty parts from time to time, however any that I provide for purchase have been tested.

MMC3 – Mapper

Needed for: All TxROM games
Part Number: AX5202
Function: Used by the NES for memory management, allowing for increased memory size and features. Note that the AX5202 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. Many sources of AX5202 chips have been known to provide faulty parts from time to time, however any that I provide for purchase have been tested.

R1, R2, D1, D2 – Resistor and Diodes

Needed for: Games that save
Value: ~1kΩ for R1, ~10kΩ for R2, Schottky diodes (such as 1N914 or 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 is a pull-down resistor for the +CE pin on the WRAM. Diodes combine the voltage from the NES and the voltage from the backup battery to power the RAM.

R3 or R4 – Resistor

Needed for: Games that save – R3 for MMC1, R4 for MMC3
Value: ~10kΩ
Function: R3 is a pull-down resistor for the CPU A14 pin on the MMC1. R4 is a pull-down resistor for the M2 pin on the MMC3. You only need one or the other, though adding both will not cause any issues.

C1 – Electrolytic Capacitor

Needed for: All games
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 – Ceramic Capacitors

Needed for: All games
Value: ~0.1 uF, at least 10 V rated
Function: 
Filters out high-frequency noise that can interrupt the EPROM/Flash chips, CHR RAM (if used), and most 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. But the CIC normally requires it to operate.

C5 or C8 – Ceramic Capacitors

Needed for: All games – C8 for MMC1, C5 for MMC3
Value: ~0.1 uF, at least 10 V rated
Function: 
Filters out high-frequency noise that can interrupt the MMC1 or MMC3 mappers. You only need one capacitor for the mapper you are using, though adding both will not cause any issues.

C6 – 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 that can interrupt the RAM chip.

C7 – 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.

Battery

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

Front Side Solder Pads

There are three sets of solder pads on the front, above the MMC1 socket. 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 top, or the bottom, depending on which board type you are using.

SNROM Enable

Solder the middle two pads to the top if you are making an SNROM game. If you are not, solder the two middle pads to the bottom setting, labeled “OTHERS.”

SHROM/SEROM Enable

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

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

There are four sets of solder pads on the back of the board. Except for the battery bypass solder pads, 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.

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.

TxROM/SxROM Solder Pads

Solder all the middle pads to the top if you are using the MMC3 mapper to make a TxROM game. Solder the middle pads to the bottom if you are using the MMC1 mapper to make an SxROM game.

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.

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. This means you cannot use the TL866 to program it. I use the GQ-4×4 programmer, personally.

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.

Then, write the software to the chip. Afterwards, you need to set the configuration bits. If you’re using the GQ-4×4, hit the “CFG” button on the top menu bar. Then, set the config 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’ll 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 process again to reset the region correctly.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s