Files
banjo-kazooie/src/core1/code_136D0.c
2022-07-15 17:09:41 -05:00

153 lines
4.8 KiB
C

#include <ultra64.h>
#include "functions.h"
#include "variables.h"
typedef struct struct_2a_s{
char *name;
u32 ram_start;
u32 ram_end;
u32 unkC; //uncompressed_rom_range_start
u32 unk10; //uncompressed_rom_range_end
u32 code_start;
u32 code_end;
u32 data_start;
u32 data_end;
u32 bss_start;
u32 bss_end;
} struct2As;
extern u8 D_80363590;
extern u8 D_80379B90;
extern u8 D_80286F90;
extern u8 D_803863F0;
extern u8 D_803A5D00;
extern u8 D_F55960;
extern u8 D_1048560;
extern struct2As D_802762D0[] = {
{"gs", 0x80286F90, 0x803863F0, 0x00F55960, 0x01048560, 0x80286F90, 0x80363590, 0x80363590, 0x80379B90, 0x80379B90, 0x803863F0},
{"coshow", 0x803863F0, 0x80386430, 0x010BCD00, 0x010BCD20, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
{"whale", 0x803863F0, 0x8038A000, 0x01048560, 0x0104C0E0, 0x803863F0, 0x80389AA0, 0x80389AA0, 0x80389F70, 0x80389F70, 0x8038A000},
{"haunted", 0x803863F0, 0x8038C530, 0x01057710, 0x0105D7E0, 0x803863F0, 0x8038B9E0, 0x8038B9E0, 0x8038C4C0, 0x8038C4C0, 0x8038C530},
{"desert", 0x803863F0, 0x80391B10, 0x0104C0E0, 0x01057710, 0x803863F0, 0x80390BD0, 0x80390BD0, 0x80391A20, 0x80391A20, 0x80391B10},
{"beach", 0x803863F0, 0x8038D740, 0x0105D7E0, 0x01064AE0, 0x803863F0, 0x8038C3B0, 0x8038C3B0, 0x8038D6F0, 0x8038D6F0, 0x8038D740},
{"jungle", 0x803863F0, 0x80389CA0, 0x01064AE0, 0x01068370, 0x803863F0, 0x80389890, 0x80389890, 0x80389C80, 0x80389C80, 0x80389CA0},
{"swamp", 0x803863F0, 0x80391250, 0x01068370, 0x010731B0, 0x803863F0, 0x80390690, 0x80390690, 0x80391230, 0x80391230, 0x80391250},
{"ship", 0x803863F0, 0x803912D0, 0x010731B0, 0x0107E030, 0x803863F0, 0x80390050, 0x80390050, 0x80391270, 0x80391270, 0x803912D0},
{"snow", 0x803863F0, 0x803935F0, 0x0107E030, 0x0108AB50, 0x803863F0, 0x803919F0, 0x803919F0, 0x80392F10, 0x80392F10, 0x803935F0},
{"tree", 0x803863F0, 0x8038FDF0, 0x010B3320, 0x010BCD00, 0x803863F0, 0x8038EB50, 0x8038EB50, 0x8038FDD0, 0x8038FDD0, 0x8038FDF0},
{"training", 0x803863F0, 0x8038B330, 0x0108AB50, 0x0108FA80, 0x803863F0, 0x8038AAC0, 0x8038AAC0, 0x8038B320, 0x8038B320, 0x8038B330},
{"intro", 0x803863F0, 0x8038E9F0, 0x0108FA80, 0x01098070, 0x803863F0, 0x8038D350, 0x8038D350, 0x8038E9E0, 0x8038E9E0, 0x8038E9F0},
{"witch", 0x803863F0, 0x80395470, 0x01098070, 0x010A6FD0, 0x803863F0, 0x80392CB0, 0x80392CB0, 0x80395350, 0x80395350, 0x80395470},
{"battle", 0x803863F0, 0x80392930, 0x010A6FD0, 0x010B3320, 0x803863F0, 0x80391380, 0x80391380, 0x80392740, 0x80392740, 0x80392930},
};
extern s32 D_80276564 = 15;
enum overlay_e D_80282800;
void func_802513A4(void);
/* .code */
struct2As *func_802510F0(void){
//returns struct2As ptr with largest RAM size
int i;
struct2As * v1;
v1 = &D_802762D0[1];
for(i = 1; i < D_80276564; i++){
if(v1->ram_end - v1->ram_start < D_802762D0[i].ram_end - D_802762D0[i].ram_start){
v1 = &D_802762D0[i];
}
}
return v1;
}
s32 func_80251170(void){
return 0;
}
s32 func_80251178(void){
int sp24;
struct2As *sp20;
s32 sp1C;
s32 sp18;
sp20 = func_802510F0();
sp18 = func_802546DC();
sp1C = func_80251170();
return ((sp1C + (u32)&D_803A5D00) - sp20->ram_end) + sp18;
}
void func_802511C4(void){
s32 sp24;
int sp20;
int sp1C;
int sp18;
u32 tmp_v0;
sp24 = func_80251178();
sp18 = heap_get_size();
sp20 = func_802546DC();
sp1C = sp18 - sp20;
if(sp24 < 0){
func_802513A4();
tmp_v0 = sp1C + sp24;
while( tmp_v0 & 0xF){tmp_v0--;}
}
}
int get_loaded_overlay_id(void){
return D_80282800;
}
int is_overlay_loaded(int overlay_id){
return D_80282800 == overlay_id;
}
//load_overlay
#ifndef NONMATCHING
#pragma GLOBAL_ASM("asm/nonmatchings/core1/code_136D0/load_overlay.s")
#else
bool load_overlay(enum overlay_e overlay_id){
struct2As *rom_info;
if(overlay_id == 0)
return FALSE;
if(overlay_id == D_80282800)
return FALSE;
D_80282800 = overlay_id;
rom_info = &D_802762D0[D_80282800];
func_80253050(
overlay_id,
rom_info->ram_start, rom_info->ram_end,
rom_info->unkC, rom_info->unk10,
rom_info->code_start, rom_info->code_end,
rom_info->data_start, rom_info->data_end,
rom_info->bss_start, rom_info->bss_end
);
return TRUE;
}
#endif
//clear_loaded_overlay_id
s32 func_802512FC(void){
D_80282800 = 0;
}
#ifdef NONMATCHING
void func_80251308(void){
func_802512FC();
func_80253050(0, &D_80286F90, &D_803863F0, &D_F55960, &D_1048560, &D_80286F90, &D_80363590, &D_80363590, &D_80379B90, &D_80379B90, &D_803863F0);
func_802511C4();
}
#else
#pragma GLOBAL_ASM("asm/nonmatchings/core1/code_136D0/func_80251308.s")
#endif
void func_802513A4(void){}