Commodore P50
Datasheet legend
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: LightEmitting Diode Liion: Lithiumion rechargeable battery Lreg: Linear regression (2variable statistics) mA: Milliamperes of current Mtrx: Matrix support NiCd: NickelCadmium rechargeable battery NiMH: Nickelmetalhydrite rechargeable battery Prnt: Printer RTC: Realtime clock Sdev: Standard deviation (1variable 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 
 
Commodore P50
The P50 was one of two programmable calculators made by Commodore in the 1970s. It was significantly less capable than its bigger brother, the PR100. Only 24 program steps, 1 memory register, no parentheses, no program display or editing... very limited indeed. This scientific calculator doesn't even have a raisetothepowerof (y^{x}) function! Then again, it at least has conditional and unconditional control transfer instructions, making it a "real" programmable; contrast this with numerous machines in my collection whose "programming" consists of the unconditional execution of a stored keystroke sequence.
In surprising contrast with its sparse functionality and limited capacity, the calculator has not one, but three different conditional jump instructions. Also somewhat surprisingly, it has the ability to "merge" inverse trigonometric functions and also merge the twodigit address following a GOTO command into a single program step. Could there be some synthetic programming secrets hidden here? I don't know yet, but I've been able to determine the keycodes (not normally displayed by the calculator during program entry) using a simple method. I entered the program GOTO 00 R/S R/S ... (filling the rest of program memory with R/S instructions); then in run mode, I keyed GOTO 01, entered learn mode again, and hit a key. Next, run mode again, followed by GOTO 00 R/S. The program counter now went to the position corresponding to the selected key's code and executed an instruction there; this was either an R/S instruction or an invalid instruction (if the counter was greater than 23) in which case an error is displayed. Either way, going into learn mode again I was able to determine the next program position; subtracting one gave the key code.
Anyway, to make a long story short, here is the table of key codes:

Since it is possible to key in instructions such as GOTO 77, it makes me wonder: what about codes 17 and 4979? Also, it appears that codes beginning with 80 represent the pressing of the arc key before another key (of course, this only has a meaningful effect for trigonometric functions.)
Only 24 program steps: ouch, that's tiny! Worse even than the Sinclair Cambridge Programmable. Never mind anything as fancy as the Gamma function: how am I going to fit even Stirling's formula in here? With a shoehorn, that's the answer; only with a further compromise in accuracy. However, since Stirling's formula isn't that accurate to begin with, this is not a great difference. Instead of √2π (2.5066283...) I used the value 2.5 in the program below, thereby saving a few program steps. Sorry, no GOTO 00 at the end; you'll have to type it in by hand after each time the program is used. (Don't you just hate programmable calculators in which a few additional steps from the already limited program memory must be reserved for something as silly as R/S GOTO 00?)
00 STO 01 + 02 1 03 2 04 1/x 05 ÷ 06 RCL 07 ex 08 ÷ 09 RCL 10 √ 11 × 12 2 13 . 14 5 15 = 16 xM 17 × 18 ln 19 = 20 ex 21 M× 22 RCL 23 R/S