Merge pull request #1828 from ajrhacker/yunsung8_ls157

discoboy.cpp, yunsung8.cpp: Use 74LS157 device (nw)
This commit is contained in:
Vas Crabb 2016-12-12 16:38:05 +11:00 committed by GitHub
commit dafd2dccc6
3 changed files with 36 additions and 43 deletions

View File

@ -44,6 +44,7 @@ Notes:
#include "emu.h" #include "emu.h"
#include "cpu/z80/z80.h" #include "cpu/z80/z80.h"
#include "machine/gen_latch.h" #include "machine/gen_latch.h"
#include "machine/74157.h"
#include "sound/msm5205.h" #include "sound/msm5205.h"
#include "sound/3812intf.h" #include "sound/3812intf.h"
@ -57,6 +58,7 @@ public:
m_maincpu(*this, "maincpu"), m_maincpu(*this, "maincpu"),
m_audiocpu(*this, "audiocpu"), m_audiocpu(*this, "audiocpu"),
m_msm(*this, "msm"), m_msm(*this, "msm"),
m_adpcm_select(*this, "adpcm_select"),
m_gfxdecode(*this, "gfxdecode"), m_gfxdecode(*this, "gfxdecode"),
m_palette(*this, "palette"), m_palette(*this, "palette"),
m_soundlatch(*this, "soundlatch") { } m_soundlatch(*this, "soundlatch") { }
@ -65,13 +67,14 @@ public:
uint8_t m_ram_bank; uint8_t m_ram_bank;
uint8_t m_gfxbank; uint8_t m_gfxbank;
uint8_t m_port_00; uint8_t m_port_00;
int m_adpcm;
uint8_t m_toggle; bool m_toggle;
/* devices */ /* devices */
required_device<cpu_device> m_maincpu; required_device<cpu_device> m_maincpu;
required_device<cpu_device> m_audiocpu; required_device<cpu_device> m_audiocpu;
required_device<msm5205_device> m_msm; required_device<msm5205_device> m_msm;
required_device<ls157_device> m_adpcm_select;
required_device<gfxdecode_device> m_gfxdecode; required_device<gfxdecode_device> m_gfxdecode;
required_device<palette_device> m_palette; required_device<palette_device> m_palette;
required_device<generic_latch_8_device> m_soundlatch; required_device<generic_latch_8_device> m_soundlatch;
@ -94,7 +97,6 @@ public:
DECLARE_READ8_MEMBER(discoboy_ram_att_r); DECLARE_READ8_MEMBER(discoboy_ram_att_r);
DECLARE_WRITE8_MEMBER(discoboy_ram_att_w); DECLARE_WRITE8_MEMBER(discoboy_ram_att_w);
DECLARE_READ8_MEMBER(discoboy_port_06_r); DECLARE_READ8_MEMBER(discoboy_port_06_r);
DECLARE_WRITE8_MEMBER(yunsung8_adpcm_w);
DECLARE_WRITE8_MEMBER(yunsung8_sound_bankswitch_w); DECLARE_WRITE8_MEMBER(yunsung8_sound_bankswitch_w);
DECLARE_DRIVER_INIT(discoboy); DECLARE_DRIVER_INIT(discoboy);
virtual void machine_start() override; virtual void machine_start() override;
@ -350,17 +352,11 @@ WRITE8_MEMBER(discoboy_state::yunsung8_sound_bankswitch_w)
logerror("%s: Bank %02X\n", machine().describe_context(), data); logerror("%s: Bank %02X\n", machine().describe_context(), data);
} }
WRITE8_MEMBER(discoboy_state::yunsung8_adpcm_w)
{
/* Swap the nibbles */
m_adpcm = ((data & 0xf) << 4) | ((data >> 4) & 0xf);
}
static ADDRESS_MAP_START( sound_map, AS_PROGRAM, 8, discoboy_state ) static ADDRESS_MAP_START( sound_map, AS_PROGRAM, 8, discoboy_state )
AM_RANGE(0x0000, 0x7fff) AM_ROM AM_RANGE(0x0000, 0x7fff) AM_ROM
AM_RANGE(0x8000, 0xbfff) AM_ROMBANK("sndbank") AM_RANGE(0x8000, 0xbfff) AM_ROMBANK("sndbank")
AM_RANGE(0xe000, 0xe000) AM_WRITE(yunsung8_sound_bankswitch_w) AM_RANGE(0xe000, 0xe000) AM_WRITE(yunsung8_sound_bankswitch_w)
AM_RANGE(0xe400, 0xe400) AM_WRITE(yunsung8_adpcm_w) AM_RANGE(0xe400, 0xe400) AM_DEVWRITE("adpcm_select", ls157_device, ba_w)
AM_RANGE(0xec00, 0xec01) AM_DEVWRITE("ymsnd", ym3812_device, write) AM_RANGE(0xec00, 0xec01) AM_DEVWRITE("ymsnd", ym3812_device, write)
AM_RANGE(0xf000, 0xf7ff) AM_RAM AM_RANGE(0xf000, 0xf7ff) AM_RAM
AM_RANGE(0xf800, 0xf800) AM_DEVREAD("soundlatch", generic_latch_8_device, read) AM_RANGE(0xf800, 0xf800) AM_DEVREAD("soundlatch", generic_latch_8_device, read)
@ -467,7 +463,6 @@ void discoboy_state::machine_start()
save_item(NAME(m_ram_bank)); save_item(NAME(m_ram_bank));
save_item(NAME(m_port_00)); save_item(NAME(m_port_00));
save_item(NAME(m_gfxbank)); save_item(NAME(m_gfxbank));
save_item(NAME(m_adpcm));
save_item(NAME(m_toggle)); save_item(NAME(m_toggle));
} }
@ -476,16 +471,17 @@ void discoboy_state::machine_reset()
m_ram_bank = 0; m_ram_bank = 0;
m_port_00 = 0; m_port_00 = 0;
m_gfxbank = 0; m_gfxbank = 0;
m_adpcm = 0x80; m_toggle = false;
m_toggle = 0;
} }
WRITE_LINE_MEMBER(discoboy_state::yunsung8_adpcm_int) WRITE_LINE_MEMBER(discoboy_state::yunsung8_adpcm_int)
{ {
m_msm->data_w(m_adpcm >> 4); if (!state)
m_adpcm <<= 4; return;
m_toggle ^= 1; m_toggle = !m_toggle;
m_adpcm_select->select_w(m_toggle);
m_audiocpu->set_input_line(INPUT_LINE_NMI, m_toggle);
} }
static MACHINE_CONFIG_START( discoboy, discoboy_state ) static MACHINE_CONFIG_START( discoboy, discoboy_state )
@ -498,8 +494,6 @@ static MACHINE_CONFIG_START( discoboy, discoboy_state )
MCFG_CPU_ADD("audiocpu", Z80, XTAL_10MHz/2) /* 5 MHz? */ MCFG_CPU_ADD("audiocpu", Z80, XTAL_10MHz/2) /* 5 MHz? */
MCFG_CPU_PROGRAM_MAP(sound_map) MCFG_CPU_PROGRAM_MAP(sound_map)
MCFG_CPU_PERIODIC_INT_DRIVER(discoboy_state, nmi_line_pulse, 32*60)
/* video hardware */ /* video hardware */
MCFG_SCREEN_ADD("screen", RASTER) MCFG_SCREEN_ADD("screen", RASTER)
@ -523,6 +517,9 @@ static MACHINE_CONFIG_START( discoboy, discoboy_state )
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 0.6) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 0.6)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 0.6) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 0.6)
MCFG_DEVICE_ADD("adpcm_select", LS157, 0)
MCFG_74LS157_OUT_CB(DEVWRITE8("msm", msm5205_device, data_w))
MCFG_SOUND_ADD("msm", MSM5205, XTAL_400kHz) MCFG_SOUND_ADD("msm", MSM5205, XTAL_400kHz)
MCFG_MSM5205_VCLK_CB(WRITELINE(discoboy_state, yunsung8_adpcm_int)) /* interrupt function */ MCFG_MSM5205_VCLK_CB(WRITELINE(discoboy_state, yunsung8_adpcm_int)) /* interrupt function */
MCFG_MSM5205_PRESCALER_SELECTOR(MSM5205_S96_4B) /* 4KHz, 4 Bits */ MCFG_MSM5205_PRESCALER_SELECTOR(MSM5205_S96_4B) /* 4KHz, 4 Bits */

