SCP: Auto detect WRU being entered for simulators without a console device

This commit is contained in:
Mark Pizzolato 2019-12-11 12:25:18 -08:00
parent e261a2fa28
commit 73a41c4bc7
4 changed files with 20 additions and 5 deletions

Binary file not shown.

View file

@ -182,6 +182,13 @@ int32 sim_del_char = '\b'; /* delete character */
#else #else
int32 sim_del_char = 0177; int32 sim_del_char = 0177;
#endif #endif
t_bool sim_signaled_int_char /* WRU character detected by signal while running */
#if defined (_WIN32) || defined (_VMS) || defined (__CYGWIN__)
= FALSE;
#else
= TRUE;
#endif
uint32 sim_last_poll_kbd_time; /* time when sim_poll_kbd was called */
extern TMLN *sim_oline; /* global output socket */ extern TMLN *sim_oline; /* global output socket */
static t_stat sim_con_poll_svc (UNIT *uptr); /* console connection poll routine */ static t_stat sim_con_poll_svc (UNIT *uptr); /* console connection poll routine */
@ -2835,6 +2842,7 @@ t_stat sim_poll_kbd (void)
{ {
t_stat c; t_stat c;
sim_last_poll_kbd_time = sim_os_msec (); /* record when this poll happened */
if (sim_send_poll_data (&sim_con_send, &c)) /* injected input characters available? */ if (sim_send_poll_data (&sim_con_send, &c)) /* injected input characters available? */
return c; return c;
if (!sim_rem_master_mode) { if (!sim_rem_master_mode) {

View file

@ -133,6 +133,8 @@ extern int32 sim_int_char; /* interrupt charact
extern int32 sim_brk_char; /* break character */ extern int32 sim_brk_char; /* break character */
extern int32 sim_tt_pchar; /* printable character mask */ extern int32 sim_tt_pchar; /* printable character mask */
extern int32 sim_del_char; /* delete character */ extern int32 sim_del_char; /* delete character */
extern t_bool sim_signaled_int_char; /* WRU character detected by signal while running */
extern uint32 sim_last_poll_kbd_time; /* time when sim_poll_kbd was called */
#ifdef __cplusplus #ifdef __cplusplus
} }

View file

@ -987,6 +987,11 @@ if (sim_calb_tmr != tmr) {
return rtc->currd; return rtc->currd;
} }
new_rtime = sim_os_msec (); /* wall time */ new_rtime = sim_os_msec (); /* wall time */
if (!sim_signaled_int_char &&
((new_rtime - sim_last_poll_kbd_time) > 500)) {
sim_debug (DBG_CAL, &sim_timer_dev, "sim_rtcn_calb(tmr=%d) gratuitious keyboard poll after %d msecs\n", tmr, (int)(new_rtime - sim_last_poll_kbd_time));
(void)sim_poll_kbd ();
}
++rtc->calibrations; /* count calibrations */ ++rtc->calibrations; /* count calibrations */
sim_debug (DBG_TRC, &sim_timer_dev, "sim_rtcn_calb(ticksper=%d, tmr=%d)\n", ticksper, tmr); sim_debug (DBG_TRC, &sim_timer_dev, "sim_rtcn_calb(ticksper=%d, tmr=%d)\n", ticksper, tmr);
if (new_rtime < rtc->rtime) { /* time running backwards? */ if (new_rtime < rtc->rtime) { /* time running backwards? */