Created a way for devices to have a description presentation routine and if it is supplied for its output to be visible with a SHOW SYSTEM command. Provided device description routines for devices used in the VAX simulators

This commit is contained in:
Mark Pizzolato 2013-01-25 12:04:25 -08:00
parent bb9f9155f2
commit cbe11147fc
46 changed files with 695 additions and 113 deletions

View file

@ -333,6 +333,8 @@ t_stat cr_set_reset (UNIT *, int32, char *, void *);
t_stat cr_set_stop (UNIT *, int32, char *, void *);
t_stat cr_set_trans (UNIT *, int32, char*, void *);
t_stat cr_show_trans (FILE *, UNIT *, int32, void *);
char *cr_description (DEVICE *dptr);
/* CR data structures
@ -408,7 +410,10 @@ DEVICE cr_dev = {
1, 10, 31, 1, DEV_RDX, 8,
NULL, NULL, &cr_reset,
NULL, &cr_attach, &cr_detach,
&cr_dib, DEV_DISABLE | DFLT_DIS | DEV_UBUS | DEV_DEBUG };
&cr_dib, DEV_DISABLE | DFLT_DIS | DEV_UBUS | DEV_DEBUG, 0,
NULL, NULL, NULL, NULL, NULL, NULL,
&cr_description
};
/* Utility routines */
@ -1282,3 +1287,8 @@ t_stat cr_show_trans ( FILE *st,
fprintf (st, "translation %s", trans[table]);
return (SCPE_OK);
}
char *cr_description (DEVICE *dptr)
{
return "CR11 card reader";
}

View file

