From 34c4ab3cd555c37a16b6d24258c38d4ce7618681 Mon Sep 17 00:00:00 2001 From: Lars Brinkhoff Date: Wed, 26 Oct 2022 12:59:49 +0200 Subject: [PATCH] PDP11: Improve idling. --- PDP11/pdp11_dc.c | 2 +- PDP11/pdp11_dh.c | 4 ++-- PDP11/pdp11_ng.c | 13 +++++++++---- display/ng.c | 6 ++++-- 4 files changed, 16 insertions(+), 9 deletions(-) diff --git a/PDP11/pdp11_dc.c b/PDP11/pdp11_dc.c index 5c69839b..313f50be 100644 --- a/PDP11/pdp11_dc.c +++ b/PDP11/pdp11_dc.c @@ -157,7 +157,7 @@ DIB dci_dib = { 2, IVCL (DCI), VEC_AUTO, { &dci_iack, &dco_iack }, IOLN_DC, }; -UNIT dci_unit = { UDATA (&dci_svc, 0, 0), TMLN_SPD_9600_BPS }; +UNIT dci_unit = { UDATA (&dci_svc, UNIT_IDLE, 0), TMLN_SPD_9600_BPS }; REG dci_reg[] = { { BRDATAD (BUF, dci_buf, DEV_RDX, 8, DCX_LINES, "input control/stats register") }, diff --git a/PDP11/pdp11_dh.c b/PDP11/pdp11_dh.c index 63e7bdc0..030255cc 100644 --- a/PDP11/pdp11_dh.c +++ b/PDP11/pdp11_dh.c @@ -81,8 +81,8 @@ DIB dh_dib = { }; UNIT dh_unit[] = { - { UDATA (&dh_input_svc, UNIT_ATTABLE, 0) }, - { UDATA (&dh_output_svc, UNIT_DIS, 0) } + { UDATA (&dh_input_svc, UNIT_ATTABLE | UNIT_IDLE, 0) }, + { UDATA (&dh_output_svc, UNIT_DIS | UNIT_IDLE, 0) } }; REG dh_reg[] = { diff --git a/PDP11/pdp11_ng.c b/PDP11/pdp11_ng.c index 4da8c35a..1976dfa6 100644 --- a/PDP11/pdp11_ng.c +++ b/PDP11/pdp11_ng.c @@ -58,7 +58,7 @@ DIB ng_dib = { }; UNIT ng_unit = { - UDATA (&ng_svc, 0, 0), NG_DELAY + UDATA (&ng_svc, UNIT_IDLE, 0), NG_DELAY }; REG ng_reg[] = { @@ -133,8 +133,14 @@ t_stat ng_wr(int32 data, int32 PA, int32 access) { switch (PA & 002) { - case 000: ng_set_csr(data); return SCPE_OK; - case 002: ng_set_reloc(data); return SCPE_OK; + case 000: + ng_set_csr(data); + if (data & 010000) + sim_activate (&ng_unit, 1); + return SCPE_OK; + case 002: + ng_set_reloc(data); + return SCPE_OK; } return SCPE_NXM; } @@ -185,7 +191,6 @@ ng_reset(DEVICE *dptr) CLR_INT (NG); ng_unit.wait = 100; - sim_activate (dptr->units, 1); set_cmd (0, "DZ DISABLED"); /* Conflict with NG. */ set_cmd (0, "HK DISABLED"); /* Conflict with RF. */ diff --git a/display/ng.c b/display/ng.c index a2715ffa..1233bb73 100644 --- a/display/ng.c +++ b/display/ng.c @@ -308,6 +308,7 @@ ng_cycle(int us, int slowdown) static uint32 usec = 0; static uint32 msec = 0; uint32 new_msec; + int running = 0; int saved; new_msec = (usec += us) / 1000; @@ -323,7 +324,7 @@ ng_cycle(int us, int slowdown) if ((status[0] & 1) == 0) goto age_ret; } else if (ng_type != TYPE_DAZZLE) - return 1; + return 0; if (sync_period) goto age_ret; @@ -333,6 +334,7 @@ ng_cycle(int us, int slowdown) if (ng_type == TYPE_DAZZLE && (status[console] & TKRUN) == 0) continue; + running = 1; time_out = fetch(dpc[console], &inst); DEBUGF("[%d] PC %06o, INSTR %06o\n", console, dpc[console], inst); dpc[console] += 2; @@ -355,5 +357,5 @@ ng_cycle(int us, int slowdown) age_ret: display_age(us, slowdown); - return 1; + return running || !display_is_blank(); }