1992 11 in 1 Ball Series 
 
  
Cartridge Front
  
 
  
Cartridge Back
  
 
  
Cartridge Board
  
What Is It? 
The world's Nastiest Multicart. The circuit on this thing is a technical nightmare!  This cart took the most work to RE due to the very complex
and convoluted logic of its circuit. 
The Games: 
(See cartridge back)
  
The Tech: 
A bunch of TTL "glue" logic, a ROM, and a VRAM chip.  The logic was pretty messed up and must've been designed by someone high on crack.
There's plenty of "MML" logic (Mickey Mouse Logic), and lots of edge-triggered nonsense.
 
------------------------------------------------------------------
This mapper has been assigned the number 51.  (that's 51 decimal)
Holy Fuck On a Popsicle Stick!  These carts keep getting worse!  This one
uses 7 logic chips, 1 VRAM, and a 512K PRG ROM.  The mapper is one of the
worst pieces of digital "design" I have seen to date.  If you have ever
tried to trace "Spaghetti Code"; this would be the hardware equivelant.
---
The hardware:
It consists of 7 TTL chips (7408, 7402, 7432 (2), 7474, 74153, 74161),
an 8K VRAM, and a 512K PRG ROM.  The banking is shall we say, "Fucked Up".
Mirroring is software selectable, as is alot of other stuff.
-
Writing to the 6000h-7FFFh area will set the Mapper Mode register, and
writing to 8000-FFFFh will set the bank select register.
-
Bank Select Register:
7  bit  0
---------
xxxx CCCC
bit 3 = MSB, bit 0 = LSB.  This is the bank select register- it selects
which 32K ROM bank will be used.  It is accessed by writing anywhere in the
8000h-FFFFh range.  There are no bus conflicts.
-
Mapper Mode:
7  bit  0
---------
xxxB xxAx
This set by writing anywhere in the 6000h-7FFFh range.  Only bits 4 and
1 are used.  Below is the effects on ROM addressing for the various modes.
-
Addressing layout for the ROM:
B,A:
----
0,0  -  Mode #0
0,1  -  Mode #1
1,0  -  Mode #2
1,1  -  Mode #3
-
Mode:
0  -  V mirroring
1  -  V mirroring
2  -  V mirroring
3  -  H mirroring
0  -  A14 passes through
1  -  A14 passes through
2  -  A14 is pulled high
3  -  A14 passes through
0  -  A15 = bank select bit #0 if A14 is low.  If A14 is high, A15 = 1
1  -  A15 = bank select bit #0
2  -  A15 = bank select bit #0 if A14 is low.  If A14 is high, A15 = 1
3  -  A15 = bank select bit #0
0  -  A16 = bank select bit #1 if A14 is low.  If A14 is high, A16 = 1
1  -  A16 = bank select bit #1
2  -  A16 = bank select bit #1 if A14 is low.  If A14 is high, A16 = 1
3  -  A16 = bank select bit #1
A17 always = bank select bit #2
A18 always = bank select bit #3 OR /A15
-
This setup is just assinine.  Obviously "tuned" for the set of games on
the cart.  The ROM is enabled from 6000h through FFFFh.  When you are
reading from the 6000h-7FFFh area, the bank select bit 3 is set to 1.
(that is the "bit #3 OR /A15" part, above)  Below is a piece of code
that implements this weird scheme.
-
In this code, "bank" is a 6 bit value which holds the desired 8K bank.
There are 64 8K banks then (8*64 = 512K, the size of the ROM).
"bank" = the final output bank select register.
"mode" = the mapper mode. (written to at 6000h-7FFFh)
"select" = the bank select register, (written to at 8000h-FFFFh)
"address" = the current address of the NES CPU.
-
if (address AND 4000h) = 0 then x = 0 else x = 001100b ;A14 determines mask
if mode = 1 or mode = 3 then x = 0
bank = select << 2     ;get the proper bank set up
bank = bank OR x       ;OR the mask with the bank to set bits if needed
if (address AND 8000h) = 0 then y = 100000b else y = 0 ;A15 determines mask
bank = bank OR y       ;OR the mask with the bank to set bit if needed
if mode = 2 then z = 000010b    ;if mode 2, pull A14 high
bank = bank OR z       ;OR the mask with the bank to set bit if needed
-
"bank" now holds the desired 8K bank #.
 
 |