KA10: Code cleanup for Dectape device. Needed for Tenex support.
This commit is contained in:
parent
d216297a06
commit
bad0394323
1 changed files with 29 additions and 17 deletions
|
@ -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 */
|
||||||
|
|
Loading…
Add table
Reference in a new issue