From ff2d8494606dcda1c6f906ad36a7e8229af9d5a5 Mon Sep 17 00:00:00 2001 From: Tony Lawrence Date: Thu, 1 Dec 2022 21:33:26 -0500 Subject: [PATCH] PDP11: Fix RK11/RL11 byte/word count mismatch (and cyl upd in RK11) --- PDP11/pdp11_rk.c | 5 +++-- PDP11/pdp11_rl.c | 4 ++-- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/PDP11/pdp11_rk.c b/PDP11/pdp11_rk.c index ead80175..5aac99da 100644 --- a/PDP11/pdp11_rk.c +++ b/PDP11/pdp11_rk.c @@ -718,7 +718,7 @@ if (wc && (err == 0)) { /* seek ok? */ else { /* normal store */ if ((t = MAP_WRW (ma, wc << 1, rkxb))) { /* store buf */ rker = rker | RKER_NXM; /* NXM? set flag */ - wc = wc - t; /* adj wd cnt */ + wc = wc - (t >> 1); /* adj wd cnt */ } } break; /* end read */ @@ -735,7 +735,7 @@ if (wc && (err == 0)) { /* seek ok? */ else { /* normal fetch */ if ((t = MAP_RDW (ma, wc << 1, rkxb))) { /* get buf */ rker = rker | RKER_NXM; /* NXM? set flg */ - wc = wc - t; /* adj wd cnt */ + wc = wc - (t >> 1); /* adj wd cnt */ } } if (wc) { /* any xfer? */ @@ -785,6 +785,7 @@ if ((uptr->FUNC == RKCS_READ) && (rkcs & RKCS_FMT)) /* read format? */ else da = da + wc + (RK_NUMWD - 1); /* count by words */ track = (da / RK_NUMWD) / RK_NUMSC; sect = (da / RK_NUMWD) % RK_NUMSC; +uptr->CYL = track / RK_NUMSF; rkda = (rkda & RKDA_DRIVE) | (track << RKDA_V_TRACK) | (sect << RKDA_V_SECT); rk_set_done (0); diff --git a/PDP11/pdp11_rl.c b/PDP11/pdp11_rl.c index 4c26aad6..04724707 100644 --- a/PDP11/pdp11_rl.c +++ b/PDP11/pdp11_rl.c @@ -889,7 +889,7 @@ if (uptr->FNC >= RLCS_READ) { /* read (no hdr)? */ sim_disk_data_trace (uptr, (uint8 *)rlxb, da/RL_NUMWD, sectsread*RL_NUMWD*sizeof(*rlxb), "sim_disk_rdsect", RLDEB_DAT & dptr->dctrl, RLDEB_OPS); if ((t = Map_WriteW (ma, wc << 1, rlxb))) { /* store buffer */ rlcs = rlcs | RLCS_ERR | RLCS_NXM; /* nxm */ - wc = wc - t; /* adjust wc */ + wc = wc - (t >> 1); /* adjust wc */ } } /* end read */ @@ -897,7 +897,7 @@ else if (uptr->FNC == RLCS_WRITE) { /* write? */ if ((t = Map_ReadW (ma, wc << 1, rlxb))) { /* fetch buffer */ rlcs = rlcs | RLCS_ERR | RLCS_NXM; /* nxm */ - wc = wc - t; /* adj xfer lnt */ + wc = wc - (t >> 1); /* adj xfer lnt */ } if (wc) { /* any xfer? */ awc = (wc + (RL_NUMWD - 1)) & ~(RL_NUMWD - 1); /* clr to */