GLES2N64 (from mupen64plus-ae) plugin. Compile and run on the OpenPandora
[mupen64plus-pandora.git] / source / gles2n64 / src / S2DEX.h
diff --git a/source/gles2n64/src/S2DEX.h b/source/gles2n64/src/S2DEX.h
new file mode 100644 (file)
index 0000000..03ae7ba
--- /dev/null
@@ -0,0 +1,219 @@
+#ifndef S2DEX_H
+#define S2DEX_H
+
+#define G_BGLT_LOADBLOCK    0x0033
+#define G_BGLT_LOADTILE     0xfff4
+
+#define G_BG_FLAG_FLIPS     0x01
+#define G_BG_FLAG_FLIPT     0x10
+
+struct uObjScaleBg
+{
+  u16 imageW;     /* Texture width (8-byte alignment, u10.2) */
+  u16 imageX;     /* x-coordinate of upper-left 
+                  position of texture (u10.5) */ 
+  u16 frameW;     /* Transfer destination frame width (u10.2) */
+  s16 frameX;     /* x-coordinate of upper-left 
+                  position of transfer destination frame (s10.2) */
+
+  u16 imageH;     /* Texture height (u10.2) */
+  u16 imageY;     /* y-coordinate of upper-left position of 
+                  texture (u10.5) */ 
+  u16 frameH;     /* Transfer destination frame height (u10.2) */
+  s16 frameY;     /* y-coordinate of upper-left position of transfer 
+                  destination  frame (s10.2) */
+
+  u32 imagePtr;  /* Address of texture source in DRAM*/
+  u8  imageSiz;   /* Texel size
+                     G_IM_SIZ_4b (4 bits/texel)
+                     G_IM_SIZ_8b (8 bits/texel)
+                     G_IM_SIZ_16b (16 bits/texel)
+                     G_IM_SIZ_32b (32 bits/texel) */
+  u8  imageFmt;   /*Texel format
+                     G_IM_FMT_RGBA (RGBA format)
+                     G_IM_FMT_YUV (YUV format)
+                     G_IM_FMT_CI (CI format)
+                     G_IM_FMT_IA (IA format)
+                     G_IM_FMT_I (I format)  */
+  u16 imageLoad;  /* Method for loading the BG image texture
+                     G_BGLT_LOADBLOCK (use LoadBlock)
+                     G_BGLT_LOADTILE (use LoadTile) */
+  u16 imageFlip;  /* Image inversion on/off (horizontal 
+                     direction only)
+                     0 (normal display (no inversion))
+                     G_BG_FLAG_FLIPS (horizontal inversion of texture image) */
+  u16 imagePal;   /* Position of palette for 4-bit color 
+                  index texture (4-bit precision, 0~15) */
+
+  u16 scaleH;      /* y-direction scale value (u5.10) */
+  u16 scaleW;      /* x-direction scale value (u5.10) */
+  s32 imageYorig;  /* image drawing origin (s20.5)*/
+  
+  u8  padding[4];  /* Padding */
+};   /* 40 bytes */
+
+struct uObjBg
+{
+    u16 imageW;     /* Texture width (8-byte alignment, u10.2) */
+    u16 imageX;     /* x-coordinate of upper-left position of texture (u10.5) */ 
+    u16 frameW;     /* Transfer destination frame width (u10.2) */
+    s16 frameX;     /* x-coordinate of upper-left position of 
+                      transfer destination frame (s10.2) */
+    u16 imageH;     /* Texture height (u10.2) */
+    u16 imageY;     /* y-coordinate of upper-left position of 
+                      texture (u10.5) */ 
+    u16 frameH;     /* Transfer destination frame height (u10.2) */
+    s16 frameY;     /* y-coordinate of upper-left position of 
+                  transfer destination frame (s10.2) */
+
+    u32 imagePtr;  /* Address of texture source in DRAM*/
+    u8  imageSiz;   /* Texel size
+                     G_IM_SIZ_4b (4 bits/texel)
+                     G_IM_SIZ_8b (8 bits/texel)
+                     G_IM_SIZ_16b (16 bits/texel)
+                     G_IM_SIZ_32b (32 bits/texel) */
+    u8  imageFmt;   /*Texel format
+                     G_IM_FMT_RGBA (RGBA format)
+                     G_IM_FMT_YUV (YUV format)
+                     G_IM_FMT_CI (CI format)
+                     G_IM_FMT_IA (IA format)
+                     G_IM_FMT_I (I format)  */
+    u16 imageLoad;  /* Method for loading the BG image texture
+                     G_BGLT_LOADBLOCK (use LoadBlock)
+                     G_BGLT_LOADTILE (use LoadTile) */
+    u16 imageFlip;  /* Image inversion on/off (horizontal direction only)
+                     0 (normal display (no inversion))
+                     G_BG_FLAG_FLIPS (horizontal inversion of 
+                     texture image) */
+    u16 imagePal;   /* Position of palette for 4-bit color 
+                     index texture (4-bit precision, 0~15) */
+
+/* The following is set in the initialization routine guS2DInitBg */
+    u16 tmemH;      /* TMEM height for a single load (quadruple 
+                     value, s13.2) */
+    u16 tmemW;      /* TMEM width for one frame line (word size) */
+    u16 tmemLoadTH; /* TH value or Stride value */
+    u16 tmemLoadSH; /* SH value */
+    u16 tmemSize;   /* imagePtr skip value for a single load  */
+    u16 tmemSizeW;  /* imagePtr skip value for one image line */
+};      /* 40 bytes */
+
+struct uObjSprite
+{
+    u16 scaleW;      /* Width-direction scaling (u5.10) */
+    s16 objX;        /* x-coordinate of upper-left corner of OBJ (s10.2) */
+    u16 paddingX;    /* Unused (always 0) */
+    u16 imageW;      /* Texture width (length in s direction, u10.5)  */
+    u16 scaleH;      /* Height-direction scaling (u5.10) */
+    s16 objY;        /* y-coordinate of upper-left corner of OBJ (s10.2) */
+    u16 paddingY;    /* Unused (always 0) */
+    u16 imageH;      /* Texture height (length in t direction, u10.5)  */
+    u16 imageAdrs;   /* Texture starting position in TMEM (In units of 64-bit words) */
+    u16 imageStride; /* Texel wrapping width (In units of 64-bit words) */
+    u8  imageFlags;  /* Display flag
+                (*) More than one of the following flags can be specified as the bit sum of the flags: 
+                      0 (Normal display (no inversion))
+                      G_OBJ_FLAG_FLIPS (s-direction (x) inversion)
+                      G_OBJ_FLAG_FLIPT (t-direction (y) inversion)  */
+    u8  imagePal;    /* Position of palette for 4-bit color index texture  (4-bit precision, 0~7)  */
+    u8  imageSiz;    /* Texel size
+                      G_IM_SIZ_4b (4 bits/texel)
+                      G_IM_SIZ_8b (8 bits/texel)
+                      G_IM_SIZ_16b (16 bits/texel)
+                      G_IM_SIZ_32b (32 bits/texel) */
+    u8  imageFmt;    /* Texel format
+                      G_IM_FMT_RGBA (RGBA format)
+                      G_IM_FMT_YUV (YUV format)
+                      G_IM_FMT_CI (CI format)
+                      G_IM_FMT_IA (IA format)
+                      G_IM_FMT_I  (I format) */
+};    /* 24 bytes */
+
+struct uObjTxtrBlock
+{
+    u32   type;   /* Structure identifier (G_OBJLT_TXTRBLOCK) */
+    u32   image; /* Texture source address in DRAM (8-byte alignment) */
+    u16   tsize;  /* Texture size (specified by GS_TB_TSIZE) */
+    u16   tmem;   /* TMEM word address where texture will be loaded (8-byte word) */
+    u16   sid;    /* Status ID (multiple of 4: either 0, 4, 8, or 12) */
+    u16   tline;  /* Texture line width (specified by GS_TB_TLINE) */
+    u32   flag;   /* Status flag */
+    u32   mask;   /* Status mask */
+};     /* 24 bytes */
+
+struct uObjTxtrTile
+{
+    u32   type;   /* Structure identifier (G_OBJLT_TXTRTILE) */
+    u32   image; /* Texture source address in DRAM (8-byte alignment) */
+    u16   twidth; /* Texture width (specified by GS_TT_TWIDTH) */
+    u16   tmem;   /* TMEM word address where texture will be loaded (8-byte word) */
+    u16   sid;    /* Status ID (multiple of 4: either 0, 4, 8, or 12) */
+    u16   theight;/* Texture height (specified by GS_TT_THEIGHT) */
+    u32   flag;   /* Status flag */
+    u32   mask;   /* Status mask  */
+};      /* 24 bytes */
+
+struct uObjTxtrTLUT
+{
+    u32   type;   /* Structure identifier (G_OBJLT_TLUT) */
+    u32   image; /* Texture source address in DRAM */
+    u16   pnum;   /* Number of palettes to load - 1 */
+    u16   phead;  /* Palette position at start of load (256~511) */
+    u16   sid;    /* Status ID (multiple of 4: either 0, 4, 8, or 12) */
+    u16   zero;   /* Always assign 0 */
+    u32   flag;   /* Status flag */
+    u32   mask;   /* Status mask */
+};      /* 24 bytes */
+
+typedef union 
+{
+    uObjTxtrBlock      block;
+    uObjTxtrTile       tile;
+    uObjTxtrTLUT       tlut;
+} uObjTxtr;
+
+struct uObjTxSprite 
+{
+    uObjTxtr      txtr;
+    uObjSprite    sprite;
+};
+
+struct uObjMtx
+{
+  s32 A, B, C, D;   /* s15.16 */
+  s16 Y, X;         /* s10.2 */
+  u16 BaseScaleY;   /* u5.10 */
+  u16 BaseScaleX;   /* u5.10 */
+};
+
+void S2DEX_BG_1Cyc( u32 w0, u32 w1 );
+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_Select_DL( u32 w0, u32 w1 );
+void S2DEX_Obj_RenderMode( u32 w0, u32 w1 );
+void S2DEX_Obj_Rectangle_R( u32 w0, u32 w1 );
+void S2DEX_Obj_LoadTxtr( u32 w0, u32 w1 );
+void S2DEX_Obj_LdTx_Sprite( u32 w0, u32 w1 );
+void S2DEX_Obj_LdTx_Rect( u32 w0, u32 w1 );
+void S2DEX_Obj_LdTx_Rect_R( u32 w0, u32 w1 );
+void S2DEX_Init();
+
+#define S2DEX_BG_1CYC           0x01
+#define S2DEX_BG_COPY           0x02
+#define S2DEX_OBJ_RECTANGLE     0x03
+#define S2DEX_OBJ_SPRITE        0x04
+#define S2DEX_OBJ_MOVEMEM       0x05
+#define S2DEX_LOAD_UCODE        0xAF
+#define S2DEX_SELECT_DL         0xB0
+#define S2DEX_OBJ_RENDERMODE    0xB1
+#define S2DEX_OBJ_RECTANGLE_R   0xB2
+#define S2DEX_OBJ_LOADTXTR      0xC1
+#define S2DEX_OBJ_LDTX_SPRITE   0xC2
+#define S2DEX_OBJ_LDTX_RECT     0xC3
+#define S2DEX_OBJ_LDTX_RECT_R   0xC4
+#define S2DEX_RDPHALF_0         0xE4
+
+#endif
+