Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion configure.py
Original file line number Diff line number Diff line change
Expand Up @@ -397,7 +397,7 @@ def Rel(lib_name: str, objects: List[Object]) -> Dict[str, Any]:
Object(Matching, "SB/Core/gc/iDraw.cpp"),
Object(Equivalent, "SB/Core/gc/iEnv.cpp"),
Object(NonMatching, "SB/Core/gc/iFile.cpp"),
Object(NonMatching, "SB/Core/gc/iFMV.cpp"),
Object(Equivalent, "SB/Core/gc/iFMV.cpp"),
Object(NonMatching, "SB/Core/gc/iFX.cpp"),
Object(Matching, "SB/Core/gc/iLight.cpp"),
Object(Matching, "SB/Core/gc/iMath.cpp"),
Expand Down
28 changes: 26 additions & 2 deletions include/bink/bink.h
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
#ifndef __BINK_H__
#define __BINK_H__

#include <size_t.h>

#define BINKSURFACE8P 0
#define BINKSURFACE24 1
#define BINKSURFACE24R 2
Expand All @@ -22,6 +24,16 @@
struct BINK
{
// Do the members really need to be defined?
U32 unk_0;
U32 unk_4;
U32 unk_8;
U32 unk_c;
U32 unk_10;
U32 unk_14;
U32 unk_18;
U32 unk_1c;
U8 unk_20[0xd0];
S32 unk_f0;
};

typedef struct BINK* HBINK;
Expand All @@ -37,11 +49,23 @@ extern int BinkDoFrame(HBINK bnk);
extern int BinkCopyToBuffer(HBINK bnk, void* dest, int destpitch, unsigned int destheight,
unsigned int destx, unsigned int desty, unsigned int flags);
extern int Lock_RAD_3D_image(HRAD3DIMAGE rad_image, void* out_pixel_buffer,
unsigned int* out_buffer_pitch);
unsigned int* out_buffer_pitch, unsigned int* arg3);
extern void Unlock_RAD_3D_image(HRAD3DIMAGE rad_image);
extern void Blit_RAD_3D_image(HRAD3DIMAGE Image, float, float, float, float, float);
extern void RADSetAudioMemory(void* (*malloc)(size_t), void (*free)(void*));
extern void RADSetMemory(void* (*malloc)(size_t), void (*free)(void*));
extern HBINK BinkOpen(const char* fname, void*);
extern void BinkGetError();
extern void BinkSetVolume(HBINK bink, unsigned int, int volume);
extern HRAD3DIMAGE Open_RAD_3D_image(HBINK bink, unsigned int, unsigned int, unsigned int);
extern void Close_RAD_3D_image(HRAD3DIMAGE rad_image);
extern void BinkGoto(HBINK bink, int frame, unsigned int);
extern int BinkWait(HBINK bink);
extern void BinkNextFrame(HBINK bink);
extern void BinkClose(HBINK bink);

#ifdef __cplusplus
}
#endif

