From e665b95e65f853b4a82e75f55ac354035852d41f Mon Sep 17 00:00:00 2001 From: AJR Date: Wed, 18 Dec 2019 22:48:08 -0500 Subject: vt52: Add bell (not working now) (nw) --- src/devices/cpu/vt50/vt50.cpp | 12 ++++++++++-- src/devices/cpu/vt50/vt50.h | 3 +++ src/mame/drivers/vt52.cpp | 6 ++++++ 3 files changed, 19 insertions(+), 2 deletions(-) diff --git a/src/devices/cpu/vt50/vt50.cpp b/src/devices/cpu/vt50/vt50.cpp index 9fbdcc35070..5a49110bb3f 100644 --- a/src/devices/cpu/vt50/vt50.cpp +++ b/src/devices/cpu/vt50/vt50.cpp @@ -26,6 +26,7 @@ vt5x_cpu_device::vt5x_cpu_device(const machine_config &mconfig, device_type type , m_ut_flag_callback(*this) , m_ruf_callback(*this) , m_key_up_callback(*this) + , m_bell_callback(*this) , m_bbits(bbits) , m_ybits(ybits) , m_pc(0) @@ -44,6 +45,7 @@ vt5x_cpu_device::vt5x_cpu_device(const machine_config &mconfig, device_type type , m_write_ff(false) , m_flag_test_ff(false) , m_m2u_ff(false) + , m_bell_ff(false) , m_load_pc(false) , m_qa_e23(0) , m_icount(0) @@ -89,6 +91,7 @@ void vt5x_cpu_device::device_resolve_objects() m_ut_flag_callback.resolve_safe(0); m_ruf_callback.resolve_safe(); m_key_up_callback.resolve_safe(1); + m_bell_callback.resolve_safe(); } void vt5x_cpu_device::device_start() @@ -133,6 +136,7 @@ void vt5x_cpu_device::device_start() save_item(NAME(m_write_ff)); save_item(NAME(m_flag_test_ff)); save_item(NAME(m_m2u_ff)); + save_item(NAME(m_bell_ff)); save_item(NAME(m_load_pc)); save_item(NAME(m_qa_e23)); } @@ -298,7 +302,9 @@ void vt5x_cpu_device::execute_tw(u8 inst) break; case 0060: - // CBFF (TODO) + // CBFF + m_bell_ff = !m_bell_ff; + m_bell_callback(m_bell_ff); break; case 0100: @@ -330,6 +336,8 @@ void vt5x_cpu_device::execute_tw(u8 inst) m_write_ff = (m_mode_ff || m_ac >= m_ram_do) && !m_done_ff; else m_write_ff = (inst & 0162) == 0022 || (inst & 0162) == 0062 || (inst & 0162) == 0122; + + // DONE is set by any RAM write, not just LD if (m_write_ff) m_done_ff = true; } @@ -470,7 +478,7 @@ void vt5x_cpu_device::execute_th(u8 inst) case 0160: // M0: TOSJ (TODO) - // M1: KEYJ (TODO) + // M1: KEYJ if (m_mode_ff) m_load_pc = m_key_up_callback(m_ac) & 1; break; diff --git a/src/devices/cpu/vt50/vt50.h b/src/devices/cpu/vt50/vt50.h index 43221759b22..b4f164c1037 100644 --- a/src/devices/cpu/vt50/vt50.h +++ b/src/devices/cpu/vt50/vt50.h @@ -23,6 +23,7 @@ public: auto ut_flag_callback() { return m_ut_flag_callback.bind(); } auto ruf_callback() { return m_ruf_callback.bind(); } auto key_up_callback() { return m_key_up_callback.bind(); } + auto bell_callback() { return m_bell_callback.bind(); } protected: // construction/destruction @@ -66,6 +67,7 @@ protected: devcb_read_line m_ut_flag_callback; devcb_write_line m_ruf_callback; devcb_read8 m_key_up_callback; + devcb_write_line m_bell_callback; // register dimensions const u8 m_bbits; @@ -90,6 +92,7 @@ protected: bool m_write_ff; bool m_flag_test_ff; bool m_m2u_ff; + bool m_bell_ff; bool m_load_pc; bool m_qa_e23; s32 m_icount; diff --git a/src/mame/drivers/vt52.cpp b/src/mame/drivers/vt52.cpp index 55133dbfa5b..e095c47af89 100644 --- a/src/mame/drivers/vt52.cpp +++ b/src/mame/drivers/vt52.cpp @@ -23,7 +23,9 @@ //#include "bus/rs232/rs232.h" #include "cpu/vt50/vt50.h" #include "machine/ay31015.h" +#include "sound/spkrdev.h" #include "screen.h" +#include "speaker.h" class vt52_state : public driver_device { @@ -202,12 +204,16 @@ void vt52_state::vt52(machine_config &mconfig) m_maincpu->ut_flag_callback().set(FUNC(vt52_state::xrdy_eoc_r)); m_maincpu->ruf_callback().set(m_uart, FUNC(ay51013_device::write_rdav)); m_maincpu->key_up_callback().set(FUNC(vt52_state::key_r)); + m_maincpu->bell_callback().set("bell", FUNC(speaker_sound_device::level_w)); AY51013(mconfig, m_uart); // TR1402 or equivalent screen_device &screen(SCREEN(mconfig, "screen", SCREEN_TYPE_RASTER)); screen.set_raw(13.824_MHz_XTAL, 900, 0, 720, 256, 0, 192); screen.set_screen_update(FUNC(vt52_state::screen_update)); + + SPEAKER(mconfig, "mono").front_center(); + SPEAKER_SOUND(mconfig, "bell").add_route(ALL_OUTPUTS, "mono", 0.05); } ROM_START(vt52) -- cgit v1.2.3