User Tools

Site Tools


yoshis_story:overlay_files

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

yoshis_story:overlay_files [2019/10/04 17:14] (current)
shygoo created
Line 1: Line 1:
 +====== Overlay Files ======
 +Yoshi'​s Story uses overlays to save memory. The structure of an overlay file is as follows:
  
 +<code C>
 +u8  text[textSize]
 +u8  data[dataSize]
 +u8  rodata[rodataSize]
 +meta {
 +    u32 textSize
 +    u32 dataSize
 +    u32 rodataSize
 +    u32 bssSize
 +    u32 numRelocations
 +    u32 relocations[numRelocations]
 +}
 +u32 metaSize
 +</​code>​
 +
 +  * The position of the meta section is calculated by subtracting metaSize from the total size of the overlay file.
 +  * The .bss section is allocated immediately after the overlay file in memory.
 +
 +Relocation bitfields:
 +<​code>​ss -- rrrr oooooooooooooooooooooooo</​code>​
 +
 +^Bitfield^Description^
 +|s|Section (0 = invalid?, 1 = .text, 2 = .data, 3 = .rodata)|
 +|-|Unused?|
 +|r|Relocation type (4 = R_MIPS_26, 5 = R_MIPS_HI16,​ 6 = R_MIPS_LO16)|
 +|o|Offset|
 +
 +The dynamic linker routine is located at 0x80081430 in RAM.
 +<code C>​func_80081430(void *overlay_block,​ void *meta_section);</​code>​
 +
 +The game keeps track of active overlays using an array of the following struct at 0x800DA840 in RAM.
 +<code C>
 +struct OverlayEntry
 +{
 +    /*00*/ void *location; ​    // actual location in memory
 +    /*04*/ u16   ​objectId; ​    // id of the object that this overlay belongs to
 +           ​u8 ​   _pad[2];
 +    /*08*/ void *fakeMemStart;​ // fake start address
 +    /*0C*/ void *fakeMemEnd; ​  // fake end address
 +};
 +</​code>​
yoshis_story/overlay_files.txt ยท Last modified: 2019/10/04 17:14 by shygoo