mirror of
https://github.com/blawar/GLideN64.git
synced 2024-07-02 09:03:37 +00:00
Implement gSPSelectDL and gSPSelectBranchDL
Fixed Nushi Zuri 64 - Shiokaze ni Notte: #1230
This commit is contained in:
parent
cf2bce9176
commit
83ff7f9ae5
|
@ -16,6 +16,7 @@ extern RDPInfo RDP;
|
|||
|
||||
void RDP_Init();
|
||||
void RDP_Half_1(u32 _c);
|
||||
void RDP_TexRect(u32 w0, u32 w1);
|
||||
void RDP_ProcessRDPList();
|
||||
void RDP_RepeatLastLoadBlock();
|
||||
void RDP_SetScissor(u32 w0, u32 w1);
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
#include <assert.h>
|
||||
#include "OpenGL.h"
|
||||
#include "S2DEX.h"
|
||||
#include "F3D.h"
|
||||
|
@ -6,6 +7,7 @@
|
|||
#include "gSP.h"
|
||||
#include "gDP.h"
|
||||
#include "RSP.h"
|
||||
#include "RDP.h"
|
||||
#include "Types.h"
|
||||
#include "Log.h"
|
||||
|
||||
|
@ -57,9 +59,41 @@ void S2DEX_MoveWord( u32 w0, u32 w1 )
|
|||
}
|
||||
}
|
||||
|
||||
void S2DEX_RDPHalf_0( u32 w0, u32 w1 ) {
|
||||
if (RSP.nextCmd == G_SELECT_DL) {
|
||||
gSP.selectDL.addr = _SHIFTR(w0, 0, 16);
|
||||
gSP.selectDL.sid = _SHIFTR(w0, 18, 8);
|
||||
gSP.selectDL.flag = w1;
|
||||
return;
|
||||
}
|
||||
if (RSP.nextCmd == G_RDPHALF_1) {
|
||||
RDP_TexRect(w0, w1);
|
||||
return;
|
||||
}
|
||||
assert(false);
|
||||
}
|
||||
|
||||
void S2DEX_Select_DL( u32 w0, u32 w1 )
|
||||
{
|
||||
LOG(LOG_WARNING, "S2DEX_Select_DL unimplemented\n");
|
||||
gSP.selectDL.addr |= (_SHIFTR(w0, 0, 16)) << 16;
|
||||
const u8 sid = gSP.selectDL.sid;
|
||||
const u32 flag = gSP.selectDL.flag;
|
||||
const u32 mask = w1;
|
||||
if ((gSP.status[sid] & mask) == flag)
|
||||
// Do nothing;
|
||||
return;
|
||||
|
||||
gSP.status[sid] = (gSP.status[sid] & ~mask) | (flag & mask);
|
||||
|
||||
switch (_SHIFTR( w0, 16, 8 ))
|
||||
{
|
||||
case G_DL_PUSH:
|
||||
gSPDisplayList( gSP.selectDL.addr );
|
||||
break;
|
||||
case G_DL_NOPUSH:
|
||||
gSPBranchList( gSP.selectDL.addr );
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void S2DEX_Obj_RenderMode( u32 w0, u32 w1 )
|
||||
|
@ -119,6 +153,7 @@ void S2DEX_Init()
|
|||
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 );
|
||||
GBI_SetGBI( G_RDPHALF_0, S2DEX_RDPHALF_0, S2DEX_RDPHalf_0 );
|
||||
GBI_SetGBI( G_RDPHALF_1, F3D_RDPHALF_1, F3D_RDPHalf_1 );
|
||||
GBI_SetGBI( G_RDPHALF_2, F3D_RDPHALF_2, F3D_RDPHalf_2 );
|
||||
GBI_SetGBI( G_LOAD_UCODE, S2DEX_LOAD_UCODE, F3DEX_Load_uCode );
|
||||
|
|
|
@ -173,6 +173,7 @@ void S2DEX_BG_Copy( u32 w0, u32 w1 );
|
|||
void S2DEX_Obj_Rectangle( u32 w0, u32 w1 );
|
||||
void S2DEX_Obj_Sprite( u32 w0, u32 w1 );
|
||||
void S2DEX_Obj_MoveMem( u32 w0, u32 w1 );
|
||||
void S2DEX_RDPHalf_0( u32 w0, u32 w1 );
|
||||
void S2DEX_Select_DL( u32 w0, u32 w1 );
|
||||
void S2DEX_Obj_RenderMode( u32 w0, u32 w1 );
|
||||
void S2DEX_Obj_Rectangle_R( u32 w0, u32 w1 );
|
||||
|
|
|
@ -50,6 +50,7 @@ void S2DEX2_Init()
|
|||
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 );
|
||||
GBI_SetGBI( G_RDPHALF_0, S2DEX2_RDPHALF_0, S2DEX_RDPHalf_0 );
|
||||
GBI_SetGBI( G_RDPHALF_1, F3DEX2_RDPHALF_1, F3D_RDPHalf_1 );
|
||||
GBI_SetGBI( G_RDPHALF_2, F3DEX2_RDPHALF_2, F3D_RDPHalf_2 );
|
||||
GBI_SetGBI( G_LOAD_UCODE, F3DEX2_LOAD_UCODE, F3DEX_Load_uCode );
|
||||
|
|
|
@ -1791,6 +1791,7 @@ void gSPLineW3D( s32 v0, s32 v1, s32 wd, s32 flag )
|
|||
|
||||
void gSPSetStatus(u32 sid, u32 val)
|
||||
{
|
||||
assert(sid <= 12);
|
||||
gSP.status[sid>>2] = val;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user