15 in 1 multicart (NROM/UNROM + $6000)

This is an archive of a topic from NESdev BBS, taken in mid-October 2019 before a server upgrade.
View original topic
15 in 1 multicart (NROM/UNROM + $6000)
by on (#242998)
Funny NROM/UNROM multicart that also maps ROM at $6000 (in fact, the whole menu code is ran only from $6000-$7fff)
Whats the point of writing game sizes on the label? And look at the back of the shell :D

Image

Code:
PRG:
  ROM1 512 kB,
  ROM2 128kB, unpopulated
CHR:
  RAM 8 kB, can be write protected
 
Bus conflicts: no
 
REGISTERS (both cleared on powerup but NOT reset):
  $8000-bfff:
     fedcba9876543210     76543210
  A~[10w.............] D~[ABCDE...]
       |                  |||||
       |                  |||++---- PRG outer bank
       |                  |++------ PRG mode: 00=NROM 16k, 01=NROM 32k, 10/11=UNROM,
       |                  |++------ PRG chip select: 00/01/10=PRG1, 11=PRG2
       |                  |+------- CHR-ROM write protection: 0=enabled, 1=disabled
       |                  ++------- mirroring: 00=V, 10=H, 01/11=1ScB(CIR_A10=VCC)
       +--------------------------- write protection of both registers: 0=disabled, 1=enabled

  $c000-ffff:
     fedcba9876543210     76543210
  A~[11..............] D~[.....FGH]
                               |||
                               +++- PRG inner bank (H ignored in NROM 32k)

$6000 mapped to second half of first 16kB from PRG1 (second 8kB bank)

BC | $6000       | $8000      | $c000     
00 | PRG1=000001 | PRG1=DEFGH | PRG1=DEFGH
01 | PRG1=000001 | PRG1=DEFG0 | PRG1=DEFG1
10 | PRG1=000001 | PRG1=DEFGH | PRG1=DE111
11 | PRG1=000001 | PRG2=DEFGH | PRG2=DE111
       

PAL equations:
  PRG2_nCE = (!CPU_RnW) | (!REG1_D5) | (!REG1_D6) | (CPU_nROMSEL);
  PRG1_nCE = (REG1_D6 & REG1_D5 & !CPU_nROMSEL) | (!CPU_A14 & CPU_nROMSEL) | (!CPU_A13 & CPU_nROMSEL) | (!CPU_RnW);
  PRG_A18 = (REG1_D4 & !CPU_nROMSEL);
  PRG_A17 = (REG1_D3 & !CPU_nROMSEL);
  PRG_A16 = (REG1_D6 & CPU_A14 & !CPU_nROMSEL) | (REG2_D2 & !CPU_nROMSEL);
  PRG_A15 = (REG1_D6 & CPU_A14 & !CPU_nROMSEL) | (REG2_D1 & !CPU_nROMSEL);
 
  PRG_A14 = (!REG1_D5 & REG2_D0 & !CPU_nROMSEL) |
            (REG1_D5 & CPU_A14 & !CPU_nROMSEL) |
            (REG1_D6 & REG2_D0 & !CPU_nROMSEL) |
            (REG1_D6 & CPU_A14 & !CPU_nROMSEL);



Image Image Image Image Image Image
Re: 15 in 1 multicart (NROM/UNROM + $6000)
by on (#242999)
NES 2.0 Mapper 350. The description was based on debugging the menu, and differs from your reverse-engineered description for that reason. The ROM image file I have is 640 KiB and has Contra as the 128 KiB game.
Re: 15 in 1 multicart (NROM/UNROM + $6000)
by on (#243000)
Code:
mirroring: 00=V, 10=H, 01/11=1ScB(CIR_A10=VCC)
This cannot be true. For the "128K game", the menu writes $60 to $8000 to select UNROM mode in the second PRG chip, but this would force that game to use one-screen mirroring, which no UNROM game needs.
Re: 15 in 1 multicart (NROM/UNROM + $6000)
by on (#243001)
There is a jumper in the PCB, used to select what goes to CIRAM-A10 when 01/11 is writen to mirroring register bits:
* open (like on my PCB) -> single screen mirroring.
* closed 1-2 -> H
* closed 3-4 -> V

Image Image
Re: 15 in 1 multicart (NROM/UNROM + $6000)
by on (#243002)
Ah, ok. So the jumper selects the mirroring for the UNROM game, so that the menu does not have to know about it. Snazzy.

Edit: This would mean that the NES 2.0 header's mirroring bit should select the mirroring when register 1 D6=1.
Re: 15 in 1 multicart (NROM/UNROM + $6000)
by on (#243003)
Another question: since your 128 KiB chip is not populated, what happens when you select "Game 128K"? Open Bus?
Re: 15 in 1 multicart (NROM/UNROM + $6000)
by on (#243004)
NewRisingSun wrote:
Another question: since your 128 KiB chip is not populated, what happens when you select "Game 128K"? Open Bus?

Yes, and as the side effect, the whole program is restarted.
https://gofile.io/?c=LeeKiz

The joypad polling routine seems to be buggy (does not debounce?) - sometimes pressing SELECT makes the cursor to skip more than one position
Re: 15 in 1 multicart (NROM/UNROM + $6000)
by on (#243006)
And the sizes are in (modern) bytes rather than (period) bits. I imagine that this points to a recent (post-emulation) production date for at least the label.
Re: 15 in 1 multicart (NROM/UNROM + $6000)
by on (#243007)
The PCB code of 891227 on the back implies a 2000 design/production year.
Re: 15 in 1 multicart (NROM/UNROM + $6000)
by on (#243018)
On the other hand, the date on the other chips may indicate a 1989 date after all.
Re: 15 in 1 multicart (NROM/UNROM + $6000)
by on (#243090)
this cart kage is bug version,