SHOW:
|
|
- or go back to the newest paste.
1 | - | The .sfrom Header Format Conclusions - DarkAkuma |
1 | + | My sfrom Header Format Conclusions - DarkAkuma |
2 | ||
3 | After trial-n-error, and a bit of research from https://www.3dbrew.org/ 3DS and WiiU wiki's, the format of the SNES Classic has been determined to be the following. It's not EXACTLY the same, but often similar enough. | |
4 | ||
5 | Header 1: | |
6 | ||
7 | Addr: Size: Description: | |
8 | 0x00 0x04 Always 0x00000100 | |
9 | 0x04 0x04 File size (Including ROM, Headers, PCM audio samples region, PCM audio samples index, and SDD-1 graphics data if present.) | |
10 | 0x08 0x04 Always 0x00000030 | |
11 | 0x0C 0x04 End of the ROM region (not the file) / PCM audio samples region start. | |
12 | 0x10 0x04 Start of the footer region (Index for the PCM audio samples). Set to the end of the file or Header3 if using SDD-1 graphics data, if not using PCM audio. | |
13 | 0x14 0x04 Points to the Header2 (starts with 3C generally) | |
14 | 0x18 0x04 End of the file or Header3 if using decompressed SDD-1 graphics data. | |
15 | 0x1C 0x04 Always 0x00000000 | |
16 | 0x20 0x04 Points to Header2:0x1B. | |
17 | 0x24 0x08 SNES Classic/3DS/Wii U Virtual Console Game ID (WUP-J**X, X = title region (J=Japan, E=US, P=Europe)) | |
18 | 0x2C 0x04 Always 0x00000000 | |
19 | ||
20 | Header 2: | |
21 | ||
22 | - | 0x01 0x02 Always 0x00. Might be part of the following ROM size. |
22 | + | |
23 | 0x00 0x01 Emulation speed in FPS (always 0x3C in official VC, maybe 0x32 for PAL smc/sfc conversions) | |
24 | - | 0x04 0x01 Always 0x00 |
24 | + | 0x01 0x02 Always 0x0000. Might be part of the following ROM size. |
25 | 0x03 0x01 ROM size (In Mbits? I'm not great with Mbit. Rounding up seems to work fine.) | |
26 | - | 0x08 0x01 Always 0x00 |
26 | + | 0x04 0x01 Always 0x00. Might be part of the previous ROM size. |
27 | 0x05 0x03 Size of the converted PCM audio samples region (starting after ROM). 0x000000 if PCM data is not used. | |
28 | - | 0x0B 0x02 Always 0x0000 |
28 | + | 0x08 0x01 Always 0x00. Might be part of the previous PCM audio region size. |
29 | 0x09 0x02 PCM footer region size. 0x0000 if PCM data is not used. | |
30 | 0x0B 0x02 Always 0x0000. Might be part of the previous PCM footer size. | |
31 | 0x0D 0x02 Game Preset ID? 0x10XX = Early VC releases, 0x11XX range = Mostly Capcom games, 0x12XX range = Super FX games. | |
32 | 0x0F 0x01 Almost always 0x02. Seems to control the amount of controllers to read input from. (Though setting it to 0x00 still lets 1 player work.) | |
33 | 0x10 0x01 Sound volume (Known range = 0x28-0x91. 0x64 is most common) | |
34 | 0x11 0x01 ROM type (0x14 = LoROM / 0x15 = HiROM) | |
35 | 0x12 0x01 Super FX flag (0xC0 = Super FX game. 0x00 = Anything else) | |
36 | 0x13 0x08 Always 0x0000000000000000 | |
37 | 0x1B 0x04 Unknown1. Always 0x00000001 (Referred to by Header1:0x20) | |
38 | 0x1F 0x04 Unknown2. Always 0x00000001 ??? (This is present in every ROM except FF3) | |
39 | 0x23+ 0xXX Null padding to round to the next 16 bytes. | |
40 | ||
41 | !!! Only use with SDD-1 !!! | |
42 | Header3: | |
43 | 0x00 0x04 SDD-1 (And SMRPG for no reason) uses this. Point +0x0C (12) bytes forward. | |
44 | 0x04 0x0C 0x000000000000000000000000 (Would you look at that... 12 bytes...) |