OSDN Git Service

V3.5 ABORT messages display I2C address
[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 LPM1        .equ SCG0 + CPUOFF  ; for devices with FLL: LPM1 = LPM0 + FLL disabled
38 LPM2        .equ SCG1 + CPUOFF
39 LPM3        .equ SCG1 + SCG0 + CPUOFF
40 LPM4        .equ SCG1 + SCG0 + OSCOFF + CPUOFF
41
42 ;-------------------------------------------------------------------------------
43 ; DEFINING FORTH REGISTERS - DTC model
44 ;-------------------------------------------------------------------------------
45 RSP         .reg    R1      ; RSP = Return Stack Pointer (return stack)
46 ;                   R2      ; not to be used
47 ;                   R3      ; not to be used
48 ; DOxxx registers           ; must be saved before use and restored after use
49 rDOCOL      .reg    R4
50 rDODOES     .reg    r5      ; to restore: MOV #XDODOES,rDODOES
51 rDOCON      .reg    r6      ; to restore: MOV #XDOCON,rDOCON
52 rDOVAR      .reg    r7      ; to restore: MOV #R>,rDOVAR
53 ; rDOxxx alias
54 R           .reg    r4      ; rDOCOL alias
55 Q           .reg    r5      ; rDODOES alias
56 P           .reg    r6      ; rDOCON alias
57 M           .reg    R7      ; rDOVAR alias
58 ; Scratch registers
59 Y           .reg    R8
60 X           .reg    R9
61 W           .reg    R10
62 T           .reg    R11
63 S           .reg    R12
64 ; Forth virtual machine
65 IP          .reg    R13     ; interpretative pointer
66 TOS         .reg    R14     ; first PSP cell
67 PSP         .reg    R15     ; PSP = Parameters Stack Pointer (stack data)
68
69
70
71 ; ----------------------------------------------
72 ; EXECUTIVE WORDS FOR Direct-Threaded Code (DTC)
73 ; ----------------------------------------------
74
75 ;-------------------------------------------------------------------------------
76 ; DODOES  leave on parameter stack the PFA of a CREATE definition and execute Master word
77 ;-------------------------------------------------------------------------------
78 DODOES      .equ    1285h       ; CALL rDODOES ; [rDODOES] is defined as xdodoes by COLD
79
80 ;-------------------------------------------------------------------------------
81 ; DOCON  leave on parameter stack the [PFA] of a CONSTANT definition
82 ;-------------------------------------------------------------------------------
83 DOCON       .equ    1286h   ; 4 CALL rDOCON ; [rDOCON] is defined as xdocon by COLD
84
85 ;-------------------------------------------------------------------------------
86 ; DOVAR leave on parameter stack the PFA of a VARIABLE definition
87 ;-------------------------------------------------------------------------------
88 DOVAR       .equ    1287h   ; 4 for CALL rDOVAR       S-- VAR      PFA  R--  
89                             ; [rDOVAR] is defined as RFROM by COLD
90 ;-------------------------------------------------------------------------------
91 ; DOCOL starts high level words
92 ;-------------------------------------------------------------------------------
93 ; very nice FAST FORTH feature:
94 ; as IP is always computed from the PC value, we can place low to high level
95 ; "ASMtoFORTH" or "mDOCOL" switches anywhere in a word, i.e. not only at its
96 ; beginning as ITC competitors.
97 ;-------------------------------------------------------------------------------
98     .SWITCH DTC
99
100     .CASE 1 ; DOCOL = CALL rDOCOL, [rDOCOL] = xdocol
101
102 DOCOL1      .equ    1284h   ; 4 CALL rDOCOL
103
104 ASMtoFORTH  .MACRO          ; compiled by LO2HI
105             CALL #EXIT      ; 10 cycles
106             .ENDM           ; 2 words, 10 cycles
107                             ; LO2HI + HI2LO = 3 words, 10 cycles.
108
109 mDOCOL      .MACRO          ; compiled by : and by colon
110             CALL rDOCOL     ; 10 [rDOCOL] = xdocol
111             .ENDM           ; 1 word, 14 cycles (CALL included) (ITC+4)
112                             ; COLON + SEMI = 2 words, 20 cycles (ITC+2)
113
114     .CASE 2 ; DOCOL = PUSH IP + CALL rDOCOL, [rDOCOL] = EXIT
115
116 DOCOL1      .equ    120Dh   ; 3 PUSH IP
117 DOCOL2      .equ    1284h   ; 4 CALL rDOCOL
118
119 ASMtoFORTH  .MACRO          ; compiled by LO2HI
120             CALL rDOCOL     ; 10 [rDOCOL] = EXIT
121             .ENDM           ; 1 word, 10 cycles. 
122                             ; LO2HI + HI2LO = 2 words, 10 cycles.
123
124 mDOCOL      .MACRO          ; compiled by : and by COLON
125             PUSH IP         ; 3
126             CALL rDOCOL     ; 10 [rDOCOL] = EXIT
127             .ENDM           ; 2 words, 13 cycles (ITC+3)
128                             ; COLON + SEMI = 3 words, 19 cycles (ITC+1)
129
130     .CASE 3 ; inlined DOCOL
131
132 DOCOL1      .equ    120Dh   ; 3 PUSH IP
133 DOCOL2      .equ    400Dh   ; 1 MOV PC,IP
134 DOCOL3      .equ    522Dh   ; 1 ADD #4,IP
135
136 ASMtoFORTH  .MACRO          ; compiled by LO2HI
137             MOV PC,IP       ; 1
138             ADD #4,IP       ; 1
139             MOV @IP+,PC     ; 4 NEXT
140             .ENDM           ; 6 cycles, 3 words
141                             ; LO2HI + HI2LO = 4 words, 6 cycles.
142
143 mDOCOL      .MACRO          ; compiled by : and by COLON
144             PUSH IP         ; 3
145             MOV PC,IP       ; 1
146             ADD #4,IP       ; 1
147             MOV @IP+,PC     ; 4 NEXT
148             .ENDM           ; 4 words, 9 cycles (ITC-1)
149                             ; COLON + SEMI = 5 words, 15 cycles (ITC-3)
150     .ENDCASE ; DTC
151
152 ;low level return
153 NEXT        .equ    4D30h   ; 4 MOV @IP+,PC
154                             ; jump from Asm word to NEXT Asm word: 1 word, 4 cycles (ITC-2)
155
156 ; ----------------------------------------------
157 ; INIT VOCABULARY POINTERS and MACROS FOR HEADER
158 ; ----------------------------------------------
159 voclink     .set 0  ; init vocabulary links
160 forthlink   .set 0
161 asmlink     .set 0
162
163     .save
164     .listing off
165
166     .IF THREADS = 1
167
168 FORTHWORD   .MACRO  name
169             .word   forthlink
170 forthlink   .set    $
171             .byte   STRLEN(name),name
172 ;            .align  2
173             .ENDM
174
175 FORTHWORDIMM .MACRO  name
176             .word   forthlink
177 forthlink   .set    $
178             .byte   STRLEN(name)+128,name
179 ;            .align  2
180             .ENDM
181
182 asmword     .MACRO  name
183             .word   asmlink
184 asmlink     .set    $
185             .byte   STRLEN(name),name
186 ;            .align  2
187             .ENDM
188
189     .ELSE
190 forthlink1  .set 0
191 forthlink2  .set 0
192 forthlink3  .set 0
193 forthlink4  .set 0
194 forthlink5  .set 0
195 forthlink6  .set 0
196 forthlink7  .set 0
197 forthlink8  .set 0
198 forthlink9  .set 0
199 forthlink10 .set 0
200 forthlink11 .set 0
201 forthlink12 .set 0
202 forthlink13 .set 0
203 forthlink14 .set 0
204 forthlink15 .set 0
205 forthlink16 .set 0
206 forthlink17 .set 0
207 forthlink18 .set 0
208 forthlink19 .set 0
209 forthlink20 .set 0
210 forthlink21 .set 0
211 forthlink22 .set 0
212 forthlink23 .set 0
213 forthlink24 .set 0
214 forthlink25 .set 0
215 forthlink26 .set 0
216 forthlink27 .set 0
217 forthlink28 .set 0
218 forthlink29 .set 0
219 forthlink30 .set 0
220 forthlink31 .set 0
221
222 asmlink1    .set 0
223 asmlink2    .set 0
224 asmlink3    .set 0
225 asmlink4    .set 0
226 asmlink5    .set 0
227 asmlink6    .set 0
228 asmlink7    .set 0
229 asmlink8    .set 0
230 asmlink9    .set 0
231 asmlink10   .set 0
232 asmlink11   .set 0
233 asmlink12   .set 0
234 asmlink13   .set 0
235 asmlink14   .set 0
236 asmlink15   .set 0
237 asmlink16   .set 0
238 asmlink17   .set 0
239 asmlink18   .set 0
240 asmlink19   .set 0
241 asmlink20   .set 0
242 asmlink21   .set 0
243 asmlink22   .set 0
244 asmlink23   .set 0
245 asmlink24   .set 0
246 asmlink25   .set 0
247 asmlink26   .set 0
248 asmlink27   .set 0
249 asmlink28   .set 0
250 asmlink29   .set 0
251 asmlink30   .set 0
252 asmlink31   .set 0
253
254 ;-------------------------------------------
255 ; (THREADS-1)*2 = AND mask to define CURRENT offset in vocabulary
256 ;-------------------------------------------
257 FORTHWORD   .MACRO  name
258 CONTEXTofst .set    charfromstr(name,0) & ((THREADS-1)*2)
259     .SWITCH CONTEXTofst
260     .case 0
261             .word   forthlink
262 forthlink   .set    $
263     .case 2
264             .word   forthlink1
265 forthlink1  .set    $
266     .case 4
267             .word   forthlink2
268 forthlink2  .set    $
269     .case 6
270             .word   forthlink3
271 forthlink3  .set    $
272     .case 8
273             .word   forthlink4
274 forthlink4  .set    $
275     .case 10
276             .word   forthlink5
277 forthlink5  .set    $
278     .case 12
279             .word   forthlink6
280 forthlink6  .set    $
281     .case 14
282             .word   forthlink7
283 forthlink7  .set    $
284     .case 16
285             .word   forthlink8
286 forthlink8  .set    $
287     .case 18
288             .word   forthlink9
289 forthlink9  .set    $
290     .case 20
291             .word   forthlink10
292 forthlink10 .set    $
293     .case 22
294             .word   forthlink11
295 forthlink11 .set    $
296     .case 24
297             .word   forthlink12
298 forthlink12 .set    $
299     .case 26
300             .word   forthlink13
301 forthlink13 .set    $
302     .case 28
303             .word   forthlink14
304 forthlink14 .set    $
305     .case 30
306             .word   forthlink15
307 forthlink15 .set    $
308     .case 32
309             .word   forthlink16
310 forthlink16 .set    $
311     .case 34
312             .word   forthlink17
313 forthlink17 .set    $
314     .case 36
315             .word   forthlink18
316 forthlink18 .set    $
317     .case 38
318             .word   forthlink19
319 forthlink19 .set    $
320     .case 40
321             .word   forthlink20
322 forthlink20 .set    $
323     .case 42
324             .word   forthlink21
325 forthlink21 .set    $
326     .case 44
327             .word   forthlink22
328 forthlink22 .set    $
329     .case 46
330             .word   forthlink23
331 forthlink23 .set    $
332     .case 48
333             .word   forthlink24
334 forthlink24 .set    $
335     .case 50
336             .word   forthlink25
337 forthlink25 .set    $
338     .case 52
339             .word   forthlink26
340 forthlink26 .set    $
341     .case 54
342             .word   forthlink27
343 forthlink27 .set    $
344     .case 56
345             .word   forthlink28
346 forthlink28 .set    $
347     .case 58
348             .word   forthlink29
349 forthlink29 .set    $
350     .case 60
351             .word   forthlink30
352 forthlink30 .set    $
353     .case 62
354             .word   forthlink31
355 forthlink31 .set    $
356     .endcase
357             .byte   STRLEN(name),name
358             .ENDM
359
360 ;-------------------------------------------
361 ; (THREADS-1)*2 = AND mask to define CURRENT offset in vocabulary
362 ;-------------------------------------------
363 FORTHWORDIMM .MACRO  name
364 CONTEXTofst .set    charfromstr(name,0) &  ((THREADS-1)*2)
365     .SWITCH CONTEXTofst
366     .case 0
367             .word   forthlink
368 forthlink   .set    $
369     .case 2
370             .word   forthlink1
371 forthlink1  .set    $
372     .case 4
373             .word   forthlink2
374 forthlink2  .set    $
375     .case 6
376             .word   forthlink3
377 forthlink3  .set    $
378     .case 8
379             .word   forthlink4
380 forthlink4  .set    $
381     .case 10
382             .word   forthlink5
383 forthlink5  .set    $
384     .case 12
385             .word   forthlink6
386 forthlink6  .set    $
387     .case 14
388             .word   forthlink7
389 forthlink7  .set    $
390     .case 16
391             .word   forthlink8
392 forthlink8  .set    $
393     .case 18
394             .word   forthlink9
395 forthlink9  .set    $
396     .case 20
397             .word   forthlink10
398 forthlink10 .set    $
399     .case 22
400             .word   forthlink11
401 forthlink11 .set    $
402     .case 24
403             .word   forthlink12
404 forthlink12 .set    $
405     .case 26
406             .word   forthlink13
407 forthlink13 .set    $
408     .case 28
409             .word   forthlink14
410 forthlink14 .set    $
411     .case 30
412             .word   forthlink15
413 forthlink15 .set    $
414     .case 32
415             .word   forthlink16
416 forthlink16 .set    $
417     .case 34
418             .word   forthlink17
419 forthlink17 .set    $
420     .case 36
421             .word   forthlink18
422 forthlink18 .set    $
423     .case 38
424             .word   forthlink19
425 forthlink19 .set    $
426     .case 40
427             .word   forthlink20
428 forthlink20 .set    $
429     .case 42
430             .word   forthlink21
431 forthlink21 .set    $
432     .case 44
433             .word   forthlink22
434 forthlink22 .set    $
435     .case 46
436             .word   forthlink23
437 forthlink23 .set    $
438     .case 48
439             .word   forthlink24
440 forthlink24 .set    $
441     .case 50
442             .word   forthlink25
443 forthlink25 .set    $
444     .case 52
445             .word   forthlink26
446 forthlink26 .set    $
447     .case 54
448             .word   forthlink27
449 forthlink27 .set    $
450     .case 56
451             .word   forthlink28
452 forthlink28 .set    $
453     .case 58
454             .word   forthlink29
455 forthlink29 .set    $
456     .case 60
457             .word   forthlink30
458 forthlink30 .set    $
459     .case 62
460             .word   forthlink31
461 forthlink31 .set    $
462     .endcase
463             .byte   80h+STRLEN(name),name
464             .ENDM
465
466 ;-------------------------------------------
467 ; (THREADS-1)*2 = AND mask to define CURRENT offset in vocabulary
468 ;-------------------------------------------
469 asmword     .MACRO  name
470 CONTEXTofst .set    charfromstr(name,0) &  ((THREADS-1)*2)
471     .SWITCH CONTEXTofst
472     .case 0
473             .word   asmlink
474 asmlink   .set    $
475     .case 2
476             .word   asmlink1
477 asmlink1  .set    $
478     .case 4
479             .word   asmlink2
480 asmlink2  .set    $
481     .case 6
482             .word   asmlink3
483 asmlink3  .set    $
484     .case 8
485             .word   asmlink4
486 asmlink4  .set    $
487     .case 10
488             .word   asmlink5
489 asmlink5  .set    $
490     .case 12
491             .word   asmlink6
492 asmlink6  .set    $
493     .case 14
494             .word   asmlink7
495 asmlink7  .set    $
496     .case 16
497             .word   asmlink8
498 asmlink8  .set    $
499     .case 18
500             .word   asmlink9
501 asmlink9  .set    $
502     .case 20
503             .word   asmlink10
504 asmlink10 .set    $
505     .case 22
506             .word   asmlink11
507 asmlink11 .set    $
508     .case 24
509             .word   asmlink12
510 asmlink12 .set    $
511     .case 26
512             .word   asmlink13
513 asmlink13 .set    $
514     .case 28
515             .word   asmlink14
516 asmlink14 .set    $
517     .case 30
518             .word   asmlink15
519 asmlink15 .set    $
520     .case 32
521             .word   asmlink16
522 asmlink16 .set    $
523     .case 34
524             .word   asmlink17
525 asmlink17 .set    $
526     .case 36
527             .word   asmlink18
528 asmlink18 .set    $
529     .case 38
530             .word   asmlink19
531 asmlink19 .set    $
532     .case 40
533             .word   asmlink20
534 asmlink20 .set    $
535     .case 42
536             .word   asmlink21
537 asmlink21 .set    $
538     .case 44
539             .word   asmlink22
540 asmlink22 .set    $
541     .case 46
542             .word   asmlink23
543 asmlink23 .set    $
544     .case 48
545             .word   asmlink24
546 asmlink24 .set    $
547     .case 50
548             .word   asmlink25
549 asmlink25 .set    $
550     .case 52
551             .word   asmlink26
552 asmlink26 .set    $
553     .case 54
554             .word   asmlink27
555 asmlink27 .set    $
556     .case 56
557             .word   asmlink28
558 asmlink28 .set    $
559     .case 58
560             .word   asmlink29
561 asmlink29 .set    $
562     .case 60
563             .word   asmlink30
564 asmlink30 .set    $
565     .case 62
566             .word   asmlink31
567 asmlink31 .set    $
568     .endcase ; asmlink
569             .byte   STRLEN(name),name
570             .ENDM
571
572     .endif ; thread case
573
574     .restore
575     .IFNDEF TERMINAL_I2C
576 ; --------------------------
577 ; COMPUTE BAUDRATE registers = fn(FREQUENCY,BAUDS)
578 ; --------------------------
579         .include "TERMINALBAUDRATE.inc"
580     .ENDIF
581
582 ; -------------------------------------
583 ; define MAIN max bound
584 ; -------------------------------------
585 FRAM_FULL   .equ SIGNATURES-40h ; set to protect JTAG and BSL signatures against overwrite.
586                                 ; 64 bytes are sufficient considering what can be compiled in one line + WORD use.
587                                 ; take care with ALLOT : don't ALLOT more than 32 words by line!
588
589 ;-----------------------------------------------------------------------
590 ; DEVICE I/O, MEMORY, SFR, vectors and minimum FORTH I/O declarations
591 ;-----------------------------------------------------------------------
592     .IFDEF MSP_EXP430FR5739
593 LF_XTAL
594         .IFDEF TERMINAL_I2C
595 UCB0_TERM
596         .ELSE
597 UCA0_TERM
598         .ENDIF
599 UCA1_SD
600     .include "MSP430FR5739.inc"
601     .ENDIF
602     .IFDEF MSP_EXP430FR5969
603 LF_XTAL
604         .IFDEF TERMINAL_I2C
605 UCB0_TERM
606         .ELSE
607 UCA0_TERM
608         .ENDIF
609 UCA1_SD
610     .include "MSP430FR5969.inc"
611     .ENDIF
612     .IFDEF MSP_EXP430FR5994
613 LF_XTAL
614         .IFDEF TERMINAL_I2C
615 UCB2_TERM
616         .ELSE
617 UCA0_TERM
618         .ENDIF
619 UCB0_SD
620     .include "MSP430FR5994.inc"
621     .ENDIF
622     .IFDEF MSP_EXP430FR6989
623 LF_XTAL
624         .IFDEF TERMINAL_I2C
625 UCB0_TERM
626         .ELSE
627 UCA1_TERM
628         .ENDIF
629 UCA0_SD
630     .INCLUDE "MSP430FR6989.inc"
631     .ENDIF
632     .IFDEF MSP_EXP430FR4133
633 LF_XTAL
634         .IFDEF TERMINAL_I2C
635 UCB0_TERM
636         .ELSE
637 UCA0_TERM
638 UCB0_SD
639         .ENDIF
640     .INCLUDE "MSP430FR4133.inc"
641     .ENDIF
642     .IFDEF MSP_EXP430FR2433
643 LF_XTAL
644         .IFDEF TERMINAL_I2C
645 UCB0_TERM
646         .ELSE
647 UCA0_TERM
648         .ENDIF
649 UCA1_SD
650     .include "MSP430FR2433.inc"
651     .ENDIF
652     .IFDEF CHIPSTICK_FR2433
653 ; no LF_XTAL to select ACLK = REFOCLK
654         .IFDEF TERMINAL_I2C
655 UCB0_TERM
656 UCA0_SD
657         .ELSE
658 UCA0_TERM
659 UCB0_SD
660         .ENDIF
661     .include "MSP430FR2433.inc"
662     .ENDIF
663     .IFDEF MSP_EXP430FR2355
664 LF_XTAL
665         .IFDEF TERMINAL_I2C
666 UCB0_TERM
667         .ELSE
668 UCA1_TERM
669         .ENDIF
670 UCB1_SD
671     .include "MSP430FR2355.inc"
672     .ENDIF
673     .IFDEF LP_MSP430FR2476
674 ; LF_XTAL       ; connect resistors R2=0k, R3=0k before uncomment this line
675         .IFDEF TERMINAL_I2C
676 UCB1_TERM
677         .ELSE
678 UCA0_TERM
679         .ENDIF
680 UCA1_SD
681     .include "MSP430FR2476.inc"
682     .ENDIF
683     .save
684     .listing off
685 ; vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
686 ; add here your device.inc item:
687 ;     .IFDEF MY_MSP430FR5738_1
688 ; UCA0_UART   ; defines uart used by FORTH input terminal 
689 ; LF_XTAL     ; defines if your module have a 32768 Hz xtal, to enable it.
690 ; UCB0_SD     ; defines UC used for SD Card driver if used
691 ;     .include "MSP430FR5738.inc"  ; include device declarations
692 ;     .ENDIF
693 ;^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
694
695 ; --------------------------
696 ; COMPUTE SWITCHES
697 ; --------------------------
698
699     .IFDEF CORE_COMPLEMENT
700         .IFNDEF USE_MOVE
701 USE_MOVE
702         .ENDIF
703     .ENDIF
704
705     .IFDEF UTILITY
706         .IFNDEF USE_MOVE
707 USE_MOVE
708         .ENDIF
709     .ENDIF
710
711     .IFDEF FIXPOINT_INPUT
712         .IFNDEF DOUBLE_INPUT
713 DOUBLE_INPUT
714         .ENDIF
715     .ENDIF
716
717 ; define if QUIT is DEFERed
718     .IFDEF SD_CARD_LOADER 
719         .IFNDEF DOUBLE_INPUT
720 DOUBLE_INPUT
721         .ENDIF
722         .IFNDEF DEFER_ACCEPT
723 DEFER_ACCEPT
724         .ENDIF
725
726         .IFDEF BOOTLOADER
727             .IFNDEF CONDCOMP
728 CONDCOMP                    ; mandatory for Bootstrap
729             .ENDIF
730             .IFNDEF DEFER_QUIT
731 DEFER_QUIT
732             .ENDIF
733         .ENDIF
734     .ENDIF
735
736     .IFDEF EXTENDED_ASM
737         .IFNDEF DOUBLE_INPUT
738 DOUBLE_INPUT
739         .ENDIF
740     .ELSE
741         .IFDEF EXTENDED_MEM
742             .IFNDEF MSP430ASSEMBLER
743 MSP430ASSEMBLER
744             .ENDIF
745             .IFNDEF DOUBLE_INPUT
746 DOUBLE_INPUT
747             .ENDIF
748         .ENDIF
749     .ENDIF
750
751     .IFDEF FIXPOINT
752         .IFNDEF FIXPOINT_INPUT
753 FIXPOINT_INPUT              ; to interpret fixpoint numbers
754         .ENDIF
755     .ENDIF
756
757     .IFDEF FIXPOINT_INPUT
758     .IFNDEF DOUBLE_NUMBERS
759 DOUBLE_NUMBERS              ; to process double numbers
760     .ENDIF
761     .ENDIF
762
763     .IFDEF DOUBLE_INPUT
764     .IFNDEF DOUBLE_NUMBERS
765 DOUBLE_NUMBERS              ; to process double numbers
766     .ENDIF
767     .ENDIF
768
769     .restore
770 ; ---------------------------
771 ; compute value of FORTHADDON
772 ; ---------------------------
773 FADDON .set 0
774     .IFDEF CONDCOMP
775 FADDON .SET FADDON | 01h    ; Conditionnal Compilation
776     .ENDIF
777     .IFDEF MSP430ASSEMBLER
778 FADDON .SET FADDON | 02h    ; MSP430 Assembler (16 bits addresses)
779     .ENDIF
780     .IFDEF EXTENDED_ASM     ; MSP430X Assembler (16+20 bits addresses)
781 FADDON .SET FADDON | 04h
782     .ENDIF
783     .IFDEF DEFERRED
784 FADDON .SET FADDON | 08h    ; DEFERRED, adds DEFER IS :NONAME CODENNM
785     .ENDIF
786     .IFDEF VOCABULARY_SET
787 FADDON .SET FADDON | 10h    ; VOCABULERY SET, adds VOCABULARY FORTH ASSEMBLER ALSO PREVIOUS ONLY DEFINITIONS (FORTH83)
788     .ENDIF
789     .IFDEF DOUBLE_INPUT
790 FADDON .SET FADDON | 20h    ; DOUBLE INPUT
791     .ENDIF
792     .IFDEF FIXPOINT_INPUT
793 FADDON .SET FADDON | 40h    ; FIXPOINT INPUT
794     .ENDIF
795     .IFDEF SD_CARD_LOADER
796 FADDON .SET FADDON | 80h    ; SD_CARD Loader
797     .ENDIF
798     .IFDEF SD_CARD_READ_WRITE
799 FADDON .SET FADDON | 100h   ; SD_CARD Read Write Delete
800     .ENDIF
801     .IFDEF BOOTLOADER
802 FADDON .SET FADDON | 200h   ; BOOTLOADER
803     .ENDIF
804     .IFDEF EXTENDED_MEM
805     .IFNDEF EXTENDED_ASM
806 FADDON .SET FADDON | 400h   ; MSP430 Assembler with Address access beyond $FFFF
807     .ENDIF
808     .ENDIF
809     .IFNDEF TERMINAL_I2C ; if TERMINAL UART...
810         .IFDEF HALFDUPLEX
811 FADDON .SET FADDON | 800h   ; UART Half Duplex
812         .ENDIF
813         .IFDEF TERMINAL3WIRES
814 FADDON .SET FADDON | 1000h  ; UART XON/XOFF
815         .ENDIF
816         .IFDEF TERMINAL4WIRES
817 FADDON .SET FADDON | 2000h  ; UART RTS
818         .ENDIF
819         .IFDEF TERMINAL5WIRES
820 FADDON .SET FADDON | 4000h  ; UART CTS
821         .ENDIF
822     .ENDIF ; TERMINAL UART
823     .IFDEF LF_XTAL
824 FADDON .SET FADDON | 8000h  ; LFXTAL = 32768 Hz
825     .ENDIF