diff --git a/sigma/sigma_bugs.txt b/sigma/sigma_bugs.txt index 7670884b..594d8a60 100644 --- a/sigma/sigma_bugs.txt +++ b/sigma/sigma_bugs.txt @@ -124,7 +124,10 @@ 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. 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 ---------------- diff --git a/sigma/sigma_dp.c b/sigma/sigma_dp.c index e87d22d3..4c9e1e4f 100644 --- a/sigma/sigma_dp.c +++ b/sigma/sigma_dp.c @@ -25,6 +25,7 @@ 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) 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) @@ -771,6 +772,7 @@ switch (uptr->UCMD) { return SCPE_OK; } if (dp_inv_ad (uptr, &da)) { /* invalid addr? */ + ctx->dp_flags |= DPF_PGE; chan_uen (dva); /* uend */ return SCPE_OK; } @@ -800,6 +802,7 @@ switch (uptr->UCMD) { return SCPE_OK; } if (dp_inv_ad (uptr, &da)) { /* invalid addr? */ + ctx->dp_flags |= DPF_PGE; chan_uen (dva); /* uend */ return SCPE_OK; } @@ -824,6 +827,7 @@ switch (uptr->UCMD) { case DPS_CHECK: /* write check */ if (dp_inv_ad (uptr, &da)) { /* invalid addr? */ + ctx->dp_flags |= DPF_PGE; chan_uen (dva); /* uend */ return SCPE_OK; } @@ -849,6 +853,7 @@ switch (uptr->UCMD) { case DPS_READ: /* read */ if (dp_inv_ad (uptr, &da)) { /* invalid addr? */ + ctx->dp_flags |= DPF_PGE; chan_uen (dva); /* uend */ return SCPE_OK; } @@ -869,6 +874,7 @@ switch (uptr->UCMD) { case DPS_RHDR: /* read header */ if (dp_inv_ad (uptr, &da)) { /* invalid addr? */ + ctx->dp_flags |= DPF_PGE; chan_uen (dva); /* uend */ return SCPE_OK; } @@ -994,7 +1000,7 @@ st = 0; on_cyl = !sim_is_active (&dp_unit[un + DP_SEEK]) || (dp_unit[un + DP_SEEK].UCMD == DSC_SEEKW); 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); else st = ((dp_ctx[cidx].dp_flags & DPF_PGE)? 0x20: 0) | ((dp_ctx[cidx].dp_flags & DPF_WPE)? 0x08: 0);