Swiss Micros DM41X and HP 41CX: Advanced String Programs
Introduction and Generating Random Integers
This blog entry features three programs for the Swiss Micros DM41X and HP 41CX (or a HP 41C with an extended module):
ACODE: generate a code of random letters
ASAMP: generate a sample of numbers of digits 0 to 9, where no numbers repeat. ASAMP accepts up to 9 numbers.
CRYPT: allows the user to "add" or "subtract" a code to a word to encrypt it. CRYPT is a basic form of encryption.
Both ACODE and ASAMP use a random number generator. Unfortunately, the HP 41C does not have a random number generator and one must be programmed. I wanted to avoid reinventing the wheel. The following formula, obtained from the book An Atlas of Functions (see source), generates random numbers of value 0 ≤ r < 1:
r_n+1 = [ ( (4561 * int(243000 * r_n) + 51349 ) mod 243000 ] ÷ 243000
To convert this into a random integer from a to b:
randint = int( (b - a + 1) * r) + a
int is the integer function. The second formula is useful because we don't have to change display modes to execute the calculation.
Note:
XTOA takes an integer from the stack and appends the associated code to the alpha string.
ATOX takes the left most character, converts it to code, and deposits it on the X stack. The length of the alpha string is reduced by one.
Codes:
Alphabet: 65 is code for A, 90 is code for Z (all letters inclusive)
Numbers: 48 is code for 0, 57 is code for 57 (all letters inclusive)
# 35
$ 36
% 37
& 38
: 58
@ 64
[ 91
] 93
Σ 126
The system's DATE and TIME are used to generate an initial seed
Swiss Micros DM41X Program: ACODE
Instructions:
Enter the length, execute ACODE
Example (results will vary):
10 ACODE (may) return CDSJHPNWLD (10 letters)
11 ACODE -> NVJZJMVVBSV
01 LBL^T ACODE
02 CLA
03 STO 01
04 DATE
05 TIME
06 +
07 2
08 /
09 FRC
10 STO 02
11 LBL 00
12 RCL 02
13 XEQ 01
14 XEQ 02
15 XTOA
16 DSE 01
17 GTO 00
18 AVIEW
19 RTN
20 LBL 01
21 RCL 02
22 243 E3
23 *
24 LASTX
25 X<>Y
26 INT
27 4561
28 *
29 51349
30 +
31 X<>Y
32 MOD
33 LASTX
34 /
35 STO 02
36 RTN
37 LBL 02
38 26
39 *
40 INT
41 65
42 +
43 RTN
44 END
Swiss Micros DM41X Program: ASAMP
Instructions:
Enter the length, execute ASAMP
If the length is greater than 9, an error is generated.
Example (results will vary):
4 ASAMP can generate results such as 4381, 0361, 4920
7 ASAMP can generate results such as 6732145, 9852067, 1963542
Results are returned as an alpha string
01 LBL^T ASAMP
02 CLA
03 STO 01
04 9
05 X<Y?
06 GTO 03
07 DATE
08 TIME
09 *
10 FRC
11 STO 02
12 LBL 00
13 XEQ 01
14 STO 03
15 POSA
16 -1
17 X=Y?
18 GTO 02
19 GTO 00
20 LBL 02
21 RCL 03
22 XTOA
23 DSE 01
24 GTO 00
25 AVIEW
26 RTN
27 LBL 01
28 RCL 02
29 243 E3
30 *
31 LASTX
32 X<>Y
33 INT
34 4561
35 *
36 51349
37 +
38 X<>Y
39 MOD
40 LASTX
41 /
42 STO 02
43 10
44 *
45 INT
46 48
47 +
48 RTN
49 LBL 03
50 0
51 1/X
52 RTN
53 END
Swiss Micros DM41X Program: CRYPT
Syntax:
Store your word in the Alpha register
Give a key (integer), can be positive or negative
XEQ CRYPT
Example:
Starting alpha string: MATHS
10 CRYPT returns WKDRC
-10 CRYPT returns MATHS (where you started from)
This allows for two people to have short encoded messages and a secret key.
01 LBL^T CRYPT
02 STO 01
03 ALENG
04 STO 02
05 LBL 00
06 ATOX
07 65
08 -
09 RCL 01
10 +
11 26
12 MOD
13 65
14 +
15 XTOA
16 DSE 02
17 GTO 00
18 AVIEW
19 RTN
You can download all three files (in .raw format) here:
https://drive.google.com/file/d/1UD8CAILnfe4l2ID_UdoHfFGvaYiWni8J/view?usp=sharing
Thanks to Albert Chan (MoHPC) for feedback on the the programs.
Source for the Random Number Formula:
Keith Oldham, Jan Mayland, Jerome Spainer An Atlas of Functions 2nd Edition Springer: New York, NY. 2009. ISBN 9780387488066
Eddie
All original content copyright, © 2011-2021. Edward Shore. Unauthorized use and/or unauthorized distribution for commercial purposes without express and written permission from the author is strictly prohibited. This blog entry may be distributed for noncommercial purposes, provided that full credit is given to the author.