From 662a0aafda3954b0daa01c9ab5c4c3eb72e28f37 Mon Sep 17 00:00:00 2001 From: Phil Bennett Date: Sat, 30 Jan 2010 19:52:06 +0000 Subject: [PATCH] 00993: sharrier: [debug] Crashes when a specific sample is being played during gameplay. --- src/emu/sound/segapcm.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/emu/sound/segapcm.c b/src/emu/sound/segapcm.c index 0a6a8b48f3b..7ef550ad41e 100644 --- a/src/emu/sound/segapcm.c +++ b/src/emu/sound/segapcm.c @@ -14,6 +14,7 @@ struct _segapcm_state const UINT8 *rom; int bankshift; int bankmask; + int rgnmask; sound_stream * stream; }; @@ -29,6 +30,7 @@ INLINE segapcm_state *get_safe_token(running_device *device) static STREAM_UPDATE( SEGAPCM_update ) { segapcm_state *spcm = (segapcm_state *)param; + int rgnmask = spcm->rgnmask; int ch; /* clear the buffers */ @@ -70,7 +72,7 @@ static STREAM_UPDATE( SEGAPCM_update ) } /* fetch the sample */ - v = rom[addr >> 8] - 0x80; + v = rom[(addr >> 8) & rgnmask] - 0x80; /* apply panning and advance */ outputs[0][i] += v * voll; @@ -103,7 +105,10 @@ static DEVICE_START( segapcm ) mask = BANK_MASK7>>16; len = device->region->bytes(); + spcm->rgnmask = len - 1; + for(rom_mask = 1; rom_mask < len; rom_mask *= 2); + rom_mask--; spcm->bankmask = mask & (rom_mask >> spcm->bankshift);