Mario Kart 64
Loading...
Searching...
No Matches
memory.h File Reference
#include "common_structs.h"
#include "course_offsets.h"
Include dependency graph for memory.h:

Go to the source code of this file.

Data Structures

struct  MainPoolBlock
 
struct  MainPoolState
 
struct  UnkStruct802AF7B4
 
struct  UnkStruct_802B8CD4
 
struct  AllocOnlyPool
 

Macros

#define MEMORY_POOL_LEFT   0
 
#define MEMORY_POOL_RIGHT   1
 
#define ALIGN4(val)
 

Functions

u8 * load_lakitu_tlut_x64 (const char **textureList, size_t length)
 
void * get_next_available_memory_addr (uintptr_t)
 Returns the address of the next available memory location and updates the memory pointer to reference the next location of available memory based provided size to allocate.
 
uintptr_t set_segment_base_addr (s32, void *)
 Stores the physical memory addr for segmented memory in gSegmentTable using the segment number as an index.
 
void * get_segment_base_addr (s32)
 Returns the physical memory location of a segment.
 
void * segmented_to_virtual (const void *)
 converts an RSP segment + offset address to a normal memory address
 
void * segment_offset_to_virtual (uint32_t, uint32_t)
 
void * segment_vtx_to_virtual (size_t offset)
 
void * segmented_texture_to_virtual (uintptr_t addr)
 
void * segmented_uintptr_t_to_virtual (uintptr_t)
 
Gfx * segmented_gfx_to_virtual (const void *)
 
void replace_segmented_textures_with_o2r_textures (Gfx *gfx, const course_texture *textures)
 
void move_segment_table_to_dmem (void)
 
void initialize_memory_pool (void)
 Sets the starting location for allocating memory and calculates pool size.
 
void * decompress_segments (u8 *, u8 *)
 
void * allocate_memory (size_t)
 Allocates memory and adjusts gFreeMemorySize.
 
void * load_data (uintptr_t, uintptr_t)
 Allocate and DMA.
 
void func_802A7D54 (s32, s32)
 
void func_802A86A8 (CourseVtx *data, Vtx *vtx, size_t arg1)
 
void displaylist_unpack (uintptr_t *data, uintptr_t finalDisplaylistOffset, u32 arg2)
 
void main_pool_init (uintptr_t, uintptr_t)
 
void * main_pool_alloc (uintptr_t, uintptr_t)
 
uintptr_t main_pool_free (void *)
 
void * main_pool_realloc (void *, uintptr_t)
 
uintptr_t main_pool_available (void)
 
uintptr_t main_pool_push_state (void)
 
uintptr_t main_pool_pop_state (void)
 
void * func_802A80B0 (u8 *, u8 *, u8 *)
 
void func_802A81EC (void)
 
struct AllocOnlyPoolalloc_only_pool_init (uintptr_t, uintptr_t)
 
uintptr_t func_802A82AC (s32)
 
uintptr_t func_802A8348 (s32, s32, s32)
 
u8 * dma_textures (const char *texture, size_t arg1, size_t arg2)
 
uintptr_t MIO0_0F (u8 *, uintptr_t, uintptr_t)
 
void func_802A8844 (void)
 
void unpack_lights (Gfx *, u8 *, s8)
 
void unpack_displaylist (Gfx *, u8 *, s8)
 
void unpack_end_displaylist (Gfx *, u8 *, s8)
 
void unpack_set_geometry_mode (Gfx *, u8 *, s8)
 
void unpack_clear_geometry_mode (Gfx *, u8 *, s8)
 
void unpack_cull_displaylist (Gfx *, u8 *, s8)
 
void unpack_combine_mode1 (Gfx *, u8 *, uintptr_t)
 
void unpack_combine_mode2 (Gfx *, u8 *, uintptr_t)
 
void unpack_combine_mode_shade (Gfx *, u8 *, uintptr_t)
 
void unpack_combine_mode4 (Gfx *, u8 *, uintptr_t)
 
void unpack_combine_mode5 (Gfx *, u8 *, uintptr_t)
 
void unpack_render_mode_opaque (Gfx *, u8 *, uintptr_t)
 
void unpack_render_mode_tex_edge (Gfx *, u8 *, uintptr_t)
 
void unpack_render_mode_translucent (Gfx *, u8 *, uintptr_t)
 
void unpack_render_mode_opaque_decal (Gfx *, u8 *, uintptr_t)
 
void unpack_render_mode_translucent_decal (Gfx *, u8 *, uintptr_t)
 
void unpack_tile_sync (Gfx *, u8 *, s8)
 
void unpack_tile_load_sync (Gfx *, u8 *, s8)
 
void unpack_texture_on (Gfx *, u8 *, s8)
 
void unpack_texture_off (Gfx *, u8 *, s8)
 
void load_course (s32)
 Loads & DMAs course data. Vtx, textures, displaylists, etc.
 
uintptr_t set_segment_base_addr_x64 (s32, void *)
 

Variables

u8 _other_texturesSegmentRomStart []
 

