1
0
mirror of https://github.com/rcornwell/sims.git synced 2026-02-03 15:13:33 +00:00

KA10: Fixed issues with TM10B controller.

This commit is contained in:
Richard Cornwell
2018-02-28 10:15:25 -05:00
parent 0335399546
commit 411e3a3fe5
3 changed files with 20 additions and 9 deletions

View File

@@ -350,6 +350,7 @@ struct df10 {
void df10_setirq(struct df10 *df) ;
void df10_bump_addr(struct df10 *df);
void df10_writecw(struct df10 *df) ;
void df10_finish_op(struct df10 *df, int flags) ;
void df10_setup(struct df10 *df, uint32 addr);

View File

@@ -33,6 +33,15 @@ void df10_writecw(struct df10 *df) {
M[df->cia|1] = ((uint64)(df->ccw & WMASK) << CSHIFT) | ((uint64)df->cda & AMASK);
}
void df10_bump_addr(struct df10 *df) {
#if KA & ITS
if (cpu_unit[0].flags & UNIT_ITSPAGE)
df->cda = (uint32)((df->cda + 1) & RMASK) | (df->cda & 07000000);
else
#endif
df->cda = (uint32)((df->cda + 1) & AMASK);
}
void df10_finish_op(struct df10 *df, int flags) {
df->status &= ~BUSY;
df->status |= flags;

View File

@@ -234,7 +234,7 @@ t_stat mt_devio(uint32 dev, uint64 *data) {
uptr->u3 = (int32)(*data & 077300);
CLR_BUF(uptr);
mt_df10.buf = 0;
sim_debug(DEBUG_CONO, dptr,
sim_debug(DEBUG_CONO, dptr,
"MT CONO %03o start %o %o %o %012llo %012llo PC=%06o\n",
dev, uptr->u3, unit, pia, *data, status, PC);
if ((uptr->flags & UNIT_ATT) != 0) {
@@ -357,7 +357,7 @@ t_stat mt_devio(uint32 dev, uint64 *data) {
if (dptr->flags & MTDF_TYPEB) {
if (*data & 04)
df10_writecw(&mt_df10);
if (*data & 010)
if (*data & 010)
status &= ~(WT_CW_DONE);
}
sim_debug(DEBUG_CONO, dptr, "MT CONO %03o control %o %o %012llo %012llo\n",
@@ -385,7 +385,6 @@ void mt_df10_read(DEVICE *dptr, UNIT *uptr) {
if (dptr->flags & MTDF_TYPEB) {
if (!df10_read(&mt_df10)) {
uptr->u3 |= MT_STOP;
return;
}
sim_debug(DEBUG_DATA, dptr, "MT <%012llo %o\n", mt_df10.buf, uptr->u5);
} else {
@@ -545,7 +544,7 @@ t_stat mt_srv(UNIT * uptr)
if (uptr->u3 & MT_STOP) {
if ((uint32)uptr->u6 < uptr->hwmark)
status |= RLC_ERR;
if (dptr->flags & MTDF_TYPEB)
if (dptr->flags & MTDF_TYPEB)
df10_writecw(&mt_df10);
return mt_error(uptr, MTSE_OK, dptr);
}
@@ -557,7 +556,7 @@ t_stat mt_srv(UNIT * uptr)
sim_debug(DEBUG_DETAIL, dptr, "MT%o read error %d\n", unit, r);
uptr->u3 &= ~MT_MOTION;
if (dptr->flags & MTDF_TYPEB && r == MTSE_TMK) {
mt_df10_write(dptr, uptr);
df10_write(&mt_df10);
df10_writecw(&mt_df10);
}
return mt_error(uptr, r, dptr);
@@ -598,8 +597,10 @@ t_stat mt_srv(UNIT * uptr)
mt_df10_write(dptr, uptr);
} else {
if ((cmd & 010) == 0) {
if (dptr->flags & MTDF_TYPEB)
if (dptr->flags & MTDF_TYPEB) {
df10_bump_addr(&mt_df10);
df10_writecw(&mt_df10);
}
uptr->u3 &= ~(MT_MOTION|MT_BUSY);
return mt_error(uptr, MTSE_OK, dptr);
} else {
@@ -613,7 +614,7 @@ t_stat mt_srv(UNIT * uptr)
if (uptr->u3 & MT_STOP) {
if ((uint32)uptr->u6 < uptr->hwmark)
status |= RLC_ERR;
if (dptr->flags & MTDF_TYPEB)
if (dptr->flags & MTDF_TYPEB)
df10_writecw(&mt_df10);
return mt_error(uptr, MTSE_OK, dptr);
}
@@ -901,9 +902,9 @@ t_stat show_mta (FILE *st, UNIT *uptr, int32 val, CONST void *desc)
if (dptr == NULL)
return SCPE_IERR;
if (dptr->flags & val) {
fprintf (st, "MT10B");
fprintf (st, "TM10B");
} else {
fprintf (st, "MT10A");
fprintf (st, "TM10A");
}
return SCPE_OK;
}