HP Voyager Programs
ForHP-16C
| Author: | Mitch Richling | 
| Updated: | 2024-02-27 | 
| Generated: | 2024-02-27 | 
Copyright © 2024 Mitch Richling. All rights reserved.
Table of Contents
1. Introduction
Dedicated "computer scientist" calculators have never been popular with only a few models ever offered on the market. The HP-16C remains, more than 40 years after its introduction, the most powerful "computer scientist" calculator ever produced. Unlike my programs for the HP-15C, the code here is all about adding new functionality to the calculator.
I have one "big" program on my HP-16C & DM-16L calculators with 7 entry points:
LBL | 
Function | Description | 
|---|---|---|
| A | SLn | 
Shift Y left by X bits | 
| B | SRn | 
Shift Y right by X bits | 
| C | ctz | 
Count Trailing Zeros | 
| E | iLog | 
Integer logarithm: \(\mathrm{floor}(\log_2(x))\) | 
| F | WSIZE | 
Recall the WSIZE value | 
| 2 | 2^x | 
Compute \(2^x\) | 
| 1 | LSSB | 
Clear all but least significant set bit | 
1.1. Stack Diagrams
SLn – Shift y left by x bits
| Before | After | |
| T: | t | ? | 
| Z: | z | ? | 
| Y: | y | ? | 
| X: | n | SLn(y, n) | 
SRn – Shift y right by x bits
| Before | After | |
| T: | t | ? | 
| Z: | z | ? | 
| Y: | y | ? | 
| X: | n | SRn(y, n) | 
ctz – Count Trailing Zeros
| Before | After | |
| T: | t | ? | 
| Z: | z | ? | 
| Y: | y | ? | 
| X: | x | CTZ(x) | 
iLog – Integer logarithm: \(\mathrm{floor}(\log_2(x))\)
| Before | After | |
| T: | t | ? | 
| Z: | z | ? | 
| Y: | y | ? | 
| X: | x | iLog(x) | 
WSIZE – Recall the WSIZE value
| Before | After | |
| T: | t | y | 
| Z: | z | y | 
| Y: | y | x | 
| X: | x | WSIZE | 
2^x – Compute \(2^x\)
| Before | After | |
| T: | t | z | 
| Z: | z | z | 
| Y: | y | y | 
| X: | x | \(2^x\) | 
LSSB – Clear all but least significant set bit
| Before | After | |
| T: | t | y | 
| Z: | z | y | 
| Y: | y | y | 
| X: | x | LSSB(x) | 
1.2. Program Listing
| Keystrokes | Key Codes | Stack Contents | Comments | |
| g LBL A | 43,22, A | 
n y z t | A SLn – Shift Left n bits | 
|
| GSB 2 | 21 | 
2 2^x y z ? | ||
| × | 20 | 
SLn(x) z ? ? | Ret | |
| g RTN | 43 21 | 
|||
| g LBL B | 43,22, b | 
n y z t | B SRn – Shift Right n bits | 
|
| GSB 2 | 21  2 | 
2^x y z ? | ||
| ÷ | 10 | 
SRn(x) z ? ? | Ret | |
| g RTN | 43 21 | 
|||
| g LBL C | 43,22, C | 
x y z t | C CTZ – Count Trailing Zeros | 
|
| g x=0 | 43 40 | 
x y z t | ||
| ÷ | 10  0 | 
y z t | Ret when x=0 | |
| GSB 1 | 21  1 | 
LSSB y ? ? | ||
| GSB E | 21  E | 
CTZ(x) y ? ? | Ret when x≠0 | |
| g RTN | 43 21 | 
|||
| g LBL E | 43,22, E | 
x y z t | E iLog – Integer logarithm: \(\mathrm{floor}(\log_2(x))\) | 
|
| g x=0 | 43 49 | 
x y z t | ||
| ÷ | 10 | 
0 y z t | Ret when x=0 | |
| g LJ | 43  A | 
c ljx y z | ||
| x≷y | 34 | 
ljx c y z | ||
| R↓ | 33 | 
c y z ljx | ||
| GSB F | 21 | 
F wsize c y ? | ||
| 1 | 1  1 | 
wsize c y | ||
| - | 30 | 
wsize-1 c y y | ||
| x≷y | 34 | 
c wsize-1 y y | ||
| - | 30 | 
iLog(x) y y y | Ret when x≠0 | |
| g RTN | 43 21 | 
|||
| g LBL F | 43,22, F | 
x y z t | F WSIZE – Recall the WSIZE value | 
|
| 1 | 1  1 | 
x y z | ||
| g LJ | 43  A | 
ws-1 1s x y | ||
| x≷y | 34 | 
1s ws-1 x y | ||
| R↓ | 33 | 
ws-1 x y 1s | ||
| 1 | 1 | 
1 ws-1 x y | ||
| + | 40 | 
wsize x y y | Ret | |
| g RTN | 43 21 | 
|||
| g LBL 2 | 43,22, 2 | 
x y z t | 2 2^x – Compute \(2^x\) | 
|
| 1 | 1 | 
1 x y z | ||
| x≷y | 34 | 
x 1 y z | ||
| f RLn | 42 | 
e 2^X y z z | Ret | |
| g RTN | 43 21 | 
|||
| g LBL 1 | 43,22, 1 | 
x y z t | 1 LSSB – Clear all but least significant set bit | 
|
| g x=0 | 43 40 | 
x y z t | ||
| g RTN | 43 21 | 
0 y z t | Ret when x=0 | |
| ENTER | 36 | 
x x y z | ||
| ENTER | 36 | 
x x x y | ||
| 1 | 1 | 
1 x x y | ||
| - | 30 | 
x-1 x y | ||
| f NOT | 42 30 | 
NOT(x-1) x y y | ||
| f AND | 42 20 | 
LSSB(x) y y y | Ret when x≠0 | |
| g RTN | 43 21 | 
2. Meta Data
The primary URL for this page: https://richmit.github.io/voyager/hp16.html
The org mode file for this page: https://github.com/richmit/voyager/blob/main/docs/hp16.org
The HTML file for this page: https://github.com/richmit/voyager/blob/main/docs/hp16.html
The github repository housing this content: https://github.com/richmit/voyager/