1
0
mirror of https://github.com/open-simh/simh.git synced 2026-04-28 04:55:13 +00:00

Notes For V3.2-2

RESTRICTION: The PDP-15 FPP is only partially debugged.  Do NOT
enable this feature for normal operations.
RESTRICTION: The HP DS disk is not debugged.  DO NOT enable this
feature under any circumstances.

1. New Features in 3.2-2

None

2. Bugs Fixed in 3.2-2

2.1 SCP

- Fixed problem ATTACHing to read-only files (found by John Dundas)
- Fixed problems in Windows terminal code (found by Dave Bryan)
- Fixed problem in big-endian reads (reported by Scott Bailey)

2.2 GRI-909

- Updated MSR to include SOV
- Updated EAO to include additional functions

2.2 HP2100 (from Dave Bryan)

- Generalized control character handling for console terminal

2.3 VAX

- Fixed bad block initialization routine
This commit is contained in:
Bob Supnik
2004-07-17 11:55:00 -07:00
committed by Mark Pizzolato
parent e2ba672610
commit 2688f2d26e
11 changed files with 193 additions and 97 deletions

View File

@@ -25,6 +25,7 @@
cpu GRI-909 CPU
17-Jul-04 RMS Revised MSR, EAO based on additional documentation
14-Mar-03 RMS Fixed bug in SC queue tracking
The system state for the GRI-909 is:
@@ -731,6 +732,9 @@ case AO_IOR:
break; }
if ((AX + AY) & CBIT) MSR = MSR | MSR_AOV; /* always calc AOV */
else MSR = MSR & ~MSR_AOV;
if (SIGN & ((AX ^ (AX + AY)) & (~AX ^ AY))) /* always calc SOV */
MSR = MSR | MSR_SOV;
else MSR = MSR & ~MSR_SOV;
return t;
}
@@ -778,21 +782,41 @@ if (cpu_unit.flags & UNIT_NOEAO) return stop_opr; /* EAO installed? */
if (op == EAO_MUL) { /* mul? */
t = AX * AY; /* AX * AY */
AX = (t >> 16) & DMASK; /* to AX'GR1 */
GR[0] = t & DMASK; }
if (op == EAO_DIV) { /* div? */
GR[0] = t & DMASK;
}
else if (op == EAO_DIV) { /* div? */
if (AY && (AX < AY)) {
t = (AX << 16) | GR[0]; /* AX'GR1 / AY */
GR[0] = t / AY; /* quo to GR1 */
AX = t % AY; } /* rem to AX */
AX = t % AY; /* rem to AX */
MSR = MSR & ~MSR_L; } /* clear link */
else MSR = MSR | MSR_L; /* set link */
}
else if (op == EAO_ARS) { /* arith right? */
t = 0; /* shift limiter */
if (AX & SIGN) MSR = MSR | MSR_L; /* L = sign */
else MSR = MSR & ~MSR_L;
do { /* shift one bit */
AY = ((AY >> 1) | (AX << 15)) & DMASK;
AX = (AX & SIGN) | (AX >> 1);
GR[0] = (GR[0] + 1) & DMASK; }
while (GR[0] && (++t < 32)); /* until cnt or limit */
}
else if (op == EAO_NORM) { /* norm? */
if ((AX | AY) != 0) { /* can normalize? */
while ((AX & SIGN) != ((AX << 1) & SIGN)) { /* until AX15 != AX14 */
AX = ((AX << 1) | (AY >> 15)) & DMASK;
AY = (AY << 1) & DMASK;
GR[0] = (GR[0] + 1) & DMASK; } }
}
ao_update ();
return SCPE_OK;
}
uint32 ao_sf (uint32 op)
{
if (((op & 2) && (MSR & MSR_AOV)) || /* arith carry? */
((op & 4) && (SIGN & /* arith overflow? */
((AX ^ (AX + AY)) & (~AX ^ AY))))) return 1;
((op & 4) && (MSR & MSR_SOV))) return 1; /* arith overflow? */
return 0;
}