PDP-11, VAX: Expand DTYPE mask size, fix RF35, add new devices to RQ sim

The disk type mask width (UNIT_W_DTYPE) was increased to six (6) bits, doubling
the possible number of disk types definable to sixty-four (64).
The RF35 was not entered in either the drv_tab or drv_types tables, causing any
set command issued for the drive type defined after the RF35 -- the RF71 through
RF73, as well as any disk defined after the RF73 -- to act incorrectly.
The ESE20 solid state disk and ESE50 series of solid state disks are
added based on simple drive geometry and size information without any parameters
for bad block management (not that it is used in the simulation anyways). The
ESE50 series drives are labelled as they are in the MSCP specification document,
the Ultrix-32 v4.5 disktab, and the Media Type noted in the "ESE50 SDI Solid
State Disk User Guide" (EK-ESE50-UG.B01):
 * ESE50-A: ESE52
 * ESE50-B: ESE56
 * ESE50-D: ESE58
The RD33 is added based on the geometry of the Microscience HH-1090 hard disk
drive, with the bad block management information calculated from the bad block
information for the other RDxx series drives.
The RX18 is added based on the geometry of the RX180 floppies in the VT-180
"Robin" CP/M system, which are noted in the MSCP specification document as a
possible device. Specific information is taken from the "VT-180 Series Technical
Manual" (EK-VT18X-TM-001).
This commit is contained in:
Christian Gauger-Cosgrove 2023-11-15 20:36:10 -05:00 committed by Paul Koning
parent b23cde9c5d
commit 2396fd0349

View file

