PDP11, PDP15, UC15: Merge simh v3.10 functionality from Supnik-Current branch

This commit is contained in:
Mark Pizzolato 2018-06-04 10:43:00 -07:00
parent 1f8ffa8caf
commit 6b361a9faf
20 changed files with 1048 additions and 22 deletions

View file

@ -650,12 +650,8 @@ MTAB cpu_mod[] = {
{ MTAB_XTD|MTAB_VDV, 0, NULL, "NOAUTOCONFIG", { MTAB_XTD|MTAB_VDV, 0, NULL, "NOAUTOCONFIG",
&set_autocon, NULL }, &set_autocon, NULL },
#else #else
{ MTAB_XTD|MTAB_VDV, MOD_1104, NULL, "11/04", &cpu_set_model },
{ MTAB_XTD|MTAB_VDV, MOD_1105, NULL, "11/05", &cpu_set_model },
{ MTAB_XTD|MTAB_VDV, MOD_1120, NULL, "11/20", &cpu_set_model },
{ UNIT_MSIZE, 16384, NULL, "16K", &cpu_set_size}, { UNIT_MSIZE, 16384, NULL, "16K", &cpu_set_size},
{ UNIT_MSIZE, 24576, NULL, "24K", &cpu_set_size}, { UNIT_MSIZE, 24576, NULL, "24K", &cpu_set_size},
{ UNIT_MSIZE, 32768, NULL, "32K", &cpu_set_size},
#endif #endif
{ MTAB_XTD|MTAB_VDV|MTAB_NMO, 0, "IOSPACE", NULL, { MTAB_XTD|MTAB_VDV|MTAB_NMO, 0, "IOSPACE", NULL,
NULL, &show_iospace }, NULL, &show_iospace },

View file

@ -1,6 +1,6 @@
/* pdp11_sys.c: PDP-11 simulator interface /* pdp11_sys.c: PDP-11 simulator interface
Copyright (c) 1993-2016, Robert M Supnik Copyright (c) 1993-2018, Robert M Supnik
Permission is hereby granted, free of charge, to any person obtaining a Permission is hereby granted, free of charge, to any person obtaining a
copy of this software and associated documentation files (the "Software"), copy of this software and associated documentation files (the "Software"),
@ -23,6 +23,7 @@
used in advertising or otherwise to promote the sale, use or other dealings used in advertising or otherwise to promote the sale, use or other dealings
in this Software without prior written authorization from Robert M Supnik. in this Software without prior written authorization from Robert M Supnik.
23-May-18 RMS Changed UC15 simulator name
14-Mar-16 RMS Added UC15 support 14-Mar-16 RMS Added UC15 support
02-Sep-13 RMS Added third Massbus, RS03/RS04 02-Sep-13 RMS Added third Massbus, RS03/RS04
29-Apr-12 RMS Fixed compiler warning (Mark Pizzolato) 29-Apr-12 RMS Fixed compiler warning (Mark Pizzolato)
@ -128,7 +129,11 @@ extern int32 saved_PC;
sim_load binary loader sim_load binary loader
*/ */
#if !defined (UC15)
char sim_name[] = "PDP-11"; char sim_name[] = "PDP-11";
#else
char sim_name[] = "UC-15";
#endif
REG *sim_PC = &cpu_reg[0]; REG *sim_PC = &cpu_reg[0];

542
PDP11/pdp11_uc15.c Normal file
View file

@ -0,0 +1,542 @@
/* pdp11_uc15.c: UC15 interface simulator
Copyright (c) 2016, Robert M Supnik
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
ROBERT M SUPNIK 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 Robert M Supnik shall not be
used in advertising or otherwise to promote the sale, use or other dealings
in this Software without prior written authorization from Robert M Supnik.
uca DR11 #1
ucb DR11 #2
The DR11Cs provide control communications with the DR15C in the PDP15.
The PDP15 and UC15 use a master/slave communications protocol.
- The PDP15 initiates a request to the PDP11 by writing TCBP and
clearing TCBP acknowledge. This alerts/interrupts the PDP11.
- The PDP11 reads TCBP. This sets TCBP acknowledge, which is
not wired to interrupt on the PDP15. Note that TCBP has been
converted from a word address to a byte address by the way
the two systems are wired together.
- The PDP11 processes the request.
- The PDP11 signals completion by writing a vector into one of
four API request levels.
- The PDP15 is interrupted, and the request is considered complete.
The UC15 must "call out" to the PDP15 to signal two conditions:
- the TCB pointer has been read
- an API interrupt is requested
The DR15 must "call in" to the UC15 for two reasons:
- the TCBP has been written
- API interrupt status has changed
The DR15 and UC15 use a shared memory section and ATOMIC operations
to communicate. Shared state is maintained in shared memory, with one
side having read/write access, the other read-only. Actions are
implemented by setting signals with an atomic compare-and-swap.
The signals may be polled with non-atomic operations but must be
verified with an atomic compare-and-swap.
*/
#include "pdp11_defs.h"
#include "sim_fio.h"
#include "uc15_defs.h"
/* Constants */
/* DR11 #1 */
#define UCAC_APID (CSR_DONE)
#define UCAB_V_TCBHI 0
#define UCAB_M_TCBHI 03
#define UCAB_API2 0000100
#define UCAB_API0 0000200
#define UCAB_V_LOCAL 8
#define UCAB_M_LOCAL 07
#define UCAB_API3 0040000
#define UCAB_API1 0100000
/* DR11 #2 */
#define UCBC_NTCB (CSR_DONE)
/* Declarations */
extern int32 int_req[IPL_HLVL];
extern UNIT cpu_unit;
extern uint16 *M;
int32 uca_csr = 0; /* DR11C #1 CSR */
int32 uca_buf = 0; /* DR11C #1 input buffer */
int32 ucb_csr = 0;
int32 ucb_buf = 0;
int32 uc15_poll = 3; /* polling interval */
SHMEM *uc15_shmem = NULL; /* shared state identifier */
int32 *uc15_shstate = NULL; /* shared state base */
SHMEM *pdp15_shmem = NULL; /* PDP15 mem identifier */
int32 *pdp15_mem = NULL;
uint32 uc15_memsize = 0;
t_stat uca_rd (int32 *data, int32 PA, int32 access);
t_stat uca_wr (int32 data, int32 PA, int32 access);
t_stat ucb_rd (int32 *data, int32 PA, int32 access);
t_stat ucb_wr (int32 data, int32 PA, int32 access);
t_stat uc15_reset (DEVICE *dptr);
t_stat uc15_svc (UNIT *uptr);
t_stat uc15_ex (t_value *vptr, t_addr addr, UNIT *uptr, int32 sw);
t_stat uc15_dep (t_value val, t_addr addr, UNIT *uptr, int32 sw);
t_stat uc15_attach (UNIT *uptr, CONST char *cptr);
t_stat uc15_detach (UNIT *uptr);
void uc15_set_memsize (void);
int32 uc15_get_uca_buf (void);
t_stat uc15_api_req (int32 lvl, int32 vec);
/* UC15 data structures
uca_dev, ucb_dev UC15 device descriptor
uca_unit, ucb_unit UC15 unit descriptor
uca_reg, ucb reg UC15 register list
The two DR11Cs must be separate devices because they interrupt at
different IPLs and must have different DIBs!
*/
DIB uca_dib = {
IOBA_UCA, IOLN_UCA, &uca_rd, &uca_wr,
1, IVCL (UCA), VEC_UCA, { NULL }
};
UNIT uca_unit = { UDATA (&uc15_svc, 0, UNIT_ATTABLE) };
REG uca_reg[] = {
{ ORDATA (CSR, uca_csr, 16) },
{ ORDATA (BUF, uca_buf, 16) },
{ FLDATA (APID, uca_csr, CSR_V_DONE) },
{ FLDATA (IE, uca_csr, CSR_V_IE) },
{ DRDATA (POLL, uc15_poll, 10), REG_NZ },
{ DRDATA (UCMEMSIZE, uc15_memsize, 18), REG_HRO },
{ NULL }
};
MTAB uc15_mod[] = {
{ MTAB_XTD|MTAB_VDV, 006, "ADDRESS", "ADDRESS",
NULL, &show_addr, NULL },
{ MTAB_XTD|MTAB_VDV, 0, "VECTOR", "VECTOR",
NULL, &show_vec, NULL },
{ 0 }
};
DEVICE uca_dev = {
"UCA", &uca_unit, uca_reg, uc15_mod,
1, 8, 10, 1, 8, 32,
&uc15_ex, &uc15_dep, &uc15_reset,
NULL, &uc15_attach, &uc15_detach,
&uca_dib, DEV_DISABLE | DEV_DEBUG
};
DIB ucb_dib = {
IOBA_UCB, IOLN_UCB, &ucb_rd, &ucb_wr,
1, IVCL (UCB), VEC_UCB, { NULL }
};
UNIT ucb_unit = { UDATA (NULL, 0, 0) };
REG ucb_reg[] = {
{ ORDATA (CSR, ucb_csr, 16) },
{ ORDATA (BUF, ucb_buf, 16) },
{ FLDATA (NTCB, ucb_csr, CSR_V_DONE) },
{ FLDATA (IE, ucb_csr, CSR_V_IE) },
{ NULL }
};
DEVICE ucb_dev = {
"UCB", &ucb_unit, ucb_reg, uc15_mod,
1, 8, 18, 1, 8, 18,
NULL, NULL, NULL,
NULL, NULL, NULL,
&ucb_dib, DEV_DISABLE
};
/* IO routines */
/* DR11 #1 */
t_stat uca_rd (int32 *data, int32 PA, int32 access)
{
switch ((PA >> 1) & 03) { /* case on PA<2:1> */
case 0: /* CSR */
*data = uca_csr;
return SCPE_OK;
case 1: /* output buffers */
return SCPE_OK;
case 2: /* input buffer */
*data = uc15_get_uca_buf (); /* assemble buffer */
return SCPE_OK;
}
return SCPE_NXM;
}
t_stat uca_wr (int32 data, int32 PA, int32 access)
{
switch ((PA >> 1) & 03) { /* case on PA<2:1> */
case 0: /* CSR */
if (PA & 1)
return SCPE_OK;
if ((data & CSR_IE) == 0)
CLR_INT (UCA);
else if ((uca_csr & (UCAC_APID + CSR_IE)) == UCAC_APID)
SET_INT (UCA);
uca_csr = (uca_csr & ~CSR_IE) | (data & CSR_IE);
return SCPE_OK;
case 1: /* output buffer */
if (PA & 1) /* odd byte? API 1 */
uc15_api_req (1, data & 0377);
else {
if (access == WRITE) /* full word? API 1 */
uc15_api_req (1, (data >> 8) & 0377);
uc15_api_req (0, data & 0377); /* API 0 */
}
return SCPE_OK;
case 2:
return SCPE_OK;
}
return SCPE_NXM;
}
t_stat ucb_rd (int32 *data, int32 PA, int32 access)
{
switch ((PA >> 1) & 03) { /* case on PA<2:1> */
case 0: /* CSR */
*data = ucb_csr;
return SCPE_OK;
case 1: /* output buffers */
return SCPE_OK;
case 2: /* input buffer */
*data = ucb_buf = (UC15_SHARED_RD (UC15_TCBP) << 1) & 0177777;
ucb_csr &= ~UCBC_NTCB; /* clear TCBP rdy */
CLR_INT (UCB); /* clear int */
UC15_ATOMIC_CAS (UC15_TCBP_RD, 0, 1); /* send ACK */
if (DEBUG_PRS (uca_dev)) {
uint32 apiv, apil, fnc, tsk, pa;
t_bool spl;
pa = ucb_buf + MEMSIZE;
apiv = RdMemB (pa);
apil = RdMemB (pa + 1);
fnc = RdMemB (pa + 2);
spl = (RdMemB (pa + 3) & 0200) != 0;
tsk = RdMemB (pa + 3) & 0177;
fprintf (sim_deb, ">> UC15: TCB rcvd, API = %o/%d, fnc = %o, %s task = %o, eventvar = %o\n",
apiv, apil, fnc, spl? "Spooled": "Unspooled", tsk, RdMemW (pa + 4));
fprintf (sim_deb, "Additional parameters = %o %o %o %o %o\n",
RdMemW (pa + 6), RdMemW (pa + 8), RdMemW (pa + 10), RdMemW (pa + 12), RdMemW (pa + 14));
}
return SCPE_OK;
}
return SCPE_NXM;
}
t_stat ucb_wr (int32 data, int32 PA, int32 access)
{
switch ((PA >> 1) & 03) { /* case on PA<2:1> */
case 0: /* CSR */
if (PA & 1)
return SCPE_OK;
if ((data & CSR_IE) == 0) /* IE = 0? */
CLR_INT (UCB);
else if ((ucb_csr & (UCBC_NTCB + CSR_IE)) == UCBC_NTCB)
SET_INT (UCB);
ucb_csr = (ucb_csr & ~CSR_IE) | (data & CSR_IE);
return SCPE_OK;
case 1: /* output buffer */
if (PA & 1) /* odd byte? API 3*/
uc15_api_req (3, data & 0377);
else {
if (access == WRITE) /* full word? API 3 */
uc15_api_req (3, (data >> 8) & 0377);
uc15_api_req (2, data & 0377); /* API 2 */
}
return SCPE_OK;
case 2:
return SCPE_OK;
}
return SCPE_NXM;
}
/* Request PDP15 to take an API interrupt */
t_stat uc15_api_req (int32 lvl, int32 vec)
{
UC15_SHARED_WR (UC15_API_VEC + (lvl * UC15_API_VEC_MUL), vec);
UC15_ATOMIC_CAS (UC15_API_REQ + (lvl * UC15_API_VEC_MUL), 0, 1);
if (DEBUG_PRS (uca_dev))
fprintf (sim_deb, ">>UC15: API request sent, API = %o/%d\n",
vec, lvl);
return SCPE_OK;
}
/* Routine to poll for state changes from PDP15 */
t_stat uc15_svc (UNIT *uptr)
{
uint32 t;
t = UC15_SHARED_RD (UC15_TCBP_WR); /* TCBP written? */
if ((t != 0) && UC15_ATOMIC_CAS (UC15_TCBP_WR, 1, 0)) { /* for real? */
ucb_csr |= UCBC_NTCB; /* set new TCB flag */
if (ucb_csr & CSR_IE)
SET_INT (UCB);
uc15_set_memsize (); /* update mem size */
}
t = UC15_SHARED_RD (UC15_API_UPD); /* API update? */
if ((t != 0) && UC15_ATOMIC_CAS (UC15_API_UPD, 1, 0)) { /* for real? */
uc15_get_uca_buf (); /* update UCA buf */
}
sim_activate (uptr, uc15_poll); /* next poll */
return SCPE_OK;
}
/* Routine to assemble/update uca_buf
Note that the PDP-15 and PDP-11 have opposite interpretations of
API requests. On the PDP-15, a "1" indicates an active request.
On the PDP-11, a "1" indicates request done (API inactive).
*/
int32 uc15_get_uca_buf (void)
{
int32 i, t;
static int32 ucab_api[4] =
{ UCAB_API0, UCAB_API1, UCAB_API2, UCAB_API3 };
t = UC15_SHARED_RD (UC15_TCBP); /* get TCB ptr */
uca_buf = (t >> 15) & UCAB_M_TCBHI; /* PDP15 bits<1:2> */
t = cpu_unit.capac >> 13; /* local mem in 4KW */
uca_buf |= ((t & UCAB_M_LOCAL) << UCAB_V_LOCAL);
t = UC15_SHARED_RD (UC15_API_SUMM); /* get API summary */
for (i = 0; i < 4; i++) { /* check 0..3 */
if (((t >> i) & 1) == 0) /* level inactive? */
uca_buf |= ucab_api[i]; /* set status bit */
}
if ((t == 0) && ((uca_csr & UCAC_APID) == 0)) { /* API req now 0? */
uca_csr |= UCAC_APID; /* set flag */
if ((uca_csr & CSR_IE) != 0) /* if ie, req int */
SET_INT (UCA);
}
return uca_buf;
}
/* Routine to set overall memory limit for UC15 checking */
void uc15_set_memsize (void)
{
uint32 t = UC15_SHARED_RD (UC15_PDP15MEM); /* get PDP15 memory size */
if (t == 0) /* PDP15 not running? */
t = PDP15_MAXMEM * 2; /* max mem in bytes */
uc15_memsize = t + MEMSIZE; /* shared + local mem */
if (uc15_memsize > (UNIMEMSIZE - IOPAGESIZE)) /* more than 18b? */
uc15_memsize = UNIMEMSIZE - IOPAGESIZE; /* limit */
return;
}
/* Reset routine
Aside from performing a device reset, this routine sets up shared
UC15 state and shared PDP15 main memory. It also reads the size
of PDP15 main memory (in PDP11 bytes) from the shared state region.
*/
t_stat uc15_reset (DEVICE *dptr)
{
t_stat r;
void *basead;
uca_csr = 0;
uca_buf = 0;
ucb_csr = 0;
ucb_buf = 0;
CLR_INT (UCA);
CLR_INT (UCB);
if (uc15_shmem == NULL) { /* allocate shared state */
r = sim_shmem_open ("UC15SharedState", UC15_STATE_SIZE, &uc15_shmem, &basead);
if (r != SCPE_OK)
return r;
uc15_shstate = (int32 *) basead;
}
if (pdp15_shmem == NULL) { /* allocate shared memory */
r = sim_shmem_open ("PDP15MainMemory", PDP15_MAXMEM * sizeof (int32), &pdp15_shmem, &basead);
if (r != SCPE_OK)
return r;
pdp15_mem = (int32 *) basead;
}
uc15_set_memsize ();
sim_activate (dptr->units, uc15_poll); /* start polling */
return SCPE_OK;
}
/* Shared state ex/mod routines for debug */
t_stat uc15_ex (t_value *vptr, t_addr addr, UNIT *uptr, int32 sw)
{
if (addr >= UC15_STATE_SIZE)
return SCPE_NXM;
if (vptr != NULL)
*vptr = UC15_SHARED_RD ((int32) addr);
return SCPE_OK;
}
t_stat uc15_dep (t_value val, t_addr addr, UNIT *uptr, int32 sw)
{
if (addr >= UC15_STATE_SIZE)
return SCPE_NXM;
UC15_SHARED_WR ((int32) addr, (int32) val);
return SCPE_OK;
}
/* Fake attach routine to kill attach attempts */
t_stat uc15_attach (UNIT *uptr, CONST char *cptr)
{
return SCPE_NOFNC;
}
/* Shutdown detach routine to release shared memories */
t_stat uc15_detach (UNIT *uptr)
{
if ((sim_switches & SIM_SW_SHUT) == 0) /* only if shutdown */
return SCPE_NOFNC;
sim_shmem_close (uc15_shmem); /* release shared state */
sim_shmem_close (pdp15_shmem); /* release shared mem */
return SCPE_OK;
}
/* Physical read/write memory routines
Used by CPU and IO devices
Physical address is known to be legal
We can use MEMSIZE rather than cpu_memsize because configurations
were limited to 16KW of local memory
8b and 16b writes clear the upper 2b of PDP-15 memory
*/
int32 uc15_RdMemW (int32 pa)
{
if (((uint32) pa) < MEMSIZE)
return M[pa >> 1];
else {
pa = pa - MEMSIZE;
return (pdp15_mem[pa >> 1] & DMASK);
}
}
int32 uc15_RdMemB (int32 pa)
{
if (((uint32) pa) < MEMSIZE)
return ((pa & 1)? (M[pa >> 1] >> 8): (M[pa >> 1] & 0377));
else {
pa = pa - MEMSIZE;
return ((pa & 1)? (pdp15_mem[pa >> 1] >> 8): (pdp15_mem[pa >> 1] & 0377));
}
}
void uc15_WrMemW (int32 pa, int32 d)
{
if (((uint32) pa) < MEMSIZE)
M[pa >> 1] = d;
else {
pa = pa - MEMSIZE;
pdp15_mem[pa >> 1] = d & DMASK;
}
return;
}
void uc15_WrMemB (int32 pa, int32 d)
{
if (((uint32) pa) < MEMSIZE)
M[pa >> 1] = (pa & 1)?
((M[pa >> 1] & 0377) | ((d & 0377) << 8)): \
((M[pa >> 1] & ~0377) | (d & 0377));
else {
pa = pa - MEMSIZE;
pdp15_mem[pa >> 1] = (pa & 1)?
((pdp15_mem[pa >> 1] & 0377) | ((d & 0377) << 8)): \
((pdp15_mem[pa >> 1] & ~0377) | (d & 0377));
}
return;
}
/* 18b DMA routines - physical only */
int32 Map_Read18 (uint32 ba, int32 bc, uint32 *buf)
{
uint32 alim, lim;
ba = (ba & UNIMASK) & ~01; /* trim, align addr */
lim = ba + (bc & ~01);
if (lim < uc15_memsize) /* end ok? */
alim = lim;
else if (ba < uc15_memsize) /* no, strt ok? */
alim = uc15_memsize;
else return bc; /* no, err */
for ( ; ba < alim; ba = ba + 2) { /* by 18b words */
if (ba < MEMSIZE)
*buf++ = M[ba >> 1];
else *buf++ = pdp15_mem[(ba - MEMSIZE) >> 1] & 0777777;
}
return (lim - alim);
}
int32 Map_Write18 (uint32 ba, int32 bc, uint32 *buf)
{
uint32 alim, lim;
ba = (ba & UNIMASK) & ~01; /* trim, align addr */
lim = ba + (bc & ~01);
if (lim < uc15_memsize) /* end ok? */
alim = lim;
else if (ba < uc15_memsize) /* no, strt ok? */
alim = uc15_memsize;
else return bc; /* no, err */
for ( ; ba < alim; ba = ba + 2) { /* by 18 bit words */
if (ba < MEMSIZE)
M[ba >> 1] = *buf++ & DMASK;
else pdp15_mem[(ba - MEMSIZE) >> 1] = *buf++ & 0777777;
}
return (lim - alim);
}

View file

@ -129,7 +129,7 @@ int32 rf72 (int32 dev, int32 pulse, int32 dat);
int32 rf_iors (void); int32 rf_iors (void);
t_stat rf_svc (UNIT *uptr); t_stat rf_svc (UNIT *uptr);
t_stat rf_reset (DEVICE *dptr); t_stat rf_reset (DEVICE *dptr);
int32 rf_updsta (int32 news); int32 rf_updsta (int32 newst);
t_stat rf_attach (UNIT *uptr, CONST char *cptr); t_stat rf_attach (UNIT *uptr, CONST char *cptr);
t_stat rf_set_size (UNIT *uptr, int32 val, CONST char *cptr, void *desc); t_stat rf_set_size (UNIT *uptr, int32 val, CONST char *cptr, void *desc);
@ -315,9 +315,9 @@ return SCPE_OK;
/* Update status */ /* Update status */
int32 rf_updsta (int32 news) int32 rf_updsta (int32 newst)
{ {
rf_sta = (rf_sta | news) & ~(RFS_ERR | RFS_CLR); rf_sta = (rf_sta | newst) & ~(RFS_ERR | RFS_CLR);
if (rf_sta & RFS_EFLGS) if (rf_sta & RFS_EFLGS)
rf_sta = rf_sta | RFS_ERR; rf_sta = rf_sta | RFS_ERR;
if ((rf_sta & (RFS_ERR | RFS_DON)) && (rf_sta & RFS_IE)) if ((rf_sta & (RFS_ERR | RFS_DON)) && (rf_sta & RFS_IE))

View file

@ -99,6 +99,9 @@ extern DEVICE mt_dev;
extern DEVICE tti1_dev, tto1_dev; extern DEVICE tti1_dev, tto1_dev;
extern UNIT tti1_unit, tto1_unit; extern UNIT tti1_unit, tto1_unit;
#endif #endif
#if defined (GRAPHICS2)
extern DEVICE g2out_dev, g2in_dev;
#endif
#if defined (UC15) #if defined (UC15)
extern DEVICE dr15_dev; extern DEVICE dr15_dev;
#endif #endif

59
PDP18B/uc15_defs.h Normal file
View file

@ -0,0 +1,59 @@
/* uc15_defs.h: PDP15/UC15 shared state definitions
Copyright (c) 2016, Robert M Supnik
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
ROBERT M SUPNIK 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 Robert M Supnik shall not be
used in advertising or otherwise to promote the sale, use or other dealings
in this Software without prior written authorization from Robert M Supnik.
*/
#ifndef UC15_DEFS_H_
#define UC15_DEFS_H_ 0
#define UC15_STATE_SIZE 1024 /* size (int32's) */
/* The shared state region is divided into four quadrants
000-255 PDP-15 read/write, PDP-11 read only, data
255-511 PDP-11 read/write, PDP-15 read only, data
768-1023 Event signals (locks), read/write
*/
#define PDP15_MAXMEM 0400000 /* PDP15 max mem, words */
#define UC15_PDP15MEM 0040 /* PDP15 mem size, bytes */
#define UC15_TCBP 0100 /* TCB pointer */
#define UC15_API_SUMM 0140 /* API summary */
#define UC15_API_VEC 0600 /* vectors[4] */
#define UC15_API_VEC_MUL 010 /* vector spread factor */
#define UC15_TCBP_WR 01000 /* TCBP write signal */
#define UC15_TCBP_RD 01040 /* TCBP read signal */
#define UC15_API_UPD 01100 /* API summ update */
#define UC15_API_REQ 01200 /* +1 for API req[4] */
#define UC15_SHARED_RD(p) (*(uc15_shstate + (p)))
#define UC15_SHARED_WR(p,d) *(uc15_shstate + (p)) = (d)
#define UC15_ATOMIC_CAS(p,o,n) sim_shmem_atomic_cas ((uc15_shstate + (p)), o, n)
#define UC15_ATOMIC_ADD(p,a) sim_shmem_atomic_add ((uc15_shstate + (p)), (a))
#endif

View file

@ -73,7 +73,7 @@
#### Updated HP2100 simulator from Dave Bryan. #### Updated HP2100 simulator from Dave Bryan.
#### Beta Sigma 5, 6 & 7 simulator from Bob Supnik #### Sigma 5, 6 & 7 simulator from Bob Supnik
#### Beta SAGE-II and PDQ-3 simulators from Holger Veit #### Beta SAGE-II and PDQ-3 simulators from Holger Veit
@ -540,7 +540,7 @@ package must be available while building your simulator. The simh-vms-pcap.zip
file can be downloaded from https://github.com/simh/simh/archive/vms-pcap.zip file can be downloaded from https://github.com/simh/simh/archive/vms-pcap.zip
This link will return a file called simh-vms-pcap.zip which should be unpacked as follows: This link will return a file called simh-vms-pcap.zip which should be unpacked as follows:
$ unzip -aa simh-vms-pcap.zip $ unzip -a simh-vms-pcap.zip
$ rename [.simh-vms-pcap]pcap-vms.dir [] $ rename [.simh-vms-pcap]pcap-vms.dir []
The PCAP-VMS components are presumed (by the descript.mms file) to be The PCAP-VMS components are presumed (by the descript.mms file) to be

View file

@ -35,6 +35,9 @@
<Tool <Tool
Name="VCXMLDataGeneratorTool" Name="VCXMLDataGeneratorTool"
/> />
<Tool
Name="VCWebServiceProxyGeneratorTool"
/>
<Tool <Tool
Name="VCMIDLTool" Name="VCMIDLTool"
/> />
@ -116,6 +119,9 @@
<Tool <Tool
Name="VCXMLDataGeneratorTool" Name="VCXMLDataGeneratorTool"
/> />
<Tool
Name="VCWebServiceProxyGeneratorTool"
/>
<Tool <Tool
Name="VCMIDLTool" Name="VCMIDLTool"
/> />

View file

@ -35,6 +35,9 @@
<Tool <Tool
Name="VCXMLDataGeneratorTool" Name="VCXMLDataGeneratorTool"
/> />
<Tool
Name="VCWebServiceProxyGeneratorTool"
/>
<Tool <Tool
Name="VCMIDLTool" Name="VCMIDLTool"
/> />
@ -116,6 +119,9 @@
<Tool <Tool
Name="VCXMLDataGeneratorTool" Name="VCXMLDataGeneratorTool"
/> />
<Tool
Name="VCWebServiceProxyGeneratorTool"
/>
<Tool <Tool
Name="VCMIDLTool" Name="VCMIDLTool"
/> />

View file

@ -300,6 +300,11 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "I650", "I650.vcproj", "{95B
{D40F3AF1-EEE7-4432-9807-2AD287B490F8} = {D40F3AF1-EEE7-4432-9807-2AD287B490F8} {D40F3AF1-EEE7-4432-9807-2AD287B490F8} = {D40F3AF1-EEE7-4432-9807-2AD287B490F8}
EndProjectSection EndProjectSection
EndProject EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "UC15", "UC15.vcproj", "{B5E9D32E-53F9-4C9B-B037-5A2D34E370CF}"
ProjectSection(ProjectDependencies) = postProject
{D40F3AF1-EEE7-4432-9807-2AD287B490F8} = {D40F3AF1-EEE7-4432-9807-2AD287B490F8}
EndProjectSection
EndProject
Global Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Win32 = Debug|Win32 Debug|Win32 = Debug|Win32
@ -550,6 +555,10 @@ Global
{95B64699-4B93-4BFE-9024-0A2302D9B71A}.Debug|Win32.Build.0 = Debug|Win32 {95B64699-4B93-4BFE-9024-0A2302D9B71A}.Debug|Win32.Build.0 = Debug|Win32
{95B64699-4B93-4BFE-9024-0A2302D9B71A}.Release|Win32.ActiveCfg = Release|Win32 {95B64699-4B93-4BFE-9024-0A2302D9B71A}.Release|Win32.ActiveCfg = Release|Win32
{95B64699-4B93-4BFE-9024-0A2302D9B71A}.Release|Win32.Build.0 = Release|Win32 {95B64699-4B93-4BFE-9024-0A2302D9B71A}.Release|Win32.Build.0 = Release|Win32
{B5E9D32E-53F9-4C9B-B037-5A2D34E370CF}.Debug|Win32.ActiveCfg = Debug|Win32
{B5E9D32E-53F9-4C9B-B037-5A2D34E370CF}.Debug|Win32.Build.0 = Debug|Win32
{B5E9D32E-53F9-4C9B-B037-5A2D34E370CF}.Release|Win32.ActiveCfg = Release|Win32
{B5E9D32E-53F9-4C9B-B037-5A2D34E370CF}.Release|Win32.Build.0 = Release|Win32
EndGlobalSection EndGlobalSection
GlobalSection(SolutionProperties) = preSolution GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE HideSolutionNode = FALSE

View file

@ -0,0 +1,370 @@
<?xml version="1.0" encoding="Windows-1252"?>
<VisualStudioProject
ProjectType="Visual C++"
Version="9.00"
Name="UC15"
ProjectGUID="{B5E9D32E-53F9-4C9B-B037-5A2D34E370CF}"
RootNamespace="UC15"
Keyword="Win32Proj"
TargetFrameworkVersion="131072"
>
<Platforms>
<Platform
Name="Win32"
/>
</Platforms>
<ToolFiles>
</ToolFiles>
<Configurations>
<Configuration
Name="Debug|Win32"
OutputDirectory="..\BIN\NT\$(PlatformName)-$(ConfigurationName)"
IntermediateDirectory="..\BIN\NT\Project\simh\UC15\$(PlatformName)-$(ConfigurationName)"
ConfigurationType="1"
InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
CharacterSet="0"
>
<Tool
Name="VCPreBuildEventTool"
Description="Check for required build dependencies &amp; git commit id"
CommandLine="Pre-Build-Event.cmd LIBPCRE"
/>
<Tool
Name="VCCustomBuildTool"
/>
<Tool
Name="VCXMLDataGeneratorTool"
/>
<Tool
Name="VCMIDLTool"
/>
<Tool
Name="VCCLCompilerTool"
Optimization="0"
AdditionalIncludeDirectories="./;../;../PDP11/;../PDP18B/;../../windows-build/PCRE/include/"
PreprocessorDefinitions="VM_PDP11;UC15;_CRT_NONSTDC_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS;SIM_NEED_GIT_COMMIT_ID;HAVE_PCREPOSIX_H;PCRE_STATIC"
KeepComments="false"
MinimalRebuild="true"
BasicRuntimeChecks="0"
RuntimeLibrary="1"
UsePrecompiledHeader="0"
WarningLevel="3"
DebugInformationFormat="3"
CompileAs="1"
ShowIncludes="false"
/>
<Tool
Name="VCManagedResourceCompilerTool"
/>
<Tool
Name="VCResourceCompilerTool"
/>
<Tool
Name="VCPreLinkEventTool"
/>
<Tool
Name="VCLinkerTool"
AdditionalDependencies="wsock32.lib winmm.lib pcrestaticd.lib pcreposixstaticd.lib"
OutputFile="$(OutDir)\UC15.exe"
LinkIncremental="2"
AdditionalLibraryDirectories="../../windows-build/PCRE/lib/"
GenerateDebugInformation="true"
SubSystem="1"
RandomizedBaseAddress="1"
DataExecutionPrevention="0"
TargetMachine="1"
/>
<Tool
Name="VCALinkTool"
/>
<Tool
Name="VCManifestTool"
/>
<Tool
Name="VCXDCMakeTool"
/>
<Tool
Name="VCBscMakeTool"
/>
<Tool
Name="VCFxCopTool"
/>
<Tool
Name="VCAppVerifierTool"
/>
<Tool
Name="VCPostBuildEventTool"
/>
</Configuration>
<Configuration
Name="Release|Win32"
OutputDirectory="..\BIN\NT\$(PlatformName)-$(ConfigurationName)"
IntermediateDirectory="..\BIN\NT\Project\simh\UC15\$(PlatformName)-$(ConfigurationName)"
ConfigurationType="1"
InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
CharacterSet="0"
>
<Tool
Name="VCPreBuildEventTool"
Description="Check for required build dependencies &amp; git commit id"
CommandLine="Pre-Build-Event.cmd LIBPCRE"
/>
<Tool
Name="VCCustomBuildTool"
/>
<Tool
Name="VCXMLDataGeneratorTool"
/>
<Tool
Name="VCMIDLTool"
/>
<Tool
Name="VCCLCompilerTool"
Optimization="2"
InlineFunctionExpansion="1"
OmitFramePointers="true"
AdditionalIncludeDirectories="./;../;../PDP11/;../PDP18B/;../../windows-build/PCRE/include/"
PreprocessorDefinitions="VM_PDP11;UC15;_CRT_NONSTDC_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS;SIM_NEED_GIT_COMMIT_ID;HAVE_PCREPOSIX_H;PCRE_STATIC"
StringPooling="true"
RuntimeLibrary="0"
EnableFunctionLevelLinking="true"
UsePrecompiledHeader="0"
WarningLevel="3"
DebugInformationFormat="3"
/>
<Tool
Name="VCManagedResourceCompilerTool"
/>
<Tool
Name="VCResourceCompilerTool"
/>
<Tool
Name="VCPreLinkEventTool"
/>
<Tool
Name="VCLinkerTool"
AdditionalDependencies="wsock32.lib winmm.lib pcrestatic.lib pcreposixstatic.lib"
OutputFile="$(OutDir)\UC15.exe"
LinkIncremental="1"
AdditionalLibraryDirectories="../../windows-build/PCRE/lib/"
GenerateDebugInformation="false"
SubSystem="1"
OptimizeReferences="2"
EnableCOMDATFolding="2"
RandomizedBaseAddress="1"
DataExecutionPrevention="0"
TargetMachine="1"
/>
<Tool
Name="VCALinkTool"
/>
<Tool
Name="VCManifestTool"
/>
<Tool
Name="VCXDCMakeTool"
/>
<Tool
Name="VCBscMakeTool"
/>
<Tool
Name="VCFxCopTool"
/>
<Tool
Name="VCAppVerifierTool"
/>
<Tool
Name="VCPostBuildEventTool"
/>
</Configuration>
</Configurations>
<References>
</References>
<Files>
<Filter
Name="Source Files"
Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm"
>
<File
RelativePath="..\PDP11\pdp11_cis.c"
>
</File>
<File
RelativePath="..\PDP11\pdp11_cpu.c"
>
</File>
<File
RelativePath="..\PDP11\pdp11_cpumod.c"
>
</File>
<File
RelativePath="..\PDP11\pdp11_cr.c"
>
</File>
<File
RelativePath="..\PDP11\pdp11_fp.c"
>
</File>
<File
RelativePath="..\PDP11\pdp11_io.c"
>
</File>
<File
RelativePath="..\PDP11\pdp11_io_lib.c"
>
</File>
<File
RelativePath="..\PDP11\pdp11_lp.c"
>
</File>
<File
RelativePath="..\PDP11\pdp11_rh.c"
>
</File>
<File
RelativePath="..\PDP11\pdp11_rk.c"
>
</File>
<File
RelativePath="..\PDP11\pdp11_stddev.c"
>
</File>
<File
RelativePath="..\PDP11\pdp11_sys.c"
>
</File>
<File
RelativePath="..\PDP11\pdp11_uc15.c"
>
</File>
<File
RelativePath="..\scp.c"
>
</File>
<File
RelativePath="..\sim_console.c"
>
</File>
<File
RelativePath="..\sim_disk.c"
>
</File>
<File
RelativePath="..\sim_ether.c"
>
</File>
<File
RelativePath="..\sim_fio.c"
>
</File>
<File
RelativePath="..\sim_serial.c"
>
</File>
<File
RelativePath="..\sim_sock.c"
>
</File>
<File
RelativePath="..\sim_tape.c"
>
</File>
<File
RelativePath="..\sim_timer.c"
>
</File>
<File
RelativePath="..\sim_tmxr.c"
>
</File>
<File
RelativePath="..\sim_video.c"
>
</File>
</Filter>
<Filter
Name="Header Files"
Filter="h;hpp;hxx;hm;inl;inc"
>
<File
RelativePath="..\PDP11\pdp11_cpumod.h"
>
</File>
<File
RelativePath="..\PDP11\pdp11_cr_dat.h"
>
</File>
<File
RelativePath="..\PDP11\pdp11_defs.h"
>
</File>
<File
RelativePath="..\PDP11\pdp11_io_lib.h"
>
</File>
<File
RelativePath="..\scp.h"
>
</File>
<File
RelativePath="..\sim_console.h"
>
</File>
<File
RelativePath="..\sim_defs.h"
>
</File>
<File
RelativePath="..\sim_disk.h"
>
</File>
<File
RelativePath="..\sim_ether.h"
>
</File>
<File
RelativePath="..\sim_fio.h"
>
</File>
<File
RelativePath="..\sim_rev.h"
>
</File>
<File
RelativePath="..\sim_serial.h"
>
</File>
<File
RelativePath="..\sim_shmem.h"
>
</File>
<File
RelativePath="..\sim_sock.h"
>
</File>
<File
RelativePath="..\sim_tape.h"
>
</File>
<File
RelativePath="..\sim_timer.h"
>
</File>
<File
RelativePath="..\sim_tmxr.h"
>
</File>
<File
RelativePath="..\sim_video.h"
>
</File>
</Filter>
<Filter
Name="Resource Files"
Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
>
</Filter>
</Files>
<Globals>
</Globals>
</VisualStudioProject>

View file

@ -35,6 +35,9 @@
<Tool <Tool
Name="VCXMLDataGeneratorTool" Name="VCXMLDataGeneratorTool"
/> />
<Tool
Name="VCWebServiceProxyGeneratorTool"
/>
<Tool <Tool
Name="VCMIDLTool" Name="VCMIDLTool"
/> />
@ -119,6 +122,9 @@
<Tool <Tool
Name="VCXMLDataGeneratorTool" Name="VCXMLDataGeneratorTool"
/> />
<Tool
Name="VCWebServiceProxyGeneratorTool"
/>
<Tool <Tool
Name="VCMIDLTool" Name="VCMIDLTool"
/> />

View file

@ -275,11 +275,11 @@ PCAP_SIMH_INC = /INCL=($(PCAP_DIR))
@ 'MISS_SAY' "*** Error *** Attempting a Network Build but the VMS-PCAP components are not" @ 'MISS_SAY' "*** Error *** Attempting a Network Build but the VMS-PCAP components are not"
@ 'MISS_SAY' "*** Error *** available" @ 'MISS_SAY' "*** Error *** available"
@ 'MISS_SAY' "*** Error *** " @ 'MISS_SAY' "*** Error *** "
@ 'MISS_SAY' "*** Error *** The vms-pcap.zip file can be downloaded from:" @ 'MISS_SAY' "*** Error *** The simh-vms-pcap.zip file can be downloaded from:"
@ 'MISS_SAY' "*** Error *** " @ 'MISS_SAY' "*** Error *** "
@ 'MISS_SAY' "*** Error *** https://github.com/simh/simh/archive/vms-pcap.zip" @ 'MISS_SAY' "*** Error *** https://github.com/simh/simh/archive/vms-pcap.zip"
@ 'MISS_SAY' "*** Error *** " @ 'MISS_SAY' "*** Error *** "
@ 'MISS_SAY' "*** Error *** Be sure to ""unzip -aa simh-vms-pcap.zip"" to properly set the file attributes" @ 'MISS_SAY' "*** Error *** Be sure to ""unzip -a simh-vms-pcap.zip"" to properly set the file attributes"
@ 'MISS_SAY' "*** Error *** " @ 'MISS_SAY' "*** Error *** "
@ 'MISS_SAY' "*** Error *** The PCAP-VMS components are presumed (by this procedure) to be" @ 'MISS_SAY' "*** Error *** The PCAP-VMS components are presumed (by this procedure) to be"
@ 'MISS_SAY' "*** Error *** located in a directory at the same level as the directory" @ 'MISS_SAY' "*** Error *** located in a directory at the same level as the directory"
@ -562,7 +562,7 @@ PDP18B_SOURCE = $(PDP18B_DIR)PDP18B_DT.C,$(PDP18B_DIR)PDP18B_DRM.C,\
$(PDP18B_DIR)PDP18B_RP.C,$(PDP18B_DIR)PDP18B_STDDEV.C,\ $(PDP18B_DIR)PDP18B_RP.C,$(PDP18B_DIR)PDP18B_STDDEV.C,\
$(PDP18B_DIR)PDP18B_SYS.C,$(PDP18B_DIR)PDP18B_TT1.C,\ $(PDP18B_DIR)PDP18B_SYS.C,$(PDP18B_DIR)PDP18B_TT1.C,\
$(PDP18B_DIR)PDP18B_RB.C,$(PDP18B_DIR)PDP18B_FPP.C,\ $(PDP18B_DIR)PDP18B_RB.C,$(PDP18B_DIR)PDP18B_FPP.C,\
$(PDP18B_DIR)PDP18B_G2TTY.C $(PDP18B_DIR)PDP18B_G2TTY.C,$(PDP18B_DIR)PDP18B_DR15.C
PDP4_OPTIONS = /INCL=($(SIMH_DIR),$(PDP18B_DIR))/DEF=($(CC_DEFS),"PDP4=1") PDP4_OPTIONS = /INCL=($(SIMH_DIR),$(PDP18B_DIR))/DEF=($(CC_DEFS),"PDP4=1")
PDP7_OPTIONS = /INCL=($(SIMH_DIR),$(PDP18B_DIR))/DEF=($(CC_DEFS),"PDP7=1") PDP7_OPTIONS = /INCL=($(SIMH_DIR),$(PDP18B_DIR))/DEF=($(CC_DEFS),"PDP7=1")
PDP9_OPTIONS = /INCL=($(SIMH_DIR),$(PDP18B_DIR))/DEF=($(CC_DEFS),"PDP9=1") PDP9_OPTIONS = /INCL=($(SIMH_DIR),$(PDP18B_DIR))/DEF=($(CC_DEFS),"PDP9=1")

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View file

@ -1,6 +1,7 @@
# #
# This GNU make makefile has been tested on: # This GNU make makefile has been tested on:
# Linux (x86 & Sparc & PPC) # Linux (x86 & Sparc & PPC)
# Android (Termux)
# OS X # OS X
# Solaris (x86 & Sparc) (gcc and Sun C) # Solaris (x86 & Sparc) (gcc and Sun C)
# OpenBSD # OpenBSD
@ -37,13 +38,14 @@
# #
# simh project support is provided for simulators that are built with # simh project support is provided for simulators that are built with
# dependent packages provided with the or by the operating system # dependent packages provided with the or by the operating system
# distribution OR for platforms where that isn't directly available (OS X) # distribution OR for platforms where that isn't directly available
# by packages from specific package management systems (MacPorts). Users # (OS X) by packages from specific package management systems (MacPorts
# wanting to build simulators with locally build dependent packages or # or Homebrew). Users wanting to build simulators with locally build
# packages provided by an unsupported package management system can # dependent packages or packages provided by an unsupported package
# override where this procedure looks for include files and/or libraries. # management system can override where this procedure looks for include
# Overrides can be specified by define exported environment variables or # files and/or libraries. Overrides can be specified by define exported
# GNU make command line arguments which specify INCLUDES and/or LIBRARIES. # environment variables or GNU make command line arguments which specify
# INCLUDES and/or LIBRARIES.
# Each of these, if specified, must be the complete list include directories # Each of these, if specified, must be the complete list include directories
# or library directories that should be used with each element separated by # or library directories that should be used with each element separated by
# colons. (i.e. INCLUDES=/usr/include/:/usr/local/include/:...) # colons. (i.e. INCLUDES=/usr/include/:/usr/local/include/:...)
@ -493,7 +495,10 @@ ifeq ($(WIN32),) #*nix Environments (&& cygwin)
endif endif
endif endif
ifneq (,$(call find_include,semaphore)) ifneq (,$(call find_include,semaphore))
OS_CCDEFS += -DHAVE_SEMAPHORE ifneq (, $(shell grep sem_timedwait $(call find_include,semaphore)))
OS_CCDEFS += -DHAVE_SEMAPHORE
$(info using semaphore: $(call find_include,semaphore))
endif
endif endif
ifneq (,$(call find_include,sys/ioctl)) ifneq (,$(call find_include,sys/ioctl))
OS_CCDEFS += -DHAVE_SYS_IOCTL OS_CCDEFS += -DHAVE_SYS_IOCTL
@ -1190,6 +1195,17 @@ PDP11 = ${PDP11D}/pdp11_fp.c ${PDP11D}/pdp11_cpu.c ${PDP11D}/pdp11_dz.c \
PDP11_OPT = -DVM_PDP11 -I ${PDP11D} ${NETWORK_OPT} $(DISPLAY_OPT) PDP11_OPT = -DVM_PDP11 -I ${PDP11D} ${NETWORK_OPT} $(DISPLAY_OPT)
UC15D = PDP11
UC15 = ${UC15D}/pdp11_cis.c ${UC15D}/pdp11_cpu.c \
${UC15D}/pdp11_cpumod.c ${UC15D}/pdp11_cr.c \
${UC15D}/pdp11_fp.c ${UC15D}/pdp11_io.c \
${UC15D}/pdp11_io_lib.c ${UC15D}/pdp11_lp.c \
${UC15D}/pdp11_rh.c ${UC15D}/pdp11_rk.c \
${UC15D}/pdp11_stddev.c ${UC15D}/pdp11_sys.c \
${UC15D}/pdp11_uc15.c
UC15_OPT = -DVM_PDP11 -DUC15 -I ${UC15D} -I ${PDP18BD}
VAXD = VAX VAXD = VAX
VAX = ${VAXD}/vax_cpu.c ${VAXD}/vax_cpu1.c ${VAXD}/vax_fpa.c ${VAXD}/vax_io.c \ 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_cis.c ${VAXD}/vax_octa.c ${VAXD}/vax_cmode.c \
@ -1748,7 +1764,7 @@ ALL = pdp1 pdp4 pdp7 pdp8 pdp9 pdp15 pdp11 pdp10 \
i7094 ibm1130 id16 id32 sds lgp h316 cdc1700 \ i7094 ibm1130 id16 id32 sds lgp h316 cdc1700 \
swtp6800mp-a swtp6800mp-a2 tx-0 ssem b5500 isys8010 isys8020 \ swtp6800mp-a swtp6800mp-a2 tx-0 ssem b5500 isys8010 isys8020 \
isys8030 isys8024 imds-225 scelbi 3b2 i701 i704 i7010 i7070 i7080 i7090 \ isys8030 isys8024 imds-225 scelbi 3b2 i701 i704 i7010 i7070 i7080 i7090 \
i650 i650 sigma uc15
all : ${ALL} all : ${ALL}
@ -1833,6 +1849,14 @@ ${BIN}pdp11${EXE} : ${PDP11} ${SIM}
${MKDIRBIN} ${MKDIRBIN}
${CC} ${PDP11} ${SIM} ${PDP11_OPT} $(CC_OUTSPEC) ${LDFLAGS} ${CC} ${PDP11} ${SIM} ${PDP11_OPT} $(CC_OUTSPEC) ${LDFLAGS}
uc15 : ${BIN}uc15${EXE}
${BIN}uc15${EXE} : ${UC15} ${SIM}
${MKDIRBIN}
${CC} ${UC15} ${SIM} ${UC15_OPT} $(CC_OUTSPEC) ${LDFLAGS}
vax : ${BIN}vax${EXE}
vax : microvax3900 vax : microvax3900
microvax3900 : ${BIN}BuildROMs${EXE} ${BIN}microvax3900${EXE} microvax3900 : ${BIN}BuildROMs${EXE} ${BIN}microvax3900${EXE}