On 3/11/23 14:34, Chuck Guzis via cctalk wrote:
On 3/11/23 13:28, Paul Koning wrote:
Dijkstra said as much when he evaluated the 1620 for possible use by the TU Eindhoven --
a big problem is that it was unable to handle arbitrary 8-bit data.
Perhaps I need to elaborate on my earlier response for those not
familiar with the 1620.
First of all, the 1620 is a decimal machine, digit addressable with bits
CF8421. C is the parity bit and only shows up on the console
display--it's not something that a program sees. Second of all, the
1620 has no user-addressable registers--it's all memory-to-memory.
Instructions are all 12 digits. Opcode 2 digits, P and Q fields 5 digits
each. *Variable word length*, with words being addressed by the
low-order digit and with the high-order digit flagged with the F bit.
Negative numbers have the F bit set in the lowest order digit. Words
may be grouped up into records, addressed by the lowest address of the
record and terminated with the record mark (x8x2x). Addition,
subtraction and multiplication on the CADET (model 1 1620) is done
through tables in low memory, which must be loaded after boot time to
get any useful work done.
There are two modes for typewriter/printer/card/tape I/O--numeric (each
digit represents a character) and alpha (pairs of digits represent
characters). There are a a couple of special non-numeric bit
combinations--the record mark (x8x2x bits), the numeric blank (x84xx)
and the group mark (used for disk I/O) (x842x); any may carry a flag
bit. As mentioned, the group mark is used for disk I/O when the
contents of a group may contain records. On other I/O devices, the
record mark determines the end of a record. There are rules about what
can be on odd- or even-address boundaries. for example, an instruction
must start on an even address boundary.
The numeric blank prints as a space when doing numeric I/O. Otherwise,
it cannot be used in math operations, nor can it be generated using
them--you read it from an I/O device and move it around.
There is no stack,but there is a single register that holds a single
return address when a Branch-and-transmit instruction is executed.
There is a single instruction that branches to the location held in that
register; the register itself is not addressable.
You can see that the limit is one call depth using this register--it's
most handy when debugging because it can be display on the console
lamps. Serious programs usually use the Branch and Transmit Immediate,
where the Immediate (Q) field is deposited just ahead of the branch
address. The custom is to use this field as a return address for
subroutines.
The 1620 comes with 20K digits of storage standard, with optional added
memory to 40K or 60K digits. The maximum length of a numeric value is
20K digits. Given the variable-length nature of the machine, clearing
memory to any value can be done with a single instruction.
Hope this provides some background for what irked Dijkgstra.
I should note that what I've described describes the Model 1 1620. The
model 2 was considerably improved and even had an option for binary
manipulation of values.
The IBM 1710 was essentially a 1620 with interrupts, added I/O
capabilities and a real-time clock and was used for industrial control.
--Chuck