OSDN Git Service

Merge branch 'master' of https://framagit.org/Jean-Mi/FAST-FORTH
[fast-forth/master.git] / MSP430-FORTH / MSP_EXP430FR5994 / RTC.4TH
1
2 CODE ABORT_RTC
3 SUB #4,R15
4 MOV R14,2(R15)
5 MOV &$1812,R14
6 BIT #$8000,R14
7 0<> IF MOV #0,R14 THEN
8 MOV R14,0(R15)
9 MOV &$180E,R14
10 SUB #308,R14
11 COLON
12 $0D EMIT
13 ABORT" FastForth V3.8 please!"
14 ABORT" target without LF_XTAL !"
15 PWR_STATE
16 ;
17
18 ABORT_RTC
19
20 ; --------------------
21 ; RTC.4th for MSP_EXP430FR5994
22 ; --------------------
23
24 [DEFINED] {RTC} [IF] {RTC} [THEN] 
25
26 MARKER {RTC}
27 8 ALLOT
28
29
30 [UNDEFINED] OR [IF]
31 CODE OR
32 BIS @R15+,R14
33 MOV @R13+,R0
34 ENDCODE
35 [THEN]
36
37 [UNDEFINED] C@ [IF]
38 CODE C@
39 MOV.B @R14,R14
40 MOV @R13+,R0
41 ENDCODE
42 [THEN]
43
44 [UNDEFINED] C! [IF]
45 CODE C!
46 MOV.B @R15+,0(R14)
47 ADD #1,R15
48 MOV @R15+,R14
49 MOV @R13+,R0
50 ENDCODE
51 [THEN]
52
53 [UNDEFINED] SWAP [IF]
54 CODE SWAP
55 MOV @R15,R10
56 MOV R14,0(R15)
57 MOV R10,R14
58 MOV @R13+,R0
59 ENDCODE
60 [THEN]
61
62 [UNDEFINED] OVER [IF]
63 CODE OVER
64 MOV R14,-2(R15)
65 MOV @R15,R14
66 SUB #2,R15
67 MOV @R13+,R0
68 ENDCODE
69 [THEN]
70
71 [UNDEFINED] DUP [IF]
72 CODE DUP
73 BW1 SUB #2,R15
74     MOV R14,0(R15)
75     MOV @R13+,R0
76 ENDCODE
77
78 CODE ?DUP
79 CMP #0,R14
80 0<> ?GOTO BW1
81 MOV @R13+,R0
82 ENDCODE
83 [THEN]
84
85 [UNDEFINED] DROP [IF]
86 CODE DROP
87 MOV @R15+,R14
88 MOV @R13+,R0
89 ENDCODE
90 [THEN]
91
92 [UNDEFINED] DEPTH [IF]
93 CODE DEPTH
94 MOV R14,-2(R15)
95 MOV #$1C80,R14
96 SUB R15,R14
97 RRA R14
98 SUB #2,R15
99 MOV @R13+,R0
100 ENDCODE
101 [THEN]
102
103 [UNDEFINED] >R [IF]
104 CODE >R
105 PUSH R14
106 MOV @R15+,R14
107 MOV @R13+,R0
108 ENDCODE
109 [THEN]
110
111 [UNDEFINED] R> [IF]
112 CODE R>
113 SUB #2,R15
114 MOV R14,0(R15)
115 MOV @R1+,R14
116 MOV @R13+,R0
117 ENDCODE
118 [THEN]
119
120 [UNDEFINED] 1+ [IF]
121 CODE 1+
122 ADD #1,R14
123 MOV @R13+,R0
124 ENDCODE
125 [THEN]
126
127 [UNDEFINED] U< [IF]
128 CODE U<
129 SUB @R15+,R14
130 0<> IF
131     MOV #-1,R14
132     U< IF
133         AND #0,R14
134     THEN
135 THEN
136 MOV @R13+,R0
137 ENDCODE
138 [THEN]
139
140 [UNDEFINED] = [IF]
141 CODE =
142 SUB @R15+,R14
143 0<> IF
144     AND #0,R14
145     MOV @R13+,R0
146 THEN
147 XOR #-1,R14
148 MOV @R13+,R0
149 ENDCODE
150 [THEN]
151
152 [UNDEFINED] IF [IF]
153 CODE IF
154 SUB #2,R15
155 MOV R14,0(R15)
156 MOV &$1DC6,R14
157 ADD #4,&$1DC6
158 MOV #$4034,0(R14)
159 ADD #2,R14
160 MOV @R13+,R0
161 ENDCODE IMMEDIATE
162
163 CODE THEN
164 MOV &$1DC6,0(R14)
165 MOV @R15+,R14
166 MOV @R13+,R0
167 ENDCODE IMMEDIATE
168 [THEN]
169
170 [UNDEFINED] ELSE [IF]
171 CODE ELSE
172 ADD #4,&$1DC6
173 MOV &$1DC6,R10
174 MOV #$403A,-4(R10)
175 MOV R10,0(R14)
176 SUB #2,R10
177 MOV R10,R14
178 MOV @R13+,R0
179 ENDCODE IMMEDIATE
180 [THEN]
181
182 [UNDEFINED] DO [IF]
183 CODE DO
184 SUB #2,R15
185 MOV R14,0(R15)
186 ADD #2,&$1DC6
187 MOV &$1DC6,R14
188 MOV #$403E,-2(R14)
189 ADD #2,&$1C00
190 MOV &$1C00,R10
191 MOV #0,0(R10)
192 MOV @R13+,R0
193 ENDCODE IMMEDIATE
194
195 CODE LOOP
196     MOV #$4060,R9
197 BW1 ADD #4,&$1DC6
198     MOV &$1DC6,R10
199     MOV R9,-4(R10)
200     MOV R14,-2(R10)
201 BEGIN
202     MOV &$1C00,R14
203     SUB #2,&$1C00
204     MOV @R14,R14
205     CMP #0,R14
206 0<> WHILE
207     MOV R10,0(R14)
208 REPEAT
209     MOV @R15+,R14
210     MOV @R13+,R0
211 ENDCODE IMMEDIATE
212
213 CODE +LOOP
214 MOV #$404E,R9
215 GOTO BW1
216 ENDCODE IMMEDIATE
217 [THEN]
218
219 [UNDEFINED] CASE [IF]
220 : CASE 0 ; IMMEDIATE
221
222 : OF
223 1+      
224 >R      
225 POSTPONE OVER POSTPONE =
226 POSTPONE IF     
227 POSTPONE DROP   
228 R>      
229 ; IMMEDIATE 
230
231 : ENDOF
232 >R      
233 POSTPONE ELSE 
234 R>      
235 ; IMMEDIATE 
236
237 : ENDCASE
238 POSTPONE DROP
239 0 DO 
240     POSTPONE THEN 
241 LOOP 
242 ; IMMEDIATE 
243 [THEN]
244
245 [UNDEFINED] + [IF]
246 CODE +
247 ADD @R15+,R14
248 MOV @R13+,R0
249 ENDCODE
250 [THEN]
251
252 [UNDEFINED] - [IF]
253 CODE -
254 SUB @R15+,R14
255 XOR #-1,R14
256 ADD #1,R14
257 MOV @R13+,R0
258 ENDCODE
259 [THEN]
260
261 [UNDEFINED] MAX [IF]
262
263 CODE MAX
264     CMP @R15,R14
265     S<  ?GOTO FW1
266 BW1 ADD #2,R15
267     MOV @R13+,R0
268 ENDCODE
269
270 CODE MIN
271     CMP @R15,R14
272     S<  ?GOTO BW1
273 FW1 MOV @R15+,R14
274     MOV @R13+,R0
275 ENDCODE
276
277 [THEN]
278
279 [UNDEFINED] 2* [IF]
280 CODE 2*
281 ADD R14,R14
282 MOV @R13+,R0
283 ENDCODE
284 [THEN]
285
286 [UNDEFINED] UM* [IF]    
287 CODE UM*
288     MOV @R15,&$4C0
289     MOV R14,&$4C8
290     MOV &$4E4,0(R15)
291     MOV &$4E6,R14
292     MOV @R13+,R0
293 ENDCODE
294 [THEN] 
295
296 [UNDEFINED] UM/MOD [IF]
297 CODE UM/MOD
298     PUSH #DROP
299     MOV #$4066,R0
300 ENDCODE
301 [THEN]
302
303 [UNDEFINED] U*/ [IF]
304 : U*/
305 >R UM* R> UM/MOD SWAP DROP
306 ;
307 [THEN]
308
309 [UNDEFINED] U/MOD [IF]
310 : U/MOD
311 0 SWAP UM/MOD
312 ;
313 [THEN]
314
315 [UNDEFINED] UMOD [IF]
316 : UMOD
317 U/MOD DROP
318 ;
319 [THEN]
320
321 [UNDEFINED] U/ [IF]
322 : U/
323 U/MOD SWAP DROP
324 ;
325 [THEN]
326
327 [UNDEFINED] SPACES [IF]
328 CODE SPACES
329 CMP #0,R14
330 0<> IF
331     PUSH R13
332     BEGIN
333         LO2HI
334         $20 EMIT
335         HI2LO
336         SUB #2,R13 
337         SUB #1,R14
338     0= UNTIL
339     MOV @R1+,R13
340 THEN
341 MOV @R15+,R14
342 MOV @R13+,R0              
343 ENDCODE
344 [THEN]
345
346 [UNDEFINED] HERE [IF]
347 CODE HERE
348 MOV #$4028,R0
349 ENDCODE
350 [THEN]
351
352 [UNDEFINED] U.R [IF]
353 : U.R
354   >R  <# 0 # #S #>  
355   R> OVER - 0 MAX SPACES TYPE
356 ;
357 [THEN]
358
359 $81EF $1A04 @ U<     ; search device ID: MSP430FR4133 or...
360 $1A04 @ $8241 U<     ; ...MSP430FR2433
361 =   
362 $830B $1A04 @ U<     ; MSP430FR21xx/23xx/24xx/25xx/26xx
363 OR                      ; -- flag
364
365 [IF] 
366
367
368     CREATE $4B0 2 ALLOT
369     CREATE $4B1 2 ALLOT
370     CREATE $4B2 2 ALLOT
371     CREATE $4B3 2 ALLOT
372     CREATE $4B4 2 ALLOT
373     CREATE $4B5 2 ALLOT
374     CREATE $4B6 2 ALLOT
375
376     HDNCODE RTC_INT
377     ADD #2,R1
378     BIT #1,&$4AE
379     ADD.B #1,&$4B0
380     CMP.B #60,&$4B0
381     U>= IF               
382         MOV.B #0,&$4B0
383         ADD.B #1,&$4B1
384         CMP.B #60,&$4B1
385         U>= IF               
386             MOV.B #0,&$4B1
387             ADD.B #1,&$4B2
388             CMP.B #24,&$4B2
389             U>= IF                
390                 MOV.B #0,&$4B2
391                 ADD.B #1,&$4B3
392                 CMP.B #7,&$4B3
393                 U>= IF
394                     MOV.B #0,&$4B3
395                 THEN
396                 ADD.B #1,&$4B4
397                 CMP.B #2,&$4B5
398                 0= IF
399                     COLON
400                     $4B6 @ 4 UMOD 
401                     IF 29
402                     ELSE
403                         $4B6 @ 100 UMOD 
404                         IF 30
405                         ELSE
406                             $4B6 @ 400 UMOD
407                             IF 29
408                             ELSE 30
409                             THEN
410                         THEN
411                     THEN
412                     HI2LO
413                     MOV @R1+,R13
414                     MOV R14,R9
415                     MOV @R15+,R14
416                 ELSE
417                     MOV #31,R9
418                     MOV.B &$4B5,R10
419                     CMP.B #8,R10
420                     0>= IF
421                         ADD.B #1,R10      
422                     THEN
423                     BIT.B #1,R10
424                     0<> IF      
425                         ADD #1,R9
426                     THEN
427                 THEN
428                 CMP.B R9,&$4B4
429                 U>= IF
430                     MOV.B #1,&$4B4
431                     ADD.B #1,&$4B5
432                     CMP.B #13,&$4B5
433                     U>= IF
434                     MOV.B #1,&$4B5
435                         ADD #1,&$4B6
436                     THEN
437                 THEN
438             THEN
439         THEN
440     THEN
441     MOV @R1+,R0
442     ENDCODE    
443
444     HDNCODE STOP_RTC
445     CMP #$40AA,&{RTC}+8
446     0<> IF
447     MOV #{RTC}+10,R9
448         MOV #$40AA,-2(R9)
449         MOV @R9+,&RTC_VEC
450         MOV @R9+,&COLD+2
451         MOV @R9+,&WARM+2
452     THEN
453     MOV #0,&RTCCTL
454     MOV.B #XIN,R9
455     BIC.B R9,&XT1_SEL
456     BIS.B R9,&XT1_DIR
457     BIC.B R9,&XT1_OUT
458     BIS.B R9,&XT1_OUT
459     BIC.B R9,&XT1_OUT
460     BIS.B R9,&XT1_OUT
461     BIC.B R9,&XT1_DIR
462     BIS.B R9,&XT1_SEL
463     MOV &COLD+2,R0
464     ENDCODE
465
466     HDNCODE INI_RTC
467     CALL &{RTC}+14
468     CMP #0,&RTCCTL
469     0= IF
470         MOV #$7F,&RTCMOD
471         BIT #-1,&$4AE
472         MOV #%0010_0110_0100_0010,&RTCCTL
473     THEN
474     MOV @R1+,R0
475     ENDCODE
476
477
478     CODE START_RTC
479     CMP #STOP_RTC,&{RTC}+8
480     0<> IF
481         MOV #STOP_RTC,&{RTC}+8
482         MOV &RTC_VEC,&{RTC}+10
483         MOV #RTC_INT,&RTC_VEC
484         MOV &COLD+2,&{RTC}+12
485         MOV #STOP_RTC,&COLD+2
486         MOV &WARM+2,&{RTC}+14
487         MOV #INI_RTC,&WARM+2
488     THEN
489     CALL #INI_RTC
490     MOV @R13+,R0
491     ENDCODE                 
492
493     : TIME?
494     $4B2 C@ 2 U.R $3A EMIT
495     $4B1 C@  2 U.R $3A EMIT
496     $4B0 C@  2 U.R 
497     ;
498     
499     : TIME!
500     START_RTC
501     2 DEPTH
502     U< IF
503         $4B0 C!
504         $4B1 C!
505         $4B2 C!
506     THEN
507     ." it is " TIME? 
508     ;
509
510     : DATE?
511
512 [ELSE]
513
514
515     CODE TIME?
516     BEGIN
517         BIT.B #$10,&$4A2
518     0<> UNTIL
519     COLON
520     $4B2 C@ 2 U.R $3A EMIT
521     $4B1 C@  2 U.R $3A EMIT
522     $4B0 C@  2 U.R 
523     ;
524     
525     : TIME!
526     2 DEPTH
527     U< IF
528         $4B0 C!
529         $4B1 C!
530         $4B2 C!
531     THEN
532     ." it is " TIME? 
533     ;
534
535     CODE DATE?
536     BEGIN
537         BIT.B #$10,&$4A2
538     0<> UNTIL
539     COLON
540
541 [THEN]
542
543
544     $4B3 C@
545     CASE
546     0 OF ." Sat"    ENDOF
547     1 OF ." Sun"    ENDOF
548     2 OF ." Mon"    ENDOF
549     3 OF ." Tue"    ENDOF
550     4 OF ." Wed"    ENDOF
551     5 OF ." Thu"    ENDOF
552     6 OF ." Fri"    ENDOF
553     ENDCASE  
554     $4B6 @
555     $4B5 C@
556     $4B4 C@
557     $20 EMIT
558     2 U.R $2F EMIT
559     2 U.R $2F EMIT
560     .
561 ;
562
563
564
565 : DATE!
566 2 DEPTH
567 U< IF
568     $4B6 !
569     $4B5 C!
570     $4B4 C!
571 THEN
572 $4B4 C@
573 $4B5 C@
574 $4B6 @
575 OVER 3 U<
576 IF 1 - SWAP 12 + SWAP 
577 THEN
578 100 U/MOD
579 DUP 4 U/ SWAP 2* -
580 SWAP DUP 4 U/ + +
581 SWAP 1+  13 5 U*/ + +
582 7 UMOD
583 $4B3 C!
584 ." we are on " DATE? 
585 ;
586
587 RST_HERE
588
589 [UNDEFINED] S_ [IF]
590 CODE S_
591 MOV #0,&$1DB4
592 COLON
593 $4014 ,
594 $20 WORD
595 HI2LO
596 MOV.B @R14,R14
597 ADD #1,R14
598 BIT #1,R14
599 ADDC R14,&$1DC6
600 MOV @R15+,R14
601 MOV @R1+,R13
602 MOV #$20,&$1DB4
603 MOV @R13+,R0
604 ENDCODE IMMEDIATE
605 [THEN]
606
607 [UNDEFINED] ESC [IF]
608 CODE ESC
609 CMP #0,&$1DBE
610 0= IF MOV @R13+,R0
611 THEN
612 COLON          
613 $1B
614 POSTPONE LITERAL
615 POSTPONE EMIT
616 POSTPONE S_
617 POSTPONE TYPE
618 ; IMMEDIATE
619 [THEN]
620
621 [UNDEFINED] >BODY [IF]
622 CODE >BODY
623 ADD #4,R14
624 MOV @R13+,R0
625 ENDCODE
626 [THEN]
627
628 [UNDEFINED] EXECUTE [IF]
629 CODE EXECUTE
630 PUSH R14
631 MOV @R15+,R14
632 MOV @R1+,R0
633 ENDCODE
634 [THEN]
635
636 [UNDEFINED] EVALUATE [IF]
637 CODE EVALUATE
638 MOV #$1DC0,R9
639 MOV @R9+,R12
640 MOV @R9+,R11
641 MOV @R9+,R10
642 PUSHM #4,R13
643 LO2HI
644 INTERPRET
645 HI2LO
646 MOV @R1+,&$1DC4
647 MOV @R1+,&$1DC2
648 MOV @R1+,&$1DC0
649 MOV @R1+,R13 
650 MOV @R13+,R0
651 ENDCODE
652 [THEN]
653
654 : SET_TIME
655 ESC [8;40;80t
656 39 0 DO CR LOOP
657 ESC [H
658 CR ." DATE (DMY): "
659 $1CE4 DUP #84
660 ['] ACCEPT >BODY
661 EXECUTE
662 EVALUATE
663 CR DATE!
664 CR ." TIME (HMS): "
665 $1CE4 DUP #84
666 ['] ACCEPT >BODY
667 EXECUTE
668 EVALUATE
669 CR TIME!
670 RST_STATE
671 ;
672  
673 ECHO
674 SET_TIME