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. 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!
You need a way to get this program loaded onto the NES, of course. Typical ways include running it on a PowerPak cartridge, or on an EPROM or EEPROM devcart. Once the program starts up, it loads the 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.
|
When the program has loaded and is running in RAM, the screen will be a light blue (left). You can remove your EPROM/Dev cartridge and insert the cart to be dumped. *1: Removal or insertion of cartridges while the NES/FC power is on runs the risk of damaging either the cartridge or 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. |
After inserting the cartridge to be dumped, check the sanity of the program by tapping the U,D,L,R, A, or B buttons. The NES CPU can often crash when a cartridge is inserted too gradually.
If the dumping program appears to be running normally (background colours change on button presses), don't worry about garbled graphics; proceed to the controls below.
|
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 |
|||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||
|
|
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 ~5 sec. leader tone will sound, and the program will dump 4K/8K of data at a time starting at the initial address, 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. |
||||||||
Select
Pressed |
Start
Pressed |
|||||||
Dumps 8K of CHR data from $0000-$1FFF in the PPU space. Once it's finished, it'll reset the read address back to $0000, and increment the memory mapper to the next 8K. I chose to do it this way so that you can dump multiple CHR banks of a cartridge by simply pressing "Select" each time the previous dump has finished. Note that the very first CHR dump this program performs will prepend a 2-byte header "$CB, $xx" to identify it as PPU/CHR data and its bank number. |
Dumps 4K of data from the default/specified address in the CPU space. Once dumping finishes, pressing "Start" again will dump 4K more from wherever the previous dump had left off. Since different mappers map banks into different regions of memory, this dumping routine doesn't increase mapper banks or anything. It'll even wrap around to CPU $0000 if you dump past $F000. Might be useful for something. |
|||||||
|
||||||||
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 (making sure not to forget to remove the 2-byte header after conversion...) I recommend the simple and effective KCS program for decoding on PCs. Combining the data files the right way and adding an .NES header is an exercise I'll leave up to the user. Happy dumping! |
-- Chris Covell