Advanced MMC3 NES Reproduction Tutorial

Welcome back!

Today I'll be tackling another reproduction, this time using a more complicated PCB. If you've read my Basic NES Reproduction tutorial, you'll likely experience a little Deja Vu, as I would like to make this tutorial as complete as possible, and I'll probably copy a few paragraphs over. Enjoy!


So, why make a reproduction?

  • Play games on authentic hardware to eliminate errors or inaccuracies of emulators
  • Experience games that have never seen a release in your region, games that never saw the light of day at all, and homebrew games not licensed by the original manufacturers
  • Adds a one-of-a-kind item to your collection
  • Gives you some of the tools necessary to get started with ROM hacks or homebrew
  • Gives you a chance to be creative in the label making process


 Sadly, people in the past have used this method to make counterfeit copies of prototypes or rare games like Stadium Events. Please don't do this, and if you're making a reproduction, please include a line on your artwork that identifies it as a reproduction, so if you trade it away it isn't mistaken for anything authentic.


This tutorial is a good guide for making:

  • Recca Summer Carnival '92
  • Super Mario Bros. 2 The Lost Levels ("Loopy's MMC3 Hack" ROM.. original won't work)
  • Bio Force Ape
  • Adventure Island 4

And essentially any other MMC3-based game, with a few exceptions here and there. Be sure to match your PCB type!


I'm going to make a reproduction of Takara's Banana Prince.




Banana Prince, originally released as Bananan Ouji no Daibouken in Japan, is an interesting platformer by Takara. Released in 1991/1992, this is one of the later NES releases. Although I'm not sure of the exact reason that this game wasn't released in North America, I would assume it was because of the declining volume of NES games released here after the introduction of the Super Nintendo in 1991.

Repro Background

Ok, so what makes this the advanced tutorial? The fact that we are using a PCB with a more complicated memory mapper. The NES only has 16 address pins for the program and character ROMs (referred to later as PRG and CHR ROMs) so there is a chip on board that lets the game access higher memory addresses. In the other tutorial, this chip was a simple 74LS161 binary counter: each strobe of one of the signals from the NES to the cartridge advanced the selection by one page. This tutorial covers games that use the MMC3 memory mapper, which is more complicated. It doesn't really matter to us why it's more complicated, but it does result in the ability to use higher capacity ROMs.

Let's take a minute to wade through all this NES mapper/header/PCB terminology.

  • An iNES header is a few bytes at the beginning of all .NES files that identifies the technical components of the ROM. This header is used by emulators (not by the NES itself) to figure out what mapper to use. We strip off this header when we split the ROM later on.
  • The PCB type is an identifier of what chips are supported on the board. Examples are UNROM, CNROM, TSROM and TLROM. Our game is TLROM. It contains the CHR and PRG ROMs as well as the security chip (aka the CIC) and an memory mapper. Some PCBs also have RAM chips.
  • The mapper number is an identifier of what memory management logic is used onboard. Refer to the last tutorial for a bit more info. Our game uses MMC3, which is (confusingly) referred to as mapper 4 in iNES header land. 
  • Banana Prince uses TLROM, which contains the ROMs, security chip and MMC3 chips. TSROM adds a PRG-RAM chip, and TKROM adds battery backup, but still use the same board layout around the CHR and PRG chips so this tutorial should still apply. Don't remove any RAM chips.

How do you identify a suitable donor? Find compatible donor cartridges by searching using "PCB Name" under "PCB / Hardware" on the wonderfulNesCartDB or by matching information on the Bigass NES Mapper List on TuxNES

Now that I know that the PCB type for Banana Prince is TLROM, I'll search that up in NEScartdb, and also filter by "US releases" (I'm Canadian, and so are most of my games, but there will likely be more results for US releases, and they are 100% identical in Canada except for maybe packaging differences). If you don't find a suitable donor searching for "TLROM", make sure you also search for "TL-ROM". 

Stuff you will need: 

You can't tell that this workstation is a piece of wood between my washer and dryer, can you?


1) A compatible donor cartridge. Use the wonderful NEScartdb to find compatible boards. Banana Prince uses TLROM, so after searching I've found that I have a Super Spike V'Ball that I can use. This is a game that's plentiful in the wild, and the case was broken so I it seemed like a good choice. I also had another case in good condition "for some reason"...

