diff options
author | 2019-01-14 00:22:29 -0500 | |
---|---|---|
committer | 2019-01-14 00:22:29 -0500 | |
commit | 7447ff35aa76c36cf32c461f0602bfa19b94d6fa (patch) | |
tree | 98605e92169a1688a5e3e7cc51bc5349754f52fc /src | |
parent | c816ca06f7028995b22ade1b2dc376e08a54a93c (diff) |
univac.cpp: Add speaker sound for "audible alarm"
Diffstat (limited to 'src')
-rw-r--r-- | src/mame/drivers/univac.cpp | 34 |
1 files changed, 29 insertions, 5 deletions
diff --git a/src/mame/drivers/univac.cpp b/src/mame/drivers/univac.cpp index 5efb8622629..183bad7aa73 100644 --- a/src/mame/drivers/univac.cpp +++ b/src/mame/drivers/univac.cpp @@ -103,7 +103,7 @@ After entering the characters, press FCTN and CTRL PAGE keys again to save the s #include "machine/nvram.h" #include "machine/z80ctc.h" #include "machine/z80sio.h" -#include "sound/beep.h" +#include "sound/spkrdev.h" #include "video/dp8350.h" #include "emupal.h" #include "screen.h" @@ -130,7 +130,7 @@ public: , m_ctc(*this, "ctc") , m_keybclk(*this, "keybclk") , m_sio(*this, "sio") - , m_beep(*this, "beeper") + , m_alarm(*this, "alarm") , m_screen(*this, "screen") , m_keyboard(*this, "keyboard") , m_printer(*this, "printer") @@ -142,6 +142,8 @@ public: , m_display_enable(false) , m_framecnt(0) , m_nvram_protect(false) + , m_alarm_enable(false) + , m_alarm_toggle(false) , m_loopback_control(false) , m_comm_rxd(true) , m_sio_txda(true) @@ -167,6 +169,7 @@ private: DECLARE_WRITE_LINE_MEMBER(ram_control_w); DECLARE_WRITE_LINE_MEMBER(parity_poison_w); DECLARE_WRITE_LINE_MEMBER(display_enable_w); + DECLARE_WRITE_LINE_MEMBER(alarm_enable_w); DECLARE_WRITE_LINE_MEMBER(sio_loopback_w); DECLARE_WRITE_LINE_MEMBER(sio_txda_w); DECLARE_WRITE_LINE_MEMBER(sio_txdb_w); @@ -190,7 +193,7 @@ private: required_device<z80ctc_device> m_ctc; optional_device<clock_device> m_keybclk; required_device<z80sio_device> m_sio; - required_device<beep_device> m_beep; + required_device<speaker_sound_device> m_alarm; required_device<screen_device> m_screen; required_device<uts_keyboard_port_device> m_keyboard; @@ -208,6 +211,9 @@ private: u8 m_framecnt; bool m_nvram_protect; + bool m_alarm_enable; + bool m_alarm_toggle; + bool m_loopback_control; bool m_comm_rxd; bool m_sio_txda; @@ -270,7 +276,15 @@ WRITE_LINE_MEMBER(univac_state::nvram_protect_w) // There seems to be some timing-based write protection related to the CTC's TRG0 input. // The present implementation is a crude approximation of a wild guess. if (state) + { m_nvram_protect = m_screen->vpos() < 10; + + if (m_alarm_enable) + { + m_alarm_toggle = !m_alarm_toggle; + m_alarm->level_w(m_alarm_toggle); + } + } } WRITE_LINE_MEMBER(univac_state::select_disp_w) @@ -293,6 +307,13 @@ WRITE_LINE_MEMBER(univac_state::display_enable_w) m_display_enable = state; } +WRITE_LINE_MEMBER(univac_state::alarm_enable_w) +{ + m_alarm_enable = state; + if (!state) + m_alarm->level_w(0); +} + WRITE_LINE_MEMBER(univac_state::sio_loopback_w) { if (state) @@ -444,6 +465,9 @@ void univac_state::machine_start() save_item(NAME(m_parity_poison)); save_item(NAME(m_display_enable)); save_item(NAME(m_framecnt)); + save_item(NAME(m_nvram_protect)); + save_item(NAME(m_alarm_enable)); + save_item(NAME(m_alarm_toggle)); save_item(NAME(m_loopback_control)); save_item(NAME(m_comm_rxd)); save_item(NAME(m_sio_txda)); @@ -547,6 +571,7 @@ MACHINE_CONFIG_START(univac_state::uts20) latch_40.q_out_cb<3>().set(FUNC(univac_state::ram_control_w)); ls259_device &latch_c0(LS259(config, "latch_c0")); // actual type and location unknown + latch_c0.q_out_cb<0>().set(FUNC(univac_state::alarm_enable_w)); latch_c0.q_out_cb<3>().set(FUNC(univac_state::display_enable_w)); latch_c0.q_out_cb<4>().set(FUNC(univac_state::parity_poison_w)); latch_c0.q_out_cb<6>().set(FUNC(univac_state::sio_loopback_w)); @@ -592,8 +617,7 @@ MACHINE_CONFIG_START(univac_state::uts20) /* Sound */ SPEAKER(config, "mono").front_center(); - MCFG_DEVICE_ADD("beeper", BEEP, 950) // guess - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.05) + SPEAKER_SOUND(config, m_alarm).add_route(ALL_OUTPUTS, "mono", 0.05); UTS_KEYBOARD(config, m_keyboard, uts20_keyboards, "extw"); m_keyboard->rxd_callback().set(FUNC(univac_state::aux_rxd_w)); |