The most capable calculator HP put in a shirt pocket: RPN with a four-level stack, complex arithmetic on a parallel imaginary stack, five matrices addressed by descriptor, a root finder and a numerical integrator — all in 448 bytes, or 672 on the 2023 Collector's Edition. This sheet is a working guide to the machine and then an index of every function, with the gold f and blue g prefixes written as the keyboard prints them. Hover any entry for the full description and its handbook page.
Sources: HP 15c Collector's Edition Owner's Handbook and Advanced Functions Handbook (HP, 2023), the 1982 HP-15C Owner's Handbook and Advanced Functions Handbook where the machines differ, and A. Thimet's HP-15C Quick Reference. Page numbers are the Collector's Edition Owner's Handbook.There is no expression to edit and no parentheses to balance. Four registers — T, Z, Y, X — hold the working numbers, X is what the display shows, and every function takes its arguments from the bottom of that pile and drops the answer back into it. A fifth register, LAST X, quietly keeps whatever X held before the last operation.
The subtlety that bites everyone is that ENTER disables stack lift. It is one of only four operations that do — ENTER, CLx, Σ+ and Σ−. After any of them the next number written overwrites X instead of pushing it up, which is exactly what you want when separating two operands and exactly what you do not expect anywhere else.
T is sticky: when the stack drops, T copies itself downward rather than emptying. Put a constant in T and it feeds every subsequent operation for free — the trick behind most short 15C programs.
Appendix B of the Owner's Handbook, p. 209, has the complete lists of enabling, disabling and neutral operations.
DSE and ISG do not take three arguments. They take one register holding a single number whose digits are read as three fields — and nothing in the keystrokes hints at it.
ISG adds the step, then skips the next line if the counter has passed the limit. DSE subtracts it and skips when the counter reaches or falls below the limit. A step of 00 means one. So the loop body sits after the test and ends with a GTO back to it — the skipped line is the jump.
Because it is only a number, the loop bounds can be computed, stored with STO, or kept in the Index register and shared. That is the whole looping mechanism: no keywords, just a register read three ways.
Data registers and program lines are not separate resources. They are the same registers, seven bytes each, split by a movable boundary — and matrices, the imaginary stack, SOLVE and ∫ all take their space from the same side of it. Free a data register and you gain seven bytes of program; use a matrix and your program gets shorter.
dd is the highest-numbered data register, uu the uncommitted registers left, pp the registers now holding program, and b the bytes remaining before another uncommitted register is swallowed. f DIM (i) moves the boundary — but only outward into unused space: registers already holding program lines will not convert back.
1982: 64 allocatable registers, 448 bytes. Collector's Edition: 96 registers, 672 bytes, 99 including the three permanent ones. Appendix C, p. 213.
A program is not stored as names. Each line shows the row and column of the keys you pressed, which is why reading a listing means reading the keyboard.
001-42,21,11f LBL A42 = the f prefix, 21 = the LBL key at row 2 key 1, 11 = A at row 1 key 1009- 43 32g RTN43 = the g prefix, 32 = the RTN key004- 36ENTERan unshifted key is its own two-digit code002- 1digit 1digits record as themselves, not as a keycodeThe two prefix keys have codes of their own — 42 for gold f and 43 for blue g — and everything else is row, column. Digits are the exception: they record as the digit itself. Most instructions merge into a single byte however many keys you pressed, which is how 448 bytes holds a usable program.
The line number, then the codes: 001-42,21,11 is line 1, f LBL A. Commas separate the keystrokes of one merged instruction.
The HP-15C is the top of the 1982 Voyager line — the flat, landscape calculators with an LCD and no LEDs. It packs complex arithmetic, matrices, a root finder and a numerical integrator into a machine the size of a cheque book, and it did so well enough that HP reissued it twice: the Limited Edition in 2011 and the Collector's Edition in 2023.
This sheet is written against the Collector's Edition handbooks and flags the places where the 1982 machine differs.
Every key has up to three meanings: the one printed on it, the gold one printed above it reached with f, and the blue one printed below it reached with g. This sheet writes them the same way.
Four gold labels sit under a bracket marked CLEAR — Σ, PRGM, REG and PREFIX — and are always written here with the word CLEAR in front of them.
Key the digits, then ENTER to push the number up and start another. There is no equals key: the operation comes last.
Only the digit keys, the radix point, EEX and CHS continue a number. Everything else terminates entry, which is what tells the calculator your next keystroke starts a new number.
The display never changes the number — only how much of it you see. Ten significant digits are always there underneath.
The format also sets how hard ∫ works: it integrates to the precision you are displaying, so FIX 2 is fast and rough, FIX 9 slow and fine.
Twenty registers answer directly to a keystroke — R0–R9 and R.0–R.9. Beyond those, everything goes through the Index register.
RI also drives indirect branching, indirect display formats, matrix element addressing and loop counters. It is the closest thing the 15C has to a pointer.
Most of the time the stack looks after itself. Three facts cover the times it does not.
disable stack liftT duplicates on dropa constant parked in T feeds every operationg LST xthe argument of the last function, always keptDisplay and angle modes, the CLEAR sequences, MEM, PSE, SST/BST, GTO · nnn, P/R and USER are neutral — they leave the lift state exactly as they found it, so you can check something mid-calculation without disturbing anything.
See Anatomy. Full lists: Appendix B, p. 209.
g P/R puts the machine in PRGM mode, where keystrokes are recorded instead of executed. There is no editor beyond insert and delete.
Programs are addressed by label, and A–E double as the five user keys: f A runs the program at LBL A, or just A in USER mode.
The 15C conditional is the RPN one: a test skips the next line when it is false. The line after a test is the true branch, and it is almost always a GTO.
Two documented traps: a conditional as the last line of a program misbehaves — put a RTN after it — and GSB (i) does not accept the negative line numbers that GTO (i) does. Appendix H, p. 271.
Ten flags. Eight are yours; two are the machine talking back.
Flag 9 is worth knowing as an output: set it deliberately and the display blinks, which is the only attention-getting device the machine has.
Pressing f I builds a second, imaginary stack beside the real one and lights the C annunciator. From then on every register has two halves, and the display shows only the real one.
Nearly everything works: the four arithmetic operations, y^x, roots, logs, exponentials and the full trigonometric and hyperbolic sets. Complex trigonometry is always in radians whatever the annunciator says. √-1 only works once Complex mode is already on.
Five matrices named A to E, sharing the uncommitted registers. What makes them unusual is that a matrix travels the stack as a descriptor — a value you can store, recall, exchange and test like any number.
Ordinary keys do matrix work: + adds two descriptors, × multiplies, 1/x inverts, ÷ solves Y = X·B. Note the reversed order on divide, and that a singular matrix is silently replaced by a near neighbour rather than refused.
Both take a label, not a formula. You write a program that leaves f(x) in X, and hand its label to the solver or the integrator.
Each consumes two of the seven subroutine levels. Neither may call itself; SOLVE and ∫ may call each other. The integrator samples sparsely at first, so put the limits near the interesting part of the function or it will confidently return zero.
An error shows Error and a digit; any key clears it and restores what was on the display before.
Pr Error is different: Continuous Memory was lost and everything is back to defaults.
The Collector's Edition is the same calculator with more room and a faster processor. Programs move across unchanged unless they depended on timing.
Appendix G, p. 269. A long-running program on low batteries can lose Continuous Memory — the faster processor draws more current.
All four HP handbooks are free and complete, and the two Collector's Edition volumes supersede the originals for anything behavioural.
The Advanced Functions Handbook is the unusual one: it is a numerical-methods text that happens to be a calculator manual, and it is worth reading even if you never touch the machine.
001-42,21,12f LBL Bthe routine SOLVE and ∫ will call002- 44 0STO 0keep x — it arrives in X003- 44how many coefficients004- 44 25STO Ithe Index register is the counter and the pointer005- 00the accumulator starts at zero006-42,21, 0f LBL 0top of the loop007-45,20, 0RCL× 0accumulator × x008- 45 24RCL (i)push the coefficient Rᵢ009- 40+…and add it010-42, 5,25f DSE Istep down a coefficient; skip when done011- 22 0GTO 0round again012- 43 32g RTNanswer in XEvery keycode here is as the calculator displays it, checked against the listings in HP’s handbooks.
This evaluates a polynomial of any degree by Horner’s rule — ((a₃x + a₂)x + a₁)x + a₀ — reading its coefficients out of consecutive registers. It is worth building because of what you can then do with it: the 15C’s whole design is that SOLVE and ∫ take a label, so once a function exists as a routine the machine will find its roots, integrate it, or tabulate it without another line of code.
Set-up. Put the coefficients in R1 upward, constant term first, so that Rₖ holds the coefficient of x^(k−1). For x³ − 6x² + 11x − 6:
How the loop works. Line 003 keys the coefficient count, not a loop-control number: plain 4 is 4.00000, whose limit field is 000 and whose step field is 00, meaning “count down to zero, one at a time”. DSE decrements first and skips the next line only once the counter has reached the limit — so the loop runs exactly four times, with the Index register pointing at R4, R3, R2, R1 in turn. That is Horner order: highest degree first. To handle a different degree you change one keystroke.
start of passaccthe running total so farRCL× 0acc · xrecall arithmetic: X × R0 → X. No stack lift, R0 untouchedRCL (i)aᵢ over acc · xthe integer part of RI picks the register+acc · x + aᵢthe new running total; stack dropsf DSE IunchangedRI: 4 → 3 → 2 → 1 → 0, then the GTO is skippedWhy the stack never gets in the way. RCL× 0 is recall arithmetic: it multiplies X by R0 in place, without lifting the stack and without disturbing R0. Only RCL (i) lifts, and the + immediately drops it again. The accumulator lives in X for the whole run and nothing else is ever pushed — which is why a four-level stack is enough.
Using it. Check it evaluates first, then hand the label to whichever engine you want:
6.00000 ENTER 1.5 f SOLVE Ba root — 1.00002.5 ENTER 3.5 f SOLVE Banother — 3.00000 ENTER 1 f ∫xy Bthe area from 0 to 1Those three roots are 1, 2 and 3, because the polynomial is (x−1)(x−2)(x−3). SOLVE does not know that; it only knows the sign changed between your two guesses, which is why you give it a bracket and why finding all three means asking three times.
What it costs. Twelve lines, and by the byte accounting in the Anatomy panel that is well under three of the ninety-nine registers — leaving the other ninety-six for coefficients, a matrix, or a second routine. On the 1982 machine the sums are tighter but the program is identical.
Horner’s rule and the SOLVE/∫ contract are covered in the Owner’s Handbook chapters on programming (p. 66), SOLVE (p. 180) and ∫ (p. 194); the Advanced Functions Handbook works the same ground numerically. Keycodes cross-checked against listings in both — see Anatomy.