WD16

Last updated
Western Digital WD16
WD16 on AM-100.jpg
WD16 microprocessor in five 40-pin packages installed on an Alpha Microsystems AM-100 CPU board which connects to a S-100 bus.
General information
Launched1976;48 years ago (1976)
Common manufacturer
Performance
Max. CPU clock rate to 3.3 MHz
Data width16
Address width16
Architecture and classification
Instruction set PDP-11 like
Number of instructions119
Physical specifications
Package
  • 5 x 40-pin DIP
History
Successornone

The WD16 is a 16-bit microprocessor introduced by Western Digital in October 1976. It is based on the MCP-1600 chipset, a general-purpose design that was also used to implement the DEC LSI-11 low-end minicomputer and the Pascal MicroEngine processor. The three systems differed primarily in their microcode, giving each system a unique instruction set architecture (ISA).

Contents

The WD16 implements an extension of the PDP-11 instruction set architecture but is not machine code compatible with the PDP-11. [1] The instruction set and microcoding were created by Dick Wilcox and Rich Notari. [2] The WD16 is an example of orthogonal CISC architecture. Most two-operand instructions can operate memory-to-memory with any addressing mode and some instructions can result in up to ten memory accesses.

The WD16 is implemented in five 40-pin DIP packages. Maximum clock speed is 3.3 MHz. Its interface to memory is via a 16-bit multiplexed data/address bus. [3]

The WD16 is best known for its use in Alpha Microsystems' AM-100 and AM-100/T processor boards. [4] A prototype was demonstrated in 1977. [5] As of 1981 there were at least 5,000 Alpha Micro computers based on the WD16. [6] As late as 1982, WD16-based Alpha Micros were still being characterized as "supermicros." [7] The WD16 was superseded by the Motorola 68000 in June 1982. [8]

Memory

Data formats

The smallest unit of addressable and writable memory is the 8-bit byte. Bytes can also be held in the lower half of registers R0 through R5. [9]

16-bit words are stored little-endian with least significant bytes at the lower address. Words are always aligned to even memory addresses. Words can be held in registers R0 through R7.

32-bit double words can only be stored in register pairs with the lower word being stored in the lower-numbered register. 32 bit values are used by MUL, DIV and some rotate and arithmetic shift instructions.

Floating point values are 48 bits long and can only be stored in memory. This format is half-way between single and double precision floating point formats. They are stored an unusual middle-endian format sometimes referred to as "PDP-endian." Floating point values are always aligned to even addresses. The first word contains the sign, exponent, and high byte of the mantissa. The next higher address contains the middle two bytes of the mantissa, and the next higher address contains the lowest two bytes of the mantissa. The complete format is as follows:

1. A 1 bit sign for the entire number which is zero for positive.

2. An 8-bit base-two exponent in excess-128 notation with a range of +127, -128. The only legal number with an exponent of -128 is true zero (all zeros).

3. A 40 bit mantissa with the MSB implied.

1514760
Addr+0SExponentMantissa (high)
15870
Addr+2Mantissa(middle)
15870
Addr+4Mantissa(low)

Memory management

The WD16's 16-bit addresses can directly access 64  KB of memory. The WD16 does not offer any inherent memory management or protection. In the AM-100 application, the last 256 memory locations are mapped to port space. [10] As most AM-100 computers were used as multi-user computers, the memory would usually be expanded past 64K with bank switching. Although the AM-100 could be configured for up to 22 users and 512 Kilobytes of RAM, [6] a typical memory configuration for a 9-user AM-100 might be in the range of 352 Kilobytes. [11] In 1981 an optional AM-700 memory management unit was offered for the AM-100/T which allowed memory segmentation in 256 byte increments. [12]

CPU registers

WD16 registers
15141312111009080706050403020100(bit position)
Main registers
R0Register 0 / Count
R1Register 1
R2Register 2
R3Register 3
R4Register 4
R5Register 5
Stack pointer
R6 / SPRegister 6 / Stack Pointer
Program counter
R7 / PCRegister 7 / Program Counter
Status flags
 ALU N Z V C Processor Status Word

The CPU contains eight general-purpose 16-bit registers, R0 to R7. The registers can be used for any purpose with these exceptions: Register R7 is the program counter (PC). Although any register can be used as a stack pointer, R6 is the stack pointer (SP) used for hardware interrupts and traps. R0 is the count for the block transfer instructions. [9]

Addressing modes

Most instructions allocate six bits to specify each operand. Three bits select one of eight addressing modes and three bits select a general register. The encoding of the six bit operand addressing mode is as follows: [9]

5320
ModeRegister


In the following sections, each item includes an example of how the operand would be written in assembly language. Rn means one of the eight registers, written R0 through R7.

General register addressing modes

