summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/machine/mc6843.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/devices/machine/mc6843.cpp')
-rw-r--r--src/devices/machine/mc6843.cpp36
1 files changed, 23 insertions, 13 deletions
diff --git a/src/devices/machine/mc6843.cpp b/src/devices/machine/mc6843.cpp
index 695c26a1500..d1df8e4d4ee 100644
--- a/src/devices/machine/mc6843.cpp
+++ b/src/devices/machine/mc6843.cpp
@@ -17,8 +17,7 @@ mc6843_device::mc6843_device(const machine_config &mconfig, const char *tag, dev
void mc6843_device::device_start()
{
- m_irq.resolve_safe();
- m_timer = timer_alloc(0);
+ m_timer = timer_alloc(FUNC(mc6843_device::update_tick), this);
m_floppy = nullptr;
m_dir = 0x00;
@@ -126,6 +125,10 @@ void mc6843_device::dor_w(u8 data)
m_dor = data;
m_dor_loaded = true;
logerror("dor_w %02x\n", m_dor);
+
+ m_strb &= ~SB_DTERR;
+ if(m_strb == 0)
+ m_isr &= 0x7;
}
u8 mc6843_device::ctar_r()
@@ -238,18 +241,22 @@ void mc6843_device::sur_w(u8 data)
u8 mc6843_device::strb_r()
{
+ u8 strb = m_strb;
if(!machine().side_effects_disabled()) {
- logerror("strb_r %02x -%s%s%s%s%s%s%s%s\n", m_strb,
- m_strb & SB_HERR ? " herr" : "",
- m_strb & SB_WERR ? " werr" : "",
- m_strb & SB_FI ? " fi" : "",
- m_strb & SB_SERR ? " serr" : "",
- m_strb & SB_SAERR ? " saerr" : "",
- m_strb & SB_DMERR ? " dmerr" : "",
- m_strb & SB_CRC ? " crc" : "",
- m_strb & SB_DTERR ? " dterr" : "");
+ logerror("strb_r %02x -%s%s%s%s%s%s%s%s\n", strb,
+ strb & SB_HERR ? " herr" : "",
+ strb & SB_WERR ? " werr" : "",
+ strb & SB_FI ? " fi" : "",
+ strb & SB_SERR ? " serr" : "",
+ strb & SB_SAERR ? " saerr" : "",
+ strb & SB_DMERR ? " dmerr" : "",
+ strb & SB_CRC ? " crc" : "",
+ strb & SB_DTERR ? " dterr" : "");
+ m_strb &= ~(SB_HERR|SB_WERR|SB_SERR|SB_SAERR|SB_DMERR|SB_CRC|SB_DTERR);
+ if(m_strb == 0)
+ m_isr &= 0x7;
}
- return m_strb;
+ return strb;
}
void mc6843_device::sar_w(u8 data)
@@ -300,7 +307,7 @@ void mc6843_device::ready_callback(floppy_image_device *floppy, int state)
}
}
-void mc6843_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr)
+TIMER_CALLBACK_MEMBER(mc6843_device::update_tick)
{
live_sync();
run(true, false, false);
@@ -342,6 +349,9 @@ void mc6843_device::command_start()
case C_SSR: case C_RCR: case C_SSW: case C_SWD: case C_MSR: case C_MSW:
m_stra |= SA_BUSY;
m_stra &= ~(SA_DDM|SA_TNEQ);
+ m_strb &= ~SB_DMERR;
+ if(m_strb == 0)
+ m_isr &= 0x7;
m_state = S_SRW_WAIT_READY;
break;