Last modified on 26 July 2010, at 20:24

Super NES Programming/SNES Hardware Registers

Address Register name Comment
0x2100 Screen Display Register a000bbbb a: 0=screen on 1=screen off, b = brightness
0x2101 OAM Size and Data Area Designation aaabbccc a = Size, b = Name Selection, c = Base Selection
0x2102 Address for Accessing OAM
0x2104 OAM Data Write
0x2105 BG Mode and Tile Size Setting abcdefff abcd = BG tile size (4321): 0 = 8x8 1 = 16x16, e = BG 3 High Priority, f = BG Mode
0x2106 Mosaic Size and BG Enable aaaabbbb a = Mosaic Size b = Mosaic BG Enable
0x2107 BG 1 Address and Size aaaaaabb a = Screen Base Address (Upper 6-bit), b = Screen Size
0x2108 BG 2 Address and Size aaaaaabb a = Screen Base Address (Upper 6-bit), b = Screen Size
0x2109 BG 3 Address and Size aaaaaabb a = Screen Base Address (Upper 6-bit), b = Screen Size
0x210A BG 4 Address and Size aaaaaabb a = Screen Base Address (Upper 6-bit), b = Screen Size
0x210b BG 1 & 2 Tile Data Designation aaaabbbb a = BG 2 Tile Base Address, b = BG 1 Tile Base Address
0x210c BG 3 & 4 Tile Data Designation aaaabbbb a = BG 4 Tile Base Address, b = BG 3 Tile Base Address
0x210d BG 1 Horizontal Scroll Offset Scroll offset registers are all 16 bits wide.
0x210e BG 1 Vertical Scroll Offset
0x210f BG 2 Horizontal Scroll Offset
0x2110 BG 2 Vertical Scroll Offset
0x2111 BG 3 Horizontal Scroll Offset
0x2112 BG 3 Vertical Scroll Offset
0x2113 BG 4 Horizontal Scroll Offset
0x2114 BG 4 Vertical Scroll Offset
0x2115 VRAM Address Increment Value
0x2116 Address for VRAM Read/Write (Low Byte)
0x2117 Address for VRAM Read/Write (High Byte)
0x2118 Data for VRAM Write (Low Byte)
0x2119 Data for VRAM Write (High Byte)
0x211a Initial Setting for Mode 7 aa0000bc a = Screen Over b = Vertical Flip c = Horizontal Flip
0x211b Mode 7 Matrix Parameter A Registers 211b through 2120 are 16 bits wide.
0x211B is also used as the 16-bit multiplicand for registers 0x2134-6 (write twice)
0x211C is also used as the 8-bit multiplier for registers 0x2134-6
0x211c Mode 7 Matrix Parameter B
0x211d Mode 7 Matrix Parameter C
0x211e Mode 7 Matrix Parameter D
0x211f Mode 7 Center Position X
0x2120 Mode 7 Center Position Y
0x2121 Address for CG-RAM Write
0x2122 Data for CG-RAM Write
0x2123 BG 1 and 2 Window Mask Settings aaaabbbb a = BG 2 Window Settings b = BG 1 Window Settings
0x2124 BG 3 and 4 Window Mask Settings aaaabbbb a = BG 4 Window Settings b = BG 3 Window Settings
0x2125 OBJ and Color Window Settings aaaabbbb a = Color Window Settings b = OBJ Window Settings
0x2126 Window 1 Left Position Designation
0x2127 Window 1 Right Position Designation
0x2128 Window 2 Left Postion Designation
0x2129 Window 2 Right Postion Designation
0x212a BG 1, 2, 3 and 4 Window Logic Settings aabbccdd a = BG 4 b = BG 3 c = BG 2 d = BG 1
0x212b Color and OBJ Window Logic Settings 0000aabb a = Color Window b = OBJ Window
0x212c Background and Object Enable (Main Screen) 000abcde a = Object b = BG 4 c = BG 3 d = BG 2 e = BG 1
0x212d Background and Object Enable (Sub Screen) 000abcde a = Object b = BG 4 c = BG 3 d = BG 2 e = BG 1
0x212e Window Mask Designation for Main Screen 000abcde a = Object b = BG 4 c = BG 3 d = BG 2 e = BG 1
0x212f Window Mask Designation for Sub Screen 000abcde a = Object b = BG 4 c = BG 3 d = BG 2 e = BG 1
0x2130 Initial Settings for Color Addition aabb00cd a = Main Color Window On/Off, b = Sub Color Window On/Off, c = Fixed Color Add/Subtract Enable, d = Direct Select
0x2131 Add/Subtract Select and Enable abcdefgh a = 0 for Addition, 1 for Subtraction, b = 1/2 Enable c = Back Enable, d = Object Enable, efgh = Enable BG 4, 3, 2, 1
0x2132 Fixed Color Data abcddddd a = Blue b = Green c = Red ddddd = Color Data
0x2133 Screen Initial Settings ab00cdef a = External Sync, b = ExtBG Mode, c = Pseudo 512 Mode, d = Vertical Size, e = Object-V Select, f = Interlace
0x2134 Multiplication Result (Low Byte)
0x2135 Multiplication Result (Mid Byte)
0x2136 Multiplication Result (High Byte)
0x2137 Software Latch for H/V Counter
0x2138 Read Data from OAM (Low-High)
0x2139 Read Data from VRAM (Low)
0x213a Read Data from VRAM (High)
0x213b Read Data from CG-RAM (Low-High)
0x213c H-Counter Data
0x213d V-Counter Data
0x213e PPU Status Flag
0x213f
0x2140 APU I/O Port
0x2141
0x2142
0x2143
0x4200 NMI, V/H Count, and Joypad Enable a0bc000d a = NMI b = V-Count c = H-Count d = Joypad
0x4201 Programmable I/O Port Output
0x4202 Multiplicand A
0x4203 Multplier B
0x4204 Dividend (Low Byte)
0x4205 Dividend (High-Byte)
0x4206 Divisor B
0x4207 H-Count Timer (Upper 8 Bits)
0x4208 H-Count Timer MSB (Bit 0)
0x4209 V-Count Timer (Upper 8 Bits)
0x420a V-Count Timer MSB (Bit 0)
0x420b Regular DMA Channel Enable abcdefgh a = Channel 7...h = Channel 0: 1 = Enable 0 = Disable
0x420c H-DMA Channel Enable abcdefgh a = Channel 7 .. h = Channel 0: 1 = Enable 0 = Disable
0x420d Cycle Speed Designation 0000000a a: 0 = 2.68 MHz, 1 = 3.58 MHz
0x4210 NMI Enable
0x4211 IRQ Flag By H/V Count Timer
0x4212 H/V Blank Flags and Joypad Status
0x4213 Programmable I/O Port Input
0x4214 Quotient of Divide Result (Low Byte)
0x4215 Quotient of Divide Result (High Byte)
0x4216 Product/Remainder Result (Low Byte)
0x4217 Product/Remainder Result (High Byte)
0x4218 Joypad 1 Data (Low Byte) abcd0000 a = Button A b = X c = L d = R
0x421a Joypad 2 Data (Low Byte)
0x421c Joypad 3 Data (Low Byte)
0x421e Joypad 4 Data (Low Byte)
0x4219 Joypad 1 Data (High Byte) abcdefgh a = B b = Y c = Select d = Start efgh = Up/Dn/Lt/Rt
0x421b Joypad 2 Data (High Byte)
0x421d Joypad 3 Data (High Byte)
0x421f Joypad 4 Data (High Byte)

DMA RegistersEdit

'X' being from 0 to 7:

Address Register name Comment
0x43X0 Parameters for DMA Transfer ab0cdeee a = Direction b = Type c = Inc/Dec d = Auto/Fixed e = Word Size Select
0x43X1 B Address
0x43X2 A Address (Low Byte)
0x43X3 A Address (High Byte)
0x43X4 A Address Bank
0x43X5 Number Bytes to Transfer (Low Byte) (DMA)
0x43X6 Number Bytes to Transfer (High Byte) (DMA)
0x43X7 Data Bank (H-DMA)
0x43X8 A2 Table Address (Low Byte)
0x43X9 A2 Table Address (High Byte)
0x43Xa Number of Lines to Transfer (H-DMA)