diff --git a/VAX/vax_io.c b/VAX/vax_io.c
index d87b22ed..e361b304 100644
--- a/VAX/vax_io.c
+++ b/VAX/vax_io.c
@@ -118,6 +118,9 @@ extern int32 PSL, SISR, trpirq, mem_err, crd_err, hlt_pin;
extern int32 p1;
extern int32 ssc_bto;
extern jmp_buf save_env;
+extern int32 vc_mem_rd (int32 pa);
+extern void vc_mem_wr (int32 pa, int32 val, int32 lnt);
+extern uint32 *vc_buf;
t_stat dbl_rd (int32 *data, int32 addr, int32 access);
t_stat dbl_wr (int32 data, int32 addr, int32 access);
@@ -583,6 +586,7 @@ return;
May give master or slave error, depending on where the failure occurs
*/
+
int32 cqmem_rd (int32 pa)
{
int32 qa = pa & CQMAMASK; /* Qbus addr */
@@ -590,6 +594,8 @@ uint32 ma;
if (qba_map_addr (qa, &ma)) /* map addr */
return M[ma >> 2];
+if (ADDR_IS_QVM(pa) && vc_buf) /* QVSS memory? */
+ return vc_mem_rd (pa);
MACH_CHECK (MCHK_READ); /* err? mcheck */
return 0;
}
@@ -608,7 +614,12 @@ if (qba_map_addr (qa, &ma)) { /* map addr */
}
M[ma >> 2] = val;
}
-else mem_err = 1;
+else {
+ if (ADDR_IS_QVM(pa) && vc_buf) /* QVSS Memory */
+ vc_mem_wr (pa, val, lnt);
+ else
+ mem_err = 1;
+ }
return;
}
diff --git a/VAX/vax_sysdev.c b/VAX/vax_sysdev.c
index c006919b..b900d48e 100644
--- a/VAX/vax_sysdev.c
+++ b/VAX/vax_sysdev.c
@@ -207,6 +207,7 @@ extern jmp_buf save_env;
extern int32 p1;
extern int32 MSER;
extern int32 tmr_poll;
+extern DEVICE vc_dev, lk_dev, vs_dev;
uint32 *rom = NULL; /* boot ROM */
uint32 *nvr = NULL; /* non-volatile mem */
@@ -1814,12 +1815,37 @@ return "system devices";
t_stat cpu_set_model (UNIT *uptr, int32 val, char *cptr, void *desc)
{
+char gbuf[CBUFSIZE];
+
if ((cptr == NULL) || (!*cptr))
return SCPE_ARG;
-if (MATCH_CMD(cptr, "VAXSERVER") == 0)
+cptr = get_glyph (cptr, gbuf, 0);
+if (MATCH_CMD(cptr, "VAXSERVER") == 0) {
sys_model = 0;
-else if (MATCH_CMD(cptr, "MICROVAX") == 0)
+ strcpy (sim_name, "VAXServer 3900 (KA655)");
+ }
+else if (MATCH_CMD(gbuf, "MICROVAX") == 0) {
sys_model = 1;
+ strcpy (sim_name, "MicroVAX 3900 (KA655)");
+#if defined(USE_SIM_VIDEO) && defined(HAVE_LIBSDL)
+ vc_dev.flags = vc_dev.flags | DEV_DIS; /* disable QVSS */
+ lk_dev.flags = lk_dev.flags | DEV_DIS; /* disable keyboard */
+ vs_dev.flags = vs_dev.flags | DEV_DIS; /* disable mouse */
+ reset_all (0); /* reset everything */
+#endif
+ }
+else if (MATCH_CMD(gbuf, "VAXSTATION") == 0) {
+#if defined(USE_SIM_VIDEO) && defined(HAVE_LIBSDL)
+ strcpy (sim_name, "VAXStation 3900 (KA655)");
+ sys_model = 1;
+ vc_dev.flags = vc_dev.flags & ~DEV_DIS; /* enable QVSS */
+ lk_dev.flags = lk_dev.flags & ~DEV_DIS; /* enable keyboard */
+ vs_dev.flags = vs_dev.flags & ~DEV_DIS; /* enable mouse */
+ reset_all (0); /* reset everything */
+#else
+ return SCPE_ARG;
+#endif
+ }
else
return SCPE_ARG;
return SCPE_OK;
diff --git a/VAX/vax_syslist.c b/VAX/vax_syslist.c
index 7a61a100..ccc2b051 100644
--- a/VAX/vax_syslist.c
+++ b/VAX/vax_syslist.c
@@ -30,7 +30,7 @@
#include "vax_defs.h"
-char sim_name[] = "MicroVAX 3900";
+char sim_name[64] = "MicroVAX 3900";
extern DEVICE cpu_dev;
extern DEVICE tlb_dev;
@@ -50,6 +50,9 @@ extern DEVICE dz_dev;
extern DEVICE csi_dev, cso_dev;
extern DEVICE xq_dev, xqb_dev;
extern DEVICE vh_dev;
+extern DEVICE vc_dev;
+extern DEVICE lk_dev;
+extern DEVICE vs_dev;
extern void WriteB (uint32 pa, int32 val);
extern void rom_wr_B (int32 pa, int32 val);
@@ -71,6 +74,11 @@ DEVICE *sim_devices[] = {
&vh_dev,
&cr_dev,
&lpt_dev,
+#if defined(USE_SIM_VIDEO) && defined(HAVE_LIBSDL)
+ &lk_dev,
+ &vs_dev,
+ &vc_dev,
+#endif
&rl_dev,
&rq_dev,
&rqb_dev,
diff --git a/VAX/vaxmod_defs.h b/VAX/vaxmod_defs.h
index bc491b08..d78cb99b 100644
--- a/VAX/vaxmod_defs.h
+++ b/VAX/vaxmod_defs.h
@@ -220,6 +220,17 @@ extern t_stat cpu_show_memory (FILE* st, UNIT* uptr, int32 val, void* desc);
#define CQMSIZE (1u << CQMAWIDTH) /* Qmem length */
#define CQMAMASK (CQMSIZE - 1) /* Qmem addr mask */
#define CQMBASE 0x30000000 /* Qmem base */
+#define ADDR_IS_CQM(x) ((((uint32) (x)) >= CQMBASE) && \
+ (((uint32) (x)) < (CQMBASE + CQMSIZE)))
+
+/* QVSS memory space */
+
+#define QVMAWIDTH 18 /* QVSS mem addr width */
+#define QVMSIZE (1u << QVMAWIDTH) /* QVSS mem length */
+#define QVMAMASK (QVMSIZE - 1) /* QVSS mem addr mask */
+#define QVMBASE (CQMBASE + CQMSIZE - QVMSIZE) /* QVSS mem base - end of Qbus memory space */
+#define ADDR_IS_QVM(x) ((((uint32) (x)) >= QVMBASE) && \
+ (((uint32) (x)) < (QVMBASE + QVMSIZE)))
/* Machine specific reserved operand tests (all NOPs) */
@@ -330,8 +341,9 @@ typedef struct {
#define INT_V_VHTX 18
#define INT_V_QDSS 19 /* QDSS */
#define INT_V_CR 20
-#define INT_V_DMCRX 21 /* DMC11 */
-#define INT_V_DMCTX 22
+#define INT_V_QVSS 21 /* QVSS */
+#define INT_V_DMCRX 22 /* DMC11 */
+#define INT_V_DMCTX 23
#define INT_CLK (1u << INT_V_CLK)
#define INT_RQ (1u << INT_V_RQ)
@@ -355,6 +367,7 @@ typedef struct {
#define INT_VHTX (1u << INT_V_VHTX)
#define INT_QDSS (1u << INT_V_QDSS)
#define INT_CR (1u << INT_V_CR)
+#define INT_QVSS (1u << INT_V_QVSS)
#define INT_DMCRX (1u << INT_V_DMCRX)
#define INT_DMCTX (1u << INT_V_DMCTX)
@@ -380,6 +393,7 @@ typedef struct {
#define IPL_VHTX (0x14 - IPL_HMIN)
#define IPL_QDSS (0x14 - IPL_HMIN)
#define IPL_CR (0x14 - IPL_HMIN)
+#define IPL_QVSS (0x14 - IPL_HMIN)
#define IPL_DMCRX (0x14 - IPL_HMIN)
#define IPL_DMCTX (0x14 - IPL_HMIN)
diff --git a/Visual Studio Projects/VAX.vcproj b/Visual Studio Projects/VAX.vcproj
index 55001561..bd2f1119 100644
--- a/Visual Studio Projects/VAX.vcproj
+++ b/Visual Studio Projects/VAX.vcproj
@@ -27,7 +27,7 @@
+
+
+
+
@@ -324,6 +332,10 @@
RelativePath="..\VAX\vax_io.c"
>
+
+
@@ -352,6 +364,14 @@
RelativePath="..\VAX\vax_syslist.c"
>
+
+
+
+
+
+
+
+
diff --git a/descrip.mms b/descrip.mms
index 03b0a085..93d9afda 100644
--- a/descrip.mms
+++ b/descrip.mms
@@ -645,7 +645,9 @@ VAX_SOURCE2 = $(PDP11_DIR)PDP11_IO_LIB.C,\
$(PDP11_DIR)PDP11_TS.C,$(PDP11_DIR)PDP11_DZ.C,\
$(PDP11_DIR)PDP11_LP.C,$(PDP11_DIR)PDP11_TQ.C,\
$(PDP11_DIR)PDP11_XQ.C,$(PDP11_DIR)PDP11_VH.C,\
- $(PDP11_DIR)PDP11_CR.C
+ $(PDP11_DIR)PDP11_CR.C,\
+ $(VAX_DIR)VAX_VC.C,$(VAX_DIR)VAX_LK.C,\
+ $(VAX_DIR)VAX_VS.C,$(VAX_DIR)VAX_2681.C
.IFDEF ALPHA_OR_IA64
VAX_OPTIONS = /INCL=($(SIMH_DIR),$(VAX_DIR),$(PDP11_DIR)$(PCAP_INC))\
/DEF=($(CC_DEFS),"VM_VAX=1","USE_ADDR64=1","USE_INT64=1"$(PCAP_DEFS))
diff --git a/makefile b/makefile
index 2f8c640b..d3a8fe40 100644
--- a/makefile
+++ b/makefile
@@ -60,7 +60,7 @@ endif
BUILD_SINGLE := $(MAKECMDGOALS) $(BLANK_SUFFIX)
ifneq (,$(or $(findstring pdp11,$(MAKECMDGOALS)),$(findstring vax,$(MAKECMDGOALS)),$(findstring all,$(MAKECMDGOALS))))
NETWORK_USEFUL = true
- ifneq (,$(or $(findstring microvax1,$(MAKECMDGOALS)),$(findstring microvax2,$(MAKECMDGOALS))))
+ ifneq (,$(or $(findstring microvax1,$(MAKECMDGOALS)),$(findstring microvax2,$(MAKECMDGOALS)),$(findstring microvax3900,$(MAKECMDGOALS))))
VIDEO_USEFUL = true
endif
ifneq (,$(findstring all,$(MAKECMDGOALS))$(word 2,$(MAKECMDGOALS)))
@@ -945,11 +945,12 @@ VAX = ${VAXD}/vax_cpu.c ${VAXD}/vax_cpu1.c ${VAXD}/vax_fpa.c ${VAXD}/vax_io.c \
${VAXD}/vax_cis.c ${VAXD}/vax_octa.c ${VAXD}/vax_cmode.c \
${VAXD}/vax_mmu.c ${VAXD}/vax_stddev.c ${VAXD}/vax_sysdev.c \
${VAXD}/vax_sys.c ${VAXD}/vax_syscm.c ${VAXD}/vax_syslist.c \
+ ${VAXD}/vax_vc.c ${VAXD}/vax_lk.c ${VAXD}/vax_vs.c ${VAXD}/vax_2681.c \
${PDP11D}/pdp11_rl.c ${PDP11D}/pdp11_rq.c ${PDP11D}/pdp11_ts.c \
${PDP11D}/pdp11_dz.c ${PDP11D}/pdp11_lp.c ${PDP11D}/pdp11_tq.c \
${PDP11D}/pdp11_xq.c ${PDP11D}/pdp11_vh.c ${PDP11D}/pdp11_cr.c \
${PDP11D}/pdp11_io_lib.c
-VAX_OPT = -DVM_VAX -DUSE_INT64 -DUSE_ADDR64 -I ${VAXD} -I ${PDP11D} ${NETWORK_OPT}
+VAX_OPT = -DVM_VAX -DUSE_INT64 -DUSE_ADDR64 -DUSE_SIM_VIDEO -I ${VAXD} -I ${PDP11D} ${NETWORK_OPT} ${VIDEO_CCDEFS} ${VIDEO_LDFLAGS}
VAX610 = ${VAXD}/vax_cpu.c ${VAXD}/vax_cpu1.c ${VAXD}/vax_fpa.c \