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:
TakaRikka
2025-10-19 20:30:49 +03:00
committed by GitHub
parent 31c0f94a10
commit 850fae1aa3
870 changed files with 10837 additions and 964 deletions
+50
View File
@@ -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
+123
View File
@@ -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
+9
View File
@@ -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
+325
View File
@@ -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_
+224
View File
@@ -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_
+196
View File
@@ -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
+22
View File
@@ -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_
+31
View File
@@ -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
+57
View File
@@ -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
+236
View File
@@ -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
+103
View File
@@ -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
+66
View File
@@ -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
+14
View File
@@ -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
+151
View File
@@ -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
+31
View File
@@ -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
+91
View File
@@ -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
+74
View File
@@ -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
+95
View File
@@ -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