From 959aafaf6aeee5db91e71d0850abd2b352ded2a4 Mon Sep 17 00:00:00 2001 From: Angelo Salese Date: Mon, 27 Sep 2010 02:22:40 +0000 Subject: [PATCH] Fixed 8-bit dram (framebuffer) access for 32x [David Haywood] --- src/mame/drivers/megadriv.c | 27 ++++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/src/mame/drivers/megadriv.c b/src/mame/drivers/megadriv.c index 3ea25c8dc49..373a6a2a73a 100644 --- a/src/mame/drivers/megadriv.c +++ b/src/mame/drivers/megadriv.c @@ -2314,7 +2314,32 @@ static READ16_HANDLER( _32x_68k_dram_r ) static WRITE16_HANDLER( _32x_68k_dram_w ) { - COMBINE_DATA(&_32x_access_dram[offset]); + if ((mem_mask&0xffff) == 0xffff) + { + // 16-bit accesses are normal + COMBINE_DATA(&_32x_access_dram[offset]); + } + else + { + // 8-bit writes act as if they were going to the overwrite region! + // bc-racers and world series baseball rely on this! + // (tested on real hw) + + if ((mem_mask & 0xffff) == 0xff00) + { + if ((data & 0xff00) != 0x0000) + { + _32x_access_dram[offset] = (data & 0xff00) | (_32x_access_dram[offset] & 0x00ff); + } + } + else if ((mem_mask & 0xffff) == 0x00ff) + { + if ((data & 0x00ff) != 0x0000) + { + _32x_access_dram[offset] = (data & 0x00ff) | (_32x_access_dram[offset] & 0xff00); + } + } + } } static READ16_HANDLER( _32x_68k_dram_overwrite_r )