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) void _vmem_protect_vram(u32 addr, u32 size)
{ {
addr &= VRAM_MASK; 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 + 0x04000000 + addr, size); // P0
//mem_region_lock(virt_ram_base + 0x06000000 + addr, size); // P0 - mirror //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) void _vmem_unprotect_vram(u32 addr, u32 size)
{ {
addr &= VRAM_MASK; 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 + 0x04000000 + addr, size); // P0
//mem_region_unlock(virt_ram_base + 0x06000000 + addr, size); // P0 - mirror //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) static void bm_LockPage(u32 addr)
{ {
addr = addr & (RAM_MASK - PAGE_MASK); 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); mem_region_lock(virt_ram_base + 0x0C000000 + addr, PAGE_SIZE);
if (_nvmem_4gb_space()) if (_nvmem_4gb_space())
{ {
@ -447,7 +447,7 @@ static void bm_LockPage(u32 addr)
static void bm_UnlockPage(u32 addr) static void bm_UnlockPage(u32 addr)
{ {
addr = addr & (RAM_MASK - PAGE_MASK); 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); mem_region_unlock(virt_ram_base + 0x0C000000 + addr, PAGE_SIZE);
if (_nvmem_4gb_space()) if (_nvmem_4gb_space())
{ {
@ -719,7 +719,7 @@ void RuntimeBlockInfo::Discard()
void RuntimeBlockInfo::SetProtectedFlags() void RuntimeBlockInfo::SetProtectedFlags()
{ {
// Don't write protect rom and BIOS/IP.BIN (Grandia II) // 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; this->read_only = false;
unprotected_blocks++; unprotected_blocks++;
@ -778,7 +778,7 @@ bool bm_RamWriteAccess(void *p)
return false; return false;
} }
u32 addr = (u8*)p - virt_ram_base; 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 // If mmu enabled, let vmem32 manage user space
// shouldn't be necessary since it's called first // shouldn't be necessary since it's called first
return false; return false;