View File

@ -55,7 +55,7 @@ WRITE8_MEMBER(yunsung8_state::bankswitch_w)
READ8_MEMBER(yunsung8_state::sound_command_r) READ8_MEMBER(yunsung8_state::sound_command_r)
{ {
m_audiocpu->set_input_line(0, CLEAR_LINE); m_audiocpu->set_input_line(0, CLEAR_LINE);
return (m_soundlatch->read (space, 0)); return m_soundlatch->read(space, 0);
} }
WRITE8_MEMBER(yunsung8_state::sound_command_w) WRITE8_MEMBER(yunsung8_state::sound_command_w)
@ -118,18 +118,13 @@ WRITE8_MEMBER(yunsung8_state::sound_bankswitch_w)
logerror("%s: Bank %02X\n", machine().describe_context(), data); logerror("%s: Bank %02X\n", machine().describe_context(), data);
} }
WRITE8_MEMBER(yunsung8_state::adpcm_w)
{
m_adpcm = data;
}
static ADDRESS_MAP_START( sound_map, AS_PROGRAM, 8, yunsung8_state ) static ADDRESS_MAP_START( sound_map, AS_PROGRAM, 8, yunsung8_state )
AM_RANGE(0x0000, 0x7fff) AM_ROM AM_RANGE(0x0000, 0x7fff) AM_ROM
AM_RANGE(0x8000, 0xbfff) AM_ROMBANK("soundbank") // Banked ROM AM_RANGE(0x8000, 0xbfff) AM_ROMBANK("soundbank") // Banked ROM
AM_RANGE(0xe000, 0xe000) AM_WRITE(sound_bankswitch_w) // ROM Bank AM_RANGE(0xe000, 0xe000) AM_WRITE(sound_bankswitch_w) // ROM Bank
AM_RANGE(0xe400, 0xe400) AM_WRITE(adpcm_w) AM_RANGE(0xe400, 0xe400) AM_DEVWRITE("adpcm_select", ls157_device, ba_w)
AM_RANGE(0xec00, 0xec01) AM_DEVWRITE("ymsnd", ym3812_device, write) AM_RANGE(0xec00, 0xec01) AM_DEVWRITE("ymsnd", ym3812_device, write)
AM_RANGE(0xf000, 0xf7ff) AM_RAM AM_RANGE(0xf000, 0xf7ff) AM_RAM
AM_RANGE(0xf800, 0xf800) AM_READ(sound_command_r) // From Main CPU AM_RANGE(0xf800, 0xf800) AM_READ(sound_command_r) // From Main CPU
@ -321,13 +316,12 @@ GFXDECODE_END
WRITE_LINE_MEMBER(yunsung8_state::adpcm_int) WRITE_LINE_MEMBER(yunsung8_state::adpcm_int)
{ {
m_msm->data_w(m_adpcm & 0x0F); if (!state)
m_adpcm >>= 4; return;
m_toggle ^= 1; m_toggle = !m_toggle;
m_adpcm_select->select_w(m_toggle);
if (m_toggle) m_audiocpu->set_input_line(INPUT_LINE_NMI, m_toggle);
m_audiocpu->set_input_line(INPUT_LINE_NMI, PULSE_LINE);
} }
void yunsung8_state::machine_start() void yunsung8_state::machine_start()
@ -341,7 +335,6 @@ void yunsung8_state::machine_start()
save_item(NAME(m_videoram)); save_item(NAME(m_videoram));
save_item(NAME(m_layers_ctrl)); save_item(NAME(m_layers_ctrl));
save_item(NAME(m_videobank)); save_item(NAME(m_videobank));
save_item(NAME(m_adpcm));
save_item(NAME(m_toggle)); save_item(NAME(m_toggle));
} }
@ -349,8 +342,7 @@ void yunsung8_state::machine_reset()
{ {
m_videobank = 0; m_videobank = 0;
m_layers_ctrl = 0; m_layers_ctrl = 0;
m_adpcm = 0; m_toggle = false;
m_toggle = 0;
} }
@ -384,6 +376,9 @@ static MACHINE_CONFIG_START( yunsung8, yunsung8_state )
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 1.0) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 1.0)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 1.0) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 1.0)
MCFG_DEVICE_ADD("adpcm_select", LS157, 0)
MCFG_74LS157_OUT_CB(DEVWRITE8("msm", msm5205_device, data_w))
MCFG_SOUND_ADD("msm", MSM5205, XTAL_400kHz) /* verified on pcb */ MCFG_SOUND_ADD("msm", MSM5205, XTAL_400kHz) /* verified on pcb */
MCFG_MSM5205_VCLK_CB(WRITELINE(yunsung8_state, adpcm_int)) /* interrupt function */ MCFG_MSM5205_VCLK_CB(WRITELINE(yunsung8_state, adpcm_int)) /* interrupt function */
MCFG_MSM5205_PRESCALER_SELECTOR(MSM5205_S96_4B) /* 4KHz, 4 Bits */ MCFG_MSM5205_PRESCALER_SELECTOR(MSM5205_S96_4B) /* 4KHz, 4 Bits */

