How to Make an NES Reproduction Cartridge

Disclaimer: This tutorial is for educational purposes. The instructions and products discussed are for the creation of homemade games only, or for repairing damaged cartridges for personal use, and should not be used for duplicating and distributing games protected by copyright.

Nintendo enthusiasts, myself included, know the value of playing a game on the hardware it was designed for, rather than on an emulator. There do exist USB adapters to take your NES controller and make it work with emulators on your PC, and this mimics playing on the real hardware, but it just doesn’t give you that authentic NES experience.

I’m here to show you just how you can have that authentic NES experience without an emulator. I know there are a handful of these tutorials out there, but I had yet to find one that was as comprehensive as I’d like it to be, so I made this one myself.

Table of Contents

Step 1: Prepare your ROM files
Step 2: Choose a board, or find a suitable donor cartridge
Step 3: Choose your memory chips
Step 4: Expand the ROMs and program your chips
Step 5: Wire the chips to the board
– Using an adapter board
– Rewiring by hand
Step 6: Finalize your game

Equipment you will need

You’ll need a few basic things:

1) Programmer. This is what you use to program the chips the game data is stored on. I got mine on eBay for about $50. It’s a TL866 MiniPro programmer. There’s an updated model, the TL866II Plus, and it seems to work just as well. The TL866 has worked flawlessly for me so far, even after 5 years, and it’s pretty easy to use. There are other more advanced programmers out there, but they run a lot more expensive. If you have one of those other programmers, you’ll have to figure out how to use it yourself (though, if you’re reading this and you already own a programmer, you probably know what you’re doing anyway, nerd).

20180808_211933

2) Memory chips. The heart and soul of the NES game. This is where the game data is stored, usually on two separate chips. You’ll typically need at least two of the same size, as most games use two, which are called program (PRG) and character (CHR) ROMs. Some games may only use the PRG ROM.

3) A circuit board. This board is either custom built, or comes from a donor game, and it’s the main component of your game. For using a donor, you’ll want to pick a game that is pretty cheap, or that you don’t care about anymore (please don’t destroy your copy of Megaman 3). You’ll need a specific donor depending on what game you want to reproduce. Unfortunately, outside of the simpler games, most NES cartridges use proprietary mapper chips that makes custom boards pretty difficult and/or expensive to make. But that doesn’t mean there aren’t a lot of games available to make on custom boards! I’ll explain this more later on.

img_20200908_141409

3b) Adapter boards. I make these and sell them on my store page. They make rewiring the EPROMs/flash chips a lot easier. I’ll go into more detail about them later on and the benefits there are by using them – you might not need them, but if you have to rewire anything, it’ll help out a lot! You’ll need one for each ROM (PRG and CHR) if you decide to use them.

adaptertop

4) EPROM eraser. This is for erasing your EPROMs. You’ll need this to fix something you programmed at some point, or you’ll have to clear the chips you order since they’ve probably got something written on them. If you end up using flash memory chips, you don’t need this!

38781033_540509953033852_8470017043511377920_n

5) Miscellaneous hardware. At the bare minimum, you’ll need solder, and a soldering iron. You might need some extra wire – I use 28 gauge. You’ll also probably want a screwdriver that can open NES cartridges (called a Security Bit), or if you’re cheap and really like making things harder for yourself, you can try to use pliers to remove the screws. But you really should just get one. I used to melt the ends of old mechanical pencils to try to make a mold of the screw and use that. Not worth it.

If you do go and buy the security bit, be sure to get the 3.8mm size, and not the 4.5mm. (Though, if you’re planning on making Genesis games, those use 4.5mm screws. These bits usually come in a pack).

IMAG0477.jpg

So now that you’ve got an idea of the supplies you’ll need, let’s get cookin’ (or rather, brewin’) some good ol’ NES games.

Back to top

Step 1: Prepare your ROM files

A forewarning: the games you’ll be able to make are games that are in your region’s video encoding format – NTSC or PAL. If you try to make a game that’s formatted for a different region, you’ll probably get some graphical glitches at best, or a completely non-working game at worst. Generally, NTSC encompasses North America and Japan, and PAL is everywhere else. I’m sure there are exceptions, so please look it up if you’re unsure. Making PAL games for your NTSC console will give you mixed results. See if you can find a version of the game you want to make that’s correctly formatted for your region.

With that out of the way, the first thing we should do is get your ROM file ready (most likely in the .nes format) to get some basic information to use in the next step. Some NES games use only one ROM chip, some use two. You’ll either have a PRG ROM, or a PRG and CHR ROM to take care of. PRG ROMs carry program data, and CHR ROMs carry graphics data.

Your single ROM file contains both PRG and CHR data (if your game uses both) and usually a header with information about the ROM. We need to strip the header off, and split the game into PRG and CHR components. The files we get out of this process, and their sizes, are important for the rest of the tutorial.

ReadNES3

I use ReadNES3 to split the .nes file. It’s very easy to use – just drag and drop your ROM file on top of the ReadNES3 application (doesn’t need to be in the same folder), and the ROM will be split into it’s PRG and CHR components (sometimes along with a header), and placed the folder your ROM is located in. Here’s a before and after screenshot of an example ROM that has both PRG and CHR components.

