# 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 | Scroll offset registers are all 16 bits wide. |
| 0x210f | BG 2 Horizontal Scroll Offset | Scroll offset registers are all 16 bits wide. |
| 0x2110 | BG 2 Vertical Scroll Offset | Scroll offset registers are all 16 bits wide. |
| 0x2111 | BG 3 Horizontal Scroll Offset | Scroll offset registers are all 16 bits wide. |
| 0x2112 | BG 3 Vertical Scroll Offset | Scroll offset registers are all 16 bits wide. |
| 0x2113 | BG 4 Horizontal Scroll Offset | Scroll offset registers are all 16 bits wide. |
| 0x2114 | BG 4 Vertical Scroll Offset | Scroll offset registers are all 16 bits wide. |
| 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 | 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 |
| 0x211d | Mode 7 Matrix Parameter C | 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 |
| 0x211e | Mode 7 Matrix Parameter D | 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 |
| 0x211f | Mode 7 Center Position X | 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 |
| 0x2120 | Mode 7 Center Position Y | 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 |
| 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 Position Designation |
| 0x2129 | Window 2 Right Position 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 | PPU Status Flag |
| 0x2140 | APU I/O Port |
| 0x2141 | APU I/O Port |
| 0x2142 | APU I/O Port |
| 0x2143 | APU I/O Port |
| 0x2180 | Indirect Work RAM access port | The address in 0x2181 through 0x2183 auto-increments after each access |
| 0x2181 | Indirect Work RAM access address (Low byte) | |
| 0x2182 | Indirect Work RAM access address (Middle byte) | |
| 0x2183 | Indirect Work RAM access address (High bit) | 0000000a a : Memory bank, 0 = 0x7E, 1 = 0x7F |
| 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 Flag and CPU version number | a000bbbb a = NMI occurred b = CPU Version number |
| 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) | abcd0000 a = Button A b = X c = L d = R |
| 0x421c | Joypad 3 Data (Low Byte) | abcd0000 a = Button A b = X c = L d = R |
| 0x421e | Joypad 4 Data (Low Byte) | abcd0000 a = Button A b = X c = L d = R |
| 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) | abcdefgh a = B b = Y c = Select d = Start efgh = Up/Dn/Lt/Rt |
| 0x421d | Joypad 3 Data (High Byte) | abcdefgh a = B b = Y c = Select d = Start efgh = Up/Dn/Lt/Rt |
| 0x421f | Joypad 4 Data (High Byte) | abcdefgh a = B b = Y c = Select d = Start efgh = Up/Dn/Lt/Rt |

## DMA Registers

'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) |