mirror of
https://github.com/izzy2lost/2ship2harkinian-Android.git
synced 2026-06-19 01:20:08 -07:00
Merge branch 'master' into voice
This commit is contained in:
+11
-10
@@ -114,16 +114,17 @@ typedef struct {
|
||||
} __OSContReadFormat;
|
||||
|
||||
|
||||
// Original name: __OSContRequesFormat
|
||||
typedef struct {
|
||||
/* 0x0 */ u8 dummy;
|
||||
/* 0x1 */ u8 txsize;
|
||||
/* 0x2 */ u8 rxsize;
|
||||
/* 0x3 */ u8 cmd;
|
||||
/* 0x4 */ u8 typeh;
|
||||
/* 0x5 */ u8 typel;
|
||||
/* 0x6 */ u8 status;
|
||||
/* 0x7 */ u8 dummy1;
|
||||
} __OSContRequesFormat;
|
||||
/* 0x00 */ u8 align;
|
||||
/* 0x01 */ u8 txsize;
|
||||
/* 0x02 */ u8 rxsize;
|
||||
/* 0x03 */ u8 poll;
|
||||
/* 0x04 */ u8 typeh;
|
||||
/* 0x05 */ u8 typel;
|
||||
/* 0x06 */ u8 status;
|
||||
/* 0x07 */ u8 align1;
|
||||
} __OSContRequestHeader; // size = 0x8
|
||||
|
||||
typedef struct {
|
||||
/* 0x00 */ u8 txsize;
|
||||
@@ -147,7 +148,7 @@ typedef struct {
|
||||
|
||||
extern OSPifRam __osContPifRam;
|
||||
// extern UNK_TYPE1 D_8009CF0C;
|
||||
extern u8 __osContLastCmd;
|
||||
extern u8 __osContLastPoll;
|
||||
extern u8 __osMaxControllers;
|
||||
// extern OSMesgQueue D_8009CF38;
|
||||
// extern OSMesg D_8009CF50;
|
||||
|
||||
@@ -0,0 +1,379 @@
|
||||
#ifndef GS2DEX_H
|
||||
#define GS2DEX_H
|
||||
|
||||
#ifdef _LANGUAGE_C_PLUS_PLUS
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/*===========================================================================*
|
||||
* Macro
|
||||
*===========================================================================*/
|
||||
#define GS_CALC_DXT(line) (((1<< G_TX_DXT_FRAC)-1)/(line)+1)
|
||||
#define GS_PIX2TMEM(pix, siz) ((pix)>>(4-(siz)))
|
||||
#define GS_PIX2DXT(pix, siz) GS_CALC_DXT(GS_PIX2TMEM((pix), (siz)))
|
||||
|
||||
/*===========================================================================*
|
||||
* Data structures for S2DEX microcode
|
||||
*===========================================================================*/
|
||||
|
||||
/*---------------------------------------------------------------------------*
|
||||
* Background
|
||||
*---------------------------------------------------------------------------*/
|
||||
#define G_BGLT_LOADBLOCK 0x0033
|
||||
#define G_BGLT_LOADTILE 0xfff4
|
||||
|
||||
#define G_BG_FLAG_FLIPS 0x01
|
||||
#define G_BG_FLAG_FLIPT 0x10
|
||||
|
||||
/* Non scalable background plane */
|
||||
typedef struct {
|
||||
u16 imageX; /* x-coordinate of upper-left position of texture (u10.5) */
|
||||
u16 imageW; /* width of the texture (u10.2) */
|
||||
s16 frameX; /* upper-left position of transferred frame (s10.2) */
|
||||
u16 frameW; /* width of transferred frame (u10.2) */
|
||||
|
||||
u16 imageY; /* y-coordinate of upper-left position of texture (u10.5) */
|
||||
u16 imageH; /* height of the texture (u10.2) */
|
||||
s16 frameY; /* upper-left position of transferred frame (s10.2) */
|
||||
u16 frameH; /* height of transferred frame (u10.2) */
|
||||
|
||||
u64 *imagePtr; /* texture source address on DRAM */
|
||||
u16 imageLoad; /* which to use, LoadBlock or LoadTile */
|
||||
u8 imageFmt; /* format of texel - G_IM_FMT_* */
|
||||
u8 imageSiz; /* size of texel - G_IM_SIZ_* */
|
||||
u16 imagePal; /* pallet number */
|
||||
u16 imageFlip; /* right & left image inversion (Inverted by G_BG_FLAG_FLIPS) */
|
||||
|
||||
/* The following is set in the initialization routine guS2DInitBg(). There is no need for the user to set it. */
|
||||
u16 tmemW; /* TMEM width and Word size of frame 1 line.
|
||||
At LoadBlock, GS_PIX2TMEM(imageW/4,imageSiz)
|
||||
At LoadTile GS_PIX2TMEM(frameW/4,imageSiz)+1 */
|
||||
u16 tmemH; /* height of TMEM loadable at a time (s13.2) 4 times value
|
||||
When the normal texture, 512/tmemW*4
|
||||
When the CI texture, 256/tmemW*4 */
|
||||
u16 tmemLoadSH; /* SH value
|
||||
At LoadBlock, tmemSize/2-1
|
||||
At LoadTile, tmemW*16-1 */
|
||||
u16 tmemLoadTH; /* TH value or Stride value
|
||||
At LoadBlock, GS_CALC_DXT(tmemW)
|
||||
At LoadTile, tmemH-1 */
|
||||
u16 tmemSizeW; /* skip value of imagePtr for image 1-line
|
||||
At LoadBlock, tmemW*2
|
||||
At LoadTile, GS_PIX2TMEM(imageW/4,imageSiz)*2 */
|
||||
u16 tmemSize; /* skip value of imagePtr for 1-loading
|
||||
= tmemSizeW*tmemH */
|
||||
} uObjBg_t; /* 40 bytes */
|
||||
|
||||
/* Scalable background plane */
|
||||
typedef struct {
|
||||
u16 imageX; /* x-coordinate of upper-left position of texture (u10.5) */
|
||||
u16 imageW; /* width of texture (u10.2) */
|
||||
s16 frameX; /* upper-left position of transferred frame (s10.2) */
|
||||
u16 frameW; /* width of transferred frame (u10.2) */
|
||||
|
||||
u16 imageY; /* y-coordinate of upper-left position of texture (u10.5) */
|
||||
u16 imageH; /* height of texture (u10.2) */
|
||||
s16 frameY; /* upper-left position of transferred frame (s10.2) */
|
||||
u16 frameH; /* height of transferred frame (u10.2) */
|
||||
|
||||
u64 *imagePtr; /* texture source address on DRAM */
|
||||
u16 imageLoad; /* Which to use, LoadBlock or LoadTile? */
|
||||
u8 imageFmt; /* format of texel - G_IM_FMT_* */
|
||||
u8 imageSiz; /* size of texel - G_IM_SIZ_* */
|
||||
u16 imagePal; /* pallet number */
|
||||
u16 imageFlip; /* right & left image inversion (Inverted by G_BG_FLAG_FLIPS) */
|
||||
|
||||
u16 scaleW; /* scale value of X-direction (u5.10) */
|
||||
u16 scaleH; /* scale value of Y-direction (u5.10) */
|
||||
s32 imageYorig; /* start point of drawing on image (s20.5) */
|
||||
|
||||
u8 padding[4];
|
||||
|
||||
} uObjScaleBg_t; /* 40 bytes */
|
||||
|
||||
typedef union {
|
||||
uObjBg_t b;
|
||||
uObjScaleBg_t s;
|
||||
long long int force_structure_alignment;
|
||||
} uObjBg;
|
||||
|
||||
/*---------------------------------------------------------------------------*
|
||||
* 2D Objects
|
||||
*---------------------------------------------------------------------------*/
|
||||
#define G_OBJ_FLAG_FLIPS 1<<0 /* inversion to S-direction */
|
||||
#define G_OBJ_FLAG_FLIPT 1<<4 /* nversion to T-direction */
|
||||
|
||||
typedef struct {
|
||||
s16 objX; /* s10.2 OBJ x-coordinate of upper-left end */
|
||||
u16 scaleW; /* u5.10 Scaling of u5.10 width direction */
|
||||
u16 imageW; /* u10.5 width of u10.5 texture (length of S-direction) */
|
||||
u16 paddingX; /* Unused - Always 0 */
|
||||
s16 objY; /* s10.2 OBJ y-coordinate of s10.2 OBJ upper-left end */
|
||||
u16 scaleH; /* u5.10 Scaling of u5.10 height direction */
|
||||
u16 imageH; /* u10.5 height of u10.5 texture (length of T-direction) */
|
||||
u16 paddingY; /* Unused - Always 0 */
|
||||
u16 imageStride; /* folding width of texel (In units of 64bit word) */
|
||||
u16 imageAdrs; /* texture header position in TMEM (In units of 64bit word) */
|
||||
u8 imageFmt; /* format of texel - G_IM_FMT_* */
|
||||
u8 imageSiz; /* size of texel - G_IM_SIZ_* */
|
||||
u8 imagePal; /* pallet number (0-7) */
|
||||
u8 imageFlags; /* The display flag - G_OBJ_FLAG_FLIP* */
|
||||
} uObjSprite_t; /* 24 bytes */
|
||||
|
||||
typedef union {
|
||||
uObjSprite_t s;
|
||||
long long int force_structure_alignment;
|
||||
} uObjSprite;
|
||||
|
||||
/*---------------------------------------------------------------------------*
|
||||
* 2D Matrix
|
||||
*---------------------------------------------------------------------------*/
|
||||
typedef struct {
|
||||
s32 A, B, C, D; /* s15.16 */
|
||||
s16 X, Y; /* s10.2 */
|
||||
u16 BaseScaleX; /* u5.10 */
|
||||
u16 BaseScaleY; /* u5.10 */
|
||||
} uObjMtx_t; /* 24 bytes */
|
||||
|
||||
typedef union {
|
||||
uObjMtx_t m;
|
||||
long long int force_structure_alignment;
|
||||
} uObjMtx;
|
||||
|
||||
typedef struct {
|
||||
s16 X, Y; /* s10.2 */
|
||||
u16 BaseScaleX; /* u5.10 */
|
||||
u16 BaseScaleY; /* u5.10 */
|
||||
} uObjSubMtx_t; /* 8 bytes */
|
||||
|
||||
typedef union {
|
||||
uObjSubMtx_t m;
|
||||
long long int force_structure_alignment;
|
||||
} uObjSubMtx;
|
||||
|
||||
/*---------------------------------------------------------------------------*
|
||||
* Loading into TMEM
|
||||
*---------------------------------------------------------------------------*/
|
||||
#define G_OBJLT_TXTRBLOCK 0x00001033
|
||||
#define G_OBJLT_TXTRTILE 0x00fc1034
|
||||
#define G_OBJLT_TLUT 0x00000030
|
||||
|
||||
#define GS_TB_TSIZE(pix,siz) (GS_PIX2TMEM((pix),(siz))-1)
|
||||
#define GS_TB_TLINE(pix,siz) (GS_CALC_DXT(GS_PIX2TMEM((pix),(siz))))
|
||||
|
||||
typedef struct {
|
||||
u32 type; /* G_OBJLT_TXTRBLOCK divided into types */
|
||||
u64 *image; /* texture source address on DRAM */
|
||||
u16 tmem; /* loaded TMEM word address (8byteWORD) */
|
||||
u16 tsize; /* Texture size, Specified by macro GS_TB_TSIZE() */
|
||||
u16 tline; /* width of Texture 1-line, Specified by macro GS_TB_TLINE() */
|
||||
u16 sid; /* STATE ID Multipled by 4 (Either one of 0, 4, 8 and 12) */
|
||||
u32 flag; /* STATE flag */
|
||||
u32 mask; /* STATE mask */
|
||||
} uObjTxtrBlock_t; /* 24 bytes */
|
||||
|
||||
#define GS_TT_TWIDTH(pix,siz) ((GS_PIX2TMEM((pix), (siz))<<2)-1)
|
||||
#define GS_TT_THEIGHT(pix,siz) (((pix)<<2)-1)
|
||||
|
||||
typedef struct {
|
||||
u32 type; /* G_OBJLT_TXTRTILE divided into types */
|
||||
u64 *image; /* texture source address on DRAM */
|
||||
u16 tmem; /* loaded TMEM word address (8byteWORD)*/
|
||||
u16 twidth; /* width of Texture (Specified by macro GS_TT_TWIDTH()) */
|
||||
u16 theight; /* height of Texture (Specified by macro GS_TT_THEIGHT()) */
|
||||
u16 sid; /* STATE ID Multipled by 4 (Either one of 0, 4, 8 and 12) */
|
||||
u32 flag; /* STATE flag */
|
||||
u32 mask; /* STATE mask */
|
||||
} uObjTxtrTile_t; /* 24 bytes */
|
||||
|
||||
#define GS_PAL_HEAD(head) ((head)+256)
|
||||
#define GS_PAL_NUM(num) ((num)-1)
|
||||
|
||||
typedef struct {
|
||||
u32 type; /* G_OBJLT_TLUT divided into types */
|
||||
u64 *image; /* texture source address on DRAM */
|
||||
u16 phead; /* pallet number of load header (Between 256 and 511) */
|
||||
u16 pnum; /* loading pallet number -1 */
|
||||
u16 zero; /* Assign 0 all the time */
|
||||
u16 sid; /* STATE ID Multipled by 4 (Either one of 0, 4, 8 and 12)*/
|
||||
u32 flag; /* STATE flag */
|
||||
u32 mask; /* STATE mask */
|
||||
} uObjTxtrTLUT_t; /* 24 bytes */
|
||||
|
||||
typedef union {
|
||||
uObjTxtrBlock_t block;
|
||||
uObjTxtrTile_t tile;
|
||||
uObjTxtrTLUT_t tlut;
|
||||
long long int force_structure_alignment;
|
||||
} uObjTxtr;
|
||||
|
||||
/*---------------------------------------------------------------------------*
|
||||
* Loading into TMEM & 2D Objects
|
||||
*---------------------------------------------------------------------------*/
|
||||
typedef struct {
|
||||
uObjTxtr txtr;
|
||||
uObjSprite sprite;
|
||||
} uObjTxSprite; /* 48 bytes */
|
||||
|
||||
/*===========================================================================*
|
||||
* GBI Commands for S2DEX microcode
|
||||
*===========================================================================*/
|
||||
/* GBI Header */
|
||||
#ifdef F3DEX_GBI_2
|
||||
#define G_OBJ_RECTANGLE_R 0xda
|
||||
#define G_OBJ_MOVEMEM 0xdc
|
||||
#define G_RDPHALF_0 0xe4
|
||||
#define G_OBJ_RECTANGLE 0x01
|
||||
#define G_OBJ_SPRITE 0x02
|
||||
#define G_SELECT_DL 0x04
|
||||
#define G_OBJ_LOADTXTR 0x05
|
||||
#define G_OBJ_LDTX_SPRITE 0x06
|
||||
#define G_OBJ_LDTX_RECT 0x07
|
||||
#define G_OBJ_LDTX_RECT_R 0x08
|
||||
#define G_BG_1CYC 0x09
|
||||
#define G_BG_COPY 0x0a
|
||||
#define G_OBJ_RENDERMODE 0x0b
|
||||
#else
|
||||
#define G_BG_1CYC 0x01
|
||||
#define G_BG_COPY 0x02
|
||||
#define G_OBJ_RECTANGLE 0x03
|
||||
#define G_OBJ_SPRITE 0x04
|
||||
#define G_OBJ_MOVEMEM 0x05
|
||||
#define G_SELECT_DL 0xb0
|
||||
#define G_OBJ_RENDERMODE 0xb1
|
||||
#define G_OBJ_RECTANGLE_R 0xb2
|
||||
#define G_OBJ_LOADTXTR 0xc1
|
||||
#define G_OBJ_LDTX_SPRITE 0xc2
|
||||
#define G_OBJ_LDTX_RECT 0xc3
|
||||
#define G_OBJ_LDTX_RECT_R 0xc4
|
||||
#define G_RDPHALF_0 0xe4
|
||||
#endif
|
||||
|
||||
/*---------------------------------------------------------------------------*
|
||||
* Background wrapped screen
|
||||
*---------------------------------------------------------------------------*/
|
||||
#define gSPBgRectangle(pkt, m, mptr) gDma0p((pkt),(m),(mptr),0)
|
||||
#define gsSPBgRectangle(m, mptr) gsDma0p( (m),(mptr),0)
|
||||
#define gSPBgRectCopy(pkt, mptr) gSPBgRectangle((pkt), G_BG_COPY, (mptr))
|
||||
#define gsSPBgRectCopy(mptr) gsSPBgRectangle( G_BG_COPY, (mptr))
|
||||
#define gSPBgRect1Cyc(pkt, mptr) gSPBgRectangle((pkt), G_BG_1CYC, (mptr))
|
||||
#define gsSPBgRect1Cyc(mptr) gsSPBgRectangle( G_BG_1CYC, (mptr))
|
||||
|
||||
/*---------------------------------------------------------------------------*
|
||||
* 2D Objects
|
||||
*---------------------------------------------------------------------------*/
|
||||
#define gSPObjSprite(pkt, mptr) gDma0p((pkt),G_OBJ_SPRITE, (mptr),0)
|
||||
#define gsSPObjSprite(mptr) gsDma0p( G_OBJ_SPRITE, (mptr),0)
|
||||
#define gSPObjRectangle(pkt, mptr) gDma0p((pkt),G_OBJ_RECTANGLE, (mptr),0)
|
||||
#define gsSPObjRectangle(mptr) gsDma0p( G_OBJ_RECTANGLE, (mptr),0)
|
||||
#define gSPObjRectangleR(pkt, mptr) gDma0p((pkt),G_OBJ_RECTANGLE_R,(mptr),0)
|
||||
#define gsSPObjRectangleR(mptr) gsDma0p( G_OBJ_RECTANGLE_R,(mptr),0)
|
||||
|
||||
/*---------------------------------------------------------------------------*
|
||||
* 2D Matrix
|
||||
*---------------------------------------------------------------------------*/
|
||||
#define gSPObjMatrix(pkt, mptr) gDma1p((pkt),G_OBJ_MOVEMEM,(mptr),0,23)
|
||||
#define gsSPObjMatrix(mptr) gsDma1p( G_OBJ_MOVEMEM,(mptr),0,23)
|
||||
#define gSPObjSubMatrix(pkt, mptr) gDma1p((pkt),G_OBJ_MOVEMEM,(mptr),2, 7)
|
||||
#define gsSPObjSubMatrix(mptr) gsDma1p( G_OBJ_MOVEMEM,(mptr),2, 7)
|
||||
|
||||
/*---------------------------------------------------------------------------*
|
||||
* Loading into TMEM
|
||||
*---------------------------------------------------------------------------*/
|
||||
#define gSPObjLoadTxtr(pkt, tptr) gDma0p((pkt),G_OBJ_LOADTXTR, (tptr),23)
|
||||
#define gsSPObjLoadTxtr(tptr) gsDma0p( G_OBJ_LOADTXTR, (tptr),23)
|
||||
#define gSPObjLoadTxSprite(pkt, tptr) gDma0p((pkt),G_OBJ_LDTX_SPRITE,(tptr),47)
|
||||
#define gsSPObjLoadTxSprite(tptr) gsDma0p( G_OBJ_LDTX_SPRITE,(tptr),47)
|
||||
#define gSPObjLoadTxRect(pkt, tptr) gDma0p((pkt),G_OBJ_LDTX_RECT, (tptr),47)
|
||||
#define gsSPObjLoadTxRect(tptr) gsDma0p( G_OBJ_LDTX_RECT, (tptr),47)
|
||||
#define gSPObjLoadTxRectR(pkt, tptr) gDma0p((pkt),G_OBJ_LDTX_RECT_R,(tptr),47)
|
||||
#define gsSPObjLoadTxRectR(tptr) gsDma0p( G_OBJ_LDTX_RECT_R,(tptr),47)
|
||||
|
||||
/*---------------------------------------------------------------------------*
|
||||
* Select Display List
|
||||
*---------------------------------------------------------------------------*/
|
||||
#define gSPSelectDL(pkt, mptr, sid, flag, mask) \
|
||||
{ gDma1p((pkt), G_RDPHALF_0, (flag), (u32)(mptr) & 0xffff, (sid)); \
|
||||
gDma1p((pkt), G_SELECT_DL, (mask), (u32)(mptr) >> 16, G_DL_PUSH); }
|
||||
#define gsSPSelectDL(mptr, sid, flag, mask) \
|
||||
{ gsDma1p(G_RDPHALF_0, (flag), (u32)(mptr) & 0xffff, (sid)); \
|
||||
gsDma1p(G_SELECT_DL, (mask), (u32)(mptr) >> 16, G_DL_PUSH); }
|
||||
#define gSPSelectBranchDL(pkt, mptr, sid, flag, mask) \
|
||||
{ gDma1p((pkt), G_RDPHALF_0, (flag), (u32)(mptr) & 0xffff, (sid)); \
|
||||
gDma1p((pkt), G_SELECT_DL, (mask), (u32)(mptr) >> 16, G_DL_NOPUSH); }
|
||||
#define gsSPSelectBranchDL(mptr, sid, flag, mask) \
|
||||
{ gsDma1p(G_RDPHALF_0, (flag), (u32)(mptr) & 0xffff, (sid)); \
|
||||
gsDma1p(G_SELECT_DL, (mask), (u32)(mptr) >> 16, G_DL_NOPUSH); }
|
||||
|
||||
/*---------------------------------------------------------------------------*
|
||||
* Set general status
|
||||
*---------------------------------------------------------------------------*/
|
||||
#define G_MW_GENSTAT 0x08 /* Note that it is the same value of G_MW_FOG */
|
||||
|
||||
#define gSPSetStatus(pkt, sid, val) \
|
||||
gMoveWd((pkt), G_MW_GENSTAT, (sid), (val))
|
||||
#define gsSPSetStatus(sid, val) \
|
||||
gsMoveWd( G_MW_GENSTAT, (sid), (val))
|
||||
|
||||
/*---------------------------------------------------------------------------*
|
||||
* Set Object Render Mode
|
||||
*---------------------------------------------------------------------------*/
|
||||
#define G_OBJRM_NOTXCLAMP 0x01
|
||||
#define G_OBJRM_XLU 0x02 /* Ignored */
|
||||
#define G_OBJRM_ANTIALIAS 0x04 /* Ignored */
|
||||
#define G_OBJRM_BILERP 0x08
|
||||
#define G_OBJRM_SHRINKSIZE_1 0x10
|
||||
#define G_OBJRM_SHRINKSIZE_2 0x20
|
||||
#define G_OBJRM_WIDEN 0x40
|
||||
|
||||
#define gSPObjRenderMode(pkt, mode) gImmp1((pkt),G_OBJ_RENDERMODE,(mode))
|
||||
#define gsSPObjRenderMode(mode) gsImmp1( G_OBJ_RENDERMODE,(mode))
|
||||
|
||||
/*===========================================================================*
|
||||
* Render Mode Macro
|
||||
*===========================================================================*/
|
||||
#define RM_RA_SPRITE(clk) \
|
||||
AA_EN | CVG_DST_CLAMP | \
|
||||
CVG_X_ALPHA | ALPHA_CVG_SEL | ZMODE_OPA | TEX_EDGE | \
|
||||
GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA)
|
||||
|
||||
#define G_RM_SPRITE G_RM_OPA_SURF
|
||||
#define G_RM_SPRITE2 G_RM_OPA_SURF2
|
||||
#define G_RM_RA_SPRITE RM_RA_SPRITE(1)
|
||||
#define G_RM_RA_SPRITE2 RM_RA_SPRITE(2)
|
||||
#define G_RM_AA_SPRITE G_RM_AA_TEX_TERR
|
||||
#define G_RM_AA_SPRITE2 G_RM_AA_TEX_TERR2
|
||||
#define G_RM_XLU_SPRITE G_RM_XLU_SURF
|
||||
#define G_RM_XLU_SPRITE2 G_RM_XLU_SURF2
|
||||
#define G_RM_AA_XLU_SPRITE G_RM_AA_XLU_SURF
|
||||
#define G_RM_AA_XLU_SPRITE2 G_RM_AA_XLU_SURF2
|
||||
|
||||
/*===========================================================================*
|
||||
* External functions
|
||||
*===========================================================================*/
|
||||
extern u64 gspS2DEX_fifoTextStart[], gspS2DEX_fifoTextEnd[];
|
||||
extern u64 gspS2DEX_fifoDataStart[], gspS2DEX_fifoDataEnd[];
|
||||
extern u64 gspS2DEX_fifo_dTextStart[], gspS2DEX_fifo_dTextEnd[];
|
||||
extern u64 gspS2DEX_fifo_dDataStart[], gspS2DEX_fifo_dDataEnd[];
|
||||
extern u64 gspS2DEX2_fifoTextStart[], gspS2DEX2_fifoTextEnd[];
|
||||
extern u64 gspS2DEX2_fifoDataStart[], gspS2DEX2_fifoDataEnd[];
|
||||
extern u64 gspS2DEX2_xbusTextStart[], gspS2DEX2_xbusTextEnd[];
|
||||
extern u64 gspS2DEX2_xbusDataStart[], gspS2DEX2_xbusDataEnd[];
|
||||
extern void guS2DInitBg(uObjBg *);
|
||||
|
||||
#ifdef F3DEX_GBI_2
|
||||
# define guS2DEmuBgRect1Cyc guS2D2EmuBgRect1Cyc /*Wrapper*/
|
||||
# define guS2DEmuSetScissor guS2D2EmuSetScissor /*Wrapper*/
|
||||
extern void guS2D2EmuSetScissor(u32, u32, u32, u32, u8);
|
||||
extern void guS2D2EmuBgRect1Cyc(Gfx **, uObjBg *);
|
||||
#else
|
||||
extern void guS2DEmuSetScissor(u32, u32, u32, u32, u8);
|
||||
extern void guS2DEmuBgRect1Cyc(Gfx **, uObjBg *);
|
||||
#endif
|
||||
|
||||
#ifdef _LANGUAGE_C_PLUS_PLUS
|
||||
}
|
||||
#endif
|
||||
#endif /* GS2DEX_H */
|
||||
|
||||
/*======== End of gs2dex.h ========*/
|
||||
+1
-1
@@ -81,7 +81,7 @@ extern float D_80097F90;
|
||||
extern s32 D_80097FB0;
|
||||
extern OSViMode osViModeNtscLan1;
|
||||
extern OSViMode osViModeMpalLan1;
|
||||
extern __OSViContext D_80098060[2];
|
||||
// extern __OSViContext D_80098060[2];
|
||||
extern __OSViContext* __osViCurr;
|
||||
extern __OSViContext* __osViNext;
|
||||
// extern UNK_TYPE4 D_800980D0;
|
||||
|
||||
@@ -9,6 +9,7 @@
|
||||
#include "libc/stdlib.h"
|
||||
|
||||
#include "ultra64.h"
|
||||
#include "ultra64/gs2dex.h"
|
||||
#include "io/controller.h"
|
||||
#include "osint.h"
|
||||
#include "os.h"
|
||||
|
||||
@@ -61,7 +61,8 @@ beginseg
|
||||
include "build/data/boot/setintmask.rodata.o"
|
||||
include "build/asm/boot/getintmask.text.o"
|
||||
include "build/src/libultra/voice/voicesetword.o"
|
||||
include "build/data/boot/vimodeHpf.data.o"
|
||||
include "build/src/libultra/io/osViModeNtscHpf1.o"
|
||||
include "build/src/libultra/io/osViModePalLan1.o"
|
||||
include "build/asm/boot/guScale.text.o"
|
||||
include "build/src/libultra/gu/sinf.o"
|
||||
include "build/src/libultra/gu/sins.o"
|
||||
@@ -179,8 +180,9 @@ beginseg
|
||||
include "build/src/libultra/io/pfsdeletefile.o"
|
||||
include "build/src/libultra/gu/ortho.o"
|
||||
include "build/asm/boot/interrupt.text.o"
|
||||
include "build/src/libultra/io/osViModeNtscLan1.o"
|
||||
include "build/src/libultra/io/osViModeMpalLan1.o"
|
||||
include "build/src/libultra/io/vi.o"
|
||||
include "build/data/boot/vi.data.o"
|
||||
include "build/src/libultra/io/viswapcontext.o"
|
||||
include "build/src/libultra/io/pigetcmdq.o"
|
||||
include "build/src/libultra/gu/cosf.o"
|
||||
|
||||
@@ -1,3 +1,25 @@
|
||||
#include "global.h"
|
||||
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/boot/guS2DInitBg/guS2DInitBg.s")
|
||||
void guS2DInitBg(uObjBg* bg) {
|
||||
u32 size;
|
||||
s32 tmem = (bg->b.imageFmt == G_IM_FMT_CI) ? 0x100 : 0x200;
|
||||
u16 shift = (6 - bg->b.imageSiz);
|
||||
|
||||
if (bg->b.imageLoad == G_BGLT_LOADBLOCK) {
|
||||
bg->b.tmemW = bg->b.imageW >> shift;
|
||||
bg->b.tmemH = (tmem / bg->b.tmemW) * 4;
|
||||
bg->b.tmemSizeW = bg->b.tmemW * 2;
|
||||
bg->b.tmemSize = bg->b.tmemH * bg->b.tmemSizeW;
|
||||
bg->b.tmemLoadSH = (bg->b.tmemSize >> 1) - 1;
|
||||
bg->b.tmemLoadTH = (0x7FF / bg->b.tmemW) + 1;
|
||||
} else { // G_BGLT_LOADTILE
|
||||
bg->b.tmemW = (bg->b.frameW >> shift) + 3;
|
||||
bg->b.tmemH = (tmem / bg->b.tmemW) * 4;
|
||||
bg->b.tmemSizeW = (bg->b.imageW >> shift) * 2;
|
||||
|
||||
size = bg->b.tmemH * bg->b.tmemSizeW;
|
||||
bg->b.tmemSize = (size >> 16);
|
||||
bg->b.tmemLoadSH = (size >> 0) & 0xFFFF;
|
||||
bg->b.tmemLoadTH = bg->b.tmemH - 1;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5,7 +5,7 @@ s32 osContStartQuery(OSMesgQueue* mq) {
|
||||
|
||||
__osSiGetAccess();
|
||||
|
||||
if (__osContLastCmd != 0) {
|
||||
if (__osContLastPoll != 0) {
|
||||
__osPackRequestData(0);
|
||||
__osSiRawStartDma(OS_WRITE, &__osContPifRam);
|
||||
osRecvMesg(mq, NULL, OS_MESG_BLOCK);
|
||||
@@ -13,7 +13,7 @@ s32 osContStartQuery(OSMesgQueue* mq) {
|
||||
|
||||
ret = __osSiRawStartDma(OS_READ, &__osContPifRam);
|
||||
|
||||
__osContLastCmd = 0;
|
||||
__osContLastPoll = 0;
|
||||
|
||||
__osSiRelAccess();
|
||||
|
||||
|
||||
@@ -6,14 +6,14 @@ s32 osContStartReadData(OSMesgQueue* mq) {
|
||||
|
||||
__osSiGetAccess();
|
||||
|
||||
if (__osContLastCmd != 1) {
|
||||
if (__osContLastPoll != 1) {
|
||||
__osPackReadData();
|
||||
__osSiRawStartDma(OS_WRITE, &__osContPifRam);
|
||||
osRecvMesg(mq, NULL, OS_MESG_BLOCK);
|
||||
}
|
||||
|
||||
ret = __osSiRawStartDma(OS_READ, &__osContPifRam);
|
||||
__osContLastCmd = 1;
|
||||
__osContLastPoll = 1;
|
||||
|
||||
__osSiRelAccess();
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
UNK_TYPE4 D_80097E40 = 0;
|
||||
|
||||
OSPifRam __osContPifRam;
|
||||
u8 __osContLastCmd;
|
||||
u8 __osContLastPoll;
|
||||
u8 __osMaxControllers;
|
||||
|
||||
OSTimer __osEepromTimer;
|
||||
@@ -41,7 +41,7 @@ s32 osContInit(OSMesgQueue* mq, u8* bitpattern, OSContStatus* data) {
|
||||
osRecvMesg(mq, &dummy, OS_MESG_BLOCK);
|
||||
|
||||
__osContGetInitData(bitpattern, data);
|
||||
__osContLastCmd = 0;
|
||||
__osContLastPoll = 0;
|
||||
__osSiCreateAccessQueue();
|
||||
osCreateMesgQueue(&D_8009CF38, D_8009CF50, 1);
|
||||
|
||||
@@ -50,18 +50,18 @@ s32 osContInit(OSMesgQueue* mq, u8* bitpattern, OSContStatus* data) {
|
||||
|
||||
void __osContGetInitData(u8* pattern, OSContStatus* data) {
|
||||
u8* ptr;
|
||||
__OSContRequesFormat requestformat;
|
||||
int i;
|
||||
__OSContRequestHeader requestHeader;
|
||||
s32 i;
|
||||
u8 bits;
|
||||
|
||||
bits = 0;
|
||||
ptr = (u8*)__osContPifRam.ramarray;
|
||||
for (i = 0; i < __osMaxControllers; i++, ptr += sizeof(requestformat), data++) {
|
||||
requestformat = *(__OSContRequesFormat*)ptr;
|
||||
data->errno = (requestformat.rxsize & 0xc0) >> 4;
|
||||
for (i = 0; i < __osMaxControllers; i++, ptr += sizeof(requestHeader), data++) {
|
||||
requestHeader = *(__OSContRequestHeader*)ptr;
|
||||
data->errno = (requestHeader.rxsize & 0xc0) >> 4;
|
||||
if (data->errno == 0) {
|
||||
data->type = requestformat.typel << 8 | requestformat.typeh;
|
||||
data->status = requestformat.status;
|
||||
data->type = requestHeader.typel << 8 | requestHeader.typeh;
|
||||
data->status = requestHeader.status;
|
||||
|
||||
bits |= 1 << i;
|
||||
}
|
||||
@@ -69,10 +69,10 @@ void __osContGetInitData(u8* pattern, OSContStatus* data) {
|
||||
*pattern = bits;
|
||||
}
|
||||
|
||||
void __osPackRequestData(u8 cmd) {
|
||||
void __osPackRequestData(u8 poll) {
|
||||
u8* ptr;
|
||||
__OSContRequesFormat requestformat;
|
||||
int i;
|
||||
__OSContRequestHeader requestHeader;
|
||||
s32 i;
|
||||
|
||||
for (i = 0; i < ARRAY_COUNT(__osContPifRam.ramarray); i++) {
|
||||
__osContPifRam.ramarray[i] = 0;
|
||||
@@ -80,18 +80,18 @@ void __osPackRequestData(u8 cmd) {
|
||||
|
||||
__osContPifRam.pifstatus = CONT_CMD_READ_BUTTON;
|
||||
ptr = (u8*)__osContPifRam.ramarray;
|
||||
requestformat.dummy = 255;
|
||||
requestformat.txsize = 1;
|
||||
requestformat.rxsize = 3;
|
||||
requestformat.cmd = cmd;
|
||||
requestformat.typeh = 255;
|
||||
requestformat.typel = 255;
|
||||
requestformat.status = 255;
|
||||
requestformat.dummy1 = 255;
|
||||
requestHeader.align = 255;
|
||||
requestHeader.txsize = 1;
|
||||
requestHeader.rxsize = 3;
|
||||
requestHeader.poll = poll;
|
||||
requestHeader.typeh = 255;
|
||||
requestHeader.typel = 255;
|
||||
requestHeader.status = 255;
|
||||
requestHeader.align1 = 255;
|
||||
|
||||
for (i = 0; i < __osMaxControllers; i++) {
|
||||
*(__OSContRequesFormat*)ptr = requestformat;
|
||||
ptr += sizeof(requestformat);
|
||||
*(__OSContRequestHeader*)ptr = requestHeader;
|
||||
ptr += sizeof(requestHeader);
|
||||
}
|
||||
*ptr = 254;
|
||||
}
|
||||
|
||||
@@ -8,7 +8,7 @@ s32 osContSetCh(u8 ch) {
|
||||
} else {
|
||||
__osMaxControllers = ch;
|
||||
}
|
||||
__osContLastCmd = CONT_CMD_END;
|
||||
__osContLastPoll = -2;
|
||||
|
||||
__osSiRelAccess();
|
||||
return 0;
|
||||
|
||||
@@ -26,7 +26,7 @@ s32 __osMotorAccess(OSPfs* pfs, u32 vibrate) {
|
||||
((__OSContRamReadFormat*)buf)->data[i] = vibrate;
|
||||
}
|
||||
|
||||
__osContLastCmd = CONT_CMD_END;
|
||||
__osContLastPoll = CONT_CMD_END;
|
||||
__osSiRawStartDma(OS_WRITE, &osPifBuffers[pfs->channel]);
|
||||
osRecvMesg(pfs->queue, NULL, OS_MESG_BLOCK);
|
||||
__osSiRawStartDma(OS_READ, &osPifBuffers[pfs->channel]);
|
||||
|
||||
@@ -0,0 +1,34 @@
|
||||
#include "global.h"
|
||||
|
||||
OSViMode osViModeMpalLan1 = {
|
||||
OS_VI_MPAL_LAN1, // type
|
||||
{
|
||||
// comRegs
|
||||
0x311E, // ctrl
|
||||
SCREEN_WIDTH, // width
|
||||
0x4651E39, // burst
|
||||
0x20D, // vSync
|
||||
0x40C11, // hSync
|
||||
0xC190C1A, // leap
|
||||
0x6C02EC, // hStart
|
||||
0x200, // xScale
|
||||
0, // vCurrent
|
||||
},
|
||||
{ // fldRegs
|
||||
{
|
||||
// [0]
|
||||
0x280, // origin
|
||||
0x400, // yScale
|
||||
0x2501FF, // vStart
|
||||
0xE0204, // vBurst
|
||||
2, // vIntr
|
||||
},
|
||||
{
|
||||
// [1]
|
||||
0x280, // origin
|
||||
0x400, // yScale
|
||||
0x2501FF, // vStart
|
||||
0xE0204, // vBurst
|
||||
2, // vIntr
|
||||
} },
|
||||
};
|
||||
@@ -0,0 +1,34 @@
|
||||
#include "global.h"
|
||||
|
||||
OSViMode osViModeNtscHpf1 = {
|
||||
OS_VI_NTSC_HPF1, // type
|
||||
{
|
||||
// comRegs
|
||||
0x324E, // ctrl
|
||||
640, // width
|
||||
0x3E52239, // burst
|
||||
0x20C, // vSync
|
||||
0xC15, // hSync
|
||||
0xC150C15, // leap
|
||||
0x6C02EC, // hStart
|
||||
0x400, // xScale
|
||||
0, // vCurrent
|
||||
},
|
||||
{ // fldRegs
|
||||
{
|
||||
// [0]
|
||||
0x500, // origin
|
||||
0x2000800, // yScale
|
||||
0x2301FD, // vStart
|
||||
0xE0204, // vBurst
|
||||
2, // vIntr
|
||||
},
|
||||
{
|
||||
// [1]
|
||||
0xA00, // origin
|
||||
0x2000800, // yScale
|
||||
0x2501FF, // vStart
|
||||
0xE0204, // vBurst
|
||||
2 // vIntr
|
||||
} },
|
||||
};
|
||||
@@ -0,0 +1,34 @@
|
||||
#include "global.h"
|
||||
|
||||
OSViMode osViModeNtscLan1 = {
|
||||
OS_VI_NTSC_LAN1, // type
|
||||
{
|
||||
// comRegs
|
||||
0x311E, // ctrl
|
||||
SCREEN_WIDTH, // width
|
||||
0x3E52239, // burst
|
||||
0x20D, // vSync
|
||||
0xC15, // hSync
|
||||
0xC150C15, // leap
|
||||
0x6C02EC, // hStart
|
||||
0x200, // xScale
|
||||
0, // vCurrent
|
||||
},
|
||||
{ // fldRegs
|
||||
{
|
||||
// [0]
|
||||
0x280, // origin
|
||||
0x400, // yScale
|
||||
0x2501FF, // vStart
|
||||
0xE0204, // vBurst
|
||||
2, // vIntr
|
||||
},
|
||||
{
|
||||
// [1]
|
||||
0x280, // origin
|
||||
0x400, // yScale
|
||||
0x2501FF, // vStart
|
||||
0xE0204, // vBurst
|
||||
2, // vIntr
|
||||
} },
|
||||
};
|
||||
@@ -0,0 +1,34 @@
|
||||
#include "global.h"
|
||||
|
||||
OSViMode osViModePalLan1 = {
|
||||
OS_VI_PAL_LAN1, // type
|
||||
{
|
||||
// comRegs
|
||||
0x311E, // ctrl
|
||||
SCREEN_WIDTH, // width
|
||||
0x4541E3A, // burst
|
||||
0x271, // vSync
|
||||
0x170C69, // hSync
|
||||
0xC6F0C6D, // leap
|
||||
0x800300, // hStart
|
||||
0x200, // xScale
|
||||
0, // vCurrent
|
||||
},
|
||||
{ // fldRegs
|
||||
{
|
||||
// [0]
|
||||
0x280, // origin
|
||||
0x400, // yScale
|
||||
0x5F0239, // vStart
|
||||
0x9026B, // vBurst
|
||||
2, // vIntr
|
||||
},
|
||||
{
|
||||
// [1]
|
||||
0x280, // origin
|
||||
0x400, // yScale
|
||||
0x5F0239, // vStart
|
||||
0x9026B, // vBurst
|
||||
2 // vIntr
|
||||
} },
|
||||
};
|
||||
@@ -1,7 +1,97 @@
|
||||
#include "PR/pfs.h"
|
||||
#include "io/controller.h"
|
||||
#include "global.h"
|
||||
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/boot/pfsisplug/osPfsIsPlug.s")
|
||||
void __osPfsRequestData(u8 poll);
|
||||
void __osPfsGetInitData(u8* pattern, OSContStatus* contData);
|
||||
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/boot/pfsisplug/__osPfsRequestData.s")
|
||||
s32 osPfsIsPlug(OSMesgQueue* mq, u8* pattern) {
|
||||
s32 ret = 0;
|
||||
OSMesg msg;
|
||||
u8 bitpattern;
|
||||
OSContStatus contData[MAXCONTROLLERS];
|
||||
s32 channel;
|
||||
u8 bits = 0;
|
||||
s32 crcErrorCount = 3;
|
||||
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/boot/pfsisplug/__osPfsGetInitData.s")
|
||||
__osSiGetAccess();
|
||||
|
||||
do {
|
||||
__osPfsRequestData(CONT_CMD_REQUEST_STATUS);
|
||||
|
||||
ret = __osSiRawStartDma(OS_WRITE, &__osPfsPifRam);
|
||||
osRecvMesg(mq, &msg, OS_MESG_BLOCK);
|
||||
|
||||
ret = __osSiRawStartDma(OS_READ, &__osPfsPifRam);
|
||||
osRecvMesg(mq, &msg, OS_MESG_BLOCK);
|
||||
|
||||
__osPfsGetInitData(&bitpattern, &contData[0]);
|
||||
|
||||
for (channel = 0; channel < __osMaxControllers; channel++) {
|
||||
if (!(contData[channel].status & CONT_ADDR_CRC_ER)) {
|
||||
crcErrorCount--;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (channel == __osMaxControllers) {
|
||||
crcErrorCount = 0;
|
||||
}
|
||||
} while (crcErrorCount > 0);
|
||||
|
||||
for (channel = 0; channel < __osMaxControllers; channel++) {
|
||||
if ((contData[channel].errno == 0) && (contData[channel].status & CONT_CARD_ON)) {
|
||||
bits |= (1 << channel);
|
||||
}
|
||||
}
|
||||
__osSiRelAccess();
|
||||
*pattern = bits;
|
||||
return ret;
|
||||
}
|
||||
|
||||
void __osPfsRequestData(u8 poll) {
|
||||
u8* bufPtr = (u8*)&__osPfsPifRam;
|
||||
__OSContRequestHeader req;
|
||||
s32 i;
|
||||
|
||||
__osContLastPoll = poll;
|
||||
|
||||
__osPfsPifRam.pifstatus = 1;
|
||||
|
||||
req.align = 0xFF;
|
||||
req.txsize = 1;
|
||||
req.rxsize = 3;
|
||||
req.poll = poll;
|
||||
req.typeh = 0xFF;
|
||||
req.typel = 0xFF;
|
||||
req.status = 0xFF;
|
||||
req.align1 = 0xFF;
|
||||
|
||||
for (i = 0; i < __osMaxControllers; i++) {
|
||||
*((__OSContRequestHeader*)bufPtr) = req;
|
||||
bufPtr += sizeof(req);
|
||||
}
|
||||
*((u8*)bufPtr) = CONT_CMD_END;
|
||||
}
|
||||
|
||||
void __osPfsGetInitData(u8* pattern, OSContStatus* contData) {
|
||||
u8* bufptr;
|
||||
__OSContRequestHeader req;
|
||||
s32 i;
|
||||
u8 bits = 0;
|
||||
|
||||
bufptr = (u8*)&__osPfsPifRam;
|
||||
|
||||
for (i = 0; i < __osMaxControllers; i++, bufptr += sizeof(req), contData++) {
|
||||
req = *((__OSContRequestHeader*)bufptr);
|
||||
contData->errno = ((req.rxsize & 0xC0) >> 4);
|
||||
|
||||
if (contData->errno) {
|
||||
continue;
|
||||
}
|
||||
|
||||
contData->type = ((req.typel << 8) | req.typeh);
|
||||
contData->status = req.status;
|
||||
bits |= (1 << i);
|
||||
}
|
||||
*pattern = bits;
|
||||
}
|
||||
|
||||
@@ -1,5 +1,9 @@
|
||||
#include "global.h"
|
||||
|
||||
__OSViContext D_80098060[2] = { 0 };
|
||||
__OSViContext* __osViCurr = &D_80098060[0];
|
||||
__OSViContext* __osViNext = &D_80098060[1];
|
||||
|
||||
void __osViInit(void) {
|
||||
bzero(D_80098060, sizeof(D_80098060));
|
||||
__osViCurr = &D_80098060[0];
|
||||
@@ -9,9 +13,9 @@ void __osViInit(void) {
|
||||
__osViNext->buffer = (void*)0x80000000;
|
||||
__osViCurr->buffer = (void*)0x80000000;
|
||||
|
||||
if (osTvType == 0) {
|
||||
if (osTvType == OS_TV_PAL) {
|
||||
__osViNext->modep = &osViModePalLan1;
|
||||
} else if (osTvType == 2) {
|
||||
} else if (osTvType == OS_TV_MPAL) {
|
||||
__osViNext->modep = &osViModeMpalLan1;
|
||||
} else {
|
||||
__osViNext->modep = &osViModeNtscLan1;
|
||||
@@ -20,10 +24,9 @@ void __osViInit(void) {
|
||||
__osViNext->state = 0x20;
|
||||
__osViNext->features = __osViNext->modep->comRegs.ctrl;
|
||||
|
||||
while (*(vu32*)0xA4400010 > 10) {
|
||||
;
|
||||
}
|
||||
*(vu32*)0xA4400000 = 0;
|
||||
while (HW_REG(VI_CURRENT_REG, u32) > 10) {}
|
||||
|
||||
HW_REG(VI_STATUS_REG, u32) = 0;
|
||||
|
||||
__osViSwapContext();
|
||||
}
|
||||
|
||||
@@ -13,8 +13,8 @@ s32 __osVoiceContRead2(OSMesgQueue* mq, s32 port, u16 arg2, u8 dst[2]) {
|
||||
|
||||
ptr = (u8*)&__osPfsPifRam;
|
||||
|
||||
if ((__osContLastCmd != 0xB) || (port != D_80097FB0)) {
|
||||
__osContLastCmd = 0xB;
|
||||
if ((__osContLastPoll != 0xB) || (port != D_80097FB0)) {
|
||||
__osContLastPoll = 0xB;
|
||||
D_80097FB0 = port;
|
||||
|
||||
for (i = 0; i < port; i++, *ptr++ = 0) {
|
||||
|
||||
@@ -13,8 +13,8 @@ s32 __osVoiceContRead36(OSMesgQueue* mq, s32 port, u16 arg2, u8 dst[36]) {
|
||||
|
||||
ptr = (u8*)&__osPfsPifRam;
|
||||
|
||||
if ((__osContLastCmd != 9) || (port != D_80097FB0)) {
|
||||
__osContLastCmd = 9;
|
||||
if ((__osContLastPoll != 9) || (port != D_80097FB0)) {
|
||||
__osContLastPoll = 9;
|
||||
D_80097FB0 = port;
|
||||
|
||||
for (i = 0; i < port; i++, *ptr++ = 0) {
|
||||
|
||||
@@ -14,8 +14,8 @@ s32 __osVoiceContWrite20(OSMesgQueue* mq, s32 port, u16 arg2, u8 dst[20]) {
|
||||
|
||||
ptr = (u8*)&__osPfsPifRam;
|
||||
|
||||
if ((__osContLastCmd != 0xA) || (port != D_80097FB0)) {
|
||||
__osContLastCmd = 0xA;
|
||||
if ((__osContLastPoll != 0xA) || (port != D_80097FB0)) {
|
||||
__osContLastPoll = 0xA;
|
||||
D_80097FB0 = port;
|
||||
|
||||
for (i = 0; i < port; i++, *ptr++ = 0) {
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user