Note: You need to do this even if you know you only have a PRG component of your ROM file, because you need to make sure you strip the header off of the ROM file.

romsizesplit_test

Note the size of your game’s PRG (Program) and CHR (Character) files. They should be some power of two. Keep these sizes in mind for later. If your game only has a PRG component, you’ll get a CHR file that’s 0 KB, which you can ignore.

Ok great, the first step is complete, now let’s proceed to find a way to put this ROM file on a physical board.

Back to top of Step 1

Step 2: Choose a board, or find a suitable donor cartridge

This might take some trial and error, but it’s very important to prevent headaches later on, so pay attention!

NES games were produced spanning nearly a full decade, so it’s natural that the games both made technical leaps throughout its lifetime. For example, games like Balloon Fight don’t take up nearly as much space as a game like Super Mario Bros. 3 does. Also, ROMs can come in many different sizes, which require different PCB layouts with different supporting circuitry (most notably, a chip called a “mapper”). As an example, a game like Balloon Fight doesn’t use the same mapper (or even use the same kind of ROM chip) as a more complex game like Super Mario Bros. 3 does.

This, of course, means you must choose a compatible board or donor cartridge for the game you wish to make. This can prove tricky for some games, as some require very specific boards that only a few (or in some cases, only one) use. There may be a way around that, but I will not be going into that much detail here. I suggest google! Or the NesDev wiki?

Personally, I’ve relied on the amazing website NesCartDB for determining the kind of board I need to use. This website is extremely detailed and a very powerful tool. If you don’t know what kind of board your game requires, the first thing to do is try to find it on NesCartDB using the search function. There are profiles for pretty much all NES games out there, and each page has loads of information about each game.

IMPORTANT NOTE: NesCartDB is hosted on a private server. Sometimes the website goes down from time to time for various reasons – as of this writing, it is not active. Luckily, the internet archive has saved an old version of the website – it’s a bit trickier to navigate, but it works in a pinch. You can also try looking at the Bigass NES Mapper List and find games that have the same characteristics as the game you want to make. I’ve heard of some misinformation on the list but it seems pretty accurate.

Note that NesCartDB won’t have every game you can make, so if you have a homebrew or some other game like that, you’ll have to find out your ROM information from wherever you got it from. I know Romhacking.net for example usually has good information about what kind of hardware is necessary for the game. For example, lets say for the MMC1Test ROM I have above, NesCartDB tells me this this game works on an SLROM board, very common for the MCC1 mapper chip. So, I need either a custom SLROM board, a North American SLROM donor cartridge. This is a good point to try to decide what kind of board you’ll be using.

Using a custom PCB

As of right now, I only offer a “basic” NES board of my own. This board can be used to make NROM, CNROM, AOROM, UNROM, and UOROM games. And it’s quite simple to use it! Here’s what it looks like:

img_20200908_141409

Neat, right? I think it looks downright beautiful myself. Using custom PCBs is great for preserving NES games since you won’t have to cannibalize another cartridge, even if those donors are crappy cheap games. They won’t be around forever, after all! The only real downside is that you have to provide your own cartridge shell, but there are plenty of them out there that you can use – and honestly, I like using new ones simply because it means I don’t have to remove any dumb labels, or worry about any blemishes on these 30+ year old plastic shells.

You might have noticed that there are a lot of sockets for different parts. Fret not! I have written a guide for you that goes over what other parts you will need, and you can find it here! I also offer the board on my store page with a parts kit included to take all the guesswork out of it.

I’d recommend opening that guide up for following along later, because you’ll need to skip ahead to Step 3 to find out how to get your ROMs on memory chips to put on this board first!

I do have plans for making a few more board types in the future, but for now this is all I have. There are other makers out there that can offer other board types as well. For now, I’ll move on to using donor cartridges to make a game.

Using a donor cartridge

So, back to our example ROM. Remember that we found it was housed on an SLROM board. So, on NesCartDB, all I have to do is go to the search bar on the left side of the site, change the dropdown menu to “PCB, Class, Mapper”, and search SLROM.

searchbar

Now that’ll bring up a big list of games that use the SLROM board type. I need to find a good, cheap, donor cartridge to use, that’s from the United States. How about Hoops? That’s a great bargain-bin game. I get that in like every lot of NES games I buy off eBay. Conveniently, I have one in my collection to use as a donor. I grab it off my shelf, and open it up and find out… that it’s actually an SL1ROM board! What gives?

Let’s look at the entry for Hoops. It says SLROM… but wait, what’s that “More Profiles” box up there?

hoops

Let’s click on the other profile.

hoops2

Ah! There’s the problem. Hoops comes in both SLROM and SL1ROM. The two boards are very similar – you might even be able to get away with using the SL1ROM board for the SLROM game, actually, but for the purposes of this tutorial, I’m going to avoid going into that amount of detail. So what we’ve learned is that some games can come in different board types – similar for sure, but slightly different from each other (you’re not gonna find a game that comes in both TLROM and SLROM, for example). When you pick out a donor game, and you don’t have it in front of you yet, it might be a good idea to check all the profiles to see if you might get a different type of board than what you need.

