|Re: hp41cx line number branching using indirect.|
Message #3 Posted by Eric Smith on 20 Jan 2006, 8:01 p.m.,
in response to message #1 by Hal
The HP-41 family does not include any capability of branching to a line number, or the "rapid reverse branching" of some earlier HP models.
However, the HP-41 has less need for such a feature. The main purpose of rapid reverse branching was to speed up loops by avoiding a label search. But the HP-41 compiles GTOs. When program execution first encounters the GTO, it finds the target label, and stores the address in the GTO instruction. On subsequent executions of that GTO, no label search is required.
Editing the program will decompile it.
I don't think RRB can be implemented by synthetic programming, because the RRB routine would have to read the program memory to determine the lengths of the program lines, and reading the program memory as data would "normalize" it, possibly destroying the program. Anyhow, use of synthetic programming for this would be much slower than the label search.
On the other hand, it's possible to implement either a "GTO line number" funcction or an RRB function by custom microcode. Aside from the time needed to develop the microcode, this would require
an MLDL/HEPAX/Clonix type of device to store the microcode.
However, such a microcode function would usually still be slower than using a LBL and compiled GTO, at least for reverse branches, because of the 41's variable length instructions. When the program pointer is at line 42, and you want to get to line 39, the only way to do that is to count forward from the beginning of the program. This is what the non-programmable functions "GTO .nnn" and BST do, and explains why BST is slow on large programs.