2) An EPROM programmer, EPROMs and a UV eraser. First, the programmer. Most hobbyists just go for a cheap-o Willem clone programmer. These things are like the Swiss Army knives of programmers, able to handle a ton of chips, and even more if you by some adapters. I think mine was around the $40 mark on eBay.


Sadly, most of you will realize your laptops have no parallel port. Get off my lawn.


Yep, all the memory is in that tiny space viewable in the window. 

3) EPROMs. Electrically Programmable Read-Only Memory chips come in many sizes, and have been used for decades so as long as you have an eraser you can probably find some among your junked electronics. Some easy sources are old NIC cards, but they might not be big enough. You can easily identify EPROMs by their window, although typically they will be covered by a piece of tape. I'm starting with a pair of 27C020 EPROMs I took off a dead JAMMA arcade board.

What EPROMs will you need? Well, most Nintendo games use 2 ROMs: a CHR and PRG, and our TLROM/TSROM/TKROM repro will indeed use both. CHR is the character ROM, which holds graphic information. The PRG program obviously holds the program. You need to obtain EPROMs that will hold your intended game. For our example, Banana Prince, the aforementioned databases tell us that both the CHR and PRG ROMs are 128kB, that is, 128 kilobytes each. However, EPROMs are marked in bits, not bytes. The "27C" and "27" series of EPROMs are 8 bits wide, and since we need 128 kilobytes, 32 x 8 = 1024 bits. So at a minimum we need chips labeled as 27C010 or 27C1001. I'll be using a 27C010 and a 27C020, which are 1Mbit and 2Mbit respectively, because that's what I had lying around.

In conclusion, get 27C020 or 27C2001 EPROMs if you can, to ensure compatibility with your intended game. All TL/TS/TKROM games use 128kB or 256kB (so 1Mbit or 2Mbit) ROMs. If you get 2MBit EPROMs, you can still use them with 1Mbit games. I'll explain how later.


4) Next you'll likely need a UV eraser. Get this even if you buy new chips, because it's entirely possible you'll make a mistake or two and need to erase them. Mine is again from eBay, about $20, and it's just a simple circuit that runs a UV bulb on a timer. The timer is broken on mine so I have to keep watch. So once you have your chips, remove the stickers and clean the windows with something like Goo Gone. I find 15 minutes is usually a good amount of time to erase a pair of chips, however, like ovens, your baking time may vary.

5) A 3.8mm Nintendo Security Bit. Only around $4-8 on eBay, opens many different video game cartridges. The larger, 4.5mm versions are for SNES systems (not cartridges) and a few others.


Does the NES cartridge have any idea what's in store?


6) Soldering iron, desolder tool of some sort, solder, maybe some wire, standard hand tools.

7) The ROM. Do a search on google to obtain your ROM. Also obtain any patches you will require for translations etc. Patches come as an IPS file.

8) Creativity. You'll probably want to make up your own artwork, so start thinking about that ahead of time. 


The Process: 



1. Open up your game. Use really skinny neednose pliers or your game bit. Don't lose these screws! Inside you'll see the CIC (security chip), the MMC3 mapper and the CHR and PRG ROMs. If you are doing a TSROM or TKROM reproduction, you'll also see a PRG-RAM chip and possibly a battery.


2. Remove the two ROM chips, but leave on ALL other components. 

2a. Unless you have a fancy IC removal tool of some sort, just cut off the chips by either using a dremel or tiny cutters. I use a dremel, which cuts through the legs pretty darn quick so be careful not to slip and cut any traces on your board. If you do cut any traces on the board, you'll need to repair them later by running wire.

