summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author Aaron Giles <aaron@aarongiles.com>2009-03-28 18:10:38 +0000
committer Aaron Giles <aaron@aarongiles.com>2009-03-28 18:10:38 +0000
commitc1d571c4f2be4f3806d4703156785c09eb9510b6 (patch)
tree5c1dc74f89aedff8f991ac37f38f6fbb3ea96328
parent5f4f289e76c5cbcd369357a56cede6b5e624723c (diff)
* bublbobl.diff
- emulated CPU1 (slave) <-> AUDIOCPU communications even if they are not used at all - emulated AUDIOCPU reset at startup, previously this was disabled * rranger.diff - added samples emulation to Rough Ranger (V2.0), write ports A & B of YM2203 are used * seibu.diff - hooked up music in SD Gundam Psycho Salamander, this doesn't affect any other game
-rw-r--r--src/mame/audio/seibu.c2
-rw-r--r--src/mame/audio/suna8.c11
-rw-r--r--src/mame/drivers/bublbobl.c27
-rw-r--r--src/mame/drivers/dcon.c3
-rw-r--r--src/mame/drivers/suna8.c55
-rw-r--r--src/mame/includes/bublbobl.h3
-rw-r--r--src/mame/includes/suna8.h1
-rw-r--r--src/mame/machine/bublbobl.c15
8 files changed, 78 insertions, 39 deletions
diff --git a/src/mame/audio/seibu.c b/src/mame/audio/seibu.c
index 9a294590037..20e1230a596 100644
--- a/src/mame/audio/seibu.c
+++ b/src/mame/audio/seibu.c
@@ -406,6 +406,8 @@ WRITE16_HANDLER( seibu_main_word_w )
main2sub[offset] = data;
break;
case 4:
+ if (strcmp(space->machine->gamedrv->name, "sdgndmps") == 0)
+ update_irq_lines(space->machine, RST10_ASSERT);
update_irq_lines(space->machine, RST18_ASSERT);
break;
case 6:
diff --git a/src/mame/audio/suna8.c b/src/mame/audio/suna8.c
index cf60d41f0c4..96992c738bf 100644
--- a/src/mame/audio/suna8.c
+++ b/src/mame/audio/suna8.c
@@ -29,6 +29,17 @@ WRITE8_DEVICE_HANDLER( suna8_play_samples_w )
}
}
+WRITE8_DEVICE_HANDLER( rranger_play_samples_w )
+{
+ if( data )
+ {
+ if(( sample != 0 ) && ( ~data & 0x30 )) // don't play sample zero when the bit is active
+ {
+ sample_start_raw(device, 0, &samplebuf[0x800*sample], 0x0800, 4000, 0);
+ }
+ }
+}
+
WRITE8_DEVICE_HANDLER( suna8_samples_number_w )
{
sample = data & 0xf;
diff --git a/src/mame/drivers/bublbobl.c b/src/mame/drivers/bublbobl.c
index c77af2a44e8..7d1e7f8e49f 100644
--- a/src/mame/drivers/bublbobl.c
+++ b/src/mame/drivers/bublbobl.c
@@ -259,8 +259,6 @@ TODO:
(similar to the HD63701). I've just mapped the I/O ports since that's the only
thing required for normal operation, but the program does use some of the
additional features in its special "test" mode.
-- emulate the CPU #1 <-> sound CPU communication status flags (which are not used)
-- why does emulating the sound CPU reset port (fa03) cause sound to stop working?
- tokio: doesn't work due to missing MCU protection emulation.
- tokio: sound support is probably incomplete. There are a couple of unknown
accesses done by the CPU, including to the YM2203 I/O ports. At the
@@ -280,13 +278,6 @@ TODO:
#define MAIN_XTAL XTAL_24MHz
-#if 0 // doesn't work for some reason
-static WRITE8_HANDLER(soundcpu_reset_w)
-{
- cpu_set_input_line(space->machine->cpu[2], INPUT_LINE_RESET, (data & 0x01) ? ASSERT_LINE : CLEAR_LINE);
-}
-#endif
-
static ADDRESS_MAP_START( master_map, ADDRESS_SPACE_PROGRAM, 8 )
AM_RANGE(0x0000, 0x7fff) AM_ROM
@@ -295,8 +286,8 @@ static ADDRESS_MAP_START( master_map, ADDRESS_SPACE_PROGRAM, 8 )
AM_RANGE(0xdd00, 0xdfff) AM_RAM AM_BASE(&bublbobl_objectram) AM_SIZE(&bublbobl_objectram_size)
AM_RANGE(0xe000, 0xf7ff) AM_RAM AM_SHARE(1)
AM_RANGE(0xf800, 0xf9ff) AM_RAM_WRITE(paletteram_RRRRGGGGBBBBxxxx_be_w) AM_BASE(&paletteram)
- AM_RANGE(0xfa00, 0xfa00) AM_WRITE(bublbobl_sound_command_w)
-// AM_RANGE(0xfa03, 0xfa03) AM_WRITE(soundcpu_reset_w) // doesn't work for some reason
+ AM_RANGE(0xfa00, 0xfa00) AM_READWRITE(sound_status_r, bublbobl_sound_command_w)
+ AM_RANGE(0xfa03, 0xfa03) AM_WRITE(soundcpu_reset_w)
AM_RANGE(0xfa80, 0xfa80) AM_WRITE(watchdog_reset_w)
AM_RANGE(0xfb40, 0xfb40) AM_WRITE(bublbobl_bankswitch_w)
AM_RANGE(0xfc00, 0xffff) AM_RAM AM_BASE(&bublbobl_mcu_sharedram)
@@ -312,7 +303,7 @@ static ADDRESS_MAP_START( sound_map, ADDRESS_SPACE_PROGRAM, 8 )
AM_RANGE(0x8000, 0x8fff) AM_RAM
AM_RANGE(0x9000, 0x9001) AM_DEVREADWRITE("ym1", ym2203_r, ym2203_w)
AM_RANGE(0xa000, 0xa001) AM_DEVREADWRITE("ym2", ym3526_r, ym3526_w)
- AM_RANGE(0xb000, 0xb000) AM_READ(soundlatch_r) AM_WRITENOP
+ AM_RANGE(0xb000, 0xb000) AM_READWRITE(soundlatch_r, sound_status_w)
AM_RANGE(0xb001, 0xb001) AM_WRITE(bublbobl_sh_nmi_enable_w) AM_READNOP
AM_RANGE(0xb002, 0xb002) AM_WRITE(bublbobl_sh_nmi_disable_w)
AM_RANGE(0xe000, 0xffff) AM_ROM // space for diagnostic ROM?
@@ -351,8 +342,8 @@ static ADDRESS_MAP_START( bootleg_map, ADDRESS_SPACE_PROGRAM, 8 )
AM_RANGE(0xdd00, 0xdfff) AM_RAM AM_BASE(&bublbobl_objectram) AM_SIZE(&bublbobl_objectram_size)
AM_RANGE(0xe000, 0xf7ff) AM_RAM AM_SHARE(1)
AM_RANGE(0xf800, 0xf9ff) AM_RAM_WRITE(paletteram_RRRRGGGGBBBBxxxx_be_w) AM_BASE(&paletteram)
- AM_RANGE(0xfa00, 0xfa00) AM_WRITE(bublbobl_sound_command_w)
- AM_RANGE(0xfa03, 0xfa03) AM_WRITENOP // sound cpu reset
+ AM_RANGE(0xfa00, 0xfa00) AM_READWRITE(sound_status_r, bublbobl_sound_command_w)
+ AM_RANGE(0xfa03, 0xfa03) AM_WRITE(soundcpu_reset_w)
AM_RANGE(0xfa80, 0xfa80) AM_WRITENOP // ???
AM_RANGE(0xfb40, 0xfb40) AM_WRITE(bublbobl_bankswitch_w)
AM_RANGE(0xfc00, 0xfcff) AM_RAM
@@ -384,7 +375,7 @@ static ADDRESS_MAP_START( tokio_map, ADDRESS_SPACE_PROGRAM, 8 )
AM_RANGE(0xfa80, 0xfa80) AM_WRITE(tokio_bankswitch_w)
AM_RANGE(0xfb00, 0xfb00) AM_WRITE(tokio_videoctrl_w)
AM_RANGE(0xfb80, 0xfb80) AM_WRITE(bublbobl_nmitrigger_w)
- AM_RANGE(0xfc00, 0xfc00) AM_READNOP AM_WRITE(bublbobl_sound_command_w) // ???
+ AM_RANGE(0xfc00, 0xfc00) AM_READWRITE(sound_status_r, bublbobl_sound_command_w)
AM_RANGE(0xfe00, 0xfe00) AM_READ(tokio_mcu_r) AM_WRITENOP // ???
ADDRESS_MAP_END
@@ -396,7 +387,7 @@ ADDRESS_MAP_END
static ADDRESS_MAP_START( tokio_sound_map, ADDRESS_SPACE_PROGRAM, 8 )
AM_RANGE(0x0000, 0x7fff) AM_ROM
AM_RANGE(0x8000, 0x8fff) AM_RAM
- AM_RANGE(0x9000, 0x9000) AM_READ(soundlatch_r) AM_WRITENOP // ???
+ AM_RANGE(0x9000, 0x9000) AM_READWRITE(soundlatch_r, sound_status_w)
AM_RANGE(0x9800, 0x9800) AM_READNOP // ???
AM_RANGE(0xa000, 0xa000) AM_WRITE(bublbobl_sh_nmi_disable_w)
AM_RANGE(0xa800, 0xa800) AM_WRITE(bublbobl_sh_nmi_enable_w)
@@ -1282,11 +1273,9 @@ static DRIVER_INIT( tokio )
static DRIVER_INIT( tokiob )
{
- configure_banks(machine);
+ DRIVER_INIT_CALL(tokio);
memory_install_read8_handler(cpu_get_address_space(machine->cpu[0], ADDRESS_SPACE_PROGRAM), 0xfe00, 0xfe00, 0, 0, tokiob_mcu_r );
-
- DRIVER_INIT_CALL(tokio);
}
diff --git a/src/mame/drivers/dcon.c b/src/mame/drivers/dcon.c
index 03b9dc2497b..0a071a695f3 100644
--- a/src/mame/drivers/dcon.c
+++ b/src/mame/drivers/dcon.c
@@ -369,9 +369,10 @@ ROM_START( sdgndmps )
ROM_LOAD16_BYTE( "911-a03.27", 0x40000, 0x20000, CRC(6c24b4f2) SHA1(e9fb82884f47694bebcad9254cb57a0b01dcd9c8) )
ROM_LOAD16_BYTE( "911-a04.28", 0x40001, 0x20000, CRC(6ff9d716) SHA1(303faec19a84afd6cbcf3ca5d4877693c11d406e) )
- ROM_REGION( 0x20000*2, "audiocpu", 0 ) /* Z80 code, banked data */
+ ROM_REGION( 0x20000, "audiocpu", 0 ) /* Z80 code, banked data */
ROM_LOAD( "911-a05.010", 0x00000, 0x08000, CRC(90455406) SHA1(dd2c5b96ac4b51251a3d34d97cc9af360afaa38c) )
ROM_CONTINUE( 0x10000, 0x08000 )
+ ROM_COPY( "audiocpu", 0, 0x18000, 0x08000 )
ROM_REGION( 0x020000, "gfx1", ROMREGION_DISPOSE )
ROM_LOAD( "911-a08.66", 0x000000, 0x10000, CRC(e7e04823) SHA1(d9b1ace5cd8218d5a4767cf5adbc267dce7c0668) ) /* chars */
diff --git a/src/mame/drivers/suna8.c b/src/mame/drivers/suna8.c
index 5ff6444652c..5a1fe5cf289 100644
--- a/src/mame/drivers/suna8.c
+++ b/src/mame/drivers/suna8.c
@@ -23,7 +23,7 @@ Year + Game Game PCB Epoxy CPU Notes
To Do:
-- Samples playing in rranger, starfigh, sparkman (AY8910 ports A&B)
+- Samples playing in starfigh, sparkman (AY8910 ports A&B)
Notes:
@@ -576,6 +576,7 @@ static WRITE8_HANDLER( rranger_bankswitch_w )
*/
static READ8_HANDLER( rranger_soundstatus_r )
{
+ soundlatch2_r(space, offset);
return 0x02;
}
@@ -996,9 +997,9 @@ ADDRESS_MAP_END
static ADDRESS_MAP_START( rranger_sound_writemem, ADDRESS_SPACE_PROGRAM, 8 )
AM_RANGE(0x0000, 0x7fff) AM_WRITE(SMH_ROM ) // ROM
AM_RANGE(0xc000, 0xc7ff) AM_WRITE(SMH_RAM ) // RAM
- AM_RANGE(0xd000, 0xd000) AM_WRITE(soundlatch2_w ) //
- AM_RANGE(0xa000, 0xa001) AM_DEVWRITE("ym1", ym2203_w )
- AM_RANGE(0xa002, 0xa003) AM_DEVWRITE("ym2", ym2203_w )
+ AM_RANGE(0xd000, 0xd000) AM_WRITE(soundlatch2_w ) // To Sound CPU
+ AM_RANGE(0xa000, 0xa001) AM_DEVWRITE("ym1", ym2203_w ) // Samples + Music
+ AM_RANGE(0xa002, 0xa003) AM_DEVWRITE("ym2", ym2203_w ) // Music + FX
ADDRESS_MAP_END
@@ -1530,6 +1531,18 @@ MACHINE_DRIVER_END
/* 1 x 24 MHz crystal */
+static const ym2203_interface rranger_ym2203_interface =
+{
+ {
+ AY8910_LEGACY_OUTPUT,
+ AY8910_DEFAULT_LOADS,
+ DEVCB_NULL,
+ DEVCB_NULL,
+ DEVCB_DEVICE_HANDLER("samples", rranger_play_samples_w),
+ DEVCB_DEVICE_HANDLER("samples", suna8_samples_number_w),
+ }
+};
+
/* 2203 + 8910 */
static MACHINE_DRIVER_START( rranger )
@@ -1561,10 +1574,16 @@ static MACHINE_DRIVER_START( rranger )
MDRV_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
MDRV_SOUND_ADD("ym1", YM2203, SUNA8_MASTER_CLOCK / 6)
- MDRV_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 0.50)
- MDRV_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 0.50)
+ MDRV_SOUND_CONFIG(rranger_ym2203_interface)
+ MDRV_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 0.90)
+ MDRV_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 0.90)
MDRV_SOUND_ADD("ym2", YM2203, SUNA8_MASTER_CLOCK / 6)
+ MDRV_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 0.90)
+ MDRV_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 0.90)
+
+ MDRV_SOUND_ADD("samples", SAMPLES, 0)
+ MDRV_SOUND_CONFIG(suna8_samples_interface)
MDRV_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 0.50)
MDRV_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 0.50)
MACHINE_DRIVER_END
@@ -2323,18 +2342,18 @@ static DRIVER_INIT( suna8 )
}
/* Working Games */
-GAME( 1988, rranger, 0, rranger, rranger, suna8, ROT0, "SunA (Sharp Image license)", "Rough Ranger (v2.0)", GAME_IMPERFECT_SOUND )
-GAME( 1988, hardhead, 0, hardhead, hardhead, hardhead, ROT0, "SunA", "Hard Head" , 0)
-GAME( 1988, hardhedb, hardhead, hardhead, hardhead, hardhedb, ROT0, "bootleg", "Hard Head (bootleg)" , 0)
-GAME( 1988, pop_hh, hardhead, hardhead, hardhead, hardhedb, ROT0, "bootleg", "Popper (Hard Head bootleg)" , 0)
-GAME( 1991, hardhea2, 0, hardhea2, hardhea2, hardhea2, ROT0, "SunA", "Hard Head 2 (v2.0)" , 0 )
+GAME( 1988, rranger, 0, rranger, rranger, suna8, ROT0, "SunA (Sharp Image license)", "Rough Ranger (v2.0)", 0)
+GAME( 1988, hardhead, 0, hardhead, hardhead, hardhead, ROT0, "SunA", "Hard Head" , 0)
+GAME( 1988, hardhedb, hardhead, hardhead, hardhead, hardhedb, ROT0, "bootleg", "Hard Head (bootleg)" , 0)
+GAME( 1988, pop_hh, hardhead, hardhead, hardhead, hardhedb, ROT0, "bootleg", "Popper (Hard Head bootleg)" , 0)
+GAME( 1991, hardhea2, 0, hardhea2, hardhea2, hardhea2, ROT0, "SunA", "Hard Head 2 (v2.0)" , 0 )
/* Non Working Games */
-GAME( 1988, sranger, rranger, rranger, rranger, suna8, ROT0, "SunA", "Super Ranger (v2.0)", GAME_NOT_WORKING )
-GAME( 1988, srangerb, rranger, rranger, rranger, suna8, ROT0, "bootleg", "Super Ranger (bootleg)", GAME_NOT_WORKING )
-GAME( 1988, srangerw, rranger, rranger, rranger, suna8, ROT0, "SunA (WDK license)", "Super Ranger (WDK)", GAME_NOT_WORKING )
-GAME( 1989, sparkman, 0, sparkman, sparkman, sparkman, ROT0, "SunA", "Spark Man (v 2.0)", GAME_NOT_WORKING )
-GAME( 1990, starfigh, 0, starfigh, hardhea2, starfigh, ROT90, "SunA", "Star Fighter (v1)", GAME_NOT_WORKING )
-GAME( 1992, brickzn, 0, brickzn, brickzn, brickzn, ROT90, "SunA", "Brick Zone (v5.0)", GAME_NOT_WORKING )
-GAME( 1992, brickzn3, brickzn, brickzn, brickzn, brickzn3, ROT90, "SunA", "Brick Zone (v4.0)", GAME_NOT_WORKING )
+GAME( 1988, sranger, rranger, rranger, rranger, suna8, ROT0, "SunA", "Super Ranger (v2.0)", GAME_NOT_WORKING )
+GAME( 1988, srangerb, rranger, rranger, rranger, suna8, ROT0, "bootleg", "Super Ranger (bootleg)", GAME_NOT_WORKING )
+GAME( 1988, srangerw, rranger, rranger, rranger, suna8, ROT0, "SunA (WDK license)", "Super Ranger (WDK)", GAME_NOT_WORKING )
+GAME( 1989, sparkman, 0, sparkman, sparkman, sparkman, ROT0, "SunA", "Spark Man (v 2.0)", GAME_NOT_WORKING )
+GAME( 1990, starfigh, 0, starfigh, hardhea2, starfigh, ROT90, "SunA", "Star Fighter (v1)", GAME_NOT_WORKING )
+GAME( 1992, brickzn, 0, brickzn, brickzn, brickzn, ROT90, "SunA", "Brick Zone (v5.0)", GAME_NOT_WORKING )
+GAME( 1992, brickzn3, brickzn, brickzn, brickzn, brickzn3, ROT90, "SunA", "Brick Zone (v4.0)", GAME_NOT_WORKING )
diff --git a/src/mame/includes/bublbobl.h b/src/mame/includes/bublbobl.h
index 0352a4edf04..e4cc2807ff7 100644
--- a/src/mame/includes/bublbobl.h
+++ b/src/mame/includes/bublbobl.h
@@ -11,6 +11,9 @@ READ8_HANDLER( tokiob_mcu_r );
WRITE8_HANDLER( bublbobl_sound_command_w );
WRITE8_HANDLER( bublbobl_sh_nmi_disable_w );
WRITE8_HANDLER( bublbobl_sh_nmi_enable_w );
+WRITE8_HANDLER( soundcpu_reset_w );
+WRITE8_HANDLER( sound_status_w );
+READ8_HANDLER( sound_status_r );
READ8_HANDLER( boblbobl_ic43_a_r );
WRITE8_HANDLER( boblbobl_ic43_a_w );
READ8_HANDLER( boblbobl_ic43_b_r );
diff --git a/src/mame/includes/suna8.h b/src/mame/includes/suna8.h
index 0dbc9d4f293..8e848882e0b 100644
--- a/src/mame/includes/suna8.h
+++ b/src/mame/includes/suna8.h
@@ -3,6 +3,7 @@
/*----------- defined in audio/suna8.c -----------*/
WRITE8_DEVICE_HANDLER( suna8_play_samples_w );
+WRITE8_DEVICE_HANDLER( rranger_play_samples_w );
WRITE8_DEVICE_HANDLER( suna8_samples_number_w );
SAMPLES_START( suna8_sh_start );
diff --git a/src/mame/machine/bublbobl.c b/src/mame/machine/bublbobl.c
index d1f347d865a..f68c1f79b70 100644
--- a/src/mame/machine/bublbobl.c
+++ b/src/mame/machine/bublbobl.c
@@ -90,7 +90,7 @@ READ8_HANDLER( tokiob_mcu_r )
-static int sound_nmi_enable,pending_nmi;
+static int sound_nmi_enable,pending_nmi,sound_status;
static TIMER_CALLBACK( nmi_callback )
{
@@ -119,7 +119,20 @@ WRITE8_HANDLER( bublbobl_sh_nmi_enable_w )
}
}
+WRITE8_HANDLER(soundcpu_reset_w)
+{
+ cpu_set_input_line(space->machine->cpu[2], INPUT_LINE_RESET, data ? ASSERT_LINE : CLEAR_LINE);
+}
+READ8_HANDLER( sound_status_r )
+{
+ return sound_status;
+}
+
+WRITE8_HANDLER( sound_status_w )
+{
+ sound_status = data;
+}