I just thought I would mention that the Retrode doesn't seem to detect the size of Super Mario All Stars + Super Mario World correctly. No-intro says that this game should be 2.5 MiB, but the Retrode dumps it as a 4.0 MiB game. I used a hex editor to slice it to the size indicated by no-intro, and my checksums match on the truncated dump, so apparently it did dump correctly and just overdumped to almost double size.
In case it would be helpful, the ROM should end at 0x27FFFF, and the overdumped content at 0x280080 first appears at 0x200080 in the valid part of the dump. Judging by the changelog, I don't think SNES size detection has changed recently, but I'm still using 0.17g to hide from the driver controller errors (http://forum.retrode.org/index.php/topic,293.0.html) I got on 0.18d, in case this bug has already been fixed.
The SNES ROM header contains a code that roughly indicates the size. The Retrode uses the largest possible size for each code, and that size is always a power of two. I'm not aware of any recent changes regarding this.
While I don't have the combined game you are referring to, I do have Super Mario All Stars (2 MiB) as well as Super Mario World (512 kiB) as individual cartridges. Together, that would be 2.5 MiB. The next larger power of two size is 4 MiB (size code 0x0C, probably found at 0x7FD7 in the file, few bytes after the game title).
In order to detect the size more precisely, the Retrode would have to somehow identify unused areas at the end of ROM. For example, N64 size detection looks for areas filled with 0xFF or 0x00, among other things. Such simple clues might or might not exist in SNES games. (I'm not going to put effort into that option, sorry.)
There are already a few SNES games which the Retrode identifies by their checksum (from the header) to select the proper ROM size. We might try that for "SMAS+SMW", too, if you tell me the checksum. It is shown in the file name if "[filenameChksum] 1" is set in RETRODE.CFG.
The checksum is 9F27, and the game name is ALL_STARS + WORLD (found at 0x7FC0 in the dump). I know size detection is difficult and often impossible on some systems, but I thought I should mention it, just in case.
From what I've seen of non-power-of-2 sized ROMs, the last half of the ROM has been filled with repeats of the remainder above the last full power of 2.
(for example, a 20-megabit ROM like SMAS would contain the first 16 megabits, and then the last 4 megabits would be repeated to pad it up to 32 megabits.)
Not sure if that's a pattern that can be easily detected.
So, there is an option for per-game fixes based on game name?
I wonder if that can be done for a different game I have noted an error on: Zero Wing for Mega Drive. (the size in the header is wrong, seems to be in both J and E versions. Says 4 megabit and it should be 8. I see it's not in the FAQ on the main site.)
@Aleron Ives: Thanks, I'll add 9F27 to the list of 20 Megabit SNES games. Note that this is not included in v0.20-beta (about to be released).
BTW, each checksum only applies to a particular version of the game. What name (including region/version information) does the No-intro database return for the 9F27 game?
@KingMike:
- Non-power-of-2 sizes: Thanks for the information. Detecting such repetition patterns is feasible. Maybe someone will try it after the open-source release (I can't give you an estimated release date yet).
- Per-game fixes: So far, the firmware handles a few SNES and MD games as special cases based on the checksum stored in the ROM header, not the game name (the checksum may be shown as part of the file name, see above).
Due to the effort required and the increase in code size, I wouldn't want to add many more special cases. If you tell me the checksum(s) of your Zero Wing version(s), I'll add them, though.
Quote from: Wannado on 25/Sep/2016 04:07:46 PMBTW, each checksum only applies to a particular version of the game. What name (including region/version information) does the No-intro database return for the 9F27 game?
I assume you're asking for the dat-o-matic page for the game, which is here:
http://datomatic.no-intro.org/?page=show_record&s=49&n=2756
I have the US cart, but there is also an EU cart of the same size; however, the database doesn't list cartridge checksums, only ROM dump checksums, so I guess there's no way to know what the header checksum is to let the Retrode detect the EU cart until somebody reports their dump of it.
As for Zero Wing, the EU version's checksum is 95C9, if you want to add auto size detection for that title.
All your checksum are belong to us. ;D
I set up us the beta (http://forum.retrode.org/index.php/topic,337.msg2392.html#msg2392).
Zero Wing (JP): $D07D (big-endian) (internal header)
CRC32: 7E203D2B
MD5: 9647D8EC9183F3EC9F944D5EA49A99A9
SHA-1: FAD499E21AC55A3B8513110DC1F6E3F6CDECA8DD