Writes to code pages now always marked as dirty even if data doesn't change - BeOS now works under recompiler.

This commit is contained in:
TomW 2015-05-03 20:36:22 +01:00
commit 1b927d9f4b

View file

@ -1180,20 +1180,15 @@ uint32_t mem_read_raml(uint32_t addr, void *priv)
} }
static void mem_write_ramb_page(uint32_t addr, uint8_t val, page_t *p) static void mem_write_ramb_page(uint32_t addr, uint8_t val, page_t *p)
{
if (p->mem[addr & 0xfff] != val)
{ {
#if DYNAREC #if DYNAREC
uint64_t mask = (uint64_t)1 << ((addr >> PAGE_MASK_SHIFT) & PAGE_MASK_MASK); uint64_t mask = (uint64_t)1 << ((addr >> PAGE_MASK_SHIFT) & PAGE_MASK_MASK);
// pclog("mem_write_ramb_page: %08x %02x %08x\n", addr, val, cs+pc); // pclog("mem_write_ramb_page: %08x %02x %08x %llx %llx\n", addr, val, cs+pc, p->dirty_mask, mask);
p->dirty_mask |= mask; p->dirty_mask |= mask;
#endif #endif
p->mem[addr & 0xfff] = val; p->mem[addr & 0xfff] = val;
} }
}
static void mem_write_ramw_page(uint32_t addr, uint16_t val, page_t *p) static void mem_write_ramw_page(uint32_t addr, uint16_t val, page_t *p)
{
if (*(uint16_t *)&p->mem[addr & 0xfff] != val)
{ {
#if DYNAREC #if DYNAREC
uint64_t mask = (uint64_t)1 << ((addr >> PAGE_MASK_SHIFT) & PAGE_MASK_MASK); uint64_t mask = (uint64_t)1 << ((addr >> PAGE_MASK_SHIFT) & PAGE_MASK_MASK);
@ -1204,10 +1199,7 @@ static void mem_write_ramw_page(uint32_t addr, uint16_t val, page_t *p)
#endif #endif
*(uint16_t *)&p->mem[addr & 0xfff] = val; *(uint16_t *)&p->mem[addr & 0xfff] = val;
} }
}
static void mem_write_raml_page(uint32_t addr, uint32_t val, page_t *p) static void mem_write_raml_page(uint32_t addr, uint32_t val, page_t *p)
{
if (*(uint32_t *)&p->mem[addr & 0xfff] != val)
{ {
#if DYNAREC #if DYNAREC
uint64_t mask = (uint64_t)1 << ((addr >> PAGE_MASK_SHIFT) & PAGE_MASK_MASK); uint64_t mask = (uint64_t)1 << ((addr >> PAGE_MASK_SHIFT) & PAGE_MASK_MASK);
@ -1218,7 +1210,6 @@ static void mem_write_raml_page(uint32_t addr, uint32_t val, page_t *p)
#endif #endif
*(uint32_t *)&p->mem[addr & 0xfff] = val; *(uint32_t *)&p->mem[addr & 0xfff] = val;
} }
}
void mem_write_ram(uint32_t addr, uint8_t val, void *priv) void mem_write_ram(uint32_t addr, uint8_t val, void *priv)
{ {