Path: utzoo!utgpu!news-server.csri.toronto.edu!rutgers!cs.utexas.edu!sdd.hp.com!uakari.primate.wisc.edu!unmvax!ariel.unm.edu!nmsu!opus!jthomas From: jthomas@nmsu.edu (James Thomas) Newsgroups: comp.arch Subject: Re: Odd word size? Word size? Word? Definitely Odd. Message-ID: <213@opus.NMSU.Edu> Date: 8 Oct 90 19:39:46 GMT References: <270CB430.21156@ics.uci.edu> Sender: news@NMSU.Edu Organization: NMSU Computer Science Lines: 80 In-reply-to: baxter@zola.ics.uci.edu's message of 5 Oct 90 16:26:24 GMT In article <270CB430.21156@ics.uci.edu> baxter@zola.ics.uci.edu (Ira Baxter) writes: ira> There has been recent query on machines with word sizes that ira> were not a power of two, related to algorithms that used binary addressing. ira> It has been a long time since I touched an IBM 1620 or 1401, and my ira> memory is a bit fuzzy on the details. Well, yeah :-) ira> Real oldtimers, feel free to ira> correct the fine details. Gee, I wonder if I qualify? I'll jump in anyway ::-{} ira> The 1401 was quite similar in style to the 1620, ira> so I'll skip describing it. Well, actually you mixed them up a bit ;-) ira> ... The 5th bit was called a "mark" bit. It was the seventh (or is it 0th? No, they were definitely little endian :-) bit on the 1401/1460/1410/7010 that was the "word mark". The 5th bit on the 1620 was a "flag" bit. ira> ... ira> There were no registers (take THAT! mr. optimal register allocator) ira> save some peculiar regions in lower memory that acted like index ira> registers; all operations were memory to memory. Well, the index registers were on the 14xx, three optional in the 1401 and five on the 1410. Or did the 1620-II or 1710 have index registers too? ira> ... One defined a numeric field at ira> runtime by applying a "SETMARK" instruction at addresses representing ira> Most Significant Digits of areas to be used as numbers, although I ira> think the assembler would arrange this for you automatically. Well, it was an "SF" ("Set Flag") on the 1620 and an "SW" ("Set Wordmark") on the 14xx. Yes, the assembler did it on the 1620, but the loader (for cards, not tape or disk) had to do same on the 14xx. ira> .. Instructions were 12 digits, a 2 digit opcode, and 2, ira> 5-digit addresses; I think the MSD of the opcode had to have the mark ira> bit set. No, there were no flags needed for defining the instructions. Immediate instructions needed flags for their immediate values. The flag also served as an indirect address flag "over" the low order digit of an address. ira> I forget precisely what happened when you gave an ira> odd-sized string to instructions that printed strings on the console, Nothing for odd-sized, but CHECK STOP for odd addresses. ira> ... ira> Earlier 1620s had a multiply instruction which worked by looking ira> up multipler/multiplicand digit pairs in the multiplication table ira> in lower memory. This table had to be loaded correctly before ira> you used multiply. There are apocryphal stories of folk loading ira> the table in such a way that multiplies worked in octal rather ira> than the standard decimal. Ah, you must have used a model II :-) The model I had add and multiply tables in memory. It was easy to do binary or octal adds, much harder to do multiplies. I don't think the stories are "apocryphal". I did it :-) ira> I don't remember any boolean operations such as AND or XOR. ira> They'd be a bit out place in a decimal machine, certainly out ira> of character. No smiley here? :-) ira> I suspect this machine would put a "C" programmer into a rubber room. Hmmmm, C on a 1620??? Just a few portability problems with char's that took two addresses :-) :-) ;-) Jim Thomas, aka Nothead, creator of the NOTHED assembler for the 1620 :-)