# HG changeset patch # User Michael Pavone # Date 1462075049 25200 # Node ID 1dc749c9c0d93dc6f0b0bf70a93f4238de5f88b1 # Parent 1a797fcbb35f7fd84c2283e71574e986dd239c12 Fix bug in SAT cache address calculation that caused a crash in Strider II diff -r 1a797fcbb35f -r 1dc749c9c0d9 vdp.c --- a/vdp.c Sat Apr 30 16:19:57 2016 -0700 +++ b/vdp.c Sat Apr 30 20:57:29 2016 -0700 @@ -518,13 +518,15 @@ context->cd &= 0xF; } } - +#include void write_vram_byte(vdp_context *context, uint16_t address, uint8_t value) { if (!(address & 4)) { uint16_t sat_address = (context->regs[REG_SAT] & 0x7F) << 9; - if(address >= sat_address && address <= sat_address + SAT_CACHE_SIZE*2) { - context->sat_cache[(address & 3) | (address >> 1 & 0x1FC)] = value; + if(address >= sat_address && address < (sat_address + SAT_CACHE_SIZE*2)) { + uint16_t cache_address = address - sat_address; + cache_address = (cache_address & 3) | (cache_address >> 1 & 0x1FC); + context->sat_cache[cache_address] = value; } } context->vdpmem[address] = value;