1
0
mirror of https://github.com/rcornwell/sims.git synced 2026-02-02 23:01:52 +00:00

IBM360: Write correct HA on empty WR HA.

This commit is contained in:
Richard Cornwell
2020-06-06 19:07:55 -04:00
parent 8aa1d65100
commit b5837f5b49

View File

@@ -1189,6 +1189,9 @@ sense_end:
case DK_RD_HA: /* Read home address */
/* Wait until next index pulse */
if (state == DK_POS_INDEX) {
uint8 *dax = &data->cbuf[data->tstart];
sim_debug(DEBUG_DETAIL, dptr, "RD HA f unit=%d %02x %02x %02x %02x %02x\n",
unit, dax[0], dax[1], dax[2], dax[3], dax[4]);
uptr->u3 |= DK_PARAM;
}
@@ -1389,6 +1392,9 @@ rd:
case DK_WR_HA: /* Write home address */
/* Wait for index */
if (state == DK_POS_INDEX) {
uint8 *dax = &data->cbuf[data->tstart];
sim_debug(DEBUG_DETAIL, dptr, "WR HA unit=%d %02x %02x %02x %02x %02x\n",
unit, dax[0], dax[1], dax[2], dax[3], dax[4]);
/* Check if command ok based on mask */
if ((data->filemsk & DK_MSK_WRT) != DK_MSK_ALLWRT) {
uptr->u5 |= SNS_CMDREJ;
@@ -1419,16 +1425,19 @@ rd:
ch |= dax[i];
if (ch == 0) { /* If we did reset HA to correct value */
dax[0] = 0;
dax[1] = (uptr->u4 >> 24) & 0xff;
dax[2] = (uptr->u4 >> 16) & 0xff;
dax[3] = (uptr->u4 >> 8) & 0xff;
dax[1] = (uptr->u4 >> 16) & 0xff;
dax[2] = (uptr->u4 >> 8) & 0xff;
dax[3] = 0;
dax[4] = uptr->u4 & 0xff;
}
sim_debug(DEBUG_DETAIL, dptr, "WR HA f unit=%d %02x %02x %02x %02x %02x\n",
unit, dax[0], dax[1], dax[2], dax[3], dax[4]);
uptr->u6 = cmd;
uptr->u3 &= ~(0xff|DK_PARAM);
chan_end(addr, SNS_CHNEND|SNS_DEVEND);
/* Write end of track marker */
for(i = 1; i < 9; i++)
da[i] = 0xff;
chan_end(addr, SNS_CHNEND|SNS_DEVEND);
}
}
break;
@@ -1595,10 +1604,11 @@ wrckd:
} else if (state == DK_POS_DATA && data->count == data->dlen) {
if (cmd == DK_WR_HA || cmd == DK_WR_R0 || cmd == DK_WR_CKD ||
cmd == DK_WR_SCKD) {
/* Write end of track marker */
for(i = 0; i < 8; i++)
da[i] = 0xff;
sim_debug(DEBUG_DETAIL, dptr, "WCKD eot unit=%d\n",unit);
data->ovfl = 0;
data->ovfl = 0; /* Kill overflow if any */
}
if (data->ovfl == 0 || cmd == DK_WR_CKD || cmd == DK_WR_SCKD) {
uptr->u6 = cmd;