Comprehensive NES Mapper Document v0.80 by \Firebug\ (emulation@biosys.net) Best viewed under DOS EDIT Information provided by FanWen, Y0SHi, D, and Jim Geffre Free for non-commercial use This document is dedicated to Vertigo 2099, the greatest ROM releasing group on the net, of which I am a proud member. And Jim Geffre, the author of PCNES and GBE. Thanks for all the help. **************************************************************************** Why did I write this? There just isn't any other good and widely available documentation on the "extended" mappers (16 and above). FanWen's documents (on which the extended mapper section is largely based) are an excellent source of information, but I discovered several errors in them, and more importantly, they are quite hard to obtain. Goroh's documents, released more recently, are easier to get and fairly accurate, but the Japanese and broken English text can make reading through them an ordeal. I also wanted to combine the several documents I had on MMC1 into one comprehensive source. Any mapper information not given here is appreciated. I cannot guarantee that all this information is 100% accurate. What I can guarantee is that I have put in the maximum possible amount of effort to get this document as accurate as possible. If you notice a mistake, please tell me about it, and I'll give you credit for the fix. I hope it doesn't take me a year to update it again... **************************************************************************** +---------+ ¦ History ¦ +---------+ 0.80 Numerous small mistakes have been fixed. A comment was added regarding mapper #21 and the ambiguities in the .NES format. Mapper numbers are listed for the exotic mappers, although these may change with the standardization of the format. Many new mapper descriptions added. 0.70 First public release 0.68 Sunsoft mapper 4 (AfterBurner ][) added 0.67 Combined mapper #21 with the other VRC4 type 0.65 Added sections on Sunsoft FME-7 and VRC4 type B mappers 0.61 Corrected serious errors in mapper #21 section Added some preliminary MMC5 information 0.60 Initial release **************************************************************************** +----------------+ ¦ Mapper 1: MMC1 ¦ +----------------+ +--------------------------------------------------------------------+ ¦ This mapper is used on numerous U.S. and Japanese games, including ¦ ¦ Legend of Zelda, Metroid, Rad Racer, MegaMan 2, and many others. ¦ +--------------------------------------------------------------------+ +---------------+ +--------------------------------------------------------+ ¦ $8000 - $9FFF +-¦ RxxCFHPM ¦ ¦ (Register 0) ¦ ¦ ¦ ¦¦¦¦¦ ¦ +---------------+ ¦ ¦ ¦¦¦¦+--- Mirroring Flag ¦ ¦ ¦ ¦¦¦¦ 0 = Horizontal ¦ ¦ ¦ ¦¦¦¦ 1 = Vertical ¦ ¦ ¦ ¦¦¦¦ ¦ ¦ ¦ ¦¦¦+---- One-Screen Mirroring ¦ ¦ ¦ ¦¦¦ 0 = All pages mirrored from PPU $2000 ¦ ¦ ¦ ¦¦¦ 1 = Regular mirroring ¦ ¦ ¦ ¦¦¦ ¦ ¦ ¦ ¦¦+----- PRG Switching Area ¦ ¦ ¦ ¦¦ 0 = Swap ROM bank at $C000 ¦ ¦ ¦ ¦¦ 1 = Swap ROM bank at $8000 ¦ ¦ ¦ ¦¦ ¦ ¦ ¦ ¦+------ PRG Switching Size ¦ ¦ ¦ ¦ 0 = Swap 32K of ROM at $8000 ¦ ¦ ¦ ¦ 1 = Swap 16K of ROM based on bit 2 ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------- ¦ ¦ ¦ VROM Switching Size ¦ ¦ ¦ 0 = Swap 8K of VROM at PPU $0000 ¦ ¦ ¦ 1 = Swap 4K of VROM at PPU $0000 and $1000¦ ¦ ¦ <1024K carts> ¦ ¦ ¦ 0 = Ignore 256K selection register 0 ¦ ¦ ¦ 1 = Acknowledge 256K selection register 1 ¦ ¦ ¦ ¦ ¦ +---------- Reset Port ¦ ¦ 0 = Do nothing ¦ ¦ 1 = Reset register 0 ¦ +--------------------------------------------------------+ +---------------+ +--------------------------------------------------------+ ¦ $A000 - $BFFF +-¦ RxxPCCCC ¦ ¦ (Register 1) ¦ ¦ ¦ ¦¦ ¦ ¦ +---------------+ ¦ ¦ ¦+------- Select VROM bank at $0000 ¦ ¦ ¦ ¦ If bit 4 of register 0 is off, then switch¦ ¦ ¦ ¦ a full 8K bank. Otherwise, switch 4K only.¦ ¦ ¦ ¦ ¦ ¦ ¦ +-------- 256K ROM Selection Register 0 ¦ ¦ ¦ <512K carts> ¦ ¦ ¦ 0 = Swap banks from first 256K of PRG ¦ ¦ ¦ 1 = Swap banks from second 256K of PRG ¦ ¦ ¦ <1024K carts with bit 4 of register 0 off>¦ ¦ ¦ 0 = Swap banks from first 256K of PRG ¦ ¦ ¦ 1 = Swap banks from third 256K of PRG ¦ ¦ ¦ <1024K carts with bit 4 of register 0 on> ¦ ¦ ¦ Low bit of 256K PRG bank selection ¦ ¦ ¦ ¦ ¦ +----------- Reset Port ¦ ¦ 0 = Do nothing ¦ ¦ 1 = Reset register 1 ¦ +--------------------------------------------------------+ +---------------+ +--------------------------------------------------------+ ¦ $C000 - $DFFF +-¦ RxxPCCCC ¦ ¦ (Register 2) ¦ ¦ ¦ ¦¦ ¦ ¦ +---------------+ ¦ ¦ ¦+----- Select VROM bank at $1000 ¦ ¦ ¦ ¦ If bit 4 of register 0 is on, then switch ¦ ¦ ¦ ¦ a 4K bank at $1000. Otherwise ignore it. ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------ 256K ROM Selection Register 1 ¦ ¦ ¦ <1024K carts with bit 4 of register 0 off> ¦ ¦ ¦ Store but ignore this bit (base 256K ¦ ¦ ¦ selection on 256K selection register 0) ¦ ¦ ¦ <1024K carts with bit 4 of register 0 on> ¦ ¦ ¦ High bit of 256K PRG bank selection ¦ ¦ ¦ ¦ ¦ +--------- Reset Port ¦ ¦ 0 = Do nothing ¦ ¦ 1 = Reset register 2 ¦ +--------------------------------------------------------+ +---------------+ +--------------------------------------------------------+ ¦ $E000 - $FFFF +-¦ RxxxCCCC ¦ ¦ (Register 3) ¦ ¦ ¦ ¦ ¦ ¦ +---------------+ ¦ ¦ +------ Select ROM bank ¦ ¦ ¦ Size is determined by bit 3 of register 0 ¦ ¦ ¦ If it's a 32K bank, it will be swapped at ¦ ¦ ¦ $8000. (NOTE: In this case, the value ¦ ¦ ¦ written should be shifted right 1 bit to ¦ ¦ ¦ get the actual value.) If it's a 16K bank, ¦ ¦ ¦ it will be selected at $8000 or $C000 based¦ ¦ ¦ on the value in bit 2 of register 0. ¦ ¦ ¦ Don't forget to also account for the 256K ¦ ¦ ¦ block swapping if the PRG size is 512K or ¦ ¦ ¦ more. ¦ ¦ ¦ ¦ ¦ +---------- Reset Port ¦ ¦ 0 = Do nothing ¦ ¦ 1 = Reset register 3 ¦ +--------------------------------------------------------+ Notes: - When the cart is first started, the first 16K ROM bank in the cart is loaded into $8000, and the LAST 16K bank into $C000. Normally, the first 16K bank is swapped via register 3 and the last bank remains "hard-wired". However, bit 2 of register 0 can change this. If it's clear, then the first 16K bank is "hard-wired" to bank zero, and the last bank is swapped via register 3. Bit 3 of register 0 will override either of these states, and allow the whole 32K to be swapped. - MMC1 ports are only one bit. Therefore, a value will be written into these registers one bit at a time. Values aren't used until the entire 5-bit array is filled. This buffering can be reset by writing bit 7 of the register. Note that MMC1 only has one 5-bit array for this data, not a separate one for each register. **************************************************************************** +-----------------+ ¦ Mapper 2: UNROM ¦ +-----------------+ +--------------------------------------------------------------------+ ¦ This mapper is used on many older U.S. and Japanese games, such as ¦ ¦ Castlevania, MegaMan, Ghosts & Goblins, and Amagon. ¦ +--------------------------------------------------------------------+ +---------------+ +------------------------------------------+ ¦ $8000 - $FFFF +---------¦ PPPPPPPP ¦ +---------------+ ¦ +------+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------- Select 16K ROM bank at $8000 ¦ +------------------------------------------+ Notes: - When the cart is first started, the first 16K ROM bank in the cart is loaded into $8000, and the LAST 16K ROM bank is loaded into $C000. This last 16K bank is permanently "hard-wired" to $C000, and it cannot be swapped. - This mapper has no provisions for VROM; therefore, all carts using it have 8K of VRAM at PPU $0000. - Most carts with this mapper are 128K. A few, mostly Japanese carts, such as Final Fantasy 2 and Dragon Quest 3, are 256K. - Overall, this is one of the easiest mappers to implement in a NES emulator. **************************************************************************** +-----------------+ ¦ Mapper 3: CNROM ¦ +-----------------+ +--------------------------------------------------------------------+ ¦ This mapper is used on many older U.S. and Japanese games, such as ¦ ¦ Solomon's Key, Gradius, and Hudson's Adventure Island. ¦ +--------------------------------------------------------------------+ +---------------+ +----------------------------------------------+ ¦ $8000 - $FFFF +---¦ CCCCCCCC ¦ +---------------+ ¦ +------+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------- Select 8K VROM bank at PPU $0000 ¦ +----------------------------------------------+ Notes: - The ROM size is either 16K or 32K and is not switchable. It is loaded in the same manner as a NROM game; in other words, it's loaded at $8000 if it's a 32K ROM size, and at $C000 if it's a 16K ROM size. (This is because a 6502 CPU requires several vectors to be at $FFFA - $FFFF, and therefore ROM needs to be there at all times.) - The first 8K VROM bank is swapped into PPU $0000 when the cart is reset. - This is probably the simplest memory mapper and can easily be incorporated into a NES emulator. **************************************************************************** +----------------+ ¦ Mapper 4: MMC3 ¦ +----------------+ +--------------------------------------------------------------------+ ¦ A great majority of newer NES games (early 90's) use this mapper, ¦ ¦ both U.S. and Japanese. Among the better-known MMC3 titles are ¦ ¦ Super Mario Bros. 2 and 3, MegaMan 3, 4, 5, and 6, and Crystalis. ¦ +--------------------------------------------------------------------+ +-------+ +------------------------------------------------------+ ¦ $8000 +---¦ CPxxxNNN ¦ +-------+ ¦ ¦¦ +-+ ¦ ¦ ¦¦ +--- Command Number ¦ ¦ ¦¦ 0 - Select 2 1K VROM pages at PPU $0000 ¦ ¦ ¦¦ 1 - Select 2 1K VROM pages at PPU $0800 ¦ ¦ ¦¦ 2 - Select 1K VROM page at PPU $1000 ¦ ¦ ¦¦ 3 - Select 1K VROM page at PPU $1400 ¦ ¦ ¦¦ 4 - Select 1K VROM page at PPU $1800 ¦ ¦ ¦¦ 5 - Select 1K VROM page at PPU $1C00 ¦ ¦ ¦¦ 6 - Select first switchable ROM page ¦ ¦ ¦¦ 7 - Select second switchable ROM page ¦ ¦ ¦¦ ¦ ¦ ¦+-------- PRG Address Select ¦ ¦ ¦ 0 - Enable swapping for $8000 and $A000 ¦ ¦ ¦ 1 - Enable swapping for $A000 and $C000 ¦ ¦ ¦ ¦ ¦ +--------- CHR Address Select ¦ ¦ 0 - Use normal address for commands 0-5 ¦ ¦ 1 - XOR command 0-5 address with $1000 ¦ +------------------------------------------------------+ +-------+ +----------------------------------------------+ ¦ $8001 +---¦ PPPPPPPP ¦ +-------+ ¦ +------+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------- Page Number for Command ¦ ¦ Activates the command number ¦ ¦ written to bits 0-2 of $8000 ¦ +----------------------------------------------+ +-------+ +----------------------------------------------+ ¦ $A000 +---¦ xxxxxxxM ¦ +-------+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +--- Mirroring Select ¦ ¦ 0 - Horizontal mirroring ¦ ¦ 1 - Vertical mirroring ¦ ¦ NOTE: I don't have any confidence in the ¦ ¦ accuracy of this information. ¦ +----------------------------------------------+ +-------+ +----------------------------------------------+ ¦ $A001 +---¦ Sxxxxxxx ¦ +-------+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +---------- SaveRAM Toggle ¦ ¦ 0 - Disable $6000-$7FFF ¦ ¦ 1 - Enable $6000-$7FFF ¦ +----------------------------------------------+ +-------+ +----------------------------------------------+ ¦ $C000 +---¦ IIIIIIII ¦ +-------+ ¦ +------+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------- IRQ Counter Register ¦ ¦ The IRQ countdown value is ¦ ¦ stored here. ¦ +----------------------------------------------+ +-------+ +----------------------------------------------+ ¦ $C001 +---¦ IIIIIIII ¦ +-------+ ¦ +------+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------- IRQ Latch Register ¦ ¦ A temporary value is stored ¦ ¦ here. ¦ +----------------------------------------------+ +-------+ +----------------------------------------------+ ¦ $E000 +---¦ xxxxxxxx ¦ +-------+ ¦ +------+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------- IRQ Control Register 0 ¦ ¦ Any value written here will ¦ ¦ disable IRQ's and copy the ¦ ¦ latch register to the actual ¦ ¦ IRQ counter register. ¦ +----------------------------------------------+ +-------+ +----------------------------------------------+ ¦ $E001 +---¦ xxxxxxxx ¦ +-------+ ¦ +------+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------- IRQ Control Register 1 ¦ ¦ Any value written here will ¦ ¦ enable IRQ's. ¦ +----------------------------------------------+ Notes: - Two of the 8K ROM banks in the PRG area are switchable. The other two are "hard-wired" to the last two banks in the cart. The default setting is switchable banks at $8000 and $A000, with banks 0 and 1 being swapped in at reset. Through bit 6 of $8000, the hard-wiring can be made to affect $8000 and $E000 instead of $C000 and $E000. The switchable banks, whatever their addresses, can be swapped through commands 6 and 7. - A cart will first write the command and base select number to $8000, then the value to be used to $8001. - On carts with VROM, the first 8K of VROM is swapped into PPU $0000 on reset. On carts without VROM, as always, there is 8K of VRAM at PPU $0000. **************************************************************************** +----------------+ ¦ Mapper 5: MMC5 ¦ +----------------+ +--------------------------------------------------------------------+ ¦ This mapper appears in a few newer NES titles, most notably ¦ ¦ Castlevania 3. Some other games such as Uncharted Waters and ¦ ¦ several Koei titles also use this mapper. Thanks to D and ¦ ¦ Jim Geffre for this information. ¦ +--------------------------------------------------------------------+ +-------+ +--------------------------------------------+ ¦ $5103 +---¦ xxxxxxSS ¦ +-------+ ¦ ¦¦ ¦ ¦ ++ ¦ ¦ ¦ ¦ ¦ +-- Sprite CHR bank size ¦ ¦ 0 - One 8K bank ¦ ¦ 1 - Two 4K banks ¦ ¦ 2 - Three 2K banks ¦ ¦ 3 - Four 1K banks ¦ +--------------------------------------------+ +-------+ +-----------------------------------------------+ ¦ $5104 +---¦ xxxxxxCT ¦ +-------+ ¦ ¦¦ ¦ ¦ ¦¦ ¦ ¦ ¦¦ ¦ ¦ ¦+--- EXRAM background tile select ¦ ¦ ¦ 0 - Normal tile support ¦ ¦ ¦ 1 - Enable EXRAM for tiles ¦ ¦ ¦ ¦ ¦ +---- EXRAM color select ¦ ¦ 0 - EXRAM color off ¦ ¦ 1 - Enable EXRAM color expansion ¦ +-----------------------------------------------+ +-------+ +--------------------------------------------+ ¦ $5105 +---¦ MMMMMMMM ¦ +-------+ ¦ ¦¦¦¦¦¦¦¦ ¦ ¦ ++++++++ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +-- $2000 nametable select ¦ ¦ ¦ ¦ ¦ Select nametable for $2000 ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +---- $2400 nametable select ¦ ¦ ¦ ¦ Select nametable for $2400 ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------ $2800 nametable select ¦ ¦ ¦ Select nametable for $2800 ¦ ¦ ¦ ¦ ¦ +-------- $2C00 nametable select ¦ ¦ Select nametable for $2C00 ¦ +--------------------------------------------+ +-------+ +----------------------------------------------+ ¦ $5114 +---¦ UPPPPPPP ¦ +-------+ ¦ ¦+-----+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------- Select 8K ROM bank at $8000 ¦ ¦ ¦ ¦ ¦ +---------- PRG Bank Activation ¦ ¦ 0 = Bank contains all $FFs ¦ ¦ 1 = Bank contains 8K of ROM ¦ ¦ selected from bits 0-7 ¦ +----------------------------------------------+ +-------+ +----------------------------------------------+ ¦ $5115 +---¦ UPPPPPPP ¦ +-------+ ¦ ¦+-----+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------- Select 8K ROM bank at $A000 ¦ ¦ ¦ ¦ ¦ +---------- PRG Bank Activation ¦ ¦ 0 = Bank contains all $FFs ¦ ¦ 1 = Bank contains 8K of ROM ¦ ¦ selected from bits 0-7 ¦ +----------------------------------------------+ +-------+ +----------------------------------------------+ ¦ $5116 +---¦ UPPPPPPP ¦ +-------+ ¦ ¦+-----+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------- Select 8K ROM bank at $C000 ¦ ¦ ¦ ¦ ¦ +---------- PRG Bank Activation ¦ ¦ 0 = Bank contains all $FFs ¦ ¦ 1 = Bank contains 8K of ROM ¦ ¦ selected from bits 0-7 ¦ +----------------------------------------------+ +-------+ +----------------------------------------------+ ¦ $5120 +---¦ CCCCCCCC ¦ +-------+ ¦ +------+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------- Select 1K VROM bank at PPU $0000 ¦ ¦ Only active if 1K switching is ¦ ¦ active via $5103 ¦ ¦ This CHR selection is used for ¦ ¦ drawing sprites only. ¦ +----------------------------------------------+ +-------+ +----------------------------------------------+ ¦ $5121 +---¦ CCCCCCCC ¦ +-------+ ¦ +------+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------- (If 1K switching is active ¦ ¦ via $5103) ¦ ¦ Select 1K VROM bank at PPU $0400 ¦ ¦ (If 2K switching is active ¦ ¦ via $5103) ¦ ¦ Select 2K VROM bank at PPU $0000 ¦ ¦ This CHR selection is used for ¦ ¦ drawing sprites only. ¦ +----------------------------------------------+ +-------+ +----------------------------------------------+ ¦ $5122 +---¦ CCCCCCCC ¦ +-------+ ¦ +------+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------- Select 1K VROM bank at PPU $0800 ¦ ¦ Only active if 1K switching is ¦ ¦ active via $5103 ¦ ¦ This CHR selection is used for ¦ ¦ drawing sprites only. ¦ +----------------------------------------------+ +-------+ +----------------------------------------------+ ¦ $5123 +---¦ CCCCCCCC ¦ +-------+ ¦ +------+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------- (If 1K switching is active ¦ ¦ via $5103) ¦ ¦ Select 1K VROM bank at PPU $0C00 ¦ ¦ (If 2K switching is active ¦ ¦ via $5103) ¦ ¦ Select 2K VROM bank at PPU $0800 ¦ ¦ (If 4K switching is active ¦ ¦ via $5103) ¦ ¦ Select 4K VROM bank at PPU $0000 ¦ ¦ This CHR selection is used for ¦ ¦ drawing sprites only. ¦ +----------------------------------------------+ +-------+ +----------------------------------------------+ ¦ $5124 +---¦ CCCCCCCC ¦ +-------+ ¦ +------+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------- Select 1K VROM bank at PPU $1000 ¦ ¦ Only active if 1K switching is ¦ ¦ active via $5103 ¦ ¦ This CHR selection is used for ¦ ¦ drawing sprites only. ¦ +----------------------------------------------+ +-------+ +----------------------------------------------+ ¦ $5125 +---¦ CCCCCCCC ¦ +-------+ ¦ +------+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------- (If 1K switching is active ¦ ¦ via $5103) ¦ ¦ Select 1K VROM bank at PPU $1400 ¦ ¦ (If 2K switching is active ¦ ¦ via $5103) ¦ ¦ Select 2K VROM bank at PPU $1000 ¦ ¦ This CHR selection is used for ¦ ¦ drawing sprites only. ¦ +----------------------------------------------+ +-------+ +----------------------------------------------+ ¦ $5126 +---¦ CCCCCCCC ¦ +-------+ ¦ +------+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------- Select 1K VROM bank at PPU $1800 ¦ ¦ Only active if 1K switching is ¦ ¦ active via $5103 ¦ ¦ This CHR selection is used for ¦ ¦ drawing sprites only. ¦ +----------------------------------------------+ +-------+ +----------------------------------------------+ ¦ $5127 +---¦ CCCCCCCC ¦ +-------+ ¦ +------+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------- (If 1K switching is active ¦ ¦ via $5103) ¦ ¦ Select 1K VROM bank at PPU $1C00 ¦ ¦ (If 2K switching is active ¦ ¦ via $5103) ¦ ¦ Select 2K VROM bank at PPU $1800 ¦ ¦ (If 4K switching is active ¦ ¦ via $5103) ¦ ¦ Select 4K VROM bank at PPU $1000 ¦ ¦ (If 8K switching is active ¦ ¦ via $5103) ¦ ¦ Select 8K VROM bank at PPU $0000 ¦ ¦ This CHR selection is used for ¦ ¦ drawing sprites only. ¦ +----------------------------------------------+ +-------+ +----------------------------------------------+ ¦ $5128 +---¦ CCCCCCCC ¦ +-------+ ¦ +------+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------- Select 2K VROM bank at PPU $0000 ¦ ¦ This CHR selection is used only ¦ ¦ for drawing the nametables if ¦ ¦ EXRAM is not activated. ¦ +----------------------------------------------+ +-------+ +----------------------------------------------+ ¦ $5129 +---¦ CCCCCCCC ¦ +-------+ ¦ +------+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------- Select 2K VROM bank at PPU $0800 ¦ ¦ This CHR selection is used only ¦ ¦ for drawing the nametables if ¦ ¦ EXRAM is not activated. ¦ +----------------------------------------------+ +-------+ +----------------------------------------------+ ¦ $512A +---¦ CCCCCCCC ¦ +-------+ ¦ +------+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------- Select 2K VROM bank at PPU $1000 ¦ ¦ This CHR selection is used only ¦ ¦ for drawing the nametables if ¦ ¦ EXRAM is not activated. ¦ +----------------------------------------------+ +-------+ +----------------------------------------------+ ¦ $512B +---¦ CCCCCCCC ¦ +-------+ ¦ +------+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------- Select 2K VROM bank at PPU $1800 ¦ ¦ This CHR selection is used only ¦ ¦ for drawing the nametables if ¦ ¦ EXRAM is not activated. ¦ +----------------------------------------------+ Notes: - Much of this information is incomplete and possibly inaccurate. - To learn about MMC5's EXRAM system, read Y0SHi's NESTECH document. Note that Castlevania 3 doesn't use EXRAM but the Koei games (Bandit Kings of Ancient China, Gemfire, etc.) do use it. - On reset, all ROM banks are set to the LAST 8K bank in the cartridge. The last 8K of this is "hard-wired" and cannot be swapped. (As far as I know.) - MMC5 has its own sound chip, which is only used in Japanese games. I do not know how it works. **************************************************************************** +---------------------+ ¦ Mapper 6: FFE F4xxx ¦ +---------------------+ +--------------------------------------------------------------------+ ¦ Several hacked Japanese titles use this mapper, such as the hacked ¦ ¦ version of Wai Wai World. The unhacked versions of these games ¦ ¦ seem to use a Konami VRC mapper, and it's better to use them if ¦ ¦ possible. ¦ +--------------------------------------------------------------------+ +-------+ +--------------------------------------------------+ ¦ $42FC +---¦ xxxPxxxx ¦ +-------+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +--------- Unknown ¦ +--------------------------------------------------+ +-------+ +--------------------------------------------------+ ¦ $42FD +---¦ xxxMxxxx ¦ +-------+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +--------- Unknown ¦ +--------------------------------------------------+ +-------+ +--------------------------------------------------+ ¦ $42FE +---¦ xxxPxxxx ¦ +-------+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +--------- Page Select ¦ ¦ 0 - Mirror pages from PPU $2400 ¦ ¦ 1 - Mirror pages from PPU $2000 ¦ +--------------------------------------------------+ +-------+ +--------------------------------------------------+ ¦ $42FF +---¦ xxxMxxxx ¦ +-------+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +--------- Mirroring Select ¦ ¦ 0 - Horizontal mirroring ¦ ¦ 1 - Vertical mirroring ¦ +--------------------------------------------------+ +-------+ +-----------------------------------------------+ ¦ $43FE +---¦ CCCCCCPP ¦ +-------+ ¦ ¦ ¦¦¦ ¦ ¦ +----¦+----- 512K PRG Select ¦ ¦ ¦ ¦ ¦ +------ 512K CHR Select ¦ ¦ NOTE: I don't have any confidence in the ¦ ¦ accuracy of this information. ¦ +-----------------------------------------------+ +-------+ +-----------------------------------------------+ ¦ $4500 +---¦ DESSWPPP ¦ +-------+ ¦ ¦¦¦¦¦¦ ¦ ¦ ¦ ¦¦+¦¦+------ PPU Mode Select ¦ ¦ ¦¦ ¦¦ 1 - 32K ¦ ¦ ¦¦ ¦¦ 5 - 256K plus EXRAM ¦ ¦ ¦¦ ¦¦ 7 - 256K ¦ ¦ ¦¦ ¦¦ ¦ ¦ ¦¦ ¦+------- SW Pin ¦ ¦ ¦¦ ¦ I have no idea what this does. ¦ ¦ ¦¦ ¦ ¦ ¦ ¦¦ +-------- SaveRAM Toggle ¦ ¦ ¦¦ 0 - No SaveRAM ¦ ¦ ¦¦ 1 - SaveRAM ¦ ¦ ¦¦ ¦ ¦ ¦+---------- Execution Mode ¦ ¦ ¦ 0 - Do nothing ¦ ¦ ¦ 1 - Execute game ¦ ¦ ¦ ¦ ¦ +----------- Medium ¦ ¦ 0 - Famicom Disk System ¦ ¦ 1 - Cartridge ¦ +-----------------------------------------------+ +-------+ +----------------------------------------------+ ¦ $4501 +---¦ xxxxxxxx ¦ +-------+ ¦ +------+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------- IRQ Control Register 0 ¦ ¦ Any value written here will ¦ ¦ disable IRQ's. ¦ +----------------------------------------------+ +-------+ +----------------------------------------------+ ¦ $4502 +---¦ IIIIIIII ¦ +-------+ ¦ +------+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------- Low byte of IRQ counter ¦ +----------------------------------------------+ +-------+ +----------------------------------------------+ ¦ $4503 +---¦ IIIIIIII ¦ +-------+ ¦ +------+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------- High byte of IRQ counter and ¦ ¦ IRQ Control Register 1 ¦ ¦ Any value written here will ¦ ¦ enable IRQ's. ¦ +----------------------------------------------+ +---------------+ +-----------------------------------------------+ ¦ $8000 - $FFFF +----¦ xxPPPPCC ¦ +---------------+ ¦ ¦ ¦¦¦ ¦ ¦ +--¦+----- Pattern Table Select ¦ ¦ ¦ ¦ ¦ +------- Select 16K ROM bank at $8000 ¦ +-----------------------------------------------+ Notes: - The IRQ counter is incremented at each scanline. When it reaches $FFFF, it is reset to zero and an IRQ interrupt is executed. - I am not sure if all my information about this mapper is accurate. **************************************************************************** +-----------------+ ¦ Mapper 7: AOROM ¦ +-----------------+ +--------------------------------------------------------------------+ ¦ Numerous games released by Rare Ltd. use this mapper, such as ¦ ¦ Battletoads, Wizards & Warriors, and Solar Jetman. ¦ +--------------------------------------------------------------------+ +---------------+ +----------------------------------------------+ ¦ $8000 - $FFFF +---¦ xxxSPPPP ¦ +---------------+ ¦ ¦¦ ¦ ¦ ¦ ¦+--¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +---- Select 32K ROM bank at $8000 ¦ ¦ ¦ ¦ ¦ +------- One-Screen Mirroring ¦ ¦ 0 = Mirror pages from PPU $2000 ¦ ¦ 1 = Mirror pages from PPU $2400 ¦ +----------------------------------------------+ Notes: - The first 32K ROM bank is swapped into $8000 when the cart is started or reset. - This mapper has no provisions for VROM; therefore, all carts using it have 8K of VRAM at PPU $0000. - Many carts using this mapper need precise NES timing to work properly. If you're writing an emulator, be sure that you have provisions for switching screens during refresh, and be sure the one-screen mirroring is emulated properly. Also make sure that you have provisions for palette changes in midframe and for special handling of mid-HBlank writes to $2006. **************************************************************************** +---------------------+ ¦ Mapper 8: FFE F3xxx ¦ +---------------------+ +--------------------------------------------------------------------+ ¦ Several hacked Japanese titles use this mapper, such as the hacked ¦ ¦ version of Doraemon. ¦ +--------------------------------------------------------------------+ +---------------+ +-----------------------------------------------+ ¦ $8000 - $FFFF +----¦ PPPPPCCC ¦ +---------------+ ¦ ¦ ¦¦ ¦ ¦ ¦ +---¦+------ Select 8K VROM bank at PPU $0000 ¦ ¦ ¦ ¦ ¦ +------- Select 16K ROM bank at $8000 ¦ +-----------------------------------------------+ Notes: - When the cart is first started, the first 16K ROM bank in the cart is loaded into $8000, and the SECOND 16K ROM bank is loaded into $C000. This 16K bank is permanently "hard-wired" to $C000, and it cannot be swapped. - The first 8K VROM bank is swapped into PPU $0000 when the cart is reset. - I do not know if all 5 bits of the PRG switcher are used. Possibly only three or four are used. - Not many games use this mapper, but it's easy to implement, so you might as well add it if you're writing a NES emulator. **************************************************************************** +----------------+ ¦ Mapper 9: MMC2 ¦ +----------------+ +--------------------------------------------------------------------+ ¦ This mapper is used only on the U.S. versions of Punch-Out (both ¦ ¦ standard and "Mike Tyson" versions.) Thanks to Paul Robson and ¦ ¦ Jim Geffre for the mapper information. ¦ +--------------------------------------------------------------------+ +---------------+ +------------------------------------------+ ¦ $A000 - $AFFF +---------¦ PPPPPPPP ¦ +---------------+ ¦ +------+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------- Select 8K ROM bank at $8000 ¦ +------------------------------------------+ +---------------+ +-----------------------------------------------+ ¦ $B000 - $CFFF +---------¦ CCCCCCCC ¦ +---------------+ ¦ +------+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------- Select 4K VROM bank at PPU $0000 ¦ +-----------------------------------------------+ +---------------+ +------------------------------------------------+ ¦ $D000 - $DFFF +---------¦ CCCCCCCC ¦ +---------------+ ¦ +------+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------- Select 4K VROM bank at PPU $1000 ¦ ¦ for use when latch selector is $FD ¦ +------------------------------------------------+ +---------------+ +------------------------------------------------+ ¦ $E000 - $EFFF +---------¦ CCCCCCCC ¦ +---------------+ ¦ +------+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------- Select 4K VROM bank at PPU $1000 ¦ ¦ for use when latch selector is $FE ¦ +------------------------------------------------+ +---------------+ +----------------------------------------------+ ¦ $F000 - $FFFF +---¦ xxxxxxxM ¦ +---------------+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +--- Mirroring Select ¦ ¦ 0 - Vertical mirroring ¦ ¦ 1 - Horizontal mirroring ¦ +----------------------------------------------+ Notes: - When the cart is first started, the first 8K ROM bank in the cart is loaded into $8000, and the LAST 3 8K ROM banks are loaded into $A000. These last 8K banks are permanently "hard-wired" to $A000, and cannot be swapped. - The "latch selector" in question can be swapped by access to PPU memory. If PPU $0FD0-$0FDF or $1FD0-$1FDF is accessed, the latch selector is $FD. If $0FE0-$0FEF or $1FE0-$1FEF is accessed, the latch selector is changed to $FE. These settings take effect immediately. The latch contains $FE on reset. **************************************************************************** +-----------------+ ¦ Mapper 10: MMC4 ¦ +-----------------+ +--------------------------------------------------------------------+ ¦ This mapper is used on several Japanese carts such as Fire Emblem ¦ ¦ and Family War. Thanks to FanWen and Jim Geffre for the mapper ¦ ¦ information. ¦ +--------------------------------------------------------------------+ +---------------+ +------------------------------------------+ ¦ $A000 - $AFFF +---------¦ PPPPPPPP ¦ +---------------+ ¦ +------+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------- Select 16K ROM bank at $8000 ¦ +------------------------------------------+ +---------------+ +------------------------------------------------+ ¦ $B000 - $BFFF +---------¦ CCCCCCCC ¦ +---------------+ ¦ +------+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------- Select 4K VROM bank at PPU $0000 ¦ ¦ for use when latch #1 is $FD ¦ +------------------------------------------------+ +---------------+ +------------------------------------------------+ ¦ $C000 - $CFFF +---------¦ CCCCCCCC ¦ +---------------+ ¦ +------+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------- Select 4K VROM bank at PPU $0000 ¦ ¦ for use when latch #1 is $FE ¦ +------------------------------------------------+ +---------------+ +------------------------------------------------+ ¦ $D000 - $DFFF +---------¦ CCCCCCCC ¦ +---------------+ ¦ +------+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------- Select 4K VROM bank at PPU $1000 ¦ ¦ for use when latch #2 is $FD ¦ +------------------------------------------------+ +---------------+ +------------------------------------------------+ ¦ $E000 - $EFFF +---------¦ CCCCCCCC ¦ +---------------+ ¦ +------+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------- Select 4K VROM bank at PPU $1000 ¦ ¦ for use when latch #2 is $FE ¦ +------------------------------------------------+ +---------------+ +----------------------------------------------+ ¦ $F000 - $FFFF +---¦ xxxxxxxM ¦ +---------------+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +--- Mirroring Select ¦ ¦ 0 - Vertical mirroring ¦ ¦ 1 - Horizontal mirroring ¦ +----------------------------------------------+ Notes: - When the cart is first started, the first 16K ROM bank in the cart is loaded into $8000, and the LAST 16K ROM bank is loaded into $C000. This last 16K bank is permanently "hard-wired" to $C000, and cannot be swapped. - The "latches" can be swapped by access to PPU memory. If PPU $0FD0-$0FDF is accessed, latch #1 becomes $FD. If $0FE0-$0FEF is accessed, it becomes $FE. Latch #2 works in the same manner, except the addresses are $1FD0-$1FDF and $1FE0-$1FEF for $FD and $FE respectively. These bank switch settings take effect immediately. Latches contain $FE on reset. **************************************************************************** +-------------------------+ ¦ Mapper 11: Color Dreams ¦ +-------------------------+ +--------------------------------------------------------------------+ ¦ This mapper is used on several unlicensed Color Dreams titles, ¦ ¦ including Crystal Mines and Pesterminator. I'm not sure if their ¦ ¦ religious ("Wisdom Tree") games use the same mapper or not. ¦ +--------------------------------------------------------------------+ +---------------+ +-----------------------------------------------+ ¦ $8000 - $FFFF +----¦ CCCCPPPP ¦ +---------------+ ¦ ¦ ¦¦ ¦ ¦ ¦ +--¦+------- Select 32K ROM bank at $8000 ¦ ¦ ¦ ¦ ¦ +-------- Select 8K VROM bank at PPU $0000 ¦ +-----------------------------------------------+ Notes: - When the cart is first started or reset, the first 32K ROM bank in the cart is loaded into $8000, and the first 8K VROM bank is swapped into PPU $0000. - Many games using this mapper are somewhat glitchy. **************************************************************************** +---------------------+ ¦ Mapper 15: 100-in-1 ¦ +---------------------+ +--------------------------------------------------------------------+ ¦ Several hacked Japanese titles use this mapper, such as the ¦ ¦ 100-in-1 pirate cart. ¦ +--------------------------------------------------------------------+ +-------+ +------------------------------------------------+ ¦ $8000 +----¦ SMPPPPPP ¦ +-------+ ¦ ¦¦¦ ¦ ¦ ¦ ¦¦+--------- Select 16K ROM bank at $8000 ¦ ¦ ¦¦ Select next 16K ROM bank at $C000 ¦ ¦ ¦¦ ¦ ¦ ¦+---------- Mirroring Control ¦ ¦ ¦ 0 - Vertical Mirroring ¦ ¦ ¦ 1 - Horizontal Mirroring ¦ ¦ ¦ ¦ ¦ +----------- Page Swap ¦ ¦ 0 - Swap 8K pages at $8000/$A000 ¦ ¦ 1 - Swap 8K pages at $C000/$E000 ¦ +------------------------------------------------+ +-------+ +------------------------------------------------+ ¦ $8001 +----¦ SxPPPPPP ¦ +-------+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +--------- Select 16K ROM bank at $C000 ¦ ¦ ¦ ¦ ¦ +----------- Swap Register ¦ ¦ Swap 8K at $C000 and $E000 ¦ +------------------------------------------------+ +-------+ +------------------------------------------------+ ¦ $8002 +----¦ SxPPPPPP ¦ +-------+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +--------- Select 8K of a 16K segment at ¦ ¦ ¦ $8000, $A000, $C000, and $E000. ¦ ¦ ¦ ¦ ¦ +----------- Segment Selector ¦ ¦ 0 - Select lower 8K of segment ¦ ¦ 1 - Select upper 8K of segment ¦ +------------------------------------------------+ +-------+ +------------------------------------------------+ ¦ $8003 +----¦ SMPPPPPP ¦ +-------+ ¦ ¦¦¦ ¦ ¦ ¦ ¦¦+--------- Select 16K ROM bank at $C000 ¦ ¦ ¦¦ ¦ ¦ ¦+---------- Mirroring Control ¦ ¦ ¦ 0 - Vertical Mirroring ¦ ¦ ¦ 1 - Horizontal Mirroring ¦ ¦ ¦ ¦ ¦ +----------- Swap Register ¦ ¦ Swap 8K at $C000 and $E000 ¦ +------------------------------------------------+ Notes: - The first 32K of ROM is loaded into $8000 on reset. There is 8K of VRAM at PPU $0000. **************************************************************************** +-------------------+ ¦ Mapper 16: Bandai ¦ +-------------------+ +--------------------------------------------------------------------+ ¦ This mapper is used on several Japanese titles by Bandai, such as ¦ ¦ the DragonBall Z series and the SD Gundam Knight series. ¦ ¦ As far as I know, it was not used on U.S. games. ¦ +--------------------------------------------------------------------+ +---------------------+ +----------------------------------------------+ ¦ $6000, $7FF0, $8000 +---¦ CCCCCCCC ¦ +---------------------+ ¦ +------+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------- Select 1K VROM bank at PPU $0000 ¦ +----------------------------------------------+ +---------------------+ +----------------------------------------------+ ¦ $6001, $7FF1, $8001 +---¦ CCCCCCCC ¦ +---------------------+ ¦ +------+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------- Select 1K VROM bank at PPU $0400 ¦ +----------------------------------------------+ +---------------------+ +----------------------------------------------+ ¦ $6002, $7FF2, $8002 +---¦ CCCCCCCC ¦ +---------------------+ ¦ +------+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------- Select 1K VROM bank at PPU $0800 ¦ +----------------------------------------------+ +---------------------+ +----------------------------------------------+ ¦ $6003, $7FF3, $8003 +---¦ CCCCCCCC ¦ +---------------------+ ¦ +------+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------- Select 1K VROM bank at PPU $0C00 ¦ +----------------------------------------------+ +---------------------+ +----------------------------------------------+ ¦ $6004, $7FF4, $8004 +---¦ CCCCCCCC ¦ +---------------------+ ¦ +------+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------- Select 1K VROM bank at PPU $1000 ¦ +----------------------------------------------+ +---------------------+ +----------------------------------------------+ ¦ $6005, $7FF5, $8005 +---¦ CCCCCCCC ¦ +---------------------+ ¦ +------+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------- Select 1K VROM bank at PPU $1400 ¦ +----------------------------------------------+ +---------------------+ +----------------------------------------------+ ¦ $6006, $7FF6, $8006 +---¦ CCCCCCCC ¦ +---------------------+ ¦ +------+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------- Select 1K VROM bank at PPU $1800 ¦ +----------------------------------------------+ +---------------------+ +----------------------------------------------+ ¦ $6007, $7FF7, $8007 +---¦ CCCCCCCC ¦ +---------------------+ ¦ +------+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------- Select 1K VROM bank at PPU $1C00 ¦ +----------------------------------------------+ +---------------------+ +----------------------------------------------+ ¦ $6008, $7FF8, $8008 +---¦ PPPPPPPP ¦ +---------------------+ ¦ +------+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------- Select 16K ROM bank at $8000 ¦ +----------------------------------------------+ +---------------------+ +----------------------------------------------+ ¦ $6009, $7FF9, $8009 +---¦ xxxxxxMM ¦ +---------------------+ ¦ ¦¦ ¦ ¦ +¦ ¦ ¦ ¦ ¦ ¦ +--- Mirroring/Page Select ¦ ¦ 0 - Horizontal mirroring ¦ ¦ 1 - Vertical mirroring ¦ ¦ 2 - Mirror pages from $2000 ¦ ¦ 3 - Mirror pages from $2400 ¦ +----------------------------------------------+ +---------------------+ +----------------------------------------------+ ¦ $600A, $7FFA, $800A +---¦ xxxxxxxI ¦ +---------------------+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +--- IRQ Control Register ¦ ¦ 0 - Disable IRQ's ¦ ¦ 1 - Enable IRQ's ¦ +----------------------------------------------+ +---------------------+ +----------------------------------------------+ ¦ $600B, $7FFB, $800B +---¦ IIIIIIII ¦ +---------------------+ ¦ +------+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------- Low byte of IRQ counter ¦ +----------------------------------------------+ +---------------------+ +----------------------------------------------+ ¦ $600C, $7FFC, $800C +---¦ IIIIIIII ¦ +---------------------+ ¦ +------+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------- High byte of IRQ counter ¦ +----------------------------------------------+ +---------------------+ +----------------------------------------------+ ¦ $600D, $7FFD, $800D +---¦ EEEEEEEE ¦ +---------------------+ ¦ +------+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------- EPROM I/O Port ¦ ¦ I am not sure how this works. ¦ +----------------------------------------------+ Notes: - When the cart is first started, the first 16K ROM bank in the cart is loaded into $8000, and the LAST 16K ROM bank is loaded into $C000. This last 16K bank is permanently "hard-wired" to $C000, and it cannot be swapped. - VROM should NOT be swapped into PPU $0000 when the cartridge is started or reset, in order to avoid graphics corruption. - The IRQ counter is decremented at each scanline if active and set off when it reaches zero. An IRQ interrupt is executed at that point. **************************************************************************** +----------------------+ ¦ Mapper 17: FFE F8xxx ¦ +----------------------+ +--------------------------------------------------------------------+ ¦ Several hacked Japanese titles use this mapper, such as the hacked ¦ ¦ versions of Parodius and DragonBall Z 3. ¦ +--------------------------------------------------------------------+ +-------+ +--------------------------------------------------+ ¦ $42FC +---¦ xxxPxxxx ¦ +-------+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +--------- Unknown ¦ +--------------------------------------------------+ +-------+ +--------------------------------------------------+ ¦ $42FD +---¦ xxxMxxxx ¦ +-------+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +--------- Unknown ¦ +--------------------------------------------------+ +-------+ +--------------------------------------------------+ ¦ $42FE +---¦ xxxPxxxx ¦ +-------+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +--------- Page Select ¦ ¦ 0 - Mirror pages from PPU $2400 ¦ ¦ 1 - Mirror pages from PPU $2000 ¦ +--------------------------------------------------+ +-------+ +--------------------------------------------------+ ¦ $42FF +---¦ xxxMxxxx ¦ +-------+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +--------- Mirroring Select ¦ ¦ 0 - Horizontal mirroring ¦ ¦ 1 - Vertical mirroring ¦ +--------------------------------------------------+ +-------+ +----------------------------------------------+ ¦ $4501 +---¦ xxxxxxxx ¦ +-------+ ¦ +------+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------- IRQ Control Register 0 ¦ ¦ Any value written here will ¦ ¦ disable IRQ's. ¦ +----------------------------------------------+ +-------+ +----------------------------------------------+ ¦ $4502 +---¦ IIIIIIII ¦ +-------+ ¦ +------+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------- Low byte of IRQ counter ¦ +----------------------------------------------+ +-------+ +----------------------------------------------+ ¦ $4503 +---¦ IIIIIIII ¦ +-------+ ¦ +------+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------- High byte of IRQ counter and ¦ ¦ IRQ Control Register 1 ¦ ¦ Any value written here will ¦ ¦ enable IRQ's. ¦ +----------------------------------------------+ +-------+ +-----------------------------------------+ ¦ $4504 +---¦ PPPPPPPP ¦ +-------+ ¦ +------+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------- Select 8K ROM bank at $8000 ¦ +-----------------------------------------+ +-------+ +-----------------------------------------+ ¦ $4505 +---¦ PPPPPPPP ¦ +-------+ ¦ +------+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------- Select 8K ROM bank at $A000 ¦ +-----------------------------------------+ +-------+ +-----------------------------------------+ ¦ $4506 +---¦ PPPPPPPP ¦ +-------+ ¦ +------+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------- Select 8K ROM bank at $C000 ¦ +-----------------------------------------+ +-------+ +-----------------------------------------+ ¦ $4507 +---¦ PPPPPPPP ¦ +-------+ ¦ +------+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------- Select 8K ROM bank at $E000 ¦ +-----------------------------------------+ +-------+ +----------------------------------------------+ ¦ $4510 +---¦ CCCCCCCC ¦ +-------+ ¦ +------+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------- Select 1K VROM bank at PPU $0000 ¦ +----------------------------------------------+ +-------+ +----------------------------------------------+ ¦ $4511 +---¦ CCCCCCCC ¦ +-------+ ¦ +------+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------- Select 1K VROM bank at PPU $0400 ¦ +----------------------------------------------+ +-------+ +----------------------------------------------+ ¦ $4512 +---¦ CCCCCCCC ¦ +-------+ ¦ +------+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------- Select 1K VROM bank at PPU $0800 ¦ +----------------------------------------------+ +-------+ +----------------------------------------------+ ¦ $4513 +---¦ CCCCCCCC ¦ +-------+ ¦ +------+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------- Select 1K VROM bank at PPU $0C00 ¦ +----------------------------------------------+ +-------+ +----------------------------------------------+ ¦ $4514 +---¦ CCCCCCCC ¦ +-------+ ¦ +------+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------- Select 1K VROM bank at PPU $1000 ¦ +----------------------------------------------+ +-------+ +----------------------------------------------+ ¦ $4515 +---¦ CCCCCCCC ¦ +-------+ ¦ +------+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------- Select 1K VROM bank at PPU $1400 ¦ +----------------------------------------------+ +-------+ +----------------------------------------------+ ¦ $4516 +---¦ CCCCCCCC ¦ +-------+ ¦ +------+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------- Select 1K VROM bank at PPU $1800 ¦ +----------------------------------------------+ +-------+ +----------------------------------------------+ ¦ $4517 +---¦ CCCCCCCC ¦ +-------+ ¦ +------+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------- Select 1K VROM bank at PPU $1C00 ¦ +----------------------------------------------+ Notes: - When the cart is first started, the first 16K ROM bank in the cart is loaded into $8000, and the LAST 16K ROM bank is loaded into $C000. - VROM should NOT be swapped into PPU $0000 when the cartridge is started or reset, in order to avoid graphics corruption. - The IRQ counter is incremented at each scanline. When it reaches $FFFF, it is reset to zero and an IRQ interrupt is executed. **************************************************************************** +--------------------------+ ¦ Mapper 18: Jaleco SS8806 ¦ +--------------------------+ +--------------------------------------------------------------------+ ¦ This mapper is used on several Japanese titles by Jaleco, such as ¦ ¦ Baseball 3. As far as I know, it was not used on U.S. games. ¦ ¦ +--------------------------------------------------------------------+ +-------+ +-----------------------------------------+ ¦ $8000 +---¦ xxxxPPPP ¦ +-------+ ¦ +--+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +---- Select 8K ROM bank at $8000 ¦ ¦ Low 4 bits ¦ +-----------------------------------------+ +-------+ +-----------------------------------------+ ¦ $8001 +---¦ xxxxPPPP ¦ +-------+ ¦ +--+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +---- Select 8K ROM bank at $8000 ¦ ¦ High 4 bits ¦ +-----------------------------------------+ +-------+ +-----------------------------------------+ ¦ $8002 +---¦ xxxxPPPP ¦ +-------+ ¦ +--+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +---- Select 8K ROM bank at $A000 ¦ ¦ Low 4 bits ¦ +-----------------------------------------+ +-------+ +-----------------------------------------+ ¦ $8003 +---¦ xxxxPPPP ¦ +-------+ ¦ +--+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +---- Select 8K ROM bank at $A000 ¦ ¦ High 4 bits ¦ +-----------------------------------------+ +-------+ +-----------------------------------------+ ¦ $9000 +---¦ xxxxPPPP ¦ +-------+ ¦ +--+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +---- Select 8K ROM bank at $C000 ¦ ¦ Low 4 bits ¦ +-----------------------------------------+ +-------+ +-----------------------------------------+ ¦ $9001 +---¦ xxxxPPPP ¦ +-------+ ¦ +--+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +---- Select 8K ROM bank at $C000 ¦ ¦ High 4 bits ¦ +-----------------------------------------+ +-------+ +----------------------------------------------+ ¦ $A000 +---¦ xxxxCCCC ¦ +-------+ ¦ +--+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +---- Select 1K VROM bank at PPU $0000 ¦ ¦ Low 4 bits ¦ +----------------------------------------------+ +-------+ +----------------------------------------------+ ¦ $A001 +---¦ xxxxCCCC ¦ +-------+ ¦ +--+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +---- Select 1K VROM bank at PPU $0000 ¦ ¦ High 4 bits ¦ +----------------------------------------------+ +-------+ +----------------------------------------------+ ¦ $A002 +---¦ xxxxCCCC ¦ +-------+ ¦ +--+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +---- Select 1K VROM bank at PPU $0400 ¦ ¦ Low 4 bits ¦ +----------------------------------------------+ +-------+ +----------------------------------------------+ ¦ $A003 +---¦ xxxxCCCC ¦ +-------+ ¦ +--+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +---- Select 1K VROM bank at PPU $0400 ¦ ¦ High 4 bits ¦ +----------------------------------------------+ +-------+ +----------------------------------------------+ ¦ $B000 +---¦ xxxxCCCC ¦ +-------+ ¦ +--+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +---- Select 1K VROM bank at PPU $0800 ¦ ¦ Low 4 bits ¦ +----------------------------------------------+ +-------+ +----------------------------------------------+ ¦ $B001 +---¦ xxxxCCCC ¦ +-------+ ¦ +--+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +---- Select 1K VROM bank at PPU $0800 ¦ ¦ High 4 bits ¦ +----------------------------------------------+ +-------+ +----------------------------------------------+ ¦ $B002 +---¦ xxxxCCCC ¦ +-------+ ¦ +--+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +---- Select 1K VROM bank at PPU $0C00 ¦ ¦ Low 4 bits ¦ +----------------------------------------------+ +-------+ +----------------------------------------------+ ¦ $B003 +---¦ xxxxCCCC ¦ +-------+ ¦ +--+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +---- Select 1K VROM bank at PPU $0C00 ¦ ¦ High 4 bits ¦ +----------------------------------------------+ +-------+ +----------------------------------------------+ ¦ $C000 +---¦ xxxxCCCC ¦ +-------+ ¦ +--+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +---- Select 1K VROM bank at PPU $1000 ¦ ¦ Low 4 bits ¦ +----------------------------------------------+ +-------+ +----------------------------------------------+ ¦ $C001 +---¦ xxxxCCCC ¦ +-------+ ¦ +--+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +---- Select 1K VROM bank at PPU $1000 ¦ ¦ High 4 bits ¦ +----------------------------------------------+ +-------+ +----------------------------------------------+ ¦ $C002 +---¦ xxxxCCCC ¦ +-------+ ¦ +--+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +---- Select 1K VROM bank at PPU $1400 ¦ ¦ Low 4 bits ¦ +----------------------------------------------+ +-------+ +----------------------------------------------+ ¦ $C003 +---¦ xxxxCCCC ¦ +-------+ ¦ +--+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +---- Select 1K VROM bank at PPU $1400 ¦ ¦ High 4 bits ¦ +----------------------------------------------+ +-------+ +----------------------------------------------+ ¦ $D000 +---¦ xxxxCCCC ¦ +-------+ ¦ +--+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +---- Select 1K VROM bank at PPU $1800 ¦ ¦ Low 4 bits ¦ +----------------------------------------------+ +-------+ +----------------------------------------------+ ¦ $D001 +---¦ xxxxCCCC ¦ +-------+ ¦ +--+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +---- Select 1K VROM bank at PPU $1800 ¦ ¦ High 4 bits ¦ +----------------------------------------------+ +-------+ +----------------------------------------------+ ¦ $D002 +---¦ xxxxCCCC ¦ +-------+ ¦ +--+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +---- Select 1K VROM bank at PPU $1C00 ¦ ¦ Low 4 bits ¦ +----------------------------------------------+ +-------+ +----------------------------------------------+ ¦ $D003 +---¦ xxxxCCCC ¦ +-------+ ¦ +--+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +---- Select 1K VROM bank at PPU $1C00 ¦ ¦ High 4 bits ¦ +----------------------------------------------+ +-------+ +----------------------------------------------+ ¦ $E000 +---¦ IIIIIIII ¦ +-------+ ¦ +------+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------- Low byte of IRQ counter ¦ +----------------------------------------------+ +-------+ +----------------------------------------------+ ¦ $E001 +---¦ IIIIIIII ¦ +-------+ ¦ +------+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------- Low byte of IRQ counter ¦ +----------------------------------------------+ +-------+ +----------------------------------------------+ ¦ $E002 +---¦ IIIIIIII ¦ +-------+ ¦ +------+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------- High byte of IRQ counter ¦ +----------------------------------------------+ +-------+ +----------------------------------------------+ ¦ $E003 +---¦ IIIIIIII ¦ +-------+ ¦ +------+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------- High byte of IRQ counter ¦ +----------------------------------------------+ +-------+ +----------------------------------------------+ ¦ $F000 +---¦ xxxxxxxI ¦ +-------+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +--- IRQ Control Register 0 ¦ ¦ 1 - Enable IRQ's ¦ +----------------------------------------------+ +-------+ +----------------------------------------------+ ¦ $F001 +---¦ xxxxxxxI ¦ +-------+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +--- IRQ Control Register 1 ¦ ¦ 0 - Disable IRQ's ¦ ¦ 1 - Enable IRQ's ¦ +----------------------------------------------+ +-------+ +----------------------------------------------+ ¦ $F002 +---¦ xxxxxxPM ¦ +-------+ ¦ ¦¦ ¦ ¦ ¦¦ ¦ ¦ ¦¦ ¦ ¦ ¦+--- Mirroring Control ¦ ¦ ¦ 0 - Vertical mirroring ¦ ¦ ¦ 1 - Horizontal mirroring ¦ ¦ ¦ ¦ ¦ +---- One-Screen Mirroring ¦ ¦ 0 - Regular mirroring ¦ ¦ 1 - Mirror pages from PPU $2000 ¦ +----------------------------------------------+ +-------+ +----------------------------------------------+ ¦ $F003 +---¦ EEEEEEEE ¦ +-------+ ¦ +------+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------- External I/O Port ¦ ¦ I am not sure how this works. ¦ +----------------------------------------------+ Notes: - When the cart is first started, the first 16K ROM bank in the cart is loaded into $8000, and the LAST 16K ROM bank is loaded into $C000. - To use the ROM and VROM switching registers, first write the low 4 bits of the intended value into the first register, then the high 4 bits into the second register. For example, to swap 1K VROM bank $B8 to PPU $0400, you'd write $0B into $A003 and $08 to $A002. I think that some cartridges do it the other way around, writing the low nybble first. - VROM should NOT be swapped into PPU $0000 when the cartridge is started or reset, in order to avoid graphics corruption. - The IRQ counter is decremented at each scanline. When it reaches zero, an IRQ interrupt is executed. - This information is untested! I do not have any mapper 18 ROM images, unfortunately. **************************************************************************** +-----------------------+ ¦ Mapper 19: Namcot 106 ¦ +-----------------------+ +--------------------------------------------------------------------+ ¦ This mapper is used on several Japanese titles by Namcot, such as ¦ ¦ Splatterhouse and Family Stadium '90. As far as I know, it was not ¦ ¦ used on U.S. games. ¦ +--------------------------------------------------------------------+ +---------------+ +----------------------------------------------+ ¦ $5000 - $57FF +---¦ IIIIIIII ¦ +---------------+ ¦ +------+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------- Low byte of IRQ counter ¦ +----------------------------------------------+ +---------------+ +----------------------------------------------+ ¦ $5800 - $5FFF +---¦ CIIIIIII ¦ +---------------+ ¦ ¦+-----+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------- High bits of IRQ counter ¦ ¦ ¦ ¦ ¦ +----------- IRQ Control Register ¦ ¦ 0 - Disable IRQ's ¦ ¦ 1 - Enable IRQ's ¦ +----------------------------------------------+ +---------------+ +----------------------------------------------+ ¦ $8000 - $87FF +---¦ CCCCCCCC ¦ +---------------+ ¦ +------+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------- Select 1K VROM bank at PPU $0000 ¦ +----------------------------------------------+ +---------------+ +----------------------------------------------+ ¦ $8800 - $8FFF +---¦ CCCCCCCC ¦ +---------------+ ¦ +------+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------- Select 1K VROM bank at PPU $0400 ¦ +----------------------------------------------+ +---------------+ +----------------------------------------------+ ¦ $9000 - $97FF +---¦ CCCCCCCC ¦ +---------------+ ¦ +------+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------- Select 1K VROM bank at PPU $0800 ¦ +----------------------------------------------+ +---------------+ +----------------------------------------------+ ¦ $9800 - $9FFF +---¦ CCCCCCCC ¦ +---------------+ ¦ +------+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------- Select 1K VROM bank at PPU $0C00 ¦ +----------------------------------------------+ +---------------+ +----------------------------------------------+ ¦ $A000 - $A7FF +---¦ CCCCCCCC ¦ +---------------+ ¦ +------+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------- Select 1K VROM bank at PPU $1000 ¦ +----------------------------------------------+ +---------------+ +----------------------------------------------+ ¦ $A800 - $AFFF +---¦ CCCCCCCC ¦ +---------------+ ¦ +------+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------- Select 1K VROM bank at PPU $1400 ¦ +----------------------------------------------+ +---------------+ +----------------------------------------------+ ¦ $B000 - $B7FF +---¦ CCCCCCCC ¦ +---------------+ ¦ +------+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------- Select 1K VROM bank at PPU $1800 ¦ +----------------------------------------------+ +---------------+ +----------------------------------------------+ ¦ $B800 - $BFFF +---¦ CCCCCCCC ¦ +---------------+ ¦ +------+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------- Select 1K VROM bank at PPU $1C00 ¦ +----------------------------------------------+ +---------------+ +----------------------------------------------+ ¦ $C000 - $C7FF +---¦ CCCCCCCC ¦ +---------------+ ¦ +------+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------- Select 1K VROM bank at PPU $2000 ¦ ¦ A value of $E0 or above will ¦ ¦ use VRAM instead ¦ +----------------------------------------------+ +---------------+ +----------------------------------------------+ ¦ $C800 - $CFFF +---¦ CCCCCCCC ¦ +---------------+ ¦ +------+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------- Select 1K VROM bank at PPU $2400 ¦ ¦ A value of $E0 or above will ¦ ¦ use VRAM instead ¦ +----------------------------------------------+ +---------------+ +----------------------------------------------+ ¦ $D000 - $D7FF +---¦ CCCCCCCC ¦ +---------------+ ¦ +------+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------- Select 1K VROM bank at PPU $2800 ¦ ¦ A value of $E0 or above will ¦ ¦ use VRAM instead ¦ +----------------------------------------------+ +---------------+ +----------------------------------------------+ ¦ $D800 - $DFFF +---¦ CCCCCCCC ¦ +---------------+ ¦ +------+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------- Select 1K VROM bank at PPU $2C00 ¦ ¦ A value of $E0 or above will ¦ ¦ use VRAM instead ¦ +----------------------------------------------+ +---------------+ +----------------------------------------------+ ¦ $E000 - $E7FF +---¦ PPPPPPPP ¦ +---------------+ ¦ +------+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------- Select 8K ROM bank at $8000 ¦ +----------------------------------------------+ +---------------+ +----------------------------------------------+ ¦ $E800 - $EFFF +---¦ PPPPPPPP ¦ +---------------+ ¦ +------+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------- Select 8K ROM bank at $A000 ¦ +----------------------------------------------+ +---------------+ +----------------------------------------------+ ¦ $F000 - $F7FF +---¦ PPPPPPPP ¦ +---------------+ ¦ +------+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------- Select 8K ROM bank at $C000 ¦ +----------------------------------------------+ Notes: - When the cart is first started, the first 16K ROM bank in the cart is loaded into $8000, and the LAST 16K ROM bank is loaded into $C000. The last 8K of ROM is permanently "hard-wired" and cannot be swapped. - The LAST 8K of VROM is swapped into PPU $0000 on reset, if it is present. - The IRQ counter is incremented at each scanline. When it reaches $7FFF, an IRQ interrupt is executed, but there is no reset. This is still preliminary and untested, and I may be wrong on this point. Splatterhouse and several other games run fine without it. - The Namcot 106 mapper supports one or more additional sound channels. BioNES supports these. I have no clue how they work. - Thanks to Mark Knibbs for correcting several misconceptions about this mapper that were included in 0.70. **************************************************************************** +------------------------+ ¦ Mapper 21: Konami VRC4 ¦ +------------------------+ +--------------------------------------------------------------------+ ¦ This mapper is used on several Japanese titles by Konami, such as ¦ ¦ Wai Wai World 2 and Gradius 2. As far as I know, it was not used ¦ ¦ on U.S. games. ¦ +--------------------------------------------------------------------+ +-------+ +----------------------------------------------+ ¦ $8000 +---¦ PPPPPPPP ¦ +-------+ ¦ +------+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------- Select 8K ROM bank at $8000 ¦ ¦ or $C000 (based on bit 1 of ¦ ¦ $9002). ¦ +----------------------------------------------+ +-------+ +----------------------------------------------+ ¦ $9000 +---¦ xxxxxxMM ¦ +-------+ ¦ ¦¦ ¦ ¦ +¦ ¦ ¦ ¦ ¦ ¦ +--- Mirroring/Page Select ¦ ¦ 0 - Vertical mirroring ¦ ¦ 1 - Horizontal mirroring ¦ ¦ 2 - Mirror pages from $2400 ¦ ¦ 3 - Mirror pages from $2000 ¦ +----------------------------------------------+ +-------+ +-----------------------------------------------+ ¦ $9002 +---¦ xxxxxxPS ¦ +-------+ ¦ ¦¦ ¦ ¦ ¦¦ ¦ ¦ ¦¦ ¦ ¦ ¦+--- SaveRAM Toggle ¦ ¦ ¦ 0 - Disable $6000-$7FFF ¦ ¦ ¦ 1 - Enable $6000-$7FFF ¦ ¦ ¦ ¦ ¦ +---- $8000 Switching Mode ¦ ¦ 0 - Switch $8000-$9FFF via $8000 ¦ ¦ 1 - Switch $C000-$DFFF via $8000 ¦ +-----------------------------------------------+ +-------+ +----------------------------------------------+ ¦ $9003 +---¦ EEEEEEEE ¦ +-------+ ¦ +------+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------- External I/O Port ¦ ¦ I am not sure how this works. ¦ +----------------------------------------------+ +-------+ +----------------------------------------------+ ¦ $A000 +---¦ PPPPPPPP ¦ +-------+ ¦ +------+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------- Select 8K ROM bank at $A000 ¦ +----------------------------------------------+ +-------+ +----------------------------------------------+ ¦ $B000 +---¦ xxxxCCCC ¦ +-------+ ¦ +--+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +---- Select 1K VROM bank at PPU $0000 ¦ ¦ Low 4 bits ¦ +----------------------------------------------+ +-------+ +----------------------------------------------+ ¦ $B002 +---¦ xxxxCCCC ¦ +-------+ ¦ +--+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +---- Select 1K VROM bank at PPU $0000 ¦ ¦ High 4 bits ¦ +----------------------------------------------+ +-------+ +----------------------------------------------+ ¦ $B001 +---¦ xxxxCCCC ¦ +-------+ ¦ +--+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +---- Select 1K VROM bank at PPU $0400 ¦ ¦ Low 4 bits ¦ +----------------------------------------------+ +-------+ +----------------------------------------------+ ¦ $B003 +---¦ xxxxCCCC ¦ +-------+ ¦ +--+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +---- Select 1K VROM bank at PPU $0400 ¦ ¦ High 4 bits ¦ +----------------------------------------------+ +-------+ +----------------------------------------------+ ¦ $B004 +---¦ xxxxCCCC ¦ +-------+ ¦ +--+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +---- Select 1K VROM bank at PPU $0400 ¦ ¦ Low 4 bits ¦ +----------------------------------------------+ +-------+ +----------------------------------------------+ ¦ $B006 +---¦ xxxxCCCC ¦ +-------+ ¦ +--+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +---- Select 1K VROM bank at PPU $0400 ¦ ¦ High 4 bits ¦ +----------------------------------------------+ +-------+ +----------------------------------------------+ ¦ $C000 +---¦ xxxxCCCC ¦ +-------+ ¦ +--+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +---- Select 1K VROM bank at PPU $0800 ¦ ¦ Low 4 bits ¦ +----------------------------------------------+ +-------+ +----------------------------------------------+ ¦ $C002 +---¦ xxxxCCCC ¦ +-------+ ¦ +--+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +---- Select 1K VROM bank at PPU $0800 ¦ ¦ High 4 bits ¦ +----------------------------------------------+ +-------+ +----------------------------------------------+ ¦ $C001 +---¦ xxxxCCCC ¦ +-------+ ¦ +--+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +---- Select 1K VROM bank at PPU $0C00 ¦ ¦ Low 4 bits ¦ +----------------------------------------------+ +-------+ +----------------------------------------------+ ¦ $C003 +---¦ xxxxCCCC ¦ +-------+ ¦ +--+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +---- Select 1K VROM bank at PPU $0C00 ¦ ¦ High 4 bits ¦ +----------------------------------------------+ +-------+ +----------------------------------------------+ ¦ $C004 +---¦ xxxxCCCC ¦ +-------+ ¦ +--+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +---- Select 1K VROM bank at PPU $0C00 ¦ ¦ Low 4 bits ¦ +----------------------------------------------+ +-------+ +----------------------------------------------+ ¦ $C006 +---¦ xxxxCCCC ¦ +-------+ ¦ +--+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +---- Select 1K VROM bank at PPU $0C00 ¦ ¦ High 4 bits ¦ +----------------------------------------------+ +-------+ +----------------------------------------------+ ¦ $D000 +---¦ xxxxCCCC ¦ +-------+ ¦ +--+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +---- Select 1K VROM bank at PPU $1000 ¦ ¦ Low 4 bits ¦ +----------------------------------------------+ +-------+ +----------------------------------------------+ ¦ $D002 +---¦ xxxxCCCC ¦ +-------+ ¦ +--+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +---- Select 1K VROM bank at PPU $1000 ¦ ¦ High 4 bits ¦ +----------------------------------------------+ +-------+ +----------------------------------------------+ ¦ $D001 +---¦ xxxxCCCC ¦ +-------+ ¦ +--+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +---- Select 1K VROM bank at PPU $1400 ¦ ¦ Low 4 bits ¦ +----------------------------------------------+ +-------+ +----------------------------------------------+ ¦ $D003 +---¦ xxxxCCCC ¦ +-------+ ¦ +--+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +---- Select 1K VROM bank at PPU $1400 ¦ ¦ High 4 bits ¦ +----------------------------------------------+ +-------+ +----------------------------------------------+ ¦ $D004 +---¦ xxxxCCCC ¦ +-------+ ¦ +--+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +---- Select 1K VROM bank at PPU $1400 ¦ ¦ Low 4 bits ¦ +----------------------------------------------+ +-------+ +----------------------------------------------+ ¦ $D006 +---¦ xxxxCCCC ¦ +-------+ ¦ +--+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +---- Select 1K VROM bank at PPU $1400 ¦ ¦ High 4 bits ¦ +----------------------------------------------+ +-------+ +----------------------------------------------+ ¦ $E000 +---¦ xxxxCCCC ¦ +-------+ ¦ +--+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +---- Select 1K VROM bank at PPU $1800 ¦ ¦ Low 4 bits ¦ +----------------------------------------------+ +-------+ +----------------------------------------------+ ¦ $E002 +---¦ xxxxCCCC ¦ +-------+ ¦ +--+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +---- Select 1K VROM bank at PPU $1800 ¦ ¦ High 4 bits ¦ +----------------------------------------------+ +-------+ +----------------------------------------------+ ¦ $E001 +---¦ xxxxCCCC ¦ +-------+ ¦ +--+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +---- Select 1K VROM bank at PPU $1C00 ¦ ¦ Low 4 bits ¦ +----------------------------------------------+ +-------+ +----------------------------------------------+ ¦ $E003 +---¦ xxxxCCCC ¦ +-------+ ¦ +--+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +---- Select 1K VROM bank at PPU $1C00 ¦ ¦ High 4 bits ¦ +----------------------------------------------+ +-------+ +----------------------------------------------+ ¦ $E004 +---¦ xxxxCCCC ¦ +-------+ ¦ +--+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +---- Select 1K VROM bank at PPU $1C00 ¦ ¦ Low 4 bits ¦ +----------------------------------------------+ +-------+ +----------------------------------------------+ ¦ $E006 +---¦ xxxxCCCC ¦ +-------+ ¦ +--+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +---- Select 1K VROM bank at PPU $1C00 ¦ ¦ High 4 bits ¦ +----------------------------------------------+ +-------+ +----------------------------------------------+ ¦ $F000 +---¦ IIIIIIII ¦ +-------+ ¦ +------+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------- IRQ Counter Register ¦ ¦ The IRQ countdown value is ¦ ¦ stored here. ¦ +----------------------------------------------+ +-------+ +----------------------------------------------+ ¦ $F001 +---¦ IIIIIIII ¦ +-------+ ¦ +------+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------- IRQ Counter Register ¦ ¦ The IRQ countdown value is ¦ ¦ stored here. (Apparently is ¦ ¦ the same register as $F000.) ¦ +----------------------------------------------+ +-------+ +----------------------------------------------+ ¦ $F002 +---¦ xxxxxxII ¦ +-------+ ¦ ¦¦ ¦ ¦ +¦ ¦ ¦ ¦ ¦ ¦ +--- IRQ Control Register 0 ¦ ¦ 0 - Disable IRQ's ¦ ¦ 2 - Enable IRQ's ¦ ¦ 3 - Enable IRQ's ¦ +----------------------------------------------+ +-------+ +----------------------------------------------+ ¦ $F003 +---¦ xxxxxxxx ¦ +-------+ ¦ +------+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------- IRQ Control Register 1 ¦ ¦ Any value written here will ¦ ¦ reset the IRQ counter to zero. ¦ +----------------------------------------------+ Notes: - When the cart is first started, the first 16K ROM bank in the cart is loaded into $8000, and the LAST 16K ROM bank is loaded into $C000. The last 8K of ROM is permanently "hard-wired" and cannot be swapped. - VROM should NOT be swapped into PPU $0000 when the cartridge is started or reset, in order to avoid graphics corruption. - To use the VROM switching registers, first write the low 4 bits of the intended value into the first register, then the high 4 bits into the second register. For example, to swap 1K VROM bank $B8 to PPU $0800, you'd write $0B into $C002 and $08 to $C000. I think that some cartridges do it the other way around, writing the low nybble first. Note that this is actually two different varieties of mapper combined into one. Gradius 2 uses the pairs 0-2 and 1-3. Other games (i.e. Wai Wai World 2) use the pairs 0-2 and 4-6. In the .NES format these two are "shoe-horned" together. fwNES refers to the Gradius 2 style as mapper #25 and the Wai Wai World 2 style as mapper #21. Marat's standard lists both as #21. - The IRQ counter is incremented each 113.75 cycles, which is equivalent to one scanline. Unlike a real scanline counter, this "scanline-emulated" counter apparently continues to run during VBlank. When the IRQ counter value reaches $FF, IRQ's will be set off, and the counter is reset. **************************************************************************** +-------------------------------+ ¦ Mapper 22: Konami VRC2 type A ¦ +-------------------------------+ +--------------------------------------------------------------------+ ¦ This mapper is used on the Japanese title TwinBee 3 by Konami. ¦ +--------------------------------------------------------------------+ +-------+ +----------------------------------------------+ ¦ $8000 +---¦ PPPPPPPP ¦ +-------+ ¦ +------+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------- Select 8K ROM bank at $8000 ¦ +----------------------------------------------+ +-------+ +----------------------------------------------+ ¦ $9000 +---¦ xxxxxxMM ¦ +-------+ ¦ ¦¦ ¦ ¦ +¦ ¦ ¦ ¦ ¦ ¦ +--- Mirroring/Page Select ¦ ¦ 0 - Vertical mirroring ¦ ¦ 1 - Horizontal mirroring ¦ ¦ 2 - Mirror pages from $2400 ¦ ¦ 3 - Mirror pages from $2000 ¦ ¦ NOTE: I don't have any confidence in the ¦ ¦ accuracy of this information. ¦ +----------------------------------------------+ +-------+ +----------------------------------------------+ ¦ $A000 +---¦ PPPPPPPP ¦ +-------+ ¦ +------+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------- Select 8K ROM bank at $A000 ¦ +----------------------------------------------+ +-------+ +----------------------------------------------+ ¦ $B000 +---¦ CCCCCCCC ¦ +-------+ ¦ +------+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------- Select 1K VROM bank at PPU $0000 ¦ ¦ Shift this value right one bit ¦ +----------------------------------------------+ +-------+ +----------------------------------------------+ ¦ $B001 +---¦ CCCCCCCC ¦ +-------+ ¦ +------+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------- Select 1K VROM bank at PPU $0400 ¦ ¦ Shift this value right one bit ¦ +----------------------------------------------+ +-------+ +----------------------------------------------+ ¦ $C000 +---¦ CCCCCCCC ¦ +-------+ ¦ +------+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------- Select 1K VROM bank at PPU $0800 ¦ ¦ Shift this value right one bit ¦ +----------------------------------------------+ +-------+ +----------------------------------------------+ ¦ $C001 +---¦ CCCCCCCC ¦ +-------+