Ab/c: Fractions calculation
AC: Alternating current
BaseN: Number base calculations
Card: Magnetic card storage
Cmem: Continuous memory
Cond: Conditional execution
Const: Scientific constants
Cplx: Complex number arithmetic
DC: Direct current
Eqlib: Equation library
Exp: Exponential/logarithmic functions
Fin: Financial functions
Grph: Graphing capability
Hyp: Hyperbolic functions
Ind: Indirect addressing
Intg: Numerical integration
Jump: Unconditional jump (GOTO)
Lbl: Program labels
LCD: Liquid Crystal Display
LED: Light-Emitting Diode
Li-ion: Lithium-ion rechargeable battery
Lreg: Linear regression (2-variable statistics)
mA: Milliamperes of current
Mtrx: Matrix support
NiCd: Nickel-Cadmium rechargeable battery
NiMH: Nickel-metal-hydrite rechargeable battery
RTC: Real-time clock
Sdev: Standard deviation (1-variable statistics)
Solv: Equation solver
Subr: Subroutine call capability
Symb: Symbolic computing
Tape: Magnetic tape storage
Trig: Trigonometric functions
Units: Unit conversions
VAC: Volts AC
VDC: Volts DC
*Forensic result in EXP mode; in FLOAT mode, the result is 9.0039554305.
Though strictly speaking, the Sharp PC-1001 is not a handheld programmable calculator, as it runs from AC power only, it is smaller than many old handhelds (notably, CompuCorp's line of programmable machines) and it certainly deserves some attention, being the first small programmable calculator manufactured by Sharp.
It is also an example of an early programmable calculator with really "dumb" programmability: no branching, no jumping, no program control instructions of any kind, only straightforward execution of keystrokes entered.
Or perhaps not? I cannot help but wonder: part of the calculator's memory serves a dual purpose, storing either program steps or numbers. Perhaps it is possible to write self-modifying programs and use this mechanism to implement branching, conditional branching, perhaps even indirect addressing?
So far, all I've been able to figure out is that as you enter program code, it fills up memory registers starting from 7, working down to 0. Logically, it'd seem that 8 program steps fill up one register, but things are not quite that simple; after entering 8 program steps, I found that already more than one memory register was erased, and conversely, entering a program between 48 and 56 steps didn't quite work if I used more than one memory register.
The programming model has other limitations. Not only is it completely unmerged (i.e., F ln is, in fact, two program steps), but functions other than arithmetic functions cannot appear in chain calculations. Further, there are no parentheses either, necessitating the use of memory registers for immediate results. These limitations may explain why I was only able to write a somewhat shortened version of my favorite Gamma function example, this time using Stirling's formula:
01 x?M 02 0 03 F 04 ln 05 - 06 1 07 × 08 MR 09 0 10 = 11 x?M 12 1 13 2 14 × 15 p 16 ÷ 17 MR 18 0 19 = 20 √ 21 F 22 ln 23 M+ 24 1 25 1 26 ÷ 27 1 28 2 29 ÷ 30 MR 31 0 32 = 33 M+ 34 1 35 MR 36 1
The program uses two memory registers, 0 and 1; the argument is stored in register 0, whereas the result is in register 1, and also appears on the display.