From 2b155ba29d348932ea84e8e7369cf285c221697d Mon Sep 17 00:00:00 2001 From: Mark Pizzolato Date: Sun, 27 Mar 2016 12:28:02 -0700 Subject: [PATCH] VAX780, VAX750, VAX730, VAX8600: Add TC11/TU56 (DECtape) device to Unibus VAX simulators VMS Driver and support files for the TC11 should be available at http://bitsavers.org/bits/DEC/vax/vms/dkdriver_vms.zip --- PDP11/pdp11_rk.c | 29 ++++++++++++++++++++++----- VAX/vax730_defs.h | 3 +++ VAX/vax730_syslist.c | 2 ++ VAX/vax750_defs.h | 3 +++ VAX/vax750_syslist.c | 2 ++ VAX/vax780_defs.h | 3 +++ VAX/vax780_syslist.c | 2 ++ VAX/vax860_defs.h | 3 +++ VAX/vax860_syslist.c | 2 ++ Visual Studio Projects/VAX730.vcproj | 4 ++++ Visual Studio Projects/VAX750.vcproj | 4 ++++ Visual Studio Projects/VAX780.vcproj | 4 ++++ Visual Studio Projects/VAX8600.vcproj | 4 ++++ descrip.mms | 8 ++++---- makefile | 12 +++++++---- 15 files changed, 72 insertions(+), 13 deletions(-) diff --git a/PDP11/pdp11_rk.c b/PDP11/pdp11_rk.c index ca185abd..2d547e24 100644 --- a/PDP11/pdp11_rk.c +++ b/PDP11/pdp11_rk.c @@ -66,7 +66,17 @@ non-seeking drive is recorded in last_drv. */ +#if defined (VM_VAX) /* VAX version */ +#include "vax_defs.h" +extern int32 int_req[IPL_HLVL]; +#define DMASK 0xFFFF +#define RK_DIS DEV_DIS + +#else /* PDP-11 version */ #include "pdp11_defs.h" +extern int32 int_req[IPL_HLVL]; +#define RK_DIS 0 +#endif /* Constants */ @@ -266,9 +276,6 @@ BITFIELD *rk_reg_bits[] = { #define RK_MIN 10 #define MAX(x,y) (((x) > (y))? (x): (y)) -extern uint16 *M; /* memory */ -extern int32 int_req[IPL_HLVL]; - uint16 *rkxb = NULL; /* xfer buffer */ int32 rkcs = 0; /* control/status */ int32 rkds = 0; /* drive status */ @@ -395,7 +402,7 @@ DEVICE rk_dev = { RK_NUMDR, 8, 24, 1, 8, 16, NULL, NULL, &rk_reset, &rk_boot, NULL, NULL, - &rk_dib, DEV_DISABLE | DEV_UBUS | DEV_Q18 | DEV_DEBUG, 0, + &rk_dib, DEV_DISABLE | DEV_UBUS | DEV_Q18 | DEV_DEBUG | RK_DIS, 0, rk_deb, NULL, NULL, &rk_help, NULL, NULL, &rk_description }; @@ -660,7 +667,7 @@ ma = ((rkcs & RKCS_MEX) << (16 - RKCS_V_MEX)) | rkba; /* get mem addr */ da = GET_DA (rkda) * RK_NUMWD; /* get disk addr */ wc = 0200000 - rkwc; /* get wd cnt */ if ((da + wc) > (int32) uptr->capac) { /* overrun? */ - wc = uptr->capac - da; /* trim transfer */ + wc = (int32)uptr->capac - da; /* trim transfer */ rker = rker | RKER_OVR; /* set overrun err */ } @@ -861,6 +868,8 @@ return auto_config (0, 0); /* Device bootstrap */ +#if defined (VM_PDP11) + #define BOOT_START 02000 /* start */ #define BOOT_ENTRY (BOOT_START + 002) /* entry */ #define BOOT_UNIT (BOOT_START + 010) /* unit number */ @@ -896,6 +905,7 @@ static const uint16 boot_rom[] = { t_stat rk_boot (int32 unitno, DEVICE *dptr) { size_t i; +extern uint16 *M; /* memory */ for (i = 0; i < BOOT_LEN; i++) M[(BOOT_START >> 1) + i] = boot_rom[i]; @@ -905,6 +915,15 @@ cpu_set_boot (BOOT_ENTRY); return SCPE_OK; } +#else + +t_stat rk_boot (int32 unitno, DEVICE *dptr) +{ +return SCPE_NOFNC; +} + +#endif + t_stat rk_help (FILE *st, DEVICE *dptr, UNIT *uptr, int32 flag, const char *cptr) { const char *const text = diff --git a/VAX/vax730_defs.h b/VAX/vax730_defs.h index d7f3ff7a..5dd08432 100644 --- a/VAX/vax730_defs.h +++ b/VAX/vax730_defs.h @@ -271,6 +271,7 @@ typedef struct { #define INT_V_DMCTX 11 #define INT_V_DUPRX 12 #define INT_V_DUPTX 13 +#define INT_V_RK 14 #define INT_V_LPT 0 /* BR4 */ #define INT_V_PTR 1 @@ -302,6 +303,7 @@ typedef struct { #define INT_DMCTX (1u << INT_V_DMCTX) #define INT_DUPRX (1u << INT_V_DUPRX) #define INT_DUPTX (1u << INT_V_DUPTX) +#define INT_RK (1u << INT_V_RK) #define INT_TDRX (1u << INT_V_TDRX) #define INT_TDTX (1u << INT_V_TDTX) @@ -326,6 +328,7 @@ typedef struct { #define IPL_DMCTX (0x15 - IPL_HMIN) #define IPL_DUPRX (0x15 - IPL_HMIN) #define IPL_DUPTX (0x15 - IPL_HMIN) +#define IPL_RK (0x15 - IPL_HMIN) #define IPL_TDRX (0x14 - IPL_HMIN) #define IPL_TDTX (0x14 - IPL_HMIN) diff --git a/VAX/vax730_syslist.c b/VAX/vax730_syslist.c index b009850e..3d105f5f 100644 --- a/VAX/vax730_syslist.c +++ b/VAX/vax730_syslist.c @@ -48,6 +48,7 @@ extern DEVICE rq_dev, rqb_dev, rqc_dev, rqd_dev; extern DEVICE rb_dev; extern DEVICE rl_dev; extern DEVICE hk_dev; +extern DEVICE rk_dev; extern DEVICE ry_dev; extern DEVICE ts_dev; extern DEVICE tq_dev; @@ -75,6 +76,7 @@ DEVICE *sim_devices[] = { &lpt_dev, &rl_dev, &hk_dev, + &rk_dev, &rq_dev, &rqb_dev, &rqc_dev, diff --git a/VAX/vax750_defs.h b/VAX/vax750_defs.h index e9d85506..278e918a 100644 --- a/VAX/vax750_defs.h +++ b/VAX/vax750_defs.h @@ -312,6 +312,7 @@ typedef struct { #define INT_V_DMCTX 10 #define INT_V_DUPRX 11 #define INT_V_DUPTX 12 +#define INT_V_RK 13 #define INT_V_LPT 0 /* BR4 */ #define INT_V_PTR 1 @@ -342,6 +343,7 @@ typedef struct { #define INT_DMCTX (1u << INT_V_DMCTX) #define INT_DUPRX (1u << INT_V_DUPRX) #define INT_DUPTX (1u << INT_V_DUPTX) +#define INT_RK (1u << INT_V_RK) #define INT_TDRX (1u << INT_V_TDRX) #define INT_TDTX (1u << INT_V_TDTX) @@ -365,6 +367,7 @@ typedef struct { #define IPL_DMCTX (0x15 - IPL_HMIN) #define IPL_DUPRX (0x15 - IPL_HMIN) #define IPL_DUPTX (0x15 - IPL_HMIN) +#define IPL_RK (0x15 - IPL_HMIN) #define IPL_TDRX (0x14 - IPL_HMIN) #define IPL_TDTX (0x14 - IPL_HMIN) diff --git a/VAX/vax750_syslist.c b/VAX/vax750_syslist.c index 78d9071a..936e5a0d 100644 --- a/VAX/vax750_syslist.c +++ b/VAX/vax750_syslist.c @@ -48,6 +48,7 @@ extern DEVICE lpt_dev; extern DEVICE rq_dev, rqb_dev, rqc_dev, rqd_dev; extern DEVICE rl_dev; extern DEVICE hk_dev; +extern DEVICE rk_dev; extern DEVICE rp_dev; extern DEVICE ry_dev; extern DEVICE ts_dev; @@ -80,6 +81,7 @@ DEVICE *sim_devices[] = { &rp_dev, &rl_dev, &hk_dev, + &rk_dev, &rq_dev, &rqb_dev, &rqc_dev, diff --git a/VAX/vax780_defs.h b/VAX/vax780_defs.h index 7a47b814..ab504b78 100644 --- a/VAX/vax780_defs.h +++ b/VAX/vax780_defs.h @@ -326,6 +326,7 @@ typedef struct { #define INT_V_DMCTX 10 #define INT_V_DUPRX 11 #define INT_V_DUPTX 12 +#define INT_V_RK 13 #define INT_V_LPT 0 /* BR4 */ #define INT_V_PTR 1 @@ -356,6 +357,7 @@ typedef struct { #define INT_DMCTX (1u << INT_V_DMCTX) #define INT_DUPRX (1u << INT_V_DUPRX) #define INT_DUPTX (1u << INT_V_DUPTX) +#define INT_RK (1u << INT_V_RK) #define INT_TDRX (1u << INT_V_TDRX) #define INT_TDTX (1u << INT_V_TDTX) @@ -379,6 +381,7 @@ typedef struct { #define IPL_DMCTX (0x15 - IPL_HMIN) #define IPL_DUPRX (0x15 - IPL_HMIN) #define IPL_DUPTX (0x15 - IPL_HMIN) +#define IPL_RK (0x15 - IPL_HMIN) #define IPL_TDRX (0x14 - IPL_HMIN) #define IPL_TDTX (0x14 - IPL_HMIN) diff --git a/VAX/vax780_syslist.c b/VAX/vax780_syslist.c index aba325ce..36ab6533 100644 --- a/VAX/vax780_syslist.c +++ b/VAX/vax780_syslist.c @@ -55,6 +55,7 @@ extern DEVICE lpt_dev; extern DEVICE rq_dev, rqb_dev, rqc_dev, rqd_dev; extern DEVICE rl_dev; extern DEVICE hk_dev; +extern DEVICE rk_dev; extern DEVICE rp_dev; extern DEVICE ry_dev; extern DEVICE ts_dev; @@ -88,6 +89,7 @@ DEVICE *sim_devices[] = { &rp_dev, &rl_dev, &hk_dev, + &rk_dev, &rq_dev, &rqb_dev, &rqc_dev, diff --git a/VAX/vax860_defs.h b/VAX/vax860_defs.h index d27a6508..da16196b 100644 --- a/VAX/vax860_defs.h +++ b/VAX/vax860_defs.h @@ -356,6 +356,7 @@ typedef struct { #define INT_V_DMCTX 10 #define INT_V_DUPRX 11 #define INT_V_DUPTX 12 +#define INT_V_RK 13 #define INT_V_LPT 0 /* BR4 */ #define INT_V_PTR 1 @@ -386,6 +387,7 @@ typedef struct { #define INT_DMCTX (1u << INT_V_DMCTX) #define INT_DUPRX (1u << INT_V_DUPRX) #define INT_DUPTX (1u << INT_V_DUPTX) +#define INT_RK (1u << INT_V_RK) #define INT_TDRX (1u << INT_V_TDRX) #define INT_TDTX (1u << INT_V_TDTX) @@ -409,6 +411,7 @@ typedef struct { #define IPL_DMCTX (0x15 - IPL_HMIN) #define IPL_DUPRX (0x15 - IPL_HMIN) #define IPL_DUPTX (0x15 - IPL_HMIN) +#define IPL_RK (0x15 - IPL_HMIN) #define IPL_TDRX (0x14 - IPL_HMIN) #define IPL_TDTX (0x14 - IPL_HMIN) diff --git a/VAX/vax860_syslist.c b/VAX/vax860_syslist.c index 4eac467b..b74410c9 100644 --- a/VAX/vax860_syslist.c +++ b/VAX/vax860_syslist.c @@ -55,6 +55,7 @@ extern DEVICE lpt_dev; extern DEVICE rq_dev, rqb_dev, rqc_dev, rqd_dev; extern DEVICE rl_dev; extern DEVICE hk_dev; +extern DEVICE rk_dev; extern DEVICE rp_dev; extern DEVICE ry_dev; extern DEVICE ts_dev; @@ -87,6 +88,7 @@ DEVICE *sim_devices[] = { &rp_dev, &rl_dev, &hk_dev, + &rk_dev, &rq_dev, &rqb_dev, &rqc_dev, diff --git a/Visual Studio Projects/VAX730.vcproj b/Visual Studio Projects/VAX730.vcproj index 96185a5f..a19a0ecd 100644 --- a/Visual Studio Projects/VAX730.vcproj +++ b/Visual Studio Projects/VAX730.vcproj @@ -217,6 +217,10 @@ RelativePath="..\PDP11\pdp11_lp.c" > + + diff --git a/Visual Studio Projects/VAX750.vcproj b/Visual Studio Projects/VAX750.vcproj index 768eeef2..2425dfbf 100644 --- a/Visual Studio Projects/VAX750.vcproj +++ b/Visual Studio Projects/VAX750.vcproj @@ -217,6 +217,10 @@ RelativePath="..\PDP11\pdp11_lp.c" > + + diff --git a/Visual Studio Projects/VAX780.vcproj b/Visual Studio Projects/VAX780.vcproj index be554760..556ee4ea 100644 --- a/Visual Studio Projects/VAX780.vcproj +++ b/Visual Studio Projects/VAX780.vcproj @@ -222,6 +222,10 @@ RelativePath="..\PDP11\pdp11_pt.c" > + + diff --git a/Visual Studio Projects/VAX8600.vcproj b/Visual Studio Projects/VAX8600.vcproj index 352bbe76..75edf389 100644 --- a/Visual Studio Projects/VAX8600.vcproj +++ b/Visual Studio Projects/VAX8600.vcproj @@ -222,6 +222,10 @@ RelativePath="..\PDP11\pdp11_pt.c" > + + diff --git a/descrip.mms b/descrip.mms index ce703faa..d022a5c6 100644 --- a/descrip.mms +++ b/descrip.mms @@ -814,7 +814,7 @@ VAX730_SOURCE2 = $(PDP11_DIR)PDP11_RL.C,$(PDP11_DIR)PDP11_RQ.C,\ $(PDP11_DIR)PDP11_XU.C,$(PDP11_DIR)PDP11_RY.C,\ $(PDP11_DIR)PDP11_CR.C,$(PDP11_DIR)PDP11_HK.C,\ $(PDP11_DIR)PDP11_VH.C,$(PDP11_DIR)PDP11_DMC.C,\ - $(PDP11_DIR)PDP11_TC.C,$(PDP11_DIR)PDP11_IO_LIB.C + $(PDP11_DIR)PDP11_TC.C,$(PDP11_DIR)PDP11_RK.C,$(PDP11_DIR)PDP11_IO_LIB.C .IFDEF ALPHA_OR_IA64 VAX730_OPTIONS = /INCL=($(SIMH_DIR),$(VAX730_DIR),$(PDP11_DIR)$(PCAP_INC))\ /DEF=($(CC_DEFS),"VM_VAX=1","USE_ADDR64=1","USE_INT64=1"$(PCAP_DEFS),"VAX_730=1") @@ -845,7 +845,7 @@ VAX750_SOURCE2 = $(PDP11_DIR)PDP11_RL.C,$(PDP11_DIR)PDP11_RQ.C,\ $(PDP11_DIR)PDP11_CR.C,$(PDP11_DIR)PDP11_HK.C,\ $(PDP11_DIR)PDP11_RP.C,$(PDP11_DIR)PDP11_TU.C,\ $(PDP11_DIR)PDP11_VH.C,$(PDP11_DIR)PDP11_DMC.C,\ - $(PDP11_DIR)PDP11_TC.C,$(PDP11_DIR)PDP11_IO_LIB.C + $(PDP11_DIR)PDP11_TC.C,$(PDP11_DIR)PDP11_RK.C,$(PDP11_DIR)PDP11_IO_LIB.C .IFDEF ALPHA_OR_IA64 VAX750_OPTIONS = /INCL=($(SIMH_DIR),$(VAX750_DIR),$(PDP11_DIR)$(PCAP_INC))\ /DEF=($(CC_DEFS),"VM_VAX=1","USE_ADDR64=1","USE_INT64=1"$(PCAP_DEFS),"VAX_750=1") @@ -876,7 +876,7 @@ VAX780_SOURCE2 = $(PDP11_DIR)PDP11_RL.C,$(PDP11_DIR)PDP11_RQ.C,\ $(PDP11_DIR)PDP11_CR.C,$(PDP11_DIR)PDP11_RP.C,\ $(PDP11_DIR)PDP11_TU.C,$(PDP11_DIR)PDP11_HK.C,\ $(PDP11_DIR)PDP11_VH.C,$(PDP11_DIR)PDP11_DMC.C,\ - $(PDP11_DIR)PDP11_TC.C,$(PDP11_DIR)PDP11_IO_LIB.C + $(PDP11_DIR)PDP11_TC.C,$(PDP11_DIR)PDP11_RK.C,$(PDP11_DIR)PDP11_IO_LIB.C .IFDEF ALPHA_OR_IA64 VAX780_OPTIONS = /INCL=($(SIMH_DIR),$(VAX780_DIR),$(PDP11_DIR)$(PCAP_INC))\ /DEF=($(CC_DEFS),"VM_VAX=1","USE_ADDR64=1","USE_INT64=1"$(PCAP_DEFS),"VAX_780=1") @@ -907,7 +907,7 @@ VAX8600_SOURCE2 = $(PDP11_DIR)PDP11_RL.C,$(PDP11_DIR)PDP11_RQ.C,\ $(PDP11_DIR)PDP11_CR.C,$(PDP11_DIR)PDP11_RP.C,\ $(PDP11_DIR)PDP11_TU.C,$(PDP11_DIR)PDP11_HK.C,\ $(PDP11_DIR)PDP11_VH.C,$(PDP11_DIR)PDP11_DMC.C,\ - $(PDP11_DIR)PDP11_TC.C,$(PDP11_DIR)PDP11_IO_LIB.C + $(PDP11_DIR)PDP11_TC.C,$(PDP11_DIR)PDP11_RK.C,$(PDP11_DIR)PDP11_IO_LIB.C .IFDEF ALPHA_OR_IA64 VAX8600_OPTIONS = /INCL=($(SIMH_DIR),$(VAX8600_DIR),$(PDP11_DIR)$(PCAP_INC))\ /DEF=($(CC_DEFS),"VM_VAX=1","USE_ADDR64=1","USE_INT64=1"$(PCAP_DEFS),"VAX_860=1") diff --git a/makefile b/makefile index a249f676..e016f075 100644 --- a/makefile +++ b/makefile @@ -1015,7 +1015,8 @@ VAX730 = ${VAXD}/vax_cpu.c ${VAXD}/vax_cpu1.c ${VAXD}/vax_fpa.c \ ${PDP11D}/pdp11_dz.c ${PDP11D}/pdp11_lp.c ${PDP11D}/pdp11_tq.c \ ${PDP11D}/pdp11_xu.c ${PDP11D}/pdp11_ry.c ${PDP11D}/pdp11_cr.c \ ${PDP11D}/pdp11_hk.c ${PDP11D}/pdp11_vh.c ${PDP11D}/pdp11_dmc.c \ - ${PDP11D}/pdp11_td.c ${PDP11D}/pdp11_tc.c ${PDP11D}/pdp11_io_lib.c + ${PDP11D}/pdp11_td.c ${PDP11D}/pdp11_tc.c ${PDP11D}/pdp11_rk.c \ + ${PDP11D}/pdp11_io_lib.c VAX730_OPT = -DVM_VAX -DVAX_730 -DUSE_INT64 -DUSE_ADDR64 -I VAX -I ${PDP11D} ${NETWORK_OPT} @@ -1030,7 +1031,8 @@ VAX750 = ${VAXD}/vax_cpu.c ${VAXD}/vax_cpu1.c ${VAXD}/vax_fpa.c \ ${PDP11D}/pdp11_xu.c ${PDP11D}/pdp11_ry.c ${PDP11D}/pdp11_cr.c \ ${PDP11D}/pdp11_hk.c ${PDP11D}/pdp11_rp.c ${PDP11D}/pdp11_tu.c \ ${PDP11D}/pdp11_vh.c ${PDP11D}/pdp11_dmc.c ${PDP11D}/pdp11_dup.c \ - ${PDP11D}/pdp11_td.c ${PDP11D}/pdp11_tc.c ${PDP11D}/pdp11_io_lib.c + ${PDP11D}/pdp11_td.c ${PDP11D}/pdp11_tc.c ${PDP11D}/pdp11_rk.c \ + ${PDP11D}/pdp11_io_lib.c VAX750_OPT = -DVM_VAX -DVAX_750 -DUSE_INT64 -DUSE_ADDR64 -I VAX -I ${PDP11D} ${NETWORK_OPT} @@ -1045,7 +1047,8 @@ VAX780 = ${VAXD}/vax_cpu.c ${VAXD}/vax_cpu1.c ${VAXD}/vax_fpa.c \ ${PDP11D}/pdp11_xu.c ${PDP11D}/pdp11_ry.c ${PDP11D}/pdp11_cr.c \ ${PDP11D}/pdp11_rp.c ${PDP11D}/pdp11_tu.c ${PDP11D}/pdp11_hk.c \ ${PDP11D}/pdp11_vh.c ${PDP11D}/pdp11_dmc.c ${PDP11D}/pdp11_dup.c \ - ${PDP11D}/pdp11_td.c ${PDP11D}/pdp11_tc.c ${PDP11D}/pdp11_io_lib.c + ${PDP11D}/pdp11_td.c ${PDP11D}/pdp11_tc.c ${PDP11D}/pdp11_rk.c \ + ${PDP11D}/pdp11_io_lib.c VAX780_OPT = -DVM_VAX -DVAX_780 -DUSE_INT64 -DUSE_ADDR64 -I VAX -I ${PDP11D} ${NETWORK_OPT} @@ -1060,7 +1063,8 @@ VAX8600 = ${VAXD}/vax_cpu.c ${VAXD}/vax_cpu1.c ${VAXD}/vax_fpa.c \ ${PDP11D}/pdp11_xu.c ${PDP11D}/pdp11_ry.c ${PDP11D}/pdp11_cr.c \ ${PDP11D}/pdp11_rp.c ${PDP11D}/pdp11_tu.c ${PDP11D}/pdp11_hk.c \ ${PDP11D}/pdp11_vh.c ${PDP11D}/pdp11_dmc.c ${PDP11D}/pdp11_dup.c \ - ${PDP11D}/pdp11_td.c ${PDP11D}/pdp11_tc.c ${PDP11D}/pdp11_io_lib.c + ${PDP11D}/pdp11_td.c ${PDP11D}/pdp11_tc.c ${PDP11D}/pdp11_rk.c \ + ${PDP11D}/pdp11_io_lib.c VAX8600_OPT = -DVM_VAX -DVAX_860 -DUSE_INT64 -DUSE_ADDR64 -I VAX -I ${PDP11D} ${NETWORK_OPT}