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:
committed by
Mark Pizzolato
parent
e2ba672610
commit
2688f2d26e
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user