Ignore build folder

Remove include folders from Makefile
Updated symbols
Reverse a couple of functions
This commit is contained in:
Ogre 2023-08-30 10:44:13 +02:00
parent b7c264fe1e
commit 3fa9d72769
10 changed files with 234 additions and 358 deletions

1
.gitignore vendored
View File

@ -2,6 +2,7 @@ baserom.z64
asm asm
assets assets
build
.vscode .vscode

View File

@ -68,7 +68,7 @@ ENDLINE := \n'
### Compiler Options ### ### Compiler Options ###
IINC := -I include -I $(BUILD_DIR)/include -I src -I asm -I lib/libreultra/include/2.0I/ IINC := -I include -I $(BUILD_DIR)/include -I lib/libreultra/include/2.0I/
ASFLAGS := -Iinclude -EB -mtune=vr4300 -march=vr4300 ASFLAGS := -Iinclude -EB -mtune=vr4300 -march=vr4300
CPPFLAGS := $(IINC) -D_LANGUAGE_C -D_FINALROM -DF3DEX_GBI_2 -D_MIPS_SZLONG=32 -nostdinc -mgp32 -mfp32 -mips2 CPPFLAGS := $(IINC) -D_LANGUAGE_C -D_FINALROM -DF3DEX_GBI_2 -D_MIPS_SZLONG=32 -nostdinc -mgp32 -mfp32 -mips2

View File

@ -46,7 +46,7 @@ segments:
follows_vram: entry follows_vram: entry
bss_size: 0x3AE70 bss_size: 0x3AE70
subsegments: subsegments:
- [0x1060, asm, "main"] - [0x1060, c, "main"]
- [0x4AC0, asm] - [0x4AC0, asm]
- [0x5FC0, asm] - [0x5FC0, asm]
- [0x68E0, asm] - [0x68E0, asm]
@ -109,7 +109,7 @@ segments:
- [0x1A5B0, asm] - [0x1A5B0, asm]
- [0x1A660, c] - [0x1A660, c]
- [0x1A9A0, asm] - [0x1A9A0, asm]
- [0x1AA00, asm, "copy_global_controller_data"] - [0x1AA00, c]
- [0x1AAA0, asm] - [0x1AAA0, asm]
- [0x1AD10, asm] - [0x1AD10, asm]
- [0x1AFD0, asm] - [0x1AFD0, asm]
@ -312,7 +312,7 @@ segments:
# - [0x3F140, rodata, heapcheck] # - [0x3F140, rodata, heapcheck]
# - [0x3F170, rodata, heapcheck] # - [0x3F170, rodata, heapcheck]
# - { start: 0x3F1B0, type: bss, vram: 0x800E9C20 } - { start: 0x3F1B0, type: bss, vram: 0x800E9C20 }
- type: code - type: code
dir: overlays/overlay0 dir: overlays/overlay0

View File

@ -10,6 +10,18 @@ INCLUDE_ASM(const s32, "1A050", func_80089C50);
INCLUDE_ASM(const s32, "1A050", __init_controllers); INCLUDE_ASM(const s32, "1A050", __init_controllers);
// u8 __init_controllers(void) {
// ? sp18;
// u8 sp28;
// osCreateMesgQueue(&MQ_CONTROLLER, &D_800BBE60, 8);
// osSetEventMesg(5, &MQ_CONTROLLER, 0);
// osContInit(&MQ_CONTROLLER, &sp28, &sp18);
// osCreateThread(&THREAD_CONTROLLER, 5, __controller_thread_80089D9C, NULL, &MQ_800BE030, 0x73);
// osStartThread(&THREAD_CONTROLLER);
// return sp28;
// }
INCLUDE_ASM(const s32, "1A050", func_80089CF8); INCLUDE_ASM(const s32, "1A050", func_80089CF8);
INCLUDE_ASM(const s32, "1A050", func_80089D5C); INCLUDE_ASM(const s32, "1A050", func_80089D5C);

View File

