mirror of
https://github.com/jkdansereau/goldeneye-pc-port.git
synced 2026-10-23 15:52:42 +02:00
279 lines
7.5 KiB
C
279 lines
7.5 KiB
C
#include "ultra64.h"
|
|
#include "bondgame.h"
|
|
#include "ramrom.h"
|
|
#include "deb.h"
|
|
|
|
/**
|
|
* @file deb.c
|
|
* This file contains debug related code.
|
|
*
|
|
* In particular, it seems to handle debug_notice_list
|
|
*/
|
|
|
|
/* bss */
|
|
extern char dword_CODE_bss_80060890[0x400];
|
|
|
|
|
|
|
|
/* data */
|
|
u32 D_800232E0[] = {0, 0};
|
|
u32 debug_notice_list[] = {0, 0, 0, 0};
|
|
char * debug_notice_list_data = &dword_CODE_bss_80060890;
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
* 5920 70004D20
|
|
* V0=p->match in debug.notice.list [800232E8] or NULL if not found
|
|
* accepts: A0=p->name, A1=p->data
|
|
*/
|
|
#ifdef NONMATCHING
|
|
void *debCheckIfDNLEntryExists(s32 arg0)
|
|
{
|
|
void *temp_s0;
|
|
void *phi_s0;
|
|
|
|
phi_s0 = debug_notice_list;
|
|
if (debug_notice_list != 0)
|
|
{
|
|
loop_1:
|
|
if (something_with_strings_0(phi_s0->unk8, arg0) == 0)
|
|
{
|
|
return phi_s0;
|
|
}
|
|
temp_s0 = phi_s0->unk0;
|
|
phi_s0 = temp_s0;
|
|
if (temp_s0 != 0)
|
|
{
|
|
goto loop_1;
|
|
}
|
|
}
|
|
return NULL;
|
|
}
|
|
#else
|
|
GLOBAL_ASM(
|
|
.text
|
|
glabel debCheckIfDNLEntryExists
|
|
/* 005920 70004D20 27BDFFE0 */ addiu $sp, $sp, -0x20
|
|
/* 005924 70004D24 AFB00014 */ sw $s0, 0x14($sp)
|
|
/* 005928 70004D28 3C108002 */ lui $s0, %hi(debug_notice_list)
|
|
/* 00592C 70004D2C 8E1032E8 */ lw $s0, %lo(debug_notice_list)($s0)
|
|
/* 005930 70004D30 AFB10018 */ sw $s1, 0x18($sp)
|
|
/* 005934 70004D34 00808825 */ move $s1, $a0
|
|
/* 005938 70004D38 1200000B */ beqz $s0, .L70004D68
|
|
/* 00593C 70004D3C AFBF001C */ sw $ra, 0x1c($sp)
|
|
/* 005940 70004D40 8E040008 */ lw $a0, 8($s0)
|
|
.L70004D44:
|
|
/* 005944 70004D44 0C002A13 */ jal something_with_strings_0
|
|
/* 005948 70004D48 02202825 */ move $a1, $s1
|
|
/* 00594C 70004D4C 54400004 */ bnezl $v0, .L70004D60
|
|
/* 005950 70004D50 8E100000 */ lw $s0, ($s0)
|
|
/* 005954 70004D54 10000005 */ b .L70004D6C
|
|
/* 005958 70004D58 02001025 */ move $v0, $s0
|
|
/* 00595C 70004D5C 8E100000 */ lw $s0, ($s0)
|
|
.L70004D60:
|
|
/* 005960 70004D60 5600FFF8 */ bnezl $s0, .L70004D44
|
|
/* 005964 70004D64 8E040008 */ lw $a0, 8($s0)
|
|
.L70004D68:
|
|
/* 005968 70004D68 00001025 */ move $v0, $zero
|
|
.L70004D6C:
|
|
/* 00596C 70004D6C 8FBF001C */ lw $ra, 0x1c($sp)
|
|
/* 005970 70004D70 8FB00014 */ lw $s0, 0x14($sp)
|
|
/* 005974 70004D74 8FB10018 */ lw $s1, 0x18($sp)
|
|
/* 005978 70004D78 03E00008 */ jr $ra
|
|
/* 00597C 70004D7C 27BD0020 */ addiu $sp, $sp, 0x20
|
|
)
|
|
#endif
|
|
|
|
/**
|
|
* 5980 70004D80
|
|
* V0=p->entry of size A0 allocated in debug.notice.list; entry allocated in block 6 on failure
|
|
* accepts: A0=size
|
|
*/
|
|
#ifdef NONMATCHING
|
|
u32 debAllocateDNLEntry(s32 arg0)
|
|
{
|
|
u32 temp_v0;
|
|
|
|
temp_v0 = (debug_notice_list_data + arg0);
|
|
if (&tlbthread >= temp_v0)
|
|
{
|
|
debug_notice_list_data = temp_v0;
|
|
return debug_notice_list_data;
|
|
}
|
|
debug_notice_list_data = (u32) (temp_v0 - arg0);
|
|
return mempAllocBytesInBank(6);
|
|
}
|
|
#else
|
|
GLOBAL_ASM(
|
|
.text
|
|
glabel debAllocateDNLEntry
|
|
/* 005980 70004D80 3C028002 */ lui $v0, %hi(debug_notice_list_data)
|
|
/* 005984 70004D84 8C4232F8 */ lw $v0, %lo(debug_notice_list_data)($v0)
|
|
/* 005988 70004D88 3C0E8006 */ lui $t6, %hi(tlbthread)
|
|
/* 00598C 70004D8C 25CE0C90 */ addiu $t6, %lo(tlbthread) # addiu $t6, $t6, 0xc90
|
|
/* 005990 70004D90 00401825 */ move $v1, $v0
|
|
/* 005994 70004D94 00441021 */ addu $v0, $v0, $a0
|
|
/* 005998 70004D98 27BDFFE8 */ addiu $sp, $sp, -0x18
|
|
/* 00599C 70004D9C 01C2082B */ sltu $at, $t6, $v0
|
|
/* 0059A0 70004DA0 10200008 */ beqz $at, .L70004DC4
|
|
/* 0059A4 70004DA4 AFBF0014 */ sw $ra, 0x14($sp)
|
|
/* 0059A8 70004DA8 00441023 */ subu $v0, $v0, $a0
|
|
/* 0059AC 70004DAC 3C018002 */ lui $at, %hi(debug_notice_list_data)
|
|
/* 0059B0 70004DB0 AC2232F8 */ sw $v0, %lo(debug_notice_list_data)($at)
|
|
/* 0059B4 70004DB4 0C0025C8 */ jal mempAllocBytesInBank
|
|
/* 0059B8 70004DB8 24050006 */ li $a1, 6
|
|
/* 0059BC 70004DBC 10000005 */ b .L70004DD4
|
|
/* 0059C0 70004DC0 8FBF0014 */ lw $ra, 0x14($sp)
|
|
.L70004DC4:
|
|
/* 0059C4 70004DC4 3C018002 */ lui $at, %hi(debug_notice_list_data)
|
|
/* 0059C8 70004DC8 AC2232F8 */ sw $v0, %lo(debug_notice_list_data)($at)
|
|
/* 0059CC 70004DCC 00601025 */ move $v0, $v1
|
|
/* 0059D0 70004DD0 8FBF0014 */ lw $ra, 0x14($sp)
|
|
.L70004DD4:
|
|
/* 0059D4 70004DD4 27BD0018 */ addiu $sp, $sp, 0x18
|
|
/* 0059D8 70004DD8 03E00008 */ jr $ra
|
|
/* 0059DC 70004DDC 00000000 */ nop
|
|
)
|
|
#endif
|
|
|
|
|
|
|
|
|
|
/**
|
|
* 59E0 70004DE0
|
|
* V0=p->new entry added in debug.notice.list
|
|
* accepts: A0=p->name, A1=p->data
|
|
*/
|
|
#ifdef NONMATCHING
|
|
void debAllocateAndAddDNLEntry(s32 arg0, s32 arg1)
|
|
{
|
|
? temp_ret;
|
|
|
|
temp_ret = debAllocateDNLEntry(0x10);
|
|
*temp_ret = (s32) debug_notice_list;
|
|
temp_ret->unk4 = arg1;
|
|
temp_ret->unk8 = arg0;
|
|
debug_notice_list = temp_ret;
|
|
}
|
|
#else
|
|
GLOBAL_ASM(
|
|
.text
|
|
glabel debAllocateAndAddDNLEntry
|
|
/* 0059E0 70004DE0 27BDFFE8 */ addiu $sp, $sp, -0x18
|
|
/* 0059E4 70004DE4 AFBF0014 */ sw $ra, 0x14($sp)
|
|
/* 0059E8 70004DE8 AFA40018 */ sw $a0, 0x18($sp)
|
|
/* 0059EC 70004DEC AFA5001C */ sw $a1, 0x1c($sp)
|
|
/* 0059F0 70004DF0 0C001360 */ jal debAllocateDNLEntry
|
|
/* 0059F4 70004DF4 24040010 */ li $a0, 16
|
|
/* 0059F8 70004DF8 3C038002 */ lui $v1, %hi(debug_notice_list)
|
|
/* 0059FC 70004DFC 246332E8 */ addiu $v1, %lo(debug_notice_list) # addiu $v1, $v1, 0x32e8
|
|
/* 005A00 70004E00 8C6E0000 */ lw $t6, ($v1)
|
|
/* 005A04 70004E04 AC4E0000 */ sw $t6, ($v0)
|
|
/* 005A08 70004E08 8FAF001C */ lw $t7, 0x1c($sp)
|
|
/* 005A0C 70004E0C AC4F0004 */ sw $t7, 4($v0)
|
|
/* 005A10 70004E10 8FB80018 */ lw $t8, 0x18($sp)
|
|
/* 005A14 70004E14 AC580008 */ sw $t8, 8($v0)
|
|
/* 005A18 70004E18 8FBF0014 */ lw $ra, 0x14($sp)
|
|
/* 005A1C 70004E1C AC620000 */ sw $v0, ($v1)
|
|
/* 005A20 70004E20 27BD0018 */ addiu $sp, $sp, 0x18
|
|
/* 005A24 70004E24 03E00008 */ jr $ra
|
|
/* 005A28 70004E28 00000000 */ nop
|
|
)
|
|
#endif
|
|
|
|
|
|
|
|
|
|
/**
|
|
* 5A2C 70004E2C
|
|
* V0= p->debug.notice.list entry for boss_c_debug using data at 800241A0
|
|
*/
|
|
void debInitDebugNoticeList(void)
|
|
{
|
|
debCheckAddDebugNoticeListEntry(&D_800232E0, "deb_c_debug");
|
|
init_tlb();
|
|
}
|
|
|
|
|
|
/**
|
|
* 5A60 70004E60
|
|
* V0=p->debug.notice.list entry for name A1 and data A0; generates if not found
|
|
* accepts: A0=p->data, A1=p->name
|
|
*/
|
|
void debCheckAddDebugNoticeListEntry(void* data, char * string)
|
|
{
|
|
if (debCheckIfDNLEntryExists(string) == 0)
|
|
{
|
|
debAllocateAndAddDNLEntry(string, data);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
* 5A98 70004E98
|
|
* V0=0; scan debug.notice.list until a NULL pointer
|
|
* likely this would have executed some function for each entry...
|
|
*/
|
|
#ifdef NONMATCHING
|
|
void *debScanDNLEntries_NEUTERED(void)
|
|
{
|
|
void *temp_v0;
|
|
void *phi_v0;
|
|
|
|
phi_v0 = debug_notice_list;
|
|
if (debug_notice_list != 0)
|
|
{
|
|
loop_1:
|
|
temp_v0 = *phi_v0;
|
|
phi_v0 = temp_v0;
|
|
if (temp_v0 != 0)
|
|
{
|
|
goto loop_1;
|
|
}
|
|
}
|
|
return debug_notice_list;
|
|
}
|
|
#else
|
|
GLOBAL_ASM(
|
|
.text
|
|
glabel debScanDNLEntries_NEUTERED
|
|
/* 005A98 70004E98 3C028002 */ lui $v0, %hi(debug_notice_list)
|
|
/* 005A9C 70004E9C 8C4232E8 */ lw $v0, %lo(debug_notice_list)($v0)
|
|
/* 005AA0 70004EA0 10400004 */ beqz $v0, .L70004EB4
|
|
/* 005AA4 70004EA4 00000000 */ nop
|
|
/* 005AA8 70004EA8 8C420000 */ lw $v0, ($v0)
|
|
.L70004EAC:
|
|
/* 005AAC 70004EAC 5440FFFF */ bnezl $v0, .L70004EAC
|
|
/* 005AB0 70004EB0 8C420000 */ lw $v0, ($v0)
|
|
.L70004EB4:
|
|
/* 005AB4 70004EB4 03E00008 */ jr $ra
|
|
/* 005AB8 70004EB8 00000000 */ nop
|
|
)
|
|
#endif
|
|
|
|
|
|
|
|
/**
|
|
* 5ABC 70004EBC
|
|
* unconditional return
|
|
*/
|
|
void debRemoved70004EBC(void)
|
|
{
|
|
return;
|
|
}
|
|
|
|
/**
|
|
* 5AC4 70004EC4
|
|
* A0->SP+0, A1->SP+4, A2->SP+8
|
|
*/
|
|
void debRemoved70004EC4(s32 arg0, s32 arg1, s32 arg2)
|
|
{
|
|
return;
|
|
}
|
|
|
|
|