2b. Now remove the legs that are still soldered in. There are a few methods for this. Most people recommend getting some "helping hands", and using that to hold your PCB while you heat the underside and pull the legs out the top side with pliers. Personally, I use the banging method. I turn the PCB upside down, then heat each pin and bang my hand (the one that's gripping the PCB) on the table, which empties the hole. This is potentially dangerous, and bouncing legs could burn your hand, so don't do it this way! 





3. Desolder the holes so you'll be able to easily insert your chips. Hold your PCB up to the light to make sure light shines through! Clean up any other traces of solder that are lying around on the board. 

You might notice that there are 4 unused solder pads on the PRG ROM. The 128kB mask ROMs used 28-pin chips while our EPROMs use a 32-pin chip for that size. Games like Baseball Stars II use a all 32 pins since the PRG ROM is 256kB. 


4. Erase your EPROMs if you suspect they aren't empty. While I'm sure long, long exposure to UV light could eventually damage the EPROMs irreversibly, I can't say I've ever heard of that actually happening. Remember that UV light is damaging to skin, so be safe and avoid exposure. Anyway, I generally like to toast mine for about 15 minutes as I mentioned before.

5. Patch your ROM if you need to. Use a patching tool to apply the .IPS file to your .NES file. Run it in an emulator to make sure you haven't corrupted your file, and to make sure the patch has been applied correctly. In my case, I can see the title has been changed to English.

Usage of IPS from Zophar's Domain:

C:\nes>ips bananaJ.nes bananaJE.ips bananaE.nes

where bananaJ.nes is my original Japanese ROM, bananaJE.ips is the English translation patch, and bananaE.nes is the output English ROM.


6. Split your .NES into it's CHR and PRG files. I use the DOS utility tniNES also at Zophar's Domain, I'm sure there are some Windows ones that would work just fine. Here's an example of tniNES usage:

C:\nes>tnines -s bananaE.nes

The "-s" is the "split" option, which removes the iNES header and leaves you with bananaE.PRG and bananaE.CHR.

7. Optional: if your EPROMs are bigger than your ROMs, you should double up the ROM size until it fills up the EPROM. The EPROM I'm using for PRG is a 27C2001, which is 2Mbit, or 256kB. Since the Banana Prince PRG is only 128kB, I have to double up the size so it fills up my EPROM. Simple to do in a DOS window with the built-in "copy" command:

C:\nes>copy /b bananaE.prg + bananaE.prg bananaEbig.prg

This line concatenates bananaE.prg onto itself, and saves it as bananaEbig.prg. Don't forget the /b switch, this is necessary to inform the program it's not a text file. If you final files are 4kB, it means you forgot the /b switch. If you were using a 4Mbit (512kB) EPROM for this purpose, your DOS command would be:

C:\nes>copy /b bananaE.prg + bananaE.prg + bananaE.prg + bananaE.prg bananaEbig.prg

Why is this necessary? Basically you can't count on the NES to ground the upper address pins. For example, if I only write to the lower 128kB to my 256kB EPROM, and the NES decides to send A18 high, then it'll read empty space! Better to put the same info in each chunk so there's no guesswork. You could simply bend out the A18 pin and wire it to ground, but that's more work. 

8. Ok, time to burn these new ROMs.

8a. Install your EPROM burner program. If you're using a Willem programmer with a parallel cable, there are a few hoops you have to jump through.

  • First of all, don't use the USB cable, it's only used for power and it's not strong enough. Find a 9-12V adapter to plug in. If it doesn't light up, it's the wrong polarity. 
  • You need to match your software with the board revision that you purchased. I don't think you'll cause damage if you use the wrong one, but it won't work.
  • Install this TVicPort software, then reboot
  • Download io.dll from this site, copy over io.dll from that zip file into the Program Files/EPROMxx directory, overwriting the old one. If you get "privileged instruction" errors in the Willem programmer, you didn't do this correctly.
  • Install xp_stop_polling.reg from this page, which is also a good general Willem resource. If you red and green lights are consistently on, you haven't done this.

8b. Check to make sure your EPROMs are empty. Typically your program will simply have a Blank Test. Test each EPROM to make sure.

8c. Burn these ROMs! Pick your EPROM type, set your dipswitches, then put in your first EPROM, blank check again to make sure it's empty, then write the PRG file. Your program will likely verify it for you by reading the whole chip again. If it works, move on to your other chip. If it didn't work, there's a good chance the erasing procedure didn't work, so bake your EPROM (for longer than you did before, probably) and try again. Still having problems? Bump up the RW and CW periods in your program. It's likely your old EPROMs require more writing time.

8d. Cover your EPROMs with tape. I often use little labels so I can keep track of which one is CHR and which one is PRG.


9. Here's where we deviate a little from the last tutorial. In my Basic NES Reproduction tutorial, our EPROMs were drop-in replacements for the NES mask ROMs. For whatever reason, the bigger NES mask ROMs have a little bit of a different pinout than their respective EPROM. Thankfully, Nintendo was thoughtful enough to include space for 32-pin chips on their MMC3 boards. Here's how we wire up our chips:

9a. On your newly minted PRG EPROM, bend up pins 1, 2, 24, 30, and 31. Pin 1 is in the top left corner (the little "U" marking on the chip is the top edge), and it follows around in a "U" shape. Bottom left pin is 16, bottom right is 17, top right is 32. On your CHR EPROM, bend up 1, 2, 22, 24, 30 and 31. 

9b. Clip the bent-up pins a little, so you're soldering to a bigger surface area. Just use cutters to cut off the skinny parts of the bent-up legs.




9c. Before installing your EPROMs, solder in wires to the following holes on the game cartridge PCB. For PRG, solder wires into holes 1, 2 and 24. For CHR, solder wires into holes 1, 2, 24 and 31. The wires should be about.. 6" long. You can clip them shorter later. Use a reasonable gauge wire like 22 or 24, anything skinnier might be too prone to breakage. Anything thicker might prevent your NES game case from closing. Make sure when counting holes on the PRG ROM that you are counting from the 32-pin 1st pin, not the 28-pin 1st pin.

9d. Solder your ROMs into place. You'll notice that CHR and PRG are written next to the spot where those chips belong. You'll notice that anywhere where you've soldered in a wire, that corresponding pin is bent up. Ensure this bent up pin doesn't make contact with non-insulated wire!


Remember how I had an extra cartridge case? This particular PCB became garbage when I tried to take a shortcut without counting address pins on my fingers correctly. 


9e. Now that you have your chips soldered down and some wires hanging loose, it's time finish our wiring. Below is a quick table, and a handy reference diagram you might want to print out.


Connect from:

Connect to:

 Pin 1


 Pin 2

 Hole 24

 Pin 24

 Pin 16 (or another ground)

 Pin 30

 Hole 1 

 Pin 31

 Hole 2


Connect from:

Connect to:

 Pin 1


 Pin 2

 Hole 24

 Pin 22

 Hole 31

 Pin 24

 Hole 2

 Pin 30

 Hole 1

 Pin 31




Enjoy this technical treat while you solder away: 




 Ok, so here's where you should be at:


It's beautiful!


In fact, yours should look a little cleaner than mine. I made my wires long so you could get an idea of what it might look like. 


10. The big moment! Reassemble your NES cartridge and pop that sucker into your NES, and switch 'er on. Remember that your new NES game is just as flaky as an old one, so fiddle around with it if it doesn't work right away.


Success! But what is that orange Nintendo product?


10a. If your game appears to play but the graphics are messed up, there are two possibile problems. First, check to make sure all the traces are working to your CHR EPROM. You can use a multimeter to check each pin against the edge connector or memory mapping, and make sure to clean the edge connector. Unlike in the last tutorial, the MMC3 mapper takes care of mirroring for you, so that can't be the source of your problem.


10b. If you get nothing much to speak of, check your PRG ROM and clean the edge connector. Sadly, if that all turns out ok then it's likely your EPROMs didn't burn correctly, or something got damaged by static electricity or something. Technically, as long as your chips verified correctly in your EPROM burning software, it should work. Make sure you didn't ruin any traces on your PCB.


11. Finally, all that's left to do is make a label.

11a. I've made one in Photoshop from a template. For this label, I simply found a scan of the Famicom label and touched it up a bit. Usually by this point in the project I'm a little impatient so I won't spend hours perfecting a label.

11b. Get a few sheets of full-page adhesive inkjet paper and print the label yourself or get it printed somewhere.


11c. Then get a few sheets of laminating full page laminating plastic. This stuff has one sticky side and on non-sticky side. Don't get the pouches for nametags.

11d. Cut out a piece of the lamination and stick it over the adhesive paper.


11e. Cut the sticker out. Then it's just peel and stick. Try not to handle the edges too much or it'll lift eventually.

Voila! Shiny, protected sticker. If you don't add the lamination sheet, even simple handling of the cartridge will cause the ink to run.



That's it!  Hope you enjoyed my article. Stay tuned for at least one more NES project. It will be a simple multicart that can hold several games, using a PIC or binary counter chip to cycle through the choices.




I am happy to answer any questions and provide a little help if you need it, just