Fix bankswitching: Difference between revisions

From NeoGeo Development Wiki
Jump to navigation Jump to search
(Created page with "== 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 409...")
 
No edit summary
Line 1: Line 1:
The following info is based off mame drivers and was not yet verified against real hardware? It can therefore be inaccurate/incomplete.
It is currently unknown how and when vram data past $7500 is sent to the cartridge.
== NEO-CMC 42 ==
== NEO-CMC 42 ==


Line 9: Line 14:


Bank number:
Bank number:
{{16BitRegister|Has to be $FF|8|Unused ?|6|Bank number|2}}
{{16BitRegister|Has to be $FF? ($0F works?)|8|Unused ?|6|Bank number|2}}
 
 
MAME video/neogeo.c CMC42 handling:<pre>
if (banked && state->m_fixed_layer_bank_type == 1)
{
int garoubank = 0;
int k = 0;
int y = 0;
while (y < 32)
{
if (state->m_videoram[0x7500 + k] == 0x0200 && (state->m_videoram[0x7580 + k] & 0xff00) == 0xff00)
{
garoubank = state->m_videoram[0x7580 + k] & 3;
garouoffsets[y++] = garoubank;
}
garouoffsets[y++] = garoubank;
k += 2;
}
}
</pre>
 
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 ==
== NEO-CMC 50 ==

Revision as of 20:57, 24 December 2012

The following info is based off mame drivers and was not yet verified against real hardware? It can therefore be inaccurate/incomplete.

It is currently unknown how and when vram data past $7500 is sent to the cartridge.


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:

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


MAME video/neogeo.c CMC42 handling:

if (banked && state->m_fixed_layer_bank_type == 1)
{
	int garoubank = 0;
	int k = 0;
	int y = 0;
	while (y < 32)
	{
		if (state->m_videoram[0x7500 + k] == 0x0200 && (state->m_videoram[0x7580 + k] & 0xff00) == 0xff00)
		{
			garoubank = state->m_videoram[0x7580 + k] & 3;
			garouoffsets[y++] = garoubank;
		}
		garouoffsets[y++] = garoubank;
		k += 2;
	}
}

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:

Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Def Unused ? abcdef

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