MMC1 pinout: Difference between revisions

From NESdev Wiki
Jump to navigationJump to search
No edit summary
(it's more correct to say that SEROM &c simply don't support banking, revise accordingly. Additionally, revise to be presented more like other ASIC pinouts on this wiki)
Line 3: Line 3:
Comes in several varieties: 'MMC1', 'MMC1A', and 'MMC1B2'                                   
Comes in several varieties: 'MMC1', 'MMC1A', and 'MMC1B2'                                   
                 .--\/--.
                 .--\/--.
   PRG A14 (r) <- |01  24| - +5V
   PRG A14 (r) <- |01  24| -- +5V
   PRG A15 (r) <- |02  23| <- M2 (n)
   PRG A15 (r) <- |02  23| <- M2 (n)
   PRG A16 (r) <- |03  22| <- CPU A13 (s)
   PRG A16 (r) <- |03  22| <- CPU A13 (nr)
   PRG A17 (r) <- |04  21| <- CPU A14 (n)
   PRG A17 (r) <- |04  21| <- CPU A14 (n)
   PRG /CE (r) <- |05  20| <- /ROMSEL (n)
   PRG /CE (r) <- |05  20| <- /ROMSEL (n)
  WRAM CE (w) <- |06  19| <- CPU D7 (s)
WRAM +CE (w) <- |06  19| <- CPU D7 (nrw)
   CHR A12 (r) <- |07  18| <- CPU D0 (s)
   CHR A12 (r) <- |07  18| <- CPU D0 (nrw)
   CHR A13 (r) <- |08  17| <- CPU R/W  
   CHR A13 (r) <- |08  17| <- CPU R/W (nw)
   CHR A14 (r) <- |09  16| -> CIRAM A10 (n)
   CHR A14 (r) <- |09  16| -> CIRAM A10 (n)
   CHR A15 (r) <- |10  15| <- PPU A12 (n)
   CHR A15 (r) <- |10  15| <- PPU A12 (n)
   CHR A16 (r) <- |11  14| <- PPU A11 (s)
   CHR A16 (r) <- |11  14| <- PPU A11 (nr)
           GND - |12  13| <- PPU A10 (s)
           GND -- |12  13| <- PPU A10 (nr)
                 `------'
                 `------'
   
   
  (r) - this pin connects to the ROM chips only
  (r) - this pin connects to the ROM chips
  (n) - this pin connects to the NES connector only
  (n) - this pin connects to the NES connector
(s) - this pin is shared with the NES connector and ROM chips
  (w) - this pin connects to the WRAM
  (w) - this pin connects to the WRAM only
As with many other ASIC mappers, parts of the pinout are often repurposed:
As with many other ASIC mappers, parts of the pinout are often repurposed:


SEROM, SHROM, SH1ROM: only supports 32kiB at a time banking
SEROM, SHROM, SH1ROM: doesn't support PRG banking
                 .--\/--.
                 .--\/--.
           '''n/c''' <- |01  24| - +5V
           '''n/c''' <- |01  24| -- +5V
  PRG A15 (r) <- |02  23| <- M2 (n)
          '''n/c''' <- |02  23| <- M2 (n)
          '''n/c''' <- |03  22| <- CPU A13 (nr)
          '''n/c''' <- |04  21| <- CPU A14 (n)
   
   
         '''CPU A14 (n) -> PRG A14 (r)'''
         '''CPU A14 (n) -> PRG A14 (r)'''


SNROM: uses CHR A13-A16 as a PRG-RAM disable
SNROM: uses CHR A13-A16 as a PRG-RAM disable
           '''n/c''' <- |08  17| <- CPU R/W  
           '''n/c''' <- |08  17| <- CPU R/W (nw)
           '''n/c''' <- |09  16| -> CIRAM A10 (n)
           '''n/c''' <- |09  16| -> CIRAM A10 (n)
           '''n/c''' <- |10  15| <- PPU A12 (n)
           '''n/c''' <- |10  15| <- PPU A12 (n)
   '''WRAM /CE (w)''' <- |11  14| <- PPU A11 (s)
   '''WRAM /CE (w)''' <- |11  14| <- PPU A11 (nr)
           GND - |12  13| <- PPU A10 (s)
           GND -- |12  13| <- PPU A10 (nr)
                   `------'
                   `------'


