INL/Kazzo MMC3 SRAM dumping

Discuss hardware-related topics, such as development cartridges, CopyNES, PowerPak, EPROMs, or whatever.

Moderator: Moderators

Post Reply
kjorteo
Posts: 2
Joined: Sun Sep 21, 2014 4:44 pm

INL/Kazzo MMC3 SRAM dumping

Post by kjorteo »

Hello,

Recently I purchased the Kazzo INL Retro Dumper-Programmer from InfiniteNESLives, with the intention of dumping the SRAM of all my old actual NES carts. These were the games I grew up with, and most of them have still retained their save data all these years, and I just wanted to be able to back them up while I still could, before that part of my childhood was lost forever.

Using the guide I found in this thread, I was successfully able to dump the SRAM of most of my games. (Thank you so much!! :D) However, there were a few couple ones I just could not get to work, at all: Shadowgate and StarTropics. (Also, I haven't tried StarTropics 2, but for reasons I will explain in just a second, I am reasonably sure it will end up having the same problem.) I stopped to do some research, and that was when I noticed the link between the working versus non-working ones was in the mappers: Dragon Warrior, NES Open, all the games that actually worked use the MMC1 mapper according to this list. Shadowgate and StarTropics (and StarTropics 2) use MMC3.

Ah, so I just run it using mmc3.ag instead of mmc1_sxrom.ag and that will fix it, right?

Wrong. Those games still won't work, even with the proper script, and that's where I'm stumped. It acts like it's working, it goes through the motions and spits out a .sav file and everything, but that .sav file is basically blank and useless--putting it in with the other .sav files and testing with a ROM changes nothing; it acts like a completely new game with no save data whatsoever. The .sav file is right there, but it may as well not be. I assume that means the .sav file is no good, which means something in the dumping process didn't work. And yes, I have confirmed that the save data still exists and is valid on the actual cart in an actual NES.

So, now I turn to you. Is there some sort of trick I'm missing to get the .sav files from transfer over properly? You can dump the SRAM data of MMC3 games with an INL Kazzo dumper, right?
tepples
Posts: 22708
Joined: Sun Sep 19, 2004 11:12 pm
Location: NE Indiana, USA (NTSC)
Contact:

Re: INL/Kazzo MMC3 SRAM dumping

Post by tepples »

StarTropics and StarTropics 2 use MMC6, which has different save RAM unlocking behavior from the standard MMC3.
kjorteo
Posts: 2
Joined: Sun Sep 21, 2014 4:44 pm

Re: INL/Kazzo MMC3 SRAM dumping

Post by kjorteo »

tepples wrote:StarTropics and StarTropics 2 use MMC6, which has different save RAM unlocking behavior from the standard MMC3.
Ah, all right. I did notice that in the mapper list, but I didn't think it was that big a difference (mostly because Shadowgate, which really is MMC3, doesn't work either.) I guess that's two problems to work on, then! Thanks for the clarification. :)
yogi
Posts: 133
Joined: Sun Nov 17, 2013 8:14 pm
Location: Bowie, Maryland

Re: INL/Kazzo MMC3 SRAM dumping

Post by yogi »

You may want to look over this thread page if you haven't seen it:
viewtopic.php?f=9&t=7912&start=195
Though there isn't a direct fix for dumping your saves, it may give some ideas.
I looked over the scripts in unagi 062 and I can't offer useful help. The MMC3.ag seems to include access to PRG ram but I really would be guessing on the correct usage and/or editing.
Can you at least dump the ROM? That may demonstrate that the script is half way working. Beyond that try searching some of the Kaxxo sites, you may get lucky
yogi
bretts87
Posts: 6
Joined: Sun Oct 12, 2014 12:15 pm

Re: INL/Kazzo MMC3 SRAM dumping

Post by bretts87 »

I'm also having trouble accessing the saves for StarTropics 1 and 2 and wondering if anyone figured out how to write to them. I tried tinkering with Anago's mmc3.ag script to read the MMC6 PRG RAM and the best I could do was to dump a bunch of junk and delete my cartridge saves. If anyone can figure out how to make Anago work with these two games I'd be grateful.

TC: I was able to read and write my Shadowgate save, so I guess it's an issue with the individual cartridge. Maybe cleaning your cartridge would get it to work.
werewolfslayr925
Posts: 40
Joined: Sat Oct 02, 2010 5:49 pm

Re: INL/Kazzo MMC3 SRAM dumping

Post by werewolfslayr925 »

Bump.

In case anyone is still interested, I found out how to dump Startropics 1.

Use this command:

Code: Select all

anago.exe d22 mmc3_v2.ad startropics.nes
with the following script:

Code: Select all

board <- {
	mappernum = 4, ppu_ramfind = true, vram_mirrorfind = false
	cpu_rom = {
		size_base = 2 * mega, size_max = 4 * mega,
		banksize = 0x2000,
	}, 
	cpu_ram = {
		size_base = 0x2000, size_max = 0x2000,
		banksize = 0x2000,
	},
	ppu_rom = {
		size_base = 2 * mega, size_max = 2 * mega,
		banksize = 0x0400
	}
};

