wince: fix load state hanging
This commit is contained in:
parent
af2ba55bac
commit
3e8cdc76f3
|
@ -56,7 +56,7 @@ extern int vmem_fd;
|
||||||
#define VMEM32_ERROR_NOT_MAPPED 0x100
|
#define VMEM32_ERROR_NOT_MAPPED 0x100
|
||||||
|
|
||||||
static const u64 VMEM32_SIZE = 0x100000000L;
|
static const u64 VMEM32_SIZE = 0x100000000L;
|
||||||
static const u64 KERNEL_SPACE = 0x80000000L;
|
static const u64 USER_SPACE = 0x80000000L;
|
||||||
static const u64 AREA7_ADDRESS = 0x7C000000L;
|
static const u64 AREA7_ADDRESS = 0x7C000000L;
|
||||||
|
|
||||||
#define VRAM_PROT_SEGMENT (1024 * 1024) // vram protection regions are grouped by 1MB segment
|
#define VRAM_PROT_SEGMENT (1024 * 1024) // vram protection regions are grouped by 1MB segment
|
||||||
|
@ -67,7 +67,7 @@ struct vram_lock {
|
||||||
u32 end;
|
u32 end;
|
||||||
};
|
};
|
||||||
static std::vector<vram_lock> vram_blocks[VRAM_SIZE / VRAM_PROT_SEGMENT];
|
static std::vector<vram_lock> vram_blocks[VRAM_SIZE / VRAM_PROT_SEGMENT];
|
||||||
static u8 sram_mapped_pages[KERNEL_SPACE / PAGE_SIZE / 8]; // bit set to 1 if page is mapped
|
static u8 sram_mapped_pages[USER_SPACE / PAGE_SIZE / 8]; // bit set to 1 if page is mapped
|
||||||
|
|
||||||
bool vmem32_inited;
|
bool vmem32_inited;
|
||||||
|
|
||||||
|
@ -368,7 +368,7 @@ void vmem32_flush_mmu()
|
||||||
//vmem32_flush++;
|
//vmem32_flush++;
|
||||||
vram_mapped_pages.clear();
|
vram_mapped_pages.clear();
|
||||||
memset(sram_mapped_pages, 0, sizeof(sram_mapped_pages));
|
memset(sram_mapped_pages, 0, sizeof(sram_mapped_pages));
|
||||||
vmem32_unmap_buffer(0, KERNEL_SPACE);
|
vmem32_unmap_buffer(0, USER_SPACE);
|
||||||
// TODO flush P3?
|
// TODO flush P3?
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -380,6 +380,7 @@ bool vmem32_init()
|
||||||
if (settings.dynarec.disable_vmem32 || !_nvmem_4gb_space())
|
if (settings.dynarec.disable_vmem32 || !_nvmem_4gb_space())
|
||||||
return false;
|
return false;
|
||||||
vmem32_inited = true;
|
vmem32_inited = true;
|
||||||
|
vmem32_flush_mmu();
|
||||||
return true;
|
return true;
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
|
@ -455,7 +455,13 @@ void* dc_run(void*)
|
||||||
do {
|
do {
|
||||||
reset_requested = false;
|
reset_requested = false;
|
||||||
|
|
||||||
sh4_cpu.Run();
|
try {
|
||||||
|
sh4_cpu.Run();
|
||||||
|
} catch (const FatalError& error) {
|
||||||
|
printf("FATAL: %s in %s:%d: %s\n", error.message.c_str(), error.file.c_str(), error.line, error.function.c_str());
|
||||||
|
reset_requested = false;
|
||||||
|
sh4_cpu.Stop();
|
||||||
|
}
|
||||||
|
|
||||||
SaveRomFiles(get_writable_data_path("/data/"));
|
SaveRomFiles(get_writable_data_path("/data/"));
|
||||||
if (reset_requested)
|
if (reset_requested)
|
||||||
|
@ -949,6 +955,7 @@ void dc_loadstate()
|
||||||
#ifndef NO_MMU
|
#ifndef NO_MMU
|
||||||
mmu_flush_table();
|
mmu_flush_table();
|
||||||
#endif
|
#endif
|
||||||
|
bm_Reset();
|
||||||
|
|
||||||
if ( ! dc_unserialize(&data_ptr, &total_size) )
|
if ( ! dc_unserialize(&data_ptr, &total_size) )
|
||||||
{
|
{
|
||||||
|
@ -959,7 +966,6 @@ void dc_loadstate()
|
||||||
}
|
}
|
||||||
|
|
||||||
mmu_set_state();
|
mmu_set_state();
|
||||||
bm_Reset();
|
|
||||||
sh4_cpu.ResetCache();
|
sh4_cpu.ResetCache();
|
||||||
dsp.dyndirty = true;
|
dsp.dyndirty = true;
|
||||||
sh4_sched_ffts();
|
sh4_sched_ffts();
|
||||||
|
|
|
@ -671,8 +671,8 @@ extern Sh4RegType div_som_reg3;
|
||||||
//extern u8 SH4_TCB[CODE_SIZE+4096];
|
//extern u8 SH4_TCB[CODE_SIZE+4096];
|
||||||
//one time ptr set
|
//one time ptr set
|
||||||
//extern u8* CodeCache;
|
//extern u8* CodeCache;
|
||||||
extern u32 LastAddr;
|
//extern u32 LastAddr;
|
||||||
extern u32 LastAddr_min;
|
//extern u32 LastAddr_min;
|
||||||
//temp storage only
|
//temp storage only
|
||||||
//extern u32* emit_ptr;
|
//extern u32* emit_ptr;
|
||||||
extern char block_hash[1024];
|
extern char block_hash[1024];
|
||||||
|
@ -1097,8 +1097,8 @@ bool dc_serialize(void **data, unsigned int *total_size)
|
||||||
REICAST_S(div_som_reg2);
|
REICAST_S(div_som_reg2);
|
||||||
REICAST_S(div_som_reg3);
|
REICAST_S(div_som_reg3);
|
||||||
|
|
||||||
REICAST_S(LastAddr);
|
REICAST_S(i); //LastAddr
|
||||||
REICAST_S(LastAddr_min);
|
REICAST_S(i); //LastAddr_min
|
||||||
REICAST_SA(block_hash,1024);
|
REICAST_SA(block_hash,1024);
|
||||||
|
|
||||||
REICAST_SA(RegisterWrite,sh4_reg_count);
|
REICAST_SA(RegisterWrite,sh4_reg_count);
|
||||||
|
@ -1492,8 +1492,8 @@ static bool dc_unserialize_libretro(void **data, unsigned int *total_size)
|
||||||
|
|
||||||
//REICAST_USA(CodeCache,CODE_SIZE) ;
|
//REICAST_USA(CodeCache,CODE_SIZE) ;
|
||||||
//REICAST_USA(SH4_TCB,CODE_SIZE+4096);
|
//REICAST_USA(SH4_TCB,CODE_SIZE+4096);
|
||||||
REICAST_US(LastAddr);
|
REICAST_US(i); //LastAddr
|
||||||
REICAST_US(LastAddr_min);
|
REICAST_US(i); //LastAddr_min
|
||||||
REICAST_USA(block_hash,1024);
|
REICAST_USA(block_hash,1024);
|
||||||
|
|
||||||
|
|
||||||
|
@ -1870,8 +1870,8 @@ bool dc_unserialize(void **data, unsigned int *total_size)
|
||||||
|
|
||||||
//REICAST_USA(CodeCache,CODE_SIZE) ;
|
//REICAST_USA(CodeCache,CODE_SIZE) ;
|
||||||
//REICAST_USA(SH4_TCB,CODE_SIZE+4096);
|
//REICAST_USA(SH4_TCB,CODE_SIZE+4096);
|
||||||
REICAST_US(LastAddr);
|
REICAST_US(i); //LastAddr
|
||||||
REICAST_US(LastAddr_min);
|
REICAST_US(i); //LastAddr_min);
|
||||||
REICAST_USA(block_hash,1024);
|
REICAST_USA(block_hash,1024);
|
||||||
|
|
||||||
REICAST_USA(RegisterWrite,sh4_reg_count);
|
REICAST_USA(RegisterWrite,sh4_reg_count);
|
||||||
|
|
Loading…
Reference in New Issue