1
0
mirror of https://github.com/simh/simh.git synced 2026-01-11 23:52:58 +00:00

PDP11, VAX: Add MSCP RD33 and various SDI ESE SSD disk types to RQ devices

This commit is contained in:
Christian Gauger-Cosgrove 2023-11-16 10:32:15 -10:00 committed by Mark Pizzolato
parent 2c0b465275
commit 42d6f414fc

View File

@ -241,23 +241,25 @@ struct rqpkt {
/* The RQDX3 supports multiple disk drive types (x = not implemented):
type sec surf cyl tpg gpc RCT LBNs
type sec surf cyl tpg gpc RCT LBNs notes
type sec surf cyl tpg gpc RCT LBNs notes
RX18 9 1 40 9 1 - 360
RX50 10 1 80 5 16 - 800
RX33 15 2 80 2 1 - 2400
RD51 18 4 306 4 1 36*4 21600
RD31 17 4 615 4 1 3*8 41560
RD52 17 8 512 8 1 4*8 60480
RD32 17 6 820 6 1 4*8 83204
x RD33 17 7 1170 ? ? ? 138565
RD53 17 8 1024 8 1 5*8 138672
RD54 17 15 1225 15 1 7*8 311200
x RD50 17 4 153 ? ? ? ? Seagate ST-506
RD51 18 4 306 4 1 36*4 21600 Seagate ST-412
RD31 17 4 615 4 1 3*8 41560 Seagate ST-225
RD52 17 8 512 8 1 4*8 60480 Quantum 540, ATASI 3046, Evotek ET3540
RD32 17 6 820 6 1 4*8 83204 Seagate ST-251
RD33 17 7 1170 ? ? ? 138565 Microscience HH-1090
RD53 17 8 1024 8 1 5*8 138672 Micropolis 1325, Micropolis 1335
RD54 17 15 1225 15 1 7*8 311200 Maxtor XT-2190
The simulator also supports larger drives that only existed
on SDI controllers.
on SDI controllers (UDA50/UDA50A, KDA50, KDB50).
RA60 42(+1) 6 1600 6 1 1008 400176
x RA70 33(+1) 11 1507+ 11 1 ? 547041
RA70 33(+1) 11 1507+ 11 1 ? 547041
RA80 31 14 559 ? ? ? 237212
RA81 51(+1) 14 1258 14 1 2856 891072
RA82 57(+1) 15 1435 15 1 3420 1216665
@ -265,12 +267,33 @@ x RA70 33(+1) 11 1507+ 11 1 ? 547041
RA72 51(+1) 20 1921 20 1 2040 1953300
RA90 69(+1) 13 2656 13 1 1794 2376153
RA92 73(+1) 13 3101 13 1 949 2940951
x RA73 70(+1) 21 2667+ 21 1 ? 3920490
RA73 70(+1) 21 2667+ 21 1 ? 3920490
ESE20 4 128 480 ? ? ? 245760
ESE52 4 128 465 ? ? ? 238080
ESE56 4 128 465 ? ? ? 1196544
ESE58 4 128 465 ? ? ? 1915392
LESI attached RC25 disks (one removable, one fixed)
type sec surf cyl tpg gpc RCT LBNs
RC25 31 2 821 ? ? ? 50902
RCF25 31 2 821 ? ? ? 50902
type sec surf cyl tpg gpc RCT LBNs
RC25 31 2 821 ? ? ? 50902
RCF25 31 2 821 ? ? ? 50902
DSSI attached ISEs, as the simulation currently stands the DSSI
devices are accessed in a pseudo-KFQSA manner -- the ISEs are
accessed as Storage System Port (SSP) devices, like the RQDX3 or
UDA50/KDA50; however the exact function of the KFQSA is not, neither
are the SHAC or EDA640 controllers.
type sec surf cyl tpg gpc RCT LBNs
RF30 37 6 1320 ? ? ? 293040
RF31 50 8 1861 ? ? ? 744400
RF35 57 14 1861 ? ? ? 1485078
x RF36 ? ? ? ? ? ? ?
RF71 37 16 1320 ? ? ? 781440
RF72 50 21 1861 ? ? ? 1954050
RF73 71 21 2621 ? ? ? 3907911
x RF74 ? ? ? ? ? ? ?
x RF75 ? ? ? ? ? ? ?
Each drive can be a different type. The drive field in the
unit flags specified the drive type and thus, indirectly,
@ -285,6 +308,27 @@ x RA73 70(+1) 21 2667+ 21 1 ? 3920490
#define RQDF_RC DRVFL_TYPE_RC /* RC drive */
/* The RX18 information comes from the VT-180 Series Technical Manual
* (EK-VT18X-TM-001) and from the MSCP specification document as well as
* references in the RSX-11/M+ documentation to the RX18 existing as a
* device attachable to the RUX50.
*/
#define RX18_DTYPE 33
#define RX18_SECT 9
#define RX18_SURF 1
#define RX18_CYL 40
#define RX18_TPG RD33_SURF
#define RX18_GPC 1
#define RX18_XBN 0
#define RX18_DBN 0
#define RX18_LBN 360
#define RX18_RCTS 0
#define RX18_RCTC 0
#define RX18_RBN 0
#define RX18_MOD 17
#define RX18_MED 0x25658012
#define RX18_FLGS RQDF_RMV
#define RX50_SECT 10
#define RX50_SURF 1
#define RX50_CYL 80
@ -541,6 +585,24 @@ x RA73 70(+1) 21 2667+ 21 1 ? 3920490
#define RD32_MED 0x25644020
#define RD32_FLGS RQDF_MFM
/* The RD33 information comes from the Ultrix-32 v4.5 disktab file and
* from Phil Budne's "dec.disks" file.
*/
#define RD33_SECT 17
#define RD33_SURF 7
#define RD33_CYL 1170
#define RD33_TPG RD33_SURF
#define RD33_GPC 1
#define RD33_XBN 54
#define RD33_DBN 65
#define RD33_LBN 138635
#define RD33_RCTS 5
#define RD33_RCTC 8
#define RD33_RBN 317
#define RD33_MOD 24
#define RD33_MED 0x25644021
#define RD33_FLGS 0
#define RC25_SECT 50 /* */
#define RC25_SURF 8
#define RC25_CYL 1260 /* */
@ -713,6 +775,76 @@ x RA73 70(+1) 21 2667+ 21 1 ? 3920490
#define RF73_MED 0x22646049
#define RF73_FLGS RQDF_DSSI /* DSSI drive */
/* The ESE20 and the ESE5x information comes from the "ESE50 Solid State
* Disk User Guide" (EK-ESE50-UG.B01), and the "ESE20 Solid State Disk"
* brochure.
*
* The ESE5x models are named using their "media name" from the MSCP
* reference document.
*/
#define ESE20_SECT 4
#define ESE20_SURF 128
#define ESE20_CYL 480
#define ESE20_TPG ESE20_SURF
#define ESE20_GPC 1
#define ESE20_XBN 0
#define ESE20_DBN 0
#define ESE20_LBN 245760
#define ESE20_RCTS 0
#define ESE20_RCTC 1
#define ESE20_RBN 0
#define ESE20_MOD 25
#define ESE20_MED 0x254B3294
#define ESE20_FLGS RQDF_SDI
#define ESE52_SECT 4
#define ESE52_SURF 128
#define ESE52_CYL 465
#define ESE52_TPG ESE52_SURF
#define ESE52_GPC 1
#define ESE52_XBN 0
#define ESE52_DBN 0
#define ESE52_LBN 238080
#define ESE52_RCTS 0
#define ESE52_RCTC 1
#define ESE52_RBN 0
#define ESE52_MOD 31
#define ESE52_MED 0x254B32B4
#define ESE52_FLGS RQDF_SDI
#define ESE56_SECT 4
#define ESE56_SURF 128
#define ESE56_CYL 2337
#define ESE56_TPG ESE56_SURF
#define ESE56_GPC 1
#define ESE56_XBN 0
#define ESE56_DBN 0
#define ESE56_LBN 1196544
#define ESE56_RCTS 0
#define ESE56_RCTC 1
#define ESE56_RBN 0
#define ESE56_MOD 48
#define ESE56_MED 0x254B32B8
#define ESE56_FLGS RQDF_SDI
#define ESE58_SECT 4
#define ESE58_SURF 128
#define ESE58_CYL 3741
#define ESE58_TPG ESE58_SURF
#define ESE58_GPC 1
#define ESE58_XBN 0
#define ESE58_DBN 0
#define ESE58_LBN 1915392
#define ESE58_RCTS 0
#define ESE58_RCTC 1
#define ESE58_RBN 0
#define ESE58_MOD 49
#define ESE58_MED 0x254B32BA
#define ESE58_FLGS RQDF_SDI
/* Controller parameters */
#define CBUS_QBUS 1
#define CBUS_UNIBUS 2
@ -730,10 +862,10 @@ x RA73 70(+1) 21 2667+ 21 1 ? 3920490
#define RUX50_MODEL 10
#define RUX50_BUSES CBUS_UNIBUS
#define UDA50_CTYPE 3 // UNIBUS SDI (RAxx) controller
#define UDA50_UQPM 6
#define UDA50_MODEL 6
#define UDA50_BUSES CBUS_UNIBUS
#define UDA50A_CTYPE 3 // UNIBUS SDI (RAxx) controller
#define UDA50A_UQPM 6
#define UDA50A_MODEL 6
#define UDA50A_BUSES CBUS_UNIBUS
#define RQDX3_CTYPE 4 // QBUS RX50/RDxx controller
#define RQDX3_UQPM 19
@ -765,6 +897,15 @@ x RA73 70(+1) 21 2667+ 21 1 ? 3920490
#define KDB50_MODEL 18
#define KDB50_BUSES CBUS_QBUS
#define RQDX4_CTYPE 10 // QBUS RXxx/RDxx controller
#define RQDX4_UQPM 20 // CSS, Reading Special
#define RQDX4_MODEL 20
#define RQDX4_BUSES CBUS_QBUS
#define UDA50_CTYPE 11 // Old UNIBUS SDI (RAxx) controller
#define UDA50_UQPM 2
#define UDA50_MODEL 2
#define UDA50_BUSES CBUS_UNIBUS
#define RQ_DRV(d) \
@ -782,10 +923,12 @@ x RA73 70(+1) 21 2667+ 21 1 ? 3920490
#define RQ_SIZE(d) d##_LBN
static DRVTYP drv_tab[] = {
RQ_DRV (RX18),
RQ_DRV (RX50),
RQ_DRV (RX33),
RQ_DRV (RD51),
RQ_DRV (RD31),
RQ_DRV (RD33),
RQ_DRV (RD52),
RQ_DRV (RD53),
RQ_DRV (RD54),
@ -808,6 +951,10 @@ static DRVTYP drv_tab[] = {
RQ_DRV (RF71),
RQ_DRV (RF72),
RQ_DRV (RF73),
RQ_DRV (ESE20),
RQ_DRV (ESE52),
RQ_DRV (ESE56),
RQ_DRV (ESE58),
RQ_DRV_A (RA8U, RAUSER),
{ 0 }
};
@ -826,13 +973,15 @@ static struct ctlrtyp ctlr_tab[] = {
{ 0, 0, 0, "DEFAULT" },
RQ_CTLR (KLESI),
RQ_CTLR (RUX50),
RQ_CTLR (UDA50),
RQ_CTLR (UDA50A),
RQ_CTLR (RQDX3),
RQ_CTLR (KDA50),
RQ_CTLR (KRQ50),
RQ_CTLR (KRU50),
RQ_CTLR (RQDX1),
RQ_CTLR (KDB50),
RQ_CTLR (RQDX4),
RQ_CTLR (UDA50),
{ 0 }
};
@ -1054,13 +1203,19 @@ MTAB rq_mod[] = {
{ MTAB_XTD|MTAB_VDV|MTAB_NMO, RQ_SH_ALL, "ALL", NULL,
NULL, &rq_show_ctrl, NULL, "Display complete controller state" },
{ MTAB_XTD|MTAB_VDV, RQDX1_CTYPE, NULL, "RQDX1",
&rq_set_ctype, NULL, NULL, "Set RQDX1 (QBUS RX50/RDnn) Controller Type" },
&rq_set_ctype, NULL, NULL, "Set RQDX1/2 (QBUS RX50/RDnn) Controller Type" },
{ MTAB_XTD|MTAB_VDV, RQDX3_CTYPE, NULL, "RQDX3",
&rq_set_ctype, NULL, NULL, "Set RQDX3 (QBUS RX50/RDnn) Controller Type" },
{ MTAB_XTD|MTAB_VDV, RQDX4_CTYPE, NULL, "RQDX4",
&rq_set_ctype, NULL, NULL, "Set RQDX4 (QBUS RX50/RDnn) Controller Type" },
{ MTAB_XTD|MTAB_VDV, UDA50_CTYPE, NULL, "UDA50",
&rq_set_ctype, NULL, NULL, "Set UDA50 (UNIBUS SDI RAnn) Controller Type" },
{ MTAB_XTD|MTAB_VDV, UDA50A_CTYPE, NULL, "UDA50A",
&rq_set_ctype, NULL, NULL, "Set UDA50A (UNIBUS SDI RAnn) Controller Type" },
{ MTAB_XTD|MTAB_VDV, KDA50_CTYPE, NULL, "KDA50",
&rq_set_ctype, NULL, NULL, "Set KDA50 (QBUS SDI RAnn) Controller Type" },
{ MTAB_XTD|MTAB_VDV, KDB50_CTYPE, NULL, "KDB50",
&rq_set_ctype, NULL, NULL, "Set KDB50 (QBUS SDI RAnn) Controller Type" },
{ MTAB_XTD|MTAB_VDV, KRQ50_CTYPE, NULL, "KRQ50",
&rq_set_ctype, NULL, NULL, "Set KRQ50 (QBUS CDROM) Controller Type" },
{ MTAB_XTD|MTAB_VDV, KRU50_CTYPE, NULL, "KRU50",
@ -2834,7 +2989,7 @@ MSC *cp = rq_ctxmap[uptr->cnum];
if (val < 0)
return SCPE_ARG;
if ((ctlr_tab[val].buses & (UNIBUS? CBUS_UNIBUS : CBUS_QBUS)) == 0)
return sim_messagef (SCPE_ARG, "%s: %s controller not valid on a %s system\n", uptr->dptr->name, ctlr_tab[val].name, (UNIBUS? "Unibus" : "Qbus" ));
return sim_messagef (SCPE_ARG, "%s: %s controller not valid on a %s system\n", uptr->dptr->name, ctlr_tab[val].name, (UNIBUS? "Unibus" : "Qbus" ));
cp->ctype = val;
return SCPE_OK;
}
@ -2908,7 +3063,7 @@ if (cp->ctype == DEFAULT_CTYPE)
#if defined (VAX_610)
cp->ctype = RQDX1_CTYPE;
#else
cp->ctype = (UNIBUS? UDA50_CTYPE : RQDX3_CTYPE);
cp->ctype = (UNIBUS? UDA50A_CTYPE : RQDX3_CTYPE);
#endif
if ((ctlr_tab[cp->ctype].buses & (UNIBUS? CBUS_UNIBUS : CBUS_QBUS)) == 0) {
@ -3235,11 +3390,14 @@ return SCPE_OK;
t_stat rq_help (FILE *st, DEVICE *dptr, UNIT *uptr, int32 flag, const char *cptr)
{
fprintf (st, "UDA50 MSCP Disk Controller (%s)\n\n", dptr->name);
MSC *cp = rq_ctxmap[dptr->units->cnum];
fprintf (st, "%s MSCP Disk Controller (%s)\n\n", ctlr_tab[cp->ctype].name, dptr->name);
fprintf (st, "The simulator implements four MSCP disk controllers, RQ, RQB, RQC, RQD.\n");
fprintf (st, "Initially, RQB, RQC, and RQD are disabled. Each RQ controller simulates\n");
fprintf (st, "an MSCP disk controller with four drives. The MSCP controller type can be\n");
fprintf (st, "specified as one of RQDX1, RQDX3, UDA50, KDA50, KRQ50, KLESI or RUX50.\n");
fprintf (st, "specified as one of RQDX1, RQDX3, UDA50A, UDA50, KDA50, KRQ50, KRU50,\n");
fprintf (st, "KDB50, RQDX4 or RUX50.\n\n");
fprintf (st, "RQ options include the ability to set units write enabled or write locked,\n");
fprintf (st, "and to set the drive type to one of many disk types:\n");
fprint_set_help (st, dptr);