function cpu_dump(d, pagesize, banksize)
{
	for(local i = 0; i < pagesize - 2; i += 2){
		cpu_write(d, 0x8000, 6);
		cpu_write(d, 0x8001, i);
		cpu_write(d, 0x8000, 7);
		cpu_write(d, 0x8001, i | 1);
		cpu_read(d, 0x8000, banksize * 2);
	}
	cpu_read(d, 0xc000, banksize * 2);
}
function ppu_dump(d, pagesize, banksize)
{
	for(local i = 0; i < pagesize; i+=8){
		cpu_write(d, 0x8000, 0);
		cpu_write(d, 0x8001, i);
		cpu_write(d, 0x8000, 1);
		cpu_write(d, 0x8001, i | 2);
		cpu_write(d, 0x8000, 2);
		cpu_write(d, 0x8001, i | 4);
		cpu_write(d, 0x8000, 3);
		cpu_write(d, 0x8001, i | 5);
		cpu_write(d, 0x8000, 4);
		cpu_write(d, 0x8001, i | 6);
		cpu_write(d, 0x8000, 5);
		cpu_write(d, 0x8001, i | 7);
		ppu_read(d, 0x0000, banksize * 8);
	}
}
Unfortunately, I have yet to acquire Startopics 2, but perhaps you can use the same method?
CZroe
Posts: 32
Joined: Mon Apr 04, 2016 7:59 am

Re: INL/Kazzo MMC3 SRAM dumping

Post by CZroe »

werewolfslayr925 wrote:Bump.

In case anyone is still interested, I found out how to dump Startropics 1.

Use this command:

Code: Select all

anago.exe d22 mmc3_v2.ad startropics.nes
with the following script:

Code: Select all

board <- {
	mappernum = 4, ppu_ramfind = true, vram_mirrorfind = false
	cpu_rom = {
		size_base = 2 * mega, size_max = 4 * mega,
		banksize = 0x2000,
	}, 
	cpu_ram = {
		size_base = 0x2000, size_max = 0x2000,
		banksize = 0x2000,
	},
	ppu_rom = {
		size_base = 2 * mega, size_max = 2 * mega,
		banksize = 0x0400
	}
};

function cpu_dump(d, pagesize, banksize)
{
	for(local i = 0; i < pagesize - 2; i += 2){
		cpu_write(d, 0x8000, 6);
		cpu_write(d, 0x8001, i);
		cpu_write(d, 0x8000, 7);
		cpu_write(d, 0x8001, i | 1);
		cpu_read(d, 0x8000, banksize * 2);
	}
	cpu_read(d, 0xc000, banksize * 2);
}
function ppu_dump(d, pagesize, banksize)
{
	for(local i = 0; i < pagesize; i+=8){
		cpu_write(d, 0x8000, 0);
		cpu_write(d, 0x8001, i);
		cpu_write(d, 0x8000, 1);
		cpu_write(d, 0x8001, i | 2);
		cpu_write(d, 0x8000, 2);
		cpu_write(d, 0x8001, i | 4);
		cpu_write(d, 0x8000, 3);
		cpu_write(d, 0x8001, i | 5);
		cpu_write(d, 0x8000, 4);
		cpu_write(d, 0x8001, i | 6);
		cpu_write(d, 0x8000, 5);
		cpu_write(d, 0x8001, i | 7);
		ppu_read(d, 0x0000, banksize * 8);
	}
}
Unfortunately, I have yet to acquire Startopics 2, but perhaps you can use the same method?
Doesn't work for me with original StarTropics. :(

Edit: Spent hours reseating and redumping every which way and it suddenly worked. Weird.

Used the original mmc3_v2.ad file for anyone else wondering if the one you posted is different in some small way.

Edit 2: Even stranger - My Hi-Def NES doesn't seem to work with StarTropics about 4 of 5 times I attempt to boot even though it's clean, with a Blinking Light Win and fully-disabled CIC. It's not the cartridge either because it does this with my Everdrive N8 (Famicom version through an adapter). I can have the game running perfectly fine, press Reset (shows the ED menu), start the last game loaded, and get the same solid screen. It takes several attempts to get the game to work again, even after a power cycle. If MMC6 is particularly flaky with the Hi-Def NES then perhaps it causes issues with the Kazzo as well.
User avatar
aquasnake
Posts: 515
Joined: Fri Sep 13, 2019 11:22 pm

Re: INL/Kazzo MMC3 SRAM dumping

Post by aquasnake »

StarTropics(MMC6) has the different logic from MMC3 while accessing $A001 to enable SRAM.

typically MMC3 here always enable SRAM($6000-$7FFF) in most cases, so we dont care about this register, but at MMC6 we should set bit[7:4] to enable SRAM first i guess so


PRG RAM protect ($A001-$BFFF, odd)
7 bit 0
---- ----
HhLl xxxx
||||
|||+------ Enable writing to RAM at $7000-$71FF
||+------- Enable reading RAM at $7000-$71FF
|+-------- Enable writing to RAM at $7200-$73FF
+--------- Enable reading RAM at $7200-$73FF
Post Reply