SIGMA: Invalid address must set a TDV-visible error flag (Ken Rector)

This commit is contained in:
Bob Supnik 2022-12-09 12:00:00 -05:00 committed by Paul Koning
parent 16de685c4b
commit 8e13ea1d21
2 changed files with 11 additions and 2 deletions

View file

@ -124,7 +124,10 @@
118. MT: revised error handling failed to set tape mark status on space file forward/reverse. 118. MT: revised error handling failed to set tape mark status on space file forward/reverse.
119. IO: UEND flag in the wrong bit position in status word. 119. IO: UEND flag in the wrong bit position in status word.
120. DP: SEEK(I), RECAL(I) must be coded as fast operations. 120. DP: SEEK(I), RECAL(I) must be coded as fast operations.
121. COC: Transmit long space is 0x6, and stop transmit is 0xE.
122. COC: Received break generates a data-in channel transaction with a flag bit set
in the line number.
123. DP: dp_inv_adr error must set a TDV visible flag (i.e., PGE) before UEND.
Diagnostic Notes Diagnostic Notes
---------------- ----------------

View file

@ -25,6 +25,7 @@
dp moving head disk pack controller dp moving head disk pack controller
09-Dec-22 RMS Invalid address must set a TDV-visible error flag (Ken Rector)
23-Jul-22 RMS SEEK(I), RECAL(I) should be fast operations (Ken Rector) 23-Jul-22 RMS SEEK(I), RECAL(I) should be fast operations (Ken Rector)
02-Jul-22 RMS Fixed bugs in multi-unit operation 02-Jul-22 RMS Fixed bugs in multi-unit operation
28-Jun-22 RMS Fixed off-by-1 error in DP_SEEK definition (Ken Rector) 28-Jun-22 RMS Fixed off-by-1 error in DP_SEEK definition (Ken Rector)
@ -771,6 +772,7 @@ switch (uptr->UCMD) {
return SCPE_OK; return SCPE_OK;
} }
if (dp_inv_ad (uptr, &da)) { /* invalid addr? */ if (dp_inv_ad (uptr, &da)) { /* invalid addr? */
ctx->dp_flags |= DPF_PGE;
chan_uen (dva); /* uend */ chan_uen (dva); /* uend */
return SCPE_OK; return SCPE_OK;
} }
@ -800,6 +802,7 @@ switch (uptr->UCMD) {
return SCPE_OK; return SCPE_OK;
} }
if (dp_inv_ad (uptr, &da)) { /* invalid addr? */ if (dp_inv_ad (uptr, &da)) { /* invalid addr? */
ctx->dp_flags |= DPF_PGE;
chan_uen (dva); /* uend */ chan_uen (dva); /* uend */
return SCPE_OK; return SCPE_OK;
} }
@ -824,6 +827,7 @@ switch (uptr->UCMD) {
case DPS_CHECK: /* write check */ case DPS_CHECK: /* write check */
if (dp_inv_ad (uptr, &da)) { /* invalid addr? */ if (dp_inv_ad (uptr, &da)) { /* invalid addr? */
ctx->dp_flags |= DPF_PGE;
chan_uen (dva); /* uend */ chan_uen (dva); /* uend */
return SCPE_OK; return SCPE_OK;
} }
@ -849,6 +853,7 @@ switch (uptr->UCMD) {
case DPS_READ: /* read */ case DPS_READ: /* read */
if (dp_inv_ad (uptr, &da)) { /* invalid addr? */ if (dp_inv_ad (uptr, &da)) { /* invalid addr? */
ctx->dp_flags |= DPF_PGE;
chan_uen (dva); /* uend */ chan_uen (dva); /* uend */
return SCPE_OK; return SCPE_OK;
} }
@ -869,6 +874,7 @@ switch (uptr->UCMD) {
case DPS_RHDR: /* read header */ case DPS_RHDR: /* read header */
if (dp_inv_ad (uptr, &da)) { /* invalid addr? */ if (dp_inv_ad (uptr, &da)) { /* invalid addr? */
ctx->dp_flags |= DPF_PGE;
chan_uen (dva); /* uend */ chan_uen (dva); /* uend */
return SCPE_OK; return SCPE_OK;
} }
@ -994,7 +1000,7 @@ st = 0;
on_cyl = !sim_is_active (&dp_unit[un + DP_SEEK]) || on_cyl = !sim_is_active (&dp_unit[un + DP_SEEK]) ||
(dp_unit[un + DP_SEEK].UCMD == DSC_SEEKW); (dp_unit[un + DP_SEEK].UCMD == DSC_SEEKW);
if (DP_Q10B (dp_ctx[cidx].dp_ctype)) if (DP_Q10B (dp_ctx[cidx].dp_ctype))
st = ((dp_ctx[cidx].dp_flags & DPF_IVA)? 0x20: 0) | st = ((dp_ctx[cidx].dp_flags & (DPF_IVA|DPF_PGE))? 0x20: 0) |
(on_cyl? 0x04: 0); (on_cyl? 0x04: 0);
else st = ((dp_ctx[cidx].dp_flags & DPF_PGE)? 0x20: 0) | else st = ((dp_ctx[cidx].dp_flags & DPF_PGE)? 0x20: 0) |
((dp_ctx[cidx].dp_flags & DPF_WPE)? 0x08: 0); ((dp_ctx[cidx].dp_flags & DPF_WPE)? 0x08: 0);