Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
32 commits
Select commit Hold shift + click to select a range
77c31b6
r37 changes (from Super Monkey Ball)
camthehaxman Feb 28, 2024
cffaf1b
Merge branch 'main' into r37
camthehaxman Feb 28, 2024
492e356
add __OSDoHotReset
camthehaxman Feb 28, 2024
1c62d77
add remaining OS differences for r37
camthehaxman Feb 28, 2024
2ca49aa
Merge branch 'main' into r37
camthehaxman Feb 28, 2024
bae4326
Merge branch 'main' into r37
camthehaxman Mar 9, 2024
975524d
pad r37 changes
camthehaxman Mar 13, 2024
d9408fb
simplify diff
camthehaxman Mar 13, 2024
ca69da1
simplify diff some more
camthehaxman Mar 13, 2024
9aa485e
card r37 changes
camthehaxman Mar 13, 2024
916720f
minor cleanup
camthehaxman Mar 13, 2024
409a46e
Merge branch 'main' into r37
camthehaxman Mar 15, 2024
5197ba6
hio r37 changes
camthehaxman Mar 15, 2024
65ed11a
vi r37 changes
camthehaxman Mar 15, 2024
ca15a9a
Merge branch 'main' into r37
camthehaxman Mar 15, 2024
03179b9
oops
camthehaxman Mar 15, 2024
00b814e
Merge branch 'main' into r37
camthehaxman Mar 18, 2024
793b0e2
dvd r37 changes
camthehaxman Mar 18, 2024
2ff3644
Merge branch 'main' into r37
camthehaxman Mar 21, 2024
d6b0f4b
Merge branch 'main' into r37
camthehaxman Mar 21, 2024
f9fd246
Merge branch 'main' into r37
camthehaxman May 6, 2024
21cdb4c
align DEMOFontBitmap
camthehaxman May 6, 2024
3acc2e4
Merge branch 'main' into r37
camthehaxman May 8, 2024
8f2fa66
demo r45 changes
camthehaxman May 8, 2024
43ca0f5
hio r45 changes
camthehaxman May 8, 2024
09da2e8
dtk r45 changes
camthehaxman May 8, 2024
0c3b545
vi r45 changes
camthehaxman May 8, 2024
9ce3c14
most gx r45 changes
camthehaxman May 13, 2024
09467e8
os r45 changes
camthehaxman May 13, 2024
ef9438a
card r45 changes
camthehaxman May 15, 2024
7cf0a73
OSRtc.c r45 changes
camthehaxman May 15, 2024
43afb12
OSSerial.c r45 changes
camthehaxman May 15, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 7 additions & 2 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,8 @@ else
$(error Unsupported host/building OS <$(UNAME_S)>)
endif

DOLPHIN_REVISION ?= 36

BUILD_DIR := build
TOOLS_DIR := $(BUILD_DIR)/tools
BASEROM_DIR := baserom
Expand Down Expand Up @@ -111,8 +113,7 @@ CC = $(MWCC)
######################## Flags #############################

CHARFLAGS := -char unsigned

CFLAGS = $(CHARFLAGS) -nodefaults -proc gekko -fp hard -Cpp_exceptions off -enum int -warn pragmas -requireprotos -pragma 'cats off'
CFLAGS = $(CHARFLAGS) -nodefaults -proc gekko -fp hard -Cpp_exceptions off -enum int -warn pragmas -requireprotos -pragma 'cats off' -DDOLPHIN_REVISION=$(DOLPHIN_REVISION)
INCLUDES := -Iinclude -Iinclude/libc -ir src

ASFLAGS = -mgekko -I src -I include
Expand All @@ -126,8 +127,10 @@ build/debug/src/card/CARDRename.o: CHARFLAGS := -char signed
build/release/src/card/CARDRename.o: CHARFLAGS := -char signed
build/debug/src/card/CARDOpen.o: CHARFLAGS := -char signed
build/release/src/card/CARDOpen.o: CHARFLAGS := -char signed
ifneq ($(DOLPHIN_REVISION),37)
build/debug/src/dvd/%.o: CFLAGS += -char signed
build/release/src/dvd/%.o: CFLAGS += -char signed
endif

