I am looking at the machine code for the LGP-30, which is found to have a very strange instruction word layout.
- 12 ignored bits
- 4 bits for the opcode
- 2 more ignored bits
- 12 bits for the operand, consisting of:
- 6 bits for the track,
- 6 bits for the sector
- another two ignored bits
Initially, since half the instruction word is wasted space, I thought there would be an opportunity to basically double the memory available to executable code. But, no such luck: some of these bits are ignored for reasons relating to the timing of the sequentially accessed memory. Like, maybe the two ignored bits directly after the opcode are actually the time it spends decoding the opcode or something. And maybe the two ignored bits at the end of the instruction word are the time that the Counter gets updated in time for the next instruction word to be searched for.
But what about the rest? There is a full twelve bits at the start of the instruction word asking to be put to good use. Now, I don't know anything about the internal workings of the LGP-30, and even less about vacuum tubes and whatnot, but it seems obvious to put in:
- an immediate mode, so the operand is in the instruction word itself.
- some bits to select between a number of different memory drums
- conditional execution bit or something (could examine the sign bit in the accumulator, or the breakpoint switches on the front panel)
the possibilities are endless.
I appreciate the computer was meant to be as cheap as possible, and came in at under $50000. But I also can't picture any of the three options I listed as being too expensive. For example, if the LGP-30 had been implemented in the 70s, I imagine 1. and 3. just needing a single 74xx00.
So is there either:
- a timing-related reason why no functionality may be assigned to those ignored bits
- or a technical reason why no functionality can cheaply be assigned to those ignored bits
that explains why only half the instruction word is actually in use?