diff --git a/PDP10/ka10_iii.c b/PDP10/ka10_iii.c index 5577684..b132e3e 100644 --- a/PDP10/ka10_iii.c +++ b/PDP10/ka10_iii.c @@ -92,7 +92,7 @@ #define POS_Y 00000377700 #define CBRT 00000000070 /* Current brightness */ #define CSIZE 00000000007 /* Current char size */ -#define POS_X_V 16 +#define POS_X_V 17 #define POS_Y_V 6 #define CBRT_V 3 #define CSIZE_V 0 diff --git a/PDP10/kx10_cpu.c b/PDP10/kx10_cpu.c index a9f3ec1..07fa254 100644 --- a/PDP10/kx10_cpu.c +++ b/PDP10/kx10_cpu.c @@ -4273,6 +4273,8 @@ in_loop: } } } while (ind & !pi_rq); + + /* If not a JRST clear the upper half of AR. */ if (IR != 0254) { AR &= RMASK; } @@ -5776,7 +5778,7 @@ dpnorm: hst[hst_p].mb = AR; } MQ = 0; - AR = SWAP_AR; + AR = AR << 18; /* Move to upper half */ goto ufa; } #endif @@ -6223,7 +6225,7 @@ fnorm: if (((SC & 0400) != 0) ^ ((SC & 0200) != 0)) fxu_hold_set = 1; #endif - if (IR != 0130) { /* !UFA */ + if (IR != 0130 && IR != 0247) { /* !UFA and WAITS FIX */ fnormx: while (AR != 0 && ((AR & FPSBIT) != 0) == ((AR & FPNBIT) != 0) && ((AR & FPNBIT) != 0) == ((AR & FP1BIT) != 0)) { @@ -6293,6 +6295,18 @@ fnormx: check_apr_irq(); } #endif +#if WAITS + /* WAITS FIX Instruction. This can't occur if WAITS not set */ + if (IR == 0247) { + /* Extend sign if negative */ + if (flag1) + AR |= EMASK; + set_reg(AC, AR); + break; + } +#endif + + /* Set exponent */ SCAD = SC ^ ((AR & SMASK) ? 0377 : 0); AR &= SMASK|MMASK; AR |= ((uint64)(SCAD & 0377)) << 27; @@ -6304,6 +6318,7 @@ fnormx: MQ |= SMASK; } #else + /* FADL FSBL FMPL */ if ((IR & 07) == 1) { SC = (SC + (0777 ^ 26)) & 0777; @@ -6316,14 +6331,13 @@ fnormx: } } #endif + /* Kill exponent if 0 */ if ((AR & MMASK) == 0) AR = 0; - /* Handle UFA */ if (IR == 0130) { set_reg(AC + 1, AR); - break; } break;