mirror of
https://github.com/simh/simh.git
synced 2026-04-25 19:51:25 +00:00
Notes For V3.0-2
RESTRICTION: The FP15 and XVM features of the PDP-15 are only partially debugged. Do NOT enable these features for normal operations. 1. New Features in 3.0-2 1.1 PDP-1 - The LOAD command takes an optional argument specifying the memory field to be loaded. - The PTR BOOT command takes its starting memory field from the TA (address switch) register. 2. Bugs Fixed in 3.0-2 2.1 SCP and libraries - Fixed end of file problem in dep, idep. - Fixed handling of trailing spaces in dep, idep. 2.2 PDP-1 - Fixed system hang if continue after PTR error. - Fixed PTR to start/stop on successive rpa instructions. 2.3 PDP 18b family - Fixed priorities in PDP-15 API (differs from PDP-9). - Fixed sign handling in PDP-15 EAE unsigned mul/div (differs from PDP-9). - Fixed bug in CAF, clears API subsystem. 2.4 1401 - Fixed tape read end-of-record handling based on real 1401. - Added diagnostic read (space forward). 2.5 1620 - Fixed bug in immediate index add (found by Michael Short). 3. New Features in 3.0 vs prior releases 3.1 SCP and Libraries - Added ASSIGN/DEASSIGN (logical name) commands. - Changed RESTORE to unconditionally detach files. - Added E11 and TPC format support to magtape library. - Fixed bug in SHOW CONNECTIONS. - Added USE_ADDR64 support 3.2 All magtapes - Magtapes support SIMH format, E11 format, and TPC format (read only). - SET <tape_unit> FORMAT=format sets the specified tape unit's format. - SHOW <tape_unit> FORMAT displays the specified tape unit's format. - Tape format can also be set as part of the ATTACH command, using the -F switch. 3.3 VAX - VAX can be compiled without USE_INT64. - If compiled with USE_INT64 and USE_ADDR64, RQ and TQ controllers support files > 2GB. - VAX ROM has speed control (SET ROM DELAY/NODELAY). 3.4 PDP-1 - Added block loader format support to LOAD. - Changed BOOT PTR to allow loading of all of the first bank of memory. 3.5 PDP-18b Family - Added PDP-4 EAE support. - Added PDP-15 FP15 support. - Added PDP-15 XVM support. - Added PDP-15 "re-entrancy ECO". - Added PDP-7, PDP-9, PDP-15 hardware RIM loader support in BOOT PTR. 4. Bugs Fixed in 3.0 vs prior releases 4.1 VAX - Fixed CVTfi bug: integer overflow not set if exponent out of range - Fixed EMODx bugs: o First and second operands reversed o Separated fraction received wrong exponent o Overflow calculation on separated integer incorrect o Fraction not set to zero if exponent out of range - Fixed interval timer and ROM access to pass power-up self-test even on very fast host processors (fixes from Mark Pizzolato). - Fixed bug in user disk size (found by Chaskiel M Grundman). 4.2 1401 - Fixed mnemonic, instruction lengths, and reverse scan length check bug for MCS. - Fixed MCE bug, BS off by 1 if zero suppress. - Fixed chaining bug, D lost if return to SCP. - Fixed H branch, branch occurs after continue. - Added check for invalid 8 character MCW, LCA. - Fixed magtape load-mode end of record response. - Revised fetch to model hardware more closely. 4.3 Nova - Fixed DSK variable size interaction with restore. - Fixed bug in DSK set size routine. 4.4 PDP-1 - Fixed DT variable size interaction with restore. - Updated CPU, line printer, standard devices to detect indefinite I/O wait. - Fixed incorrect logical, missing activate, break in drum simulator. - Fixed bugs in instruction decoding, overprinting for line printer. 4.5 PDP-11 - Fixed DT variable size interaction with restore. - Fixed bug in MMR1 update (found by Tim Stark). - Added XQ features and fixed bugs: o Corrected XQ interrupts on IE state transition (code by Tom Evans). o Added XQ interrupt clear on soft reset. o Removed XQ interrupt when setting XL or RL (multiple people). o Added SET/SHOW XQ STATS. o Added SHOW XQ FILTERS. o Added ability to split received packet into multiple buffers. o Added explicit runt and giant packet processing. - Fixed bug in user disk size (found by Chaskiel M Grundman). 4.6 PDP-18B - Fixed DT, RF variable size interaction with restore. - Fixed MT bug in MTTR. - Fixed bug in PDP-4 line printer overprinting. - Fixed bug in PDP-15 memory protect/skip interaction. - Fixed bug in RF set size routine. - Increased PTP TIME for PDP-15 operating systems. 4.7 PDP-8 - Fixed DT, DF, RF, RX variable size interaction with restore. - Fixed MT bug in SKTR. - Fixed bug in DF, RF set size routine. 4.8 HP2100 - Fixed bug in DP (13210A controller only), DQ read status. - Fixed bug in DP, DQ seek complete. - Fixed DR drum sizes. - Fixed DR variable capacity interaction with SAVE/RESTORE. 4.9 GRI - Fixed bug in SC queue pointer management. 4.10 PDP-10 - Fixed bug in RP read header. 4.11 Ibm1130 - Fixed bugs found by APL 1130. 4.12 Altairz80 - Fixed bug in real-time clock on Windows host.
This commit is contained in:
committed by
Mark Pizzolato
parent
f9564b81b9
commit
b2101ecdd4
@@ -26,6 +26,7 @@
|
||||
This CPU module incorporates code and comments from the 1620 simulator by
|
||||
Geoff Kuenning, with his permission.
|
||||
|
||||
21-Aug-03 RMS Fixed bug in immediate index add (found by Michael Short)
|
||||
25-Apr-03 RMS Changed t_addr to uint32 throughout
|
||||
18-Oct-02 RMS Fixed bugs in invalid result testing (found by Hans Pufal)
|
||||
|
||||
@@ -137,7 +138,7 @@ t_stat xmt_index (uint32 d, uint32 s);
|
||||
t_stat xmt_divd (uint32 d, uint32 s);
|
||||
t_stat xmt_tns (uint32 d, uint32 s);
|
||||
t_stat xmt_tnf (uint32 d, uint32 s);
|
||||
t_stat add_field (uint32 d, uint32 s, t_bool sub, t_bool sto, int32 *sta);
|
||||
t_stat add_field (uint32 d, uint32 s, t_bool sub, t_bool sto, uint32 skp, int32 *sta);
|
||||
uint32 add_one_digit (uint32 dst, uint32 src, uint32 *cry);
|
||||
t_stat mul_field (uint32 mpc, uint32 mpy);
|
||||
t_stat mul_one_digit (uint32 mpyd, uint32 mpcp, uint32 prop, uint32 last);
|
||||
@@ -612,21 +613,21 @@ case OP_BNI:
|
||||
|
||||
case OP_A:
|
||||
case OP_AM:
|
||||
reason = add_field (PAR, QAR, FALSE, TRUE, &sta); /* add, store */
|
||||
reason = add_field (PAR, QAR, FALSE, TRUE, 0, &sta); /* add, store */
|
||||
if (sta == ADD_CARRY) ind[IN_OVF] = 1; /* cout => ovflo */
|
||||
if (ar_stop && ind[IN_OVF]) reason = STOP_OVERFL;
|
||||
break;
|
||||
|
||||
case OP_S:
|
||||
case OP_SM:
|
||||
reason = add_field (PAR, QAR, TRUE, TRUE, &sta); /* sub, store */
|
||||
reason = add_field (PAR, QAR, TRUE, TRUE, 0, &sta); /* sub, store */
|
||||
if (sta == ADD_CARRY) ind[IN_OVF] = 1; /* cout => ovflo */
|
||||
if (ar_stop && ind[IN_OVF]) reason = STOP_OVERFL;
|
||||
break;
|
||||
|
||||
case OP_C:
|
||||
case OP_CM:
|
||||
reason = add_field (PAR, QAR, TRUE, FALSE, &sta); /* sub, nostore */
|
||||
reason = add_field (PAR, QAR, TRUE, FALSE, 0, &sta); /* sub, nostore */
|
||||
if (sta == ADD_CARRY) ind[IN_OVF] = 1; /* cout => ovflo */
|
||||
if (ar_stop && ind[IN_OVF]) reason = STOP_OVERFL;
|
||||
break;
|
||||
@@ -720,8 +721,8 @@ case OP_MA:
|
||||
case OP_BLX:
|
||||
case OP_BLXM:
|
||||
idx = get_idx (ADDR_A (saved_PC, I_QL - 1)); /* get index */
|
||||
if (idx < 0) { /* invalid? */
|
||||
reason = STOP_INVIDX; /* stop for now */
|
||||
if (idx < 0) { /* disabled? */
|
||||
reason = STOP_INVIDX; /* stop */
|
||||
break; }
|
||||
xmt_index (GET_IDXADDR (idx), QAR); /* copy Q to idx */
|
||||
BRANCH (PAR); /* branch to P */
|
||||
@@ -731,8 +732,8 @@ case OP_BLXM:
|
||||
|
||||
case OP_BSX:
|
||||
idx = get_idx (ADDR_A (saved_PC, I_QL - 1)); /* get index */
|
||||
if (idx < 0) { /* invalid? */
|
||||
reason = STOP_INVIDX; /* stop for now */
|
||||
if (idx < 0) { /* disabled? */
|
||||
reason = STOP_INVIDX; /* stop */
|
||||
break; }
|
||||
xmt_index (QAR, GET_IDXADDR (idx)); /* copy idx to Q */
|
||||
BRANCH (PAR); /* branch to P */
|
||||
@@ -741,12 +742,21 @@ case OP_BSX:
|
||||
/* Branch and modify index - P,Q are valid, Q not indexed */
|
||||
|
||||
case OP_BX:
|
||||
idx = get_idx (ADDR_A (saved_PC, I_QL - 1)); /* get index */
|
||||
if (idx < 0) { /* disabled? */
|
||||
reason = STOP_INVIDX; /* stop */
|
||||
break; }
|
||||
reason = add_field (GET_IDXADDR (idx), QAR, FALSE, TRUE, 0, &sta);
|
||||
if (ar_stop && ind[IN_OVF]) reason = STOP_OVERFL;
|
||||
BRANCH (PAR); /* branch to P */
|
||||
break;
|
||||
|
||||
case OP_BXM:
|
||||
idx = get_idx (ADDR_A (saved_PC, I_QL - 1)); /* get index */
|
||||
if (idx < 0) { /* invalid? */
|
||||
reason = STOP_INVIDX; /* stop for now */
|
||||
if (idx < 0) { /* disabled? */
|
||||
reason = STOP_INVIDX; /* stop */
|
||||
break; }
|
||||
reason = add_field (GET_IDXADDR (idx), QAR, FALSE, TRUE, &sta);
|
||||
reason = add_field (GET_IDXADDR (idx), QAR, FALSE, TRUE, 3, &sta);
|
||||
if (ar_stop && ind[IN_OVF]) reason = STOP_OVERFL;
|
||||
BRANCH (PAR); /* branch to P */
|
||||
break;
|
||||
@@ -754,12 +764,22 @@ case OP_BXM:
|
||||
/* Branch conditionally and modify index - P,Q are valid, Q not indexed */
|
||||
|
||||
case OP_BCX:
|
||||
idx = get_idx (ADDR_A (saved_PC, I_QL - 1)); /* get index */
|
||||
if (idx < 0) { /* disabled? */
|
||||
reason = STOP_INVIDX; /* stop */
|
||||
break; }
|
||||
reason = add_field (GET_IDXADDR (idx), QAR, FALSE, TRUE, 0, &sta);
|
||||
if (ar_stop && ind[IN_OVF]) reason = STOP_OVERFL;
|
||||
if ((ind[IN_EZ] == 0) && (sta == ADD_NOCRY)) { /* ~z, ~c, ~sign chg? */
|
||||
BRANCH (PAR); } /* branch */
|
||||
break;
|
||||
|
||||
case OP_BCXM:
|
||||
idx = get_idx (ADDR_A (saved_PC, I_QL - 1)); /* get index */
|
||||
if (idx < 0) { /* invalid? */
|
||||
reason = STOP_INVIDX; /* stop for now */
|
||||
if (idx < 0) { /* disabled? */
|
||||
reason = STOP_INVIDX; /* stop */
|
||||
break; }
|
||||
reason = add_field (GET_IDXADDR (idx), QAR, FALSE, TRUE, &sta);
|
||||
reason = add_field (GET_IDXADDR (idx), QAR, FALSE, TRUE, 3, &sta);
|
||||
if (ar_stop && ind[IN_OVF]) reason = STOP_OVERFL;
|
||||
if ((ind[IN_EZ] == 0) && (sta == ADD_NOCRY)) { /* ~z, ~c, ~sign chg? */
|
||||
BRANCH (PAR); } /* branch */
|
||||
@@ -1145,6 +1165,7 @@ return SCPE_OK;
|
||||
s = source field low (Q)
|
||||
sub = TRUE if subtracting
|
||||
sto = TRUE if storing
|
||||
skp = number of source field flags, beyond sign, to ignore
|
||||
Output:
|
||||
return = status
|
||||
sta = ADD_NOCRY: no carry out, no sign change
|
||||
@@ -1155,7 +1176,7 @@ return SCPE_OK;
|
||||
is retained."
|
||||
*/
|
||||
|
||||
t_stat add_field (uint32 d, uint32 s, t_bool sub, t_bool sto, int32 *sta)
|
||||
t_stat add_field (uint32 d, uint32 s, t_bool sub, t_bool sto, uint32 skp, int32 *sta)
|
||||
{
|
||||
uint32 cry, src, dst, res, comp, dp, dsv;
|
||||
uint32 src_f = 0, cnt = 0, dst_f;
|
||||
@@ -1180,7 +1201,7 @@ do { dst = M[d] & DIGIT; /* get dst digit */
|
||||
if (src_f) src = 0; /* src done? src = 0 */
|
||||
else {
|
||||
src = M[s] & DIGIT; /* get src digit */
|
||||
src_f = M[s] & FLAG; /* get src flag */
|
||||
if (cnt >= skp) src_f = M[s] & FLAG; /* get src flag */
|
||||
MM (s); } /* decr src addr */
|
||||
if (BAD_DIGIT (dst) || BAD_DIGIT (src)) /* bad digit? */
|
||||
return STOP_INVDIG;
|
||||
|
||||
Reference in New Issue
Block a user