OSDN Git Service

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