summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/drivers/rowamet.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/drivers/rowamet.cpp')
-rw-r--r--src/mame/drivers/rowamet.cpp269
1 files changed, 0 insertions, 269 deletions
diff --git a/src/mame/drivers/rowamet.cpp b/src/mame/drivers/rowamet.cpp
deleted file mode 100644
index cf734674e2b..00000000000
--- a/src/mame/drivers/rowamet.cpp
+++ /dev/null
@@ -1,269 +0,0 @@
-// license:BSD-3-Clause
-// copyright-holders:Robbbert
-/************************************************************************************
-
- PINBALL
- Rowamet : Heavy Metal
-
- PinMAME used as reference (couldn't find a manual)
- Seems to be almost the same as Taito.
-
- Known games from this company: Solar Ride, Vulcan IV, Sherokee, Jet Surf, Diana,
- Heavy Metal, Conan.
-
- You need to have a ball in the outhole (hold down X) when starting a game.
-
-ToDO:
-- Outputs
-- Bad sound rom
-- In PinMAME, the display cycles between various attract modes. This doesn't happen
- in MAME.
-- Display flickers ingame
-
-*************************************************************************************/
-
-#include "emu.h"
-#include "machine/genpin.h"
-
-#include "cpu/z80/z80.h"
-#include "machine/timer.h"
-#include "sound/dac.h"
-#include "sound/volt_reg.h"
-#include "speaker.h"
-
-#include "rowamet.lh"
-
-
-class rowamet_state : public driver_device
-{
-public:
- rowamet_state(const machine_config &mconfig, device_type type, const char *tag)
- : driver_device(mconfig, type, tag)
- , m_maincpu(*this, "maincpu")
- , m_cpu2(*this, "cpu2")
- , m_p_ram(*this, "ram")
- , m_digits(*this, "digit%u", 0U)
- { }
-
- void rowamet(machine_config &config);
-
-private:
- DECLARE_READ8_MEMBER(sound_r);
- DECLARE_WRITE8_MEMBER(mute_w);
- DECLARE_READ8_MEMBER(io_r);
- DECLARE_WRITE8_MEMBER(io_w);
- TIMER_DEVICE_CALLBACK_MEMBER(timer_a);
- void rowamet_map(address_map &map);
- void rowamet_sub_io(address_map &map);
- void rowamet_sub_map(address_map &map);
-
- uint8_t m_out_offs;
- uint8_t m_sndcmd;
- uint8_t m_io[16];
- virtual void machine_reset() override;
- virtual void machine_start() override { m_digits.resolve(); }
- required_device<cpu_device> m_maincpu;
- required_device<cpu_device> m_cpu2;
- required_shared_ptr<uint8_t> m_p_ram;
- output_finder<32> m_digits;
-};
-
-
-void rowamet_state::rowamet_map(address_map &map)
-{
- map(0x0000, 0x1fff).rom().region("roms", 0);
- map(0x2800, 0x2800).portr("X0");
- map(0x2801, 0x2801).portr("X1");
- map(0x2802, 0x2802).portr("X2");
- map(0x2803, 0x2803).portr("X3");
- map(0x2804, 0x2804).portr("X4");
- map(0x2805, 0x2805).portr("X5");
- map(0x2806, 0x2806).portr("X6");
- map(0x2807, 0x2807).portr("X7");
- map(0x2808, 0x2808).portr("X8");
- map(0x4000, 0x407f).ram();
- map(0x4080, 0x408f).ram().share("ram");
- map(0x4090, 0x409f).rw(FUNC(rowamet_state::io_r), FUNC(rowamet_state::io_w));
- map(0x40a0, 0x40ff).ram();
-}
-
-void rowamet_state::rowamet_sub_map(address_map &map)
-{
- map(0x0000, 0x0fff).rom().region("roms", 0x2000);
- map(0x1000, 0x17ff).ram();
-}
-
-void rowamet_state::rowamet_sub_io(address_map &map)
-{
- map.global_mask(0xff);
- map(0x00, 0x00).rw(FUNC(rowamet_state::sound_r), FUNC(rowamet_state::mute_w));
- map(0x01, 0x01).w("dac", FUNC(dac_byte_interface::data_w));
-}
-
-static INPUT_PORTS_START( rowamet )
- PORT_START("X0")
- PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 )
- PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_START1 )
- PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_TILT ) PORT_NAME("Slam Tilt")
- PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_TILT )
- PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_SERVICE1 )
- PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_SERVICE2 )
- PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_SERVICE3 )
- PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_OTHER )
-
- PORT_START("X1")
- PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_X) PORT_NAME("Outhole")
- PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_Z)
- PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_C)
- PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_V)
- PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_B)
- PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_N)
- PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_M)
- PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_COMMA)
-
- PORT_START("X2")
- PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_Q)
- PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_W)
- PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_E)
- PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_R)
- PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_Y)
- PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_U)
- PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_I)
- PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_O)
-
- PORT_START("X3")
- PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_A)
- PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_S)
- PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_D)
- PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_F)
- PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_G)
- PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_H)
- PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_J)
- PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_K)
-
- PORT_START("X4")
- PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_L)
- PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_MINUS)
- PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_EQUALS)
- PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_BACKSPACE)
- PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_OPENBRACE)
- PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_CLOSEBRACE)
- PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_BACKSLASH)
- PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED )
-
- PORT_START("X5")
- PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNUSED )
- PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNUSED )
- PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNUSED )
- PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_COLON)
- PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_QUOTE)
- PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_ENTER)
- PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_STOP)
- PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_SLASH)
-
- // from here might be dipswitches
- PORT_START("X6")
- PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED )
-
- PORT_START("X7")
- PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED )
-
- PORT_START("X8")
- PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED )
-INPUT_PORTS_END
-
-
-READ8_MEMBER( rowamet_state::sound_r )
-{
- return m_sndcmd;
-}
-
-WRITE8_MEMBER( rowamet_state::mute_w )
-{
- machine().sound().system_enable(data ? 0 : 1);
-}
-
-READ8_MEMBER( rowamet_state::io_r )
-{
- return m_io[offset];
-}
-
-WRITE8_MEMBER( rowamet_state::io_w )
-{
- m_io[offset] = data;
-
- if (offset == 2)
- {
- uint8_t cmd = (m_io[2]>>4) | (m_io[3] & 0xf0);
- if (cmd != m_sndcmd)
- {
- m_sndcmd = cmd;
- m_cpu2->pulse_input_line(INPUT_LINE_NMI, attotime::zero);
- }
- }
-}
-
-void rowamet_state::machine_reset()
-{
- uint8_t i;
- m_out_offs = 0;
- m_sndcmd = 0;
- for (i = 0; i < 16; i++)
- m_io[i] = 0;
-}
-
-TIMER_DEVICE_CALLBACK_MEMBER( rowamet_state::timer_a )
-{
- static const uint8_t patterns[16] = { 0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7c, 0x07, 0x7f, 0x67, 0x58, 0x4c, 0x62, 0x69, 0x78, 0 }; // 7446
- m_out_offs &= 15;
-
- uint8_t digit = m_out_offs << 1;
- m_digits[digit] = patterns[m_p_ram[m_out_offs]>>4];
- m_digits[++digit] = patterns[m_p_ram[m_out_offs++]&15];
-}
-
-void rowamet_state::rowamet(machine_config &config)
-{
- /* basic machine hardware */
- Z80(config, m_maincpu, 1888888);
- m_maincpu->set_addrmap(AS_PROGRAM, &rowamet_state::rowamet_map);
-
- Z80(config, m_cpu2, 1888888);
- m_cpu2->set_addrmap(AS_PROGRAM, &rowamet_state::rowamet_sub_map);
- m_cpu2->set_addrmap(AS_IO, &rowamet_state::rowamet_sub_io);
-
- TIMER(config, "timer_a").configure_periodic(FUNC(rowamet_state::timer_a), attotime::from_hz(200));
-
- /* Video */
- config.set_default_layout(layout_rowamet);
-
- /* Sound */
- SPEAKER(config, "speaker").front_center();
- DAC_8BIT_R2R(config, "dac", 0).add_route(ALL_OUTPUTS, "speaker", 0.25); // unknown DAC
- voltage_regulator_device &vref(VOLTAGE_REGULATOR(config, "vref"));
- vref.add_route(0, "dac", 1.0, DAC_VREF_POS_INPUT);
- vref.add_route(0, "dac", -1.0, DAC_VREF_NEG_INPUT);
-}
-
-/*-------------------------------------------------------------------
-/ Conan (1983)
-/-------------------------------------------------------------------*/
-
-/*-------------------------------------------------------------------
-/ Heavy Metal (????)
-/-------------------------------------------------------------------*/
-ROM_START(heavymtl)
- ROM_REGION(0x3000, "roms", 0)
- ROM_LOAD("hvymtl_c.bin", 0x0000, 0x1000, CRC(8f36d3da) SHA1(beec79c5d794ede96d95105bad7466b67762606d))
- ROM_LOAD("hvymtl_b.bin", 0x1000, 0x1000, CRC(357f1252) SHA1(ddc55ded0dc1c8632c31d809bfadfb45ae248cfd))
- ROM_LOAD("hvymtl_s.bin", 0x2000, 0x1000, BAD_DUMP CRC(c525e6cb) SHA1(144e06fbbdd1f3e45ccca8bace6b04f876b1312c))
- ROM_FILL(0x2000, 1, 0xaf) // bad byte
- ROM_FILL(0x2551, 1, 0xdd) // another bad byte
-ROM_END
-
-/*-------------------------------------------------------------------
-/ Vulcan IV (1982)
-/-------------------------------------------------------------------*/
-
-
-GAME(198?, heavymtl, 0, rowamet, rowamet, rowamet_state, empty_init, ROT0, "Rowamet", "Heavy Metal", MACHINE_MECHANICAL | MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND )