OSDN Git Service

Merge branch 'master' of https://framagit.org/Jean-Mi/FAST-FORTH
[fast-forth/master.git] / MSP430-FORTH / MSP_EXP430FR5994 / RC5toLCD.4TH
1
2 ; -----------------------------------
3 ; RC5TOLCD.4th for MSP_EXP430FR5994
4 ; -----------------------------------
5
6
7 CODE ABORT_RC5TOLCD
8 SUB #2,R15
9 MOV R14,0(R15)
10 MOV &$180E,R14
11 SUB #308,R14
12 COLON
13 $0D EMIT
14 ABORT" FastForth V3.8 please!"
15 PWR_STATE
16 ;
17
18 ABORT_RC5TOLCD
19
20
21 [DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN]
22
23 MARKER {RC5TOLCD}
24 6 ALLOT
25
26
27
28 [UNDEFINED] CONSTANT [IF]
29 : CONSTANT 
30 CREATE
31 HI2LO
32 MOV R14,-2(R10)
33 MOV @R15+,R14
34 MOV @R1+,R13
35 MOV @R13+,R0
36 ENDCODE
37 [THEN]
38
39 [UNDEFINED] STATE [IF]
40 $1DBE CONSTANT STATE
41 [THEN]
42
43 [UNDEFINED] = [IF]
44 CODE =
45 SUB @R15+,R14
46 0<> IF
47     AND #0,R14
48     MOV @R13+,R0
49 THEN
50 XOR #-1,R14
51 MOV @R13+,R0
52 ENDCODE
53 [THEN]
54
55 [UNDEFINED] IF [IF]
56 CODE IF
57 SUB #2,R15
58 MOV R14,0(R15)
59 MOV &$1DC6,R14
60 ADD #4,&$1DC6
61 MOV #$4034,0(R14)
62 ADD #2,R14
63 MOV @R13+,R0
64 ENDCODE IMMEDIATE
65
66 CODE THEN
67 MOV &$1DC6,0(R14)
68 MOV @R15+,R14
69 MOV @R13+,R0
70 ENDCODE IMMEDIATE
71 [THEN]
72
73 [UNDEFINED] ELSE [IF]
74 CODE ELSE
75 ADD #4,&$1DC6
76 MOV &$1DC6,R10
77 MOV #$403A,-4(R10)
78 MOV R10,0(R14)
79 SUB #2,R10
80 MOV R10,R14
81 MOV @R13+,R0
82 ENDCODE IMMEDIATE
83 [THEN]
84
85 [UNDEFINED] IS [IF]
86
87 CODE DEFER!
88 MOV @R15+,2(R14)
89 MOV @R15+,R14
90 MOV @R13+,R0
91 ENDCODE
92
93
94 : IS
95 STATE @
96 IF  POSTPONE ['] POSTPONE DEFER! 
97 ELSE ' DEFER! 
98 THEN
99 ; IMMEDIATE
100 [THEN]
101
102 [UNDEFINED] >BODY [IF]
103 CODE >BODY
104 ADD #4,R14
105 MOV @R13+,R0
106 ENDCODE
107 [THEN]
108
109
110 CODE 20_US
111 BEGIN
112     BEGIN
113         BIT #1,&$3C0
114     0<> UNTIL
115     BIC #1,&$3C0
116     SUB #1,R14
117 U< UNTIL
118 MOV @R15+,R14
119 MOV @R13+,R0
120 ENDCODE
121
122 CODE TOP_LCD
123     BIS.B #4,&$243
124     BIT.B #1,&$241
125 0= IF
126     AND.B #$0F,R14
127     MOV.B R14,&$222
128     BIC.B #4,&$243
129     MOV @R15+,R14
130     MOV @R13+,R0
131 THEN
132     SUB #2,R15
133     MOV R14,0(R15)
134     BIC.B #4,&$243
135     MOV.B &$220,R14
136     AND.B #$0F,R14
137     MOV @R13+,R0
138 ENDCODE
139
140 CODE LCD_WRC
141     BIS.B #2,&$243
142 BW1 SUB #2,R15
143     MOV R14,0(R15)
144     RRUM #4,R14
145     BIC.B #1,&$243
146     BIS.B #$0F,&$224
147 COLON
148     TOP_LCD 2 20_US
149     TOP_LCD 2 20_US 
150 ;
151
152 CODE LCD_WRF
153     BIC.B #2,&$243
154     GOTO BW1
155 ENDCODE
156
157 : LCD_CLEAR $01 LCD_WRF 100 20_us ;
158 : LCD_HOME $02 LCD_WRF 100 20_us ;
159
160
161
162 HDNCODE WDT_INT
163 BIT.B #$20,&$240
164 0= IF
165     CMP #19,&$3D6
166     U< IF
167         ADD #1,&$3D6
168     THEN
169 ELSE
170     BIT.B #$40,&$240
171     0= IF
172         CMP #3,&$3D6
173         U>= IF
174            SUB #1,&$3D6
175         THEN
176     THEN
177 THEN
178 RETI
179 ENDCODE
180
181 HDNCODE RC5_INT
182 $1800 @ 16000 = [IF]
183     MOV #1,&$3A0
184 [THEN]
185 $1800 @ 24000 = [IF]
186     MOV #2,&$3A0
187 [THEN]
188 MOV #1778,R9
189 MOV #14,R10
190 BEGIN
191 MOV #%1011100100,&$380
192     RRUM    #1,R9
193     MOV     R9,R8
194     RRUM    #1,R8
195     ADD     R9,R8
196     BEGIN   CMP R8,&$390
197     U>= UNTIL
198     BIT.B   #4,&$200
199     ADDC    R11,R11
200     MOV.B   &$200,&$208
201     BIC.B   #4,&$20C
202     SUB     #1,R10
203 0<> WHILE
204     ADD R9,R8
205     BEGIN
206         MOV &$390,R9
207         CMP R8,R9
208         U>= IF
209         BIC #$30,&$380
210         GOTO FW1
211         THEN
212         BIT.B #4,&$20C
213     0<> UNTIL
214 REPEAT
215 BIC #$30,&$380
216 RLAM    #1,R11
217 MOV.B   R11,R9
218 RRUM    #2,R9
219 BIT     #$4000,R11
220 0= IF   BIS #$40,R9
221 THEN
222 RRUM    #3,R11
223 XOR     @R1,R11
224 BIT     #$400,R11
225 0= ?GOTO FW2
226 XOR #$400,0(R1)
227 SUB #8,R15
228 MOV R14,6(R15)
229 MOV &$1DDC,4(R15)
230 MOV #$10,&$1DDC
231 MOV R9,0(R15)
232 MOV #0,R14
233 LO2HI
234     LCD_CLEAR
235     <# # #S #36 HOLD #>
236     ['] LCD_WRC IS EMIT
237     TYPE
238     ['] EMIT >BODY IS EMIT
239 HI2LO
240 MOV @R15+,&$1DDC
241 MOV @R15+,R14
242 FW1 FW2
243     MOV @R1+,R2
244     BIC #%1111_1000,R2
245     MOV @R1+,R0
246 ENDCODE
247
248
249 HDNCODE STOP_R2L
250 CMP #$40AA,&{RC5TOLCD}+8
251 0<> IF
252     BIC.B #4,&$20A
253     BIC.B #4,&$20C
254     MOV #0,&$3C0
255     MOV #0,&$340
256     MOV #0,&$342
257     MOV #$40AA,&{RC5TOLCD}+8
258     MOV &{RC5TOLCD}+10,&WARM+2
259     MOV &{RC5TOLCD}+12,&$FFEA
260     MOV &{RC5TOLCD}+14,&$FFDE
261     MOV &{RC5TOLCD}+10,R0
262 THEN 
263 MOV @R1+,R0
264 ENDCODE
265
266 CODE STOP
267 BW1
268 CALL #STOP_R2L
269 COLON
270 ECHO
271 ." RC5toLCD is removed,"
272 ."  type START to restart"
273 ABORT" "
274 ;
275
276 HDNCODE INI_R2L
277 BIC #1,&$130
278 MOV &$1808,R14
279 CMP #$0E,R14
280 0<> IF
281     CMP #$0A,R14
282     U>= ?GOTO BW1
283 THEN
284 BIT.B #$20,&$240
285 0= ?GOTO BW1
286 MOV #0,&$1808
287 MOV #%10_1101_0100,&$3C0
288 $1800 @ 16000 = [IF]
289     MOV #1,&$3E0
290 [THEN]
291 $1800 @ 24000 = [IF]
292     MOV #2,&$3E0
293 [THEN]
294     MOV #19,&$3D2
295 MOV #%0110_0000,&$3C6
296     MOV #10,&$3D6
297     BIS.B #$20,&$204
298     BIS.B #$20,&$20A
299     BIS.B #7,&$245
300     BIC.B #7,&$247
301     BIS.B #$0F,&$224
302     BIC.B #$0F,&$226
303     BIS.B #4,&$20A
304     BIC.B #4,&$20C
305 MOV #%01_0001_0100,&$340
306     MOV ##3276,&$352
307     MOV #%10000,&$342
308 COLON
309     #1000 20_US
310     %011 TOP_LCD
311     #205 20_US
312     %011 TOP_LCD
313     #5 20_US
314     %011 TOP_LCD
315     #2 20_US
316     %010 TOP_LCD
317     #2 20_US
318     %00101000 LCD_WRF
319     %1000 LCD_WRF
320     LCD_CLEAR
321     %0110 LCD_WRF
322     %1100 LCD_WRF
323     LCD_CLEAR
324     ['] LCD_HOME IS CR
325     ['] LCD_WRC  IS EMIT
326     CR ." I love you"
327     ['] CR >BODY IS CR
328     ['] EMIT >BODY IS EMIT
329     ." RC5toLCD is running. Type STOP to quit"
330     ABORT" "
331 ;
332
333 CODE START
334 CMP #$40AA,&{RC5TOLCD}+8
335 0= IF
336     MOV #STOP_R2L,&{RC5TOLCD}+8
337     MOV &WARM+2,&{RC5TOLCD}+10
338     MOV #INI_R2L,&WARM+2
339     MOV &$FFEA,&{RC5TOLCD}+12
340     MOV #WDT_INT,&$FFEA
341     MOV &$FFDE,&{RC5TOLCD}+14
342     MOV #RC5_INT,&$FFDE
343     MOV #INI_R2L,R0
344 THEN
345 MOV @R13+,R0 
346 ENDCODE 
347
348 ECHO
349             ; downloading RC5toLCD.4th is done
350 RST_HERE    ; this app is protected against <reset>
351
352 START