iNES Header Repair

General No-Intro related discussions.
User avatar
Connie
Datter
Posts: 227
Joined: 20 Jun 2008 12:15

Re: iNES Header Repair

Post by Connie »

The big drawback of datting the extra 16byte header into the ROM crc/hash is, who is going to check them?

I mean there are so many working configurations of tweaked headers, who gets to decide what is 'correct' and who is going to manually test each to check it works - as you mention, a working mapper value. This would ultimately create a 'No-Intro NES ROM set' rather than a clean accurate cart dump set. Catering for people using ROM managers that can't make use of an xml header skipper, or not knowing how to use it, isn't a solution.

Continue to use the header skipper so collectors can have their own working headers for whatever emulator it works with, and add a split PRG+CHR database with a log of header info. I'm sure xuom2 could code a database field that could just store the 16byte header, maybe on the fly, DoM could generate a dat from "header+PRG+CHR.nes" ?
oxyandy
Posts: 11
Joined: 12 Jan 2011 09:06

Re: iNES Header Repair

Post by oxyandy »

I would appreciate if someone has already used this script,
to share a CMP DIR2DAT of the resulting files...

Thanks in advance
oxyandy
neoxite
Posts: 4
Joined: 06 Dec 2012 23:04

Re: iNES Header Repair

Post by neoxite »

oxyandy wrote:I would appreciate if someone has already used this script,
to share a CMP DIR2DAT of the resulting files...

Thanks in advance
oxyandy
Here you go, this archive contains three DAT's I created with CMpro's DIR2DAT feature.
This is the first time I used that feature, but I think I got it right, I checked these options:

- Single file sets
- Remove extension
- Add MD5
- Add SHA1

Description of the three DAT files:

Nintendo - Nintendo Entertainment System (No-Intro 20121210 Fullset, 2656 Games) (headerless).dat
is a DIR2DAT of the No-Intro 20121210 Fullset after stripping all 16byte headers and revalidating them through CMpro with no header skipper loaded.

Nintendo - Nintendo Entertainment System (No-Intro 20121210, checksums found in NesCarts 2012-10-22, iNES headers rebuilt, 2110 Games).dat
is a DIR2DAT of the 2110 games that were processed by the Python script 'ines-fix.py' using bootgod's XML file 'NesCarts (2012-10-22).xml', they have rebuilt iNES headers.

Nintendo - Nintendo Entertainment System (No-Intro 20121210, checksums not found in NesCarts 2012-10-22, 546 Games).dat
is a DIR2DAT of the 546 Games that the script could not match to the XML and therefore remain headerless. They are mostly japanese and unlicensed/beta/proto carts.

(expired)

Cheers!
oxyandy
Posts: 11
Joined: 12 Jan 2011 09:06

Re: iNES Header Repair

Post by oxyandy »

neoxite

Thanks very much,
I really appreciate these !
:D
oxyandy
Posts: 11
Joined: 12 Jan 2011 09:06

Re: iNES Header Repair

Post by oxyandy »

<game name="Crazy Climber" altname="クレイジークライマー" class="Licensed" catalog="NBF-CY (04)" publisher="Nichibutsu" developer="Nichibutsu" region="Japan" players="2" date="1986-12-26">
<cartridge system="Famicom" crc="C68363F6" sha1="003B7F1315F5EE0DC60C5F9D989EC8BAB0811ED4" dump="ok" dumper="bootgod" datedumped="2009-11-01">
<board type="HVC-UNROM+74HC08" pcb="HVC-UNROM-02" mapper="180">
<prg name="NBF-CY-0 PRG" size="128k" crc="C68363F6" sha1="003B7F1315F5EE0DC60C5F9D989EC8BAB0811ED4"/>
<vram size="8k"/>
<chip type="74xx08"/>
<chip type="74xx161"/>
<pad h="0" v="1"/>
</board>
</cartridge>
</game>

