summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author R. Belmont <rb6502@users.noreply.github.com>2015-09-28 10:24:38 -0400
committer R. Belmont <rb6502@users.noreply.github.com>2015-09-28 10:24:38 -0400
commit1febce4996cb2905f2eae34fc3b08313db734ddb (patch)
tree9cc7cedab7498cfba38d0c72ce582d8347cf206d
parentf85d827d7358757fc7ee64a00dac98d48ceeadc0 (diff)
parent8a4b732020c019bb633d201a9fce2d45d983a0c0 (diff)
Merge pull request #347 from felipesanches/wacky_gator
Skeleton driver for Wacky Gator (Data East - 1990)
-rw-r--r--scripts/target/mame/arcade.lua1
-rw-r--r--src/mame/arcade.lst2
-rw-r--r--src/mame/drivers/wacky_gator.c178
3 files changed, 181 insertions, 0 deletions
diff --git a/scripts/target/mame/arcade.lua b/scripts/target/mame/arcade.lua
index 15de7cdd8c0..0e1fdcbbac6 100644
--- a/scripts/target/mame/arcade.lua
+++ b/scripts/target/mame/arcade.lua
@@ -3591,6 +3591,7 @@ files {
MAME_DIR .. "src/mame/drivers/vroulet.c",
MAME_DIR .. "src/mame/drivers/wildpkr.c",
MAME_DIR .. "src/mame/drivers/wms.c",
+ MAME_DIR .. "src/mame/drivers/wacky_gator.c",
MAME_DIR .. "src/mame/drivers/xtom3d.c",
MAME_DIR .. "src/mame/drivers/xyonix.c",
MAME_DIR .. "src/mame/video/xyonix.c",
diff --git a/src/mame/arcade.lst b/src/mame/arcade.lst
index 48174cd2cc8..6e21dffdb03 100644
--- a/src/mame/arcade.lst
+++ b/src/mame/arcade.lst
@@ -32225,3 +32225,5 @@ jackbean
dumpump
3lilpigs
+wackygtr // Wacky Gator
+
diff --git a/src/mame/drivers/wacky_gator.c b/src/mame/drivers/wacky_gator.c
new file mode 100644
index 00000000000..99a4eecf47a
--- /dev/null
+++ b/src/mame/drivers/wacky_gator.c
@@ -0,0 +1,178 @@
+// license:GPL2+
+// copyright-holders:FelipeSanches
+//
+// Wacky Gator
+//
+// Driver by Felipe Correa da Silva Sanches <juca@members.fsf.org>
+//
+
+/*
+ Most of this driver is based on guessing since I do not have access to the actual pcb for this game.
+ Once we get a pcb, please review the correctness of the code in this driver before deleting this comment.
+
+ There's a bunch of memory accesses that are not yet properly understood.
+ Supposedly these are reponsible for things like:
+
+ * controlling playback of samples of the OKI sound chip
+ * reading the status of the rear & front limit switches for each of the
+ 5 alligators
+ * reading the hit sensors for the 5 alligators
+ * reading coin insertion and start button
+ * flashing lamps in the backglass (apparently there's a total of
+ 20 lamps around the backframe)
+ * flashing the status lamps to indicate how good was the game of a player
+ (there are 5 different levels that can be shown inthe end of the game)
+ * controlling the 7-seg displays with:
+ - number of times the player successfully hit an alligator
+ - number of times the player was caught by an alligator
+ - final score
+ - highest score
+*/
+
+#include "emu.h"
+#include "cpu/m6809/m6809.h"
+#include "sound/msm5205.h"
+
+class wackygtr_state : public driver_device
+{
+public:
+ wackygtr_state(const machine_config &mconfig, device_type type, const char *tag)
+ : driver_device(mconfig, type, tag),
+ m_msm(*this, "msm"),
+ m_maincpu(*this, "maincpu")
+ { }
+
+ UINT8* m_samples;
+ int m_adpcm_data;
+ int m_adpcm_pos;
+ int m_adpcm_length;
+
+ required_device<msm5205_device> m_msm;
+ required_device<cpu_device> m_maincpu;
+ DECLARE_DRIVER_INIT(wackygtr);
+
+ INTERRUPT_GEN_MEMBER(wackygtr_interrupt);
+ DECLARE_WRITE_LINE_MEMBER(adpcm_int);
+ DECLARE_READ8_MEMBER(_0x6000_r);
+ DECLARE_READ8_MEMBER(_0x6001_r);
+ DECLARE_READ8_MEMBER(_0x6002_r);
+ DECLARE_READ8_MEMBER(_0x71d0_r);
+ DECLARE_READ8_MEMBER(_0x71d5_r);
+ DECLARE_WRITE8_MEMBER(sample_pos_w);
+ DECLARE_WRITE8_MEMBER(sample_length_w);
+};
+
+
+DRIVER_INIT_MEMBER(wackygtr_state, wackygtr)
+{
+ m_adpcm_data = -1;
+ m_adpcm_pos = 0;
+ m_adpcm_length = 0;
+ m_samples = memregion("oki")->base();
+}
+
+/*
+ * The read handlers below are only boiler-plate for actual peripheral emulation
+ * and may be completely wrong, so should not yet be understood as hardware documentation.
+ */
+READ8_MEMBER(wackygtr_state::_0x6000_r){
+ return 0x00;
+}
+
+READ8_MEMBER(wackygtr_state::_0x6001_r){
+ return 0x00;
+}
+
+READ8_MEMBER(wackygtr_state::_0x6002_r){
+ return 0x00;
+}
+
+READ8_MEMBER(wackygtr_state::_0x71d0_r){
+ return 0;
+}
+
+READ8_MEMBER(wackygtr_state::_0x71d5_r){
+ return 0xFF;
+}
+
+/* The handling of sample playback is also guessed.
+ * Someone with access to the actual hardware could help
+ * better understand how this is actually hooked up on the original boards;
+ */
+WRITE8_MEMBER(wackygtr_state::sample_pos_w){
+ m_adpcm_pos = (m_adpcm_pos & 0xFF) << 8 | (data & 0xFF);
+}
+
+WRITE8_MEMBER(wackygtr_state::sample_length_w){
+ m_adpcm_length = (m_adpcm_length & 0xFF) << 8 | (data & 0xFF);
+}
+
+static INPUT_PORTS_START( wackygtr )
+ PORT_START("INP0")
+ PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNKNOWN )
+INPUT_PORTS_END
+
+WRITE_LINE_MEMBER(wackygtr_state::adpcm_int)
+{
+/* This looks almost correct, but I am not yet completely sure. */
+ if (m_adpcm_length > 0)
+ {
+ m_adpcm_length--;
+ if (m_adpcm_data == -1)
+ {
+ /* transferring 1st nibble */
+ m_adpcm_data = m_samples[m_adpcm_pos];
+ m_adpcm_pos = (m_adpcm_pos + 1) & 0xffff;
+ m_msm->data_w((m_adpcm_data >> 4) & 0xf);
+ }
+ else
+ {
+ /* transferring 2nd nibble */
+ m_msm->data_w(m_adpcm_data & 0x0f);
+ m_adpcm_data = -1;
+ }
+ }
+}
+
+static ADDRESS_MAP_START( program_map, AS_PROGRAM, 8, wackygtr_state )
+ AM_RANGE(0x3000, 0x3000) AM_WRITE(sample_length_w)
+ AM_RANGE(0x3001, 0x3001) AM_WRITE(sample_pos_w)
+ AM_RANGE(0x6000, 0x6000) AM_READ(_0x6000_r) /* guessed hw peripheral address */
+ AM_RANGE(0x6001, 0x6001) AM_READ(_0x6001_r) /* guessed hw peripheral address */
+ AM_RANGE(0x6002, 0x6002) AM_READ(_0x6002_r) /* guessed hw peripheral address */
+ AM_RANGE(0x71d0, 0x71d0) AM_READ(_0x71d0_r) /* guessed hw peripheral address */
+ AM_RANGE(0x71d5, 0x71d5) AM_READ(_0x71d5_r) /* guessed hw peripheral address */
+ AM_RANGE(0x7000, 0x7fff) AM_RAM
+ AM_RANGE(0x8000, 0xffff) AM_ROM
+ADDRESS_MAP_END
+
+static MACHINE_CONFIG_START( wackygtr, wackygtr_state )
+
+ MCFG_CPU_ADD("maincpu", M6809E, XTAL_8MHz)
+ MCFG_CPU_PROGRAM_MAP(program_map)
+
+ /* Video */
+// MCFG_DEFAULT_LAYOUT(layout_wackygtr)
+
+ /* Sound */
+ MCFG_SPEAKER_STANDARD_MONO("mono")
+ MCFG_SOUND_ADD("msm", MSM5205, XTAL_384kHz )
+ MCFG_MSM5205_VCLK_CB(WRITELINE(wackygtr_state, adpcm_int)) /* IRQ handler */
+ MCFG_MSM5205_PRESCALER_SELECTOR(MSM5205_S48_4B) /* 8 KHz, 4 Bits */
+ MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
+
+ /* I have a hunch that this board may also
+ * contain a YM2151 sound chip for background music...
+ */
+MACHINE_CONFIG_END
+
+
+ROM_START( wackygtr )
+ ROM_REGION(0x10000, "maincpu", 0)
+ ROM_LOAD("wp3-pr0.4d", 0x8000, 0x8000, CRC(71ca4437) SHA1(c7d948c5593e6053fd0a65601f6c06871f5861f0))
+
+ ROM_REGION(0x10000, "oki", 0)
+ ROM_LOAD("wp3-vo0.2h", 0x0000, 0x10000, CRC(91c7986f) SHA1(bc9fa0d41c1caa0f909a349f511d022b7e42c6cd))
+ROM_END
+
+GAME(1990, wackygtr, 0, wackygtr, wackygtr, wackygtr_state, wackygtr, ROT0, "Data East", "Wacky Gator", MACHINE_IS_SKELETON_MECHANICAL)