mirror of
https://github.com/simh/simh.git
synced 2026-04-25 03:34:34 +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
@@ -131,7 +131,7 @@ int32 mt_log = 0;
|
||||
uint8 *mtxb = NULL; /* transfer buffer */
|
||||
|
||||
DEVICE mt_dev;
|
||||
int32 mt (int32 pulse, int32 AC);
|
||||
int32 mt (int32 pulse, int32 dat);
|
||||
int32 mt_iors (void);
|
||||
t_stat mt_svc (UNIT *uptr);
|
||||
t_stat mt_reset (DEVICE *dptr);
|
||||
@@ -194,7 +194,7 @@ DEVICE mt_dev = {
|
||||
|
||||
/* IOT routine */
|
||||
|
||||
int32 mt (int32 pulse, int32 AC)
|
||||
int32 mt (int32 pulse, int32 dat)
|
||||
{
|
||||
int32 f, sb;
|
||||
UNIT *uptr;
|
||||
@@ -205,21 +205,21 @@ sb = pulse & 060; /* subop */
|
||||
if (pulse & 01) {
|
||||
if ((sb == 000) && (uptr->flags & UNIT_ATT) && /* MTTR */
|
||||
!sim_is_active (uptr))
|
||||
AC = IOT_SKP | AC;
|
||||
dat = IOT_SKP | dat;
|
||||
else if ((sb == 020) && !mt_busy ()) /* MTCR */
|
||||
AC = IOT_SKP | AC;
|
||||
dat = IOT_SKP | dat;
|
||||
else if ((sb == 040) && (mt_sta & (STA_ERR | STA_DON))) /* MTSF */
|
||||
AC = IOT_SKP | AC;
|
||||
dat = IOT_SKP | dat;
|
||||
}
|
||||
if ((pulse & 06) && mt_log)
|
||||
printf ("[MT%d: IOT=%o, AC=%o, sta=%o]\n",
|
||||
GET_UNIT (mt_cu), 0707300 + pulse, AC, mt_sta);
|
||||
GET_UNIT (mt_cu), 0707300 + pulse, dat, mt_sta);
|
||||
if (pulse & 02) {
|
||||
if (sb == 000) AC = AC | (mt_cu & 0777700); /* MTRC */
|
||||
if (sb == 000) dat = dat | (mt_cu & 0777700); /* MTRC */
|
||||
else if (sb == 020) { /* MTAF, MTLC */
|
||||
if (!mt_busy ()) mt_cu = mt_sta = 0; /* if not busy, clr */
|
||||
mt_sta = mt_sta & ~(STA_ERR | STA_DON); } /* clear flags */
|
||||
else if (sb == 040) AC = AC | mt_sta; /* MTRS */
|
||||
else if (sb == 040) dat = dat | mt_sta; /* MTRS */
|
||||
}
|
||||
if (pulse & 04) {
|
||||
if (sb == 000) { /* MTGO */
|
||||
@@ -236,10 +236,10 @@ if (pulse & 04) {
|
||||
else mt_sta = uptr->USTAT = 0; /* no, clear status */
|
||||
sim_activate (uptr, mt_time); } } /* start io */
|
||||
if (sb == 020) /* MTCM, MTLC */
|
||||
mt_cu = (mt_cu & 0770700) | (AC & 0777700); /* load status */
|
||||
mt_cu = (mt_cu & 0770700) | (dat & 0777700); /* load status */
|
||||
}
|
||||
mt_updcsta (mt_dev.units + GET_UNIT (mt_cu), 0); /* update status */
|
||||
return AC;
|
||||
return dat;
|
||||
}
|
||||
|
||||
/* Unit service
|
||||
@@ -289,9 +289,9 @@ case FN_CMPARE: /* read/compare */
|
||||
cbc = tbc; /* use smaller */
|
||||
wc = PACKED (mt_cu)? ((tbc + 2) / 3): ((tbc + 1) / 2); }
|
||||
for (i = p = 0; i < wc; i++) { /* copy buffer */
|
||||
M[MT_WC] = (M[MT_WC] + 1) & 0777777; /* inc WC, CA */
|
||||
M[MT_CA] = (M[MT_CA] + 1) & 0777777;
|
||||
xma = M[MT_CA] & ADDRMASK;
|
||||
M[MT_WC] = (M[MT_WC] + 1) & DMASK; /* inc WC, CA */
|
||||
M[MT_CA] = (M[MT_CA] + 1) & DMASK;
|
||||
xma = M[MT_CA] & AMASK;
|
||||
if (PACKED (mt_cu)) { /* packed? */
|
||||
c1 = mtxb[p++] & 077;
|
||||
c2 = mtxb[p++] & 077;
|
||||
@@ -303,16 +303,16 @@ case FN_CMPARE: /* read/compare */
|
||||
c = (c1 << 8) | c2; }
|
||||
if ((f == FN_READ) && MEM_ADDR_OK (xma)) M[xma] = c;
|
||||
else if ((f == FN_CMPARE) && (c != (M[xma] &
|
||||
(PACKED (mt_cu)? 0777777: 0177777)))) {
|
||||
(PACKED (mt_cu)? DMASK: 0177777)))) {
|
||||
mt_updcsta (uptr, STA_CPE);
|
||||
break; } }
|
||||
break;
|
||||
|
||||
case FN_WRITE: /* write */
|
||||
tbc = PACKED (mt_cu)? wc * 3: wc * 2;
|
||||
xma = M[MT_CA] & ADDRMASK; /* get mem addr */
|
||||
xma = M[MT_CA] & AMASK; /* get mem addr */
|
||||
for (i = p = 0; i < wc; i++) { /* copy buf to tape */
|
||||
xma = (xma + 1) & ADDRMASK; /* incr mem addr */
|
||||
xma = (xma + 1) & AMASK; /* incr mem addr */
|
||||
if (PACKED (mt_cu)) { /* packed? */
|
||||
mtxb[p++] = (M[xma] >> 12) & 077;
|
||||
mtxb[p++] = (M[xma] >> 6) & 077;
|
||||
@@ -323,7 +323,7 @@ case FN_WRITE: /* write */
|
||||
if (st = sim_tape_wrrecf (uptr, mtxb, tbc)) /* write rec, err? */
|
||||
r = mt_map_err (uptr, st); /* map error */
|
||||
else {
|
||||
M[MT_CA] = (M[MT_CA] + wc) & 0777777; /* advance mem addr */
|
||||
M[MT_CA] = (M[MT_CA] + wc) & DMASK; /* advance mem addr */
|
||||
M[MT_WC] = 0; } /* clear word cnt */
|
||||
mt_cu = mt_cu & ~CU_ERASE; /* clear erase flag */
|
||||
break;
|
||||
@@ -339,7 +339,7 @@ case FN_WREOF:
|
||||
|
||||
case FN_SPACEF: /* space forward */
|
||||
do {
|
||||
M[MT_WC] = (M[MT_WC] + 1) & 0777777; /* inc WC */
|
||||
M[MT_WC] = (M[MT_WC] + 1) & DMASK; /* inc WC */
|
||||
if (st = sim_tape_sprecf (uptr, &tbc)) { /* space rec fwd, err? */
|
||||
r = mt_map_err (uptr, st); /* map error */
|
||||
break; }
|
||||
@@ -349,7 +349,7 @@ case FN_SPACEF: /* space forward */
|
||||
|
||||
case FN_SPACER: /* space reverse */
|
||||
do {
|
||||
M[MT_WC] = (M[MT_WC] + 1) & 0777777; /* inc WC */
|
||||
M[MT_WC] = (M[MT_WC] + 1) & DMASK; /* inc WC */
|
||||
if (st = sim_tape_sprecr (uptr, &tbc)) { /* space rec rev, err? */
|
||||
r = mt_map_err (uptr, st); /* map error */
|
||||
break; }
|
||||
|
||||
Reference in New Issue
Block a user