summaryrefslogtreecommitdiffstats
path: root/hello/hello.asm
blob: 50042bdf2b2065087ccc1affd7289b6ecce63d3a (plain)
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