ROM Technical Description

Arkanoid is a 64KB ROM that uses the Mapper 3. It has 2 PRG banks and 2 CHR banks. The 2 CHR banks are used to load tiles into the PPU upon reset, and then both PRG banks are loaded for the actual gameplay.

Note that all offsets described below are for the US version of the game.

Level Data

Level Data is located at 0x46C0. Each level is exactly 0x100 bytes long. There are 0x23 (35) levels, for a total of 0x2300 bytes, plus the boss level, which has no bricks, but the 0x100 bytes block is there, following the last level.

Each block of 0x100 bytes is formatted as follow:

0000 - 00DE Brick Data (DF bytes)
00DF - 00EE Palettes (4 * 4 = 10 bytes)
00EF - 00FE Tile code for each brick type (10 bytes)
00FF - 00FF Number of bricks to destroy to clear level (1 byte)

Each byte of the Brick Data block defines a single brick, starting from the top-left corner, going right, then down. There are 11 bricks per row.

Brick Data Structure

xxxx.... Type of brick (0 - F)
....x... Contains a capsule (0 - 1)
.....xxx Number of hits needed to clear (0 - 7) (0 = 8)

Brick Types

00 Nothing
0x 45000 Points ?
1x 50 Points
2x 60 Points
3x 70 Points
4x 80 Points
5x 90 Points
6x 100 Points
7x 110 Points
8x 120 Points
9x 0 Points
Ax 5000 Points
Bx ? Score goes up indefinitely
Cx 200 Points
Dx 25000 Points
Ex Hard Brick (Gray) 50 Points
Fx Indestructible Brick (Gold)

Palettes

Each level has its own set of 4 palettes, as described above. Palettes are determined by the graphics data associated with the tile code. The original game uses brick graphics with only 2 colors. One uses colors 0-1, and the other 2-3. Idem for the gray and gold bricks, which use a different tile code. All tile codes can be changed, which means you can have hard and indestructible bricks of any color.

However, the palettes used for actual drawing are not attributed on a per-brick basis. The palettes data follows the level data immediately, at 0x6AC0. The entire screen is divided into 0x40 blocks of 4x4 tiles, which in turn are divided into four, starting from the top-left corner, going right, then down. Each byte of this table defines the 4 palettes to use for each 4x4 blocks that divide the screen. Each of the four corners are defined as follow:

xx...... Palette for lower-right corner
..xx.... Palette for lower-left corner
....xx.. Palette for upper-right corner
......xx Palette for upper-left corner

Example: a value of 55 (0101 0101) means that palette 1 is used for all 4 corners.

Tile Codes

Each level can define 16 tile codes for the 16 possible types of bricks, 0 to F. A brick is made of two tiles, the left tile uses the tile code, and the right tile uses the tile code + 1. For example, a brick with tile code 6E will have the tile mappings 6E-6F.