From 9b025ed895e5b93817ccff1195d1f011efceadf8 Mon Sep 17 00:00:00 2001 From: Robbbert Date: Fri, 14 Sep 2012 13:54:52 +0000 Subject: [PATCH] heavymtl : wip, sound works --- src/mame/drivers/kissproto.c | 2 +- src/mame/drivers/rowamet.c | 80 ++++++++++++++++++++++++++++++++---- src/mame/mame.mak | 2 + 3 files changed, 75 insertions(+), 9 deletions(-) diff --git a/src/mame/drivers/kissproto.c b/src/mame/drivers/kissproto.c index 30dfc5cbd27..614dd3d301d 100644 --- a/src/mame/drivers/kissproto.c +++ b/src/mame/drivers/kissproto.c @@ -61,4 +61,4 @@ ROM_START(kissp) ROM_END -GAME( 1979, kissp, kiss, kissp, kissp, kissp_state, kissp, ROT0, "Bally", "Kiss (prototype)", GAME_NO_SOUND | GAME_MECHANICAL) +GAME( 1979, kissp, kiss, kissp, kissp, kissp_state, kissp, ROT0, "Bally", "Kiss (prototype)", GAME_IS_SKELETON_MECHANICAL ) diff --git a/src/mame/drivers/rowamet.c b/src/mame/drivers/rowamet.c index 65aab167358..11293e1a93e 100644 --- a/src/mame/drivers/rowamet.c +++ b/src/mame/drivers/rowamet.c @@ -1,25 +1,40 @@ /************************************************************************************ -Pinball -Rowamet : Heavy Metal + Pinball + Rowamet : Heavy Metal + + PinMAME used as reference (couldn't find a manual) + *************************************************************************************/ #include "emu.h" #include "cpu/z80/z80.h" +#include "sound/dac.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_maincpu(*this, "maincpu"), + m_cpu2(*this, "cpu2"), + m_p_ram(*this, "ram") { } + DECLARE_READ8_MEMBER(sound_r); + DECLARE_READ8_MEMBER(switch_r); + DECLARE_WRITE8_MEMBER(mute_w); + UINT8 m_out_offs; + required_device m_maincpu; + required_device m_cpu2; + required_shared_ptr m_p_ram; + protected: // devices - required_device m_maincpu; + // driver_device overrides virtual void machine_reset(); @@ -30,8 +45,8 @@ public: static ADDRESS_MAP_START( rowamet_map, AS_PROGRAM, 8, rowamet_state ) AM_RANGE(0x0000, 0x1fff) AM_ROM - //AM_RANGE(0x2800, 0x2806) AM_READ - AM_RANGE(0x4000, 0x40ff) AM_RAM + AM_RANGE(0x2800, 0x2808) AM_READ(switch_r) + AM_RANGE(0x4000, 0x40ff) AM_RAM AM_SHARE("ram") ADDRESS_MAP_END static ADDRESS_MAP_START( rowamet_sub_map, AS_PROGRAM, 8, rowamet_state ) @@ -41,13 +56,31 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( rowamet_sub_io, AS_IO, 8, rowamet_state ) ADDRESS_MAP_GLOBAL_MASK(0xff) - //AM_RANGE(0x00, 0x00) AM_READWRITE(snd_data_r,mute_w) - //AM_RANGE(0x01, 0x01) AM_WRITE(dac_w) + AM_RANGE(0x00, 0x00) AM_READWRITE(sound_r,mute_w) + AM_RANGE(0x01, 0x01) AM_DEVWRITE("dac", dac_device, write_unsigned8) ADDRESS_MAP_END static INPUT_PORTS_START( rowamet ) INPUT_PORTS_END + +READ8_MEMBER( rowamet_state::sound_r ) +{ + return (m_p_ram[0x92] >> 4) | (m_p_ram[0x93] & 0xf0); +} + +READ8_MEMBER( rowamet_state::switch_r ) +{ + return 0; +} + +WRITE8_MEMBER( rowamet_state::mute_w ) +{ + machine().sound().system_enable(~data); + printf("%X ",data); +} + +//m_cpu2->execute().set_input_line(INPUT_LINE_NMI, PULSE_LINE); void rowamet_state::machine_reset() { } @@ -56,6 +89,28 @@ DRIVER_INIT_MEMBER(rowamet_state,rowamet) { } +static TIMER_DEVICE_CALLBACK( rowamet_timer ) +{ + static const UINT8 patterns[16] = { 0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f, 0, 0, 0, 0, 0, 0 }; + rowamet_state *state = timer.machine().driver_data(); + state->m_out_offs++; + if (state->m_out_offs > 0x9f) + state->m_out_offs = 0x80; + + if (state->m_out_offs < 0x90) + { + UINT8 digit = state->m_out_offs << 1; + output_set_digit_value(digit, patterns[state->m_p_ram[state->m_out_offs]>>4]); + output_set_digit_value(++digit, patterns[state->m_p_ram[state->m_out_offs]&15]); + } + //else + //if (state->m_out_offs == 0x90) + // timer.machine().device("maincpu")->execute().set_input_line(0, HOLD_LINE); + //else + //if (state->m_out_offs == 0x9f) + // timer.machine().device("maincpu")->execute().set_input_line(0, CLEAR_LINE); +} + static MACHINE_CONFIG_START( rowamet, rowamet_state ) /* basic machine hardware */ MCFG_CPU_ADD("maincpu", Z80, 1888888) @@ -63,6 +118,15 @@ static MACHINE_CONFIG_START( rowamet, rowamet_state ) MCFG_CPU_ADD("cpu2", Z80, 1888888) MCFG_CPU_PROGRAM_MAP(rowamet_sub_map) MCFG_CPU_IO_MAP(rowamet_sub_io) + MCFG_TIMER_ADD_PERIODIC("rowamet_timer", rowamet_timer, attotime::from_hz(200)) + + /* Video */ + MCFG_DEFAULT_LAYOUT(layout_rowamet) + + /* Sound */ + MCFG_SPEAKER_STANDARD_MONO("mono") + MCFG_DAC_ADD("dac") + MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50) MACHINE_CONFIG_END /*------------------------------------------------------------------- diff --git a/src/mame/mame.mak b/src/mame/mame.mak index 8577b2c9bd4..7158f200f88 100644 --- a/src/mame/mame.mak +++ b/src/mame/mame.mak @@ -2170,6 +2170,8 @@ $(DRIVERS)/re900.o: $(LAYOUT)/re900.lh $(DRIVERS)/roul.o: $(LAYOUT)/roul.lh +$(DRIVERS)/rowamet.o: $(LAYOUT)/rowamet.lh + $(DRIVERS)/sbrkout.o: $(LAYOUT)/sbrkout.lh $(DRIVERS)/sderby.o: $(LAYOUT)/sderby.lh \