cdp1852: Fixes and enhancements

- Fix clock write handler
- Add write handler for automatically clocking 8-bit data into input-mode latch
- Add line read handler for SR output
This commit is contained in:
AJR 2024-11-19 19:16:08 -05:00
parent 9aa8a793f9
commit f4a50aa850
2 changed files with 34 additions and 4 deletions

View File

@ -103,7 +103,7 @@ void cdp1852_device::device_reset()
void cdp1852_device::clock_w(int state)
{
if (m_clock_active != bool(state))
if (m_clock_active == bool(state))
return;
m_clock_active = bool(state);
@ -116,7 +116,7 @@ void cdp1852_device::clock_w(int state)
m_data = m_read_data(0);
// signal processor
set_sr_line(0);
set_sr_line(false);
}
else
{
@ -159,7 +159,18 @@ void cdp1852_device::set_sr_line(bool state)
TIMER_CALLBACK_MEMBER(cdp1852_device::update_do)
{
m_write_data(param);
if (!m_read_mode())
{
// input data into register
m_data = param;
// signal processor
set_sr_line(false);
}
else
{
m_write_data(param);
}
}
@ -192,7 +203,7 @@ uint8_t cdp1852_device::read()
//-------------------------------------------------
// write - data write
// write - data write (synchronous)
//-------------------------------------------------
void cdp1852_device::write(uint8_t data)
@ -205,3 +216,20 @@ void cdp1852_device::write(uint8_t data)
m_new_data = true;
}
}
//-------------------------------------------------
// write_strobe - data write with asynchronous
// clock strobe
//-------------------------------------------------
void cdp1852_device::write_strobe(uint8_t data)
{
if (!m_read_mode())
{
// output data
m_update_do_timer->adjust(attotime::zero, data);
m_clock_active = false;
}
}

View File

@ -39,10 +39,12 @@ public:
uint8_t read();
void write(uint8_t data);
void write_strobe(uint8_t data);
void clock_w(int state);
uint8_t do_r() { return m_data; }
int sr_r() { return m_sr; }
protected:
// device-level overrides