PDP11, Unibus VAX: DEC standard 144 corrections and RP device update

- Added a specific drive type RP05 which is the same size as the RP04
  but can be distringuished by OS software.
- Restrict SET rpn BADBLOCK to only disk types which actually supported
  the DEC Standard 144 bad block table.
- Fixed typo's in help and comments about DEC 044 vs DEC 144 and also
  in pdp11_doc and vax780_doc documentation files.

As discussed in #1065
This commit is contained in:
Mark Pizzolato 2021-08-08 11:39:13 -07:00
parent fdd871da65
commit af0f0300f8
5 changed files with 40 additions and 16 deletions

View file

@ -1647,7 +1647,7 @@ t_stat hk_help (FILE *st, DEVICE *dptr, UNIT *uptr, int32 flag, const char *cptr
fprintf (st, "RK611/RK06,RK07 Cartridge Disk (HK)\n\n"); fprintf (st, "RK611/RK06,RK07 Cartridge Disk (HK)\n\n");
fprintf (st, "RK611 options include the ability to set units write enabled or write locked,\n"); fprintf (st, "RK611 options include the ability to set units write enabled or write locked,\n");
fprintf (st, "to set the drive type to RK06, RK07, or autosize, and to write a DEC standard\n"); fprintf (st, "to set the drive type to RK06, RK07, or autosize, and to write a DEC standard\n");
fprintf (st, "044 compliant bad block table on the last track:\n\n"); fprintf (st, "144 compliant bad block table on the last track:\n\n");
fprint_set_help (st, dptr); fprint_set_help (st, dptr);
fprint_show_help (st, dptr); fprint_show_help (st, dptr);
fprintf (st, "\nThe type options can be used only when a unit is not attached to a file.\n"); fprintf (st, "\nThe type options can be used only when a unit is not attached to a file.\n");

View file

@ -1269,7 +1269,7 @@ t_stat rl_help (FILE *st, DEVICE *dptr, UNIT *uptr, int32 flag, const char *cptr
fprintf (st, "RL11/RL01/RL02 Cartridge Disk (RL)\n\n"); fprintf (st, "RL11/RL01/RL02 Cartridge Disk (RL)\n\n");
fprintf (st, "RL11 options include the ability to set units write enabled or write locked,\n"); fprintf (st, "RL11 options include the ability to set units write enabled or write locked,\n");
fprintf (st, "to set the drive type to RL01, RL02, or autosize, and to write a DEC standard\n"); fprintf (st, "to set the drive type to RL01, RL02, or autosize, and to write a DEC standard\n");
fprintf (st, "044 compliant bad block table on the last track:\n\n"); fprintf (st, "144 compliant bad block table on the last track:\n\n");
fprint_set_help (st, dptr); fprint_set_help (st, dptr);
fprint_show_help (st, dptr); fprint_show_help (st, dptr);
fprintf (st, "\nThe type options can be used only when a unit is not attached to a file.\n"); fprintf (st, "\nThe type options can be used only when a unit is not attached to a file.\n");

View file

@ -472,6 +472,7 @@ BITFIELD *rp_reg_bits[] = {
RM02/3 32 5 823 =67MB RM02/3 32 5 823 =67MB
RP04/5 22 19 411 =88MB RP04/5 22 19 411 =88MB
RM80 31 14 559 =124MB RM80 31 14 559 =124MB
RP05 22 19 411 =88MB
RP06 22 19 815 =176MB RP06 22 19 815 =176MB
RM05 32 19 823 =256MB RM05 32 19 823 =256MB
RP07 50 32 630 =516MB RP07 50 32 630 =516MB
@ -487,6 +488,7 @@ BITFIELD *rp_reg_bits[] = {
#define RM03_SECT 32 #define RM03_SECT 32
#define RM03_SURF 5 #define RM03_SURF 5
#define RM03_CYL 823 #define RM03_CYL 823
#define RM03_DEC144 1
#define RM03_DEV 020024 #define RM03_DEV 020024
#define RM03_SIZE (RM03_SECT * RM03_SURF * RM03_CYL * RP_NUMWD) #define RM03_SIZE (RM03_SECT * RM03_SURF * RM03_CYL * RP_NUMWD)
@ -494,34 +496,47 @@ BITFIELD *rp_reg_bits[] = {
#define RP04_SECT 22 #define RP04_SECT 22
#define RP04_SURF 19 #define RP04_SURF 19
#define RP04_CYL 411 #define RP04_CYL 411
#define RP04_DEC144 0
#define RP04_DEV 020020 #define RP04_DEV 020020
#define RP04_SIZE (RP04_SECT * RP04_SURF * RP04_CYL * RP_NUMWD) #define RP04_SIZE (RP04_SECT * RP04_SURF * RP04_CYL * RP_NUMWD)
#define RM80_DTYPE 2 #define RP05_DTYPE 2
#define RP05_SECT 22
#define RP05_SURF 19
#define RP05_CYL 411
#define RP05_DEC144 0
#define RP05_DEV 020021
#define RP05_SIZE (RP05_SECT * RP05_SURF * RP05_CYL * RP_NUMWD)
#define RM80_DTYPE 3
#define RM80_SECT 31 #define RM80_SECT 31
#define RM80_SURF 14 #define RM80_SURF 14
#define RM80_CYL 559 #define RM80_CYL 559
#define RM80_DEC144 1
#define RM80_DEV 020026 #define RM80_DEV 020026
#define RM80_SIZE (RM80_SECT * RM80_SURF * RM80_CYL * RP_NUMWD) #define RM80_SIZE (RM80_SECT * RM80_SURF * RM80_CYL * RP_NUMWD)
#define RP06_DTYPE 3 #define RP06_DTYPE 4
#define RP06_SECT 22 #define RP06_SECT 22
#define RP06_SURF 19 #define RP06_SURF 19
#define RP06_CYL 815 #define RP06_CYL 815
#define RP06_DEC144 0
#define RP06_DEV 020022 #define RP06_DEV 020022
#define RP06_SIZE (RP06_SECT * RP06_SURF * RP06_CYL * RP_NUMWD) #define RP06_SIZE (RP06_SECT * RP06_SURF * RP06_CYL * RP_NUMWD)
#define RM05_DTYPE 4 #define RM05_DTYPE 5
#define RM05_SECT 32 #define RM05_SECT 32
#define RM05_SURF 19 #define RM05_SURF 19
#define RM05_CYL 823 #define RM05_CYL 823
#define RM05_DEC144 1
#define RM05_DEV 020027 #define RM05_DEV 020027
#define RM05_SIZE (RM05_SECT * RM05_SURF * RM05_CYL * RP_NUMWD) #define RM05_SIZE (RM05_SECT * RM05_SURF * RM05_CYL * RP_NUMWD)
#define RP07_DTYPE 5 #define RP07_DTYPE 6
#define RP07_SECT 50 #define RP07_SECT 50
#define RP07_SURF 32 #define RP07_SURF 32
#define RP07_CYL 630 #define RP07_CYL 630
#define RP07_DEC144 1
#define RP07_DEV 020042 #define RP07_DEV 020042
#define RP07_SIZE (RP07_SECT * RP07_SURF * RP07_CYL * RP_NUMWD) #define RP07_SIZE (RP07_SECT * RP07_SURF * RP07_CYL * RP_NUMWD)
@ -531,17 +546,19 @@ struct drvtyp {
int32 cyl; /* cylinders */ int32 cyl; /* cylinders */
int32 size; /* #blocks */ int32 size; /* #blocks */
int32 devtype; /* device type */ int32 devtype; /* device type */
int32 dec144; /* DEC Std 144 bad block */
int32 ctrl; /* ctrl type */ int32 ctrl; /* ctrl type */
const char *name; /* device type name */ const char *name; /* device type name */
}; };
static struct drvtyp drv_tab[] = { static struct drvtyp drv_tab[] = {
{ RM03_SECT, RM03_SURF, RM03_CYL, RM03_SIZE, RM03_DEV, RM_CTRL, "RM03" }, { RM03_SECT, RM03_SURF, RM03_CYL, RM03_SIZE, RM03_DEV, RM03_DEC144, RM_CTRL, "RM03" },
{ RP04_SECT, RP04_SURF, RP04_CYL, RP04_SIZE, RP04_DEV, RP_CTRL, "RP04" }, { RP04_SECT, RP04_SURF, RP04_CYL, RP04_SIZE, RP04_DEV, RP04_DEC144, RP_CTRL, "RP04" },
{ RM80_SECT, RM80_SURF, RM80_CYL, RM80_SIZE, RM80_DEV, RM_CTRL, "RM80" }, { RP05_SECT, RP05_SURF, RP05_CYL, RP05_SIZE, RP05_DEV, RP05_DEC144, RP_CTRL, "RP05" },
{ RP06_SECT, RP06_SURF, RP06_CYL, RP06_SIZE, RP06_DEV, RP_CTRL, "RP06" }, { RM80_SECT, RM80_SURF, RM80_CYL, RM80_SIZE, RM80_DEV, RM80_DEC144, RM_CTRL, "RM80" },
{ RM05_SECT, RM05_SURF, RM05_CYL, RM05_SIZE, RM05_DEV, RM_CTRL, "RM05" }, { RP06_SECT, RP06_SURF, RP06_CYL, RP06_SIZE, RP06_DEV, RP06_DEC144, RP_CTRL, "RP06" },
{ RP07_SECT, RP07_SURF, RP07_CYL, RP07_SIZE, RP07_DEV, RM_CTRL, "RP07" }, { RM05_SECT, RM05_SURF, RM05_CYL, RM05_SIZE, RM05_DEV, RM05_DEC144, RM_CTRL, "RM05" },
{ RP07_SECT, RP07_SURF, RP07_CYL, RP07_SIZE, RP07_DEV, RP07_DEC144, RM_CTRL, "RP07" },
{ 0 } { 0 }
}; };
@ -650,6 +667,8 @@ MTAB rp_mod[] = {
&rp_set_type, NULL, NULL, "Set RM03 Disk Type" }, &rp_set_type, NULL, NULL, "Set RM03 Disk Type" },
{ MTAB_XTD|MTAB_VUN, RP04_DTYPE, NULL, "RP04", { MTAB_XTD|MTAB_VUN, RP04_DTYPE, NULL, "RP04",
&rp_set_type, NULL, NULL, "Set RP04 Disk Type" }, &rp_set_type, NULL, NULL, "Set RP04 Disk Type" },
{ MTAB_XTD|MTAB_VUN, RP05_DTYPE, NULL, "RP05",
&rp_set_type, NULL, NULL, "Set RP05 Disk Type" },
{ MTAB_XTD|MTAB_VUN, RM80_DTYPE, NULL, "RM80", { MTAB_XTD|MTAB_VUN, RM80_DTYPE, NULL, "RM80",
&rp_set_type, NULL, NULL, "Set RM80 Disk Type" }, &rp_set_type, NULL, NULL, "Set RM80 Disk Type" },
{ MTAB_XTD|MTAB_VUN, RP06_DTYPE, NULL, "RP06", { MTAB_XTD|MTAB_VUN, RP06_DTYPE, NULL, "RP06",
@ -1352,12 +1371,14 @@ t_stat rp_attach (UNIT *uptr, CONST char *cptr)
int32 drv; int32 drv;
t_stat r; t_stat r;
DEVICE *dptr = find_dev_from_unit (uptr); DEVICE *dptr = find_dev_from_unit (uptr);
static const char *drives[] = {"RM03", "RP04", "RM80", "RP06", "RM05", "RP07", NULL}; static const char *drives[] = {"RM03", "RP04", "RP05", "RM80", "RP06", "RM05", "RP07", NULL};
uptr->capac = drv_tab[GET_DTYPE (uptr->flags)].size; uptr->capac = drv_tab[GET_DTYPE (uptr->flags)].size;
r = sim_disk_attach_ex (uptr, cptr, RP_NUMWD * sizeof (uint16), r = sim_disk_attach_ex (uptr, cptr, RP_NUMWD * sizeof (uint16),
sizeof (uint16), TRUE, DBG_DSK, sizeof (uint16), TRUE, DBG_DSK,
drv_tab[GET_DTYPE (uptr->flags)].name, drv_tab[GET_DTYPE (uptr->flags)].sect, 0, (uptr->flags & UNIT_AUTO) ? drives : NULL); drv_tab[GET_DTYPE (uptr->flags)].name,
drv_tab[GET_DTYPE (uptr->flags)].dec144 ? drv_tab[GET_DTYPE (uptr->flags)].sect : 0,
0, (uptr->flags & UNIT_AUTO) ? drives : NULL);
if (r != SCPE_OK) /* error? */ if (r != SCPE_OK) /* error? */
return r; return r;
drv = (int32) (uptr - dptr->units); /* get drv number */ drv = (int32) (uptr - dptr->units); /* get drv number */
@ -1409,7 +1430,10 @@ return SCPE_OK;
t_stat rp_set_bad (UNIT *uptr, int32 val, CONST char *cptr, void *desc) t_stat rp_set_bad (UNIT *uptr, int32 val, CONST char *cptr, void *desc)
{ {
return pdp11_bad_block (uptr, drv_tab[GET_DTYPE (uptr->flags)].sect, RP_NUMWD); if (drv_tab[GET_DTYPE (uptr->flags)].dec144)
return pdp11_bad_block (uptr, drv_tab[GET_DTYPE (uptr->flags)].sect, RP_NUMWD);
return sim_messagef (SCPE_ARG, "%s: %s disk drives did not have a DEC Standard 144 bad block table\n",
sim_uname (uptr), drv_tab[GET_DTYPE (uptr->flags)].name);
} }
/* Boot routine */ /* Boot routine */
@ -1478,7 +1502,7 @@ fprintf (st, "RP04/05/06/07, RM02/03/05/80 Disk Pack Drives (RP)\n\n");
fprintf (st, "The RP controller implements the Massbus family of large disk drives. RP\n"); fprintf (st, "The RP controller implements the Massbus family of large disk drives. RP\n");
fprintf (st, "options include the ability to set units write enabled or write locked, to\n"); fprintf (st, "options include the ability to set units write enabled or write locked, to\n");
fprintf (st, "set the drive type to one of six disk types or autosize, and to write a DEC\n"); fprintf (st, "set the drive type to one of six disk types or autosize, and to write a DEC\n");
fprintf (st, "standard 044 compliant bad block table on the last track.\n\n"); fprintf (st, "standard 144 compliant bad block table on the last track.\n\n");
fprint_set_help (st, dptr); fprint_set_help (st, dptr);
fprint_show_help (st, dptr); fprint_show_help (st, dptr);
fprintf (st, "\nThe type options can be used only when a unit is not attached to a file.\n"); fprintf (st, "\nThe type options can be used only when a unit is not attached to a file.\n");

Binary file not shown.

Binary file not shown.