mirror of
https://github.com/open-simh/simh.git
synced 2026-05-04 23:25:46 +00:00
Qbus & Unibus VAX: Add a SHOW QBA|UBA MAP{=n} command to display the bus map
This commit is contained in:
@@ -362,9 +362,6 @@ extern void fp11 (int32 IR);
|
||||
extern t_stat cis11 (int32 IR);
|
||||
extern t_stat fis11 (int32 IR);
|
||||
extern t_stat build_dib_tab (void);
|
||||
extern t_stat show_iospace (FILE *st, UNIT *uptr, int32 val, CONST void *desc);
|
||||
extern t_stat set_autocon (UNIT *uptr, int32 val, CONST char *cptr, void *desc);
|
||||
extern t_stat show_autocon (FILE *st, UNIT *uptr, int32 val, CONST void *desc);
|
||||
extern t_stat iopageR (int32 *data, uint32 addr, int32 access);
|
||||
extern t_stat iopageW (int32 data, uint32 addr, int32 access);
|
||||
extern int32 calc_ints (int32 nipl, int32 trq);
|
||||
|
||||
@@ -572,6 +572,63 @@ for (i = 0, dibp = NULL; i < (IOPAGESIZE >> 1); i++) { /* loop thru entries */
|
||||
return SCPE_OK;
|
||||
}
|
||||
|
||||
static t_bool _map_description (char *buf, size_t buf_size, uint32 val, uint32 index, uint32 valid_mask)
|
||||
{
|
||||
t_bool ind_eq = (index == (val & ~valid_mask));
|
||||
const char *desc = ind_eq ? "Value == Index" : "";
|
||||
const char *valid = (val & valid_mask) ? "Valid" : "";
|
||||
|
||||
*buf = '\0';
|
||||
if (*desc || *valid)
|
||||
snprintf (buf, buf_size, " (%s%s%s)", valid, (*valid && *desc) ? ", " : "", desc);
|
||||
return ind_eq;
|
||||
}
|
||||
|
||||
/* Display bus map registers */
|
||||
|
||||
t_stat show_bus_map (FILE *st, const char *cptr, uint32 *busmap, uint32 nmapregs, const char *busname, uint32 mapvalid)
|
||||
{
|
||||
t_stat r;
|
||||
uint32 mr;
|
||||
uint32 mstart = 0;
|
||||
uint32 mend = nmapregs - 1;
|
||||
uint32 same_val;
|
||||
uint32 same_start;
|
||||
t_bool ind_eq;
|
||||
char same_desc[32];
|
||||
char desc[32];
|
||||
|
||||
if (cptr) {
|
||||
mstart = mend = (uint32) get_uint (cptr, 16, nmapregs - 1, &r);
|
||||
if (r != SCPE_OK)
|
||||
return sim_messagef (SCPE_ARG, "Invalid %s Map Register: %s\n", busname, cptr);
|
||||
}
|
||||
_map_description (desc, sizeof (desc), busmap[mstart], mstart, mapvalid);
|
||||
fprintf (st, "%s-MAP[%04X] = %08X%s\n", busname, mstart, busmap[mstart], desc);
|
||||
same_start = mstart;
|
||||
same_val = busmap[mstart];
|
||||
strcpy (same_desc, desc);
|
||||
for (mr = mstart + 1; mr <= mend; mr++) {
|
||||
ind_eq = _map_description (desc, sizeof (desc), busmap[mr], mr, mapvalid);
|
||||
if (((same_val == busmap[mr]) && (0 == strcmp (desc, same_desc))) ||
|
||||
(ind_eq && (0 == strcmp (desc, same_desc)))) {
|
||||
same_val = busmap[mr];
|
||||
strcpy (same_desc, desc);
|
||||
continue;
|
||||
}
|
||||
if (same_start != mr - 1)
|
||||
fprintf (st, "%s-MAP[%04X thru %04X] same as above\n", busname, same_start + 1, mr - 1);
|
||||
fprintf (st, "%s-MAP[%04X] = %08X%s\n", busname, mr, busmap[mr], desc);
|
||||
same_start = mr;
|
||||
same_val = busmap[mr];
|
||||
strcpy (same_desc, desc);
|
||||
}
|
||||
if ((same_start != mend) ||
|
||||
(0 != strcmp (same_desc, desc)))
|
||||
fprintf (st, "%s-MAP[%04X thru %04X] same as above\n", busname, same_start + 1, mend);
|
||||
return SCPE_OK;
|
||||
}
|
||||
|
||||
/* Autoconfiguration
|
||||
|
||||
The table reflects the MicroVAX 3900 microcode, with one field
|
||||
|
||||
@@ -37,6 +37,7 @@ t_stat set_vec (UNIT *uptr, int32 arg, CONST char *cptr, void *desc);
|
||||
t_stat show_vec (FILE *st, UNIT *uptr, int32 arg, CONST void *desc);
|
||||
t_stat show_vec_mux (FILE *st, UNIT *uptr, int32 arg, CONST void *desc);
|
||||
t_stat show_iospace (FILE *st, UNIT *uptr, int32 val, CONST void *desc);
|
||||
t_stat show_bus_map (FILE *st, const char *cptr, uint32 *busmap, uint32 nmapregs, const char *busname, uint32 mapvalid);
|
||||
t_stat auto_config (const char *name, int32 nctrl);
|
||||
t_stat pdp11_bad_block (UNIT *uptr, int32 sec, int32 wds);
|
||||
void init_ubus_tab (void);
|
||||
|
||||
Reference in New Issue
Block a user