OSDN Git Service

61535932fc0cfda1d9eb8cdd4615506e1e01b78e
[fast-forth/master.git] / inc / ThingsInFirst.inc
1 ; ThingsInFirst.inc
2
3     .cpu MSP430X    ; define CPU
4
5 ; ----------------------------------------------
6 ; MACROS FOR assembly instructions
7 ; ----------------------------------------------
8
9 NOP         .macro      ; 1 word, 1 cycle    
10             .word 4303h ; mov #0, r3         
11             .endm
12
13 NOP2        .macro      ; 1 Word, 2 cycles
14             .word 3C00h ; jmp $+2
15             .endm
16
17 NOP3        .macro      ; 1 Word, 3 cycles
18             .word 4000h ; MOV PC,PC
19             .endm
20
21 ; SR bits : only SR(11:0) are PUSHed by calls and interrupts
22 C           .equ 0001h
23 Z           .equ 0002h
24 N           .equ 0004h
25 V           .equ 0100h
26 GIE         .equ 0008h
27 CPUOFF      .equ 0010h ; CPU Off.                  1=turn_off_CPU
28 OSCOFF      .equ 0020h ; Oscillator Off.           1=turn_off_LFXT1CLK
29 SCG0        .equ 0040h ; System Clock Generator 0. 1=turn_off_DCO
30 SCG1        .equ 0080h ; System Clock Generator 1. 1=turn_off_SMCLK
31 UF9         .equ 0200h ; = SR(9) User Flag 1
32 UF10        .equ 0400h ; = SR(10) User Flag 2  
33 UF11        .equ 0800h ; = SR(11) User Flag 3  
34
35 ;----------------------------------------------------------------------------
36 LPM0        .equ CPUOFF
37 ; LPM0        .equ SCG0 + CPUOFF  ; for devices with FLL, to disable FLL
38 LPM1        .equ SCG0 + CPUOFF
39 LPM2        .equ SCG1 + CPUOFF
40 LPM3        .equ SCG1 + SCG0 + CPUOFF
41 LPM4        .equ SCG1 + SCG0 + OSCOFF + CPUOFF
42
43 ; ----------------------------------------------
44 ; INIT VOCABULARY POINTERS and MACROS FOR HEADER
45 ; ----------------------------------------------
46
47 voclink     .set 0  ; init vocabulary links
48 forthlink   .set 0
49 asmlink     .set 0
50
51     .save
52     .listing off
53
54     .IF THREADS = 1
55
56 FORTHWORD   .MACRO  name
57             .word   forthlink
58 forthlink   .set    $
59             .byte   STRLEN(name),name
60 ;            .align  2
61             .ENDM
62
63 FORTHWORDIMM .MACRO  name
64             .word   forthlink
65 forthlink   .set    $
66             .byte   STRLEN(name)+128,name
67 ;            .align  2
68             .ENDM
69
70 asmword     .MACRO  name
71             .word   asmlink
72 asmlink     .set    $
73             .byte   STRLEN(name),name
74 ;            .align  2
75             .ENDM
76
77     .ELSE
78 forthlink1  .set 0
79 forthlink2  .set 0
80 forthlink3  .set 0
81 forthlink4  .set 0
82 forthlink5  .set 0
83 forthlink6  .set 0
84 forthlink7  .set 0
85 forthlink8  .set 0
86 forthlink9  .set 0
87 forthlink10 .set 0
88 forthlink11 .set 0
89 forthlink12 .set 0
90 forthlink13 .set 0
91 forthlink14 .set 0
92 forthlink15 .set 0
93 forthlink16 .set 0
94 forthlink17 .set 0
95 forthlink18 .set 0
96 forthlink19 .set 0
97 forthlink20 .set 0
98 forthlink21 .set 0
99 forthlink22 .set 0
100 forthlink23 .set 0
101 forthlink24 .set 0
102 forthlink25 .set 0
103 forthlink26 .set 0
104 forthlink27 .set 0
105 forthlink28 .set 0
106 forthlink29 .set 0
107 forthlink30 .set 0
108 forthlink31 .set 0
109
110 asmlink1    .set 0
111 asmlink2    .set 0
112 asmlink3    .set 0
113 asmlink4    .set 0
114 asmlink5    .set 0
115 asmlink6    .set 0
116 asmlink7    .set 0
117 asmlink8    .set 0
118 asmlink9    .set 0
119 asmlink10   .set 0
120 asmlink11   .set 0
121 asmlink12   .set 0
122 asmlink13   .set 0
123 asmlink14   .set 0
124 asmlink15   .set 0
125 asmlink16   .set 0
126 asmlink17   .set 0
127 asmlink18   .set 0
128 asmlink19   .set 0
129 asmlink20   .set 0
130 asmlink21   .set 0
131 asmlink22   .set 0
132 asmlink23   .set 0
133 asmlink24   .set 0
134 asmlink25   .set 0
135 asmlink26   .set 0
136 asmlink27   .set 0
137 asmlink28   .set 0
138 asmlink29   .set 0
139 asmlink30   .set 0
140 asmlink31   .set 0
141
142 ;-------------------------------------------
143 ; (THREADS-1)*2 = AND mask to define CURRENT offset in vocabulary
144 ;-------------------------------------------
145 FORTHWORD   .MACRO  name
146 CONTEXTofst .set    charfromstr(name,0) & ((THREADS-1)*2)
147     .SWITCH CONTEXTofst
148     .case 0
149             .word   forthlink
150 forthlink   .set    $
151     .case 2
152             .word   forthlink1
153 forthlink1  .set    $
154     .case 4
155             .word   forthlink2
156 forthlink2  .set    $
157     .case 6
158             .word   forthlink3
159 forthlink3  .set    $
160     .case 8
161             .word   forthlink4
162 forthlink4  .set    $
163     .case 10
164             .word   forthlink5
165 forthlink5  .set    $
166     .case 12
167             .word   forthlink6
168 forthlink6  .set    $
169     .case 14
170             .word   forthlink7
171 forthlink7  .set    $
172     .case 16
173             .word   forthlink8
174 forthlink8  .set    $
175     .case 18
176             .word   forthlink9
177 forthlink9  .set    $
178     .case 20
179             .word   forthlink10
180 forthlink10 .set    $
181     .case 22
182             .word   forthlink11
183 forthlink11 .set    $
184     .case 24
185             .word   forthlink12
186 forthlink12 .set    $
187     .case 26
188             .word   forthlink13
189 forthlink13 .set    $
190     .case 28
191             .word   forthlink14
192 forthlink14 .set    $
193     .case 30
194             .word   forthlink15
195 forthlink15 .set    $
196     .case 32
197             .word   forthlink16
198 forthlink16 .set    $
199     .case 34
200             .word   forthlink17
201 forthlink17 .set    $
202     .case 36
203             .word   forthlink18
204 forthlink18 .set    $
205     .case 38
206             .word   forthlink19
207 forthlink19 .set    $
208     .case 40
209             .word   forthlink20
210 forthlink20 .set    $
211     .case 42
212             .word   forthlink21
213 forthlink21 .set    $
214     .case 44
215             .word   forthlink22
216 forthlink22 .set    $
217     .case 46
218             .word   forthlink23
219 forthlink23 .set    $
220     .case 48
221             .word   forthlink24
222 forthlink24 .set    $
223     .case 50
224             .word   forthlink25
225 forthlink25 .set    $
226     .case 52
227             .word   forthlink26
228 forthlink26 .set    $
229     .case 54
230             .word   forthlink27
231 forthlink27 .set    $
232     .case 56
233             .word   forthlink28
234 forthlink28 .set    $
235     .case 58
236             .word   forthlink29
237 forthlink29 .set    $
238     .case 60
239             .word   forthlink30
240 forthlink30 .set    $
241     .case 62
242             .word   forthlink31
243 forthlink31 .set    $
244     .endcase
245             .byte   STRLEN(name),name
246             .ENDM
247
248 ;-------------------------------------------
249 ; (THREADS-1)*2 = AND mask to define CURRENT offset in vocabulary
250 ;-------------------------------------------
251 FORTHWORDIMM .MACRO  name
252 CONTEXTofst .set    charfromstr(name,0) &  ((THREADS-1)*2)
253     .SWITCH CONTEXTofst
254     .case 0
255             .word   forthlink
256 forthlink   .set    $
257     .case 2
258             .word   forthlink1
259 forthlink1  .set    $
260     .case 4
261             .word   forthlink2
262 forthlink2  .set    $
263     .case 6
264             .word   forthlink3
265 forthlink3  .set    $
266     .case 8
267             .word   forthlink4
268 forthlink4  .set    $
269     .case 10
270             .word   forthlink5
271 forthlink5  .set    $
272     .case 12
273             .word   forthlink6
274 forthlink6  .set    $
275     .case 14
276             .word   forthlink7
277 forthlink7  .set    $
278     .case 16
279             .word   forthlink8
280 forthlink8  .set    $
281     .case 18
282             .word   forthlink9
283 forthlink9  .set    $
284     .case 20
285             .word   forthlink10
286 forthlink10 .set    $
287     .case 22
288             .word   forthlink11
289 forthlink11 .set    $
290     .case 24
291             .word   forthlink12
292 forthlink12 .set    $
293     .case 26
294             .word   forthlink13
295 forthlink13 .set    $
296     .case 28
297             .word   forthlink14
298 forthlink14 .set    $
299     .case 30
300             .word   forthlink15
301 forthlink15 .set    $
302     .case 32
303             .word   forthlink16
304 forthlink16 .set    $
305     .case 34
306             .word   forthlink17
307 forthlink17 .set    $
308     .case 36
309             .word   forthlink18
310 forthlink18 .set    $
311     .case 38
312             .word   forthlink19
313 forthlink19 .set    $
314     .case 40
315             .word   forthlink20
316 forthlink20 .set    $
317     .case 42
318             .word   forthlink21
319 forthlink21 .set    $
320     .case 44
321             .word   forthlink22
322 forthlink22 .set    $
323     .case 46
324             .word   forthlink23
325 forthlink23 .set    $
326     .case 48
327             .word   forthlink24
328 forthlink24 .set    $
329     .case 50
330             .word   forthlink25
331 forthlink25 .set    $
332     .case 52
333             .word   forthlink26
334 forthlink26 .set    $
335     .case 54
336             .word   forthlink27
337 forthlink27 .set    $
338     .case 56
339             .word   forthlink28
340 forthlink28 .set    $
341     .case 58
342             .word   forthlink29
343 forthlink29 .set    $
344     .case 60
345             .word   forthlink30
346 forthlink30 .set    $
347     .case 62
348             .word   forthlink31
349 forthlink31 .set    $
350     .endcase
351             .byte   80h+STRLEN(name),name
352             .ENDM
353
354 ;-------------------------------------------
355 ; (THREADS-1)*2 = AND mask to define CURRENT offset in vocabulary
356 ;-------------------------------------------
357 asmword     .MACRO  name
358 CONTEXTofst .set    charfromstr(name,0) &  ((THREADS-1)*2)
359     .SWITCH CONTEXTofst
360     .case 0
361             .word   asmlink
362 asmlink   .set    $
363     .case 2
364             .word   asmlink1
365 asmlink1  .set    $
366     .case 4
367             .word   asmlink2
368 asmlink2  .set    $
369     .case 6
370             .word   asmlink3
371 asmlink3  .set    $
372     .case 8
373             .word   asmlink4
374 asmlink4  .set    $
375     .case 10
376             .word   asmlink5
377 asmlink5  .set    $
378     .case 12
379             .word   asmlink6
380 asmlink6  .set    $
381     .case 14
382             .word   asmlink7
383 asmlink7  .set    $
384     .case 16
385             .word   asmlink8
386 asmlink8  .set    $
387     .case 18
388             .word   asmlink9
389 asmlink9  .set    $
390     .case 20
391             .word   asmlink10
392 asmlink10 .set    $
393     .case 22
394             .word   asmlink11
395 asmlink11 .set    $
396     .case 24
397             .word   asmlink12
398 asmlink12 .set    $
399     .case 26
400             .word   asmlink13
401 asmlink13 .set    $
402     .case 28
403             .word   asmlink14
404 asmlink14 .set    $
405     .case 30
406             .word   asmlink15
407 asmlink15 .set    $
408     .case 32
409             .word   asmlink16
410 asmlink16 .set    $
411     .case 34
412             .word   asmlink17
413 asmlink17 .set    $
414     .case 36
415             .word   asmlink18
416 asmlink18 .set    $
417     .case 38
418             .word   asmlink19
419 asmlink19 .set    $
420     .case 40
421             .word   asmlink20
422 asmlink20 .set    $
423     .case 42
424             .word   asmlink21
425 asmlink21 .set    $
426     .case 44
427             .word   asmlink22
428 asmlink22 .set    $
429     .case 46
430             .word   asmlink23
431 asmlink23 .set    $
432     .case 48
433             .word   asmlink24
434 asmlink24 .set    $
435     .case 50
436             .word   asmlink25
437 asmlink25 .set    $
438     .case 52
439             .word   asmlink26
440 asmlink26 .set    $
441     .case 54
442             .word   asmlink27
443 asmlink27 .set    $
444     .case 56
445             .word   asmlink28
446 asmlink28 .set    $
447     .case 58
448             .word   asmlink29
449 asmlink29 .set    $
450     .case 60
451             .word   asmlink30
452 asmlink30 .set    $
453     .case 62
454             .word   asmlink31
455 asmlink31 .set    $
456     .endcase ; asmlink
457             .byte   STRLEN(name),name
458             .ENDM
459
460     .endif ; thread case
461
462     .restore
463 ; --------------------------
464 ; COMPUTE BAUDRATE registers = fn(FREQUENCY,BAUDS)
465 ; --------------------------
466     .IFNDEF TERMINAL_I2C
467         .include "TERMINALBAUDRATE.inc"
468     .ENDIF
469
470 ; -------------------------------------
471 ; define MAIN max bound
472 ; -------------------------------------
473 FRAM_FULL   .equ SIGNATURES-40h ; set to protect JTAG and BSL signatures against overwrite.
474                                 ; 64 bytes are sufficient considering what can be compiled in one line + WORD use.
475                                 ; take care with ALLOT : don't ALLOT more than 32 words by line!
476
477 ;-----------------------------------------------------------------------
478 ; DEVICE I/O, MEMORY, SFR, vectors and minimum FORTH I/O declarations
479 ;-----------------------------------------------------------------------
480     .IFDEF MSP_EXP430FR5739
481 LF_XTAL
482         .IFDEF TERMINAL_I2C
483 UCB0_TERM
484         .ELSE
485 UCA0_TERM
486         .ENDIF
487 UCA1_SD
488     .include "MSP430FR5739.inc"
489     .ENDIF
490
491     .IFDEF MSP_EXP430FR5969
492 LF_XTAL
493         .IFDEF TERMINAL_I2C
494 UCB0_TERM
495         .ELSE
496 UCA0_TERM
497         .ENDIF
498 UCA1_SD
499     .include "MSP430FR5969.inc"
500     .ENDIF
501
502     .IFDEF MSP_EXP430FR5994
503 LF_XTAL
504         .IFDEF TERMINAL_I2C
505 UCB2_TERM
506         .ELSE
507 UCA0_TERM
508         .ENDIF
509 UCB0_SD
510     .include "MSP430FR5994.inc"
511     .ENDIF
512
513     .IFDEF MSP_EXP430FR6989
514 LF_XTAL
515         .IFDEF TERMINAL_I2C
516 UCB0_TERM
517         .ELSE
518 UCA1_TERM
519         .ENDIF
520 UCA0_SD
521     .INCLUDE "MSP430FR6989.inc"
522     .ENDIF
523
524     .IFDEF MSP_EXP430FR4133
525 LF_XTAL
526         .IFDEF TERMINAL_I2C
527 UCB0_TERM
528         .ELSE
529 UCA0_TERM
530 UCB0_SD
531         .ENDIF
532     .INCLUDE "MSP430FR4133.inc"
533     .ENDIF
534
535     .IFDEF MSP_EXP430FR2433
536 LF_XTAL
537         .IFDEF TERMINAL_I2C
538 UCB0_TERM
539         .ELSE
540 UCA0_TERM
541         .ENDIF
542 UCA1_SD
543     .include "MSP430FR2433.inc"
544     .ENDIF
545
546     .IFDEF CHIPSTICK_FR2433
547 ; no LF_XTAL to select ACLK = REFOCLK
548         .IFDEF TERMINAL_I2C
549 UCB0_TERM
550 UCA0_SD
551         .ELSE
552 UCA0_TERM
553 UCB0_SD
554         .ENDIF
555     .include "MSP430FR2433.inc"
556     .ENDIF
557
558     .IFDEF MSP_EXP430FR2355
559 LF_XTAL
560         .IFDEF TERMINAL_I2C
561 UCB0_TERM
562         .ELSE
563 UCA1_TERM
564         .ENDIF
565 UCB1_SD
566     .include "MSP430FR2355.inc"
567     .ENDIF
568
569     .IFDEF LP_MSP430FR2476
570 ; LF_XTAL       ; connect resistors R2=0k, R3=0k before uncomment this line
571         .IFDEF TERMINAL_I2C
572 UCB1_TERM
573         .ELSE
574 UCA0_TERM
575         .ENDIF
576 UCA1_SD
577     .include "MSP430FR2476.inc"
578     .ENDIF
579
580     .save
581     .listing off
582 ; vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
583 ; add here your device.inc item:
584 ;     .IFDEF MY_MSP430FR5738_1
585 ; UCA0_UART   ; defines uart used by FORTH input terminal 
586 ; LF_XTAL     ; defines if your module have a 32768 Hz xtal, to enable it.
587 ; UCB0_SD     ; defines UC used for SD Card driver if used
588 ;     .include "MSP430FR5738.inc"  ; include device declarations
589 ;     .ENDIF
590 ;^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
591
592 ; --------------------------
593 ; COMPUTE SWITCHES
594 ; --------------------------
595
596     .IFDEF CORE_COMPLEMENT
597         .IFNDEF USE_MOVE
598 USE_MOVE
599         .ENDIF
600     .ENDIF
601
602     .IFDEF UTILITY
603         .IFNDEF USE_MOVE
604 USE_MOVE
605         .ENDIF
606     .ENDIF
607
608     .IFDEF FIXPOINT_INPUT
609         .IFNDEF DOUBLE_INPUT
610 DOUBLE_INPUT
611         .ENDIF
612     .ENDIF
613
614 ; define if QUIT is DEFERed
615     .IFDEF SD_CARD_LOADER 
616         .IFNDEF DOUBLE_INPUT
617 DOUBLE_INPUT
618         .ENDIF
619         .IFNDEF DEFER_ACCEPT
620 DEFER_ACCEPT
621         .ENDIF
622
623         .IFDEF BOOTLOADER
624             .IFNDEF CONDCOMP
625 CONDCOMP                    ; mandatory for Bootstrap
626             .ENDIF
627             .IFNDEF DEFER_QUIT
628 DEFER_QUIT
629             .ENDIF
630         .ENDIF
631     .ENDIF
632
633     .IFDEF EXTENDED_ASM
634         .IFNDEF DOUBLE_INPUT
635 DOUBLE_INPUT
636         .ENDIF
637     .ELSE
638         .IFDEF EXTENDED_MEM
639             .IFNDEF MSP430ASSEMBLER
640 MSP430ASSEMBLER
641             .ENDIF
642             .IFNDEF DOUBLE_INPUT
643 DOUBLE_INPUT
644             .ENDIF
645         .ENDIF
646     .ENDIF
647
648
649     .IFDEF FIXPOINT
650         .IFNDEF FIXPOINT_INPUT
651 FIXPOINT_INPUT              ; to interpret fixpoint numbers
652         .ENDIF
653     .ENDIF
654
655     .IFDEF FIXPOINT_INPUT
656     .IFNDEF DOUBLE_NUMBERS
657 DOUBLE_NUMBERS              ; to process double numbers
658     .ENDIF
659     .ENDIF
660
661     .IFDEF DOUBLE_INPUT
662     .IFNDEF DOUBLE_NUMBERS
663 DOUBLE_NUMBERS              ; to process double numbers
664     .ENDIF
665     .ENDIF
666
667 ; ---------------------------
668 ; compute value of FORTHADDON
669 ; ---------------------------
670 FADDON .set 0
671     .IFDEF CONDCOMP
672 FADDON .SET FADDON | 01h
673     .ENDIF
674     .IFDEF MSP430ASSEMBLER
675 FADDON .SET FADDON | 02h
676     .ENDIF
677     .IFDEF EXTENDED_ASM
678 FADDON .SET FADDON | 04h
679     .ENDIF
680     .IFDEF DEFERRED
681 FADDON .SET FADDON | 08h
682     .ENDIF
683     .IFDEF VOCABULARY_SET
684 FADDON .SET FADDON | 10h
685     .ENDIF
686     .IFDEF DOUBLE_INPUT
687 FADDON .SET FADDON | 20h
688     .ENDIF
689     .IFDEF FIXPOINT_INPUT
690 FADDON .SET FADDON | 40h
691     .ENDIF
692     .IFDEF SD_CARD_LOADER
693 FADDON .SET FADDON | 80h
694     .ENDIF
695     .IFDEF SD_CARD_READ_WRITE
696 FADDON .SET FADDON | 100h
697     .ENDIF
698     .IFDEF BOOTLOADER
699 FADDON .SET FADDON | 200h
700     .ENDIF
701     .IFDEF EXTENDED_MEM
702     .IFNDEF EXTENDED_ASM
703 FADDON .SET FADDON | 400h
704     .ENDIF
705     .ENDIF
706     .IFDEF HALFDUPLEX
707 FADDON .SET FADDON | 800h
708     .ENDIF
709     .IFDEF TERMINAL3WIRES
710 FADDON .SET FADDON | 1000h
711     .ENDIF
712     .IFDEF TERMINAL4WIRES
713 FADDON .SET FADDON | 2000h
714     .ENDIF
715     .IFDEF TERMINAL5WIRES
716 FADDON .SET FADDON | 4000h
717     .ENDIF
718     .IFDEF LF_XTAL
719 FADDON .SET FADDON | 8000h
720     .ENDIF
721
722     .restore