@ -28,6 +28,7 @@
Modification history:
23-Jan-13 RJ Don't do anything if not attached. See https://github.com/simh/simh/issues/28
23-Jan-13 RJ Clock co-scheduling move to generic framework (from Mark Pizzolato)
21-Jan-13 RJ Added help.
15-Jan-13 RJ Contribution from Paul Koning:
@ -220,7 +221,6 @@ t_stat dmc_wr(int32 data, int32 PA, int32 access);
t_stat dmc_svc(UNIT * uptr);
t_stat dmc_reset (DEVICE * dptr);
t_stat dmc_attach (UNIT * uptr, char * cptr);
int dmc_isattached(CTLR *controller);
t_stat dmc_detach (UNIT * uptr);
int32 dmc_rxint (void);
int32 dmc_txint (void);
@ -238,6 +238,9 @@ t_stat dmc_setlinemode (UNIT* uptr, int32 val, char* cptr, void* desc);
t_stat dmc_showlinemode (FILE* st, UNIT* uptr, int32 val, void* desc);
t_stat dmc_help (FILE *st, DEVICE *dptr, UNIT *uptr, int32 flag, char *cptr);
t_stat dmc_help_attach (FILE *st, DEVICE *dptr, UNIT *uptr, int32 flag, char *cptr);
char *dmc_description (DEVICE *dptr);
char *dmp_description (DEVICE *dptr);
int dmc_is_attached(UNIT* uptr);
int dmc_is_dmc(CTLR *controller);
int dmc_is_rqi_set(CTLR *controller);
int dmc_is_rdyi_set(CTLR *controller);
@ -448,19 +451,19 @@ DEVICE dmc_dev[] =
{ "DMC0", &dmc0_unit, dmca_reg, dmc_mod, DMC_UNITSPERDEVICE, DMC_RDX, 8, 1, DMC_RDX, 8,
NULL,NULL,&dmc_reset,NULL,&dmc_attach,&dmc_detach,
&dmc0_dib, DEV_DISABLE | DEV_DIS | DEV_UBUS | DEV_DEBUG, 0, dmc_debug,
NULL, NULL, &dmc_help, &dmc_help_attach, NULL },
NULL, NULL, &dmc_help, &dmc_help_attach, NULL, &dmc_description },
{ "DMC1", &dmc1_unit, dmcb_reg, dmc_mod, DMC_UNITSPERDEVICE, DMC_RDX, 8, 1, DMC_RDX, 8,
NULL,NULL,&dmc_reset,NULL,&dmc_attach,&dmc_detach,
&dmc1_dib, DEV_DISABLE | DEV_DIS | DEV_UBUS | DEV_DEBUG, 0, dmc_debug,
NULL, NULL, &dmc_help, &dmc_help_attach, NULL },
NULL, NULL, &dmc_help, &dmc_help_attach, NULL, &dmc_description },
{ "DMC2", &dmc2_unit, dmcc_reg, dmc_mod, DMC_UNITSPERDEVICE, DMC_RDX, 8, 1, DMC_RDX, 8,
NULL,NULL,&dmc_reset,NULL,&dmc_attach,&dmc_detach,
&dmc2_dib, DEV_DISABLE | DEV_DIS | DEV_UBUS | DEV_DEBUG, 0, dmc_debug,
NULL, NULL, &dmc_help, &dmc_help_attach, NULL },
NULL, NULL, &dmc_help, &dmc_help_attach, NULL, &dmc_description },
{ "DMC3", &dmc3_unit, dmcd_reg, dmc_mod, DMC_UNITSPERDEVICE, DMC_RDX, 8, 1, DMC_RDX, 8,
NULL,NULL,&dmc_reset,NULL,&dmc_attach,&dmc_detach,
&dmc3_dib, DEV_DISABLE | DEV_DIS | DEV_UBUS | DEV_DEBUG, 0, dmc_debug,
NULL, NULL, &dmc_help, &dmc_help_attach, NULL }
NULL, NULL, &dmc_help, &dmc_help_attach, NULL, &dmc_description }
};
#ifdef DMP
@ -469,7 +472,7 @@ DEVICE dmp_dev[] =
{ "DMP", &dmp_unit, dmp_reg, dmc_mod, DMP_UNITSPERDEVICE, DMC_RDX, 8, 1, DMC_RDX, 8,
NULL,NULL,&dmc_reset,NULL,&dmc_attach,&dmc_detach,
&dmp_dib, DEV_DISABLE | DEV_DIS | DEV_UBUS | DEV_DEBUG, 0, dmc_debug,
NULL, NULL, &dmc_help, &dmc_help_attach, NULL }
NULL, NULL, &dmc_help, &dmc_help_attach, NULL, &dmp_description }
};
#endif
@ -521,6 +524,11 @@ double dmc_timer_cumulative_seconds(TIMER *t)
return (double)t->cumulative_time/CLOCKS_PER_SEC;
}
int dmc_is_attached(UNIT* uptr)
{
return uptr->flags & UNIT_ATT;
}
int dmc_is_dmc(CTLR *controller)
{
return controller->dev_type != DMP;
@ -589,7 +597,7 @@ t_stat dmc_setpeer (UNIT* uptr, int32 val, char* cptr, void* desc)
CTLR *controller = dmc_get_controller_from_unit(uptr);
if (!cptr) return SCPE_IERR;
if (uptr->flags & UNIT_ATT) return SCPE_ALATT;
if (dmc_is_attached(uptr)) return SCPE_ALATT;
status = sim_parse_addr (cptr, host, sizeof(host), NULL, port, sizeof(port), NULL, NULL);
if (status != SCPE_OK)
return status;
@ -621,7 +629,7 @@ t_stat dmc_setspeed (UNIT* uptr, int32 val, char* cptr, void* desc)
CTLR *controller = dmc_get_controller_from_unit(uptr);
if (!cptr) return SCPE_IERR;
if (uptr->flags & UNIT_ATT) return SCPE_ALATT;
if (dmc_is_attached(uptr)) return SCPE_ALATT;
if (sscanf(cptr, "%d", &controller->line->speed) != 1)
{
status = SCPE_ARG;
@ -666,7 +674,7 @@ t_stat dmc_settype (UNIT* uptr, int32 val, char* cptr, void* desc)
CTLR *controller = dmc_get_controller_from_unit(uptr);
if (!cptr) return SCPE_IERR;
if (uptr->flags & UNIT_ATT) return SCPE_ALATT;
if (UNIT_ATT) return SCPE_ALATT;
if (sscanf(cptr, "%s", buf) != 1)
{
status = SCPE_ARG;
@ -780,7 +788,7 @@ t_stat dmc_setlinemode (UNIT* uptr, int32 val, char* cptr, void* desc)
CTLR *controller = dmc_get_controller_from_unit(uptr);
if (!cptr) return SCPE_IERR;
if (uptr->flags & UNIT_ATT) return SCPE_ALATT;
if (dmc_is_attached(uptr)) return SCPE_ALATT;
if (MATCH_CMD(cptr, "PRIMARY") == 0)
{
@ -1400,7 +1408,7 @@ t_stat dmc_svc(UNIT* uptr)
dmc_timer_start(poll_timer);
}
if (dmc_isattached(controller))
if (dmc_is_attached(controller->device->units))
{
dmc_line_update_speed_stats(controller->line);
@ -2309,7 +2317,7 @@ t_stat dmc_wr(int32 data, int32 PA, int32 access)
dmc_setreg(controller, PA, (oldValue & ~mask) | (data & mask), 1);
}
if (dmc_getsel(reg) == 0 || dmc_getsel(reg) == 1)
if (dmc_is_attached(controller->device->units) && (dmc_getsel(reg) == 0 || dmc_getsel(reg) == 1))
{
dmc_process_command(controller);
}
@ -2393,11 +2401,6 @@ t_stat dmc_attach (UNIT *uptr, char *cptr)
return ans;
}
int dmc_isattached(CTLR *controller)
{
return controller->master_socket != INVALID_SOCKET;
}
t_stat dmc_detach (UNIT *uptr)
{
CTLR *controller = dmc_get_controller_from_unit(uptr);
@ -2410,3 +2413,14 @@ t_stat dmc_detach (UNIT *uptr)
return SCPE_OK;
}
char *dmc_description (DEVICE *dptr)
{
return "DMC11 Synchronous network controller";
}
char *dmp_description (DEVICE *dptr)
{
return "DMP11 Synchronous network controller";
}

View file

@ -277,6 +277,7 @@ t_stat dz_set_nolog (UNIT *uptr, int32 val, char *cptr, void *desc);
t_stat dz_show_log (FILE *st, UNIT *uptr, int32 val, void *desc);
t_stat dz_help (FILE *st, DEVICE *dptr, UNIT *uptr, int32 flag, char *cptr);
t_stat dz_help_attach (FILE *st, DEVICE *dptr, UNIT *uptr, int32 flag, char *cptr);
char *dz_description (DEVICE *dptr);
/* DZ data structures
@ -350,7 +351,8 @@ DEVICE dz_dev = {
&dz_dib, DEV_DISABLE | DEV_UBUS | DEV_QBUS | DEV_DEBUG | DEV_MUX,
0, dz_debug, NULL, NULL,
&dz_help, &dz_help_attach, /* help and attach_help routines */
(void *)&dz_desc /* help context variable */
(void *)&dz_desc, /* help context variable */
&dz_description /* description routine */
};
/* Register names for Debug tracing */
@ -476,8 +478,9 @@ switch ((PA >> 1) & 03) { /* case on PA<2:1> */
continue; /* line unchanged skip */
line = (dz * DZ_LINES) + i; /* get line num */
lp = &dz_ldsc[line]; /* get line desc */
if (data & (1 << (TCR_V_DTR + i)))
if (data & (1 << (TCR_V_DTR + i))) {
tmxr_set_get_modem_bits (lp, TMXR_MDM_DTR|TMXR_MDM_RTS, 0, NULL);
}
else
if (dz_auto)
tmxr_set_get_modem_bits (lp, 0, TMXR_MDM_DTR|TMXR_MDM_RTS, NULL);
@ -691,6 +694,8 @@ t_stat dz_clear (int32 dz, t_bool flag)
{
int32 i, line;
sim_debug(DBG_TRC, &dz_dev, "dz_clear(dz=%d,flag=%d)\n", dz, flag);
dz_csr[dz] = 0; /* clear CSR */
dz_rbuf[dz] = 0; /* silo empty */
dz_lpr[dz] = 0; /* no params */
@ -714,6 +719,8 @@ t_stat dz_reset (DEVICE *dptr)
{
int32 i, ndev;
sim_debug(DBG_TRC, dptr, "dz_reset()\n");
if (dz_ldsc == NULL)
dz_desc.ldsc = dz_ldsc = calloc (dz_desc.lines, sizeof(*dz_ldsc));
for (i = 0; i < dz_desc.lines/DZ_LINES; i++) /* init muxes */
@ -918,3 +925,7 @@ fprintf (st, "status.\n\n");
return SCPE_OK;
}
char *dz_description (DEVICE *dptr)
{
return (UNIBUS) ? "DZ11 8-line terminal multiplexer" : "DZV11 4-line terminal multiplexer";
}

View file

@ -566,6 +566,7 @@ void hk_cmderr (int32 err, int32 drv);
void hk_go (int32 drv);
t_stat hk_set_size (UNIT *uptr, int32 val, char *cptr, void *desc);
t_stat hk_set_bad (UNIT *uptr, int32 val, char *cptr, void *desc);
char *hk_description (DEVICE *dptr);
/* HK data structures
@ -677,7 +678,8 @@ DEVICE hk_dev = {
NULL, NULL, &hk_reset,
&hk_boot, &hk_attach, &hk_detach,
&hk_dib, DEV_DISABLE | DEV_UBUS | DEV_Q18 | DEV_DEBUG, 0,
hk_deb, NULL, 0
hk_deb, NULL, NULL, NULL, NULL, NULL,
&hk_description
};
/* I/O dispatch routines, I/O addresses 17777440 - 17777476 */
@ -1572,3 +1574,8 @@ return SCPE_NOFNC;
}
#endif
char *hk_description (DEVICE *dptr)
{
return "RK611/RK06(7) cartridge disk controller";
}

View file

@ -63,6 +63,7 @@ t_stat lpt_svc (UNIT *uptr);
t_stat lpt_reset (DEVICE *dptr);
t_stat lpt_attach (UNIT *uptr, char *ptr);
t_stat lpt_detach (UNIT *uptr);
char *lpt_description (DEVICE *dptr);
/* LPT data structures
@ -110,7 +111,9 @@ DEVICE lpt_dev = {
1, 10, 31, 1, DEV_RDX, 8,
NULL, NULL, &lpt_reset,
NULL, &lpt_attach, &lpt_detach,
&lpt_dib, DEV_DISABLE | DEV_UBUS | DEV_QBUS
&lpt_dib, DEV_DISABLE | DEV_UBUS | DEV_QBUS, 0,
NULL, NULL, NULL, NULL, NULL, NULL,
&lpt_description
};
/* Line printer routines
@ -199,3 +202,9 @@ t_stat lpt_detach (UNIT *uptr)
lpt_csr = lpt_csr | CSR_ERR;
return detach_unit (uptr);
}
char *lpt_description (DEVICE *dptr)
{
return (UNIBUS) ? "LP11 line printer" :
"LPV11 line printer";
}

View file

@ -260,6 +260,7 @@ t_stat rl_show_dstate (FILE *, UNIT *, int32, void *);
t_stat rl_set_ctrl (UNIT *uptr, int32 val, char *cptr, void *desc);
#endif
t_stat rl_show_ctrl (FILE *st, UNIT *uptr, int32 val, void *desc);
char *rl_description (DEVICE *dptr);
/* RL11 data structures
@ -347,7 +348,9 @@ DEVICE rl_dev = {
RL_NUMDR, DEV_RDX, 24, 1, DEV_RDX, 16,
NULL, NULL, &rl_reset,
&rl_boot, &rl_attach, &rl_detach,
&rl_dib, DEV_DISABLE | DEV_UBUS | DEV_QBUS | DEV_DEBUG
&rl_dib, DEV_DISABLE | DEV_UBUS | DEV_QBUS | DEV_DEBUG, 0,
NULL, NULL, NULL, NULL, NULL, NULL,
&rl_description
};
/* Drive states */
@ -1208,3 +1211,10 @@ return SCPE_NOFNC;
}
#endif
char *rl_description (DEVICE *dptr)
{
return (UNIBUS) ? "RL11/RL01(2) cartridge disk controller" :
"RLV12/RL01(2) cartridge disk controller";
}

View file

@ -581,6 +581,8 @@ 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);
char *rp_description (DEVICE *dptr);
/* RP data structures
@ -702,7 +704,8 @@ 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
0, rp_debug, NULL, NULL, NULL, NULL, NULL,
&rp_description
};
char *rp_regnam[] =
@ -1482,3 +1485,8 @@ return SCPE_NOFNC;
}
#endif
char *rp_description (DEVICE *dptr)
{
return "RP04/05/06/07 RM02/03/05/80 Massbus disk controller";
}

View file

@ -798,6 +798,7 @@ t_stat rq_show_ctype (FILE *st, UNIT *uptr, int32 val, void *desc);
t_stat rq_show_wlk (FILE *st, UNIT *uptr, int32 val, void *desc);
t_stat rq_show_ctrl (FILE *st, UNIT *uptr, int32 val, void *desc);
t_stat rq_show_unitq (FILE *st, UNIT *uptr, int32 val, void *desc);
char *rq_description (DEVICE *dptr);
t_bool rq_step4 (MSC *cp);
t_bool rq_mscp (MSC *cp, int32 pkt, t_bool q);
@ -1009,7 +1010,8 @@ DEVICE rq_dev = {
NULL, NULL, &rq_reset,
&rq_boot, &rq_attach, &rq_detach,
&rq_dib, DEV_DISABLE | DEV_UBUS | DEV_QBUS | DEV_DEBUG | DEV_DISK,
0, rq_debug
0, rq_debug, NULL, NULL, NULL, NULL, NULL,
&rq_description
};
/* RQB data structures
@ -1083,7 +1085,8 @@ DEVICE rqb_dev = {
NULL, NULL, &rq_reset,
&rq_boot, &rq_attach, &rq_detach,
&rqb_dib, DEV_DISABLE | DEV_DIS | DEV_UBUS | DEV_QBUS | DEV_DEBUG | DEV_DISK,
0, rq_debug
0, rq_debug, NULL, NULL, NULL, NULL, NULL,
&rq_description
};
/* RQC data structures
@ -1157,7 +1160,8 @@ DEVICE rqc_dev = {
NULL, NULL, &rq_reset,
&rq_boot, &rq_attach, &rq_detach,
&rqc_dib, DEV_DISABLE | DEV_DIS | DEV_UBUS | DEV_QBUS | DEV_DEBUG | DEV_DISK,
0, rq_debug
0, rq_debug, NULL, NULL, NULL, NULL, NULL,
&rq_description
};
/* RQD data structures
@ -1231,7 +1235,8 @@ DEVICE rqd_dev = {
NULL, NULL, &rq_reset,
&rq_boot, &rq_attach, &rq_detach,
&rqd_dib, DEV_DISABLE | DEV_DIS | DEV_UBUS | DEV_QBUS | DEV_DEBUG | DEV_DISK,
0, rq_debug
0, rq_debug, NULL, NULL, NULL, NULL, NULL,
&rq_description
};
static DEVICE *rq_devmap[RQ_NUMCT] = {
@ -3074,3 +3079,11 @@ if (val & RQ_SH_UN) {
}
return SCPE_OK;
}
char *rq_description (DEVICE *dptr)
{
static char buf[80];
sprintf (buf, "%s MSCP disk controller", ctlr_tab[rq_ctxmap[dptr->units->cnum]->ctype].name);
return buf;
}

View file

@ -164,6 +164,8 @@ t_stat ry_boot (int32 unitno, DEVICE *dptr);
void ry_done (int32 esr_flags, int32 new_ecode);
t_stat ry_set_size (UNIT *uptr, int32 val, char *cptr, void *desc);
t_stat ry_attach (UNIT *uptr, char *cptr);
char *ry_description (DEVICE *dptr);
/* RY11 data structures
@ -246,7 +248,9 @@ DEVICE ry_dev = {
RX_NUMDR, DEV_RDX, 20, 1, DEV_RDX, 8,
NULL, NULL, &ry_reset,
&ry_boot, &ry_attach, NULL,
&ry_dib, DEV_DISABLE | DEV_DISI | DEV_UBUS | DEV_Q18
&ry_dib, DEV_DISABLE | DEV_DISI | DEV_UBUS | DEV_Q18, 0,
NULL, NULL, NULL, NULL, NULL, NULL,
&ry_description
};
/* I/O dispatch routine, I/O addresses 17777170 - 17777172
@ -702,3 +706,9 @@ return SCPE_NOFNC;
}
#endif
char *ry_description (DEVICE *dptr)
{
return (UNIBUS) ? "RX211 floppy disk controller" :
"RXV21 floppy disk controller";
}

View file

@ -359,6 +359,7 @@ t_stat tq_show_ctrl (FILE *st, UNIT *uptr, int32 val, void *desc);
t_stat tq_show_unitq (FILE *st, UNIT *uptr, int32 val, void *desc);
t_stat tq_set_type (UNIT *uptr, int32 val, char *cptr, void *desc);
t_stat tq_show_type (FILE *st, UNIT *uptr, int32 val, void *desc);
char *tq_description (DEVICE *dptr);
t_bool tq_step4 (void);
t_bool tq_mscp (int32 pkt, t_bool q);
@ -539,7 +540,9 @@ DEVICE tq_dev = {
NULL, NULL, &tq_reset,
&tq_boot, &tq_attach, &tq_detach,
&tq_dib, DEV_DISABLE | DEV_UBUS | DEV_QBUS | DEV_DEBUG | DEV_TAPE,
0, tq_debug
0, tq_debug,
NULL, NULL, NULL, NULL, NULL,
&tq_description
};
@ -2379,3 +2382,9 @@ t_stat tq_show_type (FILE *st, UNIT *uptr, int32 val, void *desc)
fprintf (st, "%s (%dMB)", drv_tab[tq_typ].name, (uint32) (drv_tab[tq_typ].cap >> 20));
return SCPE_OK;
}
char *tq_description (DEVICE *dptr)
{
return (UNIBUS) ? "TUK50 TMSCP magnetic tape controller" :
"TQK50 TMSCP magnetic tape controller";
}

View file

@ -296,6 +296,7 @@ int32 ts_updxs0 (int32 t);
void ts_cmpendcmd (int32 s0, int32 s1);
void ts_endcmd (int32 ssf, int32 xs0f, int32 msg);
int32 ts_map_status (t_stat st);
char *ts_description (DEVICE *dptr);
/* TS data structures
@ -365,7 +366,9 @@ DEVICE ts_dev = {
1, 10, T_ADDR_W, 1, DEV_RDX, 8,
NULL, NULL, &ts_reset,
&ts_boot, &ts_attach, &ts_detach,
&ts_dib, DEV_DISABLE | TS_DIS | DEV_UBUS | DEV_QBUS | DEV_DEBUG | DEV_TAPE
&ts_dib, DEV_DISABLE | TS_DIS | DEV_UBUS | DEV_QBUS | DEV_DEBUG | DEV_TAPE, 0,
NULL, NULL, NULL, NULL, NULL, NULL,
&ts_description
};
/* I/O dispatch routines, I/O addresses 17772520 - 17772522
@ -1171,3 +1174,9 @@ t_stat ts_boot (int32 unitno, DEVICE *dptr)
return SCPE_NOFNC;
}
#endif
char *ts_description (DEVICE *dptr)
{
return (UNIBUS) ? "TS11 magnetic tape controller" :
"TSV11/TSV05 magnetic tape controller ";
}

View file

@ -248,6 +248,7 @@ t_stat tu_detach (UNIT *uptr);
t_stat tu_boot (int32 unitno, DEVICE *dptr);
t_stat tu_set_fmtr (UNIT *uptr, int32 val, char *cptr, void *desc);
t_stat tu_show_fmtr (FILE *st, UNIT *uptr, int32 val, void *desc);
char *tu_description (DEVICE *dptr);
t_stat tu_go (int32 drv);
int32 tu_abort (void);
void tu_set_er (int32 flg);
@ -320,7 +321,9 @@ DEVICE tu_dev = {
TU_NUMDR, 10, T_ADDR_W, 1, DEV_RDX, 8,
NULL, NULL, &tu_reset,
&tu_boot, &tu_attach, &tu_detach,
&tu_dib, DEV_MBUS|DEV_UBUS|DEV_QBUS|DEV_DEBUG|DEV_DISABLE|DEV_DIS_INIT|DEV_TM03|DEV_TAPE
&tu_dib, DEV_MBUS|DEV_UBUS|DEV_QBUS|DEV_DEBUG|DEV_DISABLE|DEV_DIS_INIT|DEV_TM03|DEV_TAPE,
0, NULL, NULL, NULL, NULL, NULL, NULL,
&tu_description
};
/* Massbus register read */
@ -1053,3 +1056,8 @@ return SCPE_NOFNC;
}
#endif
char *tu_description (DEVICE *dptr)
{
return "TM03 tape formatter";
}

