sm64/include/memory.h

175 lines
4.7 KiB
C

/********************************************************************************
memory.h: Ultra 64 MARIO Brothers include file
Copyright (c) 1996 Nintendo co., ltd. All rights reserved
February 27, 1986
********************************************************************************/
#ifndef MEMORY_H
#define MEMORY_H
#define MM_ALLOC_FORE 0
#define MM_ALLOC_BACK 1
#define MM_DATA_SEGMENT 0
#define MM_BOOT_SEGMENT 1
#define MM_RSRC_COMMON 0
#define MM_RSRC_EACH 1
#ifndef ASSEMBLER
/********************************************************************************
*
* Type definition.
*
********************************************************************************/
/*-------------------------------------------------------------------------------
* Arena memory managiment record.
*/
typedef struct {
int size; /* size of the arena memory */
int used; /* size of used memory */
MemPtr buff; /* pointer to the arena memory */
MemPtr free; /* pointer to the free memory */
} ArenaRecord, *ArenaPtr;
/*-------------------------------------------------------------------------------
* Heap memory managiment record.
*/
typedef struct {
int size; /* size of the heap memory */
MemPtr buff; /* pointer to the heap memory */
MemPtr free; /* pointer to the free memory block */
long reserved;
} HeapRecord, *HeapPtr;
/*-------------------------------------------------------------------------------
* Segment information record.
*/
typedef struct {
short flags; /* flags */
short number; /* segment number */
MemPtr romtop; /* top address on ROM */
MemPtr rombtm; /* bottom address +1 on ROM */
MemPtr memory; /* top address on virtual memory */
} SegmentInfo;
/*-------------------------------------------------------------------------------
* Memory partition table.
*/
typedef struct {
ulong nitems; /* number of items */
MemPtr topaddr; /* pointer to the top of data */
struct {
ulong offset; /* data offset */
ulong length; /* data length */
} item[1]; /* item table (variable length) */
} Partition;
/*-------------------------------------------------------------------------------
* Partial memory management record.
*/
typedef struct {
Partition *ptable; /* pointer to the partition table */
MemPtr last; /* pointer to the last access memory */
MemPtr buffer; /* pointer to the buffer memory */
} PartialRecord, *PartialPtr;
/*-------------------------------------------------------------------------------
* Resource management record.
*/
typedef struct {
Partition *ptable; /* pointer to the partition table */
MemPtr loadmap[1]; /* pointer to the load map */
} ResourceRecord, *ResourcePtr;
extern HeapPtr systemHeap; /* pointer to the system heap memory */
/********************************************************************************
*
* Function prototypes
*
********************************************************************************/
/* RCP segment management */
extern uint SetSegment(int number, void *cpuAddr);
extern void *GetSegment(int number);
extern void *SegmentToVirtual(void *cpuAddr);
extern void *VirtualToSegment(int number, void *cpuAddr);
extern void StoreSegments(void);
/* Free zone management */
extern void InitFreeZone(MemPtr topAddr, MemPtr btmAddr);
extern void *AllocFreeZone(uint size, int mode);
extern uint PurgeFreeZone(void *address);
extern void *ResizeFreeZone(void *address, uint size);
extern uint FreeZoneSize(void);
extern uint LinkFreeZone(void);
extern uint UnlinkFreeZone(void);
/* Static data loader */
extern MemPtr
LoadSegment(int number, char *romStart, char *romEnd, int mode);
extern MemPtr
LoadData(char *romStart, char *romEnd, int mode);
extern MemPtr
LoadProgram(char *ramAddr, char *romStart, char *romEnd);
extern MemPtr
LoadCompressed(int number, char *romStart, char *romEnd);
extern MemPtr
LoadPressTexture(int number, char *romStart, char *romEnd);
extern void
LoadUserLibrary(void);
/* Arena memory management */
extern ArenaPtr InitArena(int size, int mode);
extern void *AllocArena(ArenaPtr arena, int size);
extern void *ResizeArena(ArenaPtr arena, int size);
/* Heap memory management */
extern HeapPtr InitHeap(int size, int mode);
extern void *AllocHeap(HeapPtr heap, int memsize);
extern void *FreeHeap(HeapPtr heap, void *memory);
/* Dynamic memory management */
extern void *AllocDynamic(int size);
extern Partition *
LoadPartitionTable(MemPtr romAddr);
extern void
InitPartial(PartialPtr partial, MemPtr romAddr, MemPtr buffer);
extern int
ReadPartialData(PartialPtr partial, int index);
#endif
#endif