#endif
#endif
20 changes: 9 additions & 11 deletions include/dolphin/dolphin.h
Original file line number Diff line number Diff line change
Expand Up @@ -75,13 +75,6 @@ u8 __gUnknown800030E3 : (OS_BASE_CACHED | 0x30E3);
extern "C" {
#endif

typedef u8 GXBool;

#define GX_TRUE ((GXBool)1)
#define GX_FALSE ((GXBool)0)
#define GX_ENABLE ((GXBool)1)
#define GX_DISABLE ((GXBool)0)

typedef struct DVDDiskID DVDDiskID;

struct DVDDiskID
Expand Down Expand Up @@ -235,17 +228,16 @@ extern volatile OSHeapHandle __OSCurrHeap;
#define OSAlloc(size) OSAllocFromHeap(__OSCurrHeap, (size))
#define OSFree(ptr) OSFreeToHeap(__OSCurrHeap, (ptr))

void ARAlloc(u32 size);
void ARFree(void* mem);
BOOL DVDFastOpen(s32 entrynum, DVDFileInfo* fileInfo);
BOOL DVDReadAsyncPrio(DVDFileInfo* fileInfo, void* addr, s32 length, s32 offset,
DVDCallback callback, s32 prio);
s32 DVDCancel(volatile DVDCommandBlock* block);
BOOL DVDClose(DVDFileInfo* fileInfo);
int DVDSeekAsyncPrio(DVDFileInfo* fileInfo, s32 offset, void (*callback)(s32, DVDFileInfo*),
s32 prio);
s32 DVDGetCommandBlockStatus(const DVDCommandBlock* block);
s32 DVDConvertPathToEntrynum(const char* pathPtr);
BOOL DVDCancelAllAsync(DVDCBCallback callback);
void GXSetColorUpdate(GXBool update_enable);
void GXSetAlphaUpdate(GXBool update_enable);
void OSPanic(const char* file, int line, const char* msg, ...);
void* OSAllocFromHeap(OSHeapHandle heap, u32 size);
void OSFreeToHeap(OSHeapHandle heap, void* ptr);
Expand Down Expand Up @@ -407,6 +399,12 @@ s32 CARDFormat(s32 chan);
// CARDRdwr
s32 CARDGetXferredBytes(s32 chan);

// GX
#include <dolphin/mtx.h>
#include <dolphin/vi.h>
#include <dolphin/gx.h>
#include <dolphin/ar.h>

#ifdef __cplusplus
}
#endif
Expand Down
69 changes: 69 additions & 0 deletions include/dolphin/dolphin/ar.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
#ifndef _DOLPHIN_AR_H_
#define _DOLPHIN_AR_H_

#ifdef __cplusplus
extern "C" {
#endif

typedef void (*ARQCallback)(u32 pointerToARQRequest);

struct ARQRequest {
/* 0x00 */ struct ARQRequest *next;
/* 0x04 */ u32 owner;
/* 0x08 */ u32 type;
/* 0x0C */ u32 priority;
/* 0x10 */ u32 source;
/* 0x14 */ u32 dest;
/* 0x18 */ u32 length;
/* 0x1C */ ARQCallback callback;
};

#define ARQ_DMA_ALIGNMENT 32

#define ARAM_DIR_MRAM_TO_ARAM 0x00
#define ARAM_DIR_ARAM_TO_MRAM 0x01

#define ARStartDMARead(mmem, aram, len) \
ARStartDMA(ARAM_DIR_ARAM_TO_MRAM, mmem, aram, len)
#define ARStartDMAWrite(mmem, aram, len) \
ARStartDMA(ARAM_DIR_MRAM_TO_ARAM, mmem, aram, len)

typedef struct ARQRequest ARQRequest;

#define ARQ_TYPE_MRAM_TO_ARAM ARAM_DIR_MRAM_TO_ARAM
#define ARQ_TYPE_ARAM_TO_MRAM ARAM_DIR_ARAM_TO_MRAM

#define ARQ_PRIORITY_LOW 0
#define ARQ_PRIORITY_HIGH 1

// AR
ARQCallback ARRegisterDMACallback(ARQCallback callback);
u32 ARGetDMAStatus(void);
void ARStartDMA(u32 type, u32 mainmem_addr, u32 aram_addr, u32 length);
u32 ARAlloc(u32 length);
u32 ARFree(u32* length);
BOOL ARCheckInit(void);
u32 ARInit(u32* stack_index_addr, u32 num_entries);
void ARReset(void);
void ARSetSize(void);
u32 ARGetBaseAddress(void);
u32 ARGetSize(void);
u32 ARGetInternalSize(void);
void ARClear(u32 flag);

// ARQ
void ARQInit(void);
void ARQReset(void);
void ARQPostRequest(ARQRequest* request, u32 owner, u32 type, u32 priority, u32 source, u32 dest, u32 length, ARQCallback callback);
void ARQRemoveRequest(ARQRequest* request);
void ARQRemoveOwnerRequest(u32 owner);
void ARQFlushQueue(void);
void ARQSetChunkSize(u32 size);
u32 ARQGetChunkSize(void);
BOOL ARQCheckInit(void);

#ifdef __cplusplus
}
#endif

#endif
40 changes: 40 additions & 0 deletions include/dolphin/dolphin/gx.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
#ifndef _DOLPHIN_GX_H_
#define _DOLPHIN_GX_H_

