I had a wonderful time at the Sep 28 2019 workshop. I could not attend Sunday in order to start the Jewish New Year properly with family and friends. I already followed up Eric Rangell's chording keyboard prototype with "much ado about chording keyboards". I was beyond impressed with Nevell Greenough's LPG-30 emulator. The front panel looks absolutely authentic, albeit with an LCD instead of the 3-trace oscilloscope. I frobbed an LGP-21 back in high school and I remember a lot about it. We geeked out about the strange opcodes that ENCOURAGED self modifying code, mostly out of necessity due to the lack of registers or stack. For example, there are 2 instructions for modifying the address field on an instuction. One saved the program counter plus 1 in the address field of an instruction. That's how it did subroutines: store the return address in the jump/branch instruction at the END of the subroutine, then jump to the subroutine start. Another saved the accumulator to the address field of an instruction. That was probably for address calculations in lieu of index registers. It's essentially a "move under mask" since the address field was NOT the entire word. http://ed-thelen.org/comp-hist/lgp-30.html <<< main page http://ed-thelen.org/comp-hist/lgp-30-man.html <<< programming manual But those intentionally PREVENTED any address overflow into the opcode. So how did Mel use an overflow to cause a branch? We think it's possible he incremented the address of a branch instruction by loading the entire instruction into the accumulator, adding to that and storing the accumulator back into (drum) storage. That's the only way to overflow the address over the 2 unused bits between the opcode and address to increment the jump into the instruction, which is a different jump/branch. And that's why Mel is *still* a "real programmer" :-) -- jeff jonas
Jeff, Our 1219 computer has some similar instructions: SADD stores the lower 12 bits of the lower accumulator in the address field of an instruction in memory. There are instructions to save the states of the index control register(ICR) and the SR register(page) usually into an Enter ICR instruction or a Enter SR instruction(enter is UNIVAC for load) to save/restore processor state on entering / exiting a sub-routine. The Return Jump instruction stored the program counter +1 into the first address of a subroutine and jumped to the following address. Exit is by an Indirect Jump to the same address. Duane On 10/17/2019 5:48 AM, Jeffrey Jonas via vcf-midatlantic wrote:
For example, there are 2 instructions for modifying the address field on an instuction.
One saved the program counter plus 1 in the address field of an instruction. That's how it did subroutines: store the return address in the jump/branch instruction at the END of the subroutine, then jump to the subroutine start.
Another saved the accumulator to the address field of an instruction. That was probably for address calculations in lieu of index registers. It's essentially a "move under mask" since the address field was NOT the entire word.
-- DuaneCraps sdɐɹɔ ǝuɐnp
participants (2)
-
Duane Craps -
Jeffrey Jonas