diff --git a/.gitignore b/.gitignore index 8393129a..e060d274 100644 --- a/.gitignore +++ b/.gitignore @@ -13,3 +13,4 @@ dump/* *.exe *.dll build.ninja +ac-decomp.code-workspace diff --git a/common.py b/common.py index 29108bd8..4e29ef39 100644 --- a/common.py +++ b/common.py @@ -325,9 +325,13 @@ SDK_CFLAG = [ "-sdata 4", f"-sdata2 {DOL_SDATA2_SIZE}" ] +ALIGN16_CFLAG = [ + "-func_align 16", +] DOL_CFLAGS = ' '.join(BASE_DOL_CFLAGS + LOCAL_CFLAGS) SDK_FLAGS = ' '.join(SDK_CFLAG + LOCAL_CFLAGS) +ALIGN16 = ' '.join(BASE_DOL_CFLAGS + LOCAL_CFLAGS + ALIGN16_CFLAG) REL_CFLAGS = ' '.join(BASE_REL_CFLAGS + LOCAL_CFLAGS) EXTERNAL_DOL_CFLAGS = ' '.join(BASE_DOL_CFLAGS) EXTERNAL_REL_CFLAGS = ' '.join(BASE_REL_CFLAGS) diff --git a/config/dol_slices.yml b/config/dol_slices.yml index 766aee32..c4483733 100644 --- a/config/dol_slices.yml +++ b/config/dol_slices.yml @@ -22,8 +22,15 @@ dolphin/OS/OSRestoreInterrupts.c: MSL_C/rand.c: .text: [0x8009f46c, 0x8009f494] .sdata: [0x80218260, 0x80218268] -libultra/ultra.c: - .text: [0x8005d01c, 0x8005d090] +#libultra/ultra.c: +# .text: [0x8005d01c, 0x8005d15c] +# .bss: [0x80206f60, 0x80206fa0] libultra/gu/sins.c: .text: [0x8005e860, 0x8005e8ac] .data: [0x800dd360, 0x800ddb60] +dolphin/odenotstub/odenotstub.c: + .text: [0x800a9770, 0x800a9780] +dolphin/amcstubs/AmcExi2Stubs.c: + .text: [0x800a8cc0, 0x800a8cf0] +dolphin/gx/GXStubs.c: + .text: [0x800998d4, 0x800998d8] \ No newline at end of file diff --git a/configure.py b/configure.py index 3fe3965a..754a7d8e 100644 --- a/configure.py +++ b/configure.py @@ -82,6 +82,7 @@ n.variable("elf2rel", c.ELF2REL) n.variable("codewarrior", c.CODEWARRIOR) n.variable("cc", c.CC) n.variable("occ", c.OCC) +n.variable("align16", c.ALIGN16) n.variable("ld", c.LD) n.variable("devkitppc", c.DEVKITPPC) n.variable("as", c.AS) @@ -575,6 +576,9 @@ class CSource(Source): if path.startswith("src/dolphin/"): self.cflags = c.SDK_FLAGS self.cc = c.OCC + elif path.startswith("src/odenotstub"): + self.cc = c.CC + self.cflags = c.ALIGN16 else: self.cflags = ctx.cflags self.cc = c.CC diff --git a/include/_mem.h b/include/_mem.h index 196e8826..f5134435 100644 --- a/include/_mem.h +++ b/include/_mem.h @@ -1,6 +1,7 @@ -#pragma once +#ifndef _MEM_H +#define _MEM_H -#include +#include "types.h" #ifdef __cplusplus extern "C" { @@ -15,5 +16,6 @@ void __fill_mem(void * dst, int val, unsigned long n); #pragma section code_type #ifdef __cplusplus -} +}; +#endif #endif \ No newline at end of file diff --git a/include/dolphin/OS/OSTime.h b/include/dolphin/OS/OSTime.h index c7152672..d48d4ca0 100644 --- a/include/dolphin/OS/OSTime.h +++ b/include/dolphin/OS/OSTime.h @@ -5,7 +5,8 @@ extern "C" { #endif -asm s32 OSGetTime(void); +typedef s64 OSTime; +OSTime OSGetTime(void); #ifdef __cplusplus } diff --git a/include/dolphin/OS/os.h b/include/dolphin/OS/os.h index 7c00c583..37ce2b6b 100644 --- a/include/dolphin/OS/os.h +++ b/include/dolphin/OS/os.h @@ -3,11 +3,13 @@ #include "types.h" #include "dolphin/OS/OSContext.h" +#include "va_args.h" #ifdef __cplusplus extern "C" { #endif void OSReport(const char*, ...); +void OSVReport(const char* format, va_list list); asm BOOL OSDisableInterrupts(void); asm BOOL OSEnableInterrupts(void); diff --git a/include/libultra/libultra.h b/include/libultra/libultra.h index 0da31771..3bf1e12a 100644 --- a/include/libultra/libultra.h +++ b/include/libultra/libultra.h @@ -3,16 +3,15 @@ #include "types.h" #include "dolphin/OS/OSTime.h" #include "dolphin/OS/OSCache.h" + int bcmp (void *v1, void *v2, u32 size); void bcopy(void *dst, void *src, size_t n); void bzero(void *ptr, size_t size); void osSyncPrintf(const char* fmt, ...); void osWritebackDCache(void* vaddr, u32 nbytes); u32 osGetCount(void); +OSTime osGetTime(void); + extern s32 osAppNMIBuffer[15]; -extern void * memcpy(void * dst, const void * src, size_t n); -extern void * memset(void * dst, int val, size_t n); -extern void __fill_mem(void * dst, int val, unsigned long n); - #endif \ No newline at end of file diff --git a/include/va_args.h b/include/va_args.h new file mode 100644 index 00000000..8948de6c --- /dev/null +++ b/include/va_args.h @@ -0,0 +1,24 @@ +#ifndef __VA_ARG_H +#define __VA_ARG_H + +#include "types.h" + +typedef struct __va_list_struct { + char gpr; + char fpr; + char reserved[2]; + char* input_arg_area; + char* reg_save_area; +} _va_list_struct; + +typedef _va_list_struct __va_list[1]; + +#define __va_start(list, fmt) __builtin_va_info(&list) +#define __va_arg(list, type) (*((type*)__va_arg(ap, _var_arg_typeof(type)))) +#define va_start __va_start +#define va_arg __va_arg +#define va_end __va_end +#define va_list __va_list +#define __va_end(list) ((void)0) + +#endif \ No newline at end of file diff --git a/include/zurumode.h b/include/zurumode.h index cffb6aaf..e2a8dd10 100644 --- a/include/zurumode.h +++ b/include/zurumode.h @@ -5,8 +5,8 @@ #include "dolphin/OS/os.h" #include "libultra/libultra.h" -#include "JSystem/JUT/JUTAssertion.h" -#include "JSystem/JUT/JUTDbPrint.h" +//#include "JSystem/JUT/JUTAssertion.h" +//#include "JSystem/JUT/JUTDbPrint.h" typedef struct zuru_keycheck { u8 state; diff --git a/src/dolphin/amcstubs/AmcExi2Stubs.c b/src/dolphin/amcstubs/AmcExi2Stubs.c new file mode 100644 index 00000000..600e63b2 --- /dev/null +++ b/src/dolphin/amcstubs/AmcExi2Stubs.c @@ -0,0 +1,29 @@ +#include "types.h" + +void EXI2_Init(void){ + +} +void EXI2_EnableInterrupts(void){ + +} +u8 EXI2_Poll(void){ + return 0; +} + +u8 EXI2_ReadN(void){ + return 0; +} + +u8 EXI2_WriteN(void){ + return 0; +} + +void EXI2_Reserve(void){ + +} +void EXI2_Unreserve(void){ + +} +u8 AMC_IsStub(void){ + return 1; +} \ No newline at end of file diff --git a/src/dolphin/gx/GXStubs.c b/src/dolphin/gx/GXStubs.c new file mode 100644 index 00000000..ba75e17b --- /dev/null +++ b/src/dolphin/gx/GXStubs.c @@ -0,0 +1,5 @@ +#include "types.h" + +void __GXSetRange(void){ + +} \ No newline at end of file diff --git a/src/dolphin/odenotstub/odenotstub.c b/src/dolphin/odenotstub/odenotstub.c new file mode 100644 index 00000000..05b11c60 --- /dev/null +++ b/src/dolphin/odenotstub/odenotstub.c @@ -0,0 +1,5 @@ +#include "types.h" + +BOOL Hu_IsStub(void){ + return 0; +} \ No newline at end of file diff --git a/src/libultra/ultra.c b/src/libultra/ultra.c index 962d30eb..de53f298 100644 --- a/src/libultra/ultra.c +++ b/src/libultra/ultra.c @@ -1,4 +1,9 @@ #include "libultra/libultra.h" +#include "_mem.h" +#include "dolphin/OS/os.h" +#include "dolphin/OS/OSTime.h" + +extern OSTime __osTimeOffset; void bcopy(void* __src, void* __dst, size_t __n) { memmove(__dst, __src, __n); @@ -12,12 +17,18 @@ int bcmp(void* __s1, void* __s2, size_t __n) { void bzero(void* __s, size_t __n) { memset(__s, 0, __n); } +void osSyncPrintf(const char* format, ...){ + va_list arg; + va_start(arg, format); + OSVReport(format, arg); + va_end(arg); -//void osWritebackDCache(void* buf, u32 len){ -// DCStoreRange(buf, len); -//} +} +void osWritebackDCache(void* buf, u32 len){ + DCStoreRange(buf, len); +} -/* s32 osGetCount(void){ +u32 osGetCount(void){ return OSGetTick(); } - */ + diff --git a/tools/ppcdis b/tools/ppcdis index 83260829..eca3f301 160000 --- a/tools/ppcdis +++ b/tools/ppcdis @@ -1 +1 @@ -Subproject commit 83260829c50f37dd9fe54889cf8971c8fe14c54e +Subproject commit eca3f3015a86bf0c78d1e415aeff2dda1851194f