Kazzo USB rom dumper / dev cart programmer

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

Moderator: Moderators

Germansnake
Posts: 6
Joined: Wed Sep 26, 2018 8:03 am

Re: Kazzo USB rom dumper / dev cart programmer

Post by Germansnake »

I'll to compare it in the next days :)
thanks for helping me though :)
prototector
Posts: 44
Joined: Sun Aug 31, 2014 9:55 am

Re: Kazzo USB rom dumper / dev cart programmer

Post by prototector »

I checked the supported mapper list on gitlab for the new Kazzo device and it seems to support fewer mappers than I recall the older one did. Can any of the old scripts be brought over for use with the new device, or would they have to be re-written?
Germansnake
Posts: 6
Joined: Wed Sep 26, 2018 8:03 am

Re: Kazzo USB rom dumper / dev cart programmer

Post by Germansnake »

Little Holy Diver Update:

Thanks to the german shop Dragonbox, I can finally (at least) play the game on my original NES. Have to reset the game until the region switches to PAL.

The PRG-Rom,CHR-Rom & the mapper are the same, as a japanesese version. Maybe some of you guys could look into the rom itself. I have no clue, maybe it has to do with my wrong dumping,the pal ntsc changing etc :(


[I'd prefer not sharing full ROMs in public. Please send PM to Germansnake if you are interested in troubleshooting this. --MOD]
Haruka
Posts: 53
Joined: Fri Mar 23, 2018 8:58 pm

Re: Kazzo USB rom dumper / dev cart programmer

Post by Haruka »

Hello everyone! Recently I'm trying to make a mapper3 flashcart using HVC-CNROM-256 board as a donor.
But I don't know how to wire the pins after I removed both ROM chips. So I'm here to see if you guys have ever made such a flashcart and are willing to give me some hints. Here are photos of my donor cart, both sides, with ROM chips and anti-piracy diodes removed, and H/V mirroring pads rewired to an external switch.

Donor cart originally Dragon Quest. And the Flash chip I'm planning to use is AM29F040B.
Attachments
IMG_20180925_081313.jpg
IMG_20180925_081332.jpg
Germansnake
Posts: 6
Joined: Wed Sep 26, 2018 8:03 am

Re: Kazzo USB rom dumper / dev cart programmer

Post by Germansnake »

Found someone on youtube, that opened the holy diver cartridge

https://www.youtube.com/watch?v=R57EPBW385Q

maybe with that, we could find a working script for the kazzo :)
lidnariq
Posts: 11430
Joined: Sun Apr 13, 2008 11:12 am

Re: Kazzo USB rom dumper / dev cart programmer

Post by lidnariq »

I think that's a COOLBOY board. Try using an MMC3 dumping script.

For reference, in the video:
RETRO-BIT-V5S PCB
  • U1: CMD133- 2018.01.20
  • U2: [Fujitsu] MALAYSIA 29F016A-90PFTN 0309 F85S
  • U8: 8SOP ...ATtiny ?
  • U9: 14SOP ... 74HC00Q ??
  • on back, U5?: [MOSEL] 0032D V62C5181024L-35W
  • unpopulated U3, 70-pin something (alternative PRG ROM?)
  • unpopulated U4, on back, 28SOP (PRG RAM?)
  • unpopulated IC6, 32TSSOP / 48TSSOP (CHR ROM?)
  • unpopulated U7: voltage regulator, fortunately absent
  • unpopulated: U10, 16SOP


edit: definitely coolboy. compare pictures here
User avatar
infiniteneslives
Posts: 2104
Joined: Mon Apr 04, 2011 11:49 am
Location: WhereverIparkIt, USA
Contact:

Re: Kazzo USB rom dumper / dev cart programmer

Post by infiniteneslives »

prototector wrote:I checked the supported mapper list on gitlab for the new Kazzo device and it seems to support fewer mappers than I recall the older one did. Can any of the old scripts be brought over for use with the new device, or would they have to be re-written?
That is correct. The original kazzo is AVR based. Technically there is no "new kazzo". There's my old INLretro programmer dumper v1.x which was kazzo compatible. Then there's the lastest INLretro v2.x which is ARM cortex M0 based which IS NOT kazzo compatible meaning it won't run original kazzo firmware nor interface with kazzo softwares anago/unagi.

My latest software release is compatible with all versions of the INLretro programmer/dumper we've ever sold. There are separate firmware builds for v1.x AVR, and v2.x ARM hardware versions. Some features may not be supported on v1.x hardware due to lack of cartridge connections to things like the CIC pins, unidirectional EXP1-8 pins, or low level assembly functions ARM functions which haven't been translated to AVR yet.

To answer your question, No. The old kazzo scripts can't be directly brought over to my new inlretro software. The new software almost entirely uses lua (scripts) for the host application. I've still got a lot of work to do on the software and firmware to catch the new hardware up to the list of mappers supported by the original kazzo with anago/unagi.

My hope is this thread will remain focused on the original kazzo and scripts for anago/unagi even though we've discontinued production and sales of the device. There's quite a few of them out in the wild, we weren't the only hardware manufacturers and being open source, people can always make them their selves. Perhaps someone else will be motivated to keep manufacturing the decrepit V-USB based AVR hardware, but we stopped doing so in early 2018. Once I've got things better polished and some explanation of how to write/translate scripts for the latest inlretro software I'll start a separate dedicated thread.
If you're gonna play the Game Boy, you gotta learn to play it right. -Kenny Rogers
prototector
Posts: 44
Joined: Sun Aug 31, 2014 9:55 am

Re: Kazzo USB rom dumper / dev cart programmer

Post by prototector »

I see. Thank you for the detailed response, it's really appreciated. It's because we're looking to get a sample game dumped and the Kazzo was the only reliable one do to it in terms of cost, simple setup, etc. I'll keep an eye out for the original device.
werewolfslayr925
Posts: 40
Joined: Sat Oct 02, 2010 5:49 pm

Re: Kazzo USB rom dumper / dev cart programmer

Post by werewolfslayr925 »

So, this is somewhat related to this thread and, since it involves the Kazzo, I thought it should go here. I got a copy of Nakayoshi to Issho and dumped it. However, because the game is not in bootgod's database, I'm unable to confirm the CRC32s. Here's what I got using an MMC3 script and a d22 command (same I used for Kirby's Adventure):

