summaryrefslogtreecommitdiffstatshomepage
path: root/src
diff options
context:
space:
mode:
author Michaël Banaan Ananas <happppp@users.noreply.github.com>2012-09-10 01:11:10 +0000
committer Michaël Banaan Ananas <happppp@users.noreply.github.com>2012-09-10 01:11:10 +0000
commit73550bc14ea53c4a2d2446d07c1791f4538db0df (patch)
treec2c565c8db24bb22a5f6013307f5c32f68cfa60d /src
parentc1d905a8a0475cc7e57ab874d98ca0182da37815 (diff)
add external samples for homerun
Diffstat (limited to 'src')
-rw-r--r--src/mame/drivers/homerun.c66
-rw-r--r--src/mame/includes/homerun.h7
2 files changed, 70 insertions, 3 deletions
diff --git a/src/mame/drivers/homerun.c b/src/mame/drivers/homerun.c
index ff98ef28466..7dd6edacaf0 100644
--- a/src/mame/drivers/homerun.c
+++ b/src/mame/drivers/homerun.c
@@ -49,6 +49,7 @@ Notes:
#include "machine/i8255.h"
#include "sound/2203intf.h"
#include "sound/upd7759.h"
+#include "sound/samples.h"
#include "includes/homerun.h"
@@ -69,6 +70,19 @@ WRITE8_MEMBER(homerun_state::homerun_control_w)
upd7759_reset_w(m_d7756, ~data & 0x20);
upd7759_start_w(m_d7756, ~data & 0x10);
}
+ if (m_samples != NULL)
+ {
+ // play MAME sample if a dump of the internal rom does not exist
+ if (data & 0x20 & ~m_control)
+ m_samples->stop(0);
+
+ if (~data & 0x10 & m_control)
+ {
+ samples_iterator iter(*m_samples);
+ if (m_sample < iter.count())
+ m_samples->start(0, m_sample);
+ }
+ }
// other bits: ?
m_control = data;
@@ -76,6 +90,8 @@ WRITE8_MEMBER(homerun_state::homerun_control_w)
WRITE8_MEMBER(homerun_state::homerun_d7756_sample_w)
{
+ m_sample = data;
+
if (m_d7756 != NULL)
upd7759_port_w(m_d7756, 0, data);
}
@@ -110,6 +126,11 @@ CUSTOM_INPUT_MEMBER(homerun_state::homerun_40_r)
CUSTOM_INPUT_MEMBER(homerun_state::homerun_d7756_busy_r)
{
+ return m_samples->playing(0) ? 0 : 1;
+}
+
+CUSTOM_INPUT_MEMBER(homerun_state::ganjaja_d7756_busy_r)
+{
return upd7759_busy_r(m_d7756);
}
@@ -203,7 +224,7 @@ static INPUT_PORTS_START( ganjaja )
PORT_START("IN0")
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_UNKNOWN ) // ?
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_COIN1 )
- PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM_MEMBER(DEVICE_SELF, homerun_state, homerun_d7756_busy_r, NULL)
+ PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM_MEMBER(DEVICE_SELF, homerun_state, ganjaja_d7756_busy_r, NULL)
PORT_BIT( 0x76, IP_ACTIVE_HIGH, IPT_UNKNOWN )
PORT_START("IN1")
@@ -244,6 +265,38 @@ INPUT_PORTS_END
***************************************************************************/
+// homerun samples, note that this is the complete rom contents
+// not all samples are used in this game
+static const char *const homerun_sample_names[] =
+{
+ "*homerun",
+ "00", // strike
+ "01", // ball
+ "02", // time (ask for time out)
+ "03", // out
+ "04", // safe
+ "05", // foul
+ "06", // yah (field player catching a fast ball)
+ "07", // batter out (batter out after 3 strikes)
+ "08", // play ball
+ "09", // ball four
+ "10", // home run
+ "11", // new pitcher (choosing new pitcher in time out)
+ "12", // ouch (batter gets hit by pitcher)
+ "13", // aho (be called a fool by supervisor)
+ "14", // bat hits ball
+ "15", // crowd cheers
+ 0
+};
+
+static const samples_interface homerun_samples_interface =
+{
+ 1,
+ homerun_sample_names
+};
+
+/**************************************************************************/
+
static const gfx_layout gfxlayout =
{
8,8,
@@ -308,6 +361,7 @@ static MACHINE_START( homerun )
state->membank("bank1")->configure_entries(1, 7, &ROM[0x10000], 0x4000);
state->save_item(NAME(state->m_control));
+ state->save_item(NAME(state->m_sample));
state->save_item(NAME(state->m_gfx_ctrl));
state->save_item(NAME(state->m_gc_up));
state->save_item(NAME(state->m_gc_down));
@@ -320,6 +374,7 @@ static MACHINE_RESET( homerun )
homerun_state *state = machine.driver_data<homerun_state>();
state->m_control = 0;
+ state->m_sample = 0;
state->m_gfx_ctrl = 0;
state->m_gc_up = 0;
state->m_gc_down = 0;
@@ -368,13 +423,20 @@ static MACHINE_CONFIG_DERIVED( homerun, dynashot )
/* sound hardware */
MCFG_SOUND_ADD("d7756", UPD7756, UPD7759_STANDARD_CLOCK)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.75)
+
+ MCFG_SAMPLES_ADD("samples", homerun_samples_interface)
+ MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.75)
MACHINE_CONFIG_END
-static MACHINE_CONFIG_DERIVED( ganjaja, homerun )
+static MACHINE_CONFIG_DERIVED( ganjaja, dynashot )
/* basic machine hardware */
MCFG_CPU_MODIFY("maincpu")
MCFG_CPU_PERIODIC_INT(irq0_line_hold, 4*60) // ?
+
+ /* sound hardware */
+ MCFG_SOUND_ADD("d7756", UPD7756, UPD7759_STANDARD_CLOCK)
+ MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.75)
MACHINE_CONFIG_END
diff --git a/src/mame/includes/homerun.h b/src/mame/includes/homerun.h
index f5a23327c08..594bd9505a1 100644
--- a/src/mame/includes/homerun.h
+++ b/src/mame/includes/homerun.h
@@ -5,6 +5,7 @@
*************************************************************************/
#include "sound/upd7759.h"
+#include "sound/samples.h"
class homerun_state : public driver_device
{
@@ -14,15 +15,18 @@ public:
m_maincpu(*this, "maincpu"),
m_videoram(*this, "videoram"),
m_spriteram(*this, "spriteram"),
- m_d7756(*this, "d7756")
+ m_d7756(*this, "d7756"),
+ m_samples(*this, "samples")
{ }
required_device<cpu_device> m_maincpu;
required_shared_ptr<UINT8> m_videoram;
required_shared_ptr<UINT8> m_spriteram;
optional_device<upd7756_device> m_d7756;
+ optional_device<samples_device> m_samples;
UINT8 m_control;
+ UINT8 m_sample;
tilemap_t *m_tilemap;
int m_gfx_ctrl;
@@ -41,6 +45,7 @@ public:
DECLARE_CUSTOM_INPUT_MEMBER(homerun_40_r);
DECLARE_CUSTOM_INPUT_MEMBER(homerun_d7756_busy_r);
+ DECLARE_CUSTOM_INPUT_MEMBER(ganjaja_d7756_busy_r);
DECLARE_CUSTOM_INPUT_MEMBER(ganjaja_hopper_status_r);
TILE_GET_INFO_MEMBER(get_homerun_tile_info);