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: 1978, 2012 Display type: 7-segment
New price:   Display color: Red
    Display technology: LED
Size:   Display size: 10+2 digits
Weight:  
   
    Entry method: RPN
Batteries: N/A Advanced functions: trg, hyp, exp, log, printer
External power: 5 VAC (orig. 220 VAC)
Memory functions:  +/−/*/:
I/O: RS-232, SD card, programming port
   
    Programming model: Unmerged keystroke, SD card
Precision: 12 digits Program functions: GOTO, cond, subr, labels, ind
Memories: 242(0) numbers
Program display: Opcode
Program memory: 3992 steps
Program editing: SST, overwrite
Chipset:  N/A Forensic result:  8.99998153406

The other day (December 20, 2012 to be exact; just a day before the world was supposed to come to an end according to some Mayan calendar), a gift package arrived in the mail, all the way from Germany. In it, a kit for an emulator of an old East German desktop programmable calculator, the Robotron K-1003, which dates back to 1978 or thereabouts.

VEB Robotron (the abbreviation VEB stands for Volkseigener Betrieb, or People-owned Enterprise), based in Dresden, was East Germany's largest electronics manufacturer. Among other things, it manufactured calculators, desktop computers and mainframe computers as well. This included the K-1000 line of desktop calculators. Of these, the K-1003 had the most memory and also featured a built-in printer.

These K-1000 machines present a curious mix of features. The size, the ability to print (albeit not display) alphanumeric characters remind me of the SR-60 from Texas Instruments. But the reverse polish logic definitely smells like HP. On the other hand, the calculator only has a 3-level stack (a non-trivial limitation compared to the 4-level stack of HP calculators). It also has guard digits (the internal precision is 12 decimal digits, of which 10 are displayed) which is again reminiscent of Texas Instruments devices.

In 2012, Michael Berger from Germany decided to resurrect this design. He created an emulator for the K-1000 that is implemented on a standard microcontroller. He then created a kit comprising the requisite printed circuit boards, parts, and most importantly, a professional quality keyboard.

Michael was kind enough to send me one of these kits as a Christmas present. And it arrived a few days early, leaving me enough time to put it together so that it can go under the Christmas tree fully assembled and working. The picture on the right shows the machine on my testbench; I have yet to build a shorter cable to connect the display, and mount the display itself permanently.

But now that I got this calculator working, I of course had to find out more about its programming model. I have been able to locate some vintage manuals online, and these were sufficient to teach me the basics. Although I have not yet played with more advanced programming features such as conditional jumps, indirect memory addressing and the like, I endeavored to put together a simple version of my standard programming example, the Gamma function. More specifically, an implementation of Stirling's formula, accurate to the full displayed precision of this calculator for arguments greater than 5, computing the natural logarithm of the Gamma function. Most notably, this program uses no memory registers; I was able to work around the limitations of the 3-level stack and perform all requisite calculations using the stack only. Without further ado, here is the program (to use it, enter the argument and hit STM x!):

0000	155 MARKE
0001	004 x!
0002	127 ↑
0003	127 ↑
0004	053 1/x
0005	106 2
0006	124 *
0007	077 Π
0008	124 *
0009	055 √x
0010	015 ln
0011	066 x⇔y
0012	123 :
0013	076 1
0014	125 −
0015	066 x⇔y
0016	015 ln
0017	126 +
0018	124 *
0019	124 *
0020	066 x⇔y
0021	054 x²
0022	054 x²
0023	054 x²
0024	124 *
0025	076 1
0026	076 1
0027	104 8
0028	104 8
0029	053 1/x
0030	126 +
0031	066 x⇔y
0032	054 x²
0033	123 :
0034	076 1
0035	115 6
0036	104 8
0037	107 0
0038	053 1/x
0039	125 −
0040	066 x⇔y
0041	054 x²
0042	123 :
0043	076 1
0044	106 2
0045	115 6
0046	107 0
0047	053 1/x
0048	126 +
0049	066 x⇔y
0050	054 x²
0051	123 :
0052	116 3
0053	115 6
0054	107 0
0055	053 1/x
0056	125 −
0057	066 x⇔y
0058	054 x²
0059	123 :
0060	076 1
0061	106 2
0062	053 1/x
0063	126 +
0064	066 x⇔y
0065	123 :
0066	165 ENDE