SOROM: uses CHR A13-A16 as PRG-RAM banking
SOROM: uses CHR A13-A16 as PRG-RAM banking
           '''n/c''' <- |08  17| <- CPU R/W  
           '''n/c''' <- |08  17| <- CPU R/W (nw)
           '''n/c''' <- |09  16| -> CIRAM A10 (n)
           '''n/c''' <- |09  16| -> CIRAM A10 (n)
   '''WRAM A13 (w)''' <- |10  15| <- PPU A12 (n)
   '''WRAM A13 (w)''' <- |10  15| <- PPU A12 (n)
           '''n/c''' <- |11  14| <- PPU A11 (s)
           '''n/c''' <- |11  14| <- PPU A11 (nr)
           GND - |12  13| <- PPU A10 (s)
           GND -- |12  13| <- PPU A10 (nr)
                   `------'
                   `------'
SOROM is actually implemented using the WRAMs' /CE inputs and an inverter to select only one RAM at a time.
SOROM is actually implemented using the WRAMs' /CE inputs and an inverter to select only one RAM at a time.


SUROM: uses CHR A13-A16 as PRG-ROM banking
SUROM: uses CHR A13-A16 as PRG-ROM banking
           '''n/c''' <- |08  17| <- CPU R/W  
           '''n/c''' <- |08  17| <- CPU R/W (nw)
           '''n/c''' <- |09  16| -> CIRAM A10 (n)
           '''n/c''' <- |09  16| -> CIRAM A10 (n)
           '''n/c''' <- |10  15| <- PPU A12 (n)
           '''n/c''' <- |10  15| <- PPU A12 (n)
   '''PRG A18 (r)''' <- |11  14| <- PPU A11 (s)
   '''PRG A18 (r)''' <- |11  14| <- PPU A11 (nr)
           GND - |12  13| <- PPU A10 (s)
           GND -- |12  13| <- PPU A10 (nr)
                   `------'
                   `------'


SXROM: uses CHR A13-A16 as PRG-ROM and PRG-RAM banking
SXROM: uses CHR A13-A16 as PRG-ROM and PRG-RAM banking
           '''n/c''' <- |08  17| <- CPU R/W  
           '''n/c''' <- |08  17| <- CPU R/W (nw)
   '''WRAM A13 (w)''' <- |09  16| -> CIRAM A10 (n)
   '''WRAM A13 (w)''' <- |09  16| -> CIRAM A10 (n)
   '''WRAM A14 (w)''' <- |10  15| <- PPU A12 (n)
   '''WRAM A14 (w)''' <- |10  15| <- PPU A12 (n)
   '''PRG A18 (r)''' <- |11  14| <- PPU A11 (s)
   '''PRG A18 (r)''' <- |11  14| <- PPU A11 (nr)
           GND - |12  13| <- PPU A10 (s)
           GND -- |12  13| <- PPU A10 (nr)
                   `------'
                   `------'


[[NES-EVENT|EVENT]]: uses CHR A13-A16 as more complicated PRG-ROM banking and timer control
[[NES-EVENT|EVENT]]: uses CHR A13-A16 as more complicated PRG-ROM banking and timer control
     '''PRG2 A15''' <- |08  17| <- CPU R/W  
     '''PRG2 A15''' <- |08  17| <- CPU R/W (nw)
     '''PRG2 A16''' <- |09  16| -> CIRAM A10 (n)
     '''PRG2 A16''' <- |09  16| -> CIRAM A10 (n)
       '''PRG SEL''' <- |10  15| <- PPU A12 (n)
       '''PRG SEL''' <- |10  15| <- PPU A12 (n)
   '''TIMER RESET''' <- |11  14| <- PPU A11 (s)
   '''TIMER RESET''' <- |11  14| <- PPU A11 (nr)
           GND - |12  13| <- PPU A10 (s)
           GND -- |12  13| <- PPU A10 (nr)
                 `------'
                 `------'



Revision as of 07:03, 24 September 2015

MMC1: 24 pin shrink-DIP (canonically mappers 1 and 155)