The following eight modes can be applied to any general register. Their effects when applied to R6 (the stack pointer, SP) and R7 (the program counter, PC) are set out separately in the following sections.

CodeNameExampleDescription
0nRegisterRnThe operand is in Rn
1nRegister deferred(Rn)Rn contains the address of the operand
2nAutoincrement(Rn)+Rn contains the address of the operand, then increment Rn
3nAutoincrement deferred@(Rn)+Rn contains the address of the address of the operand, then increment Rn by 2
4nAutodecrement−(Rn)Decrement Rn, then use the result as the address of the operand
5nAutodecrement deferred@−(Rn)Decrement Rn by 2, then use the result as the address of the address of the operand
6nIndexX(Rn)Rn+X is the address of the operand
7nIndex deferred@X(Rn)Rn+X is the address of the address of the operand

In index and index deferred modes, X is a 16-bit value taken from a second word of the instruction. In double-operand instructions, both operands can use these modes. Such instructions are three words long.

Autoincrement and autodecrement operations on a register are by 1 in byte instructions, by 2 in word instructions, and by 2 whenever a deferred mode is used, since the quantity the register addresses is a (word) pointer.

Program counter addressing modes

When R7 (the program counter) is specified, four of the addressing modes naturally yield useful effects:

CodeNameExampleDescription
27Immediate#nThe operand is the next word of the instruction
37Absolute@#aThe address of the operand is the next word of the instruction
67RelativeaThe address of the operand is the next word of the instruction added to the PC
77Relative deferred@aThe address of the address of the operand is the next word of the instruction added to PC

There are only two common uses of absolute mode, whose syntax combines immediate and deferred mode. The first is accessing the reserved processor locations at 0000-003F. The other is to specify input/output registers in port space, as the registers for each device have specific memory addresses. Relative mode has a simpler syntax and is more typical for referring to program variables and jump destinations. A program that uses relative mode (and relative deferred mode) exclusively for internal references is position-independent; it contains no assumptions about its own location, so it can be loaded into an arbitrary memory location, or even moved, with no need for its addresses to be adjusted to reflect its location. In computing such addresses relative to the current location, the processor performs relocation on the fly.

Immediate and absolute modes are merely autoincrement and autoincrement deferred mode, respectively, applied to PC. When the auxiliary word is in the instruction, the PC for the next instruction is automatically incremented past the auxiliary word. As PC always points to words, the autoincrement operation is always by a stride of 2.

Stack addressing modes

R6, also written SP, is used as a hardware stack for traps and interrupts. A convention enforced by the set of addressing modes the WD16 provides is that a stack grows downward—toward lower addresses—as items are pushed onto it. When a mode is applied to SP, or to any register the programmer elects to use as a software stack, the addressing modes have the following effects:

CodeNameExampleDescription
16Deferred(SP)The operand is on the top of the stack
26Autoincrement(SP)+The operand is on the top of the stack, then pop it off
36Autoincrement deferred@(SP)+A pointer to the operand is on top of stack; pop the pointer off
46Autodecrement−(SP)Push a value onto the stack
66IndexedX(SP)The operand is located X distance from the top of stack
76Indexed deferred@X(SP)The pointer to the operand is located X distance from the top of stack

Although software stacks can contain bytes, SP always points to a stack of words. Autoincrement and autodecrement operations on SP are always by a stride of 2.

Instruction set

Most of the WD16 instructions operate on bytes and words. Bytes are specified by a register number—identifying the register's low-order byte—or by a memory location. Words are specified by a register number or by the memory location of the low-order byte, which must be an even number. All opcodes and addresses are expressed in hexadecimal. [9]

Double-operand instructions

The high-order four bits specify the operation to be performed. Two groups of six bits specify the source operand addressing mode and the destination operand addressing mode, as defined above. This group of instructions takes up 75% of available opcodes.

1512119865320
OpcodeSrcRegisterDestRegister
OpcodeMnemonicOperation
1000ADDAdd: Dest ← Dest + Src
2000SUBSubtract: Dest ← Dest - Src
3000ANDAnd: Dest ← Dest ∧ Src
4000BICBit clear: Dest ← Dest ∧ (-1 - Src)
5000BISBit Set: Dest ← Dest ∨ Src
6000XORExclusive or: Dest ← Dest ⊻ Src
9000CMPCompare: Set-flags(Src − Dest)
A000BITBit test: Set-flags(Dest ∧ Src)
B000MOVMove: Dest ← Src
C000CMPBCompare byte: Set-flags(Src − Dest)
D000MOVBMove byte: Dest ← Src (Register destination sign-extends into bits 8-15)
E000BISBBit set byte: Dest ← Dest ∨ Src

