All VAX: Fix REI check when compatibilty mode. From Bob Supnik

The rule check on the PSL was incomplete. DV, FU, IV must all be zero,
and they weren't checked at all.

VAX Diagnostic EVKAE now runs to completion.
This commit is contained in:
Mark Pizzolato 2016-07-14 11:32:20 -07:00
parent 553bc357b9
commit 83bf230a47
2 changed files with 10 additions and 5 deletions

View file

@ -1,6 +1,6 @@
/* vax_cmode.c: VAX compatibility mode /* vax_cmode.c: VAX compatibility mode
Copyright (c) 2004-2008, Robert M Supnik Copyright (c) 2004-2016, Robert M Supnik
Permission is hereby granted, free of charge, to any person obtaining a Permission is hereby granted, free of charge, to any person obtaining a
copy of this software and associated documentation files (the "Software"), copy of this software and associated documentation files (the "Software"),
@ -26,6 +26,7 @@
On a full VAX, this module implements PDP-11 compatibility mode. On a full VAX, this module implements PDP-11 compatibility mode.
On a subset VAX, this module forces a fault if REI attempts to set PSL<cm>. On a subset VAX, this module forces a fault if REI attempts to set PSL<cm>.
14-Jul-16 RMS Updated PSL check (found by EVKAE 6.2)
28-May-08 RMS Inlined physical memory routines 28-May-08 RMS Inlined physical memory routines
25-Jan-08 RMS Fixed declaration (Mark Pizzolato) 25-Jan-08 RMS Fixed declaration (Mark Pizzolato)
03-May-06 RMS Fixed omission of SXT 03-May-06 RMS Fixed omission of SXT
@ -63,7 +64,7 @@ void WrRegW (int32 val, int32 rn);
t_bool BadCmPSL (int32 newpsl) t_bool BadCmPSL (int32 newpsl)
{ {
if ((newpsl & (PSL_FPD|PSL_IS|PSL_CUR|PSL_PRV|PSL_IPL)) != if ((newpsl & (PSL_FPD|PSL_IS|PSL_CUR|PSL_PRV|PSL_IPL|PSW_DV|PSW_FU|PSW_IV)) !=
((USER << PSL_V_CUR) | (USER << PSL_V_PRV))) ((USER << PSL_V_CUR) | (USER << PSL_V_PRV)))
return TRUE; return TRUE;
else return FALSE; else return FALSE;

View file

@ -1,6 +1,6 @@
/* vax_cpu1.c: VAX complex instructions /* vax_cpu1.c: VAX complex instructions
Copyright (c) 1998-2012, Robert M Supnik Copyright (c) 1998-2016, Robert M Supnik
Permission is hereby granted, free of charge, to any person obtaining a Permission is hereby granted, free of charge, to any person obtaining a
copy of this software and associated documentation files (the "Software"), copy of this software and associated documentation files (the "Software"),
@ -23,6 +23,10 @@
used in advertising or otherwise to promote the sale, use or other dealings used in advertising or otherwise to promote the sale, use or other dealings
in this Software without prior written authorization from Robert M Supnik. in this Software without prior written authorization from Robert M Supnik.
14-Jul-16 RMS Corrected REI rule 9
21-Jun-16 RMS Removed reserved check on SIRR (Mark Pizzolato)
18-Feb-16 RMS Changed variables in MxPR to unsigned
29-Mar-15 RMS Added model-specific IPR max
15-Mar-12 RMS Fixed potential integer overflow in LDPCTX (Mark Pizzolato) 15-Mar-12 RMS Fixed potential integer overflow in LDPCTX (Mark Pizzolato)
25-Nov-11 RMS Added VEC_QBUS test in interrupt handler 25-Nov-11 RMS Added VEC_QBUS test in interrupt handler
23-Mar-11 RMS Revised idle design (Mark Pizzolato) 23-Mar-11 RMS Revised idle design (Mark Pizzolato)
@ -1193,7 +1197,7 @@ Rule SRM formulation Comment
6 tmp<25:24> LEQ tmp<23:22> tmp<cur_mode> LEQ tmp<prv_mode> 6 tmp<25:24> LEQ tmp<23:22> tmp<cur_mode> LEQ tmp<prv_mode>
7 tmp<20:16> LEQ PSL<20:16> tmp<ipl> LEQ PSL<ipl> 7 tmp<20:16> LEQ PSL<20:16> tmp<ipl> LEQ PSL<ipl>
8 tmp<31,29:28,21,15:8> = 0 tmp<mbz> = 0 8 tmp<31,29:28,21,15:8> = 0 tmp<mbz> = 0
9 tmp<31> = 1 => tmp<cur_mode> = 3, tmp<prv_mode> = 3>, tmp<fpd,is,ipl> = 0 9 tmp<31> = 1 => tmp<cur_mode> = 3, tmp<prv_mode> = 3>, tmp<fpd,is,ipl,dv,fu,iv> = 0
*/ */
int32 op_rei (int32 acc) int32 op_rei (int32 acc)
@ -1545,7 +1549,7 @@ return cc;
int32 op_mfpr (int32 *opnd) int32 op_mfpr (int32 *opnd)
{ {
int32 prn = opnd[0]; uint32 prn = (uint32)opnd[0];
int32 val; int32 val;
if (PSL & PSL_CUR) /* must be kernel */ if (PSL & PSL_CUR) /* must be kernel */