6525 lines
181 KiB
C
6525 lines
181 KiB
C
#define ATTRIBUTE_ALIGN(num) __attribute__((aligned(num)))
|
|
typedef signed char s8;
|
|
typedef signed short int s16;
|
|
typedef signed long s32;
|
|
typedef signed long long int s64;
|
|
typedef unsigned char u8;
|
|
typedef unsigned short int u16;
|
|
typedef unsigned long u32;
|
|
typedef unsigned long long int u64;
|
|
|
|
typedef volatile u8 vu8;
|
|
typedef volatile u16 vu16;
|
|
typedef volatile u32 vu32;
|
|
typedef volatile u64 vu64;
|
|
|
|
typedef volatile s8 vs8;
|
|
typedef volatile s16 vs16;
|
|
typedef volatile s32 vs32;
|
|
typedef volatile s64 vs64;
|
|
|
|
typedef float f32;
|
|
typedef double f64;
|
|
|
|
typedef volatile f32 vf32;
|
|
typedef volatile f64 vf64;
|
|
typedef int BOOL;
|
|
#define FALSE 0
|
|
#define TRUE 1
|
|
|
|
#define NULL ((void *)0)
|
|
#define nullptr NULL
|
|
|
|
#define CTR 9
|
|
#define XER 1
|
|
#define LR 8
|
|
|
|
#define UPMC1 937
|
|
#define UPMC2 938
|
|
#define UPMC3 941
|
|
#define UPMC4 942
|
|
|
|
#define USIA 939
|
|
|
|
#define UMMCR0 936
|
|
#define UMMCR1 940
|
|
|
|
#define HID0 1008
|
|
#define HID1 1009
|
|
|
|
#define PVR 287
|
|
|
|
#define IBAT0U 528
|
|
#define IBAT0L 529
|
|
#define IBAT1U 530
|
|
#define IBAT1L 531
|
|
#define IBAT2U 532
|
|
#define IBAT2L 533
|
|
#define IBAT3U 534
|
|
#define IBAT3L 535
|
|
|
|
#define DBAT0U 536
|
|
#define DBAT0L 537
|
|
#define DBAT1U 538
|
|
#define DBAT1L 539
|
|
#define DBAT2U 540
|
|
#define DBAT2L 541
|
|
#define DBAT3U 542
|
|
#define DBAT3L 543
|
|
|
|
#define SDR1 25
|
|
|
|
#define SPRG0 272
|
|
#define SPRG1 273
|
|
#define SPRG2 274
|
|
#define SPRG3 275
|
|
|
|
#define DAR 19
|
|
#define DSISR 18
|
|
|
|
#define SRR0 26
|
|
#define SRR1 27
|
|
|
|
#define EAR 282
|
|
|
|
#define DABR 1013
|
|
|
|
#define TBL 284
|
|
#define TBU 285
|
|
|
|
#define L2CR 1017
|
|
|
|
#define DEC 22
|
|
|
|
#define IABR 1010
|
|
|
|
#define PMC1 953
|
|
#define PMC2 954
|
|
#define PMC3 957
|
|
#define PMC4 958
|
|
|
|
#define SIA 955
|
|
|
|
#define MMCR0 952
|
|
#define MMCR1 956
|
|
|
|
#define THRM1 1020
|
|
#define THRM2 1021
|
|
#define THRM3 1022
|
|
|
|
#define ICTC 1019
|
|
|
|
#define GQR0 912
|
|
#define GQR1 913
|
|
#define GQR2 914
|
|
#define GQR3 915
|
|
#define GQR4 916
|
|
#define GQR5 917
|
|
#define GQR6 918
|
|
#define GQR7 919
|
|
|
|
#define HID2 920
|
|
|
|
#define WPAR 921
|
|
|
|
#define DMA_U 922
|
|
#define DMA_L 923
|
|
|
|
#define MSR_POW 0x00040000 // Power Management
|
|
#define MSR_ILE 0x00010000 // Interrupt Little Endian
|
|
#define MSR_EE 0x00008000 // external interrupt
|
|
#define MSR_PR 0x00004000 // privilege level(should be 0)
|
|
#define MSR_FP 0x00002000 // floating point available
|
|
#define MSR_ME 0x00001000 // machine check enable
|
|
#define MSR_FE0 0x00000800 // floating point exception enable
|
|
#define MSR_SE 0x00000400 // single step trace enable
|
|
#define MSR_BE 0x00000200 // branch trace enable
|
|
#define MSR_FE1 0x00000100 // floating point exception enable
|
|
#define MSR_IP 0x00000040 // Exception prefix
|
|
#define MSR_IR 0x00000020 // instruction relocate
|
|
#define MSR_DR 0x00000010 // data relocate
|
|
#define MSR_PM 0x00000004 // Performance monitor marked mode
|
|
#define MSR_RI 0x00000002 // Recoverable interrupt
|
|
#define MSR_LE 0x00000001 // Little Endian
|
|
|
|
#define MSR_POW_BIT 13 // Power Management
|
|
#define MSR_ILE_BIT 15 // Interrupt Little Endian
|
|
#define MSR_EE_BIT 16 // external interrupt
|
|
#define MSR_PR_BIT 17 // privilege level (should be 0)
|
|
#define MSR_FP_BIT 18 // floating point available
|
|
#define MSR_ME_BIT 19 // machine check enable
|
|
#define MSR_FE0_BIT 20 // floating point exception enable
|
|
#define MSR_SE_BIT 21 // single step trace enable
|
|
#define MSR_BE_BIT 22 // branch trace enable
|
|
#define MSR_FE1_BIT 23 // floating point exception enable
|
|
#define MSR_IP_BIT 25 // Exception prefix
|
|
#define MSR_IR_BIT 26 // instruction relocate
|
|
#define MSR_DR_BIT 27 // data relocate
|
|
#define MSR_PM_BIT 29 // Performance monitor marked mode
|
|
#define MSR_RI_BIT 30 // Recoverable interrupt
|
|
#define MSR_LE_BIT 31 // Little Endian
|
|
|
|
/*---------------------------------------------------------------------------*
|
|
HID0 bits
|
|
*---------------------------------------------------------------------------*/
|
|
#define HID0_EMCP 0x80000000 // Enable MCP
|
|
#define HID0_DBP 0x40000000 // Enable 60x bus address and data parity chk
|
|
#define HID0_EBA 0x20000000 // Enable 60x address parity checking
|
|
#define HID0_EBD 0x10000000 // Enable 60x data parity checking
|
|
#define HID0_BCLK 0x08000000 // CLK_OUT output enable and clk selection
|
|
#define HID0_ECLK 0x02000000 // CLK_OUT output enable and clk selection
|
|
#define HID0_PAR 0x01000000 // Disable !ARTRY precharge
|
|
#define HID0_DOZE 0x00800000 // Doze mode enable
|
|
#define HID0_NAP 0x00400000 // Nap mode enable
|
|
#define HID0_SLEEP 0x00200000 // Sleep mode enable
|
|
#define HID0_DPM 0x00100000 // Dynamic power management enable
|
|
#define HID0_NHR 0x00010000 // Not hard reset (0 hard reset if s/w set it)
|
|
#define HID0_ICE 0x00008000 // Instruction cache enable
|
|
#define HID0_DCE 0x00004000 // Data cache enable
|
|
#define HID0_ILOCK 0x00002000 // ICache lock
|
|
#define HID0_DLOCK 0x00001000 // DCache lock
|
|
#define HID0_ICFI 0x00000800 // ICache flash invalidate
|
|
#define HID0_DCFI 0x00000400 // DCache flash invalidate
|
|
#define HID0_SPD 0x00000200 // Speculative cache access enable (0 enable)
|
|
#define HID0_IFEM 0x00000100 // Enable M bit on bus for Ifetch
|
|
#define HID0_SGE 0x00000080 // Store gathering enable
|
|
#define HID0_DCFA 0x00000040 // DCache flush assist - set before a flush
|
|
#define HID0_BTIC 0x00000020 // Branch target icache enable
|
|
#define HID0_ABE 0x00000008 // Address bcast enable
|
|
#define HID0_BHT 0x00000004 // Branch history table enable
|
|
#define HID0_NOOPTI 0x00000001 // No-op Dcache touch instructions
|
|
|
|
#define HID0_ICE_BIT 16 // Instruction cache enable
|
|
#define HID0_DCE_BIT 17 // Data cache enable
|
|
#define HID0_ILOCK_BIT 18 // ICache lock
|
|
#define HID0_DLOCK_BIT 19 // DCache lock
|
|
|
|
#define HID2_LSQE 0x80000000 // L/S quantize enable
|
|
#define HID2_WPE 0x40000000 // Write pipe enable
|
|
#define HID2_PSE 0x20000000 // Paired single enable
|
|
#define HID2_LCE 0x10000000 // Locked cache enable
|
|
|
|
#define HID2_DCHERR 0x00800000 // ERROR: dcbz_l cache hit
|
|
#define HID2_DNCERR 0x00400000 // ERROR: DMA access to normal cache
|
|
#define HID2_DCMERR 0x00200000 // ERROR: DMA cache miss error
|
|
#define HID2_DQOERR 0x00100000 // ERROR: DMA queue overflow
|
|
#define HID2_DCHEE 0x00080000 // dcbz_l cache hit error enable
|
|
#define HID2_DNCEE 0x00040000 // DMA access to normal cache error enable
|
|
#define HID2_DCMEE 0x00020000 // DMA cache miss error error enable
|
|
#define HID2_DQOEE 0x00010000 // DMA queue overflow error enable
|
|
|
|
#define HID2_DMAQL_MASK 0x0F000000 // DMA queue length mask
|
|
#define HID2_DMAQL_SHIFT 24 // DMA queue shift
|
|
|
|
#define HID2_LSQE_BIT 0
|
|
#define HID2_WPE_BIT 1
|
|
#define HID2_PSE_BIT 2
|
|
#define HID2_LCE_BIT 3
|
|
|
|
#define HID2_DCHERR_BIT 8
|
|
#define HID2_DNCERR_BIT 9
|
|
#define HID2_DCMERR_BIT 10
|
|
#define HID2_DQOERR_BIT 11
|
|
#define HID2_DCHEE_BIT 12
|
|
#define HID2_DNCEE_BIT 13
|
|
#define HID2_DCMEE_BIT 14
|
|
#define HID2_DQOEE_BIT 15
|
|
|
|
#define GQR_LOAD_SCALE_MASK 0x3F000000 // load scale field
|
|
#define GQR_LOAD_TYPE_MASK 0x00070000 // load type field
|
|
#define GQR_STORE_SCALE_MASK 0x00003F00 // store scale field
|
|
#define GQR_STORE_TYPE_MASK 0x00000007 // store type field
|
|
|
|
typedef struct
|
|
{
|
|
u32 _pad0 :2;
|
|
u32 loadScale :6;
|
|
u32 _pad1 :5;
|
|
u32 loadType :3;
|
|
u32 _pad2 :2;
|
|
u32 storeScale :6;
|
|
u32 _pad3 :5;
|
|
u32 storeType :3;
|
|
} PPC_GQR_t;
|
|
|
|
typedef union
|
|
{
|
|
u32 val;
|
|
PPC_GQR_t f;
|
|
} PPC_GQR_u;
|
|
|
|
|
|
#define DMA_U_ADDR_MASK 0xFFFFFFE0 // Start addr in memory
|
|
#define DMA_U_LEN_U_MASK 0x0000001F // lines to transfer (U)
|
|
|
|
#define DMA_L_LC_ADDR_MASK 0xFFFFFFE0 // Start addr in LC
|
|
#define DMA_L_LOAD 0x00000010 // 0 - store, 1 - load
|
|
#define DMA_L_STORE 0x00000000 // 0 - store, 1 - load
|
|
#define DMA_L_LEN_MASK 0x0000000C // lines to transfer (L)
|
|
#define DMA_L_TRIGGER 0x00000002 // 0 - cmd inactive, 1 - cmd rdy
|
|
#define DMA_L_FLUSH 0x00000001 // 1 - Flush DMA queue
|
|
|
|
typedef struct
|
|
{
|
|
u32 memAddr :27;
|
|
u32 dmaLenU :5;
|
|
} PPC_DMA_U_t;
|
|
|
|
typedef union
|
|
{
|
|
u32 val;
|
|
PPC_DMA_U_t f;
|
|
} PPC_DMA_U_u;
|
|
|
|
|
|
typedef struct
|
|
{
|
|
u32 lcAddr :27;
|
|
u32 dmaLd :1;
|
|
u32 dmaLenL :2;
|
|
u32 dmaTrigger :1;
|
|
u32 dmaFlush :1;
|
|
} PPC_DMA_L_t;
|
|
|
|
|
|
typedef union
|
|
{
|
|
u32 val;
|
|
PPC_DMA_L_t f;
|
|
} PPC_DMA_L_u;
|
|
|
|
|
|
#define WPAR_ADDR 0xFFFFFFE0 // 32byte gather address
|
|
#define WPAR_BNE 0x00000001 // Buffer not empty (R)
|
|
|
|
#define SRR1_DMA_BIT 0x00200000
|
|
#define SRR1_L2DP_BIT 0x00100000
|
|
|
|
#define L2CR_L2E 0x80000000 // L2 Enable
|
|
#define L2CR_L2PE 0x40000000 // L2 data parity generation and checking enable
|
|
|
|
#define L2CR_L2SIZ_256K 0x10000000 // L2 size 256K
|
|
#define L2CR_L2SIZ_512K 0x20000000 // L2 size 512
|
|
#define L2CR_L2SIZ_1M 0x30000000 // L2 size 1M
|
|
|
|
#define L2CR_L2CLK_1_0 0x02000000 // L2 clock ratio 1
|
|
#define L2CR_L2CLK_1_5 0x04000000 // L2 clock ratio 1.5
|
|
#define L2CR_L2CLK_2_0 0x08000000 // L2 clock ratio 2
|
|
#define L2CR_L2CLK_2_5 0x0A000000 // L2 clock ratio 2.5
|
|
#define L2CR_L2CLK_3_0 0x0C000000 // L2 clock ratio 3
|
|
|
|
#define L2CR_RAM_FLOW_THRU_BURST 0x00000000 // L2 RAM type flow-through sync. burst SRAM
|
|
#define L2CR_RAM_PIPELINE_BURST 0x01000000 // L2 RAM type pipelined sync. burst SRAM
|
|
#define L2CR_RAM_PIPELINE_LATE 0x01800000 // L2 RAM type pipelined sync. late-write SRAM
|
|
|
|
#define L2CR_L2DO 0x00400000 // Data only
|
|
#define L2CR_L2I 0x00200000 // Global invalidate
|
|
#define L2CR_L2CTL 0x00100000 // ZZ enable
|
|
#define L2CR_L2WT 0x00080000 // L2 write through
|
|
#define L2CR_L2TS 0x00040000 // L2 test support
|
|
|
|
#define L2CR_L2OH_0_5 0x00000000 // L2 output hold 0.5 ns
|
|
#define L2CR_L2OH_1_0 0x00010000 // L2 output hold 1.0 ns
|
|
|
|
#define L2CR_L2SL 0x00008000 // L2 DLL slow
|
|
#define L2CR_L2DF 0x00004000 // L2 differential clock
|
|
#define L2CR_L2BYP 0x00002000 // L2 DLL bypass
|
|
#define L2CR_L2CS 0x00000200 // L2 clock stop
|
|
#define L2CR_L2DRO 0x00000100 // L2 DLL rollover checkstop enable
|
|
#define L2CR_L2CTR_MASK 0x000000FE // L2 counter value mask
|
|
#define L2CR_L2IP 0x00000001 // L2 global invalidate in progress
|
|
|
|
#define MMCR0_DIS 0x80000000 // Disables counting unconditionally
|
|
#define MMCR0_DP 0x40000000 // Disables counting while in supervisor mode
|
|
#define MMCR0_DU 0x20000000 // Disables counting while in user mode
|
|
#define MMCR0_DMS 0x10000000 // Disables counting while MSR[PM] is set
|
|
#define MMCR0_DMR 0x08000000 // Disables counting while MSR[PM] is zero
|
|
#define MMCR0_ENINT 0x04000000 // Enables performance monitor interrupt signaling
|
|
#define MMCR0_DISCOUNT 0x02000000 // Disables counting of PMCn when a performance monitor interrupt is signaled or...
|
|
#define MMCR0_RTCSELECT_MASK 0x01800000 // 64-bit time base, bit selection enable
|
|
#define MMCR0_RTCSELECT_63 0x00000000 // Pick bit 63 to count
|
|
#define MMCR0_RTCSELECT_55 0x00800000 // Pick bit 55 to count
|
|
#define MMCR0_RTCSELECT_51 0x01000000 // Pick bit 51 to count
|
|
#define MMCR0_RTCSELECT_47 0x01800000 // Pick bit 47 to count
|
|
#define MMCR0_INTONBITTRANS 0x00400000 // Causes interrupt signaling on bit transition from off to on
|
|
#define MMCR0_THRESHOLD_MASK 0x003F0000 // Threshold value
|
|
#define MMCR0_THRESHOLD(n) ((n) << 16) // Threshold value (0 - 63)
|
|
#define MMCR0_PMC1INTCONTROL 0x00008000 // Enables interrupt signaling due to PMC1 counter overflow
|
|
#define MMCR0_PMC2INTCONTROL 0x00004000 // Enables interrupt signaling due to PMC2-PMC4 counter overflow
|
|
#define MMCR0_PMCTRIGGER 0x00002000 // Can be used to trigger counting of PMC2-PMC4 after PMC1 has overflowed or...
|
|
#define MMCR0_PMC1SELECT_MASK 0x00001FC0 // PMC1 input selector
|
|
#define MMCR0_PMC2SELECT_MASK 0x0000003F // PMC2 input selector
|
|
|
|
#define MMCR1_PMC3SELECT_MASK 0xF8000000 // PMC3 input selector
|
|
#define MMCR1_PMC4SELECT_MASK 0x07C00000 // PMC4 input selector
|
|
|
|
#define PMC1_OV 0x80000000 // Overflow
|
|
#define PMC1_COUNTER 0x7FFFFFFF // Counter value
|
|
#define PMC2_OV 0x80000000 // Overflow
|
|
#define PMC2_COUNTER 0x7FFFFFFF // Counter value
|
|
#define PMC3_OV 0x80000000 // Overflow
|
|
#define PMC3_COUNTER 0x7FFFFFFF // Counter value
|
|
#define PMC4_OV 0x80000000 // Overflow
|
|
#define PMC4_COUNTER 0x7FFFFFFF // Counter value
|
|
|
|
/*---------------------------------------------------------------------------*
|
|
PMC1 Events
|
|
*---------------------------------------------------------------------------*/
|
|
#define MMCR0_PMC1_HOLD 0x00000000 // Register holds current value
|
|
#define MMCR0_PMC1_CYCLE 0x00000040 // Processor cycles
|
|
#define MMCR0_PMC1_INSTRUCTION 0x00000080 // # of instructions completed.
|
|
#define MMCR0_PMC1_TRANSITION 0x000000C0 // # of transitions for 0 to 1
|
|
#define MMCR0_PMC1_DISPATCHED 0x00000100 // # of instructions dispatched
|
|
#define MMCR0_PMC1_EIEIO 0x00000140 // # of eieio instructions completed
|
|
#define MMCR0_PMC1_ITLB_CYCLE 0x00000180 // # of cycles spent performing table search op. for the ITLB
|
|
#define MMCR0_PMC1_L2_HIT 0x000001C0 // # of access that hit the L2.
|
|
#define MMCR0_PMC1_EA 0x00000200 // # of valid instruction EAs delivered to the memory subsystem
|
|
#define MMCR0_PMC1_IABR 0x00000240 // # of time the address of an instruction matches the IABR
|
|
#define MMCR0_PMC1_L1_MISS 0x00000280 // # of loads that miss the L1
|
|
#define MMCR0_PMC1_Bx_UNRESOLVED 0x000002C0 // # of branches that are unresolved when processed
|
|
#define MMCR0_PMC1_Bx_STALL_CYCLE 0x00000300 // # of cycles that dispatcher stalls due to a second
|
|
// unresolved branch in the instruction stream
|
|
#define MMCR0_PMC1_IC_FETCH_MISS 0x00000340 // # of times an instruction fetch missed the L1 Icache
|
|
#define MMCR0_PMC2_HOLD 0x00000000 // Register holds current value
|
|
#define MMCR0_PMC2_CYCLE 0x00000001 // Processor cycles
|
|
#define MMCR0_PMC2_INSTRUCTION 0x00000002 // # of instructions completed
|
|
#define MMCR0_PMC2_TRANSITION 0x00000003 // # of time-base (lower) bit transitions
|
|
#define MMCR0_PMC2_DISPATCHED 0x00000004 // # of instructions dispatched
|
|
#define MMCR0_PMC2_IC_MISS 0x00000005 // # of L1 instruction cache misses
|
|
#define MMCR0_PMC2_ITLB_MISS 0x00000006 // # of ITLB misses
|
|
#define MMCR0_PMC2_L2_I_MISS 0x00000007 // # of L2 instruction misses
|
|
#define MMCR0_PMC2_Bx_FALL_TROUGH 0x00000008 // # of fall-through branches
|
|
#define MMCR0_PMC2_PR_SWITCH 0x00000009 // # of MSR[PR] bit toggles
|
|
#define MMCR0_PMC2_RESERVED_LOAD 0x0000000A // # of reserved loads completed
|
|
#define MMCR0_PMC2_LOAD_STORE 0x0000000B // # of completed loads and stores
|
|
#define MMCR0_PMC2_SNOOP 0x0000000C // # of snoops
|
|
#define MMCR0_PMC2_L1_CASTOUT 0x0000000D // # of L1 castouts to L2
|
|
#define MMCR0_PMC2_SYSTEM 0x0000000E // # of completed system unit instructions
|
|
#define MMCR0_PMC2_IC_FETCH_MISS 0x0000000F // # of instruction fetch misses in the L1
|
|
#define MMCR0_PMC2_Bx_OUT_OF_ORDER 0x00000010 // # of branches allowing out-of-order execution
|
|
|
|
/*---------------------------------------------------------------------------*
|
|
PMC3 Events
|
|
*---------------------------------------------------------------------------*/
|
|
#define MMCR1_PMC3_HOLD 0x00000000 // Register holds current value
|
|
#define MMCR1_PMC3_CYCLE 0x08000000 // Processor cycles
|
|
#define MMCR1_PMC3_INSTRUCTION 0x10000000 // # of instructions completed
|
|
#define MMCR1_PMC3_TRANSITION 0x18000000 // # of time-base (lower) bit transitions
|
|
#define MMCR1_PMC3_DISPATCHED 0x20000000 // # of instructions dispatched
|
|
#define MMCR1_PMC3_DC_MISS 0x28000000 // # of L1 data cache misses
|
|
#define MMCR1_PMC3_DTLB_MISS 0x30000000 // # of DTLB misses
|
|
#define MMCR1_PMC3_L2_D_MISS 0x38000000 // # of L2 data misses
|
|
#define MMCR1_PMC3_Bx_TAKEN 0x40000000 // # predicted branches that were taken
|
|
#define MMCR1_PMC3_PM_SWITCH 0x48000000 // # of transitions between marked and unmarked processes
|
|
#define MMCR1_PMC3_COND_STORE 0x50000000 // # of store conditional instructions completed
|
|
#define MMCR1_PMC3_FPU 0x58000000 // # of instructions completed from the FPU
|
|
#define MMCR1_PMC3_L2_SNOOP_CASTOUT 0x60000000 // # of L2 castout caused by snoops to modified lines
|
|
#define MMCR1_PMC3_L2_HIT 0x68000000 // # of cache operations that hit in the L2 cache
|
|
#define MMCR1_PMC3_L1_MISS_CYCLE 0x78000000 // # of cycles generated by L1 load misses
|
|
#define MMCR1_PMC3_Bx_SECOND 0x80000000 // # of branches in the second speculative branch
|
|
// resolved correctly
|
|
#define MMCR1_PMC3_BPU_LR_CR 0x88000000 // # of cycles the BPU stalls due to LR or CR unresolved
|
|
// dependencies
|
|
|
|
#define MMCR1_PMC4_HOLD 0x00000000 // Register holds current value
|
|
#define MMCR1_PMC4_CYCLE 0x00400000 // Processor cycles
|
|
#define MMCR1_PMC4_INSTRUCTION 0x00800000 // # of instructions completed
|
|
#define MMCR1_PMC4_TRANSITION 0x00C00000 // # of time-base (lower) bit transitions
|
|
#define MMCR1_PMC4_DISPATCHED 0x01000000 // # of instructions dispatched
|
|
#define MMCR1_PMC4_L2_CASTOUT 0x01400000 // # of L2 castouts
|
|
#define MMCR1_PMC4_DTLB_CYCLE 0x01800000 // # of cycles spent performing table searches for DTLB accesses
|
|
#define MMCR1_PMC4_Bx_MISSED 0x02000000 // # of mispredicted branches
|
|
#define MMCR1_PMC4_COND_STORE_INT 0x02800000 // # of store conditional instructions completed
|
|
// with reservation intact
|
|
#define MMCR1_PMC4_SYNC 0x02C00000 // # of completed sync instructions
|
|
#define MMCR1_PMC4_SNOOP_RETRY 0x03000000 // # of snoop request retries
|
|
#define MMCR1_PMC4_INTEGER 0x03400000 // # of completed integer operations
|
|
#define MMCR1_PMC4_BPU_THIRD 0x03800000 // # of cycles the BPU cannot process new branches
|
|
// due to having two unresolved branches
|
|
#define MMCR1_PMC4_DC_MISS 0x07C00000 // # of L1 data cache misses
|
|
|
|
/*---------------------------------------------------------------------------*
|
|
FPSCR bits
|
|
*---------------------------------------------------------------------------*/
|
|
#define FPSCR_FX 0x80000000 // Exception summary
|
|
#define FPSCR_FEX 0x40000000 // Enabled exception summary
|
|
#define FPSCR_VX 0x20000000 // Invalid operation
|
|
#define FPSCR_OX 0x10000000 // Overflow exception
|
|
#define FPSCR_UX 0x08000000 // Underflow exception
|
|
#define FPSCR_ZX 0x04000000 // Zero divide exception
|
|
#define FPSCR_XX 0x02000000 // Inexact exception
|
|
#define FPSCR_VXSNAN 0x01000000 // SNaN
|
|
#define FPSCR_VXISI 0x00800000 // Infinity - Infinity
|
|
#define FPSCR_VXIDI 0x00400000 // Infinity / Infinity
|
|
#define FPSCR_VXZDZ 0x00200000 // 0 / 0
|
|
#define FPSCR_VXIMZ 0x00100000 // Infinity * 0
|
|
#define FPSCR_VXVC 0x00080000 // Invalid compare
|
|
#define FPSCR_FR 0x00040000 // Fraction rounded
|
|
#define FPSCR_FI 0x00020000 // Fraction inexact
|
|
#define FPSCR_VXSOFT 0x00000400 // Software request
|
|
#define FPSCR_VXSQRT 0x00000200 // Invalid square root
|
|
#define FPSCR_VXCVI 0x00000100 // Invalid integer convert
|
|
#define FPSCR_VE 0x00000080 // Invalid operation exception enable
|
|
#define FPSCR_OE 0x00000040 // Overflow exception enable
|
|
#define FPSCR_UE 0x00000020 // Underflow exception enable
|
|
#define FPSCR_ZE 0x00000010 // Zero divide exception enable
|
|
#define FPSCR_XE 0x00000008 // Inexact exception enable
|
|
#define FPSCR_NI 0x00000004 // Non-IEEE mode
|
|
|
|
#define FPSCR_FX_BIT 0 // Exception summary
|
|
#define FPSCR_FEX_BIT 1 // Enabled exception summary
|
|
#define FPSCR_VX_BIT 2 // Invalid operation
|
|
#define FPSCR_OX_BIT 3 // Overflow exception
|
|
#define FPSCR_UX_BIT 4 // Underflow exception
|
|
#define FPSCR_ZX_BIT 5 // Zero divide exception
|
|
#define FPSCR_XX_BIT 6 // Inexact exception
|
|
#define FPSCR_VXSNAN_BIT 7 // SNaN
|
|
#define FPSCR_VXISI_BIT 8 // Infinity - Infinity
|
|
#define FPSCR_VXIDI_BIT 9 // Infinity / Infinity
|
|
#define FPSCR_VXZDZ_BIT 10 // 0 / 0
|
|
#define FPSCR_VXIMZ_BIT 11 // Infinity * 0
|
|
#define FPSCR_VXVC_BIT 12 // Invalid compare
|
|
#define FPSCR_FR_BIT 13 // Fraction rounded
|
|
#define FPSCR_FI_BIT 14 // Fraction inexact
|
|
#define FPSCR_VXSOFT_BIT 21 // Software request
|
|
#define FPSCR_VXSQRT_BIT 22 // Invalid square root
|
|
#define FPSCR_VXCVI_BIT 23 // Invalid integer convert
|
|
#define FPSCR_VE_BIT 24 // Invalid operation exception enable
|
|
#define FPSCR_OE_BIT 25 // Overflow exception enable
|
|
#define FPSCR_UE_BIT 26 // Underflow exception enable
|
|
#define FPSCR_ZE_BIT 27 // Zero divide exception enable
|
|
#define FPSCR_XE_BIT 28 // Inexact exception enable
|
|
#define FPSCR_NI_BIT 29 // Non-IEEE mode
|
|
|
|
u32 PPCMfmsr();
|
|
void PPCMtmsr(u32 newMSR);
|
|
u32 PPCOrMsr(u32 value);
|
|
u32 PPCMfhid0();
|
|
void PPCMthid0(u32 newHID0);
|
|
u32 PPCMfl2cr();
|
|
void PPCMtl2cr(u32 newL2cr);
|
|
void PPCMtdec(u32 newDec);
|
|
void PPCSync();
|
|
void PPCHalt();
|
|
u32 PPCMffpscr();
|
|
void PPCMtfpscr(u32 newFPSCR);
|
|
u32 PPCMfhid2();
|
|
void PPCMthid2(u32 newhid2);
|
|
u32 PPCMfwpar();
|
|
void PPCMtwpar(u32 newwpar);
|
|
void PPCEnableSpeculation();
|
|
void PPCDisableSpeculation();
|
|
void PPCSetFpIEEEMode();
|
|
void PPCSetFpNonIEEEMode();
|
|
|
|
/* "include\dolphin\db.h" line 3 "types.h" */
|
|
/* end "types.h" */
|
|
|
|
#define OS_DBINTERFACE_ADDR 0x00000040
|
|
|
|
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);
|
|
static void __DBExceptionDestination(void);
|
|
void DBPrintf(char* format, ...);
|
|
|
|
typedef u8 GXBool;
|
|
|
|
#define GX_FALSE ((GXBool)0)
|
|
#define GX_TRUE ((GXBool)1)
|
|
|
|
#define GX_ENABLE ((GXBool)1)
|
|
#define GX_DISABLE ((GXBool)0)
|
|
|
|
typedef enum _GXProjectionType {
|
|
GX_PERSPECTIVE,
|
|
GX_ORTHOGRAPHIC,
|
|
} GXProjectionType;
|
|
|
|
typedef enum _GXCompare {
|
|
GX_NEVER,
|
|
GX_LESS,
|
|
GX_EQUAL,
|
|
GX_LEQUAL,
|
|
GX_GREATER,
|
|
GX_NEQUAL,
|
|
GX_GEQUAL,
|
|
GX_ALWAYS,
|
|
} GXCompare;
|
|
|
|
typedef enum _GXAlphaOp {
|
|
GX_AOP_AND,
|
|
GX_AOP_OR,
|
|
GX_AOP_XOR,
|
|
GX_AOP_XNOR,
|
|
GX_MAX_ALPHAOP,
|
|
} GXAlphaOp;
|
|
|
|
typedef enum _GXZFmt16 {
|
|
GX_ZC_LINEAR,
|
|
GX_ZC_NEAR,
|
|
GX_ZC_MID,
|
|
GX_ZC_FAR,
|
|
} GXZFmt16;
|
|
|
|
typedef enum _GXGamma {
|
|
GX_GM_1_0,
|
|
GX_GM_1_7,
|
|
GX_GM_2_2,
|
|
} GXGamma;
|
|
|
|
typedef enum _GXPixelFmt {
|
|
GX_PF_RGB8_Z24,
|
|
GX_PF_RGBA6_Z24,
|
|
GX_PF_RGB565_Z16,
|
|
GX_PF_Z24,
|
|
GX_PF_Y8,
|
|
GX_PF_U8,
|
|
GX_PF_V8,
|
|
GX_PF_YUV420,
|
|
} GXPixelFmt;
|
|
|
|
typedef enum _GXPrimitive {
|
|
GX_QUADS = 0x80,
|
|
GX_TRIANGLES = 0x90,
|
|
GX_TRIANGLESTRIP = 0x98,
|
|
GX_TRIANGLEFAN = 0xA0,
|
|
GX_LINES = 0xA8,
|
|
GX_LINESTRIP = 0xB0,
|
|
GX_POINTS = 0xB8,
|
|
} GXPrimitive;
|
|
|
|
typedef enum _GXVtxFmt {
|
|
GX_VTXFMT0,
|
|
GX_VTXFMT1,
|
|
GX_VTXFMT2,
|
|
GX_VTXFMT3,
|
|
GX_VTXFMT4,
|
|
GX_VTXFMT5,
|
|
GX_VTXFMT6,
|
|
GX_VTXFMT7,
|
|
GX_MAX_VTXFMT,
|
|
} GXVtxFmt;
|
|
|
|
typedef enum _GXAttr {
|
|
GX_VA_PNMTXIDX,
|
|
GX_VA_TEX0MTXIDX,
|
|
GX_VA_TEX1MTXIDX,
|
|
GX_VA_TEX2MTXIDX,
|
|
GX_VA_TEX3MTXIDX,
|
|
GX_VA_TEX4MTXIDX,
|
|
GX_VA_TEX5MTXIDX,
|
|
GX_VA_TEX6MTXIDX,
|
|
GX_VA_TEX7MTXIDX,
|
|
GX_VA_POS,
|
|
GX_VA_NRM,
|
|
GX_VA_CLR0,
|
|
GX_VA_CLR1,
|
|
GX_VA_TEX0,
|
|
GX_VA_TEX1,
|
|
GX_VA_TEX2,
|
|
GX_VA_TEX3,
|
|
GX_VA_TEX4,
|
|
GX_VA_TEX5,
|
|
GX_VA_TEX6,
|
|
GX_VA_TEX7,
|
|
GX_POS_MTX_ARRAY,
|
|
GX_NRM_MTX_ARRAY,
|
|
GX_TEX_MTX_ARRAY,
|
|
GX_LIGHT_ARRAY,
|
|
GX_VA_NBT,
|
|
GX_VA_MAX_ATTR,
|
|
GX_VA_NULL = 0xFF,
|
|
} GXAttr;
|
|
|
|
#define GX_MAX_VTXDESCLIST_SZ (GX_VA_MAX_ATTR + 1)
|
|
|
|
typedef enum _GXAttrType {
|
|
GX_NONE,
|
|
GX_DIRECT,
|
|
GX_INDEX8,
|
|
GX_INDEX16,
|
|
} GXAttrType;
|
|
|
|
#define _GX_TF_CTF 32
|
|
#define _GX_TF_ZTF 16
|
|
|
|
typedef enum _GXTexFmt {
|
|
GX_TF_I4 = 0x0,
|
|
GX_TF_I8 = 0x1,
|
|
GX_TF_IA4 = 0x2,
|
|
GX_TF_IA8 = 0x3,
|
|
GX_TF_RGB565 = 0x4,
|
|
GX_TF_RGB5A3 = 0x5,
|
|
GX_TF_RGBA8 = 0x6,
|
|
GX_TF_CMPR = 0xE,
|
|
|
|
GX_CTF_R4 = 0x0 ,
|
|
GX_CTF_RA4 = 0x2 ,
|
|
GX_CTF_RA8 = 0x3 ,
|
|
GX_CTF_YUVA8 = 0x6 ,
|
|
GX_CTF_A8 = 0x7 ,
|
|
GX_CTF_R8 = 0x8 ,
|
|
GX_CTF_G8 = 0x9 ,
|
|
GX_CTF_B8 = 0xA ,
|
|
GX_CTF_RG8 = 0xB ,
|
|
GX_CTF_GB8 = 0xC ,
|
|
|
|
GX_TF_Z8 = 0x1 ,
|
|
GX_TF_Z16 = 0x3 ,
|
|
GX_TF_Z24X8 = 0x6 ,
|
|
|
|
GX_CTF_Z4 = 0x0 ,
|
|
GX_CTF_Z8M = 0x9 ,
|
|
GX_CTF_Z8L = 0xA ,
|
|
GX_CTF_Z16L = 0xC ,
|
|
|
|
GX_TF_A8 = GX_CTF_A8,
|
|
} GXTexFmt;
|
|
|
|
typedef enum _GXCITexFmt {
|
|
GX_TF_C4 = 0x8,
|
|
GX_TF_C8 = 0x9,
|
|
GX_TF_C14X2 = 0xa,
|
|
} GXCITexFmt;
|
|
|
|
typedef enum _GXTexWrapMode {
|
|
GX_CLAMP,
|
|
GX_REPEAT,
|
|
GX_MIRROR,
|
|
GX_MAX_TEXWRAPMODE,
|
|
} GXTexWrapMode;
|
|
|
|
typedef enum _GXTexFilter {
|
|
GX_NEAR,
|
|
GX_LINEAR,
|
|
GX_NEAR_MIP_NEAR,
|
|
GX_LIN_MIP_NEAR,
|
|
GX_NEAR_MIP_LIN,
|
|
GX_LIN_MIP_LIN,
|
|
} GXTexFilter;
|
|
|
|
typedef enum _GXAnisotropy {
|
|
GX_ANISO_1,
|
|
GX_ANISO_2,
|
|
GX_ANISO_4,
|
|
GX_MAX_ANISOTROPY,
|
|
} GXAnisotropy;
|
|
|
|
typedef enum _GXTexMapID {
|
|
GX_TEXMAP0,
|
|
GX_TEXMAP1,
|
|
GX_TEXMAP2,
|
|
GX_TEXMAP3,
|
|
GX_TEXMAP4,
|
|
GX_TEXMAP5,
|
|
GX_TEXMAP6,
|
|
GX_TEXMAP7,
|
|
GX_MAX_TEXMAP,
|
|
GX_TEXMAP_NULL = 0xFF,
|
|
GX_TEX_DISABLE = 0x100,
|
|
} GXTexMapID;
|
|
|
|
typedef enum _GXTexCoordID {
|
|
GX_TEXCOORD0,
|
|
GX_TEXCOORD1,
|
|
GX_TEXCOORD2,
|
|
GX_TEXCOORD3,
|
|
GX_TEXCOORD4,
|
|
GX_TEXCOORD5,
|
|
GX_TEXCOORD6,
|
|
GX_TEXCOORD7,
|
|
GX_MAX_TEXCOORD,
|
|
GX_TEXCOORD_NULL = 0xFF,
|
|
} GXTexCoordID;
|
|
|
|
typedef enum _GXTevStageID {
|
|
GX_TEVSTAGE0,
|
|
GX_TEVSTAGE1,
|
|
GX_TEVSTAGE2,
|
|
GX_TEVSTAGE3,
|
|
GX_TEVSTAGE4,
|
|
GX_TEVSTAGE5,
|
|
GX_TEVSTAGE6,
|
|
GX_TEVSTAGE7,
|
|
GX_TEVSTAGE8,
|
|
GX_TEVSTAGE9,
|
|
GX_TEVSTAGE10,
|
|
GX_TEVSTAGE11,
|
|
GX_TEVSTAGE12,
|
|
GX_TEVSTAGE13,
|
|
GX_TEVSTAGE14,
|
|
GX_TEVSTAGE15,
|
|
GX_MAX_TEVSTAGE,
|
|
} GXTevStageID;
|
|
|
|
typedef enum _GXTevMode {
|
|
GX_MODULATE,
|
|
GX_DECAL,
|
|
GX_BLEND,
|
|
GX_REPLACE,
|
|
GX_PASSCLR,
|
|
} GXTevMode;
|
|
|
|
typedef enum _GXTexMtxType {
|
|
GX_MTX3x4,
|
|
GX_MTX2x4,
|
|
} GXTexMtxType;
|
|
|
|
typedef enum _GXTexGenType {
|
|
GX_TG_MTX3x4,
|
|
GX_TG_MTX2x4,
|
|
GX_TG_BUMP0,
|
|
GX_TG_BUMP1,
|
|
GX_TG_BUMP2,
|
|
GX_TG_BUMP3,
|
|
GX_TG_BUMP4,
|
|
GX_TG_BUMP5,
|
|
GX_TG_BUMP6,
|
|
GX_TG_BUMP7,
|
|
GX_TG_SRTG,
|
|
} GXTexGenType;
|
|
|
|
typedef enum _GXPosNrmMtx {
|
|
GX_PNMTX0 = 0,
|
|
GX_PNMTX1 = 3,
|
|
GX_PNMTX2 = 6,
|
|
GX_PNMTX3 = 9,
|
|
GX_PNMTX4 = 12,
|
|
GX_PNMTX5 = 15,
|
|
GX_PNMTX6 = 18,
|
|
GX_PNMTX7 = 21,
|
|
GX_PNMTX8 = 24,
|
|
GX_PNMTX9 = 27,
|
|
} GXPosNrmMtx;
|
|
|
|
typedef enum _GXTexMtx {
|
|
GX_TEXMTX0 = 30,
|
|
GX_TEXMTX1 = 33,
|
|
GX_TEXMTX2 = 36,
|
|
GX_TEXMTX3 = 39,
|
|
GX_TEXMTX4 = 42,
|
|
GX_TEXMTX5 = 45,
|
|
GX_TEXMTX6 = 48,
|
|
GX_TEXMTX7 = 51,
|
|
GX_TEXMTX8 = 54,
|
|
GX_TEXMTX9 = 57,
|
|
GX_IDENTITY = 60,
|
|
} GXTexMtx;
|
|
|
|
typedef enum _GXChannelID {
|
|
GX_COLOR0,
|
|
GX_COLOR1,
|
|
GX_ALPHA0,
|
|
GX_ALPHA1,
|
|
GX_COLOR0A0,
|
|
GX_COLOR1A1,
|
|
GX_COLOR_ZERO,
|
|
GX_ALPHA_BUMP,
|
|
GX_ALPHA_BUMPN,
|
|
GX_COLOR_NULL = 0xFF,
|
|
} GXChannelID;
|
|
|
|
typedef enum _GXTexGenSrc {
|
|
GX_TG_POS,
|
|
GX_TG_NRM,
|
|
GX_TG_BINRM,
|
|
GX_TG_TANGENT,
|
|
GX_TG_TEX0,
|
|
GX_TG_TEX1,
|
|
GX_TG_TEX2,
|
|
GX_TG_TEX3,
|
|
GX_TG_TEX4,
|
|
GX_TG_TEX5,
|
|
GX_TG_TEX6,
|
|
GX_TG_TEX7,
|
|
GX_TG_TEXCOORD0,
|
|
GX_TG_TEXCOORD1,
|
|
GX_TG_TEXCOORD2,
|
|
GX_TG_TEXCOORD3,
|
|
GX_TG_TEXCOORD4,
|
|
GX_TG_TEXCOORD5,
|
|
GX_TG_TEXCOORD6,
|
|
GX_TG_COLOR0,
|
|
GX_TG_COLOR1,
|
|
GX_MAX_TEXGENSRC,
|
|
} GXTexGenSrc;
|
|
|
|
typedef enum _GXBlendMode {
|
|
GX_BM_NONE,
|
|
GX_BM_BLEND,
|
|
GX_BM_LOGIC,
|
|
GX_BM_SUBTRACT,
|
|
GX_MAX_BLENDMODE,
|
|
} GXBlendMode;
|
|
|
|
typedef enum _GXBlendFactor {
|
|
GX_BL_ZERO,
|
|
GX_BL_ONE,
|
|
GX_BL_SRCCLR,
|
|
GX_BL_INVSRCCLR,
|
|
GX_BL_SRCALPHA,
|
|
GX_BL_INVSRCALPHA,
|
|
GX_BL_DSTALPHA,
|
|
GX_BL_INVDSTALPHA,
|
|
GX_BL_DSTCLR = GX_BL_SRCCLR,
|
|
GX_BL_INVDSTCLR = GX_BL_INVSRCCLR,
|
|
} GXBlendFactor;
|
|
|
|
typedef enum _GXLogicOp {
|
|
GX_LO_CLEAR,
|
|
GX_LO_AND,
|
|
GX_LO_REVAND,
|
|
GX_LO_COPY,
|
|
GX_LO_INVAND,
|
|
GX_LO_NOOP,
|
|
GX_LO_XOR,
|
|
GX_LO_OR,
|
|
GX_LO_NOR,
|
|
GX_LO_EQUIV,
|
|
GX_LO_INV,
|
|
GX_LO_REVOR,
|
|
GX_LO_INVCOPY,
|
|
GX_LO_INVOR,
|
|
GX_LO_NAND,
|
|
GX_LO_SET,
|
|
} GXLogicOp;
|
|
|
|
typedef enum _GXCompCnt {
|
|
GX_POS_XY = 0,
|
|
GX_POS_XYZ = 1,
|
|
GX_NRM_XYZ = 0,
|
|
GX_NRM_NBT = 1,
|
|
GX_NRM_NBT3 = 2,
|
|
GX_CLR_RGB = 0,
|
|
GX_CLR_RGBA = 1,
|
|
GX_TEX_S = 0,
|
|
GX_TEX_ST = 1,
|
|
} GXCompCnt;
|
|
|
|
typedef enum _GXCompType {
|
|
GX_U8 = 0,
|
|
GX_S8 = 1,
|
|
GX_U16 = 2,
|
|
GX_S16 = 3,
|
|
GX_F32 = 4,
|
|
GX_RGB565 = 0,
|
|
GX_RGB8 = 1,
|
|
GX_RGBX8 = 2,
|
|
GX_RGBA4 = 3,
|
|
GX_RGBA6 = 4,
|
|
GX_RGBA8 = 5,
|
|
} GXCompType;
|
|
|
|
typedef enum _GXPTTexMtx {
|
|
GX_PTTEXMTX0 = 64,
|
|
GX_PTTEXMTX1 = 67,
|
|
GX_PTTEXMTX2 = 70,
|
|
GX_PTTEXMTX3 = 73,
|
|
GX_PTTEXMTX4 = 76,
|
|
GX_PTTEXMTX5 = 79,
|
|
GX_PTTEXMTX6 = 82,
|
|
GX_PTTEXMTX7 = 85,
|
|
GX_PTTEXMTX8 = 88,
|
|
GX_PTTEXMTX9 = 91,
|
|
GX_PTTEXMTX10 = 94,
|
|
GX_PTTEXMTX11 = 97,
|
|
GX_PTTEXMTX12 = 100,
|
|
GX_PTTEXMTX13 = 103,
|
|
GX_PTTEXMTX14 = 106,
|
|
GX_PTTEXMTX15 = 109,
|
|
GX_PTTEXMTX16 = 112,
|
|
GX_PTTEXMTX17 = 115,
|
|
GX_PTTEXMTX18 = 118,
|
|
GX_PTTEXMTX19 = 121,
|
|
GX_PTIDENTITY = 125,
|
|
} GXPTTexMtx;
|
|
|
|
typedef enum _GXTevRegID {
|
|
GX_TEVPREV,
|
|
GX_TEVREG0,
|
|
GX_TEVREG1,
|
|
GX_TEVREG2,
|
|
GX_MAX_TEVREG,
|
|
} GXTevRegID;
|
|
|
|
typedef enum _GXDiffuseFn {
|
|
GX_DF_NONE,
|
|
GX_DF_SIGN,
|
|
GX_DF_CLAMP,
|
|
} GXDiffuseFn;
|
|
|
|
typedef enum _GXColorSrc {
|
|
GX_SRC_REG,
|
|
GX_SRC_VTX,
|
|
} GXColorSrc;
|
|
|
|
typedef enum _GXAttnFn {
|
|
GX_AF_SPEC,
|
|
GX_AF_SPOT,
|
|
GX_AF_NONE,
|
|
} GXAttnFn;
|
|
|
|
typedef enum _GXLightID {
|
|
GX_LIGHT0 = 0x001,
|
|
GX_LIGHT1 = 0x002,
|
|
GX_LIGHT2 = 0x004,
|
|
GX_LIGHT3 = 0x008,
|
|
GX_LIGHT4 = 0x010,
|
|
GX_LIGHT5 = 0x020,
|
|
GX_LIGHT6 = 0x040,
|
|
GX_LIGHT7 = 0x080,
|
|
GX_MAX_LIGHT = 0x100,
|
|
GX_LIGHT_NULL = 0,
|
|
} GXLightID;
|
|
|
|
typedef enum _GXTexOffset {
|
|
GX_TO_ZERO,
|
|
GX_TO_SIXTEENTH,
|
|
GX_TO_EIGHTH,
|
|
GX_TO_FOURTH,
|
|
GX_TO_HALF,
|
|
GX_TO_ONE,
|
|
GX_MAX_TEXOFFSET,
|
|
} GXTexOffset;
|
|
|
|
typedef enum _GXSpotFn {
|
|
GX_SP_OFF,
|
|
GX_SP_FLAT,
|
|
GX_SP_COS,
|
|
GX_SP_COS2,
|
|
GX_SP_SHARP,
|
|
GX_SP_RING1,
|
|
GX_SP_RING2,
|
|
} GXSpotFn;
|
|
|
|
typedef enum _GXDistAttnFn {
|
|
GX_DA_OFF,
|
|
GX_DA_GENTLE,
|
|
GX_DA_MEDIUM,
|
|
GX_DA_STEEP,
|
|
} GXDistAttnFn;
|
|
|
|
typedef enum _GXCullMode {
|
|
GX_CULL_NONE,
|
|
GX_CULL_FRONT,
|
|
GX_CULL_BACK,
|
|
GX_CULL_ALL,
|
|
} GXCullMode;
|
|
|
|
typedef enum _GXTevSwapSel {
|
|
GX_TEV_SWAP0 = 0,
|
|
GX_TEV_SWAP1,
|
|
GX_TEV_SWAP2,
|
|
GX_TEV_SWAP3,
|
|
GX_MAX_TEVSWAP,
|
|
} GXTevSwapSel;
|
|
|
|
typedef enum _GXTevColorChan {
|
|
GX_CH_RED = 0,
|
|
GX_CH_GREEN,
|
|
GX_CH_BLUE,
|
|
GX_CH_ALPHA,
|
|
} GXTevColorChan;
|
|
|
|
typedef enum _GXFogType {
|
|
GX_FOG_NONE = 0,
|
|
GX_FOG_PERSP_LIN = 2,
|
|
GX_FOG_PERSP_EXP = 4,
|
|
GX_FOG_PERSP_EXP2 = 5,
|
|
GX_FOG_PERSP_REVEXP = 6,
|
|
GX_FOG_PERSP_REVEXP2 = 7,
|
|
GX_FOG_ORTHO_LIN = 10,
|
|
GX_FOG_ORTHO_EXP = 12,
|
|
GX_FOG_ORTHO_EXP2 = 13,
|
|
GX_FOG_ORTHO_REVEXP = 14,
|
|
GX_FOG_ORTHO_REVEXP2 = 15,
|
|
GX_FOG_LIN = GX_FOG_PERSP_LIN,
|
|
GX_FOG_EXP = GX_FOG_PERSP_EXP,
|
|
GX_FOG_EXP2 = GX_FOG_PERSP_EXP2,
|
|
GX_FOG_REVEXP = GX_FOG_PERSP_REVEXP,
|
|
GX_FOG_REVEXP2 = GX_FOG_PERSP_REVEXP2,
|
|
} GXFogType;
|
|
|
|
typedef enum _GXTevColorArg {
|
|
GX_CC_CPREV,
|
|
GX_CC_APREV,
|
|
GX_CC_C0,
|
|
GX_CC_A0,
|
|
GX_CC_C1,
|
|
GX_CC_A1,
|
|
GX_CC_C2,
|
|
GX_CC_A2,
|
|
GX_CC_TEXC,
|
|
GX_CC_TEXA,
|
|
GX_CC_RASC,
|
|
GX_CC_RASA,
|
|
GX_CC_ONE,
|
|
GX_CC_HALF,
|
|
GX_CC_KONST,
|
|
GX_CC_ZERO,
|
|
} GXTevColorArg;
|
|
|
|
typedef enum _GXTevAlphaArg {
|
|
GX_CA_APREV,
|
|
GX_CA_A0,
|
|
GX_CA_A1,
|
|
GX_CA_A2,
|
|
GX_CA_TEXA,
|
|
GX_CA_RASA,
|
|
GX_CA_KONST,
|
|
GX_CA_ZERO,
|
|
} GXTevAlphaArg;
|
|
|
|
typedef enum _GXTevOp {
|
|
GX_TEV_ADD = 0,
|
|
GX_TEV_SUB = 1,
|
|
GX_TEV_COMP_R8_GT = 8,
|
|
GX_TEV_COMP_R8_EQ = 9,
|
|
GX_TEV_COMP_GR16_GT = 10,
|
|
GX_TEV_COMP_GR16_EQ = 11,
|
|
GX_TEV_COMP_BGR24_GT = 12,
|
|
GX_TEV_COMP_BGR24_EQ = 13,
|
|
GX_TEV_COMP_RGB8_GT = 14,
|
|
GX_TEV_COMP_RGB8_EQ = 15,
|
|
GX_TEV_COMP_A8_GT = GX_TEV_COMP_RGB8_GT,
|
|
GX_TEV_COMP_A8_EQ = GX_TEV_COMP_RGB8_EQ,
|
|
} GXTevOp;
|
|
|
|
typedef enum _GXTevBias {
|
|
GX_TB_ZERO,
|
|
GX_TB_ADDHALF,
|
|
GX_TB_SUBHALF,
|
|
GX_MAX_TEVBIAS,
|
|
} GXTevBias;
|
|
|
|
typedef enum _GXTevScale {
|
|
GX_CS_SCALE_1,
|
|
GX_CS_SCALE_2,
|
|
GX_CS_SCALE_4,
|
|
GX_CS_DIVIDE_2,
|
|
GX_MAX_TEVSCALE,
|
|
} GXTevScale;
|
|
|
|
typedef enum _GXTevKColorSel {
|
|
GX_TEV_KCSEL_8_8 = 0x00,
|
|
GX_TEV_KCSEL_7_8 = 0x01,
|
|
GX_TEV_KCSEL_6_8 = 0x02,
|
|
GX_TEV_KCSEL_5_8 = 0x03,
|
|
GX_TEV_KCSEL_4_8 = 0x04,
|
|
GX_TEV_KCSEL_3_8 = 0x05,
|
|
GX_TEV_KCSEL_2_8 = 0x06,
|
|
GX_TEV_KCSEL_1_8 = 0x07,
|
|
GX_TEV_KCSEL_1 = GX_TEV_KCSEL_8_8,
|
|
GX_TEV_KCSEL_3_4 = GX_TEV_KCSEL_6_8,
|
|
GX_TEV_KCSEL_1_2 = GX_TEV_KCSEL_4_8,
|
|
GX_TEV_KCSEL_1_4 = GX_TEV_KCSEL_2_8,
|
|
GX_TEV_KCSEL_K0 = 0x0C,
|
|
GX_TEV_KCSEL_K1 = 0x0D,
|
|
GX_TEV_KCSEL_K2 = 0x0E,
|
|
GX_TEV_KCSEL_K3 = 0x0F,
|
|
GX_TEV_KCSEL_K0_R = 0x10,
|
|
GX_TEV_KCSEL_K1_R = 0x11,
|
|
GX_TEV_KCSEL_K2_R = 0x12,
|
|
GX_TEV_KCSEL_K3_R = 0x13,
|
|
GX_TEV_KCSEL_K0_G = 0x14,
|
|
GX_TEV_KCSEL_K1_G = 0x15,
|
|
GX_TEV_KCSEL_K2_G = 0x16,
|
|
GX_TEV_KCSEL_K3_G = 0x17,
|
|
GX_TEV_KCSEL_K0_B = 0x18,
|
|
GX_TEV_KCSEL_K1_B = 0x19,
|
|
GX_TEV_KCSEL_K2_B = 0x1A,
|
|
GX_TEV_KCSEL_K3_B = 0x1B,
|
|
GX_TEV_KCSEL_K0_A = 0x1C,
|
|
GX_TEV_KCSEL_K1_A = 0x1D,
|
|
GX_TEV_KCSEL_K2_A = 0x1E,
|
|
GX_TEV_KCSEL_K3_A = 0x1F,
|
|
} GXTevKColorSel;
|
|
|
|
typedef enum _GXTevKAlphaSel {
|
|
GX_TEV_KASEL_8_8 = 0x00,
|
|
GX_TEV_KASEL_7_8 = 0x01,
|
|
GX_TEV_KASEL_6_8 = 0x02,
|
|
GX_TEV_KASEL_5_8 = 0x03,
|
|
GX_TEV_KASEL_4_8 = 0x04,
|
|
GX_TEV_KASEL_3_8 = 0x05,
|
|
GX_TEV_KASEL_2_8 = 0x06,
|
|
GX_TEV_KASEL_1_8 = 0x07,
|
|
GX_TEV_KASEL_1 = GX_TEV_KASEL_8_8,
|
|
GX_TEV_KASEL_3_4 = GX_TEV_KASEL_6_8,
|
|
GX_TEV_KASEL_1_2 = GX_TEV_KASEL_4_8,
|
|
GX_TEV_KASEL_1_4 = GX_TEV_KASEL_2_8,
|
|
GX_TEV_KASEL_K0_R = 0x10,
|
|
GX_TEV_KASEL_K1_R = 0x11,
|
|
GX_TEV_KASEL_K2_R = 0x12,
|
|
GX_TEV_KASEL_K3_R = 0x13,
|
|
GX_TEV_KASEL_K0_G = 0x14,
|
|
GX_TEV_KASEL_K1_G = 0x15,
|
|
GX_TEV_KASEL_K2_G = 0x16,
|
|
GX_TEV_KASEL_K3_G = 0x17,
|
|
GX_TEV_KASEL_K0_B = 0x18,
|
|
GX_TEV_KASEL_K1_B = 0x19,
|
|
GX_TEV_KASEL_K2_B = 0x1A,
|
|
GX_TEV_KASEL_K3_B = 0x1B,
|
|
GX_TEV_KASEL_K0_A = 0x1C,
|
|
GX_TEV_KASEL_K1_A = 0x1D,
|
|
GX_TEV_KASEL_K2_A = 0x1E,
|
|
GX_TEV_KASEL_K3_A = 0x1F,
|
|
} GXTevKAlphaSel;
|
|
|
|
typedef enum _GXTevKColorID {
|
|
GX_KCOLOR0 = 0,
|
|
GX_KCOLOR1,
|
|
GX_KCOLOR2,
|
|
GX_KCOLOR3,
|
|
GX_MAX_KCOLOR,
|
|
} GXTevKColorID;
|
|
|
|
typedef enum _GXZTexOp {
|
|
GX_ZT_DISABLE,
|
|
GX_ZT_ADD,
|
|
GX_ZT_REPLACE,
|
|
GX_MAX_ZTEXOP,
|
|
} GXZTexOp;
|
|
|
|
typedef enum _GXIndTexFormat {
|
|
GX_ITF_8,
|
|
GX_ITF_5,
|
|
GX_ITF_4,
|
|
GX_ITF_3,
|
|
GX_MAX_ITFORMAT,
|
|
} GXIndTexFormat;
|
|
|
|
typedef enum _GXIndTexBiasSel {
|
|
GX_ITB_NONE,
|
|
GX_ITB_S,
|
|
GX_ITB_T,
|
|
GX_ITB_ST,
|
|
GX_ITB_U,
|
|
GX_ITB_SU,
|
|
GX_ITB_TU,
|
|
GX_ITB_STU,
|
|
GX_MAX_ITBIAS,
|
|
} GXIndTexBiasSel;
|
|
|
|
typedef enum _GXIndTexAlphaSel {
|
|
GX_ITBA_OFF,
|
|
GX_ITBA_S,
|
|
GX_ITBA_T,
|
|
GX_ITBA_U,
|
|
GX_MAX_ITBALPHA,
|
|
} GXIndTexAlphaSel;
|
|
|
|
typedef enum _GXIndTexMtxID {
|
|
GX_ITM_OFF,
|
|
GX_ITM_0,
|
|
GX_ITM_1,
|
|
GX_ITM_2,
|
|
GX_ITM_S0 = 5,
|
|
GX_ITM_S1,
|
|
GX_ITM_S2,
|
|
GX_ITM_T0 = 9,
|
|
GX_ITM_T1,
|
|
GX_ITM_T2,
|
|
} GXIndTexMtxID;
|
|
|
|
typedef enum _GXIndTexWrap {
|
|
GX_ITW_OFF,
|
|
GX_ITW_256,
|
|
GX_ITW_128,
|
|
GX_ITW_64,
|
|
GX_ITW_32,
|
|
GX_ITW_16,
|
|
GX_ITW_0,
|
|
GX_MAX_ITWRAP,
|
|
} GXIndTexWrap;
|
|
|
|
typedef enum _GXIndTexStageID {
|
|
GX_INDTEXSTAGE0,
|
|
GX_INDTEXSTAGE1,
|
|
GX_INDTEXSTAGE2,
|
|
GX_INDTEXSTAGE3,
|
|
GX_MAX_INDTEXSTAGE,
|
|
} GXIndTexStageID;
|
|
|
|
typedef enum _GXIndTexScale {
|
|
GX_ITS_1,
|
|
GX_ITS_2,
|
|
GX_ITS_4,
|
|
GX_ITS_8,
|
|
GX_ITS_16,
|
|
GX_ITS_32,
|
|
GX_ITS_64,
|
|
GX_ITS_128,
|
|
GX_ITS_256,
|
|
GX_MAX_ITSCALE,
|
|
} GXIndTexScale;
|
|
|
|
typedef enum _GXClipMode {
|
|
GX_CLIP_ENABLE = 0,
|
|
GX_CLIP_DISABLE = 1,
|
|
} GXClipMode;
|
|
|
|
typedef enum _GXTlut {
|
|
GX_TLUT0 = 0,
|
|
GX_TLUT1 = 1,
|
|
GX_TLUT2 = 2,
|
|
GX_TLUT3 = 3,
|
|
GX_TLUT4 = 4,
|
|
GX_TLUT5 = 5,
|
|
GX_TLUT6 = 6,
|
|
GX_TLUT7 = 7,
|
|
GX_TLUT8 = 8,
|
|
GX_TLUT9 = 9,
|
|
GX_TLUT10 = 10,
|
|
GX_TLUT11 = 11,
|
|
GX_TLUT12 = 12,
|
|
GX_TLUT13 = 13,
|
|
GX_TLUT14 = 14,
|
|
GX_TLUT15 = 15,
|
|
GX_BIGTLUT0 = 16,
|
|
GX_BIGTLUT1 = 17,
|
|
GX_BIGTLUT2 = 18,
|
|
GX_BIGTLUT3 = 19,
|
|
} GXTlut;
|
|
|
|
typedef enum _GXTlutFmt {
|
|
GX_TL_IA8,
|
|
GX_TL_RGB565,
|
|
GX_TL_RGB5A3,
|
|
GX_MAX_TLUTFMT,
|
|
} GXTlutFmt;
|
|
|
|
typedef enum _GXMiscToken {
|
|
GX_MT_NULL = 0,
|
|
GX_MT_XF_FLUSH = 1,
|
|
GX_MT_DL_SAVE_CONTEXT = 2,
|
|
GX_MT_ABORT_WAIT_COPYOUT = 3,
|
|
} GXMiscToken;
|
|
|
|
typedef enum _GXTexCacheSize {
|
|
GX_TEXCACHE_32K,
|
|
GX_TEXCACHE_128K,
|
|
GX_TEXCACHE_512K,
|
|
GX_TEXCACHE_NONE
|
|
} GXTexCacheSize;
|
|
|
|
typedef enum _GXPerf0 {
|
|
GX_PERF0_VERTICES,
|
|
GX_PERF0_CLIP_VTX,
|
|
GX_PERF0_CLIP_CLKS,
|
|
GX_PERF0_XF_WAIT_IN,
|
|
GX_PERF0_XF_WAIT_OUT,
|
|
GX_PERF0_XF_XFRM_CLKS,
|
|
GX_PERF0_XF_LIT_CLKS,
|
|
GX_PERF0_XF_BOT_CLKS,
|
|
GX_PERF0_XF_REGLD_CLKS,
|
|
GX_PERF0_XF_REGRD_CLKS,
|
|
GX_PERF0_CLIP_RATIO,
|
|
|
|
GX_PERF0_TRIANGLES,
|
|
GX_PERF0_TRIANGLES_CULLED,
|
|
GX_PERF0_TRIANGLES_PASSED,
|
|
GX_PERF0_TRIANGLES_SCISSORED,
|
|
GX_PERF0_TRIANGLES_0TEX,
|
|
GX_PERF0_TRIANGLES_1TEX,
|
|
GX_PERF0_TRIANGLES_2TEX,
|
|
GX_PERF0_TRIANGLES_3TEX,
|
|
GX_PERF0_TRIANGLES_4TEX,
|
|
GX_PERF0_TRIANGLES_5TEX,
|
|
GX_PERF0_TRIANGLES_6TEX,
|
|
GX_PERF0_TRIANGLES_7TEX,
|
|
GX_PERF0_TRIANGLES_8TEX,
|
|
GX_PERF0_TRIANGLES_0CLR,
|
|
GX_PERF0_TRIANGLES_1CLR,
|
|
GX_PERF0_TRIANGLES_2CLR,
|
|
|
|
GX_PERF0_QUAD_0CVG,
|
|
GX_PERF0_QUAD_NON0CVG,
|
|
GX_PERF0_QUAD_1CVG,
|
|
GX_PERF0_QUAD_2CVG,
|
|
GX_PERF0_QUAD_3CVG,
|
|
GX_PERF0_QUAD_4CVG,
|
|
GX_PERF0_AVG_QUAD_CNT,
|
|
|
|
GX_PERF0_CLOCKS,
|
|
GX_PERF0_NONE
|
|
|
|
} GXPerf0;
|
|
|
|
typedef enum _GXPerf1 {
|
|
GX_PERF1_TEXELS,
|
|
GX_PERF1_TX_IDLE,
|
|
GX_PERF1_TX_REGS,
|
|
GX_PERF1_TX_MEMSTALL,
|
|
GX_PERF1_TC_CHECK1_2,
|
|
GX_PERF1_TC_CHECK3_4,
|
|
GX_PERF1_TC_CHECK5_6,
|
|
GX_PERF1_TC_CHECK7_8,
|
|
GX_PERF1_TC_MISS,
|
|
|
|
GX_PERF1_VC_ELEMQ_FULL,
|
|
GX_PERF1_VC_MISSQ_FULL,
|
|
GX_PERF1_VC_MEMREQ_FULL,
|
|
GX_PERF1_VC_STATUS7,
|
|
GX_PERF1_VC_MISSREP_FULL,
|
|
GX_PERF1_VC_STREAMBUF_LOW,
|
|
GX_PERF1_VC_ALL_STALLS,
|
|
GX_PERF1_VERTICES,
|
|
|
|
GX_PERF1_FIFO_REQ,
|
|
GX_PERF1_CALL_REQ,
|
|
GX_PERF1_VC_MISS_REQ,
|
|
GX_PERF1_CP_ALL_REQ,
|
|
|
|
GX_PERF1_CLOCKS,
|
|
GX_PERF1_NONE
|
|
|
|
} GXPerf1;
|
|
|
|
typedef enum _GXVCachePerf {
|
|
GX_VC_POS,
|
|
GX_VC_NRM,
|
|
GX_VC_CLR0,
|
|
GX_VC_CLR1,
|
|
GX_VC_TEX0,
|
|
GX_VC_TEX1,
|
|
GX_VC_TEX2,
|
|
GX_VC_TEX3,
|
|
GX_VC_TEX4,
|
|
GX_VC_TEX5,
|
|
GX_VC_TEX6,
|
|
GX_VC_TEX7,
|
|
GX_VC_ALL = 0xf
|
|
|
|
} GXVCachePerf;
|
|
|
|
typedef enum _GXFBClamp {
|
|
GX_CLAMP_NONE = 0,
|
|
GX_CLAMP_TOP = 1,
|
|
GX_CLAMP_BOTTOM = 2,
|
|
} GXFBClamp;
|
|
|
|
typedef enum _GXCopyMode {
|
|
GX_COPY_PROGRESSIVE = 0,
|
|
GX_COPY_INTLC_EVEN = 2,
|
|
GX_COPY_INTLC_ODD = 3,
|
|
} GXCopyMode;
|
|
|
|
typedef enum _GXAlphaReadMode {
|
|
GX_READ_00 = 0,
|
|
GX_READ_FF = 1,
|
|
GX_READ_NONE = 2,
|
|
|
|
} _GXAlphaReadMode;
|
|
|
|
#define VI_INTERLACE 0
|
|
#define VI_NON_INTERLACE 1
|
|
#define VI_PROGRESSIVE 2
|
|
#define VI_3D 3
|
|
|
|
#define VI_NTSC 0
|
|
#define VI_PAL 1
|
|
#define VI_MPAL 2
|
|
#define VI_DEBUG 3
|
|
#define VI_DEBUG_PAL 4
|
|
#define VI_EURGB60 5
|
|
#define VI_GCA 6
|
|
|
|
#define VI_TVMODE(format, interlace) (((format) << 2) + (interlace))
|
|
|
|
typedef enum {
|
|
// NTSC
|
|
VI_TVMODE_NTSC_INT = VI_TVMODE(VI_NTSC, VI_INTERLACE),
|
|
VI_TVMODE_NTSC_DS = VI_TVMODE(VI_NTSC, VI_NON_INTERLACE),
|
|
VI_TVMODE_NTSC_PROG = VI_TVMODE(VI_NTSC, VI_PROGRESSIVE),
|
|
VI_TVMODE_NTSC_3D = VI_TVMODE(VI_NTSC, VI_3D),
|
|
// PAL
|
|
VI_TVMODE_PAL_INT = VI_TVMODE(VI_PAL, VI_INTERLACE),
|
|
VI_TVMODE_PAL_DS = VI_TVMODE(VI_PAL, VI_NON_INTERLACE),
|
|
|
|
// MPAL
|
|
VI_TVMODE_MPAL_INT = VI_TVMODE(VI_MPAL, VI_INTERLACE),
|
|
VI_TVMODE_MPAL_DS = VI_TVMODE(VI_MPAL, VI_NON_INTERLACE),
|
|
|
|
// Debug
|
|
VI_TVMODE_DEBUG_INT = VI_TVMODE(VI_DEBUG, VI_INTERLACE),
|
|
|
|
// Debug PAL
|
|
VI_TVMODE_DEBUG_PAL_INT = VI_TVMODE(VI_DEBUG_PAL, VI_INTERLACE),
|
|
VI_TVMODE_DEBUG_PAL_DS = VI_TVMODE(VI_DEBUG_PAL, VI_NON_INTERLACE),
|
|
|
|
// EU RGB60
|
|
VI_TVMODE_EURGB60_INT = VI_TVMODE(VI_EURGB60, VI_INTERLACE),
|
|
VI_TVMODE_EURGB60_DS = VI_TVMODE(VI_EURGB60, VI_NON_INTERLACE),
|
|
|
|
// GCA
|
|
VI_TVMODE_GCA_INT = VI_TVMODE(VI_GCA, VI_INTERLACE),
|
|
VI_TVMODE_GCA_DS = VI_TVMODE(VI_GCA, VI_NON_INTERLACE),
|
|
VI_TVMODE_GCA_PROG = VI_TVMODE(VI_GCA, VI_PROGRESSIVE),
|
|
} VITVMode;
|
|
|
|
typedef enum {
|
|
VI_XFBMODE_SF = 0,
|
|
VI_XFBMODE_DF = 1,
|
|
} VIXFBMode;
|
|
|
|
typedef void (*VIPositionCallback)(s16 x, s16 y);
|
|
typedef void (*VIRetraceCallback)(u32 retraceCount);
|
|
|
|
// Structure to use with timing in vi.c (size 0x28).
|
|
typedef struct VITimingInfo {
|
|
u8 equ; // _00
|
|
u16 acv; // _02
|
|
u16 prbOdd; // _04
|
|
u16 prbEven; // _06
|
|
u16 psbOdd; // _08
|
|
u16 psbEven; // _0A
|
|
u8 bs1; // _0C
|
|
u8 bs2; // _0D
|
|
u8 bs3; // _0E
|
|
u8 bs4; // _0F
|
|
u16 be1; // _10
|
|
u16 be2; // _12
|
|
u16 be3; // _14
|
|
u16 be4; // _16
|
|
u16 numHalfLines; // _18
|
|
u16 hlw; // _1A
|
|
u8 hsy; // _1C
|
|
u8 hcs; // _1D
|
|
u8 hce; // _1E
|
|
u8 hbe640; // _1F
|
|
u16 hbs640; // _20
|
|
u8 hbeCCIR656; // _24
|
|
u16 hbsCCIR656; // _26
|
|
} VITimingInfo;
|
|
|
|
// Structure to use with HorVer in vi.c (size 0x58).
|
|
typedef struct VIPositionInfo {
|
|
u16 dispPosX; // _00
|
|
u16 dispPosY; // _02
|
|
u16 dispSizeX; // _04
|
|
u16 dispSizeY; // _06
|
|
u16 adjDispPosX; // _08
|
|
u16 adjDispPosY; // _0A
|
|
u16 adjDispSizeY; // _0C
|
|
u16 adjPanPosY; // _0E
|
|
u16 adjPanSizeY; // _10
|
|
u16 fbSizeX; // _12
|
|
u16 fbSizeY; // _14
|
|
u16 panPosX; // _16
|
|
u16 panPosY; // _18
|
|
u16 panSizeX; // _1A
|
|
u16 panSizeY; // _1C
|
|
VIXFBMode xfbMode; // _20
|
|
u32 nonInter; // _24
|
|
u32 tv; // _28
|
|
u8 wordPerLine; // _2C
|
|
u8 std; // _2D
|
|
u8 wpl; // _2E
|
|
u32 bufAddr; // _30
|
|
u32 tfbb; // _34
|
|
u32 bfbb; // _38
|
|
u8 xof; // _3C
|
|
BOOL isBlack; // _40
|
|
BOOL is3D; // _44
|
|
u32 rbufAddr; // _48
|
|
u32 rtfbb; // _4C
|
|
u32 rbfbb; // _50
|
|
VITimingInfo* timing; // _54
|
|
} VIPositionInfo;
|
|
|
|
typedef struct _GXRenderModeObj {
|
|
/*0x00*/ VITVMode viTVmode;
|
|
/*0x04*/ u16 fbWidth;
|
|
/*0x06*/ u16 efbHeight;
|
|
/*0x08*/ u16 xfbHeight;
|
|
/*0x0A*/ u16 viXOrigin;
|
|
/*0x0C*/ u16 viYOrigin;
|
|
/*0x0E*/ u16 viWidth;
|
|
/*0x10*/ u16 viHeight;
|
|
/*0x14*/ VIXFBMode xFBmode;
|
|
/*0x18*/ u8 field_rendering;
|
|
u8 aa;
|
|
u8 sample_pattern[12][2];
|
|
u8 vfilter[7];
|
|
} GXRenderModeObj;
|
|
|
|
typedef struct _GXColor {
|
|
u8 r;
|
|
u8 g;
|
|
u8 b;
|
|
u8 a;
|
|
} GXColor;
|
|
|
|
typedef struct _GXTexObj {
|
|
u32 dummy[8];
|
|
} GXTexObj;
|
|
|
|
typedef struct _GXTlutObj {
|
|
u32 dummy[3];
|
|
} GXTlutObj;
|
|
|
|
typedef struct _GXLightObj {
|
|
u32 dummy[16];
|
|
} GXLightObj;
|
|
|
|
typedef struct _GXVtxDescList {
|
|
GXAttr attr;
|
|
GXAttrType type;
|
|
} GXVtxDescList;
|
|
|
|
typedef struct _GXColorS10 {
|
|
s16 r;
|
|
s16 g;
|
|
s16 b;
|
|
s16 a;
|
|
} GXColorS10;
|
|
|
|
typedef struct _GXTexRegion {
|
|
u32 dummy[4];
|
|
} GXTexRegion;
|
|
|
|
typedef struct _GXTlutRegion {
|
|
u32 dummy[4];
|
|
} GXTlutRegion;
|
|
|
|
typedef struct _GXVtxAttrFmtList {
|
|
// total size: 0x10
|
|
GXAttr attr; // offset 0x0, size 0x4
|
|
GXCompCnt cnt; // offset 0x4, size 0x4
|
|
GXCompType type; // offset 0x8, size 0x4
|
|
u8 frac; // offset 0xC, size 0x1
|
|
} GXVtxAttrFmtList;
|
|
|
|
void GXSetTevDirect(GXTevStageID tev_stage);
|
|
void GXSetNumIndStages(u8 nIndStages);
|
|
void GXSetIndTexMtx(GXIndTexMtxID mtx_sel, f32 offset[2][3], s8 scale_exp);
|
|
void GXSetIndTexOrder(GXIndTexStageID ind_stage, GXTexCoordID tex_coord, GXTexMapID tex_map);
|
|
void GXSetTevIndirect(GXTevStageID tev_stage, GXIndTexStageID ind_stage, GXIndTexFormat format,
|
|
GXIndTexBiasSel bias_sel, GXIndTexMtxID matrix_sel, GXIndTexWrap wrap_s,
|
|
GXIndTexWrap wrap_t, GXBool add_prev, GXBool ind_lod,
|
|
GXIndTexAlphaSel alpha_sel);
|
|
void GXSetTevIndWarp(GXTevStageID tev_stage, GXIndTexStageID ind_stage, GXBool signed_offsets,
|
|
GXBool replace_mode, GXIndTexMtxID matrix_sel);
|
|
|
|
void GXSetTevIndTile (GXTevStageID tev_stage, GXIndTexStageID ind_stage,
|
|
u16 tilesize_s, u16 tilesize_t,
|
|
u16 tilespacing_s, u16 tilespacing_t,
|
|
GXIndTexFormat format, GXIndTexMtxID matrix_sel,
|
|
GXIndTexBiasSel bias_sel, GXIndTexAlphaSel alpha_sel);
|
|
void GXSetIndTexCoordScale(GXIndTexStageID ind_state, GXIndTexScale scale_s, GXIndTexScale scale_t);
|
|
|
|
#define GX_NOP 0x00
|
|
#define GX_DRAW_QUADS 0x80
|
|
#define GX_DRAW_TRIANGLES 0x90
|
|
#define GX_DRAW_TRIANGLE_STRIP 0x98
|
|
#define GX_DRAW_TRIANGLE_FAN 0xA0
|
|
#define GX_DRAW_LINES 0xA8
|
|
#define GX_DRAW_LINE_STRIP 0xB0
|
|
#define GX_DRAW_POINTS 0xB8
|
|
|
|
#define GX_LOAD_BP_REG 0x61
|
|
#define GX_LOAD_CP_REG 0x08
|
|
#define GX_LOAD_XF_REG 0x10
|
|
#define GX_LOAD_INDX_A 0x20
|
|
#define GX_LOAD_INDX_B 0x28
|
|
#define GX_LOAD_INDX_C 0x30
|
|
#define GX_LOAD_INDX_D 0x38
|
|
|
|
#define GX_CMD_CALL_DL 0x40
|
|
#define GX_CMD_INVL_VC 0x48
|
|
|
|
#define GX_OPCODE_MASK 0xF8
|
|
#define GX_VAT_MASK 0x07
|
|
|
|
void GXSetScissor(u32 left, u32 top, u32 wd, u32 ht);
|
|
void GXSetCullMode(GXCullMode mode);
|
|
void GXSetCoPlanar(GXBool enable);
|
|
|
|
void GXBeginDisplayList(void* list, u32 size);
|
|
u32 GXEndDisplayList(void);
|
|
void GXCallDisplayList(const void* list, u32 nbytes);
|
|
|
|
void GXDrawSphere(u8 numMajor, u8 numMinor);
|
|
|
|
typedef struct {
|
|
u8 pad[128];
|
|
} GXFifoObj;
|
|
|
|
typedef void (*GXBreakPtCallback)(void);
|
|
|
|
void GXInitFifoBase(GXFifoObj* fifo, void* base, u32 size);
|
|
void GXInitFifoPtrs(GXFifoObj* fifo, void* readPtr, void* writePtr);
|
|
void GXGetFifoPtrs(GXFifoObj* fifo, void** readPtr, void** writePtr);
|
|
GXFifoObj* GXGetCPUFifo(void);
|
|
GXFifoObj* GXGetGPFifo(void);
|
|
void GXSetCPUFifo(GXFifoObj* fifo);
|
|
void GXSetGPFifo(GXFifoObj* fifo);
|
|
void GXSaveCPUFifo(GXFifoObj* fifo);
|
|
void GXGetFifoStatus(GXFifoObj* fifo, GXBool* overhi, GXBool* underlow, u32* fifoCount,
|
|
GXBool* cpu_write, GXBool* gp_read, GXBool* fifowrap);
|
|
void GXGetGPStatus(GXBool* overhi, GXBool* underlow, GXBool* readIdle, GXBool* cmdIdle,
|
|
GXBool* brkpt);
|
|
void GXInitFifoLimits(GXFifoObj* fifo, u32 hiWaterMark, u32 loWaterMark);
|
|
GXBreakPtCallback GXSetBreakPtCallback(GXBreakPtCallback cb);
|
|
void GXEnableBreakPt(void* breakPt);
|
|
void GXDisableBreakPt(void);
|
|
|
|
extern GXRenderModeObj GXNtsc240Ds;
|
|
extern GXRenderModeObj GXNtsc240DsAa;
|
|
extern GXRenderModeObj GXNtsc240Int;
|
|
extern GXRenderModeObj GXNtsc240IntAa;
|
|
extern GXRenderModeObj GXNtsc480IntDf;
|
|
extern GXRenderModeObj GXNtsc480Int;
|
|
extern GXRenderModeObj GXNtsc480IntAa;
|
|
extern GXRenderModeObj GXNtsc480Prog;
|
|
extern GXRenderModeObj GXNtsc480ProgAa;
|
|
extern GXRenderModeObj GXMpal240Ds;
|
|
extern GXRenderModeObj GXMpal240DsAa;
|
|
extern GXRenderModeObj GXMpal240Int;
|
|
extern GXRenderModeObj GXMpal240IntAa;
|
|
extern GXRenderModeObj GXMpal480IntDf;
|
|
extern GXRenderModeObj GXMpal480Int;
|
|
extern GXRenderModeObj GXMpal480IntAa;
|
|
extern GXRenderModeObj GXPal264Ds;
|
|
extern GXRenderModeObj GXPal264DsAa;
|
|
extern GXRenderModeObj GXPal264Int;
|
|
extern GXRenderModeObj GXPal264IntAa;
|
|
extern GXRenderModeObj GXPal528IntDf;
|
|
extern GXRenderModeObj GXPal528Int;
|
|
extern GXRenderModeObj GXPal524IntAa;
|
|
extern GXRenderModeObj GXEurgb60Hz240Ds;
|
|
extern GXRenderModeObj GXEurgb60Hz240DsAa;
|
|
extern GXRenderModeObj GXEurgb60Hz240Int;
|
|
extern GXRenderModeObj GXEurgb60Hz240IntAa;
|
|
extern GXRenderModeObj GXEurgb60Hz480IntDf;
|
|
extern GXRenderModeObj GXEurgb60Hz480Int;
|
|
extern GXRenderModeObj GXEurgb60Hz480IntAa;
|
|
|
|
#define GX_MAX_Z24 0x00FFFFFF
|
|
|
|
void GXSetCopyClear(GXColor clear_clr, u32 clear_z);
|
|
void GXAdjustForOverscan(GXRenderModeObj* rmin, GXRenderModeObj* rmout, u16 hor, u16 ver);
|
|
void GXCopyDisp(void* dest, GXBool clear);
|
|
void GXSetDispCopyGamma(GXGamma gamma);
|
|
void GXSetDispCopySrc(u16 left, u16 top, u16 wd, u16 ht);
|
|
void GXSetDispCopyDst(u16 wd, u16 ht);
|
|
u32 GXSetDispCopyYScale(f32 vscale);
|
|
void GXSetCopyFilter(GXBool aa, u8 sample_pattern[12][2], GXBool vf, u8 vfilter[7]);
|
|
void GXSetPixelFmt(GXPixelFmt pix_fmt, GXZFmt16 z_fmt);
|
|
void GXSetTexCopySrc(u16 left, u16 top, u16 wd, u16 ht);
|
|
void GXSetTexCopyDst(u16 wd, u16 ht, GXTexFmt fmt, GXBool mipmap);
|
|
void GXCopyTex(void* dest, GXBool clear);
|
|
|
|
void GXSetVtxDesc(GXAttr attr, GXAttrType type);
|
|
void GXSetVtxDescv(GXVtxDescList* list);
|
|
void GXClearVtxDesc(void);
|
|
void GXSetVtxAttrFmt(GXVtxFmt vtxfmt, GXAttr attr, GXCompCnt cnt, GXCompType type, u8 frac);
|
|
void GXSetNumTexGens(u8 nTexGens);
|
|
void GXBegin(GXPrimitive type, GXVtxFmt vtxfmt, u16 nverts);
|
|
void GXSetTexCoordGen2(GXTexCoordID dst_coord, GXTexGenType func, GXTexGenSrc src_param, u32 mtx,
|
|
GXBool normalize, u32 postmtx);
|
|
void GXSetLineWidth(u8 width, GXTexOffset texOffsets);
|
|
void GXSetPointSize(u8 pointSize, GXTexOffset texOffsets);
|
|
void GXEnableTexOffsets(GXTexCoordID coord, GXBool line_enable, GXBool point_enable);
|
|
void GXSetArray(GXAttr attr, const void* data, u8 stride);
|
|
void GXInvalidateVtxCache(void);
|
|
|
|
static inline void GXSetTexCoordGen(GXTexCoordID dst_coord, GXTexGenType func,
|
|
GXTexGenSrc src_param, u32 mtx) {
|
|
GXSetTexCoordGen2(dst_coord, func, src_param, mtx, GX_FALSE, GX_PTIDENTITY);
|
|
}
|
|
|
|
GXBool GXGetTexObjMipMap(const GXTexObj* obj);
|
|
GXTexFmt GXGetTexObjFmt(const GXTexObj* obj);
|
|
u16 GXGetTexObjHeight(const GXTexObj* obj);
|
|
u16 GXGetTexObjWidth(const GXTexObj* obj);
|
|
GXTexWrapMode GXGetTexObjWrapS(const GXTexObj* obj);
|
|
GXTexWrapMode GXGetTexObjWrapT(const GXTexObj* obj);
|
|
void* GXGetTexObjData(const GXTexObj* obj);
|
|
void GXGetProjectionv(f32* p);
|
|
void GXGetLightPos(const GXLightObj* lt_obj, f32* x, f32* y, f32* z);
|
|
void GXGetLightColor(const GXLightObj* lt_obj, GXColor* color);
|
|
void GXGetVtxAttrFmt(GXVtxFmt idx, GXAttr attr, GXCompCnt* compCnt, GXCompType* compType,
|
|
u8* shift);
|
|
|
|
void GXSetNumChans(u8 nChans);
|
|
void GXSetChanCtrl(GXChannelID chan, GXBool enable, GXColorSrc amb_src, GXColorSrc mat_src,
|
|
u32 light_mask, GXDiffuseFn diff_fn, GXAttnFn attn_fn);
|
|
void GXSetChanAmbColor(GXChannelID chan, GXColor amb_color);
|
|
void GXSetChanMatColor(GXChannelID chan, GXColor mat_color);
|
|
|
|
void GXInitLightSpot(GXLightObj* lt_obj, f32 cutoff, GXSpotFn spot_func);
|
|
void GXInitLightDistAttn(GXLightObj* lt_obj, f32 ref_distance, f32 ref_brightness,
|
|
GXDistAttnFn dist_func);
|
|
void GXInitLightPos(GXLightObj* lt_obj, f32 x, f32 y, f32 z);
|
|
void GXInitLightDir(GXLightObj* lt_obj, f32 nx, f32 ny, f32 nz);
|
|
void GXInitLightColor(GXLightObj* lt_obj, GXColor color);
|
|
void GXInitLightAttn(GXLightObj* lt_obj, f32 a0, f32 a1, f32 a2, f32 k0, f32 k1, f32 k2);
|
|
void GXInitLightAttnA(GXLightObj* lt_obj, f32 a0, f32 a1, f32 a2);
|
|
void GXInitLightAttnK(GXLightObj* lt_obj, f32 k0, f32 k1, f32 k2);
|
|
void GXLoadLightObjImm(GXLightObj* lt_obj, GXLightID light);
|
|
|
|
typedef void (*GXDrawDoneCallback)(void);
|
|
typedef void (*GXDrawSyncCallback)(u16 token);
|
|
|
|
GXFifoObj* GXInit(void* base, u32 size);
|
|
GXDrawDoneCallback GXSetDrawDoneCallback(GXDrawDoneCallback cb);
|
|
void GXSetDrawSync(u16 token);
|
|
GXDrawSyncCallback GXSetDrawSyncCallback(GXDrawSyncCallback callback);
|
|
|
|
void GXDrawDone(void);
|
|
void GXSetDrawDone(void);
|
|
void GXFlush(void);
|
|
void GXPixModeSync(void);
|
|
void GXSetMisc(GXMiscToken token, u32 val);
|
|
|
|
extern void GXSetGPMetric(GXPerf0 perf0, GXPerf1 perf1);
|
|
extern void GXClearGPMetric();
|
|
extern void GXReadXfRasMetric(u32* xfWaitIn, u32* xfWaitOut, u32* rasBusy, u32* clocks);
|
|
|
|
// Unused/inlined in P2.
|
|
extern void GXReadGPMetric(u32* count0, u32* count1);
|
|
extern u32 GXReadGP0Metric();
|
|
extern u32 GXReadGP1Metric();
|
|
extern void GXReadMemMetric(u32* cpReq, u32* tcReq, u32* cpuReadReq, u32* cpuWriteReq, u32* dspReq, u32* ioReq, u32* viReq, u32* peReq,
|
|
u32* rfReq, u32* fiReq);
|
|
extern void GXClearMemMetric();
|
|
extern void GXReadPixMetric(u32* topIn, u32* topOut, u32* bottomIn, u32* bottomOut, u32* clearIn, u32* copyClocks);
|
|
extern void GXClearPixMetric();
|
|
extern void GXSetVCacheMetric(GXVCachePerf attr);
|
|
extern void GXReadVCacheMetric(u32* check, u32* miss, u32* stall);
|
|
extern void GXClearVCacheMetric();
|
|
extern void GXInitXfRasMetric();
|
|
extern u32 GXReadClksPerVtx();
|
|
|
|
void GXSetFog(GXFogType type, f32 startz, f32 endz, f32 nearz, f32 farz, GXColor color);
|
|
void GXSetFogColor(GXColor color);
|
|
// ? GXSetFogRangeAdj();
|
|
void GXSetBlendMode(GXBlendMode type, GXBlendFactor src_factor, GXBlendFactor dst_factor,
|
|
GXLogicOp op);
|
|
void GXSetColorUpdate(GXBool update_enable);
|
|
void GXSetAlphaUpdate(GXBool update_enable);
|
|
void GXSetZMode(GXBool compare_enable, GXCompare func, GXBool update_enable);
|
|
void GXSetZCompLoc(GXBool before_tex);
|
|
void GXSetPixelFmt(GXPixelFmt pix_fmt, GXZFmt16 z_fmt);
|
|
void GXSetDither(GXBool dither);
|
|
void GXSetDstAlpha(GXBool enable, u8 alpha);
|
|
// ? GXSetFieldMask();
|
|
void GXSetFieldMode(u8 field_mode, u8 half_aspect_ratio);
|
|
|
|
void GXSetTevOp(GXTevStageID id, GXTevMode mode);
|
|
void GXSetTevColorIn(GXTevStageID stage, GXTevColorArg a, GXTevColorArg b, GXTevColorArg c,
|
|
GXTevColorArg d);
|
|
void GXSetTevAlphaIn(GXTevStageID stage, GXTevAlphaArg a, GXTevAlphaArg b, GXTevAlphaArg c,
|
|
GXTevAlphaArg d);
|
|
void GXSetTevColorOp(GXTevStageID stage, GXTevOp op, GXTevBias bias, GXTevScale scale, GXBool clamp,
|
|
GXTevRegID out_reg);
|
|
void GXSetTevAlphaOp(GXTevStageID stage, GXTevOp op, GXTevBias bias, GXTevScale scale, GXBool clamp,
|
|
GXTevRegID out_reg);
|
|
void GXSetTevColor(GXTevRegID id, GXColor color);
|
|
void GXSetTevColorS10(GXTevRegID id, GXColorS10 color);
|
|
void GXSetTevKColor(GXTevKColorID id, GXColor color);
|
|
void GXSetTevKColorSel(GXTevStageID stage, GXTevKColorSel sel);
|
|
void GXSetTevKAlphaSel(GXTevStageID stage, GXTevKAlphaSel sel);
|
|
void GXSetTevSwapMode(GXTevStageID stage, GXTevSwapSel ras_sel, GXTevSwapSel tex_sel);
|
|
void GXSetTevSwapModeTable(GXTevSwapSel table, GXTevColorChan red, GXTevColorChan green,
|
|
GXTevColorChan blue, GXTevColorChan alpha);
|
|
void GXSetAlphaCompare(GXCompare comp0, u8 ref0, GXAlphaOp op, GXCompare comp1, u8 ref1);
|
|
void GXSetZTexture(GXZTexOp op, GXTexFmt fmt, u32 bias);
|
|
void GXSetTevOrder(GXTevStageID stage, GXTexCoordID coord, GXTexMapID map, GXChannelID color);
|
|
void GXSetNumTevStages(u8 nStages);
|
|
|
|
typedef GXTexRegion* (*GXTexRegionCallback)(const GXTexObj* obj, GXTexMapID id);
|
|
|
|
void GXInitTexObj(GXTexObj* obj, const void* data, u16 width, u16 height, u32 format,
|
|
GXTexWrapMode wrapS, GXTexWrapMode wrapT, GXBool mipmap);
|
|
void GXInitTexObjCI(GXTexObj* obj, const void* data, u16 width, u16 height, GXCITexFmt format,
|
|
GXTexWrapMode wrapS, GXTexWrapMode wrapT, GXBool mipmap, u32 tlut);
|
|
void GXInitTexObjData(GXTexObj* obj, const void* data);
|
|
void GXInitTexObjLOD(GXTexObj* obj, GXTexFilter min_filt, GXTexFilter mag_filt, f32 min_lod,
|
|
f32 max_lod, f32 lod_bias, GXBool bias_clamp, GXBool do_edge_lod,
|
|
GXAnisotropy max_aniso);
|
|
void GXLoadTexObj(GXTexObj* obj, GXTexMapID id);
|
|
u32 GXGetTexBufferSize(u16 width, u16 height, u32 format, GXBool mipmap, u8 max_lod);
|
|
void GXInvalidateTexAll();
|
|
void GXInitTexObjWrapMode(GXTexObj* obj, GXTexWrapMode s, GXTexWrapMode t);
|
|
void GXInitTlutObj(GXTlutObj* obj, void* data, GXTlutFmt format, u16 entries);
|
|
void GXLoadTlut(const GXTlutObj* obj, GXTlut idx);
|
|
void GXSetTexCoordScaleManually(GXTexCoordID coord, GXBool enable, u16 ss, u16 ts);
|
|
void GXInitTexCacheRegion(GXTexRegion* region, GXBool is_32b_mipmap, u32 tmem_even,
|
|
GXTexCacheSize size_even, u32 tmem_odd, GXTexCacheSize size_odd);
|
|
GXTexRegionCallback GXSetTexRegionCallback(GXTexRegionCallback callback);
|
|
void GXInvalidateTexRegion(const GXTexRegion* region);
|
|
|
|
void GXSetTexCoordScaleManually(GXTexCoordID coord, GXBool enable, u16 ss, u16 ts);
|
|
|
|
#define GX_PROJECTION_SZ 7
|
|
|
|
|
|
void GXSetProjection(f32 mtx[4][4], GXProjectionType type);
|
|
void GXLoadPosMtxImm(f32 mtx[3][4], u32 id);
|
|
void GXLoadNrmMtxImm(f32 mtx[3][4], u32 id);
|
|
void GXLoadTexMtxImm(f32 mtx[][4], u32 id, GXTexMtxType type);
|
|
|
|
void GXSetViewport(f32 left, f32 top, f32 wd, f32 ht, f32 nearz, f32 farz);
|
|
void GXSetCurrentMtx(u32 id);
|
|
void GXSetViewportJitter(f32 left, f32 top, f32 wd, f32 ht, f32 nearz, f32 farz, u32 field);
|
|
void GXSetScissorBoxOffset(s32 x_off, s32 y_off);
|
|
void GXSetClipMode(GXClipMode mode);
|
|
|
|
#define GXFIFO_ADDR 0xCC008000
|
|
|
|
typedef union {
|
|
u8 u8;
|
|
u16 u16;
|
|
u32 u32;
|
|
u64 u64;
|
|
s8 s8;
|
|
s16 s16;
|
|
s32 s32;
|
|
s64 s64;
|
|
f32 f32;
|
|
f64 f64;
|
|
} PPCWGPipe;
|
|
|
|
#define GXWGFifo (*(volatile PPCWGPipe*)GXFIFO_ADDR)
|
|
|
|
static inline void GXPosition2f32(const f32 x, const f32 y) {
|
|
GXWGFifo.f32 = x;
|
|
GXWGFifo.f32 = y;
|
|
}
|
|
|
|
static inline void GXPosition2u16(const u16 x, const u16 y) {
|
|
GXWGFifo.u16 = x;
|
|
GXWGFifo.u16 = y;
|
|
}
|
|
|
|
static inline void GXPosition2s16(const s16 x, const s16 y) {
|
|
GXWGFifo.s16 = x;
|
|
GXWGFifo.s16 = y;
|
|
}
|
|
|
|
static inline void GXPosition3s16(const s16 x, const s16 y, const s16 z) {
|
|
GXWGFifo.s16 = x;
|
|
GXWGFifo.s16 = y;
|
|
GXWGFifo.s16 = z;
|
|
}
|
|
|
|
static inline void GXPosition3f32(const f32 x, const f32 y, const f32 z) {
|
|
GXWGFifo.f32 = x;
|
|
GXWGFifo.f32 = y;
|
|
GXWGFifo.f32 = z;
|
|
}
|
|
|
|
static inline void GXNormal3f32(const f32 x, const f32 y, const f32 z) {
|
|
GXWGFifo.f32 = x;
|
|
GXWGFifo.f32 = y;
|
|
GXWGFifo.f32 = z;
|
|
}
|
|
|
|
static inline void GXColor1u32(const u32 v) {
|
|
GXWGFifo.u32 = v;
|
|
}
|
|
|
|
static inline void GXColor3u8(const u8 r, const u8 g, const u8 b) {
|
|
GXWGFifo.u8 = r;
|
|
GXWGFifo.u8 = g;
|
|
GXWGFifo.u8 = b;
|
|
}
|
|
|
|
static inline void GXColor4u8(const u8 r, const u8 g, const u8 b, const u8 a) {
|
|
GXWGFifo.u8 = r;
|
|
GXWGFifo.u8 = g;
|
|
GXWGFifo.u8 = b;
|
|
GXWGFifo.u8 = a;
|
|
}
|
|
|
|
static inline void GXTexCoord2s16(const s16 u, const s16 v) {
|
|
GXWGFifo.s16 = u;
|
|
GXWGFifo.s16 = v;
|
|
}
|
|
|
|
static inline void GXTexCoord2f32(const f32 u, const f32 v) {
|
|
GXWGFifo.f32 = u;
|
|
GXWGFifo.f32 = v;
|
|
}
|
|
|
|
static inline void GXPosition1x8(u8 index) {
|
|
GXWGFifo.u8 = index;
|
|
}
|
|
|
|
static inline void GXColor1x8(u8 index) {
|
|
GXWGFifo.u8 = index;
|
|
}
|
|
|
|
static inline void GXPosition1x16(u16 index) {
|
|
GXWGFifo.u16 = index;
|
|
}
|
|
|
|
static inline void GXColor1x16(u16 index) {
|
|
GXWGFifo.u16 = index;
|
|
}
|
|
|
|
static inline void GXTexCoord1x16(u16 index) {
|
|
GXWGFifo.u16 = index;
|
|
}
|
|
|
|
static inline void GXEnd(void) {}
|
|
|
|
// Upper words of the masks, since UIMM is only 16 bits
|
|
#define OS_CACHED_REGION_PREFIX 0x8000
|
|
#define OS_UNCACHED_REGION_PREFIX 0xC000
|
|
#define OS_PHYSICAL_MASK 0x3FFF
|
|
|
|
#define OS_BASE_CACHED (OS_CACHED_REGION_PREFIX << 16)
|
|
#define OS_BASE_UNCACHED (OS_UNCACHED_REGION_PREFIX << 16)
|
|
|
|
#define AT_ADDRESS
|
|
|
|
typedef s64 OSTime;
|
|
typedef u32 OSTick;
|
|
u32 __OSBusClock(); // sync with OSLoMem.h
|
|
u32 __OSCoreClock(); // sync with OSLoMem.h
|
|
#define OS_BUS_CLOCK (u32)__OSBusClock
|
|
#define OS_CORE_CLOCK __OSCoreClock
|
|
#define OS_TIMER_CLOCK (OS_BUS_CLOCK / 4)
|
|
|
|
#define OSPhysicalToCached(paddr) ((void*)((u32)(paddr) + OS_BASE_CACHED))
|
|
#define OSPhysicalToUncached(paddr) ((void*)((u32)(paddr) + OS_BASE_UNCACHED))
|
|
#define OSCachedToPhysical(caddr) ((u32)((u8*)(caddr)-OS_BASE_CACHED))
|
|
#define OSUncachedToPhysical(ucaddr) ((u32)((u8*)(ucaddr)-OS_BASE_UNCACHED))
|
|
#define OSCachedToUncached(caddr) ((void*)((u8*)(caddr) + (OS_BASE_UNCACHED - OS_BASE_CACHED)))
|
|
#define OSUncachedToCached(ucaddr) ((void*)((u8*)(ucaddr) - (OS_BASE_UNCACHED - OS_BASE_CACHED)))
|
|
|
|
#define OSTicksToCycles(ticks) (((ticks) * ((OS_CORE_CLOCK * 2) / OS_TIMER_CLOCK)) / 2)
|
|
#define OSTicksToSeconds(ticks) ((ticks) / OS_TIMER_CLOCK)
|
|
#define OSTicksToMilliseconds(ticks) ((ticks) / (OS_TIMER_CLOCK / 1000))
|
|
#define OSTicksToMicroseconds(ticks) (((ticks)*8) / (OS_TIMER_CLOCK / 125000))
|
|
#define OSTicksToNanoseconds(ticks) (((ticks)*8000) / (OS_TIMER_CLOCK / 125000))
|
|
#define OSSecondsToTicks(sec) ((sec)*OS_TIMER_CLOCK)
|
|
#define OSMillisecondsToTicks(msec) ((msec) * (OS_TIMER_CLOCK / 1000))
|
|
#define OSMicrosecondsToTicks(usec) (((usec) * (OS_TIMER_CLOCK / 125000)) / 8)
|
|
#define OSNanosecondsToTicks(nsec) (((nsec) * (OS_TIMER_CLOCK / 125000)) / 8000)
|
|
|
|
#define OSDiffTick(tick1, tick0) ((s32)(tick1) - (s32)(tick0))
|
|
|
|
#define OSRoundUp32B(v) (((u32)(v + 31) & ~31))
|
|
#define OSRoundDown32B(x) (((u32)(x)) & ~31)
|
|
|
|
void* OSGetArenaHi(void);
|
|
void* OSGetArenaLo(void);
|
|
void OSSetArenaHi(void* newHi);
|
|
void OSSetArenaLo(void* newLo);
|
|
|
|
void* OSAllocFromArenaLo(u32 size, u32 align);
|
|
void* OSAllocFromArenaHi(u32 size, u32 align);
|
|
|
|
void OSInit();
|
|
|
|
OSTime OSGetTime();
|
|
OSTick OSGetTick();
|
|
|
|
typedef struct OSCalendarTime {
|
|
int sec; // seconds after the minute [0, 61]
|
|
int min; // minutes after the hour [0, 59]
|
|
int hour; // hours since midnight [0, 23]
|
|
int mday; // day of the month [1, 31]
|
|
int mon; // month since January [0, 11]
|
|
int year; // years in AD [1, ...]
|
|
int wday; // days since Sunday [0, 6]
|
|
int yday; // days since January 1 [0, 365]
|
|
|
|
int msec; // milliseconds after the second [0,999]
|
|
int usec; // microseconds after the millisecond [0,999]
|
|
} OSCalendarTime;
|
|
|
|
OSTime OSCalendarTimeToTicks(OSCalendarTime* td);
|
|
void OSTicksToCalendarTime(OSTime ticks, OSCalendarTime* td);
|
|
|
|
typedef struct OSStopwatch {
|
|
char* name;
|
|
OSTime total;
|
|
u32 hits;
|
|
OSTime min;
|
|
OSTime max;
|
|
OSTime last;
|
|
BOOL running;
|
|
} OSStopwatch;
|
|
|
|
void OSInitStopwatch(OSStopwatch* sw, char* name);
|
|
void OSStartStopwatch(OSStopwatch* sw);
|
|
void OSStopStopwatch(OSStopwatch* sw);
|
|
OSTime OSCheckStopwatch(OSStopwatch* sw);
|
|
void OSResetStopwatch(OSStopwatch* sw);
|
|
void OSDumpStopwatch(OSStopwatch* sw);
|
|
|
|
#define OS_CONSOLE_MASK 0xf0000000
|
|
#define OS_CONSOLE_RETAIL 0x00000000
|
|
#define OS_CONSOLE_DEVELOPMENT 0x10000000
|
|
#define OS_CONSOLE_TDEV 0x20000000
|
|
|
|
#define OS_CONSOLE_RETAIL4 0x00000004
|
|
#define OS_CONSOLE_RETAIL3 0x00000003
|
|
#define OS_CONSOLE_RETAIL2 0x00000002
|
|
#define OS_CONSOLE_RETAIL1 0x00000001
|
|
#define OS_CONSOLE_TDEVHW4 0x20000007
|
|
#define OS_CONSOLE_TDEVHW3 0x20000006
|
|
#define OS_CONSOLE_TDEVHW2 0x20000005
|
|
#define OS_CONSOLE_TDEVHW1 0x20000004
|
|
#define OS_CONSOLE_DEVHW4 0x10000007
|
|
#define OS_CONSOLE_DEVHW3 0x10000006
|
|
#define OS_CONSOLE_DEVHW2 0x10000005
|
|
#define OS_CONSOLE_DEVHW1 0x10000004
|
|
#define OS_CONSOLE_MINNOW 0x10000003
|
|
#define OS_CONSOLE_ARTHUR 0x10000002
|
|
#define OS_CONSOLE_PC_EMULATOR 0x10000001
|
|
#define OS_CONSOLE_EMULATOR 0x10000000
|
|
|
|
u32 OSGetConsoleType();
|
|
|
|
#define OS_SOUND_MODE_MONO 0u
|
|
#define OS_SOUND_MODE_STEREO 1u
|
|
|
|
u32 OSGetSoundMode(void);
|
|
void OSSetSoundMode(u32 mode);
|
|
|
|
#define OS_PROGRESSIVE_MODE_OFF 0u
|
|
#define OS_PROGRESSIVE_MODE_ON 1u
|
|
|
|
u32 OSGetProgressiveMode(void);
|
|
void OSSetProgressiveMode(u32 on);
|
|
|
|
#define OS_LANG_ENGLISH 0u
|
|
#define OS_LANG_GERMAN 1u
|
|
#define OS_LANG_FRENCH 2u
|
|
#define OS_LANG_SPANISH 3u
|
|
#define OS_LANG_ITALIAN 4u
|
|
#define OS_LANG_DUTCH 5u
|
|
|
|
u8 OSGetLanguage(void);
|
|
void OSSetLanguage(u8 language);
|
|
|
|
#define OS_EURGB60_OFF 0u
|
|
#define OS_EURGB60_ON 1u
|
|
|
|
u32 OSGetEuRgb60Mode(void);
|
|
void OSSetEuRgb60Mode(u32 on);
|
|
|
|
void OSRegisterVersion(const char* id);
|
|
|
|
BOOL OSDisableInterrupts(void);
|
|
BOOL OSEnableInterrupts(void);
|
|
BOOL OSRestoreInterrupts(BOOL level);
|
|
|
|
#define OSHalt(msg) OSPanic(__FILE__, __LINE__, msg)
|
|
|
|
|
|
#define ASSERT(exp) ((void)0)
|
|
|
|
void OSReport(const char* msg, ...);
|
|
void OSPanic(const char* file, int line, const char* msg, ...);
|
|
void OSFatal(GXColor fg, GXColor bg, const char* msg);
|
|
|
|
u32 OSGetPhysicalMemSize(void);
|
|
u32 OSGetConsoleSimulatedMemSize(void);
|
|
|
|
#define __OS_CONTEXT_FRAME 768
|
|
|
|
#define OS_CONTEXT_R0 0
|
|
#define OS_CONTEXT_R1 4
|
|
#define OS_CONTEXT_R2 8
|
|
#define OS_CONTEXT_R3 12
|
|
#define OS_CONTEXT_R4 16
|
|
#define OS_CONTEXT_R5 20
|
|
#define OS_CONTEXT_R6 24
|
|
#define OS_CONTEXT_R7 28
|
|
#define OS_CONTEXT_R8 32
|
|
#define OS_CONTEXT_R9 36
|
|
#define OS_CONTEXT_R10 40
|
|
#define OS_CONTEXT_R11 44
|
|
#define OS_CONTEXT_R12 48
|
|
#define OS_CONTEXT_R13 52
|
|
#define OS_CONTEXT_R14 56
|
|
#define OS_CONTEXT_R15 60
|
|
#define OS_CONTEXT_R16 64
|
|
#define OS_CONTEXT_R17 68
|
|
#define OS_CONTEXT_R18 72
|
|
#define OS_CONTEXT_R19 76
|
|
#define OS_CONTEXT_R20 80
|
|
#define OS_CONTEXT_R21 84
|
|
#define OS_CONTEXT_R22 88
|
|
#define OS_CONTEXT_R23 92
|
|
#define OS_CONTEXT_R24 96
|
|
#define OS_CONTEXT_R25 100
|
|
#define OS_CONTEXT_R26 104
|
|
#define OS_CONTEXT_R27 108
|
|
#define OS_CONTEXT_R28 112
|
|
#define OS_CONTEXT_R29 116
|
|
#define OS_CONTEXT_R30 120
|
|
#define OS_CONTEXT_R31 124
|
|
|
|
#define OS_CONTEXT_CR 128
|
|
#define OS_CONTEXT_LR 132
|
|
#define OS_CONTEXT_CTR 136
|
|
#define OS_CONTEXT_XER 140
|
|
|
|
#define OS_CONTEXT_FPR0 144
|
|
#define OS_CONTEXT_FPR1 152
|
|
#define OS_CONTEXT_FPR2 160
|
|
#define OS_CONTEXT_FPR3 168
|
|
#define OS_CONTEXT_FPR4 176
|
|
#define OS_CONTEXT_FPR5 184
|
|
#define OS_CONTEXT_FPR6 192
|
|
#define OS_CONTEXT_FPR7 200
|
|
#define OS_CONTEXT_FPR8 208
|
|
#define OS_CONTEXT_FPR9 216
|
|
#define OS_CONTEXT_FPR10 224
|
|
#define OS_CONTEXT_FPR11 232
|
|
#define OS_CONTEXT_FPR12 240
|
|
#define OS_CONTEXT_FPR13 248
|
|
#define OS_CONTEXT_FPR14 256
|
|
#define OS_CONTEXT_FPR15 264
|
|
#define OS_CONTEXT_FPR16 272
|
|
#define OS_CONTEXT_FPR17 280
|
|
#define OS_CONTEXT_FPR18 288
|
|
#define OS_CONTEXT_FPR19 296
|
|
#define OS_CONTEXT_FPR20 304
|
|
#define OS_CONTEXT_FPR21 312
|
|
#define OS_CONTEXT_FPR22 320
|
|
#define OS_CONTEXT_FPR23 328
|
|
#define OS_CONTEXT_FPR24 336
|
|
#define OS_CONTEXT_FPR25 344
|
|
#define OS_CONTEXT_FPR26 352
|
|
#define OS_CONTEXT_FPR27 360
|
|
#define OS_CONTEXT_FPR28 368
|
|
#define OS_CONTEXT_FPR29 376
|
|
#define OS_CONTEXT_FPR30 384
|
|
#define OS_CONTEXT_FPR31 392
|
|
|
|
#define OS_CONTEXT_FPSCR 400
|
|
|
|
#define OS_CONTEXT_SRR0 408
|
|
#define OS_CONTEXT_SRR1 412
|
|
|
|
#define OS_CONTEXT_MODE 416
|
|
#define OS_CONTEXT_STATE 418
|
|
|
|
#define OS_CONTEXT_GQR0 420
|
|
#define OS_CONTEXT_GQR1 424
|
|
#define OS_CONTEXT_GQR2 428
|
|
#define OS_CONTEXT_GQR3 432
|
|
#define OS_CONTEXT_GQR4 436
|
|
#define OS_CONTEXT_GQR5 440
|
|
#define OS_CONTEXT_GQR6 444
|
|
#define OS_CONTEXT_GQR7 448
|
|
#define __OSCONTEXT_PADDING 452
|
|
|
|
#define OS_CONTEXT_PSF0 456
|
|
#define OS_CONTEXT_PSF1 464
|
|
#define OS_CONTEXT_PSF2 472
|
|
#define OS_CONTEXT_PSF3 480
|
|
#define OS_CONTEXT_PSF4 488
|
|
#define OS_CONTEXT_PSF5 496
|
|
#define OS_CONTEXT_PSF6 504
|
|
#define OS_CONTEXT_PSF7 512
|
|
#define OS_CONTEXT_PSF8 520
|
|
#define OS_CONTEXT_PSF9 528
|
|
#define OS_CONTEXT_PSF10 536
|
|
#define OS_CONTEXT_PSF11 544
|
|
#define OS_CONTEXT_PSF12 552
|
|
#define OS_CONTEXT_PSF13 560
|
|
#define OS_CONTEXT_PSF14 568
|
|
#define OS_CONTEXT_PSF15 576
|
|
#define OS_CONTEXT_PSF16 584
|
|
#define OS_CONTEXT_PSF17 592
|
|
#define OS_CONTEXT_PSF18 600
|
|
#define OS_CONTEXT_PSF19 608
|
|
#define OS_CONTEXT_PSF20 616
|
|
#define OS_CONTEXT_PSF21 624
|
|
#define OS_CONTEXT_PSF22 632
|
|
#define OS_CONTEXT_PSF23 640
|
|
#define OS_CONTEXT_PSF24 648
|
|
#define OS_CONTEXT_PSF25 656
|
|
#define OS_CONTEXT_PSF26 664
|
|
#define OS_CONTEXT_PSF27 672
|
|
#define OS_CONTEXT_PSF28 680
|
|
#define OS_CONTEXT_PSF29 688
|
|
#define OS_CONTEXT_PSF30 696
|
|
#define OS_CONTEXT_PSF31 704
|
|
#define OS_CONTEXT_STATE_EXC 0x02u
|
|
|
|
#define OS_CONTEXT_STATE_FPSAVED 0x01u
|
|
|
|
typedef struct OSContext {
|
|
u32 gpr[32];
|
|
u32 cr;
|
|
u32 lr;
|
|
u32 ctr;
|
|
u32 xer;
|
|
|
|
f64 fpr[32];
|
|
|
|
u32 fpscr_pad;
|
|
u32 fpscr;
|
|
|
|
u32 srr0;
|
|
u32 srr1;
|
|
|
|
u16 mode;
|
|
u16 state;
|
|
|
|
u32 gqr[8];
|
|
u32 psf_pad;
|
|
f64 psf[32];
|
|
|
|
} OSContext;
|
|
|
|
u32 OSSaveContext(OSContext* context);
|
|
void OSClearContext(OSContext* context);
|
|
OSContext* OSGetCurrentContext();
|
|
void OSSetCurrentContext(OSContext* context);
|
|
|
|
typedef struct OSAlarm OSAlarm;
|
|
typedef void (*OSAlarmHandler)(OSAlarm* alarm, OSContext* context);
|
|
|
|
struct OSAlarm {
|
|
OSAlarmHandler handler;
|
|
u32 tag;
|
|
OSTime fire;
|
|
OSAlarm* prev;
|
|
OSAlarm* next;
|
|
OSTime period;
|
|
OSTime start;
|
|
};
|
|
|
|
void OSInitAlarm(void);
|
|
void OSSetAlarm(OSAlarm* alarm, OSTime tick, OSAlarmHandler handler);
|
|
void OSSetAlarmTag(OSAlarm* alarm, u32 tag);
|
|
void OSSetAbsAlarm(OSAlarm* alarm, OSTime time, OSAlarmHandler handler);
|
|
void OSSetPeriodicAlarm(OSAlarm* alarm, OSTime start, OSTime period, OSAlarmHandler handler);
|
|
void OSCreateAlarm(OSAlarm* alarm);
|
|
void OSCancelAlarm(OSAlarm* alarm);
|
|
void OSCancelAlarms(u32 tag);
|
|
|
|
BOOL OSCheckAlarmQueue(void);
|
|
|
|
|
|
typedef int OSHeapHandle;
|
|
typedef void (*OSAllocVisitor)(void* obj, u32 size);
|
|
void* OSInitAlloc(void* arenaStart, void* arenaEnd, int maxHeaps);
|
|
OSHeapHandle OSCreateHeap(void* start, void* end);
|
|
void OSDestroyHeap(OSHeapHandle heap);
|
|
void OSAddToHeap(OSHeapHandle heap, void* start, void* end);
|
|
OSHeapHandle OSSetCurrentHeap(OSHeapHandle heap);
|
|
void* OSAllocFromHeap(OSHeapHandle heap, u32 size);
|
|
void* OSAllocFixed(void** rstart, void** rend);
|
|
void OSFreeToHeap(OSHeapHandle heap, void* ptr);
|
|
long OSCheckHeap(OSHeapHandle heap);
|
|
void OSDumpHeap(OSHeapHandle heap);
|
|
void *OSAllocFixed(void **rstart, void **rend);
|
|
u32 OSReferentSize(void* ptr);
|
|
void OSVisitAllocated(OSAllocVisitor visitor);
|
|
extern volatile OSHeapHandle __OSCurrHeap;
|
|
#define OSAlloc(size) OSAllocFromHeap(__OSCurrHeap, (size))
|
|
#define OSFree(ptr) OSFreeToHeap(__OSCurrHeap, (ptr))
|
|
|
|
|
|
void* OSGetArenaHi(void);
|
|
void* OSGetArenaLo(void);
|
|
void OSSetArenaHi(void* addr);
|
|
void OSSetArenaLo(void* addr);
|
|
void* OSAllocFromArenaLo(u32 size, u32 align);
|
|
void* OSAllocFromArenaLo(u32 size, u32 align);
|
|
|
|
|
|
void DCInvalidateRange(void* addr, u32 nBytes);
|
|
void DCFlushRange(void* addr, u32 nBytes);
|
|
void DCStoreRange(void* addr, u32 nBytes);
|
|
void DCFlushRangeNoSync(void* addr, u32 nBytes);
|
|
void DCStoreRangeNoSync(void* addr, u32 nBytes);
|
|
void DCZeroRange(void* addr, u32 nBytes);
|
|
void DCTouchRange(void* addr, u32 nBytes);
|
|
void ICInvalidateRange(void* addr, u32 nBytes);
|
|
|
|
#define LC_BASE_PREFIX 0xE000
|
|
#define LC_BASE (LC_BASE_PREFIX << 16)
|
|
#define LCGetBase() ((void*)LC_BASE)
|
|
|
|
void LCEnable();
|
|
void LCDisable(void);
|
|
void LCLoadBlocks(void* destTag, void* srcAddr, u32 numBlocks);
|
|
void LCStoreBlocks(void* destAddr, void* srcTag, u32 numBlocks);
|
|
u32 LCLoadData(void* destAddr, void* srcAddr, u32 nBytes);
|
|
u32 LCStoreData(void* destAddr, void* srcAddr, u32 nBytes);
|
|
u32 LCQueueLength(void);
|
|
void LCQueueWait(u32 len);
|
|
void LCFlushQueue(void);
|
|
|
|
|
|
|
|
#define OS_ERROR_SYSTEM_RESET 0
|
|
#define OS_ERROR_MACHINE_CHECK 1
|
|
#define OS_ERROR_DSI 2
|
|
#define OS_ERROR_ISI 3
|
|
#define OS_ERROR_EXTERNAL_INTERRUPT 4
|
|
#define OS_ERROR_ALIGNMENT 5
|
|
#define OS_ERROR_PROGRAM 6
|
|
#define OS_ERROR_FLOATING_POINT 7
|
|
#define OS_ERROR_DECREMENTER 8
|
|
#define OS_ERROR_SYSTEM_CALL 9
|
|
#define OS_ERROR_TRACE 10
|
|
#define OS_ERROR_PERFORMACE_MONITOR 11
|
|
#define OS_ERROR_BREAKPOINT 12
|
|
#define OS_ERROR_SYSTEM_INTERRUPT 13
|
|
#define OS_ERROR_THERMAL_INTERRUPT 14
|
|
#define OS_ERROR_PROTECTION 15
|
|
#define OS_ERROR_FPE 16
|
|
|
|
#define OS_ERROR_MAX (OS_ERROR_FPE + 1)
|
|
|
|
typedef u16 OSError;
|
|
typedef void (*OSErrorHandler)( OSError error, OSContext* context, ... );
|
|
|
|
OSErrorHandler OSSetErrorHandler(OSError code, OSErrorHandler handler);
|
|
|
|
|
|
|
|
/* "include\dolphin\os\OSException.h" line 4 "dolphin/os/OSContext.h" */
|
|
/* end "dolphin/os/OSContext.h" */
|
|
/* "include\dolphin\os\OSException.h" line 5 "dolphin/types.h" */
|
|
/* end "dolphin/types.h" */
|
|
|
|
#define __OS_EXCEPTION_SYSTEM_RESET 0
|
|
#define __OS_EXCEPTION_MACHINE_CHECK 1
|
|
#define __OS_EXCEPTION_DSI 2
|
|
#define __OS_EXCEPTION_ISI 3
|
|
#define __OS_EXCEPTION_EXTERNAL_INTERRUPT 4
|
|
#define __OS_EXCEPTION_ALIGNMENT 5
|
|
#define __OS_EXCEPTION_PROGRAM 6
|
|
#define __OS_EXCEPTION_FLOATING_POINT 7
|
|
#define __OS_EXCEPTION_DECREMENTER 8
|
|
#define __OS_EXCEPTION_SYSTEM_CALL 9
|
|
#define __OS_EXCEPTION_TRACE 10
|
|
#define __OS_EXCEPTION_PERFORMACE_MONITOR 11
|
|
#define __OS_EXCEPTION_BREAKPOINT 12
|
|
#define __OS_EXCEPTION_SYSTEM_INTERRUPT 13
|
|
#define __OS_EXCEPTION_THERMAL_INTERRUPT 14
|
|
#define __OS_EXCEPTION_MAX \
|
|
(__OS_EXCEPTION_THERMAL_INTERRUPT+1)
|
|
|
|
typedef u8 __OSException;
|
|
typedef void (*__OSExceptionHandler)(__OSException exception, OSContext* context);
|
|
|
|
#define OS_EXCEPTION_SAVE_GPRS(context) \
|
|
stw r0, OS_CONTEXT_R0(context); \
|
|
stw r1, OS_CONTEXT_R1(context); \
|
|
stw r2, OS_CONTEXT_R2(context); \
|
|
stmw r6, OS_CONTEXT_R6(context); \
|
|
mfspr r0, GQR1; \
|
|
stw r0, OS_CONTEXT_GQR1(context); \
|
|
mfspr r0, GQR2; \
|
|
stw r0, OS_CONTEXT_GQR2(context); \
|
|
mfspr r0, GQR3; \
|
|
stw r0, OS_CONTEXT_GQR3(context); \
|
|
mfspr r0, GQR4; \
|
|
stw r0, OS_CONTEXT_GQR4(context); \
|
|
mfspr r0, GQR5; \
|
|
stw r0, OS_CONTEXT_GQR5(context); \
|
|
mfspr r0, GQR6; \
|
|
stw r0, OS_CONTEXT_GQR6(context); \
|
|
mfspr r0, GQR7; \
|
|
stw r0, OS_CONTEXT_GQR7(context);
|
|
|
|
|
|
#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_ETHER_VIEWER 0x04220001
|
|
#define EXI_STREAM_HANGER 0x04130000
|
|
|
|
#define EXI_MARLIN 0x03010000
|
|
|
|
#define EXI_IS_VIEWER 0x05070000
|
|
|
|
#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
|
|
|
|
#define EXI_READ 0
|
|
#define EXI_WRITE 1
|
|
|
|
#define EXI_STATE_IDLE 0x00
|
|
#define EXI_STATE_DMA 0x01
|
|
#define EXI_STATE_IMM 0x02
|
|
#define EXI_STATE_BUSY (EXI_STATE_DMA | EXI_STATE_IMM)
|
|
#define EXI_STATE_SELECTED 0x04
|
|
#define EXI_STATE_ATTACHED 0x08
|
|
#define EXI_STATE_LOCKED 0x10
|
|
|
|
BOOL EXIProbe(s32 chan);
|
|
s32 EXIProbeEx(s32 chan);
|
|
|
|
s32 EXIGetType(s32 chan, u32 dev, u32* type);
|
|
char* EXIGetTypeString(u32 type);
|
|
u32 EXIClearInterrupts(s32 chan, BOOL exi, BOOL tc, BOOL ext);
|
|
s32 EXIGetID(s32 chan, u32 dev, u32* id);
|
|
|
|
typedef void (*EXICallback)(s32 chan, OSContext* context);
|
|
|
|
|
|
|
|
#define OS_GQR_F32 0x0000
|
|
#define OS_GQR_U8 0x0004
|
|
#define OS_GQR_U16 0x0005
|
|
#define OS_GQR_S8 0x0006
|
|
#define OS_GQR_S16 0x0007
|
|
|
|
#define OS_FASTCAST_U8 2
|
|
#define OS_FASTCAST_U16 3
|
|
#define OS_FASTCAST_S8 4
|
|
#define OS_FASTCAST_S16 5
|
|
// clang-format off
|
|
static inline void OSInitFastCast(void) {
|
|
}
|
|
// clang-format off
|
|
|
|
static inline s16 __OSf32tos16(register f32 inF)
|
|
{
|
|
u32 tmp;
|
|
register u32* tmpPtr = &tmp;
|
|
register s16 out;
|
|
// clang-format off
|
|
// clang-format on
|
|
|
|
return out;
|
|
}
|
|
|
|
static inline void OSf32tos16(f32 *f, s16 *out) { *out = __OSf32tos16(*f); }
|
|
|
|
static inline u8 __OSf32tou8(register f32 inF)
|
|
{
|
|
u32 tmp;
|
|
register u32 *tmpPtr = &tmp;
|
|
register u8 out;
|
|
// clang-format off
|
|
// clang-format on
|
|
|
|
return out;
|
|
}
|
|
|
|
static inline void OSf32tou8(f32 *f, u8 *out) { *out = __OSf32tou8(*f); }
|
|
|
|
static inline s8 __OSf32tos8(register f32 inF)
|
|
{
|
|
u32 tmp;
|
|
register u32 *tmpPtr = &tmp;
|
|
register s8 out;
|
|
// clang-format off
|
|
// clang-format on
|
|
|
|
return out;
|
|
}
|
|
|
|
static inline void OSf32tos8(f32 *f, s8 *out) { *out = __OSf32tos8(*f); }
|
|
|
|
static inline u16 __OSf32tou16(register f32 inF)
|
|
{
|
|
u32 tmp;
|
|
register u32 *tmpPtr = &tmp;
|
|
register u16 out;
|
|
// clang-format off
|
|
// clang-format on
|
|
|
|
return out;
|
|
}
|
|
|
|
static inline void OSf32tou16(f32 *f, u16 *out) { *out = __OSf32tou16(*f); }
|
|
|
|
static inline float __OSs8tof32(register const s8* arg) {
|
|
register float ret;
|
|
|
|
|
|
return ret;
|
|
}
|
|
|
|
static inline void OSs8tof32(const s8* in, float* out) { *out = __OSs8tof32(in); }
|
|
|
|
static inline float __OSs16tof32(register const s16* arg) {
|
|
register float ret;
|
|
|
|
|
|
return ret;
|
|
}
|
|
|
|
static inline void OSs16tof32(const s16* in, float* out) { *out = __OSs16tof32(in); }
|
|
|
|
static inline float __OSu8tof32(register const u8* arg) {
|
|
register float ret;
|
|
|
|
return ret;
|
|
}
|
|
|
|
static inline void OSu8tof32(const u8* in, float* out) { *out = __OSu8tof32(in); }
|
|
|
|
static inline float __OSu16tof32(register const u16* arg) {
|
|
register float ret;
|
|
|
|
return ret;
|
|
}
|
|
|
|
static inline void OSu16tof32(const u16* in, float* out) { *out = __OSu16tof32(in); }
|
|
|
|
#define OS_FONT_ENCODE_ANSI 0u
|
|
#define OS_FONT_ENCODE_SJIS 1u
|
|
#define OS_FONT_ENCODE_UTF8 3u // UTF-8 [RFC 3629]
|
|
#define OS_FONT_ENCODE_UTF16 4u // UTF-16BE [RFC 2781]
|
|
#define OS_FONT_ENCODE_UTF32 5u // UTF-32
|
|
#define OS_FONT_ENCODE_MAX 5u
|
|
#define OS_FONT_ENCODE_VOID 0xffffu
|
|
|
|
#define OS_FONT_PROPORTIONAL FALSE
|
|
#define OS_FONT_FIXED TRUE
|
|
|
|
u16 OSGetFontEncode(void);
|
|
u16 OSSetFontEncode(u16 encode);
|
|
|
|
#define __OS_INTERRUPT_MEM_0 0
|
|
#define __OS_INTERRUPT_MEM_1 1
|
|
#define __OS_INTERRUPT_MEM_2 2
|
|
#define __OS_INTERRUPT_MEM_3 3
|
|
#define __OS_INTERRUPT_MEM_ADDRESS 4
|
|
#define __OS_INTERRUPT_DSP_AI 5
|
|
#define __OS_INTERRUPT_DSP_ARAM 6
|
|
#define __OS_INTERRUPT_DSP_DSP 7
|
|
#define __OS_INTERRUPT_AI_AI 8
|
|
#define __OS_INTERRUPT_EXI_0_EXI 9
|
|
#define __OS_INTERRUPT_EXI_0_TC 10
|
|
#define __OS_INTERRUPT_EXI_0_EXT 11
|
|
#define __OS_INTERRUPT_EXI_1_EXI 12
|
|
#define __OS_INTERRUPT_EXI_1_TC 13
|
|
#define __OS_INTERRUPT_EXI_1_EXT 14
|
|
#define __OS_INTERRUPT_EXI_2_EXI 15
|
|
#define __OS_INTERRUPT_EXI_2_TC 16
|
|
#define __OS_INTERRUPT_PI_CP 17
|
|
#define __OS_INTERRUPT_PI_PE_TOKEN 18
|
|
#define __OS_INTERRUPT_PI_PE_FINISH 19
|
|
#define __OS_INTERRUPT_PI_SI 20
|
|
#define __OS_INTERRUPT_PI_DI 21
|
|
#define __OS_INTERRUPT_PI_RSW 22
|
|
#define __OS_INTERRUPT_PI_ERROR 23
|
|
#define __OS_INTERRUPT_PI_VI 24
|
|
#define __OS_INTERRUPT_PI_DEBUG 25
|
|
#define __OS_INTERRUPT_PI_HSP 26
|
|
#define __OS_INTERRUPT_MAX 32
|
|
|
|
#define OS_INTERRUPTMASK(interrupt) (0x80000000u >> (interrupt))
|
|
|
|
#define OS_INTERRUPTMASK_MEM_0 OS_INTERRUPTMASK(__OS_INTERRUPT_MEM_0)
|
|
#define OS_INTERRUPTMASK_MEM_1 OS_INTERRUPTMASK(__OS_INTERRUPT_MEM_1)
|
|
#define OS_INTERRUPTMASK_MEM_2 OS_INTERRUPTMASK(__OS_INTERRUPT_MEM_2)
|
|
#define OS_INTERRUPTMASK_MEM_3 OS_INTERRUPTMASK(__OS_INTERRUPT_MEM_3)
|
|
#define OS_INTERRUPTMASK_MEM_ADDRESS OS_INTERRUPTMASK(__OS_INTERRUPT_MEM_ADDRESS)
|
|
#define OS_INTERRUPTMASK_MEM \
|
|
(OS_INTERRUPTMASK_MEM_0 | OS_INTERRUPTMASK_MEM_1 | OS_INTERRUPTMASK_MEM_2 | \
|
|
OS_INTERRUPTMASK_MEM_3 | OS_INTERRUPTMASK_MEM_ADDRESS)
|
|
#define OS_INTERRUPTMASK_DSP_AI OS_INTERRUPTMASK(__OS_INTERRUPT_DSP_AI)
|
|
#define OS_INTERRUPTMASK_DSP_ARAM OS_INTERRUPTMASK(__OS_INTERRUPT_DSP_ARAM)
|
|
#define OS_INTERRUPTMASK_DSP_DSP OS_INTERRUPTMASK(__OS_INTERRUPT_DSP_DSP)
|
|
#define OS_INTERRUPTMASK_DSP \
|
|
(OS_INTERRUPTMASK_DSP_AI | OS_INTERRUPTMASK_DSP_ARAM | OS_INTERRUPTMASK_DSP_DSP)
|
|
#define OS_INTERRUPTMASK_AI_AI OS_INTERRUPTMASK(__OS_INTERRUPT_AI_AI)
|
|
#define OS_INTERRUPTMASK_AI (OS_INTERRUPTMASK_AI_AI)
|
|
#define OS_INTERRUPTMASK_EXI_0_EXI OS_INTERRUPTMASK(__OS_INTERRUPT_EXI_0_EXI)
|
|
#define OS_INTERRUPTMASK_EXI_0_TC OS_INTERRUPTMASK(__OS_INTERRUPT_EXI_0_TC)
|
|
#define OS_INTERRUPTMASK_EXI_0_EXT OS_INTERRUPTMASK(__OS_INTERRUPT_EXI_0_EXT)
|
|
#define OS_INTERRUPTMASK_EXI_0 \
|
|
(OS_INTERRUPTMASK_EXI_0_EXI | OS_INTERRUPTMASK_EXI_0_TC | OS_INTERRUPTMASK_EXI_0_EXT)
|
|
#define OS_INTERRUPTMASK_EXI_1_EXI OS_INTERRUPTMASK(__OS_INTERRUPT_EXI_1_EXI)
|
|
#define OS_INTERRUPTMASK_EXI_1_TC OS_INTERRUPTMASK(__OS_INTERRUPT_EXI_1_TC)
|
|
#define OS_INTERRUPTMASK_EXI_1_EXT OS_INTERRUPTMASK(__OS_INTERRUPT_EXI_1_EXT)
|
|
#define OS_INTERRUPTMASK_EXI_1 \
|
|
(OS_INTERRUPTMASK_EXI_1_EXI | OS_INTERRUPTMASK_EXI_1_TC | OS_INTERRUPTMASK_EXI_1_EXT)
|
|
#define OS_INTERRUPTMASK_EXI_2_EXI OS_INTERRUPTMASK(__OS_INTERRUPT_EXI_2_EXI)
|
|
#define OS_INTERRUPTMASK_EXI_2_TC OS_INTERRUPTMASK(__OS_INTERRUPT_EXI_2_TC)
|
|
#define OS_INTERRUPTMASK_EXI_2 (OS_INTERRUPTMASK_EXI_2_EXI | OS_INTERRUPTMASK_EXI_2_TC)
|
|
#define OS_INTERRUPTMASK_EXI \
|
|
(OS_INTERRUPTMASK_EXI_0_EXI | OS_INTERRUPTMASK_EXI_0_TC | OS_INTERRUPTMASK_EXI_0_EXT | \
|
|
OS_INTERRUPTMASK_EXI_1_EXI | OS_INTERRUPTMASK_EXI_1_TC | OS_INTERRUPTMASK_EXI_1_EXT | \
|
|
OS_INTERRUPTMASK_EXI_2_EXI | OS_INTERRUPTMASK_EXI_2_TC)
|
|
#define OS_INTERRUPTMASK_PI_PE_TOKEN OS_INTERRUPTMASK(__OS_INTERRUPT_PI_PE_TOKEN)
|
|
#define OS_INTERRUPTMASK_PI_PE_FINISH OS_INTERRUPTMASK(__OS_INTERRUPT_PI_PE_FINISH)
|
|
#define OS_INTERRUPTMASK_PI_PE (OS_INTERRUPTMASK_PI_PE_TOKEN | OS_INTERRUPTMASK_PI_PE_FINISH)
|
|
#define OS_INTERRUPTMASK_PI_CP OS_INTERRUPTMASK(__OS_INTERRUPT_PI_CP)
|
|
#define OS_INTERRUPTMASK_PI_SI OS_INTERRUPTMASK(__OS_INTERRUPT_PI_SI)
|
|
#define OS_INTERRUPTMASK_PI_DI OS_INTERRUPTMASK(__OS_INTERRUPT_PI_DI)
|
|
#define OS_INTERRUPTMASK_PI_RSW OS_INTERRUPTMASK(__OS_INTERRUPT_PI_RSW)
|
|
#define OS_INTERRUPTMASK_PI_ERROR OS_INTERRUPTMASK(__OS_INTERRUPT_PI_ERROR)
|
|
#define OS_INTERRUPTMASK_PI_VI OS_INTERRUPTMASK(__OS_INTERRUPT_PI_VI)
|
|
#define OS_INTERRUPTMASK_PI_DEBUG OS_INTERRUPTMASK(__OS_INTERRUPT_PI_DEBUG)
|
|
#define OS_INTERRUPTMASK_PI_HSP OS_INTERRUPTMASK(__OS_INTERRUPT_PI_HSP)
|
|
#define OS_INTERRUPTMASK_PI \
|
|
(OS_INTERRUPTMASK_PI_CP | OS_INTERRUPTMASK_PI_SI | OS_INTERRUPTMASK_PI_DI | \
|
|
OS_INTERRUPTMASK_PI_RSW | OS_INTERRUPTMASK_PI_ERROR | OS_INTERRUPTMASK_PI_VI | \
|
|
OS_INTERRUPTMASK_PI_PE_TOKEN | OS_INTERRUPTMASK_PI_PE_FINISH | OS_INTERRUPTMASK_PI_DEBUG | \
|
|
OS_INTERRUPTMASK_PI_HSP)
|
|
|
|
typedef s16 __OSInterrupt;
|
|
typedef void (*__OSInterruptHandler)(__OSInterrupt interrupt, OSContext* context);
|
|
|
|
typedef u32 OSInterruptMask;
|
|
|
|
extern volatile __OSInterrupt __OSLastInterrupt;
|
|
extern volatile u32 __OSLastInterruptSrr0;
|
|
extern volatile OSTime __OSLastInterruptTime;
|
|
|
|
__OSInterruptHandler __OSSetInterruptHandler(__OSInterrupt interrupt, __OSInterruptHandler handler);
|
|
|
|
__OSInterruptHandler __OSGetInterruptHandler(__OSInterrupt interrupt);
|
|
|
|
void __OSDispatchInterrupt(__OSException exception, OSContext* context);
|
|
|
|
OSInterruptMask OSGetInterruptMask(void);
|
|
OSInterruptMask OSSetInterruptMask(OSInterruptMask mask);
|
|
OSInterruptMask __OSMaskInterrupts(OSInterruptMask mask);
|
|
OSInterruptMask __OSUnmaskInterrupts(OSInterruptMask mask);
|
|
|
|
|
|
#define OS_PROTECT_CHAN0 0
|
|
#define OS_PROTECT_CHAN1 1
|
|
#define OS_PROTECT_CHAN2 2
|
|
#define OS_PROTECT_CHAN3 3
|
|
|
|
#define OS_PROTECT_CONTROL_NONE 0x00
|
|
#define OS_PROTECT_CONTROL_READ 0x01
|
|
#define OS_PROTECT_CONTROL_WRITE 0x02
|
|
#define OS_PROTECT_CONTROL_RDWR (OS_PROTECT_CONTROL_READ | OS_PROTECT_CONTROL_WRITE)
|
|
|
|
void OSProtectRange(u32 chan, void* addr, u32 nBytes, u32 control);
|
|
|
|
|
|
typedef struct OSThread OSThread;
|
|
typedef struct OSThreadQueue OSThreadQueue;
|
|
typedef struct OSThreadLink OSThreadLink;
|
|
typedef s32 OSPriority; // 0 highest, 31 lowest
|
|
|
|
typedef struct OSMutex OSMutex;
|
|
typedef struct OSMutexQueue OSMutexQueue;
|
|
typedef struct OSMutexLink OSMutexLink;
|
|
typedef struct OSCond OSCond;
|
|
|
|
typedef void (*OSIdleFunction)(void* param);
|
|
typedef void (*OSSwitchThreadCallback)(OSThread* from, OSThread* to);
|
|
|
|
struct OSThreadQueue {
|
|
OSThread* head;
|
|
OSThread* tail;
|
|
};
|
|
|
|
struct OSThreadLink {
|
|
OSThread* next;
|
|
OSThread* prev;
|
|
};
|
|
|
|
struct OSMutexQueue {
|
|
OSMutex* head;
|
|
OSMutex* tail;
|
|
};
|
|
|
|
struct OSMutexLink {
|
|
OSMutex* next;
|
|
OSMutex* prev;
|
|
};
|
|
|
|
struct OSThread {
|
|
OSContext context;
|
|
u16 state;
|
|
u16 attr;
|
|
s32 suspend;
|
|
OSPriority priority;
|
|
OSPriority base;
|
|
void* val;
|
|
OSThreadQueue* queue;
|
|
OSThreadLink link;
|
|
OSThreadQueue queueJoin;
|
|
OSMutex* mutex;
|
|
OSMutexQueue queueMutex;
|
|
OSThreadLink linkActive;
|
|
u8* stackBase;
|
|
u32* stackEnd;
|
|
};
|
|
|
|
enum OS_THREAD_STATE {
|
|
OS_THREAD_STATE_READY = 1,
|
|
OS_THREAD_STATE_RUNNING = 2,
|
|
OS_THREAD_STATE_WAITING = 4,
|
|
OS_THREAD_STATE_MORIBUND = 8
|
|
};
|
|
|
|
#define OS_THREAD_ATTR_DETACH 0x0001u
|
|
|
|
#define OS_THREAD_STACK_MAGIC 0xDEADBABE
|
|
|
|
#define OS_PRIORITY_MIN 0 // highest
|
|
#define OS_PRIORITY_MAX 31 // lowest
|
|
#define OS_PRIORITY_IDLE OS_PRIORITY_MAX
|
|
|
|
|
|
void OSInitThreadQueue(OSThreadQueue* queue);
|
|
OSThread* OSGetCurrentThread(void);
|
|
BOOL OSIsThreadSuspended(OSThread* thread);
|
|
BOOL OSIsThreadTerminated(OSThread* thread);
|
|
s32 OSDisableScheduler(void);
|
|
s32 OSEnableScheduler(void);
|
|
void OSYieldThread(void);
|
|
BOOL OSCreateThread(OSThread* thread, void* (*func)(void*), void* param, void* stack, u32 stackSize,
|
|
OSPriority priority, u16 attr);
|
|
void OSExitThread(void* val);
|
|
void OSCancelThread(OSThread* thread);
|
|
BOOL OSJoinThread(OSThread* thread, void** val);
|
|
void OSDetachThread(OSThread* thread);
|
|
s32 OSResumeThread(OSThread* thread);
|
|
s32 OSSuspendThread(OSThread* thread);
|
|
BOOL OSSetThreadPriority(OSThread* thread, OSPriority priority);
|
|
OSPriority OSGetThreadPriority(OSThread* thread);
|
|
void OSSleepThread(OSThreadQueue* queue);
|
|
void OSWakeupThread(OSThreadQueue* queue);
|
|
|
|
OSThread* OSSetIdleFunction(OSIdleFunction idleFunction, void* param, void* stack, u32 stackSize);
|
|
OSThread* OSGetIdleFunction(void);
|
|
void OSClearStack(u8 val);
|
|
long OSCheckActiveThreads(void);
|
|
|
|
/* end "dolphin/os/OSThread.h" */
|
|
typedef struct OSMessageQueue OSMessageQueue;
|
|
typedef void* OSMessage;
|
|
|
|
struct OSMessageQueue {
|
|
OSThreadQueue queueSend;
|
|
OSThreadQueue queueReceive;
|
|
OSMessage* msgArray;
|
|
s32 msgCount;
|
|
s32 firstIndex;
|
|
s32 usedCount;
|
|
};
|
|
|
|
// Flags to turn blocking on/off when sending/receiving message
|
|
#define OS_MESSAGE_NOBLOCK 0
|
|
#define OS_MESSAGE_BLOCK 1
|
|
|
|
void OSInitMessageQueue(OSMessageQueue* mq, OSMessage* msgArray, s32 msgCount);
|
|
BOOL OSSendMessage(OSMessageQueue* mq, OSMessage msg, s32 flags);
|
|
BOOL OSJamMessage(OSMessageQueue* mq, OSMessage msg, s32 flags);
|
|
BOOL OSReceiveMessage(OSMessageQueue* mq, OSMessage* msg, s32 flags);
|
|
|
|
|
|
#define OS_MODULE_VERSION 2
|
|
typedef struct OSModuleHeader OSModuleHeader;
|
|
|
|
typedef u32 OSModuleID;
|
|
typedef struct OSModuleQueue OSModuleQueue;
|
|
typedef struct OSModuleLink OSModuleLink;
|
|
typedef struct OSModuleInfo OSModuleInfo;
|
|
typedef struct OSSectionInfo OSSectionInfo;
|
|
typedef struct OSImportInfo OSImportInfo;
|
|
typedef struct OSRel OSRel;
|
|
|
|
struct OSModuleQueue {
|
|
OSModuleInfo* head;
|
|
OSModuleInfo* tail;
|
|
};
|
|
|
|
struct OSModuleLink {
|
|
OSModuleInfo* next;
|
|
OSModuleInfo* prev;
|
|
};
|
|
|
|
struct OSModuleInfo {
|
|
OSModuleID id; // unique identifier for the module
|
|
OSModuleLink link; // doubly linked list of modules
|
|
u32 numSections; // # of sections
|
|
u32 sectionInfoOffset; // offset to section info table
|
|
u32 nameOffset; // offset to module name
|
|
u32 nameSize; // size of module name
|
|
u32 version; // version number
|
|
};
|
|
|
|
struct OSModuleHeader {
|
|
// CAUTION: info must be the 1st member
|
|
OSModuleInfo info;
|
|
|
|
// OS_MODULE_VERSION == 1
|
|
u32 bssSize; // total size of bss sections in bytes
|
|
u32 relOffset;
|
|
u32 impOffset;
|
|
u32 impSize; // size in bytes
|
|
u8 prologSection; // section # for prolog function
|
|
u8 epilogSection; // section # for epilog function
|
|
u8 unresolvedSection; // section # for unresolved function
|
|
u8 bssSection; // section # for bss section (set at run-time)
|
|
u32 prolog; // prolog function offset
|
|
u32 epilog; // epilog function offset
|
|
u32 unresolved; // unresolved function offset
|
|
|
|
// OS_MODULE_VERSION == 2
|
|
u32 align; // module alignment constraint
|
|
u32 bssAlign; // bss alignment constraint
|
|
|
|
// OS_MODULE_VERSION == 3
|
|
};
|
|
|
|
#define OSGetSectionInfo(module) ((OSSectionInfo*)(((OSModuleInfo*)(module))->sectionInfoOffset))
|
|
|
|
struct OSSectionInfo {
|
|
u32 offset;
|
|
u32 size;
|
|
};
|
|
|
|
// OSSectionInfo.offset bit
|
|
#define OS_SECTIONINFO_EXEC 0x1
|
|
#define OS_SECTIONINFO_OFFSET(offset) ((offset) & ~0x1)
|
|
|
|
struct OSImportInfo {
|
|
OSModuleID id; // external module id
|
|
u32 offset; // offset to OSRel instructions
|
|
};
|
|
|
|
struct OSRel {
|
|
u16 offset; // byte offset from the previous entry
|
|
u8 type;
|
|
u8 section;
|
|
u32 addend;
|
|
};
|
|
|
|
#define R_DOLPHIN_NOP 201 // C9h current offset += OSRel.offset
|
|
#define R_DOLPHIN_SECTION 202 // CAh current section = OSRel.section
|
|
#define R_DOLPHIN_END 203 // CBh
|
|
#define R_DOLPHIN_MRKREF 204 // CCh
|
|
|
|
void OSSetStringTable(const void* stringTable);
|
|
BOOL OSLink(OSModuleInfo* newModule, void* bss);
|
|
BOOL OSUnlink(OSModuleInfo* oldModule);
|
|
|
|
OSModuleInfo* OSSearchModule(void* ptr, u32* section, u32* offset);
|
|
|
|
// debugger notification
|
|
void OSNotifyLink(OSModuleInfo* module);
|
|
void OSNotifyUnlink(OSModuleInfo* module);
|
|
|
|
struct OSMutex {
|
|
OSThreadQueue queue;
|
|
OSThread* thread; // the current owner
|
|
s32 count; // lock count
|
|
OSMutexLink link; // for OSThread.queueMutex
|
|
};
|
|
|
|
struct OSCond {
|
|
OSThreadQueue queue;
|
|
};
|
|
|
|
void OSInitMutex(OSMutex* mutex);
|
|
void OSLockMutex(OSMutex* mutex);
|
|
void OSUnlockMutex(OSMutex* mutex);
|
|
BOOL OSTryLockMutex(OSMutex* mutex);
|
|
void OSInitCond(OSCond* cond);
|
|
void OSWaitCond(OSCond* cond, OSMutex* mutex);
|
|
void OSSignalCond(OSCond* cond);
|
|
|
|
#define OS_RESETCODE_RESTART 0x80000000
|
|
#define OS_RESETCODE_SYSTEM 0x40000000
|
|
|
|
#define OS_RESETCODE_EXEC 0xC0000000
|
|
#define OS_RESETCODE_NETCONFIG 0xC0010000
|
|
|
|
#define OS_RESET_TIMEOUT OSMillisecondsToTicks(1000)
|
|
|
|
#define OS_RESET_RESTART 0
|
|
#define OS_RESET_HOTRESET 1
|
|
#define OS_RESET_SHUTDOWN 2
|
|
|
|
#define OS_RESET_PRIO_SO 110
|
|
#define OS_RESET_PRIO_IP 111
|
|
#define OS_RESET_PRIO_CARD 127
|
|
#define OS_RESET_PRIO_PAD 127
|
|
#define OS_RESET_PRIO_GX 127
|
|
#define OS_RESET_PRIO_ALARM 4294967295
|
|
|
|
typedef BOOL (*OSResetFunction)(BOOL final);
|
|
typedef struct OSResetFunctionInfo OSResetFunctionInfo;
|
|
|
|
struct OSResetFunctionInfo {
|
|
// public
|
|
OSResetFunction func;
|
|
u32 priority;
|
|
|
|
// private
|
|
OSResetFunctionInfo* next;
|
|
OSResetFunctionInfo* prev;
|
|
};
|
|
|
|
u32 OSGetResetCode(void);
|
|
|
|
typedef void (*OSResetCallback)(void);
|
|
|
|
BOOL OSGetResetButtonState(void);
|
|
|
|
BOOL OSGetResetSwitchState(void);
|
|
OSResetCallback OSSetResetCallback(OSResetCallback callback);
|
|
|
|
#define SI_MAX_CHAN 4
|
|
#define SI_MAX_COMCSR_INLNGTH 128
|
|
#define SI_MAX_COMCSR_OUTLNGTH 128
|
|
#define SI_ERROR_UNDER_RUN 0x0001
|
|
#define SI_ERROR_OVER_RUN 0x0002
|
|
#define SI_ERROR_COLLISION 0x0004
|
|
#define SI_ERROR_NO_RESPONSE 0x0008
|
|
#define SI_ERROR_WRST 0x0010
|
|
#define SI_ERROR_RDST 0x0020
|
|
#define SI_ERROR_UNKNOWN 0x0040
|
|
#define SI_ERROR_BUSY 0x0080
|
|
#define SI_CHAN0 0
|
|
#define SI_CHAN1 1
|
|
#define SI_CHAN2 2
|
|
#define SI_CHAN3 3
|
|
#define SI_CHAN0_BIT 0x80000000
|
|
#define SI_CHAN1_BIT 0x40000000
|
|
#define SI_CHAN2_BIT 0x20000000
|
|
#define SI_CHAN3_BIT 0x10000000
|
|
#define SI_CHAN_BIT(chan) (SI_CHAN0_BIT >> (chan))
|
|
#define SI_TYPE_MASK 0x18000000u
|
|
#define SI_TYPE_N64 0x00000000u
|
|
#define SI_TYPE_DOLPHIN 0x08000000u
|
|
#define SI_TYPE_GC SI_TYPE_DOLPHIN
|
|
#define SI_GC_WIRELESS 0x80000000
|
|
#define SI_GC_NOMOTOR 0x20000000
|
|
#define SI_GC_STANDARD 0x01000000
|
|
#define SI_WIRELESS_RECEIVED 0x40000000
|
|
#define SI_WIRELESS_IR 0x04000000
|
|
#define SI_WIRELESS_STATE 0x02000000
|
|
#define SI_WIRELESS_ORIGIN 0x00200000
|
|
#define SI_WIRELESS_FIX_ID 0x00100000
|
|
#define SI_WIRELESS_TYPE 0x000f0000
|
|
#define SI_WIRELESS_LITE_MASK 0x000c0000
|
|
#define SI_WIRELESS_LITE 0x00040000
|
|
#define SI_WIRELESS_CONT_MASK 0x00080000
|
|
#define SI_WIRELESS_CONT 0x00000000
|
|
#define SI_WIRELESS_ID 0x00c0ff00
|
|
#define SI_WIRELESS_TYPE_ID (SI_WIRELESS_TYPE | SI_WIRELESS_ID)
|
|
#define SI_N64_CONTROLLER (SI_TYPE_N64 | 0x05000000)
|
|
#define SI_N64_MIC (SI_TYPE_N64 | 0x00010000)
|
|
#define SI_N64_KEYBOARD (SI_TYPE_N64 | 0x00020000)
|
|
#define SI_N64_MOUSE (SI_TYPE_N64 | 0x02000000)
|
|
#define SI_GBA (SI_TYPE_N64 | 0x00040000)
|
|
#define SI_GC_CONTROLLER (SI_TYPE_GC | SI_GC_STANDARD)
|
|
#define SI_GC_RECEIVER (SI_TYPE_GC | SI_GC_WIRELESS)
|
|
#define SI_GC_WAVEBIRD \
|
|
(SI_TYPE_GC | SI_GC_WIRELESS | SI_GC_STANDARD | SI_WIRELESS_STATE | SI_WIRELESS_FIX_ID)
|
|
#define SI_GC_KEYBOARD (SI_TYPE_GC | 0x00200000)
|
|
#define SI_GC_STEERING (SI_TYPE_GC | 0x00000000)
|
|
|
|
u32 SIProbe(s32 chan);
|
|
char* SIGetTypeString(u32 type);
|
|
void SIRefreshSamplingRate(void);
|
|
void SISetSamplingRate(u32 msec);
|
|
|
|
#define DVD_MIN_TRANSFER_SIZE 32
|
|
|
|
#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_FILEINFO_READY 0
|
|
#define DVD_FILEINFO_BUSY 1
|
|
|
|
#define DVD_RESULT_GOOD 0
|
|
#define DVD_RESULT_FATAL_ERROR -1
|
|
#define DVD_RESULT_IGNORED -2
|
|
#define DVD_RESULT_CANCELED -3
|
|
|
|
#define DVD_AIS_SUCCESS 0x0
|
|
|
|
typedef struct DVDDiskID {
|
|
char gameName[4];
|
|
char company[2];
|
|
u8 diskNumber;
|
|
u8 gameVersion;
|
|
u8 streaming;
|
|
u8 streamingBufSize; // 0 = default
|
|
u8 padding[22]; // 0's are stored
|
|
} DVDDiskID;
|
|
|
|
typedef struct DVDCommandBlock DVDCommandBlock;
|
|
|
|
typedef void (*DVDCBCallback)(s32 result, DVDCommandBlock* block);
|
|
|
|
struct DVDCommandBlock {
|
|
DVDCommandBlock* next;
|
|
DVDCommandBlock* prev;
|
|
u32 command;
|
|
s32 state;
|
|
u32 offset;
|
|
u32 length;
|
|
void* addr;
|
|
u32 currTransferSize;
|
|
u32 transferredSize;
|
|
DVDDiskID* id;
|
|
DVDCBCallback callback;
|
|
void* userData;
|
|
};
|
|
|
|
typedef struct DVDFileInfo DVDFileInfo;
|
|
|
|
typedef void (*DVDCallback)(s32 result, DVDFileInfo* fileInfo);
|
|
|
|
struct DVDFileInfo {
|
|
DVDCommandBlock cb;
|
|
u32 startAddr;
|
|
u32 length;
|
|
DVDCallback callback;
|
|
};
|
|
|
|
typedef struct {
|
|
u32 entryNum;
|
|
u32 location;
|
|
u32 next;
|
|
} DVDDir;
|
|
|
|
typedef struct {
|
|
u32 entryNum;
|
|
BOOL isDir;
|
|
char* name;
|
|
} DVDDirEntry;
|
|
|
|
void DVDInit();
|
|
BOOL DVDClose(DVDFileInfo* f);
|
|
BOOL DVDSetAutoFatalMessaging(BOOL);
|
|
void DVDReset();
|
|
s32 DVDCancel(DVDCommandBlock* block);
|
|
BOOL DVDOpen(char* fileName, DVDFileInfo* fileInfo);
|
|
BOOL DVDFastOpen(s32 entrynum, DVDFileInfo* fileInfo);
|
|
s32 DVDGetCommandBlockStatus(const DVDCommandBlock* block);
|
|
BOOL DVDCancelAsync(DVDCommandBlock* block, DVDCBCallback callback);
|
|
s32 DVDCancel(DVDCommandBlock* block);
|
|
BOOL DVDCancelAllAsync(DVDCBCallback callback);
|
|
s32 DVDCancelAll(void);
|
|
BOOL DVDPrepareStreamAsync(DVDFileInfo* fInfo, u32 length, u32 offset, DVDCallback callback);
|
|
s32 DVDPrepareStream(DVDFileInfo* fInfo, u32 length, u32 offset);
|
|
|
|
BOOL DVDCancelStreamAsync(DVDCommandBlock* block, DVDCBCallback callback);
|
|
s32 DVDCancelStream(DVDCommandBlock* block);
|
|
|
|
BOOL DVDStopStreamAtEndAsync(DVDCommandBlock* block, DVDCBCallback callback);
|
|
s32 DVDStopStreamAtEnd(DVDCommandBlock* block);
|
|
|
|
BOOL DVDGetStreamErrorStatusAsync(DVDCommandBlock* block, DVDCBCallback callback);
|
|
s32 DVDGetStreamErrorStatus(DVDCommandBlock* block);
|
|
|
|
BOOL DVDGetStreamPlayAddrAsync(DVDCommandBlock* block, DVDCBCallback callback);
|
|
s32 DVDGetStreamPlayAddr(DVDCommandBlock* block);
|
|
|
|
s32 DVDGetDriveStatus();
|
|
|
|
s32 DVDConvertPathToEntrynum(char* pathPtr);
|
|
|
|
BOOL DVDReadAsyncPrio(DVDFileInfo* fileInfo, void* addr, s32 length, s32 offset,
|
|
DVDCallback callback, s32 prio);
|
|
|
|
BOOL DVDReadPrio(DVDFileInfo* fileInfo, void* addr, s32 length, s32 offset, s32 prio);
|
|
|
|
|
|
#define DVDReadAsync(fileInfo, addr, length, offset, callback) \
|
|
DVDReadAsyncPrio((fileInfo), (addr), (length), (offset), (callback), 2)
|
|
#define DVDRead(fileInfo, addr, length, offset) \
|
|
DVDReadPrio((fileInfo), (addr), (length), (offset), 2)
|
|
|
|
#define DVDSeekAsync(fileInfo, offset, callback) \
|
|
DVDSeekAsyncPrio((fileInfo), (offset), (callback), 2)
|
|
|
|
extern u32 __PADFixBits;
|
|
|
|
#define PAD_SPEC_0 0
|
|
#define PAD_SPEC_1 1
|
|
#define PAD_SPEC_2 2
|
|
#define PAD_SPEC_3 3
|
|
#define PAD_SPEC_4 4
|
|
#define PAD_SPEC_5 5
|
|
|
|
#define PAD_CHAN0 0
|
|
#define PAD_CHAN1 1
|
|
#define PAD_CHAN2 2
|
|
#define PAD_CHAN3 3
|
|
#define PAD_CHANMAX 4
|
|
|
|
#define PAD_MOTOR_STOP 0
|
|
#define PAD_MOTOR_RUMBLE 1
|
|
#define PAD_MOTOR_STOP_HARD 2
|
|
|
|
#define PAD_ERR_NONE 0
|
|
#define PAD_ERR_NO_CONTROLLER -1
|
|
#define PAD_ERR_NOT_READY -2
|
|
#define PAD_ERR_TRANSFER -3
|
|
|
|
#define PAD_BUTTON_LEFT 0x0001
|
|
#define PAD_BUTTON_RIGHT 0x0002
|
|
#define PAD_BUTTON_DOWN 0x0004
|
|
#define PAD_BUTTON_UP 0x0008
|
|
#define PAD_TRIGGER_Z 0x0010
|
|
#define PAD_TRIGGER_R 0x0020
|
|
#define PAD_TRIGGER_L 0x0040
|
|
#define PAD_BUTTON_A 0x0100
|
|
#define PAD_BUTTON_B 0x0200
|
|
#define PAD_BUTTON_X 0x0400
|
|
#define PAD_BUTTON_Y 0x0800
|
|
#define PAD_BUTTON_MENU 0x1000
|
|
#define PAD_BUTTON_START 0x1000
|
|
|
|
#define PAD_CHAN0_BIT 0x80000000
|
|
#define PAD_CHAN1_BIT 0x40000000
|
|
#define PAD_CHAN2_BIT 0x20000000
|
|
#define PAD_CHAN3_BIT 0x10000000
|
|
|
|
#define PADButtonDown(buttonLast, button) ((((buttonLast) ^ (button)) & (button)))
|
|
|
|
#define PADButtonUp(buttonLast, button) ((((buttonLast) ^ (button)) & (buttonLast)))
|
|
|
|
|
|
typedef void (*PADSamplingCallback)(void);
|
|
|
|
typedef struct PADStatus {
|
|
u16 button;
|
|
s8 stickX;
|
|
s8 stickY;
|
|
s8 substickX;
|
|
s8 substickY;
|
|
u8 triggerL;
|
|
u8 triggerR;
|
|
u8 analogA;
|
|
u8 analogB;
|
|
s8 err;
|
|
} PADStatus;
|
|
|
|
BOOL PADInit();
|
|
u32 PADRead(PADStatus* status);
|
|
BOOL PADReset(u32 mask);
|
|
BOOL PADRecalibrate(u32 mask);
|
|
void PADClamp(PADStatus* status);
|
|
void PADClampCircle(PADStatus* status);
|
|
void PADControlMotor(s32 chan, u32 cmd);
|
|
void PADSetSpec(u32 spec);
|
|
void PADControlAllMotors(const u32* cmdArr);
|
|
void PADSetAnalogMode(u32 mode);
|
|
PADSamplingCallback PADSetSamplingCallback(PADSamplingCallback);
|
|
|
|
|
|
typedef struct {
|
|
f32 x, y, z;
|
|
} Vec, *VecPtr, Point3d, *Point3dPtr;
|
|
|
|
typedef struct {
|
|
s16 x;
|
|
s16 y;
|
|
s16 z;
|
|
} S16Vec, *S16VecPtr;
|
|
|
|
typedef struct {
|
|
f32 x, y, z, w;
|
|
} Quaternion, *QuaternionPtr, Qtrn, *QtrnPtr;
|
|
|
|
typedef f32 Mtx[3][4];
|
|
|
|
typedef f32 (*MtxPtr)[4];
|
|
|
|
typedef f32 ROMtx[4][3];
|
|
|
|
typedef f32 (*ROMtxPtr)[3];
|
|
|
|
typedef f32 Mtx44[4][4];
|
|
|
|
typedef f32 (*Mtx44Ptr)[4];
|
|
|
|
|
|
|
|
|
|
#define GEKKO
|
|
|
|
#define MTX_USE_PS
|
|
|
|
#define MTX_PTR_OFFSET 3
|
|
|
|
#define MTX44_PTR_OFFSET 4
|
|
|
|
typedef struct {
|
|
|
|
u32 numMtx;
|
|
MtxPtr stackBase;
|
|
MtxPtr stackPtr;
|
|
|
|
} MtxStack, *MtxStackPtr;
|
|
|
|
#define MTXDegToRad(a) ((a)*0.01745329252f)
|
|
#define MTXRadToDeg(a) ((a)*57.29577951f)
|
|
#define MTXRowCol(m, r, c) ((m)[(r)][(c)])
|
|
|
|
void C_MTXIdentity(Mtx m);
|
|
void C_MTXCopy(const Mtx src, Mtx dst);
|
|
void C_MTXConcat(const Mtx a, const Mtx b, Mtx ab);
|
|
void C_MTXConcatArray(const Mtx a, const Mtx* srcBase, Mtx* dstBase, u32 count);
|
|
void C_MTXTranspose(const Mtx src, Mtx xPose);
|
|
u32 C_MTXInverse(const Mtx src, Mtx inv);
|
|
u32 C_MTXInvXpose(const Mtx src, Mtx invX);
|
|
|
|
void PSMTXIdentity(Mtx m);
|
|
void PSMTXCopy(const Mtx src, Mtx dst);
|
|
void PSMTXConcat(const Mtx a, const Mtx b, Mtx ab);
|
|
void PSMTXConcatArray(const Mtx a, const Mtx* srcBase, Mtx* dstBase, u32 count);
|
|
void PSMTXTranspose(const Mtx src, Mtx xPose);
|
|
u32 PSMTXInverse(const Mtx src, Mtx inv);
|
|
u32 PSMTXInvXpose(const Mtx src, Mtx invX);
|
|
|
|
#define MTXIdentity PSMTXIdentity
|
|
#define MTXCopy PSMTXCopy
|
|
#define MTXConcat PSMTXConcat
|
|
#define MTXConcatArray PSMTXConcatArray
|
|
#define MTXTranspose PSMTXTranspose
|
|
#define MTXInverse PSMTXInverse
|
|
#define MTXInvXpose PSMTXInvXpose
|
|
|
|
|
|
void C_MTXMultVec(const Mtx m, const Vec* src, Vec* dst);
|
|
void C_MTXMultVecArray(const Mtx m, const Vec* srcBase, Vec* dstBase, u32 count);
|
|
void C_MTXMultVecSR(const Mtx m, const Vec* src, Vec* dst);
|
|
void C_MTXMultVecArraySR(const Mtx m, const Vec* srcBase, Vec* dstBase, u32 count);
|
|
|
|
|
|
void PSMTXMultVec(const Mtx m, const Vec* src, Vec* dst);
|
|
void PSMTXMultVecArray(const Mtx m, const Vec* srcBase, Vec* dstBase, u32 count);
|
|
void PSMTXMultVecSR(const Mtx m, const Vec* src, Vec* dst);
|
|
void PSMTXMultVecArraySR(const Mtx m, const Vec* srcBase, Vec* dstBase, u32 count);
|
|
|
|
|
|
#define MTXMultVec PSMTXMultVec
|
|
#define MTXMultVecArray PSMTXMultVecArray
|
|
#define MTXMultVecSR PSMTXMultVecSR
|
|
#define MTXMultVecArraySR PSMTXMultVecArraySR
|
|
|
|
|
|
void C_MTXQuat(Mtx m, const Quaternion* q);
|
|
void C_MTXReflect(Mtx m, const Vec* p, const Vec* n);
|
|
|
|
void C_MTXTrans(Mtx m, f32 xT, f32 yT, f32 zT);
|
|
void C_MTXTransApply(const Mtx src, Mtx dst, f32 xT, f32 yT, f32 zT);
|
|
void C_MTXScale(Mtx m, f32 xS, f32 yS, f32 zS);
|
|
void C_MTXScaleApply(const Mtx src, Mtx dst, f32 xS, f32 yS, f32 zS);
|
|
|
|
void C_MTXRotRad(Mtx m, char axis, f32 rad);
|
|
void C_MTXRotTrig(Mtx m, char axis, f32 sinA, f32 cosA);
|
|
void C_MTXRotAxisRad(Mtx m, const Vec* axis, f32 rad);
|
|
|
|
|
|
void PSMTXQuat(Mtx m, const Quaternion* q);
|
|
void PSMTXReflect(Mtx m, const Vec* p, const Vec* n);
|
|
|
|
void PSMTXTrans(Mtx m, f32 xT, f32 yT, f32 zT);
|
|
void PSMTXTransApply(const Mtx src, Mtx dst, f32 xT, f32 yT, f32 zT);
|
|
void PSMTXScale(Mtx m, f32 xS, f32 yS, f32 zS);
|
|
void PSMTXScaleApply(const Mtx src, Mtx dst, f32 xS, f32 yS, f32 zS);
|
|
|
|
void PSMTXRotRad(Mtx m, char axis, f32 rad);
|
|
void PSMTXRotTrig(Mtx m, char axis, f32 sinA, f32 cosA);
|
|
void PSMTXRotAxisRad(Mtx m, const Vec* axis, f32 rad);
|
|
|
|
|
|
|
|
#define MTXQuat PSMTXQuat
|
|
#define MTXReflect PSMTXReflect
|
|
#define MTXTrans PSMTXTrans
|
|
#define MTXTransApply PSMTXTransApply
|
|
#define MTXScale PSMTXScale
|
|
#define MTXScaleApply PSMTXScaleApply
|
|
#define MTXRotRad PSMTXRotRad
|
|
#define MTXRotTrig PSMTXRotTrig
|
|
#define MTXRotAxisRad PSMTXRotAxisRad
|
|
|
|
#define MTXRotDeg(m, axis, deg) PSMTXRotRad(m, axis, MTXDegToRad(deg))
|
|
#define MTXRotAxisDeg(m, axis, deg) PSMTXRotAxisRad(m, axis, MTXDegToRad(deg))
|
|
|
|
void C_MTXLookAt(Mtx m, const Point3d* camPos, const Vec* camUp, const Point3d* target);
|
|
|
|
#define MTXLookAt C_MTXLookAt
|
|
|
|
void C_MTXFrustum(Mtx44 m, f32 t, f32 b, f32 l, f32 r, f32 n, f32 f);
|
|
void C_MTXPerspective(Mtx44 m, f32 fovY, f32 aspect, f32 n, f32 f);
|
|
void C_MTXOrtho(Mtx44 m, f32 t, f32 b, f32 l, f32 r, f32 n, f32 f);
|
|
|
|
#define MTXFrustum C_MTXFrustum
|
|
#define MTXPerspective C_MTXPerspective
|
|
#define MTXOrtho C_MTXOrtho
|
|
|
|
void C_MTXLightFrustum(Mtx m, f32 t, f32 b, f32 l, f32 r, f32 n, f32 scaleS, f32 scaleT, f32 transS,
|
|
f32 transT);
|
|
|
|
void C_MTXLightPerspective(Mtx m, f32 fovY, f32 aspect, f32 scaleS, f32 scaleT, f32 transS,
|
|
f32 transT);
|
|
|
|
void C_MTXLightOrtho(Mtx m, f32 t, f32 b, f32 l, f32 r, f32 scaleS, f32 scaleT, f32 transS,
|
|
f32 transT);
|
|
|
|
#define MTXLightFrustum C_MTXLightFrustum
|
|
#define MTXLightPerspective C_MTXLightPerspective
|
|
#define MTXLightOrtho C_MTXLightOrtho
|
|
|
|
void C_VECAdd(const Vec* a, const Vec* b, Vec* ab);
|
|
void C_VECSubtract(const Vec* a, const Vec* b, Vec* a_b);
|
|
void C_VECScale(const Vec* src, Vec* dst, f32 scale);
|
|
void C_VECNormalize(const Vec* src, Vec* unit);
|
|
f32 C_VECSquareMag(const Vec* v);
|
|
f32 C_VECMag(const Vec* v);
|
|
f32 C_VECDotProduct(const Vec* a, const Vec* b);
|
|
void C_VECCrossProduct(const Vec* a, const Vec* b, Vec* axb);
|
|
f32 C_VECSquareDistance(const Vec* a, const Vec* b);
|
|
f32 C_VECDistance(const Vec* a, const Vec* b);
|
|
void C_VECReflect(const Vec* src, const Vec* normal, Vec* dst);
|
|
void C_VECHalfAngle(const Vec* a, const Vec* b, Vec* half);
|
|
|
|
void PSVECAdd(const Vec* a, const Vec* b, Vec* ab);
|
|
void PSVECSubtract(const Vec* a, const Vec* b, Vec* a_b);
|
|
void PSVECScale(const Vec* src, Vec* dst, f32 scale);
|
|
void PSVECNormalize(const Vec* src, Vec* unit);
|
|
f32 PSVECSquareMag(const Vec* v);
|
|
f32 PSVECMag(const Vec* v);
|
|
f32 PSVECDotProduct(const Vec* a, const Vec* b);
|
|
void PSVECCrossProduct(const Vec* a, const Vec* b, Vec* axb);
|
|
f32 PSVECSquareDistance(const Vec* a, const Vec* b);
|
|
f32 PSVECDistance(const Vec* a, const Vec* b);
|
|
|
|
|
|
// TODO
|
|
|
|
#define VECAdd PSVECAdd
|
|
#define VECSubtract PSVECSubtract
|
|
#define VECScale PSVECScale
|
|
#define VECNormalize PSVECNormalize
|
|
#define VECSquareMag PSVECSquareMag
|
|
#define VECMag PSVECMag
|
|
#define VECDotProduct PSVECDotProduct
|
|
#define VECCrossProduct PSVECCrossProduct
|
|
#define VECSquareDistance PSVECSquareDistance
|
|
#define VECDistance PSVECDistance
|
|
|
|
|
|
#define VECReflect C_VECReflect
|
|
#define VECHalfAngle C_VECHalfAngle
|
|
|
|
void C_QUATAdd(const Quaternion* p, const Quaternion* q, Quaternion* r);
|
|
void C_QUATSubtract(const Quaternion* p, const Quaternion* q, Quaternion* r);
|
|
void C_QUATMultiply(const Quaternion* p, const Quaternion* q, Quaternion* pq);
|
|
void C_QUATDivide(const Quaternion* p, const Quaternion* q, Quaternion* r);
|
|
void C_QUATScale(const Quaternion* q, Quaternion* r, f32 scale);
|
|
f32 C_QUATDotProduct(const Quaternion* p, const Quaternion* q);
|
|
void C_QUATNormalize(const Quaternion* src, Quaternion* unit);
|
|
void C_QUATInverse(const Quaternion* src, Quaternion* inv);
|
|
void C_QUATExp(const Quaternion* q, Quaternion* r);
|
|
void C_QUATLogN(const Quaternion* q, Quaternion* r);
|
|
|
|
void C_QUATMakeClosest(const Quaternion* q, const Quaternion* qto, Quaternion* r);
|
|
void C_QUATRotAxisRad(Quaternion* r, const Vec* axis, f32 rad);
|
|
void C_QUATMtx(Quaternion* r, const Mtx m);
|
|
|
|
void C_QUATLerp(const Quaternion* p, const Quaternion* q, Quaternion* r, f32 t);
|
|
void C_QUATSlerp(const Quaternion* p, const Quaternion* q, Quaternion* r, f32 t);
|
|
void C_QUATSquad(const Quaternion* p, const Quaternion* a, const Quaternion* b, const Quaternion* q,
|
|
Quaternion* r, f32 t);
|
|
void C_QUATCompA(const Quaternion* qprev, const Quaternion* q, const Quaternion* qnext,
|
|
Quaternion* a);
|
|
|
|
|
|
void PSQUATAdd(const Quaternion* p, const Quaternion* q, Quaternion* r);
|
|
void PSQUATSubtract(const Quaternion* p, const Quaternion* q, Quaternion* r);
|
|
void PSQUATMultiply(const Quaternion* p, const Quaternion* q, Quaternion* pq);
|
|
void PSQUATDivide(const Quaternion* p, const Quaternion* q, Quaternion* r);
|
|
void PSQUATScale(const Quaternion* q, Quaternion* r, f32 scale);
|
|
f32 PSQUATDotProduct(const Quaternion* p, const Quaternion* q);
|
|
void PSQUATNormalize(const Quaternion* src, Quaternion* unit);
|
|
void PSQUATInverse(const Quaternion* src, Quaternion* inv);
|
|
|
|
|
|
|
|
#define QUATAdd PSQUATAdd
|
|
#define QUATSubtract PSQUATSubtract
|
|
#define QUATMultiply PSQUATMultiply
|
|
#define QUATDivide PSQUATDivide
|
|
#define QUATScale PSQUATScale
|
|
#define QUATDotProduct PSQUATDotProduct
|
|
#define QUATNormalize PSQUATNormalize
|
|
#define QUATInverse PSQUATInverse
|
|
|
|
#define QUATExp C_QUATExp
|
|
#define QUATLogN C_QUATLogN
|
|
#define QUATMakeClosest C_QUATMakeClosest
|
|
#define QUATRotAxisRad C_QUATRotAxisRad
|
|
#define QUATMtx C_QUATMtx
|
|
#define QUATLerp C_QUATLerp
|
|
#define QUATSlerp C_QUATSlerp
|
|
#define QUATSquad C_QUATSquad
|
|
#define QUATCompA C_QUATCompA
|
|
|
|
void PSMTXReorder(const Mtx src, ROMtx dest);
|
|
void PSMTXROMultVecArray(const ROMtx m, const Vec* srcBase, Vec* dstBase, u32 count);
|
|
void PSMTXROSkin2VecArray(const ROMtx m0, const ROMtx m1, const f32* wtBase, const Vec* srcBase,
|
|
Vec* dstBase, u32 count);
|
|
void PSMTXMultS16VecArray(const Mtx m, const S16Vec* srcBase, Vec* dstBase, u32 count);
|
|
void PSMTXROMultS16VecArray(const ROMtx m, const S16Vec* srcBase, Vec* dstBase, u32 count);
|
|
|
|
void MTXInitStack(MtxStack* sPtr, u32 numMtx);
|
|
MtxPtr MTXPush(MtxStack* sPtr, const Mtx m);
|
|
MtxPtr MTXPushFwd(MtxStack* sPtr, const Mtx m);
|
|
MtxPtr MTXPushInv(MtxStack* sPtr, const Mtx m);
|
|
MtxPtr MTXPushInvXpose(MtxStack* sPtr, const Mtx m);
|
|
MtxPtr MTXPop(MtxStack* sPtr);
|
|
MtxPtr MTXGetStackPtr(const MtxStack* sPtr);
|
|
|
|
#define MTXAllocStack(sPtr, numMtx) \
|
|
(((MtxStackPtr)(sPtr))->stackBase = (MtxPtr)OSAlloc(((numMtx) * sizeof(Mtx))))
|
|
|
|
#define MTXFreeStack(sPtr) (OSFree((void*)(((MtxStackPtr)(sPtr))->stackBase)))
|
|
|
|
|
|
|
|
|
|
/* end "dolphin/mtx.h" */
|
|
/* "include\dolphin.h" line 10 "dolphin/gx.h" */
|
|
/* end "dolphin/gx.h" */
|
|
/* "include\dolphin.h" line 11 "dolphin/vi.h" */
|
|
|
|
#define _DOLPHIN_VI
|
|
|
|
/* "include\dolphin\vi.h" line 3 "dolphin/gx/GXStruct.h" */
|
|
/* end "dolphin/gx/GXStruct.h" */
|
|
/* "include\dolphin\vi.h" line 4 "dolphin/vifuncs.h" */
|
|
|
|
#define _DOLPHIN_VIFUNCS
|
|
|
|
/* "include\dolphin\vifuncs.h" line 3 "dolphin/types.h" */
|
|
/* end "dolphin/types.h" */
|
|
|
|
/* "include\dolphin\vifuncs.h" line 5 "dolphin/vitypes.h" */
|
|
/* end "dolphin/vitypes.h" */
|
|
|
|
|
|
u32 VIGetNextField(void);
|
|
u32 VIGetRetraceCount();
|
|
VIRetraceCallback VISetPreRetraceCallback(VIRetraceCallback callback);
|
|
VIRetraceCallback VISetPostRetraceCallback(VIRetraceCallback callback);
|
|
void __VIGetCurrentPosition(s16* x, s16* y);
|
|
u32 VIGetDTVStatus(void);
|
|
|
|
|
|
void VIInit(void);
|
|
void VIConfigure(const GXRenderModeObj* rm);
|
|
void VIFlush(void);
|
|
u32 VIGetTvFormat(void);
|
|
void VISetNextFrameBuffer(void* fb);
|
|
void VIWaitForRetrace(void);
|
|
void VISetBlack(BOOL black);
|
|
|
|
|
|
|
|
|
|
/* end "dolphin/vi.h" */
|
|
/* "include\dolphin.h" line 12 "dolphin/ai.h" */
|
|
|
|
#define _DOLPHIN_AI
|
|
|
|
/* "include\dolphin\ai.h" line 3 "types.h" */
|
|
/* end "types.h" */
|
|
|
|
|
|
typedef void (*AISCallback)(u32 count);
|
|
typedef void (*AIDCallback)();
|
|
|
|
AIDCallback AIRegisterDMACallback(AIDCallback callback);
|
|
void AIInitDMA(u32 start_addr, u32 length);
|
|
BOOL AIGetDMAEnableFlag();
|
|
void AIStartDMA();
|
|
void AIStopDMA();
|
|
u32 AIGetDMABytesLeft();
|
|
u32 AIGetDMAStartAddr();
|
|
u32 AIGetDMALength();
|
|
u32 AIGetDSPSampleRate();
|
|
void AISetDSPSampleRate(u32 rate);
|
|
AISCallback AIRegisterStreamCallback(AISCallback callback);
|
|
u32 AIGetStreamSampleCount();
|
|
void AIResetStreamSampleCount();
|
|
void AISetStreamTrigger(u32 trigger);
|
|
u32 AIGetStreamTrigger();
|
|
void AISetStreamPlayState(u32 state);
|
|
u32 AIGetStreamPlayState();
|
|
void AISetStreamSampleRate(u32 rate);
|
|
u32 AIGetStreamSampleRate();
|
|
void AISetStreamVolLeft(u8 vol);
|
|
void AISetStreamVolRight(u8 vol);
|
|
u8 AIGetStreamVolLeft();
|
|
u8 AIGetStreamVolRight();
|
|
void AIInit(u8* stack);
|
|
BOOL AICheckInit();
|
|
void AIReset();
|
|
|
|
|
|
/* end "dolphin/ai.h" */
|
|
/* "include\dolphin.h" line 13 "dolphin/ar.h" */
|
|
|
|
#define _DOLPHIN_AR
|
|
|
|
/* "include\dolphin\ar.h" line 3 "types.h" */
|
|
/* end "types.h" */
|
|
|
|
|
|
#define AR_STACK_INDEX_ENTRY_SIZE sizeof(u32)
|
|
|
|
#define ARAM_DIR_MRAM_TO_ARAM 0x00
|
|
#define ARAM_DIR_ARAM_TO_MRAM 0x01
|
|
|
|
#define AR_CLEAR_INTERNAL_ALL 0x00
|
|
#define AR_CLEAR_INTERNAL_USER 0x01
|
|
#define AR_CLEAR_EXPANSION 0x02
|
|
|
|
typedef void (*ARCallback)(void);
|
|
|
|
ARCallback ARRegisterDMACallback(ARCallback callback);
|
|
u32 ARGetDMAStatus(void);
|
|
void ARStartDMA(u32 type, u32 mainmem_addr, u32 aram_addr, u32 length);
|
|
u32 ARInit(u32* stack_index_addr, u32 num_entries);
|
|
u32 ARGetBaseAddress(void);
|
|
BOOL ARCheckInit(void);
|
|
void ARReset(void);
|
|
u32 ARAlloc(u32 length);
|
|
u32 ARFree(u32* length);
|
|
u32 ARGetSize(void);
|
|
u32 ARGetInternalSize(void);
|
|
void ARSetSize(void);
|
|
void ARClear(u32 flag);
|
|
|
|
void __ARClearInterrupt(void);
|
|
u16 __ARGetInterruptStatus(void);
|
|
|
|
#define ARStartDMARead(mmem, aram, len) ARStartDMA(ARAM_DIR_ARAM_TO_MRAM, mmem, aram, len)
|
|
#define ARStartDMAWrite(mmem, aram, len) ARStartDMA(ARAM_DIR_MRAM_TO_ARAM, mmem, aram, len)
|
|
|
|
|
|
|
|
/* end "dolphin/ar.h" */
|
|
/* "include\dolphin.h" line 14 "dolphin/arq.h" */
|
|
|
|
#define _DOLPHIN_ARQ
|
|
|
|
/* "include\dolphin\arq.h" line 3 "types.h" */
|
|
/* end "types.h" */
|
|
|
|
/* "include\dolphin\arq.h" line 5 "dolphin/ar.h" */
|
|
/* end "dolphin/ar.h" */
|
|
|
|
|
|
|
|
/* "include\dolphin\arq.h" line 11 "dolphin/ar.h" */
|
|
/* end "dolphin/ar.h" */
|
|
|
|
#define ARQ_DMA_ALIGNMENT 32
|
|
#define ARQ_CHUNK_SIZE_DEFAULT 4096
|
|
|
|
#define ARQ_TYPE_MRAM_TO_ARAM ARAM_DIR_MRAM_TO_ARAM
|
|
#define ARQ_TYPE_ARAM_TO_MRAM ARAM_DIR_ARAM_TO_MRAM
|
|
|
|
#define ARQ_PRIORITY_LOW 0
|
|
#define ARQ_PRIORITY_HIGH 1
|
|
|
|
typedef void (*ARQCallback)(u32 pointerToARQRequest);
|
|
|
|
typedef struct ARQRequest {
|
|
|
|
struct ARQRequest* next;
|
|
u32 owner;
|
|
u32 type;
|
|
u32 priority;
|
|
u32 source;
|
|
u32 dest;
|
|
u32 length;
|
|
ARQCallback callback;
|
|
|
|
} ARQRequest;
|
|
|
|
void ARQInit(void);
|
|
void ARQReset(void);
|
|
void ARQPostRequest(ARQRequest* task, u32 owner, u32 type, u32 priority, u32 source, u32 dest,
|
|
u32 length, ARQCallback callback);
|
|
void ARQRemoveRequest(ARQRequest* task);
|
|
void ARQRemoveOwnerRequest(u32 owner);
|
|
void ARQFlushQueue(void);
|
|
void ARQSetChunkSize(u32 size);
|
|
u32 ARQGetChunkSize(void);
|
|
BOOL ARQCheckInit(void);
|
|
|
|
|
|
|
|
/* end "dolphin/arq.h" */
|
|
/* "include\dolphin.h" line 15 "dolphin/dsp.h" */
|
|
|
|
#define _DOLPHIN_DSP
|
|
|
|
/* "include\dolphin\dsp.h" line 3 "types.h" */
|
|
/* end "types.h" */
|
|
/* "include\dolphin\dsp.h" line 4 "dolphin/os.h" */
|
|
/* end "dolphin/os.h" */
|
|
|
|
|
|
#define DSP_TASK_FLAG_CLEARALL 0x00000000
|
|
#define DSP_TASK_FLAG_ATTACHED 0x00000001
|
|
#define DSP_TASK_FLAG_CANCEL 0x00000002
|
|
|
|
#define DSP_TASK_STATE_INIT 0
|
|
#define DSP_TASK_STATE_RUN 1
|
|
#define DSP_TASK_STATE_YIELD 2
|
|
#define DSP_TASK_STATE_DONE 3
|
|
|
|
typedef void (*DSPCallback)(void* task);
|
|
|
|
typedef struct STRUCT_DSP_TASK {
|
|
vu32 state;
|
|
vu32 priority;
|
|
vu32 flags;
|
|
u16* iram_mmem_addr;
|
|
u32 iram_length;
|
|
u32 iram_addr;
|
|
|
|
u16* dram_mmem_addr;
|
|
u32 dram_length;
|
|
u32 dram_addr;
|
|
|
|
u16 dsp_init_vector;
|
|
u16 dsp_resume_vector;
|
|
|
|
DSPCallback init_cb;
|
|
DSPCallback res_cb;
|
|
DSPCallback done_cb;
|
|
DSPCallback req_cb;
|
|
|
|
struct STRUCT_DSP_TASK* next;
|
|
struct STRUCT_DSP_TASK* prev;
|
|
|
|
OSTime t_context;
|
|
OSTime t_task;
|
|
|
|
} DSPTaskInfo;
|
|
|
|
void DSPInit();
|
|
void DSPReset();
|
|
void DSPHalt();
|
|
void DSPSendMailToDSP(u32 mail);
|
|
u32 DSPCheckMailToDSP();
|
|
u32 DSPCheckMailFromDSP();
|
|
u32 DSPGetDMAStatus();
|
|
|
|
DSPTaskInfo* DSPAddTask(DSPTaskInfo* task);
|
|
|
|
void __DSP_exec_task(DSPTaskInfo* curr, DSPTaskInfo* next);
|
|
void __DSP_boot_task(DSPTaskInfo* task);
|
|
void __DSP_remove_task(DSPTaskInfo* task);
|
|
void __DSP_add_task(DSPTaskInfo* task);
|
|
void __DSP_debug_printf(const char* fmt, ...);
|
|
|
|
|
|
#define CARD_ENCODE_ANSI 0u
|
|
#define CARD_ENCODE_SJIS 1u
|
|
|
|
/* Sizes */
|
|
#define CARD_WORKAREA_SIZE (5 * 8 * 1024)
|
|
#define CARD_READ_SIZE 512
|
|
#define CARD_MAX_FILE 127
|
|
#define CARD_COMMENT_SIZE 64
|
|
#define CARD_FILENAME_MAX 32
|
|
#define CARD_ICON_MAX 8
|
|
#define CARD_ICON_WIDTH 32
|
|
#define CARD_ICON_HEIGHT 32
|
|
#define CARD_BANNER_WIDTH 96
|
|
#define CARD_BANNER_HEIGHT 32
|
|
|
|
/* Icon animation */
|
|
#define CARD_MODE_NORMAL 0
|
|
#define CARD_MODE_FAST 1
|
|
|
|
#define CARDGetBannerFormat(stat) (((stat)->bannerFormat) & CARD_STAT_BANNER_MASK)
|
|
#define CARDGetIconAnim(stat) (((stat)->bannerFormat) & CARD_STAT_ANIM_MASK)
|
|
#define CARDGetIconFormat(stat, n) (((stat)->iconFormat >> (2 * (n))) & CARD_STAT_ICON_MASK)
|
|
#define CARDGetIconSpeed(stat, n) (((stat)->iconSpeed >> (2 * (n))) & CARD_STAT_SPEED_MASK)
|
|
#define CARDSetBannerFormat(stat, f) \
|
|
((stat)->bannerFormat = (u8)(((stat)->bannerFormat & ~CARD_STAT_BANNER_MASK) | (f)))
|
|
#define CARDSetIconAnim(stat, f) \
|
|
((stat)->bannerFormat = (u8)(((stat)->bannerFormat & ~CARD_STAT_ANIM_MASK) | (f)))
|
|
#define CARDSetIconFormat(stat, n, f) \
|
|
((stat)->iconFormat = \
|
|
(u16)(((stat)->iconFormat & ~(CARD_STAT_ICON_MASK << (2 * (n)))) | ((f) << (2 * (n)))))
|
|
#define CARDSetIconSpeed(stat, n, f) \
|
|
((stat)->iconSpeed = \
|
|
(u16)(((stat)->iconSpeed & ~(CARD_STAT_SPEED_MASK << (2 * (n)))) | ((f) << (2 * (n)))))
|
|
#define CARDSetIconAddress(stat, addr) ((stat)->iconAddr = (u32)(addr))
|
|
#define CARDSetCommentAddress(stat, addr) ((stat)->commentAddr = (u32)(addr))
|
|
#define CARDGetFileNo(fileInfo) ((fileInfo)->fileNo)
|
|
|
|
#define CARD_RESULT_UNLOCKED 1
|
|
#define CARD_RESULT_READY 0
|
|
#define CARD_RESULT_BUSY -1
|
|
#define CARD_RESULT_WRONGDEVICE -2
|
|
#define CARD_RESULT_NOCARD -3
|
|
#define CARD_RESULT_NOFILE -4
|
|
#define CARD_RESULT_IOERROR -5
|
|
#define CARD_RESULT_BROKEN -6
|
|
#define CARD_RESULT_EXIST -7
|
|
#define CARD_RESULT_NOENT -8
|
|
#define CARD_RESULT_INSSPACE -9
|
|
#define CARD_RESULT_NOPERM -10
|
|
#define CARD_RESULT_LIMIT -11
|
|
#define CARD_RESULT_NAMETOOLONG -12
|
|
#define CARD_RESULT_ENCODING -13
|
|
#define CARD_RESULT_CANCELED -14
|
|
#define CARD_RESULT_FATAL_ERROR -128
|
|
|
|
#define CARD_STAT_ICON_NONE 0
|
|
#define CARD_STAT_ICON_C8 1
|
|
#define CARD_STAT_ICON_RGB5A3 2
|
|
#define CARD_STAT_ICON_MASK 3
|
|
|
|
#define CARD_STAT_BANNER_NONE 0
|
|
#define CARD_STAT_BANNER_C8 1
|
|
#define CARD_STAT_BANNER_RGB5A3 2
|
|
#define CARD_STAT_BANNER_MASK 3
|
|
|
|
#define CARD_STAT_ANIM_LOOP 0x00
|
|
#define CARD_STAT_ANIM_BOUNCE 0x04
|
|
#define CARD_STAT_ANIM_MASK 0x04
|
|
|
|
#define CARD_STAT_SPEED_END 0
|
|
#define CARD_STAT_SPEED_FAST 1
|
|
#define CARD_STAT_SPEED_MIDDLE 2
|
|
#define CARD_STAT_SPEED_SLOW 3
|
|
#define CARD_STAT_SPEED_MASK 3
|
|
|
|
#define CARD_ATTR_PUBLIC 0x04u
|
|
#define CARD_ATTR_NO_COPY 0x08u
|
|
#define CARD_ATTR_NO_MOVE 0x10u
|
|
#define CARD_ATTR_GLOBAL 0x20u
|
|
#define CARD_ATTR_COMPANY 0x40u
|
|
|
|
typedef struct CARDFileInfo {
|
|
s32 chan;
|
|
s32 fileNo;
|
|
|
|
s32 offset;
|
|
s32 length;
|
|
u16 iBlock;
|
|
u16 __padding;
|
|
} CARDFileInfo;
|
|
|
|
typedef struct CARDStat {
|
|
char fileName[CARD_FILENAME_MAX];
|
|
u32 length;
|
|
u32 time; // seconds since 01/01/2000 midnight
|
|
u8 gameName[4];
|
|
u8 company[2];
|
|
|
|
u8 bannerFormat;
|
|
u8 __padding;
|
|
u32 iconAddr; // offset to the banner, bannerTlut, icon, iconTlut data set.
|
|
u16 iconFormat;
|
|
u16 iconSpeed;
|
|
u32 commentAddr; // offset to the pair of 32 byte character strings.
|
|
|
|
u32 offsetBanner;
|
|
u32 offsetBannerTlut;
|
|
u32 offsetIcon[CARD_ICON_MAX];
|
|
u32 offsetIconTlut;
|
|
u32 offsetData;
|
|
} CARDStat;
|
|
|
|
typedef void (*CARDCallback)(s32 chan, s32 result);
|
|
|
|
void CARDInit(void);
|
|
BOOL CARDGetFastMode(void);
|
|
BOOL CARDSetFastMode(BOOL enable);
|
|
|
|
s32 CARDCheck(s32 chan);
|
|
s32 CARDCheckAsync(s32 chan, CARDCallback callback);
|
|
s32 CARDCheckEx(s32 chan, s32* xferBytes);
|
|
s32 CARDCheckExAsync(s32 chan, s32* xferBytes, CARDCallback callback);
|
|
s32 CARDCreate(s32 chan, const char* fileName, u32 size, CARDFileInfo* fileInfo);
|
|
s32 CARDCreateAsync(s32 chan, const char* fileName, u32 size, CARDFileInfo* fileInfo,
|
|
CARDCallback callback);
|
|
s32 CARDDelete(s32 chan, const char* fileName);
|
|
s32 CARDDeleteAsync(s32 chan, const char* fileName, CARDCallback callback);
|
|
s32 CARDFastDelete(s32 chan, s32 fileNo);
|
|
s32 CARDFastDeleteAsync(s32 chan, s32 fileNo, CARDCallback callback);
|
|
s32 CARDFastOpen(s32 chan, s32 fileNo, CARDFileInfo* fileInfo);
|
|
s32 CARDFormat(s32 chan);
|
|
s32 CARDFormatAsync(s32 chan, CARDCallback callback);
|
|
s32 CARDFreeBlocks(s32 chan, s32* byteNotUsed, s32* filesNotUsed);
|
|
s32 CARDGetAttributes(s32 chan, s32 fileNo, u8* attr);
|
|
s32 CARDGetEncoding(s32 chan, u16* encode);
|
|
s32 CARDGetMemSize(s32 chan, u16* size);
|
|
s32 CARDGetResultCode(s32 chan);
|
|
s32 CARDGetSectorSize(s32 chan, u32* size);
|
|
s32 CARDGetSerialNo(s32 chan, u64* serialNo);
|
|
s32 CARDGetStatus(s32 chan, s32 fileNo, CARDStat* stat);
|
|
s32 CARDGetXferredBytes(s32 chan);
|
|
s32 CARDMount(s32 chan, void* workArea, CARDCallback detachCallback);
|
|
s32 CARDMountAsync(s32 chan, void* workArea, CARDCallback detachCallback,
|
|
CARDCallback attachCallback);
|
|
s32 CARDOpen(s32 chan, const char* fileName, CARDFileInfo* fileInfo);
|
|
BOOL CARDProbe(s32 chan);
|
|
s32 CARDProbeEx(s32 chan, s32* memSize, s32* sectorSize);
|
|
s32 CARDRename(s32 chan, const char* oldName, const char* newName);
|
|
s32 CARDRenameAsync(s32 chan, const char* oldName, const char* newName, CARDCallback callback);
|
|
s32 CARDSetAttributesAsync(s32 chan, s32 fileNo, u8 attr, CARDCallback callback);
|
|
s32 CARDSetAttributes(s32 chan, s32 fileNo, u8 attr);
|
|
s32 CARDSetStatus(s32 chan, s32 fileNo, CARDStat* stat);
|
|
s32 CARDSetStatusAsync(s32 chan, s32 fileNo, CARDStat* stat, CARDCallback callback);
|
|
s32 CARDUnmount(s32 chan);
|
|
s32 CARDGetCurrentMode(s32 chan, u32* mode);
|
|
s32 CARDCancel(CARDFileInfo* fileInfo);
|
|
s32 CARDClose(CARDFileInfo* fileInfo);
|
|
s32 CARDRead(CARDFileInfo* fileInfo, void* addr, s32 length, s32 offset);
|
|
s32 CARDReadAsync(CARDFileInfo* fileInfo, void* addr, s32 length, s32 offset,
|
|
CARDCallback callback);
|
|
s32 CARDWrite(CARDFileInfo* fileInfo, const void* addr, s32 length, s32 offset);
|
|
s32 CARDWriteAsync(CARDFileInfo* fileInfo, const void* addr, s32 length, s32 offset,
|
|
CARDCallback callback);
|
|
|
|
|
|
typedef struct jump_buf {
|
|
u32 lr;
|
|
u32 cr;
|
|
u32 sp;
|
|
u32 r2;
|
|
u32 pad;
|
|
u32 regs[19];
|
|
double flt_regs[19];
|
|
} jmp_buf;
|
|
|
|
int gcsetjmp(jmp_buf *jump);
|
|
int gclongjmp(jmp_buf *jump, int status);
|
|
|
|
|
|
/* end "game/jmp.h" */
|
|
/* "include\game\process.h" line 4 "dolphin/types.h" */
|
|
/* end "dolphin/types.h" */
|
|
|
|
#define PROCESS_STAT_PAUSE 0x1
|
|
#define PROCESS_STAT_UPAUSE 0x2
|
|
#define PROCESS_STAT_PAUSE_EN 0x4
|
|
#define PROCESS_STAT_UPAUSE_EN 0x8
|
|
|
|
typedef struct process {
|
|
struct process *next;
|
|
struct process *prev;
|
|
struct process *child;
|
|
struct process *parent;
|
|
struct process *next_child;
|
|
struct process *first_child;
|
|
void *heap;
|
|
u16 exec;
|
|
u16 stat;
|
|
u16 prio;
|
|
int sleep_time;
|
|
u32 base_sp;
|
|
jmp_buf jump;
|
|
void (*dtor)(void);
|
|
void *user_data;
|
|
} Process;
|
|
|
|
void HuPrcInit(void);
|
|
void HuPrcEnd(void);
|
|
Process *HuPrcCreate(void (*func)(void), u16 prio, u32 stack_size, s32 extra_size);
|
|
void HuPrcChildLink(Process *parent, Process *child);
|
|
void HuPrcChildUnlink(Process *process);
|
|
Process *HuPrcChildCreate(void (*func)(void), u16 prio, u32 stack_size, s32 extra_size, Process *parent);
|
|
void HuPrcChildWatch(void);
|
|
Process *HuPrcCurrentGet(void);
|
|
int HuPrcKill(Process *process);
|
|
void HuPrcChildKill(Process *process);
|
|
void HuPrcSleep(int time);
|
|
void HuPrcVSleep();
|
|
void HuPrcWakeup(Process *process);
|
|
void HuPrcDestructorSet2(Process *process, void (*func)(void));
|
|
void HuPrcDestructorSet(void (*func)(void));
|
|
void HuPrcCall(int tick);
|
|
void *HuPrcMemAlloc(s32 size);
|
|
void HuPrcMemFree(void *ptr);
|
|
void HuPrcSetStat(Process *process, u16 value);
|
|
void HuPrcResetStat(Process *process, u16 value);
|
|
void HuPrcAllPause(int flag);
|
|
void HuPrcAllUPause(int flag);
|
|
|
|
|
|
|
|
#define MEMORY_DEFAULT_NUM 0x10000000
|
|
|
|
typedef enum {
|
|
HEAP_SYSTEM,
|
|
HEAP_MUSIC,
|
|
HEAP_DATA,
|
|
HEAP_DVD,
|
|
HEAP_MISC,
|
|
HEAP_MAX
|
|
} HeapID;
|
|
|
|
void HuMemInitAll(void);
|
|
void *HuMemInit(void *ptr, s32 size);
|
|
void HuMemDCFlushAll();
|
|
void HuMemDCFlush(HeapID heap);
|
|
void *HuMemDirectMalloc(HeapID heap, s32 size);
|
|
void *HuMemDirectMallocNum(HeapID heap, s32 size, u32 num);
|
|
void HuMemDirectFree(void *ptr);
|
|
void HuMemDirectFreeNum(HeapID heap, u32 num);
|
|
s32 HuMemUsedMallocSizeGet(HeapID heap);
|
|
s32 HuMemUsedMallocBlockGet(HeapID heap);
|
|
u32 HuMemHeapSizeGet(HeapID heap);
|
|
void *HuMemHeapPtrGet(HeapID heap);
|
|
|
|
void *HuMemHeapInit(void *ptr, s32 size);
|
|
void *HuMemMemoryAlloc(void *heap_ptr, s32 size, u32 retaddr);
|
|
void *HuMemMemoryAllocNum(void *heap_ptr, s32 size, u32 num, u32 retaddr);
|
|
void HuMemMemoryFree(void *ptr, u32 retaddr);
|
|
void HuMemMemoryFreeNum(void *heap_ptr, u32 num, u32 retaddr);
|
|
s32 HuMemUsedMemorySizeGet(void *heap_ptr);
|
|
s32 HuMemUsedMemoryBlockGet(void *heap_ptr);
|
|
s32 HuMemMemorySizeGet(void *ptr);
|
|
s32 HuMemMemoryAllocSizeGet(s32 size);
|
|
void HuMemHeapDump(void *heap_ptr, s16 status);
|
|
|
|
|
|
|
|
typedef struct data_read_stat DataReadStat;
|
|
|
|
typedef struct file_list_entry {
|
|
char *name;
|
|
s32 file_id;
|
|
} FileListEntry;
|
|
|
|
void *HuDvdDataRead(char *path);
|
|
void **HuDvdDataReadMulti(char **paths);
|
|
void *HuDvdDataReadDirect(char *path, HeapID heap);
|
|
void *HuDvdDataFastRead(s32 entrynum);
|
|
void *HuDvdDataFastReadNum(s32 entrynum, s32 num);
|
|
void *HuDvdDataFastReadAsync(s32 entrynum, DataReadStat *stat);
|
|
void HuDvdDataClose(void *ptr);
|
|
void HuDvdErrorWatch();
|
|
|
|
|
|
|
|
|
|
#define OM_DLL_MAX 20
|
|
|
|
typedef enum {
|
|
OVL_INVALID = -1,
|
|
/* "include\game\object.h" line 13 "ovl_table.h" */
|
|
OVL__MINI,
|
|
OVL_BOOT,
|
|
OVL_E3SETUP,
|
|
OVL_INST,
|
|
OVL_M300,
|
|
OVL_M302,
|
|
OVL_M303,
|
|
OVL_M330,
|
|
OVL_M333,
|
|
OVL_M401,
|
|
OVL_M402,
|
|
OVL_M403,
|
|
OVL_M404,
|
|
OVL_M405,
|
|
OVL_M406,
|
|
OVL_M407,
|
|
OVL_M408,
|
|
OVL_M409,
|
|
OVL_M410,
|
|
OVL_M411,
|
|
OVL_M412,
|
|
OVL_M413,
|
|
OVL_M414,
|
|
OVL_M415,
|
|
OVL_M416,
|
|
OVL_M417,
|
|
OVL_M418,
|
|
OVL_M419,
|
|
OVL_M420,
|
|
OVL_M421,
|
|
OVL_M422,
|
|
OVL_M423,
|
|
OVL_M424,
|
|
OVL_M425,
|
|
OVL_M426,
|
|
OVL_M427,
|
|
OVL_M428,
|
|
OVL_M429,
|
|
OVL_M430,
|
|
OVL_M431,
|
|
OVL_M432,
|
|
OVL_M433,
|
|
OVL_M434,
|
|
OVL_M435,
|
|
OVL_M436,
|
|
OVL_M437,
|
|
OVL_M438,
|
|
OVL_M439,
|
|
OVL_M440,
|
|
OVL_M441,
|
|
OVL_M442,
|
|
OVL_M443,
|
|
OVL_M444,
|
|
OVL_M445,
|
|
OVL_M446,
|
|
OVL_M447,
|
|
OVL_M448,
|
|
OVL_M449,
|
|
OVL_M450,
|
|
OVL_M451,
|
|
OVL_M453,
|
|
OVL_M455,
|
|
OVL_M456,
|
|
OVL_M457,
|
|
OVL_M458,
|
|
OVL_M459,
|
|
OVL_M460,
|
|
OVL_M461,
|
|
OVL_M462,
|
|
OVL_M463,
|
|
OVL_MENT,
|
|
OVL_MESS,
|
|
OVL_MGMODE,
|
|
OVL_MODELTEST,
|
|
OVL_MODESEL,
|
|
OVL_MPEX,
|
|
OVL_MSETUP,
|
|
OVL_MSTORY2,
|
|
OVL_MSTORY3,
|
|
OVL_MSTORY4,
|
|
OVL_MSTORY,
|
|
OVL_NIS,
|
|
OVL_OPTION,
|
|
OVL_PRESENT,
|
|
OVL_RESULT,
|
|
OVL_SAF,
|
|
OVL_SELMENU,
|
|
OVL_STAFF,
|
|
OVL_SUBCHRSEL,
|
|
OVL_W01,
|
|
OVL_W02,
|
|
OVL_W03,
|
|
OVL_W04,
|
|
OVL_W05,
|
|
OVL_W06,
|
|
OVL_W10,
|
|
OVL_W20,
|
|
OVL_W21,
|
|
OVL_ZTAR,
|
|
OVL_COUNT
|
|
} OverlayID;
|
|
|
|
#define OM_STAT_DELETED 0x1
|
|
#define OM_STAT_DISABLED 0x2
|
|
#define OM_STAT_ACTIVE 0x4
|
|
#define OM_STAT_PAUSED 0x10
|
|
#define OM_STAT_NOPAUSE 0x20
|
|
#define OM_STAT_MODEL_PAUSED 0x100
|
|
|
|
|
|
#define OM_GET_WORK_PTR(object, type) ((type *)(&((object)->work[0])))
|
|
#define OM_GET_DATA_PTR(object, type) ((type *)(((object)->data)))
|
|
|
|
typedef void (*omObjFunc)(struct om_obj_data *);
|
|
|
|
typedef struct om_ovl_his_data {
|
|
OverlayID overlay;
|
|
int event;
|
|
int stat;
|
|
} omOvlHisData;
|
|
|
|
typedef struct om_obj_data {
|
|
/* 0x00 */ u16 stat;
|
|
/* 0x02 */ s16 next_idx_alloc;
|
|
/* 0x04 */ s16 prio;
|
|
/* 0x06 */ s16 prev;
|
|
/* 0x08 */ s16 next;
|
|
/* 0x0A */ s16 next_idx;
|
|
/* 0x0C */ s16 group;
|
|
/* 0x0E */ u16 group_idx;
|
|
/* 0x10 */ u32 unk10;
|
|
/* 0x14 */ omObjFunc func;
|
|
/* 0x18 */ Vec trans;
|
|
/* 0x24 */ Vec rot;
|
|
/* 0x30 */ Vec scale;
|
|
/* 0x3C */ u16 mdlcnt;
|
|
/* 0x40 */ s16 *model;
|
|
/* 0x44 */ u16 mtncnt;
|
|
/* 0x48 */ s16 *motion;
|
|
/* 0x4C */ u32 work[4];
|
|
/* 0x5C */ void *data;
|
|
} omObjData;
|
|
|
|
typedef struct om_dll_data {
|
|
char *name;
|
|
OSModuleHeader *module;
|
|
void *bss;
|
|
s32 ret;
|
|
} omDllData;
|
|
|
|
void omMasterInit(int prio, FileListEntry *ovl_list, int ovl_count, OverlayID start_ovl);
|
|
void omOvlCallEx(OverlayID overlay, s16 arg2, int event, int stat);
|
|
void omOvlGotoEx(OverlayID overlay, s16 arg2, int event, int stat);
|
|
void omOvlReturnEx(s16 level, s16 arg2);
|
|
void omOvlKill(s16 arg);
|
|
void omOvlHisChg(s32 level, OverlayID overlay, int event, int stat);
|
|
omOvlHisData *omOvlHisGet(s32 level);
|
|
Process *omInitObjMan(s16 max_objs, int prio);
|
|
void omDestroyObjMan(void);
|
|
omObjData *omAddObjEx(Process *objman_process, s16 prio, u16 mdlcnt, u16 mtncnt, s16 group, omObjFunc func);
|
|
void omAddMember(Process *objman_process, u16 group, omObjData *object);
|
|
void omDelObjEx(Process *objman_process, omObjData *object);
|
|
void omDelMember(Process *objman_process, omObjData *object);
|
|
void omMakeGroupEx(Process *objman_process, u16 group, u16 max_objs);
|
|
omObjData **omGetGroupMemberListEx(Process *objman_process, s16 group);
|
|
void omSetStatBit(omObjData *obj, u16 stat);
|
|
void omResetStatBit(omObjData *obj, u16 stat);
|
|
void omSetTra(omObjData *obj, float x, float y, float z);
|
|
void omSetRot(omObjData *obj, float x, float y, float z);
|
|
void omSetSca(omObjData *obj, float x, float y, float z);
|
|
void omMain(void);
|
|
void omAllPause(BOOL pause);
|
|
char omPauseChk(void);
|
|
OverlayID omCurrentOvlGet(void);
|
|
|
|
|
|
void omDLLDBGOut(void);
|
|
void omDLLInit(FileListEntry *ovl_list);
|
|
int omDLLStart(s16 overlay, s16 flag);
|
|
void omDLLNumEnd(s16 overlay, s16 flag);
|
|
void omDLLEnd(s16 dllno, s16 flag);
|
|
omDllData *omDLLLink(omDllData **dll_ptr, s16 overlay, s16 flag);
|
|
void omDLLUnlink(omDllData *dll_ptr, s16 flag);
|
|
s32 omDLLSearch(s16 overlay);
|
|
void omDLLInfoDump(OSModuleInfo *module);
|
|
void omDLLHeaderDump(OSModuleHeader *module);
|
|
|
|
void omOutView(omObjData *object);
|
|
void omOutViewMulti(omObjData *object);
|
|
void omSystemKeyCheckSetup(Process *objman);
|
|
void omSystemKeyCheck(omObjData *object);
|
|
void omSysPauseEnable(u8 flag);
|
|
void omSysPauseCtrl(s16 flag);
|
|
|
|
extern omObjData *omDBGSysKeyObj;
|
|
extern Process *omwatchproc;
|
|
extern OverlayID omnextovl;
|
|
extern OverlayID omcurovl;
|
|
extern int omcurdll;
|
|
extern int omovlhisidx;
|
|
extern int omovlevtno;
|
|
extern int omnextovlevtno;
|
|
extern int omovlstat;
|
|
extern char omUPauseFlag;
|
|
extern s16 omSysExitReq;
|
|
extern s16 omdispinfo;
|
|
extern u8 omSysPauseEnableFlag;
|
|
extern OverlayID omprevovl;
|
|
|
|
extern omDllData *omDLLinfoTbl[OM_DLL_MAX];
|
|
|
|
extern Vec CRot;
|
|
extern Vec Center;
|
|
extern float CZoom;
|
|
extern Vec CRotM[16];
|
|
extern Vec CenterM[16];
|
|
extern float CZoomM[16];
|
|
extern s16 omDBGMenuButton;
|
|
|
|
|
|
|
|
typedef struct hu_snd_grp_data {
|
|
/* 0x00 */ s16 ovl;
|
|
/* 0x02 */ s16 grpset;
|
|
/* 0x04 */ s32 auxANo;
|
|
/* 0x08 */ s32 auxBNo;
|
|
/* 0x0C */ s8 auxAVol;
|
|
/* 0x0D */ s8 auxBVol;
|
|
} HuSndGrpData;
|
|
|
|
void HuAudInit(void);
|
|
s32 HuAudStreamPlay(void);
|
|
void HuAudStreamVolSet(s16 vol);
|
|
void HuAudStreamPauseOn(void);
|
|
void HuAudStreamPauseOff(void);
|
|
void HuAudStreamFadeOut(void);
|
|
void HuAudAllStop(void);
|
|
void HuAudFadeOut(s32 arg0);
|
|
s32 HuAudFXPlay(s32 arg0);
|
|
s32 HuAudFXPlayVol(s32 arg0, s16 arg1);
|
|
s32 HuAudFXPlayVolPan(s32 arg0, s16 arg1, s16 arg2);
|
|
void HuAudFXStop(s32 arg0);
|
|
void HuAudFXAllStop(void);
|
|
void HuAudFXFadeOut(s32 arg0, s32 arg1);
|
|
void HuAudFXPanning(s32 arg0, s16 arg1);
|
|
void HuAudFXListnerSet(Vec* arg0, Vec* arg1, float arg2, float arg3);
|
|
void HuAudFXListnerSetEX(Vec* arg0, Vec* arg1, float sndDist, float sndSpeed, float arg4, float arg5, float arg6);
|
|
void HuAudFXListnerUpdate(Vec *arg0, Vec *arg1);
|
|
s32 HuAudFXEmiterPlay(s32 arg0, Vec *arg1);
|
|
void HuAudFXEmiterUpDate(s32 arg0, Vec *arg1);
|
|
void HuAudFXListnerKill(void);
|
|
void HuAudFXPauseAll(s32 arg0);
|
|
s32 HuAudFXStatusGet(s32 arg0);
|
|
s32 HuAudFXPitchSet(s32 arg0, s16 arg1);
|
|
s32 HuAudFXVolSet(s32 arg0, s16 arg1);
|
|
s32 HuAudSeqPlay(s16 arg0);
|
|
void HuAudSeqStop(s32 arg0);
|
|
void HuAudSeqFadeOut(s32 arg0, s32 arg1);
|
|
void HuAudSeqAllFadeOut(s32 arg0);
|
|
void HuAudSeqAllStop(void);
|
|
void HuAudSeqPauseAll(s32 arg0);
|
|
void HuAudSeqPause(s32 arg0, s32 arg1, s32 arg2);
|
|
s32 HuAudSeqMidiCtrlGet(s32 arg0, s8 arg1, s8 arg2);
|
|
s32 HuAudSStreamPlay(s16 arg0);
|
|
void HuAudSStreamStop(s32 arg0);
|
|
void HuAudSStreamFadeOut(s32 arg0, s32 arg1);
|
|
void HuAudSStreamAllFadeOut(s32 arg0);
|
|
void HuAudSStreamAllStop(void);
|
|
s32 HuAudSStreamStatGet(s32 arg0);
|
|
void HuAudDllSndGrpSet(u16 ovl);
|
|
void HuAudSndGrpSetSet(s16 arg0);
|
|
void HuAudSndGrpSet(s16 arg0);
|
|
void HuAudSndCommonGrpSet(s16 arg0, s32 arg1);
|
|
void HuAudAUXSet(s32 arg0, s32 arg1);
|
|
void HuAudAUXVolSet(s8 arg0, s8 arg1);
|
|
void HuAudVoiceInit(s16 ovl);
|
|
s32 HuAudPlayerVoicePlay(s16 arg0, s16 arg1);
|
|
s32 HuAudPlayerVoicePlayPos(s16 arg0, s16 arg1, Vec *arg2);
|
|
void HuAudPlayerVoicePlayEntry(s16 arg0, s16 arg1);
|
|
s32 HuAudCharVoicePlay(s16 arg0, s16 arg1);
|
|
s32 HuAudCharVoicePlayPos(s16 arg0, s16 arg1, Vec *arg2);
|
|
void HuAudCharVoicePlayEntry(s16 arg0, s16 arg1);
|
|
|
|
extern float Snd3DBackSurDisOffset;
|
|
extern float Snd3DFrontSurDisOffset;
|
|
extern float Snd3DStartDisOffset;
|
|
extern float Snd3DSpeedOffset;
|
|
extern float Snd3DDistOffset;
|
|
extern s32 musicOffF;
|
|
extern u8 fadeStat;
|
|
|
|
extern HuSndGrpData HuSndGrpTbl[];
|
|
|
|
|
|
/* "include\game\flag.h" line 3 "dolphin/types.h" */
|
|
/* end "dolphin/types.h" */
|
|
|
|
#define FLAG_ID_MAKE(group, index) (((group) << 16)|(index))
|
|
|
|
s32 _CheckFlag(u32 flag);
|
|
void _SetFlag(u32 flag);
|
|
void _ClearFlag(u32 flag);
|
|
void _InitFlag(void);
|
|
|
|
|
|
//HACK: to prevent prototype errors
|
|
extern void HuPadRumbleAllStop(void);
|
|
|
|
typedef struct player_config {
|
|
s16 character;
|
|
s16 pad_idx;
|
|
s16 diff;
|
|
s16 group;
|
|
s16 iscom;
|
|
} PlayerConfig;
|
|
|
|
typedef struct system_state {
|
|
/* 0x00 */ struct {
|
|
u8 party : 1;
|
|
u8 team : 1;
|
|
};
|
|
/* 0x01 */ u8 diff_story;
|
|
/* 0x02 */ struct {
|
|
u16 bonus_star : 1;
|
|
u16 explain_mg : 1;
|
|
u16 show_com_mg : 1;
|
|
u16 mg_list : 2;
|
|
u16 mess_speed : 2;
|
|
u16 save_mode : 2;
|
|
};
|
|
/* 0x04 */ u8 turn;
|
|
/* 0x05 */ u8 max_turn;
|
|
/* 0x06 */ u8 star_flag;
|
|
/* 0x07 */ u8 star_total;
|
|
/* 0x08 */ struct {
|
|
u8 star_pos : 3;
|
|
u8 board : 5;
|
|
};
|
|
/* 0x09 */ s8 last5_effect;
|
|
/* 0x0A */ s8 player_curr;
|
|
/* 0x0B */ s8 unk0B[3];
|
|
/* 0x0E */ s16 block_pos;
|
|
/* 0x10 */ u8 board_data[32];
|
|
/* 0x30 */ u8 mess_delay;
|
|
/* 0x31 */ struct {
|
|
u8 bowser_loss : 4;
|
|
u8 bowser_event : 4;
|
|
};
|
|
/* 0x32 */ s8 lucky_value;
|
|
/* 0x34 */ u16 mg_next;
|
|
/* 0x36 */ s16 mg_type;
|
|
/* 0x38 */ u16 unk_38;
|
|
/* 0x3A */ u8 flag[3][16];
|
|
/* 0x6A */ u8 unk_6A[0x72];
|
|
} SystemState; //8018fcf8, sizeof 0xDC
|
|
|
|
typedef struct player_state {
|
|
/* 0x00 */ struct {
|
|
u16 diff : 2;
|
|
u16 com : 1;
|
|
u16 character : 4;
|
|
u16 auto_size : 2;
|
|
u16 draw_ticket : 1;
|
|
u16 ticket_player : 6;
|
|
};
|
|
/* 0x02 */ struct {
|
|
u8 team : 1;
|
|
u8 spark : 1;
|
|
u8 player_idx : 2;
|
|
};
|
|
/* 0x03 */ s8 handicap;
|
|
/* 0x04 */ s8 port;
|
|
/* 0x05 */ s8 items[3];
|
|
/* 0x08 */ struct {
|
|
u16 color : 2;
|
|
u16 moving : 1;
|
|
u16 jump : 1;
|
|
u16 show_next : 1;
|
|
u16 size : 2;
|
|
u16 num_dice : 2;
|
|
u16 rank : 2;
|
|
u16 bowser_suit : 1;
|
|
u16 team_backup : 1;
|
|
};
|
|
/* 0x0A */ s8 roll;
|
|
/* 0x0C */ s16 space_curr;
|
|
/* 0x0E */ s16 space_prev;
|
|
/* 0x10 */ s16 space_next;
|
|
/* 0x12 */ s16 space_shock;
|
|
/* 0x14 */ s8 blue_count;
|
|
/* 0x15 */ s8 red_count;
|
|
/* 0x16 */ s8 question_count;
|
|
/* 0x17 */ s8 fortune_count;
|
|
/* 0x18 */ s8 bowser_count;
|
|
/* 0x19 */ s8 battle_count;
|
|
/* 0x1A */ s8 mushroom_count;
|
|
/* 0x1B */ s8 warp_count;
|
|
/* 0x1C */ s16 coins;
|
|
/* 0x1E */ s16 coins_mg;
|
|
/* 0x20 */ s16 coins_total;
|
|
/* 0x22 */ s16 coins_max;
|
|
/* 0x24 */ s16 coins_battle;
|
|
/* 0x26 */ s16 coin_collect;
|
|
/* 0x28 */ s16 coin_win;
|
|
/* 0x2A */ s16 stars;
|
|
/* 0x2C */ s16 stars_max;
|
|
/* 0x2E */ char unk_2E[2];
|
|
} PlayerState; //size of 0x30
|
|
|
|
typedef struct pause_backup_config {
|
|
u8 explain_mg : 1;
|
|
u8 show_com_mg : 1;
|
|
u8 mg_list : 2;
|
|
u8 mess_speed : 2;
|
|
u8 save_mode : 2;
|
|
} PauseBackupConfig;
|
|
|
|
typedef struct game_stat {
|
|
/* 0x0 */ s16 unk_00;
|
|
/* 0x2 */ u8 language;
|
|
/* 0x3 */ u8 sound_mode;
|
|
/* 0x4 */ s8 rumble;
|
|
/* 0x6 */ u16 total_stars;
|
|
/* 0x8 */ OSTime create_time;
|
|
/* 0x10 */ u32 mg_custom[2];
|
|
/* 0x18 */ u32 mg_avail[2];
|
|
/* 0x20 */ u32 mg_record[15];
|
|
/* 0x5C */ u8 board_win_count[9][8];
|
|
/* 0xA4 */ u8 board_play_count[9];
|
|
/* 0xAE */ u16 board_max_stars[9];
|
|
/* 0xC0 */ u16 board_max_coins[9];
|
|
/* 0xD2 */ u8 present[60];
|
|
/* 0x10E */ struct {
|
|
u8 story_continue : 1;
|
|
u8 party_continue : 1;
|
|
u8 open_w06 : 1;
|
|
u8 field10E_bit4 : 1;
|
|
u8 field10E_bit5 : 1;
|
|
u8 field10E_bit6 : 1;
|
|
};
|
|
/* 0x10F */ PauseBackupConfig story_pause;
|
|
/* 0x110 */ PauseBackupConfig party_pause;
|
|
} GameStat;
|
|
|
|
extern PlayerConfig GWPlayerCfg[4];
|
|
extern PlayerState GWPlayer[4];
|
|
extern SystemState GWSystem;
|
|
extern GameStat GWGameStat;
|
|
|
|
static inline s32 GWTeamGet(void)
|
|
{
|
|
return GWSystem.team;
|
|
}
|
|
|
|
static inline s32 GWMGTypeGet(void)
|
|
{
|
|
return GWSystem.mg_type;
|
|
}
|
|
|
|
static inline void GWMGTypeSet(s32 type)
|
|
{
|
|
GWSystem.mg_type = type;
|
|
}
|
|
|
|
static inline s32 GWPartyGet(void)
|
|
{
|
|
return GWSystem.party;
|
|
}
|
|
|
|
static inline s32 GWLanguageGet(void)
|
|
{
|
|
return GWGameStat.language;
|
|
}
|
|
|
|
static inline s32 GWRumbleGet(void)
|
|
{
|
|
return GWGameStat.rumble;
|
|
}
|
|
|
|
static inline void GWRumbleSet(s32 value)
|
|
{
|
|
GWGameStat.rumble = value;
|
|
if(value == 0) {
|
|
HuPadRumbleAllStop();
|
|
}
|
|
}
|
|
|
|
static inline s32 GWMGExplainGet(void)
|
|
{
|
|
return GWSystem.explain_mg;
|
|
}
|
|
|
|
static inline void GWMGExplainSet(s32 value)
|
|
{
|
|
GWSystem.explain_mg = value;
|
|
}
|
|
|
|
static inline s32 GWMGShowComGet(void)
|
|
{
|
|
return GWSystem.show_com_mg;
|
|
}
|
|
|
|
static inline void GWMGShowComSet(s32 value)
|
|
{
|
|
GWSystem.show_com_mg = value;
|
|
}
|
|
|
|
static inline s32 GWMGListGet(void)
|
|
{
|
|
if (GWSystem.mg_list == 3) {
|
|
GWSystem.mg_list = 0;
|
|
}
|
|
return GWSystem.mg_list;
|
|
}
|
|
|
|
static inline void GWMGListSet(s32 value)
|
|
{
|
|
GWSystem.mg_list = value;
|
|
}
|
|
|
|
static inline s32 GWMessSpeedGet(void)
|
|
{
|
|
if (GWSystem.mess_speed == 3) {
|
|
GWSystem.mess_speed = 1;
|
|
}
|
|
return GWSystem.mess_speed;
|
|
}
|
|
|
|
static inline void GWMessSpeedSet(s32 value)
|
|
{
|
|
GWSystem.mess_speed = value;
|
|
switch(value) {
|
|
case 0:
|
|
GWSystem.mess_delay = 16;
|
|
break;
|
|
|
|
case 2:
|
|
GWSystem.mess_delay = 48;
|
|
break;
|
|
|
|
default:
|
|
GWSystem.mess_delay = 32;
|
|
break;
|
|
}
|
|
}
|
|
|
|
static inline void GWSaveModeSet(s32 value)
|
|
{
|
|
GWSystem.save_mode = value;
|
|
}
|
|
|
|
static inline s32 GWSaveModeGet(void)
|
|
{
|
|
if (GWSystem.save_mode == 3) {
|
|
GWSaveModeSet(1);
|
|
}
|
|
return GWSystem.save_mode;
|
|
}
|
|
|
|
static inline s32 GWTurnGet(void)
|
|
{
|
|
return GWSystem.turn;
|
|
}
|
|
|
|
static inline s32 GWBoardGet(void)
|
|
{
|
|
return GWSystem.board;
|
|
}
|
|
|
|
static inline s32 GWPlayerTeamGet(s32 player)
|
|
{
|
|
return GWPlayer[player].team;
|
|
}
|
|
|
|
static inline s32 GWLuckyValueGet(void)
|
|
{
|
|
return GWSystem.lucky_value;
|
|
}
|
|
|
|
static inline void GWLuckyValueSet(s32 value)
|
|
{
|
|
GWSystem.lucky_value = value;
|
|
}
|
|
|
|
static inline s16 GWPlayerCoinBattleGet(s32 player)
|
|
{
|
|
return GWPlayer[player].coins_battle;
|
|
}
|
|
|
|
static inline s16 GWPlayerCoinCollectGet(s32 player)
|
|
{
|
|
return GWPlayer[player].coin_collect;
|
|
}
|
|
|
|
static inline void GWPlayerCoinCollectSet(s32 player, s16 value)
|
|
{
|
|
GWPlayer[player].coin_collect = value;
|
|
}
|
|
|
|
static inline s16 GWPlayerCoinWinGet(s32 player)
|
|
{
|
|
return GWPlayer[player].coin_win;
|
|
}
|
|
|
|
static inline void GWPlayerCoinWinSet(s32 player, s16 value)
|
|
{
|
|
if (_CheckFlag(0x1000C) == 0) {
|
|
GWPlayer[player].coin_win = value;
|
|
}
|
|
}
|
|
|
|
#define GWPlayerCoinWinAdd(player, value) GWPlayerCoinWinSet((player), GWPlayerCoinWinGet((player))+(value))
|
|
#define GWPlayerCoinCollectAdd(player, value) GWPlayerCoinCollectSet((player), GWPlayerCoinCollectGet((player))+(value))
|
|
|
|
/* end "game/gamework_data.h" */
|
|
/* "src\REL\E3setupDLL\main.c" line 3 "game/hsfman.h" */
|
|
|
|
#define _GAME_HSFMAN_H
|
|
|
|
/* "include\game\hsfman.h" line 3 "game/hsfanim.h" */
|
|
|
|
#define GAME_HSFANIM_H
|
|
|
|
/* "include\game\hsfanim.h" line 3 "game/hsfformat.h" */
|
|
|
|
#define _GAME_HSFFORMAT_H
|
|
|
|
/* "include\game\hsfformat.h" line 3 "dolphin.h" */
|
|
/* end "dolphin.h" */
|
|
/* "include\game\hsfformat.h" line 4 "game/animdata.h" */
|
|
|
|
#define _GAME_ANIMDATA_H
|
|
|
|
/* "include\game\animdata.h" line 3 "dolphin.h" */
|
|
/* end "dolphin.h" */
|
|
|
|
#define ANIM_BMP_RGBA8 0
|
|
#define ANIM_BMP_RGB5A3 1
|
|
#define ANIM_BMP_RGB5A3_DUPE 2
|
|
#define ANIM_BMP_C8 3
|
|
#define ANIM_BMP_C4 4
|
|
#define ANIM_BMP_IA8 5
|
|
#define ANIM_BMP_IA4 6
|
|
#define ANIM_BMP_I8 7
|
|
#define ANIM_BMP_I4 8
|
|
#define ANIM_BMP_A8 9
|
|
#define ANIM_BMP_CMPR 10
|
|
|
|
#define ANIM_BMP_FMTMASK 0xF
|
|
#define ANIM_BMP_ALLOC 0x8000
|
|
#define ANIM_BMP_NUM_MASK 0x7FFF
|
|
|
|
#define ANIM_LAYER_FLIPX 0x1
|
|
#define ANIM_LAYER_FLIPY 0x2
|
|
|
|
typedef struct anim_frame_data {
|
|
s16 pat;
|
|
s16 time;
|
|
s16 shiftX;
|
|
s16 shiftY;
|
|
s16 flip;
|
|
s16 pad;
|
|
} AnimFrameData;
|
|
|
|
typedef struct anim_bank_data {
|
|
s16 timeNum;
|
|
s16 unk;
|
|
AnimFrameData *frame;
|
|
} AnimBankData;
|
|
|
|
typedef struct anim_layer_data {
|
|
u8 alpha;
|
|
u8 flip;
|
|
s16 bmpNo;
|
|
s16 startX;
|
|
s16 startY;
|
|
s16 sizeX;
|
|
s16 sizeY;
|
|
s16 shiftX;
|
|
s16 shiftY;
|
|
s16 vtx[8];
|
|
} AnimLayerData;
|
|
|
|
typedef struct anim_pat_data {
|
|
s16 layerNum;
|
|
s16 centerX;
|
|
s16 centerY;
|
|
s16 sizeX;
|
|
s16 sizeY;
|
|
AnimLayerData *layer;
|
|
} AnimPatData;
|
|
|
|
typedef struct anim_bmp_data {
|
|
u8 pixSize;
|
|
u8 dataFmt;
|
|
s16 palNum;
|
|
s16 sizeX;
|
|
s16 sizeY;
|
|
u32 dataSize;
|
|
void *palData;
|
|
void *data;
|
|
} AnimBmpData;
|
|
|
|
typedef struct anim_data {
|
|
s16 bankNum;
|
|
s16 patNum;
|
|
s16 bmpNum;
|
|
s16 useNum;
|
|
AnimBankData *bank;
|
|
AnimPatData *pat;
|
|
AnimBmpData *bmp;
|
|
} AnimData;
|
|
|
|
|
|
#define HSF_OBJ_NULL1 0
|
|
#define HSF_OBJ_REPLICA 1
|
|
#define HSF_OBJ_MESH 2
|
|
#define HSF_OBJ_ROOT 3
|
|
#define HSF_OBJ_JOINT 4
|
|
#define HSF_OBJ_NULL2 5
|
|
#define HSF_OBJ_NULL3 6
|
|
#define HSF_OBJ_NONE1 7
|
|
#define HSF_OBJ_NONE2 8
|
|
#define HSF_OBJ_MAP 9
|
|
|
|
#define HSF_TRACK_TRANSFORM 2
|
|
#define HSF_TRACK_MORPH 3
|
|
#define HSF_TRACK_CLUSTER 5
|
|
#define HSF_TRACK_CLUSTER_WEIGHT 6
|
|
#define HSF_TRACK_MATERIAL 9
|
|
#define HSF_TRACK_ATTRIBUTE 10
|
|
|
|
#define HSF_CURVE_STEP 0
|
|
#define HSF_CURVE_LINEAR 1
|
|
#define HSF_CURVE_BEZIER 2
|
|
#define HSF_CURVE_BITMAP 3
|
|
#define HSF_CURVE_CONST 4
|
|
|
|
typedef struct hsf_vector3f {
|
|
float x;
|
|
float y;
|
|
float z;
|
|
} HsfVector3f;
|
|
|
|
typedef struct hsf_vector2f {
|
|
float x;
|
|
float y;
|
|
} HsfVector2f;
|
|
|
|
typedef struct hsf_section {
|
|
s32 ofs;
|
|
s32 count;
|
|
} HsfSection;
|
|
|
|
typedef struct hsf_header {
|
|
char magic[8];
|
|
HsfSection scene;
|
|
HsfSection color;
|
|
HsfSection material;
|
|
HsfSection attribute;
|
|
HsfSection vertex;
|
|
HsfSection normal;
|
|
HsfSection st;
|
|
HsfSection face;
|
|
HsfSection object;
|
|
HsfSection bitmap;
|
|
HsfSection palette;
|
|
HsfSection motion;
|
|
HsfSection cenv;
|
|
HsfSection skeleton;
|
|
HsfSection part;
|
|
HsfSection cluster;
|
|
HsfSection shape;
|
|
HsfSection mapAttr;
|
|
HsfSection matrix;
|
|
HsfSection symbol;
|
|
HsfSection string;
|
|
} HsfHeader;
|
|
|
|
typedef struct hsf_scene {
|
|
GXFogType fogType;
|
|
f32 start;
|
|
f32 end;
|
|
GXColor color;
|
|
} HsfScene;
|
|
|
|
typedef struct hsf_bitmap {
|
|
char *name;
|
|
u32 maxLod;
|
|
u8 dataFmt;
|
|
u8 pixSize;
|
|
s16 sizeX;
|
|
s16 sizeY;
|
|
s16 palSize;
|
|
GXColor tint;
|
|
void *palData;
|
|
u32 unk;
|
|
void *data;
|
|
} HsfBitmap;
|
|
|
|
typedef struct hsf_palette {
|
|
char *name;
|
|
s32 unk;
|
|
u32 palSize;
|
|
u16 *data;
|
|
} HsfPalette;
|
|
|
|
typedef struct hsf_attribute {
|
|
char *name;
|
|
void *unk04;
|
|
u8 unk8[4];
|
|
float unk0C;
|
|
u8 unk10[4];
|
|
float unk14;
|
|
u8 unk18[8];
|
|
float unk20;
|
|
u8 unk24[4];
|
|
float unk28;
|
|
float unk2C;
|
|
float unk30;
|
|
float unk34;
|
|
u8 unk38[44];
|
|
u32 wrap_s;
|
|
u32 wrap_t;
|
|
u8 unk6C[12];
|
|
u32 unk78;
|
|
u32 flag;
|
|
HsfBitmap *bitmap;
|
|
} HsfAttribute;
|
|
|
|
typedef struct hsf_material {
|
|
char *name;
|
|
u8 unk4[4];
|
|
u16 pass;
|
|
u8 vtxMode;
|
|
u8 litColor[3];
|
|
u8 color[3];
|
|
u8 shadowColor[3];
|
|
float hilite_scale;
|
|
float unk18;
|
|
float invAlpha;
|
|
float unk20[2];
|
|
float refAlpha;
|
|
float unk2C;
|
|
u32 flags;
|
|
u32 numAttrs;
|
|
s32 *attrs;
|
|
} HsfMaterial;
|
|
|
|
typedef struct hsf_vertex_buf {
|
|
char *name;
|
|
s32 count;
|
|
void *data;
|
|
} HsfBuffer;
|
|
|
|
typedef struct hsf_face {
|
|
s16 type;
|
|
s16 mat;
|
|
union {
|
|
struct {
|
|
s16 indices[3][4];
|
|
u32 count;
|
|
s16 *data;
|
|
} strip;
|
|
s16 indices[4][4];
|
|
};
|
|
float nbt[3];
|
|
} HsfFace;
|
|
|
|
typedef struct hsf_const_data {
|
|
u32 flags;
|
|
s16 hook;
|
|
u8 unk6[2];
|
|
void *unk08;
|
|
void *unk0C;
|
|
Mtx unk10;
|
|
AnimData *hilite_map;
|
|
} HsfConstData;
|
|
|
|
typedef struct hsf_transform {
|
|
Vec pos;
|
|
Vec rot;
|
|
Vec scale;
|
|
} HsfTransform;
|
|
|
|
typedef struct hsf_cenv_single {
|
|
u32 target;
|
|
u16 pos;
|
|
u16 posCnt;
|
|
u16 normal;
|
|
u16 normalCnt;
|
|
} HsfCenvSingle;
|
|
|
|
typedef struct hsf_cenv_dual_weight {
|
|
float weight;
|
|
u16 pos;
|
|
u16 posCnt;
|
|
u16 normal;
|
|
u16 normalCnt;
|
|
} HsfCenvDualWeight;
|
|
|
|
typedef struct hsf_cenv_dual {
|
|
u32 target1;
|
|
u32 target2;
|
|
u32 weightCnt;
|
|
HsfCenvDualWeight *weight;
|
|
} HsfCenvDual;
|
|
|
|
typedef struct hsf_cenv_multi_weight {
|
|
u32 target;
|
|
float value;
|
|
} HsfCenvMultiWeight;
|
|
|
|
typedef struct hsf_cenv_multi {
|
|
u32 weightCnt;
|
|
u16 pos;
|
|
u16 posCnt;
|
|
u16 normal;
|
|
u16 normalCnt;
|
|
HsfCenvMultiWeight *weight;
|
|
} HsfCenvMulti;
|
|
|
|
typedef struct hsf_cenv {
|
|
char *name;
|
|
HsfCenvSingle *singleData;
|
|
HsfCenvDual *dualData;
|
|
HsfCenvMulti *multiData;
|
|
u32 singleCount;
|
|
u32 dualCount;
|
|
u32 multiCount;
|
|
u32 vtxCount;
|
|
u32 copyCount;
|
|
} HsfCenv;
|
|
|
|
typedef struct hsf_part {
|
|
char *name;
|
|
u32 count;
|
|
u16 *vertex;
|
|
} HsfPart;
|
|
|
|
typedef struct hsf_cluster {
|
|
char *name[2];
|
|
union {
|
|
char *targetName;
|
|
s32 target;
|
|
};
|
|
HsfPart *part;
|
|
float unk10;
|
|
float unk14[1]; // unknown array size
|
|
u8 unk18[124];
|
|
u8 adjusted;
|
|
u8 unk95;
|
|
u16 type;
|
|
u32 vertexCnt;
|
|
HsfBuffer **vertex;
|
|
} HsfCluster;
|
|
|
|
typedef struct hsf_shape {
|
|
char *name;
|
|
union {
|
|
u16 count16[2];
|
|
u32 vertexCnt;
|
|
};
|
|
HsfBuffer **vertex;
|
|
} HsfShape;
|
|
|
|
typedef struct hsf_object_data {
|
|
struct hsf_object *parent;
|
|
u32 childrenCount;
|
|
struct hsf_object **children;
|
|
HsfTransform base;
|
|
HsfTransform curr;
|
|
union {
|
|
struct {
|
|
HsfVector3f min;
|
|
HsfVector3f max;
|
|
float baseMorph;
|
|
float morphWeight[33];
|
|
} mesh;
|
|
struct hsf_object *replica;
|
|
};
|
|
|
|
HsfBuffer *face;
|
|
HsfBuffer *vertex;
|
|
HsfBuffer *normal;
|
|
HsfBuffer *color;
|
|
HsfBuffer *st;
|
|
HsfMaterial *material;
|
|
HsfAttribute *attribute;
|
|
u8 unk120[2];
|
|
u8 shapeType;
|
|
u8 unk123;
|
|
u32 vertexShapeCnt;
|
|
HsfBuffer **vertexShape;
|
|
u32 clusterCnt;
|
|
HsfCluster **cluster;
|
|
u32 cenvCnt;
|
|
HsfCenv *cenv;
|
|
void *file[2];
|
|
} HsfObjectData;
|
|
|
|
typedef struct hsf_camera {
|
|
HsfVector3f target;
|
|
HsfVector3f pos;
|
|
float aspect_dupe;
|
|
float fov;
|
|
float near;
|
|
float far;
|
|
} HsfCamera;
|
|
|
|
typedef struct hsf_light {
|
|
HsfVector3f pos;
|
|
HsfVector3f target;
|
|
u8 type;
|
|
u8 r;
|
|
u8 g;
|
|
u8 b;
|
|
float unk2C;
|
|
float ref_distance;
|
|
float ref_brightness;
|
|
float cutoff;
|
|
} HsfLight;
|
|
typedef struct hsf_object {
|
|
char *name;
|
|
u32 type;
|
|
HsfConstData *constData;
|
|
u32 flags;
|
|
union {
|
|
HsfObjectData data;
|
|
HsfCamera camera;
|
|
HsfLight light;
|
|
};
|
|
} HsfObject;
|
|
|
|
typedef struct hsf_skeleton {
|
|
char *name;
|
|
HsfTransform transform;
|
|
} HsfSkeleton;
|
|
|
|
typedef struct hsf_bitmap_keyframe {
|
|
float time;
|
|
HsfBitmap *data;
|
|
} HsfBitmapKey;
|
|
|
|
typedef struct hsf_track {
|
|
u8 type;
|
|
u8 start;
|
|
union {
|
|
u16 target;
|
|
s16 target_s16;
|
|
};
|
|
union {
|
|
s32 unk04;
|
|
struct {
|
|
union {
|
|
s16 param;
|
|
u16 param_u16;
|
|
};
|
|
union {
|
|
u16 channel;
|
|
s16 channel_s16;
|
|
};
|
|
};
|
|
};
|
|
u16 curveType;
|
|
u16 numKeyframes;
|
|
union {
|
|
float value;
|
|
void *data;
|
|
};
|
|
} HsfTrack;
|
|
|
|
typedef struct hsf_motion {
|
|
char *name;
|
|
s32 numTracks;
|
|
HsfTrack *track;
|
|
float len;
|
|
} HsfMotion;
|
|
|
|
typedef struct hsf_map_attr {
|
|
float minX;
|
|
float minZ;
|
|
float maxX;
|
|
float maxZ;
|
|
u16 *data;
|
|
u32 dataLen;
|
|
} HsfMapAttr;
|
|
|
|
typedef struct hsf_matrix {
|
|
u32 base_idx;
|
|
u32 count;
|
|
Mtx *data;
|
|
} HsfMatrix;
|
|
|
|
typedef struct hsf_data {
|
|
u8 magic[8];
|
|
HsfScene *scene;
|
|
HsfAttribute *attribute;
|
|
HsfMaterial *material;
|
|
HsfBuffer *vertex;
|
|
HsfBuffer *normal;
|
|
HsfBuffer *st;
|
|
HsfBuffer *color;
|
|
HsfBuffer *face;
|
|
HsfBitmap *bitmap;
|
|
HsfPalette *palette;
|
|
HsfObject *root;
|
|
HsfCenv *cenv;
|
|
HsfSkeleton *skeleton;
|
|
HsfCluster *cluster;
|
|
HsfPart *part;
|
|
HsfShape *shape;
|
|
HsfMotion *motion;
|
|
HsfObject *object;
|
|
HsfMapAttr *mapAttr;
|
|
HsfMatrix *matrix;
|
|
s16 sceneCnt;
|
|
s16 attributeCnt;
|
|
s16 materialCnt;
|
|
s16 vertexCnt;
|
|
s16 normalCnt;
|
|
s16 stCnt;
|
|
s16 colorCnt;
|
|
s16 faceCnt;
|
|
s16 bitmapCnt;
|
|
s16 paletteCnt;
|
|
s16 objectCnt;
|
|
s16 cenvCnt;
|
|
s16 skeletonCnt;
|
|
s16 clusterCnt;
|
|
s16 partCnt;
|
|
s16 shapeCnt;
|
|
s16 mapAttrCnt;
|
|
s16 motionCnt;
|
|
s16 matrixCnt;
|
|
} HsfData;
|
|
|
|
/* end "game/hsfformat.h" */
|
|
/* "include\game\hsfanim.h" line 4 "game/hsfman.h" */
|
|
/* end "game/hsfman.h" */
|
|
/* "include\game\hsfanim.h" line 5 "game/animdata.h" */
|
|
/* end "game/animdata.h" */
|
|
|
|
typedef struct model_data ModelData;
|
|
typedef struct particle_data ParticleData;
|
|
|
|
typedef void (*ParticleHook)(ModelData *model, ParticleData *particle, Mtx matrix);
|
|
|
|
typedef struct {
|
|
/* 0x00 */ union {
|
|
u16 unk00;
|
|
s16 unk00_s16;
|
|
};
|
|
/* 0x02 */ s16 unk02;
|
|
/* 0x04 */ s16 unk04;
|
|
/* 0x06 */ s16 unk06;
|
|
/* 0x08 */ Vec unk08;
|
|
/* 0x14 */ Vec unk14;
|
|
/* 0x20 */ float unk20;
|
|
/* 0x24 */ float unk24;
|
|
/* 0x28 */ float unk28;
|
|
/* 0x2C */ float unk2C;
|
|
/* 0x30 */ float unk30;
|
|
/* 0x34 */ Vec unk34;
|
|
/* 0x40 */ GXColor unk40;
|
|
} HsfanimStruct01; // Size 0x44
|
|
|
|
typedef struct particle_data {
|
|
/* 0x00 */ s16 unk_00;
|
|
/* 0x02 */ s16 unk_02;
|
|
/* 0x04 */ float unk_04;
|
|
/* 0x08 */ char unk_08[0x14];
|
|
/* 0x1C */ void *unk_1C;
|
|
/* 0x20 */ s16 unk_20;
|
|
/* 0x22 */ s16 unk_22;
|
|
/* 0x24 */ float unk_24;
|
|
/* 0x28 */ float unk_28;
|
|
/* 0x2C */ u8 unk_2C;
|
|
/* 0x2D */ u8 unk_2D;
|
|
/* 0x2E */ char unk_2E[2];
|
|
/* 0x30 */ s16 unk_30;
|
|
/* 0x32 */ char unk_32[2];
|
|
/* 0x34 */ u32 unk_34;
|
|
/* 0x38 */ s32 unk_38;
|
|
/* 0x3C */ u32 unk_3C;
|
|
/* 0x40 */ s32 unk_40;
|
|
/* 0x44 */ AnimData *unk_44;
|
|
/* 0x48 */ HsfanimStruct01 *unk_48;
|
|
/* 0x4C */ Vec *unk_4C;
|
|
/* 0x50 */ void *unk_50;
|
|
/* 0x54 */ ParticleHook unk_54;
|
|
} ParticleData; // Size 0x58
|
|
|
|
typedef struct {
|
|
/* 0x00 */ s16 unk00;
|
|
/* 0x02 */ char unk02[2];
|
|
/* 0x04 */ float unk04;
|
|
/* 0x08 */ float unk08;
|
|
/* 0x0C */ float unk0C;
|
|
/* 0x10 */ Vec unk10;
|
|
/* 0x1C */ float unk1C;
|
|
/* 0x20 */ float unk20;
|
|
/* 0x24 */ float unk24;
|
|
/* 0x28 */ float unk28;
|
|
/* 0x2C */ s16 unk2C;
|
|
/* 0x2E */ GXColor unk2E[4];
|
|
/* 0x3E */ GXColor unk3E[4];
|
|
} HsfanimStruct00; // Size unknown
|
|
|
|
typedef struct {
|
|
/* 0x00 */ u16 unk00;
|
|
/* 0x02 */ s16 unk02;
|
|
/* 0x04 */ s16 unk04;
|
|
/* 0x06 */ s16 unk06;
|
|
/* 0x08 */ float unk08;
|
|
/* 0x0C */ float unk0C;
|
|
/* 0x10 */ AnimData *unk10;
|
|
} Hu3DTexAnimDataStruct; // Size 0x14
|
|
|
|
typedef struct {
|
|
/* 0x00 */ u16 unk00;
|
|
/* 0x02 */ s16 unk02;
|
|
/* 0x04 */ Vec unk04;
|
|
/* 0x10 */ char unk10[0xC];
|
|
/* 0x1C */ Vec unk1C;
|
|
/* 0x28 */ char unk28[0xC];
|
|
/* 0x34 */ float unk34;
|
|
/* 0x38 */ float unk38;
|
|
/* 0x3C */ Mtx unk3C;
|
|
} Hu3DTexScrDataStruct; // Size 0x6C
|
|
|
|
void Hu3DAnimInit(void);
|
|
s16 Hu3DAnimCreate(void *arg0, s16 arg1, char *arg2);
|
|
s16 Hu3DAnimLink(s16 arg0, s16 arg1, char *arg2);
|
|
void Hu3DAnimKill(s16 arg0);
|
|
void Hu3DAnimModelKill(s16 arg0);
|
|
void Hu3DAnimAllKill(void);
|
|
void Hu3DAnimAttrSet(s16 arg0, u16 arg1);
|
|
void Hu3DAnimAttrReset(s16 arg0, s32 arg1);
|
|
void Hu3DAnimSpeedSet(s16 arg0, float arg1);
|
|
void Hu3DAnimBankSet(s16 arg0, s32 arg1);
|
|
void Hu3DAnmNoSet(s16 arg0, u16 arg1);
|
|
s32 Hu3DAnimSet(ModelData *arg0, HsfAttribute *arg1, s16 arg2);
|
|
void Hu3DAnimExec(void);
|
|
s16 Hu3DTexScrollCreate(s16 arg0, char *arg1);
|
|
void Hu3DTexScrollKill(s16 arg0);
|
|
void Hu3DTexScrollAllKill(void);
|
|
void Hu3DTexScrollPosSet(s16 arg0, float arg1, float arg2, float arg3);
|
|
void Hu3DTexScrollPosMoveSet(s16 arg0, float arg1, float arg2, float arg3);
|
|
void Hu3DTexScrollRotSet(s16 arg0, float arg1);
|
|
void Hu3DTexScrollRotMoveSet(s16 arg0, float arg1);
|
|
void Hu3DTexScrollPauseDisableSet(s16 arg0, s32 arg1);
|
|
s16 Hu3DParticleCreate(AnimData *arg0, s16 arg1);
|
|
void Hu3DParticleScaleSet(s16 arg0, float arg1);
|
|
void Hu3DParticleZRotSet(s16 arg0, float arg1);
|
|
void Hu3DParticleColSet(s16 arg0, u8 arg1, u8 arg2, u8 arg3);
|
|
void Hu3DParticleTPLvlSet(s16 arg0, float arg1);
|
|
void Hu3DParticleBlendModeSet(s16 arg0, u8 arg1);
|
|
void Hu3DParticleHookSet(s16 arg0, ParticleHook arg1);
|
|
void Hu3DParticleAttrSet(s16 arg0, u8 arg1);
|
|
void Hu3DParticleAttrReset(s16 arg0, u8 arg1);
|
|
void Hu3DParticleAnimModeSet(s16 arg0, s16 arg1);
|
|
void Hu3DParManInit(void);
|
|
s16 Hu3DParManCreate(AnimData *arg0, s16 arg1, HsfanimStruct00 *arg2);
|
|
s16 Hu3DParManLink(s16 arg0, HsfanimStruct00 *arg1);
|
|
void Hu3DParManKill(s16 arg0);
|
|
void Hu3DParManAllKill(void);
|
|
void *Hu3DParManPtrGet(s16 arg0);
|
|
void Hu3DParManPosSet(s16 arg0, float arg1, float arg2, float arg3);
|
|
void Hu3DParManVecSet(s16 arg0, float arg1, float arg2, float arg3);
|
|
void Hu3DParManRotSet(s16 arg0, float arg1, float arg2, float arg3);
|
|
void Hu3DParManAttrSet(s16 arg0, s32 arg1);
|
|
void Hu3DParManAttrReset(s16 arg0, s32 arg1);
|
|
s16 Hu3DParManModelIDGet(s16 arg0);
|
|
void Hu3DParManTimeLimitSet(s16 arg0, s32 arg1);
|
|
void Hu3DParManVacumeSet(s16 arg0, float arg1, float arg2, float arg3, float arg4);
|
|
void Hu3DParManColorSet(s16 arg0, s16 arg1);
|
|
|
|
extern Hu3DTexAnimDataStruct Hu3DTexAnimData[256];
|
|
extern Hu3DTexScrDataStruct Hu3DTexScrData[16];
|
|
|
|
/* end "game/hsfanim.h" */
|
|
/* "include\game\hsfman.h" line 4 "game/hsfformat.h" */
|
|
/* end "game/hsfformat.h" */
|
|
/* "include\game\hsfman.h" line 5 "game/memory.h" */
|
|
/* end "game/memory.h" */
|
|
/* "include\game\hsfman.h" line 6 "game/data.h" */
|
|
|
|
#define _GAME_DATA_H
|
|
|
|
/* "include\game\data.h" line 3 "game/dvd.h" */
|
|
/* end "game/dvd.h" */
|
|
|
|
/* "include\game\data.h" line 5 "datadir_enum.h" */
|
|
|
|
#define DATADIR_ENUM
|
|
|
|
|
|
enum {
|
|
/* "include\datadir_enum.h" line 6 "datadir_table.h" */
|
|
DATADIR_ID_E3SETUP,
|
|
DATADIR_ID_BBATTLE,
|
|
DATADIR_ID_BGUEST,
|
|
DATADIR_ID_BKOOPA,
|
|
DATADIR_ID_BKOOPASUIT,
|
|
DATADIR_ID_BKUJIYA,
|
|
DATADIR_ID_BLAST5,
|
|
DATADIR_ID_BOARD,
|
|
DATADIR_ID_BPAUSE,
|
|
DATADIR_ID_BYOKODORI,
|
|
DATADIR_ID_DAISY,
|
|
DATADIR_ID_DAISYMDL0,
|
|
DATADIR_ID_DAISYMDL1,
|
|
DATADIR_ID_DAISYMOT,
|
|
DATADIR_ID_DONKEY,
|
|
DATADIR_ID_DONKEYMDL0,
|
|
DATADIR_ID_DONKEYMDL1,
|
|
DATADIR_ID_DONKEYMOT,
|
|
DATADIR_ID_EFFECT,
|
|
DATADIR_ID_GAMEMES,
|
|
DATADIR_ID_INST,
|
|
DATADIR_ID_INSTFONT,
|
|
DATADIR_ID_INSTPIC,
|
|
DATADIR_ID_LUIGI,
|
|
DATADIR_ID_LUIGIMDL0,
|
|
DATADIR_ID_LUIGIMDL1,
|
|
DATADIR_ID_LUIGIMOT,
|
|
DATADIR_ID_M300,
|
|
DATADIR_ID_M302,
|
|
DATADIR_ID_M303,
|
|
DATADIR_ID_M330,
|
|
DATADIR_ID_M333,
|
|
DATADIR_ID_M401,
|
|
DATADIR_ID_M402,
|
|
DATADIR_ID_M403,
|
|
DATADIR_ID_M404,
|
|
DATADIR_ID_M405,
|
|
DATADIR_ID_M406,
|
|
DATADIR_ID_M407,
|
|
DATADIR_ID_M408,
|
|
DATADIR_ID_M409,
|
|
DATADIR_ID_M410,
|
|
DATADIR_ID_M411,
|
|
DATADIR_ID_M412,
|
|
DATADIR_ID_M413,
|
|
DATADIR_ID_M414,
|
|
DATADIR_ID_M415,
|
|
DATADIR_ID_M416,
|
|
DATADIR_ID_M417,
|
|
DATADIR_ID_M418,
|
|
DATADIR_ID_M419,
|
|
DATADIR_ID_M420,
|
|
DATADIR_ID_M421,
|
|
DATADIR_ID_M422,
|
|
DATADIR_ID_M423,
|
|
DATADIR_ID_M424,
|
|
DATADIR_ID_M425,
|
|
DATADIR_ID_M426,
|
|
DATADIR_ID_M427,
|
|
DATADIR_ID_M428,
|
|
DATADIR_ID_M429,
|
|
DATADIR_ID_M430,
|
|
DATADIR_ID_M431,
|
|
DATADIR_ID_M432,
|
|
DATADIR_ID_M433,
|
|
DATADIR_ID_M434,
|
|
DATADIR_ID_M435,
|
|
DATADIR_ID_M436,
|
|
DATADIR_ID_M437,
|
|
DATADIR_ID_M438,
|
|
DATADIR_ID_M439,
|
|
DATADIR_ID_M440,
|
|
DATADIR_ID_M441,
|
|
DATADIR_ID_M442,
|
|
DATADIR_ID_M443,
|
|
DATADIR_ID_M444,
|
|
DATADIR_ID_M445,
|
|
DATADIR_ID_M446,
|
|
DATADIR_ID_M447,
|
|
DATADIR_ID_M448,
|
|
DATADIR_ID_M449,
|
|
DATADIR_ID_M450,
|
|
DATADIR_ID_M451,
|
|
DATADIR_ID_M453,
|
|
DATADIR_ID_M455,
|
|
DATADIR_ID_M456,
|
|
DATADIR_ID_M457,
|
|
DATADIR_ID_M458,
|
|
DATADIR_ID_M459,
|
|
DATADIR_ID_M460,
|
|
DATADIR_ID_M461,
|
|
DATADIR_ID_M462,
|
|
DATADIR_ID_MARIO,
|
|
DATADIR_ID_MARIOMDL0,
|
|
DATADIR_ID_MARIOMDL1,
|
|
DATADIR_ID_MARIOMOT,
|
|
DATADIR_ID_MENT,
|
|
DATADIR_ID_MGCONST,
|
|
DATADIR_ID_MGMODE,
|
|
DATADIR_ID_MODESEL,
|
|
DATADIR_ID_MPEX,
|
|
DATADIR_ID_MSTORY,
|
|
DATADIR_ID_MSTORY2,
|
|
DATADIR_ID_MSTORY3,
|
|
DATADIR_ID_MSTORY4,
|
|
DATADIR_ID_OPTION,
|
|
DATADIR_ID_PEACH,
|
|
DATADIR_ID_PEACHMDL0,
|
|
DATADIR_ID_PEACHMDL1,
|
|
DATADIR_ID_PEACHMOT,
|
|
DATADIR_ID_PRESENT,
|
|
DATADIR_ID_RESULT,
|
|
DATADIR_ID_SAF,
|
|
DATADIR_ID_SELMENU,
|
|
DATADIR_ID_SETUP,
|
|
DATADIR_ID_STAFF,
|
|
DATADIR_ID_TITLE,
|
|
DATADIR_ID_W01,
|
|
DATADIR_ID_W02,
|
|
DATADIR_ID_W03,
|
|
DATADIR_ID_W04,
|
|
DATADIR_ID_W05,
|
|
DATADIR_ID_W06,
|
|
DATADIR_ID_W10,
|
|
DATADIR_ID_W20,
|
|
DATADIR_ID_W21,
|
|
DATADIR_ID_WALUIGI,
|
|
DATADIR_ID_WALUIGIMDL0,
|
|
DATADIR_ID_WALUIGIMDL1,
|
|
DATADIR_ID_WALUIGIMOT,
|
|
DATADIR_ID_WARIO,
|
|
DATADIR_ID_WARIOMDL0,
|
|
DATADIR_ID_WARIOMDL1,
|
|
DATADIR_ID_WARIOMOT,
|
|
DATADIR_ID_WIN,
|
|
DATADIR_ID_YOSHI,
|
|
DATADIR_ID_YOSHIMDL0,
|
|
DATADIR_ID_YOSHIMDL1,
|
|
DATADIR_ID_YOSHIMOT,
|
|
DATADIR_ID_ZTAR,
|
|
DATADIR_ID_MAX
|
|
};
|
|
|
|
|
|
#define DATADIR_DEFINE(name, path) DATADIR_##name = (DATADIR_ID_##name) << 16,
|
|
|
|
|
|
#define DATA_MAKE_NUM(dir, file) ((dir)+(file))
|
|
|
|
#define DATA_DECODE_NONE 0
|
|
#define DATA_DECODE_LZ 1
|
|
#define DATA_DECODE_SLIDE 2
|
|
#define DATA_DECODE_FSLIDE_ALT 3
|
|
#define DATA_DECODE_FSLIDE 4
|
|
#define DATA_DECODE_RLE 5
|
|
|
|
#define DATA_NUM_LISTEND -1
|
|
|
|
/* "include\game\data.h" line 16 "dolphin/types.h" */
|
|
/* end "dolphin/types.h" */
|
|
|
|
|
|
typedef struct data_read_stat {
|
|
s32 dir_id;
|
|
void *dir;
|
|
void *file;
|
|
u32 raw_len;
|
|
u32 comp_type;
|
|
BOOL used;
|
|
s32 num;
|
|
u32 status;
|
|
DVDFileInfo file_info;
|
|
} DataReadStat;
|
|
|
|
void HuDataInit(void);
|
|
int HuDataReadChk(s32 data_num);
|
|
DataReadStat *HuDataGetStatus(void *dir_ptr);
|
|
void *HuDataGetDirPtr(s32 data_num);
|
|
DataReadStat *HuDataDirRead(s32 data_num);
|
|
DataReadStat *HuDataDirReadNum(s32 data_num, s32 num);
|
|
DataReadStat *HuDataDirSet(void *dir_ptr, s32 data_num);
|
|
void HuDataDirReadAsyncCallBack(s32 result, DVDFileInfo* fileInfo);
|
|
s32 HuDataDirReadAsync(s32 data_num);
|
|
s32 HuDataDirReadNumAsync(s32 data_num, s32 num);
|
|
BOOL HuDataGetAsyncStat(s32 status);
|
|
void *HuDataRead(s32 data_num);
|
|
void *HuDataReadNum(s32 data_num, s32 num);
|
|
void *HuDataSelHeapRead(s32 data_num, HeapID heap);
|
|
void *HuDataSelHeapReadNum(s32 data_num, s32 num, HeapID heap);
|
|
void **HuDataReadMulti(s32 *data_ids);
|
|
s32 HuDataGetSize(s32 data_num);
|
|
void HuDataClose(void *ptr);
|
|
void HuDataCloseMulti(void **ptrs);
|
|
void HuDataDirClose(s32 data_id);
|
|
void HuDataDirCloseNum(s32 num);
|
|
void *HuDataReadNumHeapShortForce(s32 data_id, s32 num, HeapID heap);
|
|
|
|
void HuDecodeData(void *src, void *dst, u32 size, int decode_type);
|
|
|
|
extern u32 DirDataSize;
|
|
|
|
|
|
#define Hu3DModelCreateFile(data_id) (Hu3DModelCreate(HuDataSelHeapReadNum((data_id), MEMORY_DEFAULT_NUM, HEAP_DATA)))
|
|
|
|
typedef struct particle_data ParticleData;
|
|
|
|
typedef void (*ModelHookFunc)(struct model_data *, Mtx);
|
|
|
|
typedef struct model_data {
|
|
u8 unk_00;
|
|
u8 unk_01;
|
|
u8 unk_02;
|
|
u8 unk_03;
|
|
s8 unk_04;
|
|
s8 unk_05;
|
|
s16 layer;
|
|
s16 unk_08;
|
|
s16 unk_0A;
|
|
s16 unk_0C;
|
|
s16 unk_0E;
|
|
s16 unk_10[4];
|
|
s16 cluster_attr[4];
|
|
s16 unk_20;
|
|
u16 camera;
|
|
s16 unk_24;
|
|
u16 unk_26;
|
|
u16 unk_28[8];
|
|
s16 unk_38[8];
|
|
HsfData *unk_48;
|
|
HsfData *unk_4C;
|
|
u32 attr;
|
|
u32 motion_attr;
|
|
Point3d unk_58;
|
|
f32 unk_64;
|
|
f32 unk_68;
|
|
f32 unk_6C;
|
|
f32 unk_70;
|
|
f32 unk_74;
|
|
f32 unk_78;
|
|
f32 unk_7C;
|
|
f32 unk_80;
|
|
f32 unk_84;
|
|
f32 unk_88;
|
|
f32 unk_8C;
|
|
f32 unk_90;
|
|
f32 unk_94;
|
|
f32 unk_98;
|
|
f32 unk_9C;
|
|
f32 unk_A0;
|
|
f32 unk_A4[4];
|
|
f32 unk_B4[4];
|
|
union {
|
|
HsfData *hsfData;
|
|
ModelHookFunc hook;
|
|
};
|
|
HsfData *unk_C8;
|
|
Vec pos;
|
|
Vec rot;
|
|
Vec scale;
|
|
Mtx unk_F0;
|
|
ParticleData *unk_120;
|
|
} ModelData; // sizeof 0x124
|
|
typedef struct camera_data {
|
|
f32 fov;
|
|
f32 near;
|
|
f32 far;
|
|
f32 aspect;
|
|
f32 aspect_dupe;
|
|
Vec pos;
|
|
Vec up;
|
|
Vec target;
|
|
s16 scissor_x;
|
|
s16 scissor_y;
|
|
s16 scissor_w;
|
|
s16 scissor_h;
|
|
f32 viewport_x;
|
|
f32 viewport_y;
|
|
f32 viewport_w;
|
|
f32 viewport_h;
|
|
f32 near_z;
|
|
f32 far_z;
|
|
} CameraData; // sizeof 0x58
|
|
typedef struct ThreeDProjectionStruct {
|
|
u8 unk_00;
|
|
char unk_01[0x3];
|
|
void *unk_04;
|
|
Vec unk_08;
|
|
Point3d unk_14;
|
|
Point3d unk_20;
|
|
Vec unk_2C;
|
|
Mtx unk_38;
|
|
Mtx unk_68;
|
|
} ThreeDProjectionStruct; // sizeof 0x98
|
|
typedef struct shadow_data {
|
|
u8 unk_00;
|
|
u8 unk_01;
|
|
u16 unk_02;
|
|
void* unk_04;
|
|
Vec unk_08;
|
|
Vec unk_14;
|
|
Vec unk_20;
|
|
Vec unk_2C;
|
|
Mtx unk_38;
|
|
Mtx unk_68;
|
|
} ShadowData; // sizeof 0x98
|
|
typedef struct light_data {
|
|
s16 unk_00;
|
|
s16 unk_02;
|
|
f32 unk_04;
|
|
f32 unk_08;
|
|
char unk_0C[0x10];
|
|
Vec unk_1C;
|
|
Vec unk_28;
|
|
Vec unk_34;
|
|
GXColor color;
|
|
} LightData;
|
|
|
|
extern void GXWaitDrawDone(); /* extern */
|
|
extern void GXInitSpecularDir(GXLightObj*, f32, f32, f32);
|
|
|
|
void Hu3DInit(void);
|
|
void Hu3DPreProc(void);
|
|
void Hu3DExec(void);
|
|
void Hu3DAllKill(void);
|
|
void Hu3DBGColorSet(u8, u8, u8);
|
|
void Hu3DLayerHookSet(s16, void (*)(s16));
|
|
void Hu3DPauseSet(s32);
|
|
void Hu3DNoSyncSet(s32);
|
|
s16 Hu3DModelCreate(void *);
|
|
s16 Hu3DModelLink(s16);
|
|
s16 Hu3DHookFuncCreate(ModelHookFunc);
|
|
void Hu3DModelKill(s16);
|
|
void Hu3DModelAllKill(void);
|
|
void Hu3DModelPosSet(s16, f32, f32, f32);
|
|
void Hu3DModelPosSetV(s16, Vec *);
|
|
void Hu3DModelRotSet(s16, f32, f32, f32);
|
|
void Hu3DModelRotSetV(s16, Vec *);
|
|
void Hu3DModelScaleSet(s16, f32, f32, f32);
|
|
void Hu3DModelScaleSetV(s16, Vec *);
|
|
void Hu3DModelAttrSet(s16, u32);
|
|
void Hu3DModelAttrReset(s16, u32);
|
|
u32 Hu3DModelAttrGet(s16);
|
|
u32 Hu3DModelMotionAttrGet(s16);
|
|
void Hu3DModelClusterAttrSet(s16, s16, s32);
|
|
void Hu3DModelClusterAttrReset(s16, s16, s32);
|
|
void Hu3DModelCameraSet(s16, u16);
|
|
void Hu3DModelLayerSet(s16, s16);
|
|
HsfObject* Hu3DModelObjPtrGet(s16, char *);
|
|
void Hu3DModelTPLvlSet(s16, f32);
|
|
void Hu3DModelHiliteMapSet(s16, AnimData*);
|
|
void Hu3DModelShadowSet(s16);
|
|
void Hu3DModelShadowReset(s16);
|
|
void Hu3DModelShadowDispOn(s16);
|
|
void Hu3DModelShadowDispOff(s16);
|
|
void Hu3DModelShadowMapSet(s16);
|
|
void Hu3DModelShadowMapObjSet(s16, char *);
|
|
void Hu3DModelAmbSet(s16, f32, f32, f32);
|
|
void Hu3DModelHookSet(s16, char *, s16);
|
|
void Hu3DModelHookReset(s16);
|
|
void Hu3DModelHookObjReset(s16, char *);
|
|
void Hu3DModelProjectionSet(s16, s16);
|
|
void Hu3DModelProjectionReset(s16, s16);
|
|
void Hu3DModelHiliteTypeSet(s16, s16);
|
|
void Hu3DModelReflectTypeSet(s16, s16);
|
|
void Hu3DCameraCreate(s32);
|
|
void Hu3DCameraPerspectiveSet(s32, f32, f32, f32, f32);
|
|
void Hu3DCameraViewportSet(s32, f32, f32, f32, f32, f32, f32);
|
|
void Hu3DCameraScissorSet(s32, u32, u32, u32, u32);
|
|
void Hu3DCameraPosSet(s32, f32, f32, f32, f32, f32, f32, f32, f32, f32);
|
|
void Hu3DCameraPosSetV(s32 cam, Vec *pos, Vec *up, Vec *target);
|
|
void Hu3DCameraKill(s32);
|
|
void Hu3DCameraAllKill(void);
|
|
void Hu3DCameraSet(s32, Mtx);
|
|
BOOL Hu3DModelCameraInfoSet(s16, u16);
|
|
s16 Hu3DModelCameraCreate(s16, u16);
|
|
void Hu3DCameraMotionOn(s16, s8);
|
|
void Hu3DCameraMotionStart(s16, u16);
|
|
void Hu3DCameraMotionOff(s16);
|
|
void Hu3DLighInit(void);
|
|
s16 Hu3DGLightCreate(f32, f32, f32, f32, f32, f32, u8, u8, u8);
|
|
s16 Hu3DGLightCreateV(Vec*, Vec*, GXColor*);
|
|
s16 Hu3DLLightCreate(s16, f32, f32, f32, f32, f32, f32, u8, u8, u8);
|
|
s16 Hu3DLLightCreateV(s16, Vec*, Vec*, GXColor*);
|
|
void Hu3DGLightSpotSet(s16, u16, f32);
|
|
void Hu3DLLightSpotSet(s16, s16, u16, f32);
|
|
void Hu3DGLightInfinitytSet(s16);
|
|
void Hu3DLLightInfinitytSet(s16, s16);
|
|
void Hu3DGLightPointSet(s16, u16, f32, f32);
|
|
void Hu3DLLightPointSet(s16, s16, u16, f32, f32);
|
|
void Hu3DGLightKill(s16);
|
|
void Hu3DLLightKill(s16, s16);
|
|
void Hu3DLightAllKill(void);
|
|
void Hu3DGLightColorSet(s16, u8, u8, u8, u8);
|
|
void Hu3DLLightColorSet(s16, s16, u8, u8, u8, u8);
|
|
void Hu3DGLightPosSetV(s16, Vec*, Point3d*);
|
|
void Hu3DLLightPosSetV(s16, s16, Vec*, Point3d*);
|
|
void Hu3DGLightPosSet(s16, f32, f32, f32, f32, f32, f32);
|
|
void Hu3DLLightPosSet(s16, s16, f32, f32, f32, f32, f32, f32);
|
|
void Hu3DGLightPosAimSetV(s16, Point3d*, Point3d*);
|
|
void Hu3DLLightPosAimSetV(s16, s16, Point3d*, Point3d*);
|
|
void Hu3DGLightPosAimSet(s16, f32, f32, f32, f32, f32, f32);
|
|
void Hu3DLLightPosAimSet(s16, s16, f32, f32, f32, f32, f32, f32);
|
|
void Hu3DGLightStaticSet(s16, s32);
|
|
void Hu3DLLightStaticSet(s16, s16, s32);
|
|
s32 Hu3DModelLightInfoSet(s16, s16);
|
|
s16 Hu3DLightSet(ModelData*, Mtx*, Mtx*, f32);
|
|
void lightSet(LightData* arg0, s16 arg1, Mtx *arg2, Mtx *arg3, f32 arg8);
|
|
void Hu3DReflectMapSet(AnimData* arg0);
|
|
void Hu3DReflectNoSet(s16 arg0);
|
|
void Hu3DFogSet(f32, f32, u8, u8, u8);
|
|
void Hu3DFogClear(void);
|
|
void Hu3DShadowCreate(f32, f32, f32);
|
|
void Hu3DShadowPosSet(Vec*, Vec*, Vec*);
|
|
void Hu3DShadowTPLvlSet(f32);
|
|
void Hu3DShadowSizeSet(u16);
|
|
void Hu3DShadowExec(void);
|
|
s16 Hu3DProjectionCreate(void*, f32, f32, f32);
|
|
void Hu3DProjectionKill(s16);
|
|
void Hu3DProjectionPosSet(s16, Vec*, Vec*, Vec*);
|
|
void Hu3DProjectionTPLvlSet(s16, f32);
|
|
void Hu3DMipMapSet(char*, s16, s32, f32);
|
|
|
|
extern ModelData Hu3DData[0x200];
|
|
extern CameraData Hu3DCamera[0x10];
|
|
extern AnimData *reflectAnim[5];
|
|
extern AnimData *hiliteAnim[4];
|
|
extern ThreeDProjectionStruct Hu3DProjection[4];
|
|
extern ShadowData Hu3DShadowData;
|
|
extern Mtx Hu3DCameraMtx;
|
|
extern Mtx Hu3DCameraMtxXPose;
|
|
extern LightData Hu3DGlobalLight[0x8];
|
|
extern s16 reflectMapNo;
|
|
extern AnimData *toonAnim;
|
|
extern s16 Hu3DShadowCamBit;
|
|
extern s32 Hu3DShadowF;
|
|
extern s32 shadowModelDrawF;
|
|
extern s16 Hu3DCameraNo;
|
|
extern s16 Hu3DCameraBit;
|
|
extern s16 Hu3DPauseF;
|
|
|
|
|
|
/* end "game/hsfman.h" */
|
|
/* "src\REL\E3setupDLL\main.c" line 4 "game/wipe.h" */
|
|
|
|
#define _GAME_WIPE_H
|
|
|
|
/* "include\game\wipe.h" line 3 "dolphin.h" */
|
|
/* end "dolphin.h" */
|
|
|
|
#define WIPE_TYPE_NORMAL 0
|
|
#define WIPE_TYPE_CROSS 1
|
|
#define WIPE_TYPE_DUMMY 2
|
|
#define WIPE_MODE_IN 1
|
|
#define WIPE_MODE_OUT 2
|
|
#define WIPE_MODE_BLANK 3
|
|
|
|
typedef struct wipe_state {
|
|
u32 unk00;
|
|
u32 unk04;
|
|
void *copy_data;
|
|
u32 unk0C;
|
|
void *unk10[8];
|
|
float time;
|
|
float duration;
|
|
u32 unk38;
|
|
u16 w;
|
|
u16 h;
|
|
u16 x;
|
|
u16 y;
|
|
GXColor color;
|
|
volatile u8 type;
|
|
u8 mode;
|
|
u8 stat;
|
|
u8 keep_copy;
|
|
} WipeState;
|
|
|
|
void WipeInit(GXRenderModeObj *rmode);
|
|
void WipeExecAlways(void);
|
|
void WipeCreate(s16 mode, s16 type, s16 duration);
|
|
void WipeColorSet(u8 r, u8 g, u8 b);
|
|
u8 WipeStatGet(void);
|
|
|
|
extern WipeState wipeData;
|
|
extern BOOL wipeFadeInF;
|
|
|
|
|
|
/* "src\REL\E3setupDLL\main.c" line 5 "game/pad.h" */
|
|
|
|
#define _GAME_PAD_H
|
|
|
|
/* "include\game\pad.h" line 3 "dolphin.h" */
|
|
/* end "dolphin.h" */
|
|
|
|
#define PAD_BUTTON_DIR (PAD_BUTTON_LEFT | PAD_BUTTON_RIGHT | PAD_BUTTON_UP | PAD_BUTTON_DOWN)
|
|
|
|
#define PAD_BUTTON_TRIGGER_L 0x4000
|
|
#define PAD_BUTTON_TRIGGER_R 0x2000
|
|
|
|
extern u16 HuPadBtn[4];
|
|
extern u16 HuPadBtnDown[4];
|
|
extern u16 HuPadBtnRep[4];
|
|
extern s8 HuPadStkX[4];
|
|
extern s8 HuPadStkY[4];
|
|
extern s8 HuPadSubStkX[4];
|
|
extern s8 HuPadSubStkY[4];
|
|
extern u8 HuPadTrigL[4];
|
|
extern u8 HuPadTrigR[4];
|
|
extern u8 HuPadDStk[4];
|
|
extern u8 HuPadDStkRep[4];
|
|
extern s8 HuPadErr[4];
|
|
extern u16 _PadBtn[4];
|
|
extern u16 _PadBtnDown[4];
|
|
extern s32 VCounter;
|
|
|
|
void HuPadInit(void);
|
|
void HuPadRead(void);
|
|
void HuPadRumbleSet(s16 pad, s16 duration, s16 off, s16 on);
|
|
void HuPadRumbleStop(s16 pad);
|
|
void HuPadRumbleAllStop(void);
|
|
s16 HuPadStatGet(s16 pad);
|
|
u32 HuPadRumbleGet(void);
|
|
|
|
|
|
/* "src\REL\E3setupDLL\main.c" line 6 "game/hsfmotion.h" */
|
|
|
|
#define _GAME_HSFMOTION_H
|
|
|
|
/* "include\game\hsfmotion.h" line 3 "dolphin.h" */
|
|
/* end "dolphin.h" */
|
|
/* "include\game\hsfmotion.h" line 4 "game/hsfformat.h" */
|
|
/* end "game/hsfformat.h" */
|
|
|
|
#define Hu3DJointMotionFile(model, data_id) (Hu3DJointMotion((model), HuDataSelHeapReadNum((data_id), MEMORY_DEFAULT_NUM, HEAP_DATA)))
|
|
|
|
|
|
typedef struct motion_data {
|
|
s16 unk_00;
|
|
s16 unk_02;
|
|
HsfData *unk_04;
|
|
} MotionData;
|
|
|
|
typedef struct {
|
|
/* 0x00 */ float unk00;
|
|
/* 0x04 */ HsfBitmap *unk04;
|
|
} UnknownHsfMotionStruct01; // Size 8
|
|
|
|
void Hu3DMotionInit(void);
|
|
s16 Hu3DMotionCreate(void *arg0);
|
|
s16 Hu3DMotionModelCreate(s16 arg0);
|
|
s32 Hu3DMotionKill(s16 arg0);
|
|
void Hu3DMotionAllKill(void);
|
|
void Hu3DMotionSet(s16 arg0, s16 arg1);
|
|
void Hu3DMotionOverlaySet(s16 arg0, s16 arg1);
|
|
void Hu3DMotionOverlayReset(s16 arg0);
|
|
float Hu3DMotionOverlayTimeGet(s16 arg0);
|
|
void Hu3DMotionOverlayTimeSet(s16 arg0, float arg1);
|
|
void Hu3DMotionOverlaySpeedSet(s16 arg0, float arg1);
|
|
void Hu3DMotionShiftSet(s16 arg0, s16 arg1, float arg2, float arg3, u32 arg4);
|
|
void Hu3DMotionShapeSet(s16 arg0, s16 arg1);
|
|
s16 Hu3DMotionShapeIDGet(s16 arg0);
|
|
void Hu3DMotionShapeSpeedSet(s16 arg0, float arg1);
|
|
void Hu3DMotionShapeTimeSet(s16 arg0, float arg1);
|
|
float Hu3DMotionShapeMaxTimeGet(s16 arg0);
|
|
void Hu3DMotionShapeStartEndSet(s16 arg0, float arg1, float arg2);
|
|
s16 Hu3DMotionClusterSet(s16 arg0, s16 arg1);
|
|
s16 Hu3DMotionClusterNoSet(s16 arg0, s16 arg1, s16 arg2);
|
|
void Hu3DMotionShapeReset(s16 arg0);
|
|
void Hu3DMotionClusterReset(s16 arg0, s16 arg1);
|
|
s16 Hu3DMotionIDGet(s16 arg0);
|
|
s16 Hu3DMotionShiftIDGet(s16 arg0);
|
|
void Hu3DMotionTimeSet(s16 arg0, float arg1);
|
|
float Hu3DMotionTimeGet(s16 arg0);
|
|
float Hu3DMotionShiftTimeGet(s16 arg0);
|
|
float Hu3DMotionMaxTimeGet(s16 arg0);
|
|
float Hu3DMotionShiftMaxTimeGet(s16 arg0);
|
|
void Hu3DMotionShiftStartEndSet(s16 arg0, float arg1, float arg2);
|
|
float Hu3DMotionMotionMaxTimeGet(s16 arg0);
|
|
void Hu3DMotionStartEndSet(s16 arg0, float arg1, float arg2);
|
|
s32 Hu3DMotionEndCheck(s16 arg0);
|
|
void Hu3DMotionSpeedSet(s16 arg0, float arg1);
|
|
void Hu3DMotionShiftSpeedSet(s16 arg0, float arg1);
|
|
void Hu3DMotionNoMotSet(s16 arg0, char *arg1, u32 arg2);
|
|
void Hu3DMotionNoMotReset(s16 arg0, char *arg1, u32 arg2);
|
|
void Hu3DMotionForceSet(s16 arg0, char *arg1, u32 arg2, float arg3);
|
|
void Hu3DMotionNext(s16 arg0);
|
|
void Hu3DMotionExec(s16 arg0, s16 arg1, float arg2, s32 arg3);
|
|
void Hu3DCameraMotionExec(s16 arg0);
|
|
void Hu3DSubMotionExec(s16 arg0);
|
|
float *GetObjTRXPtr(HsfObject *arg0, u16 arg1);
|
|
void SetObjMatMotion(s16 arg0, HsfTrack *arg1, float arg2);
|
|
void SetObjAttrMotion(s16 arg0, HsfTrack *arg1, float arg2);
|
|
void SetObjCameraMotion(s16 arg0, HsfTrack *arg1, float arg2);
|
|
void SetObjLightMotion(s16 arg0, HsfTrack *arg1, float arg2);
|
|
float GetCurve(HsfTrack *arg0, float arg1);
|
|
float GetConstant(s32 arg0, float *arg1, float arg2);
|
|
float GetLinear(s32 arg0, float arg1[][2], float arg2);
|
|
float GetBezier(s32 arg0, HsfTrack *arg1, float arg2);
|
|
HsfBitmap *GetBitMap(s32 arg0, UnknownHsfMotionStruct01 *arg1, float arg2);
|
|
s16 Hu3DJointMotion(s16 arg0, void *arg1);
|
|
void JointModel_Motion(s16 arg0, s16 arg1);
|
|
void Hu3DMotionCalc(s16 arg0);
|
|
|
|
extern MotionData Hu3DMotion[256];
|
|
|
|
|
|
/* end "game/hsfmotion.h" */
|
|
/* "src\REL\E3setupDLL\main.c" line 7 "game/init.h" */
|
|
|
|
#define _GAME_INIT_H
|
|
|
|
/* "include\game\init.h" line 3 "dolphin.h" */
|
|
/* end "dolphin.h" */
|
|
|
|
extern GXRenderModeObj *RenderMode;
|
|
extern OSHeapHandle currentHeapHandle;
|
|
|
|
extern void *DemoFrameBuffer1;
|
|
extern void *DemoFrameBuffer2;
|
|
extern void *DemoCurrentBuffer;
|
|
extern u32 minimumVcount;
|
|
extern float minimumVcountf;
|
|
extern u32 worstVcount;
|
|
|
|
void HuSysInit(GXRenderModeObj *mode);
|
|
void HuSysBeforeRender();
|
|
void HuSysDoneRender(s32 retrace_count);
|
|
|
|
|
|
/* "src\REL\E3setupDLL\main.c" line 8 "game/minigame_seq.h" */
|
|
|
|
#define _GAME_MINIGAME_SEQ_H
|
|
|
|
/* "include\game\minigame_seq.h" line 3 "game/object.h" */
|
|
/* end "game/object.h" */
|
|
/* "include\game\minigame_seq.h" line 4 "stdarg.h" */
|
|
|
|
#define STDARG_H
|
|
|
|
typedef struct {
|
|
char gpr;
|
|
char fpr;
|
|
char reserved[2];
|
|
char* input_arg_area;
|
|
char* reg_save_area;
|
|
} __va_list[1];
|
|
typedef __va_list va_list;
|
|
|
|
void* __va_arg(va_list v_list, unsigned char type);
|
|
|
|
#define va_start(ap, fmt) ((void) fmt, __builtin_va_info(&ap))
|
|
#define va_arg(ap, t) (*((t*) __va_arg(ap, _var_arg_typeof(t))))
|
|
#define va_end(ap) (void) 0
|
|
|
|
|
|
|
|
#define MG_SEQ_TYPE_TIMER 1
|
|
#define MG_SEQ_TYPE_AUTO 3
|
|
#define MG_SEQ_TYPE_1VS3 4
|
|
#define MG_SEQ_TYPE_WIN 5
|
|
#define MG_SEQ_TYPE_BATTLE 6
|
|
#define MG_SEQ_TYPE_STORY 7
|
|
#define MG_SEQ_TYPE_4P 8
|
|
#define MG_SEQ_TYPE_2VS2 9
|
|
#define MG_SEQ_TYPE_PINBALL 10
|
|
#define MG_SEQ_TYPE_BOWSER 11
|
|
#define MG_SEQ_TYPE_ALTWIN 12
|
|
#define MG_SEQ_TYPE_DRAW 13
|
|
#define MG_SEQ_TYPE_RECORD 14
|
|
|
|
#define MG_SEQ_WIN_TYPE_WIN 3
|
|
#define MG_SEQ_WIN_TYPE_LOSE 4
|
|
#define MG_SEQ_WIN_TYPE_CHAMPION 5
|
|
|
|
#define MG_SEQ_WORD_START 0
|
|
#define MG_SEQ_WORD_FINISH 1
|
|
#define MG_SEQ_WORD_DRAW 2
|
|
|
|
#define MGSeqTimerCreate(value) MGSeqCreate(MG_SEQ_TYPE_TIMER, (value), -1, -1)
|
|
#define MGSeqTimerCreateXY(value, x, y) MGSeqCreate(MG_SEQ_TYPE_TIMER, (value), (int)(x), (int)(y))
|
|
#define MGSeqStartCreate() MGSeqCreate(MG_SEQ_TYPE_AUTO, MG_SEQ_WORD_START)
|
|
#define MGSeqFinishCreate() MGSeqCreate(MG_SEQ_TYPE_AUTO, MG_SEQ_WORD_FINISH)
|
|
#define MGSeqDrawCreate() MGSeqCreate(MG_SEQ_TYPE_AUTO, MG_SEQ_WORD_DRAW)
|
|
#define MGSeqStartCreateType(type) MGSeqCreate((type), MG_SEQ_WORD_START)
|
|
#define MGSeqFinishCreateType(type) MGSeqCreate((type), MG_SEQ_WORD_FINISH)
|
|
#define MGSeqDrawCreateType(type) MGSeqCreate((type), MG_SEQ_WORD_DRAW)
|
|
#define MGSeqWinCreate(player_1, player_2, player_3, player_4) MGSeqCreate(MG_SEQ_TYPE_WIN, MG_SEQ_WIN_TYPE_WIN, (player_1), (player_2), (player_3), (player_4))
|
|
#define MGSeqLoseCreate(player_1, player_2, player_3, player_4) MGSeqCreate(MG_SEQ_TYPE_WIN, MG_SEQ_WIN_TYPE_LOSE, (player_1), (player_2), (player_3), (player_4))
|
|
#define MGSeqChampionCreate(player_1, player_2, player_3, player_4) MGSeqCreate(MG_SEQ_TYPE_ALTWIN, MG_SEQ_WIN_TYPE_CHAMPION, (player_1), (player_2), (player_3), (player_4))
|
|
#define MGSeqRecordCreate(value) MGSeqCreate(MG_SEQ_TYPE_RECORD, (value))
|
|
|
|
|
|
|
|
typedef struct seq_work SeqWork;
|
|
|
|
typedef int (*SeqUpdateFunc)(SeqWork *work);
|
|
typedef int (*SeqInitFunc)(SeqWork *work, va_list params);
|
|
|
|
typedef struct seq_work {
|
|
SeqUpdateFunc update;
|
|
char *data;
|
|
float x;
|
|
float y;
|
|
float scale_x;
|
|
float scale_y;
|
|
float unk_18;
|
|
float angle;
|
|
float win_scale;
|
|
float unk_24;
|
|
s16 time;
|
|
s16 time_max;
|
|
s16 timer_val;
|
|
s16 state;
|
|
s16 alt_word_len;
|
|
s16 word_len;
|
|
s16 param[2];
|
|
s16 type;
|
|
s16 spr_grp[16];
|
|
s16 sprite[16];
|
|
u8 seq_no;
|
|
u8 stat;
|
|
u8 unk_7C;
|
|
u8 unk_7D;
|
|
} SeqWork;
|
|
|
|
void MGSeqInit(void);
|
|
void MGSeqMain(void);
|
|
s16 MGSeqCreate(s16 type, ...);
|
|
u8 MGSeqStatGet(s16 id);
|
|
void MGSeqPosSet(s16 id, float x, float y);
|
|
void MGSeqParamSet(s16 id, s16 param1, s16 param2);
|
|
void MGSeqSprKill(SeqWork *work);
|
|
void MGSeqKill(s16 id);
|
|
void MGSeqKillAll(void);
|
|
s32 MGSeqDoneCheck(void);
|
|
void MGSeqStub(void);
|
|
void MGSeqPauseInit(void);
|
|
void MGSeqPauseEnableCtrl(s32 flag);
|
|
void MGSeqPracticeInit(void);
|
|
void MGSeqPracticeExitCheck(omObjData *object);
|
|
|
|
extern OverlayID mgSeqOvlPrev;
|
|
|
|
|
|
/* end "game/minigame_seq.h" */
|
|
/* "src\REL\E3setupDLL\main.c" line 9 "game/chrman.h" */
|
|
|
|
#define _GAME_CHRMAN_H
|
|
|
|
/* "include\game\chrman.h" line 3 "dolphin.h" */
|
|
/* end "dolphin.h" */
|
|
|
|
void CharManInit(void);
|
|
void *CharAMemPtrGet(s16 character);
|
|
void CharARAMOpen(s16 character);
|
|
void CharARAMClose(s16 character);
|
|
void CharKill(s16 arg0);
|
|
void CharKillAll(void);
|
|
s16 CharModelCreate(s16 character, s16 lod);
|
|
s16 CharModelMotionCreate(s16 character, s32 arg1);
|
|
void CharModelMotionIndexSet(s16 character, s16 arg1, s32 arg2);
|
|
void CharModelMotionKill(s16 character, u32 motion);
|
|
void CharModelMotionDataClose(s16 character);
|
|
void CharModelDataClose(s16 arg0);
|
|
void CharModelKill(s16 character);
|
|
void CharModelMotionSet(s16 character, s16 motion);
|
|
void CharModelTexAnimSet(s16 character);
|
|
char **CharModelTexNameGet(s16 arg0, s16 arg1);
|
|
char *CharModelHookNameGet(s16 arg0, s16 arg1, s16 arg2);
|
|
void CharModelMotionTimeSet(s16 character, float time);
|
|
float CharModelMotionTimeGet(s16 character);
|
|
float CharModelMotionMaxTimeGet(s16 character);
|
|
s32 CharModelMotionEndCheck(s16 character);
|
|
s16 CharModelMotionShiftIDGet(s16 character);
|
|
void CharModelMotionShiftSet(s16 character, s16 motion, float time, float shift_time, u32 attr);
|
|
float CharModelMotionShiftTimeGet(s16 character);
|
|
void CharModelMotionSpeedSet(s16 character, float speed);
|
|
void CharModelLayerSetAll(s16 arg0);
|
|
void CharModelItemHookCreate(s16 character, char *arg1);
|
|
void CharModelEffectCreate(s16 arg0, Vec *arg1);
|
|
void CharModelCoinEffectCreate(s16 arg0, Vec *arg1);
|
|
void fn_8004EC74(s16 character);
|
|
void fn_8004EDA4(s16 arg0, Vec *arg1, Vec *arg2);
|
|
void fn_8004F058(s16 character);
|
|
void fn_8004F13C(s16 arg0, Vec *arg1, Vec *arg2);
|
|
void CharModelLayerSetAll2(s16 arg0);
|
|
void CharModelVoiceEnableSet(s16 character, s16 motion, s32 flag);
|
|
void fn_8004F52C(s16 character, s32 arg1);
|
|
void CharModelEffectEnableSet(s16 character, s32 arg1);
|
|
s32 CharModelEffectNpcInit(s16 arg0, s16 arg1, s16 arg2, s16 arg3);
|
|
s32 CharModelEffectNpcInitSilent(s16 arg0, s16 arg1, s16 arg2);
|
|
s32 CharModelStepTypeSet(s16 character, s32 arg1);
|
|
|
|
|
|
/* end "game/chrman.h" */
|
|
/* "src\REL\E3setupDLL\main.c" line 10 "game/sprite.h" */
|
|
|
|
#define _GAME_SPRITE_H
|
|
|
|
/* "include\game\sprite.h" line 3 "dolphin.h" */
|
|
/* end "dolphin.h" */
|
|
/* "include\game\sprite.h" line 4 "game/data.h" */
|
|
/* end "game/data.h" */
|
|
/* "include\game\sprite.h" line 5 "game/memory.h" */
|
|
/* end "game/memory.h" */
|
|
|
|
#define HUSPR_MAX 384
|
|
#define HUSPR_GRP_MAX 256
|
|
|
|
#define HUSPR_NONE -1
|
|
#define HUSPR_GRP_NONE -1
|
|
|
|
#define HUSPR_ATTR_NOANIM 0x1
|
|
#define HUSPR_ATTR_LOOP 0x2
|
|
#define HUSPR_ATTR_DISPOFF 0x4
|
|
#define HUSPR_ATTR_LINEAR 0x8
|
|
#define HUSPR_ATTR_FUNC 0x10
|
|
#define HUSPR_ATTR_NOPAUSE 0x20
|
|
#define HUSPR_ATTR_REVERSE 0x40
|
|
#define HUSPR_ATTR_ADDCOL 0x80
|
|
#define HUSPR_ATTR_INVCOL 0x100
|
|
|
|
/* "include\game\sprite.h" line 23 "game/animdata.h" */
|
|
/* end "game/animdata.h" */
|
|
|
|
typedef void (*HuSprFunc)(struct hu_sprite *);
|
|
|
|
typedef struct hu_sprite {
|
|
u8 r;
|
|
u8 g;
|
|
u8 b;
|
|
u8 draw_no;
|
|
s16 frame;
|
|
s16 bank;
|
|
s16 attr;
|
|
s16 dirty_flag;
|
|
s16 prio;
|
|
float time;
|
|
float x;
|
|
float y;
|
|
float z_rot;
|
|
float scale_x;
|
|
float scale_y;
|
|
float speed;
|
|
float a;
|
|
GXTexWrapMode wrap_s;
|
|
GXTexWrapMode wrap_t;
|
|
s16 tex_scale_x;
|
|
s16 tex_scale_y;
|
|
Mtx *group_mtx;
|
|
union {
|
|
AnimData *data;
|
|
HuSprFunc func;
|
|
};
|
|
AnimPatData *pat_data;
|
|
AnimFrameData *frame_data;
|
|
s16 work[4];
|
|
AnimData *bg;
|
|
u16 bg_bank;
|
|
s16 scissor_x;
|
|
s16 scissor_y;
|
|
s16 scissor_w;
|
|
s16 scissor_h;
|
|
} HuSprite;
|
|
|
|
typedef struct hu_spr_grp {
|
|
s16 capacity;
|
|
float x;
|
|
float y;
|
|
float z_rot;
|
|
float scale_x;
|
|
float scale_y;
|
|
float center_x;
|
|
float center_y;
|
|
s16 *members;
|
|
Mtx mtx;
|
|
} HuSprGrp;
|
|
|
|
extern HuSprite HuSprData[HUSPR_MAX];
|
|
extern HuSprGrp HuSprGrpData[HUSPR_GRP_MAX];
|
|
|
|
#define HuSprAnimReadFile(data_id) (HuSprAnimRead(HuDataSelHeapReadNum((data_id), MEMORY_DEFAULT_NUM, HEAP_DATA)))
|
|
|
|
void HuSprInit(void);
|
|
void HuSprClose(void);
|
|
void HuSprExec(s16 draw_no);
|
|
void HuSprBegin(void);
|
|
HuSprite *HuSprCall(void);
|
|
void HuSprFinish(void);
|
|
void HuSprPauseSet(BOOL value);
|
|
AnimData *HuSprAnimRead(void *data);
|
|
void HuSprAnimLock(AnimData *anim);
|
|
s16 HuSprCreate(AnimData *anim, s16 prio, s16 bank);
|
|
s16 HuSprFuncCreate(HuSprFunc func, s16 prio);
|
|
s16 HuSprGrpCreate(s16 capacity);
|
|
s16 HuSprGrpCopy(s16 group);
|
|
void HuSprGrpMemberSet(s16 group, s16 member, s16 sprite);
|
|
void HuSprGrpMemberKill(s16 group, s16 member);
|
|
void HuSprGrpKill(s16 group);
|
|
void HuSprKill(s16 sprite);
|
|
void HuSprAnimKill(AnimData *anim);
|
|
void HuSprAttrSet(s16 group, s16 member, s32 attr);
|
|
void HuSprAttrReset(s16 group, s16 member, s32 attr);
|
|
void HuSprPosSet(s16 group, s16 member, float x, float y);
|
|
void HuSprZRotSet(s16 group, s16 member, float z_rot);
|
|
void HuSprScaleSet(s16 group, s16 member, float x, float y);
|
|
void HuSprTPLvlSet(s16 group, s16 member, float tp_lvl);
|
|
void HuSprColorSet(s16 group, s16 member, u8 r, u8 g, u8 b);
|
|
void HuSprSpeedSet(s16 group, s16 member, float speed);
|
|
void HuSprBankSet(s16 group, s16 member, s16 bank);
|
|
void HuSprGrpPosSet(s16 group, float x, float y);
|
|
void HuSprGrpCenterSet(s16 group, float x, float y);
|
|
void HuSprGrpZRotSet(s16 group, float z_rot);
|
|
void HuSprGrpScaleSet(s16 group, float x, float y);
|
|
void HuSprGrpTPLvlSet(s16 group, float tp_lvl);
|
|
|
|
void HuSprGrpDrawNoSet(s16 group, s32 draw_no);
|
|
|
|
void HuSprDrawNoSet(s16 group, s16 member, s32 draw_no);
|
|
void HuSprPriSet(s16 group, s16 member, s16 prio);
|
|
void HuSprGrpScissorSet(s16 group, s16 x, s16 y, s16 w, s16 h);
|
|
void HuSprScissorSet(s16 group, s16 member, s16 x, s16 y, s16 w, s16 h);
|
|
AnimData *HuSprAnimMake(s16 sizeX, s16 sizeY, s16 dataFmt);
|
|
void HuSprBGSet(s16 group, s16 member, AnimData *bg, s16 bg_bank);
|
|
void HuSprSprBGSet(s16 sprite, AnimData *bg, s16 bg_bank);
|
|
void AnimDebug(AnimData *anim);
|
|
|
|
void HuSprDispInit(void);
|
|
void HuSprDisp(HuSprite *sprite);
|
|
void HuSprTexLoad(AnimData *anim, s16 bmp, s16 slot, GXTexWrapMode wrap_s, GXTexWrapMode wrap_t, GXTexFilter filter);
|
|
void HuSprExecLayerSet(s16 draw_no, s16 layer);
|
|
|
|
|
|
/* "src\REL\E3setupDLL\main.c" line 11 "game/window.h" */
|
|
|
|
#define _GAME_WINDOW_H
|
|
|
|
/* "include\game\window.h" line 3 "game/animdata.h" */
|
|
/* end "game/animdata.h" */
|
|
/* "include\game\window.h" line 4 "dolphin.h" */
|
|
/* end "dolphin.h" */
|
|
|
|
#define MAKE_MESSID(bank, mess) (((bank) << 16)+(mess))
|
|
#define MAKE_MESSID_PTR(ptr) ((u32)(ptr))
|
|
|
|
typedef struct {
|
|
/* 0x00 */ u8 color;
|
|
/* 0x01 */ u8 fade;
|
|
/* 0x02 */ s16 x;
|
|
/* 0x04 */ s16 y;
|
|
/* 0x06 */ s16 character;
|
|
} WinChar; // Size 8
|
|
|
|
typedef struct {
|
|
/* 0x00 */ u8 stat;
|
|
/* 0x02 */ s16 x;
|
|
/* 0x04 */ s16 y;
|
|
} WinChoice; // Size 6
|
|
|
|
typedef struct {
|
|
/* 0x000 */ u8 stat;
|
|
/* 0x001 */ u8 active_pad;
|
|
/* 0x002 */ u8 player_disable;
|
|
/* 0x003 */ u8 color_key;
|
|
/* 0x004 */ s16 group;
|
|
/* 0x006 */ s16 sprite_id[30];
|
|
/* 0x042 */ s16 speed;
|
|
/* 0x044 */ s16 mess_time;
|
|
/* 0x046 */ s16 advance_sprite;
|
|
/* 0x048 */ s16 prio;
|
|
/* 0x04C */ u32 attr;
|
|
/* 0x050 */ AnimData *frame;
|
|
/* 0x054 */ s16 mess_rect_x;
|
|
/* 0x056 */ s16 mess_rect_w;
|
|
/* 0x058 */ s16 mess_rect_y;
|
|
/* 0x05A */ s16 mess_rect_h;
|
|
/* 0x05C */ s16 mess_x;
|
|
/* 0x05E */ s16 mess_y;
|
|
/* 0x060 */ s16 mess_color;
|
|
/* 0x062 */ s16 mess_shadow_color;
|
|
/* 0x064 */ s16 spacing_x;
|
|
/* 0x066 */ s16 spacing_y;
|
|
/* 0x068 */ s16 w;
|
|
/* 0x06A */ s16 h;
|
|
/* 0x06C */ float pos_x;
|
|
/* 0x070 */ float pos_y;
|
|
/* 0x074 */ float scale_x;
|
|
/* 0x078 */ float scale_y;
|
|
/* 0x07C */ float z_rot;
|
|
/* 0x080 */ s16 num_chars;
|
|
/* 0x082 */ s16 max_chars;
|
|
/* 0x084 */ WinChar *char_data;
|
|
/* 0x088 */ s16 mess_stackptr;
|
|
/* 0x08C */ s32 unk8C;
|
|
/* 0x090 */ u8 *mess;
|
|
/* 0x094 */ u8 *mess_stack[8];
|
|
/* 0x0B4 */ u8 *insert_mess[8];
|
|
/* 0x0D4 */ s16 num_choices;
|
|
/* 0x0D6 */ s16 choice;
|
|
/* 0x0D8 */ s16 cursor_sprite;
|
|
/* 0x0DA */ u8 choice_disable[16];
|
|
/* 0x0EA */ WinChoice choice_data[16];
|
|
/* 0x14A */ s16 scissor_x;
|
|
/* 0x14C */ s16 scissor_y;
|
|
/* 0x14E */ s16 scissor_w;
|
|
/* 0x150 */ s16 scissor_h;
|
|
/* 0x152 */ s16 tab_w;
|
|
/* 0x154 */ s16 push_key;
|
|
/* 0x156 */ s16 key_down;
|
|
/* 0x158 */ s16 key_auto;
|
|
/* 0x160 */ u8 mess_pal[10][3];
|
|
} WindowData; // Size 0x180
|
|
|
|
extern WindowData winData[32];
|
|
extern void *messDataPtr;
|
|
|
|
void HuWindowInit(void);
|
|
void HuWinInit(s32 mess_data_no);
|
|
s16 HuWinCreate(float x, float y, s16 w, s16 h, s16 frame);
|
|
void HuWinKill(s16 window);
|
|
void HuWinAllKill(void);
|
|
void HuWinHomeClear(s16 window);
|
|
void HuWinKeyWaitEntry(s16 window);
|
|
u32 HuWinActivePadGet(WindowData *window);
|
|
u32 HuWinActiveKeyGetX(WindowData *window);
|
|
void HuWinPosSet(s16 window, float x, float y);
|
|
void HuWinScaleSet(s16 window, float x, float y);
|
|
void HuWinZRotSet(s16 window, float z_rot);
|
|
void HuWinCenterPosSet(s16 window, float x, float y);
|
|
void HuWinDrawNoSet(s16 window, s16 draw_no);
|
|
void HuWinScissorSet(s16 window, s16 x, s16 y, s16 w, s16 h);
|
|
void HuWinPriSet(s16 window, s16 prio);
|
|
void HuWinAttrSet(s16 window, u32 attr);
|
|
void HuWinAttrReset(s16 window, u32 attr);
|
|
s16 HuWinStatGet(s16 window);
|
|
void HuWinMesColSet(s16 window, u8 color);
|
|
void HuWinMesPalSet(s16 window, u8 index, u8 r, u8 g, u8 b);
|
|
void HuWinBGTPLvlSet(s16 window, float tp_level);
|
|
void HuWinBGColSet(s16 window, GXColor *bg_color);
|
|
void HuWinMesSpeedSet(s16 window, s16 speed);
|
|
void HuWinMesRead(s32 mess_data_no);
|
|
void HuWinMesSet(s16 window, u32 mess);
|
|
void HuWinInsertMesSet(s16 window, u32 mess, s16 index);
|
|
s16 HuWinChoiceGet(s16 window, s16 start_choice);
|
|
s16 HuWinChoiceNumGet(s16 window);
|
|
void HuWinChoiceDisable(s16 window, s16 choice);
|
|
s16 HuWinChoiceNowGet(s16 window);
|
|
void HuWinMesWait(s16 window);
|
|
s16 HuWinAnimSet(s16 window, AnimData *anim, s16 bank, float x, float y);
|
|
s16 HuWinSprSet(s16 window, s16 sprite, float x, float y);
|
|
void HuWinSprPosSet(s16 window, s16 index, float x, float y);
|
|
void HuWinSprPriSet(s16 window, s16 index, s16 prio);
|
|
s16 HuWinSprIDGet(s16 window, s16 index);
|
|
void HuWinSprKill(s16 window, s16 index);
|
|
void HuWinDispOff(s16 window);
|
|
void HuWinDispOn(s16 window);
|
|
void HuWinComKeyWait(s32 player_1, s32 player_2, s32 player_3, s32 player_4, s16 delay);
|
|
void HuWinComKeySet(s32 player_1, s32 player_2, s32 player_3, s32 player_4);
|
|
void _HuWinComKeySet(s32 player_1, s32 player_2, s32 player_3, s32 player_4, s16 delay);
|
|
void HuWinComKeyGet(s16 window, u32 *data);
|
|
void HuWinComKeyReset(void);
|
|
void HuWinMesMaxSizeGet(s16 mess_num, float *size, ...);
|
|
void HuWinInsertMesSizeGet(u32 mess, s16 index);
|
|
void HuWinMesSizeCancelCRSet(s32 cancel_cr);
|
|
void HuWinMesMaxSizeBetGet(float *size, u32 start, u32 end);
|
|
s16 HuWinKeyWaitNumGet(u32 mess);
|
|
void HuWinPushKeySet(s16 window, s16 push_key);
|
|
void HuWinDisablePlayerSet(s16 window, u8 player);
|
|
void HuWinDisablePlayerReset(s16 window, u8 player);
|
|
s16 HuWinExCreate(float x, float y, s16 w, s16 h, s16 portrait);
|
|
s16 HuWinExCreateStyled(float x, float y, s16 w, s16 h, s16 portrait, s16 frame);
|
|
void HuWinExAnimIn(s16 window);
|
|
void HuWinExAnimOut(s16 window);
|
|
void HuWinExCleanup(s16 window);
|
|
void HuWinExAnimPopIn(s16 window, s16 portrait);
|
|
void *MessData_MesPtrGet(void *data, u32 index);
|
|
|
|
extern void *messDataPtr;
|
|
|
|
|
|
/* end "game/window.h" */
|
|
/* "src\REL\E3setupDLL\main.c" line 12 "ext_math.h" */
|
|
|
|
#define _EXT_MATH_H
|
|
|
|
/* "include\ext_math.h" line 3 "math.h" */
|
|
|
|
#define _MATH_H
|
|
|
|
#define M_PI 3.141592653589793
|
|
|
|
|
|
#define _MATH_INLINE static inline
|
|
|
|
|
|
extern inline float sqrtf(float x)
|
|
{
|
|
volatile float y;
|
|
if(x > 0.0f)
|
|
{
|
|
double guess = __frsqrte((double)x); // returns an approximation to
|
|
guess = 0.5*guess*(3.0 - guess*guess*x); // now have 12 sig bits
|
|
guess = 0.5*guess*(3.0 - guess*guess*x); // now have 24 sig bits
|
|
guess = 0.5*guess*(3.0 - guess*guess*x); // now have 32 sig bits
|
|
y=(float)(x*guess);
|
|
return y;
|
|
}
|
|
return x;
|
|
}
|
|
|
|
double atan(double x);
|
|
double copysign(double x, double y);
|
|
double cos(double x);
|
|
double floor(double x);
|
|
double frexp(double x, int *exp);
|
|
double ldexp(double x, int exp);
|
|
double modf(double x, double *intpart);
|
|
double sin(double x);
|
|
double tan(double x);
|
|
double acos(double x);
|
|
double asin(double x);
|
|
double atan2(double y, double x);
|
|
double fmod(double x, double y);
|
|
double log(double x);
|
|
double pow(double x, double y);
|
|
float tanf(float x);
|
|
float sinf(float x);
|
|
float cosf(float x);
|
|
float atan2f(float y, float x);
|
|
float acosf(float x);
|
|
|
|
extern inline double fabs(double x)
|
|
{
|
|
return __fabs(x);
|
|
}
|
|
|
|
|
|
/* end "math.h" */
|
|
/* "include\ext_math.h" line 4 "dolphin/mtx.h" */
|
|
/* end "dolphin/mtx.h" */
|
|
|
|
typedef struct vec2f {
|
|
float x;
|
|
float y;
|
|
} Vec2f;
|
|
|
|
#define ABS(x) (((x) < 0) ? -(x) : (x))
|
|
|
|
#define VECDistanceXZ(a, b) sqrtf((((a)->x-(b)->x)*((a)->x-(b)->x))+(((a)->z-(b)->z)*((a)->z-(b)->z)))
|
|
#define VECDistanceAlt(a, b) sqrtf((((a)->x-(b)->x)*((a)->x-(b)->x))+(((a)->y-(b)->y)*((a)->y-(b)->y))+(((a)->z-(b)->z)*((a)->z-(b)->z)))
|
|
|
|
#define VECMagXZ(a) sqrtf(((a)->x*(a)->x)+((a)->z*(a)->z))
|
|
|
|
#define sind(x) sin(M_PI*(x)/180.0)
|
|
#define cosd(x) cos(M_PI*(x)/180.0)
|
|
#define atan2d(y, x) (180.0*(atan2((y), (x)) / M_PI))
|