Mercurial > repos > blastem
changeset 620:9d6fed6501ba
Fix handling of code writes for Z80 core. This seems to get things close to being back to where they were before the big refactor that broke the Z80 core. Some problems remain. Notably the sound driver in Sonic 2 is still quite broken.
author | Michael Pavone <pavone@retrodev.com> |
---|---|
date | Mon, 29 Dec 2014 23:08:39 -0800 |
parents | 3072fb746601 |
children | f822d9216968 |
files | backend.h backend_x86.c m68k_core_x86.c z80_to_x86.c |
diffstat | 4 files changed, 8 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/backend.h Mon Dec 29 21:36:17 2014 -0800 +++ b/backend.h Mon Dec 29 23:08:39 2014 -0800 @@ -62,6 +62,7 @@ uint32_t bus_cycles; int32_t mem_ptr_off; int32_t ram_flags_off; + uint8_t ram_flags_shift; uint8_t address_size; uint8_t byte_swap; uint8_t context_reg;
--- a/backend_x86.c Mon Dec 29 21:36:17 2014 -0800 +++ b/backend_x86.c Mon Dec 29 23:08:39 2014 -0800 @@ -200,9 +200,8 @@ } } if (is_write && (memmap[chunk].flags & MMAP_CODE)) { - //TODO: Fixme for Z80 mov_rr(code, opts->scratch2, opts->scratch1, opts->address_size); - shr_ir(code, 11, opts->scratch1, opts->address_size); + shr_ir(code, opts->ram_flags_shift, opts->scratch1, opts->address_size); bt_rrdisp(code, opts->scratch1, opts->context_reg, opts->ram_flags_off, opts->address_size); code_ptr not_code = code->cur + 1; jcc(code, CC_NC, code->cur + 2); @@ -210,6 +209,10 @@ #ifdef X86_32 push_r(code, opts->context_reg); push_r(code, opts->scratch2); +#else + if (opts->scratch2 != RDI) { + mov_rr(code, opts->scratch2, RDI, opts->address_size); + } #endif call(code, opts->handle_code_write); #ifdef X86_32
--- a/m68k_core_x86.c Mon Dec 29 21:36:17 2014 -0800 +++ b/m68k_core_x86.c Mon Dec 29 23:08:39 2014 -0800 @@ -2237,6 +2237,7 @@ opts->gen.bus_cycles = BUS; opts->gen.mem_ptr_off = offsetof(m68k_context, mem_pointers); opts->gen.ram_flags_off = offsetof(m68k_context, ram_code_flags); + opts->gen.ram_flags_shift = 11; for (int i = 0; i < 8; i++) { opts->dregs[i] = opts->aregs[i] = -1;
--- a/z80_to_x86.c Mon Dec 29 21:36:17 2014 -0800 +++ b/z80_to_x86.c Mon Dec 29 23:08:39 2014 -0800 @@ -1907,6 +1907,7 @@ options->gen.bus_cycles = 3; options->gen.mem_ptr_off = offsetof(z80_context, mem_pointers); options->gen.ram_flags_off = offsetof(z80_context, ram_code_flags); + options->gen.ram_flags_shift = 7; options->flags = 0; options->regs[Z80_B] = BH;