3D: add support for 8bit accesses to GXSTAT (Golden Sun - Dark Dawn)
This commit is contained in:
parent
0a04efc33e
commit
5bea3cc530
|
@ -1940,6 +1940,33 @@ void WriteToGXFIFO(u32 val)
|
||||||
|
|
||||||
u8 Read8(u32 addr)
|
u8 Read8(u32 addr)
|
||||||
{
|
{
|
||||||
|
switch (addr)
|
||||||
|
{
|
||||||
|
case 0x04000600:
|
||||||
|
return GXStat & 0xFF;
|
||||||
|
case 0x04000601:
|
||||||
|
{
|
||||||
|
return ((GXStat >> 8) & 0xFF) |
|
||||||
|
(PosMatrixStackPointer & 0x1F) |
|
||||||
|
((ProjMatrixStackPointer & 0x1) << 5);
|
||||||
|
}
|
||||||
|
case 0x04000602:
|
||||||
|
{
|
||||||
|
u32 fifolevel = CmdFIFO->Level();
|
||||||
|
|
||||||
|
return fifolevel & 0xFF;
|
||||||
|
}
|
||||||
|
case 0x04000603:
|
||||||
|
{
|
||||||
|
u32 fifolevel = CmdFIFO->Level();
|
||||||
|
|
||||||
|
return ((GXStat >> 24) & 0xFF) |
|
||||||
|
(fifolevel >> 8) |
|
||||||
|
(fifolevel < 128 ? (1<<1) : 0) |
|
||||||
|
(fifolevel == 0 ? (1<<2) : 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
printf("unknown GPU3D read8 %08X\n", addr);
|
printf("unknown GPU3D read8 %08X\n", addr);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -1954,6 +1981,22 @@ u16 Read16(u32 addr)
|
||||||
case 0x04000320:
|
case 0x04000320:
|
||||||
return 46; // TODO, eventually
|
return 46; // TODO, eventually
|
||||||
|
|
||||||
|
case 0x04000600:
|
||||||
|
{
|
||||||
|
return (GXStat & 0xFFFF) |
|
||||||
|
((PosMatrixStackPointer & 0x1F) << 8) |
|
||||||
|
((ProjMatrixStackPointer & 0x1) << 13);
|
||||||
|
}
|
||||||
|
case 0x04000602:
|
||||||
|
{
|
||||||
|
u32 fifolevel = CmdFIFO->Level();
|
||||||
|
|
||||||
|
return (GXStat >> 16) |
|
||||||
|
fifolevel |
|
||||||
|
(fifolevel < 128 ? (1<<9) : 0) |
|
||||||
|
(fifolevel == 0 ? (1<<10) : 0);
|
||||||
|
}
|
||||||
|
|
||||||
case 0x04000604:
|
case 0x04000604:
|
||||||
return NumPolygons;
|
return NumPolygons;
|
||||||
case 0x04000606:
|
case 0x04000606:
|
||||||
|
@ -2027,6 +2070,22 @@ void Write8(u32 addr, u8 val)
|
||||||
AlphaRefVal = val & 0x1F;
|
AlphaRefVal = val & 0x1F;
|
||||||
AlphaRef = (DispCnt & (1<<2)) ? AlphaRefVal : 0;
|
AlphaRef = (DispCnt & (1<<2)) ? AlphaRefVal : 0;
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
case 0x04000601:
|
||||||
|
if (val & 0x80)
|
||||||
|
{
|
||||||
|
GXStat &= ~0x8000;
|
||||||
|
ProjMatrixStackPointer = 0;
|
||||||
|
//PosMatrixStackPointer = 0;
|
||||||
|
TexMatrixStackPointer = 0;
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
case 0x04000603:
|
||||||
|
val &= 0xC0;
|
||||||
|
GXStat &= 0x3FFFFFFF;
|
||||||
|
GXStat |= (val << 24);
|
||||||
|
CheckFIFOIRQ();
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (addr >= 0x04000360 && addr < 0x04000380)
|
if (addr >= 0x04000360 && addr < 0x04000380)
|
||||||
|
@ -2076,6 +2135,22 @@ void Write16(u32 addr, u16 val)
|
||||||
case 0x0400035C:
|
case 0x0400035C:
|
||||||
FogOffset = val & 0x7FFF;
|
FogOffset = val & 0x7FFF;
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
case 0x04000600:
|
||||||
|
if (val & 0x8000)
|
||||||
|
{
|
||||||
|
GXStat &= ~0x8000;
|
||||||
|
ProjMatrixStackPointer = 0;
|
||||||
|
//PosMatrixStackPointer = 0;
|
||||||
|
TexMatrixStackPointer = 0;
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
case 0x04000602:
|
||||||
|
val &= 0xC000;
|
||||||
|
GXStat &= 0x3FFFFFFF;
|
||||||
|
GXStat |= (val << 16);
|
||||||
|
CheckFIFOIRQ();
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (addr >= 0x04000330 && addr < 0x04000340)
|
if (addr >= 0x04000330 && addr < 0x04000340)
|
||||||
|
|
Loading…
Reference in New Issue