mirror of https://github.com/PCSX2/pcsx2.git
GSDumpGUI: Did a bunch of stuff I don't even remember. Disclaimer: I don't know C#.
git-svn-id: http://pcsx2.googlecode.com/svn/trunk@4147 96395faa-99c1-11dd-bbfe-3dabce05a288
This commit is contained in:
parent
e89c3cb8cc
commit
050354ff0c
|
@ -56,15 +56,17 @@
|
|||
<DependentUpon>frmMain.cs</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="Library\GSDump\GSData\GIFPacket\GIFPrim.cs" />
|
||||
<Compile Include="Library\GSDump\GSData\GIFPacket\GIFReg\GIFRegNOP.cs" />
|
||||
<Compile Include="Library\GSDump\GSData\GIFPacket\GIFReg\GIFRegUnimpl.cs" />
|
||||
<Compile Include="Library\GSDump\GSData\GIFPacket\GIFReg\GIFRegAD.cs" />
|
||||
<Compile Include="Library\GSDump\GSData\GIFPacket\GIFReg\GIFRegTEX0.cs" />
|
||||
<Compile Include="Library\GSDump\GSData\GIFPacket\GIFReg\GIFRegFOG.cs" />
|
||||
<Compile Include="Library\GSDump\GSData\GIFPacket\GIFReg\GIFRegXYZ.cs" />
|
||||
<Compile Include="Library\GSDump\GSData\GIFPacket\GIFReg\GIFRegXYZF.cs" />
|
||||
<Compile Include="Library\GSDump\GSData\GIFPacket\GIFReg\GIFRegUV.cs" />
|
||||
<Compile Include="Library\GSDump\GSData\GIFPacket\GIFReg\GIFRegST.cs" />
|
||||
<Compile Include="Library\GSDump\GSData\GIFPacket\GIFReg\GIFReg.cs" />
|
||||
<Compile Include="Library\GSDump\GSData\GIFPacket\GIFReg\GifImage.cs" />
|
||||
<Compile Include="Library\GSDump\GSData\GIFPacket\GIFReg\GIFRegPrim.cs" />
|
||||
<Compile Include="Library\GSDump\GSData\GIFPacket\GIFReg\GIFRegPRIM.cs" />
|
||||
<Compile Include="Library\GSDump\GSData\GIFPacket\GIFReg\GIFRegRGBAQ.cs" />
|
||||
<Compile Include="Library\GSDump\GSData\GIFPacket\GIFReg\IGifData.cs" />
|
||||
<Compile Include="Library\GSDump\GSData\GIFPacket\GIFTag.cs" />
|
||||
|
|
|
@ -415,51 +415,7 @@ namespace GSDumpGUI
|
|||
val += "regs~";
|
||||
foreach (var itm in tag.regs)
|
||||
{
|
||||
if (itm.GetType().IsSubclassOf(typeof(GIFReg)))
|
||||
{
|
||||
if (itm.GetType() == typeof(GIFRegPrim))
|
||||
{
|
||||
GIFRegPrim p = (GIFRegPrim)itm;
|
||||
val += "Packed Primitive@Primitive Type : " + p.PrimitiveType.ToString() + "@IIP : " + p.IIP.ToString() + "@TME : " + p.TME.ToString() + "@FGE : " + p.FGE.ToString()
|
||||
+ "@ABE : " + p.ABE.ToString() + "@AA1 : " + p.AA1.ToString() + "@FST : " + p.FST.ToString() + "@CTXT : " + p.CTXT.ToString() + "@FIX : " + p.FIX.ToString() + "~";
|
||||
}
|
||||
if (itm.GetType() == typeof(GIFRegRGBAQ))
|
||||
{
|
||||
GIFRegRGBAQ p = (GIFRegRGBAQ)itm;
|
||||
val += "Packed RGBAQ@Red : " + p.R.ToString() + "@Green : " + p.G.ToString() + "@Blue : " + p.B.ToString() + "@Alpha : " + p.A.ToString() + "~";
|
||||
}
|
||||
if (itm.GetType() == typeof(GIFRegST))
|
||||
{
|
||||
GIFRegST p = (GIFRegST)itm;
|
||||
val += "Packed ST@S : " + p.S.ToString("F8") + "@T : " + p.T.ToString("F8") + "@Q : " + p.Q.ToString("F8") + "~";
|
||||
}
|
||||
if (itm.GetType() == typeof(GIFRegUV))
|
||||
{
|
||||
GIFRegUV p = (GIFRegUV)itm;
|
||||
val += "Packed UV@U : " + p.U.ToString("F4") + "@V : " + p.V.ToString("F4") + "~";
|
||||
}
|
||||
if (itm.GetType() == typeof(GIFRegXYZF))
|
||||
{
|
||||
GIFRegXYZF p = (GIFRegXYZF)itm;
|
||||
val += "Packed XYZF@X : " + p.X.ToString("F4") + "@Y : " + p.Y.ToString("F4") + "@Z : " + p.Z.ToString() + "@F : " + p.F.ToString() + "@ADC : " + p.ADC.ToString() + "~";
|
||||
}
|
||||
if (itm.GetType() == typeof(GIFRegXYZ))
|
||||
{
|
||||
GIFRegXYZ p = (GIFRegXYZ)itm;
|
||||
val += "Packed XYZ@X : " + p.X.ToString("F4") + "@Y : " + p.Y.ToString("F4") + "@Z : " + p.Z.ToString() + "@ADC : " + p.ADC.ToString() + "~";
|
||||
}
|
||||
if (itm.GetType() == typeof(GIFRegTEX0))
|
||||
{
|
||||
GIFRegTEX0 p = (GIFRegTEX0)itm;
|
||||
val += "Packed TEX0@TBP0 : " + p.TBP0.ToString() + "@TBW : " + p.TBW.ToString() + "@PSM : " + p.PSM.ToString() + "@TW : " + p.TW.ToString() + "@TH : " + p.TH.ToString()
|
||||
+ "@TCC : " + p.TCC.ToString() + "@TFX : " + p.TFX.ToString() + "@CBP : " + p.CBP.ToString() + "@CPSM : " + p.CPSM.ToString() + "@CSM : " + p.CSM.ToString()
|
||||
+ "@CSA : " + p.CSA.ToString() + "@CLD : " + p.CLD.ToString() + "~";
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
}
|
||||
val += itm.ToString() + "~";
|
||||
}
|
||||
break;
|
||||
case GSType.VSync:
|
||||
|
|
|
@ -10,7 +10,12 @@ namespace GSDumpGUI
|
|||
|
||||
static public UInt64 GetBit(UInt64 value, byte lower, byte count)
|
||||
{
|
||||
return (value >> lower) & (ulong)((Math.Pow(2, count)) - 1);
|
||||
return (value >> lower) & (ulong)((1 << count) - 1);
|
||||
}
|
||||
|
||||
public override string ToString()
|
||||
{
|
||||
return Descriptor.ToString();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -27,11 +32,51 @@ namespace GSDumpGUI
|
|||
CLAMP_1 = 0x08,
|
||||
CLAMP_2 = 0x09,
|
||||
FOG = 0x0a,
|
||||
Reserved = 0x0b,
|
||||
XYZF3 = 0x0c,
|
||||
XYZ3 = 0x0d,
|
||||
AD = 0x0e,
|
||||
NOP = 0x0f
|
||||
NOP = 0x0f, // actually, 0xf is the standard GIF NOP and 0x7f is the standard GS NOP, but all unregistered addresses act as NOPs... probably
|
||||
TEX1_1 = 0x14,
|
||||
TEX1_2 = 0x15,
|
||||
TEX2_1 = 0x16,
|
||||
TEX2_2 = 0x17,
|
||||
XYOFFSET_1 = 0x18,
|
||||
XYOFFSET_2 = 0x19,
|
||||
PRMODECONT = 0x1a,
|
||||
PRMODE = 0x1b,
|
||||
TEXCLUT = 0x1c,
|
||||
SCANMSK = 0x22,
|
||||
MIPTBP1_1 = 0x34,
|
||||
MIPTBP1_2 = 0x35,
|
||||
MIPTBP2_1 = 0x36,
|
||||
MIPTBP2_2 = 0x37,
|
||||
TEXA = 0x3b,
|
||||
FOGCOL = 0x3d,
|
||||
TEXFLUSH = 0x3f,
|
||||
SCISSOR_1 = 0x40,
|
||||
SCISSOR_2 = 0x41,
|
||||
ALPHA_1 = 0x42,
|
||||
ALPHA_2 = 0x43,
|
||||
DIMX = 0x44,
|
||||
DTHE = 0x45,
|
||||
COLCLAMP = 0x46,
|
||||
TEST_1 = 0x47,
|
||||
TEST_2 = 0x48,
|
||||
PABE = 0x49,
|
||||
FBA_1 = 0x4a,
|
||||
FBA_2 = 0x4b,
|
||||
FRAME_1 = 0x4c,
|
||||
FRAME_2 = 0x4d,
|
||||
ZBUF_1 = 0x4e,
|
||||
ZBUF_2 = 0x4f,
|
||||
BITBLTBUF = 0x50,
|
||||
TRXPOS = 0x51,
|
||||
TRXREG = 0x52,
|
||||
TRXDIR = 0x53,
|
||||
HWREG = 0x54,
|
||||
SIGNAL = 0x60,
|
||||
FINISH = 0x61,
|
||||
LABEL = 0x62,
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -0,0 +1,17 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
|
||||
namespace GSDumpGUI
|
||||
{
|
||||
public class GIFRegAD : GIFReg
|
||||
{
|
||||
static public GIFReg Unpack(GIFTag tag, int addr, UInt64 LowData, UInt64 HighData, bool PackedFormat)
|
||||
{
|
||||
int reg = (int)GetBit(HighData, 0, 8);
|
||||
if (reg == (int)GIFRegDescriptor.AD)
|
||||
return GIFRegNOP.Unpack(tag, reg, LowData, HighData, PackedFormat);
|
||||
return GIFTag.GetUnpack(reg)(tag, reg, LowData, 0, false);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -8,11 +8,14 @@ namespace GSDumpGUI
|
|||
{
|
||||
public double F;
|
||||
|
||||
static public GIFReg Unpack(UInt64 LowData, UInt64 HighData, bool PlainFormat)
|
||||
static public GIFReg Unpack(GIFTag tag, int addr, UInt64 LowData, UInt64 HighData, bool PackedFormat)
|
||||
{
|
||||
GIFRegFOG u = new GIFRegFOG();
|
||||
u.Descriptor = GIFRegDescriptor.FOG;
|
||||
u.F = (UInt16)(GIFReg.GetBit(HighData, 36, 8));
|
||||
u.Descriptor = (GIFRegDescriptor)addr;
|
||||
if (PackedFormat)
|
||||
u.F = (UInt16)(GetBit(HighData, 36, 8));
|
||||
else
|
||||
u.F = GetBit(LowData, 56, 8);
|
||||
return u;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,16 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
|
||||
namespace GSDumpGUI
|
||||
{
|
||||
public class GIFRegNOP : GIFReg
|
||||
{
|
||||
static public GIFReg Unpack(GIFTag tag, int addr, UInt64 LowData, UInt64 HighData, bool PackedFormat)
|
||||
{
|
||||
GIFRegNOP nop = new GIFRegNOP();
|
||||
nop.Descriptor = GIFRegDescriptor.NOP;
|
||||
return nop;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -4,7 +4,7 @@ using System.Text;
|
|||
|
||||
namespace GSDumpGUI
|
||||
{
|
||||
public class GIFRegPrim : GIFReg
|
||||
public class GIFRegPRIM : GIFReg
|
||||
{
|
||||
public GS_PRIM PrimitiveType;
|
||||
public GSIIP IIP;
|
||||
|
@ -16,21 +16,27 @@ namespace GSDumpGUI
|
|||
public GSCTXT CTXT;
|
||||
public GSFIX FIX;
|
||||
|
||||
static public GIFReg Unpack(UInt64 LowData, UInt64 HighData, bool PlainFormat)
|
||||
static public GIFReg Unpack(GIFTag tag, int addr, UInt64 LowData, UInt64 HighData, bool PackedFormat)
|
||||
{
|
||||
GIFRegPrim pr = new GIFRegPrim();
|
||||
pr.Descriptor = GIFRegDescriptor.PRIM;
|
||||
pr.PrimitiveType = (GS_PRIM)GIFReg.GetBit(LowData, 0, 3);
|
||||
pr.IIP = (GSIIP)GIFReg.GetBit(LowData, 3, 1);
|
||||
pr.TME = Convert.ToBoolean(GIFReg.GetBit(LowData, 4, 1));
|
||||
pr.FGE = Convert.ToBoolean(GIFReg.GetBit(LowData, 5, 1));
|
||||
pr.ABE = Convert.ToBoolean(GIFReg.GetBit(LowData, 6, 1));
|
||||
pr.AA1 = Convert.ToBoolean(GIFReg.GetBit(LowData, 7, 1));
|
||||
pr.FST = (GSFST)(GIFReg.GetBit(LowData, 8, 1));
|
||||
pr.CTXT = (GSCTXT)(GIFReg.GetBit(LowData, 9, 1));
|
||||
pr.FIX = (GSFIX)(GIFReg.GetBit(LowData, 10, 1));
|
||||
GIFRegPRIM pr = new GIFRegPRIM();
|
||||
pr.Descriptor = (GIFRegDescriptor)addr;
|
||||
pr.PrimitiveType = (GS_PRIM)GetBit(LowData, 0, 3);
|
||||
pr.IIP = (GSIIP)GetBit(LowData, 3, 1);
|
||||
pr.TME = Convert.ToBoolean(GetBit(LowData, 4, 1));
|
||||
pr.FGE = Convert.ToBoolean(GetBit(LowData, 5, 1));
|
||||
pr.ABE = Convert.ToBoolean(GetBit(LowData, 6, 1));
|
||||
pr.AA1 = Convert.ToBoolean(GetBit(LowData, 7, 1));
|
||||
pr.FST = (GSFST)(GetBit(LowData, 8, 1));
|
||||
pr.CTXT = (GSCTXT)(GetBit(LowData, 9, 1));
|
||||
pr.FIX = (GSFIX)(GetBit(LowData, 10, 1));
|
||||
return pr;
|
||||
}
|
||||
|
||||
public override string ToString()
|
||||
{
|
||||
return Descriptor.ToString() + "@Primitive Type : " + PrimitiveType.ToString() + "@IIP : " + IIP.ToString() + "@TME : " + TME.ToString() + "@FGE : " + FGE.ToString()
|
||||
+ "@ABE : " + ABE.ToString() + "@AA1 : " + AA1.ToString() + "@FST : " + FST.ToString() + "@CTXT : " + CTXT.ToString() + "@FIX : " + FIX.ToString();
|
||||
}
|
||||
}
|
||||
|
||||
public enum GSIIP
|
||||
|
|
|
@ -10,16 +10,34 @@ namespace GSDumpGUI
|
|||
public int G;
|
||||
public int B;
|
||||
public int A;
|
||||
public float Q;
|
||||
|
||||
static public GIFReg Unpack(UInt64 LowData, UInt64 HighData, bool PlainFormat)
|
||||
static public GIFReg Unpack(GIFTag tag, int addr, UInt64 LowData, UInt64 HighData, bool PackedFormat)
|
||||
{
|
||||
GIFRegRGBAQ r = new GIFRegRGBAQ();
|
||||
r.Descriptor = GIFRegDescriptor.RGBAQ;
|
||||
r.R = (int)GIFReg.GetBit(LowData, 0, 8);
|
||||
r.G = (int)GIFReg.GetBit(LowData, 32, 8);
|
||||
r.B = (int)GIFReg.GetBit(HighData, 0, 8);
|
||||
r.A = (int)GIFReg.GetBit(HighData, 32, 8);
|
||||
r.Descriptor = (GIFRegDescriptor)addr;
|
||||
if (PackedFormat)
|
||||
{
|
||||
r.R = (int)GetBit(LowData, 0, 8);
|
||||
r.G = (int)GetBit(LowData, 32, 8);
|
||||
r.B = (int)GetBit(HighData, 0, 8);
|
||||
r.A = (int)GetBit(HighData, 32, 8);
|
||||
r.Q = tag.Q;
|
||||
}
|
||||
else
|
||||
{
|
||||
r.R = (int)GetBit(LowData, 0, 8);
|
||||
r.G = (int)GetBit(LowData, 8, 8);
|
||||
r.B = (int)GetBit(LowData, 16, 8);
|
||||
r.A = (int)GetBit(LowData, 24, 8);
|
||||
r.Q = BitConverter.ToSingle(BitConverter.GetBytes(LowData), 4);
|
||||
}
|
||||
return r;
|
||||
}
|
||||
|
||||
public override string ToString()
|
||||
{
|
||||
return Descriptor.ToString() + "@Red : " + R.ToString() + "@Green : " + G.ToString() + "@Blue : " + B.ToString() + "@Alpha : " + A.ToString();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -10,26 +10,30 @@ namespace GSDumpGUI
|
|||
public float T;
|
||||
public float Q;
|
||||
|
||||
static public GIFReg Unpack(UInt64 LowData, UInt64 HighData, bool PlainFormat)
|
||||
public bool isSTQ;
|
||||
|
||||
static public GIFReg Unpack(GIFTag tag, int addr, UInt64 LowData, UInt64 HighData, bool PackedFormat)
|
||||
{
|
||||
unsafe
|
||||
GIFRegST st = new GIFRegST();
|
||||
st.Descriptor = (GIFRegDescriptor)addr;
|
||||
|
||||
st.S = BitConverter.ToSingle(BitConverter.GetBytes(LowData), 0);
|
||||
st.T = BitConverter.ToSingle(BitConverter.GetBytes(LowData), 4);
|
||||
if (PackedFormat)
|
||||
{
|
||||
GIFRegST st = new GIFRegST();
|
||||
st.Descriptor = GIFRegDescriptor.ST;
|
||||
|
||||
ulong pt = GIFReg.GetBit(LowData, 0, 32);
|
||||
void* ptt = &pt;
|
||||
st.S = *(float*)ptt;
|
||||
|
||||
pt = GIFReg.GetBit(LowData, 32, 32);
|
||||
ptt = &pt;
|
||||
st.T = *(float*)ptt;
|
||||
|
||||
pt = GIFReg.GetBit(HighData, 0, 32);
|
||||
ptt = &pt;
|
||||
st.Q = *(float*)ptt;
|
||||
return st;
|
||||
st.Q = BitConverter.ToSingle(BitConverter.GetBytes(HighData), 0);
|
||||
tag.Q = st.Q;
|
||||
st.isSTQ = true;
|
||||
}
|
||||
else
|
||||
st.isSTQ = false;
|
||||
|
||||
return st;
|
||||
}
|
||||
|
||||
public override string ToString()
|
||||
{
|
||||
return Descriptor.ToString() + "@S : " + S.ToString("F8") + "@T : " + T.ToString("F8") + (isSTQ ? "@Q : " + Q.ToString("F8") : "");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -19,23 +19,30 @@ namespace GSDumpGUI
|
|||
public int CSA;
|
||||
public int CLD;
|
||||
|
||||
static public GIFReg Unpack(UInt64 LowData, UInt64 HighData, bool PlainFormat)
|
||||
static public GIFReg Unpack(GIFTag tag, int addr, UInt64 LowData, UInt64 HighData, bool PackedFormat)
|
||||
{
|
||||
GIFRegTEX0 r = new GIFRegTEX0();
|
||||
r.Descriptor = GIFRegDescriptor.TEX0_1;
|
||||
r.TBP0 = (int)GetBit(LowData, 0, 14);
|
||||
r.TBW = (int)GetBit(LowData, 14, 6);
|
||||
r.PSM = (TEXPSM)(int)GetBit(LowData, 20, 6);
|
||||
r.TW = (int)GetBit(LowData, 26, 4);
|
||||
r.TH = (int)GetBit(LowData, 30, 4);
|
||||
r.TCC = (TEXTCC)(int)GetBit(LowData, 34, 1);
|
||||
r.TFX = (TEXTFX)(int)GetBit(LowData, 35, 2);
|
||||
r.CBP = (int)GetBit(LowData, 37, 14);
|
||||
r.CPSM = (TEXCPSM)(int)GetBit(LowData, 51, 4);
|
||||
r.CSM = (TEXCSM)(int)GetBit(LowData, 55, 1);
|
||||
r.CSA = (int)GetBit(LowData, 56, 5);
|
||||
r.CLD = (int)GetBit(LowData, 61, 3);
|
||||
return r;
|
||||
GIFRegTEX0 tex0 = new GIFRegTEX0();
|
||||
tex0.Descriptor = (GIFRegDescriptor)addr;
|
||||
tex0.TBP0 = (int)GetBit(LowData, 0, 14);
|
||||
tex0.TBW = (int)GetBit(LowData, 14, 6);
|
||||
tex0.PSM = (TEXPSM)(int)GetBit(LowData, 20, 6);
|
||||
tex0.TW = (int)GetBit(LowData, 26, 4);
|
||||
tex0.TH = (int)GetBit(LowData, 30, 4);
|
||||
tex0.TCC = (TEXTCC)(int)GetBit(LowData, 34, 1);
|
||||
tex0.TFX = (TEXTFX)(int)GetBit(LowData, 35, 2);
|
||||
tex0.CBP = (int)GetBit(LowData, 37, 14);
|
||||
tex0.CPSM = (TEXCPSM)(int)GetBit(LowData, 51, 4);
|
||||
tex0.CSM = (TEXCSM)(int)GetBit(LowData, 55, 1);
|
||||
tex0.CSA = (int)GetBit(LowData, 56, 5);
|
||||
tex0.CLD = (int)GetBit(LowData, 61, 3);
|
||||
return tex0;
|
||||
}
|
||||
|
||||
public override string ToString()
|
||||
{
|
||||
return Descriptor.ToString() + "@TBP0 : " + TBP0.ToString() + "@TBW : " + TBW.ToString() + "@PSM : " + PSM.ToString() + "@TW : " + TW.ToString() + "@TH : " + TH.ToString()
|
||||
+ "@TCC : " + TCC.ToString() + "@TFX : " + TFX.ToString() + "@CBP : " + CBP.ToString() + "@CPSM : " + CPSM.ToString() + "@CSM : " + CSM.ToString()
|
||||
+ "@CSA : " + CSA.ToString() + "@CLD : " + CLD.ToString();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -9,13 +9,26 @@ namespace GSDumpGUI
|
|||
public double U;
|
||||
public double V;
|
||||
|
||||
static public GIFReg Unpack(UInt64 LowData, UInt64 HighData, bool PlainFormat)
|
||||
static public GIFReg Unpack(GIFTag tag, int addr, UInt64 LowData, UInt64 HighData, bool PackedFormat)
|
||||
{
|
||||
GIFRegUV u = new GIFRegUV();
|
||||
u.Descriptor = GIFRegDescriptor.UV;
|
||||
u.U = GIFReg.GetBit(LowData, 0, 14) / 16d;
|
||||
u.V = GIFReg.GetBit(LowData, 32, 14) / 16d;
|
||||
return u;
|
||||
GIFRegUV uv = new GIFRegUV();
|
||||
uv.Descriptor = (GIFRegDescriptor)addr;
|
||||
if (PackedFormat)
|
||||
{
|
||||
uv.U = GetBit(LowData, 0, 14) / 16d;
|
||||
uv.V = GetBit(LowData, 32, 14) / 16d;
|
||||
}
|
||||
else
|
||||
{
|
||||
uv.U = GetBit(LowData, 0, 14) / 16d;
|
||||
uv.V = GetBit(LowData, 16, 14) / 16d;
|
||||
}
|
||||
return uv;
|
||||
}
|
||||
|
||||
public override string ToString()
|
||||
{
|
||||
return Descriptor.ToString() + "@U : " + U.ToString("F4") + "@V : " + V.ToString("F4");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,16 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
|
||||
namespace GSDumpGUI
|
||||
{
|
||||
public class GIFRegUnimpl : GIFReg
|
||||
{
|
||||
static public GIFReg Unpack(GIFTag tag, int addr, UInt64 LowData, UInt64 HighData, bool PackedFormat)
|
||||
{
|
||||
GIFRegUnimpl u = new GIFRegUnimpl();
|
||||
u.Descriptor = (GIFRegDescriptor)addr;
|
||||
return u;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,25 +0,0 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
|
||||
namespace GSDumpGUI
|
||||
{
|
||||
public class GIFRegXYZ : GIFReg
|
||||
{
|
||||
public double X;
|
||||
public double Y;
|
||||
public UInt32 Z;
|
||||
public bool ADC;
|
||||
|
||||
static public GIFReg Unpack(UInt64 LowData, UInt64 HighData, bool PlainFormat)
|
||||
{
|
||||
GIFRegXYZ xf = new GIFRegXYZ();
|
||||
xf.ADC = GIFReg.GetBit(HighData, 47, 1) == 1;
|
||||
xf.Descriptor = (xf.ADC == true ? GIFRegDescriptor.XYZ3 : GIFRegDescriptor.XYZ2);
|
||||
xf.X = GIFReg.GetBit(LowData, 0, 16) / 16d;
|
||||
xf.Y = GIFReg.GetBit(LowData, 32, 16) / 16d;
|
||||
xf.Z = (UInt32)(GIFReg.GetBit(HighData, 4, 24));
|
||||
return xf;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -10,18 +10,64 @@ namespace GSDumpGUI
|
|||
public double Y;
|
||||
public UInt32 Z;
|
||||
public UInt16 F;
|
||||
public bool ADC;
|
||||
|
||||
static public GIFReg Unpack(UInt64 LowData, UInt64 HighData, bool PlainFormat)
|
||||
public bool IsXYZF;
|
||||
|
||||
static public GIFReg UnpackXYZ(GIFTag tag, int addr, UInt64 LowData, UInt64 HighData, bool PackedFormat)
|
||||
{
|
||||
GIFRegXYZF xf2 = new GIFRegXYZF();
|
||||
xf2.ADC = GIFReg.GetBit(HighData, 47, 1) == 1;
|
||||
xf2.Descriptor = (xf2.ADC == true ? GIFRegDescriptor.XYZF3 : GIFRegDescriptor.XYZF2);
|
||||
xf2.X = GIFReg.GetBit(LowData, 0, 16) / 16d;
|
||||
xf2.Y = GIFReg.GetBit(LowData, 32, 16) / 16d;
|
||||
xf2.Z = (UInt32)(GIFReg.GetBit(HighData, 4, 24));
|
||||
xf2.F = (UInt16)(GIFReg.GetBit(HighData, 36, 8));
|
||||
return xf2;
|
||||
GIFRegXYZF xyzf = new GIFRegXYZF();
|
||||
|
||||
xyzf.IsXYZF = false;
|
||||
if (PackedFormat && addr == (int)GIFRegDescriptor.XYZ2 && GetBit(HighData, 47, 1) == 1)
|
||||
xyzf.Descriptor = GIFRegDescriptor.XYZ3;
|
||||
else
|
||||
xyzf.Descriptor = (GIFRegDescriptor)addr;
|
||||
|
||||
if (PackedFormat)
|
||||
{
|
||||
xyzf.X = GetBit(LowData, 0, 16) / 16d;
|
||||
xyzf.Y = GetBit(LowData, 32, 16) / 16d;
|
||||
xyzf.Z = (UInt32)(GetBit(HighData, 0, 32));
|
||||
}
|
||||
else
|
||||
{
|
||||
xyzf.X = GetBit(LowData, 0, 16) / 16d;
|
||||
xyzf.Y = GetBit(LowData, 16, 16) / 16d;
|
||||
xyzf.Z = (UInt32)(GetBit(LowData, 32, 32));
|
||||
}
|
||||
return xyzf;
|
||||
}
|
||||
|
||||
static public GIFReg Unpack(GIFTag tag, int addr, UInt64 LowData, UInt64 HighData, bool PackedFormat)
|
||||
{
|
||||
GIFRegXYZF xyzf = new GIFRegXYZF();
|
||||
|
||||
xyzf.IsXYZF = true;
|
||||
if (PackedFormat && addr == (int)GIFRegDescriptor.XYZF2 && GetBit(HighData, 47, 1) == 1)
|
||||
xyzf.Descriptor = GIFRegDescriptor.XYZF3;
|
||||
else
|
||||
xyzf.Descriptor = (GIFRegDescriptor)addr;
|
||||
|
||||
if (PackedFormat)
|
||||
{
|
||||
xyzf.X = GetBit(LowData, 0, 16) / 16d;
|
||||
xyzf.Y = GetBit(LowData, 32, 16) / 16d;
|
||||
xyzf.Z = (UInt32)(GetBit(HighData, 4, 24));
|
||||
xyzf.F = (UInt16)(GetBit(HighData, 36, 8));
|
||||
}
|
||||
else
|
||||
{
|
||||
xyzf.X = GetBit(LowData, 0, 16) / 16d;
|
||||
xyzf.Y = GetBit(LowData, 16, 16) / 16d;
|
||||
xyzf.Z = (UInt32)(GetBit(LowData, 32, 24));
|
||||
xyzf.F = (UInt16)(GetBit(LowData, 56, 8));
|
||||
}
|
||||
return xyzf;
|
||||
}
|
||||
|
||||
public override string ToString()
|
||||
{
|
||||
return Descriptor.ToString() + "@X : " + X.ToString("F4") + "@Y : " + Y.ToString("F4") + "@Z : " + Z.ToString() + (IsXYZF ? "@F : " + F.ToString() : "");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -6,7 +6,6 @@ namespace GSDumpGUI
|
|||
{
|
||||
public class GifImage : IGifData
|
||||
{
|
||||
public byte[] LowData;
|
||||
public byte[] HighData;
|
||||
public byte[] Data;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -6,8 +6,8 @@ namespace GSDumpGUI
|
|||
{
|
||||
public class GIFTag
|
||||
{
|
||||
public delegate GIFReg Unpack(UInt64 LowData, UInt64 HighData, bool PlainFormat);
|
||||
static public Dictionary<int, Unpack> Registers;
|
||||
public delegate GIFReg Unpack(GIFTag tag, int addr, UInt64 LowData, UInt64 HighData, bool PackedFormat);
|
||||
static public Dictionary<int, Unpack> UnpackReg;
|
||||
|
||||
public Int32 nloop;
|
||||
public Int32 eop;
|
||||
|
@ -18,22 +18,78 @@ namespace GSDumpGUI
|
|||
public GIFFLG flg;
|
||||
public Int32 nreg;
|
||||
public List<IGifData> regs;
|
||||
|
||||
static internal unsafe GIFTag ExtractGifTag(byte[] data)
|
||||
public float Q; // GIF has an internal Q register which is reset to 1.0 at the tag and updated on packed ST(Q) for output at next RGBAQ
|
||||
|
||||
static GIFTag()
|
||||
{
|
||||
Registers = new Dictionary<int, Unpack>();
|
||||
Registers.Add((int)GIFRegDescriptor.PRIM, new Unpack(GIFRegPrim.Unpack));
|
||||
Registers.Add((int)GIFRegDescriptor.ST, new Unpack(GIFRegST.Unpack));
|
||||
Registers.Add((int)GIFRegDescriptor.TEX0_1, new Unpack(GIFRegTEX0.Unpack));
|
||||
Registers.Add((int)GIFRegDescriptor.TEX0_2, new Unpack(GIFRegTEX0.Unpack));
|
||||
Registers.Add((int)GIFRegDescriptor.XYZ2, new Unpack(GIFRegXYZ.Unpack));
|
||||
Registers.Add((int)GIFRegDescriptor.XYZ3, new Unpack(GIFRegXYZ.Unpack));
|
||||
Registers.Add((int)GIFRegDescriptor.XYZF2, new Unpack(GIFRegXYZF.Unpack));
|
||||
Registers.Add((int)GIFRegDescriptor.XYZF3, new Unpack(GIFRegXYZF.Unpack));
|
||||
Registers.Add((int)GIFRegDescriptor.FOG, new Unpack(GIFRegFOG.Unpack));
|
||||
Registers.Add((int)GIFRegDescriptor.UV, new Unpack(GIFRegUV.Unpack));
|
||||
Registers.Add((int)GIFRegDescriptor.RGBAQ, new Unpack(GIFRegRGBAQ.Unpack));
|
||||
UnpackReg = new Dictionary<int, Unpack>();
|
||||
UnpackReg.Add((int)GIFRegDescriptor.PRIM, GIFRegPRIM.Unpack);
|
||||
UnpackReg.Add((int)GIFRegDescriptor.RGBAQ, GIFRegRGBAQ.Unpack);
|
||||
UnpackReg.Add((int)GIFRegDescriptor.ST, GIFRegST.Unpack);
|
||||
UnpackReg.Add((int)GIFRegDescriptor.UV, GIFRegUV.Unpack);
|
||||
UnpackReg.Add((int)GIFRegDescriptor.XYZF2, GIFRegXYZF.Unpack);
|
||||
UnpackReg.Add((int)GIFRegDescriptor.XYZ2, GIFRegXYZF.UnpackXYZ);
|
||||
UnpackReg.Add((int)GIFRegDescriptor.TEX0_1, GIFRegTEX0.Unpack);
|
||||
UnpackReg.Add((int)GIFRegDescriptor.TEX0_2, GIFRegTEX0.Unpack);
|
||||
UnpackReg.Add((int)GIFRegDescriptor.CLAMP_1, GIFRegUnimpl.Unpack);
|
||||
UnpackReg.Add((int)GIFRegDescriptor.CLAMP_2, GIFRegUnimpl.Unpack);
|
||||
UnpackReg.Add((int)GIFRegDescriptor.FOG, GIFRegFOG.Unpack);
|
||||
UnpackReg.Add((int)GIFRegDescriptor.XYZF3, GIFRegXYZF.Unpack);
|
||||
UnpackReg.Add((int)GIFRegDescriptor.XYZ3, GIFRegXYZF.UnpackXYZ);
|
||||
UnpackReg.Add((int)GIFRegDescriptor.AD, GIFRegAD.Unpack);
|
||||
UnpackReg.Add((int)GIFRegDescriptor.TEX1_1, GIFRegUnimpl.Unpack);
|
||||
UnpackReg.Add((int)GIFRegDescriptor.TEX1_2, GIFRegUnimpl.Unpack);
|
||||
UnpackReg.Add((int)GIFRegDescriptor.TEX2_1, GIFRegUnimpl.Unpack);
|
||||
UnpackReg.Add((int)GIFRegDescriptor.TEX2_2, GIFRegUnimpl.Unpack);
|
||||
UnpackReg.Add((int)GIFRegDescriptor.XYOFFSET_1, GIFRegUnimpl.Unpack);
|
||||
UnpackReg.Add((int)GIFRegDescriptor.XYOFFSET_2, GIFRegUnimpl.Unpack);
|
||||
UnpackReg.Add((int)GIFRegDescriptor.PRMODECONT, GIFRegUnimpl.Unpack);
|
||||
UnpackReg.Add((int)GIFRegDescriptor.PRMODE, GIFRegUnimpl.Unpack);
|
||||
UnpackReg.Add((int)GIFRegDescriptor.TEXCLUT, GIFRegUnimpl.Unpack);
|
||||
UnpackReg.Add((int)GIFRegDescriptor.SCANMSK, GIFRegUnimpl.Unpack);
|
||||
UnpackReg.Add((int)GIFRegDescriptor.MIPTBP1_1, GIFRegUnimpl.Unpack);
|
||||
UnpackReg.Add((int)GIFRegDescriptor.MIPTBP1_2, GIFRegUnimpl.Unpack);
|
||||
UnpackReg.Add((int)GIFRegDescriptor.MIPTBP2_1, GIFRegUnimpl.Unpack);
|
||||
UnpackReg.Add((int)GIFRegDescriptor.MIPTBP2_2, GIFRegUnimpl.Unpack);
|
||||
UnpackReg.Add((int)GIFRegDescriptor.TEXA, GIFRegUnimpl.Unpack);
|
||||
UnpackReg.Add((int)GIFRegDescriptor.FOGCOL, GIFRegUnimpl.Unpack);
|
||||
UnpackReg.Add((int)GIFRegDescriptor.TEXFLUSH, GIFRegUnimpl.Unpack);
|
||||
UnpackReg.Add((int)GIFRegDescriptor.SCISSOR_1, GIFRegUnimpl.Unpack);
|
||||
UnpackReg.Add((int)GIFRegDescriptor.SCISSOR_2, GIFRegUnimpl.Unpack);
|
||||
UnpackReg.Add((int)GIFRegDescriptor.ALPHA_1, GIFRegUnimpl.Unpack);
|
||||
UnpackReg.Add((int)GIFRegDescriptor.ALPHA_2, GIFRegUnimpl.Unpack);
|
||||
UnpackReg.Add((int)GIFRegDescriptor.DIMX, GIFRegUnimpl.Unpack);
|
||||
UnpackReg.Add((int)GIFRegDescriptor.DTHE, GIFRegUnimpl.Unpack);
|
||||
UnpackReg.Add((int)GIFRegDescriptor.COLCLAMP, GIFRegUnimpl.Unpack);
|
||||
UnpackReg.Add((int)GIFRegDescriptor.TEST_1, GIFRegUnimpl.Unpack);
|
||||
UnpackReg.Add((int)GIFRegDescriptor.TEST_2, GIFRegUnimpl.Unpack);
|
||||
UnpackReg.Add((int)GIFRegDescriptor.PABE, GIFRegUnimpl.Unpack);
|
||||
UnpackReg.Add((int)GIFRegDescriptor.FBA_1, GIFRegUnimpl.Unpack);
|
||||
UnpackReg.Add((int)GIFRegDescriptor.FBA_2, GIFRegUnimpl.Unpack);
|
||||
UnpackReg.Add((int)GIFRegDescriptor.FRAME_1, GIFRegUnimpl.Unpack);
|
||||
UnpackReg.Add((int)GIFRegDescriptor.FRAME_2, GIFRegUnimpl.Unpack);
|
||||
UnpackReg.Add((int)GIFRegDescriptor.ZBUF_1, GIFRegUnimpl.Unpack);
|
||||
UnpackReg.Add((int)GIFRegDescriptor.ZBUF_2, GIFRegUnimpl.Unpack);
|
||||
UnpackReg.Add((int)GIFRegDescriptor.BITBLTBUF, GIFRegUnimpl.Unpack);
|
||||
UnpackReg.Add((int)GIFRegDescriptor.TRXPOS, GIFRegUnimpl.Unpack);
|
||||
UnpackReg.Add((int)GIFRegDescriptor.TRXREG, GIFRegUnimpl.Unpack);
|
||||
UnpackReg.Add((int)GIFRegDescriptor.TRXDIR, GIFRegUnimpl.Unpack);
|
||||
UnpackReg.Add((int)GIFRegDescriptor.HWREG, GIFRegUnimpl.Unpack);
|
||||
UnpackReg.Add((int)GIFRegDescriptor.SIGNAL, GIFRegUnimpl.Unpack);
|
||||
UnpackReg.Add((int)GIFRegDescriptor.FINISH, GIFRegUnimpl.Unpack);
|
||||
UnpackReg.Add((int)GIFRegDescriptor.LABEL, GIFRegUnimpl.Unpack);
|
||||
}
|
||||
|
||||
public static Unpack GetUnpack(int reg)
|
||||
{
|
||||
Unpack ret;
|
||||
if (!UnpackReg.TryGetValue(reg, out ret))
|
||||
return GIFRegNOP.Unpack;
|
||||
return ret;
|
||||
}
|
||||
|
||||
static internal GIFTag ExtractGifTag(byte[] data)
|
||||
{
|
||||
Int16 nloopEOP = 0;
|
||||
Int16 pad1 = 0;
|
||||
Int32 pad2PrePrimFlgNReg = 0;
|
||||
|
@ -45,6 +101,7 @@ namespace GSDumpGUI
|
|||
regs = BitConverter.ToInt64(data, 8);
|
||||
|
||||
GIFTag t = new GIFTag();
|
||||
t.Q = 1f;
|
||||
t.nloop = (nloopEOP & 0x7FFF);
|
||||
t.eop = (nloopEOP & 0x8000) >> 15;
|
||||
t._pad1 = pad1;
|
||||
|
@ -57,57 +114,51 @@ namespace GSDumpGUI
|
|||
|
||||
t.flg = (GIFFLG)((pad2PrePrimFlgNReg & 0xC000000) >> 26);
|
||||
t.nreg = (int)(pad2PrePrimFlgNReg & 0xF0000000) >> 28;
|
||||
if (t.nreg == 0)
|
||||
t.nreg = 16;
|
||||
|
||||
List<GIFRegDescriptor> registers = new List<GIFRegDescriptor>();
|
||||
int[] registers = new int[t.nreg];
|
||||
Unpack[] regsunpack = new Unpack[t.nreg];
|
||||
|
||||
t.regs = new List<IGifData>();
|
||||
for (int i = 0; i < t.nreg; i++)
|
||||
registers.Add((GIFRegDescriptor)((regs & (Convert.ToInt32(Math.Pow(16, i + 1)) - 1)) >> i * 4));
|
||||
|
||||
for (int j = 0; j < t.nloop; j++)
|
||||
{
|
||||
for (int i = 0; i < registers.Count; i++)
|
||||
{
|
||||
UInt64 LowData = BitConverter.ToUInt64(data, (16 + (i * 16) + (j * 16 * registers.Count)));
|
||||
UInt64 HighData = BitConverter.ToUInt64(data, (16 + (i * 16) + 8 + (j * 16 * registers.Count)));
|
||||
int reg = (int)(regs >> (i * 4) & 15);
|
||||
registers[i] = reg;
|
||||
regsunpack[i] = GetUnpack(reg);
|
||||
}
|
||||
|
||||
switch (t.flg)
|
||||
{
|
||||
case GIFFLG.GIF_FLG_PACKED:
|
||||
try
|
||||
{
|
||||
if (registers[i] == GIFRegDescriptor.AD)
|
||||
{
|
||||
int destaddr = (int)(HighData & 0xF);
|
||||
t.regs.Add(Registers[destaddr].Invoke(LowData, HighData, false));
|
||||
}
|
||||
else
|
||||
t.regs.Add(Registers[(int)registers[i]].Invoke(LowData, HighData, false));
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
// For now till we get all regs implemented
|
||||
}
|
||||
break;
|
||||
case GIFFLG.GIF_FLG_REGLIST:
|
||||
t.regs.Add(Registers[(int)registers[i]].Invoke(LowData, HighData, true));
|
||||
break;
|
||||
case GIFFLG.GIF_FLG_IMAGE:
|
||||
GifImage image = new GifImage();
|
||||
image.LowData = BitConverter.GetBytes(LowData);
|
||||
image.HighData = BitConverter.GetBytes(HighData);
|
||||
t.regs.Add(image);
|
||||
break;
|
||||
case GIFFLG.GIF_FLG_IMAGE2:
|
||||
GifImage image2 = new GifImage();
|
||||
image2.LowData = BitConverter.GetBytes(LowData);
|
||||
image2.HighData = BitConverter.GetBytes(HighData);
|
||||
t.regs.Add(image2);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
int p = 16;
|
||||
switch (t.flg)
|
||||
{
|
||||
case GIFFLG.GIF_FLG_PACKED:
|
||||
for (int j = 0; j < t.nloop; j++)
|
||||
for (int i = 0; i < t.nreg; i++)
|
||||
{
|
||||
UInt64 LowData = BitConverter.ToUInt64(data, p);
|
||||
UInt64 HighData = BitConverter.ToUInt64(data, p + 8);
|
||||
t.regs.Add(regsunpack[i](t, registers[i], LowData, HighData, true));
|
||||
p += 16;
|
||||
}
|
||||
break;
|
||||
case GIFFLG.GIF_FLG_REGLIST:
|
||||
for (int j = 0; j < t.nloop; j++)
|
||||
for (int i = 0; i < t.nreg; i++)
|
||||
{
|
||||
UInt64 Data = BitConverter.ToUInt64(data, p);
|
||||
t.regs.Add(regsunpack[i](t, registers[i], Data, 0, false));
|
||||
p += 8;
|
||||
}
|
||||
break;
|
||||
case GIFFLG.GIF_FLG_IMAGE:
|
||||
case GIFFLG.GIF_FLG_IMAGE2:
|
||||
GifImage image = new GifImage();
|
||||
image.Data = new byte[t.nloop * 16];
|
||||
Array.Copy(data, 16, image.Data, 0, t.nloop * 16);
|
||||
t.regs.Add(image);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return t;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue