TapeDump.NES: Dump NES/Famicom prototypes without any custom hardware!

TapeDump title screen

This is a rudimentary program (but it works!!) that allows you to dump NES/FC cartridges to computer without anything more than an NES devcart (like the PowerPak, of course!) and a regular PC or digital audio player with sound recording function.

DOWNLOAD TapeDump version 1.0b

Mappers supported: NROM, SxROM (MMC1), UxROM, CNROM, TxROM (MMC3), AxROM, Konami VRC 2a 2b 4a-e, VRC 6a 6b, and FDS Disks

Its basic method of operation is this: boot up TapeDump from a cartridge, swap the cartridge (slightly risky) with the one you want to dump, and then record the digital dump as a 300-5200 bps stream of audio shrieks.

I programmed it up when faced with a Famicom proto that had its EPROMs soldered to the PCB. Did I want to desolder the chips and risk frying them? Or, send the cart to someone else and wait a week for the ROM dump? No -- I was too impatient for that. This is actually the 5th or 6th "poor-man's" dumper that I have made which itself runs on the FC/NES. Earlier dumpers of mine tried saving to the FDS via FDSLoader cable, or dumped ROM data to the screen for digitization. The former (and earlier programs) needed special hardware for dumping; the latter one worked well but of course required a game that had CHR-RAM. How stupid I was to not consider the NES' audio circuitry for output, something there to be used no matter what weird cartridge is inserted for dumping!


Getting Started...

You need a way to get this program loaded onto the NES or Famicom, of course. Typical ways include running it on a PowerPak cartridge, or on an EPROM or EEPROM devcart. Once the program starts up, you need to choose a compatible mapper (or "NROM" for a generic cartridge.) One that's done, my program loads its main code into RAM and runs from there, meaning it will (ideally) keep running even after you have removed the devcart and inserted your target cartridge for dumping.

TapeDump interface

When the program has loaded and is running in RAM, it will show some basic instructions. You can remove your EPROM/Dev cartridge and insert the cart to be dumped.

Safety Notes:

*1: Removal or insertion of cartridges while the NES/FC power is on runs the risk of damaging either the cartridge, its save RAM or the console. Do so at your own risk!

*2: NES units that don't have their lockout chips disabled will reset when cartridges are removed. You need to have a lockout-disabled NES in order to dump carts.

*3: To reduce the occurrence of CPU crashes, remove and insert your cartridges quickly. My program also flashes the screen slowly as a way of showing it's still running.

*4: When dumping FDS disks, keep the disk OUT of the drive when swapping the FDS RAM adaptor in. Basically, you don't want to risk erasing a disk or a save file out of carelessness.

After inserting the cartridge to be dumped, check the sanity of the program by tapping the A button to cycle the background colours (which also changes the bps settings.) The NES CPU can often crash when a cartridge is inserted too gradually.

If the dumping program appears to be running normally, don't worry about garbled graphics; proceed to the controls below.

 

 

 

 

                   

 

 

 
Up
       
Controls
 

Dump SRAM

Left
Right
Dump PRG    

 

 

         

 

 

 
Down
           
B
 
A
 
     
Select
Start
 

 

 

 
   
Dump CHR
Dump All
Send iNES Header
Change bps
 

Since removing and inserting cartridges changes CHR graphics between ROMs, open buses, and possibly empty RAM chips, there is no sure way to display graphics on-screen after a cartridge has been swapped in. Therefore, settings and dumping steps will be indicated through the background colour on-screen only.

Explanation of initial controls
Press A -
Colour Appears
Result

These settings select the data rate at which bits will spew out of the digital audio channel. 300 bps (default) is the most reliable but also the slowest, taking about 2:50 to transfer 4K of data.

1200 bps is four times faster, and still very reliable; however, occasional popping out of the NES' sound channel sometimes fools software on the computer decoding 1200 bps data into adding an "$FF" byte at the beginning of each dump. Not a big problem, but watch out for oddly-sized data files after dumping.

