All numbers are hex unless otherwise labeled...

the first 15 bytes are a jump table, called with jsr, since the
unimplemented entrys have rts in them.  I think that the watch
relocates the executable by mucking with the jmps in the jump
table.
Entry points: 0,3,6,9,c   Every 3 bytes.  I believe it is one
per button.

Entry point f has an LDA ,X instruction, and points to a very
distinctive block of data after the data segment.  The LDA and rts
after it are 4 bytes.  There are sometimes more jsr's after byte
16, continuting a 4 byte per entry jump table.  These seem to be
initialization and/or cleanup routines.  The alleged relocation
info may indicate weather they are present.

To get offsets in the file, subtract 110 from all the addresses.

Byte 16 is consistantly 0.

The next many bytes are data.

The next many (3E?) bytes are pointed to by the entry point at f.
My current theory is relocation information.

The rest seems to be the code segment.

In one executeable, there is another data segment after the code
segment (the note one.).

The wrist-app gets to use addresses 60-67 for private variables I think.

There are many subroutines in the 5000 to 6000 address range.  (indicating
that the 6805 has a 16 bit address bus, not 12 as the manual describes.)


From here on is NOT my work.  Due to Timex's behavior, the person who
did it wishes to remain anonymous.

; Character set
;
C_0         EQU     0
C_A         EQU     $0A
C_SPACE     EQU     $24
;
; These two constants appear to be associated with the SYS5522 and SYS5545 routines
;
SEPARATOR   EQU     $3F     ; Indicates the end of a scrolling string
MSGBUF      EQU     $04d2   ; Location of the system buffer for a scrolling string
;
; System Functions called
;
SYS4e4a     EQU     $4e4a
SYS4e80     EQU     $4e80
SYS4e89     EQU     $4e89       ; Parameters: A - Some constant
SYS4e8e     EQU     $4e8e

SNDSTOP     EQU     $4f3a   ; This stops whatever sound is currently playing

SYS5522     EQU     $5522   ; Make the buffer at MSGBUF visible?
SYS5545     EQU     $5545   ; Scroll Current buffer until pressed?
SYS5549     EQU     $5549

PUTLINE3    EQU     $56d5   ; Put a single character on the bottom line of the display
POSL3_1     EQU     $47
POSL3_2     EQU     $3d
POSL3_3     EQU     $33
POSL3_4     EQU     $29
POSL3_5     EQU     $1f
POSL3_6     EQU     $15
POSL3_7     EQU     $0b
POSL3_8     EQU     $01
; Parameters:
;   A = Position  [$47] [$3D] [$33] [$29] [$1F] [$15] [$0B] [$01]
;                 [ 71] [ 61] [ 51] [ 41] [ 31] [ 21] [ 11] [  1]
;   X = Character in Timex Ascii to display
; Notes:
;   This appears to be an XOR operation.  Calling the same function twice in a row would
;   erase the character.  Writing on top of an existing character seems to let you generate
;   a non Ascii character.

PUTLINE1    EQU     $570D   ; Put a single character on the top line of
the display
POSL1_1     EQU     $46
POSL1_2     EQU     $3e
POSL1_3     EQU     $34
POSL1_4     EQU     $2c
POSL1_5     EQU     $22
POSL1_6     EQU     $14
; Parameters:
;  A = Position [$46] [$3E] - [$34] [$2C] - [$22] [$14]
;               [ 70] [ 62]   [ 52] [ 44]   [ 34] [20]
;  X = Character in Timex Ascii to display

PUTLINE2    EQU     $5745     ; Put a single character on the second
line of the display
POSL2_1     EQU     $46
POSL2_2     EQU     $3e
POSL2_3     EQU     $34
POSL2_4     EQU     $2c
POSL2_5     EQU     $22
POSL2_6     EQU     $14
; Parameters:
;  A = Position [$46] [$3E] - [$34] [$2C] - [$22] [$14]
;               [ 70] [ 62]   [ 52] [ 44]   [ 34] [20]
;  X = Character in Timex Ascii to display

CLEARALL    EQU     $577A       ; Clear the display
SYS5787     EQU     $5787       ; Parameters: None?

BANNER8     EQU     $5845       ; Display an 8 character string
; Parameters
;   A = Offset from 0110 for the start of an 8 character timex string
;
SYS584c     EQU     $584c       ; Parameters: A - Some constant
PUT6TOP     EQU     $587e
;  Parameters: 
;   A = Offset from 0110 for the start of a 6 byte data item to be put on the top
;       line of the screen.  This uses a different encoding for characters where:
;       we have 32 different values which correspond to:
;        "0123456789ABCDEFGH:LMNPRTUWYr -+"
;         0123456789abcdef0123456789abcdef
;        e.g. $12=':', $13='L'.
;        It appears that things wrap when you get to $20
;
DASHMSG1     EQU     $5882   ; Put up a message on the top line with a dash between the 4th and 5th characters
; Parameters - Offset into message selector string.  Typically you want a multiple of 6 to choose from these below
;  00 = " SET-  "
;  06 = "HOLD-TO"
;  0C = "ALAR-M "
;  12 = "ENTE-R "
;  18 = "    -HR"
;  1E = "SWIT-CH"
;  24 = " TIM-E "
;  2A = "FORM-AT" 
;
PUT6MID     EQU     $58a8
;  Parameters: 
;   A = Offset from 0110 for the start of a 6 byte data item to be put on the top
;       line of the screen.  This uses a different encoding for characters where:
;       we have 32 different values which correspond to:
;        "0123456789ABCDEFGH:LMNPRTUWYr -+";        e.g. $12=':', $13='L'.
;        It appears that things wrap when you get to $20
;
SYS58d2     EQU     $58d2
SYS58d8     EQU     $58d8