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:
parent
fdd871da65
commit
af0f0300f8
5 changed files with 40 additions and 16 deletions
|
@ -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 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, "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_show_help (st, dptr);
|
||||
fprintf (st, "\nThe type options can be used only when a unit is not attached to a file.\n");
|
||||
|
|
|
@ -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 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, "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_show_help (st, dptr);
|
||||
fprintf (st, "\nThe type options can be used only when a unit is not attached to a file.\n");
|
||||
|
|
|
@ -472,6 +472,7 @@ BITFIELD *rp_reg_bits[] = {
|
|||
RM02/3 32 5 823 =67MB
|
||||
RP04/5 22 19 411 =88MB
|
||||
RM80 31 14 559 =124MB
|
||||
RP05 22 19 411 =88MB
|
||||
RP06 22 19 815 =176MB
|
||||
RM05 32 19 823 =256MB
|
||||
RP07 50 32 630 =516MB
|
||||
|
@ -487,6 +488,7 @@ BITFIELD *rp_reg_bits[] = {
|
|||
#define RM03_SECT 32
|
||||
#define RM03_SURF 5
|
||||
#define RM03_CYL 823
|
||||
#define RM03_DEC144 1
|
||||
#define RM03_DEV 020024
|
||||
#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_SURF 19
|
||||
#define RP04_CYL 411
|
||||
#define RP04_DEC144 0
|
||||
#define RP04_DEV 020020
|
||||
#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_SURF 14
|
||||
#define RM80_CYL 559
|
||||
#define RM80_DEC144 1
|
||||
#define RM80_DEV 020026
|
||||
#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_SURF 19
|
||||
#define RP06_CYL 815
|
||||
#define RP06_DEC144 0
|
||||
#define RP06_DEV 020022
|
||||
#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_SURF 19
|
||||
#define RM05_CYL 823
|
||||
#define RM05_DEC144 1
|
||||
#define RM05_DEV 020027
|
||||
#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_SURF 32
|
||||
#define RP07_CYL 630
|
||||
#define RP07_DEC144 1
|
||||
#define RP07_DEV 020042
|
||||
#define RP07_SIZE (RP07_SECT * RP07_SURF * RP07_CYL * RP_NUMWD)
|
||||
|
||||
|
@ -531,17 +546,19 @@ struct drvtyp {
|
|||
int32 cyl; /* cylinders */
|
||||
int32 size; /* #blocks */
|
||||
int32 devtype; /* device type */
|
||||
int32 dec144; /* DEC Std 144 bad block */
|
||||
int32 ctrl; /* ctrl type */
|
||||
const char *name; /* device type name */
|
||||
};
|
||||
|
||||
static struct drvtyp drv_tab[] = {
|
||||
{ RM03_SECT, RM03_SURF, RM03_CYL, RM03_SIZE, RM03_DEV, RM_CTRL, "RM03" },
|
||||
{ RP04_SECT, RP04_SURF, RP04_CYL, RP04_SIZE, RP04_DEV, RP_CTRL, "RP04" },
|
||||
{ RM80_SECT, RM80_SURF, RM80_CYL, RM80_SIZE, RM80_DEV, RM_CTRL, "RM80" },
|
||||
{ RP06_SECT, RP06_SURF, RP06_CYL, RP06_SIZE, RP06_DEV, RP_CTRL, "RP06" },
|
||||
{ RM05_SECT, RM05_SURF, RM05_CYL, RM05_SIZE, RM05_DEV, RM_CTRL, "RM05" },
|
||||
{ RP07_SECT, RP07_SURF, RP07_CYL, RP07_SIZE, RP07_DEV, RM_CTRL, "RP07" },
|
||||
{ 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, RP04_DEC144, RP_CTRL, "RP04" },
|
||||
{ RP05_SECT, RP05_SURF, RP05_CYL, RP05_SIZE, RP05_DEV, RP05_DEC144, RP_CTRL, "RP05" },
|
||||
{ RM80_SECT, RM80_SURF, RM80_CYL, RM80_SIZE, RM80_DEV, RM80_DEC144, RM_CTRL, "RM80" },
|
||||
{ RP06_SECT, RP06_SURF, RP06_CYL, RP06_SIZE, RP06_DEV, RP06_DEC144, RP_CTRL, "RP06" },
|
||||
{ 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 }
|
||||
};
|
||||
|
||||
|
@ -650,6 +667,8 @@ MTAB rp_mod[] = {
|
|||
&rp_set_type, NULL, NULL, "Set RM03 Disk Type" },
|
||||
{ MTAB_XTD|MTAB_VUN, RP04_DTYPE, NULL, "RP04",
|
||||
&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",
|
||||
&rp_set_type, NULL, NULL, "Set RM80 Disk Type" },
|
||||
{ MTAB_XTD|MTAB_VUN, RP06_DTYPE, NULL, "RP06",
|
||||
|
@ -1352,12 +1371,14 @@ t_stat rp_attach (UNIT *uptr, CONST char *cptr)
|
|||
int32 drv;
|
||||
t_stat r;
|
||||
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;
|
||||
r = sim_disk_attach_ex (uptr, cptr, RP_NUMWD * sizeof (uint16),
|
||||
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? */
|
||||
return r;
|
||||
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)
|
||||
{
|
||||
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 */
|
||||
|
@ -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, "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, "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_show_help (st, dptr);
|
||||
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.
Loading…
Add table
Reference in a new issue