Since my copy of Hoops is SL1ROM, I’m not going to use it. Back to the shelf it goes. Let’s go back to the search results. I see another pretty common game on the list – Golgo 13: Top Secret Episode. Now, when I check all the profiles for this game (there are six in this case), they all come up as variants of SLROM. And sure enough, when I check my own copy of Golgo, it has an SLROM board. Neat!

Now, a final step before declaring victory. Remember back in Step 1 when we found the size of our PRG and CHR files? Look at those again. In my example, the sizes are 128 KB each. Now, lets compare that to the donor game I picked, Golgo 13: Top Secret Episode. Look at the sizes of the ROMs on the bottom of the screen where the chip information is posted (boxed in red).

Note that the ROM size is constant across all profiles of the game, so no need to check them all.

golgosize

If your donor ROM chips are as large or larger than the game you want to make, you’re good to go – this donor board can handle your game, and you can skip to the next step. Golgo uses 128 KB for both, which is the same size as my game’s files, so I’m good! If these numbers are smaller than your ROM files, don’t fret just yet, you still might be ok. Let’s say, hypothetically, Golgo was listed with 64 KB ROMs, for whatever reason. That would mean this particular game might be too small to handle my 128 KB ROMs – but the board itself might still be able to handle our 128 KB files.

Note the exact board type for your donor in the middle of the screen (boxed in blue above). In this case, it’s NES-SLROM-04. The last two numbers are what matter here. Go to the top bar of the website, where it says “PCBs” (boxed in purple above). When you click that, you’ll be taken to a page that has all of the PCB classes, with a bunch of information on them. Type your exact PCB class name into the search bar on the left. So again, for this example, I type “NES-SLROM-04”. This will bring up that board’s properties.

slrom

Check the sizes for the ROMs on the right. These are the maximum ROM sizes you can have for the sockets on this particular board. If these sizes are the same or larger than your ROM files, then you can go ahead and use this board as a donor, and skip to the next step.

If they aren’t, well, then sorry to say you’ll have to start the search over again, but this time with a bit more precision. Let’s assume for a second that my example game has a PRG ROM that’s 256 KB instead of 128 KB, so I need to pick a different donor cartridge that can handle the larger size. Click the generic PCB class link on the left side under the “PCB Tree” (boxed in purple above).  In my case, that’d be the “NES-SLROM” link on the side. This will bring you to a page with all the different variations of your PCB Class.

Scroll through the variations, and note the max ROM sizes for each board. Sometimes, there will be variations of the board that have higher maximum ROM sizes than others. I can see that for SLROM, there exist a few that go up to 256 KB for the PRG ROM, whereas most go to only 128 KB. Those variations are NES-SLROM-03 and NES-SLROM-06.

slrombig

See in the red boxes that the size can go up to 256 KB for these boards? So I’m gonna have to find a game that uses one of these two variants for my hypothetical game. If you click on the specific variation (boxed in blue above) it will take you to a list of games that use that specific PCB. So find a game from that list to use instead. Remember to check all the other profiles of the game to make sure the PCB class is the same!

Ok, now that that’s over with, we can get onto the next part – picking out our EPROMs to program.

Back to top of Step 2

Step 3: Choose your memory chips

EPROM stands for Erasable Programmable Read-Only Memory. Basically, it holds information (your ROM file) that you can program to the chip, which can be accessed later on by the NES. The data is “burned” into the chip, and can only be cleared by UV light (which is what the little window is for). The other kind of chip you can use is Flash Memory. These chips are reprogrammable without using the UV light, and are generally newly made parts, as opposed to the UV EPROMs.

But why can’t I just reprogram the chips that are already on my donor board? Because they’re one-time programmable! Once you’ve programmed those specific chips for the first time, you can’t change the code.

EPROMs and Flash are functionally used in two different main modes – read and write. We only write to the ROM when we program them, and read the rest of the time. Hence, the “Read-Only Memory” part of EPROM. On these devices, there are a set of “address” pins (A0, A1, etc.) and, in our case, eight data pins (D0, D1, etc.). During the write sequence, a specific address is called out, and a byte of data is output onto the data pins by the programmer, which is then burned into memory at that exact address. When reading the chip, the NES requests an address to read the data on the ROM – the data that was written at that address during the program sequence. That data is output onto those data pins from the memory chip for the NES to use. The mode that the EPROM or Flash is operating in is determined by the Chip Enable (/CE), Output Enable (/OE), and Write Enable (/WE) pins.

So, there are two different types of EPROMs that are generally used for NES reproductions – a 28-pin version, and a 32-pin version. Which should you use? Well, the biggest restriction (obviously) is the size of your ROM files. The 28-pin EPROMs only hold up to 64 KB. If your game is larger than that, you’ll need to use a 32-pin EPROM. Here’s a list of commonly used EPROMs, and their characteristics.

Size (Bytes) Size (Bits) Chip Name Top Address Pin Count Rewiring?
32 KB 256 Kbit 27C256 A14 28 No
64 KB 512 Kbit 27C512 A15 28 No
128 KB 1 Mbit 27C010 A16 32 Yes
256 KB 2 Mbit 27C020 A17 32 Yes
512 KB 4 Mbit 27C040 A18 32 Yes
1 MB 8 Mbit 27C080 A19 32 Yes

