View difference between Paste ID: wtK9yGMy and fcMDdjX1
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...)