snowbros.cpp: Soundlatch modernization (nw)

This commit is contained in:
AJR 2017-08-29 03:19:39 -04:00
parent ab6194fa71
commit 8a93635bc3
2 changed files with 28 additions and 50 deletions

View File

@ -182,29 +182,6 @@ TIMER_DEVICE_CALLBACK_MEMBER(snowbros_state::snowbros3_irq)
}
/* Sound Routines */
READ16_MEMBER(snowbros_state::snowbros_68000_sound_r)
{
return m_soundlatch->read(space,offset);
}
WRITE16_MEMBER(snowbros_state::snowbros_68000_sound_w)
{
if (ACCESSING_BITS_0_7)
{
m_soundlatch->write(space, offset, data & 0xff);
m_soundcpu->set_input_line(INPUT_LINE_NMI, PULSE_LINE);
}
}
WRITE16_MEMBER(snowbros_state::semicom_soundcmd_w)
{
if (ACCESSING_BITS_0_7) m_soundlatch->write(space,0,data & 0xff);
}
READ16_MEMBER(snowbros_state::toto_read)
{
int pc = space.device().safe_pc();
@ -218,7 +195,8 @@ static ADDRESS_MAP_START( snowbros_map, AS_PROGRAM, 16, snowbros_state )
AM_RANGE(0x000000, 0x03ffff) AM_ROM
AM_RANGE(0x100000, 0x103fff) AM_RAM
AM_RANGE(0x200000, 0x200001) AM_DEVWRITE("watchdog", watchdog_timer_device, reset16_w)
AM_RANGE(0x300000, 0x300001) AM_READWRITE(snowbros_68000_sound_r,snowbros_68000_sound_w)
AM_RANGE(0x300000, 0x300001) AM_DEVREAD8("soundlatch2", generic_latch_8_device, read, 0x00ff)
AM_RANGE(0x300000, 0x300001) AM_DEVWRITE8("soundlatch", generic_latch_8_device, write, 0x00ff)
AM_RANGE(0x400000, 0x400001) AM_WRITE8(snowbros_flipscreen_w, 0xff00)
AM_RANGE(0x500000, 0x500001) AM_READ_PORT("DSW1")
AM_RANGE(0x500002, 0x500003) AM_READ_PORT("DSW2")
@ -238,7 +216,8 @@ ADDRESS_MAP_END
static ADDRESS_MAP_START( sound_io_map, AS_IO, 8, snowbros_state )
ADDRESS_MAP_GLOBAL_MASK(0xff)
AM_RANGE(0x02, 0x03) AM_DEVREADWRITE("ymsnd", ym3812_device, read, write)
AM_RANGE(0x04, 0x04) AM_DEVREADWRITE("soundlatch", generic_latch_8_device, read, write) /* goes back to the main CPU, checked during boot */
AM_RANGE(0x04, 0x04) AM_DEVREAD("soundlatch", generic_latch_8_device, read)
AM_RANGE(0x04, 0x04) AM_DEVWRITE("soundlatch2", generic_latch_8_device, write) // goes back to the main CPU, checked during boot
ADDRESS_MAP_END
@ -300,7 +279,8 @@ static ADDRESS_MAP_START( wintbob_map, AS_PROGRAM, 16, snowbros_state )
AM_RANGE(0x000000, 0x03ffff) AM_ROM
AM_RANGE(0x100000, 0x103fff) AM_RAM
AM_RANGE(0x200000, 0x200001) AM_DEVWRITE("watchdog", watchdog_timer_device, reset16_w)
AM_RANGE(0x300000, 0x300001) AM_READWRITE(snowbros_68000_sound_r,snowbros_68000_sound_w)
AM_RANGE(0x300000, 0x300001) AM_DEVREAD8("soundlatch2", generic_latch_8_device, read, 0x00ff)
AM_RANGE(0x300000, 0x300001) AM_DEVWRITE8("soundlatch", generic_latch_8_device, write, 0x00ff)
AM_RANGE(0x400000, 0x400001) AM_WRITE8(bootleg_flipscreen_w, 0xff00)
AM_RANGE(0x500000, 0x500001) AM_READ_PORT("DSW1")
AM_RANGE(0x500002, 0x500003) AM_READ_PORT("DSW2")
@ -318,7 +298,7 @@ static ADDRESS_MAP_START( honeydol_map, AS_PROGRAM, 16, snowbros_state )
AM_RANGE(0x000000, 0x03ffff) AM_ROM
AM_RANGE(0x100000, 0x10ffff) AM_RAM AM_SHARE("hyperpac_ram")
AM_RANGE(0x200000, 0x200001) AM_WRITENOP /* ? */
AM_RANGE(0x300000, 0x300001) AM_WRITE(snowbros_68000_sound_w) /* ? */
AM_RANGE(0x300000, 0x300001) AM_DEVWRITE8("soundlatch", generic_latch_8_device, write, 0x00ff)
AM_RANGE(0x400000, 0x400001) AM_WRITE(snowbros_irq4_ack_w) /* IRQ 4 acknowledge */
AM_RANGE(0x500000, 0x500001) AM_WRITE(snowbros_irq3_ack_w) /* IRQ 3 acknowledge */
AM_RANGE(0x600000, 0x600001) AM_WRITE(snowbros_irq2_ack_w) /* IRQ 2 acknowledge */
@ -339,25 +319,18 @@ ADDRESS_MAP_END
static ADDRESS_MAP_START( honeydol_sound_io_map, AS_IO, 8, snowbros_state )
ADDRESS_MAP_GLOBAL_MASK(0xff)
AM_RANGE(0x02, 0x03) AM_DEVREADWRITE("ymsnd", ym3812_device, read, write) // not connected?
AM_RANGE(0x04, 0x04) AM_DEVREADWRITE("soundlatch", generic_latch_8_device, read, write) /* goes back to the main CPU, checked during boot */
AM_RANGE(0x04, 0x04) AM_DEVREAD("soundlatch", generic_latch_8_device, read)
AM_RANGE(0x04, 0x04) AM_WRITENOP // still written but never actually read by the main CPU
ADDRESS_MAP_END
/* Twin Adventure */
WRITE16_MEMBER(snowbros_state::twinadv_68000_sound_w)
{
if (ACCESSING_BITS_0_7)
{
m_soundlatch->write(space, offset, data & 0xff);
m_soundcpu->set_input_line(INPUT_LINE_NMI, PULSE_LINE);
}
}
static ADDRESS_MAP_START( twinadv_map, AS_PROGRAM, 16, snowbros_state )
AM_RANGE(0x000000, 0x03ffff) AM_ROM
AM_RANGE(0x100000, 0x10ffff) AM_RAM
AM_RANGE(0x200000, 0x200001) AM_DEVWRITE("watchdog", watchdog_timer_device, reset16_w)
AM_RANGE(0x300000, 0x300001) AM_READWRITE(snowbros_68000_sound_r,twinadv_68000_sound_w)
AM_RANGE(0x300000, 0x300001) AM_DEVREAD8("soundlatch2", generic_latch_8_device, read, 0x00ff)
AM_RANGE(0x300000, 0x300001) AM_DEVWRITE8("soundlatch", generic_latch_8_device, write, 0x00ff)
AM_RANGE(0x400000, 0x400001) AM_WRITE8(bootleg_flipscreen_w, 0xff00)
AM_RANGE(0x500000, 0x500001) AM_READ_PORT("DSW1")
@ -381,7 +354,8 @@ WRITE8_MEMBER(snowbros_state::twinadv_oki_bank_w)
static ADDRESS_MAP_START( twinadv_sound_io_map, AS_IO, 8, snowbros_state )
ADDRESS_MAP_GLOBAL_MASK(0xff)
AM_RANGE(0x02, 0x02) AM_DEVREADWRITE("soundlatch", generic_latch_8_device, read, write) // back to 68k?
AM_RANGE(0x02, 0x02) AM_DEVREAD("soundlatch", generic_latch_8_device, read)
AM_RANGE(0x02, 0x02) AM_DEVWRITE("soundlatch2", generic_latch_8_device, write) // back to 68k?
AM_RANGE(0x04, 0x04) AM_WRITE(twinadv_oki_bank_w) // oki bank?
AM_RANGE(0x06, 0x06) AM_DEVREADWRITE("oki", okim6295_device, read, write)
ADDRESS_MAP_END
@ -397,7 +371,7 @@ sound hardware is also different
static ADDRESS_MAP_START( hyperpac_map, AS_PROGRAM, 16, snowbros_state )
AM_RANGE(0x000000, 0x0fffff) AM_ROM
AM_RANGE(0x100000, 0x10ffff) AM_RAM AM_SHARE("hyperpac_ram")
AM_RANGE(0x300000, 0x300001) AM_WRITE(semicom_soundcmd_w)
AM_RANGE(0x300000, 0x300001) AM_DEVWRITE8("soundlatch", generic_latch_8_device, write, 0x00ff)
// AM_RANGE(0x400000, 0x400001) ???
AM_RANGE(0x500000, 0x500001) AM_READ_PORT("DSW1")
AM_RANGE(0x500002, 0x500003) AM_READ_PORT("DSW2")
@ -418,10 +392,6 @@ static ADDRESS_MAP_START( hyperpac_sound_map, AS_PROGRAM, 8, snowbros_state )
AM_RANGE(0xf008, 0xf008) AM_DEVREAD("soundlatch", generic_latch_8_device, read)
ADDRESS_MAP_END
static ADDRESS_MAP_START( hyperpac_sound_io_map, AS_IO, 8, snowbros_state )
ADDRESS_MAP_GLOBAL_MASK(0xff)
ADDRESS_MAP_END
/* Same volume used for all samples at the Moment, could be right, we have no
way of knowing .. */
READ16_MEMBER(snowbros_state::sb3_sound_r)
@ -551,7 +521,7 @@ ADDRESS_MAP_END
static ADDRESS_MAP_START( finalttr_map, AS_PROGRAM, 16, snowbros_state )
AM_RANGE(0x000000, 0x0fffff) AM_ROM
AM_RANGE(0x100000, 0x103fff) AM_RAM AM_SHARE("hyperpac_ram")
AM_RANGE(0x300000, 0x300001) AM_WRITE(semicom_soundcmd_w)
AM_RANGE(0x300000, 0x300001) AM_DEVWRITE8("soundlatch", generic_latch_8_device, write, 0x00ff)
// AM_RANGE(0x400000, 0x400001) ???
AM_RANGE(0x500000, 0x500001) AM_READ_PORT("DSW1")
@ -1801,6 +1771,9 @@ static MACHINE_CONFIG_START( snowbros )
MCFG_SPEAKER_STANDARD_MONO("mono")
MCFG_GENERIC_LATCH_8_ADD("soundlatch")
MCFG_GENERIC_LATCH_DATA_PENDING_CB(INPUTLINE("soundcpu", INPUT_LINE_NMI))
MCFG_GENERIC_LATCH_8_ADD("soundlatch2")
MCFG_SOUND_ADD("ymsnd", YM3812, XTAL_12MHz/4) /* 3 MHz - confirmed */
MCFG_YM3812_IRQ_HANDLER(INPUTLINE("soundcpu", 0))
@ -1835,10 +1808,15 @@ static MACHINE_CONFIG_DERIVED( semicom, snowbros )
MCFG_CPU_MODIFY("soundcpu")
MCFG_CPU_CLOCK(XTAL_16MHz/4) /* 4MHz - Confirmed */
MCFG_CPU_PROGRAM_MAP(hyperpac_sound_map)
MCFG_CPU_IO_MAP(hyperpac_sound_io_map)
MCFG_DEVICE_REMOVE_ADDRESS_MAP(AS_IO)
MCFG_GFXDECODE_MODIFY("gfxdecode", hyperpac)
MCFG_DEVICE_MODIFY("soundlatch")
MCFG_GENERIC_LATCH_DATA_PENDING_CB(NOOP)
MCFG_DEVICE_REMOVE("soundlatch2")
/* sound hardware */
MCFG_SOUND_REPLACE("ymsnd", YM2151, XTAL_16MHz/4) /* 4MHz - Confirmed */
MCFG_YM2151_IRQ_HANDLER(INPUTLINE("soundcpu", 0))
@ -1893,6 +1871,7 @@ static MACHINE_CONFIG_START( honeydol )
MCFG_SPEAKER_STANDARD_MONO("mono")
MCFG_GENERIC_LATCH_8_ADD("soundlatch")
MCFG_GENERIC_LATCH_DATA_PENDING_CB(INPUTLINE("soundcpu", INPUT_LINE_NMI))
MCFG_SOUND_ADD("ymsnd", YM3812, XTAL_12MHz/4) /* 3Mhz */
MCFG_YM3812_IRQ_HANDLER(INPUTLINE("soundcpu", 0))
@ -1933,6 +1912,9 @@ static MACHINE_CONFIG_START( twinadv )
MCFG_SPEAKER_STANDARD_MONO("mono")
MCFG_GENERIC_LATCH_8_ADD("soundlatch")
MCFG_GENERIC_LATCH_DATA_PENDING_CB(INPUTLINE("soundcpu", INPUT_LINE_NMI))
MCFG_GENERIC_LATCH_8_ADD("soundlatch2")
/* sound hardware */
MCFG_OKIM6295_ADD("oki", XTAL_16MHz/16, PIN7_HIGH) /* freq? */

View File

@ -41,12 +41,8 @@ public:
DECLARE_WRITE16_MEMBER(snowbros_irq4_ack_w);
DECLARE_WRITE16_MEMBER(snowbros_irq3_ack_w);
DECLARE_WRITE16_MEMBER(snowbros_irq2_ack_w);
DECLARE_READ16_MEMBER(snowbros_68000_sound_r);
DECLARE_WRITE16_MEMBER(snowbros_68000_sound_w);
DECLARE_WRITE16_MEMBER(semicom_soundcmd_w);
DECLARE_READ8_MEMBER(prot_io_r);
DECLARE_WRITE8_MEMBER(prot_io_w);
DECLARE_WRITE16_MEMBER(twinadv_68000_sound_w);
DECLARE_READ16_MEMBER(sb3_sound_r);
DECLARE_READ16_MEMBER(_4in1_02_read);
DECLARE_READ16_MEMBER(_3in1_read);