How to Make an NES 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. I am not responsible for any damage to you or your property – attempt these projects at your own risk!

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 make. But I recommend trying to use a new board whenever possible to avoid cannibalizing the ever-dwindling supply of original NES games. I’ll go over some options later on.

discrete_1

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/or CHR, where applicable) 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 or vice-versa 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. There are two main ways I’ve used to prepare the proper PRG and/or CHR files.

FamiROM

FamiROM is a great tool that takes care of a lot of steps all at once. But for now, we’ll just be using it to get information about our game. To load up your ROM into the program, just click “Load ROM” and locate it. Then, you should get a window with a bunch of details about your game.

famirom_example

Note the “prg size” and “chr size” fields on the right (Program and Character). Keep this in mind for later – and don’t close this window just yet, we’ll be revisiting it later on.

ReadNES3

Note that, especially if you are a beginner, I recommend using FamiROM over ReadNES3. But I will detail how to use it here, just in case.

The other tool I’ve been using for a long time now (only recently supplanted by FamiROM) is ReadNES3. 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. As an example, a game like Balloon Fight doesn’t use the same board type (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. The first thing you can do to check what kind of board to use is the information provided by FamiROM. Let’s look at the information of our test ROM again.

famirom_example

Under boards, it lists “SxROM, MMC1 [SKROM, SLROM])”. This means you can, in general, use boards that come from the SxROM “family” of boards (where the lowercase ‘x’ stands for other capital letters). FamiROM specifically calls out SKROM and SLROM as suitable board types – I haven’t run into any problems with these suggestions, but it doesn’t hurt to verify them yourself.

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, or you want to double-check FamiROM, the first thing to do is try to find your game on NesCartDB using the search function. There are profiles for pretty much all NES (and Famicom!) 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, a kind person recently hosted a stripped-down version of the site at NesCartDB.com, or 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. If FamiROM doesn’t give you that information, I know Romhacking.net for example usually has good information about what kind of hardware is necessary for the game.

So 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. This information shows up on the right side of the page.

slrom_nescart

So, I need either a custom SLROM board, a North American SLROM donor cartridge. Looks like FamiROM was right! This is a good point to try to decide what kind of board you’ll be using.

Using a custom PCB

I offer three custom boards – one for games with discrete mappers (NROM, CNROM, AxROM, and UxROM), one for MMC1 games (SxROM), and one for MMC3 games (TxROM). Note that the lowercase ‘x’ in these board types can be replaced with other various capital letters (i.e. AxROM = ANROM, AMROM, and AOROM). Here’s a small gallery of some of my offerings:

Neat, right? I think they look downright beautiful myself, winky emoji. 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 for each board. You can find them in the menu bar, or use these links:

Discrete Mapper Guide
MMC1 Mapper Guide
MMC3 Mapper Guide

I also offer the boards on my store page with parts kits included to take all the guesswork out of it. I’d recommend opening the guides 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! If you end up using a custom board, go ahead and go to Step 3. Otherwise, if you use a donor, continue on.

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. Even though that size is smaller than what we need, 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 we have an example game that has a PRG ROM that’s 256 KB instead of 128 KB, so we’d 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 we’d have to find a game that uses one of these two variants for the hypothetical larger 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!

But what if my game is a rare board type, and the only donors available are expensive?

You might be out of luck, at least as far as donor carts go. If you can’t find a suitable donor board for your game listed in the results of FamiROM, then you’re stuck, unless a custom PCB exists for you to use or if you’re ok with spending a lot of money on a donor cartridge that you might end up damaging. Games that use the MMC5 mapper come to mind – all of those games are usually quite expensive. Sometimes you can use a Famicom board with a converter (Famicom games have 60 pin cartridge edges, NES games have 72 pins). But maybe there’s someone else online who figured out a way to make your game already using a donor, or maybe there’s a Famicom board that is cheaper – Dr. Google will be your friend there. And of course, there are always flash carts for you to use!

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 games – a 28-pin version, and a 32-pin version. Which should you use? Well, the biggest restriction 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 address 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 bought a bunch 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 (other than some specific homebrews/hacks), 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.

Using New Flash Chips

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. This is what I use on ALL of my games nowadays (on custom PCBs). The UV EPROMs are old parts that are usually removed from existing boards, erased, and cleaned up. Sometimes you can get defective parts.

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.

