Timex Datalink

Home WristApps Code Samples Float S1C88 Assembly Timex API

Ray's WristApps

Ray's info for Programming the Timex® M851 (Ironman® USB watch with Datalink®)

General

I haven't worn a watch in years, but got this one because it is programmable.  Really wanted the Palm OS watch and then the MS Spot watch, but the Palm OS watch never came and the Spot watch has no SDK :(.  Besides, you have to recharge those watches almost every day and they're very big.  This watch has just enough memory and speed to be useful.
Update:  Ok, the Palm OS watch is out and looks pretty nice, but it's not waterproof and only the battery only lasts a few days...
The watch is programmed via proprietary USB connector on the left side (shown above) using Timex software (which you should download to get the latest version).
You switch between programs using the "mode" switch in the upper-right corner.  You input data with the "Start/Split" (bottom) and "Stop/Reset" (lower-right) buttons and the crown.  The crown can be rotated in either direction, pushed in, or pulled out.
Programming is done in assembly language.  This is no fun, but probably a good idea anyway due to the limited memory.  You write your "app" to be a state machine and in this way divide your program into up to 20 states.  This is done because the Timex OS only copies one state at a time into RAM because it is so small.  The code for each state is limited to 900 bytes (the RAM is actually 2 kB, but the Timex OS uses the rest).  Fortunately, Timex has provided an SDK that eases the pain of writing an application.
You will have to join the Yahoo group to find other developers and their code.  Google usually finds nothing...
Pros:  Only $61 at WalMart, relatively thin, nice look, long battery life.  Cons:  small memory size, have to program in assembly, no FPU or floating point support of any kind, no emulator (have to test apps on real watch).
Update:   Paulo Marques, Pierre Delore, and Paulo Costa have created a very nice emulator for the Datalink watch.  This is very useful for debugging and seeing the internal workings of the system.  It is free to use and you can download it from the "files" section of Datalink Developer Yahoo Group.

Links

Timex DataLink Main Page:  http://www.timex.com/datalink/
Timex Developer Page: http://www.timex.com/developer/datalink/
Timex Data Link USB discussion forum:  http://groups.yahoo.com/group/timexdatalinkusb/
Timex Datalink USB Developer forum:  http://groups.yahoo.com/group/timexdatalinkusbdevelop

Display

Note that the upper Dot-Matrix is actually 12x5, despite what the documentation says!

CPU:  8-Bit SEIKO EPSON S1C88349

Specification table for Seiko Epson (click to expand):  specs.png (74341 bytes)
Supply Voltage:  1.8 to 3.5 VDC for low speed/power operation
Clock Frequency:  32 kHz in low speed/power operation, 4.2 MHz in normal mode, 8.2 MHz in high speed mode
Note:  the M851 OS uses 2 CPU clocks; 32.768 kHz for for normal operations, 2 MHz for high speed ops.  Timex says to limit use of high speed as it drains the battery.
Memory:  48 kB internal ROM and 2 kB internal RAM (up to 2 MB external ROM/RAM)
Special Features:  1 buzzer output (sound), 1 SVD (supply voltage detector), LCD driver, Serial I/O, 2 Comparators, various timers. 

External Memory

User data is stored in an external EEPROM chip.  It is a Microchip® 24LC256 (I/SN version), 32 kB, 400 kHz max, 5 ms write speed chip, good for 1 million write cycles.

Programming the S1C88 in Assembly

Fortunately, Timex has provided a nice SDK that makes programming relatively simple.  Most of your program will probably be calling macros defined in the Timex SDK header files.  To get started, simply run the "M851 WristApp Wizard", which will build a skeleton program for you based on your desired number of states and resources.  Then, edit the source files (.asm) using some kind of text editor.  When you are done, run the "M851 WristApp Builder", open the script file for your app (.scr), and push the button to build your app.  Then, use the "WristApp Installer" program to download to the watch.
You will probably have to become familiar with the CPU register names and instruction set.
You will also have to become familiar with the Timex API.
There's no floating point support, so I had to write my own!  Tried doing IEEE-754 floats, but the code was getting too big, so I switched to s16e7 floats.
You can see pieces of my code here