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

Implement F3DTEX/A ucode. Decoded by olivieryuyu.

Fixed 64 de hakken HLE not working. #268
This commit is contained in:
Sergey Lipskiy 2017-01-31 14:44:54 +07:00
parent 3ad872cff4
commit a8ecc0aa70
9 changed files with 92 additions and 1 deletions

View File

@ -284,6 +284,7 @@
<ClCompile Include="..\..\src\F3DGOLDEN.cpp" />
<ClCompile Include="..\..\src\F3DSETA.cpp" />
<ClCompile Include="..\..\src\F3DBETA.cpp" />
<ClCompile Include="..\..\src\F3DTEXA.cpp" />
<ClCompile Include="..\..\src\FBOTextureFormats.cpp" />
<ClCompile Include="..\..\src\FrameBuffer.cpp" />
<ClCompile Include="..\..\src\FrameBufferInfo.cpp" />
@ -402,6 +403,7 @@
<ClInclude Include="..\..\src\F3DEX2MM.h" />
<ClInclude Include="..\..\src\F3DGOLDEN.h" />
<ClInclude Include="..\..\src\F3DSETA.h" />
<ClInclude Include="..\..\src\F3DTEXA.h" />
<ClInclude Include="..\..\src\FBOTextureFormats.h" />
<ClInclude Include="..\..\src\FrameBuffer.h" />
<ClInclude Include="..\..\src\FrameBufferInfo.h" />

View File

@ -266,6 +266,9 @@
<ClCompile Include="..\..\src\F3DBETA.cpp">
<Filter>Source Files\uCodes</Filter>
</ClCompile>
<ClCompile Include="..\..\src\F3DTEXA.cpp">
<Filter>Source Files\uCodes</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<ClInclude Include="..\..\src\3DMath.h">
@ -475,5 +478,8 @@
<ClInclude Include="..\..\src\F3DBETA.h">
<Filter>Header Files\uCodes</Filter>
</ClInclude>
<ClInclude Include="..\..\src\F3DTEXA.h">
<Filter>Header Files\uCodes</Filter>
</ClInclude>
</ItemGroup>
</Project>

View File

@ -24,6 +24,7 @@ set(GLideN64_SOURCES
F3DEX2.cpp
F3DEX2CBFD.cpp
F3DEX2MM.cpp
F3DTEXA.cpp
FBOTextureFormats.cpp
FrameBuffer.cpp
FrameBufferInfo.cpp

66
src/F3DTEXA.cpp Normal file
View File

@ -0,0 +1,66 @@
#include "GLideN64.h"
#include "F3D.h"
#include "F3DEX.h"
#include "F3DTEXA.h"
#include "N64.h"
#include "RDP.h"
#include "gSP.h"
#include "GBI.h"
#define F3DTEXA_LOADTEX 0xB5
#define F3DTEXA_SETTILESIZE 0xBE
u32 G_TEXA_LOADTEX, G_TEXA_SETTILESIZE;
void F3DTTEXA_LoadTex(u32 w0, u32 w1)
{
RDP_SetTImg(0x3d100000, w1);
RDP_SetTile(0x35100000, 0x07000000);
RDP_LoadBlock(0x33000000, 0x27000000 | _SHIFTR(w0, 0, 24));
}
void F3DTTEXA_SetTileSize(u32 w0, u32 w1)
{
const u32 firstHalf = _SHIFTL(_SHIFTR(w1, 24, 8), 9, 8);
RDP_SetTile(0x35400000 | firstHalf, _SHIFTR(w0, 0, 24));
RDP_SetTileSize(0x32000000, _SHIFTR(w1, 0, 24));
}
void F3DTEXA_Init()
{
gSPSetupFunctions();
// Set GeometryMode flags
GBI_InitFlags(F3DEX);
GBI.PCStackSize = 18;
// GBI Command Command Value Command Function
GBI_SetGBI(G_SPNOOP, F3D_SPNOOP, F3D_SPNoOp);
GBI_SetGBI(G_MTX, F3D_MTX, F3D_Mtx);
GBI_SetGBI(G_RESERVED0, F3D_RESERVED0, F3D_Reserved0);
GBI_SetGBI(G_MOVEMEM, F3D_MOVEMEM, F3D_MoveMem);
GBI_SetGBI(G_VTX, F3D_VTX, F3DEX_Vtx);
GBI_SetGBI(G_RESERVED1, F3D_RESERVED1, F3D_Reserved1);
GBI_SetGBI(G_DL, F3D_DL, F3D_DList);
GBI_SetGBI(G_RESERVED2, F3D_RESERVED2, F3D_Reserved2);
GBI_SetGBI(G_RESERVED3, F3D_RESERVED3, F3D_Reserved3);
GBI_SetGBI(G_SPRITE2D_BASE, F3D_SPRITE2D_BASE, F3D_Sprite2D_Base);
GBI_SetGBI(G_TRI1, F3D_TRI1, F3DEX_Tri1);
GBI_SetGBI(G_TEXA_SETTILESIZE, F3DTEXA_SETTILESIZE, F3DTTEXA_SetTileSize);
GBI_SetGBI(G_POPMTX, F3D_POPMTX, F3D_PopMtx);
GBI_SetGBI(G_MOVEWORD, F3D_MOVEWORD, F3D_MoveWord);
GBI_SetGBI(G_TEXTURE, F3D_TEXTURE, F3D_Texture);
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_SETGEOMETRYMODE, F3D_SETGEOMETRYMODE, F3D_SetGeometryMode);
GBI_SetGBI(G_CLEARGEOMETRYMODE, F3D_CLEARGEOMETRYMODE, F3D_ClearGeometryMode);
GBI_SetGBI(G_TEXA_LOADTEX, F3DTEXA_LOADTEX, F3DTTEXA_LoadTex);
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_MODIFYVTX, F3DEX_MODIFYVTX, F3DEX_ModifyVtx);
GBI_SetGBI(G_TRI2, F3DEX_TRI2, F3DEX_Tri2);
GBI_SetGBI(G_BRANCH_Z, F3DEX_BRANCH_Z, F3DEX_Branch_Z);
GBI_SetGBI(G_LOAD_UCODE, F3DEX_LOAD_UCODE, F3DEX_Load_uCode);
}

