PDP11: Properly handle reads of less than 1 sector

Fix #412, #424
This commit is contained in:
Mark Pizzolato 2017-04-13 18:20:01 -07:00
parent faae90e160
commit cd8e9eb5da

View file

@ -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, &sectsread, wc/HK_NUMWD);
err = sim_disk_rdsect (uptr, da/HK_NUMWD, (uint8 *)hkxb, &sectsread, (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, &sectsread, wc/HK_NUMWD);
err = sim_disk_rdsect (uptr, da/HK_NUMWD, (uint8 *)hkxb, &sectsread, (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 */