* 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
This commit is contained in:
Aaron Giles 2009-03-28 18:10:38 +00:00
parent 5f4f289e76
commit c1d571c4f2
8 changed files with 78 additions and 39 deletions

View File

@ -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:

View File

@ -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;

View File

@ -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);
}

View File

@ -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 */

View File

@ -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 )

View File

@ -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 );

View File

@ -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 );

View File

@ -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;
}