Some two-operand instructions utilize an addressing mode for one operand and a register for the second operand:

159865320
OpcodeRegSrc/DestRegister

The high-order seven bits specify the operation to be performed, six bits specify the operand addressing mode and three bits specify a register or register pair. Where a register pair is used (written below as "Reg+1:Reg") Reg contains the low-order portion of the operand. The next higher numbered register contains the high-order portion of the operand (or the remainder).

OpcodeMnemonicOperation
7200LEALoad effective address: Reg ← ea(Dest)
73C0JMPJump: PC ← ea(Dest) (This is the same as LEA PC,Dest and shares the same opcode.)
7400ASHArithmetic shift: if Src < 0 then Reg ← Shift-right(Reg, -Src) else Reg ← Shift-left(Reg, Src)
7800XCHExchange: Reg ↔ Src
7A00ASHCArithmetic shift combined (32 bit): if Src < 0 then (Reg+1:Reg) ← Shift-right((Reg+1:Reg), -Src) else (Reg+1:Reg) ← Shift-left((Reg+1:Reg), Src)
7C00MULMultiply: (Reg+1:Reg) ← Reg × Src
7E00DIVDivide: Compute (Reg+1:Reg) ÷ Src; Reg ← quotient; Reg+1 ← remainder

Single-operand instructions

The high-order ten bits specify the operation to be performed, with bit 15 generally selecting byte versus word addressing. A single group of six bits specifies the operand as defined above.

1565320
OpcodeSrc/DestRegister
OpcodeMnemonicOperation
0BC0SWABSwap bytes of word: Dest ← (Dest × 256) ∨ (Dest ÷ 256)
8BC0SWADSwap digits of byte: Dest ← (Dest × 16) ∨ (Dest ÷ 16)
0840CLRClear: Dest ← 0
8840CLRB
0C00COMComplement: Dest ← (-1 - Dest)
8C00COMB
0C80INCIncrement: Dest ← Dest + 1
8C80INCB
0CC0DECDecrement: Dest ← Dest − 1
8CC0DECB
0C40NEGNegate: Dest ← -Dest
8C40NEGB
0B00SETSet: Dest ← -1
8B00SETB
0A80TSTTest: Set-flags(Src)
8A80TSTB
0A00RORRotate right: Dest:Cflag ← Rotate-right(Dest:Cflag, 1)
8A00RORB
0A40ROLRotate left: Cflag:Dest ← Rotate-left(Cflag:Dest, 1)
8A40ROLB
0B80ASRArithmetic shift right: Dest ← Dest ÷ 2, sign preserved
8B80ASRB
0AC0ASLArithmetic shift left: Dest ← Dest × 2
8AC0ASLB
8D80ADCAdd carry: Dest ← Dest + Cflag
8DC0SBCSubtract carry: Dest ← Dest - Cflag
0D00IW2Increment word by 2: Dest ← Dest + 2
0DC0TJMPTabled jump: PC ← PC + (Dest), PC ← PC + @PC
0D80TCALLTabled call: -(SP) ← PC, PC ← PC + (Dest), PC ← PC + @PC
0D40SXTSign extend: if N flag = 1 then Dest ← -1 else Dest ← 0
8D00LSTSLoad processor status: PSW ← Dest
8D40SSTSSave processor status: Dest ← PSW

Single-operand short immediate instructions

The high-order seven bits and bits 5 and 4 specify the operation to be performed. A single group of three bits specifies the register. A four bit count field contains a small immediate or a count. In all cases one is added to this field making the range 1 through 16.

159865430
OpcodeRegOpCount
OpcodeMnemonicOperation
0800ADDIAdd immediate: Reg ← Reg + Count + 1
0810SUBISubtract immediate: Reg ← Reg - Count - 1
0820BICIBit clear immediate: Reg ← Reg ∧ (-1 - (Count+1))
0830MOVIMove immediate: Reg ← Count + 1
8800SSRRRight rotate multiple: Reg:C-flag ← Rotate-right(Reg:C-flag, Count+1)
8810SSLRLeft rotate multiple: C-flag:Reg ← Rotate-left(C-flag:Reg, Count+1)
8820SSRARight arithmetic shift multiple: Reg:C-flag ← Arithmetic-shift-right(Reg, Count+1)
8830SSLALeft arithmetic shift multiple: C-flag:Reg ← Arithmetic-shift-left(Reg, Count+1)
8E00SDRRDouble right rotate multiple (33 bit): Reg+1:Reg:C-flag ← Rotate-right(Reg+1:Reg:C-flag, Count+1)
8E10SDLRDouble left rotate multiple (33 bit): C-flag:Reg+1:Reg ← Rotate-left(C-flag:Reg+1:Reg, Count+1)
8E20SDRADouble right arithmetic shift multiple (32 bit): Reg:Reg+1:C-flag ← Arithmetic-shift-right(Reg:Reg+1, Count+1)
8E30SDLADouble left arithmetic shift multiple (32 bit): C-flag:Reg:Reg+1 ← Arithmetic-shift-left(Reg:Reg+1, Count+1)

