I would like to present my latest device I made - it's called MyKazzo and it allows dumping cartridges. I called it that because it offers similar functionality to Kazzo but I think it has some advantages over it:
* 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)
You might act why CPU is writing to such strange addresses like 8234, 8235. Thats because this CNROM cart has bus conflicts and there is a lookup table in the ROM at 8234-8237 which contains bytes: 0, 1, 2, 3.
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.
* 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:
#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
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
You might act why CPU is writing to such strange addresses like 8234, 8235. Thats because this CNROM cart has bus conflicts and there is a lookup table in the ROM at 8234-8237 which contains bytes: 0, 1, 2, 3.
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.