pokestadium/include/memmap.h
2022-10-22 13:58:50 -04:00

51 lines
1.5 KiB
C

#ifndef _MEMMAP_H_
#define _MEMMAP_H_
struct MemoryMap {
uintptr_t vaddr;
size_t size;
};
// these are probably .bss symbols in memmap.c, but until I have more
// of bss mapped, not 100% sure if they go in that file. TODO: Migrate
extern struct MemoryMap gSegments[16];
extern struct MemoryMap gFragments[240];
/* MIPS Relocation Types */
#define R_MIPS_32 2
#define R_MIPS_26 4
#define R_MIPS_HI16 5
#define R_MIPS_LO16 6
struct RelocTable {
/* 0x00 */ u32 nRelocations;
/* 0x04 */ u32 relocations[]; // variable size
};
struct Fragment {
u32 ep1, ep2; // MIPS instructions to jump to the main function,
// typically something like "j 0x8xx00020; nop"
char str[8]; // "FRAGMENT"
u32 entrypoint; // typically 0x20
u32 relocOffset; // relocOffset
u32 sizeInRom;
u32 sizeInRam;
char data[]; // variable size
};
void Memmap_SetSegmentMap(u32 id, uintptr_t vaddr, u32 size);
uintptr_t Memmap_GetSegmentBaseVaddr(u32 id);
uintptr_t Memmap_GetSegmentVaddr(u32 mask);
u32 Memmap_GetSegmentVaddrMask(u32 i, uintptr_t addr);
void Memmap_ClearSegmentMemmap(u32 id);
void Memmap_SetSegments(Gfx** gfxDl);
void Memmap_RelocateFragment(u32 id, struct Fragment* fragment);
void Memmap_SetFragmentMap(u32 id, uintptr_t vaddr, u32 size);
uintptr_t Memmap_GetFragmentBaseVaddr(u32 id);
uintptr_t Memmap_GetFragmentVaddr(u32 mask);
u32 Memmap_GetFragmentVaddrMask(u32 i, uintptr_t addr);
void Memmap_ClearFragmentMemmap(u32 id);
uintptr_t Memmap_GetLoadedFragmentVaddr(uintptr_t addr);
#endif // _MEMMAP_H_