1992 11 in 1 Ball Series
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.
(See cartridge back)
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.
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
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.
7 bit 0
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:
0,0 - Mode #0
0,1 - Mode #1
1,0 - Mode #2
1,1 - Mode #3
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 #.