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