Floating point instructions

The high-order eight bits specify the operation to be performed. Two groups of four bits specify the source and destination addressing mode and register. If field I = 0, designated register contains the address of the operand, the equivalent of addressing mode (Rn). If field I = 1, designated register contains the address of the address of the operand, the equivalent of addressing mode @0(Rn).

158764320
OpcodeISRegIDReg
OpcodeMnemonicOperation
F000FADDFloating add: Dest ← Dest + Src
F100FSUBFloating subtract: Dest ← Dest - Src
F200FMULFloating Multiply: Dest ← Dest × Src
F300FDIVFloating Divide: Dest ← Dest ÷ Src
F400FCMPFloating Compare: Dest - Src

Block transfer instructions

The high-order ten bits specify the operation to be performed. Two groups of three bits specify the source and destination registers. In all cases the source register contains the address of the first word or byte of memory to be moved, and the destination register contains the address of the first word or byte of memory to receive the data being moved. The number of words or bytes being moved is contained in R0 as a unsigned integer. The count ranges from 1–65536. These instructions are fully interruptible.

1565320
OpcodeSRegDReg
OpcodeMnemonicOperation
0E00MBWUMove block of words up: (DReg) ← (SReg), SReg ← SReg + 2, DReg ← DReg + 2, R0 ← R0 - 1, until R0 = 0
0E40MBWDMove block of words down: (DReg) ← (SReg), SReg ← SReg - 2, DReg ← DReg - 2, R0 ← R0 - 1, until R0 = 0
0E80MBBUMove block of bytes up: (DReg) ← (SReg), SReg ← SReg + 1, DReg ← DReg + 1, R0 ← R0 - 1, until R0 = 0
0EC0MBBDMove block of bytes down: (DReg) ← (SReg), SReg ← SReg - 1, DReg ← DReg - 1, R0 ← R0 - 1, until R0 = 0
0F00MBWAMove block of words to address: (DReg) ← (SReg), SReg ← SReg + 2, R0 ← R0 - 1, until R0 = 0
0F40MBBAMove block of bytes to address: (DReg) ← (SReg), SReg ← SReg + 1, R0 ← R0 - 1, until R0 = 0
0F80MABWMove address to block of words: (DReg) ← (SReg), DReg ← DReg + 2, R0 ← R0 - 1, until R0 = 0
0FC0MABBMove address to block of bytes: (DReg) ← (SReg), DReg ← DReg + 1, R0 ← R0 - 1, until R0 = 0

Branch instructions

The high-order byte of the instruction specifies the operation. The low-order byte is a signed word offset relative to the current location of the program counter. This allows for forward and reverse branches in code. Maximum branch range is +128, -127 words from the branch op code.

In most branch instructions, whether the branch is taken is based on the state of the condition codes. A branch instruction is typically preceded by a two-operand CMP (compare) or BIT (bit test) or a one-operand TST (test) instruction. Arithmetic and logic instructions also set the condition codes. In contrast to Intel processors in the x86 architecture, MOV instructions set them too, so a branch instruction could be used to branch depending on whether the value moved was zero or negative.

15870
OpcodeOffset
OpcodeMnemonicCondition or Operation
0100BRBranch always PC ← PC + (2 × Sign-extend(Offset))
0200BNEBranch if not equal Z = 0
0300BEQBranch if equal Z = 1
0400BGEBranch if greater than or equal (N ⊻ V) = 0
0500BLTBranch if less than (N ⊻ V) = 1
0600BGTBranch if greater than (Z ∨ (N ⊻ V)) = 0
0700BLEBranch if less than or equal (Z ∨ (N ⊻ V)) = 1
8000BPLBranch if plus N = 0
8100BMIBranch if minus N = 1
8200BHIBranch if higher (C ∨ Z) = 0
8300BLOSBranch if lower or same (C ∨ Z) = 1
8400BVCBranch if overflow clear V = 0
8500BVSBranch if overflow set V = 1
8600BCC or BHISBranch if carry clear, or Branch if higher or same C = 0
8700BCS or BLOBranch if carry set, or Branch if lower C = 1

The limited range of the branch instructions meant that as code grows, the target addresses of some branches may become unreachable. The programmer would change the one-word Bcc to the two-word JMP instruction. As JMP has no conditional forms, the programmer would change the Bcc to its opposite sense to branch around the JMP.

