PDP10,PDP11,VAX: Addition of inter operable DUP11, DMC11 and KDP11 devices
This is the results of external KDP development activities. The KDP side done by Timothe Litt and DMC and DUP by Mark Pizzolato Additionally, other PDP10 updates from Timothe Litt
This commit is contained in:
parent
a7c2d7bf35
commit
55c5d20517
28 changed files with 7817 additions and 2627 deletions
|
@ -115,7 +115,8 @@ typedef t_int64 d10; /* PDP-10 data (36b) */
|
||||||
#define STOP_ILLIOC 10 /* invalid UBA num */
|
#define STOP_ILLIOC 10 /* invalid UBA num */
|
||||||
#define STOP_ASTOP 11 /* address stop */
|
#define STOP_ASTOP 11 /* address stop */
|
||||||
#define STOP_CONSOLE 12 /* FE halt */
|
#define STOP_CONSOLE 12 /* FE halt */
|
||||||
#define STOP_UNKNOWN 13 /* unknown stop */
|
#define STOP_IOALIGN 13 /* DMA word access to odd address */
|
||||||
|
#define STOP_UNKNOWN 14 /* unknown stop */
|
||||||
#define PAGE_FAIL -1 /* page fail */
|
#define PAGE_FAIL -1 /* page fail */
|
||||||
#define INTERRUPT -2 /* interrupt */
|
#define INTERRUPT -2 /* interrupt */
|
||||||
#define ABORT(x) longjmp (save_env, (x)) /* abort */
|
#define ABORT(x) longjmp (save_env, (x)) /* abort */
|
||||||
|
@ -614,6 +615,10 @@ struct pdp_dib {
|
||||||
int32 vec; /* value */
|
int32 vec; /* value */
|
||||||
int32 (*ack[VEC_DEVMAX])(void); /* ack routines */
|
int32 (*ack[VEC_DEVMAX])(void); /* ack routines */
|
||||||
uint32 ulnt; /* IO length per unit */
|
uint32 ulnt; /* IO length per unit */
|
||||||
|
uint32 flags; /* Special flags */
|
||||||
|
#define DIB_M_REGSIZE 03 /* Device register size */
|
||||||
|
#define DIB_REG16BIT 00
|
||||||
|
#define DIB_REG18BIT 01
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef struct pdp_dib DIB;
|
typedef struct pdp_dib DIB;
|
||||||
|
@ -622,6 +627,8 @@ typedef struct pdp_dib DIB;
|
||||||
|
|
||||||
#define DZ_MUXES 4 /* max # of muxes */
|
#define DZ_MUXES 4 /* max # of muxes */
|
||||||
#define DZ_LINES 8 /* lines per mux */
|
#define DZ_LINES 8 /* lines per mux */
|
||||||
|
#define KMC_UNITS 1 /* max # of KMCs */
|
||||||
|
#define INITIAL_KMCS 0 /* Number initially enabled */
|
||||||
#define DUP_LINES 4 /* max # of DUP11's */
|
#define DUP_LINES 4 /* max # of DUP11's */
|
||||||
#define DIB_MAX 100 /* max DIBs */
|
#define DIB_MAX 100 /* max DIBs */
|
||||||
|
|
||||||
|
@ -700,9 +707,10 @@ typedef struct pdp_dib DIB;
|
||||||
|
|
||||||
#define INT_V_RP 6 /* RH11/RP,RM drives */
|
#define INT_V_RP 6 /* RH11/RP,RM drives */
|
||||||
#define INT_V_TU 7 /* RH11/TM03/TU45 */
|
#define INT_V_TU 7 /* RH11/TM03/TU45 */
|
||||||
#define INT_V_DMCRX 13
|
#define INT_V_KMCA 8 /* KMC11 */
|
||||||
#define INT_V_DMCTX 14
|
#define INT_V_KMCB 9
|
||||||
#define INT_V_XU 15 /* DEUNA/DELUA */
|
#define INT_V_DMCRX 8 /* DMC11/DMR11 */
|
||||||
|
#define INT_V_DMCTX 9
|
||||||
#define INT_V_DZRX 16 /* DZ11 */
|
#define INT_V_DZRX 16 /* DZ11 */
|
||||||
#define INT_V_DZTX 17
|
#define INT_V_DZTX 17
|
||||||
#define INT_V_RY 18 /* RX211 */
|
#define INT_V_RY 18 /* RX211 */
|
||||||
|
@ -715,6 +723,8 @@ typedef struct pdp_dib DIB;
|
||||||
|
|
||||||
#define INT_RP (1u << INT_V_RP)
|
#define INT_RP (1u << INT_V_RP)
|
||||||
#define INT_TU (1u << INT_V_TU)
|
#define INT_TU (1u << INT_V_TU)
|
||||||
|
#define INT_KMCA (1u << INT_V_KMCA)
|
||||||
|
#define INT_KMCB (1u << INT_V_KMCB)
|
||||||
#define INT_DMCRX (1u << INT_V_DMCRX)
|
#define INT_DMCRX (1u << INT_V_DMCRX)
|
||||||
#define INT_DMCTX (1u << INT_V_DMCTX)
|
#define INT_DMCTX (1u << INT_V_DMCTX)
|
||||||
#define INT_XU (1u << INT_V_XU)
|
#define INT_XU (1u << INT_V_XU)
|
||||||
|
@ -730,8 +740,8 @@ typedef struct pdp_dib DIB;
|
||||||
|
|
||||||
#define IPL_RP 6 /* int levels */
|
#define IPL_RP 6 /* int levels */
|
||||||
#define IPL_TU 6
|
#define IPL_TU 6
|
||||||
#define IPL_DMCRX 5
|
#define IPL_KMCA 5
|
||||||
#define IPL_DMCTX 5
|
#define IPL_KMCB 5
|
||||||
#define IPL_XU 5
|
#define IPL_XU 5
|
||||||
#define IPL_DZRX 5
|
#define IPL_DZRX 5
|
||||||
#define IPL_DZTX 5
|
#define IPL_DZTX 5
|
||||||
|
@ -759,8 +769,6 @@ typedef struct pdp_dib DIB;
|
||||||
#define VEC_CR 0230
|
#define VEC_CR 0230
|
||||||
#define VEC_RP 0254
|
#define VEC_RP 0254
|
||||||
#define VEC_RY 0264
|
#define VEC_RY 0264
|
||||||
#define VEC_DZRX 0340
|
|
||||||
#define VEC_DZTX 0344
|
|
||||||
#define VEC_LP20 0754
|
#define VEC_LP20 0754
|
||||||
#define VEC_AUTO 0 /* Set by Auto Configure */
|
#define VEC_AUTO 0 /* Set by Auto Configure */
|
||||||
|
|
||||||
|
|
|
@ -265,8 +265,8 @@ if (M[FE_KEEPA] & INT64_C(0020000000000)) { /* KSRLD - "Forced" (ac
|
||||||
}
|
}
|
||||||
else if (M[FE_KEEPA] & INT64_C(0010000000000)) { /* KPACT */
|
else if (M[FE_KEEPA] & INT64_C(0010000000000)) { /* KPACT */
|
||||||
d10 kav = M[FE_KEEPA] & INT64_C(0000000177400); /* KPALIV */
|
d10 kav = M[FE_KEEPA] & INT64_C(0000000177400); /* KPALIV */
|
||||||
if (kaf_unit.u3 != (uint32)kav) {
|
if (kaf_unit.u3 != (int32)kav) {
|
||||||
kaf_unit.u3 = (uint32)kav;
|
kaf_unit.u3 = (int32)kav;
|
||||||
kaf_unit.u4 = 0;
|
kaf_unit.u4 = 0;
|
||||||
}
|
}
|
||||||
else if (++kaf_unit.u4 >= 15) {
|
else if (++kaf_unit.u4 >= 15) {
|
||||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -429,7 +429,7 @@ else { /* TOPS-20 paging */
|
||||||
int32 pmi, vpn, xpte;
|
int32 pmi, vpn, xpte;
|
||||||
int32 flg, t;
|
int32 flg, t;
|
||||||
t_bool stop;
|
t_bool stop;
|
||||||
a10 pa, csta;
|
a10 pa, csta = 0;
|
||||||
d10 ptr, cste;
|
d10 ptr, cste;
|
||||||
d10 acc = PTE_T20_W | PTE_T20_C; /* init access bits */
|
d10 acc = PTE_T20_W | PTE_T20_C; /* init access bits */
|
||||||
|
|
||||||
|
|
|
@ -1229,7 +1229,7 @@ return SCPE_OK;
|
||||||
static const d10 boot_rom_dec[] = {
|
static const d10 boot_rom_dec[] = {
|
||||||
INT64_C(0510040000000)+FE_RHBASE, /* boot:hllz 1,FE_RHBASE ; uba # */
|
INT64_C(0510040000000)+FE_RHBASE, /* boot:hllz 1,FE_RHBASE ; uba # */
|
||||||
INT64_C(0201000140001), /* movei 0,140001 ; vld,fst,pg 1 */
|
INT64_C(0201000140001), /* movei 0,140001 ; vld,fst,pg 1 */
|
||||||
INT64_C(0713001000000)+(IOBA_UBMAP+1 & RMASK), /* wrio 0,763001(1); set ubmap */
|
INT64_C(0713001000000)+((IOBA_UBMAP+1) & RMASK), /* wrio 0,763001(1); set ubmap */
|
||||||
INT64_C(0200040000000)+FE_RHBASE, /* move 1,FE_RHBASE */
|
INT64_C(0200040000000)+FE_RHBASE, /* move 1,FE_RHBASE */
|
||||||
INT64_C(0201000000040), /* movei 0,40 ; ctrl reset */
|
INT64_C(0201000000040), /* movei 0,40 ; ctrl reset */
|
||||||
INT64_C(0713001000010), /* wrio 0,10(1) ; ->RPCS2 */
|
INT64_C(0713001000010), /* wrio 0,10(1) ; ->RPCS2 */
|
||||||
|
@ -1293,7 +1293,7 @@ static const d10 boot_rom_dec[] = {
|
||||||
static const d10 boot_rom_its[] = {
|
static const d10 boot_rom_its[] = {
|
||||||
INT64_C(0510040000001)+FE_RHBASE, /* boot:hllzi 1,FE_RHBASE ; uba # */
|
INT64_C(0510040000001)+FE_RHBASE, /* boot:hllzi 1,FE_RHBASE ; uba # */
|
||||||
INT64_C(0201000140001), /* movei 0,140001 ; vld,fst,pg 1 */
|
INT64_C(0201000140001), /* movei 0,140001 ; vld,fst,pg 1 */
|
||||||
INT64_C(0715000000000)+(IOBA_UBMAP+1 & RMASK), /* iowrq 0,763001 ; set ubmap */
|
INT64_C(0715000000000)+((IOBA_UBMAP+1) & RMASK), /* iowrq 0,763001 ; set ubmap */
|
||||||
INT64_C(0200040000000)+FE_RHBASE, /* move 1,FE_RHBASE */
|
INT64_C(0200040000000)+FE_RHBASE, /* move 1,FE_RHBASE */
|
||||||
INT64_C(0201000000040), /* movei 0,40 ; ctrl reset */
|
INT64_C(0201000000040), /* movei 0,40 ; ctrl reset */
|
||||||
INT64_C(0715001000010), /* iowrq 0,10(1) ; ->RPCS2 */
|
INT64_C(0715001000010), /* iowrq 0,10(1) ; ->RPCS2 */
|
||||||
|
|
|
@ -56,6 +56,8 @@ extern DEVICE ry_dev;
|
||||||
extern DEVICE cr_dev;
|
extern DEVICE cr_dev;
|
||||||
extern DEVICE lp20_dev;
|
extern DEVICE lp20_dev;
|
||||||
extern DEVICE dup_dev;
|
extern DEVICE dup_dev;
|
||||||
|
extern DEVICE kmc_dev;
|
||||||
|
extern DEVICE dmc_dev;
|
||||||
extern UNIT cpu_unit;
|
extern UNIT cpu_unit;
|
||||||
extern REG cpu_reg[];
|
extern REG cpu_reg[];
|
||||||
extern d10 *M;
|
extern d10 *M;
|
||||||
|
@ -92,6 +94,8 @@ DEVICE *sim_devices[] = {
|
||||||
&tu_dev,
|
&tu_dev,
|
||||||
&dz_dev,
|
&dz_dev,
|
||||||
&dup_dev,
|
&dup_dev,
|
||||||
|
&kmc_dev,
|
||||||
|
&dmc_dev,
|
||||||
NULL
|
NULL
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -109,6 +113,7 @@ const char *sim_stop_messages[] = {
|
||||||
"Invalid I/O controller",
|
"Invalid I/O controller",
|
||||||
"Address stop",
|
"Address stop",
|
||||||
"Console FE halt",
|
"Console FE halt",
|
||||||
|
"Unaligned DMA",
|
||||||
"Panic stop"
|
"Panic stop"
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -810,7 +810,7 @@ return;
|
||||||
t_stat tu_svc (UNIT *uptr)
|
t_stat tu_svc (UNIT *uptr)
|
||||||
{
|
{
|
||||||
int32 fnc, fmt, i, j, k, wc10, ba10;
|
int32 fnc, fmt, i, j, k, wc10, ba10;
|
||||||
int32 ba, fc, wc, drv, mpa10, vpn;
|
int32 ba, fc, wc, drv, mpa10 = 0, vpn;
|
||||||
d10 val, v[4];
|
d10 val, v[4];
|
||||||
t_mtrlnt tbc;
|
t_mtrlnt tbc;
|
||||||
t_stat st, r = SCPE_OK;
|
t_stat st, r = SCPE_OK;
|
||||||
|
@ -1258,7 +1258,7 @@ return sim_tape_detach (uptr);
|
||||||
static const d10 boot_rom_dec[] = {
|
static const d10 boot_rom_dec[] = {
|
||||||
INT64_C(0510040000000)+FE_RHBASE, /* boot:hllz 1,FE_RHBASE ; uba # */
|
INT64_C(0510040000000)+FE_RHBASE, /* boot:hllz 1,FE_RHBASE ; uba # */
|
||||||
INT64_C(0201000040001), /* movei 0,40001 ; vld,pg 1 */
|
INT64_C(0201000040001), /* movei 0,40001 ; vld,pg 1 */
|
||||||
INT64_C(0713001000000)+(IOBA_UBMAP+1 & RMASK), /* wrio 0,763001(1); set ubmap */
|
INT64_C(0713001000000)+((IOBA_UBMAP+1) & RMASK), /* wrio 0,763001(1); set ubmap */
|
||||||
INT64_C(0200040000000)+FE_RHBASE, /* move 1,FE_RHBASE */
|
INT64_C(0200040000000)+FE_RHBASE, /* move 1,FE_RHBASE */
|
||||||
INT64_C(0201000000040), /* movei 0,40 ; ctrl reset */
|
INT64_C(0201000000040), /* movei 0,40 ; ctrl reset */
|
||||||
INT64_C(0713001000010), /* wrio 0,10(1) ; ->MTFS */
|
INT64_C(0713001000010), /* wrio 0,10(1) ; ->MTFS */
|
||||||
|
@ -1312,7 +1312,7 @@ static const d10 boot_rom_dec[] = {
|
||||||
static const d10 boot_rom_its[] = {
|
static const d10 boot_rom_its[] = {
|
||||||
INT64_C(0510040000000)+FE_RHBASE, /* boot:hllz 1,FE_RHBASE ; uba # - not used */
|
INT64_C(0510040000000)+FE_RHBASE, /* boot:hllz 1,FE_RHBASE ; uba # - not used */
|
||||||
INT64_C(0201000040001), /* movei 0,40001 ; vld,pg 1 */
|
INT64_C(0201000040001), /* movei 0,40001 ; vld,pg 1 */
|
||||||
INT64_C(0714000000000)+(IOBA_UBMAP+1 & RMASK), /* iowri 0,763001 ; set ubmap */
|
INT64_C(0714000000000)+((IOBA_UBMAP+1) & RMASK), /* iowri 0,763001 ; set ubmap */
|
||||||
INT64_C(0200040000000)+FE_RHBASE, /* move 1,FE_RHBASE */
|
INT64_C(0200040000000)+FE_RHBASE, /* move 1,FE_RHBASE */
|
||||||
INT64_C(0201000000040), /* movei 0,40 ; ctrl reset */
|
INT64_C(0201000000040), /* movei 0,40 ; ctrl reset */
|
||||||
INT64_C(0714001000010), /* iowri 0,10(1) ; ->MTFS */
|
INT64_C(0714001000010), /* iowri 0,10(1) ; ->MTFS */
|
||||||
|
|
|
@ -155,41 +155,41 @@ d10 xlate (d10 by, a10 tblad, d10 *xflgs, int32 pflgs);
|
||||||
void filldst (d10 fill, int32 ac, d10 cnt, int32 pflgs);
|
void filldst (d10 fill, int32 ac, d10 cnt, int32 pflgs);
|
||||||
|
|
||||||
static const d10 pwrs10[23][2] = {
|
static const d10 pwrs10[23][2] = {
|
||||||
INT64_C(0), INT64_C(0),
|
{ INT64_C(0), INT64_C(0),},
|
||||||
INT64_C(0), INT64_C(1),
|
{ INT64_C(0), INT64_C(1),},
|
||||||
INT64_C(0), INT64_C(10),
|
{ INT64_C(0), INT64_C(10),},
|
||||||
INT64_C(0), INT64_C(100),
|
{ INT64_C(0), INT64_C(100),},
|
||||||
INT64_C(0), INT64_C(1000),
|
{ INT64_C(0), INT64_C(1000),},
|
||||||
INT64_C(0), INT64_C(10000),
|
{ INT64_C(0), INT64_C(10000),},
|
||||||
INT64_C(0), INT64_C(100000),
|
{ INT64_C(0), INT64_C(100000),},
|
||||||
INT64_C(0), INT64_C(1000000),
|
{ INT64_C(0), INT64_C(1000000),},
|
||||||
INT64_C(0), INT64_C(10000000),
|
{ INT64_C(0), INT64_C(10000000),},
|
||||||
INT64_C(0), INT64_C(100000000),
|
{ INT64_C(0), INT64_C(100000000),},
|
||||||
INT64_C(0), INT64_C(1000000000),
|
{ INT64_C(0), INT64_C(1000000000),},
|
||||||
INT64_C(0), INT64_C(10000000000),
|
{ INT64_C(0), INT64_C(10000000000),},
|
||||||
INT64_C(2), INT64_C(31280523264),
|
{ INT64_C(2), INT64_C(31280523264),},
|
||||||
INT64_C(29), INT64_C(3567587328),
|
{ INT64_C(29), INT64_C(3567587328),},
|
||||||
INT64_C(291), INT64_C(1316134912),
|
{ INT64_C(291), INT64_C(1316134912),},
|
||||||
INT64_C(2910), INT64_C(13161349120),
|
{ INT64_C(2910), INT64_C(13161349120),},
|
||||||
INT64_C(29103), INT64_C(28534276096),
|
{ INT64_C(29103), INT64_C(28534276096),},
|
||||||
INT64_C(291038), INT64_C(10464854016),
|
{ INT64_C(291038), INT64_C(10464854016),},
|
||||||
INT64_C(2910383), INT64_C(1569325056),
|
{ INT64_C(2910383), INT64_C(1569325056),},
|
||||||
INT64_C(29103830), INT64_C(15693250560),
|
{ INT64_C(29103830), INT64_C(15693250560),},
|
||||||
INT64_C(291038304), INT64_C(19493552128),
|
{ INT64_C(291038304), INT64_C(19493552128),},
|
||||||
INT64_C(2910383045), INT64_C(23136829440),
|
{ INT64_C(2910383045), INT64_C(23136829440),},
|
||||||
INT64_C(29103830456), INT64_C(25209864192)
|
{ INT64_C(29103830456), INT64_C(25209864192),},
|
||||||
};
|
};
|
||||||
|
|
||||||
int xtend (int32 ac, int32 ea, int32 pflgs)
|
int xtend (int32 ac, int32 ea, int32 pflgs)
|
||||||
{
|
{
|
||||||
d10 b1, b2, ppi;
|
d10 b1, b2, ppi;
|
||||||
d10 xinst, xoff, digit, f1, f2, rs[2];
|
d10 xinst, xoff = 0, digit, f1, f2, rs[2];
|
||||||
d10 xflgs = 0;
|
d10 xflgs = 0;
|
||||||
a10 e1, entad;
|
a10 e1 = 0, entad;
|
||||||
int32 p1 = ADDAC (ac, 1);
|
int32 p1 = ADDAC (ac, 1);
|
||||||
int32 p3 = ADDAC (ac, 3);
|
int32 p3 = ADDAC (ac, 3);
|
||||||
int32 p4 = ADDAC (ac, 4);
|
int32 p4 = ADDAC (ac, 4);
|
||||||
int32 flg, i, s2, t, pp, pat, xop, xac, ret;
|
int32 flg, i, s2 = 0, t, pp, pat, xop, xac, ret;
|
||||||
|
|
||||||
xinst = Read (ea, MM_OPND); /* get extended instr */
|
xinst = Read (ea, MM_OPND); /* get extended instr */
|
||||||
xop = GET_OP (xinst); /* get opcode */
|
xop = GET_OP (xinst); /* get opcode */
|
||||||
|
|
|
@ -31,6 +31,8 @@
|
||||||
#ifndef PDP11_DDCMP_H_
|
#ifndef PDP11_DDCMP_H_
|
||||||
#define PDP11_DDCMP_H_ 0
|
#define PDP11_DDCMP_H_ 0
|
||||||
|
|
||||||
|
#include "sim_tmxr.h"
|
||||||
|
|
||||||
/* DDCMP packet types */
|
/* DDCMP packet types */
|
||||||
|
|
||||||
#define DDCMP_SYN 0226u /* Sync character on synchronous links */
|
#define DDCMP_SYN 0226u /* Sync character on synchronous links */
|
||||||
|
@ -39,6 +41,27 @@
|
||||||
#define DDCMP_ENQ 0005u /* Control Message Identifier */
|
#define DDCMP_ENQ 0005u /* Control Message Identifier */
|
||||||
#define DDCMP_DLE 0220u /* Maintenance Message Identifier */
|
#define DDCMP_DLE 0220u /* Maintenance Message Identifier */
|
||||||
|
|
||||||
|
#define DDCMP_CTL_ACK 1 /* Control Message ACK Type */
|
||||||
|
#define DDCMP_CTL_NAK 2 /* Control Message NAK Type */
|
||||||
|
#define DDCMP_CTL_REP 3 /* Control Message REP Type */
|
||||||
|
#define DDCMP_CTL_STRT 6 /* Control Message STRT Type */
|
||||||
|
#define DDCMP_CTL_STACK 7 /* Control Message STACK Type */
|
||||||
|
|
||||||
|
#define DDCMP_FLAG_SELECT 0x2 /* Link Select */
|
||||||
|
#define DDCMP_FLAG_QSYNC 0x1 /* Quick Sync (next message won't abut this message) */
|
||||||
|
|
||||||
|
#define DDCMP_CRC_SIZE 2 /* Bytes in DDCMP CRC fields */
|
||||||
|
#define DDCMP_HEADER_SIZE 8 /* Bytes in DDCMP Control and Data Message headers (including header CRC) */
|
||||||
|
|
||||||
|
#define DDCMP_RESP_OFFSET 3 /* Byte offset of response (ack) number field */
|
||||||
|
#define DDCMP_NUM_OFFSET 4 /* Byte offset of packet number field */
|
||||||
|
|
||||||
|
#define DDCMP_PACKET_TIMEOUT 4 /* Seconds before sending REP command for unacknowledged packets */
|
||||||
|
|
||||||
|
#define DDCMP_DBG_PXMT TMXR_DBG_PXMT /* Debug Transmitted Packet Header Contents */
|
||||||
|
#define DDCMP_DBG_PRCV TMXR_DBG_PRCV /* Debug Received Packet Header Contents */
|
||||||
|
#define DDCMP_DBG_PDAT 0x1000000 /* Debug Packet Data */
|
||||||
|
|
||||||
/* Support routines */
|
/* Support routines */
|
||||||
|
|
||||||
/* crc16 polynomial x^16 + x^15 + x^2 + 1 (0xA001) CCITT LSB */
|
/* crc16 polynomial x^16 + x^15 + x^2 + 1 (0xA001) CCITT LSB */
|
||||||
|
@ -62,54 +85,62 @@ return(crc);
|
||||||
|
|
||||||
#include <ctype.h>
|
#include <ctype.h>
|
||||||
|
|
||||||
static void ddcmp_packet_trace (uint32 reason, DEVICE *dptr, const char *txt, const uint8 *msg, int32 len, t_bool detail)
|
static void ddcmp_packet_trace (uint32 reason, DEVICE *dptr, const char *txt, const uint8 *msg, int32 len)
|
||||||
{
|
{
|
||||||
if (sim_deb && dptr && (reason & dptr->dctrl)) {
|
if (sim_deb && dptr && (reason & dptr->dctrl)) {
|
||||||
sim_debug(reason, dptr, "%s len: %d\n", txt, len);
|
int i, same, group, sidx, oidx;
|
||||||
if (detail) {
|
char outbuf[80], strbuf[18];
|
||||||
int i, same, group, sidx, oidx;
|
static const char hex[] = "0123456789ABCDEF";
|
||||||
char outbuf[80], strbuf[18];
|
static const char *const flags [4] = { "..", ".Q", "S.", "SQ" };
|
||||||
static char hex[] = "0123456789ABCDEF";
|
static const char *const nak[18] = { "", " (HCRC)", " (DCRC)", " (REPREPLY)", /* 0-3 */
|
||||||
|
"", "", "", "", /* 4-7 */
|
||||||
|
" (NOBUF)", " (RXOVR)", "", "", /* 8-11 */
|
||||||
|
"", "", "", "", /* 12-15 */
|
||||||
|
" (TOOLONG)", " (HDRFMT)" }; /* 16-17 */
|
||||||
|
const char *flag = flags[msg[2]>>6];
|
||||||
|
int msg2 = msg[2] & 0x3F;
|
||||||
|
|
||||||
switch (msg[0]) {
|
sim_debug(reason, dptr, "%s len: %d\n", txt, len);
|
||||||
case DDCMP_SOH: /* Data Message */
|
switch (msg[0]) {
|
||||||
sim_debug (reason, dptr, "Data Message, Link: %d, Count: %d, Resp: %d, Num: %d, HDRCRC: %s, DATACRC: %s\n", msg[2]>>6, ((msg[2] & 0x3F) << 8)|msg[1], msg[3], msg[4],
|
case DDCMP_SOH: /* Data Message */
|
||||||
(0 == ddcmp_crc16 (0, msg, 8)) ? "OK" : "BAD", (0 == ddcmp_crc16 (0, msg+8, 2+(((msg[2] & 0x3F) << 8)|msg[1]))) ? "OK" : "BAD");
|
sim_debug (reason, dptr, "Data Message, Count: %d, Num: %d, Flags: %s, Resp: %d, HDRCRC: %s, DATACRC: %s\n", (msg2 << 8)|msg[1], msg[4], flag, msg[3],
|
||||||
break;
|
(0 == ddcmp_crc16 (0, msg, 8)) ? "OK" : "BAD", (0 == ddcmp_crc16 (0, msg+8, 2+((msg2 << 8)|msg[1]))) ? "OK" : "BAD");
|
||||||
case DDCMP_ENQ: /* Control Message */
|
break;
|
||||||
sim_debug (reason, dptr, "Control: Type: %d ", msg[1]);
|
case DDCMP_ENQ: /* Control Message */
|
||||||
switch (msg[1]) {
|
sim_debug (reason, dptr, "Control: Type: %d ", msg[1]);
|
||||||
case 1: /* ACK */
|
switch (msg[1]) {
|
||||||
sim_debug (reason, dptr, "(ACK) ACKSUB: %d, Link: %d, Resp: %d\n", msg[2] & 0x3F, msg[2]>>6, msg[3]);
|
case DDCMP_CTL_ACK: /* ACK */
|
||||||
break;
|
sim_debug (reason, dptr, "(ACK) ACKSUB: %d, Flags: %s, Resp: %d\n", msg2, flag, msg[3]);
|
||||||
case 2: /* NAK */
|
break;
|
||||||
sim_debug (reason, dptr, "(NAK) Reason: %d, Link: %d, Resp: %d\n", msg[2] & 0x3F, msg[2]>>6, msg[3]);
|
case DDCMP_CTL_NAK: /* NAK */
|
||||||
break;
|
sim_debug (reason, dptr, "(NAK) Reason: %d%s, Flags: %s, Resp: %d\n", msg2, ((msg2 > 17)? "": nak[msg2]), flag, msg[3]);
|
||||||
case 3: /* REP */
|
break;
|
||||||
sim_debug (reason, dptr, "(REP) REPSUB: %d, Link: %d, Num: %d\n", msg[2] & 0x3F, msg[2]>>6, msg[4]);
|
case DDCMP_CTL_REP: /* REP */
|
||||||
break;
|
sim_debug (reason, dptr, "(REP) REPSUB: %d, Num: %d, Flags: %s\n", msg2, msg[4], flag);
|
||||||
case 6: /* STRT */
|
break;
|
||||||
sim_debug (reason, dptr, "(STRT) STRTSUB: %d, Link: %d\n", msg[2] & 0x3F, msg[2]>>6);
|
case DDCMP_CTL_STRT: /* STRT */
|
||||||
break;
|
sim_debug (reason, dptr, "(STRT) STRTSUB: %d, Flags: %s\n", msg2, flag);
|
||||||
case 7: /* STACK */
|
break;
|
||||||
sim_debug (reason, dptr, "(STACK) STCKSUB: %d, Link: %d\n", msg[2] & 0x3F, msg[2]>>6);
|
case DDCMP_CTL_STACK: /* STACK */
|
||||||
break;
|
sim_debug (reason, dptr, "(STACK) STCKSUB: %d, Flags: %s\n", msg2, flag);
|
||||||
default: /* Unknown */
|
break;
|
||||||
sim_debug (reason, dptr, "(Unknown=0%o)\n", msg[1]);
|
default: /* Unknown */
|
||||||
break;
|
sim_debug (reason, dptr, "(Unknown=0%o)\n", msg[1]);
|
||||||
}
|
break;
|
||||||
if (len != 8) {
|
}
|
||||||
sim_debug (reason, dptr, "Unexpected Control Message Length: %d expected 8\n", len);
|
if (len != DDCMP_HEADER_SIZE) {
|
||||||
}
|
sim_debug (reason, dptr, "Unexpected Control Message Length: %d expected %d\n", len, DDCMP_HEADER_SIZE);
|
||||||
if (0 != ddcmp_crc16 (0, msg, len)) {
|
}
|
||||||
sim_debug (reason, dptr, "Unexpected Message CRC\n");
|
if (0 != ddcmp_crc16 (0, msg, len)) {
|
||||||
}
|
sim_debug (reason, dptr, "Unexpected Message CRC\n");
|
||||||
break;
|
}
|
||||||
case DDCMP_DLE: /* Maintenance Message */
|
break;
|
||||||
sim_debug (reason, dptr, "Maintenance Message, Link: %d, Count: %d, HDRCRC: %s, DATACRC: %s\n", msg[2]>>6, ((msg[2] & 0x3F) << 8)| msg[1],
|
case DDCMP_DLE: /* Maintenance Message */
|
||||||
(0 == ddcmp_crc16 (0, msg, 8)) ? "OK" : "BAD", (0 == ddcmp_crc16 (0, msg+8, 2+(((msg[2] & 0x3F) << 8)| msg[1]))) ? "OK" : "BAD");
|
sim_debug (reason, dptr, "Maintenance Message, Count: %d, Flags: %s, HDRCRC: %s, DATACRC: %s\n", (msg2 << 8)| msg[1], flag,
|
||||||
break;
|
(0 == ddcmp_crc16 (0, msg, DDCMP_HEADER_SIZE)) ? "OK" : "BAD", (0 == ddcmp_crc16 (0, msg+DDCMP_HEADER_SIZE, 2+((msg2 << 8)| msg[1]))) ? "OK" : "BAD");
|
||||||
}
|
break;
|
||||||
|
}
|
||||||
|
if (DDCMP_DBG_PDAT & dptr->dctrl) {
|
||||||
for (i=same=0; i<len; i += 16) {
|
for (i=same=0; i<len; i += 16) {
|
||||||
if ((i > 0) && (0 == memcmp(&msg[i], &msg[i-16], 16))) {
|
if ((i > 0) && (0 == memcmp(&msg[i], &msg[i-16], 16))) {
|
||||||
++same;
|
++same;
|
||||||
|
@ -142,4 +173,228 @@ if (sim_deb && dptr && (reason & dptr->dctrl)) {
|
||||||
|
|
||||||
uint16 ddcmp_crc16(uint16 crc, const void* vbuf, size_t len);
|
uint16 ddcmp_crc16(uint16 crc, const void* vbuf, size_t len);
|
||||||
|
|
||||||
|
/* Get packet from specific line
|
||||||
|
|
||||||
|
Inputs:
|
||||||
|
*lp = pointer to terminal line descriptor
|
||||||
|
**pbuf = pointer to pointer of packet contents
|
||||||
|
*psize = pointer to packet size
|
||||||
|
|
||||||
|
Output:
|
||||||
|
SCPE_LOST link state lost
|
||||||
|
SCPE_OK Packet returned OR no packet available
|
||||||
|
|
||||||
|
Implementation notes:
|
||||||
|
|
||||||
|
1. If a packet is not yet available, then the pbuf address returned is
|
||||||
|
NULL, but success (SCPE_OK) is returned
|
||||||
|
*/
|
||||||
|
|
||||||
|
static t_stat ddcmp_tmxr_get_packet_ln (TMLN *lp, const uint8 **pbuf, uint16 *psize)
|
||||||
|
{
|
||||||
|
int32 c;
|
||||||
|
size_t payloadsize;
|
||||||
|
|
||||||
|
while (TMXR_VALID & (c = tmxr_getc_ln (lp))) {
|
||||||
|
c &= ~TMXR_VALID;
|
||||||
|
if (lp->rxpboffset + 1 > lp->rxpbsize) {
|
||||||
|
lp->rxpbsize += 512;
|
||||||
|
lp->rxpb = (uint8 *)realloc (lp->rxpb, lp->rxpbsize);
|
||||||
|
}
|
||||||
|
lp->rxpb[lp->rxpboffset] = c;
|
||||||
|
if ((lp->rxpboffset == 0) && ((c == DDCMP_SYN) || (c == DDCMP_DEL))) {
|
||||||
|
tmxr_debug (DDCMP_DBG_PRCV, lp, "Ignoring Interframe Sync Character", (char *)&lp->rxpb[0], 1);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
lp->rxpboffset += 1;
|
||||||
|
if (lp->rxpboffset == 1) {
|
||||||
|
switch (c) {
|
||||||
|
default:
|
||||||
|
tmxr_debug (DDCMP_DBG_PRCV, lp, "Ignoring unexpected byte in DDCMP mode", (char *)&lp->rxpb[0], 1);
|
||||||
|
lp->rxpboffset = 0;
|
||||||
|
case DDCMP_SOH:
|
||||||
|
case DDCMP_ENQ:
|
||||||
|
case DDCMP_DLE:
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (lp->rxpboffset >= DDCMP_HEADER_SIZE) {
|
||||||
|
if (lp->rxpb[0] == DDCMP_ENQ) { /* Control Message? */
|
||||||
|
++lp->rxpcnt;
|
||||||
|
*pbuf = lp->rxpb;
|
||||||
|
*psize = DDCMP_HEADER_SIZE;
|
||||||
|
lp->rxpboffset = 0;
|
||||||
|
ddcmp_packet_trace (DDCMP_DBG_PRCV, lp->mp->dptr, "<<< RCV Packet", lp->rxpb, *psize);
|
||||||
|
return SCPE_OK;
|
||||||
|
}
|
||||||
|
payloadsize = ((lp->rxpb[2] & 0x3F) << 8)| lp->rxpb[1];
|
||||||
|
if (lp->rxpboffset >= 10 + payloadsize) {
|
||||||
|
++lp->rxpcnt;
|
||||||
|
*pbuf = lp->rxpb;
|
||||||
|
*psize = 10 + payloadsize;
|
||||||
|
ddcmp_packet_trace (DDCMP_DBG_PRCV, lp->mp->dptr, "<<< RCV Packet", lp->rxpb, *psize);
|
||||||
|
lp->rxpboffset = 0;
|
||||||
|
return SCPE_OK;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
*pbuf = NULL;
|
||||||
|
*psize = 0;
|
||||||
|
if (lp->conn)
|
||||||
|
return SCPE_OK;
|
||||||
|
return SCPE_LOST;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Store packet in line buffer (or store packet in line buffer and add needed CRCs)
|
||||||
|
|
||||||
|
Inputs:
|
||||||
|
*lp = pointer to line descriptor
|
||||||
|
*buf = pointer to packet data
|
||||||
|
size = size of packet
|
||||||
|
|
||||||
|
Outputs:
|
||||||
|
status = ok, connection lost, or stall
|
||||||
|
|
||||||
|
Implementation notea:
|
||||||
|
|
||||||
|
1. If the line is not connected, SCPE_LOST is returned.
|
||||||
|
2. If prior packet transmission still in progress, SCPE_STALL is
|
||||||
|
returned and no packet data is stored. The caller must retry later.
|
||||||
|
*/
|
||||||
|
static t_stat ddcmp_tmxr_put_packet_ln (TMLN *lp, const uint8 *buf, size_t size)
|
||||||
|
{
|
||||||
|
t_stat r;
|
||||||
|
|
||||||
|
if (!lp->conn)
|
||||||
|
return SCPE_LOST;
|
||||||
|
if (lp->txppoffset < lp->txppsize) {
|
||||||
|
tmxr_debug (DDCMP_DBG_PXMT, lp, "Skipped Sending Packet - Transmit Busy", (char *)&lp->txpb[3], size);
|
||||||
|
return SCPE_STALL;
|
||||||
|
}
|
||||||
|
if (lp->txpbsize < size) {
|
||||||
|
lp->txpbsize = size;
|
||||||
|
lp->txpb = (uint8 *)realloc (lp->txpb, lp->txpbsize);
|
||||||
|
}
|
||||||
|
memcpy (lp->txpb, buf, size);
|
||||||
|
lp->txppsize = size;
|
||||||
|
lp->txppoffset = 0;
|
||||||
|
ddcmp_packet_trace (DDCMP_DBG_PXMT, lp->mp->dptr, ">>> XMT Packet", lp->txpb, lp->txppsize);
|
||||||
|
++lp->txpcnt;
|
||||||
|
while ((lp->txppoffset < lp->txppsize) &&
|
||||||
|
(SCPE_OK == (r = tmxr_putc_ln (lp, lp->txpb[lp->txppoffset]))))
|
||||||
|
++lp->txppoffset;
|
||||||
|
tmxr_send_buffered_data (lp);
|
||||||
|
return lp->conn ? SCPE_OK : SCPE_LOST;
|
||||||
|
}
|
||||||
|
|
||||||
|
static t_stat ddcmp_tmxr_put_packet_crc_ln (TMLN *lp, uint8 *buf, size_t size)
|
||||||
|
{
|
||||||
|
uint16 hdr_crc16 = ddcmp_crc16(0, buf, DDCMP_HEADER_SIZE-DDCMP_CRC_SIZE);
|
||||||
|
|
||||||
|
buf[DDCMP_HEADER_SIZE-DDCMP_CRC_SIZE] = hdr_crc16 & 0xFF;
|
||||||
|
buf[DDCMP_HEADER_SIZE-DDCMP_CRC_SIZE+1] = (hdr_crc16>>8) & 0xFF;
|
||||||
|
if (size > DDCMP_HEADER_SIZE) {
|
||||||
|
uint16 data_crc16 = ddcmp_crc16(0, buf+DDCMP_HEADER_SIZE, size-(DDCMP_HEADER_SIZE+DDCMP_CRC_SIZE));
|
||||||
|
buf[size-DDCMP_CRC_SIZE] = data_crc16 & 0xFF;
|
||||||
|
buf[size-DDCMP_CRC_SIZE+1] = (data_crc16>>8) & 0xFF;
|
||||||
|
}
|
||||||
|
return ddcmp_tmxr_put_packet_ln (lp, buf, size);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void ddcmp_build_data_packet (uint8 *buf, size_t size, uint8 flags, uint8 sequence, uint8 ack)
|
||||||
|
{
|
||||||
|
buf[0] = DDCMP_SOH;
|
||||||
|
buf[1] = size & 0xFF;
|
||||||
|
buf[2] = ((size >> 8) & 0x3F) | (flags << 6);
|
||||||
|
buf[3] = ack;
|
||||||
|
buf[4] = sequence;
|
||||||
|
buf[5] = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void ddcmp_build_maintenance_packet (uint8 *buf, size_t size)
|
||||||
|
{
|
||||||
|
buf[0] = DDCMP_DLE;
|
||||||
|
buf[1] = size & 0xFF;
|
||||||
|
buf[2] = ((size >> 8) & 0x3F) | (DDCMP_FLAG_SELECT|DDCMP_FLAG_QSYNC << 6);
|
||||||
|
buf[3] = 0;
|
||||||
|
buf[4] = 0;
|
||||||
|
buf[5] = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
static t_stat ddcmp_tmxr_put_data_packet_ln (TMLN *lp, uint8 *buf, size_t size, uint8 flags, uint8 sequence, uint8 ack)
|
||||||
|
{
|
||||||
|
ddcmp_build_data_packet (buf, size, flags, sequence, ack);
|
||||||
|
return ddcmp_tmxr_put_packet_crc_ln (lp, buf, size);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void ddcmp_build_control_packet (uint8 *buf, uint8 type, uint8 subtype, uint8 flags, uint8 sndr, uint8 rcvr)
|
||||||
|
{
|
||||||
|
buf[0] = DDCMP_ENQ; /* Control Message */
|
||||||
|
buf[1] = type; /* STACK type */
|
||||||
|
buf[2] = (subtype & 0x3f) | (flags << 6);
|
||||||
|
/* STACKSUB type and flags */
|
||||||
|
buf[3] = rcvr; /* RCVR */
|
||||||
|
buf[4] = sndr; /* SNDR */
|
||||||
|
buf[5] = 1; /* ADDR */
|
||||||
|
}
|
||||||
|
|
||||||
|
static t_stat ddcmp_tmxr_put_control_packet_ln (TMLN *lp, uint8 *buf, uint8 type, uint8 subtype, uint8 flags, uint8 sndr, uint8 rcvr)
|
||||||
|
{
|
||||||
|
ddcmp_build_control_packet (buf, type, subtype, flags, sndr, rcvr);
|
||||||
|
return ddcmp_tmxr_put_packet_crc_ln (lp, buf, DDCMP_HEADER_SIZE);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void ddcmp_build_ack_packet (uint8 *buf, uint8 ack, uint8 flags)
|
||||||
|
{
|
||||||
|
ddcmp_build_control_packet (buf, DDCMP_CTL_ACK, 0, flags, 0, ack);
|
||||||
|
}
|
||||||
|
|
||||||
|
static t_stat ddcmp_tmxr_put_ack_packet_ln (TMLN *lp, uint8 *buf, uint8 ack, uint8 flags)
|
||||||
|
{
|
||||||
|
ddcmp_build_ack_packet (buf, ack, flags);
|
||||||
|
return ddcmp_tmxr_put_packet_crc_ln (lp, buf, DDCMP_HEADER_SIZE);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void ddcmp_build_nak_packet (uint8 *buf, uint8 reason, uint8 nack, uint8 flags)
|
||||||
|
{
|
||||||
|
ddcmp_build_control_packet (buf, DDCMP_CTL_NAK, reason, flags, 0, nack);
|
||||||
|
}
|
||||||
|
|
||||||
|
static t_stat ddcmp_tmxr_put_nak_packet_ln (TMLN *lp, uint8 *buf, uint8 reason, uint8 nack, uint8 flags)
|
||||||
|
{
|
||||||
|
return ddcmp_tmxr_put_control_packet_ln (lp, buf, DDCMP_CTL_NAK, reason, flags, 0, nack);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void ddcmp_build_rep_packet (uint8 *buf, uint8 ack, uint8 flags)
|
||||||
|
{
|
||||||
|
ddcmp_build_control_packet (buf, DDCMP_CTL_REP, 0, flags, ack, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
static t_stat ddcmp_tmxr_put_rep_packet_ln (TMLN *lp, uint8 *buf, uint8 ack, uint8 flags)
|
||||||
|
{
|
||||||
|
return ddcmp_tmxr_put_control_packet_ln (lp, buf, DDCMP_CTL_REP, 0, flags, ack, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void ddcmp_build_start_packet (uint8 *buf)
|
||||||
|
{
|
||||||
|
ddcmp_build_control_packet (buf, DDCMP_CTL_STRT, 0, DDCMP_FLAG_SELECT|DDCMP_FLAG_QSYNC, 0, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
static t_stat ddcmp_tmxr_put_start_packet_ln (TMLN *lp, uint8 *buf)
|
||||||
|
{
|
||||||
|
ddcmp_build_start_packet (buf);
|
||||||
|
return ddcmp_tmxr_put_packet_crc_ln (lp, buf, DDCMP_HEADER_SIZE);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void ddcmp_build_start_ack_packet (uint8 *buf)
|
||||||
|
{
|
||||||
|
ddcmp_build_control_packet (buf, DDCMP_CTL_STACK, 0, DDCMP_FLAG_SELECT|DDCMP_FLAG_QSYNC, 0, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
static t_stat ddcmp_tmxr_put_start_ack_packet_ln (TMLN *lp, uint8 *buf)
|
||||||
|
{
|
||||||
|
ddcmp_build_start_ack_packet (buf);
|
||||||
|
return ddcmp_tmxr_put_packet_crc_ln (lp, buf, DDCMP_HEADER_SIZE);
|
||||||
|
}
|
||||||
|
|
||||||
#endif /* PDP11_DDCMP_H_ */
|
#endif /* PDP11_DDCMP_H_ */
|
||||||
|
|
|
@ -485,6 +485,8 @@ typedef struct {
|
||||||
#define DLX_LINES 16 /* max # of KL11/DL11's */
|
#define DLX_LINES 16 /* max # of KL11/DL11's */
|
||||||
#define DCX_LINES 16 /* max # of DC11's */
|
#define DCX_LINES 16 /* max # of DC11's */
|
||||||
#define DUP_LINES 8 /* max # of DUP11/DPV11's */
|
#define DUP_LINES 8 /* max # of DUP11/DPV11's */
|
||||||
|
#define KMC_UNITS 2 /* max # of KMC11s */
|
||||||
|
#define INITIAL_KMCS 0 /* Number to initially enable */
|
||||||
#define MT_MAXFR (1 << 16) /* magtape max rec */
|
#define MT_MAXFR (1 << 16) /* magtape max rec */
|
||||||
#define DIB_MAX 100 /* max DIBs */
|
#define DIB_MAX 100 /* max DIBs */
|
||||||
|
|
||||||
|
@ -607,6 +609,8 @@ typedef struct pdp_dib DIB;
|
||||||
#define INT_V_DMCTX 20
|
#define INT_V_DMCTX 20
|
||||||
#define INT_V_DUPRX 21
|
#define INT_V_DUPRX 21
|
||||||
#define INT_V_DUPTX 22
|
#define INT_V_DUPTX 22
|
||||||
|
#define INT_V_KMCA 23
|
||||||
|
#define INT_V_KMCB 24
|
||||||
|
|
||||||
#define INT_V_PIR4 0 /* BR4 */
|
#define INT_V_PIR4 0 /* BR4 */
|
||||||
#define INT_V_TTI 1
|
#define INT_V_TTI 1
|
||||||
|
@ -661,6 +665,8 @@ typedef struct pdp_dib DIB;
|
||||||
#define INT_RS (1u << INT_V_RS)
|
#define INT_RS (1u << INT_V_RS)
|
||||||
#define INT_DMCRX (1u << INT_V_DMCRX)
|
#define INT_DMCRX (1u << INT_V_DMCRX)
|
||||||
#define INT_DMCTX (1u << INT_V_DMCTX)
|
#define INT_DMCTX (1u << INT_V_DMCTX)
|
||||||
|
#define INT_KMCA (1u << INT_V_KMCA)
|
||||||
|
#define INT_KMCB (1u << INT_V_KMCB)
|
||||||
#define INT_DUPRX (1u << INT_V_DUPRX)
|
#define INT_DUPRX (1u << INT_V_DUPRX)
|
||||||
#define INT_DUPTX (1u << INT_V_DUPTX)
|
#define INT_DUPTX (1u << INT_V_DUPTX)
|
||||||
#define INT_PIR4 (1u << INT_V_PIR4)
|
#define INT_PIR4 (1u << INT_V_PIR4)
|
||||||
|
@ -717,6 +723,8 @@ typedef struct pdp_dib DIB;
|
||||||
#define IPL_RS 5
|
#define IPL_RS 5
|
||||||
#define IPL_DMCRX 5
|
#define IPL_DMCRX 5
|
||||||
#define IPL_DMCTX 5
|
#define IPL_DMCTX 5
|
||||||
|
#define IPL_KMCA 5
|
||||||
|
#define IPL_KMCB 5
|
||||||
#define IPL_DUPRX 5
|
#define IPL_DUPRX 5
|
||||||
#define IPL_DUPTX 5
|
#define IPL_DUPTX 5
|
||||||
#define IPL_PTR 4
|
#define IPL_PTR 4
|
||||||
|
|
4856
PDP11/pdp11_dmc.c
4856
PDP11/pdp11_dmc.c
File diff suppressed because it is too large
Load diff
|
@ -1,146 +0,0 @@
|
||||||
/* pdp11_dmc.h: DMC11 Emulation
|
|
||||||
------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
Copyright (c) 2011, Robert M. A. Jarratt
|
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a
|
|
||||||
copy of this software and associated documentation files (the "Software"),
|
|
||||||
to deal in the Software without restriction, including without limitation
|
|
||||||
the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
|
||||||
and/or sell copies of the Software, and to permit persons to whom the
|
|
||||||
Software is furnished to do so, subject to the following conditions:
|
|
||||||
|
|
||||||
The above copyright notice and this permission notice shall be included in
|
|
||||||
all copies or substantial portions of the Software.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
|
||||||
THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
|
||||||
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
|
||||||
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
||||||
|
|
||||||
Except as contained in this notice, the name of the author shall not be
|
|
||||||
used in advertising or otherwise to promote the sale, use or other dealings
|
|
||||||
in this Software without prior written authorization from the author.
|
|
||||||
|
|
||||||
------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
Modification history:
|
|
||||||
|
|
||||||
15-Jan-13 RJ Contribution from Paul Koning of support for RSTS using the ROM
|
|
||||||
INPUT (ROM I) command to get the DMC11 to report DSR status.
|
|
||||||
------------------------------------------------------------------------------*/
|
|
||||||
|
|
||||||
// Notes
|
|
||||||
// Base address needs to be 760060 according to DMC11 manual, but SYSGEN seems to think CSR is 0760100. However if I use
|
|
||||||
// 0760100 I get a conflict with the DZ because the first 13 bits are still 00100. If I use 760060 VMS sees the XM device, but
|
|
||||||
// if I remove the DZ to prevent the conflict VMS does not see an XM device, but I do get lots of reads and writes, possibly
|
|
||||||
// because it thinks it is a different device. What worries me more though is that there seems to be overlap in the 13-bit base
|
|
||||||
// addresses of the DZ and DMC.
|
|
||||||
|
|
||||||
|
|
||||||
#ifndef PDP11_DMC_H
|
|
||||||
#define PDP11_DMC_H
|
|
||||||
|
|
||||||
#if defined (VM_VAX) /* VAX version */
|
|
||||||
#include "vax_defs.h"
|
|
||||||
extern int32 int_req[IPL_HLVL];
|
|
||||||
#elif defined(VM_PDP10)
|
|
||||||
#include "pdp10_defs.h"
|
|
||||||
//#define IPL_HLVL 8 /* # int levels */
|
|
||||||
extern int32 int_req;
|
|
||||||
#else /* PDP-11 version */
|
|
||||||
#include "pdp11_defs.h"
|
|
||||||
extern int32 int_req[IPL_HLVL];
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include "sim_sock.h"
|
|
||||||
|
|
||||||
#define DMC_NUMDEVICE 4 /* # DMC-11 devices */
|
|
||||||
#define DMC_UNITSPERDEVICE 1 /* # units per DMC-11 */
|
|
||||||
|
|
||||||
#define DMP_NUMDEVICE 1 /* # DMP-11 devices */
|
|
||||||
#define DMP_UNITSPERDEVICE 1 /* # units per DMP-11 */
|
|
||||||
|
|
||||||
#define DMC_RDX 8
|
|
||||||
|
|
||||||
/* debugging bitmaps */
|
|
||||||
#define DBG_TRC 0x0001 /* trace routine calls */
|
|
||||||
#define DBG_REG 0x0002 /* trace read/write registers */
|
|
||||||
#define DBG_WRN 0x0004 /* display warnings */
|
|
||||||
#define DBG_INF 0x0008 /* display informational messages (high level trace) */
|
|
||||||
#define DBG_DAT 0x0010 /* display data buffer contents */
|
|
||||||
#define DBG_DTS 0x0020 /* display data summary */
|
|
||||||
#define DBG_SOK 0x0040 /* display socket open/close */
|
|
||||||
#define DBG_CON 0x0080 /* display socket connection establishment */
|
|
||||||
|
|
||||||
#define TYPE_BACCI 0
|
|
||||||
#define TYPE_CNTLI 1
|
|
||||||
#define TYPE_BASEI 03
|
|
||||||
#define TYPE_BACCO 0
|
|
||||||
#define TYPE_CNTLO 1
|
|
||||||
|
|
||||||
#define TYPE_DMP_MODE 2
|
|
||||||
#define TYPE_DMP_CONTROL 1
|
|
||||||
#define TYPE_DMP_RECEIVE 0
|
|
||||||
#define TYPE_DMP_TRANSMIT 4
|
|
||||||
|
|
||||||
|
|
||||||
/* SEL0 */
|
|
||||||
#define DMC_TYPE_INPUT_MASK 0x0003
|
|
||||||
#define DMC_IN_IO_MASK 0x0004
|
|
||||||
#define DMP_IEO_MASK 0x0010
|
|
||||||
#define DMC_RQI_MASK 0x0020
|
|
||||||
#define DMP_RQI_MASK 0x0080
|
|
||||||
#define DMC_RDYI_MASK 0x0080
|
|
||||||
#define DMC_IEI_MASK 0x0040
|
|
||||||
#define DMP_IEI_MASK 0x0001
|
|
||||||
#define ROMI_MASK 0x0200
|
|
||||||
#define LU_LOOP_MASK 0x0800
|
|
||||||
#define MASTER_CLEAR_MASK 0x4000
|
|
||||||
#define RUN_MASK 0x8000
|
|
||||||
|
|
||||||
/* SEL2 */
|
|
||||||
#define DMP_IN_IO_MASK 0x0004
|
|
||||||
#define DMP_TYPE_INPUT_MASK 0x0007
|
|
||||||
#define TYPE_OUTPUT_MASK 0x0003
|
|
||||||
#define OUT_IO_MASK 0x0004
|
|
||||||
#define DMC_RDYO_MASK 0x0080
|
|
||||||
#define DMC_IEO_MASK 0x0040
|
|
||||||
#define DMP_RDYI_MASK 0x0010
|
|
||||||
|
|
||||||
/* BSEL6 */
|
|
||||||
#define LOST_DATA_MASK 0x0010
|
|
||||||
#define DISCONNECT_MASK 0x0040
|
|
||||||
|
|
||||||
#define DSPDSR 0x22b3 /* KMC opcode to move line unit status to SEL2 */
|
|
||||||
|
|
||||||
#define SEL0_RUN_BIT 15
|
|
||||||
#define SEL0_MCLR_BIT 14
|
|
||||||
#define SEL0_LU_LOOP_BIT 11
|
|
||||||
#define SEL0_ROMI_BIT 9
|
|
||||||
#define SEL0_RDI_BIT 7
|
|
||||||
#define SEL0_DMC_IEI_BIT 6
|
|
||||||
#define SEL0_DMP_IEI_BIT 0
|
|
||||||
#define SEL0_DMP_IEO_BIT 4
|
|
||||||
#define SEL0_DMC_RQI_BIT 5
|
|
||||||
#define SEL0_DMP_RQI_BIT 7
|
|
||||||
#define SEL0_IN_IO_BIT 2
|
|
||||||
#define SEL0_TYPEI_BIT 0
|
|
||||||
|
|
||||||
#define SEL2_TYPEO_BIT 0
|
|
||||||
#define SEL2_RDO_BIT 7
|
|
||||||
#define SEL2_IEO_BIT 6
|
|
||||||
#define SEL2_OUT_IO_BIT 2
|
|
||||||
#define SEL2_LINE_BIT 8
|
|
||||||
#define SEL2_LINE_BIT_LENGTH 6
|
|
||||||
#define SEL2_PRIO_BIT 14
|
|
||||||
#define SEL2_PRIO_BIT_LENGTH 2
|
|
||||||
|
|
||||||
#define SEL6_LOST_DATA_BIT 4
|
|
||||||
#define SEL6_DISCONNECT_BIT 6
|
|
||||||
|
|
||||||
#define BUFFER_QUEUE_SIZE 7
|
|
||||||
|
|
||||||
#endif /* _VAX_DMC_H */
|
|
File diff suppressed because it is too large
Load diff
|
@ -34,17 +34,30 @@
|
||||||
#ifndef PDP11_DUP_H_
|
#ifndef PDP11_DUP_H_
|
||||||
#define PDP11_DUP_H_ 0
|
#define PDP11_DUP_H_ 0
|
||||||
|
|
||||||
typedef void (*PACKET_RECEIVE_CALLBACK)(int32 dup, uint8 *buf, size_t len);
|
typedef void (*PACKET_DATA_AVAILABLE_CALLBACK)(int32 dup, int len);
|
||||||
typedef void (*PACKET_TRANSMIT_COMPLETE_CALLBACK)(int32 dup, int status);
|
typedef void (*PACKET_TRANSMIT_COMPLETE_CALLBACK)(int32 dup, int status);
|
||||||
|
typedef void (*MODEM_CHANGE_CALLBACK)(int32 dup);
|
||||||
|
|
||||||
int32 dup_get_line_speed (int32 dup);
|
int32 dup_get_DSR (int32 dup);
|
||||||
int32 dup_get_DCD (int32 dup);
|
int32 dup_get_DCD (int32 dup);
|
||||||
|
int32 dup_get_CTS (int32 dup);
|
||||||
|
int32 dup_get_RING (int32 dup);
|
||||||
|
int32 dup_get_RCVEN (int32 dup);
|
||||||
t_stat dup_set_DTR (int32 dup, t_bool state);
|
t_stat dup_set_DTR (int32 dup, t_bool state);
|
||||||
t_stat dup_set_DDCMP (int32 dup, t_bool state);
|
t_stat dup_set_RTS (int32 dup, t_bool state);
|
||||||
|
t_stat dup_set_W3_option (int32 dup, t_bool state);
|
||||||
|
t_stat dup_set_W5_option (int32 dup, t_bool state);
|
||||||
|
t_stat dup_set_W6_option (int32 dup, t_bool state);
|
||||||
|
t_stat dup_set_RCVEN (int32 dup, t_bool state);
|
||||||
|
t_stat dup_setup_dup (int32 dup, t_bool enable, t_bool protocol_DDCMP, t_bool crc_inhibit, t_bool halfduplex, uint8 station);
|
||||||
|
t_stat dup_reset_dup (int32 dup);
|
||||||
|
|
||||||
int32 dup_csr_to_linenum (int32 CSRPA);
|
int32 dup_csr_to_linenum (int32 CSRPA);
|
||||||
|
|
||||||
void dup_set_callback_mode (int32 dup, PACKET_RECEIVE_CALLBACK receive, PACKET_TRANSMIT_COMPLETE_CALLBACK transmit);
|
void dup_set_callback_mode (int32 dup, PACKET_DATA_AVAILABLE_CALLBACK receive, PACKET_TRANSMIT_COMPLETE_CALLBACK transmit, MODEM_CHANGE_CALLBACK modem);
|
||||||
|
|
||||||
t_bool dup_put_msg_bytes (int32 dup, uint8 *bytes, size_t len, t_bool start, t_bool end);
|
t_bool dup_put_msg_bytes (int32 dup, uint8 *bytes, size_t len, t_bool start, t_bool end);
|
||||||
|
|
||||||
#endif /* PDP11_DUP_H_ */
|
t_stat dup_get_packet (int32 dup, const uint8 **pbuf, uint16 *psize);
|
||||||
|
|
||||||
|
#endif /* PDP11_DUP_H_ */
|
||||||
|
|
3225
PDP11/pdp11_kmc.c
Normal file
3225
PDP11/pdp11_kmc.c
Normal file
File diff suppressed because it is too large
Load diff
|
@ -108,9 +108,10 @@ extern DEVICE xq_dev, xqb_dev;
|
||||||
extern DEVICE xu_dev, xub_dev;
|
extern DEVICE xu_dev, xub_dev;
|
||||||
extern DEVICE ke_dev;
|
extern DEVICE ke_dev;
|
||||||
extern DEVICE kg_dev;
|
extern DEVICE kg_dev;
|
||||||
extern DEVICE dmc_dev[];
|
extern DEVICE dmc_dev;
|
||||||
extern DEVICE dup_dev;
|
extern DEVICE dup_dev;
|
||||||
extern DEVICE dpv_dev;
|
extern DEVICE dpv_dev;
|
||||||
|
extern DEVICE kmc_dev;
|
||||||
extern UNIT cpu_unit;
|
extern UNIT cpu_unit;
|
||||||
extern REG cpu_reg[];
|
extern REG cpu_reg[];
|
||||||
extern uint16 *M;
|
extern uint16 *M;
|
||||||
|
@ -180,12 +181,10 @@ DEVICE *sim_devices[] = {
|
||||||
&xub_dev,
|
&xub_dev,
|
||||||
&ke_dev,
|
&ke_dev,
|
||||||
&kg_dev,
|
&kg_dev,
|
||||||
&dmc_dev[0],
|
&dmc_dev,
|
||||||
&dmc_dev[1],
|
|
||||||
&dmc_dev[2],
|
|
||||||
&dmc_dev[3],
|
|
||||||
&dup_dev,
|
&dup_dev,
|
||||||
&dpv_dev,
|
&dpv_dev,
|
||||||
|
&kmc_dev,
|
||||||
NULL
|
NULL
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -42,7 +42,9 @@ A remote console session will close when an EOF character is entered (i.e. ^D or
|
||||||
RQ device has a settable controller type (RQDX3, UDA50, KLESI, RUX50)
|
RQ device has a settable controller type (RQDX3, UDA50, KLESI, RUX50)
|
||||||
RQ disks default to Autosize without regard to disk type
|
RQ disks default to Autosize without regard to disk type
|
||||||
RQ disks on PDP11 can have RAUSER size beyond 2GB
|
RQ disks on PDP11 can have RAUSER size beyond 2GB
|
||||||
DMC11 DDCMP DECnet device simulation from Rob Jarratt. Up to 4 DMC11 devices are supported.
|
DMC11/DMR11 DDCMP DECnet device simulation. Up to 8 DMC devices are supported.
|
||||||
|
KDP11 on PDP11 for DECnet
|
||||||
|
DUP11 on PDP11 for DECnet connectivity to talk to DMC, KDP or other DUP devices
|
||||||
DZ on Unibus systems can have up to 256 ports (default of 32), on
|
DZ on Unibus systems can have up to 256 ports (default of 32), on
|
||||||
Qbus systems 128 port limit (default of 16).
|
Qbus systems 128 port limit (default of 16).
|
||||||
DZ devices optionally support full modem control (and port speed settings
|
DZ devices optionally support full modem control (and port speed settings
|
||||||
|
@ -54,6 +56,9 @@ A remote console session will close when an EOF character is entered (i.e. ^D or
|
||||||
MicroVAX I has a SET CPU MODEL=(MicroVAX|VAXSTATION) command to change between system types
|
MicroVAX I has a SET CPU MODEL=(MicroVAX|VAXSTATION) command to change between system types
|
||||||
MicroVAX II has a SET CPU MODEL=(MicroVAX|VAXSTATION) command to change between system types
|
MicroVAX II has a SET CPU MODEL=(MicroVAX|VAXSTATION) command to change between system types
|
||||||
|
|
||||||
|
#### PDP10 Enhancements
|
||||||
|
KDP11 (from Timothe Litt) for DECnet connectivity to simulators with DMC, DUP or KDP devices
|
||||||
|
|
||||||
#### Terminal Multiplexer additions
|
#### Terminal Multiplexer additions
|
||||||
Added support for TCP connections using IPv4 and/or IPv6.
|
Added support for TCP connections using IPv4 and/or IPv6.
|
||||||
Logging - Traffic going out individual lines can be optionally logged to
|
Logging - Traffic going out individual lines can be optionally logged to
|
||||||
|
|
|
@ -52,8 +52,7 @@ extern DEVICE tq_dev;
|
||||||
extern DEVICE dz_dev;
|
extern DEVICE dz_dev;
|
||||||
extern DEVICE vh_dev;
|
extern DEVICE vh_dev;
|
||||||
extern DEVICE xu_dev, xub_dev;
|
extern DEVICE xu_dev, xub_dev;
|
||||||
extern DEVICE dmc_dev[];
|
extern DEVICE dmc_dev;
|
||||||
extern DEVICE dup_dev;
|
|
||||||
|
|
||||||
extern UNIT cpu_unit;
|
extern UNIT cpu_unit;
|
||||||
extern void WriteB (uint32 pa, int32 val);
|
extern void WriteB (uint32 pa, int32 val);
|
||||||
|
@ -85,11 +84,7 @@ DEVICE *sim_devices[] = {
|
||||||
&tq_dev,
|
&tq_dev,
|
||||||
&xu_dev,
|
&xu_dev,
|
||||||
&xub_dev,
|
&xub_dev,
|
||||||
&dmc_dev[0],
|
&dmc_dev,
|
||||||
&dmc_dev[1],
|
|
||||||
&dmc_dev[2],
|
|
||||||
&dmc_dev[3],
|
|
||||||
&dup_dev,
|
|
||||||
NULL
|
NULL
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -54,8 +54,7 @@ extern DEVICE tu_dev;
|
||||||
extern DEVICE dz_dev;
|
extern DEVICE dz_dev;
|
||||||
extern DEVICE vh_dev;
|
extern DEVICE vh_dev;
|
||||||
extern DEVICE xu_dev, xub_dev;
|
extern DEVICE xu_dev, xub_dev;
|
||||||
extern DEVICE dmc_dev[];
|
extern DEVICE dmc_dev;
|
||||||
extern DEVICE dup_dev;
|
|
||||||
|
|
||||||
extern UNIT cpu_unit;
|
extern UNIT cpu_unit;
|
||||||
extern void WriteB (uint32 pa, int32 val);
|
extern void WriteB (uint32 pa, int32 val);
|
||||||
|
@ -90,11 +89,7 @@ DEVICE *sim_devices[] = {
|
||||||
&tq_dev,
|
&tq_dev,
|
||||||
&xu_dev,
|
&xu_dev,
|
||||||
&xub_dev,
|
&xub_dev,
|
||||||
&dmc_dev[0],
|
&dmc_dev,
|
||||||
&dmc_dev[1],
|
|
||||||
&dmc_dev[2],
|
|
||||||
&dmc_dev[3],
|
|
||||||
&dup_dev,
|
|
||||||
NULL
|
NULL
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -54,8 +54,7 @@ extern DEVICE tu_dev;
|
||||||
extern DEVICE dz_dev;
|
extern DEVICE dz_dev;
|
||||||
extern DEVICE vh_dev;
|
extern DEVICE vh_dev;
|
||||||
extern DEVICE xu_dev, xub_dev;
|
extern DEVICE xu_dev, xub_dev;
|
||||||
extern DEVICE dmc_dev[];
|
extern DEVICE dmc_dev;
|
||||||
extern DEVICE dup_dev;
|
|
||||||
|
|
||||||
extern UNIT cpu_unit;
|
extern UNIT cpu_unit;
|
||||||
extern void WriteB (uint32 pa, int32 val);
|
extern void WriteB (uint32 pa, int32 val);
|
||||||
|
@ -92,11 +91,7 @@ DEVICE *sim_devices[] = {
|
||||||
&tq_dev,
|
&tq_dev,
|
||||||
&xu_dev,
|
&xu_dev,
|
||||||
&xub_dev,
|
&xub_dev,
|
||||||
&dmc_dev[0],
|
&dmc_dev,
|
||||||
&dmc_dev[1],
|
|
||||||
&dmc_dev[2],
|
|
||||||
&dmc_dev[3],
|
|
||||||
&dup_dev,
|
|
||||||
NULL
|
NULL
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -54,8 +54,7 @@ extern DEVICE tu_dev;
|
||||||
extern DEVICE dz_dev;
|
extern DEVICE dz_dev;
|
||||||
extern DEVICE vh_dev;
|
extern DEVICE vh_dev;
|
||||||
extern DEVICE xu_dev, xub_dev;
|
extern DEVICE xu_dev, xub_dev;
|
||||||
extern DEVICE dmc_dev[];
|
extern DEVICE dmc_dev;
|
||||||
extern DEVICE dup_dev;
|
|
||||||
|
|
||||||
extern UNIT cpu_unit;
|
extern UNIT cpu_unit;
|
||||||
extern void WriteB (uint32 pa, int32 val);
|
extern void WriteB (uint32 pa, int32 val);
|
||||||
|
@ -90,11 +89,7 @@ DEVICE *sim_devices[] = {
|
||||||
&tq_dev,
|
&tq_dev,
|
||||||
&xu_dev,
|
&xu_dev,
|
||||||
&xub_dev,
|
&xub_dev,
|
||||||
&dmc_dev[0],
|
&dmc_dev,
|
||||||
&dmc_dev[1],
|
|
||||||
&dmc_dev[2],
|
|
||||||
&dmc_dev[3],
|
|
||||||
&dup_dev,
|
|
||||||
NULL
|
NULL
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -239,6 +239,10 @@
|
||||||
RelativePath="..\PDP11\pdp11_cr.c"
|
RelativePath="..\PDP11\pdp11_cr.c"
|
||||||
>
|
>
|
||||||
</File>
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\PDP11\pdp11_dmc.c"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\PDP11\pdp11_dup.c"
|
RelativePath="..\PDP11\pdp11_dup.c"
|
||||||
>
|
>
|
||||||
|
@ -247,6 +251,10 @@
|
||||||
RelativePath="..\PDP11\pdp11_dz.c"
|
RelativePath="..\PDP11\pdp11_dz.c"
|
||||||
>
|
>
|
||||||
</File>
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\PDP11\pdp11_kmc.c"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\PDP11\pdp11_pt.c"
|
RelativePath="..\PDP11\pdp11_pt.c"
|
||||||
>
|
>
|
||||||
|
|
|
@ -255,6 +255,10 @@
|
||||||
RelativePath="..\PDP11\pdp11_kg.c"
|
RelativePath="..\PDP11\pdp11_kg.c"
|
||||||
>
|
>
|
||||||
</File>
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\PDP11\pdp11_kmc.c"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\PDP11\pdp11_lp.c"
|
RelativePath="..\PDP11\pdp11_lp.c"
|
||||||
>
|
>
|
||||||
|
|
|
@ -206,10 +206,6 @@
|
||||||
RelativePath="..\PDP11\pdp11_dmc.c"
|
RelativePath="..\PDP11\pdp11_dmc.c"
|
||||||
>
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
|
||||||
RelativePath="..\PDP11\pdp11_dup.c"
|
|
||||||
>
|
|
||||||
</File>
|
|
||||||
<File
|
<File
|
||||||
RelativePath="..\PDP11\pdp11_dz.c"
|
RelativePath="..\PDP11\pdp11_dz.c"
|
||||||
>
|
>
|
||||||
|
@ -388,7 +384,7 @@
|
||||||
>
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\PDP11\pdp11_dmc.h"
|
RelativePath="..\PDP11\pdp11_dup.h"
|
||||||
>
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
|
|
|
@ -206,10 +206,6 @@
|
||||||
RelativePath="..\PDP11\pdp11_dmc.c"
|
RelativePath="..\PDP11\pdp11_dmc.c"
|
||||||
>
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
|
||||||
RelativePath="..\PDP11\pdp11_dup.c"
|
|
||||||
>
|
|
||||||
</File>
|
|
||||||
<File
|
<File
|
||||||
RelativePath="..\PDP11\pdp11_dz.c"
|
RelativePath="..\PDP11\pdp11_dz.c"
|
||||||
>
|
>
|
||||||
|
@ -396,7 +392,7 @@
|
||||||
>
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\PDP11\pdp11_dmc.h"
|
RelativePath="..\PDP11\pdp11_dup.h"
|
||||||
>
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
|
|
|
@ -209,10 +209,6 @@
|
||||||
RelativePath="..\PDP11\pdp11_dmc.c"
|
RelativePath="..\PDP11\pdp11_dmc.c"
|
||||||
>
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
|
||||||
RelativePath="..\PDP11\pdp11_dup.c"
|
|
||||||
>
|
|
||||||
</File>
|
|
||||||
<File
|
<File
|
||||||
RelativePath="..\PDP11\pdp11_dz.c"
|
RelativePath="..\PDP11\pdp11_dz.c"
|
||||||
>
|
>
|
||||||
|
@ -408,7 +404,7 @@
|
||||||
>
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\PDP11\pdp11_dmc.h"
|
RelativePath="..\PDP11\pdp11_dup.h"
|
||||||
>
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
|
|
|
@ -209,10 +209,6 @@
|
||||||
RelativePath="..\PDP11\pdp11_dmc.c"
|
RelativePath="..\PDP11\pdp11_dmc.c"
|
||||||
>
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
|
||||||
RelativePath="..\PDP11\pdp11_dup.c"
|
|
||||||
>
|
|
||||||
</File>
|
|
||||||
<File
|
<File
|
||||||
RelativePath="..\PDP11\pdp11_dz.c"
|
RelativePath="..\PDP11\pdp11_dz.c"
|
||||||
>
|
>
|
||||||
|
@ -400,7 +396,7 @@
|
||||||
>
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\PDP11\pdp11_dmc.h"
|
RelativePath="..\PDP11\pdp11_dup.h"
|
||||||
>
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
|
|
6
makefile
6
makefile
|
@ -743,8 +743,8 @@ PDP11 = ${PDP11D}/pdp11_fp.c ${PDP11D}/pdp11_cpu.c ${PDP11D}/pdp11_dz.c \
|
||||||
${PDP11D}/pdp11_cr.c ${PDP11D}/pdp11_rf.c ${PDP11D}/pdp11_dl.c \
|
${PDP11D}/pdp11_cr.c ${PDP11D}/pdp11_rf.c ${PDP11D}/pdp11_dl.c \
|
||||||
${PDP11D}/pdp11_ta.c ${PDP11D}/pdp11_rc.c ${PDP11D}/pdp11_kg.c \
|
${PDP11D}/pdp11_ta.c ${PDP11D}/pdp11_rc.c ${PDP11D}/pdp11_kg.c \
|
||||||
${PDP11D}/pdp11_ke.c ${PDP11D}/pdp11_dc.c ${PDP11D}/pdp11_dmc.c \
|
${PDP11D}/pdp11_ke.c ${PDP11D}/pdp11_dc.c ${PDP11D}/pdp11_dmc.c \
|
||||||
${PDP11D}/pdp11_dup.c ${PDP11D}/pdp11_rs.c ${PDP11D}/pdp11_vt.c \
|
${PDP11D}/pdp11_kmc.c ${PDP11D}/pdp11_dup.c ${PDP11D}/pdp11_rs.c \
|
||||||
${PDP11D}/pdp11_io_lib.c $(DISPLAYL) $(DISPLAYVT)
|
${PDP11D}/pdp11_vt.c ${PDP11D}/pdp11_io_lib.c $(DISPLAYL) $(DISPLAYVT)
|
||||||
PDP11_OPT = -DVM_PDP11 -I ${PDP11D} ${NETWORK_OPT} $(DISPLAY_OPT)
|
PDP11_OPT = -DVM_PDP11 -I ${PDP11D} ${NETWORK_OPT} $(DISPLAY_OPT)
|
||||||
|
|
||||||
|
|
||||||
|
@ -851,7 +851,7 @@ PDP10 = ${PDP10D}/pdp10_fe.c ${PDP11D}/pdp11_dz.c ${PDP10D}/pdp10_cpu.c \
|
||||||
${PDP10D}/pdp10_pag.c ${PDP10D}/pdp10_rp.c ${PDP10D}/pdp10_sys.c \
|
${PDP10D}/pdp10_pag.c ${PDP10D}/pdp10_rp.c ${PDP10D}/pdp10_sys.c \
|
||||||
${PDP10D}/pdp10_tim.c ${PDP10D}/pdp10_tu.c ${PDP10D}/pdp10_xtnd.c \
|
${PDP10D}/pdp10_tim.c ${PDP10D}/pdp10_tu.c ${PDP10D}/pdp10_xtnd.c \
|
||||||
${PDP11D}/pdp11_pt.c ${PDP11D}/pdp11_ry.c ${PDP11D}/pdp11_cr.c \
|
${PDP11D}/pdp11_pt.c ${PDP11D}/pdp11_ry.c ${PDP11D}/pdp11_cr.c \
|
||||||
${PDP11D}/pdp11_dup.c
|
${PDP11D}/pdp11_dup.c ${PDP11D}/pdp11_dmc.c ${PDP11D}/pdp11_kmc.c
|
||||||
PDP10_OPT = -DVM_PDP10 -DUSE_INT64 -I ${PDP10D} -I ${PDP11D}
|
PDP10_OPT = -DVM_PDP10 -DUSE_INT64 -I ${PDP10D} -I ${PDP11D}
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue