OSDN Git Service

9195c59bad0a0571f666af7c2317d71bee414e0b
[fast-forth/master.git] / MSP430-FORTH / SD_430FR5994 / FF_SPECS.4TH
1
2 ; ---------------------------------
3 ; FF_SPECS.4th for MSP_EXP430FR5994
4 ; ---------------------------------
5
6     CODE ABORT_FF_SPECS
7     SUB #2,R15
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     RST_RET
15     ;
16
17     ABORT_FF_SPECS
18
19     [UNDEFINED] DUP
20     [IF]
21     CODE DUP
22 BW1 SUB #2,R15
23     MOV R14,0(R15)
24     MOV @R13+,R0
25     ENDCODE
26
27     CODE ?DUP
28     CMP #0,R14
29     0<> ?GOTO BW1
30     MOV @R13+,R0
31     ENDCODE
32     [THEN]
33
34     [UNDEFINED] OVER
35     [IF]
36     CODE OVER
37     MOV R14,-2(R15)
38     MOV @R15,R14
39     SUB #2,R15
40     MOV @R13+,R0
41     ENDCODE
42     [THEN]
43
44     [UNDEFINED] DROP
45     [IF]
46     CODE DROP
47     MOV @R15+,R14
48     MOV @R13+,R0
49     ENDCODE
50     [THEN]
51
52     [UNDEFINED] SWAP
53     [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] ROT
63     [IF]
64     CODE ROT
65     MOV @R15,R10
66     MOV R14,0(R15)
67     MOV 2(R15),R14
68     MOV R10,2(R15)
69     MOV @R13+,R0
70     ENDCODE
71     [THEN]
72
73     [UNDEFINED] >R
74     [IF]
75     CODE >R
76     PUSH R14
77     MOV @R15+,R14
78     MOV @R13+,R0
79     ENDCODE
80     [THEN]
81
82     [UNDEFINED] R>
83     [IF]
84     CODE R>
85     SUB #2,R15
86     MOV R14,0(R15)
87     MOV @R1+,R14
88     MOV @R13+,R0
89     ENDCODE
90     [THEN]
91
92     [UNDEFINED] 0<
93     [IF]
94     CODE 0<
95     ADD R14,R14
96     SUBC R14,R14
97     XOR #-1,R14
98     MOV @R13+,R0
99     ENDCODE
100     [THEN]
101
102     [UNDEFINED] =
103     [IF]
104     CODE =
105     SUB @R15+,R14
106     0<> IF
107         AND #0,R14
108         MOV @R13+,R0
109     THEN
110     XOR #-1,R14
111     MOV @R13+,R0
112     ENDCODE
113     [THEN]
114
115     [UNDEFINED] U<
116     [IF]
117     CODE U<
118     SUB @R15+,R14
119     U< ?GOTO FW1
120     0<> IF
121 BW1 MOV #-1,R14
122     THEN
123     MOV @R13+,R0
124     ENDCODE
125
126     CODE U>
127     SUB @R15+,R14
128     U< ?GOTO BW1
129 FW1 AND #0,R14
130     MOV @R13+,R0
131     ENDCODE
132     [THEN]
133
134     [UNDEFINED] IF
135     [IF]
136     CODE IF
137     SUB #2,R15
138     MOV R14,0(R15)
139     MOV &$1DC8,R14
140     ADD #4,&$1DC8
141     MOV #$40AC,0(R14)
142     ADD #2,R14
143     MOV @R13+,R0
144     ENDCODE IMMEDIATE
145
146     CODE THEN
147     MOV &$1DC8,0(R14)
148     MOV @R15+,R14
149     MOV @R13+,R0
150     ENDCODE IMMEDIATE
151     [THEN]
152
153     [UNDEFINED] ELSE
154     [IF]
155     CODE ELSE
156     ADD #4,&$1DC8
157     MOV &$1DC8,R10
158     MOV #$40B2,-4(R10)
159     MOV R10,0(R14)
160     SUB #2,R10
161     MOV R10,R14
162     MOV @R13+,R0
163     ENDCODE IMMEDIATE
164     [THEN]
165
166     [UNDEFINED] BEGIN
167     [IF]
168     CODE BEGIN
169     MOV #$4032,R0
170     ENDCODE IMMEDIATE
171
172     CODE UNTIL
173     MOV #$40AC,R9
174 BW1 ADD #4,&$1DC8
175     MOV &$1DC8,R10
176     MOV R9,-4(R10)
177     MOV R14,-2(R10)
178     MOV @R15+,R14
179     MOV @R13+,R0
180     ENDCODE IMMEDIATE
181
182     CODE AGAIN
183     MOV #$40B2,R9
184     GOTO BW1
185     ENDCODE IMMEDIATE
186     [THEN]
187
188     [UNDEFINED] WHILE
189     [IF]
190     : WHILE
191     POSTPONE IF SWAP
192     ; IMMEDIATE
193     [THEN]
194
195     [UNDEFINED] REPEAT
196     [IF]
197     : REPEAT
198     POSTPONE AGAIN POSTPONE THEN
199     ; 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] I
269     [IF]
270     CODE I
271     SUB #2,R15
272     MOV R14,0(R15)
273     MOV @R1,R14
274     SUB 2(R1),R14
275     MOV @R13+,R0
276     ENDCODE
277     [THEN]
278
279     [UNDEFINED] HERE
280     [IF]
281     CODE HERE
282     MOV #$4032,R0
283     ENDCODE
284     [THEN]
285
286     [UNDEFINED] C@
287     [IF]
288     CODE C@
289     MOV.B @R14,R14
290     MOV @R13+,R0
291     ENDCODE
292     [THEN]
293
294     [UNDEFINED] SPACES
295     [IF]
296     CODE SPACES
297     CMP #0,R14
298     0<> IF
299         PUSH R13
300         BEGIN
301             LO2HI
302             $20 EMIT
303             HI2LO
304             SUB #1,R14
305         0= UNTIL
306         MOV @R1+,R13
307     THEN
308     MOV @R15+,R14
309     MOV @R13+,R0
310     ENDCODE
311     [THEN]
312
313     [UNDEFINED] 1+
314     [IF]
315     CODE 1+
316     ADD #1,R14
317     MOV @R13+,R0
318     ENDCODE
319     [THEN]
320
321     [UNDEFINED] +
322     [IF]
323     CODE +
324     ADD @R15+,R14
325     MOV @R13+,R0
326     ENDCODE
327     [THEN]
328
329     [UNDEFINED] -
330     [IF]
331     CODE -
332     SUB @R15+,R14
333     XOR #-1,R14
334     ADD #1,R14
335     MOV @R13+,R0
336     ENDCODE
337     [THEN]
338
339     [UNDEFINED] 2*
340     [IF]
341     CODE 2*
342     ADD R14,R14
343     MOV @R13+,R0
344     ENDCODE
345     [THEN]
346
347     [UNDEFINED] 2/
348     [IF]
349     CODE 2/
350     RRA R14
351     MOV @R13+,R0
352     ENDCODE
353     [THEN]
354
355     [UNDEFINED] UM/MOD
356     [IF]
357     CODE UM/MOD
358     PUSH #DROP
359     MOV #$403E,R0
360     ENDCODE
361     [THEN]
362
363     [UNDEFINED] MOVE
364     [IF]
365     CODE MOVE
366     MOV R14,R10
367     MOV @R15+,R8
368     MOV @R15+,R9
369     MOV @R15+,R14
370     CMP #0,R10
371     0<> IF
372         CMP R9,R8
373         0<> IF
374             U< IF
375                 BEGIN
376                     MOV.B @R9+,0(R8)
377                     ADD #1,R8
378                     SUB #1,R10
379                 0= UNTIL
380                 MOV @R13+,R0
381             THEN
382             ADD R10,R8
383             ADD R10,R9
384             BEGIN
385                 SUB #1,R9
386                 SUB #1,R8
387                 MOV.B @R9,0(R8)
388                 SUB #1,R10
389             0= UNTIL
390         THEN
391     THEN
392     MOV @R13+,R0
393     ENDCODE
394     [THEN]
395
396     [UNDEFINED] CR
397     [IF]
398
399     CODE CR
400     MOV #$40B4,R0
401     ENDCODE
402
403     :NONAME
404     $0D EMIT $0A EMIT
405     ; IS CR
406
407     [THEN]
408
409     : WORDS
410     $1CE4
411     $180C @ 2*
412     MOVE
413     BEGIN
414         0 DUP
415         $180C @ 2* 0
416             DO
417             DUP I $1CE4 + @
418                 U< IF
419                     DROP DROP
420                     I DUP $1CE4 + @
421                 THEN
422             2 +LOOP
423         ?DUP
424     WHILE
425         DUP
426         2 - @
427         ROT
428         $1CE4 +
429         !
430         COUNT 2/
431         DUP >R TYPE
432         $10 R> - SPACES
433     REPEAT
434     DROP
435     ;
436
437     [UNDEFINED] CASE
438     [IF]
439     : CASE
440     0
441     ; IMMEDIATE
442
443     : OF
444     1+
445     >R
446     POSTPONE OVER
447     POSTPONE =
448     POSTPONE IF
449     POSTPONE DROP
450     R>
451     ; IMMEDIATE
452
453     : ENDOF
454     >R
455     POSTPONE ELSE
456     R>
457     ; IMMEDIATE
458
459     : ENDCASE
460     POSTPONE DROP
461     0 DO
462         POSTPONE THEN
463     LOOP
464     ; IMMEDIATE
465     [THEN]
466
467     [UNDEFINED] S_
468     [IF]
469     CODE S_
470     MOV #0,&$1DC0
471     COLON
472     $401E ,
473     $20 WORD
474     HI2LO
475     MOV.B @R14,R14
476     ADD #1,R14
477     BIT #1,R14
478     ADDC R14,&$1DC8
479     MOV @R15+,R14
480     MOV @R1+,R13
481     MOV #$20,&$1DC0
482     MOV @R13+,R0
483     ENDCODE IMMEDIATE
484     [THEN]
485
486     [UNDEFINED] ESC
487     [IF]
488     CODE ESC
489     CMP #0,&$1DBC
490     0= IF MOV @R13+,R0
491     THEN
492     COLON
493     $1B
494     POSTPONE LITERAL
495     POSTPONE EMIT
496     POSTPONE S_
497     POSTPONE TYPE
498     ; IMMEDIATE
499     [THEN]
500
501     [DEFINED] FORTH
502     [IF]
503     CODE BODY>SQNFA
504     SUB #2,R15
505     SUB #4,R14
506     MOV R14,R8
507     MOV R8,R9
508     BEGIN
509         SUB #2,R9
510         MOV R9,0(R15)
511         MOV.B @R9+,R14
512         RRA R14
513         MOV R14,R10
514         BIT #1,R10
515         0= IF
516             ADD #1,R10
517         THEN
518         ADD R9,R10
519         CMP R10,R8
520     0<> WHILE
521         MOV @R15,R9
522     REPEAT
523     MOV R9,0(R15)
524     MOV @R13+,R0
525     ENDCODE
526     [THEN]
527
528     : SPECS
529     RST_RET
530     ECHO
531     ESC [8;42;80t
532
533     ESC [7m
534     CR ." FastForth V"
535     $180A @
536     0 <# # $08 HOLD # '.' HOLD #S #> TYPE
537     ."  for MSP430FR"
538     HERE
539     $1A04 @
540     CASE
541
542     $8102   OF  ." 5738,"   $C200   ENDOF
543     $8103   OF  ." 5739,"   $C200   ENDOF
544     $810D   OF  ." 5986,"   $4400   ENDOF
545     $8160   OF  ." 5948,"   $4400   ENDOF
546     $8169   OF  ." 5969,"   $4400   ENDOF
547     $81A8   OF  ." 6989,"   $4400   ENDOF
548     $81F0   OF  ." 4133,"   $C400   ENDOF
549     $8240   OF  ." 2433,"   $C400   ENDOF
550     $825D   OF  ." 5972,"   $4400   ENDOF
551     $82A1   OF  ." 5994,"   $4000   ENDOF
552     $82A6   OF  ." 5962,"   $4000   ENDOF
553     $830C   OF  ." 2355,"   $8000   ENDOF
554     $830D   OF  ." 2353,"   $C000   ENDOF
555     $831E   OF  ." 2155,"   $8000   ENDOF
556     $831D   OF  ." 2153,"   $C000   ENDOF
557     $832A   OF  ." 2476,"   $8000   ENDOF
558     $832B   OF  ." 2475,"   $8000   ENDOF
559     $833C   OF  ." 2633,"   $C400   ENDOF
560     $833D   OF  ." 2533,"   $C400   ENDOF
561     ABORT" xxxx <-- unrecognized device!"
562     ENDCASE
563     ['] ['] DUP @ $1284 =
564     IF ."  DTC=1," DROP
565     ELSE 2 + @ $1284 =
566         IF ."  DTC=2,"
567         ELSE ."  DTC=3,"
568         THEN
569     THEN
570     $20 EMIT
571     $180C @ U. $08 EMIT
572     ." -Entry word set, "
573     $1800 @ 0 1000 UM/MOD U.
574     ?DUP IF $08 EMIT ',' EMIT U.
575     THEN ." MHz, "
576     - U. ." bytes"
577     ESC [0m
578
579     CR
580     ." /COUNTED-STRING   = 255" CR
581     ." /HOLD             = 34" CR
582     ." /PAD              = 84" CR
583     ." ADDRESS-UNIT-BITS = 16" CR
584     ." FLOORED DIVISION  = "
585     $180E @
586     0< IF ." true"
587     ELSE  ." false"
588     THEN    CR
589     ." MAX-CHAR          = 255" CR
590     ." MAX-N             = 32767" CR
591     ." MAX-U             = 65535" CR
592     ." MAX-D             = 2147483647" CR
593     ." MAX-UD            = 4294967295" CR
594     ." STACK-CELLS       = 48" CR
595     ." RETURN-STACK-CELLS= 48" CR
596     ." Definitions are forced to UPPERCASE." CR
597
598     CR ESC [7m ." Kernel add-ons" ESC [0m CR
599     $180E @
600     2*  DUP 0< IF ." 32.768kHz LF XTAL" CR THEN
601     2*  DUP 0< IF ." /RTS /CTS " 2*
602             ELSE  2* DUP
603                 0< IF ." /RTS " THEN
604             THEN
605     2*  DUP 0< IF ." XON/XOFF "  THEN
606     2*  DUP 0< IF ." Half-Duplex "  THEN
607     2*  DUP 0< IF ." I2C_Master TERMINAL"
608             ELSE  ." UART TERMINAL" THEN CR
609     2*  DUP 0< IF 2* DUP 0< IF ." DOUBLE and "
610                          THEN  ." Q15.16 numbers handling" CR
611             ELSE  2* DUP 0< IF ." DOUBLE numbers handling" CR
612                          THEN
613             THEN
614     2*  DUP 0< IF ." MSP430_X assembler with TI's syntax"
615                     CR 2* 2*
616             ELSE
617                 2*  DUP
618                 0< IF ." MSP430 Assembler"
619                     2*  DUP
620                     0< IF ." , 20bits extended addresses,"
621                     THEN
622                 ELSE 2*
623                 THEN
624                 ."  with TI's syntax" CR
625             THEN DROP
626     [DEFINED] FORTH [IF] ." word-set management" CR
627     [THEN]
628     [DEFINED] LOAD" [IF] ." SD_CARD Load" CR
629     [THEN]
630     [DEFINED] BOOT  [IF] ." SD_CARD Bootloader" CR
631     [THEN]
632     [DEFINED] READ" [IF] ." SD_CARD Read/Write" CR
633     [THEN]
634
635     $1DCA
636     BEGIN
637         @ ?DUP
638     WHILE
639         DUP $180C @ 2* -
640         CR ESC [7m
641         [DEFINED] FORTH
642         [IF] DUP BODY>SQNFA
643         [ELSE]  OVER @
644                 IF S" hidden"
645                 ELSE S" FORTH"
646                 THEN
647         [THEN]
648         TYPE ."  word-set"
649         ESC [0m CR
650         WORDS CR
651     REPEAT
652
653     CR ESC [7m ." EXTENSIONS" ESC [0m
654     [DEFINED] {CORE_ANS} [IF] CR  ." core ANS94"
655     [THEN]
656     [DEFINED] {DOUBLE}   [IF] CR  ." DOUBLE word set"
657     [THEN]
658     [DEFINED] {UTILITY}  [IF] CR ." UTILITY"
659     [THEN]
660     [DEFINED] {FIXPOINT} [IF] CR ." Q15.16 ADD SUB MUL DIV"
661     [THEN]
662     [DEFINED] {CORDIC}   [IF] CR ." CORDIC engine"
663     [THEN]
664     [DEFINED] {SD_TOOLS} [IF] CR ." SD_TOOLS"
665     [THEN]
666     [DEFINED] {RTC}      [IF] CR ." RTC utility"
667     [THEN]
668     [DEFINED] {UARTI2CS} [IF] CR ." UART to I2C_FastForth bridge"
669     [THEN]
670     CR
671     0 SYS
672     ;
673
674 SPECS