The X1 was designed by the Mathematical Centre in Amsterdam, an academic organization that had been involved in computer design since 1947, and manufactured by Electrologica NV, a company formed expressly for the purpose of producing the machine.
The X1 was a solid-state binary computer ("completely transistorized") with magnetic core memory. Word-length was 27 bits and peripherals included punched and magnetic tape. It was one of the first European computers to have an interrupt facility.
The X1 was the subject of Edsger Dijkstra's Ph.D. dissertation, and the target of the first complete working ALGOL 60 compiler, completed by Dijkstra and Jaap Zonneveld. In 1965, the X1 was superseded by the X8. Electrologica was taken over by Philips a few years later.
The X1 allowed conditional execution of every instruction, not just branches as is the case in most computers. A similar capability existed in the Zuse Z22 and the ZEBRA, and much later in the ARM architecture. The approach used in the X1 is more flexible than these others: it makes execution conditional on the current state of the condition flag that is set by a previous instruction if it includes a modifier for that purpose, but untouched otherwise. As a result, conditional execution can be based on tests made some number of lines earlier, rather than being conditional only based on the result of the most recent arithmetic operation. This allowed for compact expression of programs. The following example demonstrates the loading of the value of memory at n into the accumulator A, calling a subroutine (which presumably uses that value in A), and finally setting A to be the absolute value of the number read:
2A n P // copy [n] to A, set condition flag to "yes" if positive 6T fn 0 // call the function at fn, which will return with the condition flag preserved N 5P AA // if condition flag is "no", copy -A to A
The X1 arithmetic operators used binary ones' complement arithmetic.
The X1 included a simple assembler in its read-only memory. It has rather basic features: symbolic addresses may be defined, but symbols are only two letters long. Instructions are named by a combination of a digit representing the operation, and a letter designating the register to be operated on, or one or two letters indicating an operation class. For example, "0A" means "add memory content to accumulator A", and "5P" means "set an accumulator to the negative of another accumulator". The normal use of symbolic addresses is to name "paragraphs", i.e., related blocks of code or data. The symbolic addresses would be modified by a "line number" (a numeric offset) and a "page number" (a number in the range 0 to 31). For example, "3 FE 6" is line number 3, page number 6, representing an offset of 195 (6 * 32 + 3) from the start of paragraph FE. This address notation is a peculiarity of the assembler; the hardware addressing simply uses 15 bit addresses.