mirror of
https://github.com/holub/mame
synced 2025-06-05 04:16:28 +03:00
* 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:
parent
5f4f289e76
commit
c1d571c4f2
@ -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:
|
||||
|
@ -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;
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
|
||||
|
@ -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 */
|
||||
|
@ -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 )
|
||||
|
||||
|
@ -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 );
|
||||
|
@ -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 );
|
||||
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user