changeset 2099:b92c998c6742

Add some missing null checks in the Sega CD code dealing with word RAM switching
author Michael Pavone <pavone@retrodev.com>
date Wed, 09 Feb 2022 00:47:20 -0800
parents da326c32ad8f
children 539450d905b3
files segacd.c
diffstat 1 files changed, 9 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/segacd.c	Wed Feb 09 00:46:54 2022 -0800
+++ b/segacd.c	Wed Feb 09 00:47:20 2022 -0800
@@ -127,6 +127,9 @@
 	m68k_context *m68k = vcontext;
 	//TODO: fixme for interleaving
 	uint16_t* bank = m68k->mem_pointers[1];
+	if (!bank) {
+		return 0xFFFF;
+	}
 	uint16_t raw = bank[address >> 2];
 	if (address & 2) {
 		return (raw & 0xF) | (raw << 4 & 0xF00);
@@ -164,6 +167,9 @@
 		}
 	}
 	uint16_t* bank = m68k->mem_pointers[1];
+	if (!bank) {
+		return vcontext;
+	}
 	uint16_t raw = bank[address >> 2];
 	uint16_t shift = ((address & 3) * 4);
 	raw &= ~(0xF000 >> shift);
@@ -268,6 +274,9 @@
 	m68k_context *m68k = vcontext;
 	genesis_context *gen = m68k->system;
 	segacd_context *cd = gen->expansion;
+	if (!m68k->mem_pointers[cd->memptr_start_index + 1]) {
+		return 0xFFFF;
+	}
 	return m68k->mem_pointers[cd->memptr_start_index + 1][address>>1];
 }