[Simh] VAX architecture

Bob Supnik bob at supnik.org
Sun Feb 21 10:15:40 EST 2016


The VAX architecture went through several major emendations - including 
both extensions and removals - from its initial version in the late 70s 
until it was "frozen" in 1990.

The architecture always deliberately excluded a couple of areas, in 
particular, IO, error handling, and the console. All of those were 
system specific.

The original VAX architecture specification was unveiled with the 11/780 
in late 1977. It included the "standard" instruction set and PDP11 
compatibility mode. It was amended, almost immediately, to include 
interlocked queues and G-floating and H-floating as part of the 
"standard" instructions. G- and H-floating were an attempt, futile as it 
turned out, to get VAX format adopted for the IEEE floating point 
standard by providing extended exponent range and quad precision 
floating point.

The next major revision occurred over 1982-1984 as part of the MicroVAX 
program. It included two major changes:
- Compatibility mode was made optional and deprecated. It was, in fact, 
dropped immediately by the full VAX systems then in the design stage 
(8800, 8200), because all compatibility mode software had been removed 
from VMS by that point.
- A "MicroVAX subset" was defined. This went through several iterations 
around memory management. Eventually, it settled on subsetting just the 
instruction set by removing h-floating and octaword, decimal, character 
string except MOVC3/5, etc. Floating point was allowed to be optional or 
F-/D- only, F-/G- only, or F-/D-/G- only. (MicroVAX I had two variants, 
F-/D- and F-/G-, due to control store size constraints. MicroVAX II was 
F-/D-/G-.) Certain IPRs were made optional as well, notably TODR.
Eventually, an "rtVAX subset" of memory management was also defined, per 
the previous mail discussion of subset memory management.

The tremendous success of MicroVAX II led to further dialog between the 
chip designers and the software groups on how the "subset VAX" 
definition could be refined to provide adequate performance on all VAX 
software. For example, new CRC algorithms employing byte- or word-wide 
tables clearly outperformed the CRC instruction's 4b algorithm. The 
COBOL group showed that shadowing packed decimal variables in binary 
performed as well as microcoded packed decimal. Consequently,  in late 
1986, the instruction set was restructured into a "core" set, several 
"application specific" subsets, and an emulated only set:
- The core set was the MicroVAX II subset, including F-/D-/G- floating, 
with the addition of six more string instructions (LOCC, SKPC, SPANC, 
SCANC, CMPC3, CMPC5) and the removal of nine floating point instructions 
(ACBf, POLYf, EMODf).
- Three application-specific subsets were defined: packed decimal, 
extended accuracy (h-floating), and the new vector instruction set.
- The emulated only set was MATCHC, MOVTC, MOVTUC, CRC, EDITPC, ACBf, 
EMODf, and POLYf.
As a "swing" design between the original MicroVAX II subset and the new 
definition, CVAX implemented the new string instructions and retained 
the deprecated floating point instructions. Rigel and NVAX were "core" 
only. The vector extension was codified too late for CVAX. It was 
implemented by Rigel/Mariah and the VAX9000 but dropped in NVAX due to 
lack of market success.

The last revision occurred in 1989 to define support for physical memory 
 > 1GB (inclusive of IO space). System space (S0) was extended from 1GB 
to 2GB - 32B (the reserve was needed because of how the compatibility 
exception reported register operands) to allow for larger process page 
tables. The PFN was extended from 21b to 25b by gobbling all the 
"software reserved" bits in the PTE. This allowed the VAX to support 4GB 
of virtual memory and 16GB of physical memory (inclusive of IO space). 
With the advent of Alpha, it was felt that larger physical memory 
support was not needed. After some back and forth, VMS limited its 
support to 4GB (32b) rather than 16GB (34b).

One major change was never implemented: Virtual VAX (1987). This allowed 
for virtualization in the VAX architecture, in support of a program 
called SeVMS (Secure VMS). It made small changes throughout the 
privileged architecture. A prototype was built using the Write Control 
Store on the 8800, but no product was ever shipped.

The VVAX proposal also included support for modify faults (faulting on 
writes with PTE<m> = 0) as a distinct option. This was implemented in NVAX.

VMS retained instruction compatibility for applications by providing 
emulators for all deprecated instructions as well as for all four 
formats of floating point (to support the goal of selling uVAX as a 
chip). This is determined at runtime, not by CPU model number, so it's 
perfectly feasible to have an emulated CVAX with vectors or a 780 
without POLYf, which never existed in the real world.

/Bob


More information about the Simh mailing list