mirror of
https://github.com/simh/simh.git
synced 2026-01-19 17:38:39 +00:00
Added register descriptions and help to pdp11_rp device
This commit is contained in:
parent
65079ca8f6
commit
e59d9c1599
@ -582,6 +582,7 @@ t_stat rp_go (int32 drv);
|
||||
t_stat rp_set_size (UNIT *uptr, int32 val, char *cptr, void *desc);
|
||||
t_stat rp_set_bad (UNIT *uptr, int32 val, char *cptr, void *desc);
|
||||
int32 rp_abort (void);
|
||||
t_stat rp_help (FILE *st, DEVICE *dptr, UNIT *uptr, int32 flag, char *cptr);
|
||||
char *rp_description (DEVICE *dptr);
|
||||
|
||||
|
||||
@ -615,25 +616,25 @@ UNIT rp_unit[] = {
|
||||
};
|
||||
|
||||
REG rp_reg[] = {
|
||||
{ BRDATA (CS1, rpcs1, DEV_RDX, 16, RP_NUMDR) },
|
||||
{ BRDATA (DA, rpda, DEV_RDX, 16, RP_NUMDR) },
|
||||
{ BRDATA (DS, rpds, DEV_RDX, 16, RP_NUMDR) },
|
||||
{ BRDATA (ER1, rper1, DEV_RDX, 16, RP_NUMDR) },
|
||||
{ BRDATA (HR, rmhr, DEV_RDX, 16, RP_NUMDR) },
|
||||
{ BRDATA (OF, rpof, DEV_RDX, 16, RP_NUMDR) },
|
||||
{ BRDATA (DC, rpdc, DEV_RDX, 16, RP_NUMDR) },
|
||||
{ BRDATA (ER2, rper2, DEV_RDX, 16, RP_NUMDR) },
|
||||
{ BRDATA (ER3, rper3, DEV_RDX, 16, RP_NUMDR) },
|
||||
{ BRDATA (EC1, rpec1, DEV_RDX, 16, RP_NUMDR) },
|
||||
{ BRDATA (EC2, rpec2, DEV_RDX, 16, RP_NUMDR) },
|
||||
{ BRDATA (MR, rpmr, DEV_RDX, 16, RP_NUMDR) },
|
||||
{ BRDATA (MR2, rmmr2, DEV_RDX, 16, RP_NUMDR) },
|
||||
{ DRDATA (STIME, rp_swait, 24), REG_NZ + PV_LEFT },
|
||||
{ DRDATA (RTIME, rp_rwait, 24), REG_NZ + PV_LEFT },
|
||||
{ URDATA (CAPAC, rp_unit[0].capac, 10, T_ADDR_W, 0,
|
||||
{ BRDATAD (CS1, rpcs1, DEV_RDX, 16, RP_NUMDR, "current operation") },
|
||||
{ BRDATAD (DA, rpda, DEV_RDX, 16, RP_NUMDR, "desired surface, sector") },
|
||||
{ BRDATAD (DS, rpds, DEV_RDX, 16, RP_NUMDR, "drive status") },
|
||||
{ BRDATAD (ER1, rper1, DEV_RDX, 16, RP_NUMDR, "drive errors") },
|
||||
{ BRDATAD (HR, rmhr, DEV_RDX, 16, RP_NUMDR, "holding register") },
|
||||
{ BRDATAD (OF, rpof, DEV_RDX, 16, RP_NUMDR, "offset") },
|
||||
{ BRDATAD (DC, rpdc, DEV_RDX, 16, RP_NUMDR, "desired cylinder") },
|
||||
{ BRDATAD (ER2, rper2, DEV_RDX, 16, RP_NUMDR, "error status 2") },
|
||||
{ BRDATAD (ER3, rper3, DEV_RDX, 16, RP_NUMDR, "error status 3") },
|
||||
{ BRDATAD (EC1, rpec1, DEV_RDX, 16, RP_NUMDR, "ECC syndrome 1") },
|
||||
{ BRDATAD (EC2, rpec2, DEV_RDX, 16, RP_NUMDR, "ECC syndrome 2") },
|
||||
{ BRDATAD (MR, rpmr, DEV_RDX, 16, RP_NUMDR, "maintenance register") },
|
||||
{ BRDATAD (MR2, rmmr2, DEV_RDX, 16, RP_NUMDR, "maintenance register 2 (RM only)") },
|
||||
{ DRDATAD (STIME, rp_swait, 24, "seek time, per cylinder"), REG_NZ + PV_LEFT },
|
||||
{ DRDATAD (RTIME, rp_rwait, 24, "rotational delay"), REG_NZ + PV_LEFT },
|
||||
{ URDATA (CAPAC, rp_unit[0].capac, 10, T_ADDR_W, 0,
|
||||
RP_NUMDR, PV_LEFT | REG_HRO) },
|
||||
{ FLDATA (STOP_IOE, rp_stopioe, 0) },
|
||||
{ GRDATA (CTRLTYPE, rp_dib.lnt, DEV_RDX, 16, 0), REG_HRO },
|
||||
{ FLDATAD (STOP_IOE, rp_stopioe, 0, "stop on I/O error") },
|
||||
{ GRDATA (CTRLTYPE, rp_dib.lnt, DEV_RDX, 16, 0), REG_HRO },
|
||||
{ NULL }
|
||||
};
|
||||
|
||||
@ -708,7 +709,7 @@ DEVICE rp_dev = {
|
||||
NULL, NULL, &rp_reset,
|
||||
&rp_boot, &rp_attach, &rp_detach,
|
||||
&rp_dib, DEV_DISABLE | DEV_UBUS | DEV_QBUS | DEV_MBUS | DEV_DEBUG | DEV_DISK,
|
||||
0, rp_debug, NULL, NULL, NULL, NULL, NULL,
|
||||
0, rp_debug, NULL, NULL, &rp_help, NULL, NULL,
|
||||
&rp_description
|
||||
};
|
||||
|
||||
@ -1490,6 +1491,31 @@ return SCPE_NOFNC;
|
||||
|
||||
#endif
|
||||
|
||||
t_stat rp_help (FILE *st, DEVICE *dptr, UNIT *uptr, int32 flag, char *cptr)
|
||||
{
|
||||
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");
|
||||
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");
|
||||
fprintf (st, "The bad block option can be used only when a unit is attached to a file.\n");
|
||||
fprintf (st, "The RP device supports the BOOT command.\n");
|
||||
fprint_reg_help (st, dptr);
|
||||
fprintf (st, "\nError handling is as follows:\n\n");
|
||||
fprintf (st, " error STOP_IOE processed as\n");
|
||||
fprintf (st, " not attached 1 report error and stop\n");
|
||||
fprintf (st, " 0 disk not ready\n\n");
|
||||
fprintf (st, " end of file x assume rest of disk is zero\n");
|
||||
fprintf (st, " OS I/O error x report error and stop\n");
|
||||
fprintf (st, "\nDisk drives on the %s device can be attacbed to simulated storage in the\n", dptr->name);
|
||||
fprintf (st, "following ways:\n\n");
|
||||
sim_disk_attach_help (st, dptr, uptr, flag, cptr);
|
||||
return SCPE_OK;
|
||||
}
|
||||
|
||||
char *rp_description (DEVICE *dptr)
|
||||
{
|
||||
return "RP04/05/06/07 RM02/03/05/80 Massbus disk controller";
|
||||
|
||||
6
scp.c
6
scp.c
@ -1074,17 +1074,17 @@ if (!found) {
|
||||
fprintf (st, "No register help is available for the %s device\n", dptr->name);
|
||||
}
|
||||
else {
|
||||
namebuf = calloc (max_namelen + 2, sizeof (*namebuf));
|
||||
namebuf = calloc (max_namelen + 1, sizeof (*namebuf));
|
||||
fprintf (st, "\nThe %s device implements these registers:\n\n", dptr->name);
|
||||
for (rptr = dptr->registers; rptr->name != NULL; rptr++) {
|
||||
if (rptr->flags & REG_HIDDEN)
|
||||
continue;
|
||||
if (rptr->depth <= 1)
|
||||
sprintf (namebuf, "%*s", -((int)max_namelen), rptr->name);
|
||||
else {
|
||||
sprintf (rangebuf, "[%d:%d]", 0, rptr->depth-1);
|
||||
sprintf (namebuf, "%s%*s", rptr->name, (int)(strlen(rptr->name))-((int)max_namelen), rangebuf);
|
||||
}
|
||||
if (rptr->flags & REG_HIDDEN)
|
||||
continue;
|
||||
if (all_unique) {
|
||||
fprintf (st, " %s %4d %s\n", namebuf, rptr->width, rptr->desc ? rptr->desc : "");
|
||||
continue;
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user