Code: Select all

Program ROM: size 0x020000, crc32 0x8ab9e1ea
Charcter ROM: size 0x040000, crc32 0x8a86b158
That was on a second attempt. First attempt the cartridge apparently still had a bit of gunge on it, because there were vertical lines through the sprites/backgrounds.

Can anyone confirm these hashes? And how would I go about submitting photos, board info, etc. to bootgod's database? I've noticed he hasn't updated it in years.

EDIT: I also got a copy of Madara that's giving me problems. I noticed someone else was having similar issues with another VRC6 board a few pages back. Here's the script I'm using:

Code: Select all

/*VRC6 type B/351949A/address bus A0=R1, A1=R0 
CPU memory bank 
cpu address|rom address    |page|task 
$8000-$bfff|n * 0x4000     |even|write area + write 0x2aaa 
$c000-$dfff|0x04000-0x05fff|2   |write 0x5555 
------------------------------------- 
$8000-$bfff|n * 0x4000     |odd |write area + write 0x5555 
$c000-$dfff|0x02000-0x03fff|1   |write 0x2aaa 
$e000-$efff|末尾           |fix |boot area, 未使用 
PPU memory bank 
ppu address|rom address    |page|task 
$0000-$03ff|0x02800-0x02bff|0x0a|write (0x2aaa & 0x03ff) + 0 
$0400-$07ff|0x05400-0x057ff|0x15|write (0x5555 & 0x03ff) + 0x400 
$1000-$1fff|n * 0x1000     |n   |write area*/ 

board <- { 

	mappernum = 26, vram_mirrorfind = false, 

	cpu = {banksize = 0x4000, maxsize = 2 * mega}, 

	ppu = {banksize = 0x4000, maxsize = 2 * mega}, 

} 

function cpubank_even_set(d, bank, cpu_banksize) 

{ 

	cpu_command(d, 0x2aaa, 0x8000, cpu_banksize); 

	cpu_command(d, 0x5555, 0xc000, 0x2000); 

	cpu_write(d, 0x8000, bank) 

	cpu_write(d, 0xc000, 2) 

} 

function initalize(d, cpu_banksize, ppu_banksize) 

{ 

	cpubank_even_set(d, 0, cpu_banksize); 

	cpu_command(d, 0, 0x8000, cpu_banksize); 

	ppu_command(d, 0x2aaa, 0, ppu_banksize); 

	ppu_command(d, 0x5555, 0x0400, ppu_banksize); 

	ppu_command(d, 0, 0x0800, ppu_banksize); 

	cpu_write(d, 0xb003, 0); //work ram disable 

	cpu_write(d, 0xd000, 0x0a); 

	cpu_write(d, 0xd002, 0x15); 

	cpu_write(d, 0xd001, 0x00); 

	cpu_write(d, 0xd003, 0x00); 

} 

function cpu_transfer(d, start, end, cpu_banksize) 