#include <dolphin/gx/GXStruct.h>
#include <dolphin/gx/GXTransform.h>
#include <dolphin/gx/GXTev.h>
#include <dolphin/gx/GXPixel.h>
#include <dolphin/gx/GXManage.h>
#include <dolphin/gx/GXFifo.h>
#include <dolphin/gx/GXCull.h>
#include <dolphin/gx/GXGeometry.h>
#include <dolphin/gx/GXVert.h>
#include <dolphin/gx/GXTexture.h>
#include <dolphin/gx/GXTev.h>
#include <dolphin/gx/GXLighting.h>
#include <dolphin/gx/GXDispList.h>
#include <dolphin/gx/GXCommandList.h>
#include <dolphin/gx/GXBump.h>
#include <dolphin/gx/GXFrameBuffer.h>
#include <dolphin/gx/GXGet.h>
#include <dolphin/gx/GXDraw.h>
#include <dolphin/gx/GXPerf.h>
#include <dolphin/gx/GXCpu2Efb.h>
#include <dolphin/gx/GXVerify.h>

// unsorted GX externs

#ifdef __cplusplus
extern "C" {
#endif

// GXMisc
void (*GXSetDrawSyncCallback(void (*cb)(u16)))(u16);
void GXSetDrawSync(u16 token);

#ifdef __cplusplus
}
#endif

#endif
29 changes: 29 additions & 0 deletions include/dolphin/dolphin/gx/GXBump.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
#ifndef _DOLPHIN_GX_GXBUMP_H_
#define _DOLPHIN_GX_GXBUMP_H_

#include <dolphin/gx/GXEnum.h>

#ifdef __cplusplus
extern "C" {
#endif

void GXSetTevIndirect(GXTevStageID tev_stage, GXIndTexStageID ind_stage, GXIndTexFormat format, GXIndTexBiasSel bias_sel, GXIndTexMtxID matrix_sel, GXIndTexWrap wrap_s, GXIndTexWrap wrap_t, GXBool add_prev, GXBool utc_lod, GXIndTexAlphaSel alpha_sel);
void GXSetIndTexMtx(GXIndTexMtxID mtx_id, const f32 offset[2][3], s8 scale_exp);
void GXSetIndTexCoordScale(GXIndTexStageID ind_state, GXIndTexScale scale_s, GXIndTexScale scale_t);
void GXSetIndTexOrder(GXIndTexStageID ind_stage, GXTexCoordID tex_coord, GXTexMapID tex_map);
void GXSetNumIndStages(u8 nIndStages);
void GXSetTevDirect(GXTevStageID tev_stage);
void GXSetTevIndWarp(GXTevStageID tev_stage, GXIndTexStageID ind_stage, u8 signed_offset, u8 replace_mode, GXIndTexMtxID matrix_sel);
void GXSetTevIndTile(GXTevStageID tev_stage, GXIndTexStageID ind_stage, u16 tilesize_s,
u16 tilesize_t, u16 tilespacing_s, u16 tilespacing_t, GXIndTexFormat format,
GXIndTexMtxID matrix_sel, GXIndTexBiasSel bias_sel, GXIndTexAlphaSel alpha_sel);
void GXSetTevIndBumpST(GXTevStageID tev_stage, GXIndTexStageID ind_stage, GXIndTexMtxID matrix_sel);
void GXSetTevIndBumpXYZ(GXTevStageID tev_stage, GXIndTexStageID ind_stage, GXIndTexMtxID matrix_sel);
void GXSetTevIndRepeat(GXTevStageID tev_stage);
void __GXSetIndirectMask(u32 mask);

#ifdef __cplusplus
}
#endif

#endif
35 changes: 35 additions & 0 deletions include/dolphin/dolphin/gx/GXCommandList.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
#ifndef _DOLPHIN_GX_GXCOMMANDLIST_H_
#define _DOLPHIN_GX_GXCOMMANDLIST_H_

#define GX_NOP 0x00
#define GX_LOAD_CP_REG 0x08
#define GX_LOAD_XF_REG 0x10
#define GX_LOAD_INDX_A 0x20
#define GX_LOAD_INDX_B 0x28
#define GX_LOAD_INDX_C 0x30
#define GX_LOAD_INDX_D 0x38
#define GX_LOAD_BP_REG 0x61

