rpcsx/rpcs3/Emu/Memory/Memory.h

93 lines
1.4 KiB
C
Raw Normal View History

#pragma once
2014-07-08 19:18:12 +02:00
#include "MemoryBlock.h"
using std::nullptr_t;
#define safe_delete(x) do {delete (x);(x)=nullptr;} while(0)
#define safe_free(x) do {free(x);(x)=nullptr;} while(0)
enum MemoryType
{
Memory_PS3,
Memory_PSV,
Memory_PSP,
};
class MemoryBase
{
2014-07-07 19:22:36 +02:00
std::vector<MemoryBlock*> MemoryBlocks;
public:
MemoryBlock* UserMemory;
DynamicMemoryBlock MainMem;
DynamicMemoryBlock Userspace;
DynamicMemoryBlock RSXFBMem;
DynamicMemoryBlock StackMem;
VirtualMemoryBlock RSXIOMem;
2014-09-06 15:33:01 +02:00
struct
{
DynamicMemoryBlock RAM;
DynamicMemoryBlock Userspace;
} PSV;
2014-09-06 15:33:01 +02:00
struct
{
DynamicMemoryBlock Scratchpad;
DynamicMemoryBlock VRAM;
DynamicMemoryBlock RAM;
DynamicMemoryBlock Kernel;
DynamicMemoryBlock Userspace;
} PSP;
bool m_inited;
MemoryBase()
{
m_inited = false;
}
~MemoryBase()
{
Close();
}
void RegisterPages(u32 addr, u32 size);
2014-07-09 01:04:36 +02:00
void UnregisterPages(u32 addr, u32 size);
2014-08-22 16:21:55 +02:00
void Init(MemoryType type);
2014-08-22 16:21:55 +02:00
void Close();
u32 GetUserMemTotalSize()
{
return UserMemory->GetSize();
}
u32 GetUserMemAvailSize()
{
return UserMemory->GetSize() - UserMemory->GetUsedSize();
}
u32 Alloc(const u32 size, const u32 align)
{
return UserMemory->AllocAlign(size, align);
}
bool Free(const u32 addr)
{
return UserMemory->Free(addr);
}
bool Map(const u32 addr, const u32 size);
2014-07-07 19:22:36 +02:00
bool Unmap(const u32 addr);
};
extern MemoryBase Memory;
#include "vm.h"