diff --git a/include/all_types.h b/include/all_types.h new file mode 100644 index 0000000000..e7cb990c0e --- /dev/null +++ b/include/all_types.h @@ -0,0 +1,10 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include diff --git a/include/functions.h b/include/functions.h index 34abbe9467..ba66fafea8 100644 --- a/include/functions.h +++ b/include/functions.h @@ -1,14 +1,7 @@ #ifndef _FUNCTIONS_H_ #define _FUNCTIONS_H_ -#include -#include -#include -#include -#include #include -#include -#include void start(void); // func_80080060 void Idle_ClearMemory(void* begin, void* end); // func_80080150 @@ -245,7 +238,7 @@ void func_80087854(void); // func_80087854 int sprintf(char* s, char* fmt, ...); // func_800878A4 void func_80087900(void); // func_80087900 void func_80087934(void); // func_80087934 -void wait_cycles(void); // func_80087960 +void wait_cycles(OSTime uParm1); // func_80087960 void func_800879CC(void); // func_800879CC void func_80087A1C(void); // func_80087A1C void func_80087A6C(u32 param_1); // func_80087A6C @@ -267,11 +260,11 @@ 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(void); // func_800888A8 +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(void); // func_800889A8 +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 @@ -295,7 +288,7 @@ void func_80089944(void); // func_80089944 void __osSiCreateAccessQueue(void); // func_80089AA0 void __osSiGetAccess(void); // func_80089AF0 void __osSiRelAccess(void); // func_80089B34 -void osContInit(void); // func_80089B60 +s32 osContInit(OSMesgQueue* mq, u8* bitpattern, OSContStatus* data); // func_80089B60 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 @@ -374,7 +367,7 @@ void osInvalICache(void* vaddr, s32 nbytes); // func_8008F270 void osInvalDCache(void* vaddr, s32 nbytes); // func_8008F2F0 void __osTimerServicesInit(void); // func_8008F3A0 void __osTimerInterrupt(void); // func_8008F42C -void __osSetTimerIntr(void); // func_8008F5A4 +void __osSetTimerIntr(OSTime tim); // func_8008F5A4 void __osInsertTimer(OSTimer* t); // func_8008F644 void func_8008F7D0(void); // func_8008F7D0 int __osSpDeviceBusy(void); // func_8008FA00 @@ -450,12 +443,12 @@ 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 void func_80093FF0(void); // func_80093FF0 -s32 osSetTimer(OSTimer* t, OSTime interval, OSMesgQueue* mq, OSMesg msg); // func_80094150 +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(lldiv_t* __return_storage_ptr__, s64 __numer, s64 __denom); // func_80094E74 +lldiv_t* lldiv(s64 __numer, s64 __denom); // func_80094E74 void _Litob(void); // func_80094F80 s32 __osSiRawWriteIo(u32 devAddr, u32 data); // func_80095220 u32 __osSpGetStatus(void); // func_80095270 diff --git a/src/libultra/io/controller.h b/include/io/controller.h similarity index 97% rename from src/libultra/io/controller.h rename to include/io/controller.h index b76c4cbf78..9310f3b1df 100644 --- a/src/libultra/io/controller.h +++ b/include/io/controller.h @@ -1,6 +1,8 @@ #ifndef _CONTROLLER_H_ #define _CONTROLLER_H_ +#include + typedef struct { /* 0x00 */ u32 ramarray[15]; /* 0x3C */ u32 pifstatus; diff --git a/include/osint.h b/include/osint.h index 423884d3ce..1b38c5f8e5 100644 --- a/include/osint.h +++ b/include/osint.h @@ -21,8 +21,7 @@ typedef struct { /* 0x4 */ OSPri priority; } __OSThreadTail; -#include // TODO all variables should be moved to the file that logically defines them - // maybe put externs here? -#include +#include // TODO this is just so libultra files can see function and variable declarations. + // Once all data sections have been split up, it should be removed. #endif diff --git a/include/segment.h b/include/segment.h index 143aed3b53..272777a304 100644 --- a/include/segment.h +++ b/include/segment.h @@ -1,7 +1,7 @@ #ifndef _SEGMENT_H_ #define _SEGMENT_H_ -#include +#include extern UNK_TYPE D_04029CB0; // D_04029CB0 extern UNK_TYPE D_04029CF0; // D_04029CF0 diff --git a/include/structs.h b/include/structs.h index 7859f142bc..08bbc3d466 100644 --- a/include/structs.h +++ b/include/structs.h @@ -1,11 +1,7 @@ #ifndef _STRUCTS_H_ #define _STRUCTS_H_ -#include -#include -#include -#include -#include +#include typedef struct { /* 0x0 */ s16 priority; // Lower means higher priority. -1 means it ignores priority diff --git a/include/variables.h b/include/variables.h index ee74a23b26..5a610760a3 100644 --- a/include/variables.h +++ b/include/variables.h @@ -1,14 +1,7 @@ #ifndef _VARIABLES_H_ #define _VARIABLES_H_ -#include -#include -#include -#include -#include #include -#include -#include #include #include #include @@ -308,12 +301,12 @@ 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 UNK_TYPE4 __osContPifRam; // D_8009CED0 -extern UNK_TYPE4 D_8009CF0C; // D_8009CF0C +extern OSPifRam __osContPifRam; // D_8009CED0 +extern UNK_TYPE1 D_8009CF0C; // D_8009CF0C extern u8 __osContLastCmd; // D_8009CF10 extern u8 __osMaxControllers; // D_8009CF11 -extern UNK_TYPE1 D_8009CF38; // D_8009CF38 -extern UNK_TYPE1 D_8009CF50; // D_8009CF50 +extern OSMesgQueue D_8009CF38; // D_8009CF38 +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 diff --git a/linker_scripts/code_script.txt b/linker_scripts/code_script.txt index f510ad1e0e..e38e071d09 100644 --- a/linker_scripts/code_script.txt +++ b/linker_scripts/code_script.txt @@ -48,7 +48,7 @@ SECTIONS build/asm/bzero.o(.text) build/asm/boot_0x800896D0.o(.text) build/asm/siacs.o(.text) - build/asm/controller.o(.text) + build/src/libultra/io/controller.o(.text) build/src/libultra/os/createthread.o(.text) build/asm/contreaddata.o(.text) build/asm/boot_0x8008A170.o(.text) diff --git a/src/boot_O2_g3/CIC6105.c b/src/boot_O2_g3/CIC6105.c index 5080aff92b..e52bc75421 100644 --- a/src/boot_O2_g3/CIC6105.c +++ b/src/boot_O2_g3/CIC6105.c @@ -6,9 +6,9 @@ void CIC6105_Nop80081820(void) {} void CIC6105_Nop80081828(void) {} void CIC6105_PrintRomInfo(void) { - FaultDraw_DrawText(80, 200, &D_80098280, (UNK_PTR)(*(u32*)0xA4040010)); - FaultDraw_DrawText(40, 184, &D_80098290, &D_800994D0); - FaultDraw_DrawText(56, 192, &D_800982A4, &D_800994DC); + FaultDraw_DrawText(80, 200, D_80098280, (UNK_PTR)(*(u32*)0xA4040010)); + FaultDraw_DrawText(40, 184, D_80098290, &D_800994D0); + FaultDraw_DrawText(56, 192, D_800982A4, &D_800994DC); } void CIC6105_AddRomInfoFaultPage(void) { diff --git a/src/libultra/io/contquery.c b/src/libultra/io/contquery.c index 5d520d1e4d..fa6cf49267 100644 --- a/src/libultra/io/contquery.c +++ b/src/libultra/io/contquery.c @@ -1,32 +1,32 @@ #include -#include "controller.h" +#include "io/controller.h" #include "siint.h" s32 osContStartQuery(OSMesgQueue* mq) { s32 ret; - + __osSiGetAccess(); - + if (__osContLastCmd != 0) { __osPackRequestData(0); __osSiRawStartDma(1, &__osContPifRam); osRecvMesg(mq, NULL, 1); } - + ret = __osSiRawStartDma(0, &__osContPifRam); - + __osContLastCmd = 0; - + __osSiRelAccess(); - + return ret; } void osContGetQuery(OSContStatus* data) { u8 pattern; - + __osContGetInitData(&pattern, data); } diff --git a/src/libultra/io/controller.c b/src/libultra/io/controller.c new file mode 100644 index 0000000000..da7e41e33f --- /dev/null +++ b/src/libultra/io/controller.c @@ -0,0 +1,88 @@ +#include +#include + +s32 osContInit(OSMesgQueue* mq, u8* bitpattern, OSContStatus* data) { + OSMesg dummy; + s32 ret = 0; + OSTime t; + OSTimer mytimer; + OSMesgQueue timerMesgQueue; + + if (D_80097E40 != 0) { + return 0; + } + + D_80097E40 = 1; + + t = osGetTime(); + if (t < 0x165A0BC) { + osCreateMesgQueue(&timerMesgQueue, &dummy, 1); + osSetTimer(&mytimer, 0x165A0BC - t, 0, &timerMesgQueue, &dummy); + osRecvMesg(&timerMesgQueue, &dummy, OS_MESG_BLOCK); + } + + __osMaxControllers = 4; + + __osPackRequestData(0); + + ret = __osSiRawStartDma(1, &__osContPifRam); + osRecvMesg(mq, &dummy, 1); + + ret = __osSiRawStartDma(0, &__osContPifRam); + osRecvMesg(mq, &dummy, 1); + + __osContGetInitData(bitpattern, data); + __osContLastCmd = 0; + __osSiCreateAccessQueue(); + osCreateMesgQueue(&D_8009CF38, D_8009CF50, 1); + + return ret; +} + +void __osContGetInitData(u8* pattern, OSContStatus* data) { + u8* ptr; + __OSContRequesFormat requestformat; + int i; + u8 bits; + + bits = 0; + ptr = (u8*)__osContPifRam.ramarray; + for (i = 0; i < __osMaxControllers; i++, ptr += sizeof(requestformat), data++) { + requestformat = *(__OSContRequesFormat*)ptr; + data->errno = (requestformat.rxsize & 0xc0) >> 4; + if (data->errno == 0) { + data->type = requestformat.typel << 8 | requestformat.typeh; + data->status = requestformat.status; + + bits |= 1 << i; + } + } + *pattern = bits; +} + +void __osPackRequestData(u8 cmd) { + u8* ptr; + __OSContRequesFormat requestformat; + int i; + + for (i = 0; i < 0xF; i++) { + __osContPifRam.ramarray[i] = 0; + } + + __osContPifRam.pifstatus = 1; + ptr = (u8*)__osContPifRam.ramarray; + requestformat.dummy = 255; + requestformat.txsize = 1; + requestformat.rxsize = 3; + requestformat.cmd = cmd; + requestformat.typeh = 255; + requestformat.typel = 255; + requestformat.status = 255; + requestformat.dummy1 = 255; + + for (i = 0; i < __osMaxControllers; i++) { + *(__OSContRequesFormat*)ptr = requestformat; + ptr += sizeof(requestformat); + } + *ptr = 254; +} diff --git a/tables/functions.py b/tables/functions.py index ecd638fc5b..94bea3aaf8 100644 --- a/tables/functions.py +++ b/tables/functions.py @@ -235,7 +235,7 @@ 0x800878A4:("sprintf","int","char* s, char* fmt, ..."), 0x80087900:("func_80087900","void","void"), 0x80087934:("func_80087934","void","void"), - 0x80087960:("wait_cycles","void","void"), + 0x80087960:("wait_cycles","void","OSTime uParm1"), 0x800879CC:("func_800879CC","void","void"), 0x80087A1C:("func_80087A1C","void","void"), 0x80087A6C:("func_80087A6C","void","u32 param_1"), @@ -257,11 +257,11 @@ 0x800887F4:("osSpTaskStartGo","void","OSTask* tp"), 0x80088840:("__ull_rshift","void","void"), 0x8008886C:("__ull_rem","void","void"), - 0x800888A8:("__ull_div","u64","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","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"), @@ -285,7 +285,7 @@ 0x80089AA0:("__osSiCreateAccessQueue","void","void"), 0x80089AF0:("__osSiGetAccess","void","void"), 0x80089B34:("__osSiRelAccess","void","void"), - 0x80089B60:("osContInit","void","void"), + 0x80089B60:("osContInit","s32","OSMesgQueue* mq, u8* bitpattern, OSContStatus* data"), 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"), @@ -364,7 +364,7 @@ 0x8008F2F0:("osInvalDCache","void","void* vaddr, s32 nbytes"), 0x8008F3A0:("__osTimerServicesInit","void","void"), 0x8008F42C:("__osTimerInterrupt","void","void"), - 0x8008F5A4:("__osSetTimerIntr","void","void"), + 0x8008F5A4:("__osSetTimerIntr","void","OSTime tim"), 0x8008F644:("__osInsertTimer","void","OSTimer* t"), 0x8008F7D0:("func_8008F7D0","void","void"), 0x8008FA00:("__osSpDeviceBusy","int","void"), @@ -440,12 +440,12 @@ 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"), 0x80093FF0:("func_80093FF0","void","void"), - 0x80094150:("osSetTimer","s32","OSTimer* t, OSTime interval, OSMesgQueue* mq, OSMesg msg"), + 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*","lldiv_t* __return_storage_ptr__, s64 __numer, s64 __denom"), + 0x80094E74:("lldiv","lldiv_t*","s64 __numer, s64 __denom"), 0x80094F80:("_Litob","void","void"), 0x80095220:("__osSiRawWriteIo","s32","u32 devAddr, u32 data"), 0x80095270:("__osSpGetStatus","u32","void"), diff --git a/tables/variables.py b/tables/variables.py index b3dca48d0a..80cc3f470d 100644 --- a/tables/variables.py +++ b/tables/variables.py @@ -295,12 +295,12 @@ 0x8009CDB0:("D_8009CDB0","UNK_TYPE1",""), 0x8009CEB0:("D_8009CEB0","UNK_TYPE1",""), 0x8009CEB8:("__osSiAccessQueue","UNK_TYPE1",""), - 0x8009CED0:("__osContPifRam","UNK_TYPE4",""), - 0x8009CF0C:("D_8009CF0C","UNK_TYPE4",""), + 0x8009CED0:("__osContPifRam","OSPifRam",""), + 0x8009CF0C:("D_8009CF0C","UNK_TYPE1",""), 0x8009CF10:("__osContLastCmd","u8",""), 0x8009CF11:("__osMaxControllers","u8",""), - 0x8009CF38:("D_8009CF38","UNK_TYPE1",""), - 0x8009CF50:("D_8009CF50","UNK_TYPE1",""), + 0x8009CF38:("D_8009CF38","OSMesgQueue",""), + 0x8009CF50:("D_8009CF50","OSMesg","[1]"), 0x8009CF60:("D_8009CF60","UNK_TYPE1",""), 0x8009CF70:("D_8009CF70","UNK_TYPE4",""), 0x8009CF80:("__osThreadSave","UNK_TYPE1",""), diff --git a/tools/disasm.py b/tools/disasm.py index 4c13c08663..06c1ae05fa 100644 --- a/tools/disasm.py +++ b/tools/disasm.py @@ -696,14 +696,7 @@ class Disassembler: "\n" ) - f.write("#include \n" - "#include \n" - "#include \n" - "#include \n" - "#include \n" - "#include \n" - "#include \n" - "#include \n" + f.write("#include \n" "\n" ) @@ -721,14 +714,7 @@ class Disassembler: "\n" ) - f.write("#include \n" - "#include \n" - "#include \n" - "#include \n" - "#include \n" - "#include \n" - "#include \n" - "#include \n" + f.write("#include \n" "#include \n" "#include \n" "#include \n"