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 EPROMs
Step 4: Expand the ROMs and program your EPROMs
Step 5: Wire the EPROMs 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).
2) EPROMs. The heart and soul of the NES game. This is where the game data is stored, 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.
3b) Adapter boards. I make these and sell them on my store page. They make rewiring the EPROMs 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.
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.
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).
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.
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.
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.
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:
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 EPROM 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.
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?
Let’s click on the other profile.
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.
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.
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.
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!
Step 3: Choose your EPROMs
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). There are also EEPROM, which are erasable using specific electric signals (the extra E in this case meaning “electrically”). But it’s much easier/cheaper to just use EPROMs for our purposes.
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 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 an EPROM, 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 EPROM, 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 EPROM for the NES to use. The mode that the EPROM 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.
Step 4: Expand the ROMs and program your EPROMs
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:
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.
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.
Step 5: Wire the EPROMs 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. But for the 32-pin EPROMs, 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 EPROMs, 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 EPROMs 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
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.
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.
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.
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.
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.
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.
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.
Now we can solder our own EPROMs into the sockets on our adapters.
Rewiring by hand
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)
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.
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
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
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.
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:
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.
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.
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.
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.
Here’s some quick instructions on how to wire it up:
- Bend up pins 1, 2, 24, 31, and 32 on the EPROM.
- Place a wire in hole 22. Hole 22 corresponds to the 22nd pin of the 28-pin socket on the PCB.
- 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.
- Connect pins 30, 31, and 32 together, in order to power the EPROM and tie unused address pins to 5 V supply.
- Connect wire from hole 22 to pin 2, to put A16 in the right place.
- 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.
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.
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.
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.
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.
- 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.
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!
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.
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!