I agree that sounds pretty conclusive. I knew Wheeler had used his JUMP
with EDSAC, I had been wondering if Wilkes had something in his machine
(EDSAC II) - sounds like it was proposed. But I would not be surprised if
the idea was Wilkes, but Whirlwind implemented it. They all talked to
each other.
With apologies to Tom Lehrer ...
*"And then I write*
*By morning, night,*
*And afternoon,*
*And pretty soon*
*My name in Dnepropetrovsk is cursed, When he finds out I publish first."*
ᐧ
On Tue, Oct 25, 2022 at 1:01 PM Lawrence Stewart <stewart(a)serissa.com>
wrote:
I’ve just spent a fun hour looking at the old
Whirlwind documents. I
think I agree with Angelo.
The 1947 block diagrams and time-pulse charts show that the original “SP”
(subprogram) instruction transferred the low 11 bits of the instruction
directly to the program counter. They do not show the old program counter
being saved in the AR register, nor is there yet the “TA” (transfer
address) instruction to save the AR register to memory.
Evidently both these new features, which together provide a branch and
link function were likely described in memo M-647, which is not scanned
anywhere I can find. It is called “Some new orders for WWI"
There was already logic for the program counter to drive the bus, and
logic to capture the bus into the AR register, so the modification to SP to
save the old program counter was likely pretty easy: drive the bus from the
program counter, and capture it in AR, just by adding some new diodes to
the sequencer.
Adding the Transfer Address instruction was likely also pretty easy, since
there was a way for the AR register to drive the bus.
With the new SP and TA, one would use SP to call a subroutine, and the
first instruction of any subroutine would be TA to save the return address
into the final location of the subroutine. (TA only modified the low 11
bits of the 16 bit location)
Before these instructions, a subroutine call would require one additional
memory location, to hold the return address for each point of call, and one
additional instruction, one to load the return address into the accumulator
and one to store it into the code at the end of the subroutine. (The latter
could be the first instruction of the subroutine.)
Originally I thought that maybe David Wheeler invented the Link register,
since he’s often credited with inventing the subroutine, but it looks like
the particular thing he did was the idea of the “Wheeler Jump” where code
explicitly stores the return address into the instruction at the end of the
subroutine. That idea was used in Whirlwind as well. EDSAC I did not have
link, but it was proposed for EDSAC II. Whirlwind was likely first to
implement.
On 2022, Oct 25, at 4:35 AM, Angelo Papenhoff
<aap(a)papnet.eu> wrote:
On 25/10/22, Angelo Papenhoff wrote:
Might be earlier than this, I just happen to know
the Whirlwind somewhat
well. It's late 40s machine, so you probably won't find anything *much*
older.
Addendum: the original report from 1947 does not describe this behaviour
yet. The change came in oct. 1948. M-668 mentions it and refers to M-647,
which however is not available online.
So the concept of saving the resturn address in another register is at
least as old as oct. 1948, but again I wouldn't be surprised if some
even slightly earlier computer had it too.
aap