2400 and 5200 are experimental speeds, meaning reliability drops accordingly, and the audio recording has to be massaged a bit before reliable software decoding can be done.

|
Dumping speed will be set to 300 bits per second.

|

" " " 600 bps
|
" " " 1200 bps
|
" " " 2400 bps
V
" " " 5200 bps
Press B - Send iNES Header + $FFD0~$FFFF

This is recommended upon first insertion of a cartridge, to test that it's correctly inserted and all its address/data lines are working.

TapeDump will check the cartridge's mirroring, existence of SRAM (WRAM), PRG-ROM and CHR-ROM size, and report it as a usual iNES header (16) bytes for easy comparison to existing ROMs.

It will also send 48 bytes at the end of the 6502 address space for verification of the vectors in the ROM. This all makes up a short 64 bytes that can be checked quickly before doing a time-consuming proper dump.

Press Start - Send entire cartridge as a .NES file

This is the usual next step -- TapeDump should, hopefully, dump the entire cartridge and send it as a regular .NES formatted file: 16-byte header, PRG data, and CHR data if any.

Go and make a cup of tea, because here are the:

Dumping times for the average cartridge
bps
300
600
1200
2400
5200
128K ROM
80m
40m
20m
10m
4m41s
256K ROM
160m
80m
40m
20m
9m
Press Left - Send 8K SRAM

Each mapper file that supports it should be able to autodetect if cartridge save-RAM (SRAM) is present. If it is, it'll dump it as 8K of raw data. The NROM mapper file always allows SRAM dumping as a fallback dumper.

Press Right - Send CHR only
I guess this is for doing raw dumps or redumps. Dumps only the CHR-ROM section of a cartridge. Games using CHR-RAM are not dumped, of course.
Press Select - Send PRG only
As above, but for the PRG-ROM section of the cartridge.

Start Dumping!

If you have any experience with old home computers, the following won't be a surprise. If you don't, you might be amused at how low-tech it is. Old '70s and '80s home computers used audio cassette tapes as a storage device, saving files at rates of 300-1200 baud by sending each byte serially as 11 bits encoded into loops of 1200/2400 Hz tones. A standard was set for this method, known as the "Kansas City Standard" or "Byte" (the magazine, not the data size) standard.

My program should conform more or less to this standard as well, meaning you can use KCS decoding programs on the PC to retrieve cartridge dumps from the NES. When dumping starts, the NES/FC screen will go black, a ~6 sec. leader tone will sound, and the program will dump data at the selected bps rate, as a high-pitched screech through the digital audio channel of the NES/Famicom. Record this audio output to your PC sound card... or an old cassette tape if you really want to be retro.

dumping...

 

 

 

-->

 

 

 

finished.

Record the audio on your computer at 22050 Hz or higher, and be sure to save it in a lossless format, such as WAV or AIFF. (Lossy formats such as MP3 and others apparently introduce too many overtones and distortion in the signal to be useful for anything over 300 bps.) You can then use software to decode the audio file back into binary data. I recommend the simple and effective KCS program for decoding on PCs.

Note about the bps rate: 300-1200 bps are "standard" in the KCS format, and can be recorded at 22050 Hz, 8-bit, as the KCS08 program requires. The 2400 and 5200 bps rates are experimental and thus less reliable. For 2400, you should record at 44100 Hz and save the audio file at that sample rate and at 8-bit. (KCS08 requires a 22050 Hz file, but at twice the pitch and twice the sample rate, it's fooled into thinking it's a regular 1200 bps dump.) Same goes for the 5200 bps. Record at 96000 Hz, and save the file at that rate.

The 2400 and 5200 bps audio quality is not optimal, due to the frequency response of the NES, so you will probably have to have a nice, quiet audio line for recording. Watch out (in a waveform editor) for spikes in amplitude between the 5-second continuous tone and the data stream, as this might introduce unwanted bits in the data. Try recording in 16-bit then boosting or normalizing the entire recording before saving at 8-bit. Also, if KCS gives you a big fat error, try using the -G2 switch to help with the pitch adjustment, and -F10 or -F-10 to help readjust the DC offset.

