60-Bit Computing (2022)
thechipletter.substack.com
thechipletter.substack.com
- Ones' complement (rather than two's complement) binary representation of integers, and thus the need to cope with "-0" in your code. Modern programmers are surprised that there was a day when "-1" had a different binary representation than today.
- The CPU/CPUs were not actually 'in charge' of the machine. There were ten 12-bit processors called PPU's (peripheral processing units) which did all I/O, and which had the unique capability of doing an "Exchange Jump" instruction to do a CPU task switch. In a sense, the CPUs were 'compute peripherals' to the PPUs.
- The architecture was fascinating in terms of memory hierarchy. The "centeral memory" used by the CPUs was augmented by a much larger "extended memory" (ECS - Extended Core Storage) with block transfer primitives. One could implement high-scale systems (such as the one I worked on - PLATO) that smoothly staged data between CM, ECS, and disk.
In those days, there was a necessarily-direct relationship between the machine language (the bit encoding of instructions for operations & registers) and the assembly language (COMPASS). As a developer it was incredibly enjoyable because, in Ellen Ullman's words, you felt very 'close to the machine'.
There were no LOAD or STORE instructions. Instead there were "address" registers (18 bits wide), matched to each "operand" (60 bit data) register.
When you updated an address register, that memory address was automatically read into the correspond operand register. Except for the last couple address registers - updating them performed a write from the corresponding operand into memory.
By our current way of thinking, it seems arse about. But it worked well when you understood it, and apparently improved concurrency. Loads and stores became sort-of transparent. (Remembering that memory was as fast, sometimes faster than the CPU, so a few instructions saved was worth the occasional unnecessary load.)
See "Design of a Computer, The Control Data 6600" by J E Thornton.
The models are isomorphic.
Write to an "address" register -> write to a register directly
Write to an "operand" register -> write to "(register)" (write to the memory at the address stored in the register)
Not sure which was the first architecture to model it that way. The PDP-11 had it.
You just need one bit in the instruction encoding to determine whether to use direct or indirect access. You need one bit in the instruction encoding if you have twice the registers.
You can save that bit if you make most instructions able to access the "operand" register only, and require that manipulation of the "address" register use special instructions.
In that case you have an "inverse load / store" architecture, where instead of using load store instructions to do indirect access you use them to do direct access.
Before that, six bit words were very common with plenty of 12, 18 and 36 bit machines (every PDP besides the 11, CDC 160, UNIVAC, early IBMs)...
Some also had variable word length like the IBM 1401 and 1620.
MIT Whirlwind is in some ways ancestor to all modern computers by switching to bit-parallel architecture with multiple bits being handled at a time.
36bit word length became common for scientific applications because it was apparently considered enough to do equivalent of 10 digit precision in fixed precision arithmetic, thus common pattern of 36 among American scientific computer lines.
Later common availability of 4bit components like 74xxx families meant that multiplies of 4 bits started being common.
4bits also allow to handle calculations in BCD form, which had obvious use cases in businesses, which is partially why S/360 which attempted to consolidate IBMs scientific and business lines went with 32bit word length - 8 bit was comfortably 2 BCD digits and also would fit one character of then-upcoming ASCII standard (the reason EBCDIC survives in S/360 is that ASCII was not yet ready and IBM decided to extend their existing codes instead of taking unfinished standard that could change - and they had to hardcode it in some devices back then)
The final nail in 36bit and longer word lengths was floating point becoming fast enough - and arguably infighting between VAX and PDP-10 groups at DEC which among other things triggered existence of BSD Sockets API and their horrible legacy on networking.
Some notorious exceptions are the ENIAC and Whirlwind 1 which indeed were fully parallel.
As for 36-bit machines, they were also popular because of LISP, as a cons cell was 2x18 bits. I think this influenced the design of the PDP-6 and 10.
And yeah, I also wished DEC didn't kill the PDP-10 for the VAX, but that's another story.
And Lisp in turn took its "memory word is a cons cell because you can fit two addresses in one word" from a 36bit IBM scientific computer with 15 bit addressing.
For people who don't know:
Tag space included both CDR-coding (compression mechanism for linked lists), datatype tags, as well as formed portion of the instructions if the word contained instructions - on 3600 and Ivory each word could contain 1 or 2 instructions.
>And yeah, I also wished DEC didn't kill the PDP-10 for the VAX, but that's another story.
The DEC-20 was 6x faster than VAX-11/780 on at least one benchmark (that I wrote when I had access to both in the 80s..). DEC-20 was a PDP-10 implemented in ECL, it was quite fast.
> While most dekatrons are decimal counters, models were also made to count in base-5 and base-12 for specific applications.
Source: https://en.m.wikipedia.org/wiki/Dekatron
I’ve personally played on the Harwell Dekatron, it’s a fun machine
It's not "standardization" when only one model from one company is doing it.
The 8-bit byte was common in microcomputers and as they grew to dominate people's programming, you could claim it became some kind of de facto standard in the 70s or 80s. The de facto standard was documented by a standards body in the 90s. FWIW, in a CS program in the 90s, I was taught that 8-bit was most common, but not "standard."
https://en.wikipedia.org/wiki/Byte#cite_note-ISO_IEC_2382-1_...
Word length was even less common across architectures, but again, we ended up setting current definitions based on microcomputer use.
With 8 bits you have a reasonable instruction space, simple access to a 16-bit address space, and a good platform for ASCII.
It's a minimal viable CPU - powerful enough to get non-trivial general purpose work done, easy to package into VLSI, and cheap enough to sell in quantity.
But the design went in the opposite direction. The original micro - in terms of market positioning - was the PDP-8, and that was 12-bits. The 16-bit PDP-11s were a step up from the 8, and the 8080 etc were a step back down.
That machine could be brought up in single user or multitasking modes: it could support 1, 2 or 3 people programming BASIC or run larger applications like
https://en.wikipedia.org/wiki/Colossal_Cave_Adventure
in single-user mode on the printing terminal.
A bigger school, like one in Milford, NH, had a PDP-11 with about 20 terminals and an OS called RSTS/E that was mainly used to let people log in and use BASIC the way they would on a Commodore PET or TRS-80 except it was timesharing, it had tape storage and some kind of primitive hard drive.
By the late 1980s Manchester Memorial got a VAX-11 which was similar to the 386 in architecture and ran an OS very much like Linux. They would teach you to program in PASCAL using the compiler on the command line, there were maybe 8 terminals in the classroom and then another 8 or so terminals in other parts of the school to run administrative applications.
DEC never found its footing in a microprocessor world. It is not difficult to make a PDP-8 on FPGA
https://hackaday.io/project/179357-pdp-8-fpga
and Digital had made single chip "microprocessor" versions of the PDP-11 and the VAX-11. DEC could have made a machine based on a single-chip PDP-11 that would have competed with the IBM Personal Computer in some ways but would have faced the problem that user space memory addresses were 16-bit. For a "personal" computer you want to run 1 big BASIC and not 10 little BASICs. The IBM PC had a terribly hackish way to access a 640k user space but developers thought it was worth the hassle.
Similarly, other vendors like Motorola and Intel and National Semi were trying to develop a model for "32-bit" machines similar to the VAX, one can imagine that Digital might have aggressively transitioned the VAX line to "microcomputers". A VAX workstation would have trounced an IBM PC AT. Maybe Apple would have switched to VAX when Motorola came apart and Intel might be remembered as a RAM manufacturer.
http://www.bitsavers.org/pdf/dec/competitiveAnalysis/
You can feel the desperation..
6-bit chars were popular on this machine since you could fit two in one word, and uppercase only a thing. Strings in BASIC used 6-bit chars, but you could PRINT all ASCII (especially control characters) with a special PNT() function (only usable as a PRINT argument). If you look at the available OS/8 images, you'll find "business BASIC"- at least one change compared to regular OS/8 basic was support for 8-bit strings.
Floppies used 8-bit bytes. You wasted 4-bits out of every two for image files.
https://en.wikipedia.org/wiki/DECmate#/media/File:VT78.jpg
Also, the VT78's precursor was the PDP8/f which was little bigger than an altair, definitely in the microcomputer camp.
It is when that company is IBM and the model is their new platform that all of their future systems will be based on. They were a juggernaut back in those days, more than Microsoft is today.
You could pack upper and lowercase roman letters and numerals for a total of 62 characters and then have room for a period and space and you’re full. With only uppercase you can a decent set of symbols, see the SIXBIT encoding
https://rabbit.eng.miami.edu/info/decchars.html
that Digital used for file names back when there was a computer industry on the US East Coast. If you wanted something general purpose you’d need to add some kind of shift to get lower case characters if not additional symbols and control characters, but now the meaning of the characters depends on state which might have been seen as a burden on the peripherals of the day and is certainly more of a hassle to program. Note it was seen as decisive that IBM’s 360 used 8-bit characters that could have fit the ASCII code but they went with the 8-bit
https://en.wikipedia.org/wiki/EBCDIC
code instead because it was easier to make compatible with older keypunch machines.
Already 8-bit is looking like overkill, I think the control characters were not really properly utilized in 7-bits, 8-bits let you fit some combination of extra symbols, modified roman letters used in other european languages, and such. You can’t cover every European language in 8 bits (which is why they had different code pages) but you could get most latin variants and probably some other sets like Greek, Cyrillic, even Japanese Kana, in 10-bits but hardly anyone wants to use all those characters at the same time.
If you had a sixty bit computer you might also consider a 5-bit code set like
6 bits is too few for a lower- and uppercase alphabet, digits and punctuation.
7 bits could have worked (see: ascii), but I guess 8 won because 7 would be an odd (no pun intended) choice and because of the popularity of the VAX.
“The cells marked as reserved for extensions (which use the LS code again a second time—just after the first LS code—to shift from the figures page to the letters shift page) has been defined to shift into a new mode. In this new mode, the letters page contains only lowercase letters, but retains access to a third code page for uppercase letters, either by encoding for a single letter (by sending LS before that letter), or locking (with FS+LS) for an unlimited number of capital letters or digits before then unlocking (with a single LS) to return to lowercase mode.”
In computing, using such ‘shift’ codes complicates programming, though, as it makes it hard to compute string length or to index into a string (similar to the problem with UTF-8). Worse, if you see a given code sequence in a larger sequence, you may have to go arbitrarily far back in the input to figure out what it means.
[1] https://www.ibm.com/docs/en/cobol-zos/6.4?topic=arithmetic-s...
Before the IBM System/360, there were "scientific" computers, which were word-oriented and used binary arithmetic, and "business" computers, which were character-oriented and used decimal arithmetic. The IBM System/360 unified the product lines with a standardized architecture.
There are probably lots of similar problems; this is just one that I thought of while writing recent code.
But C used 9-bits for chars, for better compatibility between word and char pointers.
When enabling text mode transfers in these systems, newlines gets translated from LF to CRLF on the DOS side.
I expect you meant 8 bits for char!
Interesting, in long lived cases this could be considered another form of "technical debt", or "impedance mismatch", but due to ephemeral requirements.
but noooo.....
"60 is a multiple of 1, 2, 3, 4, 5, and 6. Hence bytes of length from 1 to 6 bits can be packed efficiently into a 60-bit word without having to split a byte between one word and the next. If longer bytes were needed, 60 bits would, of course, no longer be ideal. With present applications, 1, 4, and 6 bits are the really important cases."
That seems like a weird conclusion for the engineers to come to, because 60 is also a multiple of 10, 12, 15, 20, 30 and (of course) 60 (the complement factors of 1, 2, 3, 4, 5 and 6), so a selection of longer bytes are very obviously available.
Given that they balked at the cost of moving up to 64-bit words, I guess moving up to 420-bit computing (for those 7-bit bytes) was out of the question ;-)
"60 is a multiple of 1, 2, 3, 4, 5 and 6. Hence bytes of length 1 to 6 bits can pe packed efficiently into a 60-bit word...
We do not know the actual reasons for the Sumerian number system. The best we have is post hoc claims and just so stories.
There is no indication that early computer science was beholden to the Babylonian number system "for historical reasons."
http://www.bitsavers.org/pdf/bendix/g-15/T29_PR-1_Tech_Bulle...