From 874bd3f4738fa3fadd975169bd74086d54d8d92c Mon Sep 17 00:00:00 2001 From: Bob Supnik Date: Fri, 9 Dec 2022 12:00:00 -0500 Subject: [PATCH] SIGMA: Invalid address must set a TDV-visible error flag (Ken Rector) --- sigma/sigma_bugs.txt | 1 + sigma/sigma_dp.c | 8 +++++++- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/sigma/sigma_bugs.txt b/sigma/sigma_bugs.txt index 84236633..594d8a60 100644 --- a/sigma/sigma_bugs.txt +++ b/sigma/sigma_bugs.txt @@ -127,6 +127,7 @@ 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 1948647e..91d5ddcc 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 29-Jun-22 RMS Fixed initialization errors in ctrl, seek units (Ken Rector) @@ -772,6 +773,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; } @@ -801,6 +803,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; } @@ -825,6 +828,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; } @@ -850,6 +854,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; } @@ -870,6 +875,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; } @@ -995,7 +1001,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);