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 ¦ +-------+ ¦ +------+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------- Select 1K VROM bank at PPU $0C00 ¦ ¦ Shift this value right one bit ¦ +----------------------------------------------+ +-------+ +----------------------------------------------+ ¦ $D000 +---¦ CCCCCCCC ¦ +-------+ ¦ +------+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------- Select 1K VROM bank at PPU $1000 ¦ ¦ Shift this value right one bit ¦ +----------------------------------------------+ +-------+ +----------------------------------------------+ ¦ $D001 +---¦ CCCCCCCC ¦ +-------+ ¦ +------+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------- Select 1K VROM bank at PPU $1400 ¦ ¦ Shift this value right one bit ¦ +----------------------------------------------+ +-------+ +----------------------------------------------+ ¦ $E000 +---¦ CCCCCCCC ¦ +-------+ ¦ +------+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------- Select 1K VROM bank at PPU $1800 ¦ ¦ Shift this value right one bit ¦ +----------------------------------------------+ +-------+ +----------------------------------------------+ ¦ $E001 +---¦ CCCCCCCC ¦ +-------+ ¦ +------+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------- Select 1K VROM bank at PPU $1C00 ¦ ¦ Shift this value right one bit ¦ +----------------------------------------------+ 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 16K of ROM is permanently "hard-wired" and cannot be swapped. - On reset, the first 8K of VROM is swapped into PPU $0000. **************************************************************************** +-------------------------------+ ¦ Mapper 23: Konami VRC2 type B ¦ +-------------------------------+ +--------------------------------------------------------------------+ ¦ This mapper is used on several Japanese titles by Konami, such as ¦ ¦ Contra Japanese and Getsufuu Maden. As far as I know, it was not ¦ ¦ used on U.S. games. ¦ +--------------------------------------------------------------------+ +-------+ +----------------------------------------------+ ¦ $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 +---¦ xxxxCCCC ¦ +-------+ ¦ +--+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +---- Select 1K VROM bank at PPU $0000 ¦ ¦ Low 4 bits ¦ +----------------------------------------------+ +-------+ +----------------------------------------------+ ¦ $B001 +---¦ xxxxCCCC ¦ +-------+ ¦ +--+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +---- Select 1K VROM bank at PPU $0000 ¦ ¦ High 4 bits ¦ +----------------------------------------------+ +-------+ +----------------------------------------------+ ¦ $B002 +---¦ xxxxCCCC ¦ +-------+ ¦ +--+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +---- Select 1K VROM bank at PPU $0400 ¦ ¦ Low 4 bits ¦ +----------------------------------------------+ +-------+ +----------------------------------------------+ ¦ $B003 +---¦ xxxxCCCC ¦ +-------+ ¦ +--+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +---- Select 1K VROM bank at PPU $0400 ¦ ¦ High 4 bits ¦ +----------------------------------------------+ +-------+ +----------------------------------------------+ ¦ $C000 +---¦ xxxxCCCC ¦ +-------+ ¦ +--+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +---- Select 1K VROM bank at PPU $0800 ¦ ¦ Low 4 bits ¦ +----------------------------------------------+ +-------+ +----------------------------------------------+ ¦ $C001 +---¦ xxxxCCCC ¦ +-------+ ¦ +--+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +---- Select 1K VROM bank at PPU $0800 ¦ ¦ High 4 bits ¦ +----------------------------------------------+ +-------+ +----------------------------------------------+ ¦ $C002 +---¦ xxxxCCCC ¦ +-------+ ¦ +--+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +---- Select 1K VROM bank at PPU $0C00 ¦ ¦ Low 4 bits ¦ +----------------------------------------------+ +-------+ +----------------------------------------------+ ¦ $C003 +---¦ xxxxCCCC ¦ +-------+ ¦ +--+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +---- Select 1K VROM bank at PPU $0C00 ¦ ¦ High 4 bits ¦ +----------------------------------------------+ +-------+ +----------------------------------------------+ ¦ $D000 +---¦ xxxxCCCC ¦ +-------+ ¦ +--+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +---- Select 1K VROM bank at PPU $1000 ¦ ¦ Low 4 bits ¦ +----------------------------------------------+ +-------+ +----------------------------------------------+ ¦ $D001 +---¦ xxxxCCCC ¦ +-------+ ¦ +--+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +---- Select 1K VROM bank at PPU $1000 ¦ ¦ High 4 bits ¦ +----------------------------------------------+ +-------+ +----------------------------------------------+ ¦ $D002 +---¦ xxxxCCCC ¦ +-------+ ¦ +--+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +---- Select 1K VROM bank at PPU $1400 ¦ ¦ Low 4 bits ¦ +----------------------------------------------+ +-------+ +----------------------------------------------+ ¦ $D003 +---¦ xxxxCCCC ¦ +-------+ ¦ +--+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +---- Select 1K VROM bank at PPU $1400 ¦ ¦ High 4 bits ¦ +----------------------------------------------+ +-------+ +----------------------------------------------+ ¦ $E000 +---¦ xxxxCCCC ¦ +-------+ ¦ +--+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +---- Select 1K VROM bank at PPU $1800 ¦ ¦ Low 4 bits ¦ +----------------------------------------------+ +-------+ +----------------------------------------------+ ¦ $E001 +---¦ xxxxCCCC ¦ +-------+ ¦ +--+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +---- Select 1K VROM bank at PPU $1800 ¦ ¦ High 4 bits ¦ +----------------------------------------------+ +-------+ +----------------------------------------------+ ¦ $E002 +---¦ xxxxCCCC ¦ +-------+ ¦ +--+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +---- Select 1K VROM bank at PPU $1C00 ¦ ¦ Low 4 bits ¦ +----------------------------------------------+ +-------+ +----------------------------------------------+ ¦ $E003 +---¦ xxxxCCCC ¦ +-------+ ¦ +--+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +---- Select 1K VROM bank at PPU $1C00 ¦ ¦ High 4 bits ¦ +----------------------------------------------+ 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 $C001 and $08 to $C000. I think that some cartridges do it the other way around, writing the low nybble first. **************************************************************************** +------------------------+ ¦ Mapper 24: Konami VRC6 ¦ +------------------------+ +--------------------------------------------------------------------+ ¦ This mapper is used on several Japanese titles by Konami, such as ¦ ¦ Akumajo Dracula [Castlevania] 3. As far as I know, it was not used ¦ ¦ on U.S. games. ¦ +--------------------------------------------------------------------+ +-------+ +----------------------------------------------+ ¦ $8000 +---¦ PPPPPPPP ¦ +-------+ ¦ +------+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------- Select 16K ROM bank at $8000 ¦ +----------------------------------------------+ +-------+ +--------------------------------------------+ ¦ $B003 +---¦ xxUxMMxx ¦ +-------+ ¦ ¦ ¦¦ ¦ ¦ ¦ +¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +--- Mirroring/Page Select ¦ ¦ ¦ 0 - Horizontal mirroring ¦ ¦ ¦ 1 - Vertical mirroring ¦ ¦ ¦ 2 - Mirror pages from $2000 ¦ ¦ ¦ 3 - Mirror pages from $2400 ¦ ¦ ¦ ¦ ¦ +------ Unknown, but usually set to 1 ¦ +--------------------------------------------+ +-------+ +----------------------------------------------+ ¦ $C000 +---¦ PPPPPPPP ¦ +-------+ ¦ +------+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------- Select 8K ROM bank at $C000 ¦ +----------------------------------------------+ +-------+ +----------------------------------------------+ ¦ $D000 +---¦ CCCCCCCC ¦ +-------+ ¦ +------+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------- Select 1K VROM bank at PPU $0000 ¦ +----------------------------------------------+ +-------+ +----------------------------------------------+ ¦ $D001 +---¦ CCCCCCCC ¦ +-------+ ¦ +------+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------- Select 1K VROM bank at PPU $0400 ¦ +----------------------------------------------+ +-------+ +----------------------------------------------+ ¦ $D002 +---¦ CCCCCCCC ¦ +-------+ ¦ +------+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------- Select 1K VROM bank at PPU $0800 ¦ +----------------------------------------------+ +-------+ +----------------------------------------------+ ¦ $D003 +---¦ CCCCCCCC ¦ +-------+ ¦ +------+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------- Select 1K VROM bank at PPU $0C00 ¦ +----------------------------------------------+ +-------+ +----------------------------------------------+ ¦ $E000 +---¦ CCCCCCCC ¦ +-------+ ¦ +------+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------- Select 1K VROM bank at PPU $1000 ¦ +----------------------------------------------+ +-------+ +----------------------------------------------+ ¦ $E001 +---¦ CCCCCCCC ¦ +-------+ ¦ +------+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------- Select 1K VROM bank at PPU $1400 ¦ +----------------------------------------------+ +-------+ +----------------------------------------------+ ¦ $E002 +---¦ CCCCCCCC ¦ +-------+ ¦ +------+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------- Select 1K VROM bank at PPU $1800 ¦ +----------------------------------------------+ +-------+ +----------------------------------------------+ ¦ $E003 +---¦ CCCCCCCC ¦ +-------+ ¦ +------+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------- Select 1K VROM bank at PPU $1C00 ¦ +----------------------------------------------+ +-------+ +----------------------------------------------+ ¦ $F000 +---¦ IIIIIIII ¦ +-------+ ¦ +------+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------- IRQ Counter Register ¦ ¦ The IRQ countdown value is ¦ ¦ stored here. ¦ +----------------------------------------------+ +-------+ +----------------------------------------------+ ¦ $F001 +---¦ xxxxxxxI ¦ +-------+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +--- IRQ Control Register 0 ¦ ¦ 0 - Disable IRQ's ¦ ¦ 1 - Enable IRQ's ¦ +----------------------------------------------+ +-------+ +----------------------------------------------+ ¦ $F002 +---¦ 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. - 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. - There are more registers which I don't understand the usage of and which are not detailed here. There's also a custom sound chip, the operation of which is unknown to me. As always, any extra information is welcome. **************************************************************************** +-----------------------+ ¦ Mapper 32: Irem G-101 ¦ +-----------------------+ +--------------------------------------------------------------------+ ¦ This mapper is used on several Japanese titles by Irem, such as ¦ ¦ ImageFight 2. As far as I know, it was not used on U.S. games. ¦ ¦ +--------------------------------------------------------------------+ +-------+ +----------------------------------------------+ ¦ $8FFF +---¦ PPPPPPPP ¦ +-------+ ¦ +------+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------- Select 8K ROM bank at $8000 ¦ ¦ or $C000 (based on bit 1 of ¦ ¦ $9FFF). ¦ +----------------------------------------------+ +-------+ +-----------------------------------------------+ ¦ $9FFF +---¦ xxxxxxPS ¦ +-------+ ¦ ¦¦ ¦ ¦ ¦¦ ¦ ¦ ¦¦ ¦ ¦ ¦+--- Mirroring Switch ¦ ¦ ¦ 0 - Horizontal mirroring ¦ ¦ ¦ 1 - Vertical mirroring ¦ ¦ ¦ ¦ ¦ +---- $8FFF Switching Mode ¦ ¦ 0 - Switch $8000-$9FFF via $8FFF ¦ ¦ 1 - Switch $C000-$DFFF via $8FFF ¦ +-----------------------------------------------+ +-------+ +----------------------------------------------+ ¦ $AFFF +---¦ PPPPPPPP ¦ +-------+ ¦ +------+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------- Select 8K ROM bank at $A000 ¦ +----------------------------------------------+ +-------+ +----------------------------------------------+ ¦ $BFF0 +---¦ CCCCCCCC ¦ +-------+ ¦ +------+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------- Select 1K VROM bank at PPU $0000 ¦ +----------------------------------------------+ +-------+ +----------------------------------------------+ ¦ $BFF1 +---¦ CCCCCCCC ¦ +-------+ ¦ +------+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------- Select 1K VROM bank at PPU $0400 ¦ +----------------------------------------------+ +-------+ +----------------------------------------------+ ¦ $BFF2 +---¦ CCCCCCCC ¦ +-------+ ¦ +------+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------- Select 1K VROM bank at PPU $0800 ¦ +----------------------------------------------+ +-------+ +----------------------------------------------+ ¦ $BFF3 +---¦ CCCCCCCC ¦ +-------+ ¦ +------+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------- Select 1K VROM bank at PPU $0C00 ¦ +----------------------------------------------+ +-------+ +----------------------------------------------+ ¦ $BFF4 +---¦ CCCCCCCC ¦ +-------+ ¦ +------+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------- Select 1K VROM bank at PPU $1000 ¦ +----------------------------------------------+ +-------+ +----------------------------------------------+ ¦ $BFF5 +---¦ CCCCCCCC ¦ +-------+ ¦ +------+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------- Select 1K VROM bank at PPU $1400 ¦ +----------------------------------------------+ +-------+ +----------------------------------------------+ ¦ $BFF6 +---¦ CCCCCCCC ¦ +-------+ ¦ +------+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------- Select 1K VROM bank at PPU $1800 ¦ +----------------------------------------------+ +-------+ +----------------------------------------------+ ¦ $BFF7 +---¦ 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. 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. **************************************************************************** +-------------------------+ ¦ Mapper 33: Taito TC0190 ¦ +-------------------------+ +--------------------------------------------------------------------+ ¦ This mapper is used on several Japanese titles by Taito, such as ¦ ¦ Pon Poko Pon. As far as I know, it was not used on U.S. games. ¦ ¦ +--------------------------------------------------------------------+ +-------+ +----------------------------------------------+ ¦ $8000 +---¦ PPPPPPPP ¦ +-------+ ¦ +------+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------- Select 8K ROM bank at $8000 ¦ +----------------------------------------------+ +-------+ +----------------------------------------------+ ¦ $8001 +---¦ PPPPPPPP ¦ +-------+ ¦ +------+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------- Select 8K ROM bank at $A000 ¦ +----------------------------------------------+ +-------+ +----------------------------------------------+ ¦ $8002 +---¦ CCCCCCCC ¦ +-------+ ¦ +------+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------- Select 2K VROM bank at PPU $0000 ¦ +----------------------------------------------+ +-------+ +----------------------------------------------+ ¦ $8003 +---¦ CCCCCCCC ¦ +-------+ ¦ +------+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------- Select 2K VROM bank at PPU $0800 ¦ +----------------------------------------------+ +-------+ +----------------------------------------------+ ¦ $A000 +---¦ CCCCCCCC ¦ +-------+ ¦ +------+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------- Select 1K VROM bank at PPU $1000 ¦ +----------------------------------------------+ +-------+ +----------------------------------------------+ ¦ $A001 +---¦ CCCCCCCC ¦ +-------+ ¦ +------+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------- Select 1K VROM bank at PPU $1400 ¦ +----------------------------------------------+ +-------+ +----------------------------------------------+ ¦ $A002 +---¦ CCCCCCCC ¦ +-------+ ¦ +------+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------- Select 1K VROM bank at PPU $1800 ¦ +----------------------------------------------+ +-------+ +----------------------------------------------+ ¦ $A003 +---¦ CCCCCCCC ¦ +-------+ ¦ +------+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------- Select 1K VROM bank at PPU $1C00 ¦ +----------------------------------------------+ +-------+ +----------------------------------------------+ ¦ $C000 +---¦ UUUUUUUU ¦ +-------+ ¦ +------+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------- Unknown ¦ +----------------------------------------------+ +-------+ +----------------------------------------------+ ¦ $C001 +---¦ UUUUUUUU ¦ +-------+ ¦ +------+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------- Unknown ¦ +----------------------------------------------+ +-------+ +----------------------------------------------+ ¦ $E000 +---¦ RRRRRRRR ¦ +-------+ ¦ +------+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------- Reserved ¦ +----------------------------------------------+ 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 16K 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. **************************************************************************** +-------------------+ ¦ Mapper 34: Nina-1 ¦ +-------------------+ +--------------------------------------------------------------------+ ¦ These two mappers were used on two U.S. games: Deadly Towers and ¦ ¦ Impossible Mission ][. ¦ +--------------------------------------------------------------------+ +-------+ +----------------------------------------------+ ¦ $7FFD +---¦ PPPPPPPP ¦ +-------+ ¦ +------+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------- Select 32K ROM bank at $8000 ¦ +----------------------------------------------+ +-------+ +----------------------------------------------+ ¦ $7FFE +---¦ CCCCCCCC ¦ +-------+ ¦ +------+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------- Select 4K VROM bank at PPU $0000 ¦ +----------------------------------------------+ +-------+ +----------------------------------------------+ ¦ $7FFF +---¦ CCCCCCCC ¦ +-------+ ¦ +------+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------- Select 4K VROM bank at PPU $1000 ¦ +----------------------------------------------+ +---------------+ +------------------------------------------+ ¦ $8000 - $FFFF +---------¦ PPPPPPPP ¦ +---------------+ ¦ +------+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------- Select 32K ROM bank at $8000 ¦ +------------------------------------------+ Notes: - The first 32K ROM bank is swapped into $8000 when the cart is started or reset. - Carts without VROM (i.e. Deadly Towers) will have 8K of VRAM at PPU $0000. Carts with VROM (Impossible Mission 2) have the first 8K swapped in at reset. Apparently, this mapper is actually a combination of two actual separate mappers. Deadly Towers uses only the $8000-$FFFF switching, and Impossible Mission 2 uses only the three lower registers. - This mapper is fairly easy to implement in a NES emulator. **************************************************************************** +---------------------------+ ¦ Mapper 64: Tengen RAMBO-1 ¦ +---------------------------+ +--------------------------------------------------------------------+ ¦ This mapper is used on several U.S. unlicensed titles by Tengen. ¦ ¦ They include Shinobi, Klax, and Skull & Crossbones. Thanks to D ¦ ¦ for hacking this mapper. ¦ +--------------------------------------------------------------------+ +-------+ +------------------------------------------------------+ ¦ $8000 +---¦ CPxxNNNN ¦ +-------+ ¦ ¦¦ +--+ ¦ ¦ ¦¦ +--- 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 ¦ ¦ ¦¦ 8 - Select 1K VROM page at PPU $0400 ¦ ¦ ¦¦ 9 - Select 1K VROM page at PPU $0C00 ¦ ¦ ¦¦ 15 - Select third switchable ROM page ¦ ¦ ¦¦ ¦ ¦ ¦+-------- PRG Address Select Command Number ¦ ¦ ¦ -#6- -#7- -#15- ¦ ¦ ¦ 0 - Enable swapping at $8000/$A000/$C000 ¦ ¦ ¦ 1 - Enable swapping at $A000/$C000/$8000 ¦ ¦ ¦ ¦ ¦ +--------- 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. ¦ +----------------------------------------------+ Notes: - Two of the 8K ROM banks in the PRG area are switchable. The last page is "hard-wired" to the last 8K bank in the cart. - At reset, all four 8K banks are set to the last 8K bank in the cart. - 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 65: Irem H-3001 ¦ +------------------------+ +--------------------------------------------------------------------+ ¦ This mapper is used on several Japanese titles by Irem, such as ¦ ¦ Daiku no Gensan 2. As far as I know, it was not used on U.S. games.¦ ¦ +--------------------------------------------------------------------+ +-------+ +-----------------------------------------+ ¦ $8000 +---¦ PPPPPPPP ¦ +-------+ ¦ +------+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------- Select 8K ROM bank at $8000 ¦ +-----------------------------------------+ +-------+ +--------------------------------------------+ ¦ $9003 +---¦ MMMMMMMM ¦ +-------+ ¦ +------+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------- Mirroring ¦ ¦ I am not sure how this works. ¦ +--------------------------------------------+ +-------+ +--------------------------------------------+ ¦ $9005 +---¦ IIIIIIII ¦ +-------+ ¦ +------+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------- IRQ Control ¦ ¦ I am not sure how this works. ¦ +--------------------------------------------+ +-------+ +--------------------------------------------+ ¦ $9006 +---¦ IIIIIIII ¦ +-------+ ¦ +------+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------- IRQ Control ¦ ¦ I am not sure how this works. ¦ +--------------------------------------------+ +-------+ +----------------------------------------------+ ¦ $A000 +---¦ PPPPPPPP ¦ +-------+ ¦ +------+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------- Select 8K ROM bank at $A000 ¦ +----------------------------------------------+ +-------+ +----------------------------------------------+ ¦ $B000 +---¦ CCCCCCCC ¦ +-------+ ¦ +------+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------- Select 1K VROM bank at PPU $0000 ¦ +----------------------------------------------+ +-------+ +----------------------------------------------+ ¦ $B001 +---¦ CCCCCCCC ¦ +-------+ ¦ +------+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------- Select 1K VROM bank at PPU $0400 ¦ +----------------------------------------------+ +-------+ +----------------------------------------------+ ¦ $B002 +---¦ CCCCCCCC ¦ +-------+ ¦ +------+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------- Select 1K VROM bank at PPU $0800 ¦ +----------------------------------------------+ +-------+ +----------------------------------------------+ ¦ $B003 +---¦ CCCCCCCC ¦ +-------+ ¦ +------+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------- Select 1K VROM bank at PPU $0C00 ¦ +----------------------------------------------+ +-------+ +----------------------------------------------+ ¦ $B004 +---¦ CCCCCCCC ¦ +-------+ ¦ +------+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------- Select 1K VROM bank at PPU $1000 ¦ +----------------------------------------------+ +-------+ +----------------------------------------------+ ¦ $B005 +---¦ CCCCCCCC ¦ +-------+ ¦ +------+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------- Select 1K VROM bank at PPU $1400 ¦ +----------------------------------------------+ +-------+ +----------------------------------------------+ ¦ $B006 +---¦ CCCCCCCC ¦ +-------+ ¦ +------+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------- Select 1K VROM bank at PPU $1800 ¦ +----------------------------------------------+ +-------+ +----------------------------------------------+ ¦ $B007 +---¦ CCCCCCCC ¦ +-------+ ¦ +------+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------- Select 1K VROM bank at PPU $1C00 ¦ +----------------------------------------------+ +-------+ +----------------------------------------------+ ¦ $C000 +---¦ 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. - VROM should NOT be swapped into PPU $0000 when the cartridge is started or reset, in order to avoid graphics corruption. - Does anyone have info on mirroring or IRQ's for this mapper? **************************************************************************** +------------------+ ¦ Mapper 66: GNROM ¦ +------------------+ +--------------------------------------------------------------------+ ¦ This mapper is used on several Japanese titles, such as ¦ ¦ DragonBall, and on U.S. titles such as Gumshoe and Dragon Power. ¦ ¦ +--------------------------------------------------------------------+ +---------------+ +-----------------------------------------------+ ¦ $8000 - $FFFF +----¦ xxPPxxCC ¦ +---------------+ ¦ ¦¦ ¦¦ ¦ ¦ +¦ +----- Select 8K VROM bank at PPU $0000 ¦ ¦ ¦ ¦ ¦ +-------- Select 32K ROM bank at $8000 ¦ +-----------------------------------------------+ 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. - This mapper is used on the DragonBall (NOT DragonBallZ) NES game. Contrary to popular belief, this mapper is NOT mapper 16! **************************************************************************** +------------------------------+ ¦ Mapper 68: Sunsoft Mapper #4 ¦ +------------------------------+ +---------------------------------------------------------------------+ ¦ This mapper is used on the Japanese title AfterBurner ][ by Sunsoft.¦ +---------------------------------------------------------------------+ +-------+ +----------------------------------------------+ ¦ $8000 +---¦ CCCCCCCC ¦ +-------+ ¦ +------+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------- Select 2K VROM bank at PPU $0000 ¦ +----------------------------------------------+ +-------+ +----------------------------------------------+ ¦ $9000 +---¦ CCCCCCCC ¦ +-------+ ¦ +------+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------- Select 2K VROM bank at PPU $0800 ¦ +----------------------------------------------+ +-------+ +----------------------------------------------+ ¦ $A000 +---¦ CCCCCCCC ¦ +-------+ ¦ +------+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------- Select 2K VROM bank at PPU $1000 ¦ +----------------------------------------------+ +-------+ +----------------------------------------------+ ¦ $B000 +---¦ CCCCCCCC ¦ +-------+ ¦ +------+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------- Select 2K VROM bank at PPU $1800 ¦ +----------------------------------------------+ +-------+ +----------------------------------------------+ ¦ $E000 +---¦ xxxxxxMM ¦ +-------+ ¦ ¦¦ ¦ ¦ +¦ ¦ ¦ ¦ ¦ ¦ +--- Mirroring/Page Select ¦ ¦ 0 - Horizontal mirroring ¦ ¦ 1 - Vertical mirroring ¦ ¦ 2 - Mirror pages from $2000 ¦ ¦ 3 - Mirror pages from $2400 ¦ +----------------------------------------------+ +-------+ +----------------------------------------------+ ¦ $F000 +---¦ 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. The last 16K of ROM is permanently "hard-wired" and cannot be swapped. **************************************************************************** +--------------------------+ ¦ Mapper 69: Sunsoft FME-7 ¦ +--------------------------+ +--------------------------------------------------------------------+ ¦ This mapper is used on several Japanese titles, such as Batman ¦ ¦ Japanese, and on the U.S. title Batman: Return of the Joker. ¦ ¦ Thanks to D for hacking this mapper. ¦ +--------------------------------------------------------------------+ +-------+ +---------------------------------------------------+ ¦ $8000 +---¦ xxxxRRRR ¦ +-------+ ¦ +--+ ¦ ¦ +--- Register Number ¦ ¦ 0 - Select 1K VROM page at PPU $0000 ¦ ¦ 1 - Select 1K VROM page at PPU $0400 ¦ ¦ 2 - Select 1K VROM page at PPU $0800 ¦ ¦ 3 - Select 1K VROM page at PPU $0C00 ¦ ¦ 4 - Select 1K VROM page at PPU $1000 ¦ ¦ 5 - Select 1K VROM page at PPU $1400 ¦ ¦ 6 - Select 1K VROM page at PPU $1800 ¦ ¦ 7 - Select 1K VROM page at PPU $1C00 ¦ ¦ 8 - Select 8K ROM page at $6000 ¦ ¦ 9 - Select 8K ROM page at $8000 ¦ ¦ 10 - Select 8K ROM page at $A000 ¦ ¦ 11 - Select 8K ROM page at $C000 ¦ ¦ 12 - Select mirroring ¦ ¦ 13 - IRQ control ¦ ¦ 14 - Low byte of scanline counter ¦ ¦ 15 - High byte of scanline counter ¦ ¦ ¦ ¦ NOTE: I am not sure if the information for ¦ ¦ registers 8, 12, 13, 14, and 15 is correct.¦ ¦ ¦ +---------------------------------------------------+ +-------+ +----------------------------------------------+ ¦ $A000 +---¦ VVVVVVVV ¦ +-------+ ¦ +------+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------- Register Write ¦ ¦ Activates the command number ¦ ¦ written to bits 0-3 of $8000 ¦ +----------------------------------------------+ Notes: - The last 8K ROM page is permanently "hard-wired" to the last 8K ROM page in the cart. - This mapper is deployed in a manner similar to that of MMC3. First a register number is written to $8000 and then the register chosen can be accessed via $A000. - Command #8 works in the following manner. The upper 2 bits select what is swapped into $6000-$7FFF. If bit 6 is 0, it will be ROM, selected from the other bits of the register. If it's 1, then the contents depend on bit 7. In this case, if bit 7 is 1, it will be WRAM. If it's 0, it will be pseudo-random numbers (this still hasn't been figured out). **************************************************************************** +---------------------+ ¦ Mapper 71: Camerica ¦ +---------------------+ +--------------------------------------------------------------------+ ¦ This mapper is used on Camerica's unlicensed NES carts, including ¦ ¦ Firehawk and Linus Spacehead. ¦ +--------------------------------------------------------------------+ +---------------+ +------------------------------------------+ ¦ $8000 - $BFFF +---------¦ UUUUUUUU ¦ +---------------+ ¦ +------+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------- Unknown ¦ +------------------------------------------+ +---------------+ +------------------------------------------+ ¦ $C000 - $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, as far as is known. - This mapper has no provisions for VROM; therefore, all carts using it have 8K of VRAM at PPU $0000. - Many ROMs from these games are incorrectly defined as mapper #2. Marat has still not assigned an "official" .NES mapper number for this mapper. **************************************************************************** +----------------------------+ ¦ Mapper 78: Irem 74HC161/32 ¦ +----------------------------+ +-----------------------------------------------+ ¦ Several Japanese Irem titles use this mapper. ¦ +-----------------------------------------------+ +---------------+ +-----------------------------------------------+ ¦ $8000 - $FFFF +----¦ CCCCPPPP ¦ +---------------+ ¦ ¦ ¦¦ ¦ ¦ ¦ +--¦+------ Select 16K ROM bank at $8000 ¦ ¦ ¦ ¦ ¦ +------- Select 8K VROM bank at PPU $0000 ¦ +-----------------------------------------------+ 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 16K bank is permanently "hard-wired" to $C000, and it cannot be swapped. - The first 8K VROM bank may or may not be swapped into $0000 when the cart is reset. I have no ROM images to test. **************************************************************************** +-------------------+ ¦ Mapper 91: HK-SF3 ¦ +-------------------+ +--------------------------------------------------------------------+ ¦ This mapper is used on the pirate cart with a title screen reading ¦ ¦ "Street Fighter 3". It may or may not have been used in other ¦ ¦ bootleg games. Thanks to Mark Knibbs for information regarding ¦ ¦ this mapper. ¦ +--------------------------------------------------------------------+ +-------+ +----------------------------------------------+ ¦ $6000 +---¦ CCCCCCCC ¦ +-------+ ¦ +------+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------- Select 2K VROM bank at PPU $0000 ¦ +----------------------------------------------+ +-------+ +----------------------------------------------+ ¦ $6001 +---¦ CCCCCCCC ¦ +-------+ ¦ +------+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------- Select 2K VROM bank at PPU $0800 ¦ +----------------------------------------------+ +-------+ +----------------------------------------------+ ¦ $6002 +---¦ CCCCCCCC ¦ +-------+ ¦ +------+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------- Select 2K VROM bank at PPU $1000 ¦ +----------------------------------------------+ +-------+ +----------------------------------------------+ ¦ $6003 +---¦ CCCCCCCC ¦ +-------+ ¦ +------+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------- Select 2K VROM bank at PPU $1800 ¦ +----------------------------------------------+ +-------+ +-----------------------------------------+ ¦ $7000 +---¦ PPPPPPPP ¦ +-------+ ¦ +------+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------- Select 8K ROM bank at $8000 ¦ +-----------------------------------------+ +-------+ +-----------------------------------------+ ¦ $7001 +---¦ PPPPPPPP ¦ +-------+ ¦ +------+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------- Select 8K ROM bank at $A000 ¦ +-----------------------------------------+ Notes: - When the cart is first started, the LAST 16K ROM bank in the cart is loaded into both $8000 and $C000. The 16K at $C000 is permanently "hard-wired" to $C000 and cannot be swapped. - Vertical mirroring is always active. - Some of the registers can be accessed from other addresses than those listed above. For example, $7000 can also be accessed from $7002, $7004, and so on through $7FFA. $7001 can be accessed at $7003, $7005, and so on through $7FFB. Similar rules apparently are in force for the registers at $6000-$6FFF. - This mapper supports IRQ interrupts. I have no clue how. **************************************************************************** +------------------------------+ ¦ 72-in-1 (No Number Assigned) ¦ +------------------------------+ +---------------------------------------------+ ¦ The 72-in-1 pirate cart uses this mapper. ¦ +---------------------------------------------+ +---------------------------------------------------------------+ ¦A15¦A14¦A13¦A12¦A11¦A10¦A09¦A08¦A07¦A06¦A05¦A04¦A03¦A02¦A01¦A00¦ +---------------------------------------------------------------+ +---------------------------------------------------------------+ ¦ 1 ¦ X ¦ M ¦ S ¦ P ¦ P ¦ P ¦ P ¦ P ¦ H ¦ C ¦ C ¦ C ¦ C ¦ C ¦ C ¦ +---------------------------------------------------------------+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +---------------+ ¦ +-------------------+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ + Select 8K VROM bank at PPU ¦ ¦ ¦ ¦ $0000 ¦ ¦ ¦ ¦ ¦ ¦ ¦ +---- Select upper half (1) or ¦ ¦ ¦ lower half (0) of 32K PRG ¦ ¦ ¦ page. This half is mirrored ¦ ¦ ¦ both to $8000 and $C000. ¦ ¦ ¦ No effect if page size is set ¦ ¦ ¦ to 32K. ¦ ¦ ¦ ¦ ¦ +------------------------ Select PRG page (size and ¦ ¦ location determined by lines ¦ ¦ A06 and A12) ¦ ¦ ¦ +---------------------------- Select PRG page size. 0 - 32K, ¦ 1 - 16K. If the size is 16K, ¦ it's mirrored at both $8000 ¦ and $A000. Whether the top ¦ or bottom half of the 32K ¦ chunk is used depends on the ¦ condition of A06. ¦ +-------------------------------- Mirroring select 0 - Vertical mirroring 1 - Horizontal mirroring Notes: - This mapper is interesting in that the address written, rather than the value, controls the switching. A15-A00 is simply the address written in binary notation. For example, writing to $A3C7 (1010001111000111 in binary) would select horizontal mirroring, 32K PRG bank #7, and 8K CHR bank #7. Note that only writes to $8000 and above are valid. - Vertical mirroring is probably set at powerup. - At reset, the first 32K ROM bank is swapped into $8000, and the first 8K VROM bank is swapped into PPU $0000. - Thanks to Mark Knibbs for hacking this mapper. **************************************************************************** +-------------------------------+ ¦ 110-in-1 (No Number Assigned) ¦ +-------------------------------+ +---------------------------------------------+ ¦ The 110-in-1 pirate cart uses this mapper. ¦ +---------------------------------------------+ +---------------------------------------------------------------+ ¦A15¦A14¦A13¦A12¦A11¦A10¦A09¦A08¦A07¦A06¦A05¦A04¦A03¦A02¦A01¦A00¦ +---------------------------------------------------------------+ +---------------------------------------------------------------+ ¦ 1 ¦ L ¦ M ¦ S ¦ P ¦ P ¦ P ¦ P ¦ P ¦ H ¦ C ¦ C ¦ C ¦ C ¦ C ¦ C ¦ +---------------------------------------------------------------+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +---------------+ ¦ +-------------------+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ + Select 8K VROM bank at PPU ¦ ¦ ¦ ¦ ¦ $0000 ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +---- Select upper half (1) or ¦ ¦ ¦ ¦ lower half (0) of 32K PRG ¦ ¦ ¦ ¦ page. This half is mirrored ¦ ¦ ¦ ¦ both to $8000 and $C000. ¦ ¦ ¦ ¦ No effect if page size is set ¦ ¦ ¦ ¦ to 32K. ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------------------------ Select PRG page (size and ¦ ¦ ¦ location determined by lines ¦ ¦ ¦ A06 and A12) ¦ ¦ ¦ ¦ ¦ +---------------------------- Select PRG page size. 0 - 32K, ¦ ¦ 1 - 16K. If the size is 16K, ¦ ¦ it's mirrored at both $8000 ¦ ¦ and $A000. Whether the top ¦ ¦ or bottom half of the 32K ¦ ¦ chunk is used depends on the ¦ ¦ condition of A06. ¦ ¦ ¦ +-------------------------------- Mirroring select ¦ 0 - Vertical mirroring ¦ 1 - Horizontal mirroring ¦ +------------------------------------ 1024K page select 0 - Select pages from first megabyte of PRG-ROM 1 - Select pages from second megabyte of PRG-ROM +-------+ +-----------------------------------------+ ¦ $5800 +---¦ RRRRRRRR ¦ +-------+ ¦ +------+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------- Register #1 ¦ ¦ Data storage for menu ¦ +-----------------------------------------+ +-------+ +-----------------------------------------+ ¦ $5801 +---¦ RRRRRRRR ¦ +-------+ ¦ +------+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------- Register #1 ¦ ¦ Data storage for menu ¦ +-----------------------------------------+ +-------+ +-----------------------------------------+ ¦ $5802 +---¦ RRRRRRRR ¦ +-------+ ¦ +------+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------- Register #1 ¦ ¦ Data storage for menu ¦ +-----------------------------------------+ +-------+ +-----------------------------------------+ ¦ $5803 +---¦ RRRRRRRR ¦ +-------+ ¦ +------+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------- Register #1 ¦ ¦ Data storage for menu ¦ +-----------------------------------------+ Notes: - This mapper is interesting in that the address written, rather than the value, controls the switching. A15-A00 is simply the address written in binary notation. For example, writing to $A3C7 (1010001111000111 in binary) would select horizontal mirroring, 32K PRG bank #7, and 8K CHR bank #7. Note that only writes to $8000 and above are valid. - Registers can also be accessed at several other values: register #0, for example, is also found at $5804, $5808, and so on through $5FFC. The same mirroring is true with the other registers. - Vertical mirroring is probably set at powerup. - At reset, the first 32K ROM bank is swapped into $8000, and the first 8K VROM bank is swapped into PPU $0000. Registers 0 and 2 contain the value 15 ($0F) and registers 1 and 3 contain a value of zero. - Thanks to Mark Knibbs for hacking this mapper. **************************************************************************** (C) 1997, 1998 Firebug - Cannot be used for commercial gain