Base Conversion for HP-41cv/cx (PPC)

These operators convert between decimal and another number base.

History

The code originates from the PPC ROM Module released by the international group People Programming Computers on December 1981 [1,2].

Instructions

Use XEQ “DB” for base 10 to base b with b in the range [2,19]. DB takes its base 10 input from the X-register. The result is returned in the alpha register. Use XEQ “BD” for base b to base 10 with base b in the range [2,25]. The input is through the alpha register. The result is returned in the X register.

Listing

  • Requires
    • X-Functions module on the HP-41cv
  • Available as
  • Note
    • Register 06 is used to store the base.
; BASE TO DECIMAL

01	LBL "BD"
02	XEQ 06		; input base
03	AON
04	STOP		; input number

05	AOFF		; prepare for main loop
06	CLST		; X=0, Z=0, T=0

07	LBL 01		; base 10 number will accumulate in Y register
08	>"+"             ; append blanks in alpha until the first character
09	X<> O           ; of the alpha input is pushed into alpha char
10	X=0?		; 15-21 (O register).

12	X<> M           ; In the loop, the next char which appears in O is
13	R^		; exchanged with M and the stack is rolled up to
14	X<> N           ; preserve M in the stack.  The N register is then
15	"\00\08" 	 ; bought into X and O is stored in N.  The alpha
16	X<> N           ; register (MNO) now contains only the net character.
17	RDN 		; 0x0008 is appended.  N is then returned with its
18	X<> M           ; original content, the stack is rolled down and then
19	E   		; the M register is restored and our next character
20	*		; now appears as a decimal number in X.  This number
21	39		; is multiplied by 1 so it becomes normalized and then
22	-		; 39 is subtracted so we may test whether our char is
23	X>0?            ; a digit 0-9 (row 3 in the next table) or a letter
24	DSE X		; (row 4).  The X register is then transformed to its
25	9   		; true decimal value.
26	+		; It is then tested to see if it is a valid number
27	X<0?		   ; (a blank would yield a negative at this point
28	GTO 02		; causing a jump to LBL 02).
29	X<>Y            ; If not a blank, the accumulated result is multiplied
30	RCL 06		; by the base and the next digit is added.
31	*
32	+
33	.		; Ensure the Y register is the only nonzero stack
34	GTO 01		; register when the jump is made back to LBL 01.

35	LBL 02		; End the routine by rolling down the stack to bring
36	RDN 		; the Y register result into X and the alpha register
37	CLA		; is cleared.
38	RTN

; DECIMAL TO BASE

39	LBL "DB"
40	XEQ 06		; input base
41	STOP		; input number

42   "\27             " ; single quote followed by 13 spaces
43	RCL M		; Recall 7 spaces into the stack.  These blanks float
44	X<>Y            ; up and down in the stack throughout the main loop
45	LBL 03		; and are not used until line 74.

46	ENTER^		; The main loop.  At the start the remaining base 10
47	INT		; number is in X and the 7 spaces in Y.  The base b
48	RCL 06		; digits are built up starting with the least
49	MOD 		; significant digits.  The base 10 equivalent is
50	9		; computed at lines 48-49.  Lines 50-57 convert this
51	-		; decimal number to its alpha equivalent stored in O.
52	X>0?
53	ISG X
54	LBL 04
55	39
56	+
57	10^X
58	STO O		; Line 58 acts as an append to the remaining char in
59	>"      "        ; alpha.  The next 4 lines do an alpha shift to
60	CLX		; prepare M and N for the next char (digit) to be
61	X<> O           ; appended.
62	X<> N
63	STO M
64	RDN		; Calculate the remaining base 10 result and branch
65	RCL 06		; to LBL 03 as long as this number is nonzero.
66	/
67	INT
68	X#0?
69	GTO 03

70	LBL 05		; Pad space char in alpha so the result is left
71	>" "             ; justified.
72	CLX
73	RCL M
74	X#Y?		; Comparison test with the 7 spaces.
75	GTO 05
76	CLX		; Alpha shift so that the final digits are in M
77	X<> O           ; and N
78	X<> N
79	STO M
80	CLST		; Finish by clearing the stack view in the alpha
81	AVIEW
82	RTN

83	LBL 06
84	"BASE ?"
85	PROMPT
86	STO 06
87	"SOURCE ?"
88	AVIEW
89	RTN

90	END

References

[1] BD – BASE b TO BASE DECIMAL George Eldridge and John Kennedy, August 1981 PPC ROM Users Manual, pg.52-53
[2] TB – BASE 10 TO BASE b George Eldridge and John Kennedy, August 1981 PPC ROM Users Manual, pg.430-431
Embedded software developer
Passionately curious and stubbornly persistent. Enjoys to inspire and consult with others to exchange the poetry of logical ideas.

Leave a Reply

Your email address will not be published. Required fields are marked *

 

This site uses Akismet to reduce spam. Learn how your comment data is processed.