1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
|
;Name: Hello World
;Version: HELLO
;Description: This is a simple Hello Program
;by John A. Toebes, VIII
;
;TIP: Download your watch faster: Download a WristApp once, then do not send it again. It stays in the watch!
;HelpFile: watchapp.hlp
;HelpTopic: 106
INCLUDE "wristapp.i"
;
; (1) Program specific constants
;
FLAGBYTE EQU $61
; Bit 0 indicates that we want to show the segments instead of the message
;
START EQU *
;
; (2) System entry point vectors
L0110: jmp MAIN ; The main entry point - WRIST_MAIN
L0113: rts ; Called when we are suspended for any reason - WRIST_SUSPEND
nop
nop
L0116: rts ; Called to handle any timers or time events - WRIST_DOTIC
nop
nop
L0119: rts ; Called when the COMM app starts and we have timers pending - WRIST_INCOMM
nop
nop
L011c: rts ; Called when the COMM app loads new data - WRIST_NEWDATA
nop
nop
L011f: lda STATETAB,X ; The state table get routine - WRIST_GETSTATE
rts
L0123: jmp HANDLE_STATE0
db STATETAB-STATETAB
;
; (3) Program strings
S6_HELLO: timex6 "HELLO "
S6_WORLD: timex6 "WORLD "
;
; (4) State Table
; (4) State Table
STATETAB:
db 0
db EVT_ENTER,TIM_ONCE,0 ; Initial state
db EVT_RESUME,TIM_ONCE,0 ; Resume from a nested app
db EVT_DNNEXT,TIM_ONCE,0 ; Next button
db EVT_MODE,TIM_ONCE,$FF ; Mode button
db EVT_END
;
; (5) State Table 0 Handler
; This is called to process the state events. We only see ENTER, RESUME, and DNNEXT events
;
HANDLE_STATE0:
bset 1,$8f ; Indicate that we can be suspended
lda BTNSTATE ; Get the event
cmp #EVT_DNNEXT ; Did they press the next button?
beq DOTOGGLE ; Yes, toggle what we are displaying
CLEARIT bclr 0,FLAGBYTE ; Start us in the show display state
REFRESH brclr 0,FLAGBYTE,SHOWDISP ; Do we want to see the main display?
jmp SETALL ; No, just turn on all segments
SHOWDISP jsr CLEARALL ; Clear the display
lda #S6_HELLO-START ; Get the offset for the first string
jsr PUT6TOP ; And send it to the top line
lda #S6_WORLD-START ; Get the offset for the second string
jsr PUT6MID ; and put it on the middle line
lda #SYS8_MODE ; Get the system offset for the 'MODE' string
jmp PUTMSGBOT ; and put it on the bottom line
;
; (6) Our only real piece of working code...
DOTOGGLE brset 0,FLAGBYTE,CLEARIT ; If it is set, just jump to clear it like normal
bset 0,FLAGBYTE ; Already clear, so set it
bra REFRESH ; and let the refresh code handle it
;
; (7) This is the main initialization routine which is called when we first get the app into memory
;
MAIN:
lda #$c0 ; We want button beeps and to indicate that we have been loaded
sta $96
clr FLAGBYTE ; start with a clean slate
rts
|