mirror of
https://github.com/zeldaret/mm.git
synced 2024-10-07 18:23:53 +00:00
Port a bunch of libultra files from sm64
This commit is contained in:
parent
0f93f269d4
commit
930b8bc242
17
Makefile
17
Makefile
@ -15,7 +15,10 @@ OPTIMIZATION := -O2 -g3
|
||||
build/src/libultra/os/%: OPTIMIZATION := -O1
|
||||
build/src/libultra/io/%: OPTIMIZATION := -O2
|
||||
build/src/libultra/libc/%: OPTIMIZATION := -O2
|
||||
build/src/libultra/libc/ll%: OPTIMIZATION := -O1
|
||||
build/src/libultra/libc/ll%: MIPS_VERSION := -mips3 -32
|
||||
build/src/libultra/gu/%: OPTIMIZATION := -O2
|
||||
build/src/libultra/rmon/%: OPTIMIZATION := -O2
|
||||
build/src/libultra/%: CC := $(QEMU_IRIX) -L $(IRIX_53_ROOT) $(IRIX_53_ROOT)/usr/bin/cc
|
||||
build/src/libultra/%: CFLAGS := $(CFLAGS) -Wab,-r4300_mul
|
||||
build/src/boot_O1/%: OPTIMIZATION := -O1
|
||||
@ -25,8 +28,8 @@ build/src/boot_O2_g3_trapuv/%: OPTIMIZATION := -O2 -g3
|
||||
build/src/code/%: CFLAGS := $(CFLAGS) -Wab,-r4300_mul
|
||||
build/src/actors/%: CFLAGS := $(CFLAGS) -Wab,-r4300_mul
|
||||
build/src/boot_O2_g3_trapuv/%: CFLAGS := $(CFLAGS) -trapuv
|
||||
test.txt: OPTIMIZATION := -O2
|
||||
test.txt: CC := $(QEMU_IRIX) -L $(IRIX_71_ROOT) $(IRIX_71_ROOT)/usr/bin/cc
|
||||
test.txt: OPTIMIZATION := -O1
|
||||
test.txt: CC := $(QEMU_IRIX) -L $(IRIX_53_ROOT) $(IRIX_53_ROOT)/usr/bin/cc
|
||||
test.txt: CFLAGS := $(CFLAGS) -Wab,-r4300_mul
|
||||
|
||||
CC := $(QEMU_IRIX) -L $(IRIX_71_ROOT) $(IRIX_71_ROOT)/usr/bin/cc
|
||||
@ -56,6 +59,7 @@ C_FILES := $(wildcard src/libultra/*) \
|
||||
$(wildcard src/libultra/io/*) \
|
||||
$(wildcard src/libultra/libc/*) \
|
||||
$(wildcard src/libultra/gu/*) \
|
||||
$(wildcard src/libultra/rmon/*) \
|
||||
$(wildcard src/code/*) \
|
||||
$(wildcard src/boot_O2/*) \
|
||||
$(wildcard src/boot_O2_g3/*) \
|
||||
@ -84,6 +88,7 @@ $(shell mkdir -p $(BUILD_DIR)/src/libultra/os)
|
||||
$(shell mkdir -p $(BUILD_DIR)/src/libultra/io)
|
||||
$(shell mkdir -p $(BUILD_DIR)/src/libultra/libc)
|
||||
$(shell mkdir -p $(BUILD_DIR)/src/libultra/gu)
|
||||
$(shell mkdir -p $(BUILD_DIR)/src/libultra/rmon)
|
||||
$(shell mkdir -p $(BUILD_DIR)/src/code)
|
||||
$(shell mkdir -p $(BUILD_DIR)/src/boot_O2)
|
||||
$(shell mkdir -p $(BUILD_DIR)/src/boot_O2_g3)
|
||||
@ -187,6 +192,14 @@ build/src/actors/%.o: src/actors/%.c include/*
|
||||
build/src/%.o: src/%.c include/*
|
||||
$(CC) -c $(CFLAGS) $(MIPS_VERSION) $(OPTIMIZATION) -Iinclude -o $@ $<
|
||||
|
||||
build/src/libultra/libc/ll.o: src/libultra/libc/ll.c include/*
|
||||
$(CC) -c $(CFLAGS) $(MIPS_VERSION) $(OPTIMIZATION) -Iinclude -o $@ $<
|
||||
./tools/set_o32abi_bit.py $@
|
||||
|
||||
build/src/libultra/libc/llcvt.o: src/libultra/libc/llcvt.c include/*
|
||||
$(CC) -c $(CFLAGS) $(MIPS_VERSION) $(OPTIMIZATION) -Iinclude -o $@ $<
|
||||
./tools/set_o32abi_bit.py $@
|
||||
|
||||
build/decomp/%: build/decomp_pre_dmadata/%
|
||||
cp $< $@
|
||||
|
||||
|
@ -234,7 +234,7 @@ void* __osRealloc(Heap* heap, void* oldPtr, u32 newSize); // func_800875E4
|
||||
void __osAnalyzeArena(Heap* heap, u32* maxFreeBlock, u32* bytesFree, u32* bytesAllocated); // func_80087714
|
||||
s32 __osCheckArena(Heap* heap); // func_800877C4
|
||||
void* proutSprintf(void* s, char* buf, size_t n); // func_80087830
|
||||
void func_80087854(void); // func_80087854
|
||||
int vsprintf(char* dst, char* fmt, va_list args); // func_80087854
|
||||
int sprintf(char* s, char* fmt, ...); // func_800878A4
|
||||
void func_80087900(void); // func_80087900
|
||||
void func_80087934(void); // func_80087934
|
||||
@ -254,20 +254,20 @@ OSIntMask osGetIntMask(void); // func_800880B0
|
||||
void func_80088110(void); // func_80088110
|
||||
void func_800882A0(void); // func_800882A0
|
||||
f32 __sinf(f32 __x); // func_80088350
|
||||
s32 sins(u16 angle); // func_80088510
|
||||
short sins(unsigned short x); // func_80088510
|
||||
OSTask* _VirtualToPhysicalTask(OSTask* intp); // func_80088580
|
||||
void osSpTaskLoad(OSTask* intp); // func_8008868C
|
||||
void osSpTaskStartGo(OSTask* tp); // func_800887F4
|
||||
void __ull_rshift(void); // func_80088840
|
||||
void __ull_rem(void); // func_8008886C
|
||||
u64 __ull_div(u64 param_1, u64 param_2); // func_800888A8
|
||||
void __ll_lshift(void); // func_800888E4
|
||||
void __ll_rem(void); // func_80088910
|
||||
void __ll_div(void); // func_8008894C
|
||||
u64 __ll_mul(u64 param_1, u64 param_2); // func_800889A8
|
||||
void __ull_divremi(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE2 param_5); // func_800889D8
|
||||
void __ll_mod(void); // func_80088A38
|
||||
void __ll_rshift(void); // func_80088AD4
|
||||
long long __ull_rshift(unsigned long long left, unsigned long long right); // func_80088840
|
||||
unsigned long long __ull_rem(unsigned long long left, unsigned long long right); // func_8008886C
|
||||
unsigned long long __ull_div(unsigned long long left, unsigned long long right); // func_800888A8
|
||||
long long __ll_lshift(long long left, long long right); // func_800888E4
|
||||
long long __ll_rem(long long left, unsigned long long right); // func_80088910
|
||||
long long __ll_div(long long left, long long right); // func_8008894C
|
||||
long long __ll_mul(long long left, long long right); // func_800889A8
|
||||
void __ull_divremi(unsigned long long* quotient, unsigned long long* remainder, unsigned long long dividend, unsigned short divisor); // func_800889D8
|
||||
long long __ll_mod(long long left, long long right); // func_80088A38
|
||||
long long __ll_rshift(long long left, long long right); // func_80088AD4
|
||||
void __osExceptionPreamble(void); // func_80088B00
|
||||
void __osException(void); // func_80088B10
|
||||
void func_80088D48(void); // func_80088D48
|
||||
@ -301,8 +301,8 @@ s32 osContInit(OSMesgQueue* mq, u8* bitpattern, OSContStatus* data); // func_800
|
||||
void __osContGetInitData(u8* pattern, OSContStatus* data); // func_80089CBC
|
||||
void __osPackRequestData(u8 cmd); // func_80089D68
|
||||
void osCreateThread(OSThread* t, OSId id, osCreateThread_func entry, void* arg, void* sp, OSPri p); // func_80089E40
|
||||
void osContStartReadData(void); // func_80089F90
|
||||
void osContGetReadData(void); // func_8008A014
|
||||
s32 osContStartReadData(OSMesgQueue* mq); // func_80089F90
|
||||
void osContGetReadData(OSContPad* data); // func_8008A014
|
||||
void __osPackReadData(void); // func_8008A0A0
|
||||
void func_8008A170(void); // func_8008A170
|
||||
u32 osVirtualToPhysical(void* vaddr); // func_8008A540
|
||||
@ -322,8 +322,8 @@ void osViRepeatLine(u8 active); // func_8008AE70
|
||||
s32 __osSiRawReadIo(u32 devAddr, u32* data); // func_8008AEE0
|
||||
OSId osGetThreadId(OSThread* t); // func_8008AF30
|
||||
void osSpTaskYield(void); // func_8008AF50
|
||||
void func_8008AF70(void); // func_8008AF70
|
||||
void func_8008B044(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5, UNK_TYPE4 param_6); // func_8008B044
|
||||
s32 __osPfsRWInode(OSPfs* param_1, __OSInode* param_2, u8 param_3, u8 param_4); // func_8008AF70
|
||||
s32 osPfsReadWriteFile(OSPfs* pfs, s32 file_no, u8 flag, int offset, int size_in_bytes, u8* data_buffer); // func_8008B044
|
||||
void func_8008B3C0(void); // func_8008B3C0
|
||||
void func_8008B490(void); // func_8008B490
|
||||
void func_8008B554(void); // func_8008B554
|
||||
@ -341,8 +341,9 @@ void osCreatePiManager(OSPri pri, OSMesgQueue* cmdQ, OSMesg* cmdBuf, s32 cmdMsgC
|
||||
void __osPiCreateAccessQueue(void); // func_8008C190
|
||||
void __osPiGetAccess(void); // func_8008C1E0
|
||||
void __osPiRelAccess(void); // func_8008C224
|
||||
void func_8008C260(s32 param_1); // func_8008C260
|
||||
void func_8008C670(void); // func_8008C670
|
||||
void __osDevMgrMain(void* arg); // func_8008C260
|
||||
void func_8008C640(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE1 param_5, UNK_TYPE1 param_6, UNK_TYPE1 param_7, UNK_TYPE1 param_8, UNK_TYPE4 param_9, UNK_TYPE4 param_10, UNK_TYPE4 param_11, UNK_TYPE4 param_12, UNK_TYPE4 param_13, UNK_TYPE4 param_14, UNK_TYPE4 param_15, UNK_TYPE4 param_16, UNK_TYPE4 param_17, UNK_TYPE4 param_18); // func_8008C640
|
||||
s32 osPiRawStartDma(s32 direction, u32 devAddr, void* dramAddr, u32 size); // func_8008C670
|
||||
void func_8008C740(void); // func_8008C740
|
||||
void func_8008C7B4(void); // func_8008C7B4
|
||||
void func_8008C8B0(void); // func_8008C8B0
|
||||
@ -350,9 +351,9 @@ void func_8008CC00(void); // func_8008CC00
|
||||
void func_8008CD64(void); // func_8008CD64
|
||||
void func_8008CF10(void); // func_8008CF10
|
||||
void func_8008CFE4(void); // func_8008CFE4
|
||||
void osGetCount(void); // func_8008D2C0
|
||||
u32 osGetCount(void); // func_8008D2C0
|
||||
void func_8008D2E0(void); // func_8008D2E0
|
||||
u32 calculate_mem_size(void); // func_8008D350
|
||||
u32 osGetMemSize(void); // func_8008D350
|
||||
void func_8008D470(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5, UNK_TYPE4 param_6); // func_8008D470
|
||||
void osSetEventMesg(OSEvent e, OSMesgQueue* mq, OSMesg m); // func_8008D640
|
||||
f32 sqrtf(f32 __x); // func_8008D700
|
||||
@ -361,8 +362,8 @@ s32 osContStartQuery(OSMesgQueue* mq); // func_8008D730
|
||||
void osContGetQuery(OSContStatus* data); // func_8008D7AC
|
||||
void guLookAtHiliteF(float mf[4][4], UNK_PTR l, int* h, float xEye, float yEye, float zEye, float xAt, float yAt, float zAt, float xUp, float yUp, float zUp, float xl1, float yl1, float zl1, float xl2, float yl2, float zl2, int twidth, int theight); // func_8008D7D0
|
||||
void guLookAtHilite(Mtx* m, LookAt* l, Hilite* h, f32 xEye, f32 yEye, f32 zEye, f32 xAt, f32 yAt, f32 zAt, f32 xUp, f32 yUp, f32 zUp, f32 xl1, f32 yl1, f32 zl1, f32 xl2, f32 yl2, f32 zl2, s32 twidth, s32 theight); // func_8008DF90
|
||||
int _Printf(printf_func pfn, void* arg, char* fmt, char* ap); // func_8008E050
|
||||
void func_8008E698(void); // func_8008E698
|
||||
int _Printf(printf_func pfn, void* arg, char* fmt, va_list ap); // func_8008E050
|
||||
void _Putfld(_Pft* px, va_list* pap, unsigned char code, unsigned char* ac); // func_8008E698
|
||||
void func_8008ED30(void); // func_8008ED30
|
||||
void osUnmapTLBAll(void); // func_8008EDE0
|
||||
s32 osEPiStartDma(OSPiHandle* pihandle, OSIoMesg* mb, s32 direction); // func_8008EE30
|
||||
@ -377,7 +378,7 @@ void osInvalDCache(void* vaddr, s32 nbytes); // func_8008F2F0
|
||||
void __osTimerServicesInit(void); // func_8008F3A0
|
||||
void __osTimerInterrupt(void); // func_8008F42C
|
||||
void __osSetTimerIntr(OSTime tim); // func_8008F5A4
|
||||
void __osInsertTimer(OSTimer* t); // func_8008F644
|
||||
OSTime __osInsertTimer(OSTimer* t); // func_8008F644
|
||||
void func_8008F7D0(void); // func_8008F7D0
|
||||
int __osSpDeviceBusy(void); // func_8008FA00
|
||||
int __osSiDeviceBusy(void); // func_8008FA30
|
||||
@ -387,10 +388,10 @@ void osSetThreadPri(OSThread* t, OSPri pri); // func_8008FC00
|
||||
OSPri osGetThreadPri(OSThread* t); // func_8008FCE0
|
||||
void func_8008FD00(void); // func_8008FD00
|
||||
void osViSwapBuffer(void* frameBufPtr); // func_8008FE60
|
||||
void func_8008FEB0(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5, UNK_TYPE4 param_6, UNK_TYPE4 param_7, UNK_TYPE4 param_8); // func_8008FEB0
|
||||
void func_80090058(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5, UNK_TYPE4 param_6, UNK_TYPE4 param_7, UNK_TYPE4 param_8); // func_80090058
|
||||
void guPositionF(float mf[4][4], float r, float p, float h, float s, float x, float y, float z); // func_8008FEB0
|
||||
void guPosition(Mtx* m, float r, float p, float h, float s, float x, float y, float z); // func_80090058
|
||||
void func_800900C0(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5); // func_800900C0
|
||||
void osSpTaskYielded(void); // func_800902A0
|
||||
OSYieldResult osSpTaskYielded(OSTask* task); // func_800902A0
|
||||
s32 memcmp(void* __s1, void* __s2, size_t __n); // func_80090300
|
||||
OSTime osGetTime(void); // func_80090420
|
||||
void guRotateF(float mf[4][4], float a, float x, float y, float z); // func_800904B0
|
||||
@ -400,42 +401,42 @@ void func_800906D0(void); // func_800906D0
|
||||
void func_80090810(void); // func_80090810
|
||||
void func_80090900(void); // func_80090900
|
||||
s32 osAiSetFrequency(u32 frequency); // func_80090AF0
|
||||
void func_80090C40(void); // func_80090C40
|
||||
s32 __osContRamRead(OSMesgQueue* mq, int channel, u16 address, u8* buffer); // func_80090C40
|
||||
void func_80090E70(void); // func_80090E70
|
||||
void func_800910A0(void); // func_800910A0
|
||||
void func_80091170(void); // func_80091170
|
||||
u8 __osContAddressCrc(u16 addr); // func_800910A0
|
||||
u8 __osContDataCrc(u8* data); // func_80091170
|
||||
OSThread* __osGetActiveQueue(void); // func_80091210
|
||||
void guNormalize(float* x, float* y, float* z); // func_80091220
|
||||
void __osSetCompare(u32 value); // func_80091280
|
||||
u32 __osGetCompare(void); // func_80091290
|
||||
u32 osDpGetStatus(void); // func_800912A0
|
||||
void osDpSetStatus(u32 status); // func_800912B0
|
||||
void osDpSetStatus(u32 data); // func_800912B0
|
||||
void _bcopy(void* __src, void* __dest, size_t __n); // func_800912C0
|
||||
void __osResetGlobalIntMask(void); // func_800915D0
|
||||
void func_80091630(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5); // func_80091630
|
||||
void func_80091808(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5); // func_80091808
|
||||
void guOrthoF(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5, UNK_TYPE4 param_6, UNK_TYPE4 param_7, UNK_TYPE4 param_8); // func_800918A0
|
||||
void guOrtho(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5, UNK_TYPE4 param_6, UNK_TYPE4 param_7, UNK_TYPE4 param_8); // func_800919F4
|
||||
void guOrthoF(float mf[4][4], float l, float r, float b, float t, float n, float f, float scale); // func_800918A0
|
||||
void guOrtho(Mtx* m, float l, float r, float b, float t, float n, float f, float scale); // func_800919F4
|
||||
OSIntMask __osDisableInt(void); // func_80091A60
|
||||
void __osRestoreInt(OSIntMask im); // func_80091AD0
|
||||
void __osViInit(void); // func_80091AF0
|
||||
void __osViSwapContext(void); // func_80091C10
|
||||
void osPiGetCmdQueue(void); // func_80091F10
|
||||
OSMesgQueue* osPiGetCmdQueue(void); // func_80091F10
|
||||
f32 __cosf(f32 __x); // func_80091F40
|
||||
void func_800920B0(void); // func_800920B0
|
||||
void osViSetSpecialFeatures(u32 func); // func_80092100
|
||||
s32 coss(u16 angle); // func_80092260
|
||||
void osSetTime(void); // func_80092290
|
||||
short coss(unsigned short x); // func_80092260
|
||||
void osSetTime(OSTime ticks); // func_80092290
|
||||
void func_800922C0(void); // func_800922C0
|
||||
void osViSetEvent(OSMesgQueue* param_1, OSMesg param_2, u32 retraceCount); // func_800923E0
|
||||
void osViSetEvent(OSMesgQueue* mq, OSMesg m, u32 retraceCount); // func_800923E0
|
||||
void func_80092440(void); // func_80092440
|
||||
void func_800925CC(void); // func_800925CC
|
||||
void func_80092680(void); // func_80092680
|
||||
void func_80092730(void); // func_80092730
|
||||
OSPiHandle* func_80092920(void); // func_80092920
|
||||
OSPiHandle* osCartRomInit(void); // func_80092920
|
||||
void func_80092A80(void); // func_80092A80
|
||||
void func_80092C00(void); // func_80092C00
|
||||
void osContSetCh(void); // func_80092C80
|
||||
s32 __osPfsSelectBank(OSPfs* pfs, UNK_TYPE4 param_2); // func_80092C00
|
||||
s32 osContSetCh(u8 ch); // func_80092C80
|
||||
u32 __osSetFpcCsr(u32 value); // func_80092CE0
|
||||
u32 __osGetFpcCsr(void); // func_80092CF0
|
||||
void func_80092D00(void); // func_80092D00
|
||||
@ -444,21 +445,21 @@ void func_800930E8(void); // func_800930E8
|
||||
void func_800931F0(void); // func_800931F0
|
||||
void func_80093728(void); // func_80093728
|
||||
void func_80093A00(void); // func_80093A00
|
||||
void osAiGetLength(void); // func_80093BA0
|
||||
u32 osAiGetLength(void); // func_80093BA0
|
||||
void func_80093BB0(void); // func_80093BB0
|
||||
void osMapTLBRdb(void); // func_80093C00
|
||||
void osYieldThread(void); // func_80093C60
|
||||
void func_80093CC0(void); // func_80093CC0
|
||||
u32 __osGetCause(void); // func_80093D90
|
||||
void func_80093DA0(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5); // func_80093DA0
|
||||
s32 __osContRamWrite(OSMesgQueue* mq, int channel, u16 address, u8* buffer, int force); // func_80093DA0
|
||||
void func_80093FF0(void); // func_80093FF0
|
||||
s32 osSetTimer(OSTimer* t, OSTime value, OSTime interval, OSMesgQueue* mq, OSMesg msg); // func_80094150
|
||||
void _Ldtob(void); // func_800942E0
|
||||
void func_80094770(void); // func_80094770
|
||||
void func_80094828(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE2 param_5); // func_80094828
|
||||
ldiv_t ldiv(s32 __numer, s32 __denom); // func_80094DF0
|
||||
lldiv_t* lldiv(s64 __numer, s64 __denom); // func_80094E74
|
||||
void _Litob(void); // func_80094F80
|
||||
int osSetTimer(OSTimer* t, OSTime value, OSTime interval, OSMesgQueue* mq, OSMesg msg); // func_80094150
|
||||
void _Ldtob(_Pft* px, unsigned char code); // func_800942E0
|
||||
void _Ldunscale(void); // func_80094770
|
||||
void _Genld(_Pft* px, unsigned char code, unsigned char* p, short nsig, short xexp); // func_80094828
|
||||
ldiv_t ldiv(long numer, long denom); // func_80094DF0
|
||||
lldiv_t lldiv(long long numer, long long denom); // func_80094E74
|
||||
void _Litob(_Pft* px, unsigned char code); // func_80094F80
|
||||
s32 __osSiRawWriteIo(u32 devAddr, u32 data); // func_80095220
|
||||
u32 __osSpGetStatus(void); // func_80095270
|
||||
void __osSpSetStatus(u32 value); // func_80095280
|
||||
@ -470,22 +471,23 @@ OSThread* __osGetCurrFaultedThread(void); // func_800955F0
|
||||
void func_80095600(void); // func_80095600
|
||||
void guMtxF2L(float mf[4][4], Mtx* m); // func_80095740
|
||||
void osStartThread(OSThread* param_1); // func_800957B0
|
||||
void osViSetYScale(f32 param_1); // func_80095900
|
||||
void osViSetXScale(f32 xscale); // func_80095950
|
||||
void __d_to_ll(void); // func_80095A60
|
||||
void __f_to_ll(void); // func_80095A7C
|
||||
void __d_to_ull(void); // func_80095A98
|
||||
void __f_to_ull(void); // func_80095B38
|
||||
void __ll_to_d(void); // func_80095BD4
|
||||
void __ll_to_f(void); // func_80095BEC
|
||||
void __ull_to_d(void); // func_80095C04
|
||||
void __ull_to_f(void); // func_80095C38
|
||||
void osViSetYScale(f32 value); // func_80095900
|
||||
void osViSetXScale(f32 value); // func_80095950
|
||||
long long __d_to_ll(double d); // func_80095A60
|
||||
long long __f_to_ll(float f); // func_80095A7C
|
||||
unsigned long long __d_to_ull(double d); // func_80095A98
|
||||
unsigned long long __f_to_ull(float f); // func_80095B38
|
||||
double __ll_to_d(long long l); // func_80095BD4
|
||||
float __ll_to_f(long long l); // func_80095BEC
|
||||
double __ull_to_d(unsigned long long l); // func_80095C04
|
||||
float __ull_to_f(unsigned long long l); // func_80095C38
|
||||
void func_80095C70(void); // func_80095C70
|
||||
void func_80096360(void); // func_80096360
|
||||
void func_80096410(void); // func_80096410
|
||||
void func_800964D0(void); // func_800964D0
|
||||
s32 __osSpSetPc(u32 data); // func_80096510
|
||||
void func_80096540(void); // func_80096540
|
||||
// UNK_RET func_80096770(UNK_ARGS);
|
||||
void func_800967A0(void); // func_800967A0
|
||||
u32 __osGetWatchLo(void); // func_80096810
|
||||
void __osSetWatchLo(u32 value); // func_80096820
|
||||
@ -3737,6 +3739,8 @@ void func_8019AB40(void); // func_8019AB40
|
||||
void func_8019AC10(void); // func_8019AC10
|
||||
void func_8019ACEC(void); // func_8019ACEC
|
||||
void func_8019ADBC(void); // func_8019ADBC
|
||||
// UNK_RET func_8019AE40(UNK_ARGS);
|
||||
// UNK_RET func_8019AEC0(UNK_ARGS);
|
||||
void func_8019AF00(void); // func_8019AF00
|
||||
void func_8019AF58(void); // func_8019AF58
|
||||
void func_8019AFE8(void); // func_8019AFE8
|
||||
|
17
include/os.h
17
include/os.h
@ -161,6 +161,7 @@ typedef struct {
|
||||
/* 0x8 */ void* dramAddr;
|
||||
/* 0xC */ u32 devAddr;
|
||||
/* 0x10 */ u32 size;
|
||||
/* 0x14 */ OSPiHandle* piHandle;
|
||||
} OSIoMesg;
|
||||
|
||||
|
||||
@ -170,7 +171,8 @@ typedef struct {
|
||||
/* 0x8 */ OSMesgQueue* cmdQueue;
|
||||
/* 0xC */ OSMesgQueue* evtQueue;
|
||||
/* 0x10 */ OSMesgQueue* acsQueue;
|
||||
/* 0x14 */ s32 (*dma)(... /* ECOFF does not store param types */);
|
||||
/* 0x14 */ s32 (*dma)(void);
|
||||
/* 0x14 */ s32 (*unk18)(void);
|
||||
} OSDevMgr;
|
||||
|
||||
|
||||
@ -244,12 +246,15 @@ typedef struct {
|
||||
/* 0x4 */ OSMesgQueue* queue;
|
||||
/* 0x8 */ int channel;
|
||||
/* 0xC */ u8 id[32];
|
||||
/* 0x2C */ u8 backup_id[32];
|
||||
/* 0x4C */ u8 label[32];
|
||||
/* 0x6C */ int pack_size;
|
||||
/* 0x70 */ int version;
|
||||
/* 0x74 */ int dir_size;
|
||||
/* 0x78 */ int inode_start_page;
|
||||
/* 0x6C */ int version;
|
||||
/* 0x70 */ int dir_size;
|
||||
/* 0x74 */ int inode_table;
|
||||
/* 0x78 */ int minode_table;
|
||||
/* 0x7C */ int dir_table;
|
||||
/* 0x80 */ int inode_start_page;
|
||||
/* 0x84 */ u8 banks;
|
||||
/* 0x88 */ u8 activebank;
|
||||
} OSPfs;
|
||||
|
||||
|
||||
|
@ -1,6 +1,45 @@
|
||||
#ifndef _STDARG_H_
|
||||
#define _STDARG_H_
|
||||
|
||||
typedef unsigned char* va_list;
|
||||
#include <ultra64.h>
|
||||
|
||||
// When building with GCC, use the official vaarg macros to avoid warnings
|
||||
// and possibly bad codegen.
|
||||
#ifdef __GNUC__
|
||||
#define va_list __builtin_va_list
|
||||
#define va_start __builtin_va_start
|
||||
#define va_arg __builtin_va_arg
|
||||
#define va_end __builtin_va_end
|
||||
#else
|
||||
|
||||
typedef char *va_list;
|
||||
#define _FP 1
|
||||
#define _INT 0
|
||||
#define _STRUCT 2
|
||||
|
||||
#define _VA_FP_SAVE_AREA 0x10
|
||||
#define _VA_ALIGN(p, a) (((unsigned int)(((char *)p) + ((a) > 4 ? (a) : 4) - 1)) & -((a) > 4 ? (a) : 4))
|
||||
#define va_start(vp, parmN) (vp = ((va_list)&parmN + sizeof(parmN)))
|
||||
|
||||
#define __va_stack_arg(list, mode) \
|
||||
( \
|
||||
((list) = (char *)_VA_ALIGN(list, __builtin_alignof(mode)) + \
|
||||
_VA_ALIGN(sizeof(mode), 4)), \
|
||||
(((char *)list) - (_VA_ALIGN(sizeof(mode), 4) - sizeof(mode))))
|
||||
|
||||
#define __va_double_arg(list, mode) \
|
||||
( \
|
||||
(((long)list & 0x1) /* 1 byte aligned? */ \
|
||||
? (list = (char *)((long)list + 7), (char *)((long)list - 6 - _VA_FP_SAVE_AREA)) \
|
||||
: (((long)list & 0x2) /* 2 byte aligned? */ \
|
||||
? (list = (char *)((long)list + 10), (char *)((long)list - 24 - _VA_FP_SAVE_AREA)) \
|
||||
: __va_stack_arg(list, mode))))
|
||||
|
||||
#define va_arg(list, mode) ((mode *)(((__builtin_classof(mode) == _FP && \
|
||||
__builtin_alignof(mode) == sizeof(double)) \
|
||||
? __va_double_arg(list, mode) \
|
||||
: __va_stack_arg(list, mode))))[-1]
|
||||
#define va_end(__list)
|
||||
|
||||
#endif
|
||||
#endif
|
||||
|
@ -35,8 +35,8 @@ extern UNK_TYPE1 D_80096CF8; // D_80096CF8
|
||||
extern UNK_TYPE4 D_80097500; // D_80097500
|
||||
extern UNK_TYPE4 D_80097524; // D_80097524
|
||||
extern u32 randSeed; // D_80097530
|
||||
extern UNK_TYPE1 osViModeNtscHpf1; // D_80097540
|
||||
extern UNK_TYPE1 D_80097590; // D_80097590
|
||||
extern OSViMode osViModeNtscHpf1; // D_80097540
|
||||
extern OSViMode osViModePalLan1; // D_80097590
|
||||
extern s16 sintable[1024]; // D_800975E0
|
||||
extern UNK_TYPE1 D_80097DE0; // D_80097DE0
|
||||
extern UNK_TYPE1 D_80097DE4; // D_80097DE4
|
||||
@ -46,33 +46,32 @@ extern OSThread* __osRunQueue; // D_80097E18
|
||||
extern OSThread* __osActiveQueue; // D_80097E1C
|
||||
extern OSThread* __osRunningThread; // D_80097E20
|
||||
extern OSThread* __osFaultedThread; // D_80097E24
|
||||
extern UNK_TYPE4 __osSiAccessQueueEnabled; // D_80097E30
|
||||
extern u32 __osSiAccessQueueEnabled; // D_80097E30
|
||||
extern UNK_TYPE4 D_80097E40; // D_80097E40
|
||||
extern u64 osClockRate; // D_80097E50
|
||||
extern s32 osViClock; // D_80097E58
|
||||
extern UNK_TYPE4 __osShutdown; // D_80097E5C
|
||||
extern UNK_TYPE4 __OSGlobalIntMask; // D_80097E60
|
||||
extern UNK_TYPE4 __osPiDevMgr; // D_80097E70
|
||||
extern OSPiHandle* osPiHandleListHead; // D_80097E8C
|
||||
extern OSDevMgr __osPiDevMgr; // D_80097E70
|
||||
extern OSPiHandle* __osPiTable; // D_80097E8C
|
||||
extern UNK_PTR D_80097E90; // D_80097E90
|
||||
extern UNK_TYPE4 __osPiAccessQueueEnabled; // D_80097EA0
|
||||
extern UNK_TYPE1 osViModeNtscHpn1; // D_80097EB0
|
||||
extern OSViMode osViModeNtscHpn1; // D_80097EB0
|
||||
extern UNK_TYPE4 D_80097F00; // D_80097F00
|
||||
extern UNK_TYPE1 D_80097F04; // D_80097F04
|
||||
extern UNK_TYPE4 D_80097F10; // D_80097F10
|
||||
extern char spaces[]; // D_80097F20
|
||||
extern char zeros[]; // D_80097F44
|
||||
extern char zeroes[]; // D_80097F44
|
||||
extern OSTimer* __osTimerList; // D_80097F70
|
||||
extern UNK_TYPE4 D_80097F80; // D_80097F80
|
||||
extern UNK_TYPE4 D_80097F90; // D_80097F90
|
||||
extern float D_80097F90; // D_80097F90
|
||||
extern UNK_TYPE1 D_80097FA0; // D_80097FA0
|
||||
extern UNK_TYPE1 D_80097FA4; // D_80097FA4
|
||||
extern UNK_TYPE1 D_80097FA5; // D_80097FA5
|
||||
extern UNK_TYPE4 D_80097FB0; // D_80097FB0
|
||||
extern OSViMode osViModeNtscLan1; // D_80097FC0
|
||||
extern OSViMode osViModeMpalLan1; // D_80098010
|
||||
extern __OSViContext D_80098060; // D_80098060
|
||||
extern UNK_TYPE2 D_80098090; // D_80098090
|
||||
extern __OSViContext D_80098060[2]; // D_80098060
|
||||
extern __OSViContext* __osViCurr; // D_800980C0
|
||||
extern __OSViContext* __osViNext; // D_800980C4
|
||||
extern UNK_TYPE4 D_800980D0; // D_800980D0
|
||||
@ -256,7 +255,7 @@ extern f64 D_800992F0; // D_800992F0
|
||||
extern f64 D_800992F8; // D_800992F8
|
||||
extern char D_80099300[]; // D_80099300
|
||||
extern char D_80099304[]; // D_80099304
|
||||
extern UNK_TYPE1 D_8009930C; // D_8009930C
|
||||
extern unsigned int D_8009930C[6]; // D_8009930C
|
||||
extern f32 D_80099400; // D_80099400
|
||||
extern f64 D_80099428; // D_80099428
|
||||
extern f64 D_80099430; // D_80099430
|
||||
@ -314,8 +313,8 @@ extern f32 randLast; // D_8009CD50
|
||||
extern UNK_TYPE4 heapLockMessageBuffer; // D_8009CD60
|
||||
extern OSTask tmp_task; // D_8009CD70
|
||||
extern UNK_TYPE1 D_8009CDB0; // D_8009CDB0
|
||||
extern UNK_TYPE1 D_8009CEB0; // D_8009CEB0
|
||||
extern UNK_TYPE1 __osSiAccessQueue; // D_8009CEB8
|
||||
extern OSMesg siAccessBuf[1]; // D_8009CEB0
|
||||
extern OSMesgQueue __osSiAccessQueue; // D_8009CEB8
|
||||
extern OSPifRam __osContPifRam; // D_8009CED0
|
||||
extern UNK_TYPE1 D_8009CF0C; // D_8009CF0C
|
||||
extern u8 __osContLastCmd; // D_8009CF10
|
||||
@ -325,33 +324,23 @@ extern OSMesg D_8009CF50[1]; // D_8009CF50
|
||||
extern UNK_TYPE1 D_8009CF60; // D_8009CF60
|
||||
extern UNK_TYPE4 D_8009CF70; // D_8009CF70
|
||||
extern UNK_TYPE1 __osThreadSave; // D_8009CF80
|
||||
extern UNK_TYPE1 D_8009D130; // D_8009D130
|
||||
extern u8 D_8009D134; // D_8009D134
|
||||
extern u8 D_8009D135; // D_8009D135
|
||||
extern u8 D_8009D136; // D_8009D136
|
||||
extern u8 D_8009D137; // D_8009D137
|
||||
extern u8 D_8009D138; // D_8009D138
|
||||
extern UNK_TYPE1 D_8009D1A8; // D_8009D1A8
|
||||
extern u8 D_8009D1AC; // D_8009D1AC
|
||||
extern u8 D_8009D1AD; // D_8009D1AD
|
||||
extern u8 D_8009D1AE; // D_8009D1AE
|
||||
extern u8 D_8009D1AF; // D_8009D1AF
|
||||
extern u8 D_8009D1B0; // D_8009D1B0
|
||||
extern OSPiHandle D_8009D130; // D_8009D130
|
||||
extern OSPiHandle D_8009D1A8; // D_8009D1A8
|
||||
extern OSThread D_8009D220; // D_8009D220
|
||||
extern u8 piManagerStack[4096]; // D_8009D3D0
|
||||
extern OSMesgQueue D_8009E3D0; // D_8009E3D0
|
||||
extern UNK_TYPE1 D_8009E3E8; // D_8009E3E8
|
||||
extern UNK_TYPE1 D_8009E3F0; // D_8009E3F0
|
||||
extern OSMesg D_8009E3E8[1]; // D_8009E3E8
|
||||
extern OSMesg D_8009E3F0[1]; // D_8009E3F0
|
||||
extern OSMesgQueue __osPiAccessQueue; // D_8009E3F8
|
||||
extern UNK_TYPE1 D_8009E410; // D_8009E410
|
||||
extern __OSEventState __osEventStateTab[16]; // D_8009E510
|
||||
extern OSTimer D_8009E590; // D_8009E590
|
||||
extern OSTime __osCurrentTime; // D_8009E5B0
|
||||
extern u32 __osBaseCounter; // D_8009E5B8
|
||||
extern UNK_TYPE4 __osViIntrCount; // D_8009E5BC
|
||||
extern UNK_TYPE4 __osTimerCounter; // D_8009E5C0
|
||||
extern UNK_TYPE1 D_8009E5D0; // D_8009E5D0
|
||||
extern OSPiHandle D_8009E610; // D_8009E610
|
||||
extern u32 __osViIntrCount; // D_8009E5BC
|
||||
extern u32 __osTimerCounter; // D_8009E5C0
|
||||
extern OSPifRam __osPfsPifRam; // D_8009E5D0
|
||||
extern OSPiHandle CartRomHandle; // D_8009E610
|
||||
extern OSThread viThread; // D_8009E690
|
||||
extern u8 viThreadStack[4096]; // D_8009E840
|
||||
extern OSMesgQueue viEventQueue; // D_8009F840
|
||||
@ -3689,7 +3678,7 @@ extern char padmgrThreadName[]; // D_801DFD80
|
||||
extern char graphThreadName[]; // D_801DFD88
|
||||
extern char D_801DFD90[]; // D_801DFD90
|
||||
extern char D_801DFD9C[]; // D_801DFD9C
|
||||
extern UNK_TYPE1 D_801DFDA8; // D_801DFDA8
|
||||
extern char D_801DFDA8[]; // D_801DFDA8
|
||||
extern char D_801DFDE0[]; // D_801DFDE0
|
||||
extern char D_801DFDFC[]; // D_801DFDFC
|
||||
extern char D_801DFE18[]; // D_801DFE18
|
||||
|
@ -2,6 +2,7 @@ SECTIONS
|
||||
{
|
||||
/* Objects with .gptab.data sections error if they are not referenced, for some reason */
|
||||
/DISCARD/ : { *(.gptab.data) }
|
||||
/DISCARD/ : { *(.gptab.bss) }
|
||||
|
||||
boot 0x80080060:
|
||||
{
|
||||
@ -26,7 +27,7 @@ SECTIONS
|
||||
build/asm/boot_0x800862E0.o(.text)
|
||||
build/asm/boot_0x80086760.o(.text)
|
||||
build/asm/__osMalloc.o(.text)
|
||||
build/asm/sprintf.o(.text)
|
||||
build/src/libultra/rmon/sprintf.o(.text)
|
||||
build/asm/boot_0x80087900.o(.text)
|
||||
build/asm/setcause.o(.text)
|
||||
build/src/libultra/os/sendmesg.o(.text)
|
||||
@ -41,137 +42,141 @@ SECTIONS
|
||||
build/src/libultra/gu/sinf.o(.text)
|
||||
build/src/libultra/gu/sins.o(.text)
|
||||
build/src/libultra/io/sptask.o(.text)
|
||||
build/asm/ll.o(.text)
|
||||
build/src/libultra/libc/ll.o(.text)
|
||||
build/asm/exceptasm.o(.text)
|
||||
build/src/libultra/os/thread.o(.text)
|
||||
build/src/libultra/os/destroythread.o(.text)
|
||||
build/asm/boot_0x80089580.o(.text)
|
||||
build/asm/bzero.o(.text)
|
||||
build/asm/boot_0x800896D0.o(.text)
|
||||
build/asm/siacs.o(.text)
|
||||
build/src/libultra/io/siacs.o(.text)
|
||||
build/src/libultra/io/controller.o(.text)
|
||||
build/src/libultra/os/createthread.o(.text)
|
||||
build/asm/contreaddata.o(.text)
|
||||
build/src/libultra/io/contreaddata.o(.text)
|
||||
build/asm/boot_0x8008A170.o(.text)
|
||||
build/src/libultra/os/virtualtophysical.o(.text)
|
||||
build/asm/getsr.o(.text)
|
||||
build/asm/setsr.o(.text)
|
||||
build/asm/writebackdcache.o(.text)
|
||||
build/asm/initialize.o(.text)
|
||||
build/asm/vigetnextframebuf.o(.text)
|
||||
build/src/libultra/io/vigetnextframebuf.o(.text)
|
||||
build/src/libultra/gu/perspective.o(.text)
|
||||
build/src/libultra/io/sprawdma.o(.text)
|
||||
build/asm/sirawdma.o(.text)
|
||||
build/src/libultra/io/sirawdma.o(.text)
|
||||
build/asm/boot_0x8008AE20.o(.text)
|
||||
build/asm/virepeatline.o(.text)
|
||||
build/asm/sirawread.o(.text)
|
||||
build/src/libultra/io/virepeatline.o(.text)
|
||||
build/src/libultra/io/sirawread.o(.text)
|
||||
build/src/libultra/os/getthreadid.o(.text)
|
||||
build/asm/sptaskyield.o(.text)
|
||||
build/asm/boot_0x8008AF70.o(.text)
|
||||
build/src/libultra/io/sptaskyield.o(.text)
|
||||
build/asm/pfsreadwritefile.o(.text)
|
||||
build/asm/boot_0x8008B3C0.o(.text)
|
||||
build/asm/boot_0x8008B600.o(.text)
|
||||
build/asm/visetmode.o(.text)
|
||||
build/src/libultra/io/visetmode.o(.text)
|
||||
build/asm/getconfig.o(.text)
|
||||
build/asm/setconfig.o(.text)
|
||||
build/asm/lookat.o(.text)
|
||||
build/asm/boot_0x8008B9F0.o(.text)
|
||||
build/src/libultra/os/stoptimer.o(.text)
|
||||
build/asm/probetlb.o(.text)
|
||||
build/asm/pimgr.o(.text)
|
||||
build/asm/piacs.o(.text)
|
||||
build/asm/boot_0x8008C260.o(.text)
|
||||
build/src/libultra/io/pimgr.o(.text)
|
||||
build/src/libultra/io/piacs.o(.text)
|
||||
. += 0x10;
|
||||
build/asm/devmgr.o(.text)
|
||||
build/asm/boot_0x8008C640.o(.text)
|
||||
build/src/libultra/io/pirawdma.o(.text)
|
||||
build/asm/boot_0x8008C740.o(.text)
|
||||
build/asm/getcount.o(.text)
|
||||
build/asm/boot_0x8008D2E0.o(.text)
|
||||
build/src/boot_O1/boot_0x8008D350.o(.text)
|
||||
build/src/libultra/os/getmemsize.o(.text)
|
||||
build/asm/boot_0x8008D470.o(.text)
|
||||
build/src/libultra/os/seteventmesg.o(.text)
|
||||
build/asm/sqrtf.o(.text)
|
||||
build/asm/boot_0x8008D710.o(.text)
|
||||
build/src/libultra/io/contquery.o(.text)
|
||||
build/asm/lookathil.o(.text)
|
||||
build/asm/xprintf.o(.text)
|
||||
build/src/libultra/rmon/xprintf.o(.text)
|
||||
build/asm/boot_0x8008ED30.o(.text)
|
||||
build/asm/unmaptlball.o(.text)
|
||||
build/asm/pidma.o(.text)
|
||||
build/src/libultra/io/epidma.o(.text)
|
||||
build/asm/boot_0x8008EED0.o(.text)
|
||||
build/asm/boot_0x8008F100.o(.text)
|
||||
build/src/libultra/libc/string.o(.text)
|
||||
build/asm/createmesgqueue.o(.text)
|
||||
build/src/libultra/os/createmesgqueue.o(.text)
|
||||
build/asm/invalicache.o(.text)
|
||||
build/asm/invaldcache.o(.text)
|
||||
build/asm/timerintr.o(.text)
|
||||
build/src/libultra/os/timerintr.o(.text)
|
||||
build/asm/boot_0x8008F7D0.o(.text)
|
||||
build/asm/boot_0x8008FA00.o(.text)
|
||||
build/asm/si.o(.text)
|
||||
build/src/libultra/io/si.o(.text)
|
||||
build/asm/boot_0x8008FA60.o(.text)
|
||||
build/src/libultra/os/jammesg.o(.text)
|
||||
build/src/libultra/os/setthreadpri.o(.text)
|
||||
build/src/libultra/os/getthreadpri.o(.text)
|
||||
build/asm/boot_0x8008FD00.o(.text)
|
||||
build/asm/viswapbuf.o(.text)
|
||||
build/asm/boot_0x8008FEB0.o(.text)
|
||||
build/src/libultra/io/viswapbuf.o(.text)
|
||||
build/asm/position.o(.text)
|
||||
build/asm/boot_0x800900C0.o(.text)
|
||||
build/asm/sptaskyielded.o(.text)
|
||||
build/src/libultra/io/sptaskyielded.o(.text)
|
||||
build/asm/memcmp.o(.text)
|
||||
build/asm/gettime.o(.text)
|
||||
build/asm/rotate.o(.text)
|
||||
build/src/libultra/os/gettime.o(.text)
|
||||
build/src/libultra/gu/rotate.o(.text)
|
||||
build/asm/setglobalintmask.o(.text)
|
||||
build/asm/boot_0x800906D0.o(.text)
|
||||
build/asm/boot_0x80090810.o(.text)
|
||||
build/asm/boot_0x80090900.o(.text)
|
||||
build/asm/aisetfreq.o(.text)
|
||||
build/asm/boot_0x80090C40.o(.text)
|
||||
build/asm/contramread.o(.text)
|
||||
build/asm/boot_0x80090E70.o(.text)
|
||||
build/asm/boot_0x800910A0.o(.text)
|
||||
build/asm/getactivequeue.o(.text)
|
||||
build/asm/crc.o(.text)
|
||||
build/src/libultra/os/getactivequeue.o(.text)
|
||||
build/asm/normalize.o(.text)
|
||||
build/asm/setcompare.o(.text)
|
||||
build/asm/getcompare.o(.text)
|
||||
build/asm/dpgetstat.o(.text)
|
||||
build/asm/dpsetstat.o(.text)
|
||||
build/src/libultra/io/dpgetstat.o(.text)
|
||||
build/src/libultra/io/dpsetstat.o(.text)
|
||||
build/asm/bcopy.o(.text)
|
||||
build/asm/resetglobalintmask.o(.text)
|
||||
build/asm/boot_0x80091630.o(.text)
|
||||
build/asm/ortho.o(.text)
|
||||
build/src/libultra/gu/ortho.o(.text)
|
||||
build/asm/interrupt.o(.text)
|
||||
build/asm/vi.o(.text)
|
||||
build/src/libultra/io/vi.o(.text)
|
||||
build/asm/viswapcontext.o(.text)
|
||||
build/asm/pigetcmdq.o(.text)
|
||||
build/src/libultra/io/pigetcmdq.o(.text)
|
||||
build/asm/cosf.o(.text)
|
||||
build/asm/boot_0x800920B0.o(.text)
|
||||
build/asm/visetspecial.o(.text)
|
||||
build/asm/coss.o(.text)
|
||||
build/asm/settime.o(.text)
|
||||
build/src/libultra/io/visetspecial.o(.text)
|
||||
build/src/libultra/gu/coss.o(.text)
|
||||
build/src/libultra/os/settime.o(.text)
|
||||
build/asm/boot_0x800922C0.o(.text)
|
||||
build/asm/visetevent.o(.text)
|
||||
build/src/libultra/gu/visetevent.o(.text)
|
||||
build/asm/boot_0x80092440.o(.text)
|
||||
build/asm/boot_0x80092730.o(.text)
|
||||
build/asm/boot_0x80092920.o(.text)
|
||||
build/asm/cartrominit.o(.text)
|
||||
build/asm/boot_0x80092A80.o(.text)
|
||||
build/asm/boot_0x80092C00.o(.text)
|
||||
build/asm/contsetch.o(.text)
|
||||
build/src/libultra/io/contsetch.o(.text)
|
||||
build/asm/setfpccsr.o(.text)
|
||||
build/asm/getfpccsr.o(.text)
|
||||
build/asm/boot_0x80092D00.o(.text)
|
||||
build/asm/boot_0x80092EE0.o(.text)
|
||||
build/asm/boot_0x800931F0.o(.text)
|
||||
build/asm/aigetlen.o(.text)
|
||||
build/src/libultra/io/aigetlen.o(.text)
|
||||
build/asm/boot_0x80093BB0.o(.text)
|
||||
build/asm/maptlbrdb.o(.text)
|
||||
build/asm/yieldthread.o(.text)
|
||||
build/src/libultra/os/yieldthread.o(.text)
|
||||
. += 0x10;
|
||||
build/asm/boot_0x80093CC0.o(.text)
|
||||
build/asm/getcause.o(.text)
|
||||
build/asm/boot_0x80093DA0.o(.text)
|
||||
build/asm/contramwrite.o(.text)
|
||||
build/asm/boot_0x80093FF0.o(.text)
|
||||
build/asm/settimer.o(.text)
|
||||
build/src/libultra/os/settimer.o(.text)
|
||||
build/asm/xldtob.o(.text)
|
||||
build/asm/ldiv.o(.text)
|
||||
build/src/libultra/libc/ldiv.o(.text)
|
||||
build/asm/xlitob.o(.text)
|
||||
build/src/libultra/io/sirawwrite.o(.text)
|
||||
build/src/libultra/io/spgetstat.o(.text)
|
||||
build/src/libultra/io/spsetstat.o(.text)
|
||||
. = ALIGN(0x20); /* XXX insert NOPs to pad the file */
|
||||
. += 0x10;
|
||||
build/asm/vimgr.o(.text)
|
||||
build/src/libultra/io/vigetcurrcontext.o(.text)
|
||||
build/asm/writebackdcacheall.o(.text)
|
||||
@ -180,8 +185,8 @@ SECTIONS
|
||||
build/asm/boot_0x80095740.o(.text)
|
||||
build/src/libultra/os/startthread.o(.text)
|
||||
build/src/libultra/io/visetyscale.o(.text)
|
||||
build/asm/visetxscale.o(.text)
|
||||
build/asm/llcvt.o(.text)
|
||||
build/src/libultra/io/visetxscale.o(.text)
|
||||
build/src/libultra/libc/llcvt.o(.text)
|
||||
build/asm/boot_0x80095C70.o(.text)
|
||||
build/asm/boot_0x80096360.o(.text)
|
||||
build/asm/boot_0x80096410.o(.text)
|
||||
@ -221,11 +226,11 @@ SECTIONS
|
||||
build/src/libultra/gu/perspective.o(.rodata)
|
||||
build/asm/boot_rodata_0x8008C260.o(.text)
|
||||
build/asm/boot_rodata_lookathil.o(.text)
|
||||
build/asm/boot_rodata_xprintf.o(.text)
|
||||
build/src/libultra/rmon/xprintf.o(.rodata)
|
||||
build/asm/boot_rodata_cosf.o(.text)
|
||||
build/asm/boot_rodata___libm_qnan_f.o(.text)
|
||||
build/asm/boot_rodata_xldtob.o(.text)
|
||||
build/asm/boot_rodata_llcvt.o(.text)
|
||||
build/src/libultra/libc/llcvt.o(.rodata)
|
||||
build/asm/boot_rodata_build_date.o(.text)
|
||||
boot_rodata_end = .;
|
||||
}
|
||||
|
@ -3,11 +3,11 @@
|
||||
|
||||
void start(void) {
|
||||
StackCheck_Init(&bootStackEntry, (u32)bootStack, (u32)&bootStack[1024], 0, -1, "boot");
|
||||
osMemSize = func_8008D350();
|
||||
osMemSize = osGetMemSize();
|
||||
func_800818F4();
|
||||
osInitialize();
|
||||
osUnmapTLBAll();
|
||||
D_80096B40 = func_80092920();
|
||||
D_80096B40 = osCartRomInit();
|
||||
StackCheck_Init(&idleStackEntry, (u32)idleStack, (u32)&idleStack[1024], 0, 256, "idle");
|
||||
osCreateThread(&idleOSThread, 1, (osCreateThread_func)Idle_ThreadEntry, 0, &idleStack[1024], 12);
|
||||
osStartThread(&idleOSThread);
|
||||
|
@ -10,7 +10,7 @@ UNK_RET func_800805E0(UNK_TYPE a0) {
|
||||
osViSetMode(&osViModeMpalLan1);
|
||||
break;
|
||||
case 0:
|
||||
osViSetMode(&D_80097590);
|
||||
osViSetMode(&osViModePalLan1);
|
||||
break;
|
||||
case 1:
|
||||
default:
|
||||
|
@ -2,7 +2,6 @@
|
||||
#include <global.h>
|
||||
|
||||
s32 Dmamgr_DoDmaTransfer(u32 a0, void* a1, u32 a2) {
|
||||
u32 spPad;
|
||||
OSIoMesg sp60;
|
||||
OSMesgQueue sp48;
|
||||
OSMesg sp44;
|
||||
|
6
src/libultra/gu/coss.c
Normal file
6
src/libultra/gu/coss.c
Normal file
@ -0,0 +1,6 @@
|
||||
#include <ultra64.h>
|
||||
#include <global.h>
|
||||
|
||||
short coss(unsigned short x) {
|
||||
return sins(x + 0x4000);
|
||||
}
|
26
src/libultra/gu/ortho.c
Normal file
26
src/libultra/gu/ortho.c
Normal file
@ -0,0 +1,26 @@
|
||||
#include <ultra64.h>
|
||||
#include <global.h>
|
||||
|
||||
void guOrthoF(float m[4][4], float l, float r, float b, float t, float n, float f, float scale) {
|
||||
int i;
|
||||
int j;
|
||||
guMtxIdentF(m);
|
||||
m[0][0] = 2 / (r - l);
|
||||
m[1][1] = 2 / (t - b);
|
||||
m[2][2] = -2 / (f - n);
|
||||
m[3][0] = -(r + l) / (r - l);
|
||||
m[3][1] = -(t + b) / (t - b);
|
||||
m[3][2] = -(f + n) / (f - n);
|
||||
m[3][3] = 1;
|
||||
for (i = 0; i < 4; i++) {
|
||||
for (j = 0; j < 4; j++) {
|
||||
m[i][j] *= scale;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void guOrtho(Mtx *m, float l, float r, float b, float t, float n, float f, float scale) {
|
||||
float mf[4][4];
|
||||
guOrthoF(mf, l, r, b, t, n, f, scale);
|
||||
guMtxF2L(mf, m);
|
||||
}
|
52
src/libultra/gu/rotate.c
Normal file
52
src/libultra/gu/rotate.c
Normal file
@ -0,0 +1,52 @@
|
||||
#include <ultra64.h>
|
||||
#include <global.h>
|
||||
|
||||
void guRotateF(float m[4][4], float a, float x, float y, float z) {
|
||||
// TODO move in .data section
|
||||
// static float dtor;
|
||||
float sine;
|
||||
float cosine;
|
||||
float ab;
|
||||
float bc;
|
||||
float ca;
|
||||
float t;
|
||||
float xs;
|
||||
float ys;
|
||||
float zs;
|
||||
|
||||
guNormalize(&x, &y, &z);
|
||||
|
||||
a = a * D_80097F90;
|
||||
|
||||
sine = __sinf(a);
|
||||
cosine = __cosf(a);
|
||||
|
||||
ab = x * y * (1 - cosine);
|
||||
bc = y * z * (1 - cosine);
|
||||
ca = z * x * (1 - cosine);
|
||||
|
||||
guMtxIdentF(m);
|
||||
|
||||
xs = x * sine;
|
||||
ys = y * sine;
|
||||
zs = z * sine;
|
||||
|
||||
t = x * x;
|
||||
m[0][0] = (1 - t) * cosine + t;
|
||||
m[2][1] = bc - xs;
|
||||
m[1][2] = bc + xs;
|
||||
t = y * y;
|
||||
m[1][1] = (1 - t) * cosine + t;
|
||||
m[2][0] = ca + ys;
|
||||
m[0][2] = ca - ys;
|
||||
t = z * z;
|
||||
m[2][2] = (1 - t) * cosine + t;
|
||||
m[1][0] = ab - zs;
|
||||
m[0][1] = ab + zs;
|
||||
}
|
||||
|
||||
void guRotate(Mtx *m, float a, float x, float y, float z) {
|
||||
float mf[4][4];
|
||||
guRotateF(mf, a, x, y, z);
|
||||
guMtxF2L(mf, m);
|
||||
}
|
12
src/libultra/gu/visetevent.c
Normal file
12
src/libultra/gu/visetevent.c
Normal file
@ -0,0 +1,12 @@
|
||||
#include <ultra64.h>
|
||||
#include <global.h>
|
||||
|
||||
void osViSetEvent(OSMesgQueue *mq, OSMesg m, u32 retraceCount) {
|
||||
register u32 saveMask = __osDisableInt();
|
||||
|
||||
__osViNext->msgq = mq;
|
||||
__osViNext->msg = m;
|
||||
__osViNext->retraceCount = retraceCount;
|
||||
|
||||
__osRestoreInt(saveMask);
|
||||
}
|
6
src/libultra/io/aigetlen.c
Normal file
6
src/libultra/io/aigetlen.c
Normal file
@ -0,0 +1,6 @@
|
||||
#include <ultra64.h>
|
||||
#include <global.h>
|
||||
|
||||
u32 osAiGetLength(void) {
|
||||
return *(u32*)0xA4500004;
|
||||
}
|
64
src/libultra/io/contreaddata.c
Normal file
64
src/libultra/io/contreaddata.c
Normal file
@ -0,0 +1,64 @@
|
||||
#include <ultra64.h>
|
||||
#include <global.h>
|
||||
|
||||
s32 osContStartReadData(OSMesgQueue* mq) {
|
||||
s32 ret;
|
||||
int i;
|
||||
|
||||
__osSiGetAccess();
|
||||
|
||||
if (__osContLastCmd != 1) {
|
||||
__osPackReadData();
|
||||
__osSiRawStartDma(1, &__osContPifRam);
|
||||
osRecvMesg(mq, NULL, 1);
|
||||
}
|
||||
|
||||
ret = __osSiRawStartDma(0, &__osContPifRam);
|
||||
__osContLastCmd = 1;
|
||||
|
||||
__osSiRelAccess();
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
void osContGetReadData(OSContPad* data) {
|
||||
u8* ptr;
|
||||
__OSContReadFormat readformat;
|
||||
int i;
|
||||
|
||||
ptr = (u8*)__osContPifRam.ramarray;
|
||||
for (i = 0; i < __osMaxControllers; i++, ptr += sizeof(__OSContReadFormat), data++) {
|
||||
readformat = *(__OSContReadFormat*)ptr;
|
||||
data->errno = (readformat.rxsize & 0xc0) >> 4;
|
||||
if (data->errno == 0) {
|
||||
data->button = readformat.button;
|
||||
data->stick_x = readformat.stick_x;
|
||||
data->stick_y = readformat.stick_y;
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
void __osPackReadData() {
|
||||
u8* ptr;
|
||||
__OSContReadFormat readformat;
|
||||
int i;
|
||||
|
||||
ptr = (u8*)__osContPifRam.ramarray;
|
||||
for (i = 0; i < 0xF; i++) {
|
||||
__osContPifRam.ramarray[i] = 0;
|
||||
}
|
||||
|
||||
__osContPifRam.pifstatus = 1;
|
||||
readformat.dummy = 255;
|
||||
readformat.txsize = 1;
|
||||
readformat.rxsize = 4;
|
||||
readformat.cmd = 1;
|
||||
readformat.button = 65535;
|
||||
readformat.stick_x = -1;
|
||||
readformat.stick_y = -1;
|
||||
for (i = 0; i < __osMaxControllers; i++) {
|
||||
*(__OSContReadFormat*)ptr = readformat;
|
||||
ptr+=sizeof(__OSContReadFormat);
|
||||
}
|
||||
*ptr = 254;
|
||||
}
|
16
src/libultra/io/contsetch.c
Normal file
16
src/libultra/io/contsetch.c
Normal file
@ -0,0 +1,16 @@
|
||||
#include <ultra64.h>
|
||||
#include <global.h>
|
||||
|
||||
s32 osContSetCh(u8 ch) {
|
||||
__osSiGetAccess();
|
||||
|
||||
if (4 < ch) {
|
||||
__osMaxControllers = 4;
|
||||
} else {
|
||||
__osMaxControllers = ch;
|
||||
}
|
||||
__osContLastCmd = -2;
|
||||
|
||||
__osSiRelAccess();
|
||||
return 0;
|
||||
}
|
6
src/libultra/io/dpgetstat.c
Normal file
6
src/libultra/io/dpgetstat.c
Normal file
@ -0,0 +1,6 @@
|
||||
#include <ultra64.h>
|
||||
#include <global.h>
|
||||
|
||||
u32 osDpGetStatus(void) {
|
||||
return *(u32*)0xA410000C;
|
||||
}
|
6
src/libultra/io/dpsetstat.c
Normal file
6
src/libultra/io/dpsetstat.c
Normal file
@ -0,0 +1,6 @@
|
||||
#include <ultra64.h>
|
||||
#include <global.h>
|
||||
|
||||
void osDpSetStatus(u32 data) {
|
||||
*(u32*)0xA410000C = data;
|
||||
}
|
25
src/libultra/io/epidma.c
Normal file
25
src/libultra/io/epidma.c
Normal file
@ -0,0 +1,25 @@
|
||||
#include <ultra64.h>
|
||||
#include <global.h>
|
||||
|
||||
s32 osEPiStartDma(OSPiHandle* pihandle, OSIoMesg* mb, s32 direction) {
|
||||
register s32 result;
|
||||
|
||||
if (!__osPiDevMgr.active) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
mb->piHandle = pihandle;
|
||||
|
||||
if (direction == 0) {
|
||||
mb->hdr.type = 15;
|
||||
} else {
|
||||
mb->hdr.type = 16;
|
||||
}
|
||||
|
||||
if (mb->hdr.pri == 1) {
|
||||
result = osJamMesg(osPiGetCmdQueue(), mb, 0);
|
||||
} else {
|
||||
result = osSendMesg(osPiGetCmdQueue(), mb, 0);
|
||||
}
|
||||
return result;
|
||||
}
|
20
src/libultra/io/piacs.c
Normal file
20
src/libultra/io/piacs.c
Normal file
@ -0,0 +1,20 @@
|
||||
#include <ultra64.h>
|
||||
#include <global.h>
|
||||
|
||||
void __osPiCreateAccessQueue(void) {
|
||||
__osPiAccessQueueEnabled = 1;
|
||||
osCreateMesgQueue(&__osPiAccessQueue, D_8009E3F0, 1);
|
||||
osSendMesg(&__osPiAccessQueue, NULL, 0);
|
||||
}
|
||||
|
||||
void __osPiGetAccess(void) {
|
||||
OSMesg dummyMesg;
|
||||
if (!__osPiAccessQueueEnabled) {
|
||||
__osPiCreateAccessQueue();
|
||||
}
|
||||
osRecvMesg(&__osPiAccessQueue, &dummyMesg, 1);
|
||||
}
|
||||
|
||||
void __osPiRelAccess(void) {
|
||||
osSendMesg(&__osPiAccessQueue, NULL, 0);
|
||||
}
|
10
src/libultra/io/pigetcmdq.c
Normal file
10
src/libultra/io/pigetcmdq.c
Normal file
@ -0,0 +1,10 @@
|
||||
#include <ultra64.h>
|
||||
#include <global.h>
|
||||
|
||||
OSMesgQueue* osPiGetCmdQueue(void) {
|
||||
if (!__osPiDevMgr.active) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return __osPiDevMgr.cmdQueue;
|
||||
}
|
37
src/libultra/io/pimgr.c
Normal file
37
src/libultra/io/pimgr.c
Normal file
@ -0,0 +1,37 @@
|
||||
#include <ultra64.h>
|
||||
#include <global.h>
|
||||
|
||||
void osCreatePiManager(OSPri pri, OSMesgQueue* cmdQ, OSMesg* cmdBuf, s32 cmdMsgCnt) {
|
||||
u32 savedMask;
|
||||
OSPri oldPri;
|
||||
OSPri myPri;
|
||||
|
||||
if (!__osPiDevMgr.active) {
|
||||
osCreateMesgQueue(cmdQ, cmdBuf, cmdMsgCnt);
|
||||
osCreateMesgQueue(&D_8009E3D0, D_8009E3E8, 1);
|
||||
if (!__osPiAccessQueueEnabled) {
|
||||
__osPiCreateAccessQueue();
|
||||
}
|
||||
osSetEventMesg(8, &D_8009E3D0, (OSMesg) 0x22222222);
|
||||
oldPri = -1;
|
||||
myPri = osGetThreadPri(NULL);
|
||||
if (myPri < pri) {
|
||||
oldPri = myPri;
|
||||
osSetThreadPri(NULL, pri);
|
||||
}
|
||||
savedMask = __osDisableInt();
|
||||
__osPiDevMgr.active = 1;
|
||||
__osPiDevMgr.thread = &D_8009D220;
|
||||
__osPiDevMgr.cmdQueue = cmdQ;
|
||||
__osPiDevMgr.evtQueue = &D_8009E3D0;
|
||||
__osPiDevMgr.acsQueue = &__osPiAccessQueue;
|
||||
__osPiDevMgr.dma = (s32(*)(void))osPiRawStartDma;
|
||||
__osPiDevMgr.unk18 = (s32(*)(void))func_800900C0;
|
||||
osCreateThread(&D_8009D220, 0, __osDevMgrMain, (void *) &__osPiDevMgr, &piManagerStack[4096], pri);
|
||||
osStartThread(&D_8009D220);
|
||||
__osRestoreInt(savedMask);
|
||||
if (oldPri != -1) {
|
||||
osSetThreadPri(NULL, oldPri);
|
||||
}
|
||||
}
|
||||
}
|
27
src/libultra/io/pirawdma.c
Normal file
27
src/libultra/io/pirawdma.c
Normal file
@ -0,0 +1,27 @@
|
||||
#include <ultra64.h>
|
||||
#include <global.h>
|
||||
|
||||
s32 osPiRawStartDma(s32 direction, u32 devAddr, void* dramAddr, u32 size) {
|
||||
register int stat;
|
||||
|
||||
stat = *(vu32*)0xA4600010;
|
||||
while (stat & (2 | 1)) {
|
||||
stat = *(vu32*)0xA4600010;
|
||||
}
|
||||
|
||||
*(u32*)0xA4600000 = osVirtualToPhysical(dramAddr);
|
||||
|
||||
*(u32*)0xA4600004 = ((osRomBase | devAddr) & 0x1fffffff);
|
||||
|
||||
switch (direction) {
|
||||
case 0:
|
||||
*(u32*)0xA460000C = size - 1;
|
||||
break;
|
||||
case 1:
|
||||
*(u32*)0xA4600008 = size - 1;
|
||||
break;
|
||||
default:
|
||||
return -1;
|
||||
}
|
||||
return 0;
|
||||
}
|
12
src/libultra/io/si.c
Normal file
12
src/libultra/io/si.c
Normal file
@ -0,0 +1,12 @@
|
||||
#include <ultra64.h>
|
||||
#include <global.h>
|
||||
|
||||
int __osSiDeviceBusy() {
|
||||
register u32 status;
|
||||
status = *(u32*)0xA4800018;
|
||||
if (status & 3) {
|
||||
return 1;
|
||||
} else {
|
||||
return 0;
|
||||
}
|
||||
}
|
20
src/libultra/io/siacs.c
Normal file
20
src/libultra/io/siacs.c
Normal file
@ -0,0 +1,20 @@
|
||||
#include <ultra64.h>
|
||||
#include <global.h>
|
||||
|
||||
void __osSiCreateAccessQueue() {
|
||||
__osSiAccessQueueEnabled = 1;
|
||||
osCreateMesgQueue(&__osSiAccessQueue, siAccessBuf, 1);
|
||||
osSendMesg(&__osSiAccessQueue, NULL, 0);
|
||||
}
|
||||
|
||||
void __osSiGetAccess(void) {
|
||||
OSMesg dummyMesg;
|
||||
if (!__osSiAccessQueueEnabled) {
|
||||
__osSiCreateAccessQueue();
|
||||
}
|
||||
osRecvMesg(&__osSiAccessQueue, &dummyMesg, 1);
|
||||
}
|
||||
|
||||
void __osSiRelAccess(void) {
|
||||
osSendMesg(&__osSiAccessQueue, NULL, 0);
|
||||
}
|
25
src/libultra/io/sirawdma.c
Normal file
25
src/libultra/io/sirawdma.c
Normal file
@ -0,0 +1,25 @@
|
||||
#include <ultra64.h>
|
||||
#include <global.h>
|
||||
|
||||
s32 __osSiRawStartDma(s32 direction, void* dramAddr) {
|
||||
if ((*(u32*)0xA4800018 & 0x3) != 0) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (direction == 1) {
|
||||
osWritebackDCache(dramAddr, 64);
|
||||
}
|
||||
|
||||
*(u32*)0xA4800000 = osVirtualToPhysical(dramAddr);
|
||||
|
||||
if (direction == 0) {
|
||||
*(u32*)0xA4800004 = 0x1FC007C0;
|
||||
} else {
|
||||
*(u32*)0xA4800010 = 0x1FC007C0;
|
||||
}
|
||||
|
||||
if (direction == 0) {
|
||||
osInvalDCache(dramAddr, 64);
|
||||
}
|
||||
return 0;
|
||||
}
|
10
src/libultra/io/sirawread.c
Normal file
10
src/libultra/io/sirawread.c
Normal file
@ -0,0 +1,10 @@
|
||||
#include <ultra64.h>
|
||||
#include <global.h>
|
||||
|
||||
s32 __osSiRawReadIo(u32 devAddr, u32* data) {
|
||||
if (__osSiDeviceBusy()) {
|
||||
return -1;
|
||||
}
|
||||
*data = *(u32*)(devAddr | 0xA0000000);
|
||||
return 0;
|
||||
}
|
6
src/libultra/io/sptaskyield.c
Normal file
6
src/libultra/io/sptaskyield.c
Normal file
@ -0,0 +1,6 @@
|
||||
#include <ultra64.h>
|
||||
#include <global.h>
|
||||
|
||||
void osSpTaskYield(void) {
|
||||
__osSpSetStatus(0x400);
|
||||
}
|
18
src/libultra/io/sptaskyielded.c
Normal file
18
src/libultra/io/sptaskyielded.c
Normal file
@ -0,0 +1,18 @@
|
||||
#include <ultra64.h>
|
||||
#include <global.h>
|
||||
|
||||
OSYieldResult osSpTaskYielded(OSTask* task) {
|
||||
s32 status;
|
||||
OSYieldResult result;
|
||||
status = __osSpGetStatus();
|
||||
if (status & 0x100) {
|
||||
result = 1;
|
||||
} else {
|
||||
result = 0;
|
||||
}
|
||||
if (status & 0x80) {
|
||||
task->t.flags |= result;
|
||||
task->t.flags &= ~(2);
|
||||
}
|
||||
return result;
|
||||
}
|
28
src/libultra/io/vi.c
Normal file
28
src/libultra/io/vi.c
Normal file
@ -0,0 +1,28 @@
|
||||
#include <ultra64.h>
|
||||
#include <global.h>
|
||||
|
||||
void __osViInit(void) {
|
||||
bzero(D_80098060, sizeof(D_80098060));
|
||||
__osViCurr = &D_80098060[0];
|
||||
__osViNext = &D_80098060[1];
|
||||
__osViNext->retraceCount = 1;
|
||||
__osViCurr->retraceCount = 1;
|
||||
__osViNext->framep = (void*)0x80000000;
|
||||
__osViCurr->framep = (void*)0x80000000;
|
||||
|
||||
if (osTvType == 0) {
|
||||
__osViNext->modep = &osViModePalLan1;
|
||||
} else if (osTvType == 2) {
|
||||
__osViNext->modep = &osViModeMpalLan1;
|
||||
} else {
|
||||
__osViNext->modep = &osViModeNtscLan1;
|
||||
}
|
||||
|
||||
__osViNext->state = 0x20;
|
||||
__osViNext->control = __osViNext->modep->comRegs.ctrl;
|
||||
|
||||
while (*(vu32*)0xA4400010 > 10);
|
||||
*(vu32*)0xA4400000 = 0;
|
||||
|
||||
__osViSwapContext();
|
||||
}
|
15
src/libultra/io/vigetnextframebuf.c
Normal file
15
src/libultra/io/vigetnextframebuf.c
Normal file
@ -0,0 +1,15 @@
|
||||
#include <ultra64.h>
|
||||
#include <global.h>
|
||||
|
||||
void* osViGetNextFramebuffer(void) {
|
||||
register u32 saveMask;
|
||||
void* framep;
|
||||
|
||||
saveMask = __osDisableInt();
|
||||
|
||||
framep = __osViNext->framep;
|
||||
|
||||
__osRestoreInt(saveMask);
|
||||
|
||||
return framep;
|
||||
}
|
16
src/libultra/io/virepeatline.c
Normal file
16
src/libultra/io/virepeatline.c
Normal file
@ -0,0 +1,16 @@
|
||||
#include <ultra64.h>
|
||||
#include <global.h>
|
||||
|
||||
void osViRepeatLine(u8 active) {
|
||||
register u32 saveMask;
|
||||
|
||||
saveMask = __osDisableInt();
|
||||
|
||||
if (active) {
|
||||
__osViNext->state |= 0x20;
|
||||
} else {
|
||||
__osViNext->state &= 0xffdf;
|
||||
}
|
||||
|
||||
__osRestoreInt(saveMask);
|
||||
}
|
14
src/libultra/io/visetmode.c
Normal file
14
src/libultra/io/visetmode.c
Normal file
@ -0,0 +1,14 @@
|
||||
#include <ultra64.h>
|
||||
#include <global.h>
|
||||
|
||||
void osViSetMode(OSViMode* modep) {
|
||||
register u32 saveMask;
|
||||
|
||||
saveMask = __osDisableInt();
|
||||
|
||||
__osViNext->modep = modep;
|
||||
__osViNext->state = 1;
|
||||
__osViNext->control = __osViNext->modep->comRegs.ctrl;
|
||||
|
||||
__osRestoreInt(saveMask);
|
||||
}
|
39
src/libultra/io/visetspecial.c
Normal file
39
src/libultra/io/visetspecial.c
Normal file
@ -0,0 +1,39 @@
|
||||
#include <ultra64.h>
|
||||
#include <global.h>
|
||||
|
||||
void osViSetSpecialFeatures(u32 func) {
|
||||
register u32 saveMask = __osDisableInt();
|
||||
|
||||
if (func & 1) {
|
||||
__osViNext->control |= 8;
|
||||
}
|
||||
if (func & 2) {
|
||||
__osViNext->control &= ~8;
|
||||
}
|
||||
if (func & 4) {
|
||||
__osViNext->control |= 4;
|
||||
}
|
||||
if (func & 8) {
|
||||
|
||||
__osViNext->control &= ~4;
|
||||
}
|
||||
if (func & 0x10) {
|
||||
|
||||
__osViNext->control |= 0x10;
|
||||
}
|
||||
if (func & 0x20) {
|
||||
|
||||
__osViNext->control &= ~0x10;
|
||||
}
|
||||
if (func & 0x40) {
|
||||
__osViNext->control |= 0x10000;
|
||||
__osViNext->control &= ~0x300;
|
||||
}
|
||||
if (func & 0x80) {
|
||||
__osViNext->control &= ~0x10000;
|
||||
__osViNext->control |= __osViNext->modep->comRegs.ctrl & 0x300;
|
||||
}
|
||||
__osViNext->state |= 8;
|
||||
|
||||
__osRestoreInt(saveMask);
|
||||
}
|
18
src/libultra/io/visetxscale.c
Normal file
18
src/libultra/io/visetxscale.c
Normal file
@ -0,0 +1,18 @@
|
||||
#include <ultra64.h>
|
||||
#include <global.h>
|
||||
|
||||
void osViSetXScale(f32 value) {
|
||||
register u32 nomValue;
|
||||
register u32 saveMask;
|
||||
|
||||
saveMask = __osDisableInt();
|
||||
|
||||
__osViNext->x.factor = value;
|
||||
|
||||
__osViNext->state |= 0x2;
|
||||
|
||||
nomValue = __osViNext->modep->comRegs.xScale & 0xfff;
|
||||
__osViNext->x.scale = (u32)(__osViNext->x.factor * nomValue) & 0xFFF;
|
||||
|
||||
__osRestoreInt(saveMask);
|
||||
}
|
@ -3,12 +3,12 @@
|
||||
#include <viint.h>
|
||||
#include <assert.h>
|
||||
|
||||
void osViSetYScale(f32 f12) {
|
||||
void osViSetYScale(f32 value) {
|
||||
register u32 saveMask;
|
||||
|
||||
saveMask = __osDisableInt();
|
||||
|
||||
__osViNext->y.factor = f12;
|
||||
__osViNext->y.factor = value;
|
||||
|
||||
__osViNext->state |= 0x4;
|
||||
|
||||
|
12
src/libultra/io/viswapbuf.c
Normal file
12
src/libultra/io/viswapbuf.c
Normal file
@ -0,0 +1,12 @@
|
||||
#include <ultra64.h>
|
||||
#include <global.h>
|
||||
|
||||
void osViSwapBuffer(void* frameBufPtr) {
|
||||
|
||||
u32 saveMask = __osDisableInt();
|
||||
|
||||
__osViNext->framep = frameBufPtr;
|
||||
__osViNext->state |= 0x10;
|
||||
|
||||
__osRestoreInt(saveMask);
|
||||
}
|
28
src/libultra/libc/ldiv.c
Normal file
28
src/libultra/libc/ldiv.c
Normal file
@ -0,0 +1,28 @@
|
||||
#include <ultra64.h>
|
||||
#include <global.h>
|
||||
|
||||
ldiv_t ldiv(long numer, long denom) {
|
||||
ldiv_t val;
|
||||
|
||||
val.quot = numer / denom;
|
||||
val.rem = numer - denom * val.quot;
|
||||
if (val.quot < 0 && val.rem > 0) {
|
||||
val.quot++;
|
||||
val.rem -= denom;
|
||||
}
|
||||
|
||||
return val;
|
||||
}
|
||||
|
||||
lldiv_t lldiv(long long numer, long long denom) {
|
||||
lldiv_t val;
|
||||
|
||||
val.quot = numer / denom;
|
||||
val.rem = numer - denom * val.quot;
|
||||
if (val.quot < 0 && val.rem > 0) {
|
||||
val.quot++;
|
||||
val.rem -= denom;
|
||||
}
|
||||
|
||||
return val;
|
||||
}
|
47
src/libultra/libc/ll.c
Normal file
47
src/libultra/libc/ll.c
Normal file
@ -0,0 +1,47 @@
|
||||
#include <ultra64.h>
|
||||
#include <global.h>
|
||||
|
||||
long long __ull_rshift(unsigned long long left, unsigned long long right) {
|
||||
return left >> right;
|
||||
}
|
||||
|
||||
unsigned long long __ull_rem(unsigned long long left, unsigned long long right) {
|
||||
return left % right;
|
||||
}
|
||||
|
||||
unsigned long long __ull_div(unsigned long long left, unsigned long long right) {
|
||||
return left / right;
|
||||
}
|
||||
|
||||
long long __ll_lshift(long long left, long long right) {
|
||||
return left << right;
|
||||
}
|
||||
|
||||
long long __ll_rem(long long left, unsigned long long right) {
|
||||
return left % right;
|
||||
}
|
||||
|
||||
long long __ll_div(long long left, long long right) {
|
||||
return left / right;
|
||||
}
|
||||
|
||||
long long __ll_mul(long long left, long long right) {
|
||||
return left * right;
|
||||
}
|
||||
|
||||
void __ull_divremi(unsigned long long *quotient, unsigned long long *remainder, unsigned long long dividend, unsigned short divisor) {
|
||||
*quotient = dividend / divisor;
|
||||
*remainder = dividend % divisor;
|
||||
}
|
||||
|
||||
long long __ll_mod(long long left, long long right) {
|
||||
long long rem = left % right;
|
||||
if ((rem < 0 && right > 0) || (rem > 0 && right < 0)) {
|
||||
rem += right;
|
||||
}
|
||||
return rem;
|
||||
}
|
||||
|
||||
long long __ll_rshift(long long left, long long right) {
|
||||
return left >> right;
|
||||
}
|
34
src/libultra/libc/llcvt.c
Normal file
34
src/libultra/libc/llcvt.c
Normal file
@ -0,0 +1,34 @@
|
||||
#include <ultra64.h>
|
||||
#include <global.h>
|
||||
|
||||
long long __d_to_ll(double d) {
|
||||
return d;
|
||||
}
|
||||
|
||||
long long __f_to_ll(float f) {
|
||||
return f;
|
||||
}
|
||||
|
||||
unsigned long long __d_to_ull(double d) {
|
||||
return d;
|
||||
}
|
||||
|
||||
unsigned long long __f_to_ull(float f) {
|
||||
return f;
|
||||
}
|
||||
|
||||
double __ll_to_d(long long s) {
|
||||
return s;
|
||||
}
|
||||
|
||||
float __ll_to_f(long long s) {
|
||||
return s;
|
||||
}
|
||||
|
||||
double __ull_to_d(unsigned long long u) {
|
||||
return u;
|
||||
}
|
||||
|
||||
float __ull_to_f(unsigned long long u) {
|
||||
return u;
|
||||
}
|
11
src/libultra/os/createmesgqueue.c
Normal file
11
src/libultra/os/createmesgqueue.c
Normal file
@ -0,0 +1,11 @@
|
||||
#include <ultra64.h>
|
||||
#include <global.h>
|
||||
|
||||
void osCreateMesgQueue(OSMesgQueue* mq, OSMesg* msq, s32 count) {
|
||||
mq->mtqueue = (OSThread *)&__osThreadTail;
|
||||
mq->fullqueue = (OSThread *)&__osThreadTail;
|
||||
mq->validCount = 0;
|
||||
mq->first = 0;
|
||||
mq->msgCount = count;
|
||||
mq->msg = msq;
|
||||
}
|
6
src/libultra/os/getactivequeue.c
Normal file
6
src/libultra/os/getactivequeue.c
Normal file
@ -0,0 +1,6 @@
|
||||
#include <ultra64.h>
|
||||
#include <global.h>
|
||||
|
||||
OSThread* __osGetActiveQueue(void){
|
||||
return __osActiveQueue;
|
||||
}
|
@ -1,7 +1,7 @@
|
||||
#include <ultra64.h>
|
||||
#include <global.h>
|
||||
|
||||
u32 func_8008D350(void) {
|
||||
u32 osGetMemSize(void) {
|
||||
u32* spC;
|
||||
u32 sp8;
|
||||
u32 sp4;
|
19
src/libultra/os/gettime.c
Normal file
19
src/libultra/os/gettime.c
Normal file
@ -0,0 +1,19 @@
|
||||
#include <ultra64.h>
|
||||
#include <global.h>
|
||||
|
||||
OSTime osGetTime(void) {
|
||||
u32 CurrentCount;
|
||||
u32 elapseCount;
|
||||
OSTime sp28;
|
||||
register u32 savedMask;
|
||||
|
||||
savedMask = __osDisableInt();
|
||||
|
||||
CurrentCount = osGetCount();
|
||||
elapseCount = CurrentCount - __osBaseCounter;
|
||||
sp28 = __osCurrentTime;
|
||||
|
||||
__osRestoreInt(savedMask);
|
||||
|
||||
return elapseCount + sp28;
|
||||
}
|
@ -2,16 +2,16 @@
|
||||
#include <osint.h>
|
||||
|
||||
void func_8008A660(void) {
|
||||
D_8009D134 = 7;
|
||||
D_8009D135 = *(u32*)0xA4600014;
|
||||
D_8009D138 = *(u32*)0xA4600018;
|
||||
D_8009D136 = *(u32*)0xA460001C;
|
||||
D_8009D137 = *(u32*)0xA4600020;
|
||||
D_8009D1AC = 7;
|
||||
D_8009D1AD = *(u32*)0xA4600024;
|
||||
D_8009D1B0 = *(u32*)0xA4600028;
|
||||
D_8009D1AE = *(u32*)0xA460002C;
|
||||
D_8009D1AF = *(u32*)0xA4600030;
|
||||
D_8009D130.type = 7;
|
||||
D_8009D130.latency = *(u32*)0xA4600014;
|
||||
D_8009D130.pageSize = *(u32*)0xA4600018;
|
||||
D_8009D130.relDuration = *(u32*)0xA460001C;
|
||||
D_8009D130.pulse = *(u32*)0xA4600020;
|
||||
D_8009D1A8.type = 7;
|
||||
D_8009D1A8.latency = *(u32*)0xA4600024;
|
||||
D_8009D1A8.pageSize = *(u32*)0xA4600028;
|
||||
D_8009D1A8.relDuration = *(u32*)0xA460002C;
|
||||
D_8009D1A8.pulse = *(u32*)0xA4600030;
|
||||
}
|
||||
|
||||
u64 D_80097E50; // this has to be defined in this file for func_8008A6FC to match
|
||||
|
6
src/libultra/os/settime.c
Normal file
6
src/libultra/os/settime.c
Normal file
@ -0,0 +1,6 @@
|
||||
#include <ultra64.h>
|
||||
#include <global.h>
|
||||
|
||||
void osSetTime(OSTime ticks) {
|
||||
__osCurrentTime = ticks;
|
||||
}
|
42
src/libultra/os/settimer.c
Normal file
42
src/libultra/os/settimer.c
Normal file
@ -0,0 +1,42 @@
|
||||
#include <ultra64.h>
|
||||
#include <global.h>
|
||||
|
||||
int osSetTimer(OSTimer* t, OSTime value, OSTime interval, OSMesgQueue* mq, OSMesg msg) {
|
||||
OSTime tim;
|
||||
OSTimer* spC;
|
||||
u32 sp14;
|
||||
u32 sp10;
|
||||
u32 saveMask;
|
||||
|
||||
t->next = NULL;
|
||||
t->prev = NULL;
|
||||
t->interval = interval;
|
||||
if (value != 0) {
|
||||
t->value = value;
|
||||
} else {
|
||||
t->value = interval;
|
||||
}
|
||||
t->mq = mq;
|
||||
t->msg = msg;
|
||||
|
||||
saveMask = __osDisableInt();
|
||||
|
||||
if (__osTimerList->next != __osTimerList) {
|
||||
if (0);
|
||||
spC = __osTimerList->next;
|
||||
sp14 = osGetCount();
|
||||
sp10 = sp14 - __osTimerCounter;
|
||||
if (sp10 < spC->value) {
|
||||
spC->value -= sp10;
|
||||
} else {
|
||||
spC->value = 1;
|
||||
}
|
||||
}
|
||||
|
||||
tim = __osInsertTimer(t);
|
||||
__osSetTimerIntr(__osTimerList->next->value);
|
||||
|
||||
__osRestoreInt(saveMask);
|
||||
|
||||
return 0;
|
||||
}
|
98
src/libultra/os/timerintr.c
Normal file
98
src/libultra/os/timerintr.c
Normal file
@ -0,0 +1,98 @@
|
||||
#include <ultra64.h>
|
||||
#include <global.h>
|
||||
|
||||
OSTime __osCurrentTime;
|
||||
u32 __osBaseCounter;
|
||||
u32 __osViIntrCount;
|
||||
u32 __osTimerCounter;
|
||||
|
||||
void __osTimerServicesInit(void) {
|
||||
__osCurrentTime = 0;
|
||||
__osBaseCounter = 0;
|
||||
__osViIntrCount = 0;
|
||||
__osTimerList->prev = __osTimerList;
|
||||
__osTimerList->next = __osTimerList->prev;
|
||||
__osTimerList->value = 0;
|
||||
__osTimerList->interval = __osTimerList->value;
|
||||
__osTimerList->mq = NULL;
|
||||
__osTimerList->msg = NULL;
|
||||
}
|
||||
|
||||
void __osTimerInterrupt(void) {
|
||||
OSTimer* t;
|
||||
u32 count;
|
||||
u32 elapsed_cycles;
|
||||
if (__osTimerList->next == __osTimerList) {
|
||||
return;
|
||||
}
|
||||
while (1) {
|
||||
t = __osTimerList->next;
|
||||
if (t == __osTimerList) {
|
||||
__osSetCompare(0);
|
||||
__osTimerCounter = 0;
|
||||
break;
|
||||
}
|
||||
count = osGetCount();
|
||||
elapsed_cycles = count - __osTimerCounter;
|
||||
__osTimerCounter = count;
|
||||
if (elapsed_cycles < t->value) {
|
||||
t->value -= elapsed_cycles;
|
||||
__osSetTimerIntr(t->value);
|
||||
return;
|
||||
} else {
|
||||
t->prev->next = t->next;
|
||||
t->next->prev = t->prev;
|
||||
t->next = NULL;
|
||||
t->prev = NULL;
|
||||
if (t->mq != NULL) {
|
||||
osSendMesg(t->mq, t->msg, 0);
|
||||
}
|
||||
if (t->interval != 0) {
|
||||
t->value = t->interval;
|
||||
__osInsertTimer(t);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void __osSetTimerIntr(OSTime tim) {
|
||||
OSTime NewTime;
|
||||
u32 savedMask;
|
||||
|
||||
if (tim < 468) {
|
||||
tim = 468;
|
||||
}
|
||||
|
||||
savedMask = __osDisableInt();
|
||||
|
||||
__osTimerCounter = osGetCount();
|
||||
NewTime = tim + __osTimerCounter;
|
||||
__osSetCompare(NewTime);
|
||||
|
||||
__osRestoreInt(savedMask);
|
||||
}
|
||||
|
||||
OSTime __osInsertTimer(OSTimer* t) {
|
||||
OSTimer* timep;
|
||||
OSTime tim;
|
||||
u32 savedMask;
|
||||
|
||||
savedMask = __osDisableInt();
|
||||
|
||||
for (timep = __osTimerList->next, tim = t->value; timep != __osTimerList && tim > timep->value;
|
||||
tim -= timep->value, timep = timep->next) {
|
||||
;
|
||||
}
|
||||
t->value = tim;
|
||||
if (timep != __osTimerList) {
|
||||
timep->value -= tim;
|
||||
}
|
||||
t->next = timep;
|
||||
t->prev = timep->prev;
|
||||
timep->prev->next = t;
|
||||
timep->prev = t;
|
||||
|
||||
__osRestoreInt(savedMask);
|
||||
|
||||
return tim;
|
||||
}
|
11
src/libultra/os/yieldthread.c
Normal file
11
src/libultra/os/yieldthread.c
Normal file
@ -0,0 +1,11 @@
|
||||
#include <ultra64.h>
|
||||
#include <global.h>
|
||||
|
||||
void osYieldThread(void) {
|
||||
register u32 saveMask = __osDisableInt();
|
||||
|
||||
__osRunningThread->state = 2;
|
||||
__osEnqueueAndYield(&__osRunQueue);
|
||||
|
||||
__osRestoreInt(saveMask);
|
||||
}
|
26
src/libultra/rmon/sprintf.c
Normal file
26
src/libultra/rmon/sprintf.c
Normal file
@ -0,0 +1,26 @@
|
||||
#include <ultra64.h>
|
||||
#include <global.h>
|
||||
|
||||
void* proutSprintf(void* dst, char* fmt, size_t size) {
|
||||
return (char*)memcpy(dst, fmt, size) + size;
|
||||
}
|
||||
|
||||
int vsprintf(char* dst, char* fmt, va_list args) {
|
||||
int ans = _Printf(&proutSprintf, dst, fmt, args);
|
||||
if (ans > -1) {
|
||||
dst[ans] = 0;
|
||||
}
|
||||
return ans;
|
||||
}
|
||||
|
||||
int sprintf(char* dst, char* fmt, ...) {
|
||||
int ans;
|
||||
va_list ap;
|
||||
va_start(ap, fmt);
|
||||
|
||||
ans = _Printf(&proutSprintf, dst, fmt, ap);
|
||||
if (ans > -1) {
|
||||
dst[ans] = 0;
|
||||
}
|
||||
return ans;
|
||||
}
|
233
src/libultra/rmon/xprintf.c
Normal file
233
src/libultra/rmon/xprintf.c
Normal file
@ -0,0 +1,233 @@
|
||||
#include <ultra64.h>
|
||||
#include <global.h>
|
||||
|
||||
#define ATOI(i, a) \
|
||||
for (i = 0; *a >= '0' && *a <= '9'; a++) \
|
||||
if (i < 999) \
|
||||
i = *a + i * 10 - '0';
|
||||
#define _PROUT(fmt, _size) \
|
||||
if (_size > 0) { \
|
||||
arg = (void*)pfn(arg, fmt, _size); \
|
||||
if (arg != 0) \
|
||||
x.nchar += _size; \
|
||||
else \
|
||||
return x.nchar; \
|
||||
}
|
||||
#define _PAD(m, src, extracond) \
|
||||
if (extracond && m > 0) { \
|
||||
int i; \
|
||||
int j; \
|
||||
for (j = m; j > 0; j -= i) { \
|
||||
if ((u32) j > 32) \
|
||||
i = 32; \
|
||||
else \
|
||||
i = j; \
|
||||
_PROUT(src, i); \
|
||||
} \
|
||||
}
|
||||
|
||||
#define FLAGS_SPACE 1
|
||||
#define FLAGS_PLUS 2
|
||||
#define FLAGS_MINUS 4
|
||||
#define FLAGS_HASH 8
|
||||
#define FLAGS_ZERO 16
|
||||
|
||||
// TODO .data section should be included after boot .data is split
|
||||
//char spaces[] = " ";
|
||||
//char zeroes[] = "00000000000000000000000000000000";
|
||||
|
||||
int _Printf(printf_func pfn, void* arg, char* fmt, va_list ap) {
|
||||
_Pft x;
|
||||
x.nchar = 0;
|
||||
while (1) {
|
||||
unsigned char* s;
|
||||
unsigned char c;
|
||||
unsigned char* t;
|
||||
|
||||
static const char fchar[] = " +-#0";
|
||||
static const u32 fbit[] = { FLAGS_SPACE, FLAGS_PLUS, FLAGS_MINUS, FLAGS_HASH, FLAGS_ZERO, 0 };
|
||||
|
||||
unsigned char ac[0x20];
|
||||
|
||||
s = fmt;
|
||||
while ((c = *s) != 0 && c != '%') {
|
||||
s++;
|
||||
}
|
||||
_PROUT(fmt, s - fmt);
|
||||
if (c == 0) {
|
||||
return x.nchar;
|
||||
}
|
||||
fmt = (char *) ++s;
|
||||
x.flags = 0;
|
||||
// TODO the cast isn't necessary because strchr should take it in as const, but it currently doesn't
|
||||
for (; (t = strchr((char*)fchar, *s)) != NULL; s++) {
|
||||
x.flags |= fbit[t - fchar];
|
||||
}
|
||||
if (*s == '*') {
|
||||
x.width = va_arg(ap, s32);
|
||||
if (x.width < 0) {
|
||||
x.width = -x.width;
|
||||
x.flags |= FLAGS_MINUS;
|
||||
}
|
||||
s++;
|
||||
} else {
|
||||
ATOI(x.width, s);
|
||||
}
|
||||
if (*s != '.') {
|
||||
x.prec = -1;
|
||||
} else {
|
||||
s++;
|
||||
if (*s == '*') {
|
||||
x.prec = va_arg(ap, s32);
|
||||
s++;
|
||||
} else {
|
||||
ATOI(x.prec, s);
|
||||
}
|
||||
}
|
||||
if (strchr("hlL", *s) != NULL) {
|
||||
x.qual = *s++;
|
||||
} else {
|
||||
x.qual = 0;
|
||||
}
|
||||
|
||||
if (x.qual == 'l' && *s == 'l') {
|
||||
x.qual = 'L';
|
||||
s++;
|
||||
}
|
||||
_Putfld(&x, &ap, *s, ac);
|
||||
x.width -= x.n0 + x.nz0 + x.n1 + x.nz1
|
||||
+ x.n2 + x.nz2;
|
||||
_PAD(x.width, spaces, !(x.flags & FLAGS_MINUS));
|
||||
_PROUT((char *) ac, x.n0);
|
||||
_PAD(x.nz0, zeroes, 1);
|
||||
_PROUT(x.s, x.n1);
|
||||
_PAD(x.nz1, zeroes, 1);
|
||||
_PROUT((char *) (&x.s[x.n1]), x.n2)
|
||||
_PAD(x.nz2, zeroes, 1);
|
||||
_PAD(x.width, spaces, x.flags & FLAGS_MINUS);
|
||||
fmt = (char *) s + 1;
|
||||
}
|
||||
}
|
||||
|
||||
void _Putfld(_Pft* px, va_list* pap, unsigned char code, unsigned char* ac) {
|
||||
px->n0 = px->nz0 = px->n1 = px->nz1 = px->n2 =
|
||||
px->nz2 = 0;
|
||||
|
||||
switch (code) {
|
||||
|
||||
case 'c':
|
||||
ac[px->n0++] = va_arg(*pap, u32);
|
||||
break;
|
||||
|
||||
case 'd':
|
||||
case 'i':
|
||||
if (px->qual == 'l') {
|
||||
px->v.ll = va_arg(*pap, s32);
|
||||
} else if (px->qual == 'L') {
|
||||
px->v.ll = va_arg(*pap, s64);
|
||||
} else {
|
||||
px->v.ll = va_arg(*pap, s32);
|
||||
}
|
||||
|
||||
if (px->qual == 'h') {
|
||||
px->v.ll = (s16) px->v.ll;
|
||||
}
|
||||
|
||||
if (px->v.ll < 0) {
|
||||
ac[px->n0++] = '-';
|
||||
} else if (px->flags & FLAGS_PLUS) {
|
||||
ac[px->n0++] = '+';
|
||||
} else if (px->flags & FLAGS_SPACE) {
|
||||
ac[px->n0++] = ' ';
|
||||
}
|
||||
|
||||
px->s = (char *) &ac[px->n0];
|
||||
|
||||
_Litob(px, code);
|
||||
break;
|
||||
|
||||
case 'x':
|
||||
case 'X':
|
||||
case 'u':
|
||||
case 'o':
|
||||
if (px->qual == 'l') {
|
||||
px->v.ll = va_arg(*pap, s32);
|
||||
} else if (px->qual == 'L') {
|
||||
px->v.ll = va_arg(*pap, s64);
|
||||
} else {
|
||||
px->v.ll = va_arg(*pap, s32);
|
||||
}
|
||||
|
||||
if (px->qual == 'h') {
|
||||
px->v.ll = (u16) px->v.ll;
|
||||
} else if (px->qual == 0) {
|
||||
px->v.ll = (u32) px->v.ll;
|
||||
}
|
||||
|
||||
if (px->flags & FLAGS_HASH) {
|
||||
ac[px->n0++] = '0';
|
||||
if (code == 'x' || code == 'X') {
|
||||
|
||||
ac[px->n0++] = code;
|
||||
}
|
||||
}
|
||||
px->s = (char *) &ac[px->n0];
|
||||
_Litob(px, code);
|
||||
break;
|
||||
|
||||
case 'e':
|
||||
case 'f':
|
||||
case 'g':
|
||||
case 'E':
|
||||
case 'G':
|
||||
px->v.ld = px->qual == 'L' ? va_arg(*pap, f64) : va_arg(*pap, f64);
|
||||
|
||||
if (*(u16*)&px->v.ll & 0x8000) {
|
||||
ac[px->n0++] = '-';
|
||||
} else {
|
||||
if (px->flags & FLAGS_PLUS) {
|
||||
ac[px->n0++] = '+';
|
||||
} else if (px->flags & FLAGS_SPACE) {
|
||||
ac[px->n0++] = ' ';
|
||||
}
|
||||
}
|
||||
|
||||
px->s = (char *) &ac[px->n0];
|
||||
_Ldtob(px, code);
|
||||
break;
|
||||
|
||||
case 'n':
|
||||
if (px->qual == 'h') {
|
||||
*(va_arg(*pap, u16 *)) = px->nchar;
|
||||
} else if (px->qual == 'l') {
|
||||
*va_arg(*pap, u32 *) = px->nchar;
|
||||
} else if (px->qual == 'L') {
|
||||
*va_arg(*pap, u64 *) = px->nchar;
|
||||
} else {
|
||||
*va_arg(*pap, u32 *) = px->nchar;
|
||||
}
|
||||
break;
|
||||
|
||||
case 'p':
|
||||
px->v.ll = (long) va_arg(*pap, void *);
|
||||
px->s = (char *) &ac[px->n0];
|
||||
_Litob(px, 'x');
|
||||
break;
|
||||
|
||||
case 's':
|
||||
px->s = va_arg(*pap, char *);
|
||||
px->n1 = strlen(px->s);
|
||||
if (px->prec >= 0 && px->n1 > px->prec) {
|
||||
px->n1 = px->prec;
|
||||
}
|
||||
break;
|
||||
|
||||
case '%':
|
||||
ac[px->n0++] = '%';
|
||||
break;
|
||||
|
||||
default:
|
||||
ac[px->n0++] = code;
|
||||
break;
|
||||
}
|
||||
}
|
@ -231,7 +231,7 @@
|
||||
0x80087714:("__osAnalyzeArena","void","Heap* heap, u32* maxFreeBlock, u32* bytesFree, u32* bytesAllocated"),
|
||||
0x800877C4:("__osCheckArena","s32","Heap* heap"),
|
||||
0x80087830:("proutSprintf","void*","void* s, char* buf, size_t n"),
|
||||
0x80087854:("func_80087854","void","void"),
|
||||
0x80087854:("vsprintf","int","char* dst, char* fmt, va_list args"),
|
||||
0x800878A4:("sprintf","int","char* s, char* fmt, ..."),
|
||||
0x80087900:("func_80087900","void","void"),
|
||||
0x80087934:("func_80087934","void","void"),
|
||||
@ -251,20 +251,20 @@
|
||||
0x80088110:("func_80088110","void","void"),
|
||||
0x800882A0:("func_800882A0","void","void"),
|
||||
0x80088350:("__sinf","f32","f32 __x"),
|
||||
0x80088510:("sins","s32","u16 angle"),
|
||||
0x80088510:("sins","short","unsigned short x"),
|
||||
0x80088580:("_VirtualToPhysicalTask","OSTask*","OSTask* intp"),
|
||||
0x8008868C:("osSpTaskLoad","void","OSTask* intp"),
|
||||
0x800887F4:("osSpTaskStartGo","void","OSTask* tp"),
|
||||
0x80088840:("__ull_rshift","void","void"),
|
||||
0x8008886C:("__ull_rem","void","void"),
|
||||
0x800888A8:("__ull_div","u64","u64 param_1, u64 param_2"),
|
||||
0x800888E4:("__ll_lshift","void","void"),
|
||||
0x80088910:("__ll_rem","void","void"),
|
||||
0x8008894C:("__ll_div","void","void"),
|
||||
0x800889A8:("__ll_mul","u64","u64 param_1, u64 param_2"),
|
||||
0x800889D8:("__ull_divremi","void","UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE2 param_5"),
|
||||
0x80088A38:("__ll_mod","void","void"),
|
||||
0x80088AD4:("__ll_rshift","void","void"),
|
||||
0x80088840:("__ull_rshift","long long","unsigned long long left, unsigned long long right"),
|
||||
0x8008886C:("__ull_rem","unsigned long long","unsigned long long left, unsigned long long right"),
|
||||
0x800888A8:("__ull_div","unsigned long long","unsigned long long left, unsigned long long right"),
|
||||
0x800888E4:("__ll_lshift","long long","long long left, long long right"),
|
||||
0x80088910:("__ll_rem","long long","long long left, unsigned long long right"),
|
||||
0x8008894C:("__ll_div","long long","long long left, long long right"),
|
||||
0x800889A8:("__ll_mul","long long","long long left, long long right"),
|
||||
0x800889D8:("__ull_divremi","void","unsigned long long* quotient, unsigned long long* remainder, unsigned long long dividend, unsigned short divisor"),
|
||||
0x80088A38:("__ll_mod","long long","long long left, long long right"),
|
||||
0x80088AD4:("__ll_rshift","long long","long long left, long long right"),
|
||||
0x80088B00:("__osExceptionPreamble","void","void"),
|
||||
0x80088B10:("__osException","void","void"),
|
||||
0x80088D48:("func_80088D48","void","void"),
|
||||
@ -298,8 +298,8 @@
|
||||
0x80089CBC:("__osContGetInitData","void","u8* pattern, OSContStatus* data"),
|
||||
0x80089D68:("__osPackRequestData","void","u8 cmd"),
|
||||
0x80089E40:("osCreateThread","void","OSThread* t, OSId id, osCreateThread_func entry, void* arg, void* sp, OSPri p"),
|
||||
0x80089F90:("osContStartReadData","void","void"),
|
||||
0x8008A014:("osContGetReadData","void","void"),
|
||||
0x80089F90:("osContStartReadData","s32","OSMesgQueue* mq"),
|
||||
0x8008A014:("osContGetReadData","void","OSContPad* data"),
|
||||
0x8008A0A0:("__osPackReadData","void","void"),
|
||||
0x8008A170:("func_8008A170","void","void"),
|
||||
0x8008A540:("osVirtualToPhysical","u32","void* vaddr"),
|
||||
@ -319,8 +319,8 @@
|
||||
0x8008AEE0:("__osSiRawReadIo","s32","u32 devAddr, u32* data"),
|
||||
0x8008AF30:("osGetThreadId","OSId","OSThread* t"),
|
||||
0x8008AF50:("osSpTaskYield","void","void"),
|
||||
0x8008AF70:("func_8008AF70","void","void"),
|
||||
0x8008B044:("func_8008B044","void","UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5, UNK_TYPE4 param_6"),
|
||||
0x8008AF70:("__osPfsRWInode","s32","OSPfs* param_1, __OSInode* param_2, u8 param_3, u8 param_4"),
|
||||
0x8008B044:("osPfsReadWriteFile","s32","OSPfs* pfs, s32 file_no, u8 flag, int offset, int size_in_bytes, u8* data_buffer"),
|
||||
0x8008B3C0:("func_8008B3C0","void","void"),
|
||||
0x8008B490:("func_8008B490","void","void"),
|
||||
0x8008B554:("func_8008B554","void","void"),
|
||||
@ -338,8 +338,9 @@
|
||||
0x8008C190:("__osPiCreateAccessQueue","void","void"),
|
||||
0x8008C1E0:("__osPiGetAccess","void","void"),
|
||||
0x8008C224:("__osPiRelAccess","void","void"),
|
||||
0x8008C260:("func_8008C260","void","s32 param_1"),
|
||||
0x8008C670:("func_8008C670","void","void"),
|
||||
0x8008C260:("__osDevMgrMain","void","void* arg"),
|
||||
0x8008C640:("func_8008C640","void","UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE1 param_5, UNK_TYPE1 param_6, UNK_TYPE1 param_7, UNK_TYPE1 param_8, UNK_TYPE4 param_9, UNK_TYPE4 param_10, UNK_TYPE4 param_11, UNK_TYPE4 param_12, UNK_TYPE4 param_13, UNK_TYPE4 param_14, UNK_TYPE4 param_15, UNK_TYPE4 param_16, UNK_TYPE4 param_17, UNK_TYPE4 param_18"),
|
||||
0x8008C670:("osPiRawStartDma","s32","s32 direction, u32 devAddr, void* dramAddr, u32 size"),
|
||||
0x8008C740:("func_8008C740","void","void"),
|
||||
0x8008C7B4:("func_8008C7B4","void","void"),
|
||||
0x8008C8B0:("func_8008C8B0","void","void"),
|
||||
@ -347,7 +348,7 @@
|
||||
0x8008CD64:("func_8008CD64","void","void"),
|
||||
0x8008CF10:("func_8008CF10","void","void"),
|
||||
0x8008CFE4:("func_8008CFE4","void","void"),
|
||||
0x8008D2C0:("osGetCount","void","void"),
|
||||
0x8008D2C0:("osGetCount","u32","void"),
|
||||
0x8008D2E0:("func_8008D2E0","void","void"),
|
||||
0x8008D350:("calculate_mem_size","u32","void"),
|
||||
0x8008D470:("func_8008D470","void","UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5, UNK_TYPE4 param_6"),
|
||||
@ -358,8 +359,8 @@
|
||||
0x8008D7AC:("osContGetQuery","void","OSContStatus* data"),
|
||||
0x8008D7D0:("guLookAtHiliteF","void","float mf[4][4], UNK_PTR l, int* h, float xEye, float yEye, float zEye, float xAt, float yAt, float zAt, float xUp, float yUp, float zUp, float xl1, float yl1, float zl1, float xl2, float yl2, float zl2, int twidth, int theight"),
|
||||
0x8008DF90:("guLookAtHilite","void","Mtx* m, LookAt* l, Hilite* h, f32 xEye, f32 yEye, f32 zEye, f32 xAt, f32 yAt, f32 zAt, f32 xUp, f32 yUp, f32 zUp, f32 xl1, f32 yl1, f32 zl1, f32 xl2, f32 yl2, f32 zl2, s32 twidth, s32 theight"),
|
||||
0x8008E050:("_Printf","int","printf_func pfn, void* arg, char* fmt, char* ap"),
|
||||
0x8008E698:("func_8008E698","void","void"),
|
||||
0x8008E050:("_Printf","int","printf_func pfn, void* arg, char* fmt, va_list ap"),
|
||||
0x8008E698:("_Putfld","void","_Pft* px, va_list* pap, unsigned char code, unsigned char* ac"),
|
||||
0x8008ED30:("func_8008ED30","void","void"),
|
||||
0x8008EDE0:("osUnmapTLBAll","void","void"),
|
||||
0x8008EE30:("osEPiStartDma","s32","OSPiHandle* pihandle, OSIoMesg* mb, s32 direction"),
|
||||
@ -374,7 +375,7 @@
|
||||
0x8008F3A0:("__osTimerServicesInit","void","void"),
|
||||
0x8008F42C:("__osTimerInterrupt","void","void"),
|
||||
0x8008F5A4:("__osSetTimerIntr","void","OSTime tim"),
|
||||
0x8008F644:("__osInsertTimer","void","OSTimer* t"),
|
||||
0x8008F644:("__osInsertTimer","OSTime","OSTimer* t"),
|
||||
0x8008F7D0:("func_8008F7D0","void","void"),
|
||||
0x8008FA00:("__osSpDeviceBusy","int","void"),
|
||||
0x8008FA30:("__osSiDeviceBusy","int","void"),
|
||||
@ -384,10 +385,10 @@
|
||||
0x8008FCE0:("osGetThreadPri","OSPri","OSThread* t"),
|
||||
0x8008FD00:("func_8008FD00","void","void"),
|
||||
0x8008FE60:("osViSwapBuffer","void","void* frameBufPtr"),
|
||||
0x8008FEB0:("func_8008FEB0","void","UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5, UNK_TYPE4 param_6, UNK_TYPE4 param_7, UNK_TYPE4 param_8"),
|
||||
0x80090058:("func_80090058","void","UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5, UNK_TYPE4 param_6, UNK_TYPE4 param_7, UNK_TYPE4 param_8"),
|
||||
0x8008FEB0:("guPositionF","void","float mf[4][4], float r, float p, float h, float s, float x, float y, float z"),
|
||||
0x80090058:("guPosition","void","Mtx* m, float r, float p, float h, float s, float x, float y, float z"),
|
||||
0x800900C0:("func_800900C0","void","UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5"),
|
||||
0x800902A0:("osSpTaskYielded","void","void"),
|
||||
0x800902A0:("osSpTaskYielded","OSYieldResult","OSTask* task"),
|
||||
0x80090300:("memcmp","s32","void* __s1, void* __s2, size_t __n"),
|
||||
0x80090420:("osGetTime","OSTime","void"),
|
||||
0x800904B0:("guRotateF","void","float mf[4][4], float a, float x, float y, float z"),
|
||||
@ -397,42 +398,42 @@
|
||||
0x80090810:("func_80090810","void","void"),
|
||||
0x80090900:("func_80090900","void","void"),
|
||||
0x80090AF0:("osAiSetFrequency","s32","u32 frequency"),
|
||||
0x80090C40:("func_80090C40","void","void"),
|
||||
0x80090C40:("__osContRamRead","s32","OSMesgQueue* mq, int channel, u16 address, u8* buffer"),
|
||||
0x80090E70:("func_80090E70","void","void"),
|
||||
0x800910A0:("func_800910A0","void","void"),
|
||||
0x80091170:("func_80091170","void","void"),
|
||||
0x800910A0:("__osContAddressCrc","u8","u16 addr"),
|
||||
0x80091170:("__osContDataCrc","u8","u8* data"),
|
||||
0x80091210:("__osGetActiveQueue","OSThread*","void"),
|
||||
0x80091220:("guNormalize","void","float* x, float* y, float* z"),
|
||||
0x80091280:("__osSetCompare","void","u32 value"),
|
||||
0x80091290:("__osGetCompare","u32","void"),
|
||||
0x800912A0:("osDpGetStatus","u32","void"),
|
||||
0x800912B0:("osDpSetStatus","void","u32 status"),
|
||||
0x800912B0:("osDpSetStatus","void","u32 data"),
|
||||
0x800912C0:("_bcopy","void","void* __src, void* __dest, size_t __n"),
|
||||
0x800915D0:("__osResetGlobalIntMask","void","void"),
|
||||
0x80091630:("func_80091630","void","UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5"),
|
||||
0x80091808:("func_80091808","void","UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5"),
|
||||
0x800918A0:("guOrthoF","void","UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5, UNK_TYPE4 param_6, UNK_TYPE4 param_7, UNK_TYPE4 param_8"),
|
||||
0x800919F4:("guOrtho","void","UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5, UNK_TYPE4 param_6, UNK_TYPE4 param_7, UNK_TYPE4 param_8"),
|
||||
0x800918A0:("guOrthoF","void","float mf[4][4], float l, float r, float b, float t, float n, float f, float scale"),
|
||||
0x800919F4:("guOrtho","void","Mtx* m, float l, float r, float b, float t, float n, float f, float scale"),
|
||||
0x80091A60:("__osDisableInt","OSIntMask","void"),
|
||||
0x80091AD0:("__osRestoreInt","void","OSIntMask im"),
|
||||
0x80091AF0:("__osViInit","void","void"),
|
||||
0x80091C10:("__osViSwapContext","void","void"),
|
||||
0x80091F10:("osPiGetCmdQueue","void","void"),
|
||||
0x80091F10:("osPiGetCmdQueue","OSMesgQueue*","void"),
|
||||
0x80091F40:("__cosf","f32","f32 __x"),
|
||||
0x800920B0:("func_800920B0","void","void"),
|
||||
0x80092100:("osViSetSpecialFeatures","void","u32 func"),
|
||||
0x80092260:("coss","s32","u16 angle"),
|
||||
0x80092290:("osSetTime","void","void"),
|
||||
0x80092260:("coss","short","unsigned short x"),
|
||||
0x80092290:("osSetTime","void","OSTime ticks"),
|
||||
0x800922C0:("func_800922C0","void","void"),
|
||||
0x800923E0:("osViSetEvent","void","OSMesgQueue* param_1, OSMesg param_2, u32 retraceCount"),
|
||||
0x800923E0:("osViSetEvent","void","OSMesgQueue* mq, OSMesg m, u32 retraceCount"),
|
||||
0x80092440:("func_80092440","void","void"),
|
||||
0x800925CC:("func_800925CC","void","void"),
|
||||
0x80092680:("func_80092680","void","void"),
|
||||
0x80092730:("func_80092730","void","void"),
|
||||
0x80092920:("func_80092920","OSPiHandle*","void"),
|
||||
0x80092920:("osCartRomInit","OSPiHandle*","void"),
|
||||
0x80092A80:("func_80092A80","void","void"),
|
||||
0x80092C00:("func_80092C00","void","void"),
|
||||
0x80092C80:("osContSetCh","void","void"),
|
||||
0x80092C00:("__osPfsSelectBank","s32","OSPfs* pfs, UNK_TYPE4 param_2"),
|
||||
0x80092C80:("osContSetCh","s32","u8 ch"),
|
||||
0x80092CE0:("__osSetFpcCsr","u32","u32 value"),
|
||||
0x80092CF0:("__osGetFpcCsr","u32","void"),
|
||||
0x80092D00:("func_80092D00","void","void"),
|
||||
@ -441,21 +442,21 @@
|
||||
0x800931F0:("func_800931F0","void","void"),
|
||||
0x80093728:("func_80093728","void","void"),
|
||||
0x80093A00:("func_80093A00","void","void"),
|
||||
0x80093BA0:("osAiGetLength","void","void"),
|
||||
0x80093BA0:("osAiGetLength","u32","void"),
|
||||
0x80093BB0:("func_80093BB0","void","void"),
|
||||
0x80093C00:("osMapTLBRdb","void","void"),
|
||||
0x80093C60:("osYieldThread","void","void"),
|
||||
0x80093CC0:("func_80093CC0","void","void"),
|
||||
0x80093D90:("__osGetCause","u32","void"),
|
||||
0x80093DA0:("func_80093DA0","void","UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5"),
|
||||
0x80093DA0:("__osContRamWrite","s32","OSMesgQueue* mq, int channel, u16 address, u8* buffer, int force"),
|
||||
0x80093FF0:("func_80093FF0","void","void"),
|
||||
0x80094150:("osSetTimer","s32","OSTimer* t, OSTime value, OSTime interval, OSMesgQueue* mq, OSMesg msg"),
|
||||
0x800942E0:("_Ldtob","void","void"),
|
||||
0x80094770:("func_80094770","void","void"),
|
||||
0x80094828:("func_80094828","void","UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE2 param_5"),
|
||||
0x80094DF0:("ldiv","ldiv_t","s32 __numer, s32 __denom"),
|
||||
0x80094E74:("lldiv","lldiv_t*","s64 __numer, s64 __denom"),
|
||||
0x80094F80:("_Litob","void","void"),
|
||||
0x80094150:("osSetTimer","int","OSTimer* t, OSTime value, OSTime interval, OSMesgQueue* mq, OSMesg msg"),
|
||||
0x800942E0:("_Ldtob","void","_Pft* px, unsigned char code"),
|
||||
0x80094770:("_Ldunscale","void","void"),
|
||||
0x80094828:("_Genld","void","_Pft* px, unsigned char code, unsigned char* p, short nsig, short xexp"),
|
||||
0x80094DF0:("ldiv","ldiv_t","long numer, long denom"),
|
||||
0x80094E74:("lldiv","lldiv_t","long long numer, long long denom"),
|
||||
0x80094F80:("_Litob","void","_Pft* px, unsigned char code"),
|
||||
0x80095220:("__osSiRawWriteIo","s32","u32 devAddr, u32 data"),
|
||||
0x80095270:("__osSpGetStatus","u32","void"),
|
||||
0x80095280:("__osSpSetStatus","void","u32 value"),
|
||||
@ -467,16 +468,16 @@
|
||||
0x80095600:("func_80095600","void","void"),
|
||||
0x80095740:("guMtxF2L","void","float mf[4][4], Mtx* m"),
|
||||
0x800957B0:("osStartThread","void","OSThread* param_1"),
|
||||
0x80095900:("osViSetYScale","void","f32 param_1"),
|
||||
0x80095950:("osViSetXScale","void","f32 xscale"),
|
||||
0x80095A60:("__d_to_ll","void","void"),
|
||||
0x80095A7C:("__f_to_ll","void","void"),
|
||||
0x80095A98:("__d_to_ull","void","void"),
|
||||
0x80095B38:("__f_to_ull","void","void"),
|
||||
0x80095BD4:("__ll_to_d","void","void"),
|
||||
0x80095BEC:("__ll_to_f","void","void"),
|
||||
0x80095C04:("__ull_to_d","void","void"),
|
||||
0x80095C38:("__ull_to_f","void","void"),
|
||||
0x80095900:("osViSetYScale","void","f32 value"),
|
||||
0x80095950:("osViSetXScale","void","f32 value"),
|
||||
0x80095A60:("__d_to_ll","long long","double d"),
|
||||
0x80095A7C:("__f_to_ll","long long","float f"),
|
||||
0x80095A98:("__d_to_ull","unsigned long long","double d"),
|
||||
0x80095B38:("__f_to_ull","unsigned long long","float f"),
|
||||
0x80095BD4:("__ll_to_d","double","long long l"),
|
||||
0x80095BEC:("__ll_to_f","float","long long l"),
|
||||
0x80095C04:("__ull_to_d","double","unsigned long long l"),
|
||||
0x80095C38:("__ull_to_f","float","unsigned long long l"),
|
||||
0x80095C70:("func_80095C70","void","void"),
|
||||
0x80096360:("func_80096360","void","void"),
|
||||
0x80096410:("func_80096410","void","void"),
|
||||
|
@ -60,7 +60,7 @@
|
||||
0x8008AEE0:"sirawread",
|
||||
0x8008AF30:"getthreadid",
|
||||
0x8008AF50:"sptaskyield",
|
||||
0x8008AF70:"",
|
||||
0x8008AF70:"pfsreadwritefile",
|
||||
0x8008B3C0:"",
|
||||
0x8008B600:"",
|
||||
0x8008B650:"visetmode",
|
||||
@ -72,11 +72,13 @@
|
||||
0x8008BF60:"probetlb",
|
||||
0x8008C020:"pimgr",
|
||||
0x8008C190:"piacs",
|
||||
0x8008C260:"",
|
||||
0x8008C260:"devmgr",
|
||||
0x8008C640:"",
|
||||
0x8008C670:"pirawdma",
|
||||
0x8008C740:"",
|
||||
0x8008D2C0:"getcount",
|
||||
0x8008D2E0:"",
|
||||
0x8008D350:"",
|
||||
0x8008D350:"getmemsize",
|
||||
0x8008D470:"",
|
||||
0x8008D640:"seteventmesg",
|
||||
0x8008D700:"sqrtf",
|
||||
@ -86,7 +88,7 @@
|
||||
0x8008E050:"xprintf",
|
||||
0x8008ED30:"",
|
||||
0x8008EDE0:"unmaptlball",
|
||||
0x8008EE30:"pidma",
|
||||
0x8008EE30:"epidma",
|
||||
0x8008EED0:"",
|
||||
0x8008F100:"",
|
||||
0x8008F1A0:"string",
|
||||
@ -103,7 +105,7 @@
|
||||
0x8008FCE0:"getthreadpri",
|
||||
0x8008FD00:"",
|
||||
0x8008FE60:"viswapbuf",
|
||||
0x8008FEB0:"",
|
||||
0x8008FEB0:"position",
|
||||
0x800900C0:"",
|
||||
0x800902A0:"sptaskyielded",
|
||||
0x80090300:"memcmp",
|
||||
@ -114,9 +116,9 @@
|
||||
0x80090810:"",
|
||||
0x80090900:"",
|
||||
0x80090AF0:"aisetfreq",
|
||||
0x80090C40:"",
|
||||
0x80090C40:"contramread",
|
||||
0x80090E70:"",
|
||||
0x800910A0:"",
|
||||
0x800910A0:"crc",
|
||||
0x80091210:"getactivequeue",
|
||||
0x80091220:"normalize",
|
||||
0x80091280:"setcompare",
|
||||
@ -140,7 +142,7 @@
|
||||
0x800923e0:"visetevent",
|
||||
0x80092440:"",
|
||||
0x80092730:"",
|
||||
0x80092920:"",
|
||||
0x80092920:"cartrominit",
|
||||
0x80092A80:"",
|
||||
0x80092C00:"",
|
||||
0x80092C80:"contsetch",
|
||||
@ -155,7 +157,7 @@
|
||||
0x80093C60:"yieldthread",
|
||||
0x80093CC0:"",
|
||||
0x80093D90:"getcause",
|
||||
0x80093DA0:"",
|
||||
0x80093DA0:"contramwrite",
|
||||
0x80093FF0:"",
|
||||
0x80094150:"settimer",
|
||||
0x800942E0:"xldtob",
|
||||
|
@ -28,8 +28,8 @@
|
||||
0x80097500:("D_80097500","UNK_TYPE4","",0x4),
|
||||
0x80097524:("D_80097524","UNK_TYPE4","",0x4),
|
||||
0x80097530:("randSeed","u32","",0x4),
|
||||
0x80097540:("osViModeNtscHpf1","UNK_TYPE1","",0x1),
|
||||
0x80097590:("D_80097590","UNK_TYPE1","",0x1),
|
||||
0x80097540:("osViModeNtscHpf1","OSViMode","",0x50),
|
||||
0x80097590:("osViModePalLan1","OSViMode","",0x50),
|
||||
0x800975E0:("sintable","s16","[1024]",0x800),
|
||||
0x80097DE0:("D_80097DE0","UNK_TYPE1","",0x1),
|
||||
0x80097DE4:("D_80097DE4","UNK_TYPE1","",0x1),
|
||||
@ -39,33 +39,32 @@
|
||||
0x80097E1C:("__osActiveQueue","OSThread*","",0x4),
|
||||
0x80097E20:("__osRunningThread","OSThread*","",0x4),
|
||||
0x80097E24:("__osFaultedThread","OSThread*","",0x4),
|
||||
0x80097E30:("__osSiAccessQueueEnabled","UNK_TYPE4","",0x4),
|
||||
0x80097E30:("__osSiAccessQueueEnabled","u32","",0x4),
|
||||
0x80097E40:("D_80097E40","UNK_TYPE4","",0x4),
|
||||
0x80097E50:("osClockRate","u64","",0x8),
|
||||
0x80097E58:("osViClock","s32","",0x4),
|
||||
0x80097E5C:("__osShutdown","UNK_TYPE4","",0x4),
|
||||
0x80097E60:("__OSGlobalIntMask","UNK_TYPE4","",0x4),
|
||||
0x80097E70:("__osPiDevMgr","UNK_TYPE4","",0x4),
|
||||
0x80097E8C:("osPiHandleListHead","OSPiHandle*","",0x4),
|
||||
0x80097E70:("__osPiDevMgr","OSDevMgr","",0x1c),
|
||||
0x80097E8C:("__osPiTable","OSPiHandle*","",0x4),
|
||||
0x80097E90:("D_80097E90","UNK_PTR","",0x4),
|
||||
0x80097EA0:("__osPiAccessQueueEnabled","UNK_TYPE4","",0x4),
|
||||
0x80097EB0:("osViModeNtscHpn1","UNK_TYPE1","",0x1),
|
||||
0x80097EB0:("osViModeNtscHpn1","OSViMode","",0x50),
|
||||
0x80097F00:("D_80097F00","UNK_TYPE4","",0x4),
|
||||
0x80097F04:("D_80097F04","UNK_TYPE1","",0x1),
|
||||
0x80097F10:("D_80097F10","UNK_TYPE4","",0x4),
|
||||
0x80097F20:("spaces","char","[]",0x21),
|
||||
0x80097F44:("zeros","char","[]",0x24),
|
||||
0x80097F44:("zeroes","char","[]",0x24),
|
||||
0x80097F70:("__osTimerList","OSTimer*","",0x4),
|
||||
0x80097F80:("D_80097F80","UNK_TYPE4","",0x4),
|
||||
0x80097F90:("D_80097F90","UNK_TYPE4","",0x4),
|
||||
0x80097F90:("D_80097F90","float","",0x4),
|
||||
0x80097FA0:("D_80097FA0","UNK_TYPE1","",0x1),
|
||||
0x80097FA4:("D_80097FA4","UNK_TYPE1","",0x1),
|
||||
0x80097FA5:("D_80097FA5","UNK_TYPE1","",0x1),
|
||||
0x80097FB0:("D_80097FB0","UNK_TYPE4","",0x4),
|
||||
0x80097FC0:("osViModeNtscLan1","OSViMode","",0x50),
|
||||
0x80098010:("osViModeMpalLan1","OSViMode","",0x50),
|
||||
0x80098060:("D_80098060","__OSViContext","",0x30),
|
||||
0x80098090:("D_80098090","UNK_TYPE2","",0x2),
|
||||
0x80098060:("D_80098060","__OSViContext","[2]",0x60),
|
||||
0x800980C0:("__osViCurr","__OSViContext*","",0x4),
|
||||
0x800980C4:("__osViNext","__OSViContext*","",0x4),
|
||||
0x800980D0:("D_800980D0","UNK_TYPE4","",0x4),
|
||||
@ -252,7 +251,7 @@
|
||||
0x800992F8:("D_800992F8","f64","",0x8),
|
||||
0x80099300:("D_80099300","char","[]",0x4),
|
||||
0x80099304:("D_80099304","char","[]",0x6),
|
||||
0x8009930C:("D_8009930C","UNK_TYPE1","",0x1),
|
||||
0x8009930C:("D_8009930C","unsigned int","[6]",0x18),
|
||||
0x80099324:("__switch_D_80099324","UNK_PTR","",0x4),
|
||||
0x80099400:("D_80099400","f32","",0x4),
|
||||
0x80099428:("D_80099428","f64","",0x8),
|
||||
@ -311,8 +310,8 @@
|
||||
0x8009CD60:("heapLockMessageBuffer","UNK_TYPE4","",0x4),
|
||||
0x8009CD70:("tmp_task","OSTask","",0x40),
|
||||
0x8009CDB0:("D_8009CDB0","UNK_TYPE1","",0x1),
|
||||
0x8009CEB0:("D_8009CEB0","UNK_TYPE1","",0x1),
|
||||
0x8009CEB8:("__osSiAccessQueue","UNK_TYPE1","",0x1),
|
||||
0x8009CEB0:("siAccessBuf","OSMesg","[1]",0x4),
|
||||
0x8009CEB8:("__osSiAccessQueue","OSMesgQueue","",0x18),
|
||||
0x8009CED0:("__osContPifRam","OSPifRam","",0x40),
|
||||
0x8009CF0C:("D_8009CF0C","UNK_TYPE1","",0x1),
|
||||
0x8009CF10:("__osContLastCmd","u8","",0x1),
|
||||
@ -322,33 +321,23 @@
|
||||
0x8009CF60:("D_8009CF60","UNK_TYPE1","",0x1),
|
||||
0x8009CF70:("D_8009CF70","UNK_TYPE4","",0x4),
|
||||
0x8009CF80:("__osThreadSave","UNK_TYPE1","",0x1),
|
||||
0x8009D130:("D_8009D130","UNK_TYPE1","",0x1),
|
||||
0x8009D134:("D_8009D134","u8","",0x1),
|
||||
0x8009D135:("D_8009D135","u8","",0x1),
|
||||
0x8009D136:("D_8009D136","u8","",0x1),
|
||||
0x8009D137:("D_8009D137","u8","",0x1),
|
||||
0x8009D138:("D_8009D138","u8","",0x1),
|
||||
0x8009D1A8:("D_8009D1A8","UNK_TYPE1","",0x1),
|
||||
0x8009D1AC:("D_8009D1AC","u8","",0x1),
|
||||
0x8009D1AD:("D_8009D1AD","u8","",0x1),
|
||||
0x8009D1AE:("D_8009D1AE","u8","",0x1),
|
||||
0x8009D1AF:("D_8009D1AF","u8","",0x1),
|
||||
0x8009D1B0:("D_8009D1B0","u8","",0x1),
|
||||
0x8009D130:("D_8009D130","OSPiHandle","",0x74),
|
||||
0x8009D1A8:("D_8009D1A8","OSPiHandle","",0x74),
|
||||
0x8009D220:("D_8009D220","OSThread","",0x1b0),
|
||||
0x8009D3D0:("piManagerStack","u8","[4096]",0x1000),
|
||||
0x8009E3D0:("D_8009E3D0","OSMesgQueue","",0x18),
|
||||
0x8009E3E8:("D_8009E3E8","UNK_TYPE1","",0x1),
|
||||
0x8009E3F0:("D_8009E3F0","UNK_TYPE1","",0x1),
|
||||
0x8009E3E8:("D_8009E3E8","OSMesg","[1]",0x4),
|
||||
0x8009E3F0:("D_8009E3F0","OSMesg","[1]",0x4),
|
||||
0x8009E3F8:("__osPiAccessQueue","OSMesgQueue","",0x18),
|
||||
0x8009E410:("D_8009E410","UNK_TYPE1","",0x1),
|
||||
0x8009E510:("__osEventStateTab","__OSEventState","[16]",0x80),
|
||||
0x8009E590:("D_8009E590","OSTimer","",0x20),
|
||||
0x8009E5B0:("__osCurrentTime","OSTime","",0x8),
|
||||
0x8009E5B8:("__osBaseCounter","u32","",0x4),
|
||||
0x8009E5BC:("__osViIntrCount","UNK_TYPE4","",0x4),
|
||||
0x8009E5C0:("__osTimerCounter","UNK_TYPE4","",0x4),
|
||||
0x8009E5D0:("D_8009E5D0","UNK_TYPE1","",0x1),
|
||||
0x8009E610:("D_8009E610","OSPiHandle","",0x74),
|
||||
0x8009E5BC:("__osViIntrCount","u32","",0x4),
|
||||
0x8009E5C0:("__osTimerCounter","u32","",0x4),
|
||||
0x8009E5D0:("__osPfsPifRam","OSPifRam","",0x40),
|
||||
0x8009E610:("CartRomHandle","OSPiHandle","",0x74),
|
||||
0x8009E690:("viThread","OSThread","",0x1b0),
|
||||
0x8009E840:("viThreadStack","u8","[4096]",0x1000),
|
||||
0x8009F840:("viEventQueue","OSMesgQueue","",0x18),
|
||||
@ -3760,7 +3749,7 @@
|
||||
0x801DFD88:("graphThreadName","char","[]",0x6),
|
||||
0x801DFD90:("D_801DFD90","char","[]",0xc),
|
||||
0x801DFD9C:("D_801DFD9C","char","[]",0xc),
|
||||
0x801DFDA8:("D_801DFDA8","UNK_TYPE1","",0x1),
|
||||
0x801DFDA8:("D_801DFDA8","char","[]",0x2f),
|
||||
0x801DFDE0:("D_801DFDE0","char","[]",0x1b),
|
||||
0x801DFDFC:("D_801DFDFC","char","[]",0x1a),
|
||||
0x801DFE18:("D_801DFE18","char","[]",0x2e),
|
||||
|
26
tools/set_o32abi_bit.py
Normal file
26
tools/set_o32abi_bit.py
Normal file
@ -0,0 +1,26 @@
|
||||
#!/usr/bin/env python3
|
||||
import argparse, struct, sys
|
||||
|
||||
if __name__ == '__main__':
|
||||
parser = argparse.ArgumentParser()
|
||||
|
||||
parser.add_argument('file', help='input file')
|
||||
args = parser.parse_args()
|
||||
|
||||
with open(args.file, 'r+b') as f:
|
||||
magic = struct.unpack('>I', f.read(4))[0]
|
||||
if magic != 0x7F454C46:
|
||||
print('Error: Not an ELF file')
|
||||
sys.exit(1)
|
||||
|
||||
f.seek(36)
|
||||
flags = struct.unpack('>I', f.read(4))[0]
|
||||
if flags & 0xF0000000 != 0x20000000: # test for mips3
|
||||
print('Error: Architecture not mips3')
|
||||
sys.exit(1)
|
||||
|
||||
flags |= 0x00001000 # set EF_MIPS_ABI_O32
|
||||
f.seek(36)
|
||||
f.write(struct.pack('>I', flags))
|
||||
|
||||
|
16
undef.txt
16
undef.txt
@ -49,7 +49,7 @@ randLast = boot_bss_start + 0x00003850;
|
||||
heapLockMessageBuffer = boot_bss_start + 0x00003860;
|
||||
tmp_task = boot_bss_start + 0x00003870;
|
||||
D_8009CDB0 = boot_bss_start + 0x000038B0;
|
||||
D_8009CEB0 = boot_bss_start + 0x000039B0;
|
||||
siAccessBuf = boot_bss_start + 0x000039B0;
|
||||
__osSiAccessQueue = boot_bss_start + 0x000039B8;
|
||||
__osContPifRam = boot_bss_start + 0x000039D0;
|
||||
D_8009CF0C = boot_bss_start + 0x00003A0C;
|
||||
@ -61,17 +61,7 @@ D_8009CF60 = boot_bss_start + 0x00003A60;
|
||||
D_8009CF70 = boot_bss_start + 0x00003A70;
|
||||
__osThreadSave = boot_bss_start + 0x00003A80;
|
||||
D_8009D130 = boot_bss_start + 0x00003C30;
|
||||
D_8009D134 = boot_bss_start + 0x00003C34;
|
||||
D_8009D135 = boot_bss_start + 0x00003C35;
|
||||
D_8009D136 = boot_bss_start + 0x00003C36;
|
||||
D_8009D137 = boot_bss_start + 0x00003C37;
|
||||
D_8009D138 = boot_bss_start + 0x00003C38;
|
||||
D_8009D1A8 = boot_bss_start + 0x00003CA8;
|
||||
D_8009D1AC = boot_bss_start + 0x00003CAC;
|
||||
D_8009D1AD = boot_bss_start + 0x00003CAD;
|
||||
D_8009D1AE = boot_bss_start + 0x00003CAE;
|
||||
D_8009D1AF = boot_bss_start + 0x00003CAF;
|
||||
D_8009D1B0 = boot_bss_start + 0x00003CB0;
|
||||
D_8009D220 = boot_bss_start + 0x00003D20;
|
||||
piManagerStack = boot_bss_start + 0x00003ED0;
|
||||
D_8009E3D0 = boot_bss_start + 0x00004ED0;
|
||||
@ -85,8 +75,8 @@ __osCurrentTime = boot_bss_start + 0x000050B0;
|
||||
__osBaseCounter = boot_bss_start + 0x000050B8;
|
||||
__osViIntrCount = boot_bss_start + 0x000050BC;
|
||||
__osTimerCounter = boot_bss_start + 0x000050C0;
|
||||
D_8009E5D0 = boot_bss_start + 0x000050D0;
|
||||
D_8009E610 = boot_bss_start + 0x00005110;
|
||||
__osPfsPifRam = boot_bss_start + 0x000050D0;
|
||||
CartRomHandle = boot_bss_start + 0x00005110;
|
||||
viThread = boot_bss_start + 0x00005190;
|
||||
viThreadStack = boot_bss_start + 0x00005340;
|
||||
viEventQueue = boot_bss_start + 0x00006340;
|
||||
|
Loading…
Reference in New Issue
Block a user