Added back m2ctx which now works
Cleaned up extern functions to common.h Added more decompiled code
This commit is contained in:
parent
e579899bd0
commit
90b9b43846
|
|
@ -0,0 +1,5 @@
|
|||
-Iinclude
|
||||
-Ilib/libreultra/include/2.0I
|
||||
-D_LANGUAGE_C
|
||||
-D_FINALROM
|
||||
-DF3DEX_GBI_2
|
||||
113
include/common.h
113
include/common.h
|
|
@ -10,6 +10,8 @@ typedef u8 bool;
|
|||
#define false 0
|
||||
#define true 1
|
||||
|
||||
#define MAX_BYTES_TO_READ 512
|
||||
|
||||
typedef struct {
|
||||
/* 0x00 */ s32 field_0x0;
|
||||
/* 0x04 */ s32 field_0x4;
|
||||
|
|
@ -41,9 +43,116 @@ typedef struct {
|
|||
/* 0xc */ s32 field_0xc;
|
||||
} 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 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
|
||||
|
|
@ -106,7 +106,7 @@ segments:
|
|||
- [0x19FC0, c, "black"]
|
||||
- [0x1A050, c]
|
||||
- [0x1A4F0, asm]
|
||||
- [0x1A5B0, asm]
|
||||
- [0x1A5B0, c]
|
||||
- [0x1A660, c]
|
||||
- [0x1A9A0, c]
|
||||
- [0x1AA00, c]
|
||||
|
|
@ -132,7 +132,7 @@ segments:
|
|||
- [0x1BCC0, asm, "libultra/io/pimgr"]
|
||||
- [0x1BE50, asm, "libultra/io/epirawdma"]
|
||||
- [0x1C040, asm, "libultra/io/epidma"]
|
||||
- [0x1C0E0, asm]
|
||||
- [0x1C0E0, c]
|
||||
- [0x1C130, asm]
|
||||
- [0x1C2B0, asm]
|
||||
- [0x1C670, asm, "libultra/io/piacs"]
|
||||
|
|
|
|||
53
src/19050.c
53
src/19050.c
|
|
@ -1,36 +1,18 @@
|
|||
#include "PR/os.h"
|
||||
#include "common.h"
|
||||
|
||||
void func_8008949C(void*);
|
||||
|
||||
INCLUDE_ASM(const s32, "19050", __idle_start_4_threads);
|
||||
|
||||
/* 192F0 80088EF0*/
|
||||
s32* func_80088EF0(void) {
|
||||
extern s32 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) {
|
||||
return &MQ_800E8B4C;
|
||||
}
|
||||
|
||||
INCLUDE_ASM(const s32, "19050", __thread_80088F08);
|
||||
|
||||
extern Stack__dma_load_loop *D_800E9178[0];
|
||||
extern u8 __MAIN_NOT_NULL_INF_LOOP;
|
||||
|
||||
/* 19454 80089054 */
|
||||
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);
|
||||
|
||||
extern OSMesgQueue MQ_800B9C40;
|
||||
|
||||
void __thread_800893C0(void) {
|
||||
typedef struct {
|
||||
/* 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);
|
||||
|
||||
// INCLUDE_ASM(const s32, "19050", func_80089528);
|
||||
|
||||
void func_80089528(s8 arg0) {
|
||||
extern s8 D_800E918D;
|
||||
/* 1989C 8008949C */
|
||||
void func_8008949C(void** buffers)
|
||||
{
|
||||
Stack__dma_load_loop sp10;
|
||||
void* temp_s0 = buffers[3];
|
||||
|
||||
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) {
|
||||
D_800E918D = arg0;
|
||||
}
|
||||
|
||||
|
|
@ -112,10 +108,7 @@ INCLUDE_ASM(const s32, "19050", __start_thread_800B9C88);
|
|||
INCLUDE_ASM(const s32, "19050", func_80089804);
|
||||
|
||||
/* 19D90 80089990 */
|
||||
void func_80089990(s32 arg0) {
|
||||
extern void func_80089A10();
|
||||
extern s32 D_800AA090;
|
||||
|
||||
void func_80089990(void (*arg0)(s32)) {
|
||||
s32 mask;
|
||||
|
||||
func_80089A10();
|
||||
|
|
|
|||
|
|
@ -1,10 +1,6 @@
|
|||
#include "common.h"
|
||||
|
||||
#include <PR/os.h>
|
||||
|
||||
extern void (*SWAP_BUFFER_FUNC)(void* buffers);
|
||||
|
||||
void set_swap_buffer_func(void (*arg0)(void*)) {
|
||||
void set_swap_buffer_func(void (*arg0)(void**)) {
|
||||
s32 mask;
|
||||
|
||||
mask = osSetIntMask(OS_IM_NONE);
|
||||
|
|
|
|||
62
src/1A050.c
62
src/1A050.c
|
|
@ -1,15 +1,5 @@
|
|||
#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) {
|
||||
__SCREEN_IS_NOT_BLACK = 0x80;
|
||||
|
|
@ -18,11 +8,6 @@ void func_80089C50(void) {
|
|||
|
||||
// INCLUDE_ASM(const s32, "1A050", __init_controllers);
|
||||
|
||||
extern OSMesg D_800BBE60[8];
|
||||
|
||||
extern OSMesgQueue MQ_CONTROLLER;
|
||||
extern OSThread THREAD_CONTROLLER;
|
||||
|
||||
/* 1A060 80089C60 */
|
||||
u8 __init_controllers(void) {
|
||||
u8 pattern;
|
||||
|
|
@ -40,12 +25,7 @@ u8 __init_controllers(void) {
|
|||
return pattern;
|
||||
}
|
||||
|
||||
|
||||
// INCLUDE_ASM(const s32, "1A050", func_80089CF8);
|
||||
|
||||
s32 func_80089CF8(s16 arg0, s32 arg1) {
|
||||
extern OSMesgQueue MQ_800E7988;
|
||||
|
||||
typedef struct {
|
||||
/* 0x0 */ s16 unk0;
|
||||
/* 0x4 */ OSMesgQueue* msgQueue;
|
||||
|
|
@ -61,7 +41,7 @@ s32 func_80089CF8(s16 arg0, s32 arg1) {
|
|||
msg.unkC = arg1;
|
||||
msg.msgQueue = &sp10;
|
||||
|
||||
osCreateMesgQueue(&sp10, &sp38, 1 /* size */);
|
||||
osCreateMesgQueue(&sp10, &sp38, 1);
|
||||
osSendMesg(&MQ_800E7988, &msg, OS_MESG_BLOCK);
|
||||
osRecvMesg(&sp10, NULL, OS_MESG_BLOCK);
|
||||
|
||||
|
|
@ -77,17 +57,43 @@ void __start_controller_thread(void) {
|
|||
osStartThread(&THREAD_CONTROLLER);
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM(const s32, "1A050", __controller_thread_80089D9C);
|
||||
|
||||
void initialise(void) {
|
||||
extern s32 func_8008BD30();
|
||||
extern s32 D_800E7A20;
|
||||
|
||||
void obInitializePi(void) {
|
||||
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);
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
}
|
||||
|
||||
22
src/1A660.c
22
src/1A660.c
|
|
@ -1,24 +1,8 @@
|
|||
#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);
|
||||
|
||||
extern void func_8008B1D0(u8*);
|
||||
extern u8 D_800A9FF8;
|
||||
|
||||
void func_8008A334(void) {
|
||||
func_8008B1D0(&D_800A9FF8);
|
||||
}
|
||||
|
|
@ -49,9 +33,6 @@ s32 __read_controller(OSContPad* data, u32 flags) {
|
|||
return 0;
|
||||
}
|
||||
|
||||
extern OSContStatus __GLOBAL_CONT_STATUS[MAXCONTROLLERS];
|
||||
extern OSMesgQueue MQ_CONTROLLER;
|
||||
|
||||
s32 __real_read_controller(void) {
|
||||
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) {
|
||||
if (D_800C4B30 == 0) {
|
||||
|
|
|
|||
|
|
@ -1,7 +1,5 @@
|
|||
#include "common.h"
|
||||
|
||||
extern s32 D_800C4B30;
|
||||
|
||||
void func_8008A5A0(void) {
|
||||
s32 temp_v0;
|
||||
|
||||
|
|
|
|||
11
src/1AA00.c
11
src/1AA00.c
|
|
@ -1,26 +1,15 @@
|
|||
#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) {
|
||||
__start_copy_global_controller_data();
|
||||
bcopy(&__GLOBAL_CONTROLLER_DATA, arg0, 0x18);
|
||||
__end_copy_global_controller_data();
|
||||
}
|
||||
|
||||
extern void func_80089CF8(s32, s32);
|
||||
|
||||
void func_8008A640(void) {
|
||||
func_80089CF8(0x103, 0);
|
||||
}
|
||||
|
||||
extern void(*D_800A9FE0)(s16);
|
||||
|
||||
void __set_fp_8008A660(void(*arg0)(s16)) {
|
||||
s32 mask;
|
||||
|
||||
|
|
|
|||
|
|
@ -1,13 +1,9 @@
|
|||
#include "common.h"
|
||||
|
||||
extern void func_8008B130(u8*);
|
||||
extern u8 D_800AA040;
|
||||
|
||||
void func_8008A6A0(void) {
|
||||
func_8008B130(&D_800AA040);
|
||||
}
|
||||
|
||||
extern void func_8008B1D0(u8*);
|
||||
|
||||
void func_8008A6C0(void) {
|
||||
func_8008B1D0(&D_800AA040);
|
||||
|
|
|
|||
|
|
@ -1,9 +1,7 @@
|
|||
#include "common.h"
|
||||
|
||||
extern void (*SWAP_BUFFER_FUNC_800A9E8C)(void*);
|
||||
|
||||
/* 1B3A0 8008AFA0 */
|
||||
void set_swap_buffer_func_800A9E8C(void (*arg0)(void*)) {
|
||||
void set_swap_buffer_func_800A9E8C(void (*arg0)(void**)) {
|
||||
s32 mask;
|
||||
|
||||
mask = osSetIntMask(OS_IM_NONE);
|
||||
|
|
|
|||
12
src/1B3E0.c
12
src/1B3E0.c
|
|
@ -1,14 +1,5 @@
|
|||
#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 */
|
||||
void __thread_8008AFE0(void* arg0) {
|
||||
Stack__dma_load_loop sp10;
|
||||
|
|
@ -39,9 +30,6 @@ void __thread_8008AFE0(void* arg0) {
|
|||
}
|
||||
|
||||
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);
|
||||
osStartThread(&THREAD_800BE1C0);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
31
src/2DE10.c
31
src/2DE10.c
|
|
@ -2,10 +2,8 @@
|
|||
|
||||
INCLUDE_ASM(const s32, "2DE10", func_8009DA10);
|
||||
|
||||
// INCLUDE_ASM(const s32, "2DE10", __calls_romCopy_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* _dst;
|
||||
u8* _src;
|
||||
|
|
@ -13,25 +11,16 @@ void __calls_romCopy_8009DA50(u8* src, u8* dst, u32 len)
|
|||
|
||||
// align to 16
|
||||
_src = (u8*) (((u32) &sp1F[15] >> 4) << 4);
|
||||
|
||||
if (len < 0x10)
|
||||
{
|
||||
_dst = dst;
|
||||
|
||||
// copy into stack, length aligned to 2 bytes
|
||||
romCopy(src, _src, (len + 1) & ~1);
|
||||
|
||||
len--;
|
||||
// then copy from stack into destination
|
||||
while(len != -1)
|
||||
{
|
||||
if (len < 16) {
|
||||
_dst = dst;
|
||||
// Copy into stack, length aligned to 2 bytes...
|
||||
romCopy(src, _src, (len + 1) & ~1);
|
||||
// ...then copy from stack into destination
|
||||
for(len--; len != -1; len--)
|
||||
*_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);
|
||||
}
|
||||
}
|
||||
|
|
@ -43,8 +32,6 @@ INCLUDE_ASM(const s32, "2DE10", __calls_romCopy_8009DAF4);
|
|||
|
||||
INCLUDE_ASM(const s32, "2DE10", __calls_romCopy_8009DBB8);
|
||||
|
||||
extern u8 D_594284;
|
||||
|
||||
void* __add_0x594284(s32 arg0) {
|
||||
return arg0 + &D_594284;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,13 +1,7 @@
|
|||
#include "PR/os.h"
|
||||
#include "common.h"
|
||||
|
||||
void __set_black();
|
||||
void __calls_osViBlack(bool black);
|
||||
|
||||
/* 19FC0 80089BC0 */
|
||||
void __set_black() {
|
||||
extern s32 __SCREEN_IS_NOT_BLACK;
|
||||
|
||||
__SCREEN_IS_NOT_BLACK = 0;
|
||||
__calls_osViBlack(true);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -15,7 +15,6 @@ void boot(void) {
|
|||
void idle(void* arg) {
|
||||
extern void main_(void*);
|
||||
extern void __idle_start_4_threads(s32, s32);
|
||||
extern void initialise();
|
||||
extern void (*D_800E7A18)();
|
||||
|
||||
extern u8 SP_THREAD_FIRST_DMA_LOAD[1];
|
||||
|
|
@ -24,7 +23,7 @@ void idle(void* arg) {
|
|||
|
||||
D_800E7A18 = NULL;
|
||||
|
||||
initialise();
|
||||
obInitializePi();
|
||||
__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);
|
||||
|
|
|
|||
|
|
@ -45,7 +45,7 @@ INCLUDE_ASM(const s32, "main", func_80072398);
|
|||
|
||||
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);
|
||||
|
||||
|
|
@ -105,10 +105,6 @@ INCLUDE_ASM(const s32, "main", __calls_copy_controller_data);
|
|||
|
||||
extern u8 __reset_compared_osTvType(); /* extern */
|
||||
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_NTSC 1
|
||||
|
|
@ -190,7 +186,6 @@ INCLUDE_ASM(const s32, "main", func_80073F58);
|
|||
|
||||
// INCLUDE_ASM(const s32, "main", func_80073FD4);
|
||||
|
||||
extern SomethingMusic* __MAYBE_SONG_ARRAY_800A8218[7];
|
||||
/* 43D4 80073FD4 */
|
||||
void __initialize_song_mem(void) {
|
||||
s32 mask;
|
||||
|
|
|
|||
|
|
@ -1,9 +1,5 @@
|
|||
#include "common.h"
|
||||
|
||||
extern void* musCurrentPtrBank;
|
||||
|
||||
void func_8008350C();
|
||||
|
||||
INCLUDE_ASM(const s32, "mus", func_800810F0);
|
||||
|
||||
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) {
|
||||
if ((arg0 != NULL) && ((*(s32*)(arg0 + 0x10)) < 0)) {
|
||||
D_800B1828 = arg0;
|
||||
|
|
|
|||
|
|
@ -6,6 +6,10 @@ __add_0x594284 = 0x8009DD28;
|
|||
|
||||
__log_lha_error = 0x8007BB90;
|
||||
|
||||
CartRomHandle = 0x800C4C50;
|
||||
osCartRomInit = 0x8008BD30;
|
||||
PTR_CART_ROM_HANDLE = 0x800E7A20;
|
||||
|
||||
D_800A81C0 = 0x800A81C0; // size:0x30
|
||||
D_800C4BBC = 0x800C4BBC; // size:0x8
|
||||
D_800AEFE0 = 0x800AEFE0; // size:0x8
|
||||
|
|
@ -25,6 +29,7 @@ STR_rb = 0x800AE0A8; // type:asciz
|
|||
STR_wb = 0x800AE27C; // type:asciz
|
||||
STR_Unknown_method_skiped = 0x800AE284; // type:asciz
|
||||
|
||||
__set_vi_mode = 0x80072738;
|
||||
__calls_osViSwapBuffer_8007307C = 0x8007307C;
|
||||
__osViSwapBuffer_3 = 0x8008B110;
|
||||
|
||||
|
|
@ -353,7 +358,7 @@ __Mus_thread_80085908 = 0x80085908;
|
|||
THREAD_IDLE = 0x800AF440;
|
||||
idle = 0x8007F8E4;
|
||||
|
||||
initialise = 0x80089F40;
|
||||
obInitializePi = 0x80089F40;
|
||||
|
||||
boot = 0x8007F880;
|
||||
entry = 0x80070C00;
|
||||
|
|
|
|||
|
|
@ -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()
|
||||
|
|
@ -37,4 +37,5 @@ D_80187020 = 0x80187020;
|
|||
D_80187030 = 0x80187030;
|
||||
D_8018F1A0 = 0x8018F1A0;
|
||||
D_8018FC18 = 0x8018FC18;
|
||||
D_800EB0E8 = 0x800EB0E8;
|
||||
D_800EB0E8 = 0x800EB0E8;
|
||||
D_800E8C2C = 0x800E8C2C;
|
||||
Loading…
Reference in New Issue