Other Gotchas:

* If you're using a Famicom to dump games from (as I am), remember to shut off the 2nd controller's microphone! Buzzy or scratchy mic sliders or mics turned on recording ambient room noise are likely to ruin the dump!

* Since the audio path of the Famicom travels through the cartridge slot, a FC unit with no cartridge will produce no sound. Similarly, dirty connectors can introduce scratching. Finally, cartridges with additional sound chips (such as the VRC6 or FDS) mix their own audio in, making for a slightly quieter recording. Also make sure that the expansion sound chip is silent after you have inserted the cartridge.


FDS Disk Dumping
Yes, I've whipped up a little mapper file that interfaces with the FDS RAM adaptor and dumps valid .FDS files (with 16-byte FWNES header at the beginning.) It probably won't be able to dump nonconforming disks like Hacker copiers, Game Doctor disks, or somesuch, but it is able to read the full disk content of valid disks, including hidden files. As of this time, no disk writing is possible.
FDS Dumping interface
Different controls:
Press B - Send disk listing

This uses the RAM adaptor's built-in directory routine to list the disk name, filenames, and total size (in a raw stream.) Good for a quick check of the contents and correct formatting of the disk.

Since its data is analogous to the iNES header (+$FFD0) preview dump, it uses the same button.

Press Start - Send full.FDS file

This should send a full 65516-byte dump of the disk contents of a single disk side. If dumping side B, it will not have the FWNES header and will come to 65500 bytes instead.

Press Select - Send files on disk only

As above, but doesn't include a header and doesn't pad the final dump to 65500 bytes. This is useful if you don't want to wait for TapeDump to fill up the rest of the assumed disk space with dummy bytes that it has to send over.

Of course, to examine the disk contents or to run the dump in an emulator, you'll still have to do the padding yourself in a hex editor.

Since this program depends on a correctly-inserted FDS RAM adaptor (or FDS enable switch on a Twin Famicom), it will test for correct insertion before dumping. If this test fails, you will see the background colour turn a wine red colour, indicating a fatal error.

Even with the RAM adaptor inserted, numerous errors could still happen, such as no power to the FDS drive, disk not inserted, drive not ready, blank or malformatted disk, etc. These errors will be reported by a yellow background colour. Check all wiring, recheck the disk or use a different, working game to test first, or try turning off the power and reloading TapeDump.

Alternately, I'd recommend using a Twin Famicom, as once you remove the TapeDump cartridge, all you have to do is slide a switch to get the FDS ROM in correct working order.

Dumping a single side will take a few passes of the drive read head, so don't be surprised to see the motor start up a few times in the middle of the whole process. TapeDump loads as much as it can into the 32K FDS RAM and dumps it as audio before rereading the disk and starting where it had left off before.

Other Gotchas:

* The FDS drive uses at least two motors in its operation, which can cause voltage spikes when they power up. Unfortunately, these spikes carry directly over to the audio output of the Famicom and show up on recordings. After recording a dump of a FDS disk, I recommend going into an audio editing program and cutting out these spikes (visible in the silence preceding the 6 second lead-in tone) for each time the disk is started up for reading.

* The dumping program keeps reading a disk until an error is encountered. If it's a minor error like "end of disk" or "bad file" (which also usually means the end of disk contents) then it will dump whatever it had read up to that point. If it's a major error, nothing gets dumped and you might have a hardware problem or simply a bad disk.


* This program is still a work-in-progress with a few bugs here and there. Please remember that TapeDump basically runs inside of the NES' meagre RAM space from $0140 to $06FF or so; thus it can never be a full-featured dumping solution with graphics and sound and whatnot.

* Thanks must go to Kevin Horton, BootGod, et al, since I used their CopyNES plugins as a basis for the interchangeable mapper plugins that run from $0400-$06FF. Thanks also to the folks at NESDev for various code help or comments.

Chris Covell