INES Mapper 015: Difference between revisions

From NESdev Wiki
Jump to navigationJump to search
(add some mostly useless notes to m015 based on some recent research)
(Mention K-1030P revision)
 
(24 intermediate revisions by 6 users not shown)
Line 1: Line 1:
[[Category:iNES Mappers]] [[Category:Pirate multicarts]]
{{DEFAULTSORT:015}}[[Category:iNES Mappers]][[Category:Multicart mappers]][[Category:Mappers with CHR RAM]]
'''iNES Mapper 015''' denotes the '''K-1029''' and '''K-1030P''' circuit boards, used for the ''100-in-1 Contra Function 16'' and ''168-in-1 New Contra Function 16'' multicarts.
=Banks=
* CPU $8000-$FFFF: Switchable PRG-ROM banks (8/16/32 KiB)
* PPU $0000-$1FFF: Unbanked 8 KiB of CHR-RAM that can be write-protected
* Nametable mirroring: Switchable horizontal/vertical settings


The [[iNES]] format assigns '''iNES Mapper 015''' as the mapper used in ''100-in-1 Contra Function 16'', the first pirate multicart to be emulated.
=Address and Data Latch ($8000-$FFFF, write)=
 
Mask: $8000
The mapper allows multiple [[NROM]] or [[BNROM]] games plus one [[UNROM]] game to be used with very little modification. A few games originally released on a [[CNROM]] compatible board (such as two variants of ''Tetris'') showed up on the cart; these were ripped to NROM by tossing out all 8 KB CHR banks except the one used for gameplay.
 
== Overview ==
* PRG ROM size: Up to 512 KB
* PRG ROM bank size: 8 KB, 16 KB, or 32 KB
* PRG RAM: 8 KB
* CHR capacity: 8 KB RAM [[Category:Mappers with CHR RAM]]
* CHR bank size: None
* Nametable [[mirroring]]: Controlled by mapper
* Subject to [[bus conflict]]s: Unknown
 
