Fix bankswitching
In some late games, the S ROM 128KiB size limit was expanded with the use of NEO-CMC chips.
This was devised as some sort of hack, taking advantage that the VDC continues rendering the fix layer outside of the visible screen area. This allows the chips to use the normally unused $7500~$75FF VRAM region to add bits to the tile numbers.
The chips use latches to store the additional bits at the beginning of a line, and "distributes" them during render. Synchronization might just be free running, started by /RESET and clocked with 6MB ?
NEO-CMC 042
Infos from Mr K (MAME).
Used by:
The 042 version of NEO-CMC allows fix data up to 512KiB (16384 tiles instead of 4096), by changing the bank (4 maximum) for groups of 2 line of tiles (or more ?). For this, the $7500~$75BF area in VRAM is used.
- The $7500~$753F area even words (32 total) contain a flag to indicate if the bank has to be changed for the corresponding tile line.
- The $7580~$75BF area even words (32 total) contain bank numbers for each of the tile lines.
If for a given line, the flag is set to $0200 (group size ?), the bank is read, changed, and will remain the same until it's changed again (it doesn't go back to 0 if the next line doesn't have the flag set).
Bank number:
Bit | 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
Def | Has to be $FF ($0F works?) | Unused ? | Bank number |
Bank bits are inverted (00 = bank 3, 11 = bank 0).
This needs further research, see MAME video/neogeo.c
NEO-CMC 50
Used by:
- The King of Fighters 2000
- Metal Slug 4
- Matrimelee
- SNK vs. Capcom - SVC Chaos
- The King of Fighters 2003
The 050 version of NEO-CMC allows to add 2 bits to all the fix tile indexes individually, also allowing to use 16384 tiles at most but in a simpler manner and with no restrictions. For this, the $7500~$75DF area of VRAM is used.
Each word in this area gives the bank number for 6 horizontally consecutive fix tiles corresponding to the line:
Bit | 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
Def | Unused ? | a | b | c | d | e | f |
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