# HG changeset patch # User Mike Pavone # Date 1367637508 25200 # Node ID 6be6056735a9bfe4c76524280db66524fb4e1646 # Parent 9578e5dea147c441ce3bc4dfb97ccef87940c1f1 Fix native address lookup in bannked memory area diff -r 9578e5dea147 -r 6be6056735a9 blastem.c --- a/blastem.c Fri May 03 20:15:23 2013 -0700 +++ b/blastem.c Fri May 03 20:18:28 2013 -0700 @@ -133,7 +133,7 @@ uint8_t busack = 0; uint32_t busack_cycle = CYCLE_NEVER; uint8_t new_busack = 0; -//#define DO_DEBUG_PRINT +#define DO_DEBUG_PRINT #ifdef DO_DEBUG_PRINT #define dprintf printf #define dputs puts @@ -350,6 +350,8 @@ }*/ } +uint32_t zram_counter = 0; + m68k_context * io_write(uint32_t location, m68k_context * context, uint8_t value) { if (location < 0x10000) { @@ -401,6 +403,11 @@ } else { if (busreq) { dputs("releasing z80 bus"); + char fname[20]; + sprintf(fname, "zram-%d", zram_counter++); + FILE * f = fopen(fname, "wb"); + fwrite(z80_ram, 1, sizeof(z80_ram), f); + fclose(f); z80_context * z_context = context->next_cpu; //TODO: Add necessary delay between release of busreq and resumption of execution z_context->current_cycle = (context->current_cycle * MCLKS_PER_68K) / MCLKS_PER_Z80; @@ -485,6 +492,11 @@ } else { if (busreq) { dprintf("releasing Z80 bus @ %d\n", (context->current_cycle * MCLKS_PER_68K) / MCLKS_PER_Z80); + char fname[20]; + sprintf(fname, "zram-%d", zram_counter++); + FILE * f = fopen(fname, "wb"); + fwrite(z80_ram, 1, sizeof(z80_ram), f); + fclose(f); z80_context * z_context = context->next_cpu; //TODO: Add necessary delay between release of busreq and resumption of execution z_context->current_cycle = (context->current_cycle * MCLKS_PER_68K) / MCLKS_PER_Z80; diff -r 9578e5dea147 -r 6be6056735a9 z80_to_x86.c --- a/z80_to_x86.c Fri May 03 20:15:23 2013 -0700 +++ b/z80_to_x86.c Fri May 03 20:18:28 2013 -0700 @@ -1421,7 +1421,7 @@ map = context->static_code_map; } else if (address >= 0x8000) { address &= 0x7FFF; - map = context->banked_code_map + (context->bank_reg << 15); + map = context->banked_code_map + context->bank_reg; } else { dprintf("z80_get_native_address: %X NULL\n", address); return NULL; @@ -1455,7 +1455,7 @@ context->ram_code_flags[((address + size) & 0x1C00) >> 10] |= 1 << (((address + size) & 0x380) >> 7); } else if (address >= 0x8000) { address &= 0x7FFF; - map = context->banked_code_map + (context->bank_reg << 15); + map = context->banked_code_map + context->bank_reg; if (!map->offsets) { map->offsets = malloc(sizeof(int32_t) * 0x8000); memset(map->offsets, 0xFF, sizeof(int32_t) * 0x8000); @@ -1474,7 +1474,7 @@ map = context->static_code_map; } else if (address >= 0x8000) { address &= 0x7FFF; - map = context->banked_code_map + (context->bank_reg << 15); + map = context->banked_code_map + context->bank_reg; } else { return; } diff -r 9578e5dea147 -r 6be6056735a9 zruntime.S --- a/zruntime.S Fri May 03 20:15:23 2013 -0700 +++ b/zruntime.S Fri May 03 20:18:28 2013 -0700 @@ -68,6 +68,7 @@ cmp $0x8000, %r13w jae z80_read_bank /* TODO: Bank reg, YM-2612, PSG/VDP */ + mov $FF, $r13b ret z80_read_ram: and $0x1FFF, %r13