# HG changeset patch # User Mike Pavone # Date 1367640588 25200 # Node ID 9ee64039ddebcdef1ef2981fee8619c9f1b96714 # Parent 6be6056735a9bfe4c76524280db66524fb4e1646 Fix bank register update diff -r 6be6056735a9 -r 9ee64039ddeb blastem.c --- a/blastem.c Fri May 03 20:18:28 2013 -0700 +++ b/blastem.c Fri May 03 21:09:48 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 @@ -403,11 +403,13 @@ } else { if (busreq) { dputs("releasing z80 bus"); + #ifdef DO_DEBUG_PRINT char fname[20]; sprintf(fname, "zram-%d", zram_counter++); FILE * f = fopen(fname, "wb"); fwrite(z80_ram, 1, sizeof(z80_ram), f); fclose(f); + #endif 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; @@ -492,11 +494,13 @@ } else { if (busreq) { dprintf("releasing Z80 bus @ %d\n", (context->current_cycle * MCLKS_PER_68K) / MCLKS_PER_Z80); + #ifdef DO_DEBUG_PRINT char fname[20]; sprintf(fname, "zram-%d", zram_counter++); FILE * f = fopen(fname, "wb"); fwrite(z80_ram, 1, sizeof(z80_ram), f); fclose(f); + #endif 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 6be6056735a9 -r 9ee64039ddeb zruntime.S --- a/zruntime.S Fri May 03 20:18:28 2013 -0700 +++ b/zruntime.S Fri May 03 21:09:48 2013 -0700 @@ -68,7 +68,7 @@ cmp $0x8000, %r13w jae z80_read_bank /* TODO: Bank reg, YM-2612, PSG/VDP */ - mov $FF, $r13b + mov $0xFF, %r13b ret z80_read_ram: and $0x1FFF, %r13 @@ -125,10 +125,11 @@ ret z80_write_bank_reg: and $1, %r13w - shl %r15w + shr %r15w + shl $8, %r13w + xor %r12, %r12 or %r13w, %r15w and $0x1FF, %r15w - xor %r12, %r12 cmp $0x80, %r15w jb update_bank_ptr ret