Skip to content

Programming the ROM chips

Nick edited this page Oct 23, 2025 · 6 revisions

The main program I recommend using for preparing ROM files for NES games is FamiROM, an amazing program made by FrankWDoom. I am also using a T48 programmer to load the files onto the chips. The rest of this page will require this software and hardware. This isn't the only way to program your chips, but it is the way I do it and in my opinion the easiest.

Furthermore, for this page, I will be using Spiritual Warfare as an example ROM. This is an unlicensed game, but still a perfectly acceptable example.

Load your ROM

First, load your ROM file (.nes extension) into FamiROM. This file has both the PRG and CHR components combined together, if the game does not use CHR RAM. If your game does use CHR RAM for the CHR component, then there will be no CHR data contained in this file - the RAM is used only during operation and therefore does not get programmed beforehand. The characteristics of your game will be shown on the right.

FAMIROM

If you did not know what kind of board you needed to make your game, you can find it there listed at the bottom where it says "boards". There may be multiple options, depending on the game you picked. If you are making a game that has an odd board type, such as Tengen Tetris, you will instead need to check the mapper number labeled next to "mapper" - in Tengen Tetris's case, that's mapper 148. But note that most of my boards do not support weird or odd mapper types, other than the Discrete Logic board. If you are using this wiki to make games with my boards, please check the repos to ensure your game is supported before proceeding!

In this example, the board is "Color Dreams" which the Discrete Logic Mapper board can support.

You will also note that on the left under "target EPROM size", you will see the PRG and CHR EPROM names pre-selected. These selections are the UV EPROM examples with the minimum required space for the game you want. As long as your chips are this size or larger, you can use them - furthermore, these menu options do not mean you need to use UV EPROMs as listed, they are simply analogs for the sizes of the chips you need. Pay attention to the sizes in parentheses more than the actual chip names. (Games that use CHR RAM will simply show a greyed-out box for CHR)

Personally, I use 39SF040 NOR Flash chips for all my NES needs - this is analogous to the 27C040 in the drop-down menus. The reason is the 39SF040 chips are large enough for nearly all NES games, for both PRG and CHR ROM sizes.

Split the ROM

Choose the size of the PRG and CHR (if you need it) on the drop-down menus that correspond to the ROM chips you are using. As I said earlier, the 39SF040 that I use for everything corresponds to 27C040. So, my screen will look like this:

image

Then, click "Split" and check the folder your original ROM file was loaded. You should now have separate PRG and CHR .BIN files, unless your board requires CHR RAM in which case you will have only the PRG file (note: it is still important to run your .nes file through FamiROM even if you do not have CHR ROM, because FamiROM will remove any "header" data in the file that must be stripped away for use on a cartridge). You will also note that the sizes of these files match the size of the ROM chip you are using in KB. The file name will also indicate the ROM chip and a multiplier that equals the total .BIN size divided by the ROM component size. Instead of leaving the unused portion of the ROM chips empty if you choose a ROM chip with more space than is required, FamiROM duplicates the ROM and appends it to the end to fill up the entire ROM space with data. The reason for this is, in a very reductive sense, is to make it easier to install in circuit boards by functionally "disabling" upper address pins you don't need.

In my example, the PRG and CHR sizes were 128KB each. To fit into the 39SF040, a 512KB chip, each component had to be duplicated 4x to fill up the entire contents of the chip, hence the "x4" in the file names.

image

Program the ROM Chips

Now, using the T48, you can very easily just put the chips in the programmer, load up the file, select your chosen ROM chip from the "Select IC" menu, and program your PRG .BIN to your PRG chip and CHR .BIN to your CHR chip (again, only if your board does not utilize CHR RAM instead) by clicking Device > Program. If you have both PRG and CHR, be sure to label or otherwise make note of which is which.

T48

Clone this wiki locally