KA10: Code cleanup for Dectape device. Needed for Tenex support.

This commit is contained in:
Richard Cornwell 2022-06-21 09:47:52 -04:00
parent d216297a06
commit bad0394323

View file

@ -89,6 +89,15 @@
#endif #endif
#if (NUM_DEVS_DT > 0) #if (NUM_DEVS_DT > 0)
#if KL
#define DT_DIS DEV_DIS
#endif
#ifndef DT_DIS
#define DT_DIS 0
#endif
#define DT_DEVNUM 0320 #define DT_DEVNUM 0320
#define DT_NUMDR 8 /* #drives */ #define DT_NUMDR 8 /* #drives */
#define UNIT_V_8FMT (UNIT_V_UF + 0) /* 12b format */ #define UNIT_V_8FMT (UNIT_V_UF + 0) /* 12b format */
@ -255,7 +264,7 @@
#define ABS(x) (((x) < 0)? (-(x)): (x)) #define ABS(x) (((x) < 0)? (-(x)): (x))
#define DT_WRDTIM 10000 #define DT_WRDTIM 15000
#define WRITTEN u6 /* Set when tape modified */ #define WRITTEN u6 /* Set when tape modified */
@ -312,7 +321,7 @@ REG dt_reg[] = {
{ ORDATA (DTDB, dtdb, 18) }, { ORDATA (DTDB, dtdb, 18) },
{ ORDATA (MPX, dt_mpx_lvl, 3) }, { ORDATA (MPX, dt_mpx_lvl, 3) },
{ URDATA (POS, dt_unit[0].pos, 10, T_ADDR_W, 0, { URDATA (POS, dt_unit[0].pos, 10, T_ADDR_W, 0,
DT_NUMDR, PV_LEFT | REG_RO | REG_UNIT) }, DT_NUMDR, PV_LEFT | REG_RO) },
{ NULL } { NULL }
}; };
@ -350,7 +359,7 @@ DEVICE dt_dev = {
"DT", dt_unit, dt_reg, dt_mod, "DT", dt_unit, dt_reg, dt_mod,
DT_NUMDR, 8, 24, 1, 8, 18, DT_NUMDR, 8, 24, 1, 8, 18,
NULL, NULL, &dt_reset, &dt_boot, &dt_attach, &dt_detach, NULL, NULL, &dt_reset, &dt_boot, &dt_attach, &dt_detach,
&dt_dib, DEV_DISABLE | DEV_DEBUG, 0, &dt_dib, DEV_DISABLE | DEV_DEBUG | DT_DIS, 0,
dt_deb, NULL, NULL dt_deb, NULL, NULL
}; };
@ -366,8 +375,8 @@ t_stat dt_devio(uint32 dev, uint64 *data) {
break; break;
case CONO: case CONO:
clr_interrupt(dev); clr_interrupt(DT_DEVNUM);
clr_interrupt(dev|4); clr_interrupt(DT_DEVNUM|4);
/* Copy over command and priority */ /* Copy over command and priority */
dtsa &= ~0777; dtsa &= ~0777;
dtsa |= (*data & 0777); dtsa |= (*data & 0777);
@ -479,7 +488,7 @@ t_stat dt_devio(uint32 dev, uint64 *data) {
case DATAI: case DATAI:
*data = dtdb; *data = dtdb;
dtsb &= ~DTB_DATREQ; dtsb &= ~DTB_DATREQ;
clr_interrupt(dev|4); clr_interrupt(DT_DEVNUM|4);
sim_debug(DEBUG_DATAIO, &dt_dev, "DTA %03o DATI %012llo PC=%06o\n", sim_debug(DEBUG_DATAIO, &dt_dev, "DTA %03o DATI %012llo PC=%06o\n",
dev, *data, PC); dev, *data, PC);
@ -488,14 +497,14 @@ t_stat dt_devio(uint32 dev, uint64 *data) {
case DATAO: case DATAO:
dtdb = *data; dtdb = *data;
dtsb &= ~DTB_DATREQ; dtsb &= ~DTB_DATREQ;
clr_interrupt(dev|4); clr_interrupt(DT_DEVNUM|4);
sim_debug(DEBUG_DATAIO, &dt_dev, "DTA %03o DATO %012llo PC=%06o\n", sim_debug(DEBUG_DATAIO, &dt_dev, "DTA %03o DATO %012llo PC=%06o\n",
dev, *data, PC); dev, *data, PC);
break; break;
case CONI|04: case CONI|04:
*data = dtsb; *data = dtsb;
if (dtsb & 0770000) if (dtsb & 0770000 & (dtsb >> 18))
*data |= DTB_FLGREQ; *data |= DTB_FLGREQ;
sim_debug(DEBUG_CONI, &dt_dev, "DTB %03o CONI %012llo PC=%o\n", sim_debug(DEBUG_CONI, &dt_dev, "DTB %03o CONI %012llo PC=%o\n",
dev, *data, PC); dev, *data, PC);
@ -503,8 +512,8 @@ t_stat dt_devio(uint32 dev, uint64 *data) {
case CONO|04: case CONO|04:
dtsb = 0; dtsb = 0;
clr_interrupt(dev); clr_interrupt(DT_DEVNUM);
clr_interrupt(dev|4); clr_interrupt(DT_DEVNUM|4);
if (*data & DTS_STOP_ALL) { if (*data & DTS_STOP_ALL) {
/* Stop all other drives */ /* Stop all other drives */
for (i = 0; i < DT_NUMDR; i++) { for (i = 0; i < DT_NUMDR; i++) {
@ -537,7 +546,7 @@ t_stat dt_devio(uint32 dev, uint64 *data) {
void dt_getword(uint64 *data, int req) { void dt_getword(uint64 *data, int req) {
int dev = dt_dib.dev_num; int dev = dt_dib.dev_num;
clr_interrupt(dev|4); clr_interrupt(DT_DEVNUM|4);
if (dtsb & DTB_DATREQ) { if (dtsb & DTB_DATREQ) {
dtsb |= DTB_MIS; dtsb |= DTB_MIS;
return; return;
@ -545,20 +554,20 @@ void dt_getword(uint64 *data, int req) {
*data = dtdb; *data = dtdb;
if (req) { if (req) {
dtsb |= DTB_DATREQ; dtsb |= DTB_DATREQ;
set_interrupt_mpx(dev|4, dtsa >> 3, dt_mpx_lvl); set_interrupt_mpx(DT_DEVNUM|4, dtsa >> 3, dt_mpx_lvl);
} }
} }
void dt_putword(uint64 *data) { void dt_putword(uint64 *data) {
int dev = dt_dib.dev_num; int dev = dt_dib.dev_num;
clr_interrupt(dev|4); clr_interrupt(DT_DEVNUM|4);
if (dtsb & DTB_DATREQ) { if (dtsb & DTB_DATREQ) {
dtsb |= DTB_MIS; dtsb |= DTB_MIS;
return; return;
} }
dtdb = *data; dtdb = *data;
dtsb |= DTB_DATREQ; dtsb |= DTB_DATREQ;
set_interrupt_mpx(dev|4, dtsa >> 3, dt_mpx_lvl); set_interrupt_mpx(DT_DEVNUM|4, dtsa >> 3, dt_mpx_lvl);
} }
/* Unit service /* Unit service
@ -643,8 +652,9 @@ if (uptr->DSTATE & DTC_MOT) {
uptr->DSTATE = DTC_RBLK|(word << DTC_V_BLK) | (DTC_MOTMASK & uptr->DSTATE); uptr->DSTATE = DTC_RBLK|(word << DTC_V_BLK) | (DTC_MOTMASK & uptr->DSTATE);
dtsb &= ~(DTB_CHK); dtsb &= ~(DTB_CHK);
dtsb |= DTB_IDL; dtsb |= DTB_IDL;
if (dtsb & DTB_STOP) if (dtsb & DTB_STOP) {
dtsa &= ~0700; /* Clear command */ dtsa &= ~0700; /* Clear command */
}
sim_debug(DEBUG_DETAIL, &dt_dev, "DTA %o rev forward block\n", u); sim_debug(DEBUG_DETAIL, &dt_dev, "DTA %o rev forward block\n", u);
switch (DTC_GETFNC(uptr->CMD)) { switch (DTC_GETFNC(uptr->CMD)) {
case FNC_MOVE: case FNC_MOVE:
@ -753,8 +763,9 @@ if (uptr->DSTATE & DTC_MOT) {
word = (uptr->DSTATE >> DTC_V_BLK) & DTC_M_BLK; word = (uptr->DSTATE >> DTC_V_BLK) & DTC_M_BLK;
uptr->DSTATE = DTC_BLOCK|(word << DTC_V_BLK)|(DTC_M_WORD << DTC_V_WORD) | uptr->DSTATE = DTC_BLOCK|(word << DTC_V_BLK)|(DTC_M_WORD << DTC_V_WORD) |
(DTC_MOTMASK & uptr->DSTATE); (DTC_MOTMASK & uptr->DSTATE);
if (dtsb & DTB_STOP) if (dtsb & DTB_STOP) {
dtsa &= ~0700; /* Clear command */ dtsa &= ~0700; /* Clear command */
}
if (DTC_GETUNI(dtsa) == u) { if (DTC_GETUNI(dtsa) == u) {
uptr->CMD &= 077077; uptr->CMD &= 077077;
uptr->CMD |= dtsa & 0700; /* Copy command */ uptr->CMD |= dtsa & 0700; /* Copy command */
@ -882,8 +893,9 @@ if (uptr->DSTATE & DTC_MOT) {
dtsb &= ~DTB_BLKRD; dtsb &= ~DTB_BLKRD;
uptr->DSTATE &= ~7; uptr->DSTATE &= ~7;
uptr->DSTATE |= DTC_BLOCK; /* Move to datablock */ uptr->DSTATE |= DTC_BLOCK; /* Move to datablock */
if (dtsb & DTB_STOP) if (dtsb & DTB_STOP) {
dtsa &= ~0700; /* Clear command */ dtsa &= ~0700; /* Clear command */
}
if (DTC_GETUNI(dtsa) == u) { if (DTC_GETUNI(dtsa) == u) {
uptr->CMD &= 077077; uptr->CMD &= 077077;
uptr->CMD |= dtsa & 0700; /* Copy command */ uptr->CMD |= dtsa & 0700; /* Copy command */