Interrupts edit
WD16 processor has three types of interrupts: vectored, non-vectored, and non-maskable (called "halt" in documentation.)
Vectored edit
Non-Vectored edit
"Datapoint 2200 Version II (CTC's parallel design) was much faster than the TMC 1795, which was slightly faster than the original serial design of the Datapoint 2200, which in turn was considerably faster than the 8008."
The serial design of the Datapoint 2200 was not faster than the Intel 8008. Even though this statement matches the reference cited, it appears that the cited reference is incorrect. Although the Datapoint 2200 version I is somewhat faster than an 8008 on many instructions, any reference to the 2200's shift-register memory incurs a giant 520µs delay. Also any JMP, CALL, or RETURN can incur a variable delay up to 520µs depending on the distance to the new address. Compare the instruction times:
Instruction | Description | Datapoint 2200 µs | 500 kHz Intel 8008 µs | |||
---|---|---|---|---|---|---|
ADB | Add B to A | 16 | 20 | |||
ADI nn | Add nn immediate to A | 16 | 32 | |||
ADM | Add memory to A | 520 | 32 | |||
JMP nn | Jump to nn | 24-520 | 44 | |||
CALL/RET | Call/Return pair | 520 | 64 | |||
Rcc (false) | Conditional return not taken | 16 | 12 |
Page 8-11 of the Datapoint 2200 Programmer's Manual of August 1971 gives an assembly language example of a delay routine. The documentation states that the delay routine decrements the delay counter at a rate of 2,000 counts per second. A 500 kHz Intel 8008 would execute this code at a rate of 5,319 counts per second, over twice as fast!
To show a most extreme example of the speed difference, I wrote a routine that would clear a 256 byte buffer located on a 256 byte boundary. The loop is just five instructions but unavoidably includes LMB and JFZ instructions, which are very slow. The 2200 will take about 266ms to execute. A 500 kHz 8008 will execute it in just 37ms, seven times faster! BTW: Using the expanded 8008 instruction set, the routine could be reduced to just three instructions, executing in 24ms.
The 2200 could only be faster than 8008 if almost 520µs of non-memory-reference instructions could be contained inside a loop. That is nearly impossible.
How do we correct this error without violating Wikipedia sourcing rules?