Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 2048kb max total space for both PRG ROM and PRG RAM (RAM starts at the beginning and ROM is placed at the end), dual ported
- 256kb dual-ported generic VRAM for nametables and CHR
- Can read back what you wrote to any register unless otherwise stated
- ARM co-processor (at some high multiple of the NES's clock speed, around 16Mhz or 32Mhz) with 32MB max ROM and 32MB max RAM
- Initializes self on reset, detected by 6502 reset vector getting read. Any register not stated initializes to zero.
- cccccccc $4200 - CHR select $0000-$03ff (1kb) - initializes to bank 0
- cccccccc $4201 - CHR select $0400-$07ff (1kb) - initializes to bank 1
- cccccccc $4202 - CHR select $0800-$0bff (1kb) - initializes to bank 2
- cccccccc $4203 - CHR select $0c00-$0fff (1kb) - initializes to bank 3
- cccccccc $4204 - CHR select $1000-$13ff (1kb) - initializes to bank 4
- cccccccc $4205 - CHR select $1400-$17ff (1kb) - initializes to bank 5
- cccccccc $4206 - CHR select $1800-$1bff (1kb) - initializes to bank 6
- cccccccc $4207 - CHR select $1c00-$1fff (1kb) - initializes to bank 7
- cccccccc $4208 - Nametable select $2000
- cccccccc $4209 - Nametable select $2400
- cccccccc $420a - Nametable select $2800
- cccccccc $420b - Nametable select $2c00
- pppppppp $420c - PRG select $6000-$7fff (8kb) - initializes to bank -5
- pppppppp $420d - PRG select $8000-$9fff (8kb) - initializes to bank -4
- pppppppp $420e - PRG select $a000-$bfff (8kb) - initializes to bank -3
- pppppppp $420f - PRG select $c000-$dfff (8kb) - initializes to bank -2
- pppppppp $4210 - PRG select $e000-$ffff (8kb) - initializes to bank -1
- isbb.am $4211 - misc config stuff #1
- |||||||+-- if 1, banks 0 and 1 refer to the NES's built-in nametable RAM instead of the CHR RAM, but only for nametables
- ||||||+--- if 1, enable ARM (setting to 1 after previously being 0 resets it)
- |||||+---- if 1, alternate attributes between palette 0 and 1 every scanline
- ||||+----- if 1, bitmap mode is stored with each two bits being a color, instead of planar
- ||++------ if 1, enable bitmap mode ($421e used as a base for the whole screen)
- || if 2, bitmap mode, but second port of dual-ported VRAM is also used for rendering
- || and the bitmap's pixels take priority over the regular tiles creating an overlay
- || if 3, same, but regular tiles take priority over bitmap
- |+-------- if 1, enable Namco 163 expansion sound
- +--------- if 1, enable scanline counter IRQ
- mmrfssss $4212 - MMC5 RAM nametable expansion config
- ||||++++-- if 1, pptttttt, P is palette and T is 4kb CHR bank
- |||| if 2, ppxytttt, P is palette and T is 4kb CHR bank, X and Y flip a tile horizontally or vertically
- |||| if 3, MMC5 RAM used to scroll each tile a given amount horizontally and vertically:
- |||| xxxxyyyy, where Y is vertical, X is horizontal (signed); moves in color 0 from side if not moving in pixels
- |||| if 4, similar to 3, but format is ppffxxxx, where P is palette, F is color to move in from the side if not tile pixels
- |||| if 5, similar to 3, but format is ppffyyyy, where P is palette, F is color to move in from the side if not tile pixels
- |||| if 6, similar to 3, but format is ff0dxxxx, where F is color to move in from the side if not tile pixels
- |||| if D is 1, Y is used instead of X
- |||| alternate format pp1xyttt, where P is palette, X and Y flip and TTT extend tiles
- |||| if 7,
- |||+----- if 1, palette bits are replaced by XY, where X flips horizontally and Y flips vertically
- ||+------ if 1, double-render sprites as background too for infinite sprites per row
- || (watch for $02xx writes to detect sprites)
- ++------- MMC1 mirroring select, but applying to what kilobyte affects what nametables
- ........ $4213 - Unused but reserved for config
- ........ $4214 - Unused but reserved for config
- ........ $4215 - Unused but reserved for config
- nnnnnnnn $4216 - Scanline to generate IRQ at; read or write to acknowledge IRQs
- xxxxxxxx $4217 - Multiplier Param A (write) / Low bits of product (read)
- xxxxxxxx $4218 - Multiplier Param B (write) / High bits of product (read)
- xxxxxxxx $4219 - Random number generator (read) / Max value for random number generator (write)
- xxxxxxxx $421a - Write protect flags for the first eight banks of PRG RAM, from least significant to most significant bit
- xxxxxxxx $421b - last value written to PPUCTRL ($2000)
- xxxxxxxx $421c - last value written to PPUMASK ($2001)
- xxxxxxxx $421d - bank to use as a base for the bitmap mode if enabled
- xxxxxxxx $421e - bitmap mode scroll X
- xxxxxxxx $421f - bitmap mode scroll Y
- xxxxxxxx $4220 - Namco 163 expansion sound address
- xxxxxxxx $4221 - Namco 163 expansion sound data
- xxxxxxxx $4222 - 10000s digit of BCD number (read), low byte of number to convert (write)
- xxxxxxxx $4223 - 1000s digit of BCD number (read), high byte of number to convert (write)
- xxxxxxxx $4224 - 100s digit of BCD number (read)
- xxxxxxxx $4225 - 10s digit of BCD number (read)
- xxxxxxxx $4226 - 1s digit of BCD number (read)
- xxxxxxxx $4227 - Division Param A (write, low), a / b (read, low)
- xxxxxxxx $4228 - Division Param A (write, high), a / b (read, high)
- xxxxxxxx $4229 - Division Param B (write), a % b (read)
- es.wwwww $422a - MMC5 Vertical Split Mode
- || +++++- Specify vertical split start/stop tile
- |+------- Specify vertical split screen side (0:left; 1:right)
- +-------- Enable vertical split mode
- xxxxxxxx $422b - MMC5 Vertical Split Scroll
- xxxxxxxx $422c - MMC5 Vertical Split Bank
- xxxxxxxx $422d - Force an interrupt on ARM (write), use shared NES/ARM memory to send parameters and get results back
- bb.aaaaa $422e - DMA source bank
- ++------ if B = 0, PRG RAM/ROM
- if B = 1, CHR RAM; top 3 address bits not used for address
- if B = 2, on-board RAM that starts at $4400
- if B = 3, fill mode, use low 8 bits of address as value
- aaaaaaaa $422f - DMA source high
- aaaaaaaa $4230 - DMA source low
- bbbaaaaa $4231 - DMA destination bank
- aaaaaaaa $4232 - DMA destination high
- aaaaaaaa $4233 - DMA destination low
- xxxxxxxx $4234 - DMA length high
- xxxxxxxx $4235 - DMA length low
- xxxxxxxx $4236 - DMA offset per write high
- xxxxxxxx $4237 - DMA offset per write low
- ixxxxxxx $4238 - DMA action: (writing starts DMA)
- | ++++- if 0, copy
- | if 1, swap
- | if 2, add
- | if 3, subtract
- | if 4, or
- | if 5, an
- | if 6, xor
- | if 7,
- +------- generate IRQ once DMA is completed
- xxxxxxxx $4239 - IRQ reason (reading acknowledges)
- if 0: IRQ by non-mapper means
- if 1: IRQ by scanline counter
- if 2: IRQ by DMA completion
- if 3:
- $4400 - $47ff - shared 6502/ARM memory
- $4800 - $4bff - kilobyte for MMC5 stuff (nametable 1)
- $4c00 - $4fff - kilobyte for MMC5 stuff (nametable 2)
- -----ARM's side-----
- $00000000 - $01ffffff: ARM ROM (32MB)
- $02000000 - $03ffffff: ARM RAM (32MB)
- $04000000 - $04040000: CHR RAM (dual-ported so it can access even while NES renders)
- $04100000 - $042fffff: PRG ROM/RAM (same banks as 6502 accesses)
- $04300000 - 1kb of shared NES/ARM memory, then GameBoy Advance's sound registers, then DMA registers, then timer registers
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement