61 lines
1.3 KiB
C
61 lines
1.3 KiB
C
#include <ultra64.h>
|
|
#include "functions.h"
|
|
#include "variables.h"
|
|
|
|
|
|
typedef struct{
|
|
u32 unk0;
|
|
u32 unk4;
|
|
}struct49s;
|
|
|
|
extern struct49s D_803FFE10[];
|
|
|
|
extern u8 D_8000E800;
|
|
extern u8 D_8002D500;
|
|
extern u32 D_8027BF2C;
|
|
extern u32 D_8027BF30;
|
|
|
|
void func_80253050(
|
|
s32 overlay_id, u32 ram_start, u32 ram_end, u32 rom_start, u32 rom_end,
|
|
u32 code_start, u32 code_end, u32 data_start, u32 data_end, u32 bss_start, u32 bss_end
|
|
){
|
|
u32 sp34;
|
|
u32 sp30;
|
|
u32 sp2C;
|
|
u32 *tmp;
|
|
|
|
osWriteBackDCacheAll();
|
|
osInvalDCache(ram_start, ram_end - ram_start);
|
|
osInvalICache(ram_start, ram_end - ram_start);
|
|
|
|
if(bss_start){
|
|
osInvalDCache(bss_start, bss_end - bss_start);
|
|
}
|
|
|
|
rom_start = D_803FFE10[overlay_id].unk0;
|
|
rom_end = D_803FFE10[overlay_id].unk4;
|
|
|
|
if(overlay_id){
|
|
func_80254008();
|
|
sp34 = &D_8000E800;
|
|
}
|
|
else{
|
|
sp34 = &D_8002D500;
|
|
}
|
|
func_802405F0(sp34, rom_start, rom_end - rom_start);
|
|
rarezip_uncompress(&sp34, &ram_start);
|
|
sp2C = D_8027BF2C;
|
|
sp30 = D_8027BF30;
|
|
rarezip_uncompress(&sp34, &ram_start);
|
|
|
|
if(bss_start){
|
|
bzero(bss_start, bss_end - bss_start);
|
|
osWriteBackDCacheAll();
|
|
tmp = (u32*) bss_start;
|
|
tmp[0] = sp2C;
|
|
tmp[1] = sp30;
|
|
tmp[2] = D_8027BF2C;
|
|
tmp[3] = D_8027BF30;
|
|
}
|
|
}
|