mirror of
https://github.com/encounter/tp.git
synced 2026-07-11 06:18:46 -07:00
m_Do_main / f_ap_game / f_op_actor debug work and misc (#2744)
* m_Do_main / f_ap_game debug stuff * revolution sdk compatibility * f_op_actor debug work * rename fopAcM_SetupActor to fopAcM_ct * fix build * fix jp/pal splits
This commit is contained in:
@@ -0,0 +1,50 @@
|
||||
#ifndef _REVOLUTION_AI_H_
|
||||
#define _REVOLUTION_AI_H_
|
||||
|
||||
#include <revolution/types.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
typedef void (*AISCallback)(u32 count);
|
||||
typedef void (*AIDCallback)();
|
||||
|
||||
#define AI_STREAM_START 1
|
||||
#define AI_STREAM_STOP 0
|
||||
|
||||
#define AI_SAMPLERATE_32KHZ 0
|
||||
#define AI_SAMPLERATE_48KHZ 1
|
||||
|
||||
AIDCallback AIRegisterDMACallback(AIDCallback callback);
|
||||
void AIInitDMA(u32 start_addr, u32 length);
|
||||
BOOL AIGetDMAEnableFlag(void);
|
||||
void AIStartDMA(void);
|
||||
void AIStopDMA(void);
|
||||
u32 AIGetDMABytesLeft(void);
|
||||
u32 AIGetDMAStartAddr(void);
|
||||
u32 AIGetDMALength(void);
|
||||
BOOL AICheckInit(void);
|
||||
AISCallback AIRegisterStreamCallback(AISCallback callback);
|
||||
u32 AIGetStreamSampleCount(void);
|
||||
void AIResetStreamSampleCount(void);
|
||||
void AISetStreamTrigger(u32 trigger);
|
||||
u32 AIGetStreamTrigger(void);
|
||||
void AISetStreamPlayState(u32 state);
|
||||
u32 AIGetStreamPlayState(void);
|
||||
void AISetDSPSampleRate(u32 rate);
|
||||
u32 AIGetDSPSampleRate(void);
|
||||
void AISetStreamSampleRate(u32 rate);
|
||||
u32 AIGetStreamSampleRate(void);
|
||||
void AISetStreamVolLeft(u8 vol);
|
||||
u8 AIGetStreamVolLeft(void);
|
||||
void AISetStreamVolRight(u8 vol);
|
||||
u8 AIGetStreamVolRight(void);
|
||||
void AIInit(u8* stack);
|
||||
void AIReset(void);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,123 @@
|
||||
#ifndef _REVOLUTION_AMC_AMCEXI2COMM_H_
|
||||
#define _REVOLUTION_AMC_AMCEXI2COMM_H_
|
||||
|
||||
#include <revolution/os.h>
|
||||
#include <revolution/amc/AmcTypes.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
typedef enum
|
||||
{
|
||||
AMC_EXI_NO_ERROR = 0,
|
||||
AMC_EXI_UNSELECTED,
|
||||
} AmcExiError;
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
//
|
||||
// void EXI2_Init( volatile unsigned char **inputPendingPtrRef,
|
||||
// EXICallback monitorCallback );
|
||||
//
|
||||
// Description: Initialize the EXI2 driver (without interrupts). The
|
||||
// parameter 'inputPendingPtrref' is a flag showing whether input
|
||||
// is waiting in the EXI2 buffer and 'monitorCallback' is a
|
||||
// pointer to a callback function that is invoked at the end of
|
||||
// the EXI2 ISR.
|
||||
//
|
||||
// ---------------------------------------------------------------------------
|
||||
void EXI2_Init(volatile unsigned char **inputPendingPtrRef, EXICallback monitorCallback);
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
//
|
||||
// void EXI2_EnableInterrupts( void );
|
||||
//
|
||||
// Description: Enable EXI2 interrupts. This function must be called to use
|
||||
// interrupts on the EXI2 interface. Call this function only
|
||||
// after EXI2_Init() has been invoked.
|
||||
//
|
||||
// ---------------------------------------------------------------------------
|
||||
void EXI2_EnableInterrupts( void );
|
||||
|
||||
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
//
|
||||
// int EXI2_Poll( void );
|
||||
//
|
||||
// Description: Returns the number of bytes waiting to be read in the EXI2
|
||||
// buffer.
|
||||
//
|
||||
// ---------------------------------------------------------------------------
|
||||
int EXI2_Poll( void );
|
||||
|
||||
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
//
|
||||
// AmcExiError EXI2_ReadN( void *bytes, unsigned long length );
|
||||
//
|
||||
// Description: Read length bytes and return in bytes[] array.
|
||||
//
|
||||
// Returns: One of AMC_EXI_*.
|
||||
//
|
||||
// ---------------------------------------------------------------------------
|
||||
AmcExiError EXI2_ReadN( void *bytes, unsigned long length);
|
||||
|
||||
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
//
|
||||
// AmcExiError EXI2_WriteN( const void *bytes, unsigned long length );
|
||||
//
|
||||
// Description: Write length bytes stored in bytes[] array.
|
||||
//
|
||||
// Returns: One of AMC_EXI_*.
|
||||
//
|
||||
// ---------------------------------------------------------------------------
|
||||
AmcExiError EXI2_WriteN( const void *bytes, unsigned long length);
|
||||
|
||||
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
//
|
||||
// void EXI2_Reserve( void );
|
||||
//
|
||||
// Description: Disable non-monitor communications over the EXI2 port.
|
||||
// This function must be called before the monitor takes
|
||||
// control of the processor.
|
||||
//
|
||||
// ---------------------------------------------------------------------------
|
||||
void EXI2_Reserve( void );
|
||||
|
||||
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
//
|
||||
// void EXI2_Unreserve( void );
|
||||
//
|
||||
// Description: Re-enable non-monitor communications over the EXI2 port.
|
||||
// This function must be called just before the monitor
|
||||
// gives control of the processor back to the application.
|
||||
//
|
||||
// ---------------------------------------------------------------------------
|
||||
void EXI2_Unreserve( void );
|
||||
|
||||
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
//
|
||||
// AmcExiError EXI2_GetStatusReg( u16* pu16StatusReg );
|
||||
//
|
||||
// Description: Read and store the value of the status register into
|
||||
// *pu16StatusReg.
|
||||
//
|
||||
// Returns: One of AMC_EXI_*.
|
||||
// ---------------------------------------------------------------------------
|
||||
AmcExiError EXI2_GetStatusReg( u16* pu16StatusReg );
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,9 @@
|
||||
#ifndef _INCLUDE_REVOLUTION_AMCTYPES_H_
|
||||
#define _INCLUDE_REVOLUTION_AMCTYPES_H_
|
||||
|
||||
#include <revolution/os.h>
|
||||
|
||||
// EXI callback function pointer type
|
||||
typedef void (*EXICallback)(s32 chan, OSContext* context);
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,325 @@
|
||||
#ifndef _REVOLUTION_AX_H_
|
||||
#define _REVOLUTION_AX_H_
|
||||
|
||||
#include <revolution/types.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
typedef struct _AXPBMIX {
|
||||
/* 0x00 */ u16 vL;
|
||||
/* 0x02 */ u16 vDeltaL;
|
||||
/* 0x04 */ u16 vR;
|
||||
/* 0x06 */ u16 vDeltaR;
|
||||
/* 0x08 */ u16 vAuxAL;
|
||||
/* 0x0A */ u16 vDeltaAuxAL;
|
||||
/* 0x0C */ u16 vAuxAR;
|
||||
/* 0x0E */ u16 vDeltaAuxAR;
|
||||
/* 0x10 */ u16 vAuxBL;
|
||||
/* 0x12 */ u16 vDeltaAuxBL;
|
||||
/* 0x14 */ u16 vAuxBR;
|
||||
/* 0x16 */ u16 vDeltaAuxBR;
|
||||
/* 0x18 */ u16 vAuxBS;
|
||||
/* 0x1A */ u16 vDeltaAuxBS;
|
||||
/* 0x1C */ u16 vS;
|
||||
/* 0x1E */ u16 vDeltaS;
|
||||
/* 0x20 */ u16 vAuxAS;
|
||||
/* 0x22 */ u16 vDeltaAuxAS;
|
||||
} AXPBMIX;
|
||||
|
||||
typedef struct _AXPBITD {
|
||||
/* 0x00 */ u16 flag;
|
||||
/* 0x02 */ u16 bufferHi;
|
||||
/* 0x04 */ u16 bufferLo;
|
||||
/* 0x06 */ u16 shiftL;
|
||||
/* 0x08 */ u16 shiftR;
|
||||
/* 0x0A */ u16 targetShiftL;
|
||||
/* 0x0C */ u16 targetShiftR;
|
||||
} AXPBITD;
|
||||
|
||||
typedef struct _AXPBUPDATE {
|
||||
/* 0x00 */ u16 updNum[5];
|
||||
/* 0x0A */ u16 dataHi;
|
||||
/* 0x0C */ u16 dataLo;
|
||||
} AXPBUPDATE;
|
||||
|
||||
typedef struct _AXPBDPOP {
|
||||
/* 0x00 */ s16 aL;
|
||||
/* 0x02 */ s16 aAuxAL;
|
||||
/* 0x04 */ s16 aAuxBL;
|
||||
/* 0x06 */ s16 aR;
|
||||
/* 0x08 */ s16 aAuxAR;
|
||||
/* 0x0A */ s16 aAuxBR;
|
||||
/* 0x0C */ s16 aS;
|
||||
/* 0x0E */ s16 aAuxAS;
|
||||
/* 0x10 */ s16 aAuxBS;
|
||||
} AXPBDPOP;
|
||||
|
||||
typedef struct _AXPBVE {
|
||||
/* 0x00 */ u16 currentVolume;
|
||||
/* 0x02 */ s16 currentDelta;
|
||||
} AXPBVE;
|
||||
|
||||
typedef struct _AXPBFIR {
|
||||
/* 0x00 */ u16 numCoefs;
|
||||
/* 0x02 */ u16 coefsHi;
|
||||
/* 0x04 */ u16 coefsLo;
|
||||
} AXPBFIR;
|
||||
|
||||
typedef struct _AXPBADDR {
|
||||
/* 0x00 */ u16 loopFlag;
|
||||
/* 0x02 */ u16 format;
|
||||
/* 0x04 */ u16 loopAddressHi;
|
||||
/* 0x06 */ u16 loopAddressLo;
|
||||
/* 0x08 */ u16 endAddressHi;
|
||||
/* 0x0A */ u16 endAddressLo;
|
||||
/* 0x0C */ u16 currentAddressHi;
|
||||
/* 0x0E */ u16 currentAddressLo;
|
||||
} AXPBADDR;
|
||||
|
||||
typedef struct _AXPBADPCM {
|
||||
/* 0x00 */ u16 a[8][2];
|
||||
/* 0x20 */ u16 gain;
|
||||
/* 0x22 */ u16 pred_scale;
|
||||
/* 0x24 */ u16 yn1;
|
||||
/* 0x26 */ u16 yn2;
|
||||
} AXPBADPCM;
|
||||
|
||||
typedef struct _AXPBSRC {
|
||||
/* 0x00 */ u16 ratioHi;
|
||||
/* 0x02 */ u16 ratioLo;
|
||||
/* 0x04 */ u16 currentAddressFrac;
|
||||
/* 0x06 */ u16 last_samples[4];
|
||||
} AXPBSRC;
|
||||
|
||||
typedef struct _AXPBADPCMLOOP {
|
||||
/* 0x00 */ u16 loop_pred_scale;
|
||||
/* 0x02 */ u16 loop_yn1;
|
||||
/* 0x04 */ u16 loop_yn2;
|
||||
} AXPBADPCMLOOP;
|
||||
|
||||
typedef struct _AXPBLPF {
|
||||
u16 on;
|
||||
u16 yn1;
|
||||
u16 a0;
|
||||
u16 b0;
|
||||
} AXPBLPF;
|
||||
|
||||
typedef struct _AXPB {
|
||||
/* 0x00 */ u16 nextHi;
|
||||
/* 0x02 */ u16 nextLo;
|
||||
/* 0x04 */ u16 currHi;
|
||||
/* 0x06 */ u16 currLo;
|
||||
/* 0x08 */ u16 srcSelect;
|
||||
/* 0x0A */ u16 coefSelect;
|
||||
/* 0x0C */ u16 mixerCtrl;
|
||||
/* 0x0E */ u16 state;
|
||||
/* 0x10 */ u16 type;
|
||||
/* 0x12 */ AXPBMIX mix;
|
||||
/* 0x36 */ AXPBITD itd;
|
||||
/* 0x44 */ AXPBUPDATE update;
|
||||
/* 0x52 */ AXPBDPOP dpop;
|
||||
/* 0x64 */ AXPBVE ve;
|
||||
/* 0x68 */ AXPBFIR fir;
|
||||
/* 0x6E */ AXPBADDR addr;
|
||||
/* 0x7E */ AXPBADPCM adpcm;
|
||||
/* 0xA6 */ AXPBSRC src;
|
||||
/* 0xB4 */ AXPBADPCMLOOP adpcmLoop;
|
||||
/* 0xBA */ AXPBLPF lpf;
|
||||
/* 0xC2 */ u16 pad[25];
|
||||
} AXPB;
|
||||
|
||||
typedef struct _AXVPB {
|
||||
/* 0x000 */ void* next;
|
||||
/* 0x004 */ void* prev;
|
||||
/* 0x008 */ void* next1;
|
||||
/* 0x00C */ u32 priority;
|
||||
/* 0x010 */ void (*callback)(void*);
|
||||
/* 0x014 */ u32 userContext;
|
||||
/* 0x018 */ u32 index;
|
||||
/* 0x01C */ u32 sync;
|
||||
/* 0x020 */ u32 depop;
|
||||
/* 0x024 */ u32 updateMS;
|
||||
/* 0x028 */ u32 updateCounter;
|
||||
/* 0x02C */ u32 updateTotal;
|
||||
/* 0x030 */ u16* updateWrite;
|
||||
/* 0x034 */ u16 updateData[128];
|
||||
/* 0x134 */ void* itdBuffer;
|
||||
/* 0x138 */ AXPB pb;
|
||||
} AXVPB;
|
||||
|
||||
typedef struct _AXPBITDBUFFER {
|
||||
/* 0x00 */ s16 data[32];
|
||||
} AXPBITDBUFFER;
|
||||
|
||||
typedef struct _AXPBU {
|
||||
/* 0x00 */ u16 data[128];
|
||||
} AXPBU;
|
||||
|
||||
typedef struct _AXSPB {
|
||||
/* 0x00 */ u16 dpopLHi;
|
||||
/* 0x02 */ u16 dpopLLo;
|
||||
/* 0x04 */ s16 dpopLDelta;
|
||||
/* 0x06 */ u16 dpopRHi;
|
||||
/* 0x08 */ u16 dpopRLo;
|
||||
/* 0x0A */ s16 dpopRDelta;
|
||||
/* 0x0C */ u16 dpopSHi;
|
||||
/* 0x0E */ u16 dpopSLo;
|
||||
/* 0x10 */ s16 dpopSDelta;
|
||||
/* 0x12 */ u16 dpopALHi;
|
||||
/* 0x14 */ u16 dpopALLo;
|
||||
/* 0x16 */ s16 dpopALDelta;
|
||||
/* 0x18 */ u16 dpopARHi;
|
||||
/* 0x1A */ u16 dpopARLo;
|
||||
/* 0x1C */ s16 dpopARDelta;
|
||||
/* 0x1E */ u16 dpopASHi;
|
||||
/* 0x20 */ u16 dpopASLo;
|
||||
/* 0x22 */ s16 dpopASDelta;
|
||||
/* 0x24 */ u16 dpopBLHi;
|
||||
/* 0x26 */ u16 dpopBLLo;
|
||||
/* 0x28 */ s16 dpopBLDelta;
|
||||
/* 0x2A */ u16 dpopBRHi;
|
||||
/* 0x2C */ u16 dpopBRLo;
|
||||
/* 0x2E */ s16 dpopBRDelta;
|
||||
/* 0x30 */ u16 dpopBSHi;
|
||||
/* 0x32 */ u16 dpopBSLo;
|
||||
/* 0x34 */ s16 dpopBSDelta;
|
||||
} AXSPB;
|
||||
|
||||
typedef struct _AXPROFILE {
|
||||
/* 0x00 */ u64 axFrameStart;
|
||||
/* 0x08 */ u64 auxProcessingStart;
|
||||
/* 0x10 */ u64 auxProcessingEnd;
|
||||
/* 0x18 */ u64 userCallbackStart;
|
||||
/* 0x20 */ u64 userCallbackEnd;
|
||||
/* 0x28 */ u64 axFrameEnd;
|
||||
/* 0x30 */ u32 axNumVoices;
|
||||
} AXPROFILE;
|
||||
|
||||
typedef struct AX_AUX_DATA {
|
||||
/* 0x00 */ s32* l;
|
||||
/* 0x00 */ s32* r;
|
||||
/* 0x00 */ s32* s;
|
||||
} AX_AUX_DATA;
|
||||
|
||||
typedef struct AX_AUX_DATA_DPL2 {
|
||||
/* 0x00 */ s32* l;
|
||||
/* 0x00 */ s32* r;
|
||||
/* 0x00 */ s32* ls;
|
||||
/* 0x00 */ s32* rs;
|
||||
} AX_AUX_DATA_DPL2;
|
||||
|
||||
typedef void (*AXCallback)();
|
||||
|
||||
#define AX_DSP_SLAVE_LENGTH 0xF80
|
||||
#define AX_MAX_VOICES 64
|
||||
|
||||
#define AX_SRC_TYPE_NONE 0
|
||||
#define AX_SRC_TYPE_LINEAR 1
|
||||
#define AX_SRC_TYPE_4TAP_8K 2
|
||||
#define AX_SRC_TYPE_4TAP_12K 3
|
||||
#define AX_SRC_TYPE_4TAP_16K 4
|
||||
|
||||
// sync flags
|
||||
#define AX_SYNC_FLAG_COPYALL (1 << 31)
|
||||
#define AX_SYNC_FLAG_UNK1 (1 << 30) // reserved, unused?
|
||||
#define AX_SYNC_FLAG_UNK2 (1 << 29) // reserved, unused?
|
||||
#define AX_SYNC_FLAG_UNK3 (1 << 28) // reserved, unused?
|
||||
#define AX_SYNC_FLAG_UNK4 (1 << 27) // reserved, unused?
|
||||
#define AX_SYNC_FLAG_UNK5 (1 << 26) // reserved, unused?
|
||||
#define AX_SYNC_FLAG_UNK6 (1 << 25) // reserved, unused?
|
||||
#define AX_SYNC_FLAG_UNK7 (1 << 24) // reserved, unused?
|
||||
#define AX_SYNC_FLAG_UNK8 (1 << 23) // reserved, unused?
|
||||
#define AX_SYNC_FLAG_UNK9 (1 << 22) // reserved, unused?
|
||||
#define AX_SYNC_FLAG_UNK10 (1 << 21) // reserved, unused?
|
||||
#define AX_SYNC_FLAG_COPYADPCMLOOP (1 << 20)
|
||||
#define AX_SYNC_FLAG_COPYRATIO (1 << 19)
|
||||
#define AX_SYNC_FLAG_COPYSRC (1 << 18)
|
||||
#define AX_SYNC_FLAG_COPYADPCM (1 << 17)
|
||||
#define AX_SYNC_FLAG_COPYCURADDR (1 << 16)
|
||||
#define AX_SYNC_FLAG_COPYENDADDR (1 << 15)
|
||||
#define AX_SYNC_FLAG_COPYLOOPADDR (1 << 14)
|
||||
#define AX_SYNC_FLAG_COPYLOOP (1 << 13)
|
||||
#define AX_SYNC_FLAG_COPYADDR (1 << 12)
|
||||
#define AX_SYNC_FLAG_COPYFIR (1 << 11)
|
||||
#define AX_SYNC_FLAG_SWAPVOL (1 << 10)
|
||||
#define AX_SYNC_FLAG_COPYVOL (1 << 9)
|
||||
#define AX_SYNC_FLAG_COPYDPOP (1 << 8)
|
||||
#define AX_SYNC_FLAG_COPYUPDATE (1 << 7)
|
||||
#define AX_SYNC_FLAG_COPYTSHIFT (1 << 6)
|
||||
#define AX_SYNC_FLAG_COPYITD (1 << 5)
|
||||
#define AX_SYNC_FLAG_COPYAXPBMIX (1 << 4)
|
||||
#define AX_SYNC_FLAG_COPYTYPE (1 << 3)
|
||||
#define AX_SYNC_FLAG_COPYSTATE (1 << 2)
|
||||
#define AX_SYNC_FLAG_COPYMXRCTRL (1 << 1)
|
||||
#define AX_SYNC_FLAG_COPYSELECT (1 << 0)
|
||||
|
||||
#define AX_PRIORITY_STACKS 32
|
||||
|
||||
// AX
|
||||
void AXInit(void);
|
||||
void AXInitEx(u32 outputBufferMode);
|
||||
void AXQuit(void);
|
||||
|
||||
// AXAlloc
|
||||
void AXFreeVoice(AXVPB* p);
|
||||
AXVPB* AXAcquireVoice(u32 priority, void (*callback)(void *), u32 userContext);
|
||||
void AXSetVoicePriority(AXVPB* p, u32 priority);
|
||||
|
||||
// AXAux
|
||||
void AXRegisterAuxACallback(void (*callback)(void*, void*), void* context);
|
||||
void AXRegisterAuxBCallback(void (*callback)(void*, void*), void* context);
|
||||
|
||||
// AXCL
|
||||
void AXSetMode(u32 mode);
|
||||
u32 AXGetMode(void);
|
||||
|
||||
// AXOut
|
||||
extern AXPROFILE __AXLocalProfile;
|
||||
|
||||
void AXSetStepMode(u32 i);
|
||||
AXCallback AXRegisterCallback(AXCallback callback);
|
||||
|
||||
// AXProf
|
||||
void AXInitProfile(AXPROFILE* profile, u32 maxProfiles);
|
||||
u32 AXGetProfile(void);
|
||||
|
||||
// AXVPB
|
||||
void AXSetVoiceSrcType(AXVPB* p, u32 type);
|
||||
void AXSetVoiceState(AXVPB* p, u16 state);
|
||||
void AXSetVoiceType(AXVPB* p, u16 type);
|
||||
void AXSetVoiceMix(AXVPB* p, AXPBMIX* mix);
|
||||
void AXSetVoiceItdOn(AXVPB* p);
|
||||
void AXSetVoiceItdTarget(AXVPB* p, u16 lShift, u16 rShift);
|
||||
void AXSetVoiceUpdateIncrement(AXVPB* p);
|
||||
void AXSetVoiceUpdateWrite(AXVPB* p, u16 param, u16 data);
|
||||
void AXSetVoiceDpop(AXVPB* p, AXPBDPOP* dpop);
|
||||
void AXSetVoiceVe(AXVPB* p, AXPBVE* ve);
|
||||
void AXSetVoiceVeDelta(AXVPB* p, s16 delta);
|
||||
void AXSetVoiceFir(AXVPB* p, AXPBFIR* fir);
|
||||
void AXSetVoiceAddr(AXVPB* p, AXPBADDR* addr);
|
||||
void AXSetVoiceLoop(AXVPB* p, u16 loop);
|
||||
void AXSetVoiceLoopAddr(AXVPB* p, u32 addr);
|
||||
void AXSetVoiceEndAddr(AXVPB* p, u32 addr);
|
||||
void AXSetVoiceCurrentAddr(AXVPB* p, u32 addr);
|
||||
void AXSetVoiceAdpcm(AXVPB* p, AXPBADPCM* adpcm);
|
||||
void AXSetVoiceSrc(AXVPB* p, AXPBSRC* src_);
|
||||
void AXSetVoiceSrcRatio(AXVPB* p, f32 ratio);
|
||||
void AXSetVoiceAdpcmLoop(AXVPB* p, AXPBADPCMLOOP* adpcmloop);
|
||||
void AXSetMaxDspCycles(u32 cycles);
|
||||
u32 AXGetMaxDspCycles(void);
|
||||
u32 AXGetDspCycles(void);
|
||||
void AXSetVoiceLpf(AXVPB* p, AXPBLPF* lpf);
|
||||
void AXSetVoiceLpfCoefs(AXVPB* p, u16 a0, u16 b0);
|
||||
void AXGetLpfCoefs(u16 freq, u16* a0, u16* b0);
|
||||
|
||||
// DSPCode
|
||||
extern u16 axDspSlaveLength;
|
||||
extern u16 axDspSlave[AX_DSP_SLAVE_LENGTH];
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif // _REVOLUTION_AX_H_
|
||||
@@ -0,0 +1,224 @@
|
||||
#ifndef _REVOLUTION_AXART_H_
|
||||
#define _REVOLUTION_AXART_H_
|
||||
|
||||
#include <revolution/types.h>
|
||||
#include <revolution/ax.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
enum __axart_type {
|
||||
AXART_TYPE_NONE,
|
||||
AXART_TYPE_3D,
|
||||
AXART_TYPE_PANNING,
|
||||
AXART_TYPE_ITD,
|
||||
AXART_TYPE_SRC,
|
||||
AXART_TYPE_PITCH,
|
||||
AXART_TYPE_PITCH_ENV,
|
||||
AXART_TYPE_PITCH_MOD,
|
||||
AXART_TYPE_VOLUME,
|
||||
AXART_TYPE_AUX_A_VOLUME,
|
||||
AXART_TYPE_AUX_B_VOLUME,
|
||||
AXART_TYPE_VOLUME_ENV,
|
||||
AXART_TYPE_AUX_A_VOLUME_ENV,
|
||||
AXART_TYPE_AUX_B_VOLUME_ENV,
|
||||
AXART_TYPE_VOLUME_MOD,
|
||||
AXART_TYPE_AUX_A_VOLUME_MOD,
|
||||
AXART_TYPE_AUX_B_VOLUME_MOD,
|
||||
AXART_TYPE_LPF,
|
||||
|
||||
AXART_TYPE_NUM
|
||||
};
|
||||
|
||||
typedef struct {
|
||||
void* next;
|
||||
u32 type;
|
||||
} AXART_ART;
|
||||
|
||||
typedef struct {
|
||||
f32* lfo;
|
||||
u32 length;
|
||||
f32 delta;
|
||||
u32 sampleIndex;
|
||||
f32 counter;
|
||||
f32 sample1;
|
||||
f32 sample;
|
||||
f32 output;
|
||||
} AXART_LFO;
|
||||
|
||||
typedef struct {
|
||||
AXART_ART art;
|
||||
f32 hAngle;
|
||||
f32 vAngle;
|
||||
f32 dist;
|
||||
f32 closingSpeed;
|
||||
u32 update;
|
||||
u8 pan;
|
||||
u8 span;
|
||||
u8 src;
|
||||
u16 itdL;
|
||||
u16 itdR;
|
||||
f32 pitch;
|
||||
s32 attenuation;
|
||||
} AXART_3D;
|
||||
|
||||
typedef struct {
|
||||
AXART_ART art;
|
||||
u8 pan;
|
||||
u8 span;
|
||||
} AXART_PANNING;
|
||||
|
||||
typedef struct {
|
||||
AXART_ART art;
|
||||
u16 itdL;
|
||||
u16 itdR;
|
||||
} AXART_ITD;
|
||||
|
||||
typedef struct {
|
||||
AXART_ART art;
|
||||
u8 src;
|
||||
} AXART_SRC;
|
||||
|
||||
typedef struct {
|
||||
AXART_ART art;
|
||||
s32 cents;
|
||||
} AXART_PITCH;
|
||||
|
||||
typedef struct {
|
||||
AXART_ART art;
|
||||
s32 delta;
|
||||
s32 target;
|
||||
s32 cents;
|
||||
} AXART_PITCH_ENV;
|
||||
|
||||
typedef struct {
|
||||
AXART_ART art;
|
||||
AXART_LFO lfo;
|
||||
s32 cents;
|
||||
} AXART_PITCH_MOD;
|
||||
|
||||
typedef struct {
|
||||
AXART_ART art;
|
||||
s32 attenuation;
|
||||
} AXART_VOLUME;
|
||||
|
||||
typedef struct {
|
||||
AXART_ART art;
|
||||
s32 attenuation;
|
||||
} AXART_AUXA_VOLUME;
|
||||
|
||||
typedef struct {
|
||||
AXART_ART art;
|
||||
s32 attenuation;
|
||||
} AXART_AUXB_VOLUME;
|
||||
|
||||
typedef struct {
|
||||
AXART_ART art;
|
||||
s32 delta;
|
||||
s32 target;
|
||||
s32 attenuation;
|
||||
} AXART_VOLUME_ENV;
|
||||
|
||||
typedef struct {
|
||||
AXART_ART art;
|
||||
s32 delta;
|
||||
s32 target;
|
||||
s32 attenuation;
|
||||
} AXART_AUXA_VOLUME_ENV;
|
||||
|
||||
typedef struct {
|
||||
AXART_ART art;
|
||||
s32 delta;
|
||||
s32 target;
|
||||
s32 attenuation;
|
||||
} AXART_AUXB_VOLUME_ENV;
|
||||
|
||||
typedef struct {
|
||||
AXART_ART art;
|
||||
AXART_LFO lfo;
|
||||
s32 attenuation;
|
||||
} AXART_VOLUME_MOD;
|
||||
|
||||
typedef struct {
|
||||
AXART_ART art;
|
||||
AXART_LFO lfo;
|
||||
s32 attenuation;
|
||||
} AXART_AUXA_VOLUME_MOD;
|
||||
|
||||
typedef struct {
|
||||
AXART_ART art;
|
||||
AXART_LFO lfo;
|
||||
s32 attenuation;
|
||||
} AXART_AUXB_VOLUME_MOD;
|
||||
|
||||
typedef struct {
|
||||
AXART_ART art;
|
||||
u32 initLPF;
|
||||
u32 frequency;
|
||||
u32 update;
|
||||
} AXART_LPF;
|
||||
|
||||
typedef struct {
|
||||
void* next;
|
||||
void* prev;
|
||||
AXVPB* axvpb;
|
||||
f32 sampleRate;
|
||||
AXART_ART* articulators;
|
||||
} AXART_SOUND;
|
||||
|
||||
#define AXART_SINE_CNT 64
|
||||
extern f32 AXARTSine[AXART_SINE_CNT];
|
||||
|
||||
// axart
|
||||
void AXARTInit(void);
|
||||
void AXARTQuit(void);
|
||||
void AXARTServiceSounds(void);
|
||||
void AXARTAddSound(AXART_SOUND* sound);
|
||||
void AXARTRemoveSound(AXART_SOUND* sound);
|
||||
void AXARTInitLfo(AXART_LFO* lfo, f32* samples, u32 length, f32 delta);
|
||||
void AXARTInitArt3D(AXART_3D* articulator);
|
||||
void AXARTInitArtPanning(AXART_PANNING* articulator);
|
||||
void AXARTInitArtItd(AXART_ITD* articulator);
|
||||
void AXARTInitArtSrctype(AXART_SRC* articulator);
|
||||
void AXARTInitArtPitch(AXART_PITCH* articulator);
|
||||
void AXARTInitArtPitchEnv(AXART_PITCH_ENV* articulator);
|
||||
void AXARTInitArtPitchMod(AXART_PITCH_MOD* articulator);
|
||||
void AXARTInitArtVolume(AXART_VOLUME* articulator);
|
||||
void AXARTInitArtAuxAVolume(AXART_AUXA_VOLUME* articulator);
|
||||
void AXARTInitArtAuxBVolume(AXART_AUXB_VOLUME* articulator);
|
||||
void AXARTInitArtVolumeEnv(AXART_VOLUME_ENV* articulator);
|
||||
void AXARTInitArtAuxAVolumeEnv(AXART_AUXA_VOLUME_ENV* articulator);
|
||||
void AXARTInitArtAuxBVolumeEnv(AXART_AUXB_VOLUME_ENV* articulator);
|
||||
void AXARTInitArtVolumeMod(AXART_VOLUME_MOD* articulator);
|
||||
void AXARTInitArtAuxAVolumeMod(AXART_AUXA_VOLUME_MOD* articulator);
|
||||
void AXARTInitArtAuxBVolumeMod(AXART_AUXB_VOLUME_MOD* articulator);
|
||||
void AXARTInitArtLpf(AXART_LPF* articulator);
|
||||
|
||||
// axart3d
|
||||
void AXARTSet3DDistanceScale(f32 scale);
|
||||
void AXARTSet3DDopplerScale(f32 scale);
|
||||
void AXART3DSound(AXART_3D* articulator);
|
||||
|
||||
// axartcents
|
||||
f32 AXARTCents(s32 cents);
|
||||
|
||||
// axartenv
|
||||
void AXARTPitchEnv(AXART_PITCH_ENV* articulator);
|
||||
void AXARTVolumeEnv(AXART_VOLUME_ENV* articulator);
|
||||
|
||||
// axartlfo
|
||||
void AXARTLfo(AXART_LFO* lfo);
|
||||
|
||||
// axartsound
|
||||
void AXARTServiceSound(AXART_SOUND* sound);
|
||||
void AXARTAddArticulator(AXART_SOUND* sound, AXART_ART* articulator);
|
||||
|
||||
// axartlpf
|
||||
void AXARTLpf(AXART_LPF*, AXVPB*);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif // _REVOLUTION_AXART_H_
|
||||
@@ -0,0 +1,196 @@
|
||||
#ifndef _REVOLUTION_AXFX_H_
|
||||
#define _REVOLUTION_AXFX_H_
|
||||
|
||||
#include <revolution/types.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
typedef struct AXFX_REVSTD_DELAYLINE {
|
||||
/* 0x00 */ s32 inPoint;
|
||||
/* 0x04 */ s32 outPoint;
|
||||
/* 0x08 */ s32 length;
|
||||
/* 0x0C */ f32* inputs;
|
||||
/* 0x10 */ f32 lastOutput;
|
||||
} AXFX_REVSTD_DELAYLINE;
|
||||
|
||||
typedef struct AXFX_REVSTD_WORK {
|
||||
/* 0x000 */ AXFX_REVSTD_DELAYLINE AP[6];
|
||||
/* 0x078 */ AXFX_REVSTD_DELAYLINE C[6];
|
||||
/* 0x0F0 */ f32 allPassCoeff;
|
||||
/* 0x0F4 */ f32 combCoef[6];
|
||||
/* 0x10C */ f32 lpLastout[3];
|
||||
/* 0x118 */ f32 level;
|
||||
/* 0x11C */ f32 damping;
|
||||
/* 0x120 */ s32 preDelayTime;
|
||||
/* 0x124 */ f32* preDelayLine[3];
|
||||
/* 0x130 */ f32* preDelayPtr[3];
|
||||
} AXFX_REVSTD_WORK;
|
||||
|
||||
typedef struct AXFX_REVERBSTD {
|
||||
/* 0x000 */ AXFX_REVSTD_WORK rv;
|
||||
/* 0x13C */ u8 tempDisableFX;
|
||||
/* 0x140 */ f32 coloration;
|
||||
/* 0x144 */ f32 mix;
|
||||
/* 0x148 */ f32 time;
|
||||
/* 0x14C */ f32 damping;
|
||||
/* 0x150 */ f32 preDelay;
|
||||
} AXFX_REVERBSTD;
|
||||
|
||||
typedef struct AXFX_BUFFERUPDATE {
|
||||
/* 0x00 */ s32* left;
|
||||
/* 0x04 */ s32* right;
|
||||
/* 0x08 */ s32* surround;
|
||||
} AXFX_BUFFERUPDATE;
|
||||
|
||||
typedef struct AXFX_BUFFERUPDATE_DPL2 {
|
||||
/* 0x00 */ s32* L;
|
||||
/* 0x04 */ s32* R;
|
||||
/* 0x08 */ s32* Ls;
|
||||
/* 0x0C */ s32* Rs;
|
||||
} AXFX_BUFFERUPDATE_DPL2;
|
||||
|
||||
// REVHI Structs
|
||||
|
||||
typedef struct AXFX_REVHI_DELAYLINE {
|
||||
/* 0x00 */ s32 inPoint;
|
||||
/* 0x04 */ s32 outPoint;
|
||||
/* 0x08 */ s32 length;
|
||||
/* 0x0C */ f32* inputs;
|
||||
/* 0x10 */ f32 lastOutput;
|
||||
} AXFX_REVHI_DELAYLINE;
|
||||
|
||||
typedef struct AXFX_REVHI_WORK {
|
||||
/* 0x000 */ AXFX_REVHI_DELAYLINE AP[9];
|
||||
/* 0x0B4 */ AXFX_REVHI_DELAYLINE C[9];
|
||||
/* 0x168 */ f32 allPassCoeff;
|
||||
/* 0x16C */ f32 combCoef[9];
|
||||
/* 0x190 */ f32 lpLastout[3];
|
||||
/* 0x19C */ f32 level;
|
||||
/* 0x1A0 */ f32 damping;
|
||||
/* 0x1A4 */ s32 preDelayTime;
|
||||
/* 0x1A8 */ f32 crosstalk;
|
||||
/* 0x1AC */ f32* preDelayLine[3];
|
||||
/* 0x1B8 */ f32* preDelayPtr[3];
|
||||
} AXFX_REVHI_WORK;
|
||||
|
||||
typedef struct AXFX_REVHI_WORK_DPL2 {
|
||||
/* 0x000 */ AXFX_REVHI_DELAYLINE AP[12];
|
||||
/* 0x0F0 */ AXFX_REVHI_DELAYLINE C[12];
|
||||
/* 0x1E0 */ f32 allPassCoeff;
|
||||
/* 0x1E4 */ f32 combCoef[12];
|
||||
/* 0x214 */ f32 lpLastout[4];
|
||||
/* 0x224 */ f32 level;
|
||||
/* 0x228 */ f32 damping;
|
||||
/* 0x22C */ s32 preDelayTime;
|
||||
/* 0x230 */ f32 crosstalk;
|
||||
/* 0x234 */ f32* preDelayLine[4];
|
||||
/* 0x244 */ f32* preDelayPtr[4];
|
||||
} AXFX_REVHI_WORK_DPL2;
|
||||
|
||||
typedef struct AXFX_REVERBHI {
|
||||
/* 0x000 */ AXFX_REVHI_WORK rv;
|
||||
/* 0x1C4 */ u8 tempDisableFX;
|
||||
/* 0x1C8 */ f32 coloration;
|
||||
/* 0x1CC */ f32 mix;
|
||||
/* 0x1D0 */ f32 time;
|
||||
/* 0x1D4 */ f32 damping;
|
||||
/* 0x1D8 */ f32 preDelay;
|
||||
/* 0x1DC */ f32 crosstalk;
|
||||
} AXFX_REVERBHI;
|
||||
|
||||
typedef struct AXFX_REVERBHI_DPL2 {
|
||||
/* 0x000 */ AXFX_REVHI_WORK_DPL2 rv;
|
||||
/* 0x254 */ u8 tempDisableFX;
|
||||
/* 0x258 */ f32 coloration;
|
||||
/* 0x25C */ f32 mix;
|
||||
/* 0x260 */ f32 time;
|
||||
/* 0x264 */ f32 damping;
|
||||
/* 0x268 */ f32 preDelay;
|
||||
} AXFX_REVERBHI_DPL2;
|
||||
|
||||
typedef struct AXFX_DELAY {
|
||||
/* 0x00 */ u32 currentSize[3];
|
||||
/* 0x0C */ u32 currentPos[3];
|
||||
/* 0x18 */ u32 currentFeedback[3];
|
||||
/* 0x24 */ u32 currentOutput[3];
|
||||
/* 0x30 */ s32* left;
|
||||
/* 0x34 */ s32* right;
|
||||
/* 0x38 */ s32* sur;
|
||||
/* 0x3C */ u32 delay[3];
|
||||
/* 0x48 */ u32 feedback[3];
|
||||
/* 0x54 */ u32 output[3];
|
||||
} AXFX_DELAY;
|
||||
|
||||
typedef struct AXFX_CHORUS_SRCINFO {
|
||||
/* 0x00 */ s32* dest;
|
||||
/* 0x04 */ s32* smpBase;
|
||||
/* 0x08 */ s32* old;
|
||||
/* 0x0C */ u32 posLo;
|
||||
/* 0x10 */ u32 posHi;
|
||||
/* 0x14 */ u32 pitchLo;
|
||||
/* 0x18 */ u32 pitchHi;
|
||||
/* 0x1C */ u32 trigger;
|
||||
/* 0x20 */ u32 target;
|
||||
} AXFX_CHORUS_SRCINFO;
|
||||
|
||||
typedef struct AXFX_CHORUS_WORK {
|
||||
/* 0x00 */ s32* lastLeft[3];
|
||||
/* 0x0C */ s32* lastRight[3];
|
||||
/* 0x18 */ s32* lastSur[3];
|
||||
/* 0x24 */ u8 currentLast;
|
||||
/* 0x28 */ s32 oldLeft[4];
|
||||
/* 0x38 */ s32 oldRight[4];
|
||||
/* 0x48 */ s32 oldSur[4];
|
||||
/* 0x58 */ u32 currentPosLo;
|
||||
/* 0x5C */ u32 currentPosHi;
|
||||
/* 0x60 */ s32 pitchOffset;
|
||||
/* 0x64 */ u32 pitchOffsetPeriodCount;
|
||||
/* 0x68 */ u32 pitchOffsetPeriod;
|
||||
/* 0x6C */ AXFX_CHORUS_SRCINFO src;
|
||||
} AXFX_CHORUS_WORK;
|
||||
|
||||
typedef struct AXFX_CHORUS {
|
||||
/* 0x00 */ AXFX_CHORUS_WORK work;
|
||||
/* 0x90 */ u32 baseDelay;
|
||||
/* 0x94 */ u32 variation;
|
||||
/* 0x98 */ u32 period;
|
||||
} AXFX_CHORUS;
|
||||
|
||||
// chorus
|
||||
int AXFXChorusInit(AXFX_CHORUS* c);
|
||||
int AXFXChorusShutdown(AXFX_CHORUS* c);
|
||||
int AXFXChorusSettings(AXFX_CHORUS* c);
|
||||
void AXFXChorusCallback(AXFX_BUFFERUPDATE* bufferUpdate, AXFX_CHORUS* chorus);
|
||||
|
||||
// delay
|
||||
void AXFXDelayCallback(AXFX_BUFFERUPDATE* bufferUpdate, AXFX_DELAY* delay);
|
||||
int AXFXDelaySettings(AXFX_DELAY* delay);
|
||||
int AXFXDelayInit(AXFX_DELAY* delay);
|
||||
int AXFXDelayShutdown(AXFX_DELAY* delay);
|
||||
|
||||
// reverb_hi
|
||||
void DoCrossTalk(s32* l, s32* r, f32 cross, f32 invcross);
|
||||
int AXFXReverbHiInit(AXFX_REVERBHI* rev);
|
||||
int AXFXReverbHiShutdown(AXFX_REVERBHI* rev);
|
||||
int AXFXReverbHiSettings(AXFX_REVERBHI* rev);
|
||||
void AXFXReverbHiCallback(AXFX_BUFFERUPDATE* bufferUpdate, AXFX_REVERBHI* reverb);
|
||||
|
||||
// reverb_hi_4ch
|
||||
int AXFXReverbHiInitDpl2(AXFX_REVERBHI_DPL2* reverb);
|
||||
int AXFXReverbHiShutdownDpl2(AXFX_REVERBHI_DPL2* reverb);
|
||||
int AXFXReverbHiSettingsDpl2(AXFX_REVERBHI_DPL2* rev);
|
||||
void AXFXReverbHiCallbackDpl2(AXFX_BUFFERUPDATE_DPL2* bufferUpdate, AXFX_REVERBHI_DPL2* reverb);
|
||||
|
||||
// reverb_std
|
||||
int AXFXReverbStdInit(AXFX_REVERBSTD* rev);
|
||||
int AXFXReverbStdShutdown(AXFX_REVERBSTD* rev);
|
||||
int AXFXReverbStdSettings(AXFX_REVERBSTD* rev);
|
||||
void AXFXReverbStdCallback(AXFX_BUFFERUPDATE* bufferUpdate, AXFX_REVERBSTD* reverb);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif // _REVOLUTION_AXFX_H_
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,22 @@
|
||||
#ifndef _REVOLUTION_DB_H_
|
||||
#define _REVOLUTION_DB_H_
|
||||
|
||||
#include <revolution/types.h>
|
||||
#include <revolution/db/DBInterface.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#define OS_DBINTERFACE_ADDR 0x00000040
|
||||
|
||||
BOOL DBIsDebuggerPresent(void);
|
||||
void DBPrintf(char* str, ...);
|
||||
s32 DBQueryData(void);
|
||||
u32 DBRead(u8*, u32);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif // _REVOLUTION_DB_H_
|
||||
@@ -0,0 +1,31 @@
|
||||
#ifndef _REVOLUTION_DBINTERFACE_H_
|
||||
#define _REVOLUTION_DBINTERFACE_H_
|
||||
|
||||
#include <revolution/os.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
typedef struct DBInterface {
|
||||
u32 bPresent;
|
||||
u32 exceptionMask;
|
||||
void (*ExceptionDestination)(void);
|
||||
void* exceptionReturn;
|
||||
} DBInterface;
|
||||
|
||||
extern DBInterface* __DBInterface;
|
||||
|
||||
void DBInit(void);
|
||||
void DBInitComm(int* inputFlagPtr, int* mtrCallback);
|
||||
void __DBExceptionDestination(void);
|
||||
void __DBExceptionDestinationAux(void);
|
||||
BOOL __DBIsExceptionMarked(__OSException exception);
|
||||
void __DBMarkException(u8 exception, int value);
|
||||
void __DBSetPresent(u32 value);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,57 @@
|
||||
#ifndef _REVOLUTION_DSP_H_
|
||||
#define _REVOLUTION_DSP_H_
|
||||
|
||||
#include <revolution/os.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
typedef void (*DSPCallback)(void* task);
|
||||
typedef struct STRUCT_DSP_TASK DSPTaskInfo;
|
||||
|
||||
typedef struct STRUCT_DSP_TASK {
|
||||
/* 0x00 */ volatile u32 state;
|
||||
/* 0x04 */ volatile u32 priority;
|
||||
/* 0x08 */ volatile u32 flags;
|
||||
/* 0x0C */ u16* iram_mmem_addr;
|
||||
/* 0x10 */ u32 iram_length;
|
||||
/* 0x14 */ u32 iram_addr;
|
||||
/* 0x18 */ u16* dram_mmem_addr;
|
||||
/* 0x1C */ u32 dram_length;
|
||||
/* 0x20 */ u32 dram_addr;
|
||||
/* 0x24 */ u16 dsp_init_vector;
|
||||
/* 0x26 */ u16 dsp_resume_vector;
|
||||
/* 0x28 */ DSPCallback init_cb;
|
||||
/* 0x2C */ DSPCallback res_cb;
|
||||
/* 0x30 */ DSPCallback done_cb;
|
||||
/* 0x34 */ DSPCallback req_cb;
|
||||
/* 0x38 */ DSPTaskInfo* next;
|
||||
/* 0x3C */ DSPTaskInfo* prev;
|
||||
/* 0x40 */ OSTime t_context;
|
||||
/* 0x48 */ OSTime t_task;
|
||||
} DSPTaskInfo;
|
||||
|
||||
u32 DSPCheckMailToDSP(void);
|
||||
u32 DSPCheckMailFromDSP(void);
|
||||
u32 DSPReadCPUToDSPMbox(void);
|
||||
u32 DSPReadMailFromDSP(void);
|
||||
void DSPSendMailToDSP(u32 mail);
|
||||
void DSPAssertInt(void);
|
||||
void DSPInit(void);
|
||||
BOOL DSPCheckInit(void);
|
||||
void DSPReset(void);
|
||||
void DSPHalt(void);
|
||||
void DSPUnhalt(void);
|
||||
u32 DSPGetDMAStatus(void);
|
||||
__declspec(weak) DSPTaskInfo* DSPAddTask(DSPTaskInfo* task);
|
||||
DSPTaskInfo* DSPCancelTask(DSPTaskInfo* task);
|
||||
DSPTaskInfo* DSPAssertTask(DSPTaskInfo* task);
|
||||
|
||||
DSPTaskInfo* __DSPGetCurrentTask(void);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,236 @@
|
||||
#ifndef _REVOLUTION_DVD_H_
|
||||
#define _REVOLUTION_DVD_H_
|
||||
|
||||
#include <revolution/types.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#define DVD_ASSERTMSGLINE(line, cond, msg) \
|
||||
if (!(cond)) \
|
||||
OSPanic(__FILE__, line, msg)
|
||||
|
||||
#define DVD_ASSERTMSG1LINE(line, cond, msg, arg1) \
|
||||
if (!(cond)) \
|
||||
OSPanic(__FILE__, line, msg, arg1)
|
||||
|
||||
#define DVD_ASSERTMSG2LINE(line, cond, msg, arg1, arg2) \
|
||||
if (!(cond)) \
|
||||
OSPanic(__FILE__, line, msg, arg1, arg2)
|
||||
|
||||
#define DVD_RESULT_GOOD 0
|
||||
#define DVD_RESULT_FATAL_ERROR -1
|
||||
#define DVD_RESULT_IGNORED -2
|
||||
#define DVD_RESULT_CANCELED -6
|
||||
|
||||
#define DVD_STATE_FATAL_ERROR -1
|
||||
#define DVD_STATE_END 0
|
||||
#define DVD_STATE_BUSY 1
|
||||
#define DVD_STATE_WAITING 2
|
||||
#define DVD_STATE_COVER_CLOSED 3
|
||||
#define DVD_STATE_NO_DISK 4
|
||||
#define DVD_STATE_COVER_OPEN 5
|
||||
#define DVD_STATE_WRONG_DISK 6
|
||||
#define DVD_STATE_MOTOR_STOPPED 7
|
||||
#define DVD_STATE_PAUSING 8
|
||||
#define DVD_STATE_IGNORED 9
|
||||
#define DVD_STATE_CANCELED 10
|
||||
#define DVD_STATE_RETRY 11
|
||||
|
||||
#define DVD_MIN_TRANSFER_SIZE 32
|
||||
|
||||
// could be bitfields
|
||||
#define DVD_INTTYPE_TC 1
|
||||
#define DVD_INTTYPE_DE 2
|
||||
// unk type 3
|
||||
#define DVD_INTTYPE_CVR 4
|
||||
|
||||
// DVD Commands
|
||||
#define DVD_COMMAND_NONE 0
|
||||
#define DVD_COMMAND_READ 1
|
||||
#define DVD_COMMAND_SEEK 2
|
||||
#define DVD_COMMAND_CHANGE_DISK 3
|
||||
#define DVD_COMMAND_BSREAD 4
|
||||
#define DVD_COMMAND_READID 5
|
||||
#define DVD_COMMAND_INITSTREAM 6
|
||||
#define DVD_COMMAND_CANCELSTREAM 7
|
||||
#define DVD_COMMAND_STOP_STREAM_AT_END 8
|
||||
#define DVD_COMMAND_REQUEST_AUDIO_ERROR 9
|
||||
#define DVD_COMMAND_REQUEST_PLAY_ADDR 10
|
||||
#define DVD_COMMAND_REQUEST_START_ADDR 11
|
||||
#define DVD_COMMAND_REQUEST_LENGTH 12
|
||||
#define DVD_COMMAND_AUDIO_BUFFER_CONFIG 13
|
||||
#define DVD_COMMAND_INQUIRY 14
|
||||
#define DVD_COMMAND_BS_CHANGE_DISK 15
|
||||
#define DVD_COMMAND_UNK_16 16
|
||||
|
||||
typedef struct DVDDiskID {
|
||||
char gameName[4];
|
||||
char company[2];
|
||||
u8 diskNumber;
|
||||
u8 gameVersion;
|
||||
u8 streaming;
|
||||
u8 streamingBufSize;
|
||||
u8 padding[22];
|
||||
} DVDDiskID;
|
||||
|
||||
typedef struct DVDCommandBlock DVDCommandBlock;
|
||||
typedef void (*DVDCBCallback)(s32 result, DVDCommandBlock* block);
|
||||
typedef void (*DVDLowCallback)(u32);
|
||||
|
||||
typedef void (*DVDCommandCheckerCallback)(u32);
|
||||
typedef void (*DVDCommandChecker)(DVDCommandBlock*, DVDCommandCheckerCallback);
|
||||
|
||||
struct DVDCommandBlock {
|
||||
/* 0x00 */ DVDCommandBlock* next;
|
||||
/* 0x04 */ DVDCommandBlock* prev;
|
||||
/* 0x08 */ u32 command;
|
||||
/* 0x0C */ s32 state;
|
||||
/* 0x10 */ u32 offset;
|
||||
/* 0x14 */ u32 length;
|
||||
/* 0x18 */ void* addr;
|
||||
/* 0x1C */ u32 currTransferSize;
|
||||
/* 0x20 */ u32 transferredSize;
|
||||
/* 0x24 */ DVDDiskID* id;
|
||||
/* 0x28 */ DVDCBCallback callback;
|
||||
/* 0x2C */ void* userData;
|
||||
};
|
||||
|
||||
typedef struct DVDFileInfo DVDFileInfo;
|
||||
typedef void (*DVDCallback)(s32 result, DVDFileInfo *fileInfo);
|
||||
struct DVDFileInfo {
|
||||
/* 0x00 */ DVDCommandBlock cb;
|
||||
/* 0x30 */ u32 startAddr;
|
||||
/* 0x34 */ u32 length;
|
||||
/* 0x38 */ DVDCallback callback;
|
||||
};
|
||||
|
||||
typedef struct {
|
||||
u32 entryNum;
|
||||
u32 location;
|
||||
u32 next;
|
||||
} DVDDir;
|
||||
|
||||
typedef struct {
|
||||
u32 entryNum;
|
||||
BOOL isDir;
|
||||
char* name;
|
||||
} DVDDirEntry;
|
||||
|
||||
typedef struct DVDBB2 {
|
||||
/* 0x00 */ u32 bootFilePosition;
|
||||
/* 0x04 */ u32 FSTPosition;
|
||||
/* 0x08 */ u32 FSTLength;
|
||||
/* 0x0C */ u32 FSTMaxLength;
|
||||
/* 0x10 */ void* FSTAddress;
|
||||
/* 0x14 */ u32 userPosition;
|
||||
/* 0x18 */ u32 userLength;
|
||||
/* 0x1C */ u32 padding0;
|
||||
} DVDBB2;
|
||||
|
||||
typedef struct DVDDriveInfo {
|
||||
/* 0x00 */ u16 revisionLevel;
|
||||
/* 0x02 */ u16 deviceCode;
|
||||
/* 0x04 */ u32 releaseDate;
|
||||
/* 0x08 */ u8 padding[24];
|
||||
} DVDDriveInfo;
|
||||
|
||||
// DVD
|
||||
void DVDInit(void);
|
||||
int DVDReadAbsAsyncPrio(DVDCommandBlock* block, void* addr, s32 length, s32 offset, DVDCBCallback callback, s32 prio);
|
||||
int DVDSeekAbsAsyncPrio(DVDCommandBlock* block, s32 offset, DVDCBCallback callback, s32 prio);
|
||||
int DVDReadAbsAsyncForBS(DVDCommandBlock* block, void* addr, s32 length, s32 offset, DVDCBCallback callback);
|
||||
int DVDReadDiskID(DVDCommandBlock* block, DVDDiskID* diskID, DVDCBCallback callback);
|
||||
int DVDPrepareStreamAbsAsync(DVDCommandBlock* block, u32 length, u32 offset, DVDCBCallback callback);
|
||||
int DVDCancelStreamAsync(DVDCommandBlock* block, DVDCBCallback callback);
|
||||
s32 DVDCancelStream(DVDCommandBlock* block);
|
||||
int DVDStopStreamAtEndAsync(DVDCommandBlock* block, DVDCBCallback callback);
|
||||
s32 DVDStopStreamAtEnd(DVDCommandBlock* block);
|
||||
int DVDGetStreamErrorStatusAsync(DVDCommandBlock* block, DVDCBCallback callback);
|
||||
s32 DVDGetStreamErrorStatus(DVDCommandBlock* block);
|
||||
int DVDGetStreamPlayAddrAsync(DVDCommandBlock* block, DVDCBCallback callback);
|
||||
s32 DVDGetStreamPlayAddr(DVDCommandBlock* block);
|
||||
int DVDGetStreamStartAddrAsync(DVDCommandBlock* block, DVDCBCallback callback);
|
||||
s32 DVDGetStreamStartAddr(DVDCommandBlock* block);
|
||||
int DVDGetStreamLengthAsync(DVDCommandBlock* block, DVDCBCallback callback);
|
||||
s32 DVDGetStreamLength(DVDCommandBlock* block);
|
||||
int DVDChangeDiskAsyncForBS(DVDCommandBlock* block, DVDCBCallback callback);
|
||||
int DVDChangeDiskAsync(DVDCommandBlock* block, DVDDiskID* id, DVDCBCallback callback);
|
||||
s32 DVDChangeDisk(DVDCommandBlock* block, DVDDiskID* id);
|
||||
int DVDStopMotorAsync(DVDCommandBlock* block, DVDCBCallback callback);
|
||||
s32 DVDStopMotor(DVDCommandBlock* block);
|
||||
int DVDInquiryAsync(DVDCommandBlock* block, DVDDriveInfo* info, DVDCBCallback callback);
|
||||
s32 DVDInquiry(DVDCommandBlock* block, DVDDriveInfo* info);
|
||||
void DVDReset(void);
|
||||
int DVDResetRequired(void);
|
||||
s32 DVDGetCommandBlockStatus(const DVDCommandBlock* block);
|
||||
s32 DVDGetDriveStatus(void);
|
||||
BOOL DVDSetAutoInvalidation(BOOL autoInval);
|
||||
void DVDPause(void);
|
||||
void DVDResume(void);
|
||||
int DVDCancelAsync(DVDCommandBlock* block, DVDCBCallback callback);
|
||||
s32 DVDCancel(volatile DVDCommandBlock* block);
|
||||
int DVDCancelAllAsync(DVDCBCallback callback);
|
||||
s32 DVDCancelAll(void);
|
||||
DVDDiskID* DVDGetCurrentDiskID(void);
|
||||
BOOL DVDCheckDisk(void);
|
||||
|
||||
// DVD FATAL
|
||||
int DVDSetAutoFatalMessaging(BOOL enable);
|
||||
|
||||
// DVD FS
|
||||
s32 DVDConvertPathToEntrynum(const char* pathPtr);
|
||||
BOOL DVDFastOpen(s32 entrynum, DVDFileInfo* fileInfo);
|
||||
BOOL DVDOpen(const char* fileName, DVDFileInfo* fileInfo);
|
||||
BOOL DVDClose(DVDFileInfo* fileInfo);
|
||||
BOOL DVDGetCurrentDir(char* path, u32 maxlen);
|
||||
BOOL DVDChangeDir(const char* dirName);
|
||||
BOOL DVDReadAsyncPrio(DVDFileInfo* fileInfo, void* addr, s32 length, s32 offset,
|
||||
DVDCallback callback, s32 prio);
|
||||
s32 DVDReadPrio(DVDFileInfo* fileInfo, void* addr, s32 length, s32 offset, s32 prio);
|
||||
int DVDSeekAsyncPrio(DVDFileInfo* fileInfo, s32 offset, void (* callback)(s32, DVDFileInfo *), s32 prio);
|
||||
s32 DVDSeekPrio(DVDFileInfo* fileInfo, s32 offset, s32 prio);
|
||||
s32 DVDGetFileInfoStatus(const DVDFileInfo* fileInfo);
|
||||
BOOL DVDFastOpenDir(s32 entrynum, DVDDir* dir);
|
||||
int DVDOpenDir(const char* dirName, DVDDir* dir);
|
||||
int DVDReadDir(DVDDir* dir, DVDDirEntry* dirent);
|
||||
int DVDCloseDir(DVDDir* dir);
|
||||
void DVDRewindDir(DVDDir* dir);
|
||||
void* DVDGetFSTLocation(void);
|
||||
BOOL DVDPrepareStreamAsync(DVDFileInfo* fileInfo, u32 length, u32 offset, DVDCallback callback);
|
||||
s32 DVDPrepareStream(DVDFileInfo* fileInfo, u32 length, u32 offset);
|
||||
s32 DVDGetTransferredSize(DVDFileInfo* fileinfo);
|
||||
|
||||
#define DVDReadAsync(fileInfo, addr, length, offset, callback) \
|
||||
DVDReadAsyncPrio((fileInfo), (addr), (length), (offset), (callback), 2)
|
||||
|
||||
// DVD ID UTILS
|
||||
int DVDCompareDiskID(const DVDDiskID* id1, const DVDDiskID* id2);
|
||||
DVDDiskID* DVDGenerateDiskID(DVDDiskID* id, const char* game, const char* company, u8 diskNum, u8 version);
|
||||
|
||||
// DVD LOW
|
||||
BOOL DVDLowRead(void* addr, u32 length, u32 offset, DVDLowCallback callback);
|
||||
BOOL DVDLowSeek(u32 offset, DVDLowCallback callback);
|
||||
BOOL DVDLowWaitCoverClose(DVDLowCallback callback);
|
||||
BOOL DVDLowReadDiskID(DVDDiskID* diskID, DVDLowCallback callback);
|
||||
BOOL DVDLowStopMotor(DVDLowCallback callback);
|
||||
BOOL DVDLowRequestError(DVDLowCallback callback);
|
||||
BOOL DVDLowInquiry(DVDDriveInfo* info, DVDLowCallback callback);
|
||||
BOOL DVDLowAudioStream(u32 subcmd, u32 length, u32 offset, DVDLowCallback callback);
|
||||
BOOL DVDLowRequestAudioStatus(u32 subcmd, DVDLowCallback callback);
|
||||
BOOL DVDLowAudioBufferConfig(BOOL enable, u32 size, DVDLowCallback callback);
|
||||
void DVDLowReset(void);
|
||||
DVDLowCallback DVDLowSetResetCoverCallback(DVDLowCallback callback);
|
||||
BOOL DVDLowBreak(void);
|
||||
DVDLowCallback DVDLowClearCallback(void);
|
||||
u32 DVDLowGetCoverStatus(void);
|
||||
|
||||
// DVD QUEUE
|
||||
void DVDDumpWaitingQueue(void);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,103 @@
|
||||
#ifndef _REVOLUTION_EXI_H_
|
||||
#define _REVOLUTION_EXI_H_
|
||||
|
||||
#include <revolution/os.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#define EXI_MEMORY_CARD_59 0x00000004
|
||||
#define EXI_MEMORY_CARD_123 0x00000008
|
||||
#define EXI_MEMORY_CARD_251 0x00000010
|
||||
#define EXI_MEMORY_CARD_507 0x00000020
|
||||
|
||||
#define EXI_MEMORY_CARD_1019 0x00000040
|
||||
#define EXI_MEMORY_CARD_2043 0x00000080
|
||||
|
||||
#define EXI_MEMORY_CARD_1019A 0x00000140
|
||||
#define EXI_MEMORY_CARD_1019B 0x00000240
|
||||
#define EXI_MEMORY_CARD_1019C 0x00000340
|
||||
#define EXI_MEMORY_CARD_1019D 0x00000440
|
||||
#define EXI_MEMORY_CARD_1019E 0x00000540
|
||||
#define EXI_MEMORY_CARD_1019F 0x00000640
|
||||
#define EXI_MEMORY_CARD_1019G 0x00000740
|
||||
|
||||
#define EXI_MEMORY_CARD_2043A 0x00000180
|
||||
#define EXI_MEMORY_CARD_2043B 0x00000280
|
||||
#define EXI_MEMORY_CARD_2043C 0x00000380
|
||||
#define EXI_MEMORY_CARD_2043D 0x00000480
|
||||
#define EXI_MEMORY_CARD_2043E 0x00000580
|
||||
#define EXI_MEMORY_CARD_2043F 0x00000680
|
||||
#define EXI_MEMORY_CARD_2043G 0x00000780
|
||||
|
||||
#define EXI_USB_ADAPTER 0x01010000
|
||||
#define EXI_NPDP_GDEV 0x01020000
|
||||
|
||||
#define EXI_MODEM 0x02020000
|
||||
#define EXI_ETHER 0x04020200
|
||||
#define EXI_MIC 0x04060000
|
||||
#define EXI_AD16 0x04120000
|
||||
#define EXI_RS232C 0x04040404
|
||||
#define EXI_ETHER_VIEWER 0x04220001
|
||||
#define EXI_STREAM_HANGER 0x04130000
|
||||
|
||||
#define EXI_MARLIN 0x03010000
|
||||
|
||||
#define EXI_IS_VIEWER 0x05070000
|
||||
|
||||
#define EXI_READ 0
|
||||
#define EXI_WRITE 1
|
||||
|
||||
#define EXI_FREQ_1M 0
|
||||
#define EXI_FREQ_2M 1
|
||||
#define EXI_FREQ_4M 2
|
||||
#define EXI_FREQ_8M 3
|
||||
#define EXI_FREQ_16M 4
|
||||
#define EXI_FREQ_32M 5
|
||||
|
||||
typedef void (*EXICallback)(s32 chan, OSContext* context);
|
||||
typedef struct EXIControl {
|
||||
EXICallback exiCallback;
|
||||
EXICallback tcCallback;
|
||||
EXICallback extCallback;
|
||||
volatile u32 state;
|
||||
int immLen;
|
||||
u8* immBuf;
|
||||
u32 dev;
|
||||
u32 id;
|
||||
s32 idTime;
|
||||
int items;
|
||||
struct {
|
||||
u32 dev;
|
||||
EXICallback callback;
|
||||
} queue[3];
|
||||
} EXIControl;
|
||||
|
||||
EXICallback EXISetExiCallback(s32 channel, EXICallback callback);
|
||||
|
||||
void EXIInit(void);
|
||||
BOOL EXILock(s32 channel, u32 device, EXICallback callback);
|
||||
BOOL EXIUnlock(s32 channel);
|
||||
BOOL EXISelect(s32 channel, u32 device, u32 frequency);
|
||||
BOOL EXIDeselect(s32 channel);
|
||||
BOOL EXIImm(s32 channel, void* buffer, s32 length, u32 type, EXICallback callback);
|
||||
BOOL EXIImmEx(s32 channel, void* buffer, s32 length, u32 type);
|
||||
BOOL EXIDma(s32 channel, void* buffer, s32 length, u32 type, EXICallback callback);
|
||||
BOOL EXISync(s32 channel);
|
||||
BOOL EXIProbe(s32 channel);
|
||||
s32 EXIProbeEx(s32 channel);
|
||||
BOOL EXIAttach(s32 channel, EXICallback callback);
|
||||
BOOL EXIDetach(s32 channel);
|
||||
u32 EXIGetState(s32 channel);
|
||||
s32 EXIGetID(s32 channel, u32 device, u32* id);
|
||||
void EXIProbeReset(void);
|
||||
int EXISelectSD(s32 chan, u32 dev, u32 freq);
|
||||
s32 EXIGetType(s32 chan, u32 dev, u32* type);
|
||||
char* EXIGetTypeString(u32 type);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,66 @@
|
||||
#pragma cplusplus on
|
||||
|
||||
extern inline float sqrtf(float x) {
|
||||
static const double _half=.5;
|
||||
static const double _three=3.0;
|
||||
volatile float y;
|
||||
if(x > 0.0f) {
|
||||
double guess = __frsqrte((double)x); // returns an approximation to
|
||||
guess = _half*guess*(_three - guess*guess*x); // now have 12 sig bits
|
||||
guess = _half*guess*(_three - guess*guess*x); // now have 24 sig bits
|
||||
guess = _half*guess*(_three - guess*guess*x); // now have 32 sig bits
|
||||
y=(float)(x*guess);
|
||||
return y ;
|
||||
}
|
||||
return x ;
|
||||
}
|
||||
|
||||
extern inline float sqrt(float x) {
|
||||
static const double _half=.5;
|
||||
static const double _three=3.0;
|
||||
volatile float y;
|
||||
if(x > 0.0f) {
|
||||
double guess = __frsqrte((double)x); // returns an approximation to
|
||||
guess = _half*guess*(_three - guess*guess*x); // now have 12 sig bits
|
||||
guess = _half*guess*(_three - guess*guess*x); // now have 24 sig bits
|
||||
guess = _half*guess*(_three - guess*guess*x); // now have 32 sig bits
|
||||
guess = _half*guess*(_three - guess*guess*x); // now have 32 sig bits
|
||||
|
||||
y=(float)(x*guess);
|
||||
return y ;
|
||||
}
|
||||
return x ;
|
||||
}
|
||||
|
||||
extern inline float fabs(float x) {
|
||||
#if __MIPS__
|
||||
return fabsf(x);
|
||||
#else
|
||||
(*(int*)&x)&=0x7fffffff;
|
||||
return x;
|
||||
#endif
|
||||
}
|
||||
|
||||
extern inline float fabsf(float x) {
|
||||
return __fabsf(x);
|
||||
}
|
||||
|
||||
extern float cosf(float);
|
||||
extern inline float cos(float x) {
|
||||
return cosf(x);
|
||||
}
|
||||
|
||||
inline float floor(float x) {
|
||||
int i=(int)x;
|
||||
float y=x-(float)i;
|
||||
|
||||
if(!y || x > 8388608.0f)
|
||||
return x ; // x is already an int
|
||||
|
||||
if(x < 0)
|
||||
return (float)--i;
|
||||
// x < 0 -> int conversion of x above rounded toward zero(so decrement)
|
||||
return (float)i;
|
||||
}
|
||||
|
||||
#pragma cplusplus reset
|
||||
@@ -0,0 +1,14 @@
|
||||
#ifndef _REVOLUTION_GD_H_
|
||||
#define _REVOLUTION_GD_H_
|
||||
|
||||
#include <revolution/gd/GDBase.h>
|
||||
#include <revolution/gd/GDFile.h>
|
||||
#include <revolution/gd/GDGeometry.h>
|
||||
#include <revolution/gd/GDIndirect.h>
|
||||
#include <revolution/gd/GDLight.h>
|
||||
#include <revolution/gd/GDPixel.h>
|
||||
#include <revolution/gd/GDTev.h>
|
||||
#include <revolution/gd/GDTexture.h>
|
||||
#include <revolution/gd/GDTransform.h>
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,151 @@
|
||||
#ifndef _REVOLUTION_GD_BASE_H
|
||||
#define _REVOLUTION_GD_BASE_H
|
||||
|
||||
#include <revolution/types.h>
|
||||
#include <revolution/gx/GXEnum.h>
|
||||
#include <revolution/gx/GXCommandList.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
typedef void (*GDOverflowCb)(void);
|
||||
|
||||
typedef struct _GDLObj {
|
||||
u8* start;
|
||||
u32 length;
|
||||
u8* ptr;
|
||||
u8* top;
|
||||
} GDLObj;
|
||||
|
||||
extern GDLObj* __GDCurrentDL;
|
||||
|
||||
void GDInitGDLObj(GDLObj* dl, void* start, u32 length);
|
||||
void GDFlushCurrToMem(void);
|
||||
void GDPadCurr32(void);
|
||||
void GDOverflowed(void);
|
||||
void GDSetOverflowCallback(GDOverflowCb callback);
|
||||
GDOverflowCb GDGetOverflowCallback(void);
|
||||
|
||||
inline static void GDOverflowCheck(u32 size) {
|
||||
if (__GDCurrentDL->ptr + size > __GDCurrentDL->top) {
|
||||
GDOverflowed();
|
||||
}
|
||||
}
|
||||
|
||||
inline static void __GDWrite(u8 data) {
|
||||
*__GDCurrentDL->ptr++ = data;
|
||||
}
|
||||
|
||||
inline static void GDWrite_u8(u8 data) {
|
||||
GDOverflowCheck(sizeof(u8));
|
||||
__GDWrite(data);
|
||||
}
|
||||
|
||||
inline static void GDWrite_u16(u16 data) {
|
||||
GDOverflowCheck(sizeof(u16));
|
||||
__GDWrite((u8)((data >> 8)));
|
||||
__GDWrite((u8)((data >> 0) & 0xFF));
|
||||
}
|
||||
|
||||
inline static void GDWrite_u24(u32 data) {
|
||||
GDOverflowCheck(3);
|
||||
__GDWrite((u8)((data >> 16) & 0xFF));
|
||||
__GDWrite((u8)((data >> 8) & 0xFF));
|
||||
__GDWrite((u8)((data >> 0) & 0xFF));
|
||||
}
|
||||
|
||||
inline static void GDWrite_u32(u32 data) {
|
||||
GDOverflowCheck(sizeof(u32));
|
||||
__GDWrite((u8)((data >> 24) & 0xFF));
|
||||
__GDWrite((u8)((data >> 16) & 0xFF));
|
||||
__GDWrite((u8)((data >> 8) & 0xFF));
|
||||
__GDWrite((u8)((data >> 0) & 0xFF));
|
||||
}
|
||||
|
||||
inline static void GDWrite_f32(f32 data) {
|
||||
union {
|
||||
f32 f;
|
||||
u32 u;
|
||||
} fid;
|
||||
fid.f = data;
|
||||
GDWrite_u32(fid.u);
|
||||
}
|
||||
|
||||
inline static void GDWriteXFCmdHdr(u16 addr, u8 len) {
|
||||
GDWrite_u8(GX_LOAD_XF_REG);
|
||||
GDWrite_u16(len - 1);
|
||||
GDWrite_u16(addr);
|
||||
}
|
||||
|
||||
inline static void GDWriteXFCmd(u16 addr, u32 val) {
|
||||
GDWrite_u8(GX_LOAD_XF_REG);
|
||||
GDWrite_u16(0);
|
||||
GDWrite_u16(addr);
|
||||
GDWrite_u32(val);
|
||||
}
|
||||
|
||||
inline static void GDWriteXFIndxDCmd(u16 addr, u8 len, u16 index) {
|
||||
GDWrite_u8(GX_LOAD_INDX_D);
|
||||
GDWrite_u16(index);
|
||||
GDWrite_u16((len - 1) << 12 | addr);
|
||||
}
|
||||
|
||||
inline static void GDWriteXFIndxACmd(u16 addr, u8 len, u16 index) {
|
||||
GDWrite_u8(GX_LOAD_INDX_A);
|
||||
GDWrite_u16(index);
|
||||
GDWrite_u16(((len - 1) << 12) | addr);
|
||||
}
|
||||
|
||||
inline static void GDWriteXFIndxBCmd(u16 addr, u8 len, u16 index) {
|
||||
GDWrite_u8(GX_LOAD_INDX_B);
|
||||
GDWrite_u16(index);
|
||||
GDWrite_u16(((len - 1) << 12) | addr);
|
||||
}
|
||||
|
||||
inline static void GDWriteXFIndxCCmd(u16 addr, u8 len, u16 index) {
|
||||
GDWrite_u8(GX_LOAD_INDX_C);
|
||||
GDWrite_u16(index);
|
||||
GDWrite_u16(((len - 1) << 12) | addr);
|
||||
}
|
||||
|
||||
inline static void GDWriteCPCmd(u8 addr, u32 val) {
|
||||
GDWrite_u8(GX_LOAD_CP_REG);
|
||||
GDWrite_u8(addr);
|
||||
GDWrite_u32(val);
|
||||
}
|
||||
|
||||
inline static void GDWriteBPCmd(u32 regval) {
|
||||
GDWrite_u8(GX_LOAD_BP_REG);
|
||||
GDWrite_u32(regval);
|
||||
}
|
||||
|
||||
inline static void GDSetCurrent(GDLObj* dl) {
|
||||
__GDCurrentDL = dl;
|
||||
}
|
||||
|
||||
static inline u32 GDGetCurrOffset(void) {
|
||||
return (u32)(__GDCurrentDL->ptr - __GDCurrentDL->start);
|
||||
}
|
||||
|
||||
static inline void GDSetCurrOffset(u32 offset) {
|
||||
__GDCurrentDL->ptr = __GDCurrentDL->start + offset;
|
||||
}
|
||||
|
||||
static inline void* GDGetCurrPointer(void) {
|
||||
return (void*)__GDCurrentDL->ptr;
|
||||
}
|
||||
|
||||
static inline u8* GDGetCurrPointer2(void) {
|
||||
return __GDCurrentDL->ptr;
|
||||
}
|
||||
|
||||
static inline u32 GDGetGDLObjOffset(const GDLObj* dl) {
|
||||
return (u32)(dl->ptr - dl->start);
|
||||
}
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,31 @@
|
||||
#ifndef _REVOLUTION_GD_FILE_H
|
||||
#define _REVOLUTION_GD_FILE_H
|
||||
|
||||
#include <revolution/types.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#define GD_FILE_VERSION_NUMBER 0x11223344
|
||||
|
||||
typedef struct _GDGList {
|
||||
void* ptr;
|
||||
u32 byteLength;
|
||||
} GDGList;
|
||||
|
||||
typedef struct _GDFileHeader {
|
||||
u32 versionNumber;
|
||||
u32 numDLs;
|
||||
u32 numPLs;
|
||||
GDGList* DLDescArray;
|
||||
GDGList* PLDescArray;
|
||||
} GDFileHeader;
|
||||
|
||||
s32 GDReadDLFile(const char* fName, u32* numDLs, u32* numPLs, GDGList** DLDescArray, GDGList** PLDescArray);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,91 @@
|
||||
#ifndef _REVOLUTION_GD_INDIRECT_H_
|
||||
#define _REVOLUTION_GD_INDIRECT_H_
|
||||
|
||||
#include <revolution/types.h>
|
||||
#include <revolution/gx/GXEnum.h>
|
||||
#include <revolution/mtx.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#define BP_TEV_INDIRECT(ind_stage, format, bias_sel, alpha_sel, mtx_sel, wrap_s, wrap_t, utc_lod, add_prev, id) \
|
||||
( \
|
||||
(u32)(ind_stage) << 0 | \
|
||||
(u32)(format) << 2 | \
|
||||
(u32)(bias_sel) << 4 | \
|
||||
(u32)(alpha_sel) << 7 | \
|
||||
(u32)(mtx_sel) << 9 | \
|
||||
(u32)(wrap_s) << 13 | \
|
||||
(u32)(wrap_t) << 16 | \
|
||||
(u32)(utc_lod) << 19 | \
|
||||
(u32)(add_prev) << 20 | \
|
||||
(u32)(id) << 24 \
|
||||
)
|
||||
|
||||
#define BP_IND_MTX(m0, m1, scale_exp, id) \
|
||||
( \
|
||||
(u32)(m0) << 0 | \
|
||||
(u32)(m1) << 11 | \
|
||||
(u32)(scale_exp) << 22 | \
|
||||
(u32)(id) << 24 \
|
||||
)
|
||||
|
||||
#define BP_IND_TEXCOORD_SCALE(scaleS0, scaleT0, scaleS1, scaleT1, id) \
|
||||
( \
|
||||
(u32)(scaleS0) << 0 | \
|
||||
(u32)(scaleT0) << 4 | \
|
||||
(u32)(scaleS1) << 8 | \
|
||||
(u32)(scaleT1) << 12 | \
|
||||
(u32)(id) << 24 \
|
||||
)
|
||||
|
||||
#define BP_IND_TEX_ORDER(map0, coord0, map1, coord1, map2, coord2, map3, coord3, id) \
|
||||
( \
|
||||
(u32)(map0) << 0 | \
|
||||
(u32)(coord0) << 3 | \
|
||||
(u32)(map1) << 6 | \
|
||||
(u32)(coord1) << 9 | \
|
||||
(u32)(map2) << 12 | \
|
||||
(u32)(coord2) << 15 | \
|
||||
(u32)(map3) << 18 | \
|
||||
(u32)(coord3) << 21 | \
|
||||
(u32)(id) << 24 \
|
||||
)
|
||||
|
||||
#define BP_IND_MASK(mask, id) \
|
||||
( \
|
||||
(u32)(mask) << 0 | \
|
||||
(u32)(id) << 24 \
|
||||
)
|
||||
|
||||
void GDSetTevIndirect(GXTevStageID tev_stage, GXIndTexStageID ind_stage,
|
||||
GXIndTexFormat format, GXIndTexBiasSel bias_sel,
|
||||
GXIndTexMtxID matrix_sel, GXIndTexWrap wrap_s,
|
||||
GXIndTexWrap wrap_t, u8 add_prev, u8 utc_lod,
|
||||
GXIndTexAlphaSel alpha_sel);
|
||||
void GDSetIndTexMtx(GXIndTexMtxID mtx_id, const f32 offset[2][3], s8 scale_exp);
|
||||
void GDSetIndTexCoordScale(GXIndTexStageID indStageEven, GXIndTexScale scaleS0,
|
||||
GXIndTexScale scaleT0, GXIndTexScale scaleS1,
|
||||
GXIndTexScale scaleT1);
|
||||
void GDSetIndTexOrder(GXTexCoordID texCoord0, GXTexMapID texMap0,
|
||||
GXTexCoordID texCoord1, GXTexMapID texMap1,
|
||||
GXTexCoordID texCoord2, GXTexMapID texMap2,
|
||||
GXTexCoordID texCoord3, GXTexMapID texMap3);
|
||||
void GDSetTevDirect(GXTevStageID tev_stage);
|
||||
void GDSetTevIndWarp(GXTevStageID tev_stage, GXIndTexStageID ind_stage, u8 signed_offset, u8 replace_mode, GXIndTexMtxID matrix_sel);
|
||||
void GDSetTevIndTile(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 GDSetTevIndBumpST(GXTevStageID tev_stage, GXIndTexStageID ind_stage, GXIndTexMtxID matrix_sel);
|
||||
void GDSetTevIndBumpXYZ(GXTevStageID tev_stage, GXIndTexStageID ind_stage, GXIndTexMtxID matrix_sel);
|
||||
void GDSetTevIndRepeat(GXTevStageID tev_stage);
|
||||
void __GDSetIndTexMask(u32 mask);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,74 @@
|
||||
#ifndef _REVOLUTION_GD_LIGHT_H_
|
||||
#define _REVOLUTION_GD_LIGHT_H_
|
||||
|
||||
#include <revolution/gx/GXEnum.h>
|
||||
#include <revolution/gx/GXStruct.h>
|
||||
#include "global.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#define XF_LIGHT_ID 0x0600
|
||||
#define XF_LIGHT_COLOR_ID 0x0603
|
||||
#define XF_LIGHT_ATTN_ID 0x0604
|
||||
#define XF_LIGHT_DISTATTN_ID 0x0607
|
||||
#define XF_LIGHT_POS_ID 0x060A
|
||||
#define XF_LIGHT_SPEC_DIR_ID 0x060A
|
||||
#define XF_LIGHT_DIR_ID 0x060D
|
||||
|
||||
#define XF_REG_AMBIENT0_ID 0x100A
|
||||
#define XF_REG_AMBIENT1_ID 0x100B
|
||||
#define XF_REG_MATERIAL0_ID 0x100C
|
||||
#define XF_REG_MATERIAL1_ID 0x100D
|
||||
#define XF_REG_COLOR0CNTRL_ID 0x100E
|
||||
#define XF_REG_COLOR1CNTRL_ID 0x100F
|
||||
#define XF_REG_ALPHA0CNTRL_ID 0x1010
|
||||
#define XF_REG_ALPHA1CNTRL_ID 0x1011
|
||||
|
||||
#define XF_REG_CHAN_CTRL(matsrc, enable, lightmask0, ambsrc, diff_fn, p5, p6, lightmask4) \
|
||||
( \
|
||||
(u32)(matsrc) << 0 | \
|
||||
(u32)(enable) << 1 | \
|
||||
(u32)(lightmask0) << 2 | \
|
||||
(u32)(ambsrc) << 6 | \
|
||||
(u32)(diff_fn) << 7 | \
|
||||
(u32)(p5) << 9 | \
|
||||
(u32)(p6) << 10 | \
|
||||
(u32)(lightmask4) << 11 \
|
||||
)
|
||||
|
||||
void GDSetLightAttn(GXLightID light, f32 a0, f32 a1, f32 a2, f32 k0, f32 k1, f32 k2);
|
||||
void GDSetLightSpot(GXLightID light, f32 cutoff, GXSpotFn spot_func);
|
||||
void GDSetLightDistAttn(GXLightID light, f32 ref_dist, f32 ref_br, GXDistAttnFn dist_func);
|
||||
void GDSetLightColor(GXLightID light, GXColor color);
|
||||
void GDSetLightPos(GXLightID light, f32 x, f32 y, f32 z);
|
||||
void GDSetLightDir(GXLightID light, f32 nx, f32 ny, f32 nz);
|
||||
void GDSetSpecularDirHA(GXLightID light, f32 nx, f32 ny, f32 nz, f32 hx, f32 hy, f32 hz);
|
||||
void GDSetSpecularDir(GXLightID light, f32 nx, f32 ny, f32 nz);
|
||||
void GDLoadLightObjIndx(u32 lt_obj_indx, GXLightID light);
|
||||
void GDSetChanAmbColor(GXChannelID chan, GXColor color);
|
||||
void GDSetChanMatColor(GXChannelID chan, GXColor color);
|
||||
void GDSetChanCtrl(GXChannelID chan, u8 enable, GXColorSrc amb_src,
|
||||
GXColorSrc mat_src, u32 light_mask, GXDiffuseFn diff_fn,
|
||||
GXAttnFn attn_fn);
|
||||
|
||||
inline static u16 __GDLightID2Index(GXLightID id) {
|
||||
u16 idx;
|
||||
|
||||
idx = 0x1F - __cntlzw(id);
|
||||
if (idx > 7) {
|
||||
idx = 0;
|
||||
}
|
||||
return idx;
|
||||
}
|
||||
|
||||
inline static u16 __GDLightID2Offset(GXLightID id) {
|
||||
return __GDLightID2Index(id) * 16;
|
||||
}
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,95 @@
|
||||
#ifndef _REVOLUTION_GD_PIXEL_H
|
||||
#define _REVOLUTION_GD_PIXEL_H
|
||||
|
||||
#include <revolution/gx/GXEnum.h>
|
||||
#include <revolution/gx/GXStruct.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#define BP_FOG_UNK0(a, id) \
|
||||
( \
|
||||
(u32)(a) << 0 | \
|
||||
(u32)(id) << 24 \
|
||||
)
|
||||
|
||||
#define BP_FOG_UNK1(b_m, id) \
|
||||
( \
|
||||
(u32)(b_m) << 0 | \
|
||||
(u32)(id) << 24 \
|
||||
)
|
||||
|
||||
#define BP_FOG_UNK2(b_expn, id) \
|
||||
( \
|
||||
(u32)(b_expn) << 0 | \
|
||||
(u32)(id) << 24 \
|
||||
)
|
||||
|
||||
#define BP_FOG_UNK3(c, proj, fsel, id) \
|
||||
( \
|
||||
(u32)(c) << 0 | \
|
||||
(u32)(proj) << 20 | \
|
||||
(u32)(fsel) << 21 | \
|
||||
(u32)(id) << 24 \
|
||||
)
|
||||
|
||||
#define BP_FOG_COLOR(r, g, b, id) \
|
||||
( \
|
||||
(u32)(b) << 0 | \
|
||||
(u32)(g) << 8 | \
|
||||
(u32)(r) << 16 | \
|
||||
(u32)(id) << 24 \
|
||||
)
|
||||
|
||||
#define BP_BLEND_MODE(enable, enable_logic, enable_dither, enable_color_update, enable_alpha_update, dst_factor, src_factor, blend_sub, logic_op, id) \
|
||||
( \
|
||||
(u32)(enable) << 0 | \
|
||||
(u32)(enable_logic) << 1 | \
|
||||
(u32)(enable_dither) << 2 | \
|
||||
(u32)(enable_color_update) << 3 | \
|
||||
(u32)(enable_alpha_update) << 4 | \
|
||||
(u32)(dst_factor) << 5 | \
|
||||
(u32)(src_factor) << 8 | \
|
||||
(u32)(blend_sub) << 11 | \
|
||||
(u32)(logic_op) << 12 | \
|
||||
(u32)(id) << 24 \
|
||||
)
|
||||
|
||||
#define BP_Z_MODE(enable_compare, compare_fn, enable_update, id) \
|
||||
( \
|
||||
(u32)(enable_compare) << 0 | \
|
||||
(u32)(compare_fn) << 1 | \
|
||||
(u32)(enable_update) << 4 | \
|
||||
(u32)(id) << 24 \
|
||||
)
|
||||
|
||||
#define BP_DST_ALPHA(alpha, enable, id) \
|
||||
( \
|
||||
(u32)(alpha) << 0 | \
|
||||
(u32)(enable) << 8 | \
|
||||
(u32)(id) << 24 \
|
||||
)
|
||||
|
||||
#define BP_TOKEN(token, id) \
|
||||
( \
|
||||
(u32)(token) << 0 | \
|
||||
(u32)(id) << 24 \
|
||||
)
|
||||
|
||||
void GDSetFog(GXFogType type, f32 startz, f32 endz, f32 nearz, f32 farz, GXColor color);
|
||||
void GDSetBlendMode(GXBlendMode type, GXBlendFactor src_factor, GXBlendFactor dst_factor, GXLogicOp logic_op);
|
||||
void GDSetBlendModeEtc(GXBlendMode type, GXBlendFactor src_factor,
|
||||
GXBlendFactor dst_factor, GXLogicOp logic_op,
|
||||
u8 color_update_enable,
|
||||
u8 alpha_update_enable,
|
||||
u8 dither_enable);
|
||||
void GDSetZMode(u8 compare_enable, GXCompare func, u8 update_enable);
|
||||
void GDSetDstAlpha(u8 enable, u8 alpha);
|
||||
void GDSetDrawSync(u16 token);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user