If you weren’t aware, a byte is equivalent to eight bits. The ROM files we found above are reported in bytes. The EPROMs we’re picking, however, have names related to how many bits they can contain. Since these EPROMs all output data on an 8-bit bus (eight separate data pins), we can think of the address pins (A0, A1, etc.) as which byte is being requested from the NES. In fact, if you take the 2 and raise it to the number of address pins on the chip, you’ll find that it’s equivalent to the total size of the chip in bytes. Each additional data pin doubles the amount of data that can be stored on the chip.

As I mentioned previously, the largest size of a ROM file that a 28-pin EPROM can hold is 64 KB. The benefit of the 28-pin EPROMs, for donor cartridges specifically, is that you don’t have to rewire anything when you use them (unless you’re using the UNROM board type). If you use any of the 32-pin EPROMs on a donor cartridge, you’ll have to do some rewiring to make it work properly, but it’s nothing too difficult.

A while back I just bought lots of 10 of the 64 KB and the 512 KB EPROMs on eBay (27C512 and 27C040). As far as I know, there aren’t any NES games larger than 512 KB, and last I checked ‘080’s are kind of pricey. But you can use them if you want to, as they can also be easily used for some smaller SNES games.

The alternative to the EPROM is the Flash Memory I mentioned earlier. You can use the 39SF010, 020, or 040. Their sizes are the same as their EPROM counterparts. But, as with the EPROMs, I usually just get the ‘040s. You can find these devices new on many websites, like Digikey or Mouser.

Remember – pick a memory chip that is at least as large, if not larger, than each of the PRG and CHR components of your game. Now head onto the next step so we can finally program the game!

Back to top of Step 3

Step 4: Expand the ROMs and program your chips

Note that anytime I say “EPROM” in this section, you can also do the same for the Flash Memory. It’s just easier to stick to one device when describing the process.

Ok, back to the ROM files for CHR and PRG. We gotta take care of some business before proceeding. For good measure, we’re going to fill the EPROM up entirely if the game is less than the maximum capacity of the EPROM. This step is only necessary if your EPROM is larger than the ROM’s CHR or PRG file.

All we need to do is duplicate the .bin files until they’re large enough to match the size of the EPROM they are going on. This can be achieved by a simple line of code run in command prompt (press Windows+R, type “cmd” and hit “OK”).

First, make sure the command prompt is working in the folder that contains your ROM files. You can use the “cd” command to change the directory. Here’s an example of what I would type in:

cd C:\Users\Nick\Documents\

Just fill in the directory where your ROM is located. Your directory should switch to that on the next line.

The test ROM I’ve been using has a size of 128 KB for both CHR and PRG files. Let’s say I wanted to put the CHR component on a 256 KB EPROM (like the 27C020). We do this with the following line of code:

copy /b MMC1TestCharacter.BIN + MMC1TestCharacter.BIN MMC1CharacterFill.BIN

The “copy” command, obviously copies the data, and “/b” is to denote that the data is in .BIN format. The line of code essentially doubles “gameProgram.BIN” and stores it into the file “gameProgramFill.BIN”.

Let’s say I also have an EPROM that is 4MBit (512KB) that I want to put my 128 KB PRG ROM onto. Instead of doubling it, I quadruple it.

copy /b MMC1TestProgram.BIN + MMC1TestProgram.BIN + MMC1TestProgram.BIN + MMC1TestProgram.BIN MMC1ProgramFill.BIN

Now, compare the sizes of the PRG and CHR files, and the sizes of your EPROMs. They should be the same now after expanding.

romfill

The reason we do this is pretty simple. When you put your 128 KB ROM onto a 256 KB EPROM, for example, the most significant address pin (A17 in the case of the 256 KB EPROM) is only programmed while being a 0. This is because the first half of the 256 KB EPROM is programmed with your ROM, and then since no data exists on the second half of the memory, the programmer doesn’t bother putting anything there. If during gameplay, that top address pin goes to 1 for whatever reason (maybe some noise gets on the line, or you left the pin disconnected from something, or the board type you’re using routes that line somewhere problematic), the EPROM will have no data to load, and will just simply stop playing the game. If we duplicate the ROM to fill the entire EPROM, then no matter what that top address pin is, either 0 or 1, the NES will read the same data.

Note that you don’t need to do this if you tie the unused address pins to GND to keep them at logic 0, but I’m not going to make the tutorial overly-detailed and discuss each and every situation and the wiring required for it, and duplicating the ROMs is an easy enough task anyway!

Now, it’s time to program the ROM. I won’t go into too much detail here, you should be able to figure it out! Just plop the EPROM in the programmer, load up your CHR or PRG file, and program each chip. Then put some tape over the window to protect the data on it from getting randomly erased by stray UV rays from outside or something, and mark which EPROM is which.

So, you’ve got your PRG and possibly your CHR ROM ready to go. Now we’ll go into how to install those ROMs onto your board.

Back to top of Step 4

Step 5: Wire the chips to the board

Note that if you’re using a custom board, you shouldn’t have to rewire anything! You should just be able to plop your programmed ‘PROMs perfectly in their pertinent place! Wow, what an easy step! Don’t forget to put the other necessary parts on your board, too! But if you’re using a donor, you’ve got some more work to do.

