Just catching up, still about a dozen digests behind!
What are the most bizarre, way-out or just plain
*different* machines
that folks have seen?
Well how about a machine with a normal instruction set but no program
counter?
It has a 48 bit word, and most instructions are 24 bits, with a few
48 bit ones.
It has three 'Control Registers', and normally at least one has a
unconditional absolute jump instruction in it, which jumps to the
next word.
After a single length instruction is executed, it gets one added to
it (in binary coded decimal), and it gets moved from control register
(CR) 1 to CR3. At the same time, CR3 goes to CR2 and CR2 goes to CR1
ready for execution.
If it is a jump instruction things are a bit different, the original
CR2 and CR3 are saved in the 'A' register and the value at the
address specified in the jump instruction gets put into CR1 and CR2
instead of the old values of CR2 and CR3. CR1 still gets incremented
and put in CR3.
Simple enough so far, but what about conditional jumps and procedure
calls?
On a condition jump where the condition is true, the top 8 bits of
the instruction get cleared, which makes it into an unconditional jump.
A procedure call (which can be conditional or unconditional) is just
a jump instruction. What makes it a procedure call is in the function
itself. It stores the A register in memory, usually at the word after
the end of the routine. When the program reaches it end, it executes
this word. If the procedure call was in the second (bottom) half of
the word, then it will execute a jump instruction to the word after
the word where the function call was made from. If the procedure call
was in the first (top) half of the word, then it will first execute
what had been in the second half of the word, which could itself be a
procedure call, which actually works out just fine if you think about
it.
Now I hear your objections - no recursion, no re-entrancy etc. But
this machine had no interrupts, and if you really needed recursion
then you could implement a stack in software and save the A-register
in that stack. Anyway, with a maximum of 2000 (yes 2000 not 2048)
words of store and overlays on drum backing store or magnetic tape,
programs could not be huge anyway.
Other weirdness: pound shillings and pence arithmetic in hardware
with a variable ten shillings position register, so than digits to
the left were decimal (radix 10), the addressed digit was radix 2,
the next digit was decimal, the next was radix 12 and the rest were
decimal. This even had a multiply instruction which could multiply a
LSD amount by a decimal amount. Division was all in software.
The machine was designed in the late 1950s, first delivered 1962
(such a long gestation that it was the only ICT/ICL machine where all
the promised applications software/libraries was ready before the
first machine shipped). It a collaboration between the British
Tabulating Machine company (which had recently given up its rights to
use all IBM designs and patents!) and the British General Electric
Company, Telephone division based in Coventry. By the time it
shipped, BTM had become ICT (International Computers and Tabulators)
and went on to be merged with almost all the other British computer
companies to become ICL (International Computers Ltd).
Somewhere between 155 and 200 of these ICT 1300 series machines were
made up to becoming obsolete in 1965. As I understand it, in 1965
there were 950 computers in Britain, so a large proportion were of
this type, though of course some were exported.
Another weird machine, the CHLL, Compacted High Level Language
computer. Executed Coral 66 (a real time variant of Algol 60) in
microcode. It was a 24 bit machine but instructions could be any
multiple of 3 bits, and could start on any 3 bit boundary. Top 21
bits of program counter were word address and the bottom 3 bits were
the 3 bit byte address within the word. The machine was flyable, but
otherwise a normal computer which could have a teletype, paper tape
reader and punch attached. Only two made (one ground prototype and
one flyable).