summaryrefslogtreecommitdiffstatshomepage
path: root/src
diff options
context:
space:
mode:
author Paul Priest <paulprie@mamedev.org>2010-01-12 14:31:13 +0000
committer Paul Priest <paulprie@mamedev.org>2010-01-12 14:31:13 +0000
commita9baa7b23dfdd51d5eeca91fc7934dac2f2b934a (patch)
tree131208080d921f2ca3d245ebd5b03ab36f368637 /src
parent5cdcb8ab63a5db3b43368993d5c5c4329c553594 (diff)
Fix for MT00111 - rom region overrun in YMF278B core on loop j=0 of SAMPLE_UPDATE(). Fixes sporadic crashes in many psikyosh games which had been worked around with the exception of gunbird2 which is now also fixed [PsikyoFan]
RB: Feel free to help me correct it if you believe this isn't correct.
Diffstat (limited to 'src')
-rw-r--r--src/emu/sound/ymf278b.c29
-rw-r--r--src/mame/drivers/psikyosh.c12
2 files changed, 19 insertions, 22 deletions
diff --git a/src/emu/sound/ymf278b.c b/src/emu/sound/ymf278b.c
index 6061811d027..8180d2e01b5 100644
--- a/src/emu/sound/ymf278b.c
+++ b/src/emu/sound/ymf278b.c
@@ -286,6 +286,21 @@ static STREAM_UPDATE( ymf278b_pcm_update )
for (j = 0; j < samples; j++)
{
+ if(slot->stepptr >= slot->endaddr)
+ {
+ slot->stepptr = slot->stepptr - slot->endaddr + slot->loopaddr;
+ // If the step is bigger than the loop, finish the sample forcibly
+ if(slot->stepptr >= slot->endaddr)
+ {
+ slot->env_vol = 256U<<23;
+ slot->env_vol_step = 0;
+ slot->env_vol_lim = 0;
+ slot->active = 0;
+ slot->stepptr = 0;
+ slot->step = 0;
+ }
+ }
+
switch (slot->bits)
{
case 8: // 8 bit
@@ -310,20 +325,6 @@ static STREAM_UPDATE( ymf278b_pcm_update )
// update frequency
slot->stepptr += slot->step;
- if(slot->stepptr >= slot->endaddr)
- {
- slot->stepptr = slot->stepptr - slot->endaddr + slot->loopaddr;
- // If the step is bigger than the loop, finish the sample forcibly
- if(slot->stepptr >= slot->endaddr)
- {
- slot->env_vol = 256U<<23;
- slot->env_vol_step = 0;
- slot->env_vol_lim = 0;
- slot->active = 0;
- slot->stepptr = 0;
- slot->step = 0;
- }
- }
// update envelope
slot->env_vol += slot->env_vol_step;
diff --git a/src/mame/drivers/psikyosh.c b/src/mame/drivers/psikyosh.c
index cef3b84c139..e4713dac507 100644
--- a/src/mame/drivers/psikyosh.c
+++ b/src/mame/drivers/psikyosh.c
@@ -844,11 +844,8 @@ ROM_START( s1945ii )
ROM_LOAD32_WORD( "3l.u1", 0x1800000, 0x400000, CRC(a6c3704e) SHA1(cb9881e4235cc8e4bcca4c6ccbd8d8d8634e3624) )
ROM_LOAD32_WORD( "3h.u19", 0x1800002, 0x400000, CRC(4cd3ca70) SHA1(5b0a6ea4fe0e821cebe6e840596f648e24dded51) )
- ROM_REGION( 0x800000, "ymf", 0 ) /* Samples */
+ ROM_REGION( 0x400000, "ymf", 0 ) /* Samples */
ROM_LOAD( "sound.u32", 0x000000, 0x400000, CRC(ba680ca7) SHA1(b645896e297aad426784aa656bff738e1b33c2a2) )
- ROM_RELOAD ( 0x400000, 0x400000 )
- /* 0x400000 - 0x7fffff allocated but left blank, it randomly reads from here on the
- Iron Casket level causing a crash otherwise, not sure why, bug in the sound emulation? */
ROM_REGION( 0x100, "eeprom", 0 )
ROM_LOAD( "eeprom-s1945ii.bin", 0x0000, 0x0100, CRC(7ac38846) SHA1(c5f4b05a94211f3c96b8c472adbe634f2e77d753) )
@@ -949,9 +946,8 @@ ROM_START( s1945iii )
ROM_LOAD32_WORD( "3l.u6", 0x3000000, 0x400000, CRC(f693438c) SHA1(d70e25a3f56aae6575c696d9b7b6d7a9d04f0104) )
ROM_LOAD32_WORD( "3h.u13", 0x3000002, 0x400000, CRC(2d0c334f) SHA1(74d94abb34484c7b79dbb989645f53124e53e3b7) )
- ROM_REGION( 0x800000, "ymf", 0 ) /* Samples */
+ ROM_REGION( 0x400000, "ymf", 0 ) /* Samples */
ROM_LOAD( "sound.u9", 0x000000, 0x400000, CRC(c5374beb) SHA1(d13e12cbd249246d953c45bb3bfa576a0ec75595) )
- ROM_RELOAD ( 0x400000, 0x400000 )
ROM_REGION( 0x100, "eeprom", 0 )
ROM_LOAD( "eeprom-s1945iii.bin", 0x0000, 0x0100, CRC(b39f3604) SHA1(d7c66210598096fcafb20adac2f0b293755f4926) )
@@ -986,7 +982,7 @@ ROM_START( dragnblz )
ROM_LOAD32_WORD( "10l.u58",0x2800000, 0x200000, CRC(a3f5c7f8) SHA1(d17478ca3e7ef46270f350ffa35d43acb05b1185) )
ROM_LOAD32_WORD( "10h.u59",0x2800002, 0x200000, CRC(30e304c4) SHA1(1d866276bfe7f7524306a880d225aaf11ac2e5dd) )
- ROM_REGION( 0x800000, "ymf", 0 ) /* Samples */
+ ROM_REGION( 0x200000, "ymf", 0 ) /* Samples */
ROM_LOAD( "snd0.u52", 0x000000, 0x200000, CRC(7fd1b225) SHA1(6aa61021ada51393bbb34fd1aea00b8feccc8197) )
ROM_REGION( 0x100, "eeprom", 0 )
@@ -1030,7 +1026,7 @@ ROM_START( gnbarich )
// ROM_LOAD32_WORD( "10l.u58",0x2800000, 0x200000, CRC(a3f5c7f8) SHA1(d17478ca3e7ef46270f350ffa35d43acb05b1185) ) /* From Dragon Blaze */
// ROM_LOAD32_WORD( "10h.u59",0x2800002, 0x200000, CRC(30e304c4) SHA1(1d866276bfe7f7524306a880d225aaf11ac2e5dd) ) /* From Dragon Blaze */
- ROM_REGION( 0x800000, "ymf", 0 ) /* Samples */
+ ROM_REGION( 0x2a00000, "ymf", 0 ) /* Samples */
ROM_LOAD( "snd0.u52", 0x000000, 0x200000, CRC(7b10436b) SHA1(c731fcce024e286a677ca10a91761c1ee06094a5) )
ROM_REGION( 0x100, "eeprom", 0 )