3 .cpu MSP430X ; define CPU
22 ; ----------------------------------------------
23 ; MACROS FOR assembly instructions
24 ; ----------------------------------------------
25 NOP .macro ; 1 word, 1 cycle
26 .word 4303h ; mov #0, r3
29 NOP2 .macro ; 1 Word, 2 cycles
33 NOP3 .macro ; 1 Word, 3 cycles
34 .word 4000h ; MOV PC,PC
37 ; SR(11:0) bits are saved by interrupts and restored by the instruction RETI
42 CPUOFF .equ 0010h ; CPU Off. 1=turn_off_CPU
43 OSCOFF .equ 0020h ; Oscillator Off. 1=turn_off_LFXT1CLK
44 SCG0 .equ 0040h ; System Clock Generator 0. 1=turn_off_DCO
45 SCG1 .equ 0080h ; System Clock Generator 1. 1=turn_off_SMCLK
47 UF9 .equ 0200h ; = SR(9) User Flag 9
48 UF10 .equ 0400h ; = SR(10) User Flag 10
49 UF11 .equ 0800h ; = SR(11) User Flag 11
50 ;----------------------------------------------------------------------------
52 LPM1 .equ SCG0 + CPUOFF ; for devices with FLL: LPM1 = LPM0 + FLL disabled
53 LPM2 .equ SCG1 + CPUOFF
54 LPM3 .equ SCG1 + SCG0 + CPUOFF
55 LPM4 .equ SCG1 + SCG0 + OSCOFF + CPUOFF
57 ;-------------------------------------------------------------------------------
58 ; DEFINING FORTH REGISTERS - DTC model
59 ;-------------------------------------------------------------------------------
60 RSP .reg R1 ; RSP = Return Stack Pointer (return stack)
63 ; DOxxx registers ; must be saved before use and restored after use
65 rDODOES .reg r5 ; to restore: MOV #XDODOES,rDODOES
66 rDOCON .reg r6 ; to restore: MOV #XDOCON,rDOCON
67 rDOVAR .reg r7 ; to restore: MOV #R>,rDOVAR
69 R .reg r4 ; rDOCOL alias
70 Q .reg r5 ; rDODOES alias
71 P .reg r6 ; rDOCON alias
72 M .reg R7 ; rDOVAR alias
79 ; Forth virtual machine
80 IP .reg R13 ; interpretative pointer
81 TOS .reg R14 ; first PSP cell
82 PSP .reg R15 ; PSP = Parameters Stack Pointer (stack data)
84 ; ----------------------------------------------
85 ; EXECUTIVE WORDS FOR Direct-Threaded Code (DTC)
86 ; ----------------------------------------------
87 ;-------------------------------------------------------------------------------
88 ; very nice FAST FORTH feature:
89 ; as IP is always computed from the PC value, we can place low to high level
90 ; "ASMtoFORTH" or "mDOCOL" switches anywhere in a word, i.e. not only at its
91 ; beginning as ITC competitors.
92 ;-------------------------------------------------------------------------------
93 DOCOL .equ 1284h ; 1284h = CALL rDOCOL instruction
94 DODOES .equ 1285h ; 1285h = CALL rDODOES instruction
95 DOCON .equ 1286h ; 1286h = CALL rDOCON instruction
96 DOVAR .equ 1287h ; 1287h = CALL rDOVAR instruction
102 .CASE 1 ; DOCOL = CALL rDOCOL, [rDOCOL] = XDOCOL
103 mASM2FORTH .MACRO ; compiled by LO2HI
104 CALL #EXIT ; 10 cycles
105 .ENDM ; 2 words, 10 cycles
106 ; LO2HI + HI2LO = 3 words, 10 cycles.
108 mDOCOL .MACRO ; compiled by : and by colon
109 CALL rDOCOL ; 10 [rDOCOL] = XDOCOL
110 .ENDM ; 1 word, 14 cycles (CALL included) (ITC+4)
111 ; COLON + SEMI = 2 words, 20 cycles (ITC+2)
112 .CASE 2 ; DOCOL = PUSH IP + CALL rDOCOL, [rDOCOL] = EXIT
113 mASM2FORTH .MACRO ; compiled by LO2HI
114 CALL rDOCOL ; 10 [rDOCOL] = EXIT
115 .ENDM ; 1 word, 10 cycles.
116 ; LO2HI + HI2LO = 2 words, 10 cycles.
118 mDOCOL .MACRO ; compiled by : and by COLON
120 CALL rDOCOL ; 10 [rDOCOL] = EXIT
121 .ENDM ; 2 words, 13 cycles (ITC+3)
122 ; COLON + SEMI = 3 words, 19 cycles (ITC+1)
123 .CASE 3 ; inlined DOCOL
124 mASM2FORTH .MACRO ; compiled by LO2HI
128 .ENDM ; 6 cycles, 3 words
129 ; LO2HI + HI2LO = 4 words, 6 cycles.
131 mDOCOL .MACRO ; compiled by : and by COLON
136 .ENDM ; 4 words, 9 cycles (ITC-1)
137 ; COLON + SEMI = 5 words, 15 cycles (ITC-3)
146 ; ----------------------------------------------
147 ; INIT VOCABULARY POINTERS and MACROS FOR HEADER
148 ; ----------------------------------------------
149 voclink .set 0 ; init vocabulary links
155 FORTHWORD .MACRO name
158 .byte STRLEN(name)*2,name
162 FORTHWORDIMM .MACRO name
165 .byte STRLEN(name)*2+1,name ; bit 0 is the immediate flag
172 .byte STRLEN(name)*2,name
241 ;-------------------------------------------
242 ; (THREADS-1)*2 = AND mask to define CURRENT offset in vocabulary
243 ;-------------------------------------------
244 FORTHWORD .MACRO name
245 CONTEXTofst .set (charfromstr(name,0) & (THREADS-1))*2
344 .byte STRLEN(name)*2,name
347 ;-------------------------------------------
348 ; (THREADS-1)*2 = AND mask to define CURRENT offset in vocabulary
349 ;-------------------------------------------
350 FORTHWORDIMM .MACRO name
351 CONTEXTofst .set (charfromstr(name,0) & (THREADS-1))*2
450 .byte STRLEN(name)*2+1,name ; bit 0 is the immediate flag
453 ;-------------------------------------------
454 ; (THREADS-1)*2 = AND mask to define CURRENT offset in vocabulary
455 ;-------------------------------------------
457 CONTEXTofst .set (charfromstr(name,0) & (THREADS-1))*2
556 .byte STRLEN(name)*2,name
561 ; -------------------------------------
562 ; define MAIN max bound
563 ; -------------------------------------
564 FRAM_FULL .equ SIGNATURES-40h ; set to protect JTAG and BSL signatures against overwrite.
565 ; 64 bytes are sufficient considering what can be compiled in one line + WORD use.
566 ; take care with ALLOT : don't ALLOT more than 32 words by line!
568 ; --------------------------
569 ; COMPUTE ASSEMBLY SWITCHES
570 ; --------------------------
571 .IFDEF CORE_COMPLEMENT
581 .IFDEF SD_CARD_LOADER
587 CONDCOMP ; mandatory for Bootstrap
597 .IFNDEF MSP430ASSEMBLER
606 .IFNDEF FIXPOINT_INPUT
607 FIXPOINT_INPUT ; to interpret fixpoint numbers
610 .IFDEF FIXPOINT_INPUT
611 .IFNDEF DOUBLE_NUMBERS
612 DOUBLE_NUMBERS ; to process double numbers
616 .IFNDEF DOUBLE_NUMBERS
617 DOUBLE_NUMBERS ; to process double numbers
621 ; --------------------------
622 ; COMPUTE BAUDRATE registers = fn(FREQUENCY,BAUDS)
623 ; --------------------------
625 .include "TERMINALBAUDRATE.inc"
627 ;-----------------------------------------------------------------------
628 ; DEVICE I/O, MEMORY, SFR, vectors and minimum FORTH I/O declarations
629 ;-----------------------------------------------------------------------
632 .IFDEF MSP_EXP430FR5739
633 FADDON .SET FADDON | BIT0 ; hardware MPY
641 .include "MSP430FR5739.inc"
643 .IFDEF MSP_EXP430FR5969
644 FADDON .SET FADDON | BIT0 ; hardware MPY
653 .include "MSP430FR5969.inc"
655 .IFDEF MSP_EXP430FR5994
656 FADDON .SET FADDON | BIT0 ; hardware MPY
665 .include "MSP430FR5994.inc"
667 .IFDEF MSP_EXP430FR6989
668 FADDON .SET FADDON | BIT0 ; hardware MPY
677 .INCLUDE "MSP430FR6989.inc"
679 .IFDEF MSP_EXP430FR5972
680 FADDON .SET FADDON | BIT0 ; hardware MPY
689 .INCLUDE "MSP430FR5972.inc"
691 .IFDEF MSP_EXP430FR4133
700 .INCLUDE "MSP430FR4133.inc"
702 .IFDEF MSP_EXP430FR2433
711 .include "MSP430FR2433.inc"
713 .IFDEF CHIPSTICK_FR2433
715 ; no LF_XTAL to select ACLK = REFOCLK
723 .include "MSP430FR2433.inc"
725 .IFDEF MSP_EXP430FR2355
726 FADDON .SET FADDON | BIT0 ; hardware MPY
735 .include "MSP430FR2355.inc"
737 .IFDEF LP_MSP430FR2476
738 FADDON .SET FADDON | BIT0 ; hardware MPY
741 ; LF_XTAL ; connect resistors R2=0k, R3=0k before uncomment this line
748 .include "MSP430FR2476.inc"
751 ; vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
752 ; add here your device.inc item:
753 ;^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
756 ; ---------------------------
757 ; compute value of FORTHADDON
758 ; ---------------------------
759 .IFDEF FLOORED_DIVISION
760 FADDON .SET FADDON | BIT15 ; FLOORED_DIVISION
763 FADDON .SET FADDON | BIT14 ; LFXTAL = 32768 Hz
765 .IFNDEF TERMINAL_I2C ; if TERMINAL UART...
766 .IFDEF TERMINAL5WIRES
767 FADDON .SET FADDON | BIT13 ; UART CTS
769 .IFDEF TERMINAL4WIRES
770 FADDON .SET FADDON | BIT12 ; UART RTS
772 .IFDEF TERMINAL3WIRES
773 FADDON .SET FADDON | BIT11 ; UART XON/XOFF
776 FADDON .SET FADDON | BIT10 ; UART Half Duplex
778 .ENDIF ; TERMINAL UART
779 ; ---------------------------
781 FADDON .SET FADDON | BIT9 ;I2C TERMINAL
783 .IFDEF FIXPOINT_INPUT
784 FADDON .SET FADDON | BIT8 ; Q15.16 INPUT
787 FADDON .SET FADDON | BIT7 ; DOUBLE INPUT
789 ; ---------------------------
790 .IFDEF EXTENDED_ASM ; Assembler 20 bits
791 FADDON .SET FADDON | BIT6
793 ; .IFDEF MSP430ASSEMBLER
794 FADDON .SET FADDON | BIT5 ; Assembler 16 bits
798 FADDON .SET FADDON | BIT4 ; Assembler 16 bits with Address access beyond $FFFF
801 ; ---------------------------
802 ; .IFDEF VOCABULARY_SET ;
803 ;FADDON .SET FADDON | BIT3 ; vocabulary set
804 ; .ENDIF ; BIT2 to BIT0 are free
808 ;-------------------------------------------------------------------------------
809 ; DTCforthMSP430FR5xxx RAM memory map:
810 ;-------------------------------------------------------------------------------
812 ;---------------------------;---------
813 ; name words ; comment
814 ;---------------------------;---------
815 ;LSTACK = L0 = LEAVEPTR ; ----- RAM_ORG
817 LSTACK_LEN .equ 16 ; | grows up
820 PSTACK_LEN .equ 48 ; | grows down
822 ;PSTACK=S0 ; ----- RAM_ORG + $80
824 RSTACK_LEN .equ 48 ; | grows down
826 ;RSTACK=R0 ; ----- RAM_ORG + $E0
828 ;---------------------------;---------
829 ; names bytes ; comments
830 ;---------------------------;---------
831 ; PAD_I2CADR ; ----- RAM_ORG + $E0
833 ; PAD < ----- RAM_ORG + $E4
835 PAD_LEN .equ 84 ; | grows up (ans spec. : PAD >= 84 chars)
837 ; TIB_I2CADR ; ----- RAM_ORG + $138
839 ; TIB < ----- RAM_ORG + $13C
841 CIB_LEN .equ 84 ; | grows up Current Input Buffer (ans spec. : TIB >= 80 chars)
843 ; HOLDS_ORG < ------RAM_ORG + $190
845 HOLD_LEN .equ 34 ; | grows down (ans spec. : HOLD_LEN >= (2*n) + 2 char, with n = 16 bits/cell
847 ; HOLD_BASE < ----- RAM_ORG + $1B2
851 ; ----- RAM_ORG + $1E0
855 ; SD_BUF_I2CADR < ----- RAM_ORG + $1FC
857 ; SD_BUF < ----- RAM_ORG + $200
859 SD_BUF_LEN .equ 200h ; 512 bytes buffer
861 ; SD_BUF_END < ----- RAM_ORG + $400
864 LEAVEPTR .equ LSTACK ; Leave-stack pointer
865 PSTACK .equ LSTACK+(LSTACK_LEN*2)+(PSTACK_LEN*2)
866 RSTACK .equ PSTACK+(RSTACK_LEN*2)
867 PAD_I2CADR .equ PAD_ORG-4
868 PAD_I2CCNT .equ PAD_ORG-2
869 PAD_ORG .equ RSTACK+4
870 TIB_I2CADR .equ TIB_ORG-4
871 TIB_I2CCNT .equ TIB_ORG-2
872 TIB_ORG .equ PAD_ORG+PAD_LEN+4
873 HOLDS_ORG .equ TIB_ORG+CIB_LEN
875 HOLD_BASE .equ HOLDS_ORG+HOLD_LEN
877 ; ----------------------------------------------------
878 ; RAM_ORG + $1B2 : RAM VARIABLES
879 ; ----------------------------------------------------
880 HP .equ HOLD_BASE ; HOLD ptr
881 ; ----------------------------------------------------
882 ; new definition pointers, generated by HEADER
883 ; ----------------------------------------------------
884 LAST_NFA .equ HOLD_BASE+2 ; used by REVEAL, IMMEDIATE
885 LAST_THREAD .equ HOLD_BASE+4 ; " REVEAL
886 LAST_CFA .equ HOLD_BASE+6 ; " DOES>, RECURSE
887 LAST_PSP .equ HOLD_BASE+8 ; " REVEAL
888 ; ----------------------------------------------------
889 ; FORTH interpreter variables
890 ; ----------------------------------------------------
891 STATE .equ HOLD_BASE+10 ; Interpreter state
892 BASEADR .equ HOLD_BASE+12 ; BASE
893 CAPS .equ HOLD_BASE+14 ; CAPS
894 ; ----------------------------------------------------
895 SOURCE .equ HOLD_BASE+16 ; len, org of input stream
896 SOURCE_LEN .equ HOLD_BASE+16 ;
897 SOURCE_ORG .equ HOLD_BASE+18 ;
898 TOIN .equ HOLD_BASE+20 ; CurrentInputBuffer pointer
899 ; ----------------------------------------------------
901 ; ----------------------------------------------------
902 DP .equ HOLD_BASE+22 ; dictionnary pointer
903 LASTVOC .equ HOLD_BASE+24 ;
904 CURRENT .equ HOLD_BASE+26 ;
905 CONTEXT .equ HOLD_BASE+28 ; 8 words of depth ending
906 NULL_WORD .equ HOLD_BASE+44 ; with a null word in addition
907 ; ----------------------------------;
909 .IFDEF SD_CARD_LOADER
910 ; --------------------------------------------------
911 ; RAM_ORG + $1FC : RAM SD_CARD SD_BUF 4 + 512 bytes
912 ; --------------------------------------------------
913 SD_BUF_I2CADR .equ SD_BUF-4
914 SD_BUF_I2CCNT .equ SD_BUF-2
915 SD_BUF .equ HOLD_BASE+78
916 SD_BUF_END .equ SD_BUF+200h ; 512bytes
917 ; --------------------------------------------------
918 ; RAM_ORG + $400 : free RAM
919 ; --------------------------------------------------
922 .IFDEF SD_CARD_LOADER
923 ; ---------------------------------------
924 ; VARIABLES that should be in RAM
925 ; ---------------------------------------
926 .IF RAM_LEN < 2048 ; if RAM < 2K (FR57xx) the variables below are in INFO space (FRAM)
927 SD_ORG .equ INFO_ORG+5Ah ;
928 .ELSE ; if RAM >= 2k the variables below are in RAM
929 SD_ORG .equ SD_BUF_END+2 ; 1 word guard
933 ; ---------------------------------------
934 ; FAT FileSystemInfos
935 ; ---------------------------------------
936 ;FATtype .equ SD_ORG+0
937 BS_FirstSectorL .equ SD_ORG+2 ; init by SD_Init, used by RW_Sector_CMD
938 BS_FirstSectorH .equ SD_ORG+4 ; init by SD_Init, used by RW_Sector_CMD
939 OrgFAT1 .equ SD_ORG+6 ; init by SD_Init,
940 FATSize .equ SD_ORG+8 ; init by SD_Init,
941 OrgFAT2 .equ SD_ORG+10 ; init by SD_Init,
942 ;OrgRootDIR .equ SD_ORG+12 ; init by SD_Init,
943 OrgClusters .equ SD_ORG+14 ; init by SD_Init, Sector of Cluster 0
944 SecPerClus .equ SD_ORG+16 ; init by SD_Init, byte size
945 ; ---------------------------------------
947 ; ---------------------------------------
948 SD_LOW_LEVEL .equ SD_ORG+18
949 SD_CMD_FRM .equ SD_LOW_LEVEL ; SD_CMDx inverted frame ${CRC7,ll,LL,hh,HH,CMD}
950 SectorL .equ SD_LOW_LEVEL+6
951 SectorH .equ SD_LOW_LEVEL+8
952 ; ---------------------------------------
954 ; ---------------------------------------
955 BufferPtr .equ SD_LOW_LEVEL+10
956 BufferLen .equ SD_LOW_LEVEL+12
957 ; ---------------------------------------
959 ; ---------------------------------------
960 SD_FAT_LEVEL .equ SD_LOW_LEVEL+14
961 ClusterL .equ SD_FAT_LEVEL ;
962 ClusterH .equ SD_FAT_LEVEL+2 ;
963 LastFATsector .equ SD_FAT_LEVEL+4 ;
964 LastFAToffset .equ SD_FAT_LEVEL+6 ;
965 FATsector .equ SD_FAT_LEVEL+8 ; not used
966 ; ---------------------------------------
968 ; ---------------------------------------
969 DIRClusterL .equ SD_FAT_LEVEL+10 ; contains the Cluster of current directory ; = 1 as FAT16 root directory
970 DIRClusterH .equ SD_FAT_LEVEL+12 ; contains the Cluster of current directory ; = 1 as FAT16 root directory
971 DIREntryOfst .equ SD_FAT_LEVEL+14
972 ; ---------------------------------------
974 ; ---------------------------------------
975 CurrentHdl .equ SD_FAT_LEVEL+16 ; contains the address of the last opened file structure, or 0
976 ; ---------------------------------------
977 ; Load file operation
978 ; ---------------------------------------
979 PathName_PTR .equ SD_FAT_LEVEL+18 ;
980 PathName_END .equ SD_FAT_LEVEL+20 ;
981 ; ---------------------------------------
983 ; ---------------------------------------
984 FirstHandle .equ SD_FAT_LEVEL+22
985 ; three handle tokens :
986 ; HDLB_Token= 0 : free handle
988 ; = 2 : file updated (write)
989 ; =-1 : LOAD"ed file (source file)
992 HDLW_PrevHDL .equ 0 ; previous handle
993 HDLB_Token .equ 2 ; token
994 HDLB_ClustOfst .equ 3 ; Current sector offset in current cluster (Byte)
995 HDLL_DIRsect .equ 4 ; Dir SectorL
996 HDLH_DIRsect .equ 6 ; Dir SectorH
997 HDLW_DIRofst .equ 8 ; SD_BUF offset of Dir entry
998 HDLL_FirstClus .equ 10 ; File First ClusterLo (identify the file)
999 HDLH_FirstClus .equ 12 ; File First ClusterHi (identify the file)
1000 HDLL_CurClust .equ 14 ; Current ClusterLo
1001 HDLH_CurClust .equ 16 ; Current ClusterHi
1002 HDLL_CurSize .equ 18 ; written size / not yet read size (Long)
1003 HDLH_CurSize .equ 20 ; written size / not yet read size (Long)
1004 HDLW_BUFofst .equ 22 ; SD_BUF offset ; used by LOAD"
1005 HDLW_PrevLEN .equ 24 ; previous LEN
1006 HDLW_PrevORG .equ 26 ; previous ORG
1008 .IF RAM_LEN < 2048 ; due to the lack of RAM, only 4 handles and PAD replaces SDIB
1009 HandleMax .equ 4 ; and not 8 to respect INFO size (FRAM)
1010 HandleLenght .equ 28
1011 HandlesLen .equ handleMax*HandleLenght
1012 HandleEnd .equ FirstHandle+handleMax*HandleLenght
1013 SD_END .equ HandleEnd
1014 SDIB_I2CADR .equ PAD_ORG-4
1015 SDIB_I2CCNT .equ PAD_ORG-2
1016 SDIB_ORG .equ PAD_ORG
1017 .ELSE ; RAM_Size >= 2k all is in RAM
1019 HandleLenght .equ 28
1020 HandlesLen .equ handleMax*HandleLenght
1021 HandleEnd .equ FirstHandle+handleMax*HandleLenght
1022 SDIB_I2CADR .equ SDIB_ORG-4
1023 SDIB_I2CCNT .equ SDIB_ORG-2
1024 SDIB_ORG .equ HandleEnd+4
1025 SD_END .equ SDIB_ORG+CIB_LEN
1027 SD_LEN .equ SD_END-SD_ORG
1028 .ENDIF ; SD_CARD_LOADER
1031 ;-------------------------------------------------------------------------------
1032 ; INFO(DCBA) >= 256 bytes memory map (FRAM) :
1033 ;-------------------------------------------------------------------------------
1034 ; FRAM INFO: KERNEL INIT CONSTANTS and VARIABLES
1035 ; ----------------------------------------------
1036 FREQ_KHZ .word FREQUENCY*1000 ; used to stabilize MCLK before start, see MSP430FRxxxx.asm
1038 I2CSLAVEADR .word MYSLAVEADR ; on MSP430FR2xxx devices with BSL I2C, Slave address is FFA0h
1039 I2CSLAVEADR1 .word 0
1040 LPM_MODE .word GIE+LPM4 ; LPM4 is the default mode for I2C TERMINAL
1041 .ELSE ; TERMINAL_UART
1042 TERMBRW_RST .word TERMBRW_INI ; set by TERMINALBAUDRATE.inc
1043 TERMMCTLW_RST .word TERMMCTLW_INI ; set by TERMINALBAUDRATE.inc
1044 LPM_MODE .word GIE+LPM0 ; LPM0 is the default mode for UART TERMINAL
1046 USERSYS .word -3 ; RESET use, value = -3 when compiling new kernel
1047 FORTHVERSION .word VAL(SUBSTR(VER,1,0)); used by WARM
1048 INI_THREAD .word THREADS ; used by WORDS definition
1049 FORTHADDON .word FADDON ; used by FF_SPECS.f and to secure downloading of any source.f files.
1050 ; --------------------------------------;
1051 DEEP_ORG ; MOV #DEEP_ORG,X see "PUC 7" in forthMSP430FR.ASM
1052 ; --------------------------------------;
1053 DEEP_TERM_VEC .word TERMINAL_INT ; MOV @X+,&TERM_VEC ; TERMINAL_INT --> FRAM TERM_VEC
1054 .IFNDEF SD_CARD_LOADER
1055 DEEP_COLD .word COLD_TERM ; MOV @X+,&COLD_APP ; COLD_TERM --> FRAM COLD_APP
1056 DEEP_SOFT .word INIT_SOFT_TERM ; MOV @X+,&SOFT_APP ; INIT_SOFT_TERM --> FRAM SOFT_APP
1057 DEEP_HARD .word INIT_TERM ; MOV @X+,&HARD_APP ; INIT_TERM --> FRAM HARD_APP
1058 DEEP_SLEEP .word RXON ; MOV @X+,&SLEEP_APP ; RXON --> FRAM SLEEP_APP
1060 DEEP_COLD .word COLD_TERM ; MOV @X+,&COLD_APP ; COLD_TERM --> FRAM COLD_APP
1061 DEEP_SOFT .word INIT_SOFT_SD ; MOV @X+,&SOFT_APP ; INIT_SOFT_SD --> FRAM SOFT_APP
1062 DEEP_HARD .word INIT_HARD_SD ; MOV @X+,&HARD_APP ; INIT_HARD_SD --> FRAM HARD_APP
1063 DEEP_SLEEP .word RXON ; MOV @X+,&SLEEP_APP ; RXON --> FRAM SLEEP_APP
1065 DEEP_DP .word ROMDICT ; MOV @X+,&RST_DP ; DEEP_DP --> FRAM RST_DP
1066 DEEP_LASTVOC .word lastvoclink ; MOV @X+,&RST_LASTVOC ; DEEP_LASTVOC --> FRAM RST_LASTVOC
1067 DEEP_CURRENT .word BODYFORTH ; MOV @X+,&CURRENT ; DEEP_CONTEXT --> FRAM RST_CURRENT
1068 DEEP_CONTEXT .word BODYFORTH ; MOV @X+,&CONTEXT ; DEEP_CONTEXT --> FRAM RST_CONTEXT
1069 ; --------------------------------------;
1070 PUC_ABORT_ORG ; MOV #PUC_ABORT_ORG,X
1071 ; --------------------------------------;
1072 INIT_ACCEPT .word ACCEPT+4 ; MOV @X+,&ACCEPT+2 ; INIT_ACCEPT --> FRAM PFA_ACCEPT
1073 INIT_EMIT .word EMIT+4 ; MOV @X+,&EMIT+2 ; INIT_EMIT --> FRAM PFA_EMIT
1074 INIT_KEY .word KEY+4 ; MOV @X+,&KEY+2 ; INIT_KEY --> FRAM PFA_KEY
1075 INIT_CIB .word TIB_ORG ; MOV @X+,&CIB_ORG ; INIT_CIB --> FRAM CIB_ORG
1076 ; --------------------------------------;
1077 FORTH_ORG ; MOV #FORTH_ORG,X
1078 ; --------------------------------------;
1079 INIT_RSP .word RSTACK ; MOV @X+,RSP ; INIT_RSP --> RSP (R1)
1082 INIT_DOCOL .word xDOCOL ; MOV @X+,rDOCOL ; INIT_DOCOL --> rDOCOL (R4)
1084 INIT_DOCOL .word EXIT ; MOV @X+,rDOCOL ; INIT_DOCOL --> rDOCOL (R4)
1086 INIT_DOCOL .word 0 ; MOV @X+,R4 ; useless rDOCOL
1088 INIT_DODOES .word xDODOES ; MOV @X+,rDODOES ; INIT_DODOES --> rDODOES (R5)
1089 INIT_DOCON .word xDOCON ; MOV @X+,rDOCON ; INIT_DOCON --> rDOCON (R6)
1090 INIT_DOVAR .word RFROM ; MOV @X+,rDOVAR ; INIT_DOVAR --> rDOVAR (R7)
1091 INIT_CAPS .word 32 ; MOV @X+,&CAPS ; INIT_CAPS --> RAM CAPS
1092 INIT_BASE .word 10 ; MOV @X+,&BASE ; INIT_BASE --> RAM BASE
1093 INIT_LEAVE .word LSTACK ; MOV @X+,&LEAVEPTR ; INIT_LEAVE --> RAM LEAVEPTR
1094 ; --------------------------------------;
1095 ; FRAM RST values initialised by -1 SYS ;
1096 ; --------------------------------------;
1097 RST_ORG ; make room for RST values of:
1098 RST_LEN .equ 16 ; 16 bytes
1099 ; --------------------------------------;
1100 .IFNDEF SD_CARD_LOADER
1101 COLD_APP .word COLD_TERM ; COLD_APP
1102 SOFT_APP .word INIT_SOFT_TERM ; SOFT_APP
1103 HARD_APP .word INIT_TERM ; HARD_APP
1104 SLEEP_APP .word RXON ; SLEEP_APP
1106 COLD_APP .word COLD_TERM ; COLD_APP
1107 SOFT_APP .word INIT_SOFT_SD ; SOFT_APP
1108 HARD_APP .word INIT_HARD_SD ; HARD_APP
1109 SLEEP_APP .word RXON ; SLEEP_APP
1111 ; --------------------------------------;
1112 RST_DP .word ROMDICT ; program memory pointer
1113 ; --------------------------------------;
1114 RST_LASTVOC .word lastvoclink ; last vocabulary link
1115 ; --------------------------------------;
1116 RST_CURRENT .word BODYFORTH ; CURRENT word-set ptr
1117 ; --------------------------------------;
1118 RST_CONTEXT .word BODYFORTH ; CONTEXT space (8 CELLS)
1126 ; --------------------------------------;
1127 .word 0 ; NULL_WORD, always 0
1128 ; --------------------------------------;
1130 ; --------------------------;
1131 ; INFO_ORG + $5A : free use ;
1132 ; --------------------------;