* it uses ONLY one chp - Atmera32 microcontroller,
* it protects cpu & ppu data lines with 1k resistors to avoid short circuits (when you dump it bad way, for example when you forget about bus conflicts or you enable prg & chr roms at the same time).
The communication between PC is over USB (the Atmega32 implements V-USB library) and it basically can do 4 kinds of commands, that can be initiated from PC:
* simulate CPU read cycle: read from given PRG address range,
* simulate CPU write cycle: write given bytes at given PRG address,
* simulate PPU read cycle: read from given CHR address range,
* simulate PPU write cycle: write given bytes at given CHR address.
I wrote a piece of software on PC in C# (with GUI) that is a kind of server.
It allows user clicking what addresses should be read/written at and finally generate & save NES file. Of course dumping more complicated carts like MMC1 needs a lot of clicking, so the app can load a so called dumping script file, which is just a plain text file with command for dumper, for example dumping Flipull game (CNROM)
Code: Select all
#flipull (cnrom - mapper 3)
CPU R 8000 FFFF
CPU W 00 8234
PPU R 0000 1FFF
CPU W 01 8235
PPU R 0000 1FFF
CPU W 02 8236
PPU R 0000 1FFF
CPU W 03 8237
PPU R 0000 1FFF
If you write a byte at random address, the mapper (latch in CNROM) will see a byte stored at ROM in that address (because latch & ROM is at the same side of resistors), but nothing will be shortcircuited!
I have succesfully dumped lot of my famiclone cartridges. I just failed dumping one - 168 in 1, which is Ines mapper 015 and has 1 MB PRG ROM & CHR-RAM. I think the problem is that this cart has some kind of reset-detection circuit and it needs M2 clock all the time.