diff --git a/config/rel_slices.yml b/config/rel_slices.yml index 0daa7ee2..4129ae9b 100644 --- a/config/rel_slices.yml +++ b/config/rel_slices.yml @@ -193,6 +193,10 @@ lb_reki.c: .text: [0x8040752C, 0x80407AE8] .rodata: [0x806437A0, 0x806437C0] .data: [0x8065ECD8, 0x8065F110] +#main.c: +# .text: [0x80407AE8, 0x80407CF4] +# .data: [0x8065F110, 0x8065F138] +# .bss: [0x812F4CC0, 0x812F5038] #sys_math.c: # .text: [0x80408940, 0x80408A44] # .rodata: [0x806437C0, 0x806437D0] diff --git a/config/symbols.yml b/config/symbols.yml index 68fc6112..a3310bd8 100644 --- a/config/symbols.yml +++ b/config/symbols.yml @@ -7917,7 +7917,7 @@ global: 0x80407A78: lbRk_HarvestMoonDay 0x80407AE8: mainproc 0x80407C70: entry - 0x80407CB9: foresta_main + 0x80407CB8: foresta_main 0x80407CF4: padmgr_LockSerialMesgQ 0x80407D30: padmgr_UnlockSerialMesgQ 0x80407D64: padmgr_LockContData diff --git a/configure.py b/configure.py index f43f8927..589fbbe5 100644 --- a/configure.py +++ b/configure.py @@ -23,8 +23,7 @@ import common as c # Check CodeWarrior was added assert os.path.exists("tools/1.3.2/mwcceppc.exe") and \ - os.path.exists("tools/1.2.5/mwcceppc.exe") and \ - os.path.exists("tools/1.3.2/mwldeppc.exe"), \ + os.path.exists("tools/1.2.5n/mwcceppc.exe"), \ "Error: Codewarrior not found!" # Check binaries were added diff --git a/include/Famicom/famicom.h b/include/Famicom/famicom.h index 9163fdc7..f0f5495f 100644 --- a/include/Famicom/famicom.h +++ b/include/Famicom/famicom.h @@ -70,6 +70,7 @@ typedef struct famicom_common_s { typedef u8 (*FAMICOM_GETSAVECHAN_PROC)(int* player_no, int* slot_card_result); extern void famicom_setCallback_getSaveChan(FAMICOM_GETSAVECHAN_PROC getSaveChan_proc); +extern int famicom_mount_archive(); extern int famicom_mount_archive_end_check(); #ifdef __cplusplus diff --git a/include/libjsys/jsyswrapper.h b/include/libjsys/jsyswrapper.h index 9159c9ce..5786bd02 100644 --- a/include/libjsys/jsyswrapper.h +++ b/include/libjsys/jsyswrapper.h @@ -47,6 +47,7 @@ enum resource_index { extern void JW_Init(); extern void JW_Init2(); +extern void JW_Init3(); extern void* JW_Alloc(size_t size, int align); extern void JW_Free(void* ptr); extern s32 JW_Resize(void* ptr, size_t new_size); @@ -71,6 +72,9 @@ extern void* JC_JFWDisplay_getManager(); extern void JC_JFWDisplay_startFadeOut(void* manager, int len); extern void JC_JFWDisplay_startFadeIn(void* manager, int len); +extern void JC_JKRAramHeap_dump(void* heap); +extern void* JC_JKRAram_getAramHeap(); + extern int JC_JKRHeap_dump(void* heap); extern s32 JC_JKRHeap_getTotalFreeSize(void* heap); diff --git a/include/libultra/setthreadpri.h b/include/libultra/setthreadpri.h new file mode 100644 index 00000000..1972f31f --- /dev/null +++ b/include/libultra/setthreadpri.h @@ -0,0 +1,19 @@ +#ifndef SETTHREADPRI_H +#define SETTHREADPRI_H + +#include "types.h" +#include "libultra/osThread.h" + +#ifdef __cplusplus + extern "C" { +#endif + +void osSetThreadPri(OSThread* thread, OSPri priority); + + +#ifdef __cplusplus + } +#endif + + +#endif \ No newline at end of file diff --git a/include/m_card.h b/include/m_card.h index 832c1869..f926ab67 100644 --- a/include/m_card.h +++ b/include/m_card.h @@ -11,6 +11,7 @@ extern "C" { extern u8 mCD_GetThisLandSlotNo_code(int* player_no, int* slot_card_results); extern void mCD_save_data_aram_malloc(); extern void mCD_set_aram_save_data(); +extern void mCD_init_card(); extern void mCD_PrintErrInfo(gfxprint_t* gfxprint); extern void mCD_InitAll(); diff --git a/include/m_debug.h b/include/m_debug.h index 4efa5cde..cc68c94b 100644 --- a/include/m_debug.h +++ b/include/m_debug.h @@ -76,6 +76,7 @@ extern Debug_mode* debug_mode; #define GETREG(reg, idx) ((s16)(REGADDR(reg, idx))) #define SETREG(reg, idx, val) (REGADDR(reg, idx) = (val)) +extern void new_Debug_mode(); #ifdef __cplusplus }; #endif diff --git a/include/m_msg.h b/include/m_msg.h index 3348eba0..fb40c949 100644 --- a/include/m_msg.h +++ b/include/m_msg.h @@ -220,6 +220,7 @@ extern mMsg_Window_c* mMsg_Get_base_window_p(); extern void mMsg_Set_free_str(mMsg_Window_c* msg, int free_str_no, u8* str, int str_size); extern void mMsg_debug_draw(gfxprint_t* gfxprint); extern void mMsg_aram_init(); +extern void mMsg_aram_init2(); extern int mMsg_Check_MainHide(mMsg_Window_c* msg); extern void mMsg_Set_item_str(mMsg_Window_c* msg_win, int str_no, u8* item_str, int str_len); extern void mMsg_Set_mail_str(mMsg_Window_c* msg_win, int str_no, u8* str, int str_len); diff --git a/include/padmgr.h b/include/padmgr.h index 205f1389..5973542e 100644 --- a/include/padmgr.h +++ b/include/padmgr.h @@ -5,6 +5,7 @@ #include "irqmgr.h" #include "libu64/pad.h" #include "dolphin/os/OSMessage.h" +#include "libultra/osThread.h" #ifdef __cplusplus extern "C" { @@ -67,6 +68,8 @@ extern int padmgr_isConnectedController(int pad); extern void padmgr_force_stop_ON(); extern void padmgr_force_stop_OFF(); extern void padmgr_RumbleSet(int pad, int intensity); +extern void padmgr_Create(OSMessageQueue* queue, OSId id, OSPri priority, void* stack, size_t stackSize); +extern void padmgr_Init(OSMessageQueue* queue); #define padmgr_setClient(callback_proc, param) \ do { \ diff --git a/include/sys_stacks.h b/include/sys_stacks.h index 033e7f18..3f110ca8 100644 --- a/include/sys_stacks.h +++ b/include/sys_stacks.h @@ -3,8 +3,14 @@ #include "types.h" +#define IRQMGR_STACK_SIZE 0x1000 +#define PADMGR_STACK_SIZE 0x1000 +#define GRAPH_STACK_SIZE 0x2000 + extern u8 graphStack[]; extern u8 padmgrStack[]; extern u8 irqmgrStack[]; + + #endif \ No newline at end of file diff --git a/rel/main.c b/rel/main.c index 5b52cb61..8abf7263 100644 --- a/rel/main.c +++ b/rel/main.c @@ -1,12 +1,34 @@ #include "main.h" + #include "boot.h" +#include "irqmgr.h" +#include "sys_stacks.h" +#include "graph.h" +#include "libultra/osMesg.h" +#include "libultra/os_thread.h" +#include "libjsys/jsyswrapper.h" +#include "m_card.h" +#include "_mem.h" +#include "padmgr.h" +#include "libultra/setthreadpri.h" +#include "m_msg.h" +#include "Famicom/famicom.h" +#include "m_debug.h" +#include "libforest/osreport.h" //TODO: actually add all the stacks and headers -void mainproc (void* val){ - static OSMessageQueue l_serialMsgQ; - static OSMessage serialMsgBuf; - IrqMgrClient irqClient; +static OSMessageQueue l_serialMsgQ; +static OSMessage serialMsgBuf; +extern OSThread graphThread; +extern u8 SegmentBaseAddress[0x40]; + +int ScreenHeight = SCREEN_HEIGHT; +int ScreenWidth = SCREEN_WIDTH; + +extern void mainproc (void* val){ + + irqmgr_client_t irqClient; OSMessageQueue irqMgrMsgQueue; OSMessage irqMsgBuf[10]; OSMessage msg; @@ -33,7 +55,7 @@ void mainproc (void* val){ JW_EndFrame(); osStartThread(&graphThread); - osSetThreadPri(0, 5); + osSetThreadPri(NULL, 5); JW_Init3(); mMsg_aram_init2(); @@ -41,7 +63,7 @@ void mainproc (void* val){ famicom_mount_archive(); JC_JKRAramHeap_dump(JC_JKRAram_getAramHeap()); - osSetThreadPri(0, 13); + osSetThreadPri(NULL, 13); do { msg = NULL; @@ -55,19 +77,19 @@ void mainproc (void* val){ -u32 entry(void) { // TODO: debug_mode struct thing - padmgr_Init(0); +u32 entry(void) { + padmgr_Init(NULL); new_Debug_mode(); - debug_mode.idk = 0; - mainproc(0); + SETREG(SREG, 0, 0); + mainproc(NULL); return 0; } -void main_foresta(void){ +void foresta_main(void){ OSReport("どうぶつの森 main2 開始"); - HotStartEntry = (u32)&entry; + HotStartEntry = &entry; } diff --git a/rel/sys_stacks.c b/rel/sys_stacks.c index c96df3bb..f7766c6d 100644 --- a/rel/sys_stacks.c +++ b/rel/sys_stacks.c @@ -1,8 +1,6 @@ #include "types.h" -#define IRQMGR_STACK_SIZE 0x1000 -#define PADMGR_STACK_SIZE 0x1000 -#define GRAPH_STACK_SIZE 0x2000 +#include "sys_stacks.h" u8 graphStack[GRAPH_STACK_SIZE]; u8 padmgrStack [PADMGR_STACK_SIZE];