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_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;

View File

@ -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;

View File

@ -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)