Macro Definition Documentation

◆ ALIGN4

#define ALIGN4 ( val)
Value:
(((val) + 0x3) & ~0x3)

◆ MEMORY_POOL_LEFT

#define MEMORY_POOL_LEFT   0

◆ MEMORY_POOL_RIGHT

#define MEMORY_POOL_RIGHT   1

Function Documentation

◆ alloc_only_pool_init()

struct AllocOnlyPool * alloc_only_pool_init ( uintptr_t size,
uintptr_t side )
Here is the call graph for this function:

◆ allocate_memory()

void * allocate_memory ( size_t size)

Allocates memory and adjusts gFreeMemorySize.

Here is the caller graph for this function:

◆ decompress_segments()

void * decompress_segments ( u8 * start,
u8 * end )
Here is the call graph for this function:
Here is the caller graph for this function:

◆ displaylist_unpack()

void displaylist_unpack ( uintptr_t * data,
uintptr_t finalDisplaylistOffset,
u32 arg2 )

Unpacks course packed displaylists by iterating through each byte of the packed file. Each packed displaylist entry has an opcode and any number of arguments. The opcodes range from 0 to 87 which are used to run the relevant unpack function. The file pointer increments when arguments are used. This way, displaylist_unpack will always read an opcode and not an argument by accident.

Warning
opcodes that do not contain a definition in the switch are ignored. If an undefined opcode contained arguments the unpacker might try to unpack those arguments. This issue is prevented so long as the packed file adheres to correct opcodes and unpack code increments the file pointer the correct number of times.
Here is the call graph for this function:
Here is the caller graph for this function:

◆ dma_textures()

u8 * dma_textures ( const char * texture,
size_t arg1,
size_t arg2 )
Here is the call graph for this function:
Here is the caller graph for this function:

◆ func_802A7D54()

void func_802A7D54 ( s32 arg0,
s32 arg1 )

◆ func_802A80B0()

void * func_802A80B0 ( u8 * dest,
u8 * srcStart,
u8 * srcEnd )
Here is the call graph for this function:
Here is the caller graph for this function:

◆ func_802A81EC()

void func_802A81EC ( void )
Here is the call graph for this function:

◆ func_802A82AC()

uintptr_t func_802A82AC ( s32 arg0)

◆ func_802A8348()

uintptr_t func_802A8348 ( s32 arg0,
s32 arg1,
s32 arg2 )
Here is the call graph for this function:

◆ func_802A86A8()

void func_802A86A8 ( CourseVtx * data,
Vtx * vtx,
size_t arg1 )
Here is the caller graph for this function:

◆ func_802A8844()

void func_802A8844 ( void )

◆ get_next_available_memory_addr()

void * get_next_available_memory_addr ( uintptr_t size)

Returns the address of the next available memory location and updates the memory pointer to reference the next location of available memory based provided size to allocate.

Parameters
sizeof memory to allocate.
Returns
Address of free memory
Here is the caller graph for this function:

◆ get_segment_base_addr()

void * get_segment_base_addr ( s32 segment)

Returns the physical memory location of a segment.

Parameters
permitssegment numbers from 0x0 to 0xF.

◆ initialize_memory_pool()

void initialize_memory_pool ( void )

Sets the starting location for allocating memory and calculates pool size.

Default memory size, 701.984 Kilobytes.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ load_course()

void load_course ( s32 courseId)

Loads & DMAs course data. Vtx, textures, displaylists, etc.

Parameters
courseId
Here is the call graph for this function:
Here is the caller graph for this function:

◆ load_data()

void * load_data ( uintptr_t startAddr,
uintptr_t endAddr )

Allocate and DMA.

Here is the call graph for this function:

◆ load_lakitu_tlut_x64()

u8 * load_lakitu_tlut_x64 ( const char ** textureList,
size_t length )
Here is the call graph for this function:
Here is the caller graph for this function:

◆ main_pool_alloc()

void * main_pool_alloc ( uintptr_t size,
uintptr_t side )

Allocate a block of memory from the pool of given size, and from the specified side of the pool (MEMORY_POOL_LEFT or MEMORY_POOL_RIGHT). If there is not enough space, return NULL.

Here is the caller graph for this function:

◆ main_pool_available()

uintptr_t main_pool_available ( void )

◆ main_pool_free()

uintptr_t main_pool_free ( void * addr)

Free a block of memory that was allocated from the pool. The block must be the most recently allocated block from its end of the pool, otherwise all newer blocks are freed as well. Return the amount of free space left in the pool.

Here is the caller graph for this function:

◆ main_pool_init()

void main_pool_init ( uintptr_t start,
uintptr_t end )

◆ main_pool_pop_state()

uintptr_t main_pool_pop_state ( void )

Restore pool state from a previous call to main_pool_push_state. Return the amount of free space left in the pool.

◆ main_pool_push_state()

uintptr_t main_pool_push_state ( void )
Here is the call graph for this function:

◆ main_pool_realloc()

void * main_pool_realloc ( void * addr,
uintptr_t size )
Here is the call graph for this function:

