PPU pattern tables: Difference between revisions

From NESdev Wiki
Jump to navigationJump to search
(added pattern table address decode)
m (→‎Addressing: typo fix)
Line 43: Line 43:
#. C - Tile column
#. C - Tile column
#. P - Bit plane (0 = "lower", 1 = "upper")
#. P - Bit plane (0 = "lower", 1 = "upper")
#. T - Fine Y offset (i.e. the row number of a given 16x16 tile)
#. T - Fine Y offset (i.e. the row number of a given 8×8 tile)

Revision as of 21:09, 3 March 2015

Overview

Backgrounds and sprites are drawn with tiles. The pattern table, at $0000-$1FFF in PPU address space, defines the shapes of these tiles. Each tile in the pattern table is 16 bytes, made of two planes. The first plane controls bit 0 of the color; the second plane controls bit 1. Any pixel whose color is 0 is background/transparent (represented by '.' in the following diagram):

Bit Planes            Pixel Pattern
$0xx0=$41  01000001
$0xx1=$C2  11000010
$0xx2=$44  01000100
$0xx3=$48  01001000
$0xx4=$10  00010000
$0xx5=$20  00100000         .1.....3
$0xx6=$40  01000000         11....3.
$0xx7=$80  10000000  =====  .1...3..
                            .1..3...
$0xx8=$01  00000001  =====  ...3.22.
$0xx9=$02  00000010         ..3....2
$0xxA=$04  00000100         .3....2.
$0xxB=$08  00001000         3....222
$0xxC=$16  00010110
$0xxD=$21  00100001
$0xxE=$42  01000010
$0xxF=$87  10000111

The pattern table is divided into two 256-tile sections: $0000-$0FFF, nicknamed "left", and $1000-$1FFF, nicknamed "right". The nicknames come from how emulators with a debugger display the pattern table. Traditionally, they are displayed as two side-by-side 128x128 pixel sections, each representing 16x16 tiles from the pattern table, with $0000-$0FFF on the left and $1000-$1FFF on the right.

Addressing

For a given 12-bit address in the pattern table, the address can be decoded as follows:

CBA9876543210 (high order bits first)
-------------
HRRRRCCCCPTTT

Where the letters mean:

  1. . H - Hand (0 = "left", 1 = "right")
  2. . R - Tile row
  3. . C - Tile column
  4. . P - Bit plane (0 = "lower", 1 = "upper")
  5. . T - Fine Y offset (i.e. the row number of a given 8×8 tile)