View file

@ -343,6 +343,7 @@ static t_stat vh_set_nolog (UNIT *uptr, int32 val, char *cptr, void *desc);
static t_stat vh_show_log (FILE *st, UNIT *uptr, int32 val, void *desc);
static t_stat vh_help (FILE *st, DEVICE *dptr, UNIT *uptr, int32 flag, char *cptr);
static t_stat vh_help_attach (FILE *st, DEVICE *dptr, UNIT *uptr, int32 flag, char *cptr);
static char *vh_description (DEVICE *dptr);
/* SIMH I/O Structures */
@ -437,7 +438,8 @@ DEVICE vh_dev = {
NULL, /* logical name */
&vh_help, /* help routine */
&vh_help_attach,/* attach_help routines */
(void *)&vh_desc/* help context variable */
(void *)&vh_desc,/* help context variable */
&vh_description /* description */
};
/* Register names for Debug tracing */
@ -1587,3 +1589,8 @@ char *devtype = (UNIBUS) ? "DH11" : "DHQ11";
fprintf (st, "%s %s Terminal Multiplexer Attach Help\n\n", devtype, dptr->name);
return tmxr_attach_help (st, dptr, uptr, 1, cptr);
}
static char *vh_description (DEVICE *dptr)
{
return (UNIBUS) ? "DH11 16-line Terminal Multiplexer" : "DHQ11 8-line Terminal Multiplexer";
}

View file

@ -296,6 +296,7 @@ void xq_setint (CTLR* xq);
void xq_clrint (CTLR* xq);
int32 xq_int (void);
void xq_csr_set_clr(CTLR* xq, uint16 set_bits, uint16 clear_bits);
char *xq_description (DEVICE *dptr);
struct xq_device xqa = {
xqa_read_callback, /* read callback routine */
@ -484,7 +485,8 @@ DEVICE xq_dev = {
&xq_ex, &xq_dep, &xq_reset,
NULL, &xq_attach, &xq_detach,
&xqa_dib, DEV_DISABLE | DEV_QBUS | DEV_DEBUG | DEV_ETHER,
0, xq_debug
0, xq_debug, NULL, NULL, NULL, NULL, NULL,
&xq_description
};
DEVICE xqb_dev = {
@ -493,7 +495,8 @@ DEVICE xqb_dev = {
&xq_ex, &xq_dep, &xq_reset,
NULL, &xq_attach, &xq_detach,
&xqb_dib, DEV_DISABLE | DEV_DIS | DEV_QBUS | DEV_DEBUG | DEV_ETHER,
0, xq_debug
0, xq_debug, NULL, NULL, NULL, NULL, NULL,
&xq_description
};
CTLR xq_ctrl[] = {
@ -2973,3 +2976,8 @@ void xq_debug_turbo_setup(CTLR* xq)
sim_debug(DBG_SET, xq->dev, "%s: setup> set Transmit Ring Buffer Address: %02X%04X\n",
xq->dev->name, xq->var->init.tdra_h, xq->var->init.tdra_l);
}
char *xq_description (DEVICE *dptr)
{
return "DELQA/DEQNA Ethernet controller";
}

View file

@ -127,6 +127,7 @@ void xu_process_receive(CTLR* xu);
void xu_dump_rxring(CTLR* xu);
void xu_dump_txring(CTLR* xu);
t_stat xu_show_filters (FILE* st, UNIT* uptr, int32 val, void* desc);
char *xu_description (DEVICE *dptr);
#define IOLN_XU 010
@ -224,7 +225,8 @@ DEVICE xu_dev = {
&xu_ex, &xu_dep, &xu_reset,
NULL, &xu_attach, &xu_detach,
&xua_dib, DEV_DISABLE | DEV_DIS | DEV_UBUS | DEV_DEBUG | DEV_ETHER,
0, xu_debug
0, xu_debug, NULL, NULL, NULL, NULL, NULL,
&xu_description
};
#define IOLN_XU 010
@ -284,7 +286,8 @@ DEVICE xub_dev = {
&xu_ex, &xu_dep, &xu_reset,
NULL, &xu_attach, &xu_detach,
&xub_dib, DEV_DISABLE | DEV_DIS | DEV_UBUS | DEV_DEBUG | DEV_ETHER,
0, xu_debug
0, xu_debug, NULL, NULL, NULL, NULL, NULL,
&xu_description
};
#define XU_MAX_CONTROLLERS 2
@ -1783,3 +1786,10 @@ void xu_dump_txring (CTLR* xu)
printf (" header[%d]: own:%d, len:%d, address:%08x data:{%04x,%04x,%04x,%04x}\n", i, own, len, addr, txhdr[0], txhdr[1], txhdr[2], txhdr[3]);
}
}
char *xu_description (DEVICE *dptr)
{
return "DEUNA/DELUA Ethernet controller";
}

View file

@ -40,6 +40,7 @@ extern jmp_buf save_env;
int32 eval_int (void);
t_stat qba_reset (DEVICE *dptr);
char *qba_description (DEVICE *dptr);
/* Qbus adapter data structures
@ -74,7 +75,8 @@ DEVICE qba_dev = {
1, 16, 4, 2, 16, 16,
NULL, NULL, &qba_reset,
NULL, NULL, NULL,
NULL, DEV_QBUS
NULL, DEV_QBUS, 0, NULL, NULL, NULL, NULL, NULL, NULL,
&qba_description
};
/* IO page dispatches */
@ -246,6 +248,11 @@ for (i = 0; i < IPL_HLVL; i++)
return SCPE_OK;
}
char *qba_description (DEVICE *dptr)
{
return "Qbus adapter";
}
/* Qbus I/O buffer routines, aligned access
Map_ReadB - fetch byte buffer from memory

View file

@ -43,6 +43,7 @@ int32 mctl_count = 0;
t_stat mctl_rd (int32 *data, int32 PA, int32 access);
t_stat mctl_wr (int32 data, int32 PA, int32 access);
t_stat mctl_reset (DEVICE *dptr);
char *mctl_description (DEVICE *dptr);
/* MCTL data structures
@ -72,7 +73,8 @@ DEVICE mctl_dev = {
1, DEV_RDX, 20, 1, DEV_RDX, 8,
NULL, NULL, &mctl_reset,
NULL, NULL, NULL,
&mctl_dib, DEV_Q18
&mctl_dib, DEV_Q18, 0, NULL, NULL, NULL, NULL, NULL, NULL,
&mctl_description
};
/* I/O dispatch routines */
@ -105,6 +107,11 @@ mctl_count = (int32)(MEMSIZE >> 18); /* memory controllers en
return SCPE_OK;
}
char *mctl_description (DEVICE *dptr)
{
return "memory controller";
}
/* Used by CPU */
void rom_wr_B (int32 pa, int32 val)

View file

@ -87,6 +87,9 @@ t_stat clk_svc (UNIT *uptr);
t_stat tti_reset (DEVICE *dptr);
t_stat tto_reset (DEVICE *dptr);
t_stat clk_reset (DEVICE *dptr);
char *tti_description (DEVICE *dptr);
char *tto_description (DEVICE *dptr);
char *clk_description (DEVICE *dptr);
void txdb_func (int32 data);
extern int32 sysd_hlt_enb (void);
@ -128,7 +131,8 @@ DEVICE tti_dev = {
1, 10, 31, 1, 16, 8,
NULL, NULL, &tti_reset,
NULL, NULL, NULL,
&tti_dib, 0
&tti_dib, 0, 0, NULL, NULL, NULL, NULL, NULL, NULL,
&tti_description
};
/* TTO data structures
@ -167,7 +171,8 @@ DEVICE tto_dev = {
1, 10, 31, 1, 16, 8,
NULL, NULL, &tto_reset,
NULL, NULL, NULL,
&tto_dib, 0
&tto_dib, 0, 0, NULL, NULL, NULL, NULL, NULL, NULL,
&tto_description
};
/* CLK data structures
@ -201,7 +206,8 @@ DEVICE clk_dev = {
1, 0, 0, 0, 0, 0,
NULL, NULL, &clk_reset,
NULL, NULL, NULL,
&clk_dib, 0
&clk_dib, 0, 0, NULL, NULL, NULL, NULL, NULL, NULL,
&clk_description
};
/* Clock and terminal MxPR routines
@ -352,6 +358,11 @@ sim_activate_abs (&tti_unit, KBD_WAIT (tti_unit.wait, tmr_poll));
return SCPE_OK;
}
char *tti_description (DEVICE *dptr)
{
return "console terminal input";
}
/* Terminal output routines
tto_svc process event (character typed)
@ -386,6 +397,11 @@ sim_cancel (&tto_unit); /* deactivate unit */
return SCPE_OK;
}
char *tto_description (DEVICE *dptr)
{
return "console terminal output";
}
/* Clock routines
clk_svc process event (clock tick)
@ -422,3 +438,8 @@ tmxr_poll = t * TMXR_MULT; /* set mux poll */
return SCPE_OK;
}
char *clk_description (DEVICE *dptr)
{
return "100hz clock tick";
}

