Merge pull request #1840 from ajrhacker/pang_bootleg_ls157

spangbl, pangba: 74LS157-ization and working sound
This commit is contained in:
Ivan Vangelista 2016-12-16 07:48:59 +01:00 committed by GitHub
commit 7dd1adb581
2 changed files with 74 additions and 31 deletions

View File

@ -363,13 +363,18 @@ static ADDRESS_MAP_START( spangbl_map, AS_PROGRAM, 8, mitchell_state )
AM_RANGE(0xe000, 0xffff) AM_RAM AM_SHARE("ram") /* Work RAM */
ADDRESS_MAP_END
WRITE8_MEMBER(mitchell_state::sound_command_w)
{
m_soundlatch->write(space, 0, data);
m_audiocpu->set_input_line(0, HOLD_LINE);
}
static ADDRESS_MAP_START( spangbl_io_map, AS_IO, 8, mitchell_state )
ADDRESS_MAP_GLOBAL_MASK(0xff)
AM_RANGE(0x00, 0x02) AM_READ(input_r)
AM_RANGE(0x00, 0x00) AM_WRITE(pangbl_gfxctrl_w) /* Palette bank, layer enable, coin counters, more */
AM_RANGE(0x02, 0x02) AM_WRITE(pang_bankswitch_w) /* Code bank register */
AM_RANGE(0x03, 0x03) AM_DEVWRITE("ymsnd", ym2413_device, data_port_w)
AM_RANGE(0x04, 0x04) AM_DEVWRITE("ymsnd", ym2413_device, register_port_w)
AM_RANGE(0x03, 0x03) AM_WRITE(sound_command_w)
AM_RANGE(0x05, 0x05) AM_READ_PORT("SYS0")
AM_RANGE(0x06, 0x06) AM_WRITENOP /* watchdog? irq ack? */
AM_RANGE(0x07, 0x07) AM_WRITE(pang_video_bank_w) /* Video RAM bank register */
@ -378,22 +383,37 @@ static ADDRESS_MAP_START( spangbl_io_map, AS_IO, 8, mitchell_state )
AM_RANGE(0x18, 0x18) AM_WRITE(eeprom_serial_w)
ADDRESS_MAP_END
#ifdef UNUSED_FUNCTION
WRITE8_MEMBER(mitchell_state::spangbl_msm5205_data_w)
READ8_MEMBER(mitchell_state::sound_command_r)
{
m_sample_buffer = data;
m_audiocpu->set_input_line(0, CLEAR_LINE);
return m_soundlatch->read(space, 0);
}
WRITE8_MEMBER(mitchell_state::sound_bankswitch_w)
{
m_msm->reset_w(BIT(data, 3));
m_soundbank->set_entry(data & 7);
}
#endif
static ADDRESS_MAP_START( spangbl_sound_map, AS_PROGRAM, 8, mitchell_state )
AM_RANGE(0x0000, 0x3fff) AM_ROM
// AM_RANGE(0xec00, 0xec00) AM_WRITE(spangbl_msm5205_data_w )
AM_RANGE(0xf000, 0xf3ff) AM_RAM
AM_RANGE(0x0000, 0x7fff) AM_ROM
AM_RANGE(0x8000, 0xbfff) AM_ROMBANK("soundbank")
AM_RANGE(0xe000, 0xe000) AM_WRITE(sound_bankswitch_w)
AM_RANGE(0xe400, 0xe400) AM_DEVWRITE("adpcm_select", ls157_device, ba_w)
AM_RANGE(0xec00, 0xec01) AM_DEVWRITE("ymsnd", ym2413_device, write)
AM_RANGE(0xf000, 0xf4ff) AM_RAM
AM_RANGE(0xf800, 0xf800) AM_READ(sound_command_r)
ADDRESS_MAP_END
static ADDRESS_MAP_START( spangbl_sound_io_map, AS_IO, 8, mitchell_state )
ADDRESS_MAP_GLOBAL_MASK(0xff)
static ADDRESS_MAP_START( pangba_sound_map, AS_PROGRAM, 8, mitchell_state )
AM_RANGE(0x0000, 0x7fff) AM_ROM
AM_RANGE(0x8000, 0xbfff) AM_ROMBANK("soundbank")
AM_RANGE(0xe000, 0xe000) AM_WRITE(sound_bankswitch_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(0xf000, 0xf4ff) AM_RAM
AM_RANGE(0xf800, 0xf800) AM_READ(sound_command_r)
ADDRESS_MAP_END
@ -1101,20 +1121,25 @@ GFXDECODE_END
MACHINE_START_MEMBER(mitchell_state,mitchell)
{
save_item(NAME(m_sample_buffer));
save_item(NAME(m_sample_select));
save_item(NAME(m_dial_selected));
save_item(NAME(m_keymatrix));
save_item(NAME(m_dir));
save_item(NAME(m_dial));
save_item(NAME(m_irq_source));
// save_item(NAME(init_eeprom_count));
if (m_soundbank.found())
{
m_soundbank->configure_entries(0, 8, memregion("audiocpu")->base(), 0x4000);
m_soundbank->set_entry(0);
save_item(NAME(m_sample_select));
}
}
MACHINE_RESET_MEMBER(mitchell_state,mitchell)
{
m_sample_buffer = 0;
m_sample_select = 0;
m_sample_select = false;
m_dial_selected = 0;
m_dial[0] = 0;
m_dial[1] = 0;
@ -1241,11 +1266,12 @@ GFXDECODE_END
WRITE_LINE_MEMBER(mitchell_state::spangbl_adpcm_int)
{
m_msm->data_w(m_sample_buffer & 0x0f);
m_sample_buffer >>= 4;
m_sample_select ^= 1;
if(m_sample_select == 0)
m_audiocpu->set_input_line(INPUT_LINE_NMI, PULSE_LINE);
if (!state)
return;
m_sample_select = !m_sample_select;
m_adpcm_select->select_w(m_sample_select);
m_audiocpu->set_input_line(INPUT_LINE_NMI, m_sample_select);
}
@ -1261,17 +1287,27 @@ static MACHINE_CONFIG_DERIVED( spangbl, pangnv )
MCFG_CPU_ADD("audiocpu", Z80, 8000000)
MCFG_CPU_PROGRAM_MAP(spangbl_sound_map)
MCFG_CPU_IO_MAP(spangbl_sound_io_map)
MCFG_CPU_VBLANK_INT_DRIVER("screen", mitchell_state, irq0_line_hold)
MCFG_CPU_VBLANK_INT_DRIVER("screen", mitchell_state, nmi_line_pulse)
MCFG_GFXDECODE_MODIFY("gfxdecode", spangbl)
MCFG_GENERIC_LATCH_8_ADD("soundlatch")
MCFG_DEVICE_REMOVE("oki")
MCFG_SOUND_ADD("msm", MSM5205, 384000)
MCFG_MSM5205_VCLK_CB(WRITELINE(mitchell_state, spangbl_adpcm_int)) /* interrupt function */
MCFG_MSM5205_PRESCALER_SELECTOR(MSM5205_S48_4B) /* 4KHz 4-bit */
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50)
MCFG_DEVICE_ADD("adpcm_select", LS157, 0)
MCFG_74LS157_OUT_CB(DEVWRITE8("msm", msm5205_device, data_w))
MACHINE_CONFIG_END
static MACHINE_CONFIG_DERIVED( pangba, spangbl )
MCFG_CPU_MODIFY("audiocpu")
MCFG_CPU_PROGRAM_MAP(pangba_sound_map)
MCFG_DEVICE_REPLACE("ymsnd", YM3812, 4000000)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
MACHINE_CONFIG_END
static MACHINE_CONFIG_START( mstworld, mitchell_state )
@ -2365,14 +2401,14 @@ GAME( 1989, bbros, pang, pang, pang, mitchell_state, pang,
GAME( 1989, pompingw, pang, pang, pang, mitchell_state, pang, ROT0, "Mitchell", "Pomping World (Japan)", MACHINE_SUPPORTS_SAVE )
GAME( 1989, pangb, pang, pang, pang, mitchell_state, pangb, ROT0, "bootleg", "Pang (bootleg, set 1)", MACHINE_SUPPORTS_SAVE )
GAME( 1989, pangbold, pang, pang, pang, mitchell_state, pangb, ROT0, "bootleg", "Pang (bootleg, set 2)", MACHINE_SUPPORTS_SAVE )
GAME( 1989, pangba, pang, spangbl, pang, mitchell_state, pangb, ROT0, "bootleg", "Pang (bootleg, set 3)", MACHINE_NO_SOUND | MACHINE_SUPPORTS_SAVE )
GAME( 1989, pangba, pang, pangba, pang, mitchell_state, pangb, ROT0, "bootleg", "Pang (bootleg, set 3)", MACHINE_SUPPORTS_SAVE )
GAME( 1989, pangb2, pang, pang, pang, mitchell_state, pangb, ROT0, "bootleg", "Pang (bootleg, set 4)", MACHINE_SUPPORTS_SAVE )
GAME( 1989, cworld, 0, pang, qtono1, mitchell_state, cworld, ROT0, "Capcom", "Capcom World (Japan)", MACHINE_SUPPORTS_SAVE )
GAME( 1990, hatena, 0, pang, qtono1, mitchell_state, hatena, ROT0, "Capcom", "Adventure Quiz 2 - Hatena? no Daibouken (Japan 900228)", MACHINE_SUPPORTS_SAVE )
GAME( 1990, spang, 0, pangnv, pang, mitchell_state, spang, ROT0, "Mitchell", "Super Pang (World 900914)", MACHINE_SUPPORTS_SAVE )
GAME( 1990, sbbros, spang, pangnv, pang, mitchell_state, sbbros, ROT0, "Mitchell (Capcom license)", "Super Buster Bros. (USA 901001)", MACHINE_SUPPORTS_SAVE )
GAME( 1990, spangj, spang, pangnv, pang, mitchell_state, spangj, ROT0, "Mitchell", "Super Pang (Japan 901023)", MACHINE_SUPPORTS_SAVE )
GAME( 1990, spangbl, spang, spangbl, spangbl, mitchell_state, spangbl, ROT0, "bootleg", "Super Pang (World 900914, bootleg)", MACHINE_NO_SOUND | MACHINE_SUPPORTS_SAVE ) // different sound hardware
GAME( 1990, spangbl, spang, spangbl, spangbl, mitchell_state, spangbl, ROT0, "bootleg", "Super Pang (World 900914, bootleg)", MACHINE_SUPPORTS_SAVE ) // different sound hardware
GAME( 1994, mstworld, 0, mstworld, mstworld, mitchell_state, mstworld, ROT0, "bootleg (TCH)", "Monsters World (bootleg of Super Pang)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE )
GAME( 1990, marukin, 0, marukin, marukin, mitchell_state, marukin, ROT0, "Yuga", "Super Marukin-Ban (Japan 901017)", MACHINE_SUPPORTS_SAVE )
GAME( 1991, qtono1, 0, pang, qtono1, mitchell_state, qtono1, ROT0, "Capcom", "Quiz Tonosama no Yabou (Japan)", MACHINE_SUPPORTS_SAVE )

View File

@ -6,11 +6,12 @@
*************************************************************************/
#include "sound/okim6295.h"
#include "machine/74157.h"
#include "machine/nvram.h"
#include "machine/eepromser.h"
#include "machine/gen_latch.h"
#include "sound/msm5205.h"
#include "sound/okim6295.h"
class mitchell_state : public driver_device
{
@ -19,10 +20,11 @@ public:
: driver_device(mconfig, type, tag),
m_maincpu(*this, "maincpu"),
m_audiocpu(*this, "audiocpu"),
m_oki(*this, "oki") ,
m_oki(*this, "oki"),
m_nvram(*this, "nvram"),
m_eeprom(*this, "eeprom"),
m_msm(*this, "msm"),
m_adpcm_select(*this, "adpcm_select"),
m_gfxdecode(*this, "gfxdecode"),
m_palette(*this, "palette"),
m_soundlatch(*this, "soundlatch"),
@ -30,7 +32,8 @@ public:
m_videoram(*this, "videoram"),
m_bank1(*this, "bank1"),
m_bank0d(*this, "bank0d"),
m_bank1d(*this, "bank1d") { }
m_bank1d(*this, "bank1d"),
m_soundbank(*this, "soundbank") { }
/* devices */
required_device<cpu_device> m_maincpu;
@ -39,6 +42,7 @@ public:
optional_device<nvram_device> m_nvram;
optional_device<eeprom_serial_93cxx_device> m_eeprom;
optional_device<msm5205_device> m_msm;
optional_device<ls157_device> m_adpcm_select;
required_device<gfxdecode_device> m_gfxdecode;
required_device<palette_device> m_palette;
optional_device<generic_latch_8_device> m_soundlatch;
@ -49,6 +53,7 @@ public:
required_memory_bank m_bank1;
optional_memory_bank m_bank0d;
optional_memory_bank m_bank1d;
optional_memory_bank m_soundbank;
/* video-related */
tilemap_t *m_bg_tilemap;
@ -59,8 +64,7 @@ public:
std::vector<uint8_t> m_paletteram;
/* sound-related */
int m_sample_buffer;
int m_sample_select;
bool m_sample_select;
/* misc */
int m_input_type;
@ -127,5 +131,8 @@ public:
void draw_sprites( bitmap_ind16 &bitmap, const rectangle &cliprect );
void bootleg_decode();
void configure_banks(void (*decode)(uint8_t *src, uint8_t *dst, int size));
DECLARE_WRITE8_MEMBER(sound_command_w);
DECLARE_READ8_MEMBER(sound_command_r);
DECLARE_WRITE8_MEMBER(sound_bankswitch_w);
DECLARE_WRITE_LINE_MEMBER(spangbl_adpcm_int);
};