1764
|
1 ********************************************************************
|
|
2 * SWSet - Set time in SmartWatch
|
|
3 *
|
|
4 * $Id$
|
|
5 *
|
|
6 * Copyright May, 1990 by Robert Gault
|
|
7 *
|
|
8 * SWSET will set the smartwatch in either 12hr or 24hr mode
|
|
9 * time will be sent to OS-9 in 24hr mode for compatability
|
|
10 * see new DATE which presents time in 12hr. mode with day of week
|
|
11 * and SWREAD which sends data from clock to OS-9
|
|
12 *
|
|
13 * Ed. Comments Who YY/MM/DD
|
|
14 * ------------------------------------------------------------------
|
|
15 * 1 Revised: clock disable; no relocation RG 95/07/04
|
|
16 * Revised to accommodate Level1 & Level2 so RG 04/07/28
|
|
17 * relocation of code brought back.
|
|
18
|
|
19 nam SWSet
|
|
20 ttl Set time in SmartWatch
|
|
21
|
|
22 ifp1
|
|
23 use defsfile
|
|
24 use systype
|
|
25 endc
|
|
26
|
|
27 type set prgrm+objct
|
|
28 revs set reent+1
|
|
29 edition set 1
|
|
30
|
|
31 mod pgrmend,name,type,revs,start,size
|
|
32
|
|
33
|
|
34 locblk0 rmb 2 pointer to block 0
|
|
35 locblk3E rmb 2 pointer to block $3E ie. disk ROM
|
|
36 temp1 rmb 1
|
|
37 temp2 rmb 1
|
|
38 clkbyte rmb 1
|
|
39 clkflag rmb 1
|
|
40 mpiimage rmb 1
|
|
41 alrtimag rmb 8 storage for the alert code with following:
|
|
42 csec rmb 1
|
|
43 sec rmb 1
|
|
44 min rmb 1
|
|
45 hour rmb 1
|
|
46 daywk rmb 1
|
|
47 daymn rmb 1
|
|
48 month rmb 1
|
|
49 year rmb 1
|
|
50 stopbyte rmb 1
|
|
51 rawdata rmb 18
|
|
52 relocimg rmb 300
|
|
53 stack rmb 200
|
|
54 size equ .
|
|
55
|
|
56 rom equ $FFDE
|
|
57 ram equ $FFDF
|
|
58 cartI equ $FF22
|
|
59 skp1 equ $21
|
|
60 skp2 equ $8C code for cmpx #nn
|
|
61
|
|
62 name fcs /SWSet/
|
|
63 fcb edition
|
|
64
|
|
65 clknfnd fcb C$LF
|
|
66 fcc /no clock found/
|
|
67 fcb C$LF
|
|
68 fcc /I'm running Setime/
|
|
69 fcb C$CR
|
|
70 setime fcc /setime/
|
|
71 fcb C$CR
|
|
72 swread fcc /swread/
|
|
73 fcb C$CR
|
|
74
|
|
75 query lda #1
|
|
76 os9 I$Writln
|
|
77 clra path 0
|
|
78 leax temp1,u storage
|
|
79 ldy #1
|
|
80 os9 I$Read
|
|
81 lda temp1 get key
|
|
82 rts
|
|
83
|
|
84 noroom lda #2
|
|
85 leax mesroom,pcr
|
|
86 ldy #50
|
|
87 os9 I$WritLn
|
|
88 clrb
|
|
89 os9 F$Exit
|
|
90
|
|
91 start leax alrtimag,u point to image of alert code
|
|
92 ldb #8
|
|
93 leay alert,pcr
|
|
94 s1loop lda ,y+ transfer to data
|
|
95 sta ,x+
|
|
96 decb
|
|
97 bne s1loop
|
|
98 ldb #8
|
|
99 s2loop clr ,x+ clear out the time date data
|
|
100 decb
|
|
101 bne s2loop
|
|
102 dec ,x mark stop byte
|
|
103 lda MPI.Slct
|
|
104 anda #3 keep IRQ
|
|
105 ora #$30 start with slot 4
|
|
106 sta mpiimage save setting
|
|
107 lda #1
|
|
108 leax crmesage,pcr copyright message
|
|
109 ldy #mesage1-crmesage
|
|
110 os9 I$WritLn
|
|
111 getfunc leax mesage1,pcr select time or disable clock
|
|
112 ldy #mesage2-mesage1
|
|
113 bsr query
|
|
114 anda #$DF
|
|
115 cmpa #'D disable
|
|
116 lbeq killit
|
|
117 cmpa #'T timer
|
|
118 lbeq doit
|
|
119 cmpa #'C clock
|
|
120 bne getfunc
|
|
121 getday leax mesage2,pcr
|
|
122 ldy #mesage3-mesage2 get day of week
|
|
123 bsr query
|
|
124 suba #'0
|
|
125 blo getday
|
|
126 cmpa #7
|
|
127 bhi getday
|
|
128 sta daywk convert from ascii to number
|
|
129 tmode leax mesage3,pcr 12 or 24 hour time
|
|
130 ldy #mesage4-mesage3
|
|
131 lbsr query
|
|
132 cmpa #'1 error trap
|
|
133 blo tmode
|
|
134 cmpa #'2
|
|
135 bhi tmode
|
|
136 beq date
|
|
137 lda #%10000000 12 hr bit
|
|
138 sta hour
|
|
139 getAMPM leax mesage4,pcr
|
|
140 ldy #mesage5-mesage4
|
|
141 lbsr query
|
|
142 clrb
|
|
143 anda #$df
|
|
144 cmpa #'A
|
|
145 beq AMPMcode
|
|
146 cmpa #'P
|
|
147 bne getAMPM
|
|
148 ldb #%100000 PM bit
|
|
149 AMPMcode orb hour
|
|
150 stb hour
|
|
151 date leax mesage5,pcr get date and time
|
|
152 lda #1
|
|
153 ldy #endmes-mesage5
|
|
154 os9 I$Writln
|
|
155 clra
|
|
156 leax rawdata,u
|
|
157 ldy #18
|
|
158 os9 I$ReadLn
|
|
159 leax rawdata,u
|
|
160 clr temp1
|
|
161 bsr ascbcd
|
|
162 stb year
|
|
163 bsr ascbcd
|
|
164 stb month
|
|
165 bsr ascbcd
|
|
166 stb daymn
|
|
167 bsr ascbcd
|
|
168 tst hour
|
|
169 beq sthour
|
|
170 cmpb #$12 max in 12 hour mode
|
|
171 bhi date
|
|
172 orb hour
|
|
173 sthour stb hour
|
|
174 bsr ascbcd
|
|
175 stb min
|
|
176 bsr ascbcd
|
|
177 stb sec
|
|
178 bra doit
|
|
179
|
|
180 ascbcd clr temp2
|
|
181 bsr data1
|
|
182 bne noinfo
|
|
183 com temp2
|
|
184 tfr a,b
|
|
185 bsr data1
|
|
186 bne endasc
|
|
187 lslb
|
|
188 lslb
|
|
189 lslb
|
|
190 lslb
|
|
191 pshs a
|
|
192 addb ,s+
|
|
193 * inca
|
|
194 endasc rts
|
|
195 noinfo leas 2,s
|
|
196 bra doit
|
|
197
|
|
198 data1 lda ,x+
|
|
199 beq nomore
|
|
200 cmpa #C$CR
|
|
201 beq nomore
|
|
202 cmpa #C$SPAC
|
|
203 beq data2
|
|
204 cmpa #'/
|
|
205 beq data2
|
|
206 cmpa #':
|
|
207 beq data2
|
|
208 suba #'0
|
|
209 bcs error
|
|
210 cmpa #9
|
|
211 bhi error
|
|
212 orcc #Zero
|
|
213 rts
|
|
214 data2 tst temp2
|
|
215 beq data1
|
|
216 rts
|
|
217 nomore com temp1
|
|
218 rts
|
|
219 error leas 4,s
|
|
220 lbra date
|
|
221
|
|
222 doit equ *
|
|
223 IFGT Level-1
|
|
224 pshs u
|
|
225 ldb #1
|
|
226 ldx #$3E disk rom
|
|
227 os9 f$mapblk
|
|
228 bcs exit2
|
|
229 stu locblk3E
|
|
230 ldx #0
|
|
231 os9 f$mapblk
|
|
232 bcs exit2
|
|
233 leax ,u
|
|
234 stx locblk0
|
|
235 ldu ,s
|
|
236 bsr reloc
|
|
237 ldb #1
|
|
238 ldu locblk3E
|
|
239 os9 f$clrblk
|
|
240 ldb #1
|
|
241 ldu locblk0
|
|
242 os9 f$clrblk
|
|
243 puls u
|
|
244 ELSE
|
|
245 tfr u,d look at the start of the program data page
|
|
246 cmpa #$7E
|
|
247 lbhs noroom
|
|
248 ldx #RTC.Base
|
|
249 stx locblk3E
|
|
250 ldx #0
|
|
251 stx locblk0
|
|
252 leax reloc,pcr
|
|
253 pshs u
|
|
254 leau relocimg,u
|
|
255 ldy #endrel-reloc
|
|
256 rl lda ,x+
|
|
257 sta ,u+
|
|
258 leay -1,y
|
|
259 bne rl
|
|
260 puls u
|
|
261 jsr relocimg,u
|
|
262 ENDC
|
|
263 tst clkflag
|
|
264 bne exit
|
|
265 lda #2
|
|
266 leax clknfnd,pcr
|
|
267 ldy #40
|
|
268 os9 I$Writln
|
|
269 lda #$11
|
|
270 ldb #2
|
|
271 leax setime,pcr
|
|
272 ldy #0
|
|
273 leas stack,u
|
|
274 leau size,u
|
|
275 os9 F$Chain
|
|
276 exit lda #$11
|
|
277 ldb #2
|
|
278 leax swread,pcr
|
|
279 ldy #0
|
|
280 leas stack,u
|
|
281 leau size,u
|
|
282 os9 F$Chain
|
|
283 exit2 leas 2,s
|
|
284 coma
|
|
285 os9 F$Exit
|
|
286
|
|
287 killit lda #C$SPAC
|
|
288 sta daywk
|
|
289 bra doit
|
|
290
|
|
291 * regX points to system DP, regU points to program DP
|
|
292 reloc pshs cc
|
|
293 IFGT Level-1
|
|
294 lda d.hinit,x get $FF90 image
|
|
295 ENDC
|
|
296 ldb MPI.Slct
|
|
297 pshs d
|
|
298 IFGT Level-1
|
|
299 anda #$CC external disk rom access
|
|
300 ENDC
|
|
301 orcc #IntMasks
|
|
302 IFGT Level-1
|
|
303 sta $FF90 set for external ROM
|
|
304 ENDC
|
|
305 sta rom
|
|
306 ldx locblk3E
|
|
307 ldb mpiimage get new value
|
|
308 clr clkflag
|
|
309
|
|
310 findclk stb MPI.Slct set new slot
|
|
311 leay alert,pcr
|
|
312 lda 4,x clear clock
|
|
313 clrb
|
|
314 bita #1
|
|
315 beq low
|
|
316 comb
|
|
317 low stb clkbyte
|
|
318 bsr nxtbyte
|
|
319 bsr gettime
|
|
320 tst clkflag
|
|
321 bne found
|
|
322 ldb mpiimage
|
|
323 bitb #$30 test for last try
|
|
324 beq found
|
|
325 subb #$10 next slot
|
|
326 stb mpiimage
|
|
327 lbra findclk
|
|
328
|
|
329 nxtbyte ldb #8 bits/byte
|
|
330 lda ,y+
|
|
331 cmpa #-1
|
|
332 bne nxtbit
|
|
333 rts
|
|
334 nxtbit lsra
|
|
335 bcs high
|
|
336 cmpa ,x talk to clock; faster than tst
|
|
337 fcb skp2
|
|
338 high cmpa 1,x
|
|
339 decb
|
|
340 bne nxtbit
|
|
341 bra nxtbyte
|
|
342
|
|
343 gettime lda #8 bytes to read
|
|
344 pshs a
|
|
345 timebyte ldb #8
|
|
346 timebit lsr 4,x read clock
|
|
347 rora
|
|
348 decb
|
|
349 bne timebit
|
|
350 cmpa clkbyte
|
|
351 beq maybe
|
|
352 inc clkflag
|
|
353 maybe dec ,s
|
|
354 bne timebyte
|
|
355 leas 1,s
|
|
356 rts
|
|
357
|
|
358 found tst clkflag
|
|
359 beq noclk1
|
|
360 leay alrtimag,u
|
|
361 lda 4,x
|
|
362 bsr nxtbyte
|
|
363 noclk1 sta ram
|
|
364 puls d
|
|
365 stb MPI.Slct
|
|
366 tst cartI
|
|
367 sta $ff90
|
|
368 puls cc,pc
|
|
369
|
|
370 alert fcb $C5,$3A,$A3,$5C,$C5,$3A,$A3,$5C,$ff
|
|
371 endrel equ *
|
|
372
|
|
373 mesroom fcb C$LF
|
|
374 fcc /Don't have relocation memory!/
|
|
375 fcb C$CR
|
|
376 crmesage fcb C$LF
|
|
377 fcc /Set Smartwatch/
|
|
378 fcb C$LF
|
|
379 fcc /(c) May, 1990 by Robert Gault/
|
|
380 fcb C$LF
|
|
381 fcb C$CR
|
|
382 mesage1 fcc /Select clock, timer, or disable/
|
|
383 fcb C$LF
|
|
384 fcc /<C>lock; <T>imer; <D>isable ->/
|
|
385 mesage2 fcb C$LF
|
|
386 fcc /Enter the day 0-7; Mon=1 Sun=7/
|
|
387 fcb C$LF
|
|
388 fcc /day = ->? /
|
|
389 mesage3 fcb C$LF
|
|
390 fcc /Select 12 or 24 hour clock/
|
|
391 fcb C$LF
|
|
392 fcc /<1> = 12; <2> = 24 ->/
|
|
393 mesage4 fcb C$LF
|
|
394 fcc /Select <A>M or <P>M ->/
|
|
395 mesage5 fcb C$LF
|
|
396 fcc /Enter as much of the date & time as desired/
|
|
397 fcb C$LF
|
|
398 fcc !yy/mm/dd hh:mm:ss!
|
|
399 fcb C$LF
|
|
400 fcc /->/
|
|
401 endmes equ *
|
|
402
|
|
403 emod
|
|
404 pgrmend equ *
|
|
405 end
|