rpcsx/rpcs3/Emu/Memory/vm.h

146 lines
2.5 KiB
C
Raw Normal View History

#pragma once
namespace vm
{
bool map(u32 addr, u32 size, u32 flags);
bool unmap(u32 addr, u32 size = 0, u32 flags = 0);
u32 alloc(u32 size);
void unalloc(u32 addr);
template<typename T>
2014-08-31 11:54:12 +02:00
T* const get_ptr(u32 addr)
{
return (T*)((u8*)g_base_addr + addr);
}
2014-09-15 00:17:24 +02:00
template<typename T>
T& get_ref(u32 addr)
2014-08-31 11:54:12 +02:00
{
2014-09-15 00:17:24 +02:00
return *get_ptr<T>(addr);
2014-08-31 11:54:12 +02:00
}
namespace ps3
{
2014-09-15 00:17:24 +02:00
static u8 read8(u32 addr)
{
return *((u8*)g_base_addr + addr);
2014-09-15 00:17:24 +02:00
}
static void write8(u32 addr, u8 value)
{
*((u8*)g_base_addr + addr) = value;
2014-09-15 00:17:24 +02:00
}
2014-08-31 11:54:12 +02:00
static u16 read16(u32 addr)
{
return re16(*(u16*)((u8*)g_base_addr + addr));
2014-09-15 00:17:24 +02:00
}
2014-08-31 11:54:12 +02:00
static void write16(u32 addr, u16 value)
{
*(u16*)((u8*)g_base_addr + addr) = re16(value);
2014-09-15 00:17:24 +02:00
}
2014-08-31 11:54:12 +02:00
static u32 read32(u32 addr)
{
if (addr < RAW_SPU_BASE_ADDR || (addr % RAW_SPU_OFFSET) < RAW_SPU_PROB_OFFSET)
{
return re32(*(u32*)((u8*)g_base_addr + addr));
2014-08-31 11:54:12 +02:00
}
else
{
return Memory.ReadMMIO32((u32)addr);
}
}
static void write32(u32 addr, u32 value)
{
if (addr < RAW_SPU_BASE_ADDR || (addr % RAW_SPU_OFFSET) < RAW_SPU_PROB_OFFSET)
{
*(u32*)((u8*)g_base_addr + addr) = re32(value);
2014-08-31 11:54:12 +02:00
}
else
{
Memory.WriteMMIO32((u32)addr, value);
}
}
static u64 read64(u32 addr)
{
return re64(*(u64*)((u8*)g_base_addr + addr));
2014-09-15 00:17:24 +02:00
}
2014-08-31 11:54:12 +02:00
static void write64(u32 addr, u64 value)
{
*(u64*)((u8*)g_base_addr + addr) = re64(value);
2014-09-15 00:17:24 +02:00
}
2014-08-31 11:54:12 +02:00
static u128 read128(u32 addr)
{
return re128(*(u128*)((u8*)g_base_addr + addr));
2014-09-15 00:17:24 +02:00
}
2014-08-31 11:54:12 +02:00
static void write128(u32 addr, u128 value)
{
*(u128*)((u8*)g_base_addr + addr) = re128(value);
2014-09-15 00:17:24 +02:00
}
2014-08-31 11:54:12 +02:00
}
namespace psv
{
2014-09-15 00:17:24 +02:00
static u8 read8(u32 addr)
{
return *((u8*)g_base_addr + addr);
2014-09-15 00:17:24 +02:00
}
static void write8(u32 addr, u8 value)
{
*((u8*)g_base_addr + addr) = value;
2014-09-15 00:17:24 +02:00
}
2014-08-31 11:54:12 +02:00
static u16 read16(u32 addr)
{
return *(u16*)((u8*)g_base_addr + addr);
2014-08-31 11:54:12 +02:00
}
static void write16(u32 addr, u16 value)
{
*(u16*)((u8*)g_base_addr + addr) = value;
2014-08-31 11:54:12 +02:00
}
static u32 read32(u32 addr)
{
return *(u32*)((u8*)g_base_addr + addr);
2014-08-31 11:54:12 +02:00
}
static void write32(u32 addr, u32 value)
{
*(u32*)((u8*)g_base_addr + addr) = value;
2014-08-31 11:54:12 +02:00
}
static u64 read64(u32 addr)
{
return *(u64*)((u8*)g_base_addr + addr);
2014-08-31 11:54:12 +02:00
}
static void write64(u32 addr, u64 value)
{
*(u64*)((u8*)g_base_addr + addr) = value;
2014-08-31 11:54:12 +02:00
}
static u128 read128(u32 addr)
{
return *(u128*)((u8*)g_base_addr + addr);
2014-08-31 11:54:12 +02:00
}
static void write128(u32 addr, u128 value)
{
*(u128*)((u8*)g_base_addr + addr) = value;
2014-08-31 11:54:12 +02:00
}
}
}
#include "vm_ref.h"
2014-08-31 01:38:55 +02:00
#include "vm_ptr.h"
2014-09-19 21:11:43 +02:00
#include "vm_var.h"