# What kinds of input/output devices could the Electrologica X1 interface with (simultaneously)?

Here is a brief survey of the literature that I know of/have access to: The most complete description of the X1 that I am aware of is given in Dijkstra's 1959 PHD thesis, which describes in detail only punched tape and an electronic typewriter, while mentioning that the machine can deal with "a large number of such varied mechanisms simultaneously". B. J. Loopstra's 1958 article about the computer says that it could deal with punched cards as well, but doesn't go into detail about the related orders/instructions. Aretz Kruseman's The Dijkstra-Zonneveld ALGOL 60 compiler for the Electrologica X1 mentions that there were four Flexowriters at the Mathematical Centre in Amsterdam by the early sixties.

What kinds of peripherals could the X1 connect to, and what instructions/orders were available to interface with them? How many could it use at the same time?

• re the 4 flexowriters - these were likely offline devices, used for punching tape (and perhaps printing out punched tapes). Jan 4 at 17:35

what instructions/orders were available to interface with them?

While the thesis you linked only describes paper tape and typewriter, we can do an educated guess based on this description, compared with the general format of an "order" (instruction) as described throughout the thesis, and the binary format of an order as described in appendix B.

In the order description the paper tape and typewriter, what would be normally a 15-bit address in ordinary order is `1 XP` for the tape punch/reader and `2 XP` for the typewriter. Moreover, the communication orders use the letter `Y` if they affect register `A`, and the letter `Z` if they affect register `S`. Finally, we have input operations

``````0Y n    (A) + (..) -> (A)
1Y n    (A) - (..) -> (A)
2Y n        + (..) -> (A)
3Y n        - (..) -> (A)

0Z n    (S) + (..) -> (S)
1Z n    (S) - (..) -> (S)
2Z n        + (..) -> (S)
3Z n        - (..) -> (S)
``````

and output operations

``````6Y n        + (A) -> (..)
7Y n        - (A) -> (..)

6Z n        + (S) -> (..)
7Z n        - (S) -> (..)
``````

And if you compare this with appendix B, there's not much freedom in those orders, except for the choice of n, which has 15 bits.

So the educated guess is that n serves as an I/O address, with the two special addresses mentioned above for the tape punch/reader and the typewriter. It's unclear if the I/O addresses are treated differently from normal memory addresses or not.

That means that there are 2^15 = 32768 potential I/O addresses. So:

How many could it use at the same time?

If each device uses a single I/O address, and if the I/O addresses are distinct from memory addresses, then up to 32768. But likely some devices (e.g. the magnetic tapes) would use several I/O addresses. And this number is large enough to explain the "unlimited" claim that are made in some of the sources.

Also note that as mentioned in the thesis, strictly speaking it does not use them "at the same time" at the "micro level" (though it looks like it's done in parallel on the "macro level", as the thesis states), but it deals with them serially, using an interrupt mechanism.

So another potential limit is the reaction time of the devices; if the computer has to deal with too many devices, the illusion that all this happens "at the same time" will be lost due to the total delay.

As an side, they are even talking about using this interrupt mechanism to do a kind of multi-tasking, which is pretty amazing for that time.

What kinds of peripherals could the X1 connect to

Anything that would have an "I/O controller" connected to the internal bus, with a decoder for the I/O addresses specific to that device. So basically everything you could imagine.

The sources list most of the devices available at that time as options: paper tape, punch cards, printer, plotter, typewriter.

• Yes, the interruption mechanism is quite interesting. Up to seven different interruptions could be used, so that may place another sort of restriction. Excellent answer, thanks. Jan 4 at 12:44
• They also mention that devices could arbitrarily assigned to each of the interrupt groups (similar to how it works on real modern systems), that's why I didn't mention this as a restriction. I didn't read up on how they'd identify the device with the highest priority in each group; not sure if they had a good solution for this (but it's doable in principle). Jan 4 at 13:14
• Re: multitasking, Dijkstra would use the Electrologica X8, which is a descendant, to implement THE, one of the first OSes that took a systematic approach to its design, and which would strongly influence later microkernel systems. en.wikipedia.org/wiki/THE_multiprogramming_system Jan 5 at 6:40