# Memory Management Controller

Il Memory Management Controller o Multi-Memory Controller (MMC) vengono indicati una serie di differenti chip progettati da diversi sviluppatori di giochi per essere utilizzati nelle cartucce della console Nintendo Entertainment System (NES). Questi chip incrementavano le capacità della console permettendo di creare dei giochi con caratteristiche che non potevano essere offerte dal NES originale.

## Storia

I primi giochi usciti per il NES contenevano infatti solo un chip dati denominato NROM, una ROM (o memoria non volatile) in cui erano immagazzinati sia il codice che la parte grafica del gioco. All'epoca, però, le ROM avevano una capienza limitata (al massimo 256 kbit, ossia 32 kB) e per questo motivo i giochi avevano pochi dettagli. Per ovviare a questo limite col tempo sia Nintendo che altri sviluppatori utilizzarono diverse tecniche per poter immagazzinare più dati di quelli che il NES di serie potesse gestire.
Con l'avvento degli emulatori del NES i software scritti per emulare questi chip divennero noti come "mappatori" (mappers).

## Elenco dei chip MMC utilizzati nelle cartucce del NES
### Chip Nintendo
#### UNROM/UOROM

* Giochi in cui è stato usato: Pro Wrestling, Ikari Warriors, Mega Man, Contra
I primi MMC utilizzati nelle cartucce prodotte da Nintendo furono l'UNROM e l'UOROM, realizzati ricorrendo a chip TTL della serie 7400. Essi dividevano i dati del gioco in banchi da 16 kB, che venivano alternati in modo che un banco fosse sempre visibile alla CPU. Invece che usare un chip ROM dedicato al solo immagazzinamento della grafica (chiamato "CHR" da Nintendo) i giochi che usavano questo MMC immagazzinavano tali dati nella ROM contenente anche il codice programma e li copiavano in una RAM durante l'esecuzione del gioco.

#### MMC1

* Giochi in cui è stato usato: The Legend of Zelda, Metroid ed altri
L'MMC1 fu il primo MMC di tipo ASIC. Esso supportava il salvataggio delle partite e lo scorrimento multidirezionale. Il chip fu realizzato in almeno 5 versioni differenti, che differivano le une dalle altre per lievi differenze: MMC1A, MMC1B1, MMC1B2, MMC1B3 e MMC1C.
L'MMC1 permetteva di alternare diversi banchi di memoria: la ROM del codice programma poteva essere presentata alla CPU in banchi da 16 o 32 kB, mentre la ROM della grafica in banchi da 4 o 8 kB. Una caratteristica particolare di questo chip era che gestiva i dati in input in modalità seriale mediante un registro a scorrimento interno per cui i comandi dovevano essere inviati bit per bit.

#### MMC2

* Giochi in cui è stato usato: Mike Tyson's Punch-Out!!
L'MMC2 fu usato solo nel gioco Mike Tyson's Punch-Out!! e nella successiva versione dove fu tolto Mike Tyson come boss finale. Il mapper poteva selezionare un solo banco da 8 kB della ROM del codice programma (gli altri 24 kB rimanevano bloccati) e la ROM della grafica poteva essere gestita come 2 banchi da 4 kB ciascuno, che venivano alternati in automatico non appena il processore video del NES cercava di accedere a dati memorizzati nel banco inattivo, scaricando così la CPU dal compito di dover gestire il bank switching via software.

#### MMC3

