OSDN Git Service

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