diff --git a/PDP10/pdp10_defs.h b/PDP10/pdp10_defs.h
index c12756f3..e42b0e2f 100644
--- a/PDP10/pdp10_defs.h
+++ b/PDP10/pdp10_defs.h
@@ -660,10 +660,6 @@ typedef struct pdp_dib DIB;
#define IOLN_XU 010
#define IOBA_DMR (IO_UBA3 + 0764000) /* DMR11 */
#define IOLN_DMR 010
-#define IOBA_DUP (IO_UBA3 + 0760300) /* DUP11 */
-#define IOLN_DUP 010
-#define IOBA_KMC (IO_UBA3 + 0760540) /* KMC11 */
-#define IOLN_KMC 010
#define IOBA_CR (IO_UBA3 + 0777160) /* CD/CR/CM */
#define IOLN_CR 010
#define IOBA_RY (IO_UBA3 + 0777170) /* RX211 */
diff --git a/PDP10/pdp10_ksio.c b/PDP10/pdp10_ksio.c
index 4d7478ec..3743d262 100644
--- a/PDP10/pdp10_ksio.c
+++ b/PDP10/pdp10_ksio.c
@@ -961,6 +961,12 @@ AUTO_CON auto_tab[] = {/*c #v am vm fxa fxv */
{0017550}, {0070} }, /* PC11 reader - fx CSR, fx VEC */
{ { "PTP" }, 1, 1, 0, 0,
{0017554}, {0074} }, /* PC11 punch - fx CSR, fx VEC */
+ { { "KMC" }, 1, 2, 0, 0,
+ {0000540}, {0540} }, /* KMC11 - fx CSR, fx VEC */
+ { { "DUP0" }, 1, 2, 0, 0,
+ {0000300}, {0300} }, /* DUP11 sync - fx CSR, fx VEC */
+ { { "DUP1" }, 1, 2, 0, 0,
+ {0000310}, {0310} }, /* DUP11 sync - fx CSR, fx VEC */
#else
{ { "QBA" }, 1, 0, 0, 0,
{017500} }, /* doorbell - fx CSR, no VEC */
diff --git a/PDP11/pdp11_defs.h b/PDP11/pdp11_defs.h
index 75b77bb5..3c681c93 100644
--- a/PDP11/pdp11_defs.h
+++ b/PDP11/pdp11_defs.h
@@ -599,6 +599,8 @@ typedef struct pdp_dib DIB;
#define INT_V_RC 17
#define INT_V_DMCRX 18
#define INT_V_DMCTX 19
+#define INT_V_KMCA 20
+#define INT_V_KMCB 21
#define INT_V_PIR4 0 /* BR4 */
#define INT_V_TTI 1
@@ -644,6 +646,8 @@ typedef struct pdp_dib DIB;
#define INT_RC (1u << INT_V_RC)
#define INT_DMCRX (1u << INT_V_DMCRX)
#define INT_DMCTX (1u << INT_V_DMCTX)
+#define INT_KMCA (1u << INT_V_KMCA)
+#define INT_KMCB (1u << INT_V_KMCB)
#define INT_PIR4 (1u << INT_V_PIR4)
#define INT_TTI (1u << INT_V_TTI)
#define INT_TTO (1u << INT_V_TTO)
@@ -692,6 +696,8 @@ typedef struct pdp_dib DIB;
#define IPL_RC 5
#define IPL_DMCRX 5
#define IPL_DMCTX 5
+#define IPL_KMCA 5
+#define IPL_KMCB 5
#define IPL_PTR 4
#define IPL_PTP 4
#define IPL_TTI 4
diff --git a/PDP11/pdp11_io_lib.c b/PDP11/pdp11_io_lib.c
index 2e4dd412..e53b870c 100644
--- a/PDP11/pdp11_io_lib.c
+++ b/PDP11/pdp11_io_lib.c
@@ -440,14 +440,14 @@ AUTO_CON auto_tab[] = {/*c #v am vm fxa fxv */
{ { NULL }, 1, 2, 0, 8,
{012400} }, /* KW11W */
{ { NULL }, 1, 2, 8, 8 }, /* DU11 */
- { { NULL }, 1, 2, 8, 8 }, /* DUP11 */
+ { { "DUP0", "DUP1" },1, 2, 8, 8 }, /* DUP11 */
{ { NULL }, 1, 3, 0, 8,
{015000, 015040, 015100, 015140, }}, /* DV11 */
{ { NULL }, 1, 2, 8, 8 }, /* LK11A */
{ { "DMC0", "DMC1", "DMC2", "DMC3" },
1, 2, 8, 8 }, /* DMC11 */
{ { "DZ" }, 1, 2, 8, 8 }, /* DZ11 */
- { { NULL }, 1, 2, 8, 8 }, /* KMC11 */
+ { { "KMC" }, 1, 2, 8, 8 }, /* KMC11 */
{ { NULL }, 1, 2, 8, 8 }, /* LPP11 */
{ { NULL }, 1, 2, 8, 8 }, /* VMV21 */
{ { NULL }, 1, 2, 16, 8 }, /* VMV31 */
diff --git a/PDP11/pdp11_kdp.c b/PDP11/pdp11_kdp.c
index 92d7a8eb..3cdbe3e5 100644
--- a/PDP11/pdp11_kdp.c
+++ b/PDP11/pdp11_kdp.c
@@ -29,7 +29,24 @@
** We don't implement buffer flushing.
*/
-#include "pdp11_kdp.h"
+#if defined (VM_PDP10) /* PDP10 version */
+#include "pdp10_defs.h"
+
+#elif defined (VM_VAX) /* VAX version */
+#include "vax_defs.h"
+
+#else /* PDP-11 version */
+#include "pdp11_defs.h"
+#endif
+
+#define KMC_RDX 8
+#define DUP_RDX 8
+
+extern int32 IREQ (HLVL);
+extern int32 tmxr_poll; /* calibrated delay */
+extern int32 clk_tps; /* clock ticks per second */
+extern int32 tmr_poll; /* instructions per tick */
+
#include "sim_tmxr.h"
#define DF_CMD 0001 /* Print commands. */
@@ -40,8 +57,6 @@
#define DF_TRC 0040 /* Detailed trace. */
#define DF_INF 0100 /* Info */
-extern int32 int_req;
-
//t_stat sync_open(int* retval, char* cptr)
//{
// return SCPE_OK;
@@ -291,7 +306,9 @@ DEBTAB kmc_debug[] = {
/* KMC11 data structs: */
-DIB kmc_dib = { IOBA_KMC, IOLN_KMC, &kmc_rd, &kmc_wr, 2, IVCL (KMCA), VEC_KMCA, {&kmc_rxint, &kmc_txint} };
+#define IOLN_KMC 010
+
+DIB kmc_dib = { IOBA_AUTO, IOLN_KMC, &kmc_rd, &kmc_wr, 2, IVCL (KMCA), VEC_AUTO, {&kmc_rxint, &kmc_txint} };
UNIT kmc_unit = { UDATA (&kmc_svc, 0, 0) };
@@ -327,13 +344,15 @@ DEVICE kmc_dev =
1, KMC_RDX, 13, 1, KMC_RDX, 8,
NULL, NULL, &kmc_reset,
NULL, NULL, NULL, &kmc_dib,
- DEV_UBUS | DEV_DEBUG, 0, kmc_debug
+ DEV_UBUS | DEV_DISABLE | DEV_DIS | DEV_DEBUG, 0, kmc_debug
};
/* DUP11 data structs: */
-DIB dup0_dib = { IOBA_DUP, IOLN_DUP, &dup_rd, &dup_wr, 0 };
-DIB dup1_dib = { IOBA_DUP + IOLN_DUP, IOLN_DUP, &dup_rd, &dup_wr, 0 };
+#define IOLN_DUP 010
+
+DIB dup0_dib = { IOBA_AUTO, IOLN_DUP, &dup_rd, &dup_wr, 0 };
+DIB dup1_dib = { IOBA_AUTO, IOLN_DUP, &dup_rd, &dup_wr, 0 };
UNIT dup_unit[MAXDUP] = {
{ UDATA (&dup_svc, UNIT_ATTABLE, 0) },
@@ -1247,7 +1266,8 @@ t_stat dup_reset(DEVICE* dptr)
// }
// firsttime = FALSE; /* Once-only init done now. */
//}
- return SCPE_OK;
+
+ return auto_config (dptr->name, (dptr->flags & DEV_DIS)? 0: 1 ); /* auto config */
}
/*
@@ -1261,7 +1281,7 @@ t_stat kmc_reset(DEVICE* dptr)
kmc_sel4 = 0;
kmc_sel6 = 0;
- return SCPE_OK;
+ return auto_config (dptr->name, (dptr->flags & DEV_DIS)? 0: 1 ); /* auto config */
}
/*
diff --git a/PDP11/pdp11_sys.c b/PDP11/pdp11_sys.c
index 6743d117..ebb2a554 100644
--- a/PDP11/pdp11_sys.c
+++ b/PDP11/pdp11_sys.c
@@ -103,6 +103,8 @@ extern DEVICE xu_dev, xub_dev;
extern DEVICE ke_dev;
extern DEVICE kg_dev;
extern DEVICE dmc_dev[];
+extern DEVICE kmc_dev;
+extern DEVICE dup_dev[];
extern UNIT cpu_unit;
extern REG cpu_reg[];
extern uint16 *M;
@@ -171,6 +173,9 @@ DEVICE *sim_devices[] = {
&dmc_dev[1],
&dmc_dev[2],
&dmc_dev[3],
+ &kmc_dev,
+ &dup_dev[0],
+ &dup_dev[1],
NULL
};
diff --git a/Visual Studio Projects/PDP11.vcproj b/Visual Studio Projects/PDP11.vcproj
index 82269ec9..88b22ab3 100644
--- a/Visual Studio Projects/PDP11.vcproj
+++ b/Visual Studio Projects/PDP11.vcproj
@@ -239,6 +239,10 @@
RelativePath="..\PDP11\pdp11_io_lib.c"
>
+
+