View file

@ -68,6 +68,7 @@ static struct boot_dev boot_tab[] = {
};
t_stat sysd_reset (DEVICE *dptr);
char *sysd_description (DEVICE *dptr);
t_stat vax610_boot (int32 flag, char *ptr);
t_stat vax610_boot_parse (int32 flag, char *ptr);
t_stat cpu_boot (int32 unitno, DEVICE *dptr);
@ -108,7 +109,8 @@ DEVICE sysd_dev = {
1, 16, 16, 1, 16, 8,
NULL, NULL, &sysd_reset,
NULL, NULL, NULL,
NULL, 0
NULL, 0, 0, NULL, NULL, NULL, NULL, NULL, NULL,
&sysd_description
};
/* Special boot command, overrides regular boot */
@ -482,6 +484,11 @@ sim_vm_cmd = vax610_cmd;
return SCPE_OK;
}
char *sysd_description (DEVICE *dptr)
{
return "system devices";
}
t_stat cpu_set_model (UNIT *uptr, int32 val, char *cptr, void *desc)
{
return SCPE_NOFNC;

View file

@ -64,6 +64,9 @@ t_stat clk_svc (UNIT *uptr);
t_stat tti_reset (DEVICE *dptr);
t_stat tto_reset (DEVICE *dptr);
t_stat clk_reset (DEVICE *dptr);
char *tti_description (DEVICE *dptr);
char *tto_description (DEVICE *dptr);
char *clk_description (DEVICE *dptr);
extern int32 sysd_hlt_enb (void);
@ -103,7 +106,8 @@ DEVICE tti_dev = {
1, 10, 31, 1, 16, 8,
NULL, NULL, &tti_reset,
NULL, NULL, NULL,
&tti_dib, 0
&tti_dib, 0, 0, NULL, NULL, NULL, NULL, NULL, NULL,
&tti_description
};
/* TTO data structures
@ -142,7 +146,8 @@ DEVICE tto_dev = {
1, 10, 31, 1, 16, 8,
NULL, NULL, &tto_reset,
NULL, NULL, NULL,
&tto_dib, 0
&tto_dib, 0, 0, NULL, NULL, NULL, NULL, NULL, NULL,
&tto_description
};
/* CLK data structures
@ -176,7 +181,8 @@ DEVICE clk_dev = {
1, 0, 0, 0, 0, 0,
NULL, NULL, &clk_reset,
NULL, NULL, NULL,
&clk_dib, 0
&clk_dib, 0, 0, NULL, NULL, NULL, NULL, NULL, NULL,
&clk_description
};
/* Clock and terminal MxPR routines
@ -287,6 +293,11 @@ sim_activate_abs (&tti_unit, KBD_WAIT (tti_unit.wait, tmr_poll));
return SCPE_OK;
}
char *tti_description (DEVICE *dptr)
{
return "console terminal input";
}
/* Terminal output routines
tto_svc process event (character typed)
@ -321,6 +332,11 @@ sim_cancel (&tto_unit); /* deactivate unit */
return SCPE_OK;
}
char *tto_description (DEVICE *dptr)
{
return "console terminal output";
}
/* Clock routines
clk_svc process event (clock tick)
@ -358,3 +374,7 @@ tmxr_poll = t * TMXR_MULT; /* set mux poll */
return SCPE_OK;
}
char *clk_description (DEVICE *dptr)
{
return "100hz clock tick";
}

View file

@ -155,12 +155,15 @@ t_stat rom_dep (t_value val, t_addr exta, UNIT *uptr, int32 sw);
t_stat rom_reset (DEVICE *dptr);
t_stat rom_set_diag (UNIT *uptr, int32 val, char *cptr, void *desc);
t_stat rom_show_diag (FILE *st, UNIT *uptr, int32 val, void *desc);
char *rom_description (DEVICE *dptr);
t_stat nvr_ex (t_value *vptr, t_addr exta, UNIT *uptr, int32 sw);
t_stat nvr_dep (t_value val, t_addr exta, UNIT *uptr, int32 sw);
t_stat nvr_reset (DEVICE *dptr);
t_stat nvr_attach (UNIT *uptr, char *cptr);
t_stat nvr_detach (UNIT *uptr);
char *nvr_description (DEVICE *dptr);
t_stat sysd_reset (DEVICE *dptr);
char *sysd_description (DEVICE *dptr);
int32 rom_rd (int32 pa);
int32 nvr_rd (int32 pa);
@ -216,7 +219,8 @@ DEVICE rom_dev = {
1, 16, ROMAWIDTH, 4, 16, 32,
&rom_ex, &rom_dep, &rom_reset,
NULL, NULL, NULL,
NULL, 0
NULL, 0, 0, NULL, NULL, NULL, NULL, NULL, NULL,
&rom_description
};
/* NVR data structures
@ -238,7 +242,8 @@ DEVICE nvr_dev = {
1, 16, NVRAWIDTH, 4, 16, 32,
&nvr_ex, &nvr_dep, &nvr_reset,
NULL, &nvr_attach, &nvr_detach,
NULL, 0
NULL, 0, 0, NULL, NULL, NULL, NULL, NULL, NULL,
&nvr_description
};
/* SYSD data structures
@ -266,7 +271,8 @@ DEVICE sysd_dev = {
1, 16, 16, 1, 16, 8,
NULL, NULL, &sysd_reset,
NULL, NULL, NULL,
NULL, 0
NULL, 0, 0, NULL, NULL, NULL, NULL, NULL, NULL,
&sysd_description
};
/* ROM: read only memory - stored in a buffered file
@ -391,6 +397,11 @@ if (rom == NULL)
return SCPE_OK;
}
char *rom_description (DEVICE *dptr)
{
return "read-only memory";
}
/* NVR: non-volatile RAM - stored in a buffered file */
int32 nvr_rd (int32 pa)
@ -488,6 +499,11 @@ if ((uptr->flags & UNIT_ATT) == 0) {
return r;
}
char *nvr_description (DEVICE *dptr)
{
return "non-volatile memory";
}
/* Read KA630 specific IPR's */
int32 ReadIPR (int32 rg)
@ -875,6 +891,11 @@ sim_vm_cmd = vax630_cmd;
return SCPE_OK;
}
char *sysd_description (DEVICE *dptr)
{
return "system devices";
}
/* SYSD powerup */
t_stat sysd_powerup (void)

View file

@ -74,6 +74,7 @@ uint32 mcsr2 = 0;
t_stat mctl_reset (DEVICE *dptr);
t_stat mctl_rdreg (int32 *val, int32 pa, int32 mode);
t_stat mctl_wrreg (int32 val, int32 pa, int32 mode);
char *mctl_description (DEVICE *dptr);
/* MCTLx data structures
@ -111,7 +112,8 @@ DEVICE mctl_dev = {
NULL, NULL, &mctl_reset,
NULL, NULL, NULL,
&mctl_dib, DEV_NEXUS | DEV_DEBUG, 0,
mctl_deb, 0, 0
mctl_deb, NULL, NULL, NULL, NULL, NULL,
&mctl_description
};
/* Memory controller register read */
@ -193,3 +195,8 @@ else
mcsr2 = mcsr2 | MEM_BOARD_MASK(MEMSIZE, MEM_SIZE_16K); /* Use 16k chips */
return SCPE_OK;
}
char *mctl_description (DEVICE *dptr)
{
return "memory controller";
}

View file

@ -215,6 +215,7 @@ t_stat rb_rd32 (int32 *data, int32 PA, int32 access);
t_stat rb_wr32 (int32 data, int32 PA, int32 access);
t_stat rb_svc (UNIT *uptr);
t_stat rb_reset (DEVICE *dptr);
char *rb_description (DEVICE *dptr);
void rb_set_done (int32 error);
t_stat rb_attach (UNIT *uptr, char *cptr);
t_stat rb_set_size (UNIT *uptr, int32 val, char *cptr, void *desc);
@ -280,7 +281,8 @@ DEVICE rb_dev = {
NULL, NULL, &rb_reset,
NULL, &rb_attach, NULL,
&rb_dib, DEV_DISABLE | DEV_UBUS | DEV_DEBUG, 0,
rb_debug, 0, 0
rb_debug, NULL, NULL, NULL, NULL, NULL,
&rb_description
};
/* I/O dispatch routines
@ -632,6 +634,11 @@ if (rbxb == NULL)
return SCPE_OK;
}
char *rb_description (DEVICE *dptr)
{
return "RB730 disk controller";
}
/* Attach routine */
t_stat rb_attach (UNIT *uptr, char *cptr)

View file

@ -214,6 +214,11 @@ t_stat tmr_svc (UNIT *uptr);
t_stat tti_reset (DEVICE *dptr);
t_stat tto_reset (DEVICE *dptr);
t_stat clk_reset (DEVICE *dptr);
char *tti_description (DEVICE *dptr);
char *tto_description (DEVICE *dptr);
char *clk_description (DEVICE *dptr);
char *tmr_description (DEVICE *dptr);
char *td_description (DEVICE *dptr);
t_stat clk_attach (UNIT *uptr, char *cptr);
t_stat clk_detach (UNIT *uptr);
t_stat tmr_reset (DEVICE *dptr);
@ -258,7 +263,8 @@ DEVICE tti_dev = {
1, 10, 31, 1, 16, 8,
NULL, NULL, &tti_reset,
NULL, NULL, NULL,
NULL, 0
NULL, 0, 0, NULL, NULL, NULL, NULL, NULL, NULL,
&tti_description
};
/* TTO data structures
@ -293,7 +299,8 @@ DEVICE tto_dev = {
1, 10, 31, 1, 16, 8,
NULL, NULL, &tto_reset,
NULL, NULL, NULL,
NULL, 0
NULL, 0, 0, NULL, NULL, NULL, NULL, NULL, NULL,
&tto_description
};
/* TODR and TMR data structures */
@ -317,7 +324,8 @@ DEVICE clk_dev = {
1, 0, 8, 4, 0, 32,
NULL, NULL, &clk_reset,
NULL, &clk_attach, &clk_detach,
NULL, 0
NULL, 0, 0, NULL, NULL, NULL, NULL, NULL, NULL,
&clk_description
};
UNIT tmr_unit = { UDATA (&tmr_svc, 0, 0) }; /* timer */
@ -338,7 +346,8 @@ DEVICE tmr_dev = {
1, 0, 0, 0, 0, 0,
NULL, NULL, &tmr_reset,
NULL, NULL, NULL,
NULL, 0
NULL, 0, 0, NULL, NULL, NULL, NULL, NULL, NULL,
&tmr_description
};
/* TU58 data structures
@ -376,7 +385,8 @@ DEVICE td_dev = {
2, DEV_RDX, 20, 1, DEV_RDX, 8,
NULL, NULL, &td_reset,
NULL, NULL, NULL,
NULL, 0
NULL, 0, 0, NULL, NULL, NULL, NULL, NULL, NULL,
&td_description
};
/* Console storage MxPR routines
@ -675,6 +685,10 @@ sim_activate_abs (&tti_unit, KBD_WAIT (tti_unit.wait, tmr_poll));
return SCPE_OK;
}
char *tti_description (DEVICE *dptr)
{
return "console terminal input";
}
/* Terminal output service (output character) */
t_stat tto_svc (UNIT *uptr)
@ -709,6 +723,11 @@ sim_cancel (&tto_unit); /* deactivate unit */
return SCPE_OK;
}
char *tto_description (DEVICE *dptr)
{
return "console terminal output";
}
/* Programmable timer
The architected VAX timer, which increments at 1Mhz, cannot be
@ -871,6 +890,11 @@ if (clk_unit.filebuf == NULL) { /* make sure the TODR is
return SCPE_OK;
}
char *clk_description (DEVICE *dptr)
{
return "time of year clock";
}
/* CLK attach */
t_stat clk_attach (UNIT *uptr, char *cptr)
@ -899,7 +923,6 @@ if ((uptr->flags & UNIT_ATT) == 0)
return r;
}
/* Interval timer reset */
t_stat tmr_reset (DEVICE *dptr)
@ -914,6 +937,11 @@ todr_resync (); /* resync TODR */
return SCPE_OK;
}
char *tmr_description (DEVICE *dptr)
{
return "interval timer";
}
/* TODR routines */
int32 todr_rd (void)
@ -1192,3 +1220,8 @@ sim_cancel (&td_dev.units[0]);
sim_cancel (&td_dev.units[1]);
return SCPE_OK;
}
char *td_description (DEVICE *dptr)
{
return "Console TU58 cartridge";
}

