SCP: Auto detect WRU being entered for simulators without a console device
This commit is contained in:
parent
e261a2fa28
commit
73a41c4bc7
4 changed files with 20 additions and 5 deletions
BIN
doc/simh.doc
BIN
doc/simh.doc
Binary file not shown.
|
@ -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) {
|
||||||
|
|
|
@ -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
|
||||||
}
|
}
|
||||||
|
|
|
@ -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? */
|
||||||
|
|
Loading…
Add table
Reference in a new issue