1598650
OpcodeRegOffset
OpcodeMnemonicOperation
7600SOBSubtract One and Branch: Reg ← Reg - 1; if Reg ≠ 0 then PC ← PC - (2 × Offset)

SOB (Subtract One and Branch) is another conditional branch instruction. The specified register is decremented by 1 and if the result is not zero, a reverse branch is taken based on the 6-bit word offset.

Subroutine instructions

159865320
OpcodeRegSrcRegister
OpcodeMnemonicOperation
7000JSRJump to subroutine: -(SP) ← Reg; Reg ← PC; PC ← Src

JSR calls a subroutine. A group of six bits specifies the addressing mode. The JSR instruction can save any register on the stack. Programs that do not need this feature specify PC as the register (JSR PC, address) and the subroutine returns using RTN PC. If a routine were called with, for example, "JSR R4, address", then the old value of R4 would be saved on the top of the stack and the return address (just after JSR) would be in R4. This lets the routine gain access to values coded in-line by specifying (R4)+ or to in-line pointers by specifying @(R4)+. The autoincrementation moves past these data, to the point at which the caller's code resumes. Such a routine would specify RTN R4 to return to its caller.

The JSR PC,@(SP)+ form can be used to implement coroutines. Initially, the entry address of the coroutine is placed on the stack and from that point the JSR PC,@(SP)+ instruction is used for both the call and the return statements. The result of this JSR instruction is to exchange the contents of the PC and the top element of the stack, and so permit the two routines to swap control and resume operation where each was terminated by the previous swap.

15320
OpcodeReg
OpcodeMnemonicOperation
0018RTNReturn from subroutine: PC ← Reg; Reg ← (SP)+
0028PRTNPop stack and return: SP ← SP + (2 × @SP), PC ← Reg; Reg ← (SP)+

PRTN deletes a number of parameters from the stack and returns. PRTN is the WD16's answer to the PDP-11's convoluted MARK instruction. Unlike MARK, PRTN executes in program space and can use any register as a linkage register. For this explanation, R5 will be used as the linkage. First, the caller pushes R5 on the stack. Next, any number of word arguments may be placed on the stack. The caller then puts the number of argument words + 1 into R5. The caller executes a JSR R5,address instruction which pushes the number of argument words + 1 onto the stack, places the return address in R5, and jumps to the subroutine. After executing its code, the subroutine terminates with a PRTN R5. PRTN doubles the number on the top of stack and adds it to SP, deleting the parameters. PRTN then continues by returning to caller with the equivalent of an RTN R5, loading R5 into PC and popping R5.

Single register instructions

These instructions have a 13 bit opcode and a three bit register argument.

15320
OpcodeReg
OpcodeMnemonicOperation
0010IAKInterrupt acknowledge: Interrupt acknowledge state code, Reg ← Bus read
0020MSKOMask out: (002E) ← Reg, Mask out state code

Implied parameter instructions

150
Opcode
OpcodeMnemonicOperation
0000NOPNo operation: Do nothing
0001RESETReset: Transmit reset pulse to I/O devices
0002IENInterrupt enable: I2 ← 1
0003IDSInterrupt disable: I2 ← 0
0004HALTHalt: Executes the selected halt option
0005XCTExecute single instruction: PC ← (SP)+, PS ← (SP)+, set trace flag, execute opcode, -(SP) ← PS, -(SP) ← PC, trace flag reset, If no error PC ← (0020) else PC ← (001E)
0006BPTBreakpoint trap:-(SP) ← PS, -(SP) ← PC, PC ← (002C)
0007WFIWait for interrupt: Enable interrupts (I2 ← 1). Bus activity ceases.
0008RSVCReturn from supervisor call (B or C): REST, SP ← SP + 2, RTT
0009RRTTRestore and return from trap: REST, RTT
000ASAVESave registers: -(SP) ← R5, -(SP) ← R4, -(SP) ← R3, -(SP) ← R2, -(SP) ← R1, -(SP) ← R0
000BSAVSSave status: SAVE, -(SP) ← (002E), (002E) ← (002E) ∨ Mask, MSKO, IEN. Note Mask is stored in the second word of instruction.
000CRESTRestore registers: R0 ← (SP)+, R1 ← (SP)+, R2 ← (SP)+, R3 ← (SP)+, R4 ← (SP)+, R5 ← (SP)+
000DRRTNRestore and return: REST, PC ← (SP)+
000ERSTSRestore status: (002E) ← (SP)+, MSKO, REST, RTT
000FRTTReturn from trap: PC ← (SP)+, PS ← (SP)+

Supervisor calls

These instructions are used to implement operating system (supervisor) calls. All have a six bit register argument. SVCB and SVCC are designed so an argument to the operating system can use most of the addressing modes supported by the native instruction set.

