Fix MMIO on SPU

Thanks Digitaldude555 for reporting the bug and @elad335 for pinging me
This commit is contained in:
Nekotekina 2018-04-01 22:37:35 +03:00
parent 402ca480cd
commit 0e74f2e340
1 changed files with 3 additions and 3 deletions

View File

@ -777,7 +777,7 @@ bool SPUThread::do_list_transfer(spu_mfc_cmd& args)
if (size)
{
if (!vm::check_addr(addr, size, vm::page_readable | (args.cmd & MFC_PUT_CMD ? vm::page_writable : 0)))
if (!vm::check_addr(addr, size, vm::page_allocated | vm::page_readable | (args.cmd & MFC_PUT_CMD ? vm::page_writable : 0)) && args.eal < RAW_SPU_BASE_ADDR)
{
Emu.Pause();
state += cpu_flag::stop;
@ -922,7 +922,7 @@ void SPUThread::do_mfc()
{
vm::reader_lock lock;
if (!vm::check_addr(args.eal, args.size, vm::page_readable | (args.cmd & MFC_PUT_CMD ? vm::page_writable : 0)))
if (!vm::check_addr(args.eal, args.size, vm::page_allocated | vm::page_readable | (args.cmd & MFC_PUT_CMD ? vm::page_writable : 0)) && args.eal < RAW_SPU_BASE_ADDR)
{
Emu.Pause();
state += cpu_flag::stop;
@ -1207,7 +1207,7 @@ bool SPUThread::process_mfc_cmd(spu_mfc_cmd args)
{
vm::reader_lock lock;
if (!vm::check_addr(args.eal, args.size, vm::page_readable | (args.cmd & MFC_PUT_CMD ? vm::page_writable : 0)))
if (!vm::check_addr(args.eal, args.size, vm::page_allocated | vm::page_readable | (args.cmd & MFC_PUT_CMD ? vm::page_writable : 0)) && args.eal < RAW_SPU_BASE_ADDR)
{
Emu.Pause();
state += cpu_flag::stop;