oops forgot that

Former-commit-id: 51b7d68a6dc95736271f84b0fc77ebf6d47e52cd [formerly 2c85d1c72fdc9bb1fbf167e646bdeb09ef3ab61e] [formerly a13e518d540596eb3f572666e7dc1f0e9fc23735 [formerly 5a1125980db68c93b676d756a1735174827465c8]]
Former-commit-id: 32929e424314258696aadd1fa822cc97697c1f87 [formerly 40f3f2bb14e103445d97e3a8956926eda59e5f73]
Former-commit-id: 6124ae5e2340b83c14e40668868ecacb9f4d1fa3
This commit is contained in:
kholdfuzion
2019-08-03 18:01:45 +00:00
parent 3ebe19d728
commit 7dfe175f34
1823 changed files with 1202862 additions and 912 deletions
+45
View File
@@ -0,0 +1,45 @@
#ifndef _STDARG_H_
#define _STDARG_H_
#include <ultra64.h>
// When building with GCC, use the official vaarg macros to avoid warnings
// and possibly bad codegen.
#ifdef __GNUC__
#define va_list __builtin_va_list
#define va_start __builtin_va_start
#define va_arg __builtin_va_arg
#define va_end __builtin_va_end
#else
typedef char *va_list;
#define _FP 1
#define _INT 0
#define _STRUCT 2
#define _VA_FP_SAVE_AREA 0x10
#define _VA_ALIGN(p, a) (((unsigned int)(((char *)p) + ((a) > 4 ? (a) : 4) - 1)) & -((a) > 4 ? (a) : 4))
#define va_start(vp, parmN) (vp = ((va_list)&parmN + sizeof(parmN)))
#define __va_stack_arg(list, mode) \
( \
((list) = (char *)_VA_ALIGN(list, __builtin_alignof(mode)) + \
_VA_ALIGN(sizeof(mode), 4)), \
(((char *)list) - (_VA_ALIGN(sizeof(mode), 4) - sizeof(mode))))
#define __va_double_arg(list, mode) \
( \
(((long)list & 0x1) /* 1 byte aligned? */ \
? (list = (char *)((long)list + 7), (char *)((long)list - 6 - _VA_FP_SAVE_AREA)) \
: (((long)list & 0x2) /* 2 byte aligned? */ \
? (list = (char *)((long)list + 10), (char *)((long)list - 24 - _VA_FP_SAVE_AREA)) \
: __va_stack_arg(list, mode))))
#define va_arg(list, mode) ((mode *)(((__builtin_classof(mode) == _FP && \
__builtin_alignof(mode) == sizeof(double)) \
? __va_double_arg(list, mode) \
: __va_stack_arg(list, mode))))[-1]
#define va_end(__list)
#endif
#endif
-1
View File
@@ -1 +0,0 @@
3303fdcb83a8ecc2ca28d2b1cc9a9631be335535
+736
View File
@@ -0,0 +1,736 @@
#ifndef _ULTRA64_GBI_H_
#define _ULTRA64_GBI_H_
/* Types */
/* Vertex (set up for use with colors) */
typedef struct
{
short ob[3]; /* x, y, z */
unsigned short flag;
short tc[2]; /* texture coord */
unsigned char cn[4]; /* color & alpha */
} Vtx_t;
/* Vertex (set up for use with normals) */
typedef struct
{
short ob[3]; /* x, y, z */
unsigned short flag;
short tc[2]; /* texture coord */
signed char n[3]; /* normal */
unsigned char a; /* alpha */
} Vtx_tn;
typedef union
{
Vtx_t v; /* Use this one for colors */
Vtx_tn n; /* Use this one for normals */
long long int force_structure_alignment;
} Vtx;
typedef struct
{
short vscale[4]; /* scale, 2 bits fraction */
short vtrans[4]; /* translate, 2 bits fraction */
} Vp_t;
typedef union
{
Vp_t vp;
long long int force_structure_alignment;
} Vp;
typedef struct
{
unsigned int w0;
unsigned int w1;
} Gwords;
/* TODO: fill in the rest of the members */
typedef union
{
Gwords words;
long long int force_structure_alignment;
} Gfx;
#define _SHIFTL(value, shift, size) \
((unsigned int) (((unsigned int) (value) & ((1 << size) - 1)) << shift))
#define G_ON 1
#define G_OFF 0
#define GPACK_RGBA5551(r, g, b, a) \
((((r) << 8) & 0xF800) | \
(((g) << 3) & 0x07C0) | \
(((b) >> 2) & 0x003E) | \
((a) & 0x0001))
#define GPACK_ZDZ(z, dz) ((z) << 2 | (dz))
#define G_ZBUFFER 0x00000001
#define G_TEXTURE_ENABLE 0x00000002
#define G_SHADE 0x00000004
#define G_SHADING_SMOOTH 0x00000200
#define G_CULL_FRONT 0x00001000
#define G_CULL_BACK 0x00002000
#define G_CULL_BOTH 0x00003000
#define G_FOG 0x00010000
#define G_LIGHTING 0x00020000
#define G_TEXTURE_GEN 0x00040000
#define G_TEXTURE_GEN_LINEAR 0x00080000
#define G_LOD 0x00100000
#define G_CLIPPING 0x00800000
#define G_IM_FMT_RGBA 0
#define G_IM_FMT_YUV 1
#define G_IM_FMT_CI 2
#define G_IM_FMT_IA 3
#define G_IM_FMT_I 4
#define G_IM_SIZ_4b 0
#define G_IM_SIZ_8b 1
#define G_IM_SIZ_16b 2
#define G_IM_SIZ_32b 3
#define G_IM_SIZ_DD 5
#define G_AC_NONE (0 << 0)
#define G_AC_THRESHOLD (1 << 0)
#define G_AC_DITHER (3 << 0)
#define G_ZS_PIXEL (0 << 2)
#define G_ZS_PRIM (1 << 2)
#define G_CD_MAGICSQ (0 << 6)
#define G_CD_BAYER (1 << 6)
#define G_CD_NOISE (2 << 6)
#define G_CK_NONE (0 << 8)
#define G_CK_KEY (1 << 8)
#define G_TC_CONV (0 << 9)
#define G_TC_FILTCONV (5 << 9)
#define G_TC_FILT (6 << 9)
#define G_TF_POINT (0 << 12)
#define G_TF_BILERP (2 << 12)
#define G_TF_AVERAGE (3 << 12)
#define G_TT_NONE (0 << 14)
#define G_TT_RGBA16 (2 << 14)
#define G_TT_IA16 (3 << 14)
#define G_TL_TILE (0 << 16)
#define G_TL_LOD (1 << 16)
#define G_TD_CLAMP (0 << 17)
#define G_TD_SHARPEN (1 << 17)
#define G_TD_DETAIL (2 << 17)
#define G_TP_NONE (0 << 19)
#define G_TP_PERSP (1 << 19)
#define G_CYC_1CYCLE (0 << 20)
#define G_CYC_2CYCLE (1 << 20)
#define G_CYC_COPY (2 << 20)
#define G_CYC_FILL (3 << 20)
#define G_PM_NPRIMITIVE (0 << 23)
#define G_PM_1PRIMITIVE (1 << 23)
#define G_SC_NON_INTERLACE 0
#define G_SC_ODD_INTERLACE 3
#define G_SC_EVEN_INTERLACE 2
#define G_TX_LOADTILE 7
#define G_TX_RENDERTILE 0
#define G_TX_NOMIRROR 0
#define G_TX_WRAP 0
#define G_TX_MIRROR 1
#define G_TX_CLAMP 2
#define G_TX_NOMASK 0
#define G_TX_NOLOD 0
#define G_TX_LDBLK_MAX_TXL 2047
#define G_MV_VIEWPORT 0x80
#define G_MV_LOOKATY 0x82
#define G_MV_LOOKATX 0x84
#define G_MV_L0 0x86
#define G_MV_L1 0x88
#define G_MV_L2 0x8A
#define G_MV_L3 0x8C
#define G_MV_L4 0x8E
#define G_MV_L5 0x90
#define G_MV_L6 0x92
#define G_MV_L7 0x94
#define G_MV_TXTATT 0x96
#define G_MV_MATRIX_1 0x9E
#define G_MV_MATRIX_2 0x98
#define G_MV_MATRIX_3 0x9A
#define G_MV_MATRIX_4 0x9C
#define G_SETOTHERMODE_L 0xB9
#define G_SETOTHERMODE_H 0xBA
#ifndef MAX
#define MAX(a, b) ((a) > (b) ? (a) : (b))
#endif
#ifndef MIN
#define MIN(a, b) ((a) < (b) ? (a) : (b))
#endif
#define gSPMatrix(pkt, m, p) \
{ \
Gfx *_g = (Gfx *)(pkt); \
_g->words.w0 = _SHIFTL(0x01, 24, 8) \
| _SHIFTL((p), 16, 8) \
| _SHIFTL(sizeof(Mtx), 0, 16); \
_g->words.w1 = (u32)(m); \
}
#define gSPVertex(pkt, v, n, v0) \
{ \
Gfx *_g = (Gfx *)(pkt); \
_g->words.w0 = _SHIFTL(0x04, 24, 8) \
| _SHIFTL(((n)-1) << 4 | (v0), 16, 8) \
| _SHIFTL(sizeof(Vtx)*(n), 0, 16); \
_g->words.w1 = (u32)(v); \
}
#define gDPLoadSync(pkt) \
{ \
Gfx *_g = (Gfx *) (pkt); \
_g->words.w0 = 0xE6000000; \
_g->words.w1 = 0x00000000; \
}
#define gDPPipeSync(pkt) \
{ \
Gfx *_g = (Gfx *) (pkt); \
_g->words.w0 = 0xE7000000; \
_g->words.w1 = 0x00000000; \
}
#define gDPTileSync(pkt) \
{ \
Gfx *_g = (Gfx *) (pkt); \
_g->words.w0 = 0xE8000000; \
_g->words.w1 = 0x00000000; \
}
#define gDPFullSync(pkt) \
{ \
Gfx *_g = (Gfx *) (pkt); \
_g->words.w0 = 0xE9000000; \
_g->words.w1 = 0x00000000; \
}
#define gSPDisplayList(pkt, dl) \
{ \
Gfx *_g = (Gfx *) (pkt); \
_g->words.w0 = 0x06000000; \
_g->words.w1 = (u32)(dl); \
}
#define gSPBranchList(pkt, dl) \
{ \
Gfx *_g = (Gfx *)(pkt); \
_g->words.w0 = 0x06010000; \
_g->words.w1 = (u32)(dl); \
}
#define gSPEndDisplayList(pkt) \
{ \
Gfx *_g = (Gfx *) (pkt); \
_g->words.w0 = 0xB8000000; \
_g->words.w1 = 0x00000000; \
}
#define gDPSetCycleType(pkt, type) \
{ \
Gfx *_g = (Gfx *) (pkt); \
_g->words.w0 = 0xBA001402; \
_g->words.w1 = type; \
}
#define gDPPipelineMode(pkt, mode) \
{ \
Gfx *_g = (Gfx *) (pkt); \
_g->words.w0 = 0xBA001701; \
_g->words.w1 = mode; \
}
#define gDPSetScissor(pkt, mode, ulx, uly, lrx, lry) \
{ \
Gfx *_g = (Gfx *)(pkt); \
_g->words.w0 = _SHIFTL(0xED, 24, 8) \
| _SHIFTL((int)((float)(ulx)*4.0f), 12, 12) \
| _SHIFTL((int)((float)(uly)*4.0f), 0, 12); \
_g->words.w1 = _SHIFTL((mode), 24, 8) \
| _SHIFTL((int)((float)(lrx)*4.0f), 12, 12) \
| _SHIFTL((int)((float)(lry)*4.0f), 0, 12); \
}
#define gDPSetCombine(pkt, muxs0, muxs1) \
{ \
Gfx *_g = (Gfx *)(pkt); \
_g->words.w0 = _SHIFTL(0xFC, 24, 8) \
| _SHIFTL((muxs0), 0, 24); \
_g->words.w1 = (muxs1); \
}
#define gDPSetTextureLOD(pkt, type) \
{ \
Gfx *_g = (Gfx *) (pkt); \
_g->words.w0 = 0xBA001001; \
_g->words.w1 = type; \
}
#define gDPSetTextureLUT(pkt, type) \
{ \
Gfx *_g = (Gfx *) (pkt); \
_g->words.w0 = 0xBA000E02; \
_g->words.w1 = type; \
}
#define gDPSetTextureDetail(pkt, type) \
{ \
Gfx *_g = (Gfx *) (pkt); \
_g->words.w0 = 0xBA001102; \
_g->words.w1 = type; \
}
#define gDPSetTexturePersp(pkt, type) \
{ \
Gfx *_g = (Gfx *) (pkt); \
_g->words.w0 = 0xBA001301; \
_g->words.w1 = type; \
}
#define gDPSetTextureFilter(pkt, type) \
{ \
Gfx *_g = (Gfx *) (pkt); \
_g->words.w0 = 0xBA000C02; \
_g->words.w1 = type; \
}
#define gDPSetTextureConvert(pkt, type) \
{ \
Gfx *_g = (Gfx *) (pkt); \
_g->words.w0 = 0xBA000903; \
_g->words.w1 = type; \
}
#define gDPSetCombineKey(pkt, type) \
{ \
Gfx *_g = (Gfx *) (pkt); \
_g->words.w0 = 0xBA000801; \
_g->words.w1 = type; \
}
#define gDPSetColorDither(pkt, type) \
{ \
Gfx *_g = (Gfx *) (pkt); \
_g->words.w0 = 0xBA000602; \
_g->words.w1 = type; \
}
#define gDPSetFillColor(pkt, color) \
{ \
Gfx *_g = (Gfx *) (pkt); \
_g->words.w0 = 0xF7000000; \
_g->words.w1 = color; \
}
#define gDPFillRectangle(pkt, ulx, uly, lrx, lry) \
{ \
Gfx *_g = (Gfx *)(pkt); \
_g->words.w0 = _SHIFTL(0xF6, 24, 8) \
| _SHIFTL((lrx), 14, 10) \
| _SHIFTL((lry), 2, 10); \
_g->words.w1 = _SHIFTL(0, 24, 8) \
| _SHIFTL((ulx), 14, 10) \
| _SHIFTL((uly), 2, 10); \
}
#define gDPSetAlphaCompare(pkt, type) \
{ \
Gfx *_g = (Gfx *) (pkt); \
_g->words.w0 = 0xB9000002; \
_g->words.w1 = type; \
}
#define gDPSetDepthSource(pkt, type) \
{ \
Gfx *_g = (Gfx *) (pkt); \
_g->words.w0 = 0xB9000201; \
_g->words.w1 = type; \
}
#define gSPSetOtherMode(pkt, cmd, shift, length, data) \
{ \
Gfx *_g = (Gfx *) (pkt); \
_g->words.w0 = _SHIFTL((cmd), 24, 8) \
| _SHIFTL((shift), 8, 8) \
| _SHIFTL(((length)-1), 0, 8); \
_g->words.w1 = (data); \
}
#define gDPSetRenderMode(pkt, mode1, mode2) \
{ \
Gfx *_g = (Gfx *) (pkt); \
_g->words.w0 = 0xB900031D; \
_g->words.w1 = (mode1) | (mode2); \
}
#define gSPClearGeometryMode(pkt, mode) \
{ \
Gfx *_g = (Gfx *) (pkt); \
_g->words.w0 = 0xB6000000; \
_g->words.w1 = mode; \
}
#define gSPSetGeometryMode(pkt, word) \
{ \
Gfx *_g = (Gfx *) (pkt); \
_g->words.w0 = 0xB7000000; \
_g->words.w1 = word; \
}
#define gSPNumLights(pkt, n) \
{ \
Gfx *_g = (Gfx *) (pkt); \
_g->words.w0 = 0xBC000002; \
_g->words.w1 = (0x80000000 + ((n) + 1) * 0x20); \
}
#define gSPTexture(pkt, sc, tc, level, tile, on) \
{ \
Gfx *_g = (Gfx *)(pkt); \
_g->words.w0 = _SHIFTL(0xBB, 24, 8) \
| _SHIFTL(0, 16, 8) \
| _SHIFTL((level), 11, 3) \
| _SHIFTL((tile), 8, 3) \
| _SHIFTL((on), 0, 8); \
_g->words.w1 = _SHIFTL((sc), 16, 16) \
| _SHIFTL((tc), 0, 16); \
}
#define gDPSetColorImage(pkt, fmt, size, width, image) \
{ \
Gfx *_g = (Gfx *)(pkt); \
_g->words.w0 = _SHIFTL(0xFF, 24, 8) \
| _SHIFTL((fmt), 21, 3) \
| _SHIFTL((size), 19, 2) \
| _SHIFTL((width)-1, 0, 12); \
_g->words.w1 = (image); \
}
#define gDPSetTileSize(pkt, tile, uls, ult, lrs, lrt) \
{ \
Gfx *_g = (Gfx *)(pkt); \
_g->words.w0 = _SHIFTL(0xF2, 24, 8) \
| _SHIFTL(uls, 12, 12) \
| _SHIFTL(ult, 0, 12); \
_g->words.w1 = _SHIFTL(tile, 24, 3) \
| _SHIFTL(lrs, 12, 12) \
| _SHIFTL(lrt, 0, 12); \
}
#define gDPLoadBlock(pkt, tile, uls, ult, lrs, dxt) \
{ \
Gfx *_g = (Gfx *)(pkt); \
_g->words.w0 = _SHIFTL(0xF3, 24, 8) \
| _SHIFTL((uls), 12, 12) \
| _SHIFTL((ult), 0, 12); \
_g->words.w1 = _SHIFTL((tile), 24, 3) \
| _SHIFTL((MIN((lrs),G_TX_LDBLK_MAX_TXL)), 12, 12) \
| _SHIFTL((dxt), 0, 12); \
}
#define gDPSetTile(pkt, fmt, siz, line, tmem, tile, \
palette, cmt, maskt, shiftt, cms, masks, shifts) \
{ \
Gfx *_g = (Gfx *)(pkt); \
_g->words.w0 = _SHIFTL(0xF5, 24, 8) \
| _SHIFTL((fmt), 21, 3) \
| _SHIFTL((siz), 19, 2) \
| _SHIFTL((line), 9, 9) \
| _SHIFTL((tmem), 0, 9); \
_g->words.w1 = _SHIFTL((tile), 24, 3) \
| _SHIFTL((palette), 20, 4) \
| _SHIFTL((cmt), 18, 2) \
| _SHIFTL((maskt), 14, 4) \
| _SHIFTL((shiftt), 10, 4) \
| _SHIFTL((cms), 8, 2) \
| _SHIFTL((masks), 4, 4) \
| _SHIFTL((shifts), 0, 4); \
}
#define gDPSetDepthImage(pkt, image) \
{ \
Gfx *_g = (Gfx *)(pkt); \
_g->words.w0 = _SHIFTL(0xFE, 24, 8); \
_g->words.w1 = (image); \
}
#define G_SETPRIMCOLOR 0xFA
#define gDPSetPrimColor(pkt, m, l, r, g, b, a) \
{ \
Gfx *_g = (Gfx *)(pkt); \
_g->words.w0 = _SHIFTL(G_SETPRIMCOLOR, 24, 8) \
| _SHIFTL(m, 8, 8) \
| _SHIFTL(l, 0, 8); \
_g->words.w1 = _SHIFTL(r, 24, 8) \
| _SHIFTL(g, 16, 8) \
| _SHIFTL(b, 8, 8) \
| _SHIFTL(a, 0, 8); \
}
#define gDPSetEnvColor(pkt, r, g, b, a) \
{ \
Gfx *_g = (Gfx *)(pkt); \
_g->words.w0 = _SHIFTL(0xFB, 24, 8); \
_g->words.w1 = _SHIFTL((r), 24, 8) \
| _SHIFTL((g), 16, 8) \
| _SHIFTL((b), 8, 8) \
| _SHIFTL((a), 0, 8); \
}
#define gDPSetTextureImage(pkt, fmt, size, width, img) \
{ \
Gfx *_g = (Gfx *)(pkt); \
_g->words.w0 = _SHIFTL(0xFD, 24, 8) \
| _SHIFTL((fmt), 21, 3) \
| _SHIFTL((size), 19, 2) \
| _SHIFTL((width)-1, 0, 12); \
_g->words.w1 = (u32)(img); \
}
#define gMoveWd(pkt, index, offset, data) \
{ \
Gfx *_g = (Gfx *)(pkt); \
_g->words.w0 = _SHIFTL(0xBC, 24, 8) \
| _SHIFTL((offset), 8, 16) \
| _SHIFTL((index), 0, 8); \
_g->words.w1 = (u32)(data); \
}
/* Matrix Operations */
#define G_MTX_MODELVIEW 0x00
#define G_MTX_PROJECTION 0x01
#define G_MTX_MUL 0x00
#define G_MTX_LOAD 0x02
#define G_MTX_NOPUSH 0x00
#define G_MTX_PUSH 0x04
#define gSPPopMatrix(pkt, n) \
{ \
Gfx *_g = (Gfx *) (pkt); \
_g->words.w0 = 0xBD000000; \
_g->words.w1 = (n); \
}
#define gSPViewport(pkt, v) \
{ \
Gfx *_g = (Gfx *)(pkt); \
_g->words.w0 = _SHIFTL(0x03, 24, 8) \
| _SHIFTL(G_MV_VIEWPORT, 16, 8) \
| _SHIFTL(sizeof(Vp), 0, 16); \
_g->words.w1 = (u32)(v); \
}
#define gSP1Triangle(pkt, v0, v1, v2, flag) \
{ \
Gfx *_g = (Gfx *)(pkt); \
_g->words.w0 = _SHIFTL(0xBF, 24, 8); \
_g->words.w1 = _SHIFTL((flag), 24, 8) \
| _SHIFTL((v0)*10, 16, 8) \
| _SHIFTL((v1)*10, 8, 8) \
| _SHIFTL((v2)*10, 0, 8); \
}
#if (defined(F3DLP_GBI)||defined(F3DEX_GBI))
/***
*** 2 Triangles
***/
#define gSP2Triangles(pkt, v00, v01, v02, flag0, v10, v11, v12, flag1) \
{ \
Gfx *_g = (Gfx *)(pkt); \
\
_g->words.w0 = (_SHIFTL(G_TRI2, 24, 8)| \
__gsSP1Triangle_w1f(v00, v01, v02, flag0)); \
_g->words.w1 = __gsSP1Triangle_w1f(v10, v11, v12, flag1); \
}
#define gsSP2Triangles(v00, v01, v02, flag0, v10, v11, v12, flag1) \
{ \
(_SHIFTL(G_TRI2, 24, 8)| \
__gsSP1Triangle_w1f(v00, v01, v02, flag0)), \
__gsSP1Triangle_w1f(v10, v11, v12, flag1) \
}
#endif /* F3DEX_GBI/F3DLP_GBI */
#if (defined(TRI4_Ext))
/***
*** 4 Triangles - 2Tri Extension
*** Draws up to four triangles at a time.
*** Expects values from 0-F, corresponding with # points declared by vertex command.
*** Triangles with all points set to 0 are not drawn.
*** Vertex Buffer reduced to 16 due to only being able to address 0-F
***/
#define gSP4Triangles(pkt, v00, v01, v02, v10, v11, v12, \
v20, v21, v22, v30, v31, v32 ) \
{ \
Gfx *_g = (Gfx *)(pkt); \
\
_g->words.w0 = (_SHIFTL(G_TRI2, 24, 8)| \
_SHIFTL((v32),12,4)|_SHIFTL((v22),8,4)|_SHIFTL((v12),4,4)|_SHIFTL((v02),0,4); \
_g->words.w1 = _SHIFTL((v31),28,4)|_SHIFTL((v30),24,4)|_SHIFTL((v21),20,4)|_SHIFTL((v20),16,4) \
_SHIFTL((v11),12,4)|_SHIFTL((v10),8,4)|_SHIFTL((v02),4,4)|_SHIFTL((v00),0,4); \
}
#define gsSP4Triangles(v00, v01, v02, flag0, v10, v11, v12, flag1) \
{ \
(_SHIFTL(G_TRI2, 24, 8)| \
_SHIFTL((v32),12,4)|_SHIFTL((v22),8,4)|_SHIFTL((v12),4,4)|_SHIFTL((v02),0,4)), \
(_SHIFTL((v31),28,4)|_SHIFTL((v30),24,4)|_SHIFTL((v21),20,4)|_SHIFTL((v20),16,4) \
_SHIFTL((v11),12,4)|_SHIFTL((v10),8,4)|_SHIFTL((v02),4,4)|_SHIFTL((v00),0,4)); \
}
#endif /* TRI4_Ext*/
#define gSPTextureRectangle(pkt, xl, yl, xh, yh, tile, s, t, dsdx, dtdy) \
{ \
Gfx *_g = (Gfx *)(pkt); \
_g->words.w0 = _SHIFTL(0xE4, 24, 8) \
| _SHIFTL((xh), 12, 12) \
| _SHIFTL((yh), 0, 12); \
_g->words.w1 = _SHIFTL((tile), 24, 3) \
| _SHIFTL((xl), 12, 12) \
| _SHIFTL((yl), 0, 12); \
} \
{ \
Gfx *_g = (Gfx *)(pkt); \
_g->words.w0 = _SHIFTL(0xB3, 24, 8); \
_g->words.w1 = _SHIFTL((s), 16, 16) \
| _SHIFTL((t), 0, 16); \
} \
{ \
Gfx *_g = (Gfx *)(pkt); \
_g->words.w0 = _SHIFTL(0xB2, 24, 8); \
_g->words.w1 = _SHIFTL((dsdx), 16, 16) \
| _SHIFTL((dtdy), 0, 16); \
}
/* Lights and Light Operations */
typedef struct {
unsigned char col[3];
char pad1;
unsigned char colc[3];
char pad2;
signed char dir[3];
char pad3;
} Light_t;
typedef struct {
unsigned char col[3];
char pad1;
unsigned char colc[3];
char pad2;
} Ambient_t;
typedef union {
Ambient_t l;
long long int force_structure_alignment[1];
} Ambient;
typedef union {
Light_t l;
long long int force_structure_alignment[2];
} Light;
typedef struct {
Ambient a;
Light l[4];
} Lights4;
typedef struct {
Light l[2];
} LookAt;
typedef struct {
int x1, y1, x2, y2;
} Hilite_t;
typedef union {
Hilite_t h;
long int force_alignmnet[4];
} Hilite;
#define G_MOVEMEM 0x03
/* for gSPNumLights */
// is NUMLIGHTS_0 accurate?
#define NUMLIGHTS_0 1
#define NUMLIGHTS_1 1
#define NUMLIGHTS_2 2
#define NUMLIGHTS_3 3
#define NUMLIGHTS_4 4
#define NUMLIGHTS_5 5
#define NUMLIGHTS_6 6
#define NUMLIGHTS_7 7
/* for gSPLight */
#define LIGHT_1 1
#define LIGHT_2 2
#define LIGHT_3 3
#define LIGHT_4 4
#define LIGHT_5 5
#define LIGHT_6 6
#define LIGHT_7 7
#define LIGHT_8 8
#define gSPLight(pkt, l, n) \
{ \
Gfx *_g = (Gfx *)(pkt); \
_g->words.w0 = _SHIFTL(G_MOVEMEM, 24, 8) \
| _SHIFTL(((n)-1)*2+G_MV_L0, 16, 8) \
| _SHIFTL(sizeof(Light), 0, 16); \
_g->words.w1 = (u32)(l); \
}
#define gSPLookAtX(pkt, la) \
{ \
Gfx *_g = (Gfx *)(pkt); \
_g->words.w0 = _SHIFTL(G_MOVEMEM, 24, 8) \
| _SHIFTL(G_MV_LOOKATX, 16, 8) \
| _SHIFTL(sizeof(Light), 0, 16); \
_g->words.w1 = (u32)(la); \
}
#define gSPLookAtY(pkt, la) \
{ \
Gfx *_g = (Gfx *)(pkt); \
_g->words.w0 = _SHIFTL(G_MOVEMEM, 24, 8) \
| _SHIFTL(G_MV_LOOKATY, 16, 8) \
| _SHIFTL(sizeof(Light), 0, 16); \
_g->words.w1 = (u32)(la); \
}
#define gSPLookAt(pkt, la) \
{ \
gSPLookAtX((pkt), (la)) \
gSPLookAtY((pkt), (char *)(la)+16) \
}
#endif
-1
View File
@@ -1 +0,0 @@
2d6fd6268c1325c433c0ec635a1df5b2af296e5c
+332
View File
@@ -0,0 +1,332 @@
/* GNU as assembler macros for F3D GBI */
/* commands with no parameters */
.macro f3d_noparam cmd
.word (\cmd << 24), 0x00000000
.endm
.macro gsImmp1 cmd, param
.word (\cmd << 24), \param
.endm
/* DMA helper */
.macro gsDma1p cmd, segAddr, length, params
.byte \cmd, \params
.hword \length
.word \segAddr
.endm
/* 01: G_MTX */
/* params */
.set G_MTX_MODELVIEW, 0x00
.set G_MTX_PROJECTION, 0x01
.set G_MTX_MUL, 0x00
.set G_MTX_LOAD, 0x02
.set G_MTX_NOPUSH, 0x00
.set G_MTX_PUSH, 0x04
.set G_MTX, 0x01
.macro gsSPMatrix matrix, params
gsDma1p G_MTX, \matrix, 64, \params
.endm
/* 02: reserved */
/* 03: G_MOVEMEM */
.set G_MOVEMEM, 0x03
.set G_MV_L0, 0x86
.macro gsSPLight light, num
gsDma1p G_MOVEMEM, \light, 16, ((\num)-1)*2+G_MV_L0
.endm
/* 04: G_VTX */
.set G_VTX, 0x04
.macro gsSPVertex verts, num, index
gsDma1p G_VTX, \verts, 16*\num, ((\num)-1)<<4|(\index)
.endm
/* 05: reserved */
/* 06: G_DL */
.set G_DL, 0x06
.set G_DL_PUSH, 0x00
.set G_DL_NOPUSH, 0x01
.macro gsSPDisplayList dl
gsDma1p G_DL, \dl, 0, G_DL_PUSH
.endm
.macro gsSPBranchList dl
gsDma1p G_DL, \dl, 0, G_DL_NOPUSH
.endm
/* geometry mode flags */
.set G_ZBUFFER, 0x00000001
.set G_SHADE, 0x00000004
.set G_SHADING_SMOOTH, 0x00000200
.set G_CULL_FRONT, 0x00001000
.set G_CULL_BACK, 0x00002000
.set G_FOG, 0x00010000
.set G_LIGHTING, 0x00020000
.set G_TEXTURE_GEN, 0x00040000
.set G_TEXTURE_GEN_LINEAR, 0x00080000
/* B3: G_RDPHALF_2 */
.set G_RDPHALF_2, 0xB3
/* B4: G_RDPHALF_1 */
.set G_RDPHALF_1, 0xB4
/* B6: G_CLEARGEOMETRYMODE */
.set G_CLEARGEOMETRYMODE, 0xB6
.macro gsSPClearGeometryMode flags
.word G_CLEARGEOMETRYMODE << 24
.word \flags
.endm
/* B7: G_SETGEOMETRYMODE */
.set G_SETGEOMETRYMODE, 0xB7
.macro gsSPSetGeometryMode flags
.word G_SETGEOMETRYMODE << 24
.word \flags
.endm
/* B8: G_ENDDL */
.set G_ENDDL, 0xB8
.macro gsSPEndDisplayList
f3d_noparam G_ENDDL
.endm
/* B9: G_SETOTHERMODE_L */
.set G_SETOTHERMODE_L, 0xB9
/* G_SETOTHERMODE_L sft: shift count */
.set G_MDSFT_ALPHACOMPARE, 0
.set G_MDSFT_ZSRCSEL, 2
.set G_MDSFT_RENDERMODE, 3
.set G_MDSFT_BLENDER, 16
/* BA: G_SETOTHERMODE_H */
.set G_SETOTHERMODE_H, 0xBA
/* G_SETOTHERMODE_H sft: shift count */
.set G_MDSFT_ALPHADITHER, 4
.set G_MDSFT_RGBDITHER, 6
.set G_MDSFT_COMBKEY, 8
.set G_MDSFT_TEXTCONV, 9
.set G_MDSFT_TEXTFILT, 12
.set G_MDSFT_TEXTLUT, 14
.set G_MDSFT_TEXTLOD, 16
.set G_MDSFT_TEXTDETAIL, 17
.set G_MDSFT_TEXTPERSP, 19
.set G_MDSFT_CYCLETYPE, 20
.set G_MDSFT_PIPELINE, 23
.macro gsSPSetOtherMode cmd, sft, len, data
.word ((\cmd & 0xFF) << 24) | ((\sft & 0xFF) << 8) | (\len & 0xFF)
.word \data
.endm
/* BB: G_TEXTURE */
.set G_TEXTURE, 0xBB
.macro gsSPTexture scaleS, scaleT, level, tile, enable
.word (G_TEXTURE << 24) | ((\level & 0x7) << 11) | ((\tile & 0x7) << 8) | \enable
.word ((\scaleS & 0xFFFF) << 16) | (\scaleT & 0xFFFF)
.endm
/* BC: G_MOVEWORD */
.set G_MOVEWORD, 0xBC
.macro gsMoveWd index, offset, data
.word G_MOVEWORD << 24 | ((\index & 0xFFFF) << 8) | (\offset & 0xFF)
.word \data
.endm
/* BF: G_TRI1 */
.set G_TRI1, 0xBF
.macro gsSP1Triangle v0, v1, v2, flag
.word G_TRI1 << 24
.byte \flag, \v0*10, \v1*10, \v2*10
.endm
/* C0: G_NOOP */
.set G_NOOP, 0xC0
.macro gsDPNoOp
f3d_noparam G_NOOP
.endm
/* E6: G_RDPLOADSYNC */
.set G_RDPLOADSYNC, 0xE6
.macro gsDPLoadSync
f3d_noparam G_RDPLOADSYNC
.endm
/* E7: G_RDPPIPESYNC */
.set G_RDPPIPESYNC, 0xE7
.macro gsDPPipeSync
f3d_noparam G_RDPPIPESYNC
.endm
/* E8: G_RDPTILESYNC */
.set G_RDPTILESYNC, 0xE8
.macro gsDPTileSync
f3d_noparam G_RDPTILESYNC
.endm
/* E9: G_RDPFULLSYNC */
.set G_RDPFULLSYNC, 0xE9
.macro gsDPFullSync
f3d_noparam G_RDPFULLSYNC
.endm
/* F0: G_LOADTLUT */
.set G_LOADTLUT, 0xF0
.macro gsDPLoadTLUTCmd tile, count
.word G_LOADTLUT << 24
.word ((\tile & 0x7) << 24) | (\count & 0x3FFF) << 10
.endm
/* F1: unused */
/* F2: G_SETTILESIZE */
.set G_SETTILESIZE, 0xF2
.macro gsDPSetTileSize tile, uls, ult, lrs, lrt
.word (G_SETTILESIZE << 24) | ((\uls & 0x0FFF) << 12) | (\ult & 0x0FFF)
.word ((\tile & 0x7) << 24) | ((\lrs & 0x0FFF) << 12) | (\lrt & 0x0FFF)
.endm
/* F3: G_LOADBLOCK */
.set G_LOADBLOCK, 0xF3
.macro gsDPLoadBlock tile, uls, ult, lrs, dxt
.word (G_LOADBLOCK << 24) | ((\uls & 0x0FFF) << 12) | (\ult & 0x0FFF)
.word ((\tile & 0x7) << 24) | ((\lrs & 0x0FFF) << 12) | (\dxt & 0x0FFF)
.endm
/* F5: G_SETTILE */
.set G_TX_LOADTILE, 0x7
.set G_TX_RENDERTILE, 0x0
/* axis clamp and mirror flags */
.set G_TX_NOMIRROR, 0x0
.set G_TX_WRAP, 0x0
.set G_TX_MIRROR, 0x1
.set G_TX_CLAMP, 0x2
/* mask flags */
.set G_TX_NOMASK, 0x0
/* shift flags */
.set G_TX_NOLOD, 0x0
.set G_SETTILE, 0xF5
.macro gsDPSetTile fmt, siz, line, tmem, tile, palette, cmt, maskt, shiftt, cms, masks, shifts
.word (G_SETTILE << 24) | ((\fmt & 0x7) << 21) | ((\siz & 0x3) << 19) | ((\line & 0x1FF) << 9) | (\tmem & 0x1FF)
.word ((\tile & 0x7) << 24) | ((\palette & 0xF) << 20) | ((\cmt & 0x3) << 18) | ((\maskt & 0xF) << 14) | ((\shiftt & 0xF) << 10) | ((\cms & 0x3) << 8) | ((\masks & 0xF) << 4) | (\shifts & 0xF)
.endm
/* F6: G_FILLRECT */
.set G_FILLRECT, 0xF6
.macro gsDPFillRectangle ulx, uly, lrx, lry
.word (G_FILLRECT << 24) | ((\lrx & 0x3FF) << 14) | ((\lry & 0x3FF) << 2)
.word ((\ulx & 0x3FF) << 14) | ((\uly & 0x3FF) << 2)
.endm
/* F7: G_SETFILLCOLOR */
.set G_SETFILLCOLOR, 0xF7
.macro gsDPSetFillColor fillValue
.word G_SETFILLCOLOR << 24
.word \fillValue
.endm
/* helper for RGBA colors */
.macro sDPRGBColor cmd r, g, b, a
.word \cmd << 24
.byte \r, \g, \b, \a
.endm
/* F8: G_SETFOGCOLOR */
.set G_SETFOGCOLOR, 0xF8
.macro gsDPSetFogColor r, g, b, a
sDPRGBColor G_SETFOGCOLOR, \r, \g, \b, \a
.endm
/* F9: G_SETBLENDCOLOR */
.set G_SETBLENDCOLOR, 0xF9
.macro gsDPSetBlendColor r, g, b, a
sDPRGBColor G_SETBLENDCOLOR, \r, \g, \b, \a
.endm
/* FA: G_SETPRIMCOLOR */
.set G_SETPRIMCOLOR, 0xFA
.macro gsDPSetPrimColor m, l, r, g, b, a
.word (G_SETPRIMCOLOR << 24) | ((\m & 0xFF) << 8) | (\l & 0xFF)
.byte \r, \g, \b, \a
.endm
/* FB: G_SETENVCOLOR */
.set G_SETENVCOLOR, 0xFB
.macro gsDPSetEnvColor r, g, b, a
sDPRGBColor G_SETENVCOLOR, \r, \g, \b, \a
.endm
/* FC: G_SETCOMBINE */
/* color combiner */
.set G_CCMUX_COMBINED, 0
.set G_CCMUX_TEXEL0, 1
.set G_CCMUX_TEXEL1, 2
.set G_CCMUX_PRIMITIVE, 3
.set G_CCMUX_SHADE, 4
.set G_CCMUX_ENVIRONMENT, 5
.set G_CCMUX_CENTER, 6
.set G_CCMUX_SCALE, 6
.set G_CCMUX_COMBINED_ALPHA, 7
.set G_CCMUX_TEXEL0_ALPHA, 8
.set G_CCMUX_TEXEL1_ALPHA, 9
.set G_CCMUX_PRIMITIVE_ALPHA, 10
.set G_CCMUX_SHADE_ALPHA, 11
.set G_CCMUX_ENV_ALPHA, 12
.set G_CCMUX_LOD_FRACTION, 13
.set G_CCMUX_PRIM_LOD_FRAC, 14
.set G_CCMUX_NOISE, 7
.set G_CCMUX_K4, 7
.set G_CCMUX_K5, 15
.set G_CCMUX_1, 6
.set G_CCMUX_0, 31
/* alpha combiner */
.set G_ACMUX_COMBINED, 0
.set G_ACMUX_TEXEL0, 1
.set G_ACMUX_TEXEL1, 2
.set G_ACMUX_PRIMITIVE, 3
.set G_ACMUX_SHADE, 4
.set G_ACMUX_ENVIRONMENT, 5
.set G_ACMUX_LOD_FRACTION, 0
.set G_ACMUX_PRIM_LOD_FRAC, 6
.set G_ACMUX_1, 6
.set G_ACMUX_0, 7
.set G_SETCOMBINE, 0xFC
.macro gsDPSetCombine muxs0, muxs1
.word (G_SETCOMBINE << 24) | (\muxs0 & 0x00FFFFFF)
.word \muxs1
.endm
.macro gsDPSetCombineMode a0, b0, c0, d0, Aa0, Ab0, Ac0, Ad0, a1, b1, c1, d1, Aa1, Ab1, Ac1, Ad1
.word (G_SETCOMBINE << 24) | ((\a0 & 0xF) << 20) | ((\c0 & 0x1F) << 15) | ((\Aa0 & 0x7) << 12) | ((\Ac0 & 0x7) << 9) | ((\a1 & 0xF) << 5) | (\c1 & 0x1F)
.word ((\b0 & 0xF) << 28) | ((\b1 & 0xF) << 24) | ((\Aa1 & 0x7) << 21) | ((\Ac1 & 0x7) << 18) | ((\d0 & 0x7) << 15) | ((\Ab0 & 0x7) << 12) | ((\Ad0 & 0x7) << 9) | ((\d1 & 0x7) << 6) | ((\Ab1 & 0x7) << 3) | (\Ad1 & 0x7)
.endm
/* FD: G_SETTIMG */
/* fmt */
.set G_IM_FMT_RGBA, 0x00
.set G_IM_FMT_YUV, 0x01
.set G_IM_FMT_CI, 0x02
.set G_IM_FMT_IA, 0x03
.set G_IM_FMT_I, 0x04
/* size */
.set G_IM_SIZ_4b, 0x00
.set G_IM_SIZ_8b, 0x01
.set G_IM_SIZ_16b, 0x02
.set G_IM_SIZ_32b, 0x03
.set G_SETTIMG, 0xFD
.macro gsDPSetTextureImage fmt, size, width, segAddr
.word (G_SETTIMG << 24) | ((\fmt & 0x7) << 21) | ((\size & 0x3) << 19) | ((\width-1) & 0x0FFF)
.word \segAddr
.endm
-1
View File
@@ -1 +0,0 @@
cb05cf41e2e8db80354ef0801c427d04da632126
+50
View File
@@ -0,0 +1,50 @@
#ifndef _ULTRA64_MESSAGE_H_
#define _ULTRA64_MESSAGE_H_
/* Events */
#define OS_EVENT_SW1 0
#define OS_EVENT_SW2 1
#define OS_EVENT_CART 2
#define OS_EVENT_COUNTER 3
#define OS_EVENT_SP 4
#define OS_EVENT_SI 5
#define OS_EVENT_AI 6
#define OS_EVENT_VI 7
#define OS_EVENT_PI 8
#define OS_EVENT_DP 9
#define OS_EVENT_CPU_BREAK 10
#define OS_EVENT_SP_BREAK 11
#define OS_EVENT_FAULT 12
#define OS_EVENT_THREADSTATUS 13
#define OS_EVENT_PRENMI 14
#define OS_MESG_NOBLOCK 0
#define OS_MESG_BLOCK 1
/* Types */
typedef u32 OSEvent;
typedef void *OSMesg;
typedef struct OSMesgQueue_s
{
OSThread *mtqueue;
OSThread *fullqueue;
s32 validCount;
s32 first;
s32 msgCount;
OSMesg *msg;
} OSMesgQueue;
/* Functions */
void osCreateMesgQueue(OSMesgQueue *mq, OSMesg *msgBuf, s32 count);
s32 osSendMesg(OSMesgQueue *mq, OSMesg msg, s32 flag);
s32 osJamMesg(OSMesgQueue *mq, OSMesg msg, s32 flag);
s32 osRecvMesg(OSMesgQueue *mq, OSMesg *msg, s32 flag);
void osSetEventMesg(OSEvent e, OSMesgQueue *mq, OSMesg msg);
void osViSetEvent(OSMesgQueue *mq, OSMesg msg, u32 retraceCount);
s32 osContStartReadData(OSMesgQueue *mq);
#endif
-1
View File
@@ -1 +0,0 @@
19531493671f32392edb57d5d03ee717ecd5f7a5
+39
View File
@@ -0,0 +1,39 @@
#ifndef _ULTRA64_CONTROLLER_H_
#define _ULTRA64_CONTROLLER_H_
typedef struct
{
/*0x00*/ u16 type; /* Controller Type */
/*0x02*/ u8 status; /* Controller status */
/*0x03*/ u8 errno;
} OSContStatus;
typedef struct {
/*0x00*/ u16 button;
/*0x02*/ s8 stick_x; /* -80 <= stick_x <= 80 */
/*0x03*/ s8 stick_y; /* -80 <= stick_y <= 80 */
/*0x04*/ u8 errno;
} OSContPad;
#define A_BUTTON (1 << 15) // 0x8000
#define B_BUTTON (1 << 14) // 0x4000
#define Z_TRIG (1 << 13) // 0x2000
#define START_BUTTON (1 << 12) // 0x1000
#define U_JPAD (1 << 11) // 0x0800
#define D_JPAD (1 << 10) // 0x0400
#define L_JPAD (1 << 9) // 0x0200
#define R_JPAD (1 << 8) // 0x0100
#define DUMMY_1 (1 << 7) // 0x0080 (unused)
#define DUMMY_2 (1 << 6) // 0x0040 (unused)
#define L_TRIG (1 << 5) // 0x0020
#define R_TRIG (1 << 4) // 0x0010
#define U_CBUTTONS (1 << 3) // 0x0008
#define D_CBUTTONS (1 << 2) // 0x0004
#define L_CBUTTONS (1 << 1) // 0x0002
#define R_CBUTTONS (1 << 0) // 0x0001
s32 osContInit(OSMesgQueue *, u8 *, OSContStatus *);
void osContGetReadData(OSContPad *);
#endif
-1
View File
@@ -1 +0,0 @@
7393f39f5204f6690c537b0a680c96200c63669a
+85
View File
@@ -0,0 +1,85 @@
#ifndef _ULTRA64_PI_H_
#define _ULTRA64_PI_H_
/* Ultra64 Parallel Interface */
/* Types */
typedef struct
{
u32 errStatus;
void *dramAddr;
void *C2Addr;
u32 sectorSize;
u32 C1ErrNum;
u32 C1ErrSector[4];
} __OSBlockInfo;
typedef struct
{
u32 cmdType;
u16 transferMode;
u16 blockNum;
s32 sectorNum;
u32 devAddr;
u32 bmCtlShadow;
u32 seqCtlShadow;
__OSBlockInfo block[2];
} __OSTranxInfo;
typedef struct OSPiHandle_s
{
struct OSPiHandle_s *next;
u8 type;
u8 latency;
u8 pageSize;
u8 relDuration;
u8 pulse;
u8 domain;
u32 baseAddress;
u32 speed;
__OSTranxInfo transferInfo;
} OSPiHandle;
typedef struct
{
u8 type;
u32 address;
} OSPiInfo;
typedef struct
{
u16 type;
u8 pri;
u8 status;
OSMesgQueue *retQueue;
} OSIoMesgHdr;
typedef struct
{
/*0x00*/ OSIoMesgHdr hdr;
/*0x08*/ void *dramAddr;
/*0x0C*/ u32 devAddr;
/*0x10*/ u32 size;
OSPiHandle *piHandle; //from the official definition
} OSIoMesg;
/* Definitions */
#define OS_READ 0 // device -> RDRAM
#define OS_WRITE 1 // device <- RDRAM
#define OS_MESG_PRI_NORMAL 0
#define OS_MESG_PRI_HIGH 1
/* Functions */
s32 osPiStartDma(OSIoMesg *mb, s32 priority, s32 direction,
u32 devAddr, void *vAddr, u32 nbytes, OSMesgQueue *mq);
void osCreatePiManager(OSPri pri, OSMesgQueue *cmdQ, OSMesg *cmdBuf,
s32 cmdMsgCnt);
OSMesgQueue *osPiGetCmdQueue(void);
s32 osPiWriteIo(u32 devAddr, u32 data);
s32 osPiReadIo(u32 devAddr, u32 *data);
#endif
-1
View File
@@ -1 +0,0 @@
4844f81fb63e0b1511f92f997c431c948c4f15b7
+114
View File
@@ -0,0 +1,114 @@
#ifndef _ULTRA64_SPTASK_H_
#define _ULTRA64_SPTASK_H_
/* Task Types */
#define M_GFXTASK 1
#define M_AUDTASK 2
#define M_VIDTASK 3
#define M_HVQTASK 6
#define M_HVQMTASK 7
//gGfxSPTaskYieldBuffer has to be changed for this too
#if (defined(F3DEX_GBI) || defined(F3DLP_GBI) || defined(F3DEX_GBI_2))
#define OS_YIELD_DATA_SIZE 0xc00
#else
#define OS_YIELD_DATA_SIZE 0x900
#endif
#define OS_YIELD_AUDIO_SIZE 0x400
/* Flags */
#define M_TASK_FLAG0 1
#define M_TASK_FLAG1 2
/* SpStatus */
#define SPSTATUS_CLEAR_HALT 0x00000001
#define SPSTATUS_SET_HALT 0x00000002
#define SPSTATUS_CLEAR_BROKE 0x00000004
#define SPSTATUS_CLEAR_INTR 0x00000008
#define SPSTATUS_SET_INTR 0x00000010
#define SPSTATUS_CLEAR_SSTEP 0x00000020
#define SPSTATUS_SET_SSTEP 0x00000040
#define SPSTATUS_CLEAR_INTR_ON_BREAK 0x00000080
#define SPSTATUS_SET_INTR_ON_BREAK 0x00000100
#define SPSTATUS_CLEAR_SIGNAL0 0x00000200
#define SPSTATUS_SET_SIGNAL0 0x00000400
#define SPSTATUS_CLEAR_SIGNAL1 0x00000800
#define SPSTATUS_SET_SIGNAL1 0x00001000
#define SPSTATUS_CLEAR_SIGNAL2 0x00002000
#define SPSTATUS_SET_SIGNAL2 0x00004000
#define SPSTATUS_CLEAR_SIGNAL3 0x00008000
#define SPSTATUS_SET_SIGNAL3 0x00010000
#define SPSTATUS_CLEAR_SIGNAL4 0x00020000
#define SPSTATUS_SET_SIGNAL4 0x00040000
#define SPSTATUS_CLEAR_SIGNAL5 0x00080000
#define SPSTATUS_SET_SIGNAL5 0x00100000
#define SPSTATUS_CLEAR_SIGNAL6 0x00200000
#define SPSTATUS_SET_SIGNAL6 0x00800000
#define SPSTATUS_CLEAR_SIGNAL7 0x01000000
#define SPSTATUS_SET_SIGNAL7 0x02000000
#define SPSTATUS_HALT 0x0001
#define SPSTATUS_BROKE 0x0002
#define SPSTATUS_DMA_BUSY 0x0004
#define SPSTATUS_DMA_FULL 0x0008
#define SPSTATUS_IO_FULL 0x0010
#define SPSTATUS_SINGLE_STEP 0x0020
#define SPSTATUS_INTERRUPT_ON_BREAK 0x0040
#define SPSTATUS_SIGNAL0_SET 0x0080
#define SPSTATUS_SIGNAL1_SET 0x0100
#define SPSTATUS_SIGNAL2_SET 0x0200
#define SPSTATUS_SIGNAL3_SET 0x0400
#define SPSTATUS_SIGNAL4_SET 0x0800
#define SPSTATUS_SIGNAL5_SET 0x1000
#define SPSTATUS_SIGNAL6_SET 0x2000
#define SPSTATUS_SIGNAL7_SET 0x4000
/* Types */
/* Types */
typedef struct
{
/*0x00*/ u32 type;
/*0x04*/ u32 flags;
/*0x08*/ u64 *ucode_boot;
/*0x0C*/ u32 ucode_boot_size;
/*0x10*/ u64 *ucode;
/*0x14*/ u32 ucode_size;
/*0x18*/ u64 *ucode_data;
/*0x1C*/ u32 ucode_data_size;
/*0x20*/ u64 *dram_stack;
/*0x24*/ u32 dram_stack_size;
/*0x28*/ u64 *output_buff;
/*0x2C*/ u64 *output_buff_size;
/*0x30*/ u64 *data_ptr;
/*0x34*/ u32 data_size;
/*0x38*/ u64 *yield_data_ptr;
/*0x3C*/ u32 yield_data_size;
} OSTask_t; // size = 0x40
typedef union {
OSTask_t t;
long long int force_structure_alignment;
} OSTask;
typedef u32 OSYieldResult;
/* Functions */
#define osSpTaskStart(p) \
osSpTaskLoad(p); \
osSpTaskStartGo(p);
void osSpTaskLoad(OSTask *task);
void osSpTaskStartGo(OSTask *task);
void osSpTaskYield(void);
OSYieldResult osSpTaskYielded(OSTask *task);
#endif
-1
View File
@@ -1 +0,0 @@
75d5752a4a0a9d9d4c50cd5f108978c70d6a0c3b
+75
View File
@@ -0,0 +1,75 @@
#ifndef _ULTRA64_THREAD_H_
#define _ULTRA64_THREAD_H_
/* Recommended priorities for system threads */
#define OS_PRIORITY_MAX 255
#define OS_PRIORITY_VIMGR 254
#define OS_PRIORITY_RMON 250
#define OS_PRIORITY_RMONSPIN 200
#define OS_PRIORITY_PIMGR 150
#define OS_PRIORITY_SIMGR 140
#define OS_PRIORITY_APPMAX 127
#define OS_PRIORITY_IDLE 0
#define OS_STATE_STOPPED 1
#define OS_STATE_RUNNABLE 2
#define OS_STATE_RUNNING 4
#define OS_STATE_WAITING 8
/* Types */
typedef s32 OSPri;
typedef s32 OSId;
typedef union
{
struct {f32 f_odd; f32 f_even;} f;
} __OSfp;
typedef struct
{
/* registers */
/*0x20*/ u64 at, v0, v1, a0, a1, a2, a3;
/*0x58*/ u64 t0, t1, t2, t3, t4, t5, t6, t7;
/*0x98*/ u64 s0, s1, s2, s3, s4, s5, s6, s7;
/*0xD8*/ u64 t8, t9, gp, sp, s8, ra;
/*0x108*/ u64 lo, hi;
/*0x118*/ u32 sr, pc, cause, badvaddr, rcp;
/*0x12C*/ u32 fpcsr;
__OSfp fp0, fp2, fp4, fp6, fp8, fp10, fp12, fp14;
__OSfp fp16, fp18, fp20, fp22, fp24, fp26, fp28, fp30;
} __OSThreadContext;
typedef struct
{
u32 flag;
u32 count;
u64 time;
} __OSThreadprofile_s;
typedef struct OSThread_s
{
/*0x00*/ struct OSThread_s *next;
/*0x04*/ OSPri priority;
/*0x08*/ struct OSThread_s **queue;
/*0x0C*/ struct OSThread_s *tlnext;
/*0x10*/ u16 state;
/*0x12*/ u16 flags;
/*0x14*/ OSId id;
/*0x18*/ int fp;
/*0x1C*/ __OSThreadprofile_s *thprof;
/*0x20*/ __OSThreadContext context;
} OSThread;
/* Functions */
void osCreateThread(OSThread *thread, OSId id, void (*entry)(void *),
void *arg, void *sp, OSPri pri);
OSId osGetThreadId(OSThread *thread);
OSPri osGetThreadPri(OSThread *thread);
void osSetThreadPri(OSThread *thread, OSPri pri);
void osStartThread(OSThread *thread);
void osStopThread(OSThread *thread);
#endif
-1
View File
@@ -1 +0,0 @@
791701c24942c309a0c70cf103d33ca25a6071e1
+143
View File
@@ -0,0 +1,143 @@
#ifndef _ULTRA64_VI_H_
#define _ULTRA64_VI_H_
/* Ultra64 Video Interface */
/* Special Features */
#define OS_VI_GAMMA_ON 0x0001
#define OS_VI_GAMMA_OFF 0x0002
#define OS_VI_GAMMA_DITHER_ON 0x0004
#define OS_VI_GAMMA_DITHER_OFF 0x0008
#define OS_VI_DIVOT_ON 0x0010
#define OS_VI_DIVOT_OFF 0x0020
#define OS_VI_DITHER_FILTER_ON 0x0040
#define OS_VI_DITHER_FILTER_OFF 0x0080
#define OS_VI_GAMMA 0x08
#define OS_VI_GAMMA_DITHER 0x04
#define OS_VI_DIVOT 0x10
#define OS_VI_DITHER_FILTER 0x10000
#define OS_VI_UNK200 0x200
#define OS_VI_UNK100 0x100
/* Types */
typedef struct
{
u32 ctrl;
u32 width;
u32 burst;
u32 vSync;
u32 hSync;
u32 leap;
u32 hStart;
u32 xScale;
u32 vCurrent;
} OSViCommonRegs;
typedef struct
{
u32 origin;
u32 yScale;
u32 vStart;
u32 vBurst;
u32 vIntr;
} OSViFieldRegs;
typedef struct
{
u8 type;
OSViCommonRegs comRegs;
OSViFieldRegs fldRegs[2];
} OSViMode;
typedef struct
{
/* 0x00 */ u16 unk00; //some kind of flags. swap buffer sets to 0x10
/* 0x02 */ u16 retraceCount;
/* 0x04 */ void* buffer;
/* 0x08 */ OSViMode *unk08;
/* 0x0c */ u32 features;
/* 0x10 */ OSMesgQueue *mq;
/* 0x14 */ OSMesg *msg;
/* 0x18 */ u32 unk18;
/* 0x1c */ u32 unk1c;
/* 0x20 */ u32 unk20;
/* 0x24 */ f32 unk24;
/* 0x28 */ u16 unk28;
/* 0x2c */ u32 unk2c;
} OSViContext;
void osCreateViManager(OSPri pri);
void osViSetMode(OSViMode *mode);
void osViBlack(u8 active);
void osViSetSpecialFeatures(u32 func);
void osViSwapBuffer(void *vaddr);
#define OS_VI_NTSC_LPN1 0 /* NTSC */
#define OS_VI_NTSC_LPF1 1
#define OS_VI_NTSC_LAN1 2
#define OS_VI_NTSC_LAF1 3
#define OS_VI_NTSC_LPN2 4
#define OS_VI_NTSC_LPF2 5
#define OS_VI_NTSC_LAN2 6
#define OS_VI_NTSC_LAF2 7
#define OS_VI_NTSC_HPN1 8
#define OS_VI_NTSC_HPF1 9
#define OS_VI_NTSC_HAN1 10
#define OS_VI_NTSC_HAF1 11
#define OS_VI_NTSC_HPN2 12
#define OS_VI_NTSC_HPF2 13
#define OS_VI_PAL_LPN1 14 /* PAL */
#define OS_VI_PAL_LPF1 15
#define OS_VI_PAL_LAN1 16
#define OS_VI_PAL_LAF1 17
#define OS_VI_PAL_LPN2 18
#define OS_VI_PAL_LPF2 19
#define OS_VI_PAL_LAN2 20
#define OS_VI_PAL_LAF2 21
#define OS_VI_PAL_HPN1 22
#define OS_VI_PAL_HPF1 23
#define OS_VI_PAL_HAN1 24
#define OS_VI_PAL_HAF1 25
#define OS_VI_PAL_HPN2 26
#define OS_VI_PAL_HPF2 27
#define OS_VI_MPAL_LPN1 28 /* MPAL - mainly Brazil */
#define OS_VI_MPAL_LPF1 29
#define OS_VI_MPAL_LAN1 30
#define OS_VI_MPAL_LAF1 31
#define OS_VI_MPAL_LPN2 32
#define OS_VI_MPAL_LPF2 33
#define OS_VI_MPAL_LAN2 34
#define OS_VI_MPAL_LAF2 35
#define OS_VI_MPAL_HPN1 36
#define OS_VI_MPAL_HPF1 37
#define OS_VI_MPAL_HAN1 38
#define OS_VI_MPAL_HAF1 39
#define OS_VI_MPAL_HPN2 40
#define OS_VI_MPAL_HPF2 41
#define OS_VI_FPAL_LPN1 42 /* FPAL - Full screen PAL */
#define OS_VI_FPAL_LPF1 43
#define OS_VI_FPAL_LAN1 44
#define OS_VI_FPAL_LAF1 45
#define OS_VI_FPAL_LPN2 46
#define OS_VI_FPAL_LPF2 47
#define OS_VI_FPAL_LAN2 48
#define OS_VI_FPAL_LAF2 49
#define OS_VI_FPAL_HPN1 50
#define OS_VI_FPAL_HPF1 51
#define OS_VI_FPAL_HAN1 52
#define OS_VI_FPAL_HAF1 53
#define OS_VI_FPAL_HPN2 54
#define OS_VI_FPAL_HPF2 55
extern OSViMode osViModeTable[]; /* Global VI mode table */
#endif
-1
View File
@@ -1 +0,0 @@
6433a1d4659ae7126e465e5b1823918588a706c3