* Giochi in cui è stato usato: Super Mario Bros. 2, Super Mario Bros. 3 ed altri
L'MMC3 fu uno degli MMC di Nintendo più utilizzati. Esso implementava un contatore IRQ sulla linea di scansione del video in modo da rendere più facile eseguire uno scorrimento su una porzione dell'immagine (un esempio è lo scorrimento dello sfondo dello schermo mantenendo una parte dell'immagine ferma, tipo la zona dei punti e degli indicatori di stato del gioco) nonché la possibilità di selezionare 2 banchi da 8 kB di ROM del codice programma e 2 banchi da 2 kB più 4 banchi da 1 kB l'uno di ROM grafica.

#### MMC4

* Giochi in cui è stato usato: Fire Emblem, Fire Emblem Gaiden e Famicom Wars
Questo MMC fu usato solo in 3 giochi, tutti pubblicati solo per il Famicom, la versione giapponese del NES, e tutti sviluppati da Intelligent Systems. L'MMC4 era quasi identico all'MMC2 da cui differiva solo per il fatto che i banchi erano da 16 kB invece che da 8 kB e per la presenza di una memoria SRAM alimentata a batteria per il salvataggio delle partite.

#### MMC5

* Giochi in cui fu usato: Castlevania III: Dracula's Curse, Just Breed, Metal Slader Glory ed altri
L'MMC5 fu non solo il più grande MMC sviluppato da Nintendo ma anche il più costoso, cosa che lo rese poco utilizzato nelle cartucce: tra gli sviluppatori di videogiochi, solo Koei lo usò regolarmente. Il chip aveva 1 kB di RAM aggiuntiva, dei canali audio aggiuntivi (2 onde quadre), il supporto per lo scorrimento verticale di una porzione dell'immagine, capacità grafiche superiori (supportava fino a 16.384 tile diverse contro le 256 permesse dal chip grafico del NES e permetteva di usare tile per lo sfondo di 8×8 pixel ognuna con il proprio colore invece che 1 solo colore per ogni gruppo di 2×2 tile), bank switching delle ROM del codice programma e della grafica personalizzabile, ed un contatore IRQ sulla linea di scansione.

#### MMC6

* Giochi in cui è stato usato: StarTropics, Zoda's Revenge: StarTropics II
Questo MMC è simile all'MMC3, rispetto al quale presenta 1 kB di RAM aggiuntiva dotata di una batteria tampone per salvare le partite.

#### Famicom Disk System

* Giochi in cui è stato usato: Arumana no Kiseki, Ai Senshi Nicol, Bio Miracle Bokutte Upa, Exciting Basket ed altri
L'ASIC del Famicom Disk System's ASIC era un chip che offriva anche la sintesi sonora.

#### AxROM

* Giochi in cui fu usato: Battletoads, Wizards & Warriors, Cobra Triangle, Jeopardy!
Sotto il nome generico di AxROM si inseriscono diversi MMC di Nintendo: AMROM, ANROM AN1ROM e AOROM. Il capostipite fu sviluppato da Chris Stamper della Rare e poi prodotto da Nintendo. Questi MMC si trovano nei giochi sviluppati da Rare, Tradewest, GameTek, Acclaim e Milton Bradley: essi usano banchi di 32 kB della ROM del codice programma ed un CHR RAM. A differenza di altri chip, può eseguire il mirroring dello schermo.

### Chip Konami

Questi chip furono sviluppati per essere utilizzati prevalentemente nelle cartucce commercializzate in Giappone e solo pochi negli ultimi anni di vita del NES furono utilizzati in alcuni giochi venduti all'estero.

#### VRC2

* Giochi in cui è stato usato: Contra (Giappone), I favolosi Tiny (Giappone), Akumajō Special: Boku Dracula-kun
Il VRC2 (Virtual Rom Controller) era un MMC sviluppato da Konami che permetteva di suddividere la ROM del codice programma in banchi da 8 kB e la ROM grafica in banchi da 1 kB nonché di effettuare il mirroring dello schermo. Questo chip fu prodotto in 2 versioni, VRC2a e VRC2b.

#### VCR4

Il VCR4 era quasi identico al VCR2, rispetto al quale aveva un contatore basato su un interrupt ed un selettore a 5 bit per le pagine della memoria del codice programma.

#### VRC6

* Giochi in cui è stato usato: Akumajou Densetsu, Madara, Esper Dream II
Il VRC6 era un MMC evoluto: supportava il bank switching sia della ROM del codice sia di quella della grafica, aveva un contatore IRQ basato sulla linea di scansione ed integrava un generatore sonoro programmabile capace di fornire 3 canali audio supplementari (con 2 onde quadre ed 1 onda a dente di sega). Fu usato nel gioco Akumajou Densetsu, la versione giapponese di Castlevania III: Dracula's Curse la cui versione per i mercati occidentali utilizzava l'MMC5 di Nintendo: a differenza del Famicon, il NES non era in grado di gestire i generatori sonori integrati nelle cartucce per cui la colonna sonora del gioco fu rivista per poter usare solo i canali audio forniti dalla console.

#### VRC7

* Giochi in cui è stato usato: Lagrange Point, Tiny Toon Adventures 2
Il VRC7 fu un MMC molto avanzato: infatti non soltanto supportava l'alternanza dei banchi di memoria ed integrava il contatore IRQ come il VRC6 ma offriva anche un coprocessore audio derivato dallo Yamaha YM2413 che offriva 6 canali con sintesi FM. Le capacità audio del VRC7 furono utilizzate solo nel gioco Lagrange Point: anche la versione giapponese di Tiny Toon Adventures 2 integrava questo MMC ma il gioco non fece uso del chip sonoro aggiuntivo.

### Chip Namco

* Giochi in cui è stato usato: Erika to Satoru no Yumebouken, Final Lap, King of Kings ed altri, tutti commercializzati solo in Giappone.
Il NAMCO106 era un evoluto MMC che offriva 8 canali audio supplementari con sintesi sonora con campionamento a 4 bit e aliasing che cresceva all'aumentare del numero dei canali attivi.

### Chip Sunsoft
#### FME-7

* Giochi in cui è stato usato: Batman: Return of the Joker, Hebereke, Mr. Gimmick ed altri
L'FME-7 era un MMC sviluppato da Sunsoft per i giochi su cartuccia per il NES ed il Famicom. Permetteva di gestire la ROM del programma in banchi da 8 kB e la ROM grafica in banchi da 1 kB; conteneva inoltre la circuiteria per poter generare segnali di IRQ dopo uno specifico numero di cicli di clock della CPU, alleggerendo quest'ultima dai compiti di gestione degli effetti di divisione dello schermo.

#### SUNSOFT 5B

* Giochi in cui è stato usato: Mr. Gimmick
Questo MMC era un'evoluzione dell'FME-7, rispetto al quale conteneva un generatore sonoro capace di 3 onde quadre derivato dall'AY-3-8910 di General Instrument. Fu usato solo nel gioco Mr. Gimmick per Famicom.

### Chip non riconosciuti da Nintendo

Alcuni produttori di giochi per il NES che operavano senza licenza Nintendo produssero degli MMC personalizzati che, generalmente, espandevano solo la quantità di memoria gestibile dalla console.
Fra questi, si annovera il 228 di Active Enterprises, un chip che gestiva solo il bank switching, usato nei giochi Action 52 e Cheetahmen II. La versione montata su Action 52 conteneva un registro a 16 bit che memorizzava la voce selezionata nel menu all'uscita del gioco.