View file

@ -81,6 +81,7 @@ extern jmp_buf save_env;
extern int32 p1;
t_stat sysb_reset (DEVICE *dptr);
char *sysb_description (DEVICE *dptr);
t_stat vax730_boot (int32 flag, char *ptr);
t_stat vax730_boot_parse (int32 flag, char *ptr);
t_stat cpu_boot (int32 unitno, DEVICE *dptr);
@ -131,7 +132,8 @@ DEVICE sysb_dev = {
1, 16, 16, 1, 16, 8,
NULL, NULL, &sysb_reset,
NULL, NULL, NULL,
NULL, 0
NULL, 0, 0, NULL, NULL, NULL, NULL, NULL, NULL,
&sysb_description
};
/* Special boot command, overrides regular boot */
@ -572,6 +574,11 @@ sim_vm_cmd = vax730_cmd;
return SCPE_OK;
}
char *sysb_description (DEVICE *dptr)
{
return "system bus controller";
}
/* Show nexus */
t_stat show_nexus (FILE *st, UNIT *uptr, int32 val, void *desc)

View file

@ -97,6 +97,7 @@ extern UNIT cpu_unit;
extern int32 p1;
t_stat uba_reset (DEVICE *dptr);
char *uba_description (DEVICE *dptr);
t_stat uba_ex (t_value *vptr, t_addr exta, UNIT *uptr, int32 sw);
t_stat uba_dep (t_value val, t_addr exta, UNIT *uptr, int32 sw);
t_stat uba_rdreg (int32 *val, int32 pa, int32 mode);
@ -180,7 +181,8 @@ DEVICE uba_dev = {
&uba_ex, &uba_dep, &uba_reset,
NULL, NULL, NULL,
&uba_dib, DEV_NEXUS | DEV_DEBUG, 0,
uba_deb, 0, 0
uba_deb, NULL, NULL, NULL, NULL, NULL,
&uba_description
};
/* Read Unibus adapter register - aligned lw only */
@ -662,3 +664,8 @@ if (cptr) {
fprintf (of, "Invalid argument\n");
return SCPE_OK;
}
char *uba_description (DEVICE *dptr)
{
return "Unibus adapter";
}

View file

@ -101,6 +101,7 @@ extern jmp_buf save_env;
extern int32 p1;
t_stat cmi_reset (DEVICE *dptr);
char *cmi_description (DEVICE *dptr);
void cmi_set_tmo (void);
t_stat vax750_boot (int32 flag, char *ptr);
t_stat vax750_boot_parse (int32 flag, char *ptr);
@ -158,7 +159,8 @@ DEVICE cmi_dev = {
1, 16, 16, 1, 16, 8,
NULL, NULL, &cmi_reset,
NULL, NULL, NULL,
NULL, 0
NULL, 0, 0, NULL, NULL, NULL, NULL, NULL, NULL,
&cmi_description
};
/* Special boot command, overrides regular boot */
@ -659,6 +661,11 @@ cmi_cadr = 0;
return SCPE_OK;
}
char *cmi_description (DEVICE *dptr)
{
return "CPU/Memory interconnect";
}
/* Show nexus */
t_stat show_nexus (FILE *st, UNIT *uptr, int32 val, void *desc)

View file

@ -84,6 +84,7 @@ uint32 mcsr1 = 0;
uint32 mcsr2 = 0;
t_stat mctl_reset (DEVICE *dptr);
char *mctl_description (DEVICE *dptr);
t_stat mctl_rdreg (int32 *val, int32 pa, int32 mode);
t_stat mctl_wrreg (int32 val, int32 pa, int32 mode);
@ -120,7 +121,8 @@ DEVICE mctl_dev = {
NULL, NULL, &mctl_reset,
NULL, NULL, NULL,
&mctl_dib, DEV_NEXUS | DEV_DEBUG, 0,
mctl_deb, 0, 0
mctl_deb, NULL, NULL, NULL, NULL, NULL,
&mctl_description
};
/* Memory controller register read */
@ -204,3 +206,8 @@ else
mcsr2 = MCSR2_INIT | MEM_BOARD_MASK(MEMSIZE, MEM_SIZE_16K); /* Use 16k chips */
return SCPE_OK;
}
char *mctl_description (DEVICE *dptr)
{
return "Memory controller";
}

View file

@ -212,11 +212,16 @@ t_stat tmr_svc (UNIT *uptr);
t_stat tti_reset (DEVICE *dptr);
t_stat tto_reset (DEVICE *dptr);
t_stat clk_reset (DEVICE *dptr);
char *tti_description (DEVICE *dptr);
char *tto_description (DEVICE *dptr);
char *clk_description (DEVICE *dptr);
t_stat clk_attach (UNIT *uptr, char *cptr);
t_stat clk_detach (UNIT *uptr);
t_stat tmr_reset (DEVICE *dptr);
char *tmr_description (DEVICE *dptr);
t_stat td_svc (UNIT *uptr);
t_stat td_reset (DEVICE *dptr);
char *td_description (DEVICE *dptr);
int32 icr_rd (t_bool interp);
void tmr_incr (uint32 inc);
void tmr_sched (void);
@ -258,7 +263,8 @@ DEVICE tti_dev = {
1, 10, 31, 1, 16, 8,
NULL, NULL, &tti_reset,
NULL, NULL, NULL,
NULL, 0
NULL, 0, 0, NULL, NULL, NULL, NULL, NULL, NULL,
&tti_description
};
/* TTO data structures
@ -293,7 +299,8 @@ DEVICE tto_dev = {
1, 10, 31, 1, 16, 8,
NULL, NULL, &tto_reset,
NULL, NULL, NULL,
NULL, 0
NULL, 0, 0, NULL, NULL, NULL, NULL, NULL, NULL,
&tto_description
};
/* TODR and TMR data structures */
@ -317,7 +324,8 @@ DEVICE clk_dev = {
1, 0, 8, 4, 0, 32,
NULL, NULL, &clk_reset,
NULL, &clk_attach, &clk_detach,
NULL, 0
NULL, 0, 0, NULL, NULL, NULL, NULL, NULL, NULL,
&clk_description
};
UNIT tmr_unit = { UDATA (&tmr_svc, 0, 0) }; /* timer */
@ -338,7 +346,8 @@ DEVICE tmr_dev = {
1, 0, 0, 0, 0, 0,
NULL, NULL, &tmr_reset,
NULL, NULL, NULL,
NULL, 0
NULL, 0, 0, NULL, NULL, NULL, NULL, NULL, NULL,
&tmr_description
};
/* TU58 data structures
@ -374,7 +383,8 @@ DEVICE td_dev = {
1, DEV_RDX, 20, 1, DEV_RDX, 8,
NULL, NULL, &td_reset,
NULL, NULL, NULL,
NULL, 0
NULL, 0, 0, NULL, NULL, NULL, NULL, NULL, NULL,
&td_description
};
/* Console storage MxPR routines
@ -671,6 +681,11 @@ csi_int = 0;
return SCPE_OK;
}
char *tti_description (DEVICE *dptr)
{
return "console terminal input";
}
/* Terminal output service (output character) */
t_stat tto_svc (UNIT *uptr)
@ -705,6 +720,11 @@ sim_cancel (&tto_unit); /* deactivate unit */
return SCPE_OK;
}
char *tto_description (DEVICE *dptr)
{
return "console terminal output";
}
/* Programmable timer
The architected VAX timer, which increments at 1Mhz, cannot be
@ -867,6 +887,11 @@ if (clk_unit.filebuf == NULL) { /* make sure the TODR is
return SCPE_OK;
}
char *clk_description (DEVICE *dptr)
{
return "time of year clock";
}
/* CLK attach */
t_stat clk_attach (UNIT *uptr, char *cptr)
@ -910,6 +935,11 @@ todr_resync (); /* resync TODR */
return SCPE_OK;
}
char *tmr_description (DEVICE *dptr)
{
return "interval timer";
}
/* TODR routines */
int32 todr_rd (void)
@ -1185,3 +1215,8 @@ td_txsize = 0;
sim_cancel (&td_unit);
return SCPE_OK;
}
char *td_description (DEVICE *dptr)
{
return "Console TU58 cartridge";
}

View file

@ -95,6 +95,7 @@ extern int32 fault_PC; /* fault PC */
extern int32 mem_err;
t_stat uba_reset (DEVICE *dptr);
char *uba_description (DEVICE *dptr);
t_stat uba_ex (t_value *vptr, t_addr exta, UNIT *uptr, int32 sw);
t_stat uba_dep (t_value val, t_addr exta, UNIT *uptr, int32 sw);
t_stat uba_rdreg (int32 *val, int32 pa, int32 mode);
@ -181,7 +182,8 @@ DEVICE uba_dev = {
&uba_ex, &uba_dep, &uba_reset,
NULL, NULL, NULL,
&uba_dib, DEV_NEXUS | DEV_DEBUG, 0,
uba_deb, 0, 0
uba_deb, NULL, NULL, NULL, NULL, NULL,
&uba_description
};
/* Read Unibus adapter register - aligned lw only */
@ -632,6 +634,11 @@ uba_csr3 = 0;
return SCPE_OK;
}
char *uba_description (DEVICE *dptr)
{
return "Unibus adapter";
}
/* Memory examine via map (word only) */
t_stat uba_ex (t_value *vptr, t_addr exta, UNIT *uptr, int32 sw)

View file

