gen: implement raster effects

This commit is contained in:
beirich 2012-08-24 04:45:09 +00:00
parent 9545475455
commit 58780191de
1 changed files with 34 additions and 6 deletions

View File

@ -78,17 +78,15 @@ namespace BizHawk.Emulation.Consoles.Sega
void RenderScrollA()
{
// todo scroll values
int hscroll = VRAM[HScrollTableAddr + 0] | (VRAM[HScrollTableAddr + 1] << 8);
hscroll &= 0x3FF;
int vscroll = VSRAM[0] & 0x3FFF;
int hscroll = CalcHScrollPlaneA(ScanLine);
int vscroll = VSRAM[0] & 0x3FF;
RenderBackgroundScanline(hscroll, vscroll, NameTableAddrA, 2, 5);
}
void RenderScrollB()
{
int hscroll = VRAM[HScrollTableAddr + 2] | (VRAM[HScrollTableAddr + 3] << 8);
hscroll &= 0x3FF;
int vscroll = VSRAM[1] & 0x3FFF;
int hscroll = CalcHScrollPlaneB(ScanLine);
int vscroll = VSRAM[1] & 0x3FF;
RenderBackgroundScanline(hscroll, vscroll, NameTableAddrB, 1, 4);
}
@ -195,5 +193,35 @@ namespace BizHawk.Emulation.Consoles.Sega
public bool HFlip;
public bool VFlip;
}
int CalcHScrollPlaneA(int line)
{
int ofs = 0;
switch (Registers[11] & 3)
{
case 0: ofs = HScrollTableAddr; break;
case 1: ofs = HScrollTableAddr + ((line & 7) * 4); break;
case 2: ofs = HScrollTableAddr + ((line & ~7) * 4); break;
case 3: ofs = HScrollTableAddr + (line * 4); break;
}
int value = VRAM[ofs] | (VRAM[ofs + 1] << 8);
return value & 0x3FF;
}
int CalcHScrollPlaneB(int line)
{
int ofs = 0;
switch (Registers[11] & 3)
{
case 0: ofs = HScrollTableAddr; break;
case 1: ofs = HScrollTableAddr + ((line & 7) * 4); break;
case 2: ofs = HScrollTableAddr + ((line & ~7) * 4); break;
case 3: ofs = HScrollTableAddr + (line * 4); break;
}
int value = VRAM[ofs + 2] | (VRAM[ofs + 3] << 8);
return value & 0x3FF;
}
}
}