6
src/F3DTEXA.h Normal file
View File

@ -0,0 +1,6 @@
#ifndef F3DTEXA_H
#define F3DTEXA_H
void F3DTEXA_Init();
#endif

View File

@ -25,6 +25,7 @@
#include "F3DGOLDEN.h"
#include "F3DEX2CBFD.h"
#include "F3DEX2MM.h"
#include "F3DTEXA.h"
#include "ZSort.h"
#include "CRC.h"
#include "Log.h"
@ -188,6 +189,7 @@ void GBIInfo::_makeCurrent(MicrocodeInfo * _pCurrent)
case F3DSETA: F3DSETA_Init(); break;
case F3DGOLDEN: F3DGOLDEN_Init(); break;
case F3DEX2MM: F3DEX2MM_Init(); break;
case F3DTEXA: F3DTEXA_Init(); break;
}
#ifndef GLESX
@ -290,6 +292,8 @@ void GBIInfo::loadMicrocode(u32 uc_start, u32 uc_dstart, u16 uc_dsize)
current.textureGen = false;
else if (strncmp(&uc_str[14], "F3DZ", 4) == 0)
type = F3DEX2MM;
else if (strncmp(&uc_str[14], "F3DTEX/A", 8) == 0)
type = F3DTEXA;
else if (strncmp(&uc_str[14], "F3DLX.Rej", 9) == 0)
current.NoN = true;
else if (strncmp(&uc_str[14], "F3DLP.Rej", 9) == 0) {

View File

@ -24,7 +24,8 @@
#define ZSortp 15
#define F3DSETA 16
#define F3DEX2MM 17
#define NONE 18
#define F3DTEXA 18
#define NONE 19
// Fixed point conversion factors
#define FIXED2FLOATRECIP1 0.5f

View File

@ -20,6 +20,10 @@ void RDP_TexRect(u32 w0, u32 w1);
void RDP_ProcessRDPList();
void RDP_RepeatLastLoadBlock();
void RDP_SetScissor(u32 w0, u32 w1);
void RDP_SetTImg(u32 w0, u32 w1);
void RDP_LoadBlock(u32 w0, u32 w1);
void RDP_SetTile(u32 w0, u32 w1);
void RDP_SetTileSize(u32 w0, u32 w1);
#endif

View File

@ -40,6 +40,7 @@ MY_LOCAL_SRC_FILES := \
$(SRCDIR)/F3DGOLDEN.cpp \
$(SRCDIR)/F3DSETA.cpp \
$(SRCDIR)/F3DBETA.cpp \
$(SRCDIR)/F3DTEXA.cpp \
$(SRCDIR)/FBOTextureFormats.cpp \
$(SRCDIR)/FrameBuffer.cpp \
$(SRCDIR)/FrameBufferInfo.cpp \