@ -88,6 +88,7 @@ uint32 rom_lw[MCTL_NUM][ROMSIZE >> 2];
extern UNIT cpu_unit;
t_stat mctl_reset (DEVICE *dptr);
char *mctl_description (DEVICE *dptr);
t_stat mctl_rdreg (int32 *val, int32 pa, int32 mode);
t_stat mctl_wrreg (int32 val, int32 pa, int32 mode);
@ -141,14 +142,18 @@ DEVICE mctl_dev[] = {
1, 16, 16, 1, 16, 8,
NULL, NULL, &mctl_reset,
NULL, NULL, NULL,
&mctl0_dib, DEV_NEXUS
&mctl0_dib, DEV_NEXUS, 0,
NULL, NULL, NULL, NULL, NULL, NULL,
&mctl_description
},
{
"MCTL1", &mctl1_unit, mctl1_reg, mctl1_mod,
1, 16, 16, 1, 16, 8,
NULL, NULL, &mctl_reset,
NULL, NULL, NULL,
&mctl1_dib, DEV_NEXUS
&mctl1_dib, DEV_NEXUS, 0,
NULL, NULL, NULL, NULL, NULL, NULL,
&mctl_description
}
};
@ -276,3 +281,11 @@ for (i = 0; i < MCTL_NUM; i++) { /* init for MS780C */
}
return SCPE_OK;
}
char *mctl_description (DEVICE *dptr)
{
static char buf[64];
sprintf (buf, "Memory controller %d", (int)(dptr-mctl_dev));
return buf;
}

View file

@ -138,6 +138,7 @@ extern jmp_buf save_env;
extern int32 p1;
t_stat sbi_reset (DEVICE *dptr);
char *sbi_description (DEVICE *dptr);
void sbi_set_tmo (int32 pa);
void uba_eval_int (void);
t_stat vax780_boot (int32 flag, char *ptr);
@ -195,7 +196,8 @@ DEVICE sbi_dev = {
1, 16, 16, 1, 16, 8,
NULL, NULL, &sbi_reset,
NULL, NULL, NULL,
NULL, 0
NULL, 0, 0, NULL, NULL, NULL, NULL, NULL, NULL,
&sbi_description
};
/* Special boot command, overrides regular boot */
@ -727,6 +729,11 @@ sim_vm_cmd = vax780_cmd;
return SCPE_OK;
}
char *sbi_description (DEVICE *dptr)
{
return "Synchronous Backplane Interconnect";
}
/* Show nexus */
t_stat show_nexus (FILE *st, UNIT *uptr, int32 val, void *desc)

View file

@ -228,6 +228,11 @@ t_stat tmr_svc (UNIT *uptr);
t_stat tti_reset (DEVICE *dptr);
t_stat tto_reset (DEVICE *dptr);
t_stat clk_reset (DEVICE *dptr);
char *tti_description (DEVICE *dptr);
char *tto_description (DEVICE *dptr);
char *clk_description (DEVICE *dptr);
char *tmr_description (DEVICE *dptr);
char *fl_description (DEVICE *dptr);
t_stat clk_attach (UNIT *uptr, char *cptr);
t_stat clk_detach (UNIT *uptr);
t_stat tmr_reset (DEVICE *dptr);
@ -274,7 +279,8 @@ DEVICE tti_dev = {
1, 10, 31, 1, 16, 8,
NULL, NULL, &tti_reset,
NULL, NULL, NULL,
NULL, 0
NULL, 0, 0, NULL, NULL, NULL, NULL, NULL, NULL,
&tti_description
};
/* TTO data structures
@ -309,7 +315,8 @@ DEVICE tto_dev = {
1, 10, 31, 1, 16, 8,
NULL, NULL, &tto_reset,
NULL, NULL, NULL,
NULL, 0
NULL, 0, 0, NULL, NULL, NULL, NULL, NULL, NULL,
&tto_description
};
/* TODR and TMR data structures */
@ -333,7 +340,8 @@ DEVICE clk_dev = {
1, 0, 8, 4, 0, 32,
NULL, NULL, &clk_reset,
NULL, &clk_attach, &clk_detach,
NULL, 0
NULL, 0, 0, NULL, NULL, NULL, NULL, NULL, NULL,
&clk_description
};
UNIT tmr_unit = { UDATA (&tmr_svc, 0, 0) }; /* timer */
@ -354,7 +362,8 @@ DEVICE tmr_dev = {
1, 0, 0, 0, 0, 0,
NULL, NULL, &tmr_reset,
NULL, NULL, NULL,
NULL, 0
NULL, 0, 0, NULL, NULL, NULL, NULL, NULL, NULL,
&tmr_description
};
/* RX01 data structures
@ -396,7 +405,8 @@ DEVICE fl_dev = {
1, DEV_RDX, 20, 1, DEV_RDX, 8,
NULL, NULL, &fl_reset,
NULL, NULL, NULL,
NULL, 0
NULL, 0, 0, NULL, NULL, NULL, NULL, NULL, NULL,
&fl_description
};
/* Terminal MxPR routines
@ -465,6 +475,8 @@ t_stat tti_svc (UNIT *uptr)
int32 c;
sim_clock_coschedule (uptr, tmxr_poll); /* continue poll */
if (tti_csr & CSR_DONE) /* is last input processed yet? */
return SCPE_OK; /* wait */
if ((c = sim_poll_kbd ()) < SCPE_KFLAG) /* no char or error? */
return c;
if (c & SCPE_BREAK) /* break? */
@ -489,6 +501,11 @@ sim_activate (&tti_unit, KBD_WAIT (tti_unit.wait, tmr_poll));
return SCPE_OK;
}
char *tti_description (DEVICE *dptr)
{
return "console terminal input";
}
/* Terminal output service (output character) */
t_stat tto_svc (UNIT *uptr)
@ -523,6 +540,11 @@ sim_cancel (&tto_unit); /* deactivate unit */
return SCPE_OK;
}
char *tto_description (DEVICE *dptr)
{
return "console terminal output";
}
/* Programmable timer
The architected VAX timer, which increments at 1Mhz, cannot be
@ -685,6 +707,11 @@ if (clk_unit.filebuf == NULL) { /* make sure the TODR is
return SCPE_OK;
}
char *clk_description (DEVICE *dptr)
{
return "time of year clock";
}
/* CLK attach */
t_stat clk_attach (UNIT *uptr, char *cptr)
@ -728,6 +755,11 @@ todr_resync (); /* resync TODR */
return SCPE_OK;
}
char *tmr_description (DEVICE *dptr)
{
return "interval timer";
}
/* TODR routines */
int32 todr_rd (void)
@ -1074,3 +1106,8 @@ else { /* 780 */
comm_region[COMM_GH] = 1;
return SCPE_OK;
}
char *fl_description (DEVICE *dptr)
{
return "console floppy";
}

View file

@ -184,6 +184,7 @@ extern uint32 nexus_req[NEXUS_HLVL];
t_stat uba_svc (UNIT *uptr);
t_stat uba_reset (DEVICE *dptr);
char *uba_description (DEVICE *dptr);
t_stat uba_ex (t_value *vptr, t_addr exta, UNIT *uptr, int32 sw);
t_stat uba_dep (t_value val, t_addr exta, UNIT *uptr, int32 sw);
t_stat uba_rdreg (int32 *val, int32 pa, int32 mode);
@ -290,7 +291,8 @@ DEVICE uba_dev = {
&uba_ex, &uba_dep, &uba_reset,
NULL, NULL, NULL,
&uba_dib, DEV_NEXUS | DEV_DEBUG, 0,
uba_deb, 0, 0
uba_deb, NULL, NULL, NULL, NULL, NULL,
&uba_description
};
/* Read Unibus adapter register - aligned lw only */
@ -931,6 +933,11 @@ uba_cnf = UBACNF_UBIC;
return SCPE_OK;
}
char *uba_description (DEVICE *dptr)
{
return "Unibus adapter";
}
/* Memory examine via map (word only) */
t_stat uba_ex (t_value *vptr, t_addr exta, UNIT *uptr, int32 sw)

View file

@ -255,6 +255,7 @@ extern uint32 nexus_req[NEXUS_HLVL];
extern UNIT cpu_unit;
t_stat mba_reset (DEVICE *dptr);
char *mba_description (DEVICE *dptr);
t_stat mba_rdreg (int32 *val, int32 pa, int32 mode);
t_stat mba_wrreg (int32 val, int32 pa, int32 lnt);
t_bool mba_map_addr (uint32 va, uint32 *ma, uint32 mb);
@ -340,7 +341,8 @@ DEVICE mba_dev[] = {
NULL, NULL, &mba_reset,
NULL, NULL, NULL,
&mba0_dib, DEV_NEXUS | DEV_DEBUG, 0,
mba_deb, 0, 0
mba_deb, NULL, NULL, NULL, NULL, NULL,
&mba_description
},
{
"MBA1", &mba1_unit, mba1_reg, mba1_mod,
@ -348,7 +350,8 @@ DEVICE mba_dev[] = {
NULL, NULL, &mba_reset,
NULL, NULL, NULL,
&mba1_dib, DEV_NEXUS | DEV_DEBUG, 0,
mba_deb, 0, 0
mba_deb, NULL, NULL, NULL, NULL, NULL,
&mba_description
}
};
@ -853,6 +856,14 @@ if (mbabort[mb]) /* reset device */
return SCPE_OK;
}
char *mba_description (DEVICE *dptr)
{
static char buf[64];
sprintf (buf, "Massbus adapter %d", (int)(dptr-mba_dev));
return buf;
}
/* Show Massbus adapter number */
t_stat mba_show_num (FILE *st, UNIT *uptr, int32 val, void *desc)

View file

@ -123,6 +123,7 @@ extern UNIT cpu_unit;
void uba_eval_int (void);
t_stat abus_reset (DEVICE *dptr);
char *abus_description (DEVICE *dptr);
t_stat vax860_boot (int32 flag, char *ptr);
t_stat vax860_boot_parse (int32 flag, char *ptr);
t_stat cpu_boot (int32 unitno, DEVICE *dptr);
@ -177,7 +178,8 @@ DEVICE abus_dev = {
1, 16, 16, 1, 16, 8,
NULL, NULL, &abus_reset,
NULL, NULL, NULL,
NULL, 0
NULL, 0, 0, NULL, NULL, NULL, NULL, NULL, NULL,
&abus_description
};
/* Special boot command, overrides regular boot */
@ -682,6 +684,12 @@ sim_vm_cmd = vax860_cmd;
return SCPE_OK;
}
char *abus_description (DEVICE *dptr)
{
return "bus controller";
}
/* Build dib_tab from device list */
t_stat build_dib_tab (void)

View file

@ -92,6 +92,7 @@ extern int32 fault_PC; /* fault PC */
extern UNIT cpu_unit;
t_stat sbia_reset (DEVICE *dptr);
char *sbia_description (DEVICE *dptr);
void sbi_set_tmo (int32 pa);
t_stat (*nexusR[NEXUS_NUM])(int32 *dat, int32 ad, int32 md);
t_stat (*nexusW[NEXUS_NUM])(int32 dat, int32 ad, int32 md);
@ -127,7 +128,8 @@ DEVICE sbia_dev = {
1, 16, 16, 1, 16, 8,
NULL, NULL, &sbia_reset,
NULL, NULL, NULL,
NULL, 0
NULL, 0, 0, NULL, NULL, NULL, NULL, NULL, NULL,
&sbia_description
};
int32 sbia_rd (int32 pa, int32 lnt)
@ -300,6 +302,11 @@ sbi_csr = SBICSR_SCOEN | SBICSR_SCIEN;
return SCPE_OK;
}
char *sbia_description (DEVICE *dptr)
{
return "SBI adapter";
}
/* Show nexus */
t_stat show_nexus (FILE *st, UNIT *uptr, int32 val, void *desc)

View file

