Added back m2ctx which now works

Cleaned up extern functions to common.h
Added more decompiled code
This commit is contained in:
Ogre 2023-09-03 11:20:26 +02:00
parent e579899bd0
commit 90b9b43846
22 changed files with 318 additions and 166 deletions

5
compile_flags.txt Normal file
View File

@ -0,0 +1,5 @@
-Iinclude
-Ilib/libreultra/include/2.0I
-D_LANGUAGE_C
-D_FINALROM
-DF3DEX_GBI_2

View File

@ -10,6 +10,8 @@ typedef u8 bool;
#define false 0 #define false 0
#define true 1 #define true 1
#define MAX_BYTES_TO_READ 512
typedef struct { typedef struct {
/* 0x00 */ s32 field_0x0; /* 0x00 */ s32 field_0x0;
/* 0x04 */ s32 field_0x4; /* 0x04 */ s32 field_0x4;
@ -41,9 +43,116 @@ typedef struct {
/* 0xc */ s32 field_0xc; /* 0xc */ s32 field_0xc;
} Stack__dma_load_loop; // size:0x10 } Stack__dma_load_loop; // size:0x10
extern void romCopy(const void* src, const void* dst, const s32 len); typedef struct {
/* 0x00 */ OSMesgQueue field_0x0;
/* 0x30 */ u8 field_0x30[0x58];
/* 0x88 */ OSMesgQueue field_0x70;
/* 0x74 */ u8 field_0x74[0x20];
/* 0xa8 */ OSMesgQueue field_0xa8;
} Unk0;
extern void Stack__dma_load_loop_new(Stack__dma_load_loop* arg0, OSMesgQueue* arg1, s16 arg2);
extern SomethingMusic* __MAYBE_SONG_ARRAY_800A8218[7];
extern void* musCurrentPtrBank;
extern void* D_800B1828;
extern s32 D_800E8B14;
extern Unk0 MQ_800E8B4C;
extern s32 __SCREEN_IS_NOT_BLACK;
extern s32 D_800A9EB0;
extern s32 D_800A9EE0;
extern s32 D_800C4B20;
extern void* D_800C4CE0;
extern s32 D_A9EF0;
extern s32 D_800C4B30;
extern OSPiHandle* CART_HANDLE;
extern OSMesgQueue MQ_800BE030;
extern OSMesg OSMESG_800BE048[0x32];
extern OSThread THREAD_CONTROLLER;
extern s32 __SCREEN_IS_NOT_BLACK;
extern OSMesg D_800BBE60[8];
extern OSMesgQueue MQ_CONTROLLER;
extern OSMesgQueue MQ_800E7988;
extern OSThread THREAD_CONTROLLER;
extern OSPiHandle* PTR_CART_ROM_HANDLE;
extern s32 D_800C4B30;
extern OSMesgQueue MQ_CONTROLLER;
extern OSMesgQueue MQ_800E9BF0;
extern u8 D_800A9FF8;
extern OSContStatus __GLOBAL_CONT_STATUS[MAXCONTROLLERS];
extern OSMesgQueue MQ_CONTROLLER;
extern void (*D_800A9FE0)(s16);
extern OSMesgQueue MQ_800C4A00;
extern OSContPad __GLOBAL_CONTROLLER_DATA;
extern u8 D_800AA040;
extern void (*SWAP_BUFFER_FUNC_800A9E8C)(void** buffers);
extern void (*D_800AA090)(s32);
extern void (*D_800AA094)();
extern s32 D_800E79A4;
extern OSMesgQueue MQ_800C4C28;
extern OSMesg OSMESG_800BE1A0[8];
extern u8 SP_THREAD_800BE1C0[1];
extern OSThread THREAD_800BE1C0;
extern void* D_800AA41C;
extern u8 D_594284;
extern void (*SWAP_BUFFER_FUNC)(void** buffers);
extern Stack__dma_load_loop *D_800E9178[0];
extern u8 __MAIN_NOT_NULL_INF_LOOP;
extern OSMesgQueue MQ_800B9C40;
extern s8 D_800E918D;
extern void romCopy(const void* src, void* dst, u32 len);
extern void __calls_romCopy_8009DA50(u8* src, u8* dst, u32 len);
extern void Stack__dma_load_loop_new(Stack__dma_load_loop* arg0, OSMesgQueue* arg1, s16 flags);
extern void Stack__dma_load_loop_delete(Stack__dma_load_loop* arg0); extern void Stack__dma_load_loop_delete(Stack__dma_load_loop* arg0);
extern void obInitializePi();
extern void __set_black();
extern void __calls_osViBlack(bool black);
extern void __start_thread_800B9C88();
extern void __start_thread_800BE1C0();
extern void func_80089804(s32*, s32, s32, s32);
extern void func_80089A10();
extern void func_80089AB0(s32*, s32);
extern void __osViSwapBuffer_3(void** buffers);
extern void set_swap_buffer_func(void (*arg0)(void**));
extern s32 func_80089CF8(s16 arg0, s32 arg1);
extern void __controller_thread_80089D9C(void*);
extern void __start_copy_global_controller_data(void);
extern void __end_copy_global_controller_data(void);
extern s32 __read_controller(OSContPad* data, u32 flags);
extern s32 __real_read_controller(void);
extern s32 __calls_read_controller_0(s16* arg0);
extern void func_8008A354();
extern void func_8008A37C();
extern void func_8008B130(u8*);
extern void func_8008B1D0(u8*);
extern void __start_thread_800BE1C0(void);
extern void __thread_8008AFE0(void*);
extern void func_8008949C(void** buffers);
extern void func_8008350C();
extern void func_8008B1D0(u8*);
#endif #endif

View File

@ -106,7 +106,7 @@ segments:
- [0x19FC0, c, "black"] - [0x19FC0, c, "black"]
- [0x1A050, c] - [0x1A050, c]
- [0x1A4F0, asm] - [0x1A4F0, asm]
- [0x1A5B0, asm] - [0x1A5B0, c]
- [0x1A660, c] - [0x1A660, c]
- [0x1A9A0, c] - [0x1A9A0, c]
- [0x1AA00, c] - [0x1AA00, c]
@ -132,7 +132,7 @@ segments:
- [0x1BCC0, asm, "libultra/io/pimgr"] - [0x1BCC0, asm, "libultra/io/pimgr"]
- [0x1BE50, asm, "libultra/io/epirawdma"] - [0x1BE50, asm, "libultra/io/epirawdma"]
- [0x1C040, asm, "libultra/io/epidma"] - [0x1C040, asm, "libultra/io/epidma"]
- [0x1C0E0, asm] - [0x1C0E0, c]
- [0x1C130, asm] - [0x1C130, asm]
- [0x1C2B0, asm] - [0x1C2B0, asm]
- [0x1C670, asm, "libultra/io/piacs"] - [0x1C670, asm, "libultra/io/piacs"]

View File

@ -1,36 +1,18 @@
#include "PR/os.h"
#include "common.h" #include "common.h"
void func_8008949C(void*);
INCLUDE_ASM(const s32, "19050", __idle_start_4_threads); INCLUDE_ASM(const s32, "19050", __idle_start_4_threads);
/* 192F0 80088EF0*/ /* 192F0 80088EF0*/
s32* func_80088EF0(void) { s32* func_80088EF0(void) {
extern s32 D_800E8B14;
return &D_800E8B14; return &D_800E8B14;
} }
typedef struct {
/* 0x00 */ OSMesgQueue field_0x0;
/* 0x30 */ u8 field_0x30[0x58];
/* 0x88 */ OSMesgQueue field_0x70;
/* 0x74 */ u8 field_0x74[0x20];
/* 0xa8 */ OSMesgQueue field_0xa8;
} Unk0;
extern Unk0 MQ_800E8B4C;
Unk0* func_80088EFC(void) { Unk0* func_80088EFC(void) {
return &MQ_800E8B4C; return &MQ_800E8B4C;
} }
INCLUDE_ASM(const s32, "19050", __thread_80088F08); INCLUDE_ASM(const s32, "19050", __thread_80088F08);
extern Stack__dma_load_loop *D_800E9178[0];
extern u8 __MAIN_NOT_NULL_INF_LOOP;
/* 19454 80089054 */ /* 19454 80089054 */
void Stack__dma_load_loop_new(Stack__dma_load_loop* arg0, OSMesgQueue* mq, s16 flags) void Stack__dma_load_loop_new(Stack__dma_load_loop* arg0, OSMesgQueue* mq, s16 flags)
{ {
@ -60,8 +42,6 @@ INCLUDE_ASM(const s32, "19050", __thread_80089200);
INCLUDE_ASM(const s32, "19050", __thread_80089358); INCLUDE_ASM(const s32, "19050", __thread_80089358);
extern OSMesgQueue MQ_800B9C40;
void __thread_800893C0(void) { void __thread_800893C0(void) {
typedef struct { typedef struct {
/* 0x00 */ s32 field_0x0; /* 0x00 */ s32 field_0x0;
@ -91,14 +71,30 @@ void __thread_800893C0(void) {
} }
} }
extern struct {
OSMesgQueue mq;
u8 padding[0x549];
u8 b;
} D_800E8C2C;
INCLUDE_ASM(const s32, "19050", func_8008949C); /* 1989C 8008949C */
void func_8008949C(void** buffers)
{
Stack__dma_load_loop sp10;
void* temp_s0 = buffers[3];
// INCLUDE_ASM(const s32, "19050", func_80089528); if (D_800E8C2C.b != 1)
{
while(osViGetNextFramebuffer() == temp_s0 || osViGetCurrentFramebuffer() == temp_s0)
{
Stack__dma_load_loop_new(&sp10, &D_800E8C2C.mq, 1);
osRecvMesg(&D_800E8C2C.mq, NULL, 1);
Stack__dma_load_loop_delete(&sp10);
}
}
}
void func_80089528(s8 arg0) { void func_80089528(s8 arg0) {
extern s8 D_800E918D;
D_800E918D = arg0; D_800E918D = arg0;
} }
@ -112,10 +108,7 @@ INCLUDE_ASM(const s32, "19050", __start_thread_800B9C88);
INCLUDE_ASM(const s32, "19050", func_80089804); INCLUDE_ASM(const s32, "19050", func_80089804);
/* 19D90 80089990 */ /* 19D90 80089990 */
void func_80089990(s32 arg0) { void func_80089990(void (*arg0)(s32)) {
extern void func_80089A10();
extern s32 D_800AA090;
s32 mask; s32 mask;
func_80089A10(); func_80089A10();

View File

@ -1,10 +1,6 @@
#include "common.h" #include "common.h"
#include <PR/os.h> void set_swap_buffer_func(void (*arg0)(void**)) {
extern void (*SWAP_BUFFER_FUNC)(void* buffers);
void set_swap_buffer_func(void (*arg0)(void*)) {
s32 mask; s32 mask;
mask = osSetIntMask(OS_IM_NONE); mask = osSetIntMask(OS_IM_NONE);

View File

@ -1,15 +1,5 @@
#include "common.h" #include "common.h"
void romCopy(const void* src, const void* dst, const s32 len);
s32 func_80089CF8(s16 arg0, s32 arg1);
void __controller_thread_80089D9C(void*);
OSPiHandle* CART_HANDLE;
OSMesgQueue MQ_800BE030;
OSMesg OSMESG_800BE048[0x32];
OSThread THREAD_CONTROLLER;
extern s32 __SCREEN_IS_NOT_BLACK;
void func_80089C50(void) { void func_80089C50(void) {
__SCREEN_IS_NOT_BLACK = 0x80; __SCREEN_IS_NOT_BLACK = 0x80;
@ -18,11 +8,6 @@ void func_80089C50(void) {
// INCLUDE_ASM(const s32, "1A050", __init_controllers); // INCLUDE_ASM(const s32, "1A050", __init_controllers);
extern OSMesg D_800BBE60[8];
extern OSMesgQueue MQ_CONTROLLER;
extern OSThread THREAD_CONTROLLER;
/* 1A060 80089C60 */ /* 1A060 80089C60 */
u8 __init_controllers(void) { u8 __init_controllers(void) {
u8 pattern; u8 pattern;
@ -40,12 +25,7 @@ u8 __init_controllers(void) {
return pattern; return pattern;
} }
// INCLUDE_ASM(const s32, "1A050", func_80089CF8);
s32 func_80089CF8(s16 arg0, s32 arg1) { s32 func_80089CF8(s16 arg0, s32 arg1) {
extern OSMesgQueue MQ_800E7988;
typedef struct { typedef struct {
/* 0x0 */ s16 unk0; /* 0x0 */ s16 unk0;
/* 0x4 */ OSMesgQueue* msgQueue; /* 0x4 */ OSMesgQueue* msgQueue;
@ -61,7 +41,7 @@ s32 func_80089CF8(s16 arg0, s32 arg1) {
msg.unkC = arg1; msg.unkC = arg1;
msg.msgQueue = &sp10; msg.msgQueue = &sp10;
osCreateMesgQueue(&sp10, &sp38, 1 /* size */); osCreateMesgQueue(&sp10, &sp38, 1);
osSendMesg(&MQ_800E7988, &msg, OS_MESG_BLOCK); osSendMesg(&MQ_800E7988, &msg, OS_MESG_BLOCK);
osRecvMesg(&sp10, NULL, OS_MESG_BLOCK); osRecvMesg(&sp10, NULL, OS_MESG_BLOCK);
@ -77,17 +57,43 @@ void __start_controller_thread(void) {
osStartThread(&THREAD_CONTROLLER); osStartThread(&THREAD_CONTROLLER);
} }
INCLUDE_ASM(const s32, "1A050", __controller_thread_80089D9C); INCLUDE_ASM(const s32, "1A050", __controller_thread_80089D9C);
void initialise(void) { void obInitializePi(void) {
extern s32 func_8008BD30();
extern s32 D_800E7A20;
osCreatePiManager(OS_PRIORITY_PIMGR, &MQ_800BE030, OSMESG_800BE048, sizeof(OSMESG_800BE048) / sizeof(OSMesg)); osCreatePiManager(OS_PRIORITY_PIMGR, &MQ_800BE030, OSMESG_800BE048, sizeof(OSMESG_800BE048) / sizeof(OSMesg));
D_800E7A20 = func_8008BD30(); PTR_CART_ROM_HANDLE = osCartRomInit();
}
/* 1A380 80089F80 */
void romCopy(const void *src, void *dst, u32 len) {
OSIoMesg dmaIoMesgBuf;
OSMesgQueue dmaMessageQ;
OSMesg dummyMesg;
u32 readlength;
osCreateMesgQueue(&dmaMessageQ, &dummyMesg, 1);
dmaIoMesgBuf.hdr.pri = 0;
dmaIoMesgBuf.hdr.retQueue = &dmaMessageQ;
osInvalDCache(dst, len);
while (len != 0) {
readlength = len;
if (readlength > MAX_BYTES_TO_READ) {
readlength = MAX_BYTES_TO_READ;
}
dmaIoMesgBuf.devAddr = (u32)src;
dmaIoMesgBuf.dramAddr = dst;
dmaIoMesgBuf.size = readlength;
// Start the DMA transfer
osEPiStartDma(PTR_CART_ROM_HANDLE, &dmaIoMesgBuf, 0);
// Wait for the DMA transfer to complete
osRecvMesg(&dmaMessageQ, &dummyMesg, 1);
src += readlength;
dst += readlength;
len -= readlength;
}
} }
INCLUDE_ASM(const s32, "1A050", romCopy);
INCLUDE_ASM(const s32, "1A050", func_8008A040); INCLUDE_ASM(const s32, "1A050", func_8008A040);

30
src/1A5B0.c Normal file
View File

@ -0,0 +1,30 @@
#include "common.h"
/* 1A5B0 8008A1B0 */
void func_8008A1B0(void) {
struct {
/* 0x00 */ s32 field_0x0;
/* 0x04 */ void* field_0x4;
/* 0x08 */ s32 field_0x8;
/* 0x0c */ s32 field_0xc;
/* 0x10 */ s32 field_0x10;
/* 0x14 */ s32 field_0x14;
} sp10;
u8 pad[0x7F0];
__start_thread_800BE1C0();
func_80089AB0(&D_800A9EE0, 3);
D_800C4B20 = 0x80000400;
set_swap_buffer_func(&__osViSwapBuffer_3);
D_800C4CE0 = &D_800A9EB0;
__start_thread_800B9C88();
sp10.field_0x0 = 0xDE000000;
sp10.field_0x4 = &D_A9EF0;
sp10.field_0x8 = 0xE9000000;
sp10.field_0xc = 0;
sp10.field_0x10 = 0xDF000000;
sp10.field_0x14 = 0;
func_80089804(&sp10, 0x18, 0, 0);
func_80089A10();
}

View File

@ -1,24 +1,8 @@
#include "common.h" #include "common.h"
void __start_copy_global_controller_data(void);
void __end_copy_global_controller_data(void);
s32 __read_controller(OSContPad* data, u32 flags);
s32 __real_read_controller(void);
s32 __calls_read_controller_0(s16* arg0);
extern void func_8008A354();
extern void func_8008A37C();
extern s32 D_800C4B30;
extern OSMesgQueue MQ_CONTROLLER;
extern OSMesgQueue MQ_800E9BF0;
INCLUDE_ASM(const s32, "1A660", func_8008A260); INCLUDE_ASM(const s32, "1A660", func_8008A260);
extern void func_8008B1D0(u8*);
extern u8 D_800A9FF8;
void func_8008A334(void) { void func_8008A334(void) {
func_8008B1D0(&D_800A9FF8); func_8008B1D0(&D_800A9FF8);
} }
@ -49,9 +33,6 @@ s32 __read_controller(OSContPad* data, u32 flags) {
return 0; return 0;
} }
extern OSContStatus __GLOBAL_CONT_STATUS[MAXCONTROLLERS];
extern OSMesgQueue MQ_CONTROLLER;
s32 __real_read_controller(void) { s32 __real_read_controller(void) {
s32 var_v0; s32 var_v0;
@ -65,9 +46,6 @@ s32 __real_read_controller(void) {
} }
} }
extern void (*D_800A9FE0)(s16);
extern OSMesgQueue MQ_800C4A00;
extern OSContPad __GLOBAL_CONTROLLER_DATA;
s32 __calls_read_controller_0(s16* arg0) { s32 __calls_read_controller_0(s16* arg0) {
if (D_800C4B30 == 0) { if (D_800C4B30 == 0) {

View File

@ -1,7 +1,5 @@
#include "common.h" #include "common.h"
extern s32 D_800C4B30;
void func_8008A5A0(void) { void func_8008A5A0(void) {
s32 temp_v0; s32 temp_v0;

View File

@ -1,26 +1,15 @@
#include "common.h" #include "common.h"
#include <PR/os.h>
extern OSContPad __GLOBAL_CONTROLLER_DATA;
extern void __end_copy_global_controller_data();
extern void __start_copy_global_controller_data();
void __copy_global_controller_data(OSContPad* arg0) { void __copy_global_controller_data(OSContPad* arg0) {
__start_copy_global_controller_data(); __start_copy_global_controller_data();
bcopy(&__GLOBAL_CONTROLLER_DATA, arg0, 0x18); bcopy(&__GLOBAL_CONTROLLER_DATA, arg0, 0x18);
__end_copy_global_controller_data(); __end_copy_global_controller_data();
} }
extern void func_80089CF8(s32, s32);
void func_8008A640(void) { void func_8008A640(void) {
func_80089CF8(0x103, 0); func_80089CF8(0x103, 0);
} }
extern void(*D_800A9FE0)(s16);
void __set_fp_8008A660(void(*arg0)(s16)) { void __set_fp_8008A660(void(*arg0)(s16)) {
s32 mask; s32 mask;

View File

@ -1,13 +1,9 @@
#include "common.h" #include "common.h"
extern void func_8008B130(u8*);
extern u8 D_800AA040;
void func_8008A6A0(void) { void func_8008A6A0(void) {
func_8008B130(&D_800AA040); func_8008B130(&D_800AA040);
} }
extern void func_8008B1D0(u8*);
void func_8008A6C0(void) { void func_8008A6C0(void) {
func_8008B1D0(&D_800AA040); func_8008B1D0(&D_800AA040);

View File

@ -1,9 +1,7 @@
#include "common.h" #include "common.h"
extern void (*SWAP_BUFFER_FUNC_800A9E8C)(void*);
/* 1B3A0 8008AFA0 */ /* 1B3A0 8008AFA0 */
void set_swap_buffer_func_800A9E8C(void (*arg0)(void*)) { void set_swap_buffer_func_800A9E8C(void (*arg0)(void**)) {
s32 mask; s32 mask;
mask = osSetIntMask(OS_IM_NONE); mask = osSetIntMask(OS_IM_NONE);

View File

@ -1,14 +1,5 @@
#include "common.h" #include "common.h"
void __start_thread_800BE1C0(void);
void __thread_8008AFE0(void*);
extern void (*D_800AA090)(s32);
extern void (*D_800AA094)();
extern s32 D_800E79A4;
extern OSMesgQueue MQ_800C4C28;
extern OSMesg OSMESG_800BE1A0[8];
/* 1B3E0 8008AFE0 */ /* 1B3E0 8008AFE0 */
void __thread_8008AFE0(void* arg0) { void __thread_8008AFE0(void* arg0) {
Stack__dma_load_loop sp10; Stack__dma_load_loop sp10;
@ -39,9 +30,6 @@ void __thread_8008AFE0(void* arg0) {
} }
void __start_thread_800BE1C0(void) { void __start_thread_800BE1C0(void) {
extern u8 SP_THREAD_800BE1C0[1];
extern OSThread THREAD_800BE1C0;
osCreateThread(&THREAD_800BE1C0, 4, __thread_8008AFE0, NULL, SP_THREAD_800BE1C0, 0x32); osCreateThread(&THREAD_800BE1C0, 4, __thread_8008AFE0, NULL, SP_THREAD_800BE1C0, 0x32);
osStartThread(&THREAD_800BE1C0); osStartThread(&THREAD_800BE1C0);
} }

19
src/1C0E0.c Normal file
View File

@ -0,0 +1,19 @@
#include "common.h"
#include <PR/os_internal.h>
/* 1C0E0 8008BCE0 */
s32 func_8008BCE0(void** arg0) {
// Use of `__osDisableInt()` and `__osRestoreInt()`
// suggest that this is an library function.
void* temp_v1;
u32 mask;
mask = __osDisableInt();
temp_v1 = D_800AA41C;
D_800AA41C = arg0;
*arg0 = temp_v1;
__osRestoreInt(mask);
return 0;
}

View File

@ -2,10 +2,8 @@
INCLUDE_ASM(const s32, "2DE10", func_8009DA10); INCLUDE_ASM(const s32, "2DE10", func_8009DA10);
// INCLUDE_ASM(const s32, "2DE10", __calls_romCopy_8009DA50);
/* 2DE50 8009DA50 */ /* 2DE50 8009DA50 */
void __calls_romCopy_8009DA50(u8* src, u8* dst, u32 len) void __calls_romCopy_8009DA50(u8* src, u8* dst, u32 len) {
{
u8 sp1F[32]; u8 sp1F[32];
u8* _dst; u8* _dst;
u8* _src; u8* _src;
@ -14,24 +12,15 @@ void __calls_romCopy_8009DA50(u8* src, u8* dst, u32 len)
// align to 16 // align to 16
_src = (u8*) (((u32) &sp1F[15] >> 4) << 4); _src = (u8*) (((u32) &sp1F[15] >> 4) << 4);
if (len < 0x10) if (len < 16) {
{
_dst = dst; _dst = dst;
// Copy into stack, length aligned to 2 bytes...
// copy into stack, length aligned to 2 bytes
romCopy(src, _src, (len + 1) & ~1); romCopy(src, _src, (len + 1) & ~1);
// ...then copy from stack into destination
len--; for(len--; len != -1; len--)
// then copy from stack into destination
while(len != -1)
{
*_dst++ = *_src++; *_dst++ = *_src++;
len--; } else {
} // Too big to fit in our stack, so just do a regular copy
}
else
{
// too big to fit in our stack, so just do a regular copy
romCopy(src, dst, (len + 1) & ~1); romCopy(src, dst, (len + 1) & ~1);
} }
} }
@ -43,8 +32,6 @@ INCLUDE_ASM(const s32, "2DE10", __calls_romCopy_8009DAF4);
INCLUDE_ASM(const s32, "2DE10", __calls_romCopy_8009DBB8); INCLUDE_ASM(const s32, "2DE10", __calls_romCopy_8009DBB8);
extern u8 D_594284;
void* __add_0x594284(s32 arg0) { void* __add_0x594284(s32 arg0) {
return arg0 + &D_594284; return arg0 + &D_594284;
} }

View File

@ -1,13 +1,7 @@
#include "PR/os.h"
#include "common.h" #include "common.h"
void __set_black();
void __calls_osViBlack(bool black);
/* 19FC0 80089BC0 */ /* 19FC0 80089BC0 */
void __set_black() { void __set_black() {
extern s32 __SCREEN_IS_NOT_BLACK;
__SCREEN_IS_NOT_BLACK = 0; __SCREEN_IS_NOT_BLACK = 0;
__calls_osViBlack(true); __calls_osViBlack(true);
} }

View File

@ -15,7 +15,6 @@ void boot(void) {
void idle(void* arg) { void idle(void* arg) {
extern void main_(void*); extern void main_(void*);
extern void __idle_start_4_threads(s32, s32); extern void __idle_start_4_threads(s32, s32);
extern void initialise();
extern void (*D_800E7A18)(); extern void (*D_800E7A18)();
extern u8 SP_THREAD_FIRST_DMA_LOAD[1]; extern u8 SP_THREAD_FIRST_DMA_LOAD[1];
@ -24,7 +23,7 @@ void idle(void* arg) {
D_800E7A18 = NULL; D_800E7A18 = NULL;
initialise(); obInitializePi();
__idle_start_4_threads(2, 1); __idle_start_4_threads(2, 1);
osViSetSpecialFeatures(OS_VI_DIVOT_ON | OS_VI_DITHER_FILTER_ON | OS_VI_GAMMA_OFF | OS_VI_GAMMA_DITHER_OFF); osViSetSpecialFeatures(OS_VI_DIVOT_ON | OS_VI_DITHER_FILTER_ON | OS_VI_GAMMA_OFF | OS_VI_GAMMA_DITHER_OFF);

View File

@ -45,7 +45,7 @@ INCLUDE_ASM(const s32, "main", func_80072398);
INCLUDE_ASM(const s32, "main", func_80072710); INCLUDE_ASM(const s32, "main", func_80072710);
INCLUDE_ASM(const s32, "main", func_80072738); INCLUDE_ASM(const s32, "main", __set_vi_mode);
INCLUDE_ASM(const s32, "main", func_800727D8); INCLUDE_ASM(const s32, "main", func_800727D8);
@ -105,10 +105,6 @@ INCLUDE_ASM(const s32, "main", __calls_copy_controller_data);
extern u8 __reset_compared_osTvType(); /* extern */ extern u8 __reset_compared_osTvType(); /* extern */
extern void* D_800C4BB8; extern void* D_800C4BB8;
extern OSViMode osViModeMpalHpf1;
extern OSViMode osViModeMpalLan1;
extern OSViMode osViModeNtscHpf1;
extern OSViMode osViModeNtscLan1;
#define OS_TV_TYPE_PAL 0 #define OS_TV_TYPE_PAL 0
#define OS_TV_TYPE_NTSC 1 #define OS_TV_TYPE_NTSC 1
@ -190,7 +186,6 @@ INCLUDE_ASM(const s32, "main", func_80073F58);
// INCLUDE_ASM(const s32, "main", func_80073FD4); // INCLUDE_ASM(const s32, "main", func_80073FD4);
extern SomethingMusic* __MAYBE_SONG_ARRAY_800A8218[7];
/* 43D4 80073FD4 */ /* 43D4 80073FD4 */
void __initialize_song_mem(void) { void __initialize_song_mem(void) {
s32 mask; s32 mask;

View File

@ -1,9 +1,5 @@
#include "common.h" #include "common.h"
extern void* musCurrentPtrBank;
void func_8008350C();
INCLUDE_ASM(const s32, "mus", func_800810F0); INCLUDE_ASM(const s32, "mus", func_800810F0);
INCLUDE_ASM(const s32, "mus", func_8008123C); INCLUDE_ASM(const s32, "mus", func_8008123C);
@ -46,9 +42,6 @@ void Mus__unknown_80081DB4(void* arg0) {
} }
} }
extern void* D_800B1828;
void* func_80081DF0(void* arg0) { void* func_80081DF0(void* arg0) {
if ((arg0 != NULL) && ((*(s32*)(arg0 + 0x10)) < 0)) { if ((arg0 != NULL) && ((*(s32*)(arg0 + 0x10)) < 0)) {
D_800B1828 = arg0; D_800B1828 = arg0;

View File

@ -6,6 +6,10 @@ __add_0x594284 = 0x8009DD28;
__log_lha_error = 0x8007BB90; __log_lha_error = 0x8007BB90;
CartRomHandle = 0x800C4C50;
osCartRomInit = 0x8008BD30;
PTR_CART_ROM_HANDLE = 0x800E7A20;
D_800A81C0 = 0x800A81C0; // size:0x30 D_800A81C0 = 0x800A81C0; // size:0x30
D_800C4BBC = 0x800C4BBC; // size:0x8 D_800C4BBC = 0x800C4BBC; // size:0x8
D_800AEFE0 = 0x800AEFE0; // size:0x8 D_800AEFE0 = 0x800AEFE0; // size:0x8
@ -25,6 +29,7 @@ STR_rb = 0x800AE0A8; // type:asciz
STR_wb = 0x800AE27C; // type:asciz STR_wb = 0x800AE27C; // type:asciz
STR_Unknown_method_skiped = 0x800AE284; // type:asciz STR_Unknown_method_skiped = 0x800AE284; // type:asciz
__set_vi_mode = 0x80072738;
__calls_osViSwapBuffer_8007307C = 0x8007307C; __calls_osViSwapBuffer_8007307C = 0x8007307C;
__osViSwapBuffer_3 = 0x8008B110; __osViSwapBuffer_3 = 0x8008B110;
@ -353,7 +358,7 @@ __Mus_thread_80085908 = 0x80085908;
THREAD_IDLE = 0x800AF440; THREAD_IDLE = 0x800AF440;
idle = 0x8007F8E4; idle = 0x8007F8E4;
initialise = 0x80089F40; obInitializePi = 0x80089F40;
boot = 0x8007F880; boot = 0x8007F880;
entry = 0x80070C00; entry = 0x80070C00;

73
tools/m2ctx.py Normal file
View File

@ -0,0 +1,73 @@
#!/usr/bin/env python3
import argparse
import os
import sys
import subprocess
import tempfile
script_dir = os.path.dirname(os.path.realpath(__file__))
root_dir = os.path.abspath(os.path.join(script_dir, ".."))
src_dir = root_dir + "src/"
# Project-specific
CPP_FLAGS = [
"-Iinclude",
"-Isrc",
"-Ilib/libreultra/include/2.0I/",
"-D_LANGUAGE_C",
"-DF3DEX_GBI_2",
"-D_MIPS_SZLONG=32",
"-DSCRIPT(...)={}",
"-D__attribute__(...)=",
"-D__asm__(...)=",
"-ffreestanding",
"-DM2CTX",
]
def import_c_file(in_file) -> str:
in_file = os.path.relpath(in_file, root_dir)
cpp_command = ["gcc", "-E", "-P", "-dM", *CPP_FLAGS, in_file]
cpp_command2 = ["gcc", "-E", "-P", *CPP_FLAGS, in_file]
with tempfile.NamedTemporaryFile(suffix=".c") as tmp:
stock_macros = subprocess.check_output(["gcc", "-E", "-P", "-dM", tmp.name], cwd=root_dir, encoding="utf-8")
out_text = ""
try:
out_text += subprocess.check_output(cpp_command, cwd=root_dir, encoding="utf-8")
out_text += subprocess.check_output(cpp_command2, cwd=root_dir, encoding="utf-8")
except subprocess.CalledProcessError:
print(
"Failed to preprocess input file, when running command:\n"
+ ' '.join(cpp_command),
file=sys.stderr,
)
sys.exit(1)
if not out_text:
print("Output is empty - aborting")
sys.exit(1)
for line in stock_macros.strip().splitlines():
out_text = out_text.replace(line + "\n", "")
return out_text
def main():
parser = argparse.ArgumentParser(
description="""Create a context file which can be used for mips_to_c"""
)
parser.add_argument(
"c_file",
help="""File from which to create context""",
)
args = parser.parse_args()
output = import_c_file(args.c_file)
with open(os.path.join(root_dir, "ctx.c"), "w", encoding="UTF-8") as f:
f.write(output)
if __name__ == "__main__":
main()

View File

@ -38,3 +38,4 @@ D_80187030 = 0x80187030;
D_8018F1A0 = 0x8018F1A0; D_8018F1A0 = 0x8018F1A0;
D_8018FC18 = 0x8018FC18; D_8018FC18 = 0x8018FC18;
D_800EB0E8 = 0x800EB0E8; D_800EB0E8 = 0x800EB0E8;
D_800E8C2C = 0x800E8C2C;