diff --git a/PDP11/pdp11_cr.c b/PDP11/pdp11_cr.c
index bcc88ac5..fd96ad2b 100644
--- a/PDP11/pdp11_cr.c
+++ b/PDP11/pdp11_cr.c
@@ -174,15 +174,15 @@ extern int32 int_req;
#elif defined (VM_VAX) /* VAX version */
#include "vax_defs.h"
extern int32 int_req[IPL_HLVL];
-#define DFLT_DIS (0)
-#define DFLT_CR11 (UNIT_CR11)
+#define DFLT_DIS (DEV_QBUS) /* CR11 is programmed I/O only, Qbus OK */
+#define DFLT_CR11 (UNIT_CR11) /* CR11 only */
#define DFLT_CPM 285
#else /* PDP-11 version */
#include "pdp11_defs.h"
extern int32 int_req[IPL_HLVL];
-#define DFLT_DIS (DEV_DIS)
-#define DFLT_CR11 (UNIT_CR11)
+#define DFLT_DIS (DEV_QBUS) /* CR11 is programmed I/O only, Qbus OK */
+#define DFLT_CR11 (UNIT_CR11) /* Default, but changable */
#define DFLT_CPM 285
#endif
@@ -1148,9 +1148,18 @@ t_stat cr_set_type ( UNIT *uptr,
char *cptr,
void *desc )
{
+ DEVICE *dptr = find_dev_from_unit (uptr);
+
/* disallow type change if currently attached */
if (uptr->flags & UNIT_ATT)
return (SCPE_NOFNC);
+ if (val == UNIT_CR11) {
+ dptr->flags |= DEV_QBUS; /* Can be a Qbus device - programmed I/O only */
+ } else { /* CD11 is 18bit DMA device */
+ if (!UNIBUS)
+ return SCPE_NOFNC;
+ dptr->flags &= ~DEV_QBUS; /* Not on a Qbus (22bit) */
+ }
cpm = (val & UNIT_CR11) ? 285 : 1000;
uptr->wait = (60 * 1000) / cpm;
return (SCPE_OK);
diff --git a/PDP11/pdp11_io_lib.c b/PDP11/pdp11_io_lib.c
index 1d8a5d30..471bf986 100644
--- a/PDP11/pdp11_io_lib.c
+++ b/PDP11/pdp11_io_lib.c
@@ -575,11 +575,6 @@ if (name) { /* updating? */
autp->numc = nctrl;
}
}
- dptr = find_dev (name); /* find ctrl */
- if (dptr && !UNIBUS && !(dptr->flags & DEV_DIS) && !(dptr->flags & DEV_QBUS)) {
- dptr->flags |= DEV_DIS;
- return SCPE_ARG;
- }
}
for (autp = auto_tab; autp->numc >= 0; autp++) { /* loop thru table */
if (autp->amod) { /* floating csr? */
@@ -595,6 +590,17 @@ for (autp = auto_tab; autp->numc >= 0; autp++) { /* loop thru table */
(dptr->flags & DEV_NEXUS) ||
!(dptr->flags & (DEV_UBUS | DEV_QBUS | DEV_Q18)) )
continue;
+ /* Sanity check that enabled devices can work on the current bus */
+ if ((!UNIBUS && !(dptr->flags & DEV_QBUS)) ||
+ (UNIBUS && !(dptr->flags & (DEV_UBUS | DEV_Q18)))) {
+ dptr->flags |= DEV_DIS;
+ if (sim_switches & SWMASK ('P'))
+ continue;
+ printf ("%s device not compatible with system bus\n", sim_dname(dptr));
+ if (sim_log)
+ fprintf (sim_log, "%s device not compatible with system bus\n", sim_dname(dptr));
+ return SCPE_NOFNC;
+ }
dibp = (DIB *) dptr->ctxt; /* get DIB */
if (dibp == NULL) /* not there??? */
return SCPE_IERR;
diff --git a/VAX/vax610_syslist.c b/VAX/vax610_syslist.c
index 73ab1d1b..c44f2700 100644
--- a/VAX/vax610_syslist.c
+++ b/VAX/vax610_syslist.c
@@ -37,6 +37,7 @@ extern DEVICE tlb_dev;
extern DEVICE sysd_dev;
extern DEVICE qba_dev;
extern DEVICE tti_dev, tto_dev;
+extern DEVICE cr_dev;
extern DEVICE lpt_dev;
extern DEVICE clk_dev;
extern DEVICE rq_dev, rqb_dev, rqc_dev, rqd_dev;
@@ -61,6 +62,7 @@ DEVICE *sim_devices[] = {
&tto_dev,
&dz_dev,
&vh_dev,
+ &cr_dev,
&lpt_dev,
&rl_dev,
&rq_dev,
diff --git a/VAX/vax630_syslist.c b/VAX/vax630_syslist.c
index 2226e53e..425ac3bb 100644
--- a/VAX/vax630_syslist.c
+++ b/VAX/vax630_syslist.c
@@ -43,6 +43,7 @@ extern DEVICE wtc_dev;
extern DEVICE sysd_dev;
extern DEVICE qba_dev;
extern DEVICE tti_dev, tto_dev;
+extern DEVICE cr_dev;
extern DEVICE lpt_dev;
extern DEVICE clk_dev;
extern DEVICE rq_dev, rqb_dev, rqc_dev, rqd_dev;
@@ -70,6 +71,7 @@ DEVICE *sim_devices[] = {
&tto_dev,
&dz_dev,
&vh_dev,
+ &cr_dev,
&lpt_dev,
&rl_dev,
&rq_dev,
diff --git a/VAX/vax_syslist.c b/VAX/vax_syslist.c
index 46985cff..7a61a100 100644
--- a/VAX/vax_syslist.c
+++ b/VAX/vax_syslist.c
@@ -39,6 +39,7 @@ extern DEVICE nvr_dev;
extern DEVICE sysd_dev;
extern DEVICE qba_dev;
extern DEVICE tti_dev, tto_dev;
+extern DEVICE cr_dev;
extern DEVICE lpt_dev;
extern DEVICE clk_dev;
extern DEVICE rq_dev, rqb_dev, rqc_dev, rqd_dev;
@@ -68,6 +69,7 @@ DEVICE *sim_devices[] = {
&cso_dev,
&dz_dev,
&vh_dev,
+ &cr_dev,
&lpt_dev,
&rl_dev,
&rq_dev,
diff --git a/Visual Studio Projects/VAX.vcproj b/Visual Studio Projects/VAX.vcproj
index 4adc6c81..225c9075 100644
--- a/Visual Studio Projects/VAX.vcproj
+++ b/Visual Studio Projects/VAX.vcproj
@@ -207,6 +207,10 @@
Name="Source Files"
Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm"
>
+
+
@@ -361,6 +365,10 @@
Name="Header Files"
Filter="h;hpp;hxx;hm;inl;inc"
>
+
+
diff --git a/Visual Studio Projects/VAX610.vcproj b/Visual Studio Projects/VAX610.vcproj
index 90d5f3f8..499cf9da 100644
--- a/Visual Studio Projects/VAX610.vcproj
+++ b/Visual Studio Projects/VAX610.vcproj
@@ -203,6 +203,10 @@
Name="Source Files"
Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm"
>
+
+
@@ -361,6 +365,10 @@
Name="Header Files"
Filter="h;hpp;hxx;hm;inl;inc"
>
+
+
diff --git a/Visual Studio Projects/VAX620.vcproj b/Visual Studio Projects/VAX620.vcproj
index 77efe203..fc9306e3 100644
--- a/Visual Studio Projects/VAX620.vcproj
+++ b/Visual Studio Projects/VAX620.vcproj
@@ -203,6 +203,10 @@
Name="Source Files"
Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm"
>
+
+
@@ -361,6 +365,10 @@
Name="Header Files"
Filter="h;hpp;hxx;hm;inl;inc"
>
+
+
diff --git a/Visual Studio Projects/VAX630.vcproj b/Visual Studio Projects/VAX630.vcproj
index 7e12ff48..6879c414 100644
--- a/Visual Studio Projects/VAX630.vcproj
+++ b/Visual Studio Projects/VAX630.vcproj
@@ -203,6 +203,10 @@
Name="Source Files"
Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm"
>
+
+
@@ -361,6 +365,10 @@
Name="Header Files"
Filter="h;hpp;hxx;hm;inl;inc"
>
+
+
diff --git a/Visual Studio Projects/VAX780.vcproj b/Visual Studio Projects/VAX780.vcproj
index 0b1f2fcd..820cbbb9 100644
--- a/Visual Studio Projects/VAX780.vcproj
+++ b/Visual Studio Projects/VAX780.vcproj
@@ -395,6 +395,10 @@
Name="Header Files"
Filter="h;hpp;hxx;hm;inl;inc"
>
+
+
diff --git a/doc/vax_doc.doc b/doc/vax_doc.doc
index 27c85f0c..c3e305c9 100644
Binary files a/doc/vax_doc.doc and b/doc/vax_doc.doc differ