@ -245,10 +245,14 @@ t_stat rlcs_svc (UNIT *uptr);
t_stat tti_reset (DEVICE *dptr);
t_stat tto_reset (DEVICE *dptr);
t_stat clk_reset (DEVICE *dptr);
char *tti_description (DEVICE *dptr);
char *tto_description (DEVICE *dptr);
char *clk_description (DEVICE *dptr);
char *tmr_description (DEVICE *dptr);
char *rlcs_description (DEVICE *dptr);
t_stat clk_attach (UNIT *uptr, char *cptr);
t_stat clk_detach (UNIT *uptr);
t_stat tmr_reset (DEVICE *dptr);
t_stat lc_reset (DEVICE *dptr);
t_stat rlcs_reset (DEVICE *dptr);
t_stat rlcs_attach (UNIT *uptr, char *cptr);
int32 icr_rd (t_bool interp);
@ -295,7 +299,8 @@ DEVICE tti_dev = {
4, 10, 31, 1, 16, 8,
NULL, NULL, &tti_reset,
NULL, NULL, NULL,
NULL, 0
NULL, 0, 0, NULL, NULL, NULL, NULL, NULL, NULL,
&tti_description
};
/* TTO data structures
@ -335,7 +340,8 @@ DEVICE tto_dev = {
4, 10, 31, 1, 16, 8,
NULL, NULL, &tto_reset,
NULL, NULL, NULL,
NULL, 0
NULL, 0, 0, NULL, NULL, NULL, NULL, NULL, NULL,
&tto_description
};
/* TODR and TMR data structures */
@ -359,7 +365,8 @@ DEVICE clk_dev = {
1, 0, 8, 4, 0, 32,
NULL, NULL, &clk_reset,
NULL, &clk_attach, &clk_detach,
NULL, 0
NULL, 0, 0, NULL, NULL, NULL, NULL, NULL, NULL,
&clk_description
};
UNIT tmr_unit = { UDATA (&tmr_svc, 0, 0) }; /* timer */
@ -380,7 +387,8 @@ DEVICE tmr_dev = {
1, 0, 0, 0, 0, 0,
NULL, NULL, &tmr_reset,
NULL, NULL, NULL,
NULL, 0
NULL, 0, 0, NULL, NULL, NULL, NULL, NULL, NULL,
&tmr_description
};
/* Console storage structures
@ -412,7 +420,8 @@ DEVICE rlcs_dev = {
1, 10, 24, 1, 16, 16,
NULL, NULL, &rlcs_reset,
NULL, &rlcs_attach, NULL,
NULL, 0
NULL, 0, 0, NULL, NULL, NULL, NULL, NULL, NULL,
&rlcs_description
};
/* Terminal MxPR routines
@ -613,6 +622,11 @@ sim_activate_abs (&tti_unit[ID_CT], KBD_WAIT (tti_unit[ID_CT].wait, tmr_poll));
return SCPE_OK;
}
char *tti_description (DEVICE *dptr)
{
return "console terminal input";
}
/* Terminal output service (output character) */
t_stat tto_svc (UNIT *uptr)
@ -660,6 +674,11 @@ sim_cancel (&tto_unit[ID_LC]);
return SCPE_OK;
}
char *tto_description (DEVICE *dptr)
{
return "console terminal output";
}
/* Programmable timer
The architected VAX timer, which increments at 1Mhz, cannot be
@ -822,6 +841,11 @@ if (clk_unit.filebuf == NULL) { /* make sure the TODR is
return SCPE_OK;
}
char *clk_description (DEVICE *dptr)
{
return "time of year clock";
}
/* CLK attach */
t_stat clk_attach (UNIT *uptr, char *cptr)
@ -864,6 +888,11 @@ todr_resync (); /* resync TODR */
return SCPE_OK;
}
char *tmr_description (DEVICE *dptr)
{
return "interval timer";
}
/* TODR routines */
int32 todr_rd (void)
@ -1129,6 +1158,11 @@ sim_cancel (&rlcs_unit); /* deactivate unit */
return SCPE_OK;
}
char *rlcs_description (DEVICE *dptr)
{
return "Console RL02 disk";
}
t_stat rlcs_attach (UNIT *uptr, char *cptr)
{
uint32 p;

View file

@ -388,6 +388,7 @@ t_stat cpu_show_hist (FILE *st, UNIT *uptr, int32 val, void *desc);
t_stat cpu_show_virt (FILE *st, UNIT *uptr, int32 val, void *desc);
t_stat cpu_set_idle (UNIT *uptr, int32 val, char *cptr, void *desc);
t_stat cpu_show_idle (FILE *st, UNIT *uptr, int32 val, void *desc);
char *cpu_description (DEVICE *dptr);
int32 cpu_get_vsw (int32 sw);
SIM_INLINE int32 get_istr (int32 lnt, int32 acc);
int32 ReadOcta (int32 va, int32 *opnd, int32 j, int32 acc);
@ -491,7 +492,8 @@ DEVICE cpu_dev = {
&cpu_ex, &cpu_dep, &cpu_reset,
&cpu_boot, NULL, NULL,
NULL, DEV_DYNM | DEV_DEBUG, 0,
cpu_deb, &cpu_set_size, NULL, &cpu_help, NULL, NULL
cpu_deb, &cpu_set_size, NULL, &cpu_help, NULL, NULL,
&cpu_description
};
t_stat cpu_show_model (FILE *st, UNIT *uptr, int32 val, void *desc)
@ -500,6 +502,24 @@ fprintf (st, "model=");
return cpu_print_model (st);
}
char *cpu_description (DEVICE *dptr)
{
static char buf[80];
uint32 min_mem = 4096, max_mem = 0;
MTAB *mptr;
for (mptr = dptr->modifiers; mptr && (mptr->mask != 0); mptr++) {
if (mptr->valid != &cpu_set_size)
continue;
if ((mptr->match >> 20) < min_mem)
min_mem = (mptr->match >> 20);
if ((mptr->match >> 20) > max_mem)
max_mem = (mptr->match >> 20);
}
sprintf (buf, "VAX CPU with %dMB-%dMB of memory", (int)min_mem, (int)max_mem);
return buf;
}
t_stat sim_instr (void)
{
volatile int32 opc, cc; /* used by setjmp */

View file

@ -132,6 +132,7 @@ t_stat set_autocon (UNIT *uptr, int32 val, char *cptr, void *desc);
t_stat show_autocon (FILE *st, UNIT *uptr, int32 val, void *desc);
t_stat show_iospace (FILE *st, UNIT *uptr, int32 val, void *desc);
t_stat qba_show_virt (FILE *of, UNIT *uptr, int32 val, void *desc);
char *qba_description (DEVICE *dptr);
/* Qbus adapter data structures
@ -178,7 +179,8 @@ DEVICE qba_dev = {
1, 16, CQMAWIDTH, 2, 16, 16,
&qba_ex, &qba_dep, &qba_reset,
NULL, NULL, NULL,
&qba_dib, DEV_QBUS
&qba_dib, DEV_QBUS, 0, NULL, NULL, NULL, NULL, NULL, NULL,
&qba_description
};
/* IO page dispatches */
@ -818,3 +820,8 @@ if (cptr) {
fprintf (of, "Invalid argument\n");
return SCPE_OK;
}
char *qba_description (DEVICE *dptr)
{
return "Qbus adapter";
}

View file

@ -102,6 +102,7 @@ static const int32 cvtacc[16] = { 0, 0,
t_stat tlb_ex (t_value *vptr, t_addr addr, UNIT *uptr, int32 sw);
t_stat tlb_dep (t_value val, t_addr addr, UNIT *uptr, int32 sw);
t_stat tlb_reset (DEVICE *dptr);
char *tlb_description (DEVICE *dptr);
TLBENT fill (uint32 va, int32 lnt, int32 acc, int32 *stat);
extern int32 ReadIO (uint32 pa, int32 lnt);
@ -129,7 +130,8 @@ DEVICE tlb_dev = {
"TLB", tlb_unit, tlb_reg, NULL,
2, 16, VA_N_TBI * 2, 1, 16, 32,
&tlb_ex, &tlb_dep, &tlb_reset,
NULL, NULL, NULL
NULL, NULL, NULL, NULL, 0, 0, NULL, NULL, NULL, NULL, NULL, NULL,
&tlb_description
};
/* Read and write virtual
@ -626,3 +628,8 @@ for (i = 0; i < VA_TBSIZE; i++)
stlb[i].tag = ptlb[i].tag = stlb[i].pte = ptlb[i].pte = -1;
return SCPE_OK;
}
char *tlb_description (DEVICE *dptr)
{
return "translation buffer";
}

View file

@ -119,6 +119,9 @@ t_stat clk_reset (DEVICE *dptr);
t_stat clk_attach (UNIT *uptr, char *cptr);
t_stat clk_detach (UNIT *uptr);
t_stat todr_resync (void);
char *tti_description (DEVICE *dptr);
char *tto_description (DEVICE *dptr);
char *clk_description (DEVICE *dptr);
extern int32 sysd_hlt_enb (void);
extern int32 fault_PC;
@ -159,7 +162,8 @@ DEVICE tti_dev = {
1, 10, 31, 1, 16, 8,
NULL, NULL, &tti_reset,
NULL, NULL, NULL,
&tti_dib, 0
&tti_dib, 0, 0, NULL, NULL, NULL, NULL, NULL, NULL,
&tti_description
};
/* TTO data structures
@ -198,7 +202,8 @@ DEVICE tto_dev = {
1, 10, 31, 1, 16, 8,
NULL, NULL, &tto_reset,
NULL, NULL, NULL,
&tto_dib, 0
&tto_dib, 0, 0, NULL, NULL, NULL, NULL, NULL, NULL,
&tto_description
};
/* CLK data structures
@ -239,7 +244,8 @@ DEVICE clk_dev = {
1, 0, 8, 4, 0, 32,
NULL, NULL, &clk_reset,
NULL, &clk_attach, &clk_detach,
&clk_dib, 0
&clk_dib, 0, 0, NULL, NULL, NULL, NULL, NULL, NULL,
&clk_description
};
/* Clock and terminal MxPR routines
@ -350,6 +356,11 @@ sim_activate (&tti_unit, KBD_WAIT (tti_unit.wait, tmr_poll));
return SCPE_OK;
}
char *tti_description (DEVICE *dptr)
{
return "console terminal input";
}
/* Terminal output routines
tto_svc process event (character typed)
@ -384,6 +395,11 @@ sim_cancel (&tto_unit); /* deactivate unit */
return SCPE_OK;
}
char *tto_description (DEVICE *dptr)
{
return "console terminal output";
}
/* Clock routines
clk_svc process event (clock tick)
@ -508,6 +524,11 @@ if (clk_unit.filebuf == NULL) { /* make sure the TODR is
return SCPE_OK;
}
char *clk_description (DEVICE *dptr)
{
return "time of year clock";
}
/* CLK attach */
t_stat clk_attach (UNIT *uptr, char *cptr)

View file

@ -234,16 +234,21 @@ static uint32 rom_delay = 0;
t_stat rom_ex (t_value *vptr, t_addr exta, UNIT *uptr, int32 sw);
t_stat rom_dep (t_value val, t_addr exta, UNIT *uptr, int32 sw);
t_stat rom_reset (DEVICE *dptr);
char *rom_description (DEVICE *dptr);
t_stat nvr_ex (t_value *vptr, t_addr exta, UNIT *uptr, int32 sw);
t_stat nvr_dep (t_value val, t_addr exta, UNIT *uptr, int32 sw);
t_stat nvr_reset (DEVICE *dptr);
t_stat nvr_attach (UNIT *uptr, char *cptr);
t_stat nvr_detach (UNIT *uptr);
char *nvr_description (DEVICE *dptr);
t_stat csi_reset (DEVICE *dptr);
char *csi_description (DEVICE *dptr);
t_stat cso_reset (DEVICE *dptr);
t_stat cso_svc (UNIT *uptr);
char *cso_description (DEVICE *dptr);
t_stat tmr_svc (UNIT *uptr);
t_stat sysd_reset (DEVICE *dptr);
char *sysd_description (DEVICE *dptr);
int32 rom_rd (int32 pa);
int32 nvr_rd (int32 pa);
@ -318,7 +323,8 @@ DEVICE rom_dev = {
1, 16, ROMAWIDTH, 4, 16, 32,
&rom_ex, &rom_dep, &rom_reset,
NULL, NULL, NULL,
NULL, 0
NULL, 0, 0, NULL, NULL, NULL, NULL, NULL, NULL,
&rom_description
};
/* NVR data structures
@ -340,7 +346,8 @@ DEVICE nvr_dev = {
1, 16, NVRAWIDTH, 4, 16, 32,
&nvr_ex, &nvr_dep, &nvr_reset,
NULL, &nvr_attach, &nvr_detach,
NULL, 0
NULL, 0, 0, NULL, NULL, NULL, NULL, NULL, NULL,
&nvr_description
};
/* CSI data structures
@ -376,7 +383,7 @@ DEVICE csi_dev = {
1, 10, 31, 1, 8, 8,
NULL, NULL, &csi_reset,
NULL, NULL, NULL,
&csi_dib, 0
&csi_dib, 0, 0, NULL, NULL, NULL, NULL, NULL, NULL
};
/* CSO data structures
@ -412,7 +419,7 @@ DEVICE cso_dev = {
1, 10, 31, 1, 8, 8,
NULL, NULL, &cso_reset,
NULL, NULL, NULL,
&cso_dib, 0
&cso_dib, 0, 0, NULL, NULL, NULL, NULL, NULL, NULL
};
/* SYSD data structures
@ -469,7 +476,8 @@ DEVICE sysd_dev = {
2, 16, 16, 1, 16, 8,
NULL, NULL, &sysd_reset,
NULL, NULL, NULL,
&sysd_dib, 0
&sysd_dib, 0, 0, NULL, NULL, NULL, NULL, NULL, NULL,
&sysd_description
};
/* ROM: read only memory - stored in a buffered file
@ -595,6 +603,11 @@ if (rom == NULL)
return SCPE_OK;
}
char *rom_description (DEVICE *dptr)
{
return "read-only memory";
}
/* NVR: non-volatile RAM - stored in a buffered file */
int32 nvr_rd (int32 pa)
@ -688,6 +701,11 @@ if ((uptr->flags & UNIT_ATT) == 0)
return r;
}
char *nvr_description (DEVICE *dptr)
{
return "non-volatile memory";
}
/* CSI: console storage input */
int32 csrs_rd (void)
@ -720,6 +738,11 @@ CLR_INT (CSI);
return SCPE_OK;
}
char *csi_description (DEVICE *dptr)
{
return "console storage input";
}
/* CSO: console storage output */
int32 csts_rd (void)
@ -771,6 +794,11 @@ sim_cancel (&cso_unit); /* deactivate unit */
return SCPE_OK;
}
char *cso_description (DEVICE *dptr)
{
return "console storage output";
}
/* SYSD: SSC access mechanisms and devices
- IPR space read/write routines
@ -1503,6 +1531,11 @@ int32 tmr1_inta (void)
return tmr_tivr[1];
}
char *tmr_description (DEVICE *dptr)
{
return "non-volatile memory";
}
/* Machine check */
int32 machine_check (int32 p1, int32 opc, int32 cc, int32 delta)
@ -1643,6 +1676,10 @@ ssc_otp = 0;
return SCPE_OK;
}
char *sysd_description (DEVICE *dptr)
{
return "system devices";
}
t_stat cpu_model_help (FILE *st, DEVICE *dptr, UNIT *uptr, int32 flag, char *cptr)
{

View file

@ -63,6 +63,7 @@ int32 wtc_mode = WTC_MODE_VMS;
t_stat wtc_set (UNIT *uptr, int32 val, char *cptr, void *desc);
t_stat wtc_show (FILE *st, UNIT *uptr, int32 val, void *desc);
char *wtc_description (DEVICE *dptr);
t_stat wtc_reset (DEVICE *dptr);
void wtc_set_valid (void);
void wtc_set_invalid (void);
@ -87,7 +88,8 @@ DEVICE wtc_dev = {
1, 16, 16, 1, 16, 8,
NULL, NULL, &wtc_reset,
NULL, NULL, NULL,
NULL, 0
NULL, 0, 0, NULL, NULL, NULL, NULL, NULL, NULL,
&wtc_description
};
int32 wtc_rd (int32 pa)
@ -213,3 +215,8 @@ void wtc_set_invalid (void)
{
wtc_csrd &= ~WTC_CSRD_VRT;
}
char *wtc_description (DEVICE *dptr)
{
return "watch chip";
}

36
scp.c
View file

@ -371,7 +371,7 @@ t_stat show_break (FILE *st, DEVICE *dptr, UNIT *uptr, int32 flag, char *cptr);
t_stat show_on (FILE *st, DEVICE *dptr, UNIT *uptr, int32 flag, char *cptr);
t_stat show_device (FILE *st, DEVICE *dptr, int32 flag);
t_stat show_unit (FILE *st, DEVICE *dptr, UNIT *uptr, int32 flag);
t_stat show_all_mods (FILE *st, DEVICE *dptr, UNIT *uptr, int32 flg);
int show_all_mods (FILE *st, DEVICE *dptr, UNIT *uptr, int32 flg);
t_stat show_one_mod (FILE *st, DEVICE *dptr, UNIT *uptr, MTAB *mptr, char *cptr, int32 flag);
t_stat sim_check_console (int32 sec);
t_stat sim_save (FILE *sfile);
@ -717,6 +717,7 @@ static CTAB cmd_table[] = {
"sh{ow} con{figuration} show configuration\n"
"sh{ow} cons{ole} {arg} show console options\n"
"sh{ow} dev{ices} show devices\n"
"sh{ow} sys{tem} show system devices with descriptions\n"
"sh{ow} m{odifiers} show modifiers for all devices\n"
"sh{ow} s{how} show SHOW commands for all devices\n"
"sh{ow} n{ames} show logical names\n"
@ -739,7 +740,7 @@ static CTAB cmd_table[] = {
"sh{ow} clocks show calibrated timers\n"
"sh{ow} on show on condition actions\n" },
{ "DO", &do_cmd, 1,
"do {-V} {-O} {-E} {-Q} <file> {arg,arg...}\b"
"do {-V} {-O} {-E} {-Q} <file> {arg,arg...}\n"
" process command file\n" },
{ "GOTO", &goto_cmd, 1,
"goto <label> goto label in command file\n" },
@ -2337,6 +2338,7 @@ SHTAB *shtb, *shptr;
static SHTAB show_glob_tab[] = {
{ "CONFIGURATION", &show_config, 0 },
{ "DEVICES", &show_config, 1 },
{ "SYSTEM", &show_config, 2 },
{ "QUEUE", &show_queue, 0 },
{ "TIME", &show_time, 0 },
{ "MODIFIERS", &show_mod_names, 0 },
@ -2448,10 +2450,14 @@ t_stat show_device (FILE *st, DEVICE *dptr, int32 flag)
{
uint32 j, udbl, ucnt;
UNIT *uptr;
int mods;
fprintf (st, "%s", sim_dname (dptr)); /* print dev name */
if ((flag == 2) && dptr->description) {
fprintf (st, "\t%s\n", dptr->description(dptr));
}
if (qdisable (dptr)) { /* disabled? */
fprintf (st, ", disabled\n");
fprintf (st, "\tdisabled\n");
return SCPE_OK;
}
for (j = ucnt = udbl = 0; j < dptr->numunits; j++) { /* count units */
@ -2461,15 +2467,17 @@ for (j = ucnt = udbl = 0; j < dptr->numunits; j++) { /* count units */
else if (uptr->flags & UNIT_DISABLE)
udbl++; /* count user-disabled */
}
show_all_mods (st, dptr, dptr->units, MTAB_VDV); /* show dev mods */
if (dptr->numunits == 0)
fprintf (st, "\n");
mods = show_all_mods (st, dptr, dptr->units, MTAB_VDV); /* show dev mods */
if (dptr->numunits == 0) {
if (mods)
fprintf (st, "\n");
}
else {
if (ucnt == 0)
fprintf (st, ", all units disabled\n");
fprintf (st, "%sall units disabled\n", mods ? ", " : "\t");
else if ((ucnt > 1) || (udbl > 0))
fprintf (st, ", %d units\n", ucnt + udbl);
else if (flag)
fprintf (st, "%s%d units\n", mods ? ", " : "\t", ucnt + udbl);
else if (mods || (flag == 1) || ((flag == 2) && !dptr->description))
fprintf (st, "\n");
}
if (flag) /* dev only? */
@ -2807,9 +2815,11 @@ if ((dptr->flags & DEV_DEBUG) && dptr->debflags) {
return SCPE_OK;
}
t_stat show_all_mods (FILE *st, DEVICE *dptr, UNIT *uptr, int32 flag)
int show_all_mods (FILE *st, DEVICE *dptr, UNIT *uptr, int32 flag)
{
MTAB *mptr;
t_bool first_mod = TRUE;
int mods_shown = 0;
if (dptr->modifiers == NULL)
return SCPE_OK;
@ -2817,11 +2827,13 @@ for (mptr = dptr->modifiers; mptr->mask != 0; mptr++) {
if (mptr->pstring && ((mptr->mask & MTAB_XTD)?
((mptr->mask & flag) && !(mptr->mask & MTAB_NMO)):
((MTAB_VUN & flag) && ((uptr->flags & mptr->mask) == mptr->match)))) {
fputs (", ", st);
fputs (first_mod ? "\t" : ", ", st);
first_mod = FALSE;
show_one_mod (st, dptr, uptr, mptr, NULL, 0);
++mods_shown;
}
}
return SCPE_OK;
return mods_shown;
}
t_stat show_one_mod (FILE *st, DEVICE *dptr, UNIT *uptr, MTAB *mptr,

View file

@ -325,10 +325,14 @@ struct sim_device {
/* mem size routine */
char *lname; /* logical name */
t_stat (*help)(FILE *st, struct sim_device *dptr,
struct sim_unit *uptr, int32 flag, char *cptr); /* help */
struct sim_unit *uptr, int32 flag, char *cptr);
/* help */
t_stat (*attach_help)(FILE *st, struct sim_device *dptr,
struct sim_unit *uptr, int32 flag, char *cptr); /* attach help */
struct sim_unit *uptr, int32 flag, char *cptr);
/* attach help */
void *help_ctx; /* Context available to help routines */
char *(*description)(struct sim_device *dptr);
/* Device Description */
};
/* Device flags */