1
0
mirror of https://github.com/rcornwell/sims.git synced 2026-01-27 20:37:27 +00:00

KA10: Clean up support for KS10. Tape still not working.

This commit is contained in:
Richard Cornwell
2021-04-23 21:46:07 -04:00
parent 356d460f69
commit 21d524eda0
2 changed files with 17 additions and 11 deletions

View File

@@ -228,8 +228,14 @@ uba_rh_write(DEVICE *dptr, t_addr addr, uint16 data, int32 access) {
switch(addr) {
case 000: /* CS1 */
if (access == BYTE && addr & 1)
break;
if (access == BYTE) {
if (addr & 1) {
rhc->dev_read(dptr, rhc, 0, &temp);
data = data | (rhc->cs1 & 0377) | (temp & 076);
} else {
data = ((rhc->cda & 0600000) >> 8) | data;
}
}
rhc->cs1 &= ~(CS1_IE);
rhc->cs1 |= data & (CS1_IE);
rhc->cda = ((data << 8) & 0600000) | (rhc->cda & 0177777);
@@ -302,8 +308,8 @@ uba_rh_write(DEVICE *dptr, t_addr addr, uint16 data, int32 access) {
rhc->cs2 |= CS2_NED;
r = 0;
}
sim_debug(DEBUG_DETAIL, dptr, "RH%o write %06o %06o\n", rhc->drive,
addr, data);
sim_debug(DEBUG_DETAIL, dptr, "RH%o write %06o %06o %o\n", rhc->drive,
addr, data, access);
return r;
}

View File

@@ -281,7 +281,7 @@ tu_write(DEVICE *dptr, struct rh_if *rhc, int reg, uint32 data) {
if (rhc->drive != 0 && reg != 04) /* Only one unit at 0 */
return -1;
if (uptr->CMD & CS1_GO) {
if ((uptr->CMD & CS1_GO) != 0 || (uptr->STATUS & DS_PIP) != 0) {
regs[TUER1] |= ER1_RMR;
return 0;
}
@@ -365,6 +365,7 @@ tu_write(DEVICE *dptr, struct rh_if *rhc, int reg, uint32 data) {
regs[TUER1] |= ER1_ILF;
uptr->STATUS = DS_ATA;
rhc->attn = 1;
rh_setattn(rhc, 0);
}
sim_debug(DEBUG_DETAIL, dptr, "%s%o AStatus=%06o\n", dptr->name, unit,
uptr->CMD);
@@ -426,8 +427,6 @@ tu_read(DEVICE *dptr, struct rh_if *rhc, int reg, uint32 *data) {
temp = uptr->CMD & 077;
temp |= CS1_DVA;
#if KS
// if ((regs[TUER1] & ER1_RMR) != 0)
// temp |= CS1_TRE;
if (rhc->attn || temp & CS1_TRE)
temp |= CS1_SC;
#endif
@@ -582,14 +581,13 @@ t_stat tu_srv(UNIT * uptr)
case FNC_REWIND:
sim_debug(DEBUG_DETAIL, dptr, "%s%o rewind\n", dptr->name, unit);
if (uptr->CMD & CS1_GO) {
if (uptr->STATUS & CS1_GO) {
sim_activate(uptr,40000);
uptr->CMD &= ~(CS1_GO);
} else {
uptr->STATUS &= ~(DS_PIP);
sim_debug(DEBUG_DETAIL, dptr, "%s%o rewind done\n", dptr->name, unit);
uptr->STATUS |= DS_SSC|DS_ATA;
rh_setattn(rhc, 0);
(void)sim_tape_rewind(uptr);
tu_error(uptr, sim_tape_rewind(uptr));
}
return SCPE_OK;
@@ -789,6 +787,7 @@ t_stat tu_srv(UNIT * uptr)
case FNC_ERASE:
uptr->STATUS &= ~DS_PIP;
uptr->STATUS |= DS_ATA;
sim_tape_sprecf(uptr, &reclen);
if ((uptr->flags & MTUF_WLK) != 0) {
tu_error(uptr, MTSE_WRP);
} else {
@@ -860,6 +859,7 @@ tu_reset(DEVICE * dptr)
uint16 *regs = &rhc->regs[0];
rh_reset(dptr, &tu_rh[0]);
regs[TUER1] = 0;
regs[TUTC] = TC_1600;
return SCPE_OK;
}