15650
OpcodeArg
OpcodeMnemonicOperation
0040SVCASupervisor Call A: -(SP) ← PS ,-(SP) ← PC, PC ← (0022) + Arg × 2, PC ← (PC)
0080SVCBSupervisor Call B: TMPA ← SP, -(SP) ← PS, -(SP) ← PC, TMPB ← SP, -(SP) ← TMPA, -(SP) ← R5, -(SP) ← R4, -(SP) ← R3, -(SP) ← R2, -(SP) ← R1, -(SP) ← R0, R1 ← TMPB, R5 ← Arg × 2, PC ← (0024)
00C0SVCCSupervisor Call C: TMPA ← SP, -(SP) ← PS, -(SP) ← PC, TMPB ← SP, -(SP) ← TMPA, -(SP) ← R5, -(SP) ← R4, -(SP) ← R3, -(SP) ← R2, -(SP) ← R1, -(SP) ← R0, R1 ← TMPB, R5 ← Arg × 2, PC ← (0026)

Condition-code operations

1543210
OpcodeNZVC
OpcodeMnemonicOperation
0030LCCLoad condition codes: Load according to N, Z, V, C bits

The four condition codes in the processor status word (PSW) are

Reserved low-memory locations

Memory locations between 0000 and 003F have fixed functions defined by the processor. All addresses below are word addresses. [9]

VectorCondition
0000-0010R0 - R5, SP, PC, and PS for power up/halt options
0012bus error PC
0014nonvectored interrupt power fail PC
0016power up/halt option power restore PC
0018parity error PC
001Areserved op code PC
001Cillegal op code format PC
001EXCT error PC
0020XCT trace PC
0022SVCA table address
0024SVCB PC
0026SVCC PC
0028vectored interrupt (I0) table address
002Anonvectored interrupt (I1) PC
002CBPT PC
002EI/O priority interrupt mask
0030-003CFloating point scratchpad
003EFloating point error PC

Performance

WD16 processor speed varies by clock speed, memory configuration, op code, and addressing modes. Instruction timing has up to three components, fetch/execute of the instruction itself and access time for the source and the destination. The last two components depend on the addressing mode. For example, at 3.3 MHz, an instruction of the form ADD x(Rm),y(Rn) has a fetch/execute time of 3.3 microseconds plus source time of 2.7 microseconds and destination time of 3.0 microseconds, for a total instruction time of 9.0 microseconds. The register-to-register ADD Rm,Rn executes in 3.3 microseconds. Floating point is significantly slower. A single-and-a-half precision (48 bit) floating add instruction typically ranges from 54 to 126 microseconds. The WD16's precision is a compromise between traditional single and double precision floats. [9]

For contrast, the fastest PDP-11 computer at the time was the PDP-11/70. An instruction of the form ADD x(Rm),y(Rn) has a fetch/execute time of 1.35 microseconds plus source and destination times of 0.6 microseconds each, for a total instruction time of 2.55 microseconds. Any case where addressed memory was not in the cache adds 1.02 microseconds. The register-to-register ADD Rm,Rn could execute from the cache in 0.3 microseconds. [13] A single-precision floating add instruction executed by the FP11-C co-processor could range from 0.9 to 2.5 microseconds plus time to fetch the operands which could range up to 4.2 microseconds. [14]

The WD16 block transfer instructions approximately double the speed of moves and block I/O. A word moved with MOV (R1)+,(R2)+, SOB R0,loop instructions takes 9.6 microseconds per iteration. The MBWU R1,R2 equivalent takes 4.8 microseconds per iteration.

The Association of Computer Users performed a series of benchmarks on an AM-100T-based system costing $35,680 (equivalent to $131,941in 2023). They found that their CPU-bound benchmark executed in 31.4 seconds on the AM-100T compared to 218 seconds for the average single user system in the $15,000 to $25,000 price range. [15] In a group of multi-user computers priced between $25,000 and $50,000, the AM-100T was in the "upper third" for speed. [16]

The Creative Computing Benchmark of May 1984 placed the WD16 (in the AM-100T application) as number 34 out of 183 machines tested. The elapsed time was 10 seconds, compared to 24 seconds for the IBM PC. [17]

Emulator

Virtual Alpha Micro is an open source WD16 emulator. Written in C, it emulates the WD16 processor and the Alpha Micro AM-100 hardware environment. The author claims it runs on Linux (including Raspberry Pi), Windows, and Macintosh desktops, though no binaries are provided. It will run the Alpha Micro Operating System (AMOS) and all associated programs. In 2002, Alpha Micro granted limited permission to distribute AMOS 4.x or 5.0 binaries including the manuals for hobby use only. [18]

See also

PDP-11 architecture

Related Research Articles

