B.Bibby wrote:
The calling routine first stores the return address in the subroutine's last command, i.e. "JMP return_address”.
Mmm, not quite so general, but might do the trick. It rules out certain patterns of calls: you can't have a subroutine directly or eventually calling itself. But then, even though the Minicomputer as described does have a link register, it's hard to imagine they could arrange a stack very readily. In fact I wonder if the link register is only able to provide for one level of subroutine - so, it's useful for the leaf routines and makes them cheaper to call, but any other call might well need to do something like your description. (I've previously come across the Wheeler Jump, which is slightly different: the caller modifies the first instruction of the subroutine then jumps to the second. The subroutine exits by jumping to (or through) its first word. There must be pros and cons to both ways.
Quote:
I am at a loss to understand how they might implement any of the ALU’s logical functions by a look-up table.
Yes, I can't quite see it. It's remarkable enough that they add by repeated increment and decrement. Maybe we can get some insight by studying the stats they give for some subroutines:
Attachment:
Screen Shot 2018-12-19 at 21.12.49.png
For example, an 8-byte table to test a bit: that's 16 nibbles, which means you can map from a nibble to a nibble. Still don't quite see how that helps... I suppose with the shift operation, you could always arrange to test bit 0, in which case you use your nibble map to return either a zero or a non zero for each of the 16 values of input. That could work. To test bit 2 you need first to shift twice.
BTW there's an adjacent paper which turns out to be unrelated: Hooper's
The minicomputer, a programming challenge - so don't read that as I did, hoping for related insights.