Changed VAX console input polling to only poll for input if the last character received has been processed by the VM
This commit is contained in:
parent
7a9db0fe64
commit
d674bb1f8d
6 changed files with 38 additions and 6 deletions
|
@ -74,6 +74,7 @@ extern jmp_buf save_env;
|
||||||
extern int32 p1;
|
extern int32 p1;
|
||||||
|
|
||||||
int32 tti_csr = 0; /* control/status */
|
int32 tti_csr = 0; /* control/status */
|
||||||
|
uint32 tti_buftime; /* time input character arrived */
|
||||||
int32 tto_csr = 0; /* control/status */
|
int32 tto_csr = 0; /* control/status */
|
||||||
int32 tto_leds = 0; /* processor board LEDs */
|
int32 tto_leds = 0; /* processor board LEDs */
|
||||||
int32 clk_csr = 0; /* control/status */
|
int32 clk_csr = 0; /* control/status */
|
||||||
|
@ -332,7 +333,11 @@ t_stat tti_svc (UNIT *uptr)
|
||||||
{
|
{
|
||||||
int32 c;
|
int32 c;
|
||||||
|
|
||||||
sim_activate (uptr, KBD_WAIT (uptr->wait, tmr_poll)); /* continue poll */
|
sim_clock_coschedule (uptr, KBD_WAIT (uptr->wait, tmr_poll));
|
||||||
|
/* continue poll */
|
||||||
|
if ((tti_csr & CSR_DONE) && /* input still pending and < 500ms? */
|
||||||
|
((sim_os_msec () - tti_buftime) < 500))
|
||||||
|
return SCPE_OK;
|
||||||
if ((c = sim_poll_kbd ()) < SCPE_KFLAG) /* no char or error? */
|
if ((c = sim_poll_kbd ()) < SCPE_KFLAG) /* no char or error? */
|
||||||
return c;
|
return c;
|
||||||
if (c & SCPE_BREAK) { /* break? */
|
if (c & SCPE_BREAK) { /* break? */
|
||||||
|
@ -341,6 +346,7 @@ if (c & SCPE_BREAK) { /* break? */
|
||||||
tti_unit.buf = TTIBUF_ERR | TTIBUF_FRM | TTIBUF_RBR;
|
tti_unit.buf = TTIBUF_ERR | TTIBUF_FRM | TTIBUF_RBR;
|
||||||
}
|
}
|
||||||
else tti_unit.buf = sim_tt_inpcvt (c, TT_GET_MODE (uptr->flags));
|
else tti_unit.buf = sim_tt_inpcvt (c, TT_GET_MODE (uptr->flags));
|
||||||
|
tti_buftime = sim_os_msec ();
|
||||||
uptr->pos = uptr->pos + 1;
|
uptr->pos = uptr->pos + 1;
|
||||||
tti_csr = tti_csr | CSR_DONE;
|
tti_csr = tti_csr | CSR_DONE;
|
||||||
if (tti_csr & CSR_IE)
|
if (tti_csr & CSR_IE)
|
||||||
|
|
|
@ -52,6 +52,7 @@ extern int32 int_req[IPL_HLVL];
|
||||||
extern int32 hlt_pin;
|
extern int32 hlt_pin;
|
||||||
|
|
||||||
int32 tti_csr = 0; /* control/status */
|
int32 tti_csr = 0; /* control/status */
|
||||||
|
uint32 tti_buftime; /* time input character arrived */
|
||||||
int32 tto_csr = 0; /* control/status */
|
int32 tto_csr = 0; /* control/status */
|
||||||
int32 clk_csr = 0; /* control/status */
|
int32 clk_csr = 0; /* control/status */
|
||||||
int32 clk_tps = 100; /* ticks/second */
|
int32 clk_tps = 100; /* ticks/second */
|
||||||
|
@ -267,7 +268,11 @@ t_stat tti_svc (UNIT *uptr)
|
||||||
{
|
{
|
||||||
int32 c;
|
int32 c;
|
||||||
|
|
||||||
sim_activate (uptr, KBD_WAIT (uptr->wait, tmr_poll)); /* continue poll */
|
sim_clock_coschedule (uptr, KBD_WAIT (uptr->wait, tmr_poll));
|
||||||
|
/* continue poll */
|
||||||
|
if ((tti_csr & CSR_DONE) && /* input still pending and < 500ms? */
|
||||||
|
((sim_os_msec () - tti_buftime) < 500))
|
||||||
|
return SCPE_OK;
|
||||||
if ((c = sim_poll_kbd ()) < SCPE_KFLAG) /* no char or error? */
|
if ((c = sim_poll_kbd ()) < SCPE_KFLAG) /* no char or error? */
|
||||||
return c;
|
return c;
|
||||||
if (c & SCPE_BREAK) { /* break? */
|
if (c & SCPE_BREAK) { /* break? */
|
||||||
|
@ -276,6 +281,7 @@ if (c & SCPE_BREAK) { /* break? */
|
||||||
tti_unit.buf = TTIBUF_ERR | TTIBUF_FRM | TTIBUF_RBR;
|
tti_unit.buf = TTIBUF_ERR | TTIBUF_FRM | TTIBUF_RBR;
|
||||||
}
|
}
|
||||||
else tti_unit.buf = sim_tt_inpcvt (c, TT_GET_MODE (uptr->flags));
|
else tti_unit.buf = sim_tt_inpcvt (c, TT_GET_MODE (uptr->flags));
|
||||||
|
tti_buftime = sim_os_msec ();
|
||||||
uptr->pos = uptr->pos + 1;
|
uptr->pos = uptr->pos + 1;
|
||||||
tti_csr = tti_csr | CSR_DONE;
|
tti_csr = tti_csr | CSR_DONE;
|
||||||
if (tti_csr & CSR_IE)
|
if (tti_csr & CSR_IE)
|
||||||
|
|
|
@ -158,6 +158,7 @@
|
||||||
#define TD_INIT 9 /* empty buffer */
|
#define TD_INIT 9 /* empty buffer */
|
||||||
|
|
||||||
int32 tti_csr = 0; /* control/status */
|
int32 tti_csr = 0; /* control/status */
|
||||||
|
uint32 tti_buftime; /* time input character arrived */
|
||||||
int32 tti_buf = 0; /* buffer */
|
int32 tti_buf = 0; /* buffer */
|
||||||
int32 tti_int = 0; /* interrupt */
|
int32 tti_int = 0; /* interrupt */
|
||||||
int32 tto_csr = 0; /* control/status */
|
int32 tto_csr = 0; /* control/status */
|
||||||
|
@ -660,12 +661,17 @@ t_stat tti_svc (UNIT *uptr)
|
||||||
{
|
{
|
||||||
int32 c;
|
int32 c;
|
||||||
|
|
||||||
sim_activate (uptr, KBD_WAIT (uptr->wait, tmr_poll)); /* continue poll */
|
sim_clock_coschedule (uptr, KBD_WAIT (uptr->wait, tmr_poll));
|
||||||
|
/* continue poll */
|
||||||
|
if ((tti_csr & CSR_DONE) && /* input still pending and < 500ms? */
|
||||||
|
((sim_os_msec () - tti_buftime) < 500))
|
||||||
|
return SCPE_OK;
|
||||||
if ((c = sim_poll_kbd ()) < SCPE_KFLAG) /* no char or error? */
|
if ((c = sim_poll_kbd ()) < SCPE_KFLAG) /* no char or error? */
|
||||||
return c;
|
return c;
|
||||||
if (c & SCPE_BREAK) /* break? */
|
if (c & SCPE_BREAK) /* break? */
|
||||||
tti_buf = RXDB_ERR;
|
tti_buf = RXDB_ERR;
|
||||||
else tti_buf = sim_tt_inpcvt (c, TT_GET_MODE (uptr->flags));
|
else tti_buf = sim_tt_inpcvt (c, TT_GET_MODE (uptr->flags));
|
||||||
|
tti_buftime = sim_os_msec ();
|
||||||
uptr->pos = uptr->pos + 1;
|
uptr->pos = uptr->pos + 1;
|
||||||
tti_csr = tti_csr | CSR_DONE;
|
tti_csr = tti_csr | CSR_DONE;
|
||||||
if (tti_csr & CSR_IE)
|
if (tti_csr & CSR_IE)
|
||||||
|
|
|
@ -157,6 +157,7 @@
|
||||||
#define TD_INIT 9 /* empty buffer */
|
#define TD_INIT 9 /* empty buffer */
|
||||||
|
|
||||||
int32 tti_csr = 0; /* control/status */
|
int32 tti_csr = 0; /* control/status */
|
||||||
|
uint32 tti_buftime; /* time input character arrived */
|
||||||
int32 tti_buf = 0; /* buffer */
|
int32 tti_buf = 0; /* buffer */
|
||||||
int32 tti_int = 0; /* interrupt */
|
int32 tti_int = 0; /* interrupt */
|
||||||
int32 tto_csr = 0; /* control/status */
|
int32 tto_csr = 0; /* control/status */
|
||||||
|
@ -653,12 +654,17 @@ t_stat tti_svc (UNIT *uptr)
|
||||||
{
|
{
|
||||||
int32 c;
|
int32 c;
|
||||||
|
|
||||||
sim_activate (uptr, KBD_WAIT (uptr->wait, tmr_poll)); /* continue poll */
|
sim_clock_coschedule (uptr, KBD_WAIT (uptr->wait, tmr_poll));
|
||||||
|
/* continue poll */
|
||||||
|
if ((tti_csr & CSR_DONE) && /* input still pending and < 500ms? */
|
||||||
|
((sim_os_msec () - tti_buftime) < 500))
|
||||||
|
return SCPE_OK;
|
||||||
if ((c = sim_poll_kbd ()) < SCPE_KFLAG) /* no char or error? */
|
if ((c = sim_poll_kbd ()) < SCPE_KFLAG) /* no char or error? */
|
||||||
return c;
|
return c;
|
||||||
if (c & SCPE_BREAK) /* break? */
|
if (c & SCPE_BREAK) /* break? */
|
||||||
tti_buf = RXDB_ERR | RXDB_FRM;
|
tti_buf = RXDB_ERR | RXDB_FRM;
|
||||||
else tti_buf = sim_tt_inpcvt (c, TT_GET_MODE (uptr->flags));
|
else tti_buf = sim_tt_inpcvt (c, TT_GET_MODE (uptr->flags));
|
||||||
|
tti_buftime = sim_os_msec ();
|
||||||
uptr->pos = uptr->pos + 1;
|
uptr->pos = uptr->pos + 1;
|
||||||
tti_csr = tti_csr | CSR_DONE;
|
tti_csr = tti_csr | CSR_DONE;
|
||||||
if (tti_csr & CSR_IE)
|
if (tti_csr & CSR_IE)
|
||||||
|
|
|
@ -182,6 +182,7 @@
|
||||||
#define CALC_DA(t,s) (((t) * FL_NUMSC) + ((s) - 1)) * FL_NUMBY
|
#define CALC_DA(t,s) (((t) * FL_NUMSC) + ((s) - 1)) * FL_NUMBY
|
||||||
|
|
||||||
int32 tti_csr = 0; /* control/status */
|
int32 tti_csr = 0; /* control/status */
|
||||||
|
uint32 tti_buftime; /* time input character arrived */
|
||||||
int32 tti_buf = 0; /* buffer */
|
int32 tti_buf = 0; /* buffer */
|
||||||
int32 tti_int = 0; /* interrupt */
|
int32 tti_int = 0; /* interrupt */
|
||||||
int32 tto_csr = 0; /* control/status */
|
int32 tto_csr = 0; /* control/status */
|
||||||
|
@ -475,13 +476,15 @@ t_stat tti_svc (UNIT *uptr)
|
||||||
int32 c;
|
int32 c;
|
||||||
|
|
||||||
sim_clock_coschedule (uptr, tmxr_poll); /* continue poll */
|
sim_clock_coschedule (uptr, tmxr_poll); /* continue poll */
|
||||||
if (tti_csr & CSR_DONE) /* is last input processed yet? */
|
if ((tti_csr & CSR_DONE) && /* input still pending and < 500ms? */
|
||||||
return SCPE_OK; /* wait */
|
((sim_os_msec () - tti_buftime) < 500))
|
||||||
|
return SCPE_OK;
|
||||||
if ((c = sim_poll_kbd ()) < SCPE_KFLAG) /* no char or error? */
|
if ((c = sim_poll_kbd ()) < SCPE_KFLAG) /* no char or error? */
|
||||||
return c;
|
return c;
|
||||||
if (c & SCPE_BREAK) /* break? */
|
if (c & SCPE_BREAK) /* break? */
|
||||||
tti_buf = RXDB_ERR | RXDB_FRM;
|
tti_buf = RXDB_ERR | RXDB_FRM;
|
||||||
else tti_buf = sim_tt_inpcvt (c, TT_GET_MODE (uptr->flags));
|
else tti_buf = sim_tt_inpcvt (c, TT_GET_MODE (uptr->flags));
|
||||||
|
tti_buftime = sim_os_msec ();
|
||||||
uptr->pos = uptr->pos + 1;
|
uptr->pos = uptr->pos + 1;
|
||||||
tti_csr = tti_csr | CSR_DONE;
|
tti_csr = tti_csr | CSR_DONE;
|
||||||
if (tti_csr & CSR_IE)
|
if (tti_csr & CSR_IE)
|
||||||
|
|
|
@ -97,6 +97,7 @@ extern int32 int_req[IPL_HLVL];
|
||||||
extern int32 hlt_pin;
|
extern int32 hlt_pin;
|
||||||
|
|
||||||
int32 tti_csr = 0; /* control/status */
|
int32 tti_csr = 0; /* control/status */
|
||||||
|
uint32 tti_buftime; /* time input character arrived */
|
||||||
int32 tto_csr = 0; /* control/status */
|
int32 tto_csr = 0; /* control/status */
|
||||||
int32 clk_csr = 0; /* control/status */
|
int32 clk_csr = 0; /* control/status */
|
||||||
int32 clk_tps = 100; /* ticks/second */
|
int32 clk_tps = 100; /* ticks/second */
|
||||||
|
@ -331,6 +332,9 @@ int32 c;
|
||||||
|
|
||||||
sim_clock_coschedule (uptr, KBD_WAIT (uptr->wait, tmr_poll));
|
sim_clock_coschedule (uptr, KBD_WAIT (uptr->wait, tmr_poll));
|
||||||
/* continue poll */
|
/* continue poll */
|
||||||
|
if ((tti_csr & CSR_DONE) && /* input still pending and < 500ms? */
|
||||||
|
((sim_os_msec () - tti_buftime) < 500))
|
||||||
|
return SCPE_OK;
|
||||||
if ((c = sim_poll_kbd ()) < SCPE_KFLAG) /* no char or error? */
|
if ((c = sim_poll_kbd ()) < SCPE_KFLAG) /* no char or error? */
|
||||||
return c;
|
return c;
|
||||||
if (c & SCPE_BREAK) { /* break? */
|
if (c & SCPE_BREAK) { /* break? */
|
||||||
|
@ -339,6 +343,7 @@ if (c & SCPE_BREAK) { /* break? */
|
||||||
tti_unit.buf = TTIBUF_ERR | TTIBUF_FRM | TTIBUF_RBR;
|
tti_unit.buf = TTIBUF_ERR | TTIBUF_FRM | TTIBUF_RBR;
|
||||||
}
|
}
|
||||||
else tti_unit.buf = sim_tt_inpcvt (c, TT_GET_MODE (uptr->flags));
|
else tti_unit.buf = sim_tt_inpcvt (c, TT_GET_MODE (uptr->flags));
|
||||||
|
tti_buftime = sim_os_msec ();
|
||||||
uptr->pos = uptr->pos + 1;
|
uptr->pos = uptr->pos + 1;
|
||||||
tti_csr = tti_csr | CSR_DONE;
|
tti_csr = tti_csr | CSR_DONE;
|
||||||
if (tti_csr & CSR_IE)
|
if (tti_csr & CSR_IE)
|
||||||
|
|
Loading…
Add table
Reference in a new issue