mirror of
https://github.com/simh/simh.git
synced 2026-02-28 01:16:51 +00:00
PDP11 & Unibus/Qbus VAXen: Document autoconfigure disabling
Historically, if a configuration file explicitly set either a DEVICE's ADDRESS or VECTOR, autoconfiguration was immediately disabled. This change defers disabling autoconfigure until an explicitly setting of a DEVICE address or VECTOR actually changes what had been previously configured by autoconfigure.
This commit is contained in:
@@ -3777,14 +3777,12 @@ fprintf (st, "use the same I/O addresses.\n\n");
|
||||
fprintf (st, "In addition to autoconfiguration, most devices support the SET <device>\n");
|
||||
fprintf (st, "ADDRESS command, which allows the I/O page address of the device to be\n");
|
||||
fprintf (st, "changed, and the SET <device> VECTOR command, which allows the vector of\n");
|
||||
fprintf (st, "the device to be changed. Explicitly setting the I/O address of any device\n");
|
||||
fprintf (st, "DISABLES autoconfiguration for that device and for the entire system. As\n");
|
||||
fprintf (st, "a consequence, the user may have to manually configure all other\n");
|
||||
fprintf (st, "autoconfigured devices, because the autoconfiguration algorithm no longer\n");
|
||||
fprintf (st, "recognizes the explicitly configured device. A device can be reset to\n");
|
||||
fprintf (st, "autoconfigure with the SET <device> AUTOCONFIGURE command.\n");
|
||||
fprintf (st, "autoconfiguration can be restored for the entire system with the SET\n");
|
||||
fprintf (st, "CPU AUTOCONFIGURE command.\n\n");
|
||||
fprintf (st, "the device to be changed. Explicitly setting the I/O address or vector of\n");
|
||||
fprintf (st, "any device DISABLES autoconfiguration for the entire system. As\n");
|
||||
fprintf (st, "a consequence, when autoconfiguration is disabled, the user may have to\n");
|
||||
fprintf (st, "manually configure all remaining devices in the system that are explicitly\n");
|
||||
fprintf (st, "enabled after autoconfiguration has been disabled. Autoconfiguration can\n");
|
||||
fprintf (st, "be restored for the entire system with the SET CPU AUTOCONFIGURE command.\n\n");
|
||||
fprintf (st, "The current I/O map can be displayed with the SHOW CPU IOSPACE command.\n");
|
||||
fprintf (st, "Addresses that have set by autoconfiguration are marked with an asterisk (*).\n");
|
||||
fprintf (st, "All devices support the SHOW <device> ADDRESS and SHOW <device> VECTOR\n");
|
||||
|
||||
@@ -68,8 +68,6 @@ MTAB daz_mod[] = {
|
||||
&set_addr, &show_addr, NULL, "Bus address" },
|
||||
{ MTAB_XTD|MTAB_VDV|MTAB_VALR, 0, "VECTOR", "VECTOR",
|
||||
&set_vec, &show_vec, NULL, "Interrupt vector" },
|
||||
{ MTAB_XTD|MTAB_VDV, 0, NULL, "AUTOCONFIGURE",
|
||||
&set_addr_flt, NULL, NULL, "Enable autoconfiguration of address & vector" },
|
||||
{ 0 } };
|
||||
|
||||
DEVICE daz_dev = {
|
||||
|
||||
@@ -154,8 +154,6 @@ MTAB dli_mod[] = {
|
||||
NULL, &tmxr_show_cstat, (void *) &dlx_desc },
|
||||
{ MTAB_XTD | MTAB_VDV | MTAB_NMO, 0, "STATISTICS", NULL,
|
||||
NULL, &tmxr_show_cstat, (void *) &dlx_desc },
|
||||
{ MTAB_XTD | MTAB_VDV, 0, NULL, "AUTOCONFIGURE",
|
||||
&set_addr_flt, NULL, NULL },
|
||||
{ MTAB_XTD | MTAB_VDV, 0, "LINES", "LINES",
|
||||
&dlx_set_lines, &tmxr_show_lines, (void *) &dlx_desc },
|
||||
{ 0 }
|
||||
|
||||
@@ -342,10 +342,6 @@ MTAB dz_mod[] = {
|
||||
&set_addr, &show_addr, NULL, "Bus address" },
|
||||
{ MTAB_XTD|MTAB_VDV|MTAB_VALR, 0, "VECTOR", "VECTOR",
|
||||
&set_vec, &dz_show_vec, (void *) &dz_desc, "Interrupt vector" },
|
||||
#if !defined (VM_PDP10)
|
||||
{ MTAB_XTD|MTAB_VDV, 0, NULL, "AUTOCONFIGURE",
|
||||
&set_addr_flt, NULL, NULL, "Enable autoconfiguration of address & vector" },
|
||||
#endif
|
||||
{ MTAB_XTD|MTAB_VDV|MTAB_VALR, 0, "LINES", "LINES=n",
|
||||
&dz_setnl, &tmxr_show_lines, (void *) &dz_desc, "Display number of lines" },
|
||||
{ MTAB_XTD|MTAB_VDV|MTAB_NC, 0, NULL, "LOG=n=file",
|
||||
|
||||
@@ -73,7 +73,7 @@ if (autcon_enb == val)
|
||||
autcon_enb = val;
|
||||
if (autcon_enb == 0) {
|
||||
sim_messagef (SCPE_OK, "Device auto configuration is now disabled.\n");
|
||||
sim_messagef (SCPE_OK, "Explicitly setting any address or vector value tells the system\n");
|
||||
sim_messagef (SCPE_OK, "Explicitly changing any address or vector value tells the system\n");
|
||||
sim_messagef (SCPE_OK, "that you are planning a specific configuration that may not use\n");
|
||||
sim_messagef (SCPE_OK, "use standard values. You must explicitly specify bus address and\n");
|
||||
sim_messagef (SCPE_OK, "vector values for any device you enable or otherwise add to the\n");
|
||||
@@ -119,9 +119,11 @@ if (r != SCPE_OK)
|
||||
return r;
|
||||
if ((newba <= IOPAGEBASE) || /* > IO page base? */
|
||||
(newba % ((uint32) val))) /* check modulus */
|
||||
return SCPE_ARG;
|
||||
dibp->ba = newba; /* store */
|
||||
set_autocon (NULL, 0, NULL, NULL); /* autoconfig off */
|
||||
return sim_messagef (SCPE_ARG, "Invalid bus address value: %s\n", cptr);
|
||||
if (dibp->ba != newba) { /* changed? */
|
||||
dibp->ba = newba; /* store */
|
||||
set_autocon (NULL, 0, NULL, NULL); /* autoconfig off */
|
||||
}
|
||||
return SCPE_OK;
|
||||
}
|
||||
|
||||
@@ -213,9 +215,11 @@ newvec = (uint32) get_uint (cptr, DEV_RDX, 01000, &r);
|
||||
if ((r != SCPE_OK) ||
|
||||
((newvec + (dibp->vnum * 4)) >= 01000) || /* total too big? */
|
||||
(newvec & ((dibp->vnum > 1)? 07: 03))) /* properly aligned value? */
|
||||
return SCPE_ARG;
|
||||
dibp->vec = newvec;
|
||||
set_autocon (NULL, 0, NULL, NULL); /* autoconfig off */
|
||||
return sim_messagef (SCPE_ARG, "Invalid vector value: %s\n", cptr);
|
||||
if (dibp->vec != newvec) { /* changed? */
|
||||
dibp->vec = newvec; /* store */
|
||||
set_autocon (NULL, 0, NULL, NULL); /* autoconfig off */
|
||||
}
|
||||
return SCPE_OK;
|
||||
}
|
||||
|
||||
|
||||
@@ -77,8 +77,6 @@ MTAB ng_mod[] = {
|
||||
&set_addr, &show_addr, NULL, "Bus address" },
|
||||
{ MTAB_XTD|MTAB_VDV|MTAB_VALR, 0, "VECTOR", "VECTOR",
|
||||
&set_vec, &show_vec, NULL, "Interrupt vector" },
|
||||
{ MTAB_XTD|MTAB_VDV, 0, NULL, "AUTOCONFIGURE",
|
||||
&set_addr_flt, NULL, NULL, "Enable autoconfiguration of address & vector" },
|
||||
{ 0 } };
|
||||
|
||||
|
||||
|
||||
@@ -1208,8 +1208,6 @@ MTAB rq_mod[] = {
|
||||
#if defined (VM_PDP11)
|
||||
{ MTAB_XTD|MTAB_VDV|MTAB_VALR, 004, "ADDRESS", "ADDRESS",
|
||||
&set_addr, &show_addr, NULL, "Bus address" },
|
||||
{ MTAB_XTD | MTAB_VDV, 0, NULL, "AUTOCONFIGURE",
|
||||
&set_addr_flt, NULL, NULL, "Enable autoconfiguration of address & vector" },
|
||||
#else
|
||||
{ MTAB_XTD|MTAB_VDV, 004, "ADDRESS", NULL,
|
||||
NULL, &show_addr, NULL, "Bus address" },
|
||||
|
||||
@@ -182,8 +182,6 @@ MTAB rx_mod[] = {
|
||||
#if defined (VM_PDP11)
|
||||
{ MTAB_XTD|MTAB_VDV|MTAB_VALR, 004, "ADDRESS", "ADDRESS",
|
||||
&set_addr, &show_addr, NULL },
|
||||
{ MTAB_XTD|MTAB_VDV, 0, NULL, "AUTOCONFIGURE",
|
||||
&set_addr_flt, NULL, NULL },
|
||||
{ MTAB_XTD|MTAB_VDV|MTAB_VALR, 0, "VECTOR", "VECTOR",
|
||||
&set_vec, &show_vec, NULL },
|
||||
#else
|
||||
|
||||
@@ -231,8 +231,6 @@ MTAB ry_mod[] = {
|
||||
#if defined (VM_PDP11)
|
||||
{ MTAB_XTD|MTAB_VDV|MTAB_VALR, 004, "ADDRESS", "ADDRESS",
|
||||
&set_addr, &show_addr, NULL, "Bus Address" },
|
||||
{ MTAB_XTD | MTAB_VDV, 0, NULL, "AUTOCONFIGURE",
|
||||
&set_addr_flt, NULL, NULL, "Enable autoconfiguration of address & vector" },
|
||||
{ MTAB_XTD|MTAB_VDV|MTAB_VALR, 0, "VECTOR", "VECTOR",
|
||||
&set_vec, &show_vec, NULL, "Interrupt vector" },
|
||||
#else
|
||||
|
||||
@@ -509,8 +509,6 @@ MTAB tq_mod[] = {
|
||||
#if defined (VM_PDP11)
|
||||
{ MTAB_XTD|MTAB_VDV|MTAB_VALR, 004, "ADDRESS", "ADDRESS",
|
||||
&set_addr, &show_addr, NULL, "Bus address" },
|
||||
{ MTAB_XTD|MTAB_VDV|MTAB_VALR, 0, NULL, "AUTOCONFIGURE",
|
||||
&set_addr_flt, NULL, NULL, "Enable autoconfiguration of address & vector" },
|
||||
#else
|
||||
{ MTAB_XTD|MTAB_VDV, 004, "ADDRESS", NULL,
|
||||
NULL, &show_addr, NULL, "Bus address" },
|
||||
|
||||
@@ -561,8 +561,6 @@ static const MTAB vh_mod[] = {
|
||||
&set_addr, &show_addr, NULL, "Bus address" },
|
||||
{ MTAB_XTD|MTAB_VDV|MTAB_VALR, 0, "VECTOR", "VECTOR",
|
||||
&set_vec, &vh_show_vec, (void *) &vh_desc, "Interrupt vector" },
|
||||
{ MTAB_XTD|MTAB_VDV, 0, NULL, "AUTOCONFIGURE",
|
||||
&set_addr_flt, NULL, NULL, "Enable autoconfiguration of address & vector" },
|
||||
{ MTAB_XTD|MTAB_VDV|MTAB_VALR, 0, "LINES", "LINES=n",
|
||||
&vh_setnl, &tmxr_show_lines, (void *) &vh_desc, "Display number of lines" },
|
||||
{ UNIT_ATT, UNIT_ATT, "summary", NULL,
|
||||
|
||||
@@ -139,8 +139,6 @@ MTAB vt_mod[] = {
|
||||
&set_addr, &show_addr, NULL, "Bus address" },
|
||||
{ MTAB_XTD|MTAB_VDV|MTAB_VALR, 0, "VECTOR", "VECTOR",
|
||||
&set_vec, &show_vec, NULL, "Interrupt vector" },
|
||||
{ MTAB_XTD|MTAB_VDV, 0, NULL, "AUTOCONFIGURE",
|
||||
&set_addr_flt, NULL, NULL, "Enable autoconfiguration of address & vector" },
|
||||
{ MTAB_XTD|MTAB_VDV|MTAB_VALR, 0, "KEYBOARD","KEYBOARD={SPACEWAR|NOSPACEWAR}",
|
||||
&vt_set_kb, &vt_show_kb, NULL, "Disable or Enable Spacewar switches" },
|
||||
{ 0 } };
|
||||
|
||||
@@ -157,8 +157,6 @@ MTAB xu_mod[] = {
|
||||
#if defined (VM_PDP11)
|
||||
{ MTAB_XTD|MTAB_VDV|MTAB_VALR, 010, "ADDRESS", "ADDRESS",
|
||||
&set_addr, &show_addr, NULL },
|
||||
{ MTAB_XTD|MTAB_VDV, 0, NULL, "AUTOCONFIGURE",
|
||||
&set_addr_flt, NULL, NULL },
|
||||
{ MTAB_XTD|MTAB_VDV|MTAB_VALR, 0, "VECTOR", "VECTOR",
|
||||
&set_vec, &show_vec, NULL },
|
||||
#else
|
||||
|
||||
@@ -3941,6 +3941,8 @@ return r;
|
||||
|
||||
t_stat cpu_help (FILE *st, DEVICE *dptr, UNIT *uptr, int32 flag, const char *cptr)
|
||||
{
|
||||
DEVICE *bus = (find_dev ("QBA") != NULL) ? find_dev ("QBA") : find_dev ("UBA");
|
||||
|
||||
fprintf (st, "The ");cpu_print_model (st);fprintf (st, " CPU help\n\n");
|
||||
fprintf (st, "CPU options include the size of main memory.\n\n");
|
||||
if (dptr->modifiers) {
|
||||
@@ -4017,5 +4019,46 @@ fprintf (st, " sim> SHOW CPU INSTRUCTIONS display the instructoin groups t
|
||||
fprintf (st, " implemented and emulated\n");
|
||||
fprintf (st, " sim> SHOW CPU -V INSTRUCTIONS disable the list of instructions implemented\n");
|
||||
fprintf (st, " and emulated\n\n");
|
||||
fprintf (st, "I/O Device Addressing\n\n");
|
||||
if (bus) {
|
||||
fprintf (st, "%s I/O space and vector space are not large enough to allow all\n", (strcmp (bus->name, "QBA") == 0) ? "Qbus" : "Unibus");
|
||||
fprintf (st, "theoretically possible devices to be configured simultaneously at\n");
|
||||
fprintf (st, "fixed addresses. Instead, many devices have floating addresses and\n");
|
||||
fprintf (st, "vectors; that is, the assigned device address and vector depend on the\n");
|
||||
fprintf (st, "presence of other devices in the configuration:\n\n");
|
||||
fprintf (st, " DZ11 all instances have floating addresses\n");
|
||||
fprintf (st, " DHU11/DHQ11 all instances have floating addresses\n");
|
||||
fprintf (st, " RL11 first instance has fixed address, rest floating\n");
|
||||
fprintf (st, " RX11/RX211 first instance has fixed address, rest floating\n");
|
||||
fprintf (st, " DEUNA/DELUA first instance has fixed address, rest floating\n");
|
||||
fprintf (st, " MSCP disk first instance has fixed address, rest floating\n");
|
||||
fprintf (st, " TMSCP tape first instance has fixed address, rest floating\n\n");
|
||||
fprintf (st, "In addition, some devices with fixed I/O space addresses have floating\n");
|
||||
fprintf (st, "vector addresses. DCI/DCO and DLI/DLO have floating vector addresses.\n\n");
|
||||
fprintf (st, "To maintain addressing consistency as the configuration changes, the\n");
|
||||
fprintf (st, "simulator implements DEC's standard I/O address and vector autoconfiguration.\n");
|
||||
fprintf (st, "This allows the user to enable or disable devices without needing to\n");
|
||||
fprintf (st, "manage I/O addresses and vectors. For example, if RY is enabled while\n");
|
||||
fprintf (st, "RX is present, RY is assigned an I/O address in the floating I/O space\n");
|
||||
fprintf (st, "range; but if RX is disabled and then RY is enabled, RY is assigned the\n");
|
||||
fprintf (st, "fixed \"first instance\" I/O address for floppy disks.\n\n");
|
||||
fprintf (st, "Autoconfiguration cannot solve address conflicts between devices with\n");
|
||||
fprintf (st, "overlapping fixed addresses. For example, with default I/O page addressing,\n");
|
||||
fprintf (st, "the PDP-11 can support either a TM11 or a TS11, but not both, since they\n");
|
||||
fprintf (st, "use the same I/O addresses.\n\n");
|
||||
fprintf (st, "In addition to autoconfiguration, most devices support the SET <device>\n");
|
||||
fprintf (st, "ADDRESS command, which allows the I/O page address of the device to be\n");
|
||||
fprintf (st, "changed, and the SET <device> VECTOR command, which allows the vector of\n");
|
||||
fprintf (st, "the device to be changed. Explicitly setting the I/O address or vector of\n");
|
||||
fprintf (st, "any device DISABLES autoconfiguration for the entire system. As\n");
|
||||
fprintf (st, "a consequence, when autoconfiguration is disabled, the user may have to\n");
|
||||
fprintf (st, "manually configure all remaining devices in the system that are explicitly\n");
|
||||
fprintf (st, "enabled after autoconfiguration has been disabled. Autoconfiguration can\n");
|
||||
fprintf (st, "be restored for the entire system with the SET %s AUTOCONFIGURE command.\n\n", bus->name);
|
||||
fprintf (st, "The current I/O map can be displayed with the SHOW %s IOSPACE command.\n", bus->name);
|
||||
fprintf (st, "Addresses that have set by autoconfiguration are marked with an asterisk (*).\n");
|
||||
fprintf (st, "All devices support the SHOW <device> ADDRESS and SHOW <device> VECTOR\n");
|
||||
fprintf (st, "commands, which display the device address and vector, respectively.\n\n");
|
||||
}
|
||||
return SCPE_OK;
|
||||
}
|
||||
|
||||
Binary file not shown.
Binary file not shown.
BIN
doc/vax_doc.doc
BIN
doc/vax_doc.doc
Binary file not shown.
Reference in New Issue
Block a user