OSDN Git Service

Merge branch 'master' of https://framagit.org/Jean-Mi/FAST-FORTH
[fast-forth/master.git] / MSP430-FORTH / MSP_EXP430FR5994 / UTILITY.4TH
1
2
3 ; ------------------------------------------------------------------------------
4 ; UTILITY.4th for MSP_EXP430FR5994
5 ; ------------------------------------------------------------------------------
6
7 CODE ABORT_UTILITY
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_UTILITY
19
20 PWR_STATE
21
22 [DEFINED] {TOOLS} [IF]  {TOOLS} [THEN]
23
24 [UNDEFINED] {TOOLS} [IF]
25
26 MARKER {TOOLS} 
27
28 [UNDEFINED] EXIT [IF]
29 CODE EXIT
30 MOV @R1+,R13
31 MOV @R13+,R0
32
33 ENDCODE
34 [THEN]
35
36 [UNDEFINED] SWAP [IF]
37 CODE SWAP
38 MOV @R15,R10
39 MOV R14,0(R15)
40 MOV R10,R14
41 MOV @R13+,R0
42 ENDCODE
43 [THEN]
44
45 [UNDEFINED] U< [IF]
46 CODE U<
47 SUB @R15+,R14
48 0<> IF
49     MOV #-1,R14
50     U< IF
51         AND #0,R14
52     THEN
53 THEN
54 MOV @R13+,R0
55 ENDCODE
56 [THEN]
57
58 [UNDEFINED] IF [IF]
59 CODE IF
60 SUB #2,R15
61 MOV R14,0(R15)
62 MOV &$1DC6,R14
63 ADD #4,&$1DC6
64 MOV #$4034,0(R14)
65 ADD #2,R14
66 MOV @R13+,R0
67 ENDCODE IMMEDIATE
68
69 CODE THEN
70 MOV &$1DC6,0(R14)
71 MOV @R15+,R14
72 MOV @R13+,R0
73 ENDCODE IMMEDIATE
74 [THEN]
75
76 [UNDEFINED] BEGIN [IF]
77 CODE BEGIN
78     MOV #$4028,R0
79 ENDCODE IMMEDIATE
80
81 CODE UNTIL
82     MOV #$4034,R9
83 BW1 ADD #4,&$1DC6
84     MOV &$1DC6,R10
85     MOV R9,-4(R10)
86     MOV R14,-2(R10)
87     MOV @R15+,R14
88     MOV @R13+,R0
89 ENDCODE IMMEDIATE
90
91 CODE AGAIN
92 MOV #$403A,R9
93 GOTO BW1
94 ENDCODE IMMEDIATE
95
96 : WHILE
97 POSTPONE IF SWAP
98 ; IMMEDIATE
99
100 : REPEAT
101 POSTPONE AGAIN POSTPONE THEN
102 ; IMMEDIATE
103 [THEN]
104
105 [UNDEFINED] DO [IF]
106 CODE DO
107 SUB #2,R15
108 MOV R14,0(R15)
109 ADD #2,&$1DC6
110 MOV &$1DC6,R14
111 MOV #$403E,-2(R14)
112 ADD #2,&$1C00
113 MOV &$1C00,R10
114 MOV #0,0(R10)
115 MOV @R13+,R0
116 ENDCODE IMMEDIATE
117
118 CODE LOOP
119     MOV #$4060,R9
120 BW1 ADD #4,&$1DC6
121     MOV &$1DC6,R10
122     MOV R9,-4(R10)
123     MOV R14,-2(R10)
124 BEGIN
125     MOV &$1C00,R14
126     SUB #2,&$1C00
127     MOV @R14,R14
128     CMP #0,R14
129 0<> WHILE
130     MOV R10,0(R14)
131 REPEAT
132     MOV @R15+,R14
133     MOV @R13+,R0
134 ENDCODE IMMEDIATE
135
136 CODE +LOOP
137 MOV #$404E,R9
138 GOTO BW1
139 ENDCODE IMMEDIATE
140 [THEN]
141
142 [UNDEFINED] I [IF]
143 CODE I
144 SUB #2,R15
145 MOV R14,0(R15)
146 MOV @R1,R14
147 SUB 2(R1),R14
148 MOV @R13+,R0
149 ENDCODE
150 [THEN]
151
152 [UNDEFINED] DUP [IF]
153 CODE DUP
154 BW1 SUB #2,R15
155     MOV R14,0(R15)
156     MOV @R13+,R0
157 ENDCODE
158
159 CODE ?DUP
160 CMP #0,R14
161 0<> ?GOTO BW1
162 MOV @R13+,R0
163 ENDCODE
164 [THEN]
165
166 [UNDEFINED] SWAP [IF]
167 CODE SWAP
168 MOV @R15,R10
169 MOV R14,0(R15)
170 MOV R10,R14
171 MOV @R13+,R0
172 ENDCODE
173 [THEN]
174
175
176 [UNDEFINED] DROP [IF]
177 CODE DROP
178 MOV @R15+,R14
179 MOV @R13+,R0
180 ENDCODE
181 [THEN]
182
183 [UNDEFINED] >R [IF]
184 CODE >R
185 PUSH R14
186 MOV @R15+,R14
187 MOV @R13+,R0
188 ENDCODE
189 [THEN]
190
191 [UNDEFINED] R> [IF]
192 CODE R>
193 SUB #2,R15
194 MOV R14,0(R15)
195 MOV @R1+,R14
196 MOV @R13+,R0
197 ENDCODE
198 [THEN]
199
200 [UNDEFINED] SPACE [IF]
201 : SPACE
202 $20 EMIT ;
203 [THEN]
204
205 [UNDEFINED] SPACES [IF]
206 CODE SPACES
207 CMP #0,R14
208 0<> IF
209     PUSH R13
210     BEGIN
211         LO2HI
212         $20 EMIT
213         HI2LO
214         SUB #2,R13 
215         SUB #1,R14
216     0= UNTIL
217     MOV @R1+,R13
218 THEN
219 MOV @R15+,R14
220 MOV @R13+,R0              
221 ENDCODE
222 [THEN]
223
224 [UNDEFINED] 2DUP [IF]
225 CODE 2DUP
226 MOV R14,-2(R15)
227 MOV @R15,-4(R15)
228 SUB #4,R15
229 MOV @R13+,R0
230 ENDCODE
231 [THEN]
232
233 [UNDEFINED] 1+ [IF]
234 CODE 1+
235 ADD #1,R14
236 MOV @R13+,R0
237 ENDCODE
238 [THEN]
239
240 [UNDEFINED] + [IF]
241 CODE +
242 ADD @R15+,R14
243 MOV @R13+,R0
244 ENDCODE
245 [THEN]
246
247 [UNDEFINED] - [IF]
248 CODE -
249 SUB @R15+,R14
250 XOR #-1,R14
251 ADD #1,R14
252 MOV @R13+,R0
253 ENDCODE
254 [THEN]
255
256 [UNDEFINED] C@ [IF]
257 CODE C@
258 MOV.B @R14,R14
259 MOV @R13+,R0
260 ENDCODE
261 [THEN]
262
263 [UNDEFINED] AND [IF]
264 CODE AND
265 AND @R15+,R14
266 MOV @R13+,R0
267 ENDCODE
268 [THEN]
269
270 [UNDEFINED] ROT [IF]
271 CODE ROT
272 MOV @R15,R10
273 MOV R14,0(R15)
274 MOV 2(R15),R14
275 MOV R10,2(R15)
276 MOV @R13+,R0
277 ENDCODE
278 [THEN]
279
280 [UNDEFINED] MAX [IF]
281     CODE MAX
282         CMP @R15,R14
283         S< ?GOTO FW1
284 BW1     ADD #2,R15
285         MOV @R13+,R0
286     ENDCODE
287
288     CODE MIN
289         CMP @R15,R14
290         S< ?GOTO BW1
291 FW1     MOV @R15+,R14
292         MOV @R13+,R0
293     ENDCODE
294 [THEN]
295
296 [UNDEFINED] OVER [IF]
297 CODE OVER
298 MOV R14,-2(R15)
299 MOV @R15,R14
300 SUB #2,R15
301 MOV @R13+,R0
302 ENDCODE
303 [THEN]
304
305 [UNDEFINED] MOVE [IF]
306 CODE MOVE
307 MOV R14,R10
308 MOV @R15+,R8
309 MOV @R15+,R9
310 MOV @R15+,R14
311 CMP #0,R10
312 0<> IF
313     CMP R9,R8
314     0= ?GOTO FW1
315     U< IF
316         BEGIN
317             MOV.B @R9+,0(R8)
318             ADD #1,R8
319             SUB #1,R10
320         0= UNTIL
321         MOV @R13+,R0
322     ELSE
323         ADD R10,R8
324         ADD R10,R9
325         BEGIN
326             SUB #1,R9
327             SUB #1,R8
328             MOV.B @R9,0(R8)
329             SUB #1,R10
330         0= UNTIL
331     THEN
332 THEN
333 FW1 MOV @R13+,R0
334 ENDCODE
335 [THEN]
336
337 [UNDEFINED] .S [IF]
338 CODE .S
339     MOV     R14,-2(R15)
340     MOV     R15,R14
341     SUB     #2,R14
342     MOV     R14,-6(R15)
343     MOV     #$1C80,R14
344     SUB     #2,R14
345 BW1 MOV     R14,-4(R15)
346     SUB     #6,R15
347     SUB     @R15,R14
348     RRA     R14
349 COLON
350     $3C EMIT
351     .
352     $08 EMIT
353     $3E EMIT SPACE
354     2DUP 1+
355     U< IF 
356         DROP DROP EXIT
357     THEN
358     $1DDC @ >R
359     $10 $1DDC !
360     DO 
361         I @ U.
362     2 +LOOP
363     R> $1DDC !
364 ;
365 [THEN]
366
367 [UNDEFINED] .RS [IF]
368 CODE .RS
369     MOV     R14,-2(R15)
370     MOV     R1,-6(R15)
371     MOV     #$1CE0,R14
372     GOTO    BW1
373 ENDCODE
374 [THEN]
375
376 [UNDEFINED] ? [IF]
377 CODE ?          
378     MOV @R14,R14
379     MOV #U.,R0
380 ENDCODE
381 [THEN]
382
383 [UNDEFINED] WORDS [IF]
384 : WORDS
385 CR 
386 $1DCA @ $1CE4
387 $1810 @ DUP +
388 MOVE
389 BEGIN
390     0 DUP
391     $1810 @ DUP + 0
392         DO
393         DUP I $1CE4 + @
394             U< IF
395                 DROP DROP
396                 I DUP $1CE4 + @
397             THEN
398         2 +LOOP
399     ?DUP
400 WHILE
401     DUP
402     2 - @
403     ROT
404     $1CE4 +
405     !
406     DUP
407     COUNT $7F AND
408     TYPE
409     C@ $0F AND
410     $10 SWAP - SPACES
411 REPEAT
412 DROP
413 ;
414 [THEN]
415
416 [UNDEFINED] U.R [IF]
417 : U.R
418 >R  <# 0 # #S #>  
419 R> OVER - 0 MAX SPACES TYPE
420 ;
421 [THEN]
422
423 [UNDEFINED] DUMP [IF]
424 CODE DUMP
425 PUSH R13
426 PUSH &$1DDC
427 MOV #$10,&$1DDC
428 ADD @R15,R14
429 LO2HI
430   SWAP 2DUP
431   U. U.
432   $FFF0 AND
433   DO  CR
434     I 4 U.R SPACE
435       I 8 + I
436       DO I C@ 3 U.R LOOP
437       SPACE
438       I $10 + I 8 +
439       DO I C@ 3 U.R LOOP  
440       SPACE SPACE
441       I $10 + I
442       DO I C@ $7E MIN $20 MAX EMIT LOOP
443   $10 +LOOP
444   R> $1DDC !
445 ;
446 [THEN]
447
448 RST_HERE
449
450 [THEN]
451 ECHO