diff options
author | Vas Crabb <vas@vastheman.com> | 2017-05-26 16:34:14 +1000 |
---|---|---|
committer | Vas Crabb <vas@vastheman.com> | 2017-05-26 16:43:29 +1000 |
commit | 308c2bb72d370ec873d9737ee35c5817d2c90d7f (patch) | |
tree | ec68683921071589bd8021a55d9613fb1c8629c3 | |
parent | 504071e721206f3c0bfe2696e66a7dbd9c54db1f (diff) |
cheekyms: add preliminary netlist sound based on schematics provided by Sam Grech
(nw) It doesn't work quite right yet. The "Hammer" and "Pest" sounds
are generated by free-running 555/556 timers and gated with LM324
applifiers. For whatever reason, the netlist system produces a kind of
buzzing from the "Hammer" circuit when it's supposed to be suppressed,
and it doesn't think the pest sound should be suppressed completely so
you can always hear it at a low level in the background. The "Cheese"
circuit is a bit weird - either they're using the base-emitter junction
of a 2SC945 as a signal diode, or there's an error in the schematic
(collector is shown unconnected). Connecting this part of the circuit
causes the netlist system to hang, so R2/R3/C8/Q2 are not connected for
now.
-rw-r--r-- | scripts/target/mame/arcade.lua | 4 | ||||
-rw-r--r--[-rwxr-xr-x] | src/lib/netlist/nl_base.h | 0 | ||||
-rw-r--r--[-rwxr-xr-x] | src/lib/netlist/nl_factory.cpp | 0 | ||||
-rw-r--r--[-rwxr-xr-x] | src/lib/netlist/nl_factory.h | 0 | ||||
-rw-r--r-- | src/mame/audio/cheekyms.cpp | 64 | ||||
-rw-r--r-- | src/mame/audio/cheekyms.h | 44 | ||||
-rw-r--r-- | src/mame/audio/nl_cheekyms.cpp | 266 | ||||
-rw-r--r-- | src/mame/audio/nl_cheekyms.h | 12 | ||||
-rw-r--r-- | src/mame/drivers/cheekyms.cpp | 5 | ||||
-rw-r--r-- | src/mame/includes/cheekyms.h | 87 | ||||
-rw-r--r-- | src/mame/video/cheekyms.cpp | 19 |
11 files changed, 446 insertions, 55 deletions
diff --git a/scripts/target/mame/arcade.lua b/scripts/target/mame/arcade.lua index eb7877171c7..30e15d0cc8f 100644 --- a/scripts/target/mame/arcade.lua +++ b/scripts/target/mame/arcade.lua @@ -4073,6 +4073,10 @@ files { createMAMEProjects(_target, _subtarget, "univers") files { + MAME_DIR .. "src/mame/audio/cheekyms.cpp", + MAME_DIR .. "src/mame/audio/cheekyms.h", + MAME_DIR .. "src/mame/audio/nl_cheekyms.cpp", + MAME_DIR .. "src/mame/audio/nl_cheekyms.h", MAME_DIR .. "src/mame/drivers/cheekyms.cpp", MAME_DIR .. "src/mame/includes/cheekyms.h", MAME_DIR .. "src/mame/video/cheekyms.cpp", diff --git a/src/lib/netlist/nl_base.h b/src/lib/netlist/nl_base.h index 7afed824630..7afed824630 100755..100644 --- a/src/lib/netlist/nl_base.h +++ b/src/lib/netlist/nl_base.h diff --git a/src/lib/netlist/nl_factory.cpp b/src/lib/netlist/nl_factory.cpp index 2bb49590c4b..2bb49590c4b 100755..100644 --- a/src/lib/netlist/nl_factory.cpp +++ b/src/lib/netlist/nl_factory.cpp diff --git a/src/lib/netlist/nl_factory.h b/src/lib/netlist/nl_factory.h index 6dad6c5e171..6dad6c5e171 100755..100644 --- a/src/lib/netlist/nl_factory.h +++ b/src/lib/netlist/nl_factory.h diff --git a/src/mame/audio/cheekyms.cpp b/src/mame/audio/cheekyms.cpp new file mode 100644 index 00000000000..59687742be4 --- /dev/null +++ b/src/mame/audio/cheekyms.cpp @@ -0,0 +1,64 @@ +// license:BSD-3-Clause +// copyright-holders:Vas Crabb + +#include "emu.h" +#include "audio/cheekyms.h" +#include "audio/nl_cheekyms.h" + +#include "speaker.h" + + +DEFINE_DEVICE_TYPE(CHEEKY_MOUSE_AUDIO, cheekyms_audio_device, "cheekyms_audio", "Cheeky Mouse Sound Board") + + +cheekyms_audio_device::cheekyms_audio_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) + : device_t(mconfig, CHEEKY_MOUSE_AUDIO, tag, owner, clock) + , m_mute(*this, "sound_nl:mute") + , m_cheese(*this, "sound_nl:cheese") + , m_music(*this, "sound_nl:music") + , m_mouse(*this, "sound_nl:mouse") + , m_hammer(*this, "sound_nl:hammer") + , m_pest(*this, "sound_nl:pest") + , m_mouse_dies(*this, "sound_nl:mouse_dies") + , m_pest_dies(*this, "sound_nl:pest_dies") + , m_coin_extra(*this, "sound_nl:coin_extra") +{ +} + + +WRITE_LINE_MEMBER(cheekyms_audio_device::mute_w) { m_mute->write_line(state); } +WRITE_LINE_MEMBER(cheekyms_audio_device::cheese_w) { m_cheese->write_line(state); } +WRITE_LINE_MEMBER(cheekyms_audio_device::music_w) { m_music->write_line(state); } +WRITE_LINE_MEMBER(cheekyms_audio_device::mouse_w) { m_mouse->write_line(state); } +WRITE_LINE_MEMBER(cheekyms_audio_device::hammer_w) { m_hammer->write_line(state); } +WRITE_LINE_MEMBER(cheekyms_audio_device::pest_w) { m_pest->write_line(state); } +WRITE_LINE_MEMBER(cheekyms_audio_device::mouse_dies_w) { m_mouse_dies->write_line(state); } +WRITE_LINE_MEMBER(cheekyms_audio_device::pest_dies_w) { m_pest_dies->write_line(state); } +WRITE_LINE_MEMBER(cheekyms_audio_device::coin_extra_w) { m_coin_extra->write_line(state); } + + +MACHINE_CONFIG_MEMBER(cheekyms_audio_device::device_add_mconfig) + MCFG_SPEAKER_STANDARD_MONO("mono") + + MCFG_SOUND_ADD("sound_nl", NETLIST_SOUND, 48000) + MCFG_NETLIST_SETUP(cheekyms) + MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) + + MCFG_NETLIST_LOGIC_INPUT("sound_nl", "mute", "I_MUTE.IN", 0) + MCFG_NETLIST_LOGIC_INPUT("sound_nl", "cheese", "I_CHEESE.IN", 0) + MCFG_NETLIST_LOGIC_INPUT("sound_nl", "music", "I_MUSIC.IN", 0) + MCFG_NETLIST_LOGIC_INPUT("sound_nl", "mouse", "I_MOUSE.IN", 0) + MCFG_NETLIST_LOGIC_INPUT("sound_nl", "hammer", "I_HAMMER.IN", 0) + MCFG_NETLIST_LOGIC_INPUT("sound_nl", "pest", "I_PEST.IN", 0) + MCFG_NETLIST_LOGIC_INPUT("sound_nl", "mouse_dies", "I_MOUSE_DIES.IN", 0) + MCFG_NETLIST_LOGIC_INPUT("sound_nl", "pest_dies", "I_PEST_DIES.IN", 0) + MCFG_NETLIST_LOGIC_INPUT("sound_nl", "coin_extra", "I_COIN_EXTRA.IN", 0) + + MCFG_NETLIST_STREAM_OUTPUT("sound_nl", 0, "VR1.2") + MCFG_NETLIST_ANALOG_MULT_OFFSET(30000.0 * 10.0, 0.0) // FIXME: no clue what numbers to use here +MACHINE_CONFIG_END + + +void cheekyms_audio_device::device_start() +{ +} diff --git a/src/mame/audio/cheekyms.h b/src/mame/audio/cheekyms.h new file mode 100644 index 00000000000..65b25753e5f --- /dev/null +++ b/src/mame/audio/cheekyms.h @@ -0,0 +1,44 @@ +// license:BSD-3-Clause +// copyright-holders:Vas Crabb +#ifndef MAME_AUDIO_CHEEKYMS_H +#define MAME_AUDIO_CHEEKYMS_H + +#pragma once + +#include "machine/netlist.h" + + +class cheekyms_audio_device : public device_t +{ +public: + cheekyms_audio_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + + DECLARE_WRITE_LINE_MEMBER(mute_w); // 15 + DECLARE_WRITE_LINE_MEMBER(cheese_w); // 13 + DECLARE_WRITE_LINE_MEMBER(music_w); // 14 + DECLARE_WRITE_LINE_MEMBER(mouse_w); // 9 + DECLARE_WRITE_LINE_MEMBER(hammer_w); // 12 + DECLARE_WRITE_LINE_MEMBER(pest_w); // 8 + DECLARE_WRITE_LINE_MEMBER(mouse_dies_w); // 11 + DECLARE_WRITE_LINE_MEMBER(pest_dies_w); // 10 + DECLARE_WRITE_LINE_MEMBER(coin_extra_w); // 16 + +protected: + virtual void device_add_mconfig(machine_config &config) override; + virtual void device_start() override; + +private: + required_device<netlist_mame_logic_input_device> m_mute; + required_device<netlist_mame_logic_input_device> m_cheese; + required_device<netlist_mame_logic_input_device> m_music; + required_device<netlist_mame_logic_input_device> m_mouse; + required_device<netlist_mame_logic_input_device> m_hammer; + required_device<netlist_mame_logic_input_device> m_pest; + required_device<netlist_mame_logic_input_device> m_mouse_dies; + required_device<netlist_mame_logic_input_device> m_pest_dies; + required_device<netlist_mame_logic_input_device> m_coin_extra; +}; + +DECLARE_DEVICE_TYPE(CHEEKY_MOUSE_AUDIO, cheekyms_audio_device) + +#endif // MAME_AUDIO_CHEEKYMS_H diff --git a/src/mame/audio/nl_cheekyms.cpp b/src/mame/audio/nl_cheekyms.cpp new file mode 100644 index 00000000000..8f021fe9c50 --- /dev/null +++ b/src/mame/audio/nl_cheekyms.cpp @@ -0,0 +1,266 @@ +// license:BSD-3-Clause +// copyright-holders:Vas Crabb + +#include "audio/nl_cheekyms.h" +#include "netlist/devices/net_lib.h" + + +#ifndef __PLIB_PREPROCESSOR__ + +#endif + + +NETLIST_START(cheekyms_schematics) + + // Shared chips + TTL_7404_DIP(IC1) + LM324_DIP(IC5) + NET_C(IC1.14, IC5.4, I_V5.Q) + NET_C(IC1.7, IC5.11, GND) + + // shut the netlist parser up about unconnected inputs + NET_C(I_V5.Q, IC1.11, IC1.13) + + // Mute + RES(R1, RES_K(10)) + CAP(C10, CAP_U(10)) + QBJT_EB(Q1, "2SC945") + NET_C(IC1.2, R1.1) + NET_C(R1.2, C10.1, Q1.B) + NET_C(C10.2, Q1.E, GND) + + // Cheese +#if 0 + // FIXME: Not working right, causes the netlist system to die + // Note that the collector of Q2 is not connected, they're just using the base-emitter junction as a diode + // Well, either that or there's an error in the schematic + RES(R2, RES_M(1)) + RES(R3, RES_K(1)) + RES(R4, RES_K(100)) + RES(R5, RES_K(1)) + RES(R6, RES_K(100)) + RES(R7, RES_K(1)) + RES(R8, RES_M(1)) + RES(R9, RES_K(10)) + RES(R10, RES_K(10)) + RES(R11, RES_K(10)) + RES(R12, RES_K(100)) + CAP(C8, CAP_U(0.1)) + CAP(C9, CAP_U(0.1)) + CAP(C11, CAP_U(0.1)) + QBJT_EB(Q2, "2SC945") + NET_C(R2.1, I_VPLUS.Q) + NET_C(R2.2, C8.1, Q2.E) + NET_C(R3.1, C8.2) + NET_C(R3.2, R4.1, IC5.10) + NET_C(R5.2, R6.1, IC5.9) + NET_C(R6.2, C9.1, IC5.8) + NET_C(R7.1, C9.2) + NET_C(R7.2, R8.1, IC5.13) + NET_C(R8.2, C11.1, IC5.14) + NET_C(R10.2, IC1.4) + NET_C(R9.1, R10.1, IC5.12) + NET_C(R9.2, I_V5.Q) + NET_C(R11.1, R12.1, C11.2) + NET_C(R4.2, R5.1, R11.2, Q2.B, GND) +#else + // Rip out just enough to make it not blow up + RES(R4, RES_K(100)) + RES(R5, RES_K(1)) + RES(R6, RES_K(100)) + RES(R7, RES_K(1)) + RES(R8, RES_M(1)) + RES(R9, RES_K(10)) + RES(R10, RES_K(10)) + RES(R11, RES_K(10)) + RES(R12, RES_K(100)) + CAP(C9, CAP_U(0.1)) + CAP(C11, CAP_U(0.1)) + NET_C(R4.1, IC5.10) + NET_C(R5.2, R6.1, IC5.9) + NET_C(R6.2, C9.1, IC5.8) + NET_C(R7.1, C9.2) + NET_C(R7.2, R8.1, IC5.13) + NET_C(R8.2, C11.1, IC5.14) + NET_C(R10.1, IC1.4) + NET_C(R9.1, R10.2, IC5.12) + NET_C(R9.2, I_V5.Q) + NET_C(R11.1, R12.1, C11.2) + NET_C(R4.2, R5.1, R11.2, GND) +#endif + + // Music + RES(R13, RES_K(100)) + + // Mouse + RES(R14, RES_K(4.7)) + RES(R15, RES_K(1)) + RES(R16, RES_K(68)) + RES(R17, RES_K(100)) + CAP(C12, CAP_U(0.01)) + CAP(C13, CAP_U(10)) + DIODE(D4, "1S1588") + NE555(IC4_1) // one half of a 556 (other half does coin & extra) + NET_C(D4.K, R14.1, IC4_1.RESET) + NET_C(D4.A, R14.2, C13.1, IC4_1.CONT) + NET_C(R15.1, IC4_1.VCC, I_V5.Q) + NET_C(R15.2, R16.1, IC4_1.DISCH) + NET_C(R16.2, C12.1, IC4_1.TRIG, IC4_1.THRESH) + NET_C(C13.2, C12.2, IC4_1.GND, GND) + NET_C(R17.1, IC4_1.OUT) + + // Hammer + RES(R18, RES_K(1)) + RES(R19, RES_K(150)) + RES(R20, RES_K(10)) + RES(R21, RES_K(100)) + RES(R22, RES_K(100)) + RES(R23, RES_M(1)) + RES(R24, RES_K(51)) + CAP(C14, CAP_U(0.01)) + CAP(C15, CAP_U(0.01)) + CAP(C16, CAP_U(0.1)) + DIODE(D5, "1S1588") + DIODE(D6, "1S1588") + NE555(IC6_1) // one half of a 556 (other half does pest) + NET_C(R18.1, R23.1, IC6_1.RESET, IC6_1.VCC, I_V5.Q) + NET_C(R18.2, R19.1, IC6_1.DISCH) + NET_C(R19.2, C14.1, IC6_1.TRIG, IC6_1.THRESH) + NET_C(R20.1, IC6_1.OUT) + NET_C(R20.2, R21.1, C15.1) + NET_C(R21.2, R22.1, IC5.6) + NET_C(R22.2, R24.1, IC5.7) + NET_C(D5.K, IC1.6) + NET_C(D5.A, D6.K) + NET_C(R23.2, C16.1, D6.A, IC5.5) + NET_C(C14.2, C15.2, C16.2, IC6_1.GND, GND) + + // Pest + RES(R25, RES_K(20)) + RES(R26, RES_K(10)) + RES(R27, 220) + RES(R28, RES_K(100)) + RES(R29, RES_K(4.7)) + RES(R30, RES_K(1)) + RES(R31, RES_K(68)) + RES(R32, RES_K(100)) + RES(R33, RES_K(100)) + RES(R34, RES_K(51)) + RES(R35, RES_M(1)) + CAP(C17, CAP_U(2.2)) + CAP(C18, CAP_U(10)) + CAP(C19, CAP_U(0.01)) + CAP(C20, CAP_U(0.22)) + DIODE(D7, "1S1588") + DIODE(D8, "1S1588") + DIODE(D9, "1S1588") + NE555(IC3) + NE555(IC6_2) // one half of a 556 (other half does hammer) + NET_C(R25.1, R29.1, R30.1, R35.2, IC3.RESET, IC3.VCC, IC6_2.RESET, IC6_2.VCC, I_V5.Q) + NET_C(R25.2, R26.1, IC3.DISCH) + NET_C(R26.2, C17.1, IC3.TRIG, IC3.THRESH) + NET_C(R27.1, R28.1, IC3.OUT) + NET_C(R27.2, D7.K) + NET_C(R28.2, R29.2, C18.1, D7.A, IC6_2.CONT) + NET_C(R30.2, R31.1, IC6_2.DISCH) + NET_C(R31.2, C19.1, IC6_2.TRIG, IC6_2.THRESH) + NET_C(R32.1, IC6_2.OUT) + NET_C(R32.2, R33.1, IC5.2) + NET_C(R33.2, R34.1, IC5.1) + NET_C(D8.K, IC1.8) + NET_C(D8.A, D9.K) + NET_C(R35.1, C20.1, D9.A, IC5.3) + NET_C(C17.2, C18.2, C19.2, C20.2, IC3.GND, IC6_2.GND, GND) + + // Mouse dies + RES(R36, RES_K(1)) + RES(R37, RES_K(33)) + RES(R38, 560) + RES(R39, RES_K(100)) + CAP(C21, CAP_U(0.01)) + CAP(C22, CAP_U(47)) + NE555(IC2_2) // one half of a 556 (other half does pest dies) + NET_C(R38.1, IC2_2.RESET) + NET_C(R38.2, C22.1, IC2_2.CONT) + NET_C(R36.1, IC2_2.VCC, I_V5.Q) + NET_C(R36.2, R37.1, IC2_2.DISCH) + NET_C(R37.2, C21.1, IC2_2.TRIG, IC2_2.THRESH) + NET_C(C22.2, C21.2, IC2_2.GND, GND) + NET_C(R39.1, IC2_2.OUT) + + // Pest dies + RES(R40, RES_K(1)) + RES(R41, RES_K(47)) + RES(R42, RES_K(100)) + CAP(C23, CAP_U(0.033)) + NE555(IC2_1) // one half of a 556 (other half does mouse dies) + NET_C(R40.1, IC2_1.VCC, I_V5.Q) + NET_C(R40.2, R41.1, IC2_1.DISCH) + NET_C(R41.2, C23.1, IC2_1.TRIG, IC2_1.THRESH) + NET_C(C23.2, IC2_1.GND, GND) + NET_C(R42.1, IC2_1.OUT) + + // Coin & extra + RES(R44, RES_K(1)) + RES(R45, RES_K(47)) + RES(R46, RES_K(100)) + CAP(C24, CAP_U(0.01)) + NE555(IC4_2) // one half of a 556 (other half does mouse) + NET_C(R44.1, IC4_2.VCC, I_V5.Q) + NET_C(R44.2, R45.1, IC4_2.DISCH) + NET_C(R45.2, C24.1, IC4_2.TRIG, IC4_2.THRESH) + NET_C(C24.2, IC4_2.GND, GND) + NET_C(R46.1, IC4_2.OUT) + + // Mixdown + RES(R43, RES_K(10)) + POT(VR1, RES_K(1)) + NET_C(R12.2, R13.2, R17.2, R24.2, R34.2, R39.2, R42.2, R43.1, Q1.C) + NET_C(R46.2, R43.2, VR1.1) + NET_C(VR1.3, GND) + +NETLIST_END() + + +NETLIST_START(cheekyms) + + SOLVER(Solver, 18000) + PARAM(Solver.ACCURACY, 1e-8) + PARAM(Solver.NR_LOOPS, 300) + PARAM(Solver.GS_LOOPS, 1) + PARAM(Solver.METHOD, "MAT_CR") + PARAM(Solver.PARALLEL, 0) + PARAM(Solver.SOR_FACTOR, 1.00) + PARAM(Solver.DYNAMIC_TS, 0) + PARAM(Solver.DYNAMIC_LTE, 5e-4) + PARAM(Solver.DYNAMIC_MIN_TIMESTEP, 20e-6) + + LOCAL_SOURCE(cheekyms_schematics) + + ANALOG_INPUT(I_V5, 5) + ANALOG_INPUT(I_VPLUS, 12.9) // very approximate - 15V dropped by three diodes and filtered + //ANALOG_INPUT(I_V0, 0) + ALIAS(I_V0.Q, GND) + + INCLUDE(cheekyms_schematics) + + LOGIC_INPUT(I_MUTE, 1, "74XX") // FIXME: need 74LS family model (half the sink capability) + LOGIC_INPUT(I_CHEESE, 1, "74XX") // FIXME: need 74LS family model (half the sink capability) + LOGIC_INPUT(I_MUSIC, 1, "74XX") // FIXME: need 74LS family model (half the sink capability) + LOGIC_INPUT(I_MOUSE, 1, "74XX") // FIXME: need 74LS family model (half the sink capability) + LOGIC_INPUT(I_HAMMER, 1, "74XX") // FIXME: need 74LS family model (half the sink capability) + LOGIC_INPUT(I_PEST, 1, "74XX") // FIXME: need 74LS family model (half the sink capability) + LOGIC_INPUT(I_MOUSE_DIES, 1, "74XX") // FIXME: need 74LS family model (half the sink capability) + LOGIC_INPUT(I_PEST_DIES, 1, "74XX") // FIXME: need 74LS family model (half the sink capability) + LOGIC_INPUT(I_COIN_EXTRA, 1, "74XX") // FIXME: need 74LS family model (half the sink capability) + NET_C(I_MUTE.Q, IC1.1) + NET_C(I_CHEESE.Q, IC1.3) + NET_C(I_MUSIC.Q, R13.1) + NET_C(I_MOUSE.Q, IC4_1.RESET) + NET_C(I_HAMMER.Q, IC1.5) + NET_C(I_PEST.Q, IC1.9) + NET_C(I_MOUSE_DIES.Q, IC2_2.RESET) + NET_C(I_PEST_DIES.Q, IC2_1.RESET) + NET_C(I_COIN_EXTRA.Q, IC4_2.RESET) + +NETLIST_END() diff --git a/src/mame/audio/nl_cheekyms.h b/src/mame/audio/nl_cheekyms.h new file mode 100644 index 00000000000..769ea23e3f3 --- /dev/null +++ b/src/mame/audio/nl_cheekyms.h @@ -0,0 +1,12 @@ +// license:BSD-3-Clause +// copyright-holders:Vas Crabb +#ifndef MAME_AUDIO_NL_CHEEKYMS_H +#define MAME_AUDIO_NL_CHEEKYMS_H + +#pragma once + +#include "netlist/nl_setup.h" + +NETLIST_EXTERNAL(cheekyms) + +#endif // MAME_AUDIO_NL_CHEEKYMS_H diff --git a/src/mame/drivers/cheekyms.cpp b/src/mame/drivers/cheekyms.cpp index 85f1e09a641..cefe0b8e02e 100644 --- a/src/mame/drivers/cheekyms.cpp +++ b/src/mame/drivers/cheekyms.cpp @@ -10,8 +10,6 @@ #include "includes/cheekyms.h" #include "cpu/z80/z80.h" -#include "sound/volt_reg.h" -#include "speaker.h" INPUT_CHANGED_MEMBER(cheekyms_state::coin_inserted) @@ -144,6 +142,8 @@ static MACHINE_CONFIG_START( cheekyms ) MCFG_PALETTE_INIT_OWNER(cheekyms_state, cheekyms) /* audio hardware */ + MCFG_DEVICE_ADD("soundboard", CHEEKY_MOUSE_AUDIO, 0) +#if 0 MCFG_SPEAKER_STANDARD_MONO("speaker") MCFG_SOUND_ADD("dac0", DAC_1BIT, 0) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "speaker", 0.25) @@ -163,6 +163,7 @@ static MACHINE_CONFIG_START( cheekyms ) MCFG_SOUND_ROUTE_EX(0, "dac5", 1.0, DAC_VREF_POS_INPUT) MCFG_SOUND_ROUTE_EX(0, "dac6", 1.0, DAC_VREF_POS_INPUT) MCFG_SOUND_ROUTE_EX(0, "dac7", 1.0, DAC_VREF_POS_INPUT) +#endif MACHINE_CONFIG_END diff --git a/src/mame/includes/cheekyms.h b/src/mame/includes/cheekyms.h index 02ddeeac82e..1aeeaec87ab 100644 --- a/src/mame/includes/cheekyms.h +++ b/src/mame/includes/cheekyms.h @@ -5,7 +5,12 @@ Cheeky Mouse *************************************************************************/ +#ifndef MAME_INCLUDES_CHEEKYMS_H +#define MAME_INCLUDES_CHEEKYMS_H +#pragma once + +#include "audio/cheekyms.h" #include "sound/dac.h" #include "screen.h" @@ -13,47 +18,17 @@ class cheekyms_state : public driver_device { public: cheekyms_state(const machine_config &mconfig, device_type type, const char *tag) - : driver_device(mconfig, type, tag), - m_maincpu(*this, "maincpu"), - m_dac0(*this, "dac0"), - m_dac1(*this, "dac1"), - m_dac2(*this, "dac2"), - m_dac3(*this, "dac3"), - m_dac4(*this, "dac4"), - m_dac5(*this, "dac5"), - m_dac6(*this, "dac6"), - m_dac7(*this, "dac7"), - m_gfxdecode(*this, "gfxdecode"), - m_screen(*this, "screen"), - m_palette(*this, "palette"), - m_videoram(*this, "videoram"), - m_spriteram(*this, "spriteram"), - m_port_80(*this, "port_80") { } - - /* devices */ - required_device<cpu_device> m_maincpu; - required_device<dac_bit_interface> m_dac0; - required_device<dac_bit_interface> m_dac1; - required_device<dac_bit_interface> m_dac2; - required_device<dac_bit_interface> m_dac3; - required_device<dac_bit_interface> m_dac4; - required_device<dac_bit_interface> m_dac5; - required_device<dac_bit_interface> m_dac6; - required_device<dac_bit_interface> m_dac7; - required_device<gfxdecode_device> m_gfxdecode; - required_device<screen_device> m_screen; - required_device<palette_device> m_palette; - - /* memory pointers */ - required_shared_ptr<uint8_t> m_videoram; - required_shared_ptr<uint8_t> m_spriteram; - required_shared_ptr<uint8_t> m_port_80; - - /* video-related */ - tilemap_t *m_cm_tilemap; - std::unique_ptr<bitmap_ind16> m_bitmap_buffer; - - uint8_t m_irq_mask; + : driver_device(mconfig, type, tag) + , m_maincpu(*this, "maincpu") + , m_sound_board(*this, "soundboard") + , m_gfxdecode(*this, "gfxdecode") + , m_screen(*this, "screen") + , m_palette(*this, "palette") + , m_videoram(*this, "videoram") + , m_spriteram(*this, "spriteram") + , m_port_80(*this, "port_80") + { + } DECLARE_WRITE8_MEMBER(port_40_w); DECLARE_WRITE8_MEMBER(port_80_w); @@ -63,10 +38,34 @@ public: TILE_GET_INFO_MEMBER(get_tile_info); - virtual void machine_start() override; - virtual void video_start() override; DECLARE_PALETTE_INIT(cheekyms); uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); - void draw_sprites( bitmap_ind16 &bitmap, const rectangle &cliprect, gfx_element *gfx, int flip ); + +protected: + virtual void machine_start() override; + virtual void video_start() override; + + void draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect, gfx_element *gfx, int flip); + +private: + // devices + required_device<cpu_device> m_maincpu; + required_device<cheekyms_audio_device> m_sound_board; + required_device<gfxdecode_device> m_gfxdecode; + required_device<screen_device> m_screen; + required_device<palette_device> m_palette; + + // memory pointers + required_shared_ptr<uint8_t> m_videoram; + required_shared_ptr<uint8_t> m_spriteram; + required_shared_ptr<uint8_t> m_port_80; + + // video-related + tilemap_t *m_cm_tilemap; + std::unique_ptr<bitmap_ind16> m_bitmap_buffer; + + uint8_t m_irq_mask; }; + +#endif // MAME_INCLUDES_CHEEKYMS_H diff --git a/src/mame/video/cheekyms.cpp b/src/mame/video/cheekyms.cpp index 8e41a38bfbc..7c7470c13aa 100644 --- a/src/mame/video/cheekyms.cpp +++ b/src/mame/video/cheekyms.cpp @@ -40,20 +40,21 @@ PALETTE_INIT_MEMBER(cheekyms_state, cheekyms) WRITE8_MEMBER(cheekyms_state::port_40_w) { - m_dac0->write(BIT(data, 7)); // tune - m_dac1->write(BIT(data, 6)); // mouse eating cheese - m_dac2->write(BIT(data, 5)); // hammer - m_dac3->write(BIT(data, 4)); // mouse died - m_dac4->write(BIT(data, 3)); // mystery died - m_dac5->write(BIT(data, 2)); // mouse appears - m_dac6->write(BIT(data, 1)); // mystery appears - m_dac7->write(BIT(data, 0)); + m_sound_board->music_w(BIT(data, 7)); + m_sound_board->cheese_w(BIT(data, 6)); + m_sound_board->hammer_w(BIT(data, 5)); + m_sound_board->mouse_dies_w(BIT(data, 4)); + m_sound_board->pest_dies_w(BIT(data, 3)); + m_sound_board->mouse_w(BIT(data, 2)); + m_sound_board->pest_w(BIT(data, 1)); } WRITE8_MEMBER(cheekyms_state::port_80_w) { - /* d0-d1 - sound enables, not sure which bit is which */ + m_sound_board->coin_extra_w(BIT(data, 1)); + m_sound_board->mute_w(BIT(data, 0)); + /* d3-d5 - man scroll amount */ /* d6 - palette select (selects either 0 = PROM M9, 1 = PROM M8) */ /* d7 - screen flip */ |