Comes in several varieties: 'MMC1', 'MMC1A', and 'MMC1B2'

                .--\/--.
 PRG A14 (r) <- |01  24| -- +5V
 PRG A15 (r) <- |02  23| <- M2 (n)
 PRG A16 (r) <- |03  22| <- CPU A13 (nr)
 PRG A17 (r) <- |04  21| <- CPU A14 (n)
 PRG /CE (r) <- |05  20| <- /ROMSEL (n)
WRAM +CE (w) <- |06  19| <- CPU D7 (nrw)
 CHR A12 (r) <- |07  18| <- CPU D0 (nrw)
 CHR A13 (r) <- |08  17| <- CPU R/W (nw)
 CHR A14 (r) <- |09  16| -> CIRAM A10 (n)
 CHR A15 (r) <- |10  15| <- PPU A12 (n)
 CHR A16 (r) <- |11  14| <- PPU A11 (nr)
         GND -- |12  13| <- PPU A10 (nr)
                `------'

(r) - this pin connects to the ROM chips
(n) - this pin connects to the NES connector
(w) - this pin connects to the WRAM

As with many other ASIC mappers, parts of the pinout are often repurposed:

SEROM, SHROM, SH1ROM: doesn't support PRG banking

                .--\/--.
         n/c <- |01  24| -- +5V
         n/c <- |02  23| <- M2 (n)
         n/c <- |03  22| <- CPU A13 (nr)
         n/c <- |04  21| <- CPU A14 (n)

       CPU A14 (n) -> PRG A14 (r)

SNROM: uses CHR A13-A16 as a PRG-RAM disable

          n/c <- |08  17| <- CPU R/W (nw)
          n/c <- |09  16| -> CIRAM A10 (n)
          n/c <- |10  15| <- PPU A12 (n)
 WRAM /CE (w) <- |11  14| <- PPU A11 (nr)
          GND -- |12  13| <- PPU A10 (nr)
                 `------'

SOROM: uses CHR A13-A16 as PRG-RAM banking

          n/c <- |08  17| <- CPU R/W (nw)
          n/c <- |09  16| -> CIRAM A10 (n)
 WRAM A13 (w) <- |10  15| <- PPU A12 (n)
          n/c <- |11  14| <- PPU A11 (nr)
          GND -- |12  13| <- PPU A10 (nr)
                 `------'

SOROM is actually implemented using the WRAMs' /CE inputs and an inverter to select only one RAM at a time.

SUROM: uses CHR A13-A16 as PRG-ROM banking

          n/c <- |08  17| <- CPU R/W (nw)
          n/c <- |09  16| -> CIRAM A10 (n)
          n/c <- |10  15| <- PPU A12 (n)
  PRG A18 (r) <- |11  14| <- PPU A11 (nr)
          GND -- |12  13| <- PPU A10 (nr)
                 `------'

SXROM: uses CHR A13-A16 as PRG-ROM and PRG-RAM banking

          n/c <- |08  17| <- CPU R/W (nw)
 WRAM A13 (w) <- |09  16| -> CIRAM A10 (n)
 WRAM A14 (w) <- |10  15| <- PPU A12 (n)
  PRG A18 (r) <- |11  14| <- PPU A11 (nr)
          GND -- |12  13| <- PPU A10 (nr)
                 `------'

EVENT: uses CHR A13-A16 as more complicated PRG-ROM banking and timer control

    PRG2 A15 <- |08  17| <- CPU R/W (nw)
    PRG2 A16 <- |09  16| -> CIRAM A10 (n)
     PRG SEL <- |10  15| <- PPU A12 (n)
 TIMER RESET <- |11  14| <- PPU A11 (nr)
         GND -- |12  13| <- PPU A10 (nr)
                `------'

Since the PPU A12 input's only purpose is to switch the CHR A12 .. A16 outputs, it's not clear why Nintendo didn't tie the MMC1's PPU A12 input low and connect CHR A12 directly to PPU A12. Doing so would have cost nothing (the ability to swap the two nametables is already granted through PPUCTRL), would have prevented mistakes (unless the same value is in both CHR registers, 4KB mode causes erratic switching of bank during rendering), and would have freed up another bit of control.