@ -1,25 +1,40 @@
#include "common.h" #include "common.h"
#include <PR/os.h> #include <ultra64.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_8008A354();
extern void func_8008A37C(); extern void func_8008A37C();
extern u32 D_800C4B30; extern s32 D_800C4B30;
extern OSMesgQueue MQ_CONTROLLER; extern OSMesgQueue MQ_CONTROLLER;
extern OSMesgQueue MQ_800E9BF0;
INCLUDE_ASM(const s32, "1A660", func_8008A260); INCLUDE_ASM(const s32, "1A660", func_8008A260);
INCLUDE_ASM(const s32, "1A660", func_8008A334); // INCLUDE_ASM(const s32, "1A660", func_8008A334);
extern void func_8008B1D0(u8*);
extern u8 D_800A9FF8;
INCLUDE_ASM(const s32, "1A660", __start_copy_global_controller_data); void func_8008A334(void) {
func_8008B1D0(&D_800A9FF8);
}
INCLUDE_ASM(const s32, "1A660", __end_copy_global_controller_data); void __start_copy_global_controller_data(void) {
osSendMesg(&MQ_800E9BF0, NULL, OS_MESG_BLOCK);
}
// INCLUDE_ASM(const s32, "1A660", __read_controller); void __end_copy_global_controller_data(void) {
osRecvMesg(&MQ_800E9BF0, NULL, OS_MESG_BLOCK);
}
s32 __read_controller(OSContPad* data, u32 flags) {
s32 __read_controller(OSContPad* data, u32 arg1) {
s32 res; s32 res;
res = osContStartReadData(&MQ_CONTROLLER); res = osContStartReadData(&MQ_CONTROLLER);
@ -27,7 +42,7 @@ s32 __read_controller(OSContPad* data, u32 arg1) {
return res; return res;
osRecvMesg(&MQ_CONTROLLER, NULL, OS_MESG_BLOCK); osRecvMesg(&MQ_CONTROLLER, NULL, OS_MESG_BLOCK);
if (!(arg1 & D_800C4B30)) { if (!(flags & D_800C4B30)) {
func_8008A354(); func_8008A354();
osContGetReadData(data); osContGetReadData(data);
func_8008A37C(); func_8008A37C();
@ -37,11 +52,59 @@ s32 __read_controller(OSContPad* data, u32 arg1) {
return 0; return 0;
} }
extern OSContStatus __GLOBAL_CONT_STATUS[MAXCONTROLLERS];
extern OSMesgQueue MQ_CONTROLLER;
INCLUDE_ASM(const s32, "1A660", __real_read_controller); s32 __real_read_controller(void) {
s32 var_v0;
INCLUDE_ASM(const s32, "1A660", __calls_read_controller_0); var_v0 = osContStartQuery(&MQ_CONTROLLER);
if (var_v0 == 0) {
osRecvMesg(&MQ_CONTROLLER, NULL, OS_MESG_BLOCK);
osContGetQuery(__GLOBAL_CONT_STATUS);
return 0;
} else {
return var_v0;
}
}
INCLUDE_ASM(const s32, "1A660", __calls_read_controller_1); 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) {
osRecvMesg(&MQ_800C4A00, NULL, 0);
__read_controller(&__GLOBAL_CONTROLLER_DATA, 1);
if (D_800A9FE0 != NULL) {
D_800A9FE0(*arg0);
}
osSendMesg(&MQ_800C4A00, NULL, 0);
}
return 0;
}
typedef struct {
/* 0x0 */ u8 field_0x0[0xc];
/* 0xC */ OSContPad* data;
} Arg___calls_read_controller_1;
void __calls_read_controller_1(Arg___calls_read_controller_1* arg) {
__read_controller(arg->data, 0);
}
s32 __calls_read_controller_2(s16* arg0) {
s32 var_v0;
osRecvMesg(&MQ_800C4A00, NULL, 0);
var_v0 = __read_controller(&__GLOBAL_CONTROLLER_DATA, 0);
if (var_v0 == 0) {
if (D_800A9FE0 != NULL) {
D_800A9FE0(*arg0);
}
return 0;
} else {
return var_v0;
}
}
INCLUDE_ASM(const s32, "1A660", __calls_read_controller_2);

31
src/1AA00.c Normal file
View File

@ -0,0 +1,31 @@
#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 s32 D_800A9FE0;
void func_8008A660(s32 arg0) {
s32 mask;
mask = osSetIntMask(OS_IM_NONE);
D_800A9FE0 = arg0;
osSetIntMask(mask);
}

338
src/ctx.h
View File

@ -1,338 +0,0 @@
typedef unsigned char u8; /* unsigned 8-bit */
typedef unsigned short u16; /* unsigned 16-bit */
typedef unsigned long u32; /* unsigned 32-bit */
typedef unsigned long long u64; /* unsigned 64-bit */
typedef signed char s8; /* signed 8-bit */
typedef short s16; /* signed 16-bit */
typedef long s32; /* signed 32-bit */
typedef long long s64; /* signed 64-bit */
typedef volatile unsigned char vu8; /* unsigned 8-bit */
typedef volatile unsigned short vu16; /* unsigned 16-bit */
typedef volatile unsigned long vu32; /* unsigned 32-bit */
typedef volatile unsigned long long vu64; /* unsigned 64-bit */
typedef volatile signed char vs8; /* signed 8-bit */
typedef volatile short vs16; /* signed 16-bit */
typedef volatile long vs32; /* signed 32-bit */
typedef volatile long long vs64; /* signed 64-bit */
typedef float f32; /* single prec floating point */
typedef double f64; /* double prec floating point */
typedef unsigned long size_t;
#define NULL 0
#define true 1
#define false 0
/* Flags to turn blocking on/off when sending/receiving message */
#define OS_MESG_NOBLOCK 0
#define OS_MESG_BLOCK 1
/* Recommended thread priorities for the system threads */
#define OS_PRIORITY_MAX 255
#define OS_PRIORITY_VIMGR 254
#define OS_PRIORITY_RMON 250
#define OS_PRIORITY_RMONSPIN 200
#define OS_PRIORITY_PIMGR 150
#define OS_PRIORITY_SIMGR 140
#define OS_PRIORITY_APPMAX 127
#define OS_PRIORITY_IDLE 0 /* Must be 0 */
typedef s32 OSPri;
typedef s32 OSId;
typedef union { struct { f32 f_odd; f32 f_even; } f; f64 d; } __OSfp;
typedef struct {
u64 at, v0, v1, a0, a1, a2, a3;
u64 t0, t1, t2, t3, t4, t5, t6, t7;
u64 s0, s1, s2, s3, s4, s5, s6, s7;
u64 t8, t9, gp, sp, s8, ra;
u64 lo, hi;
u32 sr, pc, cause, badvaddr, rcp;
u32 fpcsr;
__OSfp fp0, fp2, fp4, fp6, fp8, fp10, fp12, fp14;
__OSfp fp16, fp18, fp20, fp22, fp24, fp26, fp28, fp30;
} __OSThreadContext;
typedef struct OSThread_s {
struct OSThread_s *next; /* run/mesg queue link */
OSPri priority; /* run/mesg queue priority */
struct OSThread_s **queue; /* queue thread is on */
struct OSThread_s *tlnext; /* all threads queue link */
u16 state; /* OS_STATE_* */
u16 flags; /* flags for rmon */
OSId id; /* id for debugging */
int fp; /* thread has used fp unit */
__OSThreadContext context; /* register/interrupt mask */
} OSThread;
/*
* Structure for message
*/
typedef void* OSMesg;
typedef struct {
u16 button;
s8 stick_x; /* -80 <= stick_x <= 80 */
s8 stick_y; /* -80 <= stick_y <= 80 */
u8 errno;
} OSContPad;
/*
* Structure for message queue
*/
typedef struct OSMesgQueue_s {
OSThread *mtqueue; /* Queue to store threads blocked
on empty mailboxes (receive) */
OSThread *fullqueue; /* Queue to store threads blocked
on full mailboxes (send) */
s32 validCount; /* Contains number of valid message */
s32 first; /* Points to first valid message */
s32 msgCount; /* Contains total # of messages */
OSMesg *msg; /* Points to message buffer array */
} OSMesgQueue;
/*
* OSTranxInfo is set up for Leo Disk DMA. This info will be maintained
* by exception handler. This is how the PIMGR and the ISR communicate.
*/
typedef struct {
u32 errStatus; /* error status */
void *dramAddr; /* RDRAM buffer address (DMA) */
void *C2Addr; /* C2 buffer address */
u32 sectorSize; /* size of transfering sector */
u32 C1ErrNum; /* total # of C1 errors */
u32 C1ErrSector[4]; /* error sectors */
} __OSBlockInfo;
typedef struct {
u32 cmdType; /* for disk only */
u16 transferMode; /* Block, Track, or sector? */
u16 blockNum; /* which block is transfering */
s32 sectorNum; /* which sector is transfering */
u32 devAddr; /* Device buffer address */
u32 bmCtlShadow; /* asic bm_ctl(510) register shadow ram */
u32 seqCtlShadow; /* asic seq_ctl(518) register shadow ram */
__OSBlockInfo block[2]; /* bolck transfer info */
} __OSTranxInfo;
typedef struct OSPiHandle_s {
struct OSPiHandle_s *next; /* point to next handle on the table */
u8 type; /* DEVICE_TYPE_BULK for disk */
u8 latency; /* domain latency */
u8 pageSize; /* domain page size */
u8 relDuration; /* domain release duration */
u8 pulse; /* domain pulse width */
u8 domain; /* which domain */
u32 baseAddress; /* Domain address */
u32 speed; /* for roms only */
/* The following are "private" elements" */
__OSTranxInfo transferInfo; /* for disk only */
} OSPiHandle;
/*
* Structure for I/O message block
*/
typedef struct {
u16 type; /* Message type */
u8 pri; /* Message priority (High or Normal) */
u8 status; /* Return status */
OSMesgQueue *retQueue; /* Return message queue to notify I/O
* completion */
} OSIoMesgHdr;
typedef struct {
OSIoMesgHdr hdr; /* Message header */
void * dramAddr; /* RDRAM buffer address (DMA) */
u32 devAddr; /* Device buffer address (DMA) */
u32 size; /* DMA transfer size in bytes */
OSPiHandle *piHandle; /* PI device handle */
} OSIoMesg;
/*
* Structure for device manager block
*/
typedef struct {
s32 active; /* Status flag */
OSThread *thread; /* Calling thread */
OSMesgQueue *cmdQueue; /* Command queue */
OSMesgQueue *evtQueue; /* Event queue */
OSMesgQueue *acsQueue; /* Access queue */
/* Raw DMA routine */
s32 (*dma)(s32, u32, void *, u32);
s32 (*edma)(OSPiHandle *, s32, u32, void *, u32);
} OSDevMgr;
#define OS_SC_STACKSIZE 0x2000
#define OS_SC_RETRACE_MSG 1
#define OS_SC_DONE_MSG 2
#define OS_SC_RDP_DONE_MSG 3
#define OS_SC_PRE_NMI_MSG 4
#define OS_SC_LAST_MSG 4 /* this should have highest number */
#define OS_SC_MAX_MESGS 8
typedef struct {
short type;
char misc[30];
} OSScMsg;
typedef struct {
u32 type;
u32 flags;
u64 *ucode_boot;
u32 ucode_boot_size;
u64 *ucode;
u32 ucode_size;
u64 *ucode_data;
u32 ucode_data_size;
u64 *dram_stack;
u32 dram_stack_size;
u64 *output_buff;
u64 *output_buff_size;
u64 *data_ptr;
u32 data_size;
u64 *yield_data_ptr;
u32 yield_data_size;
} OSTask_t;
typedef union {
OSTask_t t;
long long int force_structure_alignment;
} OSTask;
typedef struct OSScTask_s {
struct OSScTask_s *next; /* note: this must be first */
u32 state;
u32 flags;
void *framebuffer; /* used by graphics tasks */
OSTask list;
OSMesgQueue *msgQ;
OSMesg msg;
} OSScTask; /* non FINALROM code */
/*
* OSScTask flags:
*/
#define OS_SC_NEEDS_RDP 0x0001 /* uses the RDP */
#define OS_SC_NEEDS_RSP 0x0002 /* uses the RSP */
#define OS_SC_DRAM_DLIST 0x0004 /* SP & DP communicate through DRAM */
#define OS_SC_PARALLEL_TASK 0x0010 /* must be first gfx task on list */
#define OS_SC_LAST_TASK 0x0020 /* last task in queue for frame */
#define OS_SC_SWAPBUFFER 0x0040 /* swapbuffers when gfx task done */
#define OS_SC_RCP_MASK 0x0003 /* mask for needs bits */
#define OS_SC_TYPE_MASK 0x0007 /* complete type mask */
/*
* OSScClient:
*
* Data structure used by threads that wish to communicate to the
* scheduling thread
*
*/
typedef struct SCClient_s {
struct SCClient_s *next; /* next client in the list */
OSMesgQueue *msgQ; /* where to send the frame msg */
} OSScClient;
typedef struct {
OSScMsg retraceMsg;
OSScMsg prenmiMsg;
OSMesgQueue interruptQ;
OSMesg intBuf[8];
OSMesgQueue cmdQ;
OSMesg cmdMsgBuf[8];
OSThread thread;
OSScClient *clientList;
OSScTask *audioListHead;
OSScTask *gfxListHead;
OSScTask *audioListTail;
OSScTask *gfxListTail;
OSScTask *curRSPTask;
OSScTask *curRDPTask;
u32 frameCount;
s32 doAudio;
} OSSched;
/* Buttons */
#define CONT_A 0x8000
#define CONT_B 0x4000
#define CONT_G 0x2000
#define CONT_START 0x1000
#define CONT_UP 0x0800
#define CONT_DOWN 0x0400
#define CONT_LEFT 0x0200
#define CONT_RIGHT 0x0100
#define CONT_L 0x0020
#define CONT_R 0x0010
#define CONT_E 0x0008
#define CONT_D 0x0004
#define CONT_C 0x0002
#define CONT_F 0x0001
/* Nintendo's official button names */
#define A_BUTTON CONT_A
#define B_BUTTON CONT_B
#define L_TRIG CONT_L
#define R_TRIG CONT_R
#define Z_TRIG CONT_G
#define START_BUTTON CONT_START
#define U_JPAD CONT_UP
#define L_JPAD CONT_LEFT
#define R_JPAD CONT_RIGHT
#define D_JPAD CONT_DOWN
#define U_CBUTTONS CONT_E
#define L_CBUTTONS CONT_C
#define R_CBUTTONS CONT_F
#define D_CBUTTONS CONT_D
extern void osContGetReadData(OSContPad* data);
extern s32 osContStartReadData(OSMesgQueue *mq);
extern s32 osRecvMesg(OSMesgQueue *mq, OSMesg *msg, s32 flags);
extern void osCreateThread(OSThread *t, OSId id, void (*entry)(void *), void *arg, void *sp, OSPri p);
extern void osSetThreadPri(OSThread *t, OSPri pri);
extern void osStartThread(OSThread *t);
extern void osCreateScheduler(OSSched *s, void *stack, OSPri priority, u8 mode, u8 retraceCount);
extern void osCreateMesgQueue(OSMesgQueue *mq, OSMesg *msg, s32 count);
extern void osSendMesg(OSMesgQueue *mq, OSMesg msg, s32 flag);
extern void osJamMesg(OSMesgQueue *mq, OSMesg msg, s32 flag);
extern s32 osRecvMesg(OSMesgQueue *mq, OSMesg *msg, s32 flag);
extern void osInvalDCache(void *vaddr, s32 nbytes);
extern OSPiHandle* CART_HANDLE;
extern s32 osEPiStartDma(OSPiHandle *pihandle, OSIoMesg *mb, s32 direction);
extern s32 osEPiWriteIo(OSPiHandle *pihandle, u32 devAddr, u32 data);
extern s32 osEPiReadIo(OSPiHandle *pihandle, u32 devAddr, u32 *data);
extern void osInitialize(void);
extern void MusFxBankSetPtrBank(void *ifxbank, void *ipbank);
extern void MusSetMasterVolume(unsigned long flags, int volume);
extern void MusFxBankInitialize(void *fxbank);
extern void osViSetSpecialFeatures(u32 func);
extern void boot(void* arg);
extern void idle(void* arg);
extern void main_(void* arg);
extern void romCopy(u8* src, u8* dst, u32 len);
extern void __calls_romCopy_8009DA50(u8* src, u8* dst, u32 len);

105
src/main.c Normal file
View File

@ -0,0 +1,105 @@
#include "common.h"
INCLUDE_ASM(const s32, "main", func_80070C60);
INCLUDE_ASM(const s32, "main", AddHeap);
INCLUDE_ASM(const s32, "main", func_80070F14);
INCLUDE_ASM(const s32, "main", __virtual_mem_alloc);
INCLUDE_ASM(const s32, "main", func_800710DC);
INCLUDE_ASM(const s32, "main", func_80071288);
INCLUDE_ASM(const s32, "main", func_800712C4);
INCLUDE_ASM(const s32, "main", func_800713EC);
INCLUDE_ASM(const s32, "main", HIsAllocatedPointer);
INCLUDE_ASM(const s32, "main", func_80071634);
INCLUDE_ASM(const s32, "main", func_8007163C);
INCLUDE_ASM(const s32, "main", func_80071644);
INCLUDE_ASM(const s32, "main", func_80071950);
INCLUDE_ASM(const s32, "main", func_800719E8);
INCLUDE_ASM(const s32, "main", func_80071A3C);
INCLUDE_ASM(const s32, "main", func_80071A74);
INCLUDE_ASM(const s32, "main", func_80071B9C);
INCLUDE_ASM(const s32, "main", func_80071C04);
INCLUDE_ASM(const s32, "main", func_80071E74);
INCLUDE_ASM(const s32, "main", main_);
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", func_800727D8);
INCLUDE_ASM(const s32, "main", func_8007284C);
INCLUDE_ASM(const s32, "main", func_800728BC);
INCLUDE_ASM(const s32, "main", func_80072900);
INCLUDE_ASM(const s32, "main", func_80072944);
INCLUDE_ASM(const s32, "main", __calls_copy_controller_data);
INCLUDE_ASM(const s32, "main", func_8007307C);
INCLUDE_ASM(const s32, "main", func_80073164);
INCLUDE_ASM(const s32, "main", func_8007328C);
INCLUDE_ASM(const s32, "main", func_8007337C);
INCLUDE_ASM(const s32, "main", func_8007338C);
INCLUDE_ASM(const s32, "main", func_80073398);
INCLUDE_ASM(const s32, "main", func_800733F8);
INCLUDE_ASM(const s32, "main", func_800737A0);
INCLUDE_ASM(const s32, "main", func_8007382C);
INCLUDE_ASM(const s32, "main", func_80073AE4);
INCLUDE_ASM(const s32, "main", func_80073BD0);
INCLUDE_ASM(const s32, "main", func_80073C48);
INCLUDE_ASM(const s32, "main", func_80073CB0);
INCLUDE_ASM(const s32, "main", func_80073ED8);
INCLUDE_ASM(const s32, "main", func_80073F58);
INCLUDE_ASM(const s32, "main", func_80073FD4);
INCLUDE_ASM(const s32, "main", func_80074050);
INCLUDE_ASM(const s32, "main", func_80074080);
INCLUDE_ASM(const s32, "main", func_800740F0);
INCLUDE_ASM(const s32, "main", func_800741A8);
INCLUDE_ASM(const s32, "main", func_8007422C);
INCLUDE_ASM(const s32, "main", func_800742F4);
INCLUDE_ASM(const s32, "main", func_80074494);

View File

@ -9,6 +9,8 @@ __inc_menu_timer = 0x8019BCEC; // type:func rom:0x1D21EC
__calls_inc_menu_timer = 0x80177A38; // rom:0x4D938 __calls_inc_menu_timer = 0x80177A38; // rom:0x4D938
__MENU_INDEX = 0x801BA94C; __MENU_INDEX = 0x801BA94C;
__GLOBAL_CONT_STATUS = 0x800C4B38;
musCurrentPtrBank = 0x800B182C; musCurrentPtrBank = 0x800B182C;
osViModeTable = 0x800AA7E0; osViModeTable = 0x800AA7E0;
@ -167,13 +169,13 @@ proutSprintf = 0x80093508;
osSyncPrintf = 0x80093540; osSyncPrintf = 0x80093540;
rmonPrintf = 0x80093554; rmonPrintf = 0x80093554;
bzero = 0x80093380;
strchr = 0x80093420; strchr = 0x80093420;
strlen = 0x80093460; strlen = 0x80093460;
memcpy = 0x80093484; memcpy = 0x80093484;
_bcmp = 0x80092F50; bcopy = 0x80093060;
_bcopy = 0x80093060; bcmp = 0x80092F50;
bzero = 0x80093380;
MusHandlePause = 0x80081EA4; MusHandlePause = 0x80081EA4;
MusHandleUnpause = 0x80081EC8; MusHandleUnpause = 0x80081EC8;