{ 

	local i; 

	for(i = start; i < end - 2; i += 2){ 

		cpubank_even_set(d, i, cpu_banksize); 

		cpu_program(d, 0x8000, cpu_banksize); 

		cpu_command(d, 0x5555, 0x8000, cpu_banksize); 

		cpu_command(d, 0x2aaa, 0xc000, 0x2000); 

		cpu_write(d, 0x8000, i | 1) 

		cpu_write(d, 0xc000, 1) 

		cpu_program(d, 0x8000, cpu_banksize); 

	} 

	cpubank_even_set(d, i, cpu_banksize); 

	cpu_program(d, 0x8000, cpu_banksize); 

	cpu_command(d, 0x5555, 0x8000, cpu_banksize); 

	cpu_command(d, 0x2aaa, 0xc000, 0x2000); 

	cpu_write(d, 0x8000, i | 1) 

	cpu_write(d, 0xc000, 1) 

	cpu_program(d, 0x8000, cpu_banksize); 

} 

function ppu_transfer(d, start, end, ppu_banksize) 

{ 

	for(local i = start; i < end; i += 4){ 

		cpu_write(d, 0xe000, i | 0); 

		cpu_write(d, 0xe002, i | 1); 

		cpu_write(d, 0xe001, i | 2); 

		cpu_write(d, 0xe003, i | 3); 

		ppu_program(d, 0x1000, ppu_banksize * 4); 

	} 

} 
And here's the error it's giving:

Code: Select all

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

CALLSTACK
[ppuarea_memory] NULL
[vram] 0
[increase_ppu] 1
[increase_cpu] 11
[mappernum] 26
[script] "vrc6.af"
[d] USERPOINTER
[this] TABLE
After reading what lidnariq wrote about it, I tried swapping out the line

Code: Select all

	ppu = {banksize = 0x4000, maxsize = 2 * mega}, 
for something like

Code: Select all

	ppu = {banksize = 0x8000, maxsize = 2 * mega}, 
or

Code: Select all

	ppu = {banksize = 0x2000, maxsize = 2 * mega}, 
but to no avail. I'm guessing I'm quite off...

Also, a question that's been bugging me the past few times I used the kazzo: does the file extension on the scripts matter? I've noticed that some are ".ad", some are ".ag", and some are ".af" (which I always read in my head as ".asf**k"). Does this matter at all when using particular scripts?
lidnariq
Posts: 11430
Joined: Sun Apr 13, 2008 11:12 am

Re: Kazzo USB rom dumper / dev cart programmer

Post by lidnariq »

Naruko changed the syntax at some point: "ppu" is wrong and it should be "ppu_rom", as the error says.

Compare the syntax from (e.g.) nintendo_mmc3_tkrom.ag
werewolfslayr925
Posts: 40
Joined: Sat Oct 02, 2010 5:49 pm

Re: Kazzo USB rom dumper / dev cart programmer

Post by werewolfslayr925 »

lidnariq wrote:Naruko changed the syntax at some point: "ppu" is wrong and it should be "ppu_rom", as the error says.

Compare the syntax from (e.g.) nintendo_mmc3_tkrom.ag
Great! That fixed the problem.

Unfortunately, there's another syntax error. It now says that 'size_base' doesn't exist. Here's the current script:

Code: Select all

/*VRC6 type B/351949A/address bus A0=R1, A1=R0 
CPU memory bank 
cpu address|rom address    |page|task 
$8000-$bfff|n * 0x4000     |even|write area + write 0x2aaa 
$c000-$dfff|0x04000-0x05fff|2   |write 0x5555 
------------------------------------- 
$8000-$bfff|n * 0x4000     |odd |write area + write 0x5555 
$c000-$dfff|0x02000-0x03fff|1   |write 0x2aaa 
$e000-$efff|末尾           |fix |boot area, 未使用 
PPU memory bank 
ppu address|rom address    |page|task 
$0000-$03ff|0x02800-0x02bff|0x0a|write (0x2aaa & 0x03ff) + 0 
$0400-$07ff|0x05400-0x057ff|0x15|write (0x5555 & 0x03ff) + 0x400 
$1000-$1fff|n * 0x1000     |n   |write area*/ 

board <- { 

	mappernum = 26, vram_mirrorfind = false, 

	cpu_rom = {banksize = 0x4000, maxsize = 2 * mega}, 

	ppu_rom = {banksize = 0x4000, maxsize = 2 * mega}, 

} 

function cpubank_even_set(d, bank, cpu_banksize) 