@ -158,7 +158,7 @@ extern int32 MMR2;
#define UNIT_V_ONL (DKUF_V_UF + 0) /* online */ #define UNIT_V_ONL (DKUF_V_UF + 0) /* online */
#define UNIT_V_ATP (UNIT_V_ONL + 1) /* attn pending */ #define UNIT_V_ATP (UNIT_V_ONL + 1) /* attn pending */
#define UNIT_V_DTYPE (UNIT_V_ATP + 1) /* drive type */ #define UNIT_V_DTYPE (UNIT_V_ATP + 1) /* drive type */
#define UNIT_W_DTYPE 5 /* 5b drive type encode */ #define UNIT_W_DTYPE 6 /* 6b drive type encode */
#define UNIT_M_DTYPE ((1u << UNIT_W_DTYPE) - 1) #define UNIT_M_DTYPE ((1u << UNIT_W_DTYPE) - 1)
#define UNIT_ONL (1 << UNIT_V_ONL) #define UNIT_ONL (1 << UNIT_V_ONL)
#define UNIT_ATP (1 << UNIT_V_ATP) #define UNIT_ATP (1 << UNIT_V_ATP)
@ -248,36 +248,60 @@ struct rqpkt {
/* The RQDX3 supports multiple disk drive types (x = not implemented): /* 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
RX18 9 1 40 9 1 - 360
RX50 10 1 80 5 16 - 800 RX50 10 1 80 5 16 - 800
RX33 15 2 80 2 1 - 2400 RX33 15 2 80 2 1 - 2400
RD51 18 4 306 4 1 36*4 21600 x RD50 17 4 153 ? ? ? ? Seagate ST-506
RD31 17 4 615 4 1 3*8 41560 RD51 18 4 306 4 1 36*4 21600 Seagate ST-412
RD52 17 8 512 8 1 4*8 60480 RD31 17 4 615 4 1 3*8 41560 Seagate ST-225
RD32 17 6 820 6 1 4*8 83204 RD52 17 8 512 8 1 4*8 60480 Quantum 540, ATASI 3046, Evotek ET3540
x RD33 17 7 1170 ? ? ? 138565 RD32 17 6 820 6 1 4*8 83204 Seagate ST-251
RD53 17 8 1024 8 1 5*8 138672 RD33 17 7 1170 7 1 5*8 138565 Microscience HH-1090
RD54 17 15 1225 15 1 7*8 311200 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 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 type sec surf cyl tpg gpc RCT LBNs
x RA70 33(+1) 11 1507+ 11 1 ? 547041 RA60 42+ 6 1600 6 1 1008 400176
RA80 31 14 546 ? ? ? 237212 RA80 31 14 546 ? ? ? 237212
RA81 51(+1) 14 1258 14 1 2856 891072 RA81 51+ 14 1258 14 1 2856 891072
RA82 57(+1) 15 1435 15 1 3420 1216665 RA82 57+ 15 1435 15 1 3420 1216665
RA71 51(+1) 14 1921 14 1 1428 1367310 RA70 33+ 11 >1507 11 1 ? 547041
RA72 51(+1) 20 1921 20 1 2040 1953300 RA71 51+ 14 1921 14 1 1428 1367310
RA90 69(+1) 13 2656 13 1 1794 2376153 RA72 51+ 20 1921 20 1 2040 1953300
RA92 73(+1) 13 3101 13 1 949 2940951 RA73 70+ 21 >2667 21 1 ? 3920490
x RA73 70(+1) 21 2667+ 21 1 ? 3920490 RA90 69+ 13 2656 13 1 1794 2376153
RA92 73+ 13 3101 13 1 949 2940951
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) LESI attached RC25 disks (one removable, one fixed)
type sec surf cyl tpg gpc RCT LBNs
RC25 31 2 821 ? ? ? 50902 type sec surf cyl tpg gpc RCT LBNs
RCF25 31 2 821 ? ? ? 50902 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 Each drive can be a different type. The drive field in the
unit flags specified the drive type and thus, indirectly, unit flags specified the drive type and thus, indirectly,
@ -353,7 +377,7 @@ x RA73 70(+1) 21 2667+ 21 1 ? 3920490
#define RD31_MED 0x2564401F #define RD31_MED 0x2564401F
#define RD31_FLGS 0 #define RD31_FLGS 0
#define RD52_DTYPE 4 /* Quantum params */ #define RD52_DTYPE 4
#define RD52_SECT 17 #define RD52_SECT 17
#define RD52_SURF 8 #define RD52_SURF 8
#define RD52_CYL 512 #define RD52_CYL 512
@ -747,6 +771,117 @@ x RA73 70(+1) 21 2667+ 21 1 ? 3920490
#define RF73_MED 0x22646049 #define RF73_MED 0x22646049
#define RF73_FLGS RQDF_DSSI #define RF73_FLGS RQDF_DSSI
/* 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_DTYPE 28
#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_DTYPE 29
#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_DTYPE 30
#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_DTYPE 31
#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
/* The RD33 information comes from the Ultrix-32 v4.5 disktab file and
* from Phil Budne's "dec.disks" file.
*/
#define RD33_DTYPE 32
#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
/* 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
/* Controller parameters */ /* Controller parameters */
#define DEFAULT_CTYPE 0 #define DEFAULT_CTYPE 0
@ -760,9 +895,9 @@ x RA73 70(+1) 21 2667+ 21 1 ? 3920490
#define RUX50_UQPM 10 // this should be 10 according to the MSCP spec #define RUX50_UQPM 10 // this should be 10 according to the MSCP spec
#define RUX50_MODEL 10 #define RUX50_MODEL 10
#define UDA50_CTYPE 3 // UNIBUS SDI (RAxx) controller #define UDA50A_CTYPE 3 // UNIBUS SDI (RAxx) controller
#define UDA50_UQPM 6 // really type of UDA50A; UDA50 is 2 #define UDA50A_UQPM 6 // The new model - SIMH default model
#define UDA50_MODEL 6 #define UDA50A_MODEL 6
#define RQDX1_CTYPE 4 // QBUS RX50/RDxx controller, #define RQDX1_CTYPE 4 // QBUS RX50/RDxx controller,
#define RQDX1_UQPM 7 // first version; RQDX2 has the same id #define RQDX1_UQPM 7 // first version; RQDX2 has the same id
@ -784,6 +919,14 @@ x RA73 70(+1) 21 2667+ 21 1 ? 3920490
#define KRU50_UQPM 26 // unassigned in appendix C #define KRU50_UQPM 26 // unassigned in appendix C
#define KRU50_MODEL 26 #define KRU50_MODEL 26
#define RQDX4_CTYPE 9 // QBUS RXxx/RDxx controller
#define RQDX4_UQPM 20 // CSS, Reading Special
#define RQDX4_MODEL 20
#define UDA50_CTYPE 10 // Old UNIBUS SDI (RAxx) controller
#define UDA50_UQPM 2
#define UDA50_MODEL 2
struct drvtyp { struct drvtyp {
uint16 sect; /* sectors */ uint16 sect; /* sectors */
int32 surf; /* surfaces */ int32 surf; /* surfaces */
@ -834,9 +977,16 @@ static struct drvtyp drv_tab[] = {
RQ_DRV (RA73), RQ_DRV (RA73),
RQ_DRV (RF30), RQ_DRV (RF30),
RQ_DRV (RF31), RQ_DRV (RF31),
RQ_DRV (RF35),
RQ_DRV (RF71), RQ_DRV (RF71),
RQ_DRV (RF72), RQ_DRV (RF72),
RQ_DRV (RF73), RQ_DRV (RF73),
RQ_DRV (ESE20),
RQ_DRV (ESE52),
RQ_DRV (ESE56),
RQ_DRV (ESE58),
RQ_DRV (RD33),
RQ_DRV (RX18),
{ 0 } { 0 }
}; };
@ -868,9 +1018,16 @@ static const char *drv_types[] = {
RQ_DRV (RA73), RQ_DRV (RA73),
RQ_DRV (RF30), RQ_DRV (RF30),
RQ_DRV (RF31), RQ_DRV (RF31),
RQ_DRV (RF35),
RQ_DRV (RF71), RQ_DRV (RF71),
RQ_DRV (RF72), RQ_DRV (RF72),
RQ_DRV (RF73), RQ_DRV (RF73),
RQ_DRV (ESE20),
RQ_DRV (ESE52),
RQ_DRV (ESE56),
RQ_DRV (ESE58),
RQ_DRV (RD33),
RQ_DRV (RX18),
NULL NULL
}; };
@ -887,12 +1044,14 @@ static struct ctlrtyp ctlr_tab[] = {
{ 0, 0, "DEFAULT" }, { 0, 0, "DEFAULT" },
RQ_CTLR (KLESI), RQ_CTLR (KLESI),
RQ_CTLR (RUX50), RQ_CTLR (RUX50),
RQ_CTLR (UDA50), RQ_CTLR (UDA50A),
RQ_CTLR (RQDX1), RQ_CTLR (RQDX1),
RQ_CTLR (RQDX3), RQ_CTLR (RQDX3),
RQ_CTLR (KDA50), RQ_CTLR (KDA50),
RQ_CTLR (KRQ50), RQ_CTLR (KRQ50),
RQ_CTLR (KRU50), RQ_CTLR (KRU50),
RQ_CTLR (RQDX4),
RQ_CTLR (UDA50),
{ 0 } { 0 }
}; };
@ -1129,7 +1288,11 @@ MTAB rq_mod[] = {
&rq_set_ctype, NULL, NULL, "Set RQDX1/2 (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", { MTAB_XTD|MTAB_VDV, RQDX3_CTYPE, NULL, "RQDX3",
&rq_set_ctype, NULL, NULL, "Set RQDX3 (QBUS RX50/RDnn) Controller Type" }, &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", { 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" }, &rq_set_ctype, NULL, NULL, "Set UDA50A (UNIBUS SDI RAnn) Controller Type" },
{ MTAB_XTD|MTAB_VDV, KDA50_CTYPE, NULL, "KDA50", { MTAB_XTD|MTAB_VDV, KDA50_CTYPE, NULL, "KDA50",
&rq_set_ctype, NULL, NULL, "Set KDA50 (QBUS SDI RAnn) Controller Type" }, &rq_set_ctype, NULL, NULL, "Set KDA50 (QBUS SDI RAnn) Controller Type" },
@ -1143,6 +1306,8 @@ MTAB rq_mod[] = {
&rq_set_ctype, NULL, NULL, "Set RUX50 (UNIBUS RX50) Controller Type" }, &rq_set_ctype, NULL, NULL, "Set RUX50 (UNIBUS RX50) Controller Type" },
{ MTAB_XTD|MTAB_VUN|MTAB_NMO, 0, "UNITQ", NULL, { MTAB_XTD|MTAB_VUN|MTAB_NMO, 0, "UNITQ", NULL,
NULL, &rq_show_unitq, NULL, "Display unit queue" }, NULL, &rq_show_unitq, NULL, "Display unit queue" },
{ MTAB_XTD|MTAB_VUN, RX18_DTYPE, NULL, "RX18",
&rq_set_type, NULL, NULL, "Set RX18 Disk Type" },
{ MTAB_XTD|MTAB_VUN, RX50_DTYPE, NULL, "RX50", { MTAB_XTD|MTAB_VUN, RX50_DTYPE, NULL, "RX50",
&rq_set_type, NULL, NULL, "Set RX50 Disk Type" }, &rq_set_type, NULL, NULL, "Set RX50 Disk Type" },
{ MTAB_XTD|MTAB_VUN, RX33_DTYPE, NULL, "RX33", { MTAB_XTD|MTAB_VUN, RX33_DTYPE, NULL, "RX33",
@ -1151,6 +1316,8 @@ MTAB rq_mod[] = {
&rq_set_type, NULL, NULL, "Set RD31 Disk Type" }, &rq_set_type, NULL, NULL, "Set RD31 Disk Type" },
{ MTAB_XTD|MTAB_VUN, RD32_DTYPE, NULL, "RD32", { MTAB_XTD|MTAB_VUN, RD32_DTYPE, NULL, "RD32",
&rq_set_type, NULL, NULL, "Set RD32 Disk Type" }, &rq_set_type, NULL, NULL, "Set RD32 Disk Type" },
{ MTAB_XTD|MTAB_VUN, RD33_DTYPE, NULL, "RD33",
&rq_set_type, NULL, NULL, "Set RD33 Disk Type" },
{ MTAB_XTD|MTAB_VUN, RD51_DTYPE, NULL, "RD51", { MTAB_XTD|MTAB_VUN, RD51_DTYPE, NULL, "RD51",
&rq_set_type, NULL, NULL, "Set RD51 Disk Type" }, &rq_set_type, NULL, NULL, "Set RD51 Disk Type" },
{ MTAB_XTD|MTAB_VUN, RD52_DTYPE, NULL, "RD52", { MTAB_XTD|MTAB_VUN, RD52_DTYPE, NULL, "RD52",
@ -1159,16 +1326,18 @@ MTAB rq_mod[] = {
&rq_set_type, NULL, NULL, "Set RD53 Disk Type" }, &rq_set_type, NULL, NULL, "Set RD53 Disk Type" },
{ MTAB_XTD|MTAB_VUN, RD54_DTYPE, NULL, "RD54", { MTAB_XTD|MTAB_VUN, RD54_DTYPE, NULL, "RD54",
&rq_set_type, NULL, NULL, "Set RD54 Disk Type" }, &rq_set_type, NULL, NULL, "Set RD54 Disk Type" },
{ MTAB_XTD|MTAB_VUN, RRD40_DTYPE, NULL, "RRD40",
&rq_set_type, NULL, NULL, "Set RRD40 Disk Type" },
{ MTAB_XTD|MTAB_VUN, RA60_DTYPE, NULL, "RA60", { MTAB_XTD|MTAB_VUN, RA60_DTYPE, NULL, "RA60",
&rq_set_type, NULL, NULL, "Set RA60 Disk Type" }, &rq_set_type, NULL, NULL, "Set RA60 Disk Type" },
{ MTAB_XTD|MTAB_VUN, RA80_DTYPE, NULL, "RA80",
&rq_set_type, NULL, NULL, "Set RA80 Disk Type" },
{ MTAB_XTD|MTAB_VUN, RA81_DTYPE, NULL, "RA81", { MTAB_XTD|MTAB_VUN, RA81_DTYPE, NULL, "RA81",
&rq_set_type, NULL, NULL, "Set RA81 Disk Type" }, &rq_set_type, NULL, NULL, "Set RA81 Disk Type" },
{ MTAB_XTD|MTAB_VUN, RA82_DTYPE, NULL, "RA82", { MTAB_XTD|MTAB_VUN, RA82_DTYPE, NULL, "RA82",
&rq_set_type, NULL, NULL, "Set RA82 Disk Type" }, &rq_set_type, NULL, NULL, "Set RA82 Disk Type" },
{ MTAB_XTD|MTAB_VUN, RRD40_DTYPE, NULL, "RRD40", { MTAB_XTD|MTAB_VUN, ESE20_DTYPE, NULL, "ESE20",
&rq_set_type, NULL, NULL, "Set RRD40 Disk Type" }, &rq_set_type, NULL, NULL, "Set ESE20 Disk Type" },
{ MTAB_XTD|MTAB_VUN, RRD40_DTYPE, NULL, "CDROM",
&rq_set_type, NULL, NULL, "Set CDROM Disk Type" },
{ MTAB_XTD|MTAB_VUN, RA70_DTYPE, NULL, "RA70", { MTAB_XTD|MTAB_VUN, RA70_DTYPE, NULL, "RA70",
&rq_set_type, NULL, NULL, "Set RA70 Disk Type" }, &rq_set_type, NULL, NULL, "Set RA70 Disk Type" },
{ MTAB_XTD|MTAB_VUN, RA71_DTYPE, NULL, "RA71", { MTAB_XTD|MTAB_VUN, RA71_DTYPE, NULL, "RA71",
@ -1181,12 +1350,16 @@ MTAB rq_mod[] = {
&rq_set_type, NULL, NULL, "Set RA90 Disk Type" }, &rq_set_type, NULL, NULL, "Set RA90 Disk Type" },
{ MTAB_XTD|MTAB_VUN, RA92_DTYPE, NULL, "RA92", { MTAB_XTD|MTAB_VUN, RA92_DTYPE, NULL, "RA92",
&rq_set_type, NULL, NULL, "Set RA92 Disk Type" }, &rq_set_type, NULL, NULL, "Set RA92 Disk Type" },
{ MTAB_XTD|MTAB_VUN, ESE52_DTYPE, NULL, "ESE52",
&rq_set_type, NULL, NULL, "Set ESE52 Disk Type" },
{ MTAB_XTD|MTAB_VUN, ESE56_DTYPE, NULL, "ESE56",
&rq_set_type, NULL, NULL, "Set ESE56 Disk Type" },
{ MTAB_XTD|MTAB_VUN, ESE58_DTYPE, NULL, "ESE58",
&rq_set_type, NULL, NULL, "Set ESE58 Disk Type" },
{ MTAB_XTD|MTAB_VUN, RC25_DTYPE, NULL, "RC25", { MTAB_XTD|MTAB_VUN, RC25_DTYPE, NULL, "RC25",
&rq_set_type, NULL, NULL, "Set RC25 Disk Type" }, &rq_set_type, NULL, NULL, "Set RC25 Disk Type" },
{ MTAB_XTD|MTAB_VUN, RCF25_DTYPE, NULL, "RCF25", { MTAB_XTD|MTAB_VUN, RCF25_DTYPE, NULL, "RCF25",
&rq_set_type, NULL, NULL, "Set RCF25 Disk Type" }, &rq_set_type, NULL, NULL, "Set RCF25 Disk Type" },
{ MTAB_XTD|MTAB_VUN, RA80_DTYPE, NULL, "RA80",
&rq_set_type, NULL, NULL, "Set RA80 Disk Type" },
{ MTAB_XTD|MTAB_VUN, RF30_DTYPE, NULL, "RF30", { MTAB_XTD|MTAB_VUN, RF30_DTYPE, NULL, "RF30",
&rq_set_type, NULL, NULL, "Set RF30 Disk Type" }, &rq_set_type, NULL, NULL, "Set RF30 Disk Type" },
{ MTAB_XTD|MTAB_VUN, RF31_DTYPE, NULL, "RF31", { MTAB_XTD|MTAB_VUN, RF31_DTYPE, NULL, "RF31",
@ -1199,6 +1372,8 @@ MTAB rq_mod[] = {
&rq_set_type, NULL, NULL, "Set RF72 Disk Type" }, &rq_set_type, NULL, NULL, "Set RF72 Disk Type" },
{ MTAB_XTD|MTAB_VUN, RF73_DTYPE, NULL, "RF73", { MTAB_XTD|MTAB_VUN, RF73_DTYPE, NULL, "RF73",
&rq_set_type, NULL, NULL, "Set RF73 Disk Type" }, &rq_set_type, NULL, NULL, "Set RF73 Disk Type" },
{ MTAB_XTD|MTAB_VUN, RRD40_DTYPE, NULL, "CDROM",
&rq_set_type, NULL, NULL, "Set CDROM Disk Type" },
{ MTAB_XTD|MTAB_VUN|MTAB_VALR, RA8U_DTYPE, NULL, "RAUSER=SizeInMB", { MTAB_XTD|MTAB_VUN|MTAB_VALR, RA8U_DTYPE, NULL, "RAUSER=SizeInMB",
&rq_set_type, NULL, NULL, "Set RAUSER Disk Type and its size" }, &rq_set_type, NULL, NULL, "Set RAUSER Disk Type and its size" },
{ MTAB_XTD|MTAB_VUN, RA8U_DTYPE, NULL, "RA8U", { MTAB_XTD|MTAB_VUN, RA8U_DTYPE, NULL, "RA8U",
@ -3107,7 +3282,7 @@ if (cidx < 0) /* not found??? */
cp = rq_ctxmap[cidx]; /* get context */ cp = rq_ctxmap[cidx]; /* get context */
cp->cnum = cidx; /* init index */ cp->cnum = cidx; /* init index */
if (cp->ctype == DEFAULT_CTYPE) if (cp->ctype == DEFAULT_CTYPE)
cp->ctype = (UNIBUS ? UDA50_CTYPE : cp->ctype = (UNIBUS ? UDA50A_CTYPE :
MICROVAX1 ? RQDX1_CTYPE : RQDX3_CTYPE); MICROVAX1 ? RQDX1_CTYPE : RQDX3_CTYPE);
if (!plugs_inited ) { if (!plugs_inited ) {
@ -3423,11 +3598,12 @@ return SCPE_OK;
t_stat rq_help (FILE *st, DEVICE *dptr, UNIT *uptr, int32 flag, const char *cptr) 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); fprintf (st, "UDA50A MSCP Disk Controller (%s)\n\n", dptr->name);
fprintf (st, "The simulator implements four MSCP disk controllers, RQ, RQB, RQC, RQD.\n"); 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, "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, "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, RQDX4, KDA50, UDA50, UDA50A, KRQ50,\n");
fprintf (st, "KRU50, KLESI or RUX50.\n");
fprintf (st, "RQ options include the ability to set units write enabled or write locked,\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"); fprintf (st, "and to set the drive type to one of many disk types:\n");
fprint_set_help (st, dptr); fprint_set_help (st, dptr);