mirror of
https://github.com/open-simh/simh.git
synced 2026-05-05 07:33:56 +00:00
Notes For V3.0-1
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-1 1.1 PDP-1 - Added block loader format support to LOAD. - Changed BOOT PTR to allow loading of all of the first bank of memory. 1.2 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. 2. Bugs Fixed in 3.0-1 2.1 PDP-11/VAX - Fixed bug in user disk size (found by Chaskiel M Grundman). 2.2 PDP-1 - 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. 2.3 PDP-10 - Fixed bug in RP read header. 2.4 PDP-18b Family - 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. 2.5 PDP-8 - Fixed bug in DF, RF set size routine. 2.6 Nova - Fixed bug in DSK set size routine. 2.7 1401 - Revised fetch to model hardware more closely. 2.8 Ibm1130 - Fixed bugs found by APL 1130. 2.9 Altairz80 - Fixed bug in real-time clock on Windows host. 2.10 HP2100 -- Fixed DR drum sizes. -- Fixed DR variable capacity interaction with SAVE/RESTORE. 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). 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). 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. 4.3 Nova - Fixed DSK variable size interaction with restore. 4.4 PDP-1 - Fixed DT variable size interaction with restore. 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. 4.6 PDP-18B - Fixed DT, RF variable size interaction with restore. - Fixed MT bug in MTTR. 4.7 PDP-8 - Fixed DT, DF, RF, RX variable size interaction with restore. - Fixed MT bug in SKTR. 4.8 HP2100 - Fixed bug in DP (13210A controller only), DQ read status. - Fixed bug in DP, DQ seek complete. 4.9 GRI - Fixed bug in SC queue pointer management.
This commit is contained in:
committed by
Mark Pizzolato
parent
4ffd3be790
commit
f9564b81b9
@@ -144,8 +144,8 @@ int32 rp_swait = 10; /* seek time */
|
||||
int32 rp_rwait = 10; /* rotate time */
|
||||
|
||||
DEVICE rp_dev;
|
||||
int32 rp63 (int32 pulse, int32 AC);
|
||||
int32 rp64 (int32 pulse, int32 AC);
|
||||
int32 rp63 (int32 pulse, int32 dat);
|
||||
int32 rp64 (int32 pulse, int32 dat);
|
||||
int32 rp_iors (void);
|
||||
t_stat rp_svc (UNIT *uptr);
|
||||
void rp_updsta (int32 newa, int32 newb);
|
||||
@@ -202,7 +202,7 @@ DEVICE rp_dev = {
|
||||
|
||||
/* IOT routines */
|
||||
|
||||
int32 rp63 (int32 pulse, int32 AC)
|
||||
int32 rp63 (int32 pulse, int32 dat)
|
||||
{
|
||||
int32 sb = pulse & 060; /* subopcode */
|
||||
|
||||
@@ -210,24 +210,24 @@ rp_updsta (0, 0);
|
||||
if (pulse & 01) {
|
||||
if ((sb == 000) && /* DPSF */
|
||||
((rp_sta & (STA_DON | STA_ERR)) || (rp_stb & STB_ATTN)))
|
||||
AC = IOT_SKP | AC;
|
||||
dat = IOT_SKP | dat;
|
||||
else if ((sb == 020) && (rp_stb & STB_ATTN)) /* DPSA */
|
||||
AC = IOT_SKP | AC;
|
||||
dat = IOT_SKP | dat;
|
||||
else if ((sb == 040) && (rp_sta & STA_DON)) /* DPSJ */
|
||||
AC = IOT_SKP | AC;
|
||||
dat = IOT_SKP | dat;
|
||||
else if ((sb == 060) && (rp_sta & STA_ERR)) /* DPSE */
|
||||
AC = IOT_SKP | AC;
|
||||
dat = IOT_SKP | dat;
|
||||
}
|
||||
if (pulse & 02) {
|
||||
if (sb == 000) AC = AC | rp_sta; /* DPOSA */
|
||||
else if (sb == 020) AC = AC | rp_stb; /* DPOSB */
|
||||
if (sb == 000) dat = dat | rp_sta; /* DPOSA */
|
||||
else if (sb == 020) dat = dat | rp_stb; /* DPOSB */
|
||||
}
|
||||
if (pulse & 04) {
|
||||
if (rp_busy) { /* busy? */
|
||||
rp_updsta (0, STB_PGE);
|
||||
return AC; }
|
||||
return dat; }
|
||||
else if (sb == 000) { /* DPLA */
|
||||
rp_da = AC & 0777777;
|
||||
rp_da = dat & DMASK;
|
||||
if (GET_SECT (rp_da) >= RP_NUMSC) rp_updsta (STA_NXS, 0);
|
||||
if (GET_SURF (rp_da) >= RP_NUMSF) rp_updsta (STA_NXF, 0);
|
||||
if (GET_CYL (rp_da) >= RP_NUMCY) rp_updsta (STA_NXC, 0); }
|
||||
@@ -236,38 +236,38 @@ if (pulse & 04) {
|
||||
rp_stb = rp_stb & ~(STB_FME | STB_WPE | STB_LON | STB_WCE |
|
||||
STB_TME | STB_PGE | STB_EOP);
|
||||
rp_updsta (0, 0); }
|
||||
else if (sb == 040) rp_ma = AC & 0777777; /* DPCA */
|
||||
else if (sb == 060) rp_wc = AC & 0777777; /* DPWC */
|
||||
else if (sb == 040) rp_ma = dat & DMASK; /* DPCA */
|
||||
else if (sb == 060) rp_wc = dat & DMASK; /* DPWC */
|
||||
}
|
||||
return AC;
|
||||
return dat;
|
||||
}
|
||||
|
||||
/* IOT 64 */
|
||||
|
||||
int32 rp64 (int32 pulse, int32 AC)
|
||||
int32 rp64 (int32 pulse, int32 dat)
|
||||
{
|
||||
int32 u, f, c, sb;
|
||||
UNIT *uptr;
|
||||
|
||||
sb = pulse & 060;
|
||||
if (pulse & 01) {
|
||||
if (sb == 020) AC = IOT_SKP | AC; /* DPSN */
|
||||
if (sb == 020) dat = IOT_SKP | dat; /* DPSN */
|
||||
}
|
||||
if (pulse & 02) {
|
||||
if (sb == 000) AC = AC | rp_unit[GET_UNIT (rp_sta)].CYL; /* DPOU */
|
||||
else if (sb == 020) AC = AC | rp_da; /* DPOA */
|
||||
else if (sb == 040) AC = AC | rp_ma; /* DPOC */
|
||||
else if (sb == 060) AC = AC | rp_wc; /* DPOW */
|
||||
if (sb == 000) dat = dat | rp_unit[GET_UNIT (rp_sta)].CYL; /* DPOU */
|
||||
else if (sb == 020) dat = dat | rp_da; /* DPOA */
|
||||
else if (sb == 040) dat = dat | rp_ma; /* DPOC */
|
||||
else if (sb == 060) dat = dat | rp_wc; /* DPOW */
|
||||
}
|
||||
if (pulse & 04) {
|
||||
if (rp_busy) { /* busy? */
|
||||
rp_updsta (0, STB_PGE);
|
||||
return AC; }
|
||||
return dat; }
|
||||
if (sb == 000) rp_sta = rp_sta & ~STA_RW; /* DPCF */
|
||||
else if (sb == 020) rp_sta = rp_sta & (AC | ~STA_RW); /* DPLZ */
|
||||
else if (sb == 040) rp_sta = rp_sta | (AC & STA_RW); /* DPLO */
|
||||
else if (sb == 020) rp_sta = rp_sta & (dat | ~STA_RW); /* DPLZ */
|
||||
else if (sb == 040) rp_sta = rp_sta | (dat & STA_RW); /* DPLO */
|
||||
else if (sb == 060) /* DPLF */
|
||||
rp_sta = (rp_sta & ~STA_RW) | (AC & STA_RW);
|
||||
rp_sta = (rp_sta & ~STA_RW) | (dat & STA_RW);
|
||||
rp_sta = rp_sta & ~STA_DON; /* clear done */
|
||||
u = GET_UNIT (rp_sta); /* get unit num */
|
||||
uptr = rp_dev.units + u; /* select unit */
|
||||
@@ -286,7 +286,7 @@ if (pulse & 04) {
|
||||
sim_activate (uptr, MAX (RP_MIN, c + rp_rwait)); } }
|
||||
}
|
||||
rp_updsta (0, 0);
|
||||
return AC;
|
||||
return dat;
|
||||
}
|
||||
|
||||
/* Unit service
|
||||
@@ -342,7 +342,7 @@ if (rp_sta & (STA_NXS | STA_NXF | STA_NXC)) { /* or bad disk addr? */
|
||||
rp_updsta (STA_DON, STB_SUFU); /* done, unsafe */
|
||||
return SCPE_OK; }
|
||||
|
||||
pa = rp_ma & ADDRMASK; /* get mem addr */
|
||||
pa = rp_ma & AMASK; /* get mem addr */
|
||||
da = GET_DA (rp_da) * RP_NUMWD; /* get disk addr */
|
||||
wc = 01000000 - rp_wc; /* get true wc */
|
||||
if (((uint32) (pa + wc)) > MEMSIZE) { /* memory overrun? */
|
||||
@@ -373,8 +373,8 @@ if ((f == FN_WRCHK) && (err == 0)) { /* write check? */
|
||||
if (comp != M[pa + i]) rp_updsta (0, STB_WCE); }
|
||||
err = ferror (uptr->fileref); }
|
||||
|
||||
rp_wc = (rp_wc + wc) & 0777777; /* final word count */
|
||||
rp_ma = (rp_ma + wc) & 0777777; /* final mem addr */
|
||||
rp_wc = (rp_wc + wc) & DMASK; /* final word count */
|
||||
rp_ma = (rp_ma + wc) & DMASK; /* final mem addr */
|
||||
da = (da + wc + (RP_NUMWD - 1)) / RP_NUMWD; /* final sector num */
|
||||
cyl = da / (RP_NUMSC * RP_NUMSF); /* get cyl */
|
||||
if (cyl >= RP_NUMCY) cyl = RP_NUMCY - 1;
|
||||
|
||||
Reference in New Issue
Block a user