diff --git a/VAX/vax410_defs.h b/VAX/vax410_defs.h index 7f75db7f..3f9d8766 100644 --- a/VAX/vax410_defs.h +++ b/VAX/vax410_defs.h @@ -45,10 +45,18 @@ 3002 0000 - 3FFF FFFF reserved */ -#ifdef FULL_VAX /* subset VAX */ +#ifdef FULL_VAX /* subset VAX */ #undef FULL_VAX #endif +#ifdef CMPM_VAX +#undef CMPM_VAX /* No Compatibility Mode */ +#endif + +#ifndef NOEXS_VAX +#define NOEXS_VAX 1 /* No Extra String Instructions Implemented */ +#endif + #ifndef _VAX_410_DEFS_H_ #define _VAX_410_DEFS_H_ 1 diff --git a/VAX/vax610_defs.h b/VAX/vax610_defs.h index b92e8d47..9b3ab3eb 100644 --- a/VAX/vax610_defs.h +++ b/VAX/vax610_defs.h @@ -36,10 +36,18 @@ 2000 2000 - 3FFF FFFF reserved */ -#ifdef FULL_VAX /* subset VAX */ +#ifdef FULL_VAX /* subset VAX */ #undef FULL_VAX #endif +#ifdef CMPM_VAX +#undef CMPM_VAX /* No Compatibility Mode */ +#endif + +#ifndef NOEXS_VAX +#define NOEXS_VAX 1 /* No Extra String Instructions Implemented */ +#endif + #ifndef VAX_610_DEFS_H_ #define VAX_610_DEFS_H_ 1 @@ -87,7 +95,7 @@ #define CPU_MODEL_MODIFIERS { MTAB_XTD|MTAB_VDV, 0, "LEDS", NULL, \ NULL, &cpu_show_leds, NULL, "Display the CPU LED values" }, \ - { MTAB_XTD|MTAB_VDV, 0, "MODEL", "MODEL={MicroVAX|VAXstation}", \ + { MTAB_XTD|MTAB_VDV, 0, "MODEL", "MODEL={MicroVAX|VAXStation}", \ &cpu_set_model, &cpu_show_model, NULL, "Set/Show the simulator CPU Model" } /* QVSS memory space */ @@ -143,6 +151,7 @@ extern t_stat cpu_show_memory (FILE* st, UNIT* uptr, int32 val, CONST void* desc #define LP_MBZ92_TEST(r) #define MT_AST_TEST(r) if ((r) > AST_MAX) RSVD_OPND_FAULT +#define IDX_IMM_TEST /* Qbus I/O modes */ diff --git a/VAX/vax630_defs.h b/VAX/vax630_defs.h index 0303b968..28e9962d 100644 --- a/VAX/vax630_defs.h +++ b/VAX/vax630_defs.h @@ -43,10 +43,18 @@ 3400 0000 - 3FFF FFFF reserved */ -#ifdef FULL_VAX /* subset VAX */ +#ifdef FULL_VAX /* subset VAX */ #undef FULL_VAX #endif +#ifdef CMPM_VAX +#undef CMPM_VAX /* No Compatibility Mode */ +#endif + +#ifndef NOEXS_VAX +#define NOEXS_VAX 1 /* No Extra String Instructions Implemented */ +#endif + #ifndef VAX_630_DEFS_H_ #define VAX_630_DEFS_H_ 1 diff --git a/VAX/vax730_defs.h b/VAX/vax730_defs.h index 8e9fd8db..76fc558d 100644 --- a/VAX/vax730_defs.h +++ b/VAX/vax730_defs.h @@ -38,7 +38,11 @@ */ #ifndef FULL_VAX -#define FULL_VAX 1 +#define FULL_VAX 1 /* Full Instruction Set Implemented */ +#endif + +#ifndef CMPM_VAX +#define CMPM_VAX 1 /* Compatibility Mode Implemented */ #endif #ifndef VAX_730_DEFS_H_ @@ -118,6 +122,7 @@ #define MT_AST_TEST(r) r = (r) & 07; \ if ((r) > AST_MAX) RSVD_OPND_FAULT +#define IDX_IMM_TEST /* Memory */ diff --git a/VAX/vax750_defs.h b/VAX/vax750_defs.h index 23609675..5d4f8c10 100644 --- a/VAX/vax750_defs.h +++ b/VAX/vax750_defs.h @@ -44,7 +44,11 @@ */ #ifndef FULL_VAX -#define FULL_VAX 1 +#define FULL_VAX 1 /* Full Instruction Set Implemented */ +#endif + +#ifndef CMPM_VAX +#define CMPM_VAX 1 /* Compatibility Mode Implemented */ #endif #ifndef VAX_750_DEFS_H_ @@ -139,6 +143,7 @@ #define MT_AST_TEST(r) r = (r) & 07; \ if ((r) > AST_MAX) RSVD_OPND_FAULT +#define IDX_IMM_TEST /* Memory */ diff --git a/VAX/vax780_bug_history.txt b/VAX/vax780_bug_history.txt index b4f32f44..f79c0e2f 100644 --- a/VAX/vax780_bug_history.txt +++ b/VAX/vax780_bug_history.txt @@ -61,7 +61,7 @@ Bugs Found And Fixed During Simulator Debug 58. POLYx: add step require truncation (proved by AXE tests). 59. Unaligned references to IO space: incorrect on CVAX. 60. REI to compatibility mode: PSL were not checked for mbz. - +61. Indexed immediate not does fault. diff --git a/VAX/vax780_defs.h b/VAX/vax780_defs.h index 4ddf47a1..c389d3d9 100644 --- a/VAX/vax780_defs.h +++ b/VAX/vax780_defs.h @@ -1,6 +1,6 @@ /* vax780_defs.h: VAX 780 model-specific definitions file - Copyright (c) 2004-2017, Robert M Supnik + Copyright (c) 2004-2019, Robert M Supnik Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), @@ -23,6 +23,7 @@ used in advertising or otherwise to promote the sale, use or other dealings in this Software without prior written authorization from Robert M Supnik. + 23-Apr-19 RMS Added hook for unpredictable indexed immediate .aw 18-May-17 RMS Added model-specific AST validation test 19-Jan-17 RMS Moved CR to BR6 (Mark Pizzolato) 29-Mar-15 RMS Added model specific IPR max @@ -54,7 +55,11 @@ */ #ifndef FULL_VAX -#define FULL_VAX 1 +#define FULL_VAX 1 /* Full Instruction Set Implemented */ +#endif + +#ifndef CMPM_VAX +#define CMPM_VAX 1 /* Compatibility Mode Implemented */ #endif #ifndef VAX_780_DEFS_H_ @@ -157,6 +162,7 @@ #define MT_AST_TEST(r) r = (r) & 07; \ if ((r) > AST_MAX) RSVD_OPND_FAULT +#define IDX_IMM_TEST /* Memory */ diff --git a/VAX/vax860_defs.h b/VAX/vax860_defs.h index 758e2b08..b86b7d68 100644 --- a/VAX/vax860_defs.h +++ b/VAX/vax860_defs.h @@ -74,7 +74,11 @@ */ #ifndef FULL_VAX -#define FULL_VAX 1 +#define FULL_VAX 1 /* Full Instruction Set Implemented */ +#endif + +#ifndef CMPM_VAX +#define CMPM_VAX 1 /* Compatibility Mode Implemented */ #endif #ifndef VAX_860_DEFS_H_ @@ -176,6 +180,7 @@ #define MT_AST_TEST(r) r = (r) & 07; \ if ((r) > AST_MAX) RSVD_OPND_FAULT +#define IDX_IMM_TEST /* Memory */ diff --git a/VAX/vax_cmode.c b/VAX/vax_cmode.c index 3725beae..49d466a2 100644 --- a/VAX/vax_cmode.c +++ b/VAX/vax_cmode.c @@ -40,7 +40,7 @@ #include "vax_defs.h" -#if defined (FULL_VAX) +#if defined (CMPM_VAX) #define RdMemB(a) Read (a, L_BYTE, RA) #define RdMemMB(a) Read (a, L_BYTE, WA) diff --git a/VAX/vax_cpu.c b/VAX/vax_cpu.c index 98509a50..1c646000 100644 --- a/VAX/vax_cpu.c +++ b/VAX/vax_cpu.c @@ -1,6 +1,6 @@ /* vax_cpu.c: VAX CPU - Copyright (c) 1998-2017, Robert M Supnik + Copyright (c) 1998-2019, Robert M Supnik Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), @@ -25,6 +25,8 @@ cpu VAX central processor + 23-Apr-19 RMS Added hook for unpredictable indexed immediate .aw + 14-Apr-19 RMS Added hook for non-standard MxPR CC's 31-Mar-17 RMS Fixed uninitialized variable on FPD path (COVERITY) 13-Mar-17 RMS Fixed dangling else in show_opnd (COVERITY) 20-Sep-11 MP Fixed idle conditions for various versions of Ultrix, @@ -253,11 +255,11 @@ int32 in_ie = 0; /* in exc, int */ int32 recq[6]; /* recovery queue */ int32 recqptr; /* recq pointer */ int32 hlt_pin = 0; /* HLT pin intr */ -int32 mxpr_cc_vc = 0; /* cc V & C bits from mtpr/mfpr operations */ int32 mem_err = 0; int32 crd_err = 0; int32 p1 = 0, p2 = 0; /* fault parameters */ int32 fault_PC; /* fault PC */ +int32 mxpr_cc_vc = 0; /* MxPR V,C bits */ int32 pcq_p = 0; /* PC queue ptr */ int32 badabo = 0; int32 cpu_astop = 0; @@ -902,20 +904,11 @@ for ( ;; ) { case AIN|VB: case AIN|WB: case AIN|WW: case AIN|WL: case AIN|WQ: case AIN|WO: -/* CHECK_FOR_PC; */ opnd[j++] = OP_MEM; case AIN|AB: case AIN|AW: case AIN|AL: case AIN|AQ: case AIN|AO: va = opnd[j++] = R[rn]; if (rn == nPC) { - if (DR_LNT (disp) >= L_QUAD) { - GET_ISTR (temp, L_LONG); - GET_ISTR (temp, L_LONG); - if (DR_LNT (disp) == L_OCTA) { - GET_ISTR (temp, L_LONG); - GET_ISTR (temp, L_LONG); - } - } - else GET_ISTR (temp, DR_LNT (disp)); + SETPC (PC + DR_LNT (disp)); } else { R[rn] = R[rn] + DR_LNT (disp); @@ -1426,10 +1419,15 @@ for ( ;; ) { break; case AIN: - CHECK_FOR_PC; index = index + R[rn]; - R[rn] = R[rn] + DR_LNT (disp); - recq[recqptr++] = RQ_REC (AIN | (disp & DR_LNMASK), rn); + if (rn == nPC) { + IDX_IMM_TEST; + SETPC (PC + DR_LNT (disp)); + } + else { + R[rn] = R[rn] + DR_LNT (disp); + recq[recqptr++] = RQ_REC (AIN | (disp & DR_LNMASK), rn); + } break; case AID: @@ -3069,18 +3067,18 @@ for ( ;; ) { break; case MTPR: - mxpr_cc_vc = cc & CC_C; + mxpr_cc_vc = cc & CC_C; /* std: V=0, C unchgd */ cc = op_mtpr (opnd); - cc = cc | (mxpr_cc_vc & (CC_V|CC_C)); + cc = cc | (mxpr_cc_vc & (CC_V|CC_C)); /* or in V,C */ SET_IRQL; /* update intreq */ break; case MFPR: - mxpr_cc_vc = cc & CC_C; + mxpr_cc_vc = cc & CC_C; /* std: V=0, C unchgd */ r = op_mfpr (opnd); WRITE_L (r); - CC_IIZZ_L (r); - cc = cc | (mxpr_cc_vc & (CC_V|CC_C)); + CC_IIZZ_L (r); /* set NV, clr VC */ + cc = cc | (mxpr_cc_vc & (CC_V|CC_C)); /* or in V,C */ break; /* CIS or emulated instructions */ diff --git a/VAX/vax_defs.h b/VAX/vax_defs.h index 0d8960e6..5ea0471a 100644 --- a/VAX/vax_defs.h +++ b/VAX/vax_defs.h @@ -1,6 +1,6 @@ /* vax_defs.h: VAX architecture definitions file - Copyright (c) 1998-2011, Robert M Supnik + Copyright (c) 1998-2019, Robert M Supnik Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), @@ -26,6 +26,7 @@ The author gratefully acknowledges the help of Stephen Shirron, Antonio Carlini, and Kevin Peterson in providing specifications for the Qbus VAX's + 23-Apr-19 RMS Added hook for unpredictable indexed immediate .aw 05-Nov-11 RMS Added PSL_IPL17 definition 09-May-06 RMS Added system PTE ACV error code 03-May-06 RMS Added EDITPC get/put cc's macros @@ -384,6 +385,16 @@ extern jmp_buf save_env; #define IE_EXC 0 /* normal exception */ #define IE_INT 1 /* interrupt */ +/* + * FULL_VAX If defined, all instructions implemented (780 like) + * CMPM_VAX If defined, compatibility mode is implemented. + * (Defined for 780, 750, 730 and 8600 only) + * NOEXS_VAX If defined, no extra string instructions. + * (Defined for MicroVAX I and II only) + * NOEXF_VAX If defined, no extra floating point instructions. + * (Available for future Rigel, Mariah and NVAX implementations) + */ + /* Decode ROM: opcode entry */ #define DR_F 0x80 /* FPD ok flag */ @@ -645,7 +656,7 @@ enum opcodes { #define STR_GETDPC(x) (((x) >> STR_V_DPC) & STR_M_DPC) #define STR_GETCHR(x) (((x) >> STR_V_CHR) & STR_M_CHR) #define STR_PACK(m,x) ((((PC - fault_PC) & STR_M_DPC) << STR_V_DPC) | \ - (((m) & STR_M_CHR) << STR_V_CHR) | ((x) & STR_LNMASK)) + (((m) & STR_M_CHR) << STR_V_CHR) | ((x) & STR_LNMASK)) /* Read and write */ @@ -933,6 +944,9 @@ extern void rom_wr_B (int32 pa, int32 val); #ifndef CPU_MODEL_MODIFIERS #define CPU_MODEL_MODIFIERS /* No model specific CPU modifiers */ #endif +#ifndef IDX_IMM_TEST +#define IDX_IMM_TEST RSVD_ADDR_FAULT +#endif #include "vax_watch.h" /* Watch chip definitions */ diff --git a/VAX/vaxmod_defs.h b/VAX/vaxmod_defs.h index cdbd14e3..d21c2ad5 100644 --- a/VAX/vaxmod_defs.h +++ b/VAX/vaxmod_defs.h @@ -67,10 +67,14 @@ 3400 0000 - 3FFF FFFF reserved */ -#ifdef FULL_VAX /* subset VAX */ +#ifdef FULL_VAX /* subset VAX */ #undef FULL_VAX #endif +#ifdef CMPM_VAX +#undef CMPM_VAX /* No Compatibility Mode */ +#endif + #ifndef VAXMOD_DEFS_H_ #define VAXMOD_DEFS_H_ 1