GPU2D: fill gaps in BG modes
* mode6 actually works on the sub GPU, albeit limited to 1/4 the full bitmap size due to having only 128K of VRAM * mode7 draws BG0, BG1 and sprites. no BG2/BG3.
This commit is contained in:
parent
c1fa5d8283
commit
3c006fd361
|
@ -1316,12 +1316,6 @@ void GPU2D::DrawScanlineBGMode(u32 line)
|
||||||
|
|
||||||
void GPU2D::DrawScanlineBGMode6(u32 line)
|
void GPU2D::DrawScanlineBGMode6(u32 line)
|
||||||
{
|
{
|
||||||
if (Num)
|
|
||||||
{
|
|
||||||
printf("GPU2D: MODE6 ON SUB GPU???\n");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
for (int i = 3; i >= 0; i--)
|
for (int i = 3; i >= 0; i--)
|
||||||
{
|
{
|
||||||
if ((BGCnt[2] & 0x3) == i)
|
if ((BGCnt[2] & 0x3) == i)
|
||||||
|
@ -1335,7 +1329,7 @@ void GPU2D::DrawScanlineBGMode6(u32 line)
|
||||||
{
|
{
|
||||||
if (DispCnt & 0x0100)
|
if (DispCnt & 0x0100)
|
||||||
{
|
{
|
||||||
if (DispCnt & 0x8)
|
if ((!Num) && (DispCnt & 0x8))
|
||||||
DrawBG_3D();
|
DrawBG_3D();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1344,6 +1338,34 @@ void GPU2D::DrawScanlineBGMode6(u32 line)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void GPU2D::DrawScanlineBGMode7(u32 line)
|
||||||
|
{
|
||||||
|
// mode 7 only has text-mode BG0 and BG1
|
||||||
|
|
||||||
|
for (int i = 3; i >= 0; i--)
|
||||||
|
{
|
||||||
|
if ((BGCnt[1] & 0x3) == i)
|
||||||
|
{
|
||||||
|
if (DispCnt & 0x0200)
|
||||||
|
{
|
||||||
|
DrawBG_Text(line, 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if ((BGCnt[0] & 0x3) == i)
|
||||||
|
{
|
||||||
|
if (DispCnt & 0x0100)
|
||||||
|
{
|
||||||
|
if ((!Num) && (DispCnt & 0x8))
|
||||||
|
DrawBG_3D();
|
||||||
|
else
|
||||||
|
DrawBG_Text(line, 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if ((DispCnt & 0x1000) && NumSprites)
|
||||||
|
InterleaveSprites(0x8000 | (i<<16));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void GPU2D::DrawScanline_BGOBJ(u32 line)
|
void GPU2D::DrawScanline_BGOBJ(u32 line)
|
||||||
{
|
{
|
||||||
// forced blank disables BG/OBJ compositing
|
// forced blank disables BG/OBJ compositing
|
||||||
|
@ -1376,7 +1398,6 @@ void GPU2D::DrawScanline_BGOBJ(u32 line)
|
||||||
else
|
else
|
||||||
memset(WindowMask, 0xFF, 256);
|
memset(WindowMask, 0xFF, 256);
|
||||||
|
|
||||||
// TODO: what happens in mode 7? mode 6 on the sub engine?
|
|
||||||
switch (DispCnt & 0x7)
|
switch (DispCnt & 0x7)
|
||||||
{
|
{
|
||||||
case 0: DrawScanlineBGMode<0>(line); break;
|
case 0: DrawScanlineBGMode<0>(line); break;
|
||||||
|
@ -1386,6 +1407,7 @@ void GPU2D::DrawScanline_BGOBJ(u32 line)
|
||||||
case 4: DrawScanlineBGMode<4>(line); break;
|
case 4: DrawScanlineBGMode<4>(line); break;
|
||||||
case 5: DrawScanlineBGMode<5>(line); break;
|
case 5: DrawScanlineBGMode<5>(line); break;
|
||||||
case 6: DrawScanlineBGMode6(line); break;
|
case 6: DrawScanlineBGMode6(line); break;
|
||||||
|
case 7: DrawScanlineBGMode7(line); break;
|
||||||
}
|
}
|
||||||
|
|
||||||
// color special effects
|
// color special effects
|
||||||
|
|
|
@ -135,6 +135,7 @@ private:
|
||||||
|
|
||||||
template<u32 bgmode> void DrawScanlineBGMode(u32 line);
|
template<u32 bgmode> void DrawScanlineBGMode(u32 line);
|
||||||
void DrawScanlineBGMode6(u32 line);
|
void DrawScanlineBGMode6(u32 line);
|
||||||
|
void DrawScanlineBGMode7(u32 line);
|
||||||
void DrawScanline_BGOBJ(u32 line);
|
void DrawScanline_BGOBJ(u32 line);
|
||||||
|
|
||||||
static void DrawPixel_Normal(u32* dst, u16 color, u32 flag);
|
static void DrawPixel_Normal(u32* dst, u16 color, u32 flag);
|
||||||
|
|
Loading…
Reference in New Issue