<span class="mw-page-title-main">Data General Nova</span> 16-bit minicomputer series

The Data General Nova is a series of 16-bit minicomputers released by the American company Data General. The Nova family was very popular in the 1970s and ultimately sold tens of thousands of units.

<span class="mw-page-title-main">PDP-8</span> Minicomputer product line

The PDP-8 is a family of 12-bit minicomputers that was produced by Digital Equipment Corporation (DEC). It was the first commercially successful minicomputer, with over 50,000 units being sold over the model's lifetime. Its basic design follows the pioneering LINC but has a smaller instruction set, which is an expanded version of the PDP-5 instruction set. Similar machines from DEC are the PDP-12 which is a modernized version of the PDP-8 and LINC concepts, and the PDP-14 industrial controller system.

<span class="mw-page-title-main">Endianness</span> Order of bytes in a computer word

In computing, endianness is the order in which bytes within a word of digital data are transmitted over a data communication medium or addressed in computer memory, counting only byte significance compared to earliness. Endianness is primarily expressed as big-endian (BE) or little-endian (LE), terms introduced by Danny Cohen into computer science for data ordering in an Internet Experiment Note published in 1980. The adjective endian has its origin in the writings of 18th century Anglo-Irish writer Jonathan Swift. In the 1726 novel Gulliver's Travels, he portrays the conflict between sects of Lilliputians divided into those breaking the shell of a boiled egg from the big end or from the little end. By analogy, a CPU may read a digital word big end first, or little end first.

In computer science, an instruction set architecture (ISA) is an abstract model that generally defines how software controls the CPU in a computer or a family of computers. A device or program that executes instructions described by that ISA, such as a central processing unit (CPU), is called an implementation of that ISA.

<span class="mw-page-title-main">MCS-51</span> Single chip microcontroller series by Intel

The Intel MCS-51 is a single chip microcontroller (MCU) series developed by Intel in 1980 for use in embedded systems. The architect of the Intel MCS-51 instruction set was John H. Wharton. Intel's original versions were popular in the 1980s and early 1990s, and enhanced binary compatible derivatives remain popular today. It is a complex instruction set computer, but also has some of the features of RISC architectures, such as a large register set and register windows, and has separate memory spaces for program instructions and data.

x86 assembly language is the name for the family of assembly languages which provide some level of backward compatibility with CPUs back to the Intel 8008 microprocessor, which was launched in April 1972. It is used to produce object code for the x86 class of processors.

Addressing modes are an aspect of the instruction set architecture in most central processing unit (CPU) designs. The various addressing modes that are defined in a given instruction set architecture define how the machine language instructions in that architecture identify the operand(s) of each instruction. An addressing mode specifies how to calculate the effective memory address of an operand by using information held in registers and/or constants contained within a machine instruction or elsewhere.

The National Semiconductor COP8 is an 8-bit CISC core microcontroller. COP8 is an enhancement to the earlier COP400 4-bit microcontroller family. COP8 main features are:

The TMS9900 was one of the first commercially available, single-chip 16-bit microprocessors. Introduced in June 1976, it implemented Texas Instruments' TI-990 minicomputer architecture in a single-chip format, and was initially used for low-end models of that lineup.

In computer engineering, an orthogonal instruction set is an instruction set architecture where all instruction types can use all addressing modes. It is "orthogonal" in the sense that the instruction type and the addressing mode vary independently. An orthogonal instruction set does not impose a limitation that requires a certain instruction to use a specific register so there is little overlapping of instruction functionality.

<span class="mw-page-title-main">Clipper architecture</span> 32-bit RISC-like computing architecture

The Clipper architecture is a 32-bit RISC-like instruction set architecture designed by Fairchild Semiconductor. The architecture never enjoyed much market success, and the only computer manufacturers to create major product lines using Clipper processors were Intergraph and High Level Hardware, although Opus Systems offered a product based on the Clipper as part of its Personal Mainframe range. The first processors using the Clipper architecture were designed and sold by Fairchild, but the division responsible for them was subsequently sold to Intergraph in 1987; Intergraph continued work on Clipper processors for use in its own systems.

The Atmel AVR instruction set is the machine language for the Atmel AVR, a modified Harvard architecture 8-bit RISC single chip microcontroller which was developed by Atmel in 1996. The AVR was one of the first microcontroller families to use on-chip flash memory for program storage.

<span class="mw-page-title-main">TI-990</span> Series of 16-bit computers by Texas Instruments.

The TI-990 was a series of 16-bit minicomputers sold by Texas Instruments (TI) in the 1970s and 1980s. The TI-990 was a replacement for TI's earlier minicomputer systems, the TI-960 and the TI-980. It had several unique features, and was easier to program than its predecessors.