Nintendo used a standard pinout for their chips that were 28-pins (except UNROM games), which means we can place those EPROMs directly into the existing sockets if you take the old chips out. (Note that I do not know of any compatible commercially available Flash Memory chips that have only 28-pins.)

For the 32-pin sockets, we need to do some extra work. You might have noticed that some original NES boards have 32-pin sockets, but only have 28-pin chips, so the top four pins are unused. That 32-pin socket’s bottom 28 pins (pins 3 through 30) are the standard 28-pin layout. Unfortunately, standard 32-pin memory devices don’t match that exact pinout, so using standard chips means you have to rewire some of the pins to put the signals in the right places.

There are two ways of doing this. You can either use your own wire, or use my adapter boards. The boards I have do all the rewiring for you, and has the added benefit of letting you make a game without removing any of the original chips. Removing these old ROM chips is kind of a pain, which is why I made these boards. I’ll go over each method.

Using the adapter boards (with an EPROM)

If you want to purchase these boards, visit the store page!

This adapter board is made specifically for Nintendo-produced boards with 32-pin sockets, and they DO fit on UNROM boards that have 28-pin sockets as well. You might have problems getting the adapter to fit on Konami-made or other third party boards, so please check before you start. It also won’t fit on boards like NROM or CNROM, which only have 28-pin sockets. But, as I’ve mentioned, if you’re making a game like that, that has 28-pin sockets, you don’t need to rewire anything anyway, so you can simply just take out the existing ROM chip and place your own 28-pin EPROM in.

Anyway, we’re going to put the adapter boards on the existing pins sticking out of the bottom of the board. We want the board to sit flat against the board as much as possible, to make sure it fits in the cartridge well, so we need to trim the pins on the other chips as close to the board as possible. Here’s an example for an SLROM board that will house my test ROM.

adapterstep1

After you trim the pins, you should be able to lay the adapters flat against the board. You might have noticed that there are some vias filled with solder. This can cause some problems if the exposed solder pads on our adapter board touch the solder on the board. It probably won’t happen, but better safe then sorry. If you’re careful you can avoid them by keeping the adapter a bit above the board, but to make it easy you can put some tape down on top of the pins and push the adapter down on top, creating a barrier between the board and the vias.

adapterstep2

adapterstep3

Note 1: If your board has a 32-pin socket, but only a 28-pin Mask ROM on it, you’ll have to add four wires to connect the unused donor cartridge sockets and the adapter board sockets. Just strip a wire back and heat up the existing solder, and push it through so that you can access it on the adapter board. After you’ve soldered the backside, add some solder to the topside and trim away the extra wire.

adapterstep4

Note 2: If you’re using a UNROM board, which only has a 28-pin Mask ROM on it, you can still use the adapter. Just make sure the adapter board pin 3 sits on ROM pin 1, and adapter board pin 30 sits on ROM pin 28. Check out the picture below (view from the backside) to see which pins to leave alone. You might have to trim off some of the plastic to get the board to fit in the cartridge again, but I haven’t had too much trouble fitting it in afterwards.

adapterstep4_5

Now, like the above picture suggests, you’ll want to solder the pads and make sure enough solder goes down into the hole to cover the pins. Also, on each adapter board you’re using, be sure to solder the top set of 5 pads on the back to the correct positions depending on if it’s a PRG or CHR ROM. Just add a solder bridge between the middle pad and the left or right depending on what kind of ROM it is. Note that if this is for a UNROM board, you must solder the PRG side as well as bridging the two extra solder pads.

adapterstep5

Finally, flip the board over, and cut pin 22 on both of the original ROMs. Make sure the pin doesn’t connect to the board anymore.

adapterstep6

Solder a wire from each pin 22, to pin 32. This will disable the original ROM by tying the /CE pin to 5V, without requiring you from taking it out of the socket.

adapterstep7

Now we can solder our own EPROMs into the sockets on our adapters.

adapterstep8

Now, all the wiring is taken care of!

Using the adapter board (with Flash Memory)

The only difference between using an EPROM and the Flash Memory is that pins 1 and 31 are swapped – pin 1 is A18 on the Flash, whereas on the EPROM A18 is on pin 31. Pin 31 on the Flash is /WE, which can be tied to VCC when not programming the chip. This is similar for the VPP pin on the EPROM on pin 1, that it can be tied to VCC when not programming the chip.

This is kind of annoying! Fortunately, this only makes a difference on the PRG ROM, not the CHR ROM (because the CHR ROM doesn’t use A18, instead the pin is tied to VCC). So, follow the instructions above, but for your PRG Flash, bend up pins 1 and 31 when you put your device into the adapter board socket. Then, solder a wire from hole 31 and connect it to bent-up pin 1. You can wire bent-up pin 31 directly to pin/hole 32 instead of routing it back over to the other side of the chip, because it just needs to be connected to VCC, which pin/hole 32 can provide.

Note that this is only completely true with 39SF040s. ‘020s and ‘010s don’t use pin 1 at all, as their address pins don’t go up to A18. In this case, you just need to wire pin 31 to pin/hole 32 and leave the other one alone. But it won’t hurt anything to also rewire it as if it was an ‘040.

Now, move on to the last step to finish up.

Rewiring by hand (with EPROMs)

