Fix bankswitching

The following info is based off MAME's source and was not yet verified against real hardware. It can therefore be inaccurate/incomplete.

The chips exploit the fact that the GPU continues to render the fix layer outside of the visible screen area. This allows them to use the normally unused $7500~$75FF VRAM region.

Probably a hack found when someone complained the S ROM max. size was too small :)

NEO-CMC 42
The 042 version of NEO-CMC is able to change the tile bank (4 maximum) for each line of fix tiles (8 pixels), allowing to use more than 4096 tiles. For this, the $7500~$75BF area of VRAM is used.


 * The $7500~$753F area even words contains a flag to indicate if the bank has to be changed for the corresponding tile line.
 * The $7580~$75BF area even words contains bank numbers for each of the tile lines.

If for a given line, the flag is set to $0200, the bank is read and changed and will remain the same until it's changed again (doesn't return to 0 if the next line hasn't the flag set).

Bank number:

Bank bits are inverted (00 = bank 3, 11 = bank 0).

MAME video/neogeo.c CMC42 handling:

Mame driver increments fix line twice when a bank change is requested, which implies:

- It is only possible to bank lines 2 by 2.

- Actual vram offset position for each line varies with banking configurations

NEO-CMC 50


The 050 version of NEO-CMC is able to add 2 bits to the fix tile numbers, allowing to use 16384 tiles at most (512KiB S ROM) at any time. For this, the $7500~$75DF area of VRAM is used.

Each word in this area gives the bank numbers for 6 horizontally consecutive fix tiles:

Those bank bits are inverted (00 = bank 3, 11 = bank 0).

The words are organized as in the fix map for a PAL screen (first and last lines aren't used): from top to bottom and left to right. The "e" and "f" group of bits are unused in the last column ($75C0+).

Examples:
 * Tile at X=0, Y=1 has its bank number in bits a of $7500
 * Tile at X=0, Y=5 has its bank number in bits a of $7504
 * Tile at X=3, Y=2 has its bank number in bits d of $7501
 * Tile at X=7, Y=9 has its bank number in bits b of $7528