Fix vram and code block protection in 32-bit mode

This commit is contained in:
flyinghead 2019-08-28 14:08:13 +02:00
parent d768481a41
commit 02b450ff19
2 changed files with 6 additions and 6 deletions

View File

@ -694,7 +694,7 @@ void _vmem_enable_mmu(bool enable)
void _vmem_protect_vram(u32 addr, u32 size)
{
addr &= VRAM_MASK;
if (!mmu_enabled())
if (!mmu_enabled() || !_nvmem_4gb_space())
{
mem_region_lock(virt_ram_base + 0x04000000 + addr, size); // P0
//mem_region_lock(virt_ram_base + 0x06000000 + addr, size); // P0 - mirror
@ -728,7 +728,7 @@ void _vmem_protect_vram(u32 addr, u32 size)
void _vmem_unprotect_vram(u32 addr, u32 size)
{
addr &= VRAM_MASK;
if (!mmu_enabled())
if (!mmu_enabled() || !_nvmem_4gb_space())
{
mem_region_unlock(virt_ram_base + 0x04000000 + addr, size); // P0
//mem_region_unlock(virt_ram_base + 0x06000000 + addr, size); // P0 - mirror

View File

@ -434,7 +434,7 @@ void bm_Reset()
static void bm_LockPage(u32 addr)
{
addr = addr & (RAM_MASK - PAGE_MASK);
if (!mmu_enabled())
if (!mmu_enabled() || !_nvmem_4gb_space())
mem_region_lock(virt_ram_base + 0x0C000000 + addr, PAGE_SIZE);
if (_nvmem_4gb_space())
{
@ -447,7 +447,7 @@ static void bm_LockPage(u32 addr)
static void bm_UnlockPage(u32 addr)
{
addr = addr & (RAM_MASK - PAGE_MASK);
if (!mmu_enabled())
if (!mmu_enabled() || !_nvmem_4gb_space())
mem_region_unlock(virt_ram_base + 0x0C000000 + addr, PAGE_SIZE);
if (_nvmem_4gb_space())
{
@ -719,7 +719,7 @@ void RuntimeBlockInfo::Discard()
void RuntimeBlockInfo::SetProtectedFlags()
{
// Don't write protect rom and BIOS/IP.BIN (Grandia II)
if (!IsOnRam(addr) || (vaddr & 0x1FFF0000) == 0x0c000000)
if (!IsOnRam(addr) || (addr & 0x1FFF0000) == 0x0c000000)
{
this->read_only = false;
unprotected_blocks++;
@ -778,7 +778,7 @@ bool bm_RamWriteAccess(void *p)
return false;
}
u32 addr = (u8*)p - virt_ram_base;
if (mmu_enabled() && (addr & 0x80000000) == 0)
if (mmu_enabled() && _nvmem_4gb_space() && (addr & 0x80000000) == 0)
// If mmu enabled, let vmem32 manage user space
// shouldn't be necessary since it's called first
return false;