Again, this is only for 32-pin devices, as the 28-pin ones don’t require rewiring (except UNROM – keep reading if you’ve got a UNROM game to make). First, we need to remove the old ROM chips. If you can’t tell which chip is which, look on NesCartDB. They do a good job of letting you know which chips are what. You can also look on the board itself, the ROMs should be marked as such. Be careful – many times the RAM chips look the same as ROM chips. Don’t remove any RAM!

There are a few methods you can go about doing to removing your ROM chips. The easiest way to remove these is to use a vacuum desoldering tool, that is, a soldering iron connected to a vacuum. These are pretty pricey, so I don’t necessarily recommend getting one for this. I use a pump desolder tool. I bought this model, and it works well enough. It’s a bit annoying to clean sometimes though. You can also try using some copper wick and removing the solder that way, but I don’t recommend it as the old solder is pretty bad at wicking up to the copper braid. Maybe if you dump enough new solder and flux on it you can get it to work. Finally, a more drastic measure would be to use a Dremel to cut off the chips since you won’t be using the original ones, and then take the leftover pins out separately, but you have to be careful not to cut into the board at all.

(Excuse the poor job I did here, this board had been reworked multiple times before so it started getting a bit ugly)

noadapterstep1

Now you’ve hopefully got a nearly blank, undamaged PCB with ONLY the mask ROMs removed. Make sure the sockets are fully empty. If there’s any residue solder left in those holes, it’ll be a pain putting your new EPROMs in.

An important note before we start the next step: be sure to use flexible thin wire (28 gauge is what I prefer), and when you solder down any wires, try to keep them off the top of the EPROMs. Try to route around the sides of the chips. The chips fit very close to the cartridge case, so any too much added height on top can cause the cartridge to bulge out, like this. You might be able to get away with it if your wires are thin enough, but I try to avoid it anyway.

So, how are we supposed to rewire these boards? Let’s take a look at the Mask ROM pinout, found on the NesDev wiki, and compare it to the EPROM pinout.

epromprgchrcompare

The standard EPROM pinout is shown on the left, and the socket for the PRG and CHR ROMs are shown on the right (for 32-pin boards). This will tell us how to rewire our chips. All we have to do is match the pin names together where possible. You might notice that a lot of them line up with each other, with only a few differences (the differences are underlined in red). So the easiest way to do this is to bend up any pins that are different from the socket, and add wires from those pins on each of our PRG and the CHR EPROMs to the correct socket number. Note that for these instructions, I’ll be referring to “pins” as the pins of the EPROM(s) we program, and “holes” as the pin number for PRG and CHR ROM sockets on the board.

Making a UNROM game? Read this part to get the hang of the general process, but your wiring instructions will come later.

For our MMC1 game example from earlier, since hole 24 is A16 on the PRG ROM socket, instead of putting our pin 2 of the EPROM in hole 2 on the PRG ROM, we need to bend up this pin and add a wire from it to hole 24. In general, you should bend these pins up, and clip the thin part of the pins off:

PRG EPROM: 1, 2, 24, 30, 31
CHR EPROM: 1, 2, 22, 24, 30, 31

noadapterstep2

Then, before you put your EPROMs in the slots, solder wires in the socket holes where your pins need to be rerouted. In general, you should add wires to these holes:

PRG SOCKET: 1, 2, 24
CHR SOCKET: 1, 2, 24, 31

noadapterstep3

Your first games, I’d recommend longer wires than you’d think to get the hang of it. You should eventually get a feel for how long they need to be. You can always trim them back if there’s too much slack.

Then, place the EPROM with the bent up pins in the correct sockets, and solder those pins in on the back of the board.

noadapterstep4

Finally, solder the wires to the correct pins, and add any extra wires as necessary. Remember, try to keep the wires going around the EPROMs rather than on top. You can also loop around to the back of the board if you’re trying to access a specific hole, just be mindful that the pin numbers are gonna be mirrored if you’re looking at the back of the board! In general, route wires like this:

PRG ROM:
Wire from hole 1 to pin 30 —– (A17)
Wire from hole 2 to pin 31 —– (A18)
Wire from hole 24 to pin 2 —– (A16)
Extra wire from pin 24 to pin/hole 16 —– (/OE to GND)
Note: Pin 16 is NOT bent out of the socket.

CHR ROM:
Wire from hole 1 to pin 30 —– (A17)
Wire from hole 2 to pin 24 —– (/OE)
Wire from hole 24 to pin 2 —– (A16)
Wire from hole 31 to pin 22 —– (/CE)
Extra wire from pin 31 to pin/hole 32 —– (A18 or /PGM to 5V)
Note: Pin 32 is NOT bent out of the socket.

noadapterstep5

And there you go! You might want to tape down the wires onto the boards to keep them secure, but make sure when placing it in the cartridge you’re not pinching any wires between the case sides.

Rewiring by hand (with Flash Memory)

As mentioned in the adapter board section, the only difference between using an EPROM and the Flash Memory is that pins 1 and 31 are swapped – pin 1 is A18 on the Flash, whereas on the EPROM it’s on pin 31. Pin 31 on the Flash is /WE, which can be tied to VCC when not programming. This is similar for the VPP pin on the EPROM on pin 1, that it can be tied to VCC when not programming the chip.

