OSDN Git Service

a58e6c9a883e4f18e22cca0ea097f6ad3ae90734
[fast-forth/master.git] / MSP430-FORTH / SD_430FR5994 / MISC / TESTASM.4TH
1
2 ; -----------------------------------------------------------------------
3 ; TEST_ASM.4th for MSP_EXP430FR5994
4 ; -----------------------------------------------------------------------
5
6     CODE ABORT_TEST_ASM
7     SUB #2,R15
8     MOV R14,0(R15)
9     MOV &$180A,R14
10     SUB #400,R14
11     COLON
12     $0D EMIT
13     ABORT" FastForth V4.0 please!"
14     ;
15
16     ABORT_TEST_ASM
17
18 ECHO
19
20 ; ------------------------------------------------------------------
21 ; first we download the set of definitions we need (from CORE_ANS.4th for MSP_EXP430FR5994)
22 ; ------------------------------------------------------------------
23
24     [UNDEFINED] >R
25     [IF]
26     CODE >R
27     PUSH R14
28     MOV @R15+,R14
29     MOV @R13+,R0
30     ENDCODE
31     [THEN]
32
33     [UNDEFINED] R>
34     [IF]
35     CODE R>
36     MOV R7,R0
37     ENDCODE
38     [THEN]
39
40     [UNDEFINED] +
41     [IF]
42     CODE +
43     ADD @R15+,R14
44     MOV @R13+,R0
45     ENDCODE
46     [THEN]
47
48     [UNDEFINED] -
49     [IF]
50     CODE -
51     SUB @R15+,R14
52     XOR #-1,R14
53     ADD #1,R14
54     MOV @R13+,R0
55     ENDCODE
56     [THEN]
57
58     [UNDEFINED] SWAP
59     [IF]
60     CODE SWAP
61     MOV @R15,R10
62     MOV R14,0(R15)
63     MOV R10,R14
64     MOV @R13+,R0
65     ENDCODE
66     [THEN]
67
68     [UNDEFINED] MAX
69     [IF]
70
71     CODE MAX
72     CMP @R15,R14
73     S<  ?GOTO FW1
74 BW1 ADD #2,R15
75     MOV @R13+,R0
76     ENDCODE
77
78     CODE MIN
79     CMP @R15,R14
80     S<  ?GOTO BW1
81 FW1 MOV @R15+,R14
82     MOV @R13+,R0
83     ENDCODE
84
85     [THEN]
86
87     [UNDEFINED] C@
88     [IF]
89     CODE C@
90     MOV.B @R14,R14
91     MOV @R13+,R0
92     ENDCODE
93     [THEN]
94
95     [UNDEFINED] VARIABLE
96     [IF]
97     : VARIABLE
98     CREATE
99     HI2LO
100     MOV #$1287,-4(R10)
101     MOV @R1+,R13
102     MOV @R13+,R0
103     ENDCODE
104     [THEN]
105
106     [UNDEFINED] CONSTANT
107     [IF]
108     : CONSTANT
109     CREATE
110     HI2LO
111     MOV R14,-2(R10)
112     MOV @R15+,R14
113     MOV @R1+,R13
114     MOV @R13+,R0
115     ENDCODE
116     [THEN]
117
118     [UNDEFINED] >BODY
119     [IF]
120     CODE >BODY
121     ADD #4,R14
122     MOV @R13+,R0
123     ENDCODE
124     [THEN]
125
126     [UNDEFINED] SPACE
127     [IF]
128     : SPACE
129     $20 EMIT ;
130     [THEN]
131
132     [UNDEFINED] SPACES
133     [IF]
134     CODE SPACES
135     CMP #0,R14
136     0<> IF
137         PUSH R13
138         BEGIN
139             LO2HI
140             $20 EMIT
141             HI2LO
142             SUB #2,R13
143             SUB #1,R14
144         0= UNTIL
145         MOV @R1+,R13
146     THEN
147     MOV @R15+,R14
148     MOV @R13+,R0
149     ENDCODE
150     [THEN]
151
152     [UNDEFINED] DUP
153     [IF]
154     CODE DUP
155 BW1 SUB #2,R15
156     MOV R14,0(R15)
157     MOV @R13+,R0
158     ENDCODE
159
160     CODE ?DUP
161     CMP #0,R14
162     0<> ?GOTO BW1
163     MOV @R13+,R0
164     ENDCODE
165     [THEN]
166
167     [UNDEFINED] DROP
168     [IF]
169     CODE DROP
170     MOV @R15+,R14
171     MOV @R13+,R0
172     ENDCODE
173     [THEN]
174
175     [UNDEFINED] OVER
176     [IF]
177     CODE OVER
178     MOV R14,-2(R15)
179     MOV @R15,R14
180     SUB #2,R15
181     MOV @R13+,R0
182     ENDCODE
183     [THEN]
184
185     [UNDEFINED] IF
186     [IF]
187
188     CODE IF
189     SUB #2,R15
190     MOV R14,0(R15)
191     MOV &$1DC0,R14
192     ADD #4,&$1DC0
193     MOV #$4096,0(R14)
194     ADD #2,R14
195     MOV @R13+,R0
196     ENDCODE IMMEDIATE
197
198     CODE THEN
199     MOV &$1DC0,0(R14)
200     MOV @R15+,R14
201     MOV @R13+,R0
202     ENDCODE IMMEDIATE
203     [THEN]
204
205     [UNDEFINED] SWAP
206     [IF]
207     CODE SWAP
208     PUSH R14
209     MOV @R15,R14
210     MOV @R1+,0(R15)
211     MOV @R13+,R0
212     ENDCODE
213     [THEN]
214
215     [UNDEFINED] BEGIN
216     [IF]
217
218     CODE BEGIN
219     MOV #BEGIN,R0
220     ENDCODE IMMEDIATE
221
222     CODE UNTIL
223     MOV #$4096,R9
224 BW1 ADD #4,&$1DC0
225     MOV &$1DC0,R10
226     MOV R9,-4(R10)
227     MOV R14,-2(R10)
228     MOV @R15+,R14
229     MOV @R13+,R0
230     ENDCODE IMMEDIATE
231
232     CODE AGAIN
233     MOV #$409C,R9
234     GOTO BW1
235     ENDCODE IMMEDIATE
236
237     : WHILE
238     POSTPONE IF SWAP
239     ; IMMEDIATE
240
241     : REPEAT
242     POSTPONE AGAIN POSTPONE THEN
243     ; IMMEDIATE
244     [THEN]
245
246     [UNDEFINED] DO
247     [IF]
248
249     HDNCODE XDO
250     MOV #$8000,R9
251     SUB @R15+,R9
252     MOV R14,R8
253     ADD R9,R8
254     PUSHM #2,R9
255     MOV @R15+,R14
256     MOV @R13+,R0
257     ENDCODE
258
259     CODE DO
260     SUB #2,R15
261     MOV R14,0(R15)
262     ADD #2,&$1DC0
263     MOV &$1DC0,R14
264     MOV #XDO,-2(R14)
265     ADD #2,&$1C00
266     MOV &$1C00,R10
267     MOV #0,0(R10)
268     MOV @R13+,R0
269     ENDCODE IMMEDIATE
270
271     HDNCODE XLOOP
272     ADD #1,0(R1)
273 BW1 BIT #$100,R2
274     0= IF
275         MOV @R13,R13
276         MOV @R13+,R0
277     THEN
278     ADD #4,R1
279     ADD #2,R13
280     MOV @R13+,R0
281     ENDCODE
282
283     CODE LOOP
284     MOV #XLOOP,R9
285 BW2 ADD #4,&$1DC0
286     MOV &$1DC0,R10
287     MOV R9,-4(R10)
288     MOV R14,-2(R10)
289     BEGIN
290         MOV &$1C00,R14
291         SUB #2,&$1C00
292         MOV @R14,R14
293         CMP #0,R14
294     0<> WHILE
295         MOV R10,0(R14)
296     REPEAT
297     MOV @R15+,R14
298     MOV @R13+,R0
299     ENDCODE IMMEDIATE
300
301     HDNCODE XPLOO
302     ADD R14,0(R1)
303     MOV @R15+,R14
304     GOTO BW1
305     ENDCODE
306
307     CODE +LOOP
308     MOV #XPLOO,R9
309     GOTO BW2
310     ENDCODE IMMEDIATE
311     [THEN]
312
313     [UNDEFINED] I
314     [IF]
315     CODE I
316     SUB #2,R15
317     MOV R14,0(R15)
318     MOV @R1,R14
319     SUB 2(R1),R14
320     MOV @R13+,R0
321     ENDCODE
322     [THEN]
323
324     [UNDEFINED] BASE
325     [IF]
326     $1DB6  CONSTANT BASE
327     [THEN]
328
329     [UNDEFINED] CR
330     [IF]
331     CODE CR
332     MOV #$409E,R0
333     ENDCODE
334
335     :NONAME
336     $0D EMIT $0A EMIT
337     ; IS CR
338     [THEN]
339
340     [UNDEFINED] C,
341     [IF]
342     CODE C,
343     MOV &$1DC0,R10
344     MOV.B R14,0(R10)
345     ADD #1,&$1DC0
346     MOV @R15+,R14
347     MOV @R13+,R0
348     ENDCODE
349     [THEN]
350
351     [UNDEFINED] C@
352     [IF]
353     CODE C@
354     MOV.B @R14,R14
355     MOV @R13+,R0
356     ENDCODE
357     [THEN]
358
359 ; ------------------------------------------------------------------
360 ; then we download the set of definitions we need (from UTILITY.4th for MSP_EXP430FR5994)
361 ; ------------------------------------------------------------------
362
363     [UNDEFINED] U.R
364     [IF]
365     : U.R
366     >R  <# 0 # #S #>
367     R> OVER - 0 MAX SPACES TYPE
368     ;
369     [THEN]
370
371     [UNDEFINED] DUMP
372     [IF]
373     CODE DUMP
374     PUSH R13
375     PUSH &BASE
376     MOV #$10,&$1DB6
377     ADD @R15,R14
378     LO2HI
379     SWAP
380     DO  CR
381         I 4 U.R SPACE
382         I 8 + I
383         DO I C@ 3 U.R LOOP
384         SPACE
385         I $10 + I 8 +
386         DO I C@ 3 U.R LOOP
387         SPACE SPACE
388         I $10 + I
389         DO I C@ $7E MIN $20 MAX EMIT LOOP
390     $10 +LOOP
391     R> BASE !
392     ;
393     [THEN]
394
395 ; --------------------------
396 ; end of definitions we need
397 ; --------------------------
398
399 ECHO
400     CODE TESTPUSHM
401 BW1
402     MOV     #22222,R8
403     MOV     #3,R9
404     MOV     #2,R10
405     MOV     #1,R11
406     MOV     #0,R12
407
408     PUSHM   #4,R13
409     POPM    #4,R13
410     SUB     #10,R15
411     MOV     R14,8(R15)
412     MOV     R12,6(R15)
413     MOV     R11,4(R15)
414     MOV     R10,2(R15)
415     MOV     R9,0(R15)
416     MOV     R8,R14
417     RRAM    #1,R14
418     RLAM    #2,R14
419     RRCM    #1,R14
420     RRUM    #1,R14
421     COLON
422     space . . . . .
423     ;
424
425     TESTPUSHM  ; you should see 11111 3 2 1 0 -->
426
427     CODE TESTPOPM
428             GOTO BW1
429     ENDCODE
430
431     TESTPOPM  ; you should see 11111 3 2 1 0 -->
432
433
434     CODE TEST1
435
436     MOV &BASE,&BASE
437     CMP #%10,&BASE
438     0<> IF  MOV #2,&BASE
439     ELSE    MOV #$0A,&BASE
440     THEN
441     COLON
442     BASE @ U.
443     ;
444
445
446     : TEST2
447     BASE @ U.
448     HI2LO
449
450
451     CMP #2, &BASE
452     0<> IF  MOV #2, &BASE
453     ELSE    MOV #10,&BASE
454     THEN
455     MOV @R1+,R13
456     MOV @R13+,R0
457     ENDCODE
458
459     CODE TEST3
460     CMP #2, &BASE
461     0<> IF  MOV #2, &BASE
462     ELSE    MOV #10,&BASE
463     THEN    COLON
464     BASE @  U.
465     ;
466
467
468 : TEST5
469             SPACE
470             HI2LO
471             SUB #2,R15
472             MOV R14,0(R15)
473             MOV #%1010,R14
474 BEGIN       SUB #$0001,R14
475             LO2HI
476
477             DUP U.
478             HI2LO
479             CMP #0,R14
480 0= UNTIL    MOV @R15+,R14
481             MOV @R1+,R13
482             MOV @R13+,R0
483 ENDCODE
484
485 TEST5  ; you should see :  9 8 7 6 5 4 3 2 1 0 -->
486
487
488 : BYTES_TABLE_IDX
489 CREATE
490 0 DO I C,
491 LOOP
492 DOES>
493 +
494 ;
495
496 8 BYTES_TABLE_IDX BYTES_TABLE
497
498 2 BYTES_TABLE C@ . ; you should see 2 -->
499
500
501 VARIABLE BYTES_TABLE1
502
503 $0201 BYTES_TABLE1 !
504
505 CODE IDX_TEST1
506     MOV.B   BYTES_TABLE1(R14),R14
507 COLON
508     U.
509 ;
510
511 0 IDX_TEST1     ; you should see 1 -->
512
513 CODE TEST6
514             MOV 0(R15),0(R15)
515             MOV @R13+,R0
516 ENDCODE
517
518
519 1 TEST6 .       ; you should see 1 -->
520
521
522
523
524
525 CREATE TABLE0
526 0 C,
527 1 C,
528 2 C,
529 3 C,
530
531
532 CREATE TABLE10
533 $10 C,
534 $11 C,
535 $12 C,
536 $13 C,
537
538
539
540 CREATE TABLE20
541 $20 C,
542 $21 C,
543 $22 C,
544 $23 C,
545
546
547 CREATE TABLE
548
549
550 TABLE 2 - CONSTANT PFA_TABLE
551
552
553 CODE REDIRECT       ; <table> --    redirects TABLE to argument <table>
554 MOV R14,&PFA_TABLE
555 MOV @R15+,R14
556 MOV @R13+,R0
557 ENDCODE
558
559
560 CODE REDIRECT0      ; --            redirects TABLE to TABLE0
561 MOV #TABLE0,&PFA_TABLE
562 MOV @R13+,R0
563 ENDCODE
564
565
566 CODE REDIRECT10     ; --            redirects TABLE to TABLE10
567 MOV #TABLE10,&PFA_TABLE
568 MOV @R13+,R0
569 ENDCODE
570
571
572 CODE REDIRECT20     ; --            redirects TABLE to TABLE20
573 MOV #TABLE20,&PFA_TABLE
574 MOV @R13+,R0
575 ENDCODE
576
577
578 ' TABLE0 10 DUMP
579
580 ' TABLE10 10 DUMP
581
582 ' TABLE20 10 DUMP
583
584
585 TABLE0 REDIRECT TABLE 10 DUMP
586
587 TABLE10 REDIRECT TABLE 10 DUMP
588
589 TABLE20 REDIRECT TABLE 10 DUMP
590
591
592 REDIRECT0 TABLE 10 DUMP
593
594 REDIRECT10 TABLE 10 DUMP
595
596 REDIRECT20 TABLE 10 DUMP
597
598
599 TABLE0 PFA_TABLE ! TABLE 10 DUMP
600
601 TABLE10 PFA_TABLE ! TABLE 10 DUMP
602
603 TABLE20 PFA_TABLE ! TABLE 10 DUMP
604
605
606
607
608 ; -----------------------------------------------------------------------
609 ; create a primary DEFERred assembly word
610 ; -----------------------------------------------------------------------
611
612     CODE TRUC
613     MOV #$409E,R0
614     ENDCODE
615
616     CODENNM
617     SUB #2,R15
618     MOV R14,0(R15)
619     MOV @R13+,R0
620     ENDCODE     ; leaves its execution address (CFA) on stack
621
622 DUP .           ; see it --> 
623
624 IS TRUC         ; TRUC becomes a primary DEFERred word
625                 ; with its default action (DUP) located at its BODY addresse.
626
627 TRUC .          ; display R14 value -->
628
629 ' DROP IS TRUC  ; TRUC is redirected to DROP
630
631 ; TRUC          ; The generated error displays stack empty! in reverse video, removes the TRUC definition and restarts the interpretation after the end of the file. And as you see, FastForth is able to display long lines, interesting, doesn't it? -->
632
633 ' TRUC >BODY IS TRUC    ; TRUC is reinitialized with its default action
634
635 TRUC .          ; display R14 value -->
636