From d79814692f6ba7c706c8e4e5dcce4c36b2f077ba Mon Sep 17 00:00:00 2001 From: TomW Date: Sun, 12 Jul 2015 14:53:03 +0100 Subject: [PATCH] Flush memory->codeblock list heads on CPU reset - fixes "block->next->pc=0" errors on reset on some machines. --- src/codegen_x86.c | 1 + src/mem.c | 14 ++++++++++++++ src/mem.h | 1 + 3 files changed, 16 insertions(+) diff --git a/src/codegen_x86.c b/src/codegen_x86.c index b06859e..ea6bb8e 100644 --- a/src/codegen_x86.c +++ b/src/codegen_x86.c @@ -86,6 +86,7 @@ void codegen_reset() { memset(codeblock, 0, BLOCK_SIZE * sizeof(codeblock_t)); memset(codeblock_hash, 0, HASH_SIZE * sizeof(codeblock_t *)); + mem_reset_page_blocks(); } void dump_block() diff --git a/src/mem.c b/src/mem.c index 0d699ac..f588012 100644 --- a/src/mem.c +++ b/src/mem.c @@ -1800,6 +1800,20 @@ void mem_resize() // 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; static int mem_a20_state = 0; diff --git a/src/mem.h b/src/mem.h index bfbf987..3ea4de3 100644 --- a/src/mem.h +++ b/src/mem.h @@ -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_raml_page(uint32_t addr, uint32_t val, page_t *p); +void mem_reset_page_blocks();