OSDN Git Service

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