1
0
mirror of https://github.com/simh/simh.git synced 2026-01-25 19:56:25 +00:00

PDP11, PDP10, 3B2, All VAXen: Leverage extended disk support for all disks

Disk container metadata is fully supported and, when possible, containers
can be moved between "reasonable" alternate DEVICEs and systems.
This commit is contained in:
Mark Pizzolato
2022-06-15 15:14:42 -07:00
parent a9ce7b3b11
commit 12e51eafaf
19 changed files with 753 additions and 1338 deletions

View File

@@ -37,9 +37,8 @@
#endif
#define RD_NUMDR 3
#define RD_RMV(u) ((drv_tab[GET_DTYPE (u->flags)].flgs & RDDF_RMV)? \
UF_RMV: 0)
#define RDDF_RMV 01 /* removable */
#define RD_RMV(u) ((u->drvtyp->flags & RDDF_RMV)? UF_RMV : 0)
#define RDDF_RMV DRVFL_RMV /* removable */
#define RD_NUMBY 512 /* bytes/sector */
#define RD_MAXFR (1 << 14) /* max transfer */
@@ -108,8 +107,6 @@
#define TRM_ERR_VER 2 /* Error in VERIFY sequence */
#define TRM_ERR_TRAN 3 /* Error in DATA TRANSFER sequence */
#define GET_DTYPE(x) (((x) >> UNIT_V_DTYPE) & UNIT_M_DTYPE)
#define DBG_REG 0x0001 /* registers */
#define DBG_CMD 0x0002 /* commands */
#define DBG_RD 0x0004 /* disk reads */
@@ -125,8 +122,8 @@
#define CUR_DRV (rd_cstat & CST_SDRV) /* currently selected drive */
#define GET_SPT(u) (drv_tab[GET_DTYPE (u->flags)].sect)
#define GET_SURF(u) (drv_tab[GET_DTYPE (u->flags)].surf)
#define GET_SPT(u) (u->drvtyp->sect)
#define GET_SURF(u) (u->drvtyp->surf)
#define GET_DA(u,c,h,s) ((c * (GET_SPT(u) * GET_SURF(u))) \
+ (h * GET_SPT(u)) + s)
@@ -141,7 +138,6 @@
RD54 17 15 1225 15 1 7*8 311256
*/
#define RX33_DTYPE 0
#define RX33_SECT 15
#define RX33_SURF 2
#define RX33_CYL 80
@@ -156,9 +152,8 @@
#define RX33_CYLR 0
#define RX33_CCS 0
#define RX33_MED 0x25658021
#define RX33_FLGS RDDF_RMV
#define RX33_FLGS RDDF_RMV | DRVFL_NOCHNG
#define RD31_DTYPE 1
#define RD31_SECT 17
#define RD31_SURF 4
#define RD31_CYL 616 /* last unused */
@@ -173,9 +168,8 @@
#define RD31_CYLR 615
#define RD31_CCS 9
#define RD31_MED 0x2564401F
#define RD31_FLGS 0
#define RD31_FLGS DRVFL_NORMV
#define RD32_DTYPE 2
#define RD32_SECT 17
#define RD32_SURF 6
#define RD32_CYL 821 /* last unused */
@@ -190,9 +184,8 @@
#define RD32_CYLR 821
#define RD32_CCS 14
#define RD32_MED 0x25644020
#define RD32_FLGS 0
#define RD32_FLGS DRVFL_NORMV
#define RD53_DTYPE 3
#define RD53_SECT 17
#define RD53_SURF 8
#define RD53_CYL 1024 /* last unused */
@@ -207,9 +200,8 @@
#define RD53_CYLR 1024
#define RD53_CCS 13
#define RD53_MED 0x25644035
#define RD53_FLGS 0
#define RD53_FLGS DRVFL_NORMV
#define RD54_DTYPE 4
#define RD54_SECT 17
#define RD54_SURF 15
#define RD54_CYL 1225 /* last unused */
@@ -224,12 +216,8 @@
#define RD54_CYLR 1225
#define RD54_CCS 14
#define RD54_MED 0x25644036
#define RD54_FLGS 0
#define RD54_FLGS DRVFL_NORMV
#define UNIT_V_DTYPE (DKUF_V_UF + 0) /* drive type */
#define UNIT_W_DTYPE 3 /* 3b drive type encode */
#define UNIT_M_DTYPE ((1u << UNIT_W_DTYPE) - 1)
#define UNIT_DTYPE (UNIT_M_DTYPE << UNIT_V_DTYPE)
#define UNIT_NOAUTO DKUF_NOAUTOSIZE
struct drvtyp {
@@ -252,16 +240,19 @@ struct drvtyp {
};
#define RD_DRV(d) \
d##_SECT, d##_SURF, d##_CYL, d##_TPG, \
d##_XBN, d##_DBN, d##_LBN, d##_RCTS, \
d##_RCTC, d##_RBN, d##_CYLP, d##_CYLR, \
d##_CCS, d##_MED, d##_FLGS
#define RD_SIZE(d) (d##_LBN * RD_NUMBY)
{ d##_SECT, d##_SURF, d##_CYL, d##_LBN, \
#d, RD_NUMBY, DRVFL_TYPE_MFM | d##_FLGS,\
"DU", d##_MED, 0, NULL, NULL, \
d##_TPG, 0, d##_XBN, d##_DBN, d##_RCTS, \
d##_RCTC, d##_RBN, d##_CYLP, d##_CYLR, \
d##_CCS }
static struct drvtyp drv_tab[] = {
{ RD_DRV (RX33), "RX33" },{ RD_DRV (RD31), "RD31" },
{ RD_DRV (RD32), "RD32" },{ RD_DRV (RD53), "RD53" },
{ RD_DRV (RD54), "RD54" },
static DRVTYP drv_tab[] = {
RD_DRV (RX33),
RD_DRV (RD31),
RD_DRV (RD32),
RD_DRV (RD53),
RD_DRV (RD54),
{ 0 }
};
@@ -290,8 +281,6 @@ void rd_set_dstat (UNIT *uptr);
void rd_done (int32 term_code, t_bool setint);
void rd_cmd (int32 data);
int32 rd_decode_cmd (int32 data);
t_stat rd_set_type (UNIT *uptr, int32 val, CONST char *cptr, void *desc);
t_stat rd_show_type (FILE *st, UNIT *uptr, int32 val, CONST void *desc);
t_stat rd_attach (UNIT *uptr, CONST char *cptr);
t_stat rd_detach (UNIT *uptr);
t_stat rd_help (FILE *st, DEVICE *dptr, UNIT *uptr, int32 flag, const char *cptr);
@@ -309,14 +298,7 @@ DIB rd_dib = {
RD_ROM_INDEX, BOOT_CODE_ARRAY, BOOT_CODE_SIZE
};
UNIT rd_unit[] = {
{ UDATA (&rd_svc, UNIT_FIX+UNIT_ATTABLE+UNIT_DISABLE+UNIT_ROABLE+
(RD54_DTYPE << UNIT_V_DTYPE), RD_SIZE (RD54)) },
{ UDATA (&rd_svc, UNIT_FIX+UNIT_ATTABLE+UNIT_DISABLE+UNIT_ROABLE+
(RD54_DTYPE << UNIT_V_DTYPE), RD_SIZE (RD54)) },
{ UDATA (&rd_svc, UNIT_FIX+UNIT_ATTABLE+UNIT_DISABLE+UNIT_ROABLE+
(RX33_DTYPE << UNIT_V_DTYPE), RD_SIZE (RX33)) }
};
UNIT rd_unit[RD_NUMDR] = {{0}};
REG rd_reg[] = {
{ DRDATA (RPTR, rd_rg_p, 4), REG_HRO },
@@ -336,7 +318,6 @@ REG rd_reg[] = {
{ HRDATAD (TCON, rd_term, 8, "Termination Conditions") },
{ DRDATAD (CWAIT, rd_cwait, 24, "Command wait time"), PV_LEFT + REG_NZ },
{ DRDATAD (DWAIT, rd_dwait, 24, "Data wait time"), PV_LEFT + REG_NZ },
{ URDATA (CAPAC, rd_unit[0].capac, 10, T_ADDR_W, 0, RD_NUMDR, REG_HRO | PV_LEFT) },
{ FLDATAD (INT, int_req[IPL_SCA], INT_V_SCA, "Interrupt pending flag") },
{ NULL }
};
@@ -357,18 +338,6 @@ MTAB rd_mod[] = {
&set_writelock, &show_writelock, NULL, "Write enable drive" },
{ MTAB_XTD|MTAB_VUN, 1, NULL, "LOCKED",
&set_writelock, NULL, NULL, "Write lock drive" },
{ MTAB_XTD|MTAB_VUN, RX33_DTYPE, NULL, "RX33",
&rd_set_type, NULL, NULL, "Set RX33 Disk Type" },
{ MTAB_XTD|MTAB_VUN, RD31_DTYPE, NULL, "RD31",
&rd_set_type, NULL, NULL, "Set RD31 Disk Type" },
{ MTAB_XTD|MTAB_VUN, RD32_DTYPE, NULL, "RD32",
&rd_set_type, NULL, NULL, "Set RD32 Disk Type" },
{ MTAB_XTD|MTAB_VUN, RD53_DTYPE, NULL, "RD53",
&rd_set_type, NULL, NULL, "Set RD53 Disk Type" },
{ MTAB_XTD|MTAB_VUN, RD54_DTYPE, NULL, "RD54",
&rd_set_type, NULL, NULL, "Set RD54 Disk Type" },
{ MTAB_XTD|MTAB_VUN, 0, "TYPE", NULL,
NULL, &rd_show_type, NULL, "Display device type" },
{ UNIT_NOAUTO, UNIT_NOAUTO, "noautosize", "NOAUTOSIZE", NULL, NULL, NULL, "Disable disk autosize on attach" },
{ UNIT_NOAUTO, 0, "autosize", "AUTOSIZE", NULL, NULL, NULL, "Enable disk autosize on attach" },
{ MTAB_XTD|MTAB_VUN | MTAB_VALR, 0, "FORMAT", "FORMAT={SIMH|VHD|RAW}",
@@ -381,9 +350,9 @@ DEVICE rd_dev = {
RD_NUMDR, DEV_RDX, 20, 1, DEV_RDX, 8,
NULL, NULL, &rd_reset,
NULL, &rd_attach, &rd_detach,
&rd_dib, DEV_DEBUG | RD_FLAGS, 0,
&rd_dib, DEV_DEBUG | DEV_SECTORS | DEV_DISK | RD_FLAGS, 0,
rd_debug, NULL, NULL, &rd_help, NULL, NULL,
&rd_description
&rd_description, NULL, drv_tab
};
/* RD read
@@ -597,7 +566,7 @@ switch (uptr->CMD) {
else
uptr->CYL++; /* out */
max_cyl = drv_tab[GET_DTYPE (uptr->flags)].cyl;
max_cyl = uptr->drvtyp->cyl;
if (uptr->CYL == max_cyl) /* check for wrap */
uptr->CYL = 0;
if (uptr->CYL == -1)
@@ -638,7 +607,7 @@ return CMD_UNKNOWN;
/* read cylinder 0 - simulate special formatting */
t_stat rd_rdcyl0 (int32 hd, int32 dtype)
t_stat rd_rdcyl0 (int32 hd, UNIT *uptr)
{
uint32 i;
uint16 c;
@@ -647,28 +616,28 @@ if (hd <= 2) {
memset (rd_xb, 0, sizeof(*rd_xb) * 256); /* fill sector buffer with 0's */
/* rd_xb[0]-rd_xb[3] */ /* 8 bytes of zero */
rd_xb[4] = 0x3600;
rd_xb[5] = drv_tab[dtype].xbn & WMASK; /* number of XBNs */
rd_xb[6] = (drv_tab[dtype].xbn >> 16) & WMASK;
rd_xb[7] = drv_tab[dtype].dbn & WMASK; /* number of DBNs */
rd_xb[8] = (drv_tab[dtype].dbn >> 16) & WMASK;
rd_xb[9] = drv_tab[dtype].lbn & WMASK; /* number of LBNs (Logical-Block-Numbers) */
rd_xb[10] = (drv_tab[dtype].lbn >> 16) & WMASK;
rd_xb[11] = drv_tab[dtype].rbn & WMASK; /* number of RBNs (Replacement-Block-Numbers) */
rd_xb[12] = (drv_tab[dtype].rbn >> 16) & WMASK;
rd_xb[13] = drv_tab[dtype].sect; /* number of sectors per track */
rd_xb[14] = drv_tab[dtype].tpg; /* number of tracks */
rd_xb[15] = drv_tab[dtype].cyl; /* number of cylinders */
rd_xb[16] = drv_tab[dtype].cylp; /* first cylinder for write precompensation */
rd_xb[17] = drv_tab[dtype].cylr; /* first cylinder for reduced write current */
rd_xb[5] = uptr->drvtyp->xbn & WMASK; /* number of XBNs */
rd_xb[6] = (uptr->drvtyp->xbn >> 16) & WMASK;
rd_xb[7] = uptr->drvtyp->dbn & WMASK; /* number of DBNs */
rd_xb[8] = (uptr->drvtyp->dbn >> 16) & WMASK;
rd_xb[9] = uptr->drvtyp->size & WMASK; /* number of LBNs (Logical-Block-Numbers) */
rd_xb[10] = (uptr->drvtyp->size >> 16) & WMASK;
rd_xb[11] = uptr->drvtyp->rbn & WMASK; /* number of RBNs (Replacement-Block-Numbers) */
rd_xb[12] = (uptr->drvtyp->rbn >> 16) & WMASK;
rd_xb[13] = uptr->drvtyp->sect; /* number of sectors per track */
rd_xb[14] = uptr->drvtyp->tpg; /* number of tracks */
rd_xb[15] = uptr->drvtyp->cyl; /* number of cylinders */
rd_xb[16] = uptr->drvtyp->cylp; /* first cylinder for write precompensation */
rd_xb[17] = uptr->drvtyp->cylr; /* first cylinder for reduced write current */
rd_xb[18] = 0; /* seek rate or zero for buffered seeks */
rd_xb[19] = 1; /* 0 if CRC, 1 if ECC is being used */
rd_xb[20] = drv_tab[dtype].rcts; /* "replacement control table" (RCT) */
rd_xb[21] = drv_tab[dtype].rctc; /* number of copies of the RCT */
rd_xb[22] = drv_tab[dtype].med & WMASK; /* media identifier */
rd_xb[23] = (drv_tab[dtype].med >> 16) & WMASK;
rd_xb[20] = uptr->drvtyp->rcts; /* "replacement control table" (RCT) */
rd_xb[21] = uptr->drvtyp->rctc; /* number of copies of the RCT */
rd_xb[22] = uptr->drvtyp->MediaId & WMASK; /* media identifier */
rd_xb[23] = (uptr->drvtyp->MediaId >> 16) & WMASK;
rd_xb[24] = 1; /* sector-to-sector interleave */
rd_xb[25] = 7; /* head-to-head skew */
rd_xb[26] = drv_tab[dtype].ccs; /* cylinder-to-cylinder skew */
rd_xb[26] = uptr->drvtyp->ccs; /* cylinder-to-cylinder skew */
rd_xb[27] = 16; /* size of GAP 0 in the MFM format */
rd_xb[28] = 16; /* size of GAP 1 in the MFM format */
rd_xb[29] = 5; /* size of GAP 2 in the MFM format */
@@ -709,18 +678,17 @@ return sim_disk_wrsect (uptr, lba, (uint8 *)rd_xb, &sectswritten, sects);
t_stat rd_svc (UNIT *uptr)
{
t_lba lba;
int32 dtype = GET_DTYPE (uptr->flags);
switch (uptr->CMD) {
case CMD_RDPHY:
case CMD_RDLOG:
uptr->CYL = rd_dcyl;
uptr->HEAD = rd_dhead;
if (dtype >= RD31_DTYPE) {
if (strcasecmp (uptr->drvtyp->name, "RX33") != 0) {
if (rd_dcyl == 0) {
lba = 0;
sim_debug (DBG_RD, &rd_dev, "cyl=%04d, hd=%d, sect=%02d, lba=%08X\n", rd_dcyl, rd_dhead, rd_dsect, lba);
rd_rdcyl0 (rd_dhead, dtype);
rd_rdcyl0 (rd_dhead, uptr);
}
else {
lba = GET_DA (uptr, (rd_dcyl - 1), rd_dhead, rd_dsect);
@@ -752,7 +720,7 @@ switch (uptr->CMD) {
uptr->HEAD = rd_dhead;
ddb_ReadW (rd_dma, (rd_scnt * RD_NUMBY), rd_xb);
rd_dma = (rd_dma + (rd_scnt * RD_NUMBY)) & 0xFFFFFF;
if (dtype >= RD31_DTYPE) {
if (strcasecmp (uptr->drvtyp->name, "RX33") != 0) {
if (rd_dcyl == 0) {
lba = 0;
sim_debug (DBG_WR, &rd_dev, "cyl=%04d, hd=%d, sect=%02d, lba=%08X (ignored)\n", rd_dcyl, rd_dhead, rd_dsect, lba);
@@ -850,6 +818,22 @@ if ((rd_term & 0x20) && setint) {
t_stat rd_reset (DEVICE *dptr)
{
static t_bool inited = FALSE;
if (!inited) {
int32 i;
inited = TRUE;
for (i = 0; i < RD_NUMDR; i++) {
UNIT *uptr = rd_unit + i;
uptr->action = &rd_svc;
uptr->flags = UNIT_FIX|UNIT_ATTABLE|UNIT_DISABLE|UNIT_ROABLE;
}
sim_disk_set_drive_type_by_name (&rd_unit[0], "RD54");
sim_disk_set_drive_type_by_name (&rd_unit[1], "RD54");
sim_disk_set_drive_type_by_name (&rd_unit[2], "RX33");
}
rd_rg_p = 0;
CLR_INT (SCA); /* clear int req */
rd_done (TRM_OK, FALSE);
@@ -867,12 +851,9 @@ return SCPE_OK;
t_stat rd_attach (UNIT *uptr, CONST char *cptr)
{
const char *drives[] = {"RX33", "RD31", "RD32", "RD53", "RD54", };
return sim_disk_attach_ex (uptr, cptr, RD_NUMBY,
sizeof (uint8), TRUE, DBG_DSK,
drv_tab[GET_DTYPE (uptr->flags)].name, 0, 0,
(uptr->flags & UNIT_NOAUTO) ? NULL: drives);
uptr->drvtyp->name, 0, 0, NULL);
}
/* Detach routine */
@@ -883,36 +864,6 @@ sim_cancel (uptr);
return sim_disk_detach (uptr);
}
/* Set unit type */
t_stat rd_set_type (UNIT *uptr, int32 val, CONST char *cptr, void *desc)
{
if (uptr->flags & UNIT_ATT)
return SCPE_ALATT;
if ((uptr == &rd_unit[0]) || (uptr == &rd_unit[1])) { /* hard disk only */
if (val < RD31_DTYPE)
return SCPE_ARG;
uptr->flags = (uptr->flags & ~UNIT_DTYPE) | (val << UNIT_V_DTYPE);
}
if (uptr == &rd_unit[2]) { /* floppy disk only */
if (val > RX33_DTYPE)
return SCPE_ARG;
uptr->flags = (uptr->flags & ~UNIT_DTYPE) | (val << UNIT_V_DTYPE);
}
uptr->capac = ((t_addr) drv_tab[val].lbn) * RD_NUMBY;
return SCPE_OK;
}
/* Show unit type */
t_stat rd_show_type (FILE *st, UNIT *uptr, int32 val, CONST void *desc)
{
fprintf (st, "%s", drv_tab[GET_DTYPE (uptr->flags)].name);
return SCPE_OK;
}
t_stat rd_help (FILE *st, DEVICE *dptr, UNIT *uptr, int32 flag, const char *cptr)
{
fprintf (st, "HDC9224 Disk Controller (RD)\n\n");

View File

@@ -114,11 +114,6 @@
#define UA_SELECT 0
#define UNIT_V_DTYPE (SCSI_V_UF + 0) /* drive type */
#define UNIT_M_DTYPE 0x1F
#define UNIT_DTYPE (UNIT_M_DTYPE << UNIT_V_DTYPE)
#define GET_DTYPE(x) (((x) >> UNIT_V_DTYPE) & UNIT_M_DTYPE)
typedef struct {
uint32 cnum; /* ctrl number */
uint8 odata; /* output data */
@@ -144,8 +139,6 @@ t_stat rz_isvc (UNIT *uptr);
t_stat rz_reset (DEVICE *dptr);
t_stat rz_attach (UNIT *uptr, CONST char *cptr);
t_stat rz_help (FILE *st, DEVICE *dptr, UNIT *uptr, int32 flag, const char *cptr);
t_stat rz_set_type (UNIT *uptr, int32 val, CONST char *cptr, void *desc);
t_stat rz_show_type (FILE *st, UNIT *uptr, int32 val, CONST void *desc);
void rz_update_status (CTLR *rz);
void rz_setint (CTLR *rz, uint32 flags);
void rz_clrint (CTLR *rz);
@@ -163,25 +156,7 @@ const char *rz_description (DEVICE *dptr);
CTLR rz_ctx = { 0 };
UNIT rz_unit[] = {
{ UDATA (&rz_svc, UNIT_FIX+UNIT_ATTABLE+UNIT_DISABLE+UNIT_ROABLE+
(RZ23_DTYPE << UNIT_V_DTYPE), RZ_SIZE (RZ23)) },
{ UDATA (&rz_svc, UNIT_FIX+UNIT_ATTABLE+UNIT_DISABLE+UNIT_ROABLE+
(RZ23_DTYPE << UNIT_V_DTYPE), RZ_SIZE (RZ23)) },
{ UDATA (&rz_svc, UNIT_FIX+UNIT_ATTABLE+UNIT_DISABLE+UNIT_ROABLE+
(RZ23_DTYPE << UNIT_V_DTYPE), RZ_SIZE (RZ23)) },
{ UDATA (&rz_svc, UNIT_FIX+UNIT_ATTABLE+UNIT_DISABLE+UNIT_ROABLE+
(RZ23_DTYPE << UNIT_V_DTYPE), RZ_SIZE (RZ23)) },
{ UDATA (&rz_svc, UNIT_FIX+UNIT_ATTABLE+UNIT_DISABLE+UNIT_ROABLE+
(RZ23_DTYPE << UNIT_V_DTYPE), RZ_SIZE (RZ23)) },
{ UDATA (&rz_svc, UNIT_FIX+UNIT_ATTABLE+UNIT_DISABLE+UNIT_ROABLE+
(RZ23_DTYPE << UNIT_V_DTYPE), RZ_SIZE (RZ23)) },
{ UDATA (&rz_svc, UNIT_FIX+UNIT_ATTABLE+UNIT_DISABLE+UNIT_ROABLE+
(RZ23_DTYPE << UNIT_V_DTYPE), RZ_SIZE (RZ23)) },
{ UDATA (&rz_svc, UNIT_FIX+UNIT_ATTABLE+UNIT_DISABLE+UNIT_ROABLE+
(RZ23_DTYPE << UNIT_V_DTYPE), RZ_SIZE (RZ23)) },
{ UDATA (&rz_isvc, UNIT_DIS, 0) }
};
UNIT rz_unit[RZ_NUMDR + 1] = {{0}};
REG rz_reg[] = {
{ FLDATAD ( INT, int_req[IPL_SCA], INT_V_SCA, "interrupt pending flag") },
@@ -205,44 +180,6 @@ MTAB rz_mod[] = {
&scsi_set_wlk, &scsi_show_wlk, NULL, "Write enable drive" },
{ MTAB_XTD|MTAB_VUN, 1, NULL, "LOCKED",
&scsi_set_wlk, NULL, NULL, "Write lock drive" },
{ MTAB_XTD|MTAB_VUN, RZ23_DTYPE, NULL, "RZ23",
&rz_set_type, NULL, NULL, "Set RZ23 Disk Type" },
{ MTAB_XTD|MTAB_VUN, RZ23L_DTYPE, NULL, "RZ23L",
&rz_set_type, NULL, NULL, "Set RZ23L Disk Type" },
{ MTAB_XTD|MTAB_VUN, RZ24_DTYPE, NULL, "RZ24",
&rz_set_type, NULL, NULL, "Set RZ24 Disk Type" },
{ MTAB_XTD|MTAB_VUN, RZ24L_DTYPE, NULL, "RZ24L",
&rz_set_type, NULL, NULL, "Set RZ24L Disk Type" },
{ MTAB_XTD|MTAB_VUN, RZ25_DTYPE, NULL, "RZ25",
&rz_set_type, NULL, NULL, "Set RZ25 Disk Type" },
{ MTAB_XTD|MTAB_VUN, RZ25L_DTYPE, NULL, "RZ25L",
&rz_set_type, NULL, NULL, "Set RZ25L Disk Type" },
{ MTAB_XTD|MTAB_VUN, RZ26_DTYPE, NULL, "RZ26",
&rz_set_type, NULL, NULL, "Set RZ26 Disk Type" },
{ MTAB_XTD|MTAB_VUN, RZ26L_DTYPE, NULL, "RZ26L",
&rz_set_type, NULL, NULL, "Set RZ26L Disk Type" },
{ MTAB_XTD|MTAB_VUN, RZ55_DTYPE, NULL, "RZ55",
&rz_set_type, NULL, NULL, "Set RZ55 Disk Type" },
{ MTAB_XTD|MTAB_VUN, RRD40_DTYPE, NULL, "CDROM",
&rz_set_type, NULL, NULL, "Set RRD40 Disk Type" },
{ MTAB_XTD|MTAB_VUN, RRD40_DTYPE, NULL, "RRD40",
&rz_set_type, NULL, NULL, "Set RRD40 Disk Type" },
{ MTAB_XTD|MTAB_VUN, RRD42_DTYPE, NULL, "RRD42",
&rz_set_type, NULL, NULL, "Set RRD42 Disk Type" },
{ MTAB_XTD|MTAB_VUN, RRW11_DTYPE, NULL, "RRW11",
&rz_set_type, NULL, NULL, "Set RRW11 Disk Type" },
{ MTAB_XTD|MTAB_VUN, CDW900_DTYPE, NULL, "CDW900",
&rz_set_type, NULL, NULL, "Set SONY CDW-900E Disk Type" },
{ MTAB_XTD|MTAB_VUN, XR1001_DTYPE, NULL, "XR1001",
&rz_set_type, NULL, NULL, "Set JVC XR-W1001 Disk Type" },
{ MTAB_XTD|MTAB_VUN, TZK50_DTYPE, NULL, "TZK50",
&rz_set_type, NULL, NULL, "Set DEC TZK50 Tape Type" },
{ MTAB_XTD|MTAB_VUN, TZ30_DTYPE, NULL, "TZ30",
&rz_set_type, NULL, NULL, "Set DEC TZ30 Tape Type" },
{ MTAB_XTD|MTAB_VUN|MTAB_VALR, RZU_DTYPE, NULL, "RZUSER",
&rz_set_type, NULL, NULL, "Set RZUSER=size Disk Type" },
{ MTAB_XTD|MTAB_VUN, 0, "TYPE", NULL,
NULL, &rz_show_type, NULL, "Display device type" },
{ SCSI_NOAUTO, SCSI_NOAUTO, "noautosize", "NOAUTOSIZE", NULL, NULL, NULL, "Disables disk autosize on attach" },
{ SCSI_NOAUTO, 0, "autosize", "AUTOSIZE", NULL, NULL, NULL, "Enables disk autosize on attach" },
{ MTAB_XTD|MTAB_VUN, 0, "FORMAT", "FORMAT",
@@ -250,35 +187,14 @@ MTAB rz_mod[] = {
{ 0 }
};
static const char *drv_types[] = {
"RZ23",
"RZ23L",
"RZ24",
"RZ24L",
"RZ25",
"RZ25L",
"RZ26",
"RZ26L",
"RZ55",
"CDROM",
"RRD40",
"RRD42",
"RRW11",
"CDW900",
"XR1001",
"TZK50",
"TZ30",
"RZUSER"
};
DEVICE rz_dev = {
"RZ", rz_unit, rz_reg, rz_mod,
RZ_NUMDR + 1, DEV_RDX, 31, 1, DEV_RDX, 8,
NULL, NULL, &rz_reset,
NULL, &rz_attach, &scsi_detach,
NULL, DEV_DEBUG | DEV_DISK | DEV_SECTORS | RZ_FLAGS,
NULL, DEV_DEBUG | DEV_SCSI | DEV_SECTORS | RZ_FLAGS,
0, rz_debug, NULL, NULL, &rz_help, NULL, NULL,
&rz_description
&rz_description, NULL, &drv_tab
};
/* RZB data structures
@@ -294,25 +210,7 @@ DIB rzb_dib = {
RZ_ROM_INDEX, BOOT_CODE_ARRAY, BOOT_CODE_SIZE
};
UNIT rzb_unit[] = {
{ UDATA (&rz_svc, UNIT_FIX+UNIT_ATTABLE+UNIT_DISABLE+UNIT_ROABLE+
(RZ23_DTYPE << UNIT_V_DTYPE), RZ_SIZE (RZ23)) },
{ UDATA (&rz_svc, UNIT_FIX+UNIT_ATTABLE+UNIT_DISABLE+UNIT_ROABLE+
(RZ23_DTYPE << UNIT_V_DTYPE), RZ_SIZE (RZ23)) },
{ UDATA (&rz_svc, UNIT_FIX+UNIT_ATTABLE+UNIT_DISABLE+UNIT_ROABLE+
(RZ23_DTYPE << UNIT_V_DTYPE), RZ_SIZE (RZ23)) },
{ UDATA (&rz_svc, UNIT_FIX+UNIT_ATTABLE+UNIT_DISABLE+UNIT_ROABLE+
(RZ23_DTYPE << UNIT_V_DTYPE), RZ_SIZE (RZ23)) },
{ UDATA (&rz_svc, UNIT_FIX+UNIT_ATTABLE+UNIT_DISABLE+UNIT_ROABLE+
(RZ23_DTYPE << UNIT_V_DTYPE), RZ_SIZE (RZ23)) },
{ UDATA (&rz_svc, UNIT_FIX+UNIT_ATTABLE+UNIT_DISABLE+UNIT_ROABLE+
(RZ23_DTYPE << UNIT_V_DTYPE), RZ_SIZE (RZ23)) },
{ UDATA (&rz_svc, UNIT_FIX+UNIT_ATTABLE+UNIT_DISABLE+UNIT_ROABLE+
(RZ23_DTYPE << UNIT_V_DTYPE), RZ_SIZE (RZ23)) },
{ UDATA (&rz_svc, UNIT_FIX+UNIT_ATTABLE+UNIT_DISABLE+UNIT_ROABLE+
(RZ23_DTYPE << UNIT_V_DTYPE), RZ_SIZE (RZ23)) },
{ UDATA (&rz_isvc, UNIT_DIS, 0) }
};
UNIT rzb_unit[RZ_NUMDR + 1] = {{0}};
REG rzb_reg[] = {
{ FLDATAD ( INT, int_req[IPL_SCB], INT_V_SCB, "interrupt pending flag") },
@@ -324,9 +222,9 @@ DEVICE rzb_dev = {
RZ_NUMDR + 1, DEV_RDX, 31, 1, DEV_RDX, 8,
NULL, NULL, &rz_reset,
NULL, &rz_attach, &scsi_detach,
&rzb_dib, DEV_DEBUG | DEV_DISK | DEV_SECTORS | RZB_FLAGS,
0, rz_debug, NULL, NULL,
&rz_help, NULL /* help and attach_help routines */
&rzb_dib, DEV_DEBUG | DEV_SCSI | DEV_SECTORS | RZB_FLAGS,
0, rz_debug, NULL, NULL, &rz_help, NULL, NULL,
&rz_description, NULL, &drv_tab /* help and attach_help routines */
};
static DEVICE *rz_devmap[RZ_NUMCT] = {
@@ -788,11 +686,28 @@ scsi_reset (&rz->bus);
t_stat rz_reset (DEVICE *dptr)
{
int32 ctlr, i;
uint32 dtyp;
int32 ctlr, i, j;
CTLR *rz;
UNIT *uptr;
t_stat r;
static t_bool inited = FALSE;
if (!inited) {
inited = TRUE;
for (i = 0; i < RZ_NUMCT; i++) {
for (j = 0; j < RZ_NUMDR; j++) {
uptr = rz_devmap[i]->units + j;
uptr->action = &rz_svc;
uptr->flags = UNIT_FIX|UNIT_ATTABLE|UNIT_DISABLE|UNIT_ROABLE;
sim_disk_set_drive_type_by_name (uptr, "RZ23");
if (j == RZ_SCSI_ID) /* initiator ID? */
uptr->flags = UNIT_DIS; /* disable unit */
}
uptr = rz_devmap[i]->units + j;
uptr->action = &rz_isvc;
uptr->flags = UNIT_DIS;
}
}
for (i = 0, ctlr = -1; i < RZ_NUMCT; i++) { /* find ctrl num */
if (rz_devmap[i] == dptr)
@@ -816,8 +731,6 @@ for (i = 0; i < (RZ_NUMDR + 1); i++) { /* init units */
uptr->flags = UNIT_DIS; /* disable unit */
if (i < RZ_NUMDR) {
scsi_add_unit (&rz->bus, i, uptr);
dtyp = GET_DTYPE (uptr->flags);
scsi_set_unit (&rz->bus, uptr, &rzdev_tab[dtyp]);
scsi_reset_unit (uptr);
}
}
@@ -825,42 +738,6 @@ rz_sw_reset (rz);
return SCPE_OK;
}
/* Set unit type (and capacity if user defined) */
t_stat rz_set_type (UNIT *uptr, int32 val, CONST char *cptr, void *desc)
{
CTLR *rz = rz_ctxmap[uptr->cnum];
uint32 cap;
uint32 max = sim_toffset_64? RZU_EMAXC: RZU_MAXC;
t_stat r;
if ((val < 0) || ((val != RZU_DTYPE) && cptr))
return SCPE_ARG;
if (uptr->flags & UNIT_ATT)
return SCPE_ALATT;
if (cptr) {
cap = (uint32) get_uint (cptr, 10, 0xFFFFFFFF, &r);
if ((sim_switches & SWMASK ('L')) == 0)
cap = cap * 1954;
if ((r != SCPE_OK) || (cap < RZU_MINC) || (cap > max))
return SCPE_ARG;
rzdev_tab[val].lbn = cap;
}
uptr->flags = (uptr->flags & ~UNIT_DTYPE) | (val << UNIT_V_DTYPE);
uptr->capac = (t_addr)rzdev_tab[val].lbn;
scsi_set_unit (&rz->bus, uptr, &rzdev_tab[val]);
scsi_reset_unit (uptr);
return SCPE_OK;
}
/* Show unit type */
t_stat rz_show_type (FILE *st, UNIT *uptr, int32 val, CONST void *desc)
{
fprintf (st, "%s", rzdev_tab[GET_DTYPE (uptr->flags)].name);
return SCPE_OK;
}
t_stat rz_help (FILE *st, DEVICE *dptr, UNIT *uptr, int32 flag, const char *cptr)
{
fprintf (st, "NCR 5380 SCSI Controller (%s)\n\n", dptr->name);
@@ -883,7 +760,7 @@ return SCPE_OK;
t_stat rz_attach (UNIT *uptr, CONST char *cptr)
{
return scsi_attach_ex (uptr, cptr, drv_types);
return scsi_attach_ex (uptr, cptr, NULL);
}
const char *rz_description (DEVICE *dptr)

View File

@@ -66,12 +66,8 @@
#define CFG1_TEST 0x08 /* chip test */
#define CFG1_MYID 0x07 /* my bus id */
#define UNIT_V_DTYPE (SCSI_V_UF + 0) /* drive type */
#define UNIT_M_DTYPE 0x1F
#define UNIT_DTYPE (UNIT_M_DTYPE << UNIT_V_DTYPE)
#define GET_DTYPE(x) (((x) >> UNIT_V_DTYPE) & UNIT_M_DTYPE)
#define RZ_MAXFR (1u << 16) /* max transfer */
#define RZ_NUMDR 8
uint32 rz_last_cmd = 0;
uint32 rz_txi = 0; /* transfer count */
@@ -128,25 +124,7 @@ const char *rz_description (DEVICE *dptr);
rz_reg RZ register list
*/
UNIT rz_unit[] = {
{ UDATA (&rz_svc, UNIT_FIX+UNIT_ATTABLE+UNIT_DISABLE+UNIT_ROABLE+
(RZ23_DTYPE << UNIT_V_DTYPE), RZ_SIZE (RZ23)) },
{ UDATA (&rz_svc, UNIT_FIX+UNIT_ATTABLE+UNIT_DISABLE+UNIT_ROABLE+
(RZ23_DTYPE << UNIT_V_DTYPE), RZ_SIZE (RZ23)) },
{ UDATA (&rz_svc, UNIT_FIX+UNIT_ATTABLE+UNIT_DISABLE+UNIT_ROABLE+
(RZ23_DTYPE << UNIT_V_DTYPE), RZ_SIZE (RZ23)) },
{ UDATA (&rz_svc, UNIT_FIX+UNIT_ATTABLE+UNIT_DISABLE+UNIT_ROABLE+
(RZ23_DTYPE << UNIT_V_DTYPE), RZ_SIZE (RZ23)) },
{ UDATA (&rz_svc, UNIT_FIX+UNIT_ATTABLE+UNIT_DISABLE+UNIT_ROABLE+
(RZ23_DTYPE << UNIT_V_DTYPE), RZ_SIZE (RZ23)) },
{ UDATA (&rz_svc, UNIT_FIX+UNIT_ATTABLE+UNIT_DISABLE+UNIT_ROABLE+
(RZ23_DTYPE << UNIT_V_DTYPE), RZ_SIZE (RZ23)) },
{ UDATA (&rz_svc, UNIT_FIX+UNIT_ATTABLE+UNIT_DISABLE+UNIT_ROABLE+
(RZ23_DTYPE << UNIT_V_DTYPE), RZ_SIZE (RZ23)) },
{ UDATA (&rz_svc, UNIT_FIX+UNIT_ATTABLE+UNIT_DISABLE+UNIT_ROABLE+
(RZ23_DTYPE << UNIT_V_DTYPE), RZ_SIZE (RZ23)) },
{ UDATA (&rz_svc, UNIT_DIS, 0) }
};
UNIT rz_unit[RZ_NUMDR + 1] = {{0}};
REG rz_reg[] = {
{ FLDATAD (INT, int_req[IPL_SC], INT_V_SC, "interrupt pending flag") },
@@ -158,44 +136,6 @@ MTAB rz_mod[] = {
&scsi_set_wlk, &scsi_show_wlk, NULL, "Write enable drive" },
{ MTAB_XTD|MTAB_VUN, 1, NULL, "LOCKED",
&scsi_set_wlk, NULL, NULL, "Write lock drive" },
{ MTAB_XTD|MTAB_VUN, RZ23_DTYPE, NULL, "RZ23",
&rz_set_type, NULL, NULL, "Set RZ23 Disk Type" },
{ MTAB_XTD|MTAB_VUN, RZ23L_DTYPE, NULL, "RZ23L",
&rz_set_type, NULL, NULL, "Set RZ23L Disk Type" },
{ MTAB_XTD|MTAB_VUN, RZ24_DTYPE, NULL, "RZ24",
&rz_set_type, NULL, NULL, "Set RZ24 Disk Type" },
{ MTAB_XTD|MTAB_VUN, RZ24L_DTYPE, NULL, "RZ24L",
&rz_set_type, NULL, NULL, "Set RZ24L Disk Type" },
{ MTAB_XTD|MTAB_VUN, RZ25_DTYPE, NULL, "RZ25",
&rz_set_type, NULL, NULL, "Set RZ25 Disk Type" },
{ MTAB_XTD|MTAB_VUN, RZ25L_DTYPE, NULL, "RZ25L",
&rz_set_type, NULL, NULL, "Set RZ25L Disk Type" },
{ MTAB_XTD|MTAB_VUN, RZ26_DTYPE, NULL, "RZ26",
&rz_set_type, NULL, NULL, "Set RZ26 Disk Type" },
{ MTAB_XTD|MTAB_VUN, RZ26L_DTYPE, NULL, "RZ26L",
&rz_set_type, NULL, NULL, "Set RZ26L Disk Type" },
{ MTAB_XTD|MTAB_VUN, RZ55_DTYPE, NULL, "RZ55",
&rz_set_type, NULL, NULL, "Set RZ55 Disk Type" },
{ MTAB_XTD|MTAB_VUN, RRD40_DTYPE, NULL, "CDROM",
&rz_set_type, NULL, NULL, "Set RRD40 Disk Type" },
{ MTAB_XTD|MTAB_VUN, RRD40_DTYPE, NULL, "RRD40",
&rz_set_type, NULL, NULL, "Set RRD40 Disk Type" },
{ MTAB_XTD|MTAB_VUN, RRD42_DTYPE, NULL, "RRD42",
&rz_set_type, NULL, NULL, "Set RRD42 Disk Type" },
{ MTAB_XTD|MTAB_VUN, RRW11_DTYPE, NULL, "RRW11",
&rz_set_type, NULL, NULL, "Set RRW11 Disk Type" },
{ MTAB_XTD|MTAB_VUN, CDW900_DTYPE, NULL, "CDW900",
&rz_set_type, NULL, NULL, "Set SONY CDW-900E Disk Type" },
{ MTAB_XTD|MTAB_VUN, XR1001_DTYPE, NULL, "XR1001",
&rz_set_type, NULL, NULL, "Set JVC XR-W1001 Disk Type" },
{ MTAB_XTD|MTAB_VUN, TZK50_DTYPE, NULL, "TZK50",
&rz_set_type, NULL, NULL, "Set DEC TZK50 Tape Type" },
{ MTAB_XTD|MTAB_VUN, TZ30_DTYPE, NULL, "TZ30",
&rz_set_type, NULL, NULL, "Set DEC TZ30 Tape Type" },
{ MTAB_XTD|MTAB_VUN|MTAB_VALR, RZU_DTYPE, NULL, "RZUSER",
&rz_set_type, NULL, NULL, "Set RZUSER=size Disk Type" },
{ MTAB_XTD|MTAB_VUN, 0, "TYPE", NULL,
NULL, &rz_show_type, NULL, "Display device type" },
{ SCSI_NOAUTO, SCSI_NOAUTO, "noautosize", "NOAUTOSIZE", NULL, NULL, NULL, "Disables disk autosize on attach" },
{ SCSI_NOAUTO, 0, "autosize", "AUTOSIZE", NULL, NULL, NULL, "Enables disk autosize on attach" },
{ MTAB_XTD|MTAB_VUN, 0, "FORMAT", "FORMAT",
@@ -203,35 +143,14 @@ MTAB rz_mod[] = {
{ 0 }
};
static const char *drv_types[] = {
"RZ23",
"RZ23L",
"RZ24",
"RZ24L",
"RZ25",
"RZ25L",
"RZ26",
"RZ26L",
"RZ55",
"CDROM",
"RRD40",
"RRD42",
"RRW11",
"CDW900",
"XR1001",
"TZK50",
"TZ30",
"RZUSER"
};
DEVICE rz_dev = {
"RZ", rz_unit, rz_reg, rz_mod,
9, DEV_RDX, 8, 1, DEV_RDX, 8,
NULL, NULL, &rz_reset,
NULL, &rz_attach, &scsi_detach,
NULL, DEV_DISABLE | DEV_DEBUG | DEV_DISK | DEV_SECTORS,
NULL, DEV_DISABLE | DEV_DEBUG | DEV_SCSI | DEV_SECTORS,
0, rz_debug, NULL, NULL, &rz_help, NULL, NULL,
&rz_description
&rz_description, NULL, &drv_tab
};
/* Register names for Debug tracing */
@@ -807,8 +726,8 @@ scsi_reset (&rz_bus);
t_stat rz_reset (DEVICE *dptr)
{
uint32 i;
uint32 dtyp;
UNIT *uptr;
static t_bool inited = FALSE;
t_stat r;
if (rz_buf == NULL)
@@ -819,54 +738,25 @@ r = scsi_init (&rz_bus, RZ_MAXFR); /* init SCSI bus */
if (r != SCPE_OK)
return r;
rz_bus.dptr = dptr; /* set bus device */
for (i = 0; i < 8; i++) {
if (!inited) {
inited = TRUE;
for (i = 0; i < 8; i++) {
uptr = dptr->units + i;
uptr->action = &rz_svc;
uptr->flags = UNIT_FIX|UNIT_ATTABLE|UNIT_DISABLE|UNIT_ROABLE;
sim_disk_set_drive_type_by_name (uptr, "RZ23");
if (i == RZ_SCSI_ID) /* initiator ID? */
uptr->flags = UNIT_DIS; /* disable unit */
scsi_add_unit (&rz_bus, i, &rz_unit[i]);
}
uptr = dptr->units + i;
if (i == RZ_SCSI_ID) /* initiator ID? */
uptr->flags = UNIT_DIS; /* disable unit */
scsi_add_unit (&rz_bus, i, &rz_unit[i]);
dtyp = GET_DTYPE (rz_unit[i].flags);
scsi_set_unit (&rz_bus, &rz_unit[i], &rzdev_tab[dtyp]);
scsi_reset_unit (&rz_unit[i]);
uptr->action = &rz_svc;
uptr->flags = UNIT_DIS;
}
rz_sw_reset ();
return SCPE_OK;
}
/* Set unit type (and capacity if user defined) */
t_stat rz_set_type (UNIT *uptr, int32 val, CONST char *cptr, void *desc)
{
uint32 cap;
uint32 max = sim_toffset_64? RZU_EMAXC: RZU_MAXC;
t_stat r;
if ((val < 0) || ((val != RZU_DTYPE) && cptr))
return SCPE_ARG;
if (uptr->flags & UNIT_ATT)
return SCPE_ALATT;
if (cptr) {
cap = (uint32) get_uint (cptr, 10, 0xFFFFFFFF, &r);
if ((sim_switches & SWMASK ('L')) == 0)
cap = cap * 1954;
if ((r != SCPE_OK) || (cap < RZU_MINC) || (cap > max))
return SCPE_ARG;
rzdev_tab[val].lbn = cap;
}
uptr->flags = (uptr->flags & ~UNIT_DTYPE) | (val << UNIT_V_DTYPE);
uptr->capac = (t_addr)rzdev_tab[val].lbn;
scsi_set_unit (&rz_bus, uptr, &rzdev_tab[val]);
scsi_reset_unit (uptr);
return SCPE_OK;
}
/* Show unit type */
t_stat rz_show_type (FILE *st, UNIT *uptr, int32 val, CONST void *desc)
{
fprintf (st, "%s", rzdev_tab[GET_DTYPE (uptr->flags)].name);
return SCPE_OK;
}
t_stat rz_help (FILE *st, DEVICE *dptr, UNIT *uptr, int32 flag, const char *cptr)
{
fprintf (st, "NCR 53C94 SCSI Controller (%s)\n\n", dptr->name);
@@ -889,7 +779,7 @@ return SCPE_OK;
t_stat rz_attach (UNIT *uptr, CONST char *cptr)
{
return scsi_attach_ex (uptr, cptr, drv_types);
return scsi_attach_ex (uptr, cptr, NULL);
}
const char *rz_description (DEVICE *dptr)

View File

@@ -398,8 +398,8 @@ DEVICE td_dev = {
2, DEV_RDX, 20, 1, DEV_RDX, 8,
NULL, NULL, &td_reset,
NULL, NULL, NULL,
NULL, DEV_DEBUG, 0, td_deb, NULL, NULL, NULL, NULL, NULL,
&td_description
NULL, DEV_DEBUG | DEV_DISK, 0, td_deb, NULL, NULL, NULL, NULL, NULL,
&td_description, NULL, &drv_tab
};
static void set_csi_int (int32 ctlr, t_bool val)

View File

@@ -390,8 +390,8 @@ DEVICE td_dev = {
1, DEV_RDX, 20, 1, DEV_RDX, 8,
NULL, NULL, &td_reset,
NULL, NULL, NULL,
NULL, DEV_DEBUG, 0, td_deb, NULL, NULL, NULL, NULL, NULL,
&td_description
NULL, DEV_DEBUG | DEV_DISK, 0, td_deb, NULL, NULL, NULL, NULL, NULL,
&td_description, NULL, &drv_tab
};
static void set_csi_int (int32 ctlr, t_bool val)

View File

@@ -82,6 +82,7 @@
#include "vax_defs.h"
#include "sim_tmxr.h"
#include "sim_disk.h"
/* Terminal definitions */
@@ -155,8 +156,9 @@ static BITFIELD tmr_iccs_bits [] = {
#define FL_M_TRACK 0377
#define FL_NUMSC 26 /* sectors/track */
#define FL_M_SECTOR 0177
#define FL_NUMSF 1
#define FL_NUMBY 128 /* bytes/sector */
#define FL_SIZE (FL_NUMTR * FL_NUMSC * FL_NUMBY)/* bytes/disk */
#define FL_SIZE (FL_NUMTR * FL_NUMSC) /* sectors/disk */
#define FL_IDLE 0 /* idle state */
#define FL_RWDS 1 /* rw, sect next */
@@ -190,6 +192,16 @@ static BITFIELD tmr_iccs_bits [] = {
#define TRACK u3 /* current track */
#define CALC_DA(t,s) (((t) * FL_NUMSC) + ((s) - 1)) * FL_NUMBY
#define FL_DRV(d) \
{ FL_NUMSC, FL_NUMSF, FL_NUMTR, FL_SIZE, #d, \
FL_NUMBY }
static DRVTYP drv_typ[] = {
FL_DRV(RX01),
{ 0 }
};
int32 tti_csr = 0; /* control/status */
uint32 tti_buftime; /* time input character arrived */
int32 tti_buf = 0; /* buffer */
@@ -248,6 +260,8 @@ t_stat clk_detach (UNIT *uptr);
t_stat tmr_reset (DEVICE *dptr);
t_stat fl_svc (UNIT *uptr);
t_stat fl_reset (DEVICE *dptr);
t_stat fl_attach (UNIT *uptr, CONST char *cptr);
t_stat fl_detach (UNIT *uptr);
int32 icr_rd (void);
void tmr_sched (uint32 incr);
t_stat todr_resync (void);
@@ -402,8 +416,7 @@ DEVICE tmr_dev = {
fl_mod RX modifier list
*/
UNIT fl_unit = { UDATA (&fl_svc,
UNIT_FIX+UNIT_ATTABLE+UNIT_BUFABLE+UNIT_MUSTBUF, FL_SIZE) };
UNIT fl_unit = {0};
REG fl_reg[] = {
{ HRDATAD (FNC, fl_fnc, 8, "function select") },
@@ -434,9 +447,9 @@ DEVICE fl_dev = {
"CS", &fl_unit, fl_reg, fl_mod,
1, DEV_RDX, 20, 1, DEV_RDX, 8,
NULL, NULL, &fl_reset,
NULL, NULL, NULL,
NULL, 0, 0, NULL, NULL, NULL, NULL, NULL, NULL,
&fl_description
NULL, &fl_attach, &fl_detach,
NULL, DEV_DISK, 0, NULL, NULL, NULL, NULL, NULL, NULL,
&fl_description, NULL, &drv_typ
};
/* Terminal MxPR routines
@@ -1221,12 +1234,36 @@ tti_buf = FL_CPROT; /* status */
fl_state = FL_IDLE; /* floppy idle */
}
/* Attach routine */
t_stat fl_attach (UNIT *uptr, CONST char *cptr)
{
return sim_disk_attach (uptr, cptr, FL_NUMBY,
sizeof (uint8), TRUE, 0,
"RX01", 0, 0);
}
t_stat fl_detach (UNIT *uptr)
{
sim_cancel (uptr);
return sim_disk_detach (uptr);
}
/* Reset */
t_stat fl_reset (DEVICE *dptr)
{
uint32 i;
extern int32 sys_model;
static t_bool inited = FALSE;
if (!inited) {
inited = TRUE;
dptr->units->action = &fl_svc;
dptr->units->flags = UNIT_FIX|UNIT_ATTABLE|UNIT_BUFABLE|UNIT_MUSTBUF;
sim_disk_set_drive_type_by_name (dptr->units, "RX01");
}
fl_esr = FL_STAINC;
fl_ecode = 0; /* clear error */

View File

@@ -29,202 +29,247 @@
#include "sim_scsi.h"
#define RZ23_DTYPE 0
#define RZ23_TYPE SCSI_DISK
#define RZ23_PQUAL 0
#define RZ23_SCSI 1
#define RZ23_RM FALSE
#define RZ23_FLGS 0
#define RZ23_BLK 512
#define RZ23_LBN 204864
#define RZ23_SECTS 33
#define RZ23_SURFS 4
#define RZ23_CYLS 776
#define RZ23_MANU "DEC"
#define RZ23_DESC "RZ23 (C) DEC"
#define RZ23_REV "0A18"
#define RZ23L_DTYPE 1
#define RZ23L_TYPE SCSI_DISK
#define RZ23L_PQUAL 0
#define RZ23L_SCSI 1
#define RZ23L_RM FALSE
#define RZ23L_FLGS 0
#define RZ23L_BLK 512
#define RZ23L_LBN 237588
#define RZ23L_SECTS 39
#define RZ23L_SURFS 4
#define RZ23L_CYLS 1524
#define RZ23L_MANU "DEC"
#define RZ23L_DESC "RZ23L (C) DEC"
#define RZ23L_REV "2528"
#define RZ24_DTYPE 2
#define RZ24_TYPE SCSI_DISK
#define RZ24_PQUAL 0
#define RZ24_SCSI 1
#define RZ24_RM FALSE
#define RZ24_FLGS 0
#define RZ24_BLK 512
#define RZ24_LBN 409792
#define RZ24_SECTS 38
#define RZ24_SURFS 8
#define RZ24_CYLS 1348
#define RZ24_MANU "DEC"
#define RZ24_DESC "RZ24 (C) DEC"
#define RZ24_REV "4041"
#define RZ24L_DTYPE 3
#define RZ24L_TYPE SCSI_DISK
#define RZ24L_PQUAL 0
#define RZ24L_SCSI 2
#define RZ24L_RM FALSE
#define RZ24L_FLGS 0
#define RZ24L_BLK 512
#define RZ24L_LBN 479350
#define RZ24L_SECTS 66
#define RZ24L_SURFS 4
#define RZ24L_CYLS 1818
#define RZ24L_MANU "DEC"
#define RZ24L_DESC "RZ24L (C) DEC"
#define RZ24L_REV "4766"
#define RZ25_DTYPE 4
#define RZ25_TYPE SCSI_DISK
#define RZ25_PQUAL 0
#define RZ25_SCSI 2
#define RZ25_RM FALSE
#define RZ25_FLGS 0
#define RZ25_BLK 512
#define RZ25_LBN 832527
#define RZ25_SECTS 62
#define RZ25_SURFS 9
#define RZ25_CYLS 1492
#define RZ25_MANU "DEC"
#define RZ25_DESC "RZ25 (C) DEC"
#define RZ25_REV "0700"
#define RZ25L_DTYPE 5
#define RZ25L_TYPE SCSI_DISK
#define RZ25L_PQUAL 0
#define RZ25L_SCSI 2
#define RZ25L_RM FALSE
#define RZ25L_FLGS 0
#define RZ25L_BLK 512
#define RZ25L_LBN 1046206
#define RZ25L_SECTS 79
#define RZ25L_SURFS 8
#define RZ25L_CYLS 1891
#define RZ25L_MANU "DEC"
#define RZ25L_DESC "RZ25L (C) DEC"
#define RZ25L_REV "0008"
#define RZ26_DTYPE 6
#define RZ26_TYPE SCSI_DISK
#define RZ26_PQUAL 0
#define RZ26_SCSI 2
#define RZ26_RM FALSE
#define RZ26_FLGS 0
#define RZ26_BLK 512
#define RZ26_LBN 2050860
#define RZ26_SECTS 57
#define RZ26_SURFS 14
#define RZ26_CYLS 2570
#define RZ26_MANU "DEC"
#define RZ26_DESC "RZ26 (C) DEC"
#define RZ26_REV "0700"
#define RZ26L_DTYPE 7
#define RZ26L_TYPE SCSI_DISK
#define RZ26L_PQUAL 0
#define RZ26L_SCSI 2
#define RZ26L_RM FALSE
#define RZ26L_FLGS 0
#define RZ26L_BLK 512
#define RZ26L_LBN 2050860
#define RZ26L_SECTS 57
#define RZ26L_SURFS 14
#define RZ26L_CYLS 2570
#define RZ26L_MANU "DEC"
#define RZ26L_DESC "RZ26L (C) DEC"
#define RZ26L_REV "0008"
#define RZ55_DTYPE 8
#define RZ55_TYPE SCSI_DISK
#define RZ55_PQUAL 0
#define RZ55_SCSI 1
#define RZ55_RM FALSE
#define RZ55_FLGS 0
#define RZ55_BLK 512
#define RZ55_LBN 648437
#define RZ55_SECTS 36
#define RZ55_SURFS 15
#define RZ55_CYLS 1224
#define RZ55_MANU "DEC"
#define RZ55_DESC "RZ55"
#define RZ55_REV "0900"
#define RRD40_DTYPE 9
#define RRD40_TYPE SCSI_CDROM
#define RRD40_PQUAL 0
#define RRD40_SCSI 1
#define RRD40_RM TRUE
#define RRD40_FLGS DRVFL_RMV
#define RRD40_BLK 512
#define RRD40_LBN 1160156
#define RRD40_SECTS 150 /* ??? */
#define RRD40_SURFS 1
#define RRD40_CYLS 7800 /* ??? */
#define RRD40_MANU "DEC"
#define RRD40_DESC "RRD40"
#define RRD40_REV "250D"
#define RRD42_DTYPE 10
#define RRD42_TYPE SCSI_CDROM
#define RRD42_PQUAL 0
#define RRD42_SCSI 1
#define RRD42_RM TRUE
#define RRD42_FLGS DRVFL_RMV
#define RRD42_BLK 512
#define RRD42_LBN 1160156
#define RRD42_SECTS 150 /* ??? */
#define RRD42_SURFS 1
#define RRD42_CYLS 7800 /* ??? */
#define RRD42_MANU "DEC"
#define RRD42_DESC "RRD42"
#define RRD42_REV "1.1A"
#define RRW11_DTYPE 11
#define RRW11_TYPE SCSI_WORM
#define RRW11_PQUAL 0
#define RRW11_SCSI 1
#define RRW11_RM TRUE
#define RRW11_FLGS DRVFL_RMV
#define RRW11_BLK 512
#define RRW11_LBN 1160156
#define RRW11_SECTS 150 /* ??? */
#define RRW11_SURFS 1
#define RRW11_CYLS 7800 /* ??? */
#define RRW11_MANU "DEC"
#define RRW11_DESC "RRW11"
#define RRW11_REV "1.1A"
#define CDW900_DTYPE 12
#define CDW900_TYPE SCSI_WORM
#define CDW900_PQUAL 0
#define CDW900_SCSI 1
#define CDW900_RM TRUE
#define CDW900_FLGS DRVFL_RMV
#define CDW900_BLK 512
#define CDW900_LBN 1160156
#define CDW900_SECTS 150 /* ??? */
#define CDW900_SURFS 1
#define CDW900_CYLS 7800 /* ??? */
#define CDW900_MANU "SONY"
#define CDW900_DESC "CDW-900E"
#define CDW900_REV "1.13"
#define XR1001_DTYPE 13
#define XR1001_TYPE SCSI_WORM
#define XR1001_PQUAL 0
#define XR1001_SCSI 1
#define XR1001_RM TRUE
#define XR1001_FLGS DRVFL_RMV
#define XR1001_BLK 512
#define XR1001_LBN 1160156
#define XR1001_SECTS 150 /* ??? */
#define XR1001_SURFS 1
#define XR1001_CYLS 7800 /* ??? */
#define XR1001_MANU "JVC"
#define XR1001_DESC "XR-W1001"
#define XR1001_REV "1.1A"
#define TZK50_DTYPE 14
#define TZK50_TYPE SCSI_TAPE
#define TZK50_PQUAL 0x50
#define TZK50_SCSI 1
#define TZK50_RM TRUE
#define TZK50_FLGS DRVFL_RMV
#define TZK50_BLK 512
#define TZK50_LBN 1160156
#define TZK50_SECTS 0 /* ??? */
#define TZK50_SURFS 0
#define TZK50_CYLS 0 /* ??? */
#define TZK50_MANU "DEC"
#define TZK50_DESC "TZK50"
#define TZK50_REV "1.1A"
#define TZ30_DTYPE 15
#define TZ30_TYPE SCSI_TAPE
#define TZ30_PQUAL 0x30
#define TZ30_SCSI 1
#define TZ30_RM TRUE
#define TZ30_FLGS DRVFL_RMV
#define TZ30_BLK 512
#define TZ30_LBN 1160156
#define TZ30_SECTS 0 /* ??? */
#define TZ30_SURFS 0
#define TZ30_CYLS 0 /* ??? */
#define TZ30_MANU "DEC"
#define TZ30_DESC "TZK50"
#define TZ30_REV "1.1A"
#define RZU_DTYPE 16 /* user defined */
#define RZU_TYPE SCSI_DISK
#define RZU_PQUAL 0
#define RZU_SCSI 2
#define RZU_RM TRUE
#define RZU_BLK 512
#define RZU_LBN 236328 /* from RZ23 */
#define RZU_MANU "SIMH"
#define RZU_DESC "RZUSER"
#define RZU_REV "0001"
#define RZU_MINC 10000 /* min cap LBNs */
#define RZU_MAXC 4194303 /* max cap LBNs */
#define RZU_EMAXC 2147483647 /* ext max cap */
#define RZU_TYPE SCSI_DISK
#define RZU_PQUAL 0
#define RZU_SCSI 2
#define RZU_FLGS DRVFL_RMV | DRVFL_SETSIZE
#define RZU_BLK 512
#define RZU_LBN 2500860
#define RZU_SECTS 150 /* ??? */
#define RZU_SURFS 15
#define RZU_CYLS 1200 /* ??? */
#define RZU_MANU "SIMH"
#define RZU_DESC "RZUSER"
#define RZU_REV "0001"
#define RZ_DEV(d) \
{ d##_TYPE, d##_PQUAL, d##_SCSI, d##_RM, d##_BLK, \
d##_LBN, d##_MANU, d##_DESC, d##_REV, #d }
#define RZ_SIZE(d) d##_LBN
#define RZ_DEV(d) \
{ d##_SECTS, d##_SURFS, d##_CYLS, \
d##_LBN, #d, d##_BLK, \
(DRVFL_TYPE_SCSI | d##_FLGS | \
((d##_TYPE == SCSI_CDROM) ? DRVFL_RO : 0)), \
((d##_TYPE == SCSI_TAPE) ? "MK" : "DK"), 0, 0,\
NULL, NULL, 0,0,0,0,0,0,0,0,0,0, \
d##_TYPE, d##_PQUAL, d##_SCSI, \
d##_MANU, d##_DESC, d##_REV }
#define RZ_DEV_A(d,a) \
{ d##_SECTS, d##_SURFS, d##_CYLS, \
d##_LBN, #d, d##_BLK, \
(DRVFL_TYPE_SCSI | d##_FLGS | \
((d##_TYPE == SCSI_CDROM) ? DRVFL_RO : 0)), \
((d##_TYPE == SCSI_TAPE) ? "MK" : "DK"), 0, 0,\
#a, NULL, 0,0,0,0,0,0,0,0,0,0, \
d##_TYPE, d##_PQUAL, d##_SCSI, \
d##_MANU, d##_DESC, d##_REV }
static struct scsi_dev_t rzdev_tab[] = {
static DRVTYP drv_tab[] = {
RZ_DEV (RZ23),
RZ_DEV (RZ23L),
RZ_DEV (RZ24),
@@ -234,14 +279,14 @@ static struct scsi_dev_t rzdev_tab[] = {
RZ_DEV (RZ26),
RZ_DEV (RZ26L),
RZ_DEV (RZ55),
RZ_DEV (RRD40),
RZ_DEV_A (RRD40,CDROM),
RZ_DEV (RRD42),
RZ_DEV (RRW11),
RZ_DEV (CDW900),
RZ_DEV (XR1001),
RZ_DEV (TZK50),
RZ_DEV (TZ30),
RZ_DEV (RZU),
RZ_DEV_A (RZU,RZUSER),
{ 0 }
};