Fix vram and code block protection in 32-bit mode
This commit is contained in:
parent
d768481a41
commit
02b450ff19
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Reference in New Issue