Path: utzoo!utgpu!news-server.csri.toronto.edu!rutgers!uwm.edu!zaphod.mps.ohio-state.edu!sdd.hp.com!decwrl!sgi!rpw3@rigden.wpd.sgi.com From: rpw3@rigden.wpd.sgi.com (Rob Warnock) Newsgroups: comp.arch Subject: Re: Looking for a really odd computer Message-ID: <71390@sgi.sgi.com> Date: 8 Oct 90 11:02:55 GMT References: <2721@crdos1.crd.ge.COM> Sender: guest@sgi.sgi.com Reply-To: rpw3@sgi.com (Rob Warnock) Organization: Silicon Graphics, Inc., Mountain View, CA Lines: 60 In article <2721@crdos1.crd.ge.COM> davidsen@crdos1.crd.ge.com (bill davidsen) writes: +--------------- | The question is, has anyone ever made a general purpose computer with an | odd word size? +--------------- I almost forgot! The ancient & venerable LGP-30 (Royal Precision, Librascope Division, circa 1959) was a drum machine with 4096 words of *31* bits each. The accumulator, which recirculated continuously, was actually 32 bits, but when you did a store to memory only the upper 31 bits got stored. The "32nd" bit was a separator between words in memory, giving needed time to turn the write gate on and off, so it was forced to zero. The instructions (all 16 of them!) did not fill the word length, and were not aligned with anything in particular. As I recall, it was: 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |T| |op code| | track | sector | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ <---- memory address ---> The "T" ("transfer") bit was an extension to the opcode that affected only the branch and halt instructions, making them conditional. Data input from the Flexowriter in "4-bit mode" or "6-bit mode" was shifted in from the right. In either mode, the low-order 4 or 6 bits of whatever character you typed went in. "Bit 31" of the accumulator (the "32nd" bit) was included in the I/O shift-in, so the low order bit of the last byte input was dropped when you stored a word (unless you multiplied the accumulator by two first, which was needed for single-character input of the 6-bit set). The character code assignments for the opcode mnemonics were cleverly (?) arranged so that when typing in the bootstrap (which was actually called a "shoelace", there being a larger "bootstrap" which came next), one typed assembly language with absolute addresses. A load -- or as the LGP-30 called it, "bring" -- instruction was opcode 1, which value was also produced by "b". Thus "b1234" became 0001 0001 0010 0011 0100, or opcode 1, track 18, sector 13. Because bit "32" wasn't stored, and because the sector address was one bit up from the bottom of the word, memory addresses incremented in 4's. That is, one counted memory as 0, 4, 8, j, 10, 14, 18, 1j, 20, 24... Oh yes, since "a" was already used for "add", "b" for "bring", and "d" for "divide", to avoid confusion (!?!), they had to use other letters for hexidecimal numbers: 0-9, f, g, j, k, q, w. [Seemed natural enough at the time; it was the first hex I learned!] -Rob ----- Rob Warnock, MS-9U/510 rpw3@sgi.com rpw3@pei.com Silicon Graphics, Inc. (415)335-1673 Protocol Engines, Inc. 2011 N. Shoreline Blvd. Mountain View, CA 94039-7311