Difference between revisions of "Icon.bin"

From DSiBrew
Jump to navigation Jump to search
(Some fixes)
 
(4 intermediate revisions by 4 users not shown)
Line 7: Line 7:
 
[[Image:icon_5.gif]]
 
[[Image:icon_5.gif]]
  
These are converted by a tool bLAStY wrote. Icon files were supplied by loopy.
+
These are converted by a tool blasty wrote. Icon files were supplied by loopy.
  
 
== Basic File Structure ==
 
== Basic File Structure ==
Line 17: Line 17:
 
|-
 
|-
 
| 0x0000
 
| 0x0000
| 2
+
| 1
| File Version/Magic (should be 0x0301)
+
| Number of titles (5+N)
 +
|-
 +
| 0x0001
 +
| 1
 +
| Animated (1=contains animated icon at 0x1240)
 
|-
 
|-
 
| 0x0002
 
| 0x0002
 
| 2*4
 
| 2*4
| 4 CRC checksums (polynominal 0x6000 or 0xA001)
+
| 4 CRC checksums (polynomial 0xA001)
 
|-
 
|-
 
| 0x000A
 
| 0x000A
Line 37: Line 41:
 
|-
 
|-
 
| 0x0240
 
| 0x0240
| 256*8
+
| 256*16
| Application Title (in 8 languages), wide chars
+
| Application Titles, wide chars
|-
 
| 0x0A40
 
| 2048
 
| Padding (00's)
 
 
|-
 
|-
 
| 0x1240
 
| 0x1240
Line 56: Line 56:
 
| Animation Sequence
 
| Animation Sequence
 
|}
 
|}
Languages (in correct order) are: Japanese, English, French, German, Italian, Spanish, Unknown, Unknown.
+
Languages (in correct order) are: Japanese, English, French, German, Italian, Spanish, ?Chinese?, Korean.
  
 
== Animation Sequence ==
 
== Animation Sequence ==
Line 95: Line 95:
  
 
The conversion to RGB888 is made like this (C):
 
The conversion to RGB888 is made like this (C):
 +
<source lang="c">
 
   u8 r = ((color      ) & 0x1f)<<3;
 
   u8 r = ((color      ) & 0x1f)<<3;
 
   u8 g = ((color >>  5) & 0x1f)<<3;
 
   u8 g = ((color >>  5) & 0x1f)<<3;
 
   u8 b = ((color >> 10) & 0x1f)<<3;
 
   u8 b = ((color >> 10) & 0x1f)<<3;
 +
</source>
  
 
== Checksums ==
 
== 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.
+
The CRC-output is not bitwise inverted after the calculation, but it is byte-swapped to big-endian. Polynomial used is: 0xA001, same for all.
  
 
{| class="wikitable"
 
{| class="wikitable"

Latest revision as of 18:41, 13 February 2011

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 1 Number of titles (5+N)
0x0001 1 Animated (1=contains animated icon at 0x1240)
0x0002 2*4 4 CRC checksums (polynomial 0xA001)
0x000A 22 Padding (00's)
0x0020 512 Default Bitmap
0x0220 32 Palette for above
0x0240 256*16 Application Titles, wide chars
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, ?Chinese?, Korean.

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. Polynomial used is: 0xA001, same for all.

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