This post is part of a series on my quest to find the perfect watch.
Take a look at this watch, it’s just some boring watch for runners, right?
Nope, I think this might be the best ultra-low power consumer digital watch ever produced!
Let me explain…
Specifications
This is the Timex m851. It uses an 8-bit Seiko SC188 CPU, has 48KB of ROM, 2KB of RAM and a 42×11 dot matrix main display.
The cpu is designed for ultra-low power operation – a single battery can last 3 years!
This is a big selling point for me, I don’t think they’re making consumer watches like this any more.
Those pins on the side? That’s USB. Naturally, you can synchronize things like appointments, and so on (there’s a neat linux library for that).
Here’s where it get’s interesting… this thing has an SDK, and it is surprisingly good!
You can just $ cc helloworld.c
, and upload it to your watch.
I didn’t really think I would be enamored with this watch at first – the Windows XP-era wizard Timex provided for development was… painful. However, it turned out it was just driving a UNIX-like toolchain behind the scenes.
After pulling that out, hacking this started to become pretty fun!
Just want to see some code? No problem, I’ve uploaded a hello world and a Makefile
to build it to github:
https://github.com/taviso/timex/
If you want to browse the full manual, there are some links below.
You can do some fun things with this, people wrote all kinds of games and productivity tools.
If you want a TL;DR of development, I’ll try!
Design
States and Modes
You need to split your application into states.
A state is just a way to swap code in and out as needed. When you switch states, the active code is discarded and the new code is swapped in.
You could write an app that uses up to ~30kb of code and/or data, but there is only ~2kb of RAM. This is why you need to use states, there is no paging and y