dmr(a)plan9.bell-labs.com wrote:
The 3B2 was not the same machine as the one in 5ESS,
which
was/is the 3B20D, a fairly large duplexed machine (two processors
that mutually checked each other). The 3B2 was a desktop.
The 3B20D wasn't sold commercially, as far as I know. There
was a 3B20S (multi-cabinet) that at least nominally
was commercially available.
Their ISAs were not quite the same, but some assembler language
tricks made the assembler-level languages look quite similar.
That brings back memories ...
If I remember correctly, all of the "real" members of the 3B family
(i.e. 3B2, 3B5, 3B15 and 3B20) shared a common "virtual"
instruction set called (I think) IS25 - it was the job of the assembler
to translate IS25 into the actual machine code for the specific
processor used in each machine.
IS25 was a little curious because it only defined those instructions
that were likely to be of use to the C compiler - thus there was a
"push" instruction so that the compiler could push function arguments
onto the stack, but no "pop" instruction because the C compiler
never generated it.
The 3B2 was also quite "ahead of it's time" in having a soft power
switch (i.e. one that signalled the sytem to shut down and power
off rather than simply cutting the power) and the ability to (attempt
to) reconfigure itself when new hardware was installed. This latter
feature involved automatically relinking the kernel and rebooting
the system and it was not uncommon to get into an infinite loop
where, each time the system booted, it decided that the current
system configuration didn't quite match the booted kernel and
proceeded to relink yet another kernel and reboot.