Nintendo NES-001 User Guide - Page 38

D.4 MMC3, Address

Page 38 highlights

• Bit 7 - Set to 1 to reset register. $C000-$DFFF Register 2: $E000-$FFFF • Bits 0-3 - VROM bank number to load into PPU $1000. If bit 4 of register 0 is set, this will be 4 KB banks n and (n + 1) where n is the value of bits 0-3, otherwise it is ignored. • Bit 4 - 256 KB selection register 1. Stores the high bit of 256 KB PRGROM selection in 1024 KB cartridges. • Bit 7 - Set to 1 to reset register. Register 3: • Bits 0-3 - PRG-ROM bank number to load into memory. If bit 3 of register 0 is clear, swaps 32 KB at $8000, otherwise swaps a 16 KB bank at either $8000 or $C000 based on bit 2 of register 0. • Bit 7 - Set to 1 to reset register. On reset, the first PRG-ROM bank is loaded into $8000 and the last PRG-ROM bank is loaded into $C000. Values are written to the registers in MMC1, one bit at a time until five bits have been written. By writing a value with bit 7 set, this buffering can be reset, causing the next write to be to bit 0 of the register. The buffering is also reset by writing to a different register. 256 KB swapping is not currently supported by the implementation of MMC1 in NES#. D.4 MMC3 Address $8000 $8001 $A000 $A001 $C000 $C001 $E000 $E001 Data • Bits 0-2 - Command number: • 0 - Swap two 1 KB VROM banks at PPU $0000. • 1 - Swap two 1 KB VROM banks at PPU $0800. • 2 - Swap one 1 KB VROM bank at PPU $1000. • 3 - Swap one 1 KB VROM bank at PPU $1400. • 4 - Swap one 1 KB VROM bank at PPU $1800. • 5 - Swap one 1 KB VROM bank at PPU $1C00. • 6 - Swap PRG-ROM bank at either $8000 or $A000 based on bit 6. • 7 - Swap PRG-ROM bank at either $A000 or $C000 based on bit 6. • Bit 6 - If 0, enables swapping at $8000 and $A000, otherwise enables swapping at $A000 and $C000. • Bit 7 - If 1, causes addresses for commands 0-5 to be the exclusive-or of the address stated and $1000. Executes the command specified by $8000, using this as the page number. • Bit 1 - Selects mirroring between horizontal (0) and vertical (1). • Bit 7 - Set to enable save RAM at $6000-$7FFF. IRQ Counter Register used to countdown to an IRQ. IRQ Latch Register used to store a temporary value to be copied to the IRQ Counter Register later. IRQ Control Register 0 used to disable IRQ generation and copy the IRQ Latch Register to the IRQ Counter Register. IRQ Control Register 1 used to enable IRQ generation. On cartridges with VROM, the first 8 KB bank is swapped into PPU $0000 on reset. 38

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47

38
Bit 7 - Set to 1 to reset register.
$C000-$DFFF
Register 2:
Bits 0-3 - VROM bank number to load into PPU $1000. If bit 4 of
register 0 is set, this will be 4 KB banks n and (n + 1) where n is the
value of bits 0-3, otherwise it is ignored.
Bit 4 - 256 KB selection register 1. Stores the high bit of 256 KB PRG-
ROM selection in 1024 KB cartridges.
Bit 7 - Set to 1 to reset register.
$E000-$FFFF
Register 3:
Bits 0-3 - PRG-ROM bank number to load into memory. If bit 3 of
register 0 is clear, swaps 32 KB at $8000, otherwise swaps a 16 KB
bank at either $8000 or $C000 based on bit 2 of register 0.
Bit 7 - Set to 1 to reset register.
On reset, the first PRG-ROM bank is loaded into $8000 and the last PRG-ROM bank is
loaded into $C000. Values are written to the registers in MMC1, one bit at a time until five
bits have been written. By writing a value with bit 7 set, this buffering can be reset, causing
the next write to be to bit 0 of the register. The buffering is also reset by writing to a different
register. 256 KB swapping is not currently supported by the implementation of MMC1 in
NES#.
D.4 MMC3
Address
Data
$8000
Bits 0-2 - Command number:
0 - Swap two 1 KB VROM banks at PPU $0000.
1 - Swap two 1 KB VROM banks at PPU $0800.
2 - Swap one 1 KB VROM bank at PPU $1000.
3 - Swap one 1 KB VROM bank at PPU $1400.
4 - Swap one 1 KB VROM bank at PPU $1800.
5 - Swap one 1 KB VROM bank at PPU $1C00.
6 - Swap PRG-ROM bank at either $8000 or $A000 based on bit 6.
7 - Swap PRG-ROM bank at either $A000 or $C000 based on bit
6.
Bit 6 - If 0, enables swapping at $8000 and $A000, otherwise enables
swapping at $A000 and $C000.
Bit 7 - If 1, causes addresses for commands 0-5 to be the exclusive-or
of the address stated and $1000.
$8001
Executes the command specified by $8000, using this as the page
number.
$A000
Bit 1 - Selects mirroring between horizontal (0) and vertical (1).
$A001
Bit 7 - Set to enable save RAM at $6000-$7FFF.
$C000
IRQ Counter Register used to countdown to an IRQ.
$C001
IRQ Latch Register used to store a temporary value to be copied to the
IRQ Counter Register later.
$E000
IRQ Control Register 0 used to disable IRQ generation and copy the IRQ
Latch Register to the IRQ Counter Register.
$E001
IRQ Control Register 1 used to enable IRQ generation.
On cartridges with VROM, the first 8 KB bank is swapped into PPU $0000 on reset.