static void intreq_checks(uae_u16 oldreq, uae_u16 newreq)
{
- if ((oldreq & 0x0800) && !(newreq & 0x0800)) {
- serial_rbf_clear();
+ if ((oldreq & 0x0800) != (newreq & 0x0800)) {
+ serial_rbf_change((newreq & 0x0800) ? 1 : 0);
}
}
uae_u16 old = intreq2;
setclr(&intreq, (1 << v) | 0x8000);
setclr(&intreq2, (1 << v) | 0x8000);
- intreq_checks(old, intreq2);
doint();
}
static void event_send_interrupt_do_ext(uae_u32 v)
{
- //uae_u16 old = intreq;
- //setclr(&intreq, (1 << v) | 0x8000);
- //intreq_checks(old);
-
event2_newevent_xx(-1, 1 * CYCLE_UNIT, v, event_doint_delay_do_ext);
}
{
uae_u16 old = intreq2;
setclr(&intreq2, v);
- intreq_checks(old, intreq2);
doint();
}
if (old != intreq) {
doint_delay_intreq(v);
+ intreq_checks(old, intreq);
}
return true;
}
extern void SERPER (uae_u16 w);
extern void SERDAT (uae_u16 w);
-extern uae_u8 serial_writestatus (uae_u8, uae_u8);
-extern uae_u8 serial_readstatus (uae_u8, uae_u8);
-extern void serial_uartbreak (int);
-extern void serial_rbf_clear (void);
+extern uae_u8 serial_writestatus(uae_u8, uae_u8);
+extern uae_u8 serial_readstatus(uae_u8, uae_u8);
+extern void serial_uartbreak(int);
+extern void serial_rbf_change(bool);
extern uae_u16 serdat;
extern int doreadser, serstat;
}
event2_newevent_x_replace(per, 0, sersend_ce);
+
+ } else {
+
+ if (serloop_enabled) {
+ sersend_serloop(0);
+ }
+
}
checksend();
}
}
-void serial_rbf_clear(void)
+void serial_rbf_change(bool set)
{
- ovrun = 0;
+ ovrun = set;
}
void serial_dtr_on(void)