                    SMB2j Revision "A". Mapper #50 Info
                    -----------------------------------


12.09.2000
V2.00

Mapper info by The Mad Dumper
---


This mapper has been assigned the number 50.  (that's 50 decimal)


Wow, another SMB2j cart!  This one is alot different than the last one I
worked on.  It has a single 128K PRG ROM and VRAM.  The other SMB2j had
64K PRG and 8K CHR.  Not much more to say other than this has one very
fucked up mapper circuit on it!

---


The hardware:


It consists of 6 TTL chips (74163, 74157, 74139, 7400, 7474, and a 4020),
1 8K RAM chip for the VRAM, and 1 128K 28 pin ROM.  There is some
"M^2L" logic on the board (Mickey-Mouse Logic).  It is a 3 input OR gate
made out of 3 diodes and a resistor.

Also, they swapped D3 and D6, as well as A1 and A3.  Why this was done, I
have no idea.  It sure mussed up my REing efforts!  I desoldered and read
the ROM out through the EPROM programmer as a check and was not happy to
find the data seemingly corrupt!  

After converting the ROM image over via some QBasic, it matched up great. 
You do not have to swap the addresses or data bytes; I have done this
already in the released .NES ROM.

---

There are two registers on this cartridge.  They are located in the 4000h-
5FFFh block.  

Funny addresses are decoded for the register selection; presumably so they
did not interfere with the FDS or NES registers.


A15     ...      A0
-------------------
010x xxxQ x01x xxxx


x = Don't Care
0 = must be 0
1 = must be 1
Q = register selection bit.  0 = ROM Page; 1 = IRQ Timer Enable

-

ROM Page Register:
------------------

Accessed when the address lines are in the above state.  An example address
would be 4020h.  4021h, 4022h, ... 403Fh, 40A0h, 40A1h, ... are all mirrors
of this register.  Writing here stores the desired bank #.

7  bit  0
---------
xxxx DCBA

These 4 bits are shown below in the ROM memory map.  Note that they are
somewhat "scrambled".  The value of this register is unknown at powerup.

-

IRQ Timer.

7  bit  0
---------
xxxx xxxI

The IRQ Timer register controls the state of the IRQ timer.  Writing here
will turn it on or off.  Turning the IRQ timer off resets it to 0.  Writing
a 1 here will turn the timer on, while writing a 0 will turn it off.

The timer is composed of a binary ripple counter.  After 4096 M2 cycles,
/IRQ is pulled low.  This is about 36 scanlines.  The idea behind the timer
is to split the screen for the score bar at the top.  You start it at the
beginning of the VBI routine, and then after 36 scanlines, it sends the IRQ
which clears the timer, and resets the scroll registers.  The value of this
register is unknown at powerup.

---

ROM Memory Map:


Address Range | Bank bits: 3210 
-------------------------------
 6000h-7FFFh               1111
 8000h-9FFFh               1000
 A000h-BFFFh               1001
 C000h-DFFFh               DACB -- Selectable page
 E000h-FFFFh               1011


The ROM is composed of 16 8K banks.  The 4 bank bits are shown above.  Bit 3
is the MSB while bit 0 is the LSB.  6000h-7FFFh is set to 1111b, or bank 0fh.
All banks are FIXED except the bank at C000h-DFFFh.  Only it can be changed.


