md: correct hscroll offset calculation. genesis core 10% less embarassing.

This commit is contained in:
beirich 2012-08-22 04:54:36 +00:00
parent 377dce08d7
commit 40a427e68f
1 changed files with 6 additions and 4 deletions

View File

@ -43,8 +43,8 @@ namespace BizHawk.Emulation.Consoles.Sega
// Its way simple in comparison. But the PCE sprite renderer is way worse than gen. // Its way simple in comparison. But the PCE sprite renderer is way worse than gen.
for (int x = 0; x < FrameWidth; x++) for (int x = 0; x < FrameWidth; x++)
{ {
int xTile = Math.Abs(((x - xScroll) / 8) % NameTableWidth); int xTile = Math.Abs(((x + (1024-xScroll)) / 8) % NameTableWidth);
int xOfs = Math.Abs(x - xScroll) & 7; int xOfs = Math.Abs((x + (1024-xScroll)) & 7);
int cellOfs = nameTableBase + (yTile * NameTableWidth * 2) + (xTile * 2); int cellOfs = nameTableBase + (yTile * NameTableWidth * 2) + (xTile * 2);
int nameTableEntry = VRAM[cellOfs] | (VRAM[cellOfs+1] << 8); int nameTableEntry = VRAM[cellOfs] | (VRAM[cellOfs+1] << 8);
int patternNo = nameTableEntry & 0x7FF; int patternNo = nameTableEntry & 0x7FF;
@ -71,7 +71,8 @@ namespace BizHawk.Emulation.Consoles.Sega
{ {
// todo scroll values // todo scroll values
int hscroll = VRAM[HScrollTableAddr + 0] | (VRAM[HScrollTableAddr + 1] << 8); int hscroll = VRAM[HScrollTableAddr + 0] | (VRAM[HScrollTableAddr + 1] << 8);
hscroll &= 0x3FFF; hscroll &= 0x3FF;
//Console.WriteLine("ScrollA: " + hscroll);
//hscroll = 24; //hscroll = 24;
int vscroll = VSRAM[0] & 0x3FFF; int vscroll = VSRAM[0] & 0x3FFF;
RenderBackgroundScanline(hscroll, vscroll, NameTableAddrA, 2, 5); RenderBackgroundScanline(hscroll, vscroll, NameTableAddrA, 2, 5);
@ -80,7 +81,8 @@ namespace BizHawk.Emulation.Consoles.Sega
void RenderScrollB() void RenderScrollB()
{ {
int hscroll = VRAM[HScrollTableAddr + 2] | (VRAM[HScrollTableAddr + 3] << 8); int hscroll = VRAM[HScrollTableAddr + 2] | (VRAM[HScrollTableAddr + 3] << 8);
hscroll &= 0x3FFF; hscroll &= 0x3FF;
//Console.WriteLine("ScrollB: " + hscroll);
//hscroll = 24; //hscroll = 24;
int vscroll = VSRAM[1] & 0x3FFF; int vscroll = VSRAM[1] & 0x3FFF;
RenderBackgroundScanline(hscroll, vscroll, NameTableAddrB, 1, 4); RenderBackgroundScanline(hscroll, vscroll, NameTableAddrB, 1, 4);