1
0
mirror of https://github.com/blawar/GLideN64.git synced 2024-07-02 09:03:37 +00:00

Implement gSPSetStatus.

This commit is contained in:
Sergey Lipskiy 2016-11-17 16:34:23 +07:00
parent c3caf2747d
commit cf2bce9176
5 changed files with 35 additions and 2 deletions

View File

@ -122,6 +122,7 @@
#define G_MW_CLIP 0x04
#define G_MW_SEGMENT 0x06
#define G_MW_FOG 0x08
#define G_MW_GENSTAT 0x08
#define G_MW_LIGHTCOL 0x0A
#define G_MW_FORCEMTX 0x0C
#define G_MW_POINTS 0x0C

View File

@ -44,6 +44,19 @@ void S2DEX_Obj_MoveMem( u32 w0, u32 w1 )
}
}
void S2DEX_MoveWord( u32 w0, u32 w1 )
{
switch (_SHIFTR( w0, 16, 8 ))
{
case G_MW_GENSTAT:
gSPSetStatus(_SHIFTR(w0, 0, 16), w1);
break;
default:
F3D_MoveWord(w0, w1);
break;
}
}
void S2DEX_Select_DL( u32 w0, u32 w1 )
{
LOG(LOG_WARNING, "S2DEX_Select_DL unimplemented\n");
@ -102,7 +115,7 @@ void S2DEX_Init()
GBI_SetGBI( G_OBJ_LDTX_SPRITE, S2DEX_OBJ_LDTX_SPRITE, S2DEX_Obj_LdTx_Sprite );
GBI_SetGBI( G_OBJ_LDTX_RECT, S2DEX_OBJ_LDTX_RECT, S2DEX_Obj_LdTx_Rect );
GBI_SetGBI( G_OBJ_LDTX_RECT_R, S2DEX_OBJ_LDTX_RECT_R, S2DEX_Obj_LdTx_Rect_R );
GBI_SetGBI( G_MOVEWORD, F3D_MOVEWORD, F3D_MoveWord );
GBI_SetGBI( G_MOVEWORD, F3D_MOVEWORD, S2DEX_MoveWord );
GBI_SetGBI( G_SETOTHERMODE_H, F3D_SETOTHERMODE_H, F3D_SetOtherMode_H );
GBI_SetGBI( G_SETOTHERMODE_L, F3D_SETOTHERMODE_L, F3D_SetOtherMode_L );
GBI_SetGBI( G_ENDDL, F3D_ENDDL, F3D_EndDL );

View File

@ -10,6 +10,19 @@
#include "RSP.h"
#include "Types.h"
void S2DEX2_MoveWord( u32 w0, u32 w1 )
{
switch (_SHIFTR( w0, 16, 8 ))
{
case G_MW_GENSTAT:
gSPSetStatus(_SHIFTR(w0, 0, 16), w1);
break;
default:
F3DEX2_MoveWord(w0, w1);
break;
}
}
void S2DEX2_Init()
{
gSPSetupFunctions();
@ -33,7 +46,7 @@ void S2DEX2_Init()
GBI_SetGBI( G_OBJ_LDTX_SPRITE, S2DEX2_OBJ_LDTX_SPRITE, S2DEX_Obj_LdTx_Sprite );
GBI_SetGBI( G_OBJ_LDTX_RECT, S2DEX2_OBJ_LDTX_RECT, S2DEX_Obj_LdTx_Rect );
GBI_SetGBI( G_OBJ_LDTX_RECT_R, S2DEX2_OBJ_LDTX_RECT_R, S2DEX_Obj_LdTx_Rect_R );
GBI_SetGBI( G_MOVEWORD, F3DEX2_MOVEWORD, F3DEX2_MoveWord );
GBI_SetGBI( G_MOVEWORD, F3DEX2_MOVEWORD, S2DEX2_MoveWord );
GBI_SetGBI( G_SETOTHERMODE_H, F3DEX2_SETOTHERMODE_H, F3DEX2_SetOtherMode_H );
GBI_SetGBI( G_SETOTHERMODE_L, F3DEX2_SETOTHERMODE_L, F3DEX2_SetOtherMode_L );
GBI_SetGBI( G_ENDDL, F3DEX2_ENDDL, F3D_EndDL );

View File

@ -1789,6 +1789,11 @@ void gSPLineW3D( s32 v0, s32 v1, s32 wd, s32 flag )
#endif
}
void gSPSetStatus(u32 sid, u32 val)
{
gSP.status[sid>>2] = val;
}
void gSPObjLoadTxtr( u32 tx )
{
const u32 address = RSP_SegmentToPhysical( tx );

View File

@ -173,6 +173,7 @@ void gSPSetOtherMode_H(u32 _length, u32 _shift, u32 _data);
void gSPSetOtherMode_L(u32 _length, u32 _shift, u32 _data);
void gSPLine3D(s32 v0, s32 v1, s32 flag);
void gSPLineW3D( s32 v0, s32 v1, s32 wd, s32 flag );
void gSPSetStatus(u32 sid, u32 val);
void gSPObjRectangle(u32 _sp );
void gSPObjRectangleR(u32 _sp);
void gSPObjSprite(u32 _sp);