This page is a mirror of Tepples' nesdev forum mirror (URL TBD).
Last updated on Oct-18-2019 Download

The different mappers

The different mappers
by on (#153117)
Is there a list that describes the differences of the most common mappers in an understandable way?

Something like this:
http://wiki.nesdev.com/w/index.php/INES_Mapper_021
is much too technical for me.

I'd like to know very generally: What specific things can the mappers accomplish?
(Only the most common mappers. I don't need to know about the very rare ones.)
Re: The different mappers
by on (#153123)
Basic information that I think explains a lot of what a mapper is here

http://wiki.nesdev.com/w/index.php/Mapper

If you mean a list of what mapper does what in order of feature, then yeah - that could be a nice addition to the wiki. Might be a bit hard to pull off.

If I were to explain mappers in the simplest possible way : mappers main function is to swap memory blocks in ROM area and/or CHR area from a larger memory source.
Re: The different mappers
by on (#153126)
Mappers perform bank switching of PRG and CHR memory, and a few also provide programmable interval timers to make raster effects more practical.

What is needed in addition to Comparison of Nintendo mappers?
Re: The different mappers
by on (#153134)
tepples wrote:
What is needed in addition to Comparison of Nintendo mappers?

Just some general explanation like in: "If you want to do this, mapper 3 is best for your game. If you want to do that, better use mapper 4."
Re: The different mappers
by on (#153135)
DRW wrote:
Just some general explanation like in: "If you want to do this, mapper 3 is best for your game. If you want to do that, better use mapper 4."



"If you want to have switchable graphics banks in 8k chunks, mapper 3 (CNROM) is best for your game.
If you want to make a large game with >32k of code and CHR RAM, better use mapper 2 (UxROM)."

Now that is a subject of debate for sure :P
Well, it will depend on how your game will make use of it I guess. There are a few things to consider when discussing mappers, such as CHR RAM or ROM and WRAM for example. I think the Comparison of Nintendo mappers page works pretty well as it covers a great deal of what some typical mappers does.

Edit: typo
Re: The different mappers
by on (#153141)
Well, there's also the mapper wizard. I find the mapper comparison page much better, though.
Re: The different mappers
by on (#153155)
There are so many mappers that provide extremely similar feature sets...

I've done my best to summarize all of the mappers described on the wiki on my own summary page.

It doesn't explain any "why"s, but it does enumerate what differences exist.
Re: The different mappers
by on (#153157)
For another perspective, you might look at some stats on mapper usage: http://bootgod.dyndns.org:7777/stats.php?page=6

The top 6 most popular during the commercial era were (in order): MMC1, MMC3, UNROM, NROM, CNROM, AxROM

It's a little bit of an indirect indication of how "useful" each of these mappers was, just by how often it was chosen. Of course, there are plenty of more obscure mappers that are just as functional, or maybe better suited to your needs, but looking at these 6 might be a good start. Aside from MMC1 and MMC3, the other four are all relatively easy/cheap to build from standard logic components too.
Re: The different mappers
by on (#153165)
rainwarrior wrote:
The top 6 most popular during the commercial era were (in order): MMC1, MMC3, UNROM, NROM, CNROM, AxROM

I never realized how popular the MMC1 was, I always assumed MMC3 was #1. I honestly don't see much reason to use the MMC1 nowadays, considering how little it offers and how weird/annoying it is to use. If you have to go through the trouble of reimplementing an ASIC mapper in hardware, the MMC3 is a much more interesting option.
Re: The different mappers
by on (#153178)
tokumaru wrote:
I never realized how popular the MMC1 was, I always assumed MMC3 was #1.

MMC3 also took a while to come out.

Quote:
I honestly don't see much reason to use the MMC1 nowadays, considering how little it offers and how weird/annoying it is to use. If you have to go through the trouble of reimplementing an ASIC mapper in hardware, the MMC3 is a much more interesting option.

My understanding is that MMC3 needs two 72-cell CPLDs, while MMC1 fits in one 36-cell, and MMC1 supports large PRG RAM if your design requires that (SXROM used in PR8).
Re: The different mappers
by on (#153187)
rainwarrior wrote:
For another perspective, you might look at some stats on mapper usage: http://bootgod.dyndns.org:7777/stats.php?page=6

The top 6 most popular during the commercial era were (in order): MMC1, MMC3, UNROM, NROM, CNROM, AxROM

Also, Mapper 206 is close enough to MMC3 that the mapper numbers used to be merged.
Re: The different mappers
by on (#153191)
Dwedit wrote:
Mapper 206 is close enough to MMC3 that the mapper numbers used to be merged.

And they were unmerged when the community realized that bits 7 and 6 of $8000, and all of $A000-$FFFF, differ between the two.

EDIT: I saw "used" and read "need".
Re: The different mappers
by on (#153193)
I had to read dwedit's post twice to catch it, but that's why he said used to.
Re: The different mappers
by on (#153199)
MMC1 isn't the most straightforward to use, but it offers PRG banking, CHR banking, PRG RAM, and H/V software controlled mirroring, which is a pretty good feature set.

I think AxROM, when you account for bus conflicts, having to align your bankswitching code between banks, and how mirroring is in the same register as PRG bankswitch, is at least as inconvenient to program as MMC1.

A quick rundown of features of the "top 6":
  • MMC1 - PRG banking, CHR banking, PRG RAM, H/V software controlled mirroring.
  • MMC3 - tons of features (if you can never have enough, there's always MMC5)
  • UxROM - PRG banking, CHR RAM, fixed mirroring.
  • CNROM - CHR banking, fixed mirroring
  • NROM - fixed mirroing
  • AxROM - PRG banking, CHR RAM, single screen mirroring (BNROM is similar but with H/V fixed mirroring)

Any of these could have PRG RAM or CHR RAM with some additions, but only MMC1 and MMC3 had a provision for it on their boards, AFAIK. CHR RAM is a pretty good substitute for CHR banking, which is why UxROM/AxROM are still very versatile.

If you need fancy timing effects like parallax scrolling, MMC3 is a good target because it has an IRQ timer feature. If you're very clever you can do without (see: Battletoads on AxROM).
Re: The different mappers
by on (#153200)
MMC1 also does 4 screen mirroring, which MMC3 doesn't. It also has the largest variety of configurations through the American releases, including SRAM+CHR-RAM which was never used with MMC3 here.
Re: The different mappers
by on (#153201)
(You meant 1-screen, not 4-screen)
Re: The different mappers
by on (#153206)
rainwarrior wrote:
MMC1 isn't the most straightforward to use

For me it's the serial interface that kills it.

Quote:
MMC1 - PRG banking, CHR banking, PRG RAM, H/V software controlled mirroring.

The CHR banking is not particularly useful though, since the smallest bank size is 4KB. You can mix and match background tile sets and sprite sets, but doing animations (one of the biggest advantages of CHR-ROM) would result in a monumental amount of repeated tiles. CHR-RAM is way more versatile than this.

FrankWDoom wrote:
MMC1 also does 4 screen mirroring, which MMC3 doesn't.

Every mapper can do 4-screen mirroring, you just have to put the memory in the cartridge and bypass the mapper mirroring. Also, if the MMC3 is connected differently, you can halve the amount of accessible CHR-ROM (to the same 128KB of the MMC1) and have complete control over mirroring (horizontal, vertical, diagonal, 1-screen...).
Re: The different mappers
by on (#153210)
tokumaru wrote:
Every mapper can do 4-screen mirroring

This is sort of true. The iNES format lets you specify 4-screen mirroring in the header, which should in theory allow 4-screen mirroring with most mappers. In practice, though I think emulator support for that is a bit spotty (mostly because very few games used it). YMMV; depends where you want your game to be run.
Re: The different mappers
by on (#153245)
Bootgod's page lists 3 games as having 4-screen mirroring. Gauntlet (mapper 206), Rad Racter II (MMC3), and Napoleon Senki (mapper 77)
Re: The different mappers
by on (#153249)
lidnariq wrote:
(You meant 1-screen, not 4-screen)


I did mean 1 screen, thanks
Re: The different mappers
by on (#153251)
FrankWDoom wrote:
I did mean 1 screen, thanks

OK, but the MMC3 can also do 1-screen mirroring if you wire it as in mapper 118.
Re: The different mappers
by on (#153252)
The MMC-1 can bankswitch in 32KB chunks if for some reason you wanted or needed that. MMC-3 cannot.

I think the MMC1 is a reasonable setup but like tokumaru said the serial interface is annoying. However you could make a MMC-1 variant that actually eliminates the serial interface so that only 1 write is needed per register which would make it so much easier and faster to work with. It would actually be faster than MMC-3 which requires more effort than a single write as well.
Re: The different mappers
by on (#153255)
MottZilla wrote:
you could make a MMC-1 variant that actually eliminates the serial interface so that only 1 write is needed per register

Yeah, but you're asking to implement a whole new mapper just to save like 10 lines of uncomplicated code? Sure, the serial interface is an unpleasant compromise with the hardware makers of the time, but it does the job just fine in hundreds of games, and it's already supported by every NES emulator.
Re: The different mappers
by on (#153262)
If decompressing data in one bank relies on a lookup table in another bank, that's a lot more practical in UNROM than in MMC1 unless you can A. somehow fit a copy of the lookup table in RAM, or B. store the half-decompressed data in RAM, switch, and make a second pass over that data. An example is an e-book reader where the list of unique words is in one bank and the actual text is stored as word numbers in another.
Re: The different mappers
by on (#153276)
For the most part, games usually only use one memory layout (i.e. they usually don't switch from UNROM-like banking to BNROM-like banking, or from MMC1/VRC1 CHR banking to CNROM-like banking)

(Exception: Because of MMC3's non-uniform CHR banking, games may well swap between "more banks for sprites" and "more banks for background")

MMC1 basically provides three independent features:
* PRG banking: UNROM or BNROM or m180
* PRG RAM decoding and protection
* Choice of
*- CHR banking: Sunsoft1=VRC1=NINA-001/CNROM or
*- PRG RAM banking: window of 8 KiB, up to 32 KiB total

All of these feature exists on multiple other boards, although not all in all combinations.
Re: The different mappers
by on (#153292)
tepples wrote:
If decompressing data in one bank relies on a lookup table in another bank, that's a lot more practical in UNROM than in MMC1 unless you can A. somehow fit a copy of the lookup table in RAM, or B. store the half-decompressed data in RAM, switch, and make a second pass over that data. An example is an e-book reader where the list of unique words is in one bank and the actual text is stored as word numbers in another.
Another possibility in this case is if the compressed data is in CHR ROM but the lookup table is in PRG ROM; however this has its own disadvantages such as cannot be used during rendering, and cannot be used as easily if it doesn't do both PRG and CHR bankswitching. However, it has the advantages that it can be used even if the mapper does not bank multiple PRG ROM banks in at once, and that address increment is automatically done for you. This seems simple enough with MMC1 (hopefully). But it might not be what you require.