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