Advertisement
NovaYoshi

MMC9001

Aug 14th, 2013
257
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.08 KB | None | 0 0
  1. 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
  2. 256kb dual-ported generic VRAM for nametables and CHR
  3. Can read back what you wrote to any register unless otherwise stated
  4. 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
  5. Initializes self on reset, detected by 6502 reset vector getting read. Any register not stated initializes to zero.
  6.  
  7. cccccccc $4200 - CHR select $0000-$03ff (1kb) - initializes to bank 0
  8. cccccccc $4201 - CHR select $0400-$07ff (1kb) - initializes to bank 1
  9. cccccccc $4202 - CHR select $0800-$0bff (1kb) - initializes to bank 2
  10. cccccccc $4203 - CHR select $0c00-$0fff (1kb) - initializes to bank 3
  11. cccccccc $4204 - CHR select $1000-$13ff (1kb) - initializes to bank 4
  12. cccccccc $4205 - CHR select $1400-$17ff (1kb) - initializes to bank 5
  13. cccccccc $4206 - CHR select $1800-$1bff (1kb) - initializes to bank 6
  14. cccccccc $4207 - CHR select $1c00-$1fff (1kb) - initializes to bank 7
  15. cccccccc $4208 - Nametable select $2000
  16. cccccccc $4209 - Nametable select $2400
  17. cccccccc $420a - Nametable select $2800
  18. cccccccc $420b - Nametable select $2c00
  19. pppppppp $420c - PRG select $6000-$7fff (8kb) - initializes to bank -5
  20. pppppppp $420d - PRG select $8000-$9fff (8kb) - initializes to bank -4
  21. pppppppp $420e - PRG select $a000-$bfff (8kb) - initializes to bank -3
  22. pppppppp $420f - PRG select $c000-$dfff (8kb) - initializes to bank -2
  23. pppppppp $4210 - PRG select $e000-$ffff (8kb) - initializes to bank -1
  24.  
  25. isbb.am $4211 - misc config stuff #1
  26. |||||||+-- if 1, banks 0 and 1 refer to the NES's built-in nametable RAM instead of the CHR RAM, but only for nametables
  27. ||||||+--- if 1, enable ARM (setting to 1 after previously being 0 resets it)
  28. |||||+---- if 1, alternate attributes between palette 0 and 1 every scanline
  29. ||||+----- if 1, bitmap mode is stored with each two bits being a color, instead of planar
  30. ||++------ if 1, enable bitmap mode ($421e used as a base for the whole screen)
  31. || if 2, bitmap mode, but second port of dual-ported VRAM is also used for rendering
  32. || and the bitmap's pixels take priority over the regular tiles creating an overlay
  33. || if 3, same, but regular tiles take priority over bitmap
  34. |+-------- if 1, enable Namco 163 expansion sound
  35. +--------- if 1, enable scanline counter IRQ
  36.  
  37. mmrfssss $4212 - MMC5 RAM nametable expansion config
  38. ||||++++-- if 1, pptttttt, P is palette and T is 4kb CHR bank
  39. |||| if 2, ppxytttt, P is palette and T is 4kb CHR bank, X and Y flip a tile horizontally or vertically
  40. |||| if 3, MMC5 RAM used to scroll each tile a given amount horizontally and vertically:
  41. |||| xxxxyyyy, where Y is vertical, X is horizontal (signed); moves in color 0 from side if not moving in pixels
  42. |||| 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
  43. |||| 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
  44. |||| if 6, similar to 3, but format is ff0dxxxx, where F is color to move in from the side if not tile pixels
  45. |||| if D is 1, Y is used instead of X
  46. |||| alternate format pp1xyttt, where P is palette, X and Y flip and TTT extend tiles
  47. |||| if 7,
  48. |||+----- if 1, palette bits are replaced by XY, where X flips horizontally and Y flips vertically
  49. ||+------ if 1, double-render sprites as background too for infinite sprites per row
  50. || (watch for $02xx writes to detect sprites)
  51. ++------- MMC1 mirroring select, but applying to what kilobyte affects what nametables
  52.  
  53. ........ $4213 - Unused but reserved for config
  54. ........ $4214 - Unused but reserved for config
  55. ........ $4215 - Unused but reserved for config
  56.  
  57. nnnnnnnn $4216 - Scanline to generate IRQ at; read or write to acknowledge IRQs
  58. xxxxxxxx $4217 - Multiplier Param A (write) / Low bits of product (read)
  59. xxxxxxxx $4218 - Multiplier Param B (write) / High bits of product (read)
  60. xxxxxxxx $4219 - Random number generator (read) / Max value for random number generator (write)
  61. xxxxxxxx $421a - Write protect flags for the first eight banks of PRG RAM, from least significant to most significant bit
  62. xxxxxxxx $421b - last value written to PPUCTRL ($2000)
  63. xxxxxxxx $421c - last value written to PPUMASK ($2001)
  64. xxxxxxxx $421d - bank to use as a base for the bitmap mode if enabled
  65. xxxxxxxx $421e - bitmap mode scroll X
  66. xxxxxxxx $421f - bitmap mode scroll Y
  67. xxxxxxxx $4220 - Namco 163 expansion sound address
  68. xxxxxxxx $4221 - Namco 163 expansion sound data
  69. xxxxxxxx $4222 - 10000s digit of BCD number (read), low byte of number to convert (write)
  70. xxxxxxxx $4223 - 1000s digit of BCD number (read), high byte of number to convert (write)
  71. xxxxxxxx $4224 - 100s digit of BCD number (read)
  72. xxxxxxxx $4225 - 10s digit of BCD number (read)
  73. xxxxxxxx $4226 - 1s digit of BCD number (read)
  74. xxxxxxxx $4227 - Division Param A (write, low), a / b (read, low)
  75. xxxxxxxx $4228 - Division Param A (write, high), a / b (read, high)
  76. xxxxxxxx $4229 - Division Param B (write), a % b (read)
  77. es.wwwww $422a - MMC5 Vertical Split Mode
  78. || +++++- Specify vertical split start/stop tile
  79. |+------- Specify vertical split screen side (0:left; 1:right)
  80. +-------- Enable vertical split mode
  81. xxxxxxxx $422b - MMC5 Vertical Split Scroll
  82. xxxxxxxx $422c - MMC5 Vertical Split Bank
  83. xxxxxxxx $422d - Force an interrupt on ARM (write), use shared NES/ARM memory to send parameters and get results back
  84.  
  85. bb.aaaaa $422e - DMA source bank
  86. ++------ if B = 0, PRG RAM/ROM
  87. if B = 1, CHR RAM; top 3 address bits not used for address
  88. if B = 2, on-board RAM that starts at $4400
  89. if B = 3, fill mode, use low 8 bits of address as value
  90. aaaaaaaa $422f - DMA source high
  91. aaaaaaaa $4230 - DMA source low
  92. bbbaaaaa $4231 - DMA destination bank
  93. aaaaaaaa $4232 - DMA destination high
  94. aaaaaaaa $4233 - DMA destination low
  95. xxxxxxxx $4234 - DMA length high
  96. xxxxxxxx $4235 - DMA length low
  97. xxxxxxxx $4236 - DMA offset per write high
  98. xxxxxxxx $4237 - DMA offset per write low
  99. ixxxxxxx $4238 - DMA action: (writing starts DMA)
  100. | ++++- if 0, copy
  101. | if 1, swap
  102. | if 2, add
  103. | if 3, subtract
  104. | if 4, or
  105. | if 5, an
  106. | if 6, xor
  107. | if 7,
  108. +------- generate IRQ once DMA is completed
  109.  
  110. xxxxxxxx $4239 - IRQ reason (reading acknowledges)
  111. if 0: IRQ by non-mapper means
  112. if 1: IRQ by scanline counter
  113. if 2: IRQ by DMA completion
  114. if 3:
  115.  
  116. $4400 - $47ff - shared 6502/ARM memory
  117. $4800 - $4bff - kilobyte for MMC5 stuff (nametable 1)
  118. $4c00 - $4fff - kilobyte for MMC5 stuff (nametable 2)
  119.  
  120. -----ARM's side-----
  121. $00000000 - $01ffffff: ARM ROM (32MB)
  122. $02000000 - $03ffffff: ARM RAM (32MB)
  123. $04000000 - $04040000: CHR RAM (dual-ported so it can access even while NES renders)
  124. $04100000 - $042fffff: PRG ROM/RAM (same banks as 6502 accesses)
  125. $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