From cd8e9eb5da5d9b86b4fe8257ff386e1d9ea90b1e Mon Sep 17 00:00:00 2001 From: Mark Pizzolato Date: Thu, 13 Apr 2017 18:20:01 -0700 Subject: [PATCH] PDP11: Properly handle reads of less than 1 sector Fix #412, #424 --- PDP11/pdp11_hk.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/PDP11/pdp11_hk.c b/PDP11/pdp11_hk.c index 7050a8f5..27aed20f 100644 --- a/PDP11/pdp11_hk.c +++ b/PDP11/pdp11_hk.c @@ -1176,7 +1176,10 @@ switch (fnc) { /* case on function */ } } /* end if wr */ else if (uptr->FNC == FNC_READ) { /* read? */ - err = sim_disk_rdsect (uptr, da/HK_NUMWD, (uint8 *)hkxb, §sread, wc/HK_NUMWD); + err = sim_disk_rdsect (uptr, da/HK_NUMWD, (uint8 *)hkxb, §sread, (wc + (HK_NUMWD - 1)) & ~(HK_NUMWD - 1)/HK_NUMWD); + if ((err == SCPE_OK) && + (sectsread != ((wc + (HK_NUMWD - 1)) & ~(HK_NUMWD - 1)/HK_NUMWD))) + err = -1; sim_disk_data_trace (uptr, (uint8 *)hkxb, da/HK_NUMWD, sectsread*HK_NUMWD*sizeof(*hkxb), "sim_disk_rdsect", HKDEB_DAT & dptr->dctrl, HKDEB_OPS); if (hkcs2 & CS2_UAI) { /* no addr inc? */ if ((t = Map_WriteW (ba, 2, &hkxb[wc - 1]))) { @@ -1193,7 +1196,7 @@ switch (fnc) { /* case on function */ } } /* end if read */ else { /* wchk */ - err = sim_disk_rdsect (uptr, da/HK_NUMWD, (uint8 *)hkxb, §sread, wc/HK_NUMWD); + err = sim_disk_rdsect (uptr, da/HK_NUMWD, (uint8 *)hkxb, §sread, (wc + (HK_NUMWD - 1)) & ~(HK_NUMWD - 1)/HK_NUMWD); sim_disk_data_trace (uptr, (uint8 *)hkxb, da/HK_NUMWD, sectsread*HK_NUMWD*sizeof(*hkxb), "sim_disk_rdsect", HKDEB_DAT & dptr->dctrl, HKDEB_OPS); awc = wc; for (wc = 0; wc < awc; wc++) { /* loop thru buf */