Canon F-800P

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: 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
Prnt: Printer
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
Years of production:   Display type: Numeric display  
New price:   Display color: Black  
    Display technology: Liquid crystal display 
Size: 3½"×5½"×½" Display size: 10+2 digits
Weight: 4 oz    
    Entry method: Algebraic with precedence 
Batteries: 2×"LR44" button cell Advanced functions: Trig Exp Hyp Lreg Ab/c Cplx Cmem BaseN Units Const 
External power:   Memory functions: +/-/×/÷/^ 
I/O:      
    Programming model: Partially merged keystroke 
Precision: 12 digits Program functions: Jump Cond  
Memories: 10 numbers Program display:  
Program memory: 128 program steps Program editing:  
Chipset:   Forensic result: 8.99999863704  

f-800p.jpg (26689 bytes)This beautiful calculator (the first ever Canon programmable calculator in my collection) was a surprise in more ways than one.

For one thing, it was quite literally a surprise, a surprise gift from a stranger I never met (thank you, Wayne!)

For another, this calculator finally solved a mystery. In recent months, I came across a number of calculators with a programming model unlike any other: these included the Hanimex SPC 1090 and the Citizen SRP-80. One characteristic feature of these machines was a branch instruction that used a single-digit location argument that specified a location relative to the current program position (i.e., within plus or minus 9 steps of it; however, as I have been recently – summer 2009 – informed by Pavel Kalina from Brno, Czech Republic, you can also enter GTO - 0 to jump to the beginning of program memory.)

But Hanimex is an OEM brand. Citizen is a company known for its watches and other consumer electronics items, but it doesn't manufacture calculator chipsets. So where do these calculators come from?

Well, I know the answer now: most likely, both my Hanimex and my Citizen machines are Canon calculators in OEM disguise. The Citizen SRP-80, for instance, despite its dramatically different appearance, is functionally 100% equivalent to this Canon F-800P. In fact, thanks to this Canon machine I have discovered a few features on the SRP-80 that I wasn't familiar with before: for instance, there are several INV OUT keystroke combinations that recall a variety of scientific constants to the display.

The Canon F-800P has 10 memory registers and room for 128 partially merged program steps in four program areas. INV and HYP key combinations are merged; other multikey combinations (e.g., STO + 1) aren't. Nevertheless, the programming model is fairly powerful; sophisticated algorithms can be implemented on this machine. What a pity it isn't possible to call one program from within another, subroutine-style!

What is possible is to create an implementation of my favorite example, the Gamma function, that yields results with an impressive 10+ degrees of precision for any real number. This program uses up almost all of program memory, and also requires that six memory registers be preloaded with constants prior to execution (to enter constants to 12 digits of precision, use the + key; for instance, type 2.506628275 + 1.1 EXP +/- 10 = STO 3). To use this program, simply enter the argument and press RUN 6 (assuming of course that the program itself was entered under LRN1.)

M3: 2.50662827511
M4: 83.8676043424
M5: 1168.92649479
M6: 8687.24529705
M7: 36308.2951477
M8: 80916.6278952
M9: 75122.6331530
001    ×
002    1
003    STO
004    1
005    =
006    X>0 6
007    STO
008    ×
009    1
010    +
011    1
012    GOTO -7
013    STO
014    0
015    ×
016    RCL
017    3
018    +
019    RCL
020    4
021    =
022    ×
023    RCL
024    0
025    +
026    RCL
027    5
028    =
029    ×
030    RCL
031    0
032    +
033    RCL
034    6
035    =
036    ×
037    RCL
038    0
039    +
040    RCL
041    7
042    =
043    ×
044    RCL
045    0
046    +
047    RCL
048    8
049    +
050    RCL
051    9
052    ÷
053    RCL
054    0
055    =
056    ÷
057    1
058    Mo+
059    RCL
060    0
061    ÷
062    1
063    Mo+
064    RCL
065    0
066    ÷
067    1
068    Mo+
069    RCL
070    0
071    ÷
072    1
073    Mo+
074    RCL
075    0
076    ÷
077    1
078    Mo+
079    RCL
080    0
081    ÷
082    (
083    RCL
084    0
085    +
086    1
087    =
088    ×
089    .
090    5
091    Mo+
092    RCL
093    0
094    ax
095    (
096    RCL
097    0
098    -
099    5
100    =
101    ÷
102    RCL
103    0
104    ex
105    ÷
106    RCL
107    1
108    =