All fields are big endian.
Code:
enum CODE_TYPE{
  TYPE_BOOT = 1,
  CRAMFS,
  CONFIG
};

struct FileHeader{
	u16 num; // enum CODE_TYPE
	u32 pkg_offset; //  offset in file
	u32 flash_offset; // offset in flash
	u32 size;
	char mustBeZero[18];
};

struct Superblock{
	u32 crc16; // Sic! 16-bit CRC in 32-bit field.
	u32 magic; // BE 73 15 04
	u32 must_be_3; // unknown. 
	u32 min_max_config_size; // 0x20000
	u32 zero0; 
	u32 zero1;
	u32 min_flash; // 0x400000
	u32 min_ram; // 0x1000000
	char name[16]; // "SL-500" or "SL-1000"
	char zero2[0x2A0-0x30];
	u16 ver[6];
	char zero3[0x30A-0x2AC];
	FileHeader file_hdrs[3];
	u8 data[1]; // flash data
};