This is kind of annoying! Fortunately, this only makes a difference on the PRG ROM, not the CHR ROM (because the CHR ROM doesn’t use A18, instead the pin is tied to VCC). So, follow the instructions above detailed for the EPROM, but when wiring the PRG ROM, follow these instructions instead:

PRG ROM:
Wire from hole 1 to pin 30 —– (A17)
Wire from hole 2 to pin 1 —– (A18)
Wire from hole 24 to pin 2 —– (A16)
Extra wire from pin 31 to pin/hole 32 —– (/WE to VCC)
Extra wire from pin 24 to pin/hole 16 —– (/OE to GND)
Note: Pins 16 and 32 are NOT bent out of the socket.

Note that this is only completely true with 39SF040s. ‘020s and ‘010s don’t use pin 1 at all, as their address pins don’t go up to A18. In this case, you just need to wire pin 31 to pin/hole 32 and leave the other one alone. But it won’t hurt anything to also rewire it as if it was an ‘040.

Making a UNROM game by hand

This board is a bit different. It uses a single 128 KB ROM (PRG), but doesn’t have room for a 32-pin EPROM. There aren’t any commercially available 28-pin 128 KB EPROMs, so that means you still have to use a 32-pin EPROM instead.

Note that you can also use these steps with Flash Memory as well, as UNROM games are small enough that the differences between the Flash and EPROM don’t come into play.

Here’s some quick instructions on how to wire it up:

  1. Bend up pins 1, 2, 24, 31, and 32 on the EPROM.
  2. Place a wire in hole 22. Hole 22 corresponds to the 22nd pin of the 28-pin socket on the PCB.
  3. Place the EPROM in the board. Make sure that pin 3 of the EPROM is placed in hole 1 on the PCB. Pins 1, 2, 31, and 32 should overhang on the PCB. You should notice that the bent up pin 24 is on top of hole 22 with the wire coming out of it.
  4. Connect pins 30, 31, and 32 together, in order to power the EPROM and tie unused address pins to 5 V supply.
  5. Connect wire from hole 22 to pin 2, to put A16 in the right place.
  6. Connect pin 24 to pin 16 to enable the output of the chip, by tying /OE to GND.

Restoring save functionality to a game

If your game uses a board that can be used for games that store save data, but the original game doesn’t use that function, you might have to add some parts yourself to use the save feature. Here’s an example of a game (Spot) that uses a board that supports save games, but never used that capability itself. R1, R2, D1, D2, CB, and the battery are missing.

spot

In D1 and D2, add regular or Schottky diodes (NOT zener diodes). Make sure they can handle at least 10V or so. A great, cheap one to use would be the 1N913. When you put them in your board, make sure you put it in correctly, because orientation matters. On most diodes, the cathode is indicated with a black bar.

diode_pic

The diodes prevent the NES voltage from backfeeding into the battery, since the battery operates at 3 V and the NES operates at 5 V. R1 and R2 should work fine with any value resistor around 1 kΩ.

In the spot labelled “CB”, place an electrolytic capacitor (at least 10 uF, 16 V rated). Make sure the polarity is correct on this capacitor as well. This is to protect the RAM from errant voltage spikes, or fast changes in voltage level (like when you turn the game off). If you don’t want to put this in, it’ll probably still work fine, but your saves are at a higher risk of being erased. On older games, some used to say on the save screen to hold the reset button in before you turn off the game – I believe this was to reduce the possibility that spikes from the voltage supply would screw up save data.

Now, onto the final step!

Back to top of Step 5

Step 6: Finalize your game

Now, you’ve got your game all wired up. Stick it back in the cartridge, careful not to pinch any errant wires, and try it out! If it doesn’t work immediately, try these steps.

Troubleshooting tips

Some games have what’s known as “mirroring“. It basically controls how graphics wrap around the screen. Horizontal mirroring is used for games that scroll vertically (like Ice Climbers), and vertical mirroring is used for games that scroll horizontally (like Balloon Fight).

See the little solder bead underneath the left mask ROM? It’s connecting the wire used for vertical mirroring (denoted by the “V” on the board). If your game is working fine, but the graphics just scroll the wrong way, then that means you have the wrong mirroring active. Just switch to the other pad on the PCB. An easy fix, but not all games use mirroring techniques.

If your solution isn’t that easy, don’t lose hope yet. Here are some other troubleshooting tips. This is the order I would try them in – it’s listed from shortest to longest amount of time to check.

  • Check for any cold solder joints. They’ll be recognizable by their “misty” or “crumbly” appearance. To fix them, just heat them up (and make sure they’re heated sufficiently) and put some new solder on them.cold
  • Also, make sure you didn’t miss any pins or wires. You’ll have a lot to solder, after all. It only takes a single pin to be disconnected to screw up the whole thing.
  • Make sure your NES works with other normal games. I know this sounds silly, but you never know if your console just kicked the bucket or not between games. I once bought Super Mario RPG for the SNES and the sound didn’t work – but it wasn’t the game, it turns out my SNES audio fried since I last played!
  • Check to make sure all your chips are in the correct orientation.
  • Check to make sure you didn’t cut any traces on the board accidentally – if you did, you’ll have to add a replacement wire.
  • If you’re using a donor, did you remember to test the original game? Maybe something else is damaged on the board, and it’s not your fault. Try replacing the capacitors (smaller ones are 0.1 uF, the large electrolytic is 22 uF). Clean the contacts that go into the NES on the cartridge. Use like rubbing alcohol or something, look online for resources, I’m not good at housekeeping stuff.
  • Finally, for donors, even if you THINK everything is connected correctly, use a multimeter and check the continuity of each pin on your EPROM or other chips to its destination. This means testing the cartridge connector in some cases. This is arduous – but any time I was stumped, I usually found that just one of the pins I thought was connected wasn’t in reality. If you find one disconnected, you’ll have to add a wire to connect them.