View File

@ -7,6 +7,7 @@
*************************************************************************/ *************************************************************************/
#include "machine/gen_latch.h" #include "machine/gen_latch.h"
#include "machine/74157.h"
#include "sound/msm5205.h" #include "sound/msm5205.h"
class yunsung8_state : public driver_device class yunsung8_state : public driver_device
@ -17,6 +18,7 @@ public:
m_maincpu(*this, "maincpu"), m_maincpu(*this, "maincpu"),
m_audiocpu(*this, "audiocpu"), m_audiocpu(*this, "audiocpu"),
m_msm(*this, "msm"), m_msm(*this, "msm"),
m_adpcm_select(*this, "adpcm_select"),
m_gfxdecode(*this, "gfxdecode"), m_gfxdecode(*this, "gfxdecode"),
m_palette(*this, "palette"), m_palette(*this, "palette"),
m_soundlatch(*this, "soundlatch") m_soundlatch(*this, "soundlatch")
@ -32,13 +34,13 @@ public:
int m_videobank; int m_videobank;
/* misc */ /* misc */
int m_adpcm; bool m_toggle;
int m_toggle;
/* devices */ /* devices */
required_device<cpu_device> m_maincpu; required_device<cpu_device> m_maincpu;
required_device<cpu_device> m_audiocpu; required_device<cpu_device> m_audiocpu;
required_device<msm5205_device> m_msm; required_device<msm5205_device> m_msm;
required_device<ls157_device> m_adpcm_select;
required_device<gfxdecode_device> m_gfxdecode; required_device<gfxdecode_device> m_gfxdecode;
required_device<palette_device> m_palette; required_device<palette_device> m_palette;
required_device<generic_latch_8_device> m_soundlatch; required_device<generic_latch_8_device> m_soundlatch;
@ -50,7 +52,6 @@ public:
DECLARE_READ8_MEMBER(sound_command_r); DECLARE_READ8_MEMBER(sound_command_r);
DECLARE_WRITE8_MEMBER(sound_command_w); DECLARE_WRITE8_MEMBER(sound_command_w);
DECLARE_WRITE8_MEMBER(main_irq_ack_w); DECLARE_WRITE8_MEMBER(main_irq_ack_w);
DECLARE_WRITE8_MEMBER(adpcm_w);
DECLARE_WRITE8_MEMBER(videobank_w); DECLARE_WRITE8_MEMBER(videobank_w);
DECLARE_READ8_MEMBER(videoram_r); DECLARE_READ8_MEMBER(videoram_r);
DECLARE_WRITE8_MEMBER(videoram_w); DECLARE_WRITE8_MEMBER(videoram_w);