build/debug/src/demo/%.o: CFLAGS += -char signed
build/release/src/demo/%.o: CFLAGS += -char signed
Expand Down Expand Up @@ -293,6 +296,7 @@ dvd_c_files := \
src/dvd/dvdfs.c \
src/dvd/dvd.c \
src/dvd/dvdqueue.c \
src/dvd/dvderror.c \
src/dvd/fstload.c
dvd.a : $(addprefix $(BUILD_DIR)/release/,$(dvd_c_files:.c=.o))
dvdD.a : $(addprefix $(BUILD_DIR)/debug/,$(dvd_c_files:.c=.o))
Expand Down Expand Up @@ -377,6 +381,7 @@ os_c_files := \
src/os/OSMessage.c \
src/os/OSMemory.c \
src/os/OSMutex.c \
src/os/OSReboot.c \
src/os/OSReset.c \
src/os/OSResetSW.c \
src/os/OSRtc.c \
Expand Down
1 change: 1 addition & 0 deletions include/dolphin/card.h
Original file line number Diff line number Diff line change
Expand Up @@ -163,6 +163,7 @@ typedef struct CARDID {
#define CARD_RESULT_CANCELED -14
#define CARD_RESULT_FATAL_ERROR -128

// TODO: This should be private
#define CARDIsValidBlockNo(card, blockNo) ((blockNo) >= CARD_NUM_SYSTEM_BLOCK && (blockNo) < (card)->cBlock)

#define CARD_READ_SIZE 512
Expand Down
3 changes: 3 additions & 0 deletions include/dolphin/card/CARDCheck.h
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
#ifndef _DOLPHIN_CARDCHECK_H_
#define _DOLPHIN_CARDCHECK_H_

#if DOLPHIN_REVISION >= 37
s32 CARDCheckExAsync(s32 chan, s32 *xferBytes, CARDCallback callback);
#endif
s32 CARDCheckAsync(s32 chan, CARDCallback callback);
long CARDCheck(long chan);

Expand Down
4 changes: 4 additions & 0 deletions include/dolphin/demo/DEMOInit.h
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,11 @@ void DEMOSetTevColorIn(enum _GXTevStageID stage, enum _GXTevColorArg a, enum _GX
void DEMOSetTevOp(enum _GXTevStageID id, enum _GXTevMode mode);
struct _GXRenderModeObj * DEMOGetRenderModeObj();
u32 DEMOGetCurrentBuffer(void);
#if DOLPHIN_REVISION >= 45
void DEMOEnableGPHangWorkaround(unsigned long timeoutFrames);
#else
void DEMOEnableBypassWorkaround(unsigned long timeoutFrames);
#endif
void DEMOReInit(struct _GXRenderModeObj * mode);

#endif // _DOLPHIN_DEMOINIT_H_
1 change: 1 addition & 0 deletions include/dolphin/dvd.h
Original file line number Diff line number Diff line change
Expand Up @@ -90,6 +90,7 @@ void (* DVDLowSetResetCoverCallback(void (* callback)(unsigned long)))(unsigned
int DVDLowBreak();
void (* DVDLowClearCallback())(unsigned long);
unsigned long DVDLowGetCoverStatus();
BOOL DVDCheckDisk(void);

// dvd.c
void DVDInit();
Expand Down
70 changes: 42 additions & 28 deletions include/dolphin/mtx.h
Original file line number Diff line number Diff line change
Expand Up @@ -33,47 +33,61 @@ typedef f32 (*ROMtxPtr)[3];

void MTXScale(Mtx m, f32 xS, f32 yS, f32 zS);
void MTXOrtho(Mtx44 m, f32 t, f32 b, f32 l, f32 r, f32 n, f32 f);
#if DOLPHIN_REVISION >= 45
void C_MTXScale(Mtx m, f32 xS, f32 yS, f32 zS);
void C_MTXOrtho(Mtx44 m, f32 t, f32 b, f32 l, f32 r, f32 n, f32 f);
void PSMTXScale(Mtx m, f32 xS, f32 yS, f32 zS);
void PSMTXOrtho(Mtx44 m, f32 t, f32 b, f32 l, f32 r, f32 n, f32 f);
#endif

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_MTXLookAt(Mtx m, Point3dPtr camPos, VecPtr camUp, Point3dPtr target);

#ifdef DEBUG
#define VECSquareMag C_VECSquareMag
#define VECNormalize C_VECNormalize
#define VECAdd C_VECAdd
#define VECDotProduct C_VECDotProduct
#define VECSquareMag C_VECSquareMag
#define VECNormalize C_VECNormalize
#define VECAdd C_VECAdd
#define VECDotProduct C_VECDotProduct
#define VECSquareDistance C_VECSquareDistance
#define VECCrossProduct C_VECCrossProduct
#define MTXMultVec C_MTXMultVec
#define MTXMultVecArray C_MTXMultVecArray
#define MTXCopy C_MTXCopy
#define MTXConcat C_MTXConcat
#define MTXInverse C_MTXInverse
#define MTXTranspose C_MTXTranspose
#define MTXIdentity C_MTXIdentity
#define VECCrossProduct C_VECCrossProduct
#define MTXMultVec C_MTXMultVec
#define MTXMultVecArray C_MTXMultVecArray
#define MTXCopy C_MTXCopy
#define MTXConcat C_MTXConcat
#define MTXInverse C_MTXInverse
#define MTXTranspose C_MTXTranspose
#define MTXIdentity C_MTXIdentity
#if DOLPHIN_REVISION >= 45
#define MTXOrtho C_MTXOrtho
#define MTXScale C_MTXScale
#endif
#else
#define VECSquareMag PSVECSquareMag
#define VECNormalize PSVECNormalize
#define VECAdd PSVECAdd
#define VECDotProduct PSVECDotProduct
#define VECSquareMag PSVECSquareMag
#define VECNormalize PSVECNormalize
#define VECAdd PSVECAdd
#define VECDotProduct PSVECDotProduct
#define VECSquareDistance PSVECSquareDistance
#define VECCrossProduct PSVECCrossProduct
#define MTXMultVec PSMTXMultVec
#define MTXMultVecArray PSMTXMultVecArray
#define MTXCopy PSMTXCopy
#define MTXConcat PSMTXConcat
#define MTXInverse PSMTXInverse
#define MTXTranspose PSMTXTranspose
#define MTXIdentity PSMTXIdentity
#define VECCrossProduct PSVECCrossProduct
#define MTXMultVec PSMTXMultVec
#define MTXMultVecArray PSMTXMultVecArray
#define MTXCopy PSMTXCopy
#define MTXConcat PSMTXConcat
#define MTXInverse PSMTXInverse
#define MTXTranspose PSMTXTranspose
#define MTXIdentity PSMTXIdentity
#if DOLPHIN_REVISION >= 45
#define MTXOrtho PSMTXOrtho
#define MTXScale PSMTXScale
#endif
#endif

// asm only
#define MTXReorder PSMTXReorder
#define MTXROMultVecArray PSMTXROMultVecArray
#define MTXROSkin2VecArray PSMTXROSkin2VecArray
#define MTXReorder PSMTXReorder
#define MTXROMultVecArray PSMTXROMultVecArray
#define MTXROSkin2VecArray PSMTXROSkin2VecArray
#define MTXROMultS16VecArray PSMTXROMultS16VecArray
#define MTXMultS16VecArray PSMTXMultS16VecArray
#define MTXMultS16VecArray PSMTXMultS16VecArray

// mtx.c
// functions
Expand Down
6 changes: 6 additions & 0 deletions include/dolphin/os.h
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,7 @@ unsigned int __gUnknown800030C0[2] : (OS_BASE_CACHED | 0x30C0);
#define OSTicksToMicroseconds(ticks) ((ticks)*8 / (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 OSMicrosecondsToTicks(usec) (((usec) * (OS_TIMER_CLOCK / 125000)) / 8)

Expand Down Expand Up @@ -173,6 +174,11 @@ void *OSUncachedToCached(void *ucaddr);
#define OSUncachedToCached(ucaddr) ((void*) ((u8*)(ucaddr) - (OS_BASE_UNCACHED - OS_BASE_CACHED)))
#endif

#if DOLPHIN_REVISION >= 45
#define OS_PROGRESSIVE_MODE_OFF 0
#define OS_PROGRESSIVE_MODE_ON 1
#endif

#ifdef __cplusplus
}
#endif
Expand Down
5 changes: 5 additions & 0 deletions include/dolphin/os/OSError.h
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,12 @@ typedef void (*OSErrorHandler)(OSError error, OSContext *context, ...);
#define OS_ERROR_BREAKPOINT 12
#define OS_ERROR_SYSTEM_INTERRUPT 13
#define OS_ERROR_THERMAL_INTERRUPT 14
#if DOLPHIN_REVISION >= 45
#define OS_ERROR_PROTECTION 15
#define OS_ERROR_MAX (OS_ERROR_PROTECTION + 1)
#else
#define OS_ERROR_MAX (OS_ERROR_THERMAL_INTERRUPT + 1)
#endif

OSErrorHandler OSSetErrorHandler(OSError error, OSErrorHandler handler);

Expand Down
4 changes: 4 additions & 0 deletions include/dolphin/os/OSModule.h
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,11 @@
extern "C" {
#endif

#if DOLPHIN_REVISION >= 45
#define OS_MODULE_VERSION 2
#else
#define OS_MODULE_VERSION 1
#endif
typedef struct OSModuleHeader OSModuleHeader;

typedef u32 OSModuleID;
Expand Down
10 changes: 10 additions & 0 deletions include/dolphin/os/OSRtc.h
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,12 @@ typedef struct OSSramEx {
unsigned char flashID[2][12];
unsigned long wirelessKeyboardID;
unsigned short wirelessPadID[4];
#if DOLPHIN_REVISION >= 37
u8 dvdErrorCode;
u8 _padding0;
#else
unsigned short _padding0;
#endif
unsigned char flashIDCheckSum[2];
unsigned char _padding1[4];
} OSSramEx;
Expand All @@ -50,6 +55,11 @@ void OSSetVideoMode(unsigned long mode);
unsigned char OSGetLanguage();
void OSSetLanguage(unsigned char language);

#if DOLPHIN_REVISION >= 45
u16 OSGetWirelessID(s32 chan);
void OSSetWirelessID(s32 chan, u16 id);
#endif

#ifdef __cplusplus
}
#endif
Expand Down
14 changes: 13 additions & 1 deletion include/dolphin/os/OSSerial.h
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,11 @@ struct SIPacket {
void * input;
unsigned long inputBytes;
void (* callback)(long, unsigned long, struct OSContext *);
#if DOLPHIN_REVISION >= 45
long long fire;
#else
long long time;
#endif
};

int SIBusy();
Expand All @@ -66,8 +70,16 @@ void SITransferCommands();
unsigned long SISetXY(unsigned long x, unsigned long y);
unsigned long SIEnablePolling(unsigned long poll);
unsigned long SIDisablePolling(unsigned long poll);
void SIGetResponse(long chan, void * data);
#if DOLPHIN_REVISION >= 45
int
#else
void
#endif
SIGetResponse(long chan, void * data);
int SITransfer(long chan, void * output, unsigned long outputBytes, void * input, unsigned long inputBytes,
void (* callback)(long, unsigned long, struct OSContext *), long long time);
#if DOLPHIN_REVISION >= 45
u32 SIGetType(s32 chan);
#endif

#endif // _DOLPHIN_OSSERIAL_H
25 changes: 20 additions & 5 deletions include/dolphin/os/OSThread.h
Original file line number Diff line number Diff line change
Expand Up @@ -70,14 +70,29 @@ enum OS_THREAD_STATE

#define OS_THREAD_STACK_MAGIC 0xDEADBABE

typedef void (*OSIdleFunction)(void *param);

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);
void OSSleepThread(OSThreadQueue *queue);
void OSWakeupThread(OSThreadQueue *queue);
s32 OSSuspendThread(OSThread *thread);
s32 OSResumeThread(OSThread* thread);
OSThread* OSGetCurrentThread(void);
s32 OSEnableScheduler(void);
s32 OSDisableScheduler(void);
BOOL OSSetThreadPriority(OSThread *thread, OSPriority priority);
OSPriority OSGetThreadPriority(OSThread *thread);
OSThread *OSSetIdleFunction(OSIdleFunction idleFunction, void *param, void *stack, u32 stackSize);
OSThread *OSGetIdleFunction(void);
long OSCheckActiveThreads(void);

#define IsSuspended(suspend) (suspend > 0)

Expand Down
6 changes: 5 additions & 1 deletion include/dolphin/pad.h
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,11 @@ typedef struct PADStatus
int PADReset(unsigned long mask);
BOOL PADRecalibrate(u32 mask);
BOOL PADInit();
void PADRead(struct PADStatus * status);
#if DOLPHIN_REVISION >= 37
u32 PADRead(struct PADStatus *status);
#else
void PADRead(struct PADStatus *status);
#endif
void PADSetSamplingRate(unsigned long msec);
void __PADTestSamplingRate(unsigned long tvmode);
void PADControlAllMotors(const u32 *commandArray);
Expand Down
19 changes: 19 additions & 0 deletions nonmatchings/GXRedirectWriteGatherPipe.s
Original file line number Diff line number Diff line change
Expand Up @@ -12,25 +12,40 @@
/* 000013EC 00001420 28 00 00 00 */ cmplwi r0, 0x0
/* 000013F0 00001424 41 82 00 18 */ beq L_00001408
/* 000013F4 00001428 38 7F 00 14 */ addi r3, r31, 0x14
#if DOLPHIN_REVISION >= 45
/* 000013F8 0000142C 38 80 05 A6 */ li r4, 0x5b8
/* 000013FC 00001430 38 BF 04 F0 */ addi r5, r31, 0x48c
#else
/* 000013F8 0000142C 38 80 05 A6 */ li r4, 0x5a6
/* 000013FC 00001430 38 BF 04 F0 */ addi r5, r31, 0x4f0
#endif
/* 00001400 00001434 4C C6 31 82 */ crclr 4*cr1+eq
/* 00001404 00001438 48 00 00 01 */ bl OSPanic
L_00001408:
/* 00001408 0000143C 57 A0 06 FF */ clrlwi. r0, r29, 27
/* 0000140C 00001440 41 82 00 18 */ beq L_00001424
/* 00001410 00001444 38 7F 00 14 */ addi r3, r31, 0x14
#if DOLPHIN_REVISION >= 45
/* 00001414 00001448 38 80 05 A7 */ li r4, 0x5b9
/* 00001418 0000144C 38 BF 05 34 */ addi r5, r31, 0x4d0
#else
/* 00001414 00001448 38 80 05 A7 */ li r4, 0x5a7
/* 00001418 0000144C 38 BF 05 34 */ addi r5, r31, 0x534
#endif
/* 0000141C 00001450 4C C6 31 82 */ crclr 4*cr1+eq
/* 00001420 00001454 48 00 00 01 */ bl OSPanic
L_00001424:
/* 00001424 00001458 80 00 00 00 */ lwz r0, IsWGPipeRedirected
/* 00001428 0000145C 2C 00 00 00 */ cmpwi r0, 0x0
/* 0000142C 00001460 41 82 00 18 */ beq L_00001444
/* 00001430 00001464 38 7F 00 14 */ addi r3, r31, 0x14
#if DOLPHIN_REVISION >= 45
/* 00001434 00001468 38 80 05 A9 */ li r4, 0x5bb
/* 00001438 0000146C 38 BF 05 5C */ addi r5, r31, 0x4f8
#else
/* 00001434 00001468 38 80 05 A9 */ li r4, 0x5a9
/* 00001438 0000146C 38 BF 05 5C */ addi r5, r31, 0x55c
#endif
/* 0000143C 00001470 4C C6 31 82 */ crclr 4*cr1+eq
/* 00001440 00001474 48 00 00 01 */ bl OSPanic
L_00001444:
Expand Down Expand Up @@ -69,7 +84,11 @@ L_0000148C:
/* 000014BC 000014F0 57 A0 D9 D5 */ rlwinm. r0, r29, 27, 7, 10
/* 000014C0 000014F4 41 82 00 18 */ beq L_000014D8
/* 000014C4 000014F8 38 7F 00 14 */ addi r3, r31, 0x14
#if DOLPHIN_REVISION >= 45
/* 000014C8 000014FC 38 80 05 C8 */ li r4, 0x5da
#else
/* 000014C8 000014FC 38 80 05 C8 */ li r4, 0x5c8
#endif
/* 000014CC 00001500 38 BF 03 98 */ addi r5, r31, 0x398
/* 000014D0 00001504 4C C6 31 82 */ crclr 4*cr1+eq
/* 000014D4 00001508 48 00 00 01 */ bl OSPanic
Expand Down
Loading