{ 

	cpu_command(d, 0x2aaa, 0x8000, cpu_banksize); 

	cpu_command(d, 0x5555, 0xc000, 0x2000); 

	cpu_write(d, 0x8000, bank) 

	cpu_write(d, 0xc000, 2) 

} 

function initalize(d, cpu_banksize, ppu_banksize) 

{ 

	cpubank_even_set(d, 0, cpu_banksize); 

	cpu_command(d, 0, 0x8000, cpu_banksize); 

	ppu_command(d, 0x2aaa, 0, ppu_banksize); 

	ppu_command(d, 0x5555, 0x0400, ppu_banksize); 

	ppu_command(d, 0, 0x0800, ppu_banksize); 

	cpu_write(d, 0xb003, 0); //work ram disable 

	cpu_write(d, 0xd000, 0x0a); 

	cpu_write(d, 0xd002, 0x15); 

	cpu_write(d, 0xd001, 0x00); 

	cpu_write(d, 0xd003, 0x00); 

} 

function cpu_transfer(d, start, end, cpu_banksize) 

{ 

	local i; 

	for(i = start; i < end - 2; i += 2){ 

		cpubank_even_set(d, i, cpu_banksize); 

		cpu_program(d, 0x8000, cpu_banksize); 

		cpu_command(d, 0x5555, 0x8000, cpu_banksize); 

		cpu_command(d, 0x2aaa, 0xc000, 0x2000); 

		cpu_write(d, 0x8000, i | 1) 

		cpu_write(d, 0xc000, 1) 

		cpu_program(d, 0x8000, cpu_banksize); 

	} 

	cpubank_even_set(d, i, cpu_banksize); 

	cpu_program(d, 0x8000, cpu_banksize); 

	cpu_command(d, 0x5555, 0x8000, cpu_banksize); 

	cpu_command(d, 0x2aaa, 0xc000, 0x2000); 

	cpu_write(d, 0x8000, i | 1) 

	cpu_write(d, 0xc000, 1) 

	cpu_program(d, 0x8000, cpu_banksize); 

} 

function ppu_transfer(d, start, end, ppu_banksize) 

{ 

	for(local i = start; i < end; i += 4){ 

		cpu_write(d, 0xe000, i | 0); 

		cpu_write(d, 0xe002, i | 1); 

		cpu_write(d, 0xe001, i | 2); 

		cpu_write(d, 0xe003, i | 3); 

		ppu_program(d, 0x1000, ppu_banksize * 4); 

	} 

}
lidnariq
Posts: 11430
Joined: Sun Apr 13, 2008 11:12 am

Re: Kazzo USB rom dumper / dev cart programmer

Post by lidnariq »

werewolfslayr925 wrote:Unfortunately, there's another syntax error. It now says that 'size_base' doesn't exist.
Compare the entire line from the mmc3 script, not just that single word :P
werewolfslayr925
Posts: 40
Joined: Sat Oct 02, 2010 5:49 pm

Re: Kazzo USB rom dumper / dev cart programmer

Post by werewolfslayr925 »

lidnariq wrote:
werewolfslayr925 wrote:Unfortunately, there's another syntax error. It now says that 'size_base' doesn't exist.
Compare the entire line from the mmc3 script, not just that single word :P
Okay, so I got a script that works. I basically just copied the beginnings of the MMC3 script, which I figured would be wrong (it is). I got a (very incorrect) dump of the game:

Code: Select all

Program ROM: 0x059dcdf0
Charcter ROM: 17257ddc

But at least the script doesn't give an error. Here it is:

Code: Select all

/*VRC6 type B/351949A/address bus A0=R1, A1=R0 
CPU memory bank 
cpu address|rom address    |page|task 
$8000-$bfff|n * 0x4000     |even|write area + write 0x2aaa 
$c000-$dfff|0x04000-0x05fff|2   |write 0x5555 
------------------------------------- 
$8000-$bfff|n * 0x4000     |odd |write area + write 0x5555 
$c000-$dfff|0x02000-0x03fff|1   |write 0x2aaa 
$e000-$efff|末尾           |fix |boot area, 未使用 
PPU memory bank 
ppu address|rom address    |page|task 
$0000-$03ff|0x02800-0x02bff|0x0a|write (0x2aaa & 0x03ff) + 0 
$0400-$07ff|0x05400-0x057ff|0x15|write (0x5555 & 0x03ff) + 0x400 
$1000-$1fff|n * 0x1000     |n   |write area*/ 

board <- { 

	mappernum = 26, vram_mirrorfind = false, ppu_ramfind = true

	cpu_rom = {size_base = 2 * mega, size_max = 4 * mega, banksize = 0x2000}, 

	ppu_rom = {size_base = 2 * mega, size_max = 2 * mega,
 banksize = 0x0400
}, 

} 



