HP Forums
HP 41C and DM41: Operations by Test, Messages, Block Storage - Printable Version

+- HP Forums (https://www.hpmuseum.org/forum)
+-- Forum: HP Software Libraries (/forum-10.html)
+--- Forum: General Software Library (/forum-13.html)
+--- Thread: HP 41C and DM41: Operations by Test, Messages, Block Storage (/thread-15907.html)



HP 41C and DM41: Operations by Test, Messages, Block Storage - Eddie W. Shore - 11-17-2020 03:40 PM

Blog Link: http://edspi31415.blogspot.com/2020/11/hp-41c-and-dm41-operations-by-test.html

The programs are inspired from a great calculator resource, "Calculator Tips & Routines Especially For The HP-41C/41CV", edited by John Dearing (see source below).

Operations by Test

One of the tips presented is the selection of one of two opposite arithmetic operations based on a comparison between X and Y values. This tip was provided by Bill Kolb (tip 2-7). They are:

X?Y
CHS (subtract if test is true)
+ (add if test is false)

X?Y
1/X (divide if the test is true)
* (multiply if the test is false)

X?Y
1/X (take the root if the test is true)
Y↑X (take the power if the test is false)

The following programs uses the test X<Y:

TESTAS: X<Y (subtract, y - x), X≥Y (adding, y + x)

(^T represent the beginning of an alpha string)

01 LBL^T TESTAS
02 X<Y?
03 CHS
04 +
05 END

Example:
45, 13, XEQ TESTAS returns 32 (45 - 13)
13, 45, XEQ TESTAS returns 58 (13 + 45)

TESTMD: X<Y (divide, y/x), X≥Y (mulitply, y * x)

01 LBL^T TESTMD
02 X<Y?
03 1/X
04 *
05 END

Example:
45, 13, XEQ TESTMD returns 3.4615 ( ≈ 45 / 13)
13, 45, XEQ TESTMD returns 585 (13 * 45)

TESTPR: X<Y (root, y^1/x), X≥Y (power, y^x)

01 LBL^T TESTPR
02 X<Y?
03 1/X
04 Y↑X
05 END

Example:
49, 3, XEQ TESTPR returns 3.6593 ( ≈ 49 ^ 1/3)
3, 49, XEQ TESTPR returns 2.3930E23 (≈ 3 ^ 49)

Messages

With the use of AVIEW during a loop, you can display a loop up to 12 characters while the loop is running. A CLD (clear display) is added after the loop's completion to clear the alpha display and show the stack. (tip 2-25)

The program TESTSUM adds a message while the 41C is summing numbers from 1 to X. While this is not the most efficient way to tackle the problem, this illustrates the use of messages.

01 LBL^T TESTSUM
02 STO 01
03 0
04 STO 02
05 LBL 01 // loop begins
06 RCL 01
07 ST+ 02
08 ^T ADDING... // message
09 AVIEW // display the message
10 DSE 01
11 GTO 01
12 CLD // clear display
13 RCL 02
14 END

Example:
50, XEQ TESTSUM
Display: ADDING..., then 1275

Block Storage

You can use indirect storage and the stack to store a constant in a block of consecutive storage registers. A sample loop:

LBL %%
STO IND Y
ISG Y
GTO %%

Where %% is a label, and the loop variable is B.EEE (B: beginning register, E: ending register) stored in this case, Stack Y. (tip 10-1)

The program LOADBLK, prompts the user enter the value, beginning register number, and ending register number.

01 LBL^LOADBLK
02 ^T VALUE
03 PROMPT
04 STO Z // keystrokes: [ STO ] [ . ] ( Y )
05 ^T R%% BGN?
06 PROMPT
07 ^T R%% END?
08 PROMPT
09 1E3
10 /
11 +
12 STO Y
13 RDN // R↓
14 X<>Y
15 LBL 01
16 STO IND Y // keystrokes: [ STO ] [ shift ] [ . ] ( Y )
17 ^T STORING... // message
18 AVIEW
19 ISG Y // keystrokes: [ shift ] ( ISG ) [ . ] ( Y )
20 GTO 01
21 ^T DONE
22 AVIEW
23 PSE
24 CLD
25 END

Try this:
Store π in R00 to R03 and e^1 in R04 to R07.

Results: (Fix 4)
R00: 3.1416
R01: 3.1416
R02: 3.1416
R03: 3.1416
R04: 2.7183
R05: 2.7183
R06: 2.7183
R07: 2.7183

Source:

Dearing, John. "Calculator Tips & Routines Especially for the HP-41C/41CV" Corvallis Software, Inc. Corvallis, OR. 1981

Link on ***** (account needed):
http://www.*****/LibView.cfm?Command=View&ItemID=320