flycast/core/hw/sh4/modules/mmu.h

40 lines
988 B
C

#pragma once
#include "types.h"
#include "hw/sh4/sh4_mmr.h"
struct TLB_Entry
{
CCN_PTEH_type Address;
CCN_PTEL_type Data;
};
extern TLB_Entry UTLB[64];
extern TLB_Entry ITLB[4];
extern u32 sq_remap[64];
//These are working only for SQ remaps on ndce
bool UTLB_Sync(u32 entry);
void ITLB_Sync(u32 entry);
bool mmu_match(u32 va, CCN_PTEH_type Address, CCN_PTEL_type Data);
#if defined(NO_MMU)
bool inline mmu_TranslateSQW(u32 addr, u32* mapped) {
*mapped = sq_remap[(addr>>20)&0x3F] | (addr & 0xFFFE0);
return true;
}
#else
u8 DYNACALL mmu_ReadMem8(u32 addr);
u16 DYNACALL mmu_ReadMem16(u32 addr);
u16 DYNACALL mmu_IReadMem16(u32 addr);
u32 DYNACALL mmu_ReadMem32(u32 addr);
u64 DYNACALL mmu_ReadMem64(u32 addr);
void DYNACALL mmu_WriteMem8(u32 addr, u8 data);
void DYNACALL mmu_WriteMem16(u32 addr, u16 data);
void DYNACALL mmu_WriteMem32(u32 addr, u32 data);
void DYNACALL mmu_WriteMem64(u32 addr, u64 data);
bool mmu_TranslateSQW(u32 addr, u32* mapped);
#endif