thug/Code/Gfx/NGPS/NX/gs.h

640 lines
18 KiB
C
Raw Normal View History

2016-02-13 21:39:12 +00:00
#ifndef __GS_H
#define __GS_H
#include "dma.h"
//---------------------------------------------------
// R E G I S T E R D E F I N I T I O N S
//---------------------------------------------------
// mask definitions for packing macros
#define M01 0x0000000000000001
#define M02 0x0000000000000003
#define M03 0x0000000000000007
#define M04 0x000000000000000F
#define M05 0x000000000000001F
#define M06 0x000000000000003F
#define M08 0x00000000000000FF
#define M09 0x00000000000001FF
#define M10 0x00000000000003FF
#define M11 0x00000000000007FF
#define M12 0x0000000000000FFF
#define M14 0x0000000000003FFF
#define M16 0x000000000000FFFF
#define M24 0x0000000000FFFFFF
#define M32 0x00000000FFFFFFFF
#define M64 0xFFFFFFFFFFFFFFFF
//----------------------------------------------------------------------------------------
// G E N E R A L P U R P O S E R E G I S T E R P A C K I N G M A C R O S
//----------------------------------------------------------------------------------------
#define PackALPHA(A,B,C,D,FIX) \
( \
( (uint64) (A) & M02 ) << 0 | \
( (uint64) (B) & M02 ) << 2 | \
( (uint64) (C) & M02 ) << 4 | \
( (uint64) (D) & M02 ) << 6 | \
( (uint64) (FIX) & M08 ) << 32 \
)
#define PackBITBLTBUF(SBP,SBW,SPSM,DBP,DBW,DPSM)\
( \
( (uint64) (SBP) & M14 ) << 0 | \
( (uint64) (SBW) & M06 ) << 16 | \
( (uint64) (SPSM) & M06 ) << 24 | \
( (uint64) (DBP) & M14 ) << 32 | \
( (uint64) (DBW) & M06 ) << 48 | \
( (uint64) (DPSM) & M06 ) << 56 \
)
#define PackCLAMP(WMS,WMT,MINU,MAXU,MINV,MAXV)\
( \
( (uint64) (WMS) & M02 ) << 0 | \
( (uint64) (WMT) & M02 ) << 2 | \
( (uint64) (MINU) & M10 ) << 4 | \
( (uint64) (MAXU) & M10 ) << 14 | \
( (uint64) (MINV) & M10 ) << 24 | \
( (uint64) (MAXV) & M10 ) << 34 \
)
#define PackCOLCLAMP(CLAMP) \
( \
( (uint64) (CLAMP) & M01 ) << 0 \
)
#define PackDIMX(DM00,DM01,DM02,DM03,DM10,DM11,DM12,DM13,DM20,DM21,DM22,DM23,DM30,DM31,DM32,DM33)\
( \
( (uint64) (DM00) & M03 ) << 0 | \
( (uint64) (DM01) & M03 ) << 4 | \
( (uint64) (DM02) & M03 ) << 8 | \
( (uint64) (DM03) & M03 ) << 12 | \
( (uint64) (DM10) & M03 ) << 16 | \
( (uint64) (DM11) & M03 ) << 20 | \
( (uint64) (DM12) & M03 ) << 24 | \
( (uint64) (DM13) & M03 ) << 28 | \
( (uint64) (DM20) & M03 ) << 32 | \
( (uint64) (DM21) & M03 ) << 36 | \
( (uint64) (DM22) & M03 ) << 40 | \
( (uint64) (DM23) & M03 ) << 44 | \
( (uint64) (DM30) & M03 ) << 48 | \
( (uint64) (DM31) & M03 ) << 52 | \
( (uint64) (DM32) & M03 ) << 56 | \
( (uint64) (DM33) & M03 ) << 60 \
)
#define PackDTHE(DTHE) \
( \
( (uint64) (DTHE) & M01 ) << 0 \
)
#define PackFBA(FBA) \
( \
( (uint64) (FBA) & M01 ) << 0 \
)
#define PackFOG(F) \
( \
( (uint64) (F) & M08 ) << 56 \
)
#define PackFOGCOL(FCR,FCG,FCB) \
( \
( (uint64) (FCR) & M08 ) << 0 | \
( (uint64) (FCG) & M08 ) << 8 | \
( (uint64) (FCB) & M08 ) << 16 \
)
#define PackFRAME(FBP,FBW,PSM,FBMSK) \
( \
( (uint64) (FBP) & M09 ) << 0 | \
( (uint64) (FBW) & M06 ) << 16 | \
( (uint64) (PSM) & M06 ) << 24 | \
( (uint64) (FBMSK) & M32 ) << 32 \
)
#define PackHWREG(DATA) \
( \
( (uint64) (DATA) & M64 ) << 0 \
)
#define PackLABEL(ID,IDMSK) \
( \
( (uint64) (ID) & M32 ) << 0 | \
( (uint64) (IDMSK) & M32 ) << 32 \
)
#define PackMIPTBP1(TBP1,TBW1,TBP2,TBW2,TBP3,TBW3)\
( \
( (uint64) (TBP1) & M14 ) << 0 | \
( (uint64) (TBW1) & M06 ) << 14 | \
( (uint64) (TBP2) & M14 ) << 20 | \
( (uint64) (TBW2) & M06 ) << 34 | \
( (uint64) (TBP3) & M14 ) << 40 | \
( (uint64) (TBW3) & M06 ) << 54 \
)
#define PackMIPTBP2(TBP4,TBW4,TBP5,TBW5,TBP6,TBW6)\
( \
( (uint64) (TBP4) & M14 ) << 0 | \
( (uint64) (TBW4) & M06 ) << 14 | \
( (uint64) (TBP5) & M14 ) << 20 | \
( (uint64) (TBW5) & M06 ) << 34 | \
( (uint64) (TBP6) & M14 ) << 40 | \
( (uint64) (TBW6) & M06 ) << 54 \
)
#define PackPABE(PABE) \
( \
( (uint64) (PABE) & M01 ) << 0 \
)
#define PackPRIM(PRIM,IIP,TME,FGE,ABE,AA1,FST,CTXT,FIX)\
( \
( (uint64) (PRIM) & M03 ) << 0 | \
( (uint64) (IIP) & M01 ) << 3 | \
( (uint64) (TME) & M01 ) << 4 | \
( (uint64) (FGE) & M01 ) << 5 | \
( (uint64) (ABE) & M01 ) << 6 | \
( (uint64) (AA1) & M01 ) << 7 | \
( (uint64) (FST) & M01 ) << 8 | \
( (uint64) (CTXT) & M01 ) << 9 | \
( (uint64) (FIX) & M01 ) << 10 \
)
#define PackPRMODE(IIP,TME,FGE,ABE,AA1,FST,CTXT,FIX)\
( \
( (uint64) (IIP) & M01 ) << 3 | \
( (uint64) (TME) & M01 ) << 4 | \
( (uint64) (FGE) & M01 ) << 5 | \
( (uint64) (ABE) & M01 ) << 6 | \
( (uint64) (AA1) & M01 ) << 7 | \
( (uint64) (FST) & M01 ) << 8 | \
( (uint64) (CTXT) & M01 ) << 9 | \
( (uint64) (FIX) & M01 ) << 10 \
)
#define PackPRMODECONT(AC) \
( \
( (uint64) (AC) & M01 ) << 0 \
)
#define PackRGBAQ(R,G,B,A,Q) \
( \
( (uint64) (R) & M08 ) << 0 | \
( (uint64) (G) & M08 ) << 8 | \
( (uint64) (B) & M08 ) << 16 | \
( (uint64) (A) & M08 ) << 24 | \
( (uint64) (Q) & M32 ) << 32 \
)
#define PackSCANMSK(MSK) \
( \
( (uint64) (MSK) & M01 ) << 0 \
)
#define PackSCISSOR(SCAX0,SCAX1,SCAY0,SCAY1)\
( \
( (uint64) (SCAX0) & M11 ) << 0 | \
( (uint64) (SCAX1) & M11 ) << 16 | \
( (uint64) (SCAY0) & M11 ) << 32 | \
( (uint64) (SCAY1) & M11 ) << 48 \
)
#define PackSIGNAL(ID,IDMSK) \
( \
( (uint64) (ID) & M32 ) << 0 | \
( (uint64) (IDMSK) & M32 ) << 32 \
)
#define PackST(S,T) \
( \
( (uint64) (S) & M32 ) << 0 | \
( (uint64) (T) & M32 ) << 32 \
)
#define PackTEST(ATE,ATST,AREF,AFAIL,DATE,DATM,ZTE,ZTST)\
( \
( (uint64) (ATE) & M01 ) << 0 | \
( (uint64) (ATST) & M03 ) << 1 | \
( (uint64) (AREF) & M08 ) << 4 | \
( (uint64) (AFAIL) & M02 ) << 12 | \
( (uint64) (DATE) & M01 ) << 14 | \
( (uint64) (DATM) & M01 ) << 15 | \
( (uint64) (ZTE) & M01 ) << 16 | \
( (uint64) (ZTST) & M02 ) << 17 \
)
#define PackTEX0(TBP0,TBW,PSM,TW,TH,TCC,TFX,CBP,CPSM,CSM,CSA,CLD)\
( \
( (uint64) (TBP0) & M14 ) << 0 | \
( (uint64) (TBW) & M06 ) << 14 | \
( (uint64) (PSM) & M06 ) << 20 | \
( (uint64) (TW) & M04 ) << 26 | \
( (uint64) (TH) & M04 ) << 30 | \
( (uint64) (TCC) & M01 ) << 34 | \
( (uint64) (TFX) & M02 ) << 35 | \
( (uint64) (CBP) & M14 ) << 37 | \
( (uint64) (CPSM) & M04 ) << 51 | \
( (uint64) (CSM) & M01 ) << 55 | \
( (uint64) (CSA) & M05 ) << 56 | \
( (uint64) (CLD) & M03 ) << 61 \
)
#define PackTEX1(LCM,MXL,MMAG,MMIN,MTBA,L,K)\
( \
( (uint64) (LCM) & M01 ) << 0 | \
( (uint64) (MXL) & M03 ) << 2 | \
( (uint64) (MMAG) & M01 ) << 5 | \
( (uint64) (MMIN) & M03 ) << 6 | \
( (uint64) (MTBA) & M01 ) << 9 | \
( (uint64) (L) & M02 ) << 19 | \
( (uint64) (K) & M12 ) << 32 \
)
#define PackTEX2(PSM,CBP,CPSM,CSM,CSA,CLD) \
( \
( (uint64) (PSM) & M06 ) << 20 | \
( (uint64) (CBP) & M14 ) << 37 | \
( (uint64) (CPSM) & M04 ) << 51 | \
( (uint64) (CSM) & M01 ) << 55 | \
( (uint64) (CSA) & M05 ) << 56 | \
( (uint64) (CLD) & M03 ) << 61 \
)
#define PackTEXFLUSH(VAL) \
( \
( (uint64) (VAL) & M64 ) << 0 \
)
#define PackTEXA(TA0,AEM,TA1) \
( \
( (uint64) (TA0) & M08 ) << 0 | \
( (uint64) (AEM) & M01 ) << 15 | \
( (uint64) (TA1) & M08 ) << 32 \
)
#define PackTEXCLUT(CBW,COU,COV) \
( \
( (uint64) (CBW) & M06 ) << 0 | \
( (uint64) (COU) & M06 ) << 6 | \
( (uint64) (COV) & M10 ) << 12 \
)
#define PackTRXDIR(XDIR) \
( \
( (uint64) (XDIR) & M02 ) << 0 \
)
#define PackTRXPOS(SSAX,SSAY,DSAX,DSAY,DIR) \
( \
( (uint64) (SSAX) & M11 ) << 0 | \
( (uint64) (SSAY) & M11 ) << 16 | \
( (uint64) (DSAX) & M11 ) << 32 | \
( (uint64) (DSAY) & M11 ) << 48 | \
( (uint64) (DIR) & M02 ) << 59 \
)
#define PackTRXREG(RRW,RRH) \
( \
( (uint64) (RRW) & M12 ) << 0 | \
( (uint64) (RRH) & M12 ) << 32 \
)
#define PackUV(U,V) \
( \
( (uint64) (U) & M14 ) << 0 | \
( (uint64) (V) & M14 ) << 16 \
)
#define PackXYOFFSET(OFX,OFY) \
( \
( (uint64) (OFX) & M16 ) << 0 | \
( (uint64) (OFY) & M16 ) << 32 \
)
#define PackXYZ(X,Y,Z) \
( \
( (uint64) (X) & M16 ) << 0 | \
( (uint64) (Y) & M16 ) << 16 | \
( (uint64) (Z) & M32 ) << 32 \
)
#define PackXYZF(X,Y,Z,F) \
( \
( (uint64) (X) & M16 ) << 0 | \
( (uint64) (Y) & M16 ) << 16 | \
( (uint64) (Z) & M24 ) << 32 | \
( (uint64) (F) & M08 ) << 56 \
)
#define PackZBUF(ZBP,PSM,ZMSK) \
( \
( (uint64) (ZBP) & M09 ) << 0 | \
( (uint64) (PSM) & M04 ) << 24 | \
( (uint64) (ZMSK) & M01 ) << 32 \
)
//----------------------------------------------------------------------------------------
// P R I V I L E G E D R E G I S T E R P A C K I N G M A C R O S
//----------------------------------------------------------------------------------------
#define PackBGCOLOR(R,G,B) \
( \
( (uint64) (R) & M08 ) << 0 | \
( (uint64) (G) & M08 ) << 8 | \
( (uint64) (B) & M08 ) << 16 \
)
#define PackBUSDIR(DIR) \
( \
( (uint64) (DIR) & M01 ) << 0 \
)
#define PackCSR(SIGNAL,FINISH,HSINT,VSINT,FLUSH,RESET,NFIELD,FIELD,FIFO,REV,ID)\
( \
( (uint64) (SIGNAL) & M01 ) << 0 | \
( (uint64) (FINISH) & M01 ) << 1 | \
( (uint64) (HSINT) & M01 ) << 2 | \
( (uint64) (VSINT) & M01 ) << 3 | \
( (uint64) (FLUSH) & M01 ) << 8 | \
( (uint64) (RESET) & M01 ) << 9 | \
( (uint64) (NFIELD) & M01 ) << 12 | \
( (uint64) (FIELD) & M01 ) << 13 | \
( (uint64) (FIFO) & M02 ) << 14 | \
( (uint64) (REV) & M08 ) << 16 | \
( (uint64) (ID) & M08 ) << 24 \
)
#define PackDISPFB(FBP,FBW,PSM,DBX,DBY) \
( \
( (uint64) (FBP) & M09 ) << 0 | \
( (uint64) (FBW) & M06 ) << 9 | \
( (uint64) (PSM) & M05 ) << 15 | \
( (uint64) (DBX) & M11 ) << 32 | \
( (uint64) (DBY) & M11 ) << 43 \
)
#define PackDISPLAY(DX,DY,MAGH,MAGV,DW,DH) \
( \
( (uint64) (DX) & M12 ) << 0 | \
( (uint64) (DY) & M11 ) << 12 | \
( (uint64) (MAGH) & M04 ) << 23 | \
( (uint64) (MAGV) & M02 ) << 27 | \
( (uint64) (DW) & M12 ) << 32 | \
( (uint64) (DH) & M11 ) << 44 \
)
#define PackEXTBUF(EXBP,EXBW,FBIN,WFFMD,EMODA,EMODC,WDX,WDY)\
( \
( (uint64) (EXBP) & M14 ) << 0 | \
( (uint64) (EXBW) & M06 ) << 14 | \
( (uint64) (FBIN) & M02 ) << 20 | \
( (uint64) (WFFMD) & M01 ) << 22 | \
( (uint64) (EMODA) & M02 ) << 23 | \
( (uint64) (EMODC) & M02 ) << 25 | \
( (uint64) (WDX) & M11 ) << 32 | \
( (uint64) (WDY) & M11 ) << 43 \
)
#define PackEXTDATA(SX,SY,SMPH,SMPV,WW,WH) \
( \
( (uint64) (SX) & M12 ) << 0 | \
( (uint64) (SY) & M11 ) << 12 | \
( (uint64) (SMPH) & M04 ) << 23 | \
( (uint64) (SMPV) & M02 ) << 27 | \
( (uint64) (WW) & M12 ) << 32 | \
( (uint64) (WH) & M11 ) << 44 \
)
#define PackEXTWRITE(WRITE) \
( \
( (uint64) (WRITE) & M01 ) << 0 \
)
#define PackIMR(SIGMSK,FINISHMSK,HSMSK,VSMSK)\
( \
( (uint64) (SIGMSK) & M01 ) << 8 | \
( (uint64) (FINISHMSK)& M01)<< 9 | \
( (uint64) (HSMSK) & M01 ) << 10 | \
( (uint64) (VSMSK) & M01 ) << 11 | \
( (uint64) M04 ) << 12 \
)
#define PackPMODE(EN1,EN2,CRTMD,MMOD,AMOD,SLBG,ALP)\
( \
( (uint64) (EN1) & M01 ) << 0 | \
( (uint64) (EN2) & M01 ) << 1 | \
( (uint64) (CRTMOD) & M03 ) << 2 | \
( (uint64) (MMOD) & M01 ) << 5 | \
( (uint64) (AMOD) & M01 ) << 6 | \
( (uint64) (SLBG) & M01 ) << 7 | \
( (uint64) (ALP) & M08 ) << 8 \
)
#define PackSIGLBLID(SIGID,LBLID) \
( \
( (uint64) (SIGID) & M32 ) << 0 | \
( (uint64) (LBLID) & M32 ) << 32 \
)
#define PackSMODE2(INT,FFMD,DPMS) \
( \
( (uint64) (INT) & M01 ) << 0 | \
( (uint64) (FFMD) & M01 ) << 1 | \
( (uint64) (DPMS) & M02 ) << 2 \
)
//------------------------------------------------------
// R E G I S T E R F I E L D V A L U E S
//------------------------------------------------------
// drawing primitives
#define POINT 0
#define LINE 1
#define LINESTRIP 2
#define TRIANGLE 3
#define TRISTRIP 4
#define TRIFAN 5
#define SPRITE 6
// PRIM bit masks (GS Manual p. 116)
#define IIP (1<<3) // Gouraud Shading
#define TME (1<<4) // Texture Mapping
#define FGE (1<<5) // Fogging
#define ABE (1<<6) // Alpha Blending
#define AA1 (1<<7) // Pass 1 Antialiasing
#define FST (1<<8) // UV values used (UV Register)
#define CTXT (1<<9) // Context 2 used
#define FIX (1<<10) // Fixed Fragment Value Control
// pixel storage modes
#define PSMCT32 0x00
#define PSMCT24 0x01
#define PSMCT16 0x02
#define PSMCT16S 0x0A
#define PS_GPU24 0x12
#define PSMT8 0x13
#define PSMT4 0x14
#define PSMT8H 0x1B
#define PSMT4HL 0x24
#define PSMT4HH 0x2C
#define PSMZ32 0x30
#define PSMZ24 0x31
#define PSMZ16 0x32
#define PSMZ16S 0x3A
// depth test methods
#define ZNEVER 0
#define ZALWAYS 1
#define ZGEQUAL 2
#define ZGREATER 3
// alpha test methods
#define ANEVER 0
#define AALWAYS 1
#define ALESS 2
#define ALEQUAL 3
#define AEQUAL 4
#define AGEQUAL 5
#define AGREATER 6
#define ANOTEQUAL 7
// alpha fail processing
#define KEEP 0
#define FB_ONLY 1
#define ZB_ONLY 2
#define RGB_ONLY 3
// texture functions
#define MODULATE 0
#define DECAL 1
#define HIGHLIGHT 2
#define HIGHLIGHT2 3
// texture filters
#define NEAREST 0
#define LINEAR 1
#define NEAREST_MIPMAP_NEAREST 2
#define NEAREST_MIPMAP_LINEAR 3
#define LINEAR_MIPMAP_NEAREST 4
#define LINEAR_MIPMAP_LINEAR 5
// texture wrap modes
#define REPEAT 0
#define CLAMP 1
#define REGION_CLAMP 2
#define REGION_REPEAT 3
namespace NxPs2
{
class gs
{
public:
enum eReg
{
PRIM = 0x00, // GS p. 116 Drawing Primitive Setting (AC == 1)
RGBAQ = 0x01, // GS p. 119 Vertex Color Setting
ST = 0x02, // GS p. 123 Specification of Vertex Texture Coordinates (sets S and T) FST == 0
UV = 0x03, // GS p. 135 Specification of Vertex Texture Coordinates (sets U and V) FST == 1
XYZF2 = 0x04, // GS p. 139 Setting for Vertex Coordinate Values (Fog coefficient)
XYZ2 = 0x05, // GS p. 137 Setting for Vertex Coordinate Values
TEX0_1 = 0x06, // GS p. 125 Texture Information Setting (type of textures to be used)
TEX0_2 = 0x07, // (mode, dimensions, blendfunc, CLUT)
CLAMP_1 = 0x08, // GS p. 102 Texture wrap mode
CLAMP_2 = 0x09,
FOG = 0x0A, // GS p. 108 Vertex Fog Value Setting (per vert)
XYZF3 = 0x0C, // GS p. 140 Setting for Vertex Coordinate Values (without Drawing Kick) (Fog coefficient)
XYZ3 = 0x0D, // GS p. 138 Setting for Vertex Coordinate Values (without Drawing Kick)
A_D = 0x0E, // Undocumented???
NOP = 0x0F,
TEX1_1 = 0x14, // GS p. 127 Texture Information Setting (LOD info)
TEX1_2 = 0x15,
TEX2_1 = 0x16, // GS p. 128 Texture Information Setting (Format/CLUT)
TEX2_2 = 0x17,
XYOFFSET_1 = 0x18, // GS p. 136 Offset Value setting (prim to window coords)
XYOFFSET_2 = 0x19,
PRMODECONT = 0x1A, // GS p. 118 Specification of Primitive Attribute Setting Method
PRMODE = 0x1B, // GS p. 117 Setting for Attributes of Drawing Primitives (AC == 0)
TEXCLUT = 0x1C, // GS p. 130 CLUT Position Specification (CLUT offset in buffer)
SCANMSK = 0x22, // GS p. 120 Raster Address Mask Setting
MIPTBP1_1 = 0x34, // GS p. 113 MIPMAP Information Setting (Level 1 to 3)
MIPTBP1_2 = 0x35,
MIPTBP2_1 = 0x36, // GS p. 114 MIPMAP Information Setting (Level 4 to 6)
MIPTBP2_2 = 0x37,
TEXA = 0x3B, // GS p. 129 Texture Alpha Value Setting (sets alpha when alpha not 8-bit)
FOGCOL = 0x3D, // GS p. 109 Distant Fog Color Setting
TEXFLUSH = 0x3F, // GS p. 131 Texture Page Buffer Disabling (wait for drawing to complete)
SCISSOR_1 = 0x40, // GS p. 121 Setting for Scissoring Area
SCISSOR_2 = 0x41,
ALPHA_1 = 0x42, // GS p. 100 Alpha Blending Setting (Context 1)
ALPHA_2 = 0x43,
DIMX = 0x44, // GS p. 104 Dither Matrix Setting
DTHE = 0x45, // GS p. 105 Dither Control (0 off / 1 on)
COLCLAMP = 0x46, // GS p. 103 Color Clamp Control (0 mask / 1 clamp)
TEST_1 = 0x47, // GS p. 124 Pixel Test Control (Alpha test/Depth Test method and enable/disable, etc.)
TEST_2 = 0x48,
PABE = 0x49, // GS p. 115 Alpha Blending Control in Units of Pixels
FBA_1 = 0x4A, // GS p. 106 Alpha Correction Value (Sets fixed alpha value)
FBA_2 = 0x4B,
FRAME_1 = 0x4C, // GS p. 110 Frame Buffer Setting
FRAME_2 = 0x4D,
ZBUF_1 = 0x4E, // GS p. 141 Z Buffer Setting
ZBUF_2 = 0x4F,
BITBLTBUF = 0x50, // GS p. 101 Setting for transmission between buffers
TRXPOS = 0x51, // GS p. 133 Specification of Transmission Areas in Buffers (direction)
TRXREG = 0x52, // GS p. 134 Specification of Transmission Areas in Buffers
TRXDIR = 0x53, // GS p. 132 Activation of Transmission between Buffers
HWREG = 0x54, // GS p. 111 Data Port for Transmission between Buffers
SIGNAL = 0x60, // GS p. 122 SIGNAL Event Occurrence Request
FINISH = 0x61, // GS p. 107 Finish Event Occurance Request
LABEL = 0x62, // GS p. 112 LABEL Event Occurrence Request
A_D_NOP = 0x7F // Undocumented???
};
static void BeginPrim(uint FLG, uint Prim, uint Pre);
static void EndPrim(uint Eop);
static void Reg1(eReg Reg, uint64 Data);
static void Reg2(eReg Reg, uint64 Data);
static uint32 *gs::Reg2_pData(eReg Reg, uint64 Data);
static void ModifyTBP(eReg Reg, uint32 *p_reg_ptr, sint16 tbp1, sint16 tbp2 = -1, sint16 tbp3 = -1);
}; // class gs
// output 1 GS register via PATH1, V3_32 format
inline void gs::Reg1(eReg Reg, uint64 Data)
{
// dma::Store64(Data);
// dma::Store32((uint64)Reg);
uint32 *p_loc = (uint32*)dma::pLoc;
p_loc[0] = (uint32)Data;
p_loc[1] = Data>>32;
p_loc[2] = Reg;
dma::pLoc = (uint8*) (p_loc + 3);
}
} // namespace NxPs2
#endif // __GS_H