Parse error in GoodMerge with SNES xmdb

General No-Intro related discussions.
Post Reply
Eevon
Posts: 7
Joined: 01 Jan 2012 12:30

Parse error in GoodMerge with SNES xmdb

Post by Eevon » 01 Jan 2012 12:48

Hi, guys.
I'm getting parse error in GoodMerge when trying to use Nintendo - Super Nintendo Entertainment System (20111225).xmdb.
Error text:

Code: Select all

Error: XML loading error.
The  element  'zoned'  has  invalid child element 'clone'. List of possible elements expected: 'bias'.
Is there an error in xmdb or am i doing something wrong?

Eevon
Posts: 7
Joined: 01 Jan 2012 12:30

Re: Parse error in GoodMerge with SNES xmdb

Post by Eevon » 05 Jan 2012 09:42

Tried new 2012-01-04 xmdb file - same error. Other xmdbs work fine. Come on guys, could you check it on your side please? You don't have to have snes roms to check it.

Rifu
High Council
Posts: 49
Joined: 27 Jun 2010 12:08

Re: Parse error in GoodMerge with SNES xmdb

Post by Rifu » 05 Jan 2012 14:10

Eevon wrote:Tried new 2012-01-04 xmdb file - same error. Other xmdbs work fine. Come on guys, could you check it on your side please? You don't have to have snes roms to check it.
I'm getting the same error using 2012-01-04 DAT and XMDB file and Goodmerge 3.1.2199.25374.

The old XMDB had 3496 entries, my complete SNES Romset has 3497 roms.
Bokujou Monogatari (Japan) (BS) was not included in the XMDB file, then i found that:

Bokujou Monogatari (Japan) (BS) - http://datomatic.no-intro.org/index.php ... =49&n=3498
had its parent set to
"Bokujou Monogatari (Japan) (Rev 1)" - http://datomatic.no-intro.org/index.php ... =0268&s=49
but the parent for that rom was set to:
"Harvest Moon (Europe)" - http://datomatic.no-intro.org/index.php ... =1024&s=49

There was a clone pointing to another clone as its parent so I've changed the parent of
"Bokujou Monogatari (Japan) (BS)" to be "Harvest Moon (Europe).sfc" and now its included in the new XMDB file.

The problem is actually with the rom below, there is no "bias zone" line for it:
"SNES Burn-in Test Cartridge (Unknown) (Rev D)" - http://datomatic.no-intro.org/?page=sho ... =49&n=3450

I think the "Unknown" region is causing the problem as editing the XMDB file from:

Code: Select all

<zoned type="deferred">
	<clone name="SNES Burn-in Test Cartridge (Unknown) (Rev D)"/>
</zoned>
to this below seems to make the merge start without any errors.

Code: Select all

<zoned type="deferred">
	<bias zone="E" name="SNES Burn-in Test Cartridge (Unknown) (Rev D)"/>
	<clone name="SNES Burn-in Test Cartridge (Unknown) (Rev D)"/>
</zoned>
I don't know how to fix this on Dat-o-Matic, so i'm going to let someone else handle it :P
but for now you can just edit the XMDB file in notepad and add the missing line.

I'm merging my set as a test, i'll report back with the results when its done...

edit2: merge successful.

Code: Select all

GoodMerge 3.1.3641.37824 - 2012-01-06 12:52:01 AM
Nintendo_-_Super_Nintendo_Entertainment_System 20120105 - Using a maximum of 6736MB RAM.

... <snip> ...

Statistics
5,131,711,157 bytes in 3,497 files were compressed into
1,611,313,941 bytes (31% of original) in 1,961 files (56% of original).
Elapsed: 0:25:13
Finished - 2012-01-06 1:17:33 AM

Eevon
Posts: 7
Joined: 01 Jan 2012 12:30

Re: Parse error in GoodMerge with SNES xmdb

Post by Eevon » 06 Jan 2012 11:25

Thank you, Rifu! I knew that there is some error like that, but was too lazy to parse whole xmdb manually. How did you found it?

User avatar
xuom2
High Council
Posts: 792
Joined: 22 May 2008 18:45

