changeset 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 8d032a368dd5
files vdp.c
diffstat 1 files changed, 5 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- 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 <assert.h>
 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;