Hooked up sound in Super Shanghai Dragon's Eye [Angelo Salese]

This commit is contained in:
Angelo Salese 2009-05-21 21:03:05 +00:00
parent f2223359ba
commit cba19c3286

View File

@ -13,8 +13,8 @@
OSC : 28.0000MHz 16.0000MHz OSC : 28.0000MHz 16.0000MHz
The original uses a protection chip which isn't fully worked out yet. The original uses a protection chip which isn't fully worked out yet.
Sound doesn't work. The bootleg never seems to write to a sound latch Sound doesn't work for the original set, probably the sound ports are inside
(Not sure the bootleg even has the same sound hardware as the original). the protection area.
Emulation by Bryan McPhail, mish@tendril.co.uk Emulation by Bryan McPhail, mish@tendril.co.uk
@ -73,6 +73,8 @@ extern UINT16 *sshangha_pf1_rowscroll, *sshangha_pf2_rowscroll;
static UINT16 *sshangha_prot_data; static UINT16 *sshangha_prot_data;
static UINT16 *sshangha_sound_shared_ram;
/******************************************************************************/ /******************************************************************************/
static WRITE16_HANDLER( sshangha_protection16_w ) static WRITE16_HANDLER( sshangha_protection16_w )
@ -87,12 +89,6 @@ static WRITE16_HANDLER( sshangha_protection16_w )
} }
} }
static WRITE16_HANDLER( sshangha_sound_w )
{
soundlatch_w(space, 0, data & 0xff);
cputag_set_input_line(space->machine, "audiocpu", INPUT_LINE_NMI, PULSE_LINE);
}
/* Protection/IO chip 146 */ /* Protection/IO chip 146 */
static READ16_HANDLER( sshangha_protection16_r ) static READ16_HANDLER( sshangha_protection16_r )
{ {
@ -151,9 +147,8 @@ static MACHINE_RESET( sshangha )
static ADDRESS_MAP_START( sshangha_map, ADDRESS_SPACE_PROGRAM, 16 ) static ADDRESS_MAP_START( sshangha_map, ADDRESS_SPACE_PROGRAM, 16 )
AM_RANGE(0x000000, 0x03ffff) AM_ROM AM_RANGE(0x000000, 0x03ffff) AM_ROM
AM_RANGE(0x084000, 0x0847ff) AM_READ(sshanghb_protection16_r) AM_RANGE(0x084000, 0x0847ff) AM_READ(sshanghb_protection16_r)
AM_RANGE(0x10000c, 0x10000d) AM_WRITE(sshangha_sound_w) AM_RANGE(0x100000, 0x10000f) AM_RAM AM_BASE(&sshangha_sound_shared_ram)
AM_RANGE(0x101000, 0x101001) AM_READ(deco_71_r)//bootleg hack AM_RANGE(0x101000, 0x10100f) AM_RAM AM_BASE(&sshangha_sound_shared_ram) /* the bootleg writes here */
AM_RANGE(0x10100c, 0x10100d) AM_WRITE(sshangha_sound_w) /* the bootleg writes here */
AM_RANGE(0x200000, 0x201fff) AM_RAM_WRITE(sshangha_pf1_data_w) AM_BASE(&sshangha_pf1_data) AM_RANGE(0x200000, 0x201fff) AM_RAM_WRITE(sshangha_pf1_data_w) AM_BASE(&sshangha_pf1_data)
AM_RANGE(0x202000, 0x203fff) AM_RAM_WRITE(sshangha_pf2_data_w) AM_BASE(&sshangha_pf2_data) AM_RANGE(0x202000, 0x203fff) AM_RAM_WRITE(sshangha_pf2_data_w) AM_BASE(&sshangha_pf2_data)
@ -178,11 +173,25 @@ ADDRESS_MAP_END
/******************************************************************************/ /******************************************************************************/
static ADDRESS_MAP_START( sound_map, ADDRESS_SPACE_PROGRAM, 8 ) /* 8 "sound latches" shared between main and sound cpus. */
static READ8_HANDLER(sshangha_sound_shared_r)
{
return sshangha_sound_shared_ram[offset] & 0xff;
}
static WRITE8_HANDLER(sshangha_sound_shared_w)
{
sshangha_sound_shared_ram[offset] = data & 0xff;
}
/* Note: there's rom data after 0x8000 but the game never seem to call a rom bank, left-over? */
static ADDRESS_MAP_START( sshangha_sound_map, ADDRESS_SPACE_PROGRAM, 8 )
AM_RANGE(0x0000, 0x7fff) AM_ROM AM_RANGE(0x0000, 0x7fff) AM_ROM
AM_RANGE(0xc000, 0xc001) AM_DEVREADWRITE("ym", ym2203_r,ym2203_w) AM_RANGE(0xc000, 0xc001) AM_DEVREADWRITE("ym", ym2203_r,ym2203_w)
AM_RANGE(0xf800, 0xffff) AM_RAM AM_RANGE(0xc200, 0xc201) AM_DEVREADWRITE("oki",okim6295_r,okim6295_w)
// AM_RANGE(0xf800, 0xf800) AM_READ(soundlatch_r) AM_RANGE(0xf800, 0xf807) AM_READWRITE(sshangha_sound_shared_r,sshangha_sound_shared_w)
AM_RANGE(0xf808, 0xffff) AM_RAM
ADDRESS_MAP_END ADDRESS_MAP_END
/******************************************************************************/ /******************************************************************************/
@ -330,7 +339,9 @@ static MACHINE_DRIVER_START( sshangha )
MDRV_CPU_VBLANK_INT("screen", irq6_line_hold) MDRV_CPU_VBLANK_INT("screen", irq6_line_hold)
MDRV_CPU_ADD("audiocpu", Z80, 16000000/4) MDRV_CPU_ADD("audiocpu", Z80, 16000000/4)
MDRV_CPU_PROGRAM_MAP(sound_map) MDRV_CPU_PROGRAM_MAP(sshangha_sound_map)
MDRV_QUANTUM_TIME(HZ(6000))
MDRV_MACHINE_RESET(sshangha) /* init machine */ MDRV_MACHINE_RESET(sshangha) /* init machine */
@ -351,7 +362,7 @@ static MACHINE_DRIVER_START( sshangha )
MDRV_VIDEO_UPDATE(sshangha) MDRV_VIDEO_UPDATE(sshangha)
/* sound hardware */ /* sound hardware */
MDRV_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") MDRV_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") /* sure it's stereo? */
MDRV_SOUND_ADD("ym", YM2203, 16000000/4) MDRV_SOUND_ADD("ym", YM2203, 16000000/4)
MDRV_SOUND_CONFIG(ym2203_config) MDRV_SOUND_CONFIG(ym2203_config)
@ -425,4 +436,4 @@ static DRIVER_INIT( sshangha )
GAME( 1992, sshangha, 0, sshangha, sshangha, sshangha, ROT0, "Hot-B.", "Super Shanghai Dragon's Eye (Japan)", GAME_UNEMULATED_PROTECTION | GAME_NO_SOUND ) GAME( 1992, sshangha, 0, sshangha, sshangha, sshangha, ROT0, "Hot-B.", "Super Shanghai Dragon's Eye (Japan)", GAME_UNEMULATED_PROTECTION | GAME_NO_SOUND )
GAME( 1992, sshanghb, sshangha, sshangha, sshangha, sshangha, ROT0, "bootleg", "Super Shanghai Dragon's Eye (World, bootleg)", GAME_NO_SOUND ) GAME( 1992, sshanghb, sshangha, sshangha, sshangha, sshangha, ROT0, "bootleg", "Super Shanghai Dragon's Eye (World, bootleg)", 0 )