OSDN Git Service

la der de der
[fast-forth/master.git] / MSP430-FORTH / SD_430FR5994 / RTC.4TH
1
2 ; --------------------
3 ; RTC.4th for MSP_EXP430FR5994
4 ; --------------------
5
6     CODE ABORT_RTC
7     SUB #4,R15
8     MOV R14,2(R15)
9     MOV &$180E,R14
10     BIT #$4000,R14
11     0<> IF MOV #0,R14 THEN
12     MOV R14,0(R15)
13     MOV &$180A,R14
14     SUB #401,R14
15     COLON
16     $0D EMIT
17     ABORT" FastForth V4.1 please!"
18     ABORT" target without LF_XTAL !"
19     RST_RET
20     ;
21
22     ABORT_RTC
23
24     MARKER {RTC}
25
26 ; ------------------------------------------------------------------
27 ; first we download the set of definitions we need (from CORE_ANS.4th for MSP_EXP430FR5994)
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] 1- [IF]
128     CODE 1-
129     SUB #1,R14
130     MOV @R13+,R0
131     ENDCODE
132     [THEN]
133
134     [UNDEFINED] U<
135     [IF]
136     CODE U<
137     SUB @R15+,R14
138     0<> IF
139         MOV #-1,R14
140         U< IF
141             AND #0,R14
142         THEN
143     THEN
144     MOV @R13+,R0
145     ENDCODE
146     [THEN]
147
148     [UNDEFINED] = [IF]
149     CODE =
150     SUB @R15+,R14
151     0<> IF
152         AND #0,R14
153         MOV @R13+,R0
154     THEN
155     XOR #-1,R14
156     MOV @R13+,R0
157     ENDCODE
158     [THEN]
159
160     [UNDEFINED] IF [IF]
161
162     CODE IF
163     SUB #2,R15
164     MOV R14,0(R15)
165     MOV &$1DBE,R14
166     ADD #4,&$1DBE
167     MOV #[THEN]+$52,0(R14)
168     ADD #2,R14
169     MOV @R13+,R0
170     ENDCODE IMMEDIATE
171
172     CODE THEN
173     MOV &$1DBE,0(R14)
174     MOV @R15+,R14
175     MOV @R13+,R0
176     ENDCODE IMMEDIATE
177     [THEN]
178
179     [UNDEFINED] ELSE [IF]
180     CODE ELSE
181     ADD #4,&$1DBE
182     MOV &$1DBE,R10
183     MOV #[THEN]+$58,-4(R10)
184     MOV R10,0(R14)
185     SUB #2,R10
186     MOV R10,R14
187     MOV @R13+,R0
188     ENDCODE IMMEDIATE
189
190     [THEN]
191
192     [UNDEFINED] DO [IF]
193
194     HDNCODE XDO
195     MOV #$8000,R9
196     SUB @R15+,R9
197     MOV R14,R8
198     ADD R9,R8
199     PUSHM #2,R9
200     MOV @R15+,R14
201     MOV @R13+,R0
202     ENDCODE
203
204     CODE DO
205     SUB #2,R15
206     MOV R14,0(R15)
207     ADD #2,&$1DBE
208     MOV &$1DBE,R14
209     MOV #XDO,-2(R14)
210     ADD #2,&$1C00
211     MOV &$1C00,R10
212     MOV #0,0(R10)
213     MOV @R13+,R0
214     ENDCODE IMMEDIATE
215
216     HDNCODE XLOOP
217     ADD #1,0(R1)
218 BW1 BIT #$100,R2
219     0= IF
220         MOV @R13,R13
221         MOV @R13+,R0
222     THEN
223     ADD #4,R1
224     ADD #2,R13
225     MOV @R13+,R0
226     ENDCODE
227
228     CODE LOOP
229     MOV #XLOOP,R9
230 BW2 ADD #4,&$1DBE
231     MOV &$1DBE,R10
232     MOV R9,-4(R10)
233     MOV R14,-2(R10)
234     BEGIN
235         MOV &$1C00,R14
236         SUB #2,&$1C00
237         MOV @R14,R14
238         CMP #0,R14
239     0<> WHILE
240         MOV R10,0(R14)
241     REPEAT
242     MOV @R15+,R14
243     MOV @R13+,R0
244     ENDCODE IMMEDIATE
245
246     HDNCODE XPLOO
247     ADD R14,0(R1)
248     MOV @R15+,R14
249     GOTO BW1
250     ENDCODE
251
252     CODE +LOOP
253     MOV #XPLOO,R9
254     GOTO BW2
255     ENDCODE IMMEDIATE
256
257     [THEN]
258
259     [UNDEFINED] BEGIN [IF]
260
261     CODE BEGIN
262     MOV #BEGIN,R0
263     ENDCODE IMMEDIATE
264
265     CODE UNTIL
266     MOV #[THEN]+$52,R9
267 BW1 ADD #4,&$1DBE
268     MOV &$1DBE,R10
269     MOV R9,-4(R10)
270     MOV R14,-2(R10)
271     MOV @R15+,R14
272     MOV @R13+,R0
273     ENDCODE IMMEDIATE
274
275     CODE AGAIN
276     MOV #[THEN]+$58,R9
277     GOTO BW1
278     ENDCODE IMMEDIATE
279
280     : WHILE
281     POSTPONE IF SWAP
282     ; IMMEDIATE
283
284     : REPEAT
285     POSTPONE AGAIN POSTPONE THEN
286     ; IMMEDIATE
287
288     [THEN]
289
290     [UNDEFINED] CASE [IF]
291     : CASE
292     0
293     ; IMMEDIATE
294
295     : OF
296     1+  
297     >R  
298     POSTPONE OVER POSTPONE =
299     POSTPONE IF 
300     POSTPONE DROP       
301     R>  
302     ; IMMEDIATE
303
304     : ENDOF
305     >R  
306     POSTPONE ELSE
307     R>  
308     ; IMMEDIATE
309
310     : ENDCASE
311     POSTPONE DROP
312     0 DO
313         POSTPONE THEN
314     LOOP
315     ; IMMEDIATE
316     [THEN]
317
318     [UNDEFINED] + [IF]
319     CODE +
320     ADD @R15+,R14
321     MOV @R13+,R0
322     ENDCODE
323     [THEN]
324
325     [UNDEFINED] - [IF]
326     CODE -
327     SUB @R15+,R14
328     XOR #-1,R14
329     ADD #1,R14
330     MOV @R13+,R0
331     ENDCODE
332     [THEN]
333
334     [UNDEFINED] MAX [IF]
335     CODE MAX
336     CMP @R15,R14
337     S<  ?GOTO FW1
338 BW1 ADD #2,R15
339     MOV @R13+,R0
340     ENDCODE
341
342     CODE MIN
343     CMP @R15,R14
344     S<  ?GOTO BW1
345 FW1 MOV @R15+,R14
346     MOV @R13+,R0
347     ENDCODE
348
349     [THEN]
350
351     [UNDEFINED] 2* [IF]
352     CODE 2*
353     ADD R14,R14
354     MOV @R13+,R0
355     ENDCODE
356     [THEN]
357
358     [UNDEFINED] UM* [IF]
359     CODE UM*
360     MOV @R15,&$4C0
361 BW1 MOV R14,&$4C8
362     MOV &$4E4,0(R15)
363     MOV &$4E6,R14
364     MOV @R13+,R0
365     ENDCODE
366
367     CODE M*
368     MOV @R15,&$4C2
369     GOTO BW1
370     ENDCODE
371     [THEN]
372
373     [UNDEFINED] UM/MOD [IF]
374     CODE UM/MOD
375     PUSH #DROP
376     MOV #<#+8,R0
377     ENDCODE
378     [THEN]
379
380 ; --------------------------
381 ; end of definitions we need
382 ; --------------------------
383
384     : U*/
385     >R UM* R> UM/MOD SWAP DROP
386     ;
387
388     : U/MOD
389     0 SWAP UM/MOD
390     ;
391
392     : UMOD
393     U/MOD DROP
394     ;
395
396     : U/
397     U/MOD SWAP DROP
398     ;
399
400     [UNDEFINED] SPACES [IF]
401     : SPACES
402     BEGIN
403         ?DUP
404     WHILE
405         $20 EMIT
406         1-
407     REPEAT
408     ;
409     [THEN]
410
411     [UNDEFINED] U.R
412     [IF]
413     : U.R
414     >R  <# 0 # #S #>
415     R> OVER - 0 MAX SPACES TYPE
416     ;
417     [THEN]
418
419     CODE TIME?
420     BEGIN
421         BIT.B #$10,&$4A2
422     0<> UNTIL
423     COLON
424     $4B2 C@ 2 U.R ':' EMIT
425     $4B1 C@  2 U.R ':' EMIT
426     $4B0 C@  2 U.R
427     ;
428
429     : TIME!
430     2 DEPTH
431     U< IF
432         $4B0 C!
433         $4B1 C!
434         $4B2 C!
435     THEN
436     ." it is " TIME?
437     ;
438
439     CODE DATE?
440     BEGIN
441         BIT.B #$10,&$4A2
442     0<> UNTIL
443     COLON
444
445
446
447     $4B3 C@
448     CASE
449     0 OF ." Sat"    ENDOF
450     1 OF ." Sun"    ENDOF
451     2 OF ." Mon"    ENDOF
452     3 OF ." Tue"    ENDOF
453     4 OF ." Wed"    ENDOF
454     5 OF ." Thu"    ENDOF
455     6 OF ." Fri"    ENDOF
456     ENDCASE
457     $4B6 @
458     $4B5 C@
459     $4B4 C@
460     $20 EMIT
461     2 U.R '/' EMIT
462     2 U.R '/' EMIT
463     .
464     ;
465
466     : DATE!
467     2 DEPTH
468     U< IF
469         $4B6 !
470         $4B5 C!
471         $4B4 C!
472     THEN
473     $4B4 C@
474     $4B5 C@
475     $4B6 @
476     OVER 3 U<
477     IF 1 - SWAP 12 + SWAP
478     THEN
479     100 U/MOD
480     DUP 4 U/ SWAP 2* -
481     SWAP DUP 4 U/ + +
482     SWAP 1+  13 5 U*/ + +
483     7 UMOD
484     $4B3 C!
485     ." we are on " DATE?
486     ;
487
488     [UNDEFINED] S_ [IF]
489     CODE S_
490     SUB #2,R15
491     MOV R14,0(R15)
492     MOV #$20,R14
493     MOV #S"+10,R0
494     ENDCODE IMMEDIATE
495     [THEN]
496
497     [UNDEFINED] ESC [IF]
498     CODE ESC
499     CMP #0,&$1DB4
500     0= IF MOV @R13+,R0
501     THEN
502     COLON
503     $1B
504     POSTPONE LITERAL
505     POSTPONE EMIT
506     POSTPONE S_
507     POSTPONE TYPE
508     ; IMMEDIATE
509     [THEN]
510
511     [UNDEFINED] >BODY [IF]
512     CODE >BODY
513     ADD #4,R14
514     MOV @R13+,R0
515     ENDCODE
516     [THEN]
517
518     [UNDEFINED] EXECUTE [IF]
519     CODE EXECUTE
520     PUSH R14
521     MOV @R15+,R14
522     MOV @R1+,R0
523     ENDCODE
524     [THEN]
525
526     [UNDEFINED] EVALUATE [IF]
527
528     CODENNM
529     MOV @R1+,&$1DBC
530     MOV @R1+,&$1DBA
531     MOV @R1+,&$1DB8
532     MOV @R1+,R13
533     MOV @R13+,R0
534     ENDCODE
535
536     CODE EVALUATE
537     MOV #$1DB8,R9
538     MOV @R9+,R12
539     MOV @R9+,R11
540     MOV @R9+,R10
541     PUSHM #4,R13
542     MOV R0,R13
543     ADD #8,R13
544     MOV #\+8,R0
545     MOV #0,R3
546     ENDCODE
547     ,
548
549     [THEN]
550
551     [UNDEFINED] CR [IF]
552
553     CODE CR
554     MOV #[THEN],R0
555     ENDCODE
556
557     :NONAME
558     $0D EMIT $0A EMIT
559     ; IS CR
560     [THEN]
561
562     : SET_TIME
563     ESC [8;42;80t
564     42 0 DO CR LOOP
565     ESC [H
566     CR ." DATE (DMY): "
567     $1CE4 DUP #84
568     ['] ACCEPT >BODY
569     EXECUTE
570     EVALUATE
571     CR DATE!
572     CR ." TIME (HMS): "
573     $1CE4 DUP #84
574     ['] ACCEPT >BODY
575     EXECUTE
576     EVALUATE
577     CR TIME!
578     ;
579
580     RST_SET
581
582     ECHO  SET_TIME