diff --git a/PDP11/pdp11_cpu.c b/PDP11/pdp11_cpu.c index e7d5caa1..98f647ac 100644 --- a/PDP11/pdp11_cpu.c +++ b/PDP11/pdp11_cpu.c @@ -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 \n"); fprintf (st, "ADDRESS command, which allows the I/O page address of the device to be\n"); fprintf (st, "changed, and the SET 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 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 ADDRESS and SHOW VECTOR\n"); diff --git a/PDP11/pdp11_daz.c b/PDP11/pdp11_daz.c index befd9257..f1939823 100644 --- a/PDP11/pdp11_daz.c +++ b/PDP11/pdp11_daz.c @@ -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 = { diff --git a/PDP11/pdp11_dl.c b/PDP11/pdp11_dl.c index 59737104..045b6896 100644 --- a/PDP11/pdp11_dl.c +++ b/PDP11/pdp11_dl.c @@ -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 } diff --git a/PDP11/pdp11_dz.c b/PDP11/pdp11_dz.c index 5f4c288b..f25a9425 100644 --- a/PDP11/pdp11_dz.c +++ b/PDP11/pdp11_dz.c @@ -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", diff --git a/PDP11/pdp11_io_lib.c b/PDP11/pdp11_io_lib.c index d1bc136a..7e8bd9ae 100644 --- a/PDP11/pdp11_io_lib.c +++ b/PDP11/pdp11_io_lib.c @@ -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; } diff --git a/PDP11/pdp11_ng.c b/PDP11/pdp11_ng.c index 1b26c9a3..a0bcb3c5 100644 --- a/PDP11/pdp11_ng.c +++ b/PDP11/pdp11_ng.c @@ -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 } }; diff --git a/PDP11/pdp11_rq.c b/PDP11/pdp11_rq.c index e270b64c..f5df3fca 100644 --- a/PDP11/pdp11_rq.c +++ b/PDP11/pdp11_rq.c @@ -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" }, diff --git a/PDP11/pdp11_rx.c b/PDP11/pdp11_rx.c index 1848661b..677a48ab 100644 --- a/PDP11/pdp11_rx.c +++ b/PDP11/pdp11_rx.c @@ -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 diff --git a/PDP11/pdp11_ry.c b/PDP11/pdp11_ry.c index a8e37dbe..b84193bb 100644 --- a/PDP11/pdp11_ry.c +++ b/PDP11/pdp11_ry.c @@ -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 diff --git a/PDP11/pdp11_tq.c b/PDP11/pdp11_tq.c index c0f007b5..ceb7cd25 100644 --- a/PDP11/pdp11_tq.c +++ b/PDP11/pdp11_tq.c @@ -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" }, diff --git a/PDP11/pdp11_vh.c b/PDP11/pdp11_vh.c index 1b74fba2..1d6a4d2e 100644 --- a/PDP11/pdp11_vh.c +++ b/PDP11/pdp11_vh.c @@ -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, diff --git a/PDP11/pdp11_vt.c b/PDP11/pdp11_vt.c index 9785d32e..b5e374d8 100644 --- a/PDP11/pdp11_vt.c +++ b/PDP11/pdp11_vt.c @@ -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 } }; diff --git a/PDP11/pdp11_xu.c b/PDP11/pdp11_xu.c index 8343ce5a..286b27de 100644 --- a/PDP11/pdp11_xu.c +++ b/PDP11/pdp11_xu.c @@ -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 diff --git a/VAX/vax_cpu.c b/VAX/vax_cpu.c index 807a1bad..c0ef9ab2 100644 --- a/VAX/vax_cpu.c +++ b/VAX/vax_cpu.c @@ -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 \n"); + fprintf (st, "ADDRESS command, which allows the I/O page address of the device to be\n"); + fprintf (st, "changed, and the SET 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 ADDRESS and SHOW VECTOR\n"); + fprintf (st, "commands, which display the device address and vector, respectively.\n\n"); + } return SCPE_OK; } diff --git a/doc/pdp11_doc.doc b/doc/pdp11_doc.doc index 7bc04b6b..1ab0b36b 100644 Binary files a/doc/pdp11_doc.doc and b/doc/pdp11_doc.doc differ diff --git a/doc/vax780_doc.doc b/doc/vax780_doc.doc index df41d67e..06d8333d 100644 Binary files a/doc/vax780_doc.doc and b/doc/vax780_doc.doc differ diff --git a/doc/vax_doc.doc b/doc/vax_doc.doc index 86f8c326..911198db 100644 Binary files a/doc/vax_doc.doc and b/doc/vax_doc.doc differ