mirror of
https://github.com/open-simh/simh.git
synced 2026-01-25 19:57:36 +00:00
Notes For V3.7-0
1. New Features 1.1 3.7-0 1.1.1 SCP - Added SET THROTTLE and SET NOTHROTTLE commands to regulate simulator execution rate and host resource utilization. - Added idle support (based on work by Mark Pizzolato). - Added -e to control error processing in nested DO commands (from Dave Bryan). 1.1.2 HP2100 - Added Double Integer instructions, 1000-F CPU, and Floating Point Processor (from Dave Bryan). - Added 2114 and 2115 CPUs, 12607B and 12578A DMA controllers, and 21xx binary loader protection (from Dave Bryan). 1.1.3 Interdata - Added SET IDLE and SET NOIDLE commands to idle the simulator in wait state. 1.1.4 PDP-11 - Added SET IDLE and SET NOIDLE commands to idle the simulator in wait state (WAIT instruction executed). - Added TA11/TU60 cassette support. 1.1.5 PDP-8 - Added SET IDLE and SET NOIDLE commands to idle the simulator in wait state (keyboard poll loop or jump-to-self). - Added TA8E/TU60 cassette support. 1.1.6 PDP-1 - Added support for 16-channel sequence break system. - Added support for PDP-1D extended features and timesharing clock. - Added support for Type 630 data communications subsystem. 1.1.6 PDP-4/7/9/15 - Added SET IDLE and SET NOIDLE commands to idle the simulator in wait state (keyboard poll loop or jump-to-self). 1.1.7 VAX, VAX780 - Added SET IDLE and SET NOIDLE commands to idle the simulator in wait state (more than 200 cycles at IPL's 0, 1, or 3 in kernel mode). 1.1.8 PDP-10 - Added SET IDLE and SET NOIDLE commands to idle the simulator in wait state (operating system dependent). - Added CD20 (CD11) support. 2. Bugs Fixed Please see the revision history on http://simh.trailing-edge.com or in the source module sim_rev.h.
This commit is contained in:
committed by
Mark Pizzolato
parent
15919a2dd7
commit
53d02f7fa7
@@ -1,6 +1,6 @@
|
||||
/* sds_cpu.c: SDS 940 CPU simulator
|
||||
|
||||
Copyright (c) 2001-2005, Robert M. Supnik
|
||||
Copyright (c) 2001-2006, 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"),
|
||||
@@ -26,6 +26,7 @@
|
||||
cpu central processor
|
||||
rtc real time clock
|
||||
|
||||
29-Dec-06 RMS Fixed breakpoint variable declarations
|
||||
16-Aug-05 RMS Fixed C++ declaration and cast problems
|
||||
07-Nov-04 RMS Added instruction history
|
||||
01-Mar-03 RMS Added SET/SHOW RTC FREQ support
|
||||
@@ -193,7 +194,7 @@ int32 rtc_pie = 0; /* rtc pulse ie */
|
||||
int32 rtc_tps = 60; /* rtc ticks/sec */
|
||||
|
||||
extern int32 sim_int_char;
|
||||
extern int32 sim_brk_types, sim_brk_dflt, sim_brk_summ; /* breakpoint info */
|
||||
extern uint32 sim_brk_types, sim_brk_dflt, sim_brk_summ; /* breakpoint info */
|
||||
extern UNIT mux_unit;
|
||||
|
||||
t_stat cpu_ex (t_value *vptr, t_addr addr, UNIT *uptr, int32 sw);
|
||||
@@ -429,7 +430,7 @@ while (reason == 0) { /* loop until halted */
|
||||
int_reqhi = api_findreq (); /* recalc int req */
|
||||
}
|
||||
else { /* normal instr */
|
||||
if (sim_brk_summ && sim_brk_test (P, SWMASK ('E'))) { /* breakpoint? */
|
||||
if (sim_brk_summ && sim_brk_test (P, SWMASK ('E'))) { /* breakpoint? */
|
||||
reason = STOP_IBKPT; /* stop simulation */
|
||||
break;
|
||||
}
|
||||
@@ -498,7 +499,7 @@ if (inst & I_POP) { /* POP? */
|
||||
usr_mode = 0; /* set mon mode */
|
||||
}
|
||||
else { /* normal POP */
|
||||
dat = (OV << 23) | dat; /* ov in <0> */
|
||||
dat = (OV << 23) | dat; /* ov in <0> */
|
||||
if (r = Write (0, dat)) return r;
|
||||
}
|
||||
}
|
||||
@@ -1369,7 +1370,7 @@ return SCPE_OK;
|
||||
t_stat rtc_svc (UNIT *uptr)
|
||||
{
|
||||
if (rtc_pie) int_req = int_req | INT_RTCP; /* set pulse intr */
|
||||
sim_activate (&rtc_unit, sim_rtcn_calb (rtc_tps, TMR_RTC)); /* reactivate unit */
|
||||
sim_activate (&rtc_unit, sim_rtcn_calb (rtc_tps, TMR_RTC)); /* reactivate */
|
||||
return SCPE_OK;
|
||||
}
|
||||
|
||||
|
||||
@@ -87,7 +87,7 @@
|
||||
#define DRM_EIU 7 /* end int uncond */
|
||||
|
||||
#define GET_TWORD(x) ((int32) fmod (sim_gtime() / ((double) (x)), \
|
||||
((double) (DRM_NUMSC * DRM_PHYWD))))
|
||||
((double) (DRM_NUMSC * DRM_PHYWD))))
|
||||
|
||||
extern uint32 M[]; /* memory */
|
||||
extern uint32 alert, int_req;
|
||||
|
||||
10
SDS/sds_io.c
10
SDS/sds_io.c
@@ -223,7 +223,7 @@ uint32 dev_map[64][NUM_CHAN];
|
||||
|
||||
t_stat (*dev_dsp[64][NUM_CHAN])() = { NULL };
|
||||
|
||||
/* dev_dsp maps system device numbers to dispatch routines */
|
||||
/* dev3_dsp maps system device numbers to dispatch routines */
|
||||
|
||||
t_stat (*dev3_dsp[64])() = { NULL };
|
||||
|
||||
@@ -324,14 +324,14 @@ switch (mod) {
|
||||
chan_war[ch] = chan_cnt[ch] = 0; /* init chan */
|
||||
chan_flag[ch] = chan_dcr[ch] = 0;
|
||||
chan_mode[ch] = chan_uar[ch] = 0;
|
||||
if (ch > CHAN_E) chan_mode[ch] = CHM_CE;
|
||||
if (ch >= CHAN_E) chan_mode[ch] = CHM_CE;
|
||||
if (r = dev_dsp[dev][ch] (IO_CONN, inst, NULL)) /* connect */
|
||||
return r;
|
||||
if ((inst & I_IND) || (ch >= CHAN_C)) { /* C-H? alert ilc */
|
||||
alert = POT_ILCY + ch;
|
||||
chan_mar[ch] = chan_wcr[ch] = 0;
|
||||
}
|
||||
if (chan_flag[ch] & CHF_24B) chan_cpw[ch] = 0; /* 24B? 1 ch/wd */
|
||||
if (chan_flag[ch] & CHF_24B) chan_cpw[ch] = 0; /* 24B? 1 ch/wd */
|
||||
else if (chan_flag[ch] & CHF_12B) /* 12B? 2 ch/wd */
|
||||
chan_cpw[ch] = CHC_GETCPW (inst) & 1;
|
||||
else chan_cpw[ch] = CHC_GETCPW (inst); /* 6b, 1-4 ch/wd */
|
||||
@@ -704,7 +704,7 @@ uint32 chan_mar_inc (int32 ch)
|
||||
{
|
||||
uint32 t = (chan_mar[ch] + 1) & PAMASK; /* incr mar */
|
||||
|
||||
if ((chan_flag[ch] & CHF_DCHN) && ((t & VA_POFF) == 0)) { /* chain? */
|
||||
if ((chan_flag[ch] & CHF_DCHN) && ((t & VA_POFF) == 0)) { /* chain? */
|
||||
chan_flag[ch] = chan_flag[ch] & ~CHF_DCHN; /* clr flag */
|
||||
if (chan_dcr[ch] & CHD_INT) /* if armed, intr */
|
||||
int_req = int_req | int_zc[ch];
|
||||
@@ -896,7 +896,7 @@ for (i = 0; i < NUM_CHAN; i++) {
|
||||
|
||||
for (i = 0; dptr = sim_devices[i]; i++) { /* loop thru devices */
|
||||
dibp = (DIB *) dptr->ctxt; /* get DIB */
|
||||
if ((dibp == NULL) || (dptr->flags & DEV_DIS)) continue; /* exist, enabled? */
|
||||
if ((dibp == NULL) || (dptr->flags & DEV_DIS)) continue; /* exist, enabled? */
|
||||
ch = dibp->chan; /* get channel */
|
||||
dev = dibp->dev; /* get device num */
|
||||
if (ch < 0) dev3_dsp[dev] = dibp->iop; /* special device */
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/* sds_mux.c: SDS 940 terminal multiplexor simulator
|
||||
|
||||
Copyright (c) 2001-2005, Robert M Supnik
|
||||
Copyright (c) 2001-2006, 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"),
|
||||
@@ -25,6 +25,7 @@
|
||||
|
||||
mux terminal multiplexor
|
||||
|
||||
29-Dec-06 RMS Revised to use console conversion routines
|
||||
29-Jun-05 RMS Added SET MUXLn DISCONNECT
|
||||
21-Jun-05 RMS Fixed bug in SHOW CONN/STATS
|
||||
05-Jan-04 RMS Revised for tmxr library changes
|
||||
@@ -47,8 +48,6 @@
|
||||
#define MUX_FLAGMASK (MUX_FLAGS - 1)
|
||||
#define MUX_SCANMAX (MUX_LINES * MUX_FLAGS) /* flags to scan */
|
||||
#define MUX_SCANMASK (MUX_SCANMAX - 1)
|
||||
#define UNIT_V_UC (UNIT_V_UF + 0) /* UC only */
|
||||
#define UNIT_UC (1 << UNIT_V_UC)
|
||||
#define MUX_INIT_POLL 8000
|
||||
#define MUXL_WAIT 500
|
||||
#define MUX_SETFLG(l,x) mux_flags[((l) * MUX_FLAGS) + (x)] = 1
|
||||
@@ -182,43 +181,45 @@ DEVICE mux_dev = {
|
||||
*/
|
||||
|
||||
UNIT muxl_unit[] = {
|
||||
{ UDATA (&muxo_svc, UNIT_UC, 0), MUXL_WAIT },
|
||||
{ UDATA (&muxo_svc, UNIT_UC, 0), MUXL_WAIT },
|
||||
{ UDATA (&muxo_svc, UNIT_UC, 0), MUXL_WAIT },
|
||||
{ UDATA (&muxo_svc, UNIT_UC, 0), MUXL_WAIT },
|
||||
{ UDATA (&muxo_svc, UNIT_UC, 0), MUXL_WAIT },
|
||||
{ UDATA (&muxo_svc, UNIT_UC, 0), MUXL_WAIT },
|
||||
{ UDATA (&muxo_svc, UNIT_UC, 0), MUXL_WAIT },
|
||||
{ UDATA (&muxo_svc, UNIT_UC, 0), MUXL_WAIT },
|
||||
{ UDATA (&muxo_svc, UNIT_UC, 0), MUXL_WAIT },
|
||||
{ UDATA (&muxo_svc, UNIT_UC, 0), MUXL_WAIT },
|
||||
{ UDATA (&muxo_svc, UNIT_UC, 0), MUXL_WAIT },
|
||||
{ UDATA (&muxo_svc, UNIT_UC, 0), MUXL_WAIT },
|
||||
{ UDATA (&muxo_svc, UNIT_UC, 0), MUXL_WAIT },
|
||||
{ UDATA (&muxo_svc, UNIT_UC, 0), MUXL_WAIT },
|
||||
{ UDATA (&muxo_svc, UNIT_UC, 0), MUXL_WAIT },
|
||||
{ UDATA (&muxo_svc, UNIT_UC, 0), MUXL_WAIT },
|
||||
{ UDATA (&muxo_svc, UNIT_UC, 0), MUXL_WAIT },
|
||||
{ UDATA (&muxo_svc, UNIT_UC, 0), MUXL_WAIT },
|
||||
{ UDATA (&muxo_svc, UNIT_UC, 0), MUXL_WAIT },
|
||||
{ UDATA (&muxo_svc, UNIT_UC, 0), MUXL_WAIT },
|
||||
{ UDATA (&muxo_svc, UNIT_UC, 0), MUXL_WAIT },
|
||||
{ UDATA (&muxo_svc, UNIT_UC, 0), MUXL_WAIT },
|
||||
{ UDATA (&muxo_svc, UNIT_UC, 0), MUXL_WAIT },
|
||||
{ UDATA (&muxo_svc, UNIT_UC, 0), MUXL_WAIT },
|
||||
{ UDATA (&muxo_svc, UNIT_UC, 0), MUXL_WAIT },
|
||||
{ UDATA (&muxo_svc, UNIT_UC, 0), MUXL_WAIT },
|
||||
{ UDATA (&muxo_svc, UNIT_UC, 0), MUXL_WAIT },
|
||||
{ UDATA (&muxo_svc, UNIT_UC, 0), MUXL_WAIT },
|
||||
{ UDATA (&muxo_svc, UNIT_UC, 0), MUXL_WAIT },
|
||||
{ UDATA (&muxo_svc, UNIT_UC, 0), MUXL_WAIT },
|
||||
{ UDATA (&muxo_svc, UNIT_UC, 0), MUXL_WAIT },
|
||||
{ UDATA (&muxo_svc, UNIT_UC, 0), MUXL_WAIT }
|
||||
{ UDATA (&muxo_svc, TT_MODE_UC, 0), MUXL_WAIT },
|
||||
{ UDATA (&muxo_svc, TT_MODE_UC, 0), MUXL_WAIT },
|
||||
{ UDATA (&muxo_svc, TT_MODE_UC, 0), MUXL_WAIT },
|
||||
{ UDATA (&muxo_svc, TT_MODE_UC, 0), MUXL_WAIT },
|
||||
{ UDATA (&muxo_svc, TT_MODE_UC, 0), MUXL_WAIT },
|
||||
{ UDATA (&muxo_svc, TT_MODE_UC, 0), MUXL_WAIT },
|
||||
{ UDATA (&muxo_svc, TT_MODE_UC, 0), MUXL_WAIT },
|
||||
{ UDATA (&muxo_svc, TT_MODE_UC, 0), MUXL_WAIT },
|
||||
{ UDATA (&muxo_svc, TT_MODE_UC, 0), MUXL_WAIT },
|
||||
{ UDATA (&muxo_svc, TT_MODE_UC, 0), MUXL_WAIT },
|
||||
{ UDATA (&muxo_svc, TT_MODE_UC, 0), MUXL_WAIT },
|
||||
{ UDATA (&muxo_svc, TT_MODE_UC, 0), MUXL_WAIT },
|
||||
{ UDATA (&muxo_svc, TT_MODE_UC, 0), MUXL_WAIT },
|
||||
{ UDATA (&muxo_svc, TT_MODE_UC, 0), MUXL_WAIT },
|
||||
{ UDATA (&muxo_svc, TT_MODE_UC, 0), MUXL_WAIT },
|
||||
{ UDATA (&muxo_svc, TT_MODE_UC, 0), MUXL_WAIT },
|
||||
{ UDATA (&muxo_svc, TT_MODE_UC, 0), MUXL_WAIT },
|
||||
{ UDATA (&muxo_svc, TT_MODE_UC, 0), MUXL_WAIT },
|
||||
{ UDATA (&muxo_svc, TT_MODE_UC, 0), MUXL_WAIT },
|
||||
{ UDATA (&muxo_svc, TT_MODE_UC, 0), MUXL_WAIT },
|
||||
{ UDATA (&muxo_svc, TT_MODE_UC, 0), MUXL_WAIT },
|
||||
{ UDATA (&muxo_svc, TT_MODE_UC, 0), MUXL_WAIT },
|
||||
{ UDATA (&muxo_svc, TT_MODE_UC, 0), MUXL_WAIT },
|
||||
{ UDATA (&muxo_svc, TT_MODE_UC, 0), MUXL_WAIT },
|
||||
{ UDATA (&muxo_svc, TT_MODE_UC, 0), MUXL_WAIT },
|
||||
{ UDATA (&muxo_svc, TT_MODE_UC, 0), MUXL_WAIT },
|
||||
{ UDATA (&muxo_svc, TT_MODE_UC, 0), MUXL_WAIT },
|
||||
{ UDATA (&muxo_svc, TT_MODE_UC, 0), MUXL_WAIT },
|
||||
{ UDATA (&muxo_svc, TT_MODE_UC, 0), MUXL_WAIT },
|
||||
{ UDATA (&muxo_svc, TT_MODE_UC, 0), MUXL_WAIT },
|
||||
{ UDATA (&muxo_svc, TT_MODE_UC, 0), MUXL_WAIT },
|
||||
{ UDATA (&muxo_svc, TT_MODE_UC, 0), MUXL_WAIT }
|
||||
};
|
||||
|
||||
MTAB muxl_mod[] = {
|
||||
{ UNIT_UC, 0, "lower case", "LC", NULL },
|
||||
{ UNIT_UC, UNIT_UC, "upper case", "UC", NULL },
|
||||
{ TT_MODE, TT_MODE_UC, "UC", "UC", NULL },
|
||||
{ TT_MODE, TT_MODE_7B, "7b", "7B", NULL },
|
||||
{ TT_MODE, TT_MODE_8B, "8b", "8B", NULL },
|
||||
{ TT_MODE, TT_MODE_7P, "7p", "7P", NULL },
|
||||
{ MTAB_XTD|MTAB_VUN, 0, NULL, "DISCONNECT",
|
||||
&tmxr_dscln, NULL, &mux_desc },
|
||||
{ MTAB_XTD|MTAB_VUN|MTAB_NC, 0, "LOG", "LOG",
|
||||
@@ -362,9 +363,8 @@ for (ln = 0; ln < MUX_NUMLIN; ln++) { /* loop thru lines */
|
||||
if (mux_sta[ln] & MUX_SCHP) /* already got one? */
|
||||
mux_sta[ln] = mux_sta[ln] | MUX_SOVR; /* overrun */
|
||||
else mux_sta[ln] = mux_sta[ln] | MUX_SCHP; /* char pending */
|
||||
c = c & 0177; /* mask to 7b */
|
||||
if ((muxl_unit[ln].flags & UNIT_UC) && /* cvt to UC? */
|
||||
islower (c & 0x7F)) c = toupper (c);
|
||||
if (c & SCPE_BREAK) c = 0; /* break? */
|
||||
else c = sim_tt_inpcvt (c, TT_GET_MODE (muxl_unit[ln].flags));
|
||||
mux_rbuf[ln] = c; /* save char */
|
||||
MUX_SETFLG (ln, MUX_FRCV); /* set rcv flag */
|
||||
mux_scan_next (); /* kick scanner */
|
||||
@@ -384,10 +384,8 @@ uint32 ln = uptr - muxl_unit; /* line # */
|
||||
|
||||
if (mux_ldsc[ln].conn) { /* connected? */
|
||||
if (mux_ldsc[ln].xmte) { /* xmt enabled? */
|
||||
c = mux_xbuf[ln] & 0177; /* get char */
|
||||
if ((muxl_unit[ln].flags & UNIT_UC) && islower (c))
|
||||
c = toupper (c); /* cvt to UC? */
|
||||
tmxr_putc_ln (&mux_ldsc[ln], c); /* output char */
|
||||
c = sim_tt_outcvt (mux_xbuf[ln], TT_GET_MODE (muxl_unit[ln].flags));
|
||||
if (c >= 0) tmxr_putc_ln (&mux_ldsc[ln], c); /* output char */
|
||||
tmxr_poll_tx (&mux_desc); /* poll xmt */
|
||||
}
|
||||
else { /* buf full */
|
||||
|
||||
@@ -48,7 +48,7 @@
|
||||
#define RAD_TRSCMASK ((RAD_NUMSC * RAD_NUMTR) - 1) /* track/sec mask */
|
||||
|
||||
#define GET_SECTOR(x) ((int) fmod (sim_gtime() / ((double) (x)), \
|
||||
((double) RAD_NUMSC)))
|
||||
((double) RAD_NUMSC)))
|
||||
|
||||
extern uint32 xfr_req;
|
||||
extern uint32 alert;
|
||||
|
||||
@@ -158,7 +158,7 @@ extern int32 lpt_ccl, lpt_ccp, lpt_cct[CCT_LNT];
|
||||
char *cptr, cbuf[CBUFSIZE], gbuf[CBUFSIZE];
|
||||
|
||||
ptr = 0;
|
||||
for ( ; (cptr = fgets (cbuf, CBUFSIZE, fileref)) != NULL; ) { /* until eof */
|
||||
for ( ; (cptr = fgets (cbuf, CBUFSIZE, fileref)) != NULL; ) { /* until eof */
|
||||
mask = 0;
|
||||
if (*cptr == '(') { /* repeat count? */
|
||||
cptr = get_glyph (cptr + 1, gbuf, ')'); /* get 1st field */
|
||||
|
||||
Reference in New Issue
Block a user