Here is the gist of how it works:
Code: Select all
Info for "Teletubbies / Y2K" 420-in-1 pirate multicart. 2nd draft (01/23/2010) BootGod Thanks to Nessie author, Martin, for testing and emulating! This cart has been assigned as iNES #237 (seems to be free) and for UNIF, BMC-TELETUBBIES (someone feel free to come up with a better one!) This cart is a typical handful of NROM/CNROM/UNROM games with each game appearing multiple times. Each menu item has a 3-digit code after the game name, I'm guessing this is some kind of config data for loading the game. The menu doesn't always load the game you'd expect, for example, selecting "Home Alone" ends up loading "Brush Roller". PRG appears to be 1MB (8Mbit) in size, logically arranged as 2 512KB ROMs. Cart also contains an 8K VRAM chip in DIP form. All ROM and MMC logic is contained in a single epoxy blob. All known mapper logic came from toying around in BankWatch and MicroBug. As such, mapper info may be incomplete. The PCB is ID-less and uninteresting, just a single epoxy blob and a VRAM in DIP form. It's a 60-pin Famicom PCB, but the cart it was found in was a recycled 5-screw NES cart with an official 60 -> 72 pin converter (NES-JOINT-01) and a poor quality printed label. The menu system used by this cart seems to be configurable as 4 different types: 0: 42-in-1 1: 5,000-in-1 2: 420-in-1 3: 10,000,000-in-1 (lol) So it may be possible other carts out there use this mapper as well. Although the way the menu is chosen is weird and may not work under the same iNES number (see line A0 function). Register area is $8000 - $FFFF, no bus conflicts MMC uses A0-A2 and D0-D7 lines. Reset button goes back to initial loading screen, rather than title screen of last game. Address line functions: Function of line A0 is weird, when A0 is high, the PRG address space goes into a funny state. In this cart, it has the effect of forcing PRG A1 line high (e.g. address is OR'd by $02). The menu init routine uses this to determine which menu type to use by reading a byte from a specific location and using the value that shows up. If other carts that use this menu exist, the behaviour of A0 must be different. This must be emulated to make menu use the correct mode. Setting A1 high will lock the MMC into its current mode until the system is reset. When locked the MMC will only operate on the current 128KB segment (e.g. only bits D0-D2 still function). A2 controls which 512K ROM or segment is active. So when A2 is low, the lower 512K is accessible and vice-versa. Data line functions: The MMC has 4 mapping modes which operate on 128K segments of ROM. D6 and D7 control the current mapping mode. This affects how D0-D2 operate. D7 D6 ----- 0 0 : "UNROM" mode. D0-D2 select 16K to appear at $8000. $C000 is fixed the last bank of current 128K segment. 0 1 : "CNROM??" mode. This works the same as UNROM mode, except only "even" banks can be selected (e.g. line D0 doesn't operate). $C000 is still fixed to last bank of segment. 1 0 : "16K NROM" mode. D0-D2 select 16K at $8000 and is mirrored to $C000 as well. 1 1 : "32K NROM" mode. D1-D2 select 32K at $8000. D0 has no effect in this mode. D5 controls mirroring. Unset = horizontal, set = vertical D4-D3 control which 128K segment of the current 512K is active. D2-D0 control banking of the current 128K segment as described before.
The ROM will probably show up over at Lost Levels sooner or later.