Little Computer 3, or LC-3, is a type of computer educational programming language, an assembly language, which is a type of low-level programming language.

Joel McCormack is an American computer scientist who designed the NCR Corporation version of the p-code machine, which is a kind of stack machine popular in the 1970s as the preferred way to implement new computing architectures and languages such as Pascal and BCPL. The NCR design shares no common architecture with the Pascal MicroEngine designed by Western Digital but both were meant to execute the UCSD p-System.[1,2]

<span class="mw-page-title-main">General Instrument CP1600</span>

The CP1600 is a 16-bit microprocessor created in a partnership between General Instrument and Honeywell, introduced in February 1975. It is one of the first single-chip 16-bit processors. The overall design bears a strong resemblance to the PDP-11.

The PDP-11 architecture is a 16-bit CISC instruction set architecture (ISA) developed by Digital Equipment Corporation (DEC). It is implemented by central processing units (CPUs) and microprocessors used in PDP-11 minicomputers. It was in wide use during the 1970s, but was eventually overshadowed by the more powerful VAX architecture in the 1980s.

An instruction set architecture (ISA) is an abstract model of a computer, also referred to as computer architecture. A realization of an ISA is called an implementation. An ISA permits multiple implementations that may vary in performance, physical size, and monetary cost ; because the ISA serves as the interface between software and hardware. Software that has been written for an ISA can run on different implementations of the same ISA. This has enabled binary compatibility between different generations of computers to be easily achieved, and the development of computer families. Both of these developments have helped to lower the cost of computers and to increase their applicability. For these reasons, the ISA is one of the most important abstractions in computing today.

<span class="mw-page-title-main">ST6 and ST7</span> 8-bit microcontroller product lines from STMicroelectronics

The ST6 and ST7 are 8-bit microcontroller product lines from STMicroelectronics. They are commonly used in small embedded applications like washing machines.

The PIC instruction set refers to the set of instructions that Microchip Technology PIC or dsPIC microcontroller supports. The instructions are usually programmed into the Flash memory of the processor, and automatically executed by the microcontroller on startup.

References

  1. Flystra, Daniel (April 1977). "New Hobbyist System Supports Timesharing" (PDF). Byte. 2 (4): 142–144. Retrieved 21 November 2022.
  2. Wilcox, Dick (January 1977). "A PDP-11-Like 16-Bit Micro for the S-100 Bus". Dr. Dobbs's Journal of Computer Calisthenics and Orthodontia. 2 (1): 3–7. Retrieved 14 June 2022.
  3. MCP-1600 Microprocessor Users Manual (PDF). Western Digital. 1975. Retrieved 28 April 2022.
  4. Stan, Viet (May 1983). "The Battle of the Disk Operating Systems" (PDF). Computers & Electronics. 21 (5): 19. Retrieved 8 June 2023.
  5. Craig, John (April 1977). "Around the Industry" (PDF). Kilobaud: The Small Computer Magazine (4): 10. Retrieved 23 November 2022.
  6. 1 2 Kee, Hank (August 1981). "Alpha Micro System Revisited" (PDF). Microsystems. 2 (4): 26. Retrieved 1 March 2022.
  7. Fox, Tom (January 1982). "Business Systems for '82". Interface Age. 7 (1): 75. Retrieved 3 November 2022.
  8. "Alpha Microsystems makes record sales". InfoWorld. 4 (44): 11. November 8, 1982. Retrieved 3 November 2022.
  9. 1 2 3 4 5 6 "WD16 Microcomputer Programmer's Reference Manual" (PDF). Western Digital. Retrieved 10 December 2021.
  10. "Technical Manual for AM-100" (PDF). Alpha Microsystems. Retrieved 19 December 2021.
  11. "Alpha Micro AM100". Obsolete Computer Museum. Retrieved 19 December 2021.
  12. Memory Management with the Memory Partition Controller (PDF) (A01 ed.). Alpha Micro. October 1981. pp. 139–155. Retrieved 14 June 2022.
  13. PDP-11/70 Processor Handbook (PDF). DEC. 1976. Appendix C, Instruction Timing.
  14. DEC PDP-11 Processor Handbook, 1975, Pages 379-391, FP11-C Instruction Timing
  15. "Alpha Micro AM-100T". Association of Computer Users Benchmark Report. 3.2 (6): 9. November 1980. Retrieved 3 November 2022.
  16. "12 Issue Summary". Association of Computer Users: Benchmark Report. 3.2 (14): 4. June 1982. Retrieved 3 November 2022.
  17. Ahl, David H. (May 1984). "Creative Computing Benchmark". Creative Computing Magazine. 10 (5): 6. Retrieved 2 November 2022.
  18. Noel, Mike. "VAM Virtual Alpha Micro" . Retrieved 13 July 2022.