[SOLVED] Kazzo/Anago dumping

This is an archive of a topic from NESdev BBS, taken in mid-October 2019 before a server upgrade.
View original topic
[SOLVED] Kazzo/Anago dumping
by on (#178294)
I recently acquired a Kazzo and have been using it and Anago to dump my NES carts. For the most part, they've all gone well. I am having difficulty with Super Mario Bros. / Duck Hunt, Indiana Jones and the Last Crusade, and Wizards and Warriors II. I've been referencing this: http://tuxnes.sourceforge.net/nesmapper.txt.

Super Mario Bros. / Duck Hunt says to use "74161/32", this does not exist in Anago's script list.
Indiana Jones says to use "MMC1", this does exist in Anago's script list, but it doesn't work, I get a gray screen when trying to play the ROM.
Wizards and Warriors says to use "AOROM", this does not exist in Anago's script list.

Has anyone had any of these issues? Is there another dumping tool I can use that is compatible with the Kazzo and has the appropriate scripts?

Thank you,
MP
Re: Kazzo/Anago dumping
by on (#178295)
Are you referring to these scripts? If so:

  • MHROM (Super Mario Bros./Duck Hunt) is a functional subset of GNROM. Use that script.
  • To make a script for AOROM, start with the mapper 11 (Color Dreams) script, strip out anything PPU-related, then change the mapper to 7. (Color Dreams with CHR RAM would is equivalent to BNROM, and BNROM and AOROM differ only in their mirroring.) To dump larger games, such as Battletoads, you'll also need to change the maximum PRG ROM size to 2 Mbit: size_max = 2 * mega.
  • It appears that for MMC1, the SUROM script is for CHR RAM games and SKROM is for CHR ROM games. The NesCartDB entry for Indiana Jones and the Last Crusade says the Taito version (NES-J5-USA) uses SGROM, a CHR RAM board. But the Ubisoft version (NES-LR-USA) is instead UNROM.
Re: Kazzo/Anago dumping
by on (#178456)
Got Indiana Jones to dump successfully, thank you :mrgreen: .

Super Mario Bros / Duck Hunt seems to dump, but I'm still presented with a gray screen when trying to run in my emulator.

For Wizards and Warriors II, I removed all PPU and changed the mapper:
Code:
board <- {
  mappernum = 7,
  cpu_rom = {
    size_base = 0x10000, size_max = 1 * mega, banksize = 0x8000
  }
};

function cpu_dump(d, pagesize, banksize) {
  for (local i = 0; i < pagesize; i += 1) {
    cpu_write(d, 0x8000, i);
    cpu_read(d, 0x8000, 0x4000);
    cpu_read(d, 0xc000, 0x4000);
  }
}

Now I'm receiving this (regardless if I use size_max = 1 * mega or size_max = 2 * mega):

AN ERROR HAS OCCURED [the index 'vram_mirrorfind' does not exist]

CALLSTACK
*FUNCTION [dump()] dumpcore.nut line [17]

LOCALS
[increase_ppu] 1
[increase_cpu] 11
[mappernum] -1
[script] "aorom.ad"
[d] USERPOINTER
[this] TABLE

Any suggestions?
Re: Kazzo/Anago dumping
by on (#178475)
It appears that Kazzo dumper scripts always have to include a "ppu_rom" section.

Compare the UNROM dumper script, where it has ppu_rom = { size_base = 0, size_max = 0,
Re: Kazzo/Anago dumping
by on (#178491)
So would I include that block of PPU code in the AOROM script?
Re: Kazzo/Anago dumping
by on (#178496)
I don't actually have one, but I'd assume that that's it. i.e. you should just need to include the ppu_rom=... fragment in the board section of your dumper script.
Re: Kazzo/Anago dumping
by on (#178507)
I'm not sure myself.

Here's the updated script:
Code:
board <- {
   mappernum = 7,
   cpu_rom = {
      size_base = 0x10000, size_max = 2 * mega, banksize = 0x8000
   },
   ppu_rom = {
      size_base = 0, size_max = 0
   }
};

function cpu_dump(d, pagesize, banksize) {
   for (local i = 0; i < pagesize; i += 1) {
      cpu_write(d, 0x8000, i);
      cpu_read(d, 0x8000, 0x4000);
      cpu_read(d, 0xc000, 0x4000);
   }
}

Still receiving:

AN ERROR HAS OCCURED [the index 'vram_mirrorfind' does not exist]

CALLSTACK
*FUNCTION [dump()] dumpcore.nut line [17]

LOCALS
[increase_ppu] 1
[increase_cpu] 11
[mappernum] 7
[script] "aorom.ad"
[d] USERPOINTER
[this] TABLE
Re: Kazzo/Anago dumping
by on (#178512)
... y'know, it'd help if I actually read the error message. ( "vram_mirrorfind" )

You should be able to use the UNROM dumper script's "board" section almost verbatim, just change the mapper number from 2 (UNROM) to 7 (ANROM)
Re: Kazzo/Anago dumping
by on (#178579)
My bad :oops: . I don't know anything about how these scripts work, mostly because I don't have an understanding of the banks, mappers, ROM/RAM types, etc. But maybe there's some progress? I changed the AOROM script to mirror the UNROM script, just changed the mappernum:
Code:
board <- {
   mappernum = 7, vram_mirrorfind = true, ppu_ramfind = false,
   cpu_rom = {
      size_base = 1 * mega, size_max = 2 * mega,
      banksize = 0x4000
   },
   ppu_rom = {
      size_base = 0, size_max = 0,
      banksize = 0x2000
   }
};

function cpu_dump(d, pagesize, banksize)
{
   for(local i = 0; i < pagesize - 1; i += 1){
      cpu_write(d, 0x8000, i);
      cpu_read(d, 0x8000, banksize);
   }
   cpu_read(d, 0xc000, banksize);
}

Now there's no error when dumping, but when I try to run in my emulator, I end up with a gray screen (regardless whether size_max = 2 * mega or size_max = 1 * mega is used).
Re: Kazzo/Anago dumping
by on (#178581)
Use the CPU stuff from Color Dreams and everything else from UNROM.
Re: Kazzo/Anago dumping
by on (#178642)
Using CPU from mapper_11 script and PPU from unrom script:
Code:
board <- {
   mappernum = 7,
   cpu_rom = {
      size_base = 0x10000, size_max = 1 * mega, banksize = 0x8000
   },
   ppu_rom = {
      size_base = 0, size_max = 0, banksize = 0
   },
   ppu_ramfind = false, vram_mirrorfind = true
};

function cpu_dump(d, pagesize, banksize) {
  for (local i = 0; i < pagesize; i += 1) {
    cpu_write(d, 0x8000, i);
    cpu_read(d, 0x8000, 0x4000);
    cpu_read(d, 0xc000, 0x4000);
  }
}

When launching in emulator it flashes the gray screen that was seen before and just goes to a black screen. Here's Anago's output:
S:\NES Games\Wizards & Warriors II.nes, mapper 7
Program ROM: size 0x010000, crc32 0xacd39ff7
Charcter RAM

When I look the game up (http://bootgod.dyndns.org:7777/profile.php?id=25 and http://nintendoage.com/index.cfm?FuseAction=Element.View&egID=1131&lgID=498&sID=498), the crc32 is reported as 2328046E, not what I'm getting; I don't know if this can help with the troubleshooting.
Re: Kazzo/Anago dumping
by on (#178644)
Ironsword is 2 mebibit, not 1...

I guess size_base should be 0x8000 and size_max should be ... uh, maybe 4 * mega ? The largest licensed AxROM game is 2 mebibit, and the largest possible game (a few unlicensed games exist) is 4 mebibit.
Re: Kazzo/Anago dumping
by on (#178711)
OMG IT WORKED!!!

Launches right up with this:
Code:
board <- {
   mappernum = 7,
   cpu_rom = {
      size_base = 2 * mega, size_max = 4 * mega, banksize = 0x8000
   },
   ppu_rom = {
      size_base = 0, size_max = 0, banksize = 0
   },
   ppu_ramfind = false, vram_mirrorfind = true
};

function cpu_dump(d, pagesize, banksize) {
  for (local i = 0; i < pagesize; i += 1) {
    cpu_write(d, 0x8000, i);
    cpu_read(d, 0x8000, 0x4000);
    cpu_read(d, 0xc000, 0x4000);
  }
}

Thanks everybody for your help! I'm saving this one for sure as my AOROM script.