◆ MIO0_0F()

uintptr_t MIO0_0F ( u8 * arg0,
uintptr_t arg1,
uintptr_t arg2 )
Here is the call graph for this function:
Here is the caller graph for this function:

◆ move_segment_table_to_dmem()

void move_segment_table_to_dmem ( void )
Here is the caller graph for this function:

◆ replace_segmented_textures_with_o2r_textures()

void replace_segmented_textures_with_o2r_textures ( Gfx * gfx,
const course_texture * textures )
Here is the call graph for this function:
Here is the caller graph for this function:

◆ segment_offset_to_virtual()

void * segment_offset_to_virtual ( uint32_t segment,
uint32_t offset )
Here is the caller graph for this function:

◆ segment_vtx_to_virtual()

void * segment_vtx_to_virtual ( size_t offset)
Here is the caller graph for this function:

◆ segmented_gfx_to_virtual()

Gfx * segmented_gfx_to_virtual ( const void * addr)

◆ segmented_texture_to_virtual()

void * segmented_texture_to_virtual ( uintptr_t addr)

◆ segmented_to_virtual()

void * segmented_to_virtual ( const void * addr)

converts an RSP segment + offset address to a normal memory address

◆ segmented_uintptr_t_to_virtual()

void * segmented_uintptr_t_to_virtual ( uintptr_t addr)

◆ set_segment_base_addr()

uintptr_t set_segment_base_addr ( s32 segment,
void * addr )

Stores the physical memory addr for segmented memory in gSegmentTable using the segment number as an index.

This function takes a segment number and a pointer to a memory address, and stores the address in the gSegmentTable array at the specified segment index. The stored address is truncated to a 29-bit value to ensure that it fits within the memory address. This allows converting between segmented memory and physical memory.

Parameters
segmentA segment number from 0x0 to 0xF to set the base address.
addrA pointer containing the physical memory address of the data.
Returns
The stored base address, truncated to a 29-bit value.
Here is the caller graph for this function:

◆ set_segment_base_addr_x64()

uintptr_t set_segment_base_addr_x64 ( s32 segment,
void * addr )
Here is the caller graph for this function:

◆ unpack_clear_geometry_mode()

void unpack_clear_geometry_mode ( Gfx * ,
u8 * ,
s8  )

◆ unpack_combine_mode1()

void unpack_combine_mode1 ( Gfx * ,
u8 * ,
uintptr_t  )

◆ unpack_combine_mode2()

void unpack_combine_mode2 ( Gfx * ,
u8 * ,
uintptr_t  )

◆ unpack_combine_mode4()

void unpack_combine_mode4 ( Gfx * ,
u8 * ,
uintptr_t  )

◆ unpack_combine_mode5()

void unpack_combine_mode5 ( Gfx * ,
u8 * ,
uintptr_t  )

◆ unpack_combine_mode_shade()

void unpack_combine_mode_shade ( Gfx * ,
u8 * ,
uintptr_t  )

◆ unpack_cull_displaylist()

void unpack_cull_displaylist ( Gfx * ,
u8 * ,
s8  )

◆ unpack_displaylist()

void unpack_displaylist ( Gfx * ,
u8 * ,
s8  )

◆ unpack_end_displaylist()

void unpack_end_displaylist ( Gfx * ,
u8 * ,
s8  )

◆ unpack_lights()

void unpack_lights ( Gfx * ,
u8 * ,
s8  )

◆ unpack_render_mode_opaque()

void unpack_render_mode_opaque ( Gfx * ,
u8 * ,
uintptr_t  )

◆ unpack_render_mode_opaque_decal()

void unpack_render_mode_opaque_decal ( Gfx * ,
u8 * ,
uintptr_t  )

◆ unpack_render_mode_tex_edge()

void unpack_render_mode_tex_edge ( Gfx * ,
u8 * ,
uintptr_t  )

◆ unpack_render_mode_translucent()

void unpack_render_mode_translucent ( Gfx * ,
u8 * ,
uintptr_t  )

◆ unpack_render_mode_translucent_decal()

void unpack_render_mode_translucent_decal ( Gfx * ,
u8 * ,
uintptr_t  )

◆ unpack_set_geometry_mode()

void unpack_set_geometry_mode ( Gfx * ,
u8 * ,
s8  )

◆ unpack_texture_off()

void unpack_texture_off ( Gfx * ,
u8 * ,
s8  )

◆ unpack_texture_on()

void unpack_texture_on ( Gfx * ,
u8 * ,
s8  )

◆ unpack_tile_load_sync()

void unpack_tile_load_sync ( Gfx * gfx,
u8 * args,
s8 opcode )
Here is the call graph for this function:
Here is the caller graph for this function:

◆ unpack_tile_sync()

void unpack_tile_sync ( Gfx * gfx,
u8 * args,
s8 opcode )
Here is the caller graph for this function:

Variable Documentation

◆ _other_texturesSegmentRomStart

u8 _other_texturesSegmentRomStart[]
extern