== Banks ==
There is one switchable bank. How this is mapped into depends on the current bank mode (see [[#Registers|Registers below]]).
 
=== Bank mode 0 ( 32K ) ===
 
*CPU $8000-$BFFF: Bank B
*CPU $C000-$FFFF: Bank (B OR 1)
 
If bit 0 of B equals 1, then bank modes 1 and 2 are identical.
 
=== Bank mode 1 ( 128K ) ===
 
*CPU $8000-$BFFF: Switchable 16 KB bank B
*CPU $C000-$DFFF: Fixed to last bank in the cart
 
This mode uses the same configuration as [[UNROM]].
 
=== Bank mode 2 ( 8K ) ===
 
*CPU $8000-$9FFF: Sub-bank b of 16 KB PRG ROM bank B
*CPU $A000-$FFFF: Mirrors of $8000-$9FFF
 
=== Bank mode 3 ( 16K ) ===
 
*CPU $8000-$BFFF: 16 KB bank B
*CPU $C000-$FFFF: Mirror of $8000-$BFFF
 
== Registers ==
=== Control ($8000-$FFFF) ===
This is a 10-bit register. The upper 2 bits of the value are set from address lines A1-A0.
 
15 bit  8 7  bit  0  Address bus
---- ---- ---- ----
1xxx xxxx xxxx xxSS
|                ||
|                ++- Select PRG ROM bank mode
|                    0: 32K; 1: 128K (UNROM style); 2: 8K; 3: 16K
+------------------- Always 1
   
   
  7 bit  0  Data bus
  A~FEDC BA98 7654 3210 D~7654 3210
---- ----
  -------------------    ---------
bMBB BBBB
  1... .... .... ..SS    pMPP PPPP
|||| ||||
                    ||   ||++-++++- PRG A19..A14
||++-++++- Select 16 KB PRG ROM bank
                    ||    |+-------- Nametable mirroring
|+-------- Select nametable mirroring mode (0=vertical; 1=horizontal)
                    ||    |          0: Vertical
+--------- Select 8 KB half of 16 KB PRG ROM bank
                    ||    |          1: Horizontal
            (should be 0 except in bank mode 0)
                    ||    +--------- PRG A13 if SS=2, ignored otherwise
 
                    ++-------------- PRG banking mode
The result when b=1 outside of bank mode 0 is not specified.
                                      0: NROM-256 (PRG A14=CPU A14)
 
                                      1: UNROM    (PRG A14..16=111 when CPU A14=1)
Power-up state: bank mode 2, bank 0, mirroring not specified.
                                      2: NROM-64  (PRG A13=p)
 
                                      3: NROM-128
Some emulators (fceux, virtuanesex) are XORing the b (8KB half) bit frequently instead of ORing or ignoring. It is unclear what effects this would have. Additionally, there is some disagreement as to the boot-up state (disch says mode 0, the above says mode 2, emulators vary).
Power-on and reset value: All bits clear
 
CHR-RAM is write-protected in PRG banking modes 0 and 3, and write-enabled in modes 1 and 2.
The unlicensed chinese WXN game "Bio Hazard" which uses this mapper freezes in the same way in fceux, fceu-mm, nestopia, bizhawk, and virtuanesx (maybe?) and so the game is probably buggy.
 
== Hardware ==


== Variants ==
=Use for mapper hacks=
The only known two cartridges using this mapper are the two listed multicarts. All other known ROM files claiming to use mapper 15 have been identified as being mapper hacks, usually from mappers [[INES Mapper 164|164]] and [[INES Mapper 227|227]]. To run these mapper-hacked games, emulators must not enforce CHR-RAM write-protection even though an actual K-1029 PCB would, and must provide 8 KiB of PRG-RAM at CPU $6000-$7FFF even though an actual K-1029 PCB would not.


  Here are Disch's original notes:
=See also=
  ========================
*[https://forums.nesdev.org/viewtopic.php?p=192828#p192828 schematic RE'd] by krzysiobal
  =  Mapper 015          =
  ========================
 
  Example Game:
  --------------------------
  100-in-1 Contra Function 16
 
 
  Notes:
  ---------------------------
 
  Possible bus conflicts???
 
 
 
  Registers:
  ---------------------------
 
    $8000-FFFF:  A~[.... .... .... ..OO]
                  [pMPP PPPP]
      O = Mode
      p = Low bit of PRG page (not always used)
      P = High bits of PRG page
      M = Mirroring  (0=Vert, 1=Horz)
 
 
  PRG Setup:
  ---------------------------
 
  Depending on the Mode used, the 'p' bit may not be used.  In the chart below, "P" will indicate that only the
  'P' bits are used to form a 6-bit page number... whereas "Pp" will indicate the full 7-bit page number.
 
 
            $8000  $A000  $C000  $E000 
          +---------------+---------------+
  Mode 0:  |      P      |    P OR 1    |
          +---------------+---------------+
  Mode 1:  |      P      |    { -1}    |
          +---------------+---------------+
  Mode 2:  |  Pp  |  Pp  |  Pp  |  Pp  |
          +---------------+---------------+
  Mode 3:  |      P      |      P      |
          +---------------+---------------+
 
 
  Powerup:
  ---------------------------
  All regs reset to 0 on powerup.

Latest revision as of 09:12, 19 October 2022

iNES Mapper 015 denotes the K-1029 and K-1030P circuit boards, used for the 100-in-1 Contra Function 16 and 168-in-1 New Contra Function 16 multicarts.

Banks

  • CPU $8000-$FFFF: Switchable PRG-ROM banks (8/16/32 KiB)
  • PPU $0000-$1FFF: Unbanked 8 KiB of CHR-RAM that can be write-protected
  • Nametable mirroring: Switchable horizontal/vertical settings

Address and Data Latch ($8000-$FFFF, write)

Mask: $8000

A~FEDC BA98 7654 3210  D~7654 3210
  -------------------    ---------
  1... .... .... ..SS    pMPP PPPP
                   ||    ||++-++++- PRG A19..A14
                   ||    |+-------- Nametable mirroring
                   ||    |           0: Vertical
                   ||    |           1: Horizontal
                   ||    +--------- PRG A13 if SS=2, ignored otherwise
                   ++-------------- PRG banking mode
                                     0: NROM-256 (PRG A14=CPU A14)
                                     1: UNROM    (PRG A14..16=111 when CPU A14=1)
                                     2: NROM-64  (PRG A13=p)
                                     3: NROM-128
Power-on and reset value: All bits clear

CHR-RAM is write-protected in PRG banking modes 0 and 3, and write-enabled in modes 1 and 2.

Use for mapper hacks

The only known two cartridges using this mapper are the two listed multicarts. All other known ROM files claiming to use mapper 15 have been identified as being mapper hacks, usually from mappers 164 and 227. To run these mapper-hacked games, emulators must not enforce CHR-RAM write-protection even though an actual K-1029 PCB would, and must provide 8 KiB of PRG-RAM at CPU $6000-$7FFF even though an actual K-1029 PCB would not.

See also