Re: Parse error in GoodMerge with SNES xmdb

Post by xuom2 » 06 Jan 2012 13:12

he is not human! :lol:

Eevon
Posts: 7
Joined: 01 Jan 2012 12:30

Re: Parse error in GoodMerge with SNES xmdb

Post by Eevon » 06 Jan 2012 14:35

Well, seriously it's time to update goodmerge already. It should report line number, where the parsing error occurred, to avoid such problems. Also it gives error when you trying to merge zipped roms using latest 7z. I think i'll check out it's source...

Eevon
Posts: 7
Joined: 01 Jan 2012 12:30

Re: Parse error in GoodMerge with SNES xmdb

Post by Eevon » 12 Jan 2012 13:38

I've compiled myself a fresh GoodMerge version and added line number in xmdb parse error report. No more manual searching. =)

Rifu
High Council
Posts: 49
Joined: 27 Jun 2010 12:08

Re: Parse error in GoodMerge with SNES xmdb

Post by Rifu » 12 Jan 2012 15:05

Eevon wrote:I've compiled myself a fresh GoodMerge version and added line number in xmdb parse error report. No more manual searching. =)
Great, I did a mod of the source a while ago to enable usage of dictionary sizes of up to 1gb for users of 64 bit 7zip and 64 bit OS.
I have 8gb of ram (and I use ~702mb as dictionary size) and it gives a LOT better compression on large rom sets like NDS then the default max 256mb.

Goodmerge sets the dictionary size to the total size of all files in the archive, so with 4x 128mb roms, a 512mb dictionary size will be used.

You need about 10~12gb of free ram, 64 bit 7zip and a 64bit OS (and pagefile turned ON) to use 1gb dictionary size.
(Without a pagefile I get a 'cannot allocate memory' from 64bit 7zip)

Code: Select all

In options.cs find this line:
public void SetDesiredRAM

and replace entire function with the function below:

// 1gb dictionary size max ram usage:
// 1024 * 19 = 19456
// 19456 / 2 = 9728
// 9728 + 65 = 9793mb
//
        public void SetDesiredRAM(int d) {
            if (d<0) d=0;
            else if (d>9793) d=9793;
            DesiredRAM = d;
            if (d-65 < 0) UltraDict=0;
            else UltraDict = ((d-65)*2)/19;
            if (UltraDict > 1024) UltraDict = 1024;
            if (d-8 < 0) MaxDict=0;
            else MaxDict = ((d-8)*2)/19;
            if (MaxDict > 1024) MaxDict = 1024;
        }
//

in SettingsDialog.cs

find this line: NumericMaximumRAM.Maximum = new System.Decimal(2498);
and change the line to this:
NumericMaximumRAM.Maximum = new System.Decimal(9793);

and recompile program

Eevon
Posts: 7
Joined: 01 Jan 2012 12:30

Re: Parse error in GoodMerge with SNES xmdb

Post by Eevon » 12 Jan 2012 19:47

Oh, thank you for this one! I've noticed increased dictionary size in your merge results and wanted to have such myself, because i have 16Gb RAM on my machine. I'll try to compile new version with your changes tomorrow. In my build i also changed all "7za.exe" references inside the source to "7z.exe". Otherwise you have to rename 7z.exe manually to 7za.exe or it'll not work correctly. If you'll point GoodMerge to 7z.exe it'll fail to recognize it when building command line and there will be errors during decompressing process.

Btw, tried to use latest NES xmdb and got same error as in SNES one at Line: 2681, Position: 3. Come on guys, fix dat-o-matic, please.

User avatar
xuom2
High Council
Posts: 792
Joined: 22 May 2008 18:45

Re: Parse error in GoodMerge with SNES xmdb

Post by xuom2 » 12 Jan 2012 20:38

the problem is that the guys behind such data are not active like me. i coded the datfile generation, but i don't know what to write in fields :lol:

Eevon
Posts: 7
Joined: 01 Jan 2012 12:30

Re: Parse error in GoodMerge with SNES xmdb

Post by Eevon » 13 Jan 2012 19:00

I understand. Real life is important too =)
But, please, bring their attention to this topic if you can.

Post Reply