User:Moonythedwarf/VAX

TODO: sources.

Processor Architecture
The VAX instruction set architecture is a 32-bit CISC design with 16 general purpose registers and a large, mainframe like instruction set. It uses variable length and regularly encoded instructions that can range from 1 to 110 bytes. Memory accesses are little endian, can be unaligned (except with interlocked instructions), and can be 1, 2, 4, 8, or 16 bytes long. The encoding is simplistic and regular, following a  format with no deviations. VAX provides instruction-level functionality for integer, floating point and binary-coded decimal (BCD) arithmetic; common operations like memory copy and memory compare; and a number of other tasks.

Microcode
VAX designs are entirely microcoded, implementing complex tasks like integer to string conversion as a microcode routine instead of as random logic to save space. Many superminicomputer VAX models provide writable control store, which allows end users to implement their own instructions for the machine, or augment existing ones. The microcode varies depending on the machine, and is not the same between models. Microcode is also used to implement instruction decoding on some models, in lieu of more complex decoding hardware.

Floating point and BCD arithmetic
The VAX instruction set provides instructions for operating on floating point numbers, providing four different formats to use for different levels of precision. Alongside this, it provides instructions for operating on BCD numbers with up to 31 digits and a sign, and supports doing elementary arithmetic directly on these strings of digits. The machine supports doing elementary arithmetic on floating point numbers, alongside evaluating any univariate polynomial equation of up to 31 degrees, which can be used to implement more complex functions like sine or square root.

PDP-11 backwards compatibility
In order to facilitate an easier transition from the PDP-11 to VAX machines, many early VAX machines provided support for executing PDP-11 user code directly using a compatibility mode. This functionality is incapable of running PDP-11 programs that ran on bare metal, but was usable as a way to run programs written for a PDP-11 operating system under a VAX operating system.

Instruction set
TODO: wording, consider examples.

VAX, like many computers at the time of it's design, is made to be human friendly and orthogonal, minimizing the work imposed on the programmer when directly writing assembly. To support this, it standardizes the encoding and operands to work for all instructions, avoiding specialization and permitting it's 16 operand types to be used freely. It also provides instructions that implement certain complex tasks in microcode, including memory copy, number to string conversion, and saving/restoring registers in bulk.