Flush memory->codeblock list heads on CPU reset - fixes "block->next->pc=0" errors on reset on some machines.
This commit is contained in:
parent
e590bd9ca2
commit
d79814692f
3 changed files with 16 additions and 0 deletions
|
|
@ -86,6 +86,7 @@ void codegen_reset()
|
||||||
{
|
{
|
||||||
memset(codeblock, 0, BLOCK_SIZE * sizeof(codeblock_t));
|
memset(codeblock, 0, BLOCK_SIZE * sizeof(codeblock_t));
|
||||||
memset(codeblock_hash, 0, HASH_SIZE * sizeof(codeblock_t *));
|
memset(codeblock_hash, 0, HASH_SIZE * sizeof(codeblock_t *));
|
||||||
|
mem_reset_page_blocks();
|
||||||
}
|
}
|
||||||
|
|
||||||
void dump_block()
|
void dump_block()
|
||||||
|
|
|
||||||
14
src/mem.c
14
src/mem.c
|
|
@ -1800,6 +1800,20 @@ void mem_resize()
|
||||||
// pclog("Mem resize %i %i\n",mem_size,c);
|
// pclog("Mem resize %i %i\n",mem_size,c);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void mem_reset_page_blocks()
|
||||||
|
{
|
||||||
|
int c;
|
||||||
|
|
||||||
|
for (c = 0; c < ((mem_size * 1024 * 1024) >> 12); c++)
|
||||||
|
{
|
||||||
|
pages[c].write_b = mem_write_ramb_page;
|
||||||
|
pages[c].write_w = mem_write_ramw_page;
|
||||||
|
pages[c].write_l = mem_write_raml_page;
|
||||||
|
pages[c].block = NULL;
|
||||||
|
pages[c].block_2 = NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
int mem_a20_key = 0, mem_a20_alt = 0;
|
int mem_a20_key = 0, mem_a20_alt = 0;
|
||||||
static int mem_a20_state = 0;
|
static int mem_a20_state = 0;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -143,3 +143,4 @@ void mem_write_ramb_page(uint32_t addr, uint8_t val, page_t *p);
|
||||||
void mem_write_ramw_page(uint32_t addr, uint16_t val, page_t *p);
|
void mem_write_ramw_page(uint32_t addr, uint16_t val, page_t *p);
|
||||||
void mem_write_raml_page(uint32_t addr, uint32_t val, page_t *p);
|
void mem_write_raml_page(uint32_t addr, uint32_t val, page_t *p);
|
||||||
|
|
||||||
|
void mem_reset_page_blocks();
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue