Icon.bin

Revision as of 12:33, 27 April 2009 by Ludo6431 (talk | contribs) (Some fixes)

These are the banners you'll see in various places in the System Menu. They have the dimension 32x32 pixels.

Icon 1.gif Icon 2.gif Icon 3.gif Icon 4.gif Icon 5.gif

These are converted by a tool bLAStY wrote. Icon files were supplied by loopy.

Basic File Structure

Start Length Description
0x0000 2 File Version/Magic (should be 0x0301)
0x0002 2*4 4 CRC checksums (polynominal 0x6000 or 0xA001)
0x000A 22 Padding (00's)
0x0020 512 Default Bitmap
0x0220 32 Palette for above
0x0240 256*8 Application Title (in 8 languages), wide chars
0x0A40 2048 Padding (00's)
0x1240 512*8 8 Bitmaps (for animation)
0x2240 32*8 8 Palettes
0x2340 128 Animation Sequence

Languages (in correct order) are: Japanese, English, French, German, Italian, Spanish, Unknown, Unknown.

Animation Sequence

The sequence is represented by 2-byte tokens, in the following format (we're now talking bits, from left to right):

Length Description Mask
1 Flip Vertically 0x8000
1 Flip Horizontally 0x4000
3 Palette Index 0x3800
3 Bitmap Index 0x0700
8 Frame Duration (in frames (one frame = 1/60sec)) 0x00FF

Both bytes being zero indicates the end of the sequence. If the first token is zero, the non-animated default image is shown.

Bitmap Format

The bitmap is tiled 8x8 pixels (Nintendo tends to do this). Each pixel contain 4 bits of data, being the index into the palette specified by the current sequence-token.

The Palettes

Each color in the palette is in the standard 2-byte RGB5551 format (used since GBA).

The conversion to RGB888 is made like this (C):

 u8 r = ((color      ) & 0x1f)<<3;
 u8 g = ((color >>  5) & 0x1f)<<3;
 u8 b = ((color >> 10) & 0x1f)<<3;

Checksums

The CRC-output is not bitwise inverted after the calculation, but it is byte-swapped to big-endian. Polynominal used is: 0xA001, same for all.

Number Range
0 020-83F
1 020-93F
2 020-A3F
3 1240-23C0