mirror of
https://github.com/zeldaret/oot.git
synced 2025-02-27 03:24:45 +00:00
* split game states * split all GameState headers * match fig names * deduplicate headers from bad merge * split z64actor.h into z64actor_profile.h, z_actor_dlftbls.h * fix compile error * .bss
42 lines
1.4 KiB
C
42 lines
1.4 KiB
C
#ifndef LIBU64_OVERLAY_H
|
|
#define LIBU64_OVERLAY_H
|
|
|
|
#include "ultra64.h"
|
|
|
|
/* Relocation entry field getters */
|
|
#define RELOC_SECTION(reloc) ((reloc) >> 30)
|
|
#define RELOC_OFFSET(reloc) ((reloc) & 0xFFFFFF)
|
|
#define RELOC_TYPE_MASK(reloc) ((reloc) & 0x3F000000)
|
|
#define RELOC_TYPE_SHIFT 24
|
|
|
|
/* MIPS Relocation Types, matches the MIPS ELF spec */
|
|
#define R_MIPS_32 2
|
|
#define R_MIPS_26 4
|
|
#define R_MIPS_HI16 5
|
|
#define R_MIPS_LO16 6
|
|
|
|
/* Reloc section id, must fit in 2 bits otherwise the relocation format must be modified */
|
|
typedef enum RelocSectionId {
|
|
/* 0 */ RELOC_SECTION_NULL,
|
|
/* 1 */ RELOC_SECTION_TEXT,
|
|
/* 2 */ RELOC_SECTION_DATA,
|
|
/* 3 */ RELOC_SECTION_RODATA,
|
|
/* 4 */ RELOC_SECTION_MAX
|
|
} RelocSectionId;
|
|
|
|
typedef struct OverlayRelocationSection {
|
|
/* 0x00 */ u32 textSize;
|
|
/* 0x04 */ u32 dataSize;
|
|
/* 0x08 */ u32 rodataSize;
|
|
/* 0x0C */ u32 bssSize;
|
|
/* 0x10 */ u32 nRelocations;
|
|
/* 0x14 */ u32 relocations[1]; // size is nRelocations
|
|
} OverlayRelocationSection; // size >= 0x18
|
|
|
|
extern s32 gOverlayLogSeverity;
|
|
|
|
void* Overlay_AllocateAndLoad(uintptr_t vromStart, uintptr_t vromEnd, void* vramStart, void* vramEnd);
|
|
void Overlay_Relocate(void* allocatedRamAddr, OverlayRelocationSection* ovlRelocs, void* vramStart);
|
|
size_t Overlay_Load(uintptr_t vromStart, uintptr_t vromEnd, void* vramStart, void* vramEnd, void* allocatedRamAddr);
|
|
|
|
#endif
|