OSDN Git Service

531bf31f880edff250663f91938e21a4f7c9903c
[fast-forth/master.git] / MSP430-FORTH / MSP_EXP430FR5994 / RTC.4TH
1
2 ; --------------------
3 ; RTC.4th
4 ; --------------------
5
6 PWR_STATE
7
8 [DEFINED] {RTC} [IF]  {RTC} [THEN]
9
10 MARKER {RTC}
11
12 [UNDEFINED] IF [IF]
13 CODE IF
14 SUB #2,R15
15 MOV R14,0(R15)
16 MOV &$1DC6,R14
17 ADD #4,&$1DC6
18 MOV #$4042,0(R14)
19 ADD #2,R14
20 MOV @R13+,R0
21 ENDCODE IMMEDIATE
22
23 CODE THEN
24 MOV &$1DC6,0(R14)
25 MOV @R15+,R14
26 MOV @R13+,R0
27 ENDCODE IMMEDIATE
28 [THEN]
29
30 : NORTC
31 IF
32     {RTC}
33     ECHO $0D EMIT
34     ABORT" no RTC on this device !"
35 THEN
36 ;
37
38 [UNDEFINED] AND [IF]
39 CODE AND
40 AND @R15+,R14
41 MOV @R13+,R0
42 ENDCODE
43 [THEN]
44
45 [UNDEFINED] OR [IF]
46 CODE OR
47 BIS @R15+,R14
48 MOV @R13+,R0
49 ENDCODE
50 [THEN]
51
52 [UNDEFINED] @ [IF]
53 CODE @
54 MOV @R14,R14
55 MOV @R13+,R0
56 ENDCODE
57 [THEN]
58
59 [UNDEFINED] U< [IF]
60 CODE U<
61 SUB @R15+,R14
62 0<> IF
63     MOV #-1,R14
64     U< IF
65         AND #0,R14
66     THEN
67 THEN
68 MOV @R13+,R0
69 ENDCODE
70 [THEN]
71
72                         ; search devide ID:
73 $81EF $1A04 @ U<        ; MSP430FR2433 or...
74 $1A04 @ $8241 U<        ; ...MSP430FR4133
75 AND
76 $830B $1A04 @ U<        ; MSP430FR21xx/23xx/24xx/25xx/26xx
77 OR                      ; -- flag       0 ==> RTC, -1 ==> no RTC
78 NORTC
79
80 [UNDEFINED] = [IF]
81 CODE =
82 SUB @R15+,R14
83 0<> IF
84     AND #0,R14
85     MOV @R13+,R0
86 THEN
87 XOR #-1,R14
88 MOV @R13+,R0
89 ENDCODE
90 [THEN]
91
92 [UNDEFINED] SWAP [IF]
93 CODE SWAP
94 MOV @R15,R10
95 MOV R14,0(R15)
96 MOV R10,R14
97 MOV @R13+,R0
98 ENDCODE
99 [THEN]
100
101 [UNDEFINED] OVER [IF]
102 CODE OVER
103 MOV R14,-2(R15)
104 MOV @R15,R14
105 SUB #2,R15
106 MOV @R13+,R0
107 ENDCODE
108 [THEN]
109
110 [UNDEFINED] EXECUTE [IF]
111 CODE EXECUTE
112 MOV R14,R10
113 MOV @R15+,R14
114 MOV R10,R0
115 ENDCODE
116 [THEN]
117
118 [UNDEFINED] DO [IF]
119 CODE DO
120 SUB #2,R15
121 MOV R14,0(R15)
122 ADD #2,&$1DC6
123 MOV &$1DC6,R14
124 MOV #$404C,-2(R14)
125 ADD #2,&$1C00
126 MOV &$1C00,R10
127 MOV #0,0(R10)
128 MOV @R13+,R0
129 ENDCODE IMMEDIATE
130
131 CODE LOOP
132     MOV #$406E,R9
133 BW1 ADD #4,&$1DC6
134     MOV &$1DC6,R10
135     MOV R9,-4(R10)
136     MOV R14,-2(R10)
137 BEGIN
138     MOV &$1C00,R14
139     SUB #2,&$1C00
140     MOV @R14,R14
141     CMP #0,R14
142 0<> WHILE
143     MOV R10,0(R14)
144 REPEAT
145     MOV @R15+,R14
146     MOV @R13+,R0
147 ENDCODE IMMEDIATE
148
149 CODE +LOOP
150 MOV #$405C,R9
151 GOTO BW1
152 ENDCODE IMMEDIATE
153 [THEN]
154
155 [UNDEFINED] - [IF]
156 CODE -
157 SUB @R15+,R14
158 XOR #-1,R14
159 ADD #1,R14
160 MOV @R13+,R0
161 ENDCODE
162 [THEN]
163
164 [UNDEFINED] MAX [IF]
165
166 CODE MAX
167     CMP @R15,R14
168     S<  ?GOTO FW1
169 BW1 ADD #2,R15
170     MOV @R13+,R0
171 ENDCODE
172
173 CODE MIN
174     CMP @R15,R14
175     S<  ?GOTO BW1
176 FW1 MOV @R15+,R14
177     MOV @R13+,R0
178 ENDCODE
179
180 [THEN]
181
182 [UNDEFINED] SPACES [IF]
183 CODE SPACES
184 CMP #0,R14
185 0<> IF
186     PUSH R13
187     BEGIN
188         LO2HI
189         $20 EMIT
190         HI2LO
191         SUB #2,R13 
192         SUB #1,R14
193     0= UNTIL
194     MOV @R1+,R13
195 THEN
196 MOV @R15+,R14
197 MOV @R13+,R0              
198 ENDCODE
199 [THEN]
200
201 [UNDEFINED] DUP [IF]
202 CODE DUP
203 BW1 SUB #2,R15
204     MOV R14,0(R15)
205     MOV @R13+,R0
206 ENDCODE
207
208 CODE ?DUP
209 CMP #0,R14
210 0<> ?GOTO BW1
211 MOV @R13+,R0
212 ENDCODE
213 [THEN]
214
215 [UNDEFINED] DEPTH [IF]
216 CODE DEPTH
217 MOV R14,-2(R15)
218 MOV #$1C80,R14
219 SUB R15,R14
220 RRA R14
221 SUB #2,R15
222 MOV @R13+,R0
223 ENDCODE
224 [THEN]
225
226 [UNDEFINED] >R [IF]
227 CODE >R
228 PUSH R14
229 MOV @R15+,R14
230 MOV @R13+,R0
231 ENDCODE
232 [THEN]
233
234 [UNDEFINED] R> [IF]
235 CODE R>
236 SUB #2,R15
237 MOV R14,0(R15)
238 MOV @R1+,R14
239 MOV @R13+,R0
240 ENDCODE
241 [THEN]
242
243 [UNDEFINED] >BODY [IF]
244 CODE >BODY
245 ADD #4,R14
246 MOV @R13+,R0
247 ENDCODE
248 [THEN]
249
250 [UNDEFINED] EXECUTE [IF]
251 CODE EXECUTE
252 MOV R14,R10
253 MOV @R15+,R14
254 MOV R10,R0
255 ENDCODE
256 [THEN]
257
258 [UNDEFINED] U.R [IF]
259 : U.R
260   >R  <# 0 # #S #>  
261   R> OVER - 0 MAX SPACES TYPE
262 ;
263 [THEN]
264
265 CODE DATE?
266     SUB     #6,R15
267     MOV     R14,4(R15)
268     BEGIN
269         BIT.B #$10,&$4A2
270     0<> UNTIL
271     MOV     &$4B6,2(R15)
272     MOV.B   &$4B5,R14
273     MOV     R14,0(R15)
274     MOV.B   &$4B4,R14
275 COLON
276     2 U.R $2F EMIT
277     2 U.R $2F EMIT . 
278 ;
279
280 : DATE!
281 2 DEPTH U< IF
282     HI2LO
283     MOV     R14,&$4B6
284     MOV.B   @R15,&$4B5
285     MOV.B   2(R15),&$4B4
286     ADD     #4,R15
287     MOV     @R15+,R14
288     LO2HI
289 THEN
290     ." we are on " DATE? 
291 ;
292
293 CODE TIME?
294     SUB     #6,R15
295     MOV     R14,4(R15)
296     BEGIN
297         BIT.B #$10,&$4A2
298     0<> UNTIL
299     MOV.B   &$4B0,R14
300     MOV     R14,2(R15)
301     MOV.B   &$4B1,R14
302     MOV     R14,0(R15)
303     MOV.B   &$4B2,R14
304 COLON
305     2 U.R $3A EMIT 
306     2 U.R $3A EMIT 2 U.R 
307 ;
308
309 : TIME!
310 2 DEPTH U< IF
311     HI2LO
312     MOV     R14,&$4B0
313     MOV.B   @R15,&$4B1
314     MOV.B   2(R15),&$4B2
315     ADD     #4,R15
316     MOV     @R15+,R14
317     LO2HI
318 THEN
319     ." it is " TIME? 
320 ;
321
322 PWR_HERE
323
324
325 [UNDEFINED] S_ [IF]
326 CODE S_
327 MOV #0,&$1DB4
328 COLON
329 $4018 ,
330 $20 WORD
331 HI2LO
332 MOV.B @R14,R14
333 ADD #1,R14
334 BIT #1,R14
335 ADDC R14,&$1DC6
336 MOV @R15+,R14
337 MOV @R1+,R13
338 MOV #$20,&$1DB4
339 MOV @R13+,R0
340 ENDCODE IMMEDIATE
341 [THEN]
342
343 [UNDEFINED] ESC [IF]
344 CODE ESC
345 CMP #0,&$1DBE
346 0= IF MOV @R13+,R0
347 THEN
348 COLON          
349 $1B
350 POSTPONE LITERAL
351 POSTPONE EMIT
352 POSTPONE S_
353 POSTPONE TYPE
354 ; IMMEDIATE
355 [THEN]
356
357 : PAD_ACCEPT
358 $1CE4
359 DUP #84
360     ['] ACCEPT DUP @
361         $4030 =
362         IF >BODY
363         THEN
364     EXECUTE
365 ;
366
367 : GET_TIME
368 PWR_STATE
369 42
370 0 DO CR LOOP
371 ESC [H
372
373 CR ." DATE (DMY): "
374 PAD_ACCEPT
375 EVALUATE CR DATE!
376
377 CR ." TIME (HMS): "
378 PAD_ACCEPT
379 EVALUATE CR TIME!
380 ;
381
382 ECHO GET_TIME