The Museum of HP Calculators

HP Forum Archive 15

[ Return to Index | Top of Index ]

hp41cx line number branching using indirect.
Message #1 Posted by Hal on 20 Jan 2006, 6:33 p.m.

Hi Folks. With a 41(cx), can you not branch bockwards to a line number using a negative number stored in an indirect register? You can do this with virtually every other programmable HP on the planet (OK, maybe not with a 25). I can't seem to find any reference to it in volume 2 of the owners manual.
I'm trying to branch back 136 lines (from line 137 to line 1) using syntax as follows...
-136 sto 09
gto ind09

Upon execution it returns "nonexistant".
Any help appreciated.





      
Re: hp41cx line number branching using indirect.
Message #2 Posted by Namir on 20 Jan 2006, 6:53 p.m.,
in response to message #1 by Hal

Hal,

I ran a short tetst using GTO IND with a register containing -10. It seems that the 41C ignores the sign and look for LBL 10 (in my case).

In your example, the 41C is looking for LBL 136, which of course is outside the range of valid labels.

I suugest using a jump to a label. This approach allows you to insert code without worrying about keeping count of the corrected number of lines to jump.

Namir

      
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.

            
Re: hp41cx line number branching using indirect.
Message #4 Posted by hal on 20 Jan 2006, 8:23 p.m.,
in response to message #3 by Eric Smith

Thank you gentlemen for your help.
I suppose the need for RRB is somewhat negated by the fact there are infinite label names available with a 41. I was just trying to save steps and memory by not having to insert labels.
Anyway, thanks again and best regards, Hal

            
Re: hp41cx line number branching using indirect.
Message #5 Posted by Gene Wright on 20 Jan 2006, 10:44 p.m.,
in response to message #3 by Eric Smith

Another option, especially if the branching spans are constant and not variable, is to compute the jump distance, put it in alpha, do a RCL M and then a STO b, or such.

This allows for a direct movement of the program pointer and can really make it difficult to decode a program.

These ideas are described fairly well in the PPC ROM manual.


[ Return to Index | Top of Index ]

Go back to the main exhibit hall