#define GX_DRAW_QUADS 0x80
#define GX_DRAW_TRIANGLES 0x90
#define GX_DRAW_TRIANGLE_STRIP 0x98
#define GX_DRAW_TRIANGLE_FAN 0xA0
#define GX_DRAW_LINES 0xA8
#define GX_DRAW_LINE_STRIP 0xB0
#define GX_DRAW_POINTS 0xB8

#define GX_CMD_CALL_DL 0x40
#define GX_CMD_INVAL_VTX 0x48

#define GX_OPCODE_MASK 0xF8
#define GX_VAT_MASK 0x07

extern u8 GXTexMode0Ids[8];
extern u8 GXTexMode1Ids[8];
extern u8 GXTexImage0Ids[8];
extern u8 GXTexImage1Ids[8];
extern u8 GXTexImage2Ids[8];
extern u8 GXTexImage3Ids[8];
extern u8 GXTexTlutIds[8];

#endif
29 changes: 29 additions & 0 deletions include/dolphin/dolphin/gx/GXCpu2Efb.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
#ifndef _DOLPHIN_GX_GXCPU2EFB_H_
#define _DOLPHIN_GX_GXCPU2EFB_H_

#include <dolphin/gx/GXEnum.h>

#ifdef __cplusplus
extern "C" {
#endif

void GXPokeAlphaMode(GXCompare func, u8 threshold);
void GXPokeAlphaRead(GXAlphaReadMode mode);
void GXPokeAlphaUpdate(GXBool update_enable);
void GXPokeBlendMode(GXBlendMode type, GXBlendFactor src_factor, GXBlendFactor dst_factor, GXLogicOp op);
void GXPokeColorUpdate(GXBool update_enable);
void GXPokeDstAlpha(GXBool enable, u8 alpha);
void GXPokeDither(GXBool dither);
void GXPokeZMode(GXBool compare_enable, GXCompare func, GXBool update_enable);
void GXPeekARGB(u16 x, u16 y, u32* color);
void GXPokeARGB(u16 x, u16 y, u32 color);
void GXPeekZ(u16 x, u16 y, u32* z);
void GXPokeZ(u16 x, u16 y, u32 z);
u32 GXCompressZ16(u32 z24, GXZFmt16 zfmt);
u32 GXDecompressZ16(u32 z16, GXZFmt16 zfmt);

#ifdef __cplusplus
}
#endif

#endif
18 changes: 18 additions & 0 deletions include/dolphin/dolphin/gx/GXCull.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
#ifndef _DOLPHIN_GX_GXCULL_H_
#define _DOLPHIN_GX_GXCULL_H_

#include <dolphin/gx/GXEnum.h>

#ifdef __cplusplus
extern "C" {
#endif

void GXSetScissor(u32 left, u32 top, u32 wd, u32 ht);
void GXSetCullMode(GXCullMode mode);
void GXSetCoPlanar(GXBool enable);

#ifdef __cplusplus
}
#endif

#endif
16 changes: 16 additions & 0 deletions include/dolphin/dolphin/gx/GXDispList.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
#ifndef _DOLPHIN_GX_GXDISPLIST_H_
#define _DOLPHIN_GX_GXDISPLIST_H_

#ifdef __cplusplus
extern "C" {
#endif

void GXBeginDisplayList(void* list, u32 size);
u32 GXEndDisplayList(void);
void GXCallDisplayList(void* list, u32 nbytes);

#ifdef __cplusplus
}
#endif

#endif
22 changes: 22 additions & 0 deletions include/dolphin/dolphin/gx/GXDraw.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
#ifndef _DOLPHIN_GX_GXDRAW_H_
#define _DOLPHIN_GX_GXDRAW_H_

#ifdef __cplusplus
extern "C" {
#endif

void GXDrawCylinder(u8 numEdges);
void GXDrawTorus(f32 rc, u8 numc, u8 numt);
void GXDrawSphere(u8 numMajor, u8 numMinor);
void GXDrawCube(void);
void GXDrawDodeca(void);
void GXDrawOctahedron(void);
void GXDrawIcosahedron(void);
void GXDrawSphere1(u8 depth);
u32 GXGenNormalTable(u8 depth, f32* table);

#ifdef __cplusplus
}
#endif

#endif
Loading