GBR Header: 0x00 = 4 byte header (GBRF) 0x04 = Number of banks included in GBR file (including bank 0. (File size - 0x20) / 0x4000) 0x05 = 0000-3FFF bank to use initially (usually 0) 0x06 = 4000-7FFF bank to use initially 0x07 = timerflag (01 = vsync, 02 = timer, 03 = both. For Timer, FFFF=04) 0x08 = 2 byte Song Init address 0x0A = 2 byte Vsync address (Some only use 0x0A/0x0C, some use both) 0x0C = 2 byte Timer address 0x0E = FF06 Write to use(FirstTMA) 0x0F = FF07 Write to use(FirstTAC) (CGB = Bit 80 set, AND doesn't start with F, like 0xF0) 0x10-0x1F = 00s, unused Load address is always 0000. Header Size: 0x20 bytes Converting to GBS: 0x04 = Ignore 0x05 = Must set this bank to be located at 0 position for GBS. If 0, ignore 0x06 = Set code in Init to set this bank. If 1, ignore 0x07 = if 1, GBS[0F] = 00, if 2, GBS[0F] = 04, if 3, GBS[0F] = 44 0x08 = Use this as GBSs song init 0x0A = If 0x07 = 01, this is Play. If 03, see GBS INT info 0x0C = If 0x07 = 02, this is Play. If 03, see GBS INT info 0x0E = Put this at 0x0E of GBS header. 0x0F = AND this with 0x07 and include those bits in GBS[0F]. If first digit of it is F, ignore it. If not, and bit 0x80 is set, enable CGB mode in GBS 0x10-0x1F = 00s, unused Use BGB to find writes to FFFF, and then code them out in the GBS. This will prevent some weird issues that can appear.