git-svn-id: http://pcsx2.googlecode.com/svn/trunk@4145 96395faa-99c1-11dd-bbfe-3dabce05a288

This commit is contained in:
feal87@gmail.com 2010-12-25 20:53:14 +00:00
parent 1e2d305302
commit 1b90cfe7cd
1 changed files with 28 additions and 47 deletions

View File

@ -6,6 +6,9 @@ namespace GSDumpGUI
{ {
public class GIFTag public class GIFTag
{ {
public delegate GIFReg Unpack(UInt64 LowData, UInt64 HighData, bool PlainFormat);
static public Dictionary<int, Unpack> Registers;
public Int32 nloop; public Int32 nloop;
public Int32 eop; public Int32 eop;
public Int32 _pad1; public Int32 _pad1;
@ -18,6 +21,19 @@ namespace GSDumpGUI
static internal unsafe GIFTag ExtractGifTag(byte[] data) static internal unsafe GIFTag ExtractGifTag(byte[] data)
{ {
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));
Int16 nloopEOP = 0; Int16 nloopEOP = 0;
Int16 pad1 = 0; Int16 pad1 = 0;
Int32 pad2PrePrimFlgNReg = 0; Int32 pad2PrePrimFlgNReg = 0;
@ -58,58 +74,23 @@ namespace GSDumpGUI
switch (t.flg) switch (t.flg)
{ {
case GIFFLG.GIF_FLG_PACKED: case GIFFLG.GIF_FLG_PACKED:
switch (registers[i]) try
{ {
case GIFRegDescriptor.PRIM: if (registers[i] == GIFRegDescriptor.AD)
if (t.pre == 1) {
t.regs.Add(GIFRegPrim.Unpack(LowData, HighData, false));
break;
case GIFRegDescriptor.RGBAQ:
t.regs.Add(GIFRegRGBAQ.Unpack(LowData, HighData, false));
break;
case GIFRegDescriptor.ST:
t.regs.Add(GIFRegST.Unpack(LowData, HighData, false));
break;
case GIFRegDescriptor.UV:
t.regs.Add(GIFRegUV.Unpack(LowData, HighData, false));
break;
case GIFRegDescriptor.XYZF2:
t.regs.Add(GIFRegXYZF.Unpack(LowData, HighData, false));
break;
case GIFRegDescriptor.XYZ2:
t.regs.Add(GIFRegXYZ.Unpack(LowData, HighData, false));
break;
case GIFRegDescriptor.FOG:
t.regs.Add(GIFRegFOG.Unpack(LowData, HighData, false));
break;
case GIFRegDescriptor.TEX0_1:
case GIFRegDescriptor.TEX0_2:
t.regs.Add(GIFRegTEX0.Unpack(LowData, HighData, true));
break;
case GIFRegDescriptor.Reserved:
// TODO?
break;
case GIFRegDescriptor.XYZF3:
t.regs.Add(GIFRegXYZF.Unpack(LowData, HighData, false));
break;
case GIFRegDescriptor.XYZ3:
t.regs.Add(GIFRegXYZ.Unpack(LowData, HighData, false));
break;
case GIFRegDescriptor.AD:
int destaddr = (int)(HighData & 0xF); int destaddr = (int)(HighData & 0xF);
UInt64 datat = LowData; t.regs.Add(Registers[destaddr].Invoke(LowData, HighData, false));
if (destaddr == (int)GIFRegDescriptor.TEX0_1 || destaddr == (int)GIFRegDescriptor.TEX0_2) }
t.regs.Add(GIFRegTEX0.Unpack(datat, HighData, true)); else
break; t.regs.Add(Registers[(int)registers[i]].Invoke(LowData, HighData, false));
case GIFRegDescriptor.NOP: }
// TODO? catch ()
break; {
default: // For now till we get all regs implemented
break;
} }
break; break;
case GIFFLG.GIF_FLG_REGLIST: case GIFFLG.GIF_FLG_REGLIST:
// TODO : t.regs.Add(Registers[(int)registers[i]].Invoke(LowData, HighData, true));
break; break;
case GIFFLG.GIF_FLG_IMAGE: case GIFFLG.GIF_FLG_IMAGE:
GifImage image = new GifImage(); GifImage image = new GifImage();