TMS0803/5 Emulating Calculator Build

Featured in

MSP430G2452 acting as a TMS0803 calculator chip. Emulates TI DataMath 2500II and Sinclair Scientific Calculators.


I got introduced to a web based calculator emulation via this thread in forum.

I got interested and start playing w/ the idea of implementing the emulation on an msp430, my code is based on Mr Ken Shirriff's work from the following pages.

There is also a feature in HaD regarding Ken Shirriff's Sinclair Scientific work here.

TMS0803/5 Emulating Calculator Build

Calculator Functions and Features

As this project emulates the original TI DataMath and Sinclair Scientific calculators, it operates exactly the same as the original ones. The keyboard layouts are similar in both calculators. On the PCB, the dominant key legends (on top of each key) are for TI DataMath, while the smaller legends (top and slightly left of each key) are for Sinclair Scientific emulating.

I had select the MCU clock speed to be 8 Mhz, which appears to more or less matches the speed of the original calculators. I only observe the speed of the original calculators on youtube videos.

The emulating calculator starts / defaults as TI DataMath. If you want to start the calculator as a Sinclair Scientific, hold down key "7" while turning on power.

Holding down "4" while turning on power will place the emulator in a "slow CPU" mode, and it runs 8 times slower than usual as a TI DataMath. This will show how the display (as a register) changes during calculation cycles.

Holding down "CE" while turning on power will briefly show a pre-entered message (8 letters). I added this feature to include personal message as I build these calculators as gifts. To enter a personal message, one can hold down "X" while turning on power. Pressing the keys 0, 1, 2 to 9 allows to select numerics and letters like a old cellphone keyboard, advance letter positions by pressing "+" key. The personal message will be saved in flash memory after the 8th letter has been entered.

* note that the above key sequence is for Version 2 boards only. Version 1 boards uses different keys.

Initial Attempt (Fail) and Version 1 PCB Build (Success)

Eventually I built the emulator on a standalone PCB design fitted w/ bubble leds from the '70 when the original calculators were made.
This is the original failed build (w/ faulty 9 digit leds) and the 1st successful build on V1 PCB. Next to it is are the 1st two V1 PCB I built. They were given away a few weeks ago.

failed original design and V1 PCBthe 1st two V1 PCB builds

Here is a photo with a blank PCB backside. Eventually I build 3 of these and they are all gone.

V1 PCB w/ blank PCB

Revised Version 2 PCB Build

I did a revised PCB to layout the buttons for better ergonomics, also adding a bypass cap and programming "loops" for in-circuit programming. I had proof-build one (from resurrected parts) and am waiting parts for a few more. There is another thread in the forum for a good build / buy.

V2 PCB front and backV2 PCB built and blank

Here is a close-up and a hookup for in-circuit programming (via a G2 LaunchPad)

close up on buildhookup for in-circuit programming

Parts / Bill of Material

all parts

    • 1 MSP430G2452, from your the Launchpad G2 (the "other" chip in the package), G2402, G2412 or G2432 will also work.
    • 2 bubble led, from sparkfun ($2.95 ea)
    • 20 tactile buttons, 6 x 3 x 4.3mm, from DX ($4.76/100)
    • 1 spdt dip size switch, from DX ($7.37/100)
    • 1 CR2032 cell holder, from DX ($3.14/20)
    • 1 miniature 1.8mm red led thru-hole, forgot where I got it (see picture)
    • 1 47k pull-up resistor
    • 1 0.1uF by-pass capacitor
The miniature red led is to show the "negative" sign. The original calculators have 9 digit displays, since we have only 8 digit, I used a led to show the negative sign when needed.

You can try different CR2032 cell holders, or even paper-clip diys, the pcb make provisions to mount different cell holders.

Schematic, Source Code and Build Hints

It is easier to understand the connections w/ the ascii art schematic, in my opinion

         /|\|                 |  
          | |                 | 
          --|RST              |
            |                 |       2 x 4 digit bubble led
            |     digit 0 P2.0|----- +---------+ +---------+
            |     digit 1 P2.6|----- | % % % % | | % % % % |
            |     digit 2 P2.1|----- +---------+ +---------+
            |     digit 3 P2.2|--/
            |     digit 4 P2.3|--/
            |     digit 5 P2.7|--/                                            
            |     digit 6 P2.4|--/                                            
            |     digit 7 P2.5|--/         segment a to g + dot........
            |                 |       /                                 ....\
            |                 |      /                                       \
            |   segment A P1.2|-----+-----+-----+-----+-----+-----+-----+-----+
            |                 | _=_ | _=_ | _=_ | _=_ | _=_ | _=_ | _=_ | _=_ | minus led
            |   segment B P1.3|-o o-+-o o-+-o o-+-o o-+-o o-+-o o-+-o o-+-o o-+-(>|)-+
            |                 | _=_ | _=_ | _=_ | _=_ | _=_ | _=_ | _=_ |            |
            |   segment c P1.7|-o o-+-o o-+-o o-+-o o-+-o o-+-o o-+-o o-+------------|
            |                 | _=_ | _=_ | _=_ | _=_ | _=_ | _=_ |
            |   segment D P1.1|-o o-+-o o-+-o o-+-o o-+-o o-+-o o-+
            |                 | _=_ | _=_ | _=_ | _=_ | _=_ |
            |   segment E P1.5|-o o-+-o o-+-o o-+-o o-+-o o-+
            |                 | _=_ | _=_ | _=_ | _=_ |
            |   segment F P1.4|-o o-+-o o-+-o o-+-o o-+
            |                 | _=_ | _=_ | _=_ |
            |   segment G P1.0|-o o-+-o o-+-o o-+
            |                 | _=_ |
            |   segment H P1.6|-o o-+       (not all buttons populated)
            |                 |  

The source code is in github

There is also good amount of H/W information commented inside the code

If you plan to design your own PCB, the basic principle in relationship w/ the code is

    • P1 for LED segments
    • P2 for LED digits
    • P1 also for key button scanning
    • You can move things around as long as you observe the above. I.e. If it fits better on your PCB, you could swap digit 1 w/ digit 3, segment A w/ segment E, etc, etc. All you need is to change #define in a header file and compile.
There is a build thread in If you have questions I can answer them over there.