We've just updated MediaWiki and its underlying software. If anything doesn't look or work quite right, please mention it to us. --RanAS

PPU Registers

From SnesLab
Revision as of 01:57, 20 May 2019 by Anonimzwx (talk | contribs)
Jump to: navigation, search

Introduction

PPU (also knowing as Picture Processing Unit) is a co-processor of SNES used to send video data to TV. It includes a lot of registers that can be used to do graphic effects.

Registers $2100~$21FF

Extracted from Anomie's Register Doc "regs.txt"

$2100: Screen Display

It can be read/written at any time: Yes It can be read/written during H-Blank: Yes It can be read/written during V-Blank: Yes It can be read/written during force-blank: Yes Register is writable for an effect: Yes Register is readable for a value or effect (i.e. not open bus): Yes Read/Write style: Byte

Format:

x---bbbb

x = Force blank on when set. bbbb = Screen brightness, F=max, 0="off".

Note that force blank CAN be disabled mid-scanline. However, this can result in glitched graphics on that scanline, as the internal rendering buffers will not have been updated during force blank. Current theory is that BGs will be glitched for a few tiles (depending on how far in advance the PPU operates), and OBJ will be glitched for the entire scanline. Also, writing this register on the first line of V-Blank (225 or 240, depending on overscan) when force blank is currently active causes the OAM Address Reset to occur.

$2101: Object Size and Chr Address

It can be read/written at any time: No It can be read/written during H-Blank: ??? It can be read/written during V-Blank: Yes It can be read/written during force-blank: Yes Register is writable for an effect: Yes Register is readable for a value or effect (i.e. not open bus): No Read/Write style: Byte

Format:

sssnnbbb

sss = Object size:

  • 000 = 8x8 and 16x16 sprites
  • 001 = 8x8 and 32x32 sprites
  • 010 = 8x8 and 64x64 sprites
  • 011 = 16x16 and 32x32 sprites
  • 100 = 16x16 and 64x64 sprites
  • 101 = 32x32 and 64x64 sprites
  • 110 = 16x32 and 32x64 sprites ('undocumented')
  • 111 = 16x32 and 32x32 sprites ('undocumented')

nn = Name Select

bbb = Name Base Select (Addr>>14)

  • See the section "SPRITES" below for details.