The latest version of the document, and other info including my test 
data and decoding program, can be found at 
http://csgrad.cs.vt.edu/~tjohnson/timex/

This version is incomplete (not because I cut out information, but because
I don't know).

Disclaimer:
I am not associated with Timex in any way, OTHER than wanting to use their
datalink watch on a civilized OS (read: Unix).  All this info has been
discovered by watching the behavior of the FREELY AVAILABLE software
found on the Timex WWW server.   (http://www.timex.com)

Timex and DataLink are trademarks of Timex.

If you buy, or would buy, a DataLink watch because of the availabilty of
this information, please email me.  I would like to give Timex a count of
the number of customers this information has generated.  Perhaps that
will inspire them to be more open in the future.

-Tommy Johnson
tjohnson@csgrad.cs.vt.edu
http://csgrad.cs.vt.edu/~tjohnson/

Physical level:
The serial data is drawn on the display as a series of 9 horizontal
lines.  It is convered to serial by the raster scanning the image, one
word per frame.  The top line is always on, it functions as a start 
bit.  This is why LCD's don't work: they are not scanned in the same
order.

The words are transfered least significant bit first, bright lines are
zero, dark lines are one.

The sync signal is the word 0x55 a great many times.  After the 0x55's,
there are 40 0xAA's, followed by data in packets.

The packets are seperated by 6 empty frames (no start bit either).

Logical level:

The data is sent in packets from 4 to 32 bytes long.
byte 1      - length
byte 2      - type
              0x20  - START1               (one)
	      0x30  - TIME                 (several)
              0x60  - START2    counts?    (one)
              0x61  - DATA1                (several)
              0x62  - END1                 (one)
	      0x50  - ALARM                (several)
	      0x70  - ????                 (several, alternating with ALARM)
	      0x31  - ????
	      0x21  - END2                 (one)
	      In DATA1 and ALARM packets, byte 3 is the packet number
	      (starting at 1)

byte len-1 - check 0
byte len   - check 1     checksum of come kind

I havn't the foggiest idea what the function for the checksum is.  16 bit CRC?

Next Logical level:
The packets are sent in this order:
(from here on, byte 1 is byte 3 in the above list)

one packet type START1 0x20
byte 1     - 0
byte 2     - 0
byte 3     - 1
Unknown, may be a protocol version, or magic number.  I have never seen
these numbers change in all my test data.

zero or more packet type TIME 0x30
byte 1     - timezone   (the watch has two timezones, 1 or 2)
byte 2     - hour
byte 3     - minute
byte 4     - month
byte 5     - day
byte 6     - 
byte 7     - 
byte 8     -
byte 9     -
byte 10    -
To indicate the timezone, the computer converts, and just sends a time.

one packet type START2 0x60
byte 1     - number of DATA1 packets to follow

number from packet START2 packets type DATA1 0x20
In the first DATA1 packet, the first 15 bytes are: 
byte 1     - sequence number  (1)
byte 2,3   - start address of appointments
byte 4,5   - start address of todos
byte 6,7   - start address of phone numbers
byte 8,9   - start address of aniversaries
byte 10    - number of appointments
byte 11    - number of todos
byte 12    - number of phone numbers
byte 13    - number of aniversaries
byte 14    - 0x60    ?
byte 15    - how long to beep early, in 5 minute units

In the rest of the DATA1 packets, there are variable length records of the
following formats, there is no padding to fill the DATA1 packets evenly.
byte 10 appointments
byte 11 todos
byte 12 phone numbers
byte 14 aniversaries

one packet type END1
No data, just a checksum

zero or five ALARM packets, one per alarm.  If an alarm is inaudable, its
ALARM packet is followed by a 0x70 packet.
Alarms are in ALARM packets.
byte 1     - count,   1 to 5   
byte 2     - hour 
byte 3     - minute
byte 4     - month     Set to 0 for every month
byte 5     - day       Set to 0 for every day
byte 6-13  - label, in watch char set, 1 char per byte  (NOT packed)
byte 14    -   1 if audible, 0 otherwise

type 0x70 packet:
byte 1     - 0  ?
byte 2     - number of the preceding alarm + 0x61   ?????
byte 3     - 0  ?

zero or one packet type 0x31
No idea.  but it only shows up when the time is set.

one packet type END2 0x21

Thats it.

char set for labels is:   (6 bits per char)
0-9 : digits
10-36: letters
37-63: symbols: 
space !"#$%&'()*+,-./;\
divide =
bell (image, not sound)
?

These 4 record types are found in DATA1 packets:

An appointment:
byte 1      - length
byte 2      - month
byte 3      - day
byte 4      - time
              bits are: 16 8 4 2 1 0.5 0.25  hours
byte 5-len-1- label
              6 bits per char, packed 4 chars to 3 bytes
                11000000
                22221111
                33333322
byte len   - 0xFC      ?

A ToDo:
byte 1     - length
byte 2     - priority
byte 3-len-1 - label	same as appointment
byte len   - 0xFD    ?

A Phone number:
byte 1    - length
byte 2-6  - phone number, 4 bits per digit, LSnibble first
byte 7-len-1 - label    same as appointment
byte len  - 0xF    ?

An anniversary:
byte 1      - length
byte 2      - month
byte 3      - day
byte 4-len-1 - label    same as appointment
byte len    - 0xFC   ?