When I say “expanding the ROM” I mean specifically duplicating the ROM and stitching it together to fill up the chip. So a 128 KB ROM on a 256 KB EPROM would need to be doubled. 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! This step is only necessary if your EPROM is larger than the ROM’s CHR or PRG file. You can do this automatically using FamiROM, or if you used ReadNES3, you can do it manually using command prompt.

Using FamiROM to prepare your ROM file(s)

Let’s look at the FamiROM information we had earlier again.

famirom_example

On the bottom left, you’ll see “target EPROM size”. Pick the size of EPROM (or Flash chips) in the drop-down menu that you’ll be using. Once you do that, just hit “split” and FamiROM will remove the .iNES header, split it into PRG and CHR components, and automatically create an expanded version of your ROM(s). Let’s say I wanted to use 27C040 chips for my PRG and CHR ROMs. This is what will show up in the folder.

mmc1test_split

You’ll see the EPROM name, as well as how many times it was duplicated (x4) is in the file name. That’s it!

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. Skip ahead to Step 5.

Using Command Prompt to prepare your ROM file(s)

Only do this if you’re not using FamiROM. All we need to do is duplicate the .bin files generated by ReadNES3 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

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! Skip to Step 6 if you’ve got a custom board. 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. (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

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.

Note that the pictures used in this section are for a previous version of the adapter board – the new ones will also have solder pads to select between EPROM and Flash.

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

Also, make sure you solder the correct direction for using EPROM or Flash (for new revisions of the adapter boards – not shown in the pictures below).

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! 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)

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, R3, D1, D2, CB, and the battery are missing.

spot

In D1 and D2, add diodes (I recommend the 1N4148, which has low reverse leakage current). 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. R2 should work fine with any value resistor around 1 kΩ, and R1 and R3 should be around 10 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 (slightly) higher risk of being erased.

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 a setting for what’s known as “mirroring”. It basically controls how graphics wrap around the screen. Horizontal mirroring is used for games that scroll vertically, and vertical mirroring is used for games that scroll horizontally.

See the little solder bead underneath the left mask ROM? It’s connecting the wire used for horizontal mirroring (denoted by the “V” on the board – yes, it is backwards). If your game is working fine, but the graphics just scroll the wrong way, or you have some other random graphical glitches, 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. You’ll only see these on the more basic PCB types.

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.
  • If you’re using a CIC clone chip, try pressing the reset button five to ten times, and try power cycling the console as well. This will reset the region detection on it – your chip might be set to NTSC but it needs to be PAL, for example. (Also make sure the proper capacitors are present on the board around these chips).
  • 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 done in the past is put sockets on the adapter boards for the chips to sit in.

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 socketed version of my custom boards for easy testing!

discrete_3

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 and the endless source of NES knowledge at the wiki. 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!

73 thoughts on “How to Make an NES Cartridge

  1. I have had a lot of major failures lately with TLROMS.
    After 2 or 3 boards of cut traces, lifted traces and vias, failed repairs of said with enamelled copper, copper tape, and a nickel pen, today I feel like I made a breakthrough.

    I found that re-tinning the existing solder points before desoldering and then moving the pins back and forth until they are all loose, followed by a gentle lift with the L-shaped lifter covered with tape (so as not to cut traces), allowed both 32-pin ROMs to be lifted out smoothly with no issues.

    I meticulously wired up both ROMs as prescribed to only get a black screen.
    After brushing off flux with IPA and fixing a loose connection I found with my meter, I got a grey screen.

    I have to say I do enjoy this hobby and I’m learning (well, refreshing) a lot of electronics knowledge, and I find NROMS, CNROMS, and even UNROMS all easy enough to deal with, but the SL and TL ROMS just feel like too much work in terms of time spent desoldering and rewiring. My failure to success rate is too high to justify continuing to work with them.

    I have ordered the boards offered here for non-destructive creation and I am looking forward to working with them.

    I’m just kind of ranting here but has anyone else experienced the same failures with TL amd SL ROMs?

    Like

    • Hey thanks for the order! Sorry you’ve had problems getting them to work with donors.

      Removing the ROMs safely was the trickiest part for me. I killed a few boards myself removing them (also why I made the adapter boards to make games without removing the original ROMs). When you’ve gotta replace chips and rewire them correctly, and also not damage the original board in the process, there are a lot of opportunities for an errant solder blob or cold solder joint to screw things up.

      I feel your pain!

      Like

Leave a reply to Bob Cancel reply