OBC1 Gamepaks
Metal Combat - Falcon's Revenge
OBC1 Memory Mapping
|
Mode
|
Size
|
Bank
|
SRAM
|
Registers
|
|
20H
|
16Mbit
|
00H ~ 3FH, 70H ~ 71H
|
6000H ~ 7FFFH
|
7FF0H ~ 7FF7H
|
The OBC1 has 8 registers in the memory range 7FF0H
through 7FF7H each with a resolution of 8 bits.
OBC1 Register Summary
The OBC1 is used to build/manipulate an object table
stored in an external RAM source for transfer via DMA to the PPU registers.
|
7FF0H
|
X Coordinate (LSB)
|
|
7FF1H
|
Y Coordinate
|
|
7FF2H
|
Character Data (LSB)
|
|
7FF3H
|
Character Data (MSB)
|
|
7FF4H
|
Object Size / X Coordinate (MSB)
|
|
7FF5H
|
Base Select / SRAM Enable
|
|
7FF6H
|
Object Select
|
|
7FF7H
|
Unknown
|
Source Code
// obc1.cpp
int OBC1_Address;
int OBC1_BasePtr;
int OBC1_Shift;
7FF0H - X Coordinate (LSB)
void OBC1_WriteR0(unsigned char Data)
{
SRAM[OBC1_BasePtr + (OBC1_Address << 2)] = Data;
}
unsigned char OBC1_ReadR0()
{
return SRAM[OBC1_BasePtr + (OBC1_Address << 2)];
}
7FF1H - Y Coordinate
void OBC1_WriteR1(unsigned char Data)
{
SRAM[OBC1_BasePtr + (OBC1_Address << 2) + 1] = Data;
}
unsigned char OBC1_ReadR1()
{
return SRAM[OBC1_BasePtr + (OBC1_Address << 2) + 1];
}
7FF2H - Character Data (LSB)
void OBC1_WriteR2(unsigned char Data)
{
SRAM[OBC1_BasePtr + (OBC1_Address << 2) + 2] = Data;
}
unsigned char OBC1_ReadR2()
{
return SRAM[OBC1_BasePtr + (OBC1_Address << 2) + 2];
}
7FF3H - Character Data (MSB)
void OBC1_WriteR3(unsigned char Data)
{
SRAM[OBC1_BasePtr + (OBC1_Address << 2) + 3] = Data;
}
unsigned char OBC1_ReadR3()
{
return SRAM[OBC1_BasePtr + (OBC1_Address << 2) + 3];
}
7FF4H - Object Size / X Coordinate (MSB)
void OBC1_WriteR4(unsigned char Data)
{
unsigned char Temp;
Temp = SRAM[OBC1_BasePtr + (OBC1_Address >> 2) + 0x200];
Temp = (Temp & ~(3 << OBC1_Shift)) | ((Data & 3) << OBC1_Shift);
SRAM[OBC1_BasePtr + (OBC1_Address >> 2) + 0x200] = Temp;
}
unsigned char OBC1_ReadR4()
{
return SRAM[OBC1_BasePtr + (OBC1_Address >> 2) + 0x200];
}
7FF5H - Base Select / SRAM Enable
void OBC1_WriteR5(unsigned char Data)
{
if (Data & 1)
OBC1_BasePtr = 0x1800;
else
OBC1_BasePtr = 0x1c00;
// Setting bits 5 & 7 Enable SRAM Mapping from 0x6000-0x77ff
SRAM[0x1ff5] = Data;
}
unsigned char OBC1_ReadR5()
{
return SRAM[0x1ff5];
}
7FF6H - Object Select
void OBC1_WriteR6(unsigned char Data)
{
OBC1_Address = Data & 0x7f;
OBC1_Shift = (Data & 3) << 1;
}
unsigned char OBC1_ReadR6()
{
return OpenBus();
}
7FF7H - Unknown
void OBC1_WriteR7(unsigned char Data)
{
SRAM[0x1ff7] = Data;
}
unsigned char OBC1_ReadR7()
{
return SRAM[0x1ff7];
}
Copyright 2003-2004 Snes9x DSP Team. Maintained by
Overload