function cpu_dump(d, pagesize, banksize)

{

	cpu_write(d, 0xa001, 0); //disable W-RAM

	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+=4)
	{

		cpu_write(d, 0x8000, 2);

		cpu_write(d, 0x8001, i);

		cpu_write(d, 0x8000, 3);

		cpu_write(d, 0x8001, i | 1);

		cpu_write(d, 0x8000, 4);

		cpu_write(d, 0x8001, i | 2);

		cpu_write(d, 0x8000, 5);

		cpu_write(d, 0x8001, i | 3);

		ppu_read(d, 0x1000, banksize * 4);
	}

}

function cpubank_even_set(d, bank, cpu_banksize) 

{ 

	cpu_command(d, 0x2aaa, 0x8000, cpu_banksize); 

	cpu_command(d, 0x5555, 0xc000, 0x2000); 

	cpu_write(d, 0x8000, bank) 

	cpu_write(d, 0xc000, 2) 

} 

function initalize(d, cpu_banksize, ppu_banksize) 

{ 

	cpubank_even_set(d, 0, cpu_banksize); 

	cpu_command(d, 0, 0x8000, cpu_banksize); 

	ppu_command(d, 0x2aaa, 0, ppu_banksize); 

	ppu_command(d, 0x5555, 0x0400, ppu_banksize); 

	ppu_command(d, 0, 0x0800, ppu_banksize); 

	cpu_write(d, 0xb003, 0); //work ram disable 

	cpu_write(d, 0xd000, 0x0a); 

	cpu_write(d, 0xd002, 0x15); 

	cpu_write(d, 0xd001, 0x00); 

	cpu_write(d, 0xd003, 0x00); 

} 

function cpu_transfer(d, start, end, cpu_banksize) 

{ 

	local i; 

	for(i = start; i < end - 2; i += 2){ 

		cpubank_even_set(d, i, cpu_banksize); 

		cpu_program(d, 0x8000, cpu_banksize); 

		cpu_command(d, 0x5555, 0x8000, cpu_banksize); 

		cpu_command(d, 0x2aaa, 0xc000, 0x2000); 

		cpu_write(d, 0x8000, i | 1) 

		cpu_write(d, 0xc000, 1) 

		cpu_program(d, 0x8000, cpu_banksize); 

	} 

	cpubank_even_set(d, i, cpu_banksize); 

	cpu_program(d, 0x8000, cpu_banksize); 

	cpu_command(d, 0x5555, 0x8000, cpu_banksize); 

	cpu_command(d, 0x2aaa, 0xc000, 0x2000); 

	cpu_write(d, 0x8000, i | 1) 

	cpu_write(d, 0xc000, 1) 

	cpu_program(d, 0x8000, cpu_banksize); 

} 

function ppu_transfer(d, start, end, ppu_banksize) 

{ 

	for(local i = start; i < end; i += 4){ 

		cpu_write(d, 0xe000, i | 0); 

		cpu_write(d, 0xe002, i | 1); 

		cpu_write(d, 0xe001, i | 2); 

		cpu_write(d, 0xe003, i | 3); 

		ppu_program(d, 0x1000, ppu_banksize * 4); 

	} 

}
Any idea how to fix this?
lidnariq
Posts: 11430
Joined: Sun Apr 13, 2008 11:12 am

Re: Kazzo USB rom dumper / dev cart programmer

Post by lidnariq »

werewolfslayr925 wrote:Okay, so I got a script that works. I basically just copied the beginnings of the MMC3 script, which I figured would be wrong (it is). I got a (very incorrect) dump of the game:
Surely you've done enough of these by now to get a feeling for what these words and numbers mean? That they're just not just random gibberish?
werewolfslayr925
Posts: 40
Joined: Sat Oct 02, 2010 5:49 pm

Re: Kazzo USB rom dumper / dev cart programmer

Post by werewolfslayr925 »

lidnariq wrote:
werewolfslayr925 wrote:
Surely you've done enough of these by now to get a feeling for what these words and numbers mean? That they're just not just random gibberish?
Unfortunately, they're gibberish to me, though not quite random. I get a couple of the ideas behind the numbers (0x4000 = the size of a ROM(?)), and some of the words (e.g. I know "ppu_dump" means to dump the chip that contains the graphics).

However, I really suck at programming and nobody ever explains things relating to it in a way I can understand. I would love for someone to explain what the words and numbers mean and how it relates to the way each board is built. I really don't understand any of this. Is the commentary at the beginning of the script a blueprint for how the script is supposed to work?
Post Reply