If all else fails, you might have to desolder your chip and try a new one. Unfortunately, it’s hard to troubleshoot these boards sometimes. One thing that I’ve been doing is making some test boards out with my adapters, and sockets. I have one for each popular type of board, like TLROM, SLROM, and UNROM.

IMG_20200617_005313

This way, I can program ROMs and try them out in a known-working board before permanently soldering them onto a real board. Plus, even with the sockets, the board still fits inside the cartridge nicely, so it’s easy to test the games out!

I also offer a test kit version of my custom board for the basic NES games!

MVIMG_20200911_160108

Make a label

So now you’ve got your game all made up and working, you can add the label to the cartridge. Personally, if I’m making a game that I want to look nice, I just buy a pre-made label. There are a ton of stores out there that sell them. I’m usually more preoccupied with playing the game, rather than looking at it. But if you want to make one yourself, there are plenty of resources online to help you find out how to make the labels.

Here’s a quick and dirty tutorial:

1) Remove the old label. Use Goo Gone, or I’ve heard that baking soda and vegetable oil mixed together does a decent job of removing it.

2) Find the box art, or actual cartridge label, and fit it into a cartridge template. There are plenty of templates for the label size online.

3) Print your design(s) on a full sheet label. I recommend printing more than one cartridge label at a time, because the full sheets get expensive. See if you can mooch off of someone, or buy them in single pieces from your office supply store.

4) Use a full page lamination sheet to cover your full sheet label. That’ll give it a nice shine.

5) Cut out your label and place it on your cartridge. Done!

Or, you could just keep your games looking like this. I’m not gonna judge you.

Back to top of Step 6

Conclusion

Congratulations! You have successfully created your own NES game!

Remember that selling reproductions of licensed games is illegal! I do not condone this! And don’t go to conventions trying to sell them, passing them off as legitimate! That’s called being a jerk. Don’t rip off genuine game collectors, we’re nice people. I can’t tell you how many times I’ve bought games on eBay or in a store that I thought was genuine, and it turned out to be a reproduction. It shouldn’t happen!

Hopefully this guide was comprehensive enough to give a good understanding of how to make a game, and why we did each step. I tried to be as clear and comprehensive as possible, but I’m sure I missed something here or there. If you find any errors, let me know and I’ll try to fix it, I plan to maintain this tutorial to keep it as accurate and helpful as possible!

Thanks for reading, and have fun!

I got a lot of information from the great people over at the NesDev forums. They have a lot more information than I posted, and if you’re itchin’ for more technical stuff, head on over there and check it out!

And if you’d like to purchase any of my materials, head over to the store page and I’ll be happy to hook you up!

60 thoughts on “How to Make an NES Reproduction Cartridge

  1. Hello, I’d like to ask a quick question. When using an UNROM board, can I use a 128kb PRG ROM or am I limited by 64kb ROMS (due to the 28 pin situation, which on other boards seem to limit the eproms to 27c512 chips)? Thanks in advance.

    Like

  2. Thank you very much (I’ve read the wiring instructions, but didn’t know whether it meant that I could use bigger PRG roms or that I was constrained to using 64kb of data at most).

    Like

  3. One more quick question, I have a spare w29ee011 eeprom lying around. This appears to be pretty much pin compatible with a 27c010 with the only thing being that write enable is on 5v (unrom prg). According to the datasheet WE and CE need to be low and OE needs to be high in order to actually write to the chip. can I simply substitute this chip for a 27c010? (and leave the wiring (tying 30,31, and 32 together) the same?)

    Like

    • If your programmer can program that EEPROM, then yeah you should be ok. Follow the same wiring guide as in the tutorial. The pinout seems to be all the same as a 27C010 except pin 1, which isn’t used for the EEPROM so it can be tied wherever.

      Like

      • Quick update, I’ve tried the EEPROM but it wouldn’t work (blank screen). Fortunately I used a socket, so replacing it with a 27c040 was easy.

        Like

        • Update 2, the EEPROM works fine now. It turns out that my programmer has a ‘protect’ setting for this chip, simply reburning the chip without the setting fixed it. Thanks for all the help. (Now I just need to figure out what’s wrong with my (genuine) copy of Time Lord, but that’s a different issue all together)

          Like

  4. Don’t worry , I’m happy with all the help you provided. One thing in the guide though, there’s some conflictiong information. In the wiring by hand section, you first state that pin 30 on the chr rom needs to be bent up, but a little later you say that it should not be bent out of the socket.

    Like

Leave a Reply to thepoorstudenthobbyist 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