Musings and comments about our common interest
Miscellaneous comments HP41CL - initialization and basic problem solving.
For all HP41CL users: travel may affect your calculator. The HP41CL circuit is quite sensitive to small loses of power, and when being hit while traveling, it may lost part of the programming.
I have used extensively two different HP41CL units. Both of them were sensitive to hits. The faults that could appear were basically two:
The unit would not recognize plugged ROMs. In this case, the solution wasn’t to plug it again, since it wouldn’t work; it was enough to re-enable the memory management using the HP41CL command MMUEN. Then you would find that everything was still where you left it.
The unit would not work well, and get stuck in a strange display. This display would not follow the same pattern always. This was a worse kind of failure, and it always implied to leave the calculator without its batteries for at least 15 minutes, plug the batteries without starting it for another 15 minutes, and then re-start it with backspace-on. You would get a “memory lost” message, and all your programming and configuration would be lost. It will work as a plain HP41CL, but none of the features you bought would be available. You need to re-initialize it. I am sorry for that!
My standard initialization procedure follows here (and this is how my customers receive their calculators):
First clear the memory management unit with the following command:
XEQ Alpha MMUCLR Alpha
Then start loading necessary modules:
Alpha YFNZ Alpha XEQ Alpha PLUG1L Alpha - loading the YFNZ version of the utilities in the lower part of port 1
Alpha PWRL Alpha XEQ Alpha PLUG1U Alpha - loading the PWRL version of the utilities in the upper part of port 1
Alpha 804040–8120 Alpha XEQ Alpha YPOKE Alpha - loading the Library #4
Then, the system is ready to receive any ROM module, including those that use the Library#4 (Basically most of the modules created by Angel Martín)
Then, I usually enter just the Advantage Pac and the latest version of Sandmath that I have in my CL - currently SM33, Sandmath 3x3.
I have just loaded in my tall keys hp41c the latest modules that I didn’t have, and I have refreshed the key assigns, that were quite old. I have made a mix of work related needs, curiosity programs and help to my children’s school chores.
Work related: most of my day job relates to financial control. It involves analysis of production investments, business plans, etc. These are often discussed in meetings, and then you need to be really fast to give a solution - an it’s quite difficult to have an open computer during the meeting, lest the colleagues are led to believe that you’re emailing while they’re discussing! So the logical choice is to use a calculator.
While you can imagine that I have all of them, my go-to calculators are the hp15c (that I have equipped with time value of money, net present value, internal return rate, percentage of total value, days between two dates and weighted averages (we sell tons of different products at different margins, so a weigthed average calculation, based on the statistical values registered, makes a lot of sense). All of this consumes around 210 steps of memory, leaving enough room to solve a 3*3 equation system (that I may have to solve together with my children)
In addition, the 15c I have in the jacket pocket, so if I have to enter in a meeting unwarned, then I’m prepared.
But if I’m prepared, then I take the hp41cl. To begin with, its user keyboard allows me to put many more programs. I have loaded the YFZN and PowerCL in lower and upper port 1; the advantage module in Port 2, and Sandmath 3x3 in module 3. I have a time module and an infrarred printer driver plugged in but not using the corresponding logical ports (I think that they use port 6 and 7, but I may be wrong)
For IRR and NPV I use my own programs instead of the many you can find in either the advantage of diverse financial pacs. As I know the location of the registers used, then I can put data in them “offline”, prior to running the program, and dispense with cumbersome data entry procedures.
I also have assigned to specific keys DATE+, DDAYS, and a very short utility but very used in project management: what calendar day is x days from now, which implies asking today’s date, and then DATE+ with the content of the X register.
I have also assigned the weighted average, and the %CH and %T keys (this later one is easy to program but I took it from the Sandmath 3x3 module)
And then, there come the ones that can be used for my children. Sandmath includes a number of interesting routines to deal with fractions. One is D>F, which turns a decimal number into a fraction. I seem to remember that which approximation it takes is based on the number of decimal places set for the screen. The function gives an alpha return with the fraction (for example, pi is converted to and shown as 333/106), while the fraction components are written to Y and X respectively.
Then I have also put on the shifted keys for the 4 arithmetic calculations F-, F+, F* and F/. These use the fractions represented by T/Z and Y/X to perform the arithmetic, and then leave the results as Y/X, as well as showing the result in the alpha register
And finally, I use the XYZAlarm to keep reminders. This is just for the sake of using it - any smartphone is better than the 41CL for this task.
In a past blog issued we gave Angel Martín’s indications on how to change the behavior of the %T function in the excellent ROM module Sandmath Lib.4. The method intended to be used with the HP41CL calculator.
In short, the %T function does not appear in the basic function set of either the HP41c or the newest HP41cl. There are a number of ways to implement it in either machine, one of them being the Sandmath module. However, its behavior there is different from that found in HP financial calculators. In them, the “total value”, stored in register Y, is not “consumed” by the function, as is the case with most binary functions. This way, you can clear the x register, disabling stack lift, enter then a new “part” number and continue calculation. I can attest that this behavior is very practical when doing financial analysis.
Angel Martin was extremely helpful in finding and offering a solution for my specific case, Sandmath Lib4 ROM module.
But if you want to perform the same change on the newest version of Sandmath (currently called 2x2), you need to change the memory address. The procedure would be as follows:
Copy the module to RAM. The location of the 4SMT module was 126 and 127 (is a two block module)
The byte to change is 0xpF44, relative to where you put it. So:
Step 1. introduce in Alpha the text: "840F44-1111"
Step 2. execute YPEEK. You should get "840F44-0369”. This is to check that the previous step did work, and that you’re operating on the right byte.
Step 3. modify the Alpha value to "840F44-0331"
Step 4. execute YPOKE.
Step 5. Plug it to the port of your choice (mine was 2):
And that should be all.