vt52: Add bell (not working now) (nw)

This commit is contained in:
AJR 2019-12-18 22:48:08 -05:00
parent 449f853d2f
commit e665b95e65
3 changed files with 19 additions and 2 deletions

View File

@ -26,6 +26,7 @@ vt5x_cpu_device::vt5x_cpu_device(const machine_config &mconfig, device_type type
, m_ut_flag_callback(*this) , m_ut_flag_callback(*this)
, m_ruf_callback(*this) , m_ruf_callback(*this)
, m_key_up_callback(*this) , m_key_up_callback(*this)
, m_bell_callback(*this)
, m_bbits(bbits) , m_bbits(bbits)
, m_ybits(ybits) , m_ybits(ybits)
, m_pc(0) , 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_write_ff(false)
, m_flag_test_ff(false) , m_flag_test_ff(false)
, m_m2u_ff(false) , m_m2u_ff(false)
, m_bell_ff(false)
, m_load_pc(false) , m_load_pc(false)
, m_qa_e23(0) , m_qa_e23(0)
, m_icount(0) , m_icount(0)
@ -89,6 +91,7 @@ void vt5x_cpu_device::device_resolve_objects()
m_ut_flag_callback.resolve_safe(0); m_ut_flag_callback.resolve_safe(0);
m_ruf_callback.resolve_safe(); m_ruf_callback.resolve_safe();
m_key_up_callback.resolve_safe(1); m_key_up_callback.resolve_safe(1);
m_bell_callback.resolve_safe();
} }
void vt5x_cpu_device::device_start() 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_write_ff));
save_item(NAME(m_flag_test_ff)); save_item(NAME(m_flag_test_ff));
save_item(NAME(m_m2u_ff)); save_item(NAME(m_m2u_ff));
save_item(NAME(m_bell_ff));
save_item(NAME(m_load_pc)); save_item(NAME(m_load_pc));
save_item(NAME(m_qa_e23)); save_item(NAME(m_qa_e23));
} }
@ -298,7 +302,9 @@ void vt5x_cpu_device::execute_tw(u8 inst)
break; break;
case 0060: case 0060:
// CBFF (TODO) // CBFF
m_bell_ff = !m_bell_ff;
m_bell_callback(m_bell_ff);
break; break;
case 0100: 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; m_write_ff = (m_mode_ff || m_ac >= m_ram_do) && !m_done_ff;
else else
m_write_ff = (inst & 0162) == 0022 || (inst & 0162) == 0062 || (inst & 0162) == 0122; 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) if (m_write_ff)
m_done_ff = true; m_done_ff = true;
} }
@ -470,7 +478,7 @@ void vt5x_cpu_device::execute_th(u8 inst)
case 0160: case 0160:
// M0: TOSJ (TODO) // M0: TOSJ (TODO)
// M1: KEYJ (TODO) // M1: KEYJ
if (m_mode_ff) if (m_mode_ff)
m_load_pc = m_key_up_callback(m_ac) & 1; m_load_pc = m_key_up_callback(m_ac) & 1;
break; break;

View File

@ -23,6 +23,7 @@ public:
auto ut_flag_callback() { return m_ut_flag_callback.bind(); } auto ut_flag_callback() { return m_ut_flag_callback.bind(); }
auto ruf_callback() { return m_ruf_callback.bind(); } auto ruf_callback() { return m_ruf_callback.bind(); }
auto key_up_callback() { return m_key_up_callback.bind(); } auto key_up_callback() { return m_key_up_callback.bind(); }
auto bell_callback() { return m_bell_callback.bind(); }
protected: protected:
// construction/destruction // construction/destruction
@ -66,6 +67,7 @@ protected:
devcb_read_line m_ut_flag_callback; devcb_read_line m_ut_flag_callback;
devcb_write_line m_ruf_callback; devcb_write_line m_ruf_callback;
devcb_read8 m_key_up_callback; devcb_read8 m_key_up_callback;
devcb_write_line m_bell_callback;
// register dimensions // register dimensions
const u8 m_bbits; const u8 m_bbits;
@ -90,6 +92,7 @@ protected:
bool m_write_ff; bool m_write_ff;
bool m_flag_test_ff; bool m_flag_test_ff;
bool m_m2u_ff; bool m_m2u_ff;
bool m_bell_ff;
bool m_load_pc; bool m_load_pc;
bool m_qa_e23; bool m_qa_e23;
s32 m_icount; s32 m_icount;

View File

@ -23,7 +23,9 @@
//#include "bus/rs232/rs232.h" //#include "bus/rs232/rs232.h"
#include "cpu/vt50/vt50.h" #include "cpu/vt50/vt50.h"
#include "machine/ay31015.h" #include "machine/ay31015.h"
#include "sound/spkrdev.h"
#include "screen.h" #include "screen.h"
#include "speaker.h"
class vt52_state : public driver_device 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->ut_flag_callback().set(FUNC(vt52_state::xrdy_eoc_r));
m_maincpu->ruf_callback().set(m_uart, FUNC(ay51013_device::write_rdav)); 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->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 AY51013(mconfig, m_uart); // TR1402 or equivalent
screen_device &screen(SCREEN(mconfig, "screen", SCREEN_TYPE_RASTER)); screen_device &screen(SCREEN(mconfig, "screen", SCREEN_TYPE_RASTER));
screen.set_raw(13.824_MHz_XTAL, 900, 0, 720, 256, 0, 192); screen.set_raw(13.824_MHz_XTAL, 900, 0, 720, 256, 0, 192);
screen.set_screen_update(FUNC(vt52_state::screen_update)); 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) ROM_START(vt52)