Zzz.
Programmable calculators Commodore P50
.


Datasheet Years of production:   Display type: Numeric display  
New price:   Display color: Red  
    Display technology: Light-emitting diode 
Size: 6"×3"×1" Display size: 8+2 digits
Weight: 8 oz    
    Entry method: Algebraic 
Batteries: 1×9V alkaline Advanced functions: Trig Exp 
External power: Commodore 707 adapter (6V DC 300mA)   Memory functions: +/× 
I/O:      
    Programming model: Keystroke entry 
Precision: 11 digits Program functions: Jump Cond  
Memories: 1 numbers Program display:  
Program memory: 24 program steps Program editing:  
Chipset:   Forensic result: 9.027775748  

p50.jpg (25575 bytes)The P50 was one of two programmable calculators made by Commodore in the 1970s. It was significantly less capable than its bigger brother, the PR-100. 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 raise-to-the-power-of (yx) 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 two-digit 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:

lrn
18
R/S
48
SSTP
GOTO
40
 
SKZ
41
SKN
43
SKP
42
INT
28
n!
29
pi 
13
deg
14
rad
15
gra
16
sqrt 
25
arc
sin
34
cos
35
tan
36
26
log
32
10x
33
ln
30
ex
31
1/x
27
STO
44
x-M
38
x-y
39
EE
10
÷
23
RCL
45
7
07
8
08
9
09
×
22
46
4
04
5
05
6
06
-
21
M+
47
1
01
2
02
3
03
+
20
C/CE
19
0
00
.
12
+/-
11
=
24

Since it is possible to key in instructions such as GOTO 77, it makes me wonder: what about codes 17 and 49-79? 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 sqrt(2pi) (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	sq
11	×
12	2
13	.
14	5
15	=
16	x-M
17	×
18	ln
19	=
20	ex
21	M×
22	RCL
23	R/S