comparison vdp.c @ 1001:1dc749c9c0d9

Fix bug in SAT cache address calculation that caused a crash in Strider II
author Michael Pavone <pavone@retrodev.com>
date Sat, 30 Apr 2016 20:57:29 -0700
parents 1a797fcbb35f
children e34334e6c682
comparison
equal deleted inserted replaced
1000:1a797fcbb35f 1001:1dc749c9c0d9
516 if (!dma_len) { 516 if (!dma_len) {
517 context->flags &= ~FLAG_DMA_RUN; 517 context->flags &= ~FLAG_DMA_RUN;
518 context->cd &= 0xF; 518 context->cd &= 0xF;
519 } 519 }
520 } 520 }
521 521 #include <assert.h>
522 void write_vram_byte(vdp_context *context, uint16_t address, uint8_t value) 522 void write_vram_byte(vdp_context *context, uint16_t address, uint8_t value)
523 { 523 {
524 if (!(address & 4)) { 524 if (!(address & 4)) {
525 uint16_t sat_address = (context->regs[REG_SAT] & 0x7F) << 9; 525 uint16_t sat_address = (context->regs[REG_SAT] & 0x7F) << 9;
526 if(address >= sat_address && address <= sat_address + SAT_CACHE_SIZE*2) { 526 if(address >= sat_address && address < (sat_address + SAT_CACHE_SIZE*2)) {
527 context->sat_cache[(address & 3) | (address >> 1 & 0x1FC)] = value; 527 uint16_t cache_address = address - sat_address;
528 cache_address = (cache_address & 3) | (cache_address >> 1 & 0x1FC);
529 context->sat_cache[cache_address] = value;
528 } 530 }
529 } 531 }
530 context->vdpmem[address] = value; 532 context->vdpmem[address] = value;
531 } 533 }
532 534