NES Reproduction Board Guide – MMC1

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 MMC1 games with the SxROM 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, etc. Check out the Nesdev wiki entry on SxROM games here. The board utilizes the AX5904 to imitate the MMC1 mapper.

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

Front Side

PRG ROM

Needed for: All game types
Part Number: EPROMs: 27C256, 27C512, 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: Most SxROM games, notably SLROM – check your board type using FamiROM
Part Number: EPROMs: 27C256, 27C512, 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 RAM

Needed for: A few SxROM games, notably SNROM – check your board type using FamiROM
Part Number: 6264 series
Function: Holds the ROM’s sprite data. This is placed in the socket marked CHR.

PRG RAM (WRAM)

Needed for: A few SxROM games, notably SNROM – check your board type using FamiROM
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.

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.

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.

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

Needed for: Games that save
Value: ~1kΩ for R1, ~10kΩ for R2 and R3, 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 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.

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 – Ceramic Capacitors

Needed for: All game types
Value: ~0.1 uF, at least 10 V rated
Function: 
Filters out high-frequency noise that can interrupt the EPROMs, SRAM, AX5904, 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.

C6 – Ceramic Capacitor

Needed for: Games that have WRAM, notably SNROM
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.

CR2032 – Battery

Needed for: Games that hold save data
Value: CR2032 (socket is designed for yellow ones with pre-attached legs)
Function: 
Keeps the WRAM powered on after the NES is powered off to hold save data.

Back Side

CHR ROM/RAM Solder Pads

Solder the middle pads to either the left or right pads for either CHR ROM or CHR RAM, depending on your game.

NOTE: The bottom jumper must be permanently soldered to the “ROM” position, even with CHR RAM. This will be fixed on the next revision of the board.

Battery Bypass Solder Pad

This solder pad bypasses D2 for games that don’t hold save data, but use 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.

SNROM, SEROM, SHROM Solder Pads

If your game is SNROM, then solder the two middle pads to the bottom, indicated by “SNROM”. If the game is any other board type, solder the two middle pads to the top, indicated by “OTHERS”.

Similarly, if your game is SEROM or SHROM, solder the middle pad down to the bottom, indicated by “SEROM, SHROM”. If it is any other board type, solder the middle pad up to the top, indicated by “OTHERS”.

You must solder these pads in one direction or the other for your game to operate. Obviously, most games you will be soldering to the “OTHERS” pad.

Flash/EPROM Solder Pads

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

28-pin Solder Pad

If you are using a 28-pin EPROM for the PRG ROM, then solder this pad to provide power to it.

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” for the GQ, or program the chip on the TL866, 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 – MMC1

Leave a Reply to How to Make an NES Reproduction Cartridge | The Poor Student Hobbyist Cancel 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