Difference between revisions of "Icon.bin"

From DSiBrew
Jump to navigation Jump to search
m (Simplified the C-code.)
Line 95: Line 95:
The conversion to RGB888 is made like this (C):
The conversion to RGB888 is made like this (C):
   u8 r = (color      ) & 0x1f;
   u8 r = ((color      ) & 0x1f)<<3;
   u8 g = (color >>  5) & 0x1f;
   u8 g = ((color >>  5) & 0x1f)<<3;
   u8 b = (color >> 10) & 0x1f;
   u8 b = ((color >> 10) & 0x1f)<<3;
  r <<= 3;
  g <<= 3;
  b <<= 3;
== Checksums ==
== Checksums ==

Revision as of 09:26, 26 April 2009

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
0x0230 32 Palette for above
0x0250 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 80 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) 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;


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