Well, BootGod dat (as above) says Crazy Climber is vertical mirroring...
But, ROM that matches that dat is set horizontal mirroring...
Same with Super Arabian (Vertical Mirroring set as in BootGod's xml) wont match, horizontal does.

Not much time to look deeper just yet..
More when I have time.
neoxite
Posts: 4
Joined: 06 Dec 2012 23:04

Re: iNES Header Repair

Post by neoxite »

oxyandy wrote:Well, BootGod dat (as above) says Crazy Climber is vertical mirroring...
But, ROM that matches that dat is set horizontal mirroring...
Same with Super Arabian (Vertical Mirroring set as in BootGod's xml) wont match, horizontal does.
Well that is odd. For clarification, the romset that the script processed was completely headerless, so the script must have rebuilt an incorrect mirroring value.

I took a look the the script (taken from http://nwserver.ath.cx/2012/05/30/ines-header-fixer/) and noted this section:

mirror_4 = 0
mirror_v = 0
pad = board.find("pad")
if (format_crc32 == "CD50A092" or \
format_crc32 == "EC968C51" or \
format_crc32 == "404B2E8B"):
mirror_4 = 1
elif (pad is not None):
# the "h" pad means "v" mirror
mirror_v = int(pad.attrib.get("h"))

Looks like rather than using the mirroring value from the XML, the script actually tries to determine the mirroring type itself. I am not literate enough to even know how the mirroring type is correctly determined, however the 'problem at hand' appers to be with the script.
oxyandy
Posts: 11
Joined: 12 Jan 2011 09:06

Re: iNES Header Repair

Post by oxyandy »

Well that is odd. For clarification, the romset that the script processed was completely headerless
Yep, I smiled when I read that, excellent idea, really saves confusion
oxyandy
Posts: 11
Joined: 12 Jan 2011 09:06

Re: iNES Header Repair

Post by oxyandy »

<game name="Crazy Climber" altname="クレイジークライマー" class="Licensed" catalog="NBF-CY (04)" publisher="Nichibutsu" developer="Nichibutsu" region="Japan" players="2" date="1986-12-26">

<pad h="0" v="1"/>

Ah, the logic behind this ..
You would think in the XML.. that v="1" means Vertical...
and <pad h="1" ............ horizontal
right ?

Well, I guess not..
The actual BootGod profile page says

Code: Select all

iNES Mapper 	180
Mirroring 	Horizontal
http://bootgod.dyndns.org:7777/profile.php?id=3869

And then I see this comment in the script
# the "h" pad means "v" mirror

So the script looks ok..
I think I have previously got caught on this before :shock:
nature1ders

Re: iNES Header Repair

Post by nature1ders »

Can I run this script in a command prompt in Windows 8 using Python 2.7.3 will it work that way?

I added the Python 2.7.3 path to my environment variables, I can now run it using Python from the command line, but -> find . -type f -name '*.nes' -exec ./ines-fix.py {} \;

doesn't work, what the heck am I supposed to do :( that looks like applescript to me! ugh :(

Keeps saying File not found -'*.nes'

wth?
User avatar
Connie
Datter
Posts: 227
Joined: 20 Jun 2008 12:15

Re: iNES Header Repair

Post by Connie »

oxyandy wrote:<game name="Crazy Climber" altname="クレイジークライマー" class="Licensed" catalog="NBF-CY (04)" publisher="Nichibutsu" developer="Nichibutsu" region="Japan" players="2" date="1986-12-26">

<pad h="0" v="1"/>

Ah, the logic behind this ..
You would think in the XML.. that v="1" means Vertical...
and <pad h="1" ............ horizontal
Funny you should mention this, because I was going to question if you knew that.
It too had me confused when I was manually checking headers against Bootgods database.

A horizontal platformer with vertical mirroring? :o
nature1ders

Re: iNES Header Repair

Post by nature1ders »

neoxite wrote:Here you go, this archive contains three DAT's I created with CMpro's DIR2DAT feature.
This is the first time I used that feature, but I think I got it right - Cheers!
I cleaned up two of your .dat files using:

datutil -f listinfo old.dat

http://speedy.sh/rJXhu/NES-Cart-Databas ... -Found.dat
http://speedy.sh/32cWQ/NES-Cart-Database-Headers.dat

Rebuild is possible using Python 2.7.3 in Windows 8 with the following from a command prompt:

FOR /R %v IN (*.nes) DO "C:\fix\ines-fix.py" "%v"

The following seem to be excluded from newer No-Intro .dat's

Baseball (USA) (GameCube Edition) [folder: Baseball (USA) (GameCube Edition)
Clu Clu Land (USA) (GameCube Edition) [folder: Clu Clu Land (USA) (GameCube Edition)
Donkey Kong (USA) (GameCube Edition) [folder: Donkey Kong (USA) (GameCube Edition)
Donkey Kong Jr. (USA) (GameCube Edition) [folder: Donkey Kong Jr. (USA) (GameCube Edition)
Excitebike (USA) (GameCube Edition) [folder: Excitebike (USA) (GameCube Edition)
Legend of Zelda, The (USA) (Rev A) (GameCube Edition) [folder: Legend of Zelda, The (USA) (Rev A) (GameCube Edition)
Legend of Zelda, The (USA) (Rev B) (GameCube Edition) [folder: Legend of Zelda, The (USA) (Rev B) (GameCube Edition)
Mario Bros. (USA) (GameCube Edition) [folder: Mario Bros. (USA) (GameCube Edition)
Pinball (USA) (GameCube Edition) [folder: Pinball (USA) (GameCube Edition)
Tennis (USA) (GameCube Edition) [folder: Tennis (USA) (GameCube Edition)
Zelda II - The Adventure of Link (USA) (GameCube Edition)

So I've removed them from yours =D

Now anyone can rebuild a set using the XML file, thanks!
KingMike
Posts: 694
Joined: 22 Sep 2012 16:36

Re: iNES Header Repair

Post by KingMike »

Connie wrote: A horizontal platformer with vertical mirroring? :o
Crazy Climber isn't horizontal or a platformer. :) It's a game about making a guy climb the side of a (endless?) building, individually controlling his left and right hands to climb without getting knocked off.
User avatar
Connie
Datter
Posts: 227
Joined: 20 Jun 2008 12:15

Re: iNES Header Repair

Post by Connie »

I wasn't referencing any game in particular, just making the point that a horizontal scrolling game shouldn't have vertical mirroring. :)

Besides, I'm from the 80's/90's arcade era and know Crazy Climber all too well. :gba:
User avatar
C. V. Reynolds
Datter
Posts: 267
Joined: 17 Jun 2009 04:42

Re: iNES Header Repair

Post by C. V. Reynolds »

This reminds me of something I had forgotten...

TwinBee 3 - Poko Poko Daimaou (Japan)

Try to load the Bootgod XML for this game in Nestopia and see how messed up it is. When using Nestopia's internal database, the game runs fine. When using a header built from the Bootgod database, it runs fine. Either Nestopia isn't reading the XML file correctly, or the XML file has an error in it somewhere for this game.
oxyandy
Posts: 11
Joined: 12 Jan 2011 09:06

Re: iNES Header Repair

Post by oxyandy »

There are plenty of examples similar to this..

try Ys III: Wanderers from Ys rebuilt from BootGod's database (aka mapper 4) in Nestopia..
The background will be missing , Nestopia Internal uses 118

even CaH4e3's latest Fceumm will tell you Mapper 4 is incorrect, and loads ROM as 118..
There are more examples of how using BootGod's xml in Nestopia, causes ROMs to fail.
You need more examples ?

With a tiny edit, the python script can be used with Marty's database in the same way to rebuild headers.
Using Marty's database in this way can fix another 303 ROMs which BG's did not..
Comparing the resulting sets shows quite a few differences...

EDIT: BTW, Konami mappers in Nestopia as Marty left it are a bit limited,
requiring very specific xml entries for Konami ROMs.
Dragon2snow rewrote these mappers for Nestopia, making it MUCH more versatile.
Post Reply