| . |
Sharp
PC-1001 |
| . |
| Datasheet | Years of production: | 1972-? | Display type: | 7-segment |
| New price: | · | Display color: | Green | |
| · | · | Display technology: | Vacuum fluorescent | |
| Size: | 9"×5½"×3" | Display size: | 10+2 digits | |
| Weight: | 38 oz | · | · | |
| · | · | Entry method: | Algebraic | |
| Batteries: | N/A | Advanced functions: | trig, exp | |
| External power: | 110 VAC | Memory functions: | M+ | |
| I/O: | N/A | · | · | |
| · | · | Programming model: | Unmerged keystroke | |
| Precision: | 11 digits | Program functions: | N/A | |
| Memories: | 8 (0) | Program display: | N/A | |
| Program steps: | 64 | Program editing: | N/A | |
| Chipset: | N/A | Forensic result: | 9.0000606185* |
*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 v
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.