1
0
mirror of https://github.com/simh/simh.git synced 2026-02-05 07:55:37 +00:00

Added initial KDP implementation

This commit is contained in:
rjarratt
2013-05-27 23:44:23 +01:00
parent 1eb15fc917
commit ee7e81b7b9
5 changed files with 1368 additions and 3 deletions

View File

@@ -658,6 +658,12 @@ typedef struct pdp_dib DIB;
#define IOLN_UBMNT3 001
#define IOBA_XU (IO_UBA3 + 0774510) /* DEUNA/DELUA */
#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 */
@@ -696,6 +702,10 @@ typedef struct pdp_dib DIB;
#define INT_V_RP 6 /* RH11/RP,RM drives */
#define INT_V_TU 7 /* RH11/TM03/TU45 */
#define INT_V_KMCA 8 /* KMC11 */
#define INT_V_KMCB 9
#define INT_V_DMRA 10 /* DMR11 */
#define INT_V_DMRB 11
#define INT_V_DMCRX 13
#define INT_V_DMCTX 14
#define INT_V_XU 15 /* DEUNA/DELUA */
@@ -709,6 +719,10 @@ typedef struct pdp_dib DIB;
#define INT_RP (1u << INT_V_RP)
#define INT_TU (1u << INT_V_TU)
#define INT_KMCA (1u << INT_V_KMCA)
#define INT_KMCB (1u << INT_V_KMCB)
#define INT_DMRA (1u << INT_V_DMRA)
#define INT_DMRB (1u << INT_V_DMRB)
#define INT_DMCRX (1u << INT_V_DMCRX)
#define INT_DMCTX (1u << INT_V_DMCTX)
#define INT_XU (1u << INT_V_XU)
@@ -722,6 +736,10 @@ typedef struct pdp_dib DIB;
#define IPL_RP 6 /* int levels */
#define IPL_TU 6
#define IPL_KMCA 5
#define IPL_KMCB 5
#define IPL_DMRA 5
#define IPL_DMRB 5
#define IPL_DMCRX 5
#define IPL_DMCTX 5
#define IPL_XU 5
@@ -751,6 +769,10 @@ typedef struct pdp_dib DIB;
#define VEC_RY 0264
#define VEC_DZRX 0340
#define VEC_DZTX 0344
#define VEC_KMCA 0540
#define VEC_KMCB 0544
#define VEC_DMRA 0610
#define VEC_DMRB 0614
#define VEC_LP20 0754
#define VEC_AUTO 0 /* Set by Auto Configure */

View File

@@ -512,7 +512,7 @@ d10 val;
ba = ba & ~01; /* align start */
lim = ba + (bc & ~01);
for ( ; ba < lim; ba++) { /* by bytes */
for ( ; ba < lim; ba += 2) { /* by bytes */
pa10 = Map_Addr10 (ba, 1); /* map addr */
if ((pa10 < 0) || MEM_ADDR_NXM (pa10)) { /* inv map or NXM? */
ubcs[1] = ubcs[1] | UBCS_TMO; /* UBA times out */
@@ -520,8 +520,8 @@ for ( ; ba < lim; ba++) { /* by bytes */
}
val = *buf++; /* get data */
if (ba & 2)
M[pa10] = (M[pa10] & INT64_C(0777777600000)) | val;
else M[pa10] = (M[pa10] & INT64_C(0600000777777)) | (val << 18);
M[pa10] = (M[pa10] & INT64_C(0777777000000)) | val;
else M[pa10] = (M[pa10] & INT64_C(0000000777777)) | (val << 18);
}
return 0;
}

View File

@@ -55,6 +55,8 @@ extern DEVICE dz_dev;
extern DEVICE ry_dev;
extern DEVICE cr_dev;
extern DEVICE lp20_dev;
extern DEVICE kmc_dev;
extern DEVICE dup_dev[];
extern UNIT cpu_unit;
extern REG cpu_reg[];
extern d10 *M;
@@ -90,6 +92,9 @@ DEVICE *sim_devices[] = {
&rp_dev,
&tu_dev,
&dz_dev,
&kmc_dev,
&dup_dev[0],
&dup_dev[1],
NULL
};