mirror of
https://github.com/open-simh/simh.git
synced 2026-05-05 15:43:58 +00:00
Notes For V3.7
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
53d02f7fa7
commit
6149cc7e06
@@ -1,6 +1,6 @@
|
||||
/* pdp18b_cpu.c: 18b PDP CPU simulator
|
||||
|
||||
Copyright (c) 1993-2006, Robert M Supnik
|
||||
Copyright (c) 1993-2007, 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 @@
|
||||
|
||||
cpu PDP-4/7/9/15 central processor
|
||||
|
||||
28-Apr-07 RMS Removed clock initialization
|
||||
26-Dec-06 RMS Fixed boundary test in KT15/XVM (reported by Andrew Warkentin)
|
||||
30-Oct-06 RMS Added idle and infinite loop detection
|
||||
08-Oct-06 RMS Added RDCLK instruction
|
||||
@@ -581,7 +582,6 @@ int32 api_int, api_usmd, skp;
|
||||
int32 iot_data, device, pulse;
|
||||
int32 last_IR;
|
||||
t_stat reason;
|
||||
extern UNIT clk_unit;
|
||||
|
||||
if (build_dev_tab ()) return SCPE_STOP; /* build, chk tables */
|
||||
PC = PC & AMASK; /* clean variables */
|
||||
@@ -589,8 +589,8 @@ LAC = LAC & LACMASK;
|
||||
MQ = MQ & DMASK;
|
||||
reason = 0;
|
||||
last_IR = -1;
|
||||
sim_rtc_init (clk_unit.wait); /* init calibration */
|
||||
if (cpu_unit.flags & UNIT_NOAPI) api_enb = api_req = api_act = 0;
|
||||
if (cpu_unit.flags & UNIT_NOAPI) /* no API? */
|
||||
api_enb = api_req = api_act = 0;
|
||||
api_int = api_eval (&int_pend); /* eval API */
|
||||
api_usmd = 0; /* not API user cycle */
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/* pdp18b_lp.c: 18b PDP's line printer simulator
|
||||
|
||||
Copyright (c) 1993-2006, Robert M Supnik
|
||||
Copyright (c) 1993-2007, 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"),
|
||||
@@ -28,6 +28,7 @@
|
||||
lp09 (PDP-9,15) LP09 line printer
|
||||
lp15 (PDP-15) LP15 line printer
|
||||
|
||||
19-Jan-07 RMS Added UNIT_TEXT flag
|
||||
11-Jun-06 RMS Made character translation table global scope
|
||||
14-Jan-04 RMS Revised IO device call interface
|
||||
23-Jul-03 RMS Fixed overprint bug in Type 62
|
||||
@@ -95,7 +96,7 @@ t_stat lp62_reset (DEVICE *dptr);
|
||||
DIB lp62_dib = { DEV_LPT, 2, &lp62_iors, { &lp62_65, &lp62_66 } };
|
||||
|
||||
UNIT lp62_unit = {
|
||||
UDATA (&lp62_svc, UNIT_SEQ+UNIT_ATTABLE, 0), SERIAL_OUT_WAIT
|
||||
UDATA (&lp62_svc, UNIT_SEQ+UNIT_ATTABLE+UNIT_TEXT, 0), SERIAL_OUT_WAIT
|
||||
};
|
||||
|
||||
REG lp62_reg[] = {
|
||||
@@ -179,6 +180,7 @@ if (lp62_spc) { /* space? */
|
||||
if ((uptr->flags & UNIT_ATT) == 0) /* attached? */
|
||||
return IORETURN (lp62_stopioe, SCPE_UNATT);
|
||||
fputs (lp62_cc[lp62_spc & 07], uptr->fileref); /* print cctl */
|
||||
uptr->pos = ftell (uptr->fileref); /* update position */
|
||||
if (ferror (uptr->fileref)) { /* error? */
|
||||
perror ("LPT I/O error");
|
||||
clearerr (uptr->fileref);
|
||||
@@ -192,6 +194,7 @@ else {
|
||||
return IORETURN (lp62_stopioe, SCPE_UNATT);
|
||||
if (lp62_ovrpr) fputc ('\r', uptr->fileref); /* overprint? */
|
||||
fputs (lp62_buf, uptr->fileref); /* print buffer */
|
||||
uptr->pos = ftell (uptr->fileref); /* update position */
|
||||
if (ferror (uptr->fileref)) { /* test error */
|
||||
perror ("LPT I/O error");
|
||||
clearerr (uptr->fileref);
|
||||
@@ -201,7 +204,6 @@ else {
|
||||
for (i = 0; i <= LP62_BSIZE; i++) lp62_buf[i] = 0; /* clear buffer */
|
||||
lp62_ovrpr = 1; /* set overprint */
|
||||
}
|
||||
uptr->pos = ftell (uptr->fileref); /* update position */
|
||||
return SCPE_OK;
|
||||
}
|
||||
|
||||
@@ -274,7 +276,7 @@ t_stat lp647_detach (UNIT *uptr);
|
||||
DIB lp647_dib = { DEV_LPT, 2, &lp647_iors, { &lp647_65, &lp647_66 } };
|
||||
|
||||
UNIT lp647_unit = {
|
||||
UDATA (&lp647_svc, UNIT_SEQ+UNIT_ATTABLE, 0), SERIAL_OUT_WAIT
|
||||
UDATA (&lp647_svc, UNIT_SEQ+UNIT_ATTABLE+UNIT_TEXT, 0), SERIAL_OUT_WAIT
|
||||
};
|
||||
|
||||
REG lp647_reg[] = {
|
||||
@@ -393,7 +395,7 @@ return dat;
|
||||
t_stat lp647_svc (UNIT *uptr)
|
||||
{
|
||||
int32 i;
|
||||
char pbuf[LP647_BSIZE + 1];
|
||||
char pbuf[LP647_BSIZE + 2];
|
||||
|
||||
lp647_don = 1;
|
||||
if (lp647_ie) SET_INT (LPT); /* set flag */
|
||||
@@ -405,8 +407,10 @@ if ((lp647_iot & 020) == 0) { /* print? */
|
||||
for (i = 0; i < lp647_bp; i++) /* translate buffer */
|
||||
pbuf[i] = lp647_buf[i] | ((lp647_buf[i] >= 040)? 0: 0100);
|
||||
if ((lp647_iot & 060) == 0) pbuf[lp647_bp++] = '\r';
|
||||
pbuf[lp647_bp++] = 0; /* append nul */
|
||||
for (i = 0; i < LP647_BSIZE; i++) lp647_buf[i] = 0; /* clear buffer */
|
||||
fwrite (pbuf, 1, lp647_bp, uptr->fileref); /* print buffer */
|
||||
fputs (pbuf, uptr->fileref); /* print buffer */
|
||||
uptr->pos = ftell (uptr->fileref); /* update position */
|
||||
if (ferror (uptr->fileref)) { /* error? */
|
||||
perror ("LPT I/O error");
|
||||
clearerr (uptr->fileref);
|
||||
@@ -417,13 +421,13 @@ if ((lp647_iot & 020) == 0) { /* print? */
|
||||
}
|
||||
if (lp647_iot & 060) { /* space? */
|
||||
fputs (lp647_cc[lp647_iot & 07], uptr->fileref); /* write cctl */
|
||||
uptr->pos = ftell (uptr->fileref); /* update position */
|
||||
if (ferror (uptr->fileref)) { /* error? */
|
||||
perror ("LPT I/O error");
|
||||
clearerr (uptr->fileref);
|
||||
return SCPE_IOERR;
|
||||
}
|
||||
}
|
||||
uptr->pos = ftell (uptr->fileref); /* update position */
|
||||
return SCPE_OK;
|
||||
}
|
||||
|
||||
@@ -501,7 +505,7 @@ t_stat lp09_detach (UNIT *uptr);
|
||||
DIB lp09_dib = { DEV_LPT, 2, &lp09_iors, { NULL, &lp09_66 } };
|
||||
|
||||
UNIT lp09_unit = {
|
||||
UDATA (&lp09_svc, UNIT_SEQ+UNIT_ATTABLE, 0), SERIAL_OUT_WAIT
|
||||
UDATA (&lp09_svc, UNIT_SEQ+UNIT_ATTABLE+UNIT_TEXT, 0), SERIAL_OUT_WAIT
|
||||
};
|
||||
|
||||
REG lp09_reg[] = {
|
||||
@@ -582,12 +586,13 @@ if ((uptr->flags & UNIT_ATT) == 0) { /* not attached? */
|
||||
}
|
||||
c = uptr->buf & 0177; /* get char */
|
||||
if ((c == 0) || (c == 0177)) return SCPE_OK; /* skip NULL, DEL */
|
||||
if (fputc (c, uptr->fileref) == EOF) { /* print char */
|
||||
fputc (c, uptr->fileref); /* print char */
|
||||
uptr->pos = ftell (uptr->fileref); /* update position */
|
||||
if (ferror (uptr->fileref)) { /* error? */
|
||||
perror ("LPT I/O error");
|
||||
clearerr (uptr->fileref);
|
||||
return SCPE_IOERR;
|
||||
}
|
||||
uptr->pos = uptr->pos + 1; /* update position */
|
||||
return SCPE_OK;
|
||||
}
|
||||
|
||||
@@ -657,7 +662,7 @@ int32 lp15_stopioe = 0;
|
||||
int32 lp15_mode = 0;
|
||||
int32 lp15_lc = 0;
|
||||
int32 lp15_bp = 0;
|
||||
char lp15_buf[LP15_BSIZE] = { 0 };
|
||||
char lp15_buf[LP15_BSIZE + 1] = { 0 };
|
||||
|
||||
DEVICE lp15_dev;
|
||||
int32 lp15_65 (int32 dev, int32 pulse, int32 dat);
|
||||
@@ -678,7 +683,7 @@ int32 lp15_updsta (int32 new);
|
||||
DIB lp15_dib = { DEV_LPT, 2, &lp15_iors, { &lp15_65, &lp15_66 } };
|
||||
|
||||
UNIT lp15_unit = {
|
||||
UDATA (&lp15_svc, UNIT_SEQ+UNIT_ATTABLE, 0), SERIAL_OUT_WAIT
|
||||
UDATA (&lp15_svc, UNIT_SEQ+UNIT_ATTABLE+UNIT_TEXT, 0), SERIAL_OUT_WAIT
|
||||
};
|
||||
|
||||
REG lp15_reg[] = {
|
||||
@@ -786,8 +791,10 @@ for (more = 1; more != 0; ) { /* loop until ctrl */
|
||||
}
|
||||
for (i = 0; i < ccnt; i++) { /* loop through */
|
||||
if ((c[i] <= 037) && ctrl[c[i]]) { /* control char? */
|
||||
fwrite (lp15_buf, 1, lp15_bp, uptr->fileref);
|
||||
fputs (ctrl[c[i]], uptr->fileref);
|
||||
lp15_buf[lp15_bp] = 0; /* append nul */
|
||||
fputs (lp15_buf, uptr->fileref); /* print line */
|
||||
fputs (ctrl[c[i]], uptr->fileref); /* space */
|
||||
uptr->pos = ftell (uptr->fileref);
|
||||
if (ferror (uptr->fileref)) { /* error? */
|
||||
perror ("LPT I/O error");
|
||||
clearerr (uptr->fileref);
|
||||
@@ -795,7 +802,6 @@ for (more = 1; more != 0; ) { /* loop until ctrl */
|
||||
lp15_updsta (STA_DON | STA_ALM);
|
||||
return SCPE_IOERR;
|
||||
}
|
||||
uptr->pos = ftell (uptr->fileref);
|
||||
lp15_bp = more = 0;
|
||||
}
|
||||
else {
|
||||
|
||||
Reference in New Issue
Block a user