OSDN Git Service

V300 beautified
[fast-forth/master.git] / MSP430-FORTH / TESTXASM.F
1
2 ; -----------------------------------------------------------------------
3 ; TESTXASM.f
4 ; -----------------------------------------------------------------------
5 \
6 \ TARGET SELECTION
7 \ MSP_EXP430FR5969    MSP_EXP430FR5994    MSP_EXP430FR6989
8 \
9 \ PUSHM order : PSP,TOS, IP,  S,  T,  W,  X,  Y, rEXIT,rDOVAR,rDOCON, rDODOES, R3, SR,RSP, PC
10 \ PUSHM order : R15,R14,R13,R12,R11,R10, R9, R8,  R7  ,  R6  ,  R5  ,   R4   , R3, R2, R1, R0
11 \
12 \ example : PUSHM #6,IP pushes IP,S,T,W,X,Y registers to return stack
13 \
14 \ POPM  order :  PC,RSP, SR, R3, rDODOES,rDOCON,rDOVAR,rEXIT,  Y,  X,  W,  T,  S, IP,TOS,PSP
15 \ POPM  order :  R0, R1, R2, R3,   R4   ,  R5  ,  R6  ,  R7 , R8, R9,R10,R11,R12,R13,R14,R15
16 \
17 \ example : POPM #6,IP   pop Y,X,W,T,S,IP registers from return stack
18 \
19 \ ASSEMBLER conditionnal usage after IF UNTIL WHILE : S< S>= U< U>= 0= 0<> 0>=
20 \ ASSEMBLER conditionnal usage before ?JMP ?GOTO    : S< S>= U< U>= 0= 0<> 0< 
21 \
22 \ FORTH conditionnal    : 0= 0< = < > U<
23
24 ECHO
25
26 PWR_STATE
27
28 ; --------------------------------------------------------------------------------
29 ; DTCforthMSP430FR5xxx ASSEMBLER, OPCODES IV : Adda|Cmpa|Mova|Suba (without extended word)
30 ; --------------------------------------------------------------------------------
31 ; absolute and immediate instructions must be written as $x.xxxx  (DOUBLE numbers)
32 ; indexed instructions must be written as $.xxxx(REG) (DOUBLE numbers)
33 ; --------------------------------------------------------------------------------
34
35 HERE
36 CODE TEST
37 MOVA @W,T
38 ENDCODE
39 HERE OVER - DUMP
40 ; you should see: 45 53 54 52>0B 0A<04 44 55 4D 50 4F
41 PWR_STATE
42
43 HERE
44 CODE TEST
45 MOVA @T+,W
46 ENDCODE
47 HERE OVER - DUMP
48 ; you should see: 45 53 54 52>1A 0B<04 44 55 4D 50 4F
49 PWR_STATE
50
51 HERE
52 CODE TEST
53 MOVA &$1.2345,T
54 ENDCODE
55 HERE OVER - DUMP
56 ; you should see: 45 53 54 52>2B 01 45 23<04 44 55 4D
57 PWR_STATE
58
59 HERE
60 CODE TEST
61 MOVA $.1234(W),S
62 ENDCODE
63 HERE OVER - DUMP
64 ; you should see: 45 53 54 52>3C 0A 34 12<04 44 55 4D
65 PWR_STATE
66
67 HERE
68 CODE TEST
69 MOVA T,&$1.2345
70 ENDCODE
71 HERE OVER - DUMP
72 ; you should see: 45 53 54 52>61 0B 45 23<04 44 55 4D
73 PWR_STATE
74
75 HERE
76 CODE TEST
77 MOVA S,$.1234(W)
78 ENDCODE
79 HERE OVER - DUMP
80 ; you should see: 45 53 54 52>7A 0C 34 12<04 44 55 4D
81 PWR_STATE
82
83 HERE
84 CODE TEST
85 MOVA #$0.1,S
86 ENDCODE
87 HERE OVER - DUMP
88 ; you should see: 45 53 54 52>8C 00 01 00<04 44 55 4D
89 PWR_STATE
90
91 HERE
92 CODE TEST
93 CMPA #$1.2345,S
94 ENDCODE
95 HERE OVER - DUMP
96 ; you should see: 45 53 54 52>9C 01 45 23<04 44 55 4D
97 PWR_STATE
98
99 HERE
100 CODE TEST
101 ADDA #$2.3456,S
102 ENDCODE
103 HERE OVER - DUMP
104 ; you should see: 45 53 54 52>AC 02 56 34<04 44 55 4D
105 PWR_STATE
106
107 HERE
108 CODE TEST
109 SUBA #$3.4567,S
110 ENDCODE
111 HERE OVER - DUMP
112 ; you should see: 45 53 54 52>BC 03 67 45<04 44 55 4D
113 PWR_STATE
114
115
116
117 HERE
118 CODE TEST
119 MOVA W,T
120 ENDCODE
121 HERE OVER - DUMP
122 ; you should see: 45 53 54 52>CB 0A<04 44 55 4D 50 4F
123 PWR_STATE
124
125 HERE
126 CODE TEST
127 CMPA W,T
128 ENDCODE
129 HERE OVER - DUMP
130 ; you should see: 45 53 54 52>DB 0A<04 44 55 4D 50 4F
131 PWR_STATE
132
133 HERE
134 CODE TEST
135 ADDA W,T
136 ENDCODE
137 HERE OVER - DUMP
138 ; you should see: 45 53 54 52>EB 0A<04 44 55 4D 50 4F
139 PWR_STATE
140
141 HERE
142 CODE TEST
143 SUBA W,T
144 ENDCODE
145 HERE OVER - DUMP
146 ; you should see: 45 53 54 52>FB 0A<04 44 55 4D 50 4F
147 PWR_STATE
148
149 ; --------------------------------------------------------------------------------
150 ; DTCforthMSP430FR5xxx ASSEMBLER: CALLA (without extended word)
151 ; --------------------------------------------------------------------------------
152 ; absolute and immediate instructions must be written as $x.xxxx  (DOUBLE numbers)
153 ; indexed instructions must be written as $.xxxx(REG) (DOUBLE numbers)
154 ; --------------------------------------------------------------------------------
155
156 HERE
157 CODE TEST
158 CALLA W
159 ENDCODE
160 HERE OVER - DUMP
161 ; you should see: 45 53 54 52>4A 13<04 44 55 4D 50 4F
162 PWR_STATE
163
164 HERE
165 CODE TEST
166 CALLA $.3456(W)
167 ENDCODE
168 HERE OVER - DUMP
169 ; you should see: 45 53 54 52>5A 13 56 34<04 44 55 4D
170 PWR_STATE
171
172 HERE
173 CODE TEST
174 CALLA @W
175 ENDCODE
176 HERE OVER - DUMP
177 ; you should see: 45 53 54 52>6A 13<04 44 55 4D 50 4F
178 PWR_STATE
179
180 HERE
181 CODE TEST
182 CALLA @W+
183 ENDCODE
184 HERE OVER - DUMP
185 ; you should see: 45 53 54 52>7A 13<04 44 55 4D 50 4F
186 PWR_STATE
187
188 HERE
189 CODE TEST
190 CALLA &$2.3456
191 ENDCODE
192 HERE OVER - DUMP
193 ; you should see: 45 53 54 52>82 13 56 34<04 44 55 4D
194 PWR_STATE
195
196 HERE
197 CODE TEST
198 CALLA #$5.6789
199 ENDCODE
200 HERE OVER - DUMP
201 ; you should see: 45 53 54 52>B5 13 89 67<04 44 55 4D
202 PWR_STATE
203
204 ; --------------------------------------------------------------------------------
205 ; DTCforthMSP430FR5xxx ASSEMBLER, OPCODES V extended double operand
206 ; --------------------------------------------------------------------------------
207 ; absolute and immediate instructions must be written as $x.xxxx  (DOUBLE numbers)
208 ; indexed instructions must be written as $.xxxx(REG) (DOUBLE numbers)
209 ; --------------------------------------------------------------------------------
210
211 HERE
212 CODE TEST
213 MOV S,T
214 MOVX S,T
215 ENDCODE
216 HERE OVER - DUMP
217 ; you should see: 45 53 54 52>0B 4C 40 18 0B 4C<04 44
218 PWR_STATE
219
220 HERE
221 CODE TEST
222 ADD T,T
223 ADDX.A T,T
224 ENDCODE
225 HERE OVER - DUMP
226 ; you should see: 45 53 54 52>0B 5B 00 18 4B 5B<04 44
227 PWR_STATE
228
229 HERE
230 CODE TEST
231 ADD T,T
232 RPT X
233 ADDX.A T,T
234 ENDCODE
235 HERE OVER - DUMP
236 ; you should see: 45 53 54 52>0B 5B 89 18 4B 5B<04 44
237 PWR_STATE
238
239 HERE
240 CODE TEST
241 ADD T,T
242 RPT #8
243 ADDX.A T,T
244 ENDCODE
245 HERE OVER - DUMP
246 ; you should see: 45 53 54 52>0B 5B 07 18 4B 5B<04 44
247 PWR_STATE
248
249 HERE
250 CODE TEST
251 ADDC #$9876,T
252 ADDCX.A #$5.9876,T
253 ENDCODE
254 HERE OVER - DUMP
255 ; you should see: 45 53 54 52>3B 60 76 98 80 1A 7B 60
256 ;     76 98<04 44 55 4D
257 PWR_STATE
258
259 HERE
260 CODE TEST
261 ADDC &$9876,T
262 ADDCX.A &$5.9876,T
263 ENDCODE
264 HERE OVER - DUMP
265 ; you should see: 45 53 54 52>1B 62 76 98 80 1A 5B 62
266 ;     76 98<04 44 55 4D
267 PWR_STATE
268
269 HERE
270 CODE TEST
271 XOR.B $5432(S),T
272 XORX.B $6.5432(S),T
273 ENDCODE
274 HERE OVER - DUMP
275 ; you should see: 45 53 54 52>5B EC 32 54 46 18 5B EC
276 ;     32 54<04 44 55 4D
277 PWR_STATE
278
279 HERE
280 CODE TEST
281 SUBC T,$5432(S)
282 SUBCX.A T,$6.5432(S)
283 ENDCODE
284 HERE OVER - DUMP
285 ; you should see: 45 53 54 52>8C 7B 32 54 06 18 CC 7B
286 ;     32 54<04 44 55 4D
287 PWR_STATE
288
289 HERE
290 CODE TEST
291 XOR.B T,$5432(S)
292 XORX.B T,$6.5432(S)
293 ENDCODE
294 HERE OVER - DUMP
295 ; you should see: 45 53 54 52>CC EB 32 54 46 18 CC EB
296 ;     32 54<04 44 55 4D
297 PWR_STATE
298
299 ; --------------------------------------------------------------------------------
300 ; DTCforthMSP430FR5xxx ASSEMBLER, OPCODES VI extended single operand (take count of RPT)
301 ; --------------------------------------------------------------------------------
302 ; absolute and immediate instructions must be written as $x.xxxx  (DOUBLE numbers)
303 ; indexed instructions must be written as $.xxxx(REG) (DOUBLE numbers)
304 ; --------------------------------------------------------------------------------
305
306 HERE
307 CODE TEST
308 RRA X
309 RRAX X
310 ENDCODE
311 HERE OVER - DUMP
312 ; you should see: 45 53 54 52>09 11 40 18 09 11<04 44
313 PWR_STATE
314
315 HERE
316 CODE TEST
317 RRC @X
318 RRCX.A @X
319 ENDCODE
320 HERE OVER - DUMP
321 ; you should see: 45 53 54 52>29 10 00 18 69 10<04 44
322 PWR_STATE
323
324 HERE
325 CODE TEST
326 RRC @S
327 RRCX.A @S
328 ENDCODE
329 HERE OVER - DUMP
330 ; you should see: 45 53 54 52>2C 10 00 18 6C 10<04 44
331 PWR_STATE
332
333 HERE
334 CODE TEST
335 RRC @X+
336 RRUX.A @X+
337 ENDCODE
338 HERE OVER - DUMP
339 ; you should see: 45 53 54 52>39 10 00 19 79 10<04 44
340 PWR_STATE
341
342 HERE
343 CODE TEST
344 RRC T
345 RPT #9
346 RRUX.A T
347 ENDCODE
348 HERE OVER - DUMP
349 ; you should see: 45 53 54 52>0B 10 08 19 4B 10<04 44
350 PWR_STATE
351
352 HERE
353 CODE TEST
354 RRC T
355 RPT X
356 RRUX.A T
357 ENDCODE
358 HERE OVER - DUMP
359 ; you should see: 45 53 54 52>0B 10 89 19 4B 10<04 44
360 PWR_STATE
361
362 HERE
363 CODE TEST
364 PUSH #$2345
365 PUSHX #$0.2345
366 ENDCODE
367 HERE OVER - DUMP
368 ; you should see: 45 53 54 52>30 12 45 23 40 18 30 12
369 ;     45 23<04 44 55 4D
370 PWR_STATE
371
372 HERE
373 CODE TEST
374 PUSH &$5678
375 PUSHX.A &$4.5678
376 ENDCODE
377 HERE OVER - DUMP
378 ; you should see: 45 53 54 52>12 12 78 56 00 1A 52 12
379 ;     78 56<04 44 55 4D
380 PWR_STATE
381
382 HERE
383 CODE TEST
384 PUSH.B &$33
385 PUSHX.B &$.33
386 ENDCODE
387 HERE OVER - DUMP
388 ; you should see: 45 53 54 52>52 12 33 00 40 18 52 12
389 ;     33 00<04 44 55 4D
390 PWR_STATE
391
392 HERE
393 CODE TEST
394 PUSH.B $3344(T)
395 PUSHX.B $.3344(T)
396 ENDCODE
397 HERE OVER - DUMP
398 ; you should see: 45 53 54 52>5B 12 44 33 40 18 5B 12
399 ;     44 33<04 44 55 4D
400 PWR_STATE
401
402
403
404 : %.
405 BASE @ %10 BASE ! SWAP 8 EMIT . BASE !
406 ;
407
408 : %U.
409 BASE @ %10 BASE ! SWAP 8 EMIT U. BASE ! ;
410
411 PWR_HERE
412
413
414 ; ================
415 ; RRUX test
416 ; ================
417
418
419 CODE RRUX_T
420 \ MOVX #$F0F0,Y \ don't forget decimal point with MOVX instruction !
421 MOVX #$.F0F0,Y
422 RRUX Y
423 SUB #2,PSP
424 MOV TOS,0(PSP)
425 MOV Y,TOS
426 JMP %.
427 ENDCODE
428
429 RRUX_T ; you should see %111100001111000 --> %
430
431 PWR_STATE
432
433 ; ================
434 ; RRUX repeat test
435 ; ================
436
437
438 CODE RRUX_T
439 MOV #$F0F0,Y
440 RPT #0
441 RRUX Y
442 SUB #2,PSP
443 MOV TOS,0(PSP)
444 MOV Y,TOS
445 JMP %.
446 ENDCODE
447
448 RRUX_T ; you should see %111100001111000 --> %
449
450 PWR_STATE
451
452 CODE RRUX_T
453 MOV #$F0F0,Y
454 RPT #3
455 RRUX Y
456 SUB #2,PSP
457 MOV TOS,0(PSP)
458 MOV Y,TOS
459 JMP %.
460 ENDCODE
461
462 RRUX_T ; you should see %111100001111 --> %
463
464 PWR_STATE
465
466 CODE RRUX_T
467 MOV #$F0F0,Y
468 RPT #7
469 RRUX Y
470 SUB #2,PSP
471 MOV TOS,0(PSP)
472 MOV Y,TOS
473 JMP %.
474 ENDCODE
475
476 RRUX_T ; you should see %11110000 --> %
477
478 PWR_STATE
479
480
481 ; ================
482 ; RRCX test
483 ; ================
484
485
486 CODE RRCX_T
487 MOV #$8000,Y
488 BIC #C,SR
489 RRCX Y
490 SUB #2,PSP
491 MOV TOS,0(PSP)
492 MOV Y,TOS
493 JMP %U.
494 ENDCODE
495
496 RRCX_T ; you should see %100000000000000 --> %
497
498 PWR_STATE
499
500 ; ================
501 ; RRCX repeat test
502 ; ================
503
504 CODE RRCX_T
505 MOV #$8000,Y
506 BIC #C,SR
507 RPT #0
508 RRCX Y
509 SUB #2,PSP
510 MOV TOS,0(PSP)
511 MOV Y,TOS
512 JMP %U.
513 ENDCODE
514
515 RRCX_T ; you should see %100000000000000 --> %
516
517 PWR_STATE
518
519 CODE RRCX_T
520 MOV #$8000,Y
521 BIC #C,SR
522 RPT #7
523 RRCX Y
524 SUB #2,PSP
525 MOV TOS,0(PSP)
526 MOV Y,TOS
527 JMP %U.
528 ENDCODE
529
530 RRCX_T ; you should see %10000000 --> %
531
532 PWR_STATE
533
534 ; ================
535 ; RRAX test
536 ; ================
537
538
539 CODE RRAX_T
540 MOV #$8000,Y
541 RRAX Y
542 SUB #2,PSP
543 MOV TOS,0(PSP)
544 MOV Y,TOS
545 JMP %.
546 ENDCODE
547
548 RRAX_T ; you should see %-100000000000000 --> %
549
550 PWR_STATE
551
552 ; ================
553 ; RRAX repeat test
554 ; ================
555
556
557 CODE RRAX_T
558 MOV #$8000,Y
559 RPT #0
560 RRAX Y
561 SUB #2,PSP
562 MOV TOS,0(PSP)
563 MOV Y,TOS
564 JMP %.
565 ENDCODE
566
567 RRAX_T ; you should see %-100000000000000 --> %
568
569 PWR_STATE
570
571 CODE RRAX_T
572 MOV #$8000,Y
573 RPT #1
574 RRAX Y
575 SUB #2,PSP
576 MOV TOS,0(PSP)
577 MOV Y,TOS
578 JMP %.
579 ENDCODE
580
581 RRAX_T ; you should see %-10000000000000 --> %
582
583 PWR_STATE
584
585 CODE RRAX_T
586 MOV #$8000,Y
587 RPT #2
588 RRAX Y
589 SUB #2,PSP
590 MOV TOS,0(PSP)
591 MOV Y,TOS
592 JMP %.
593 ENDCODE
594
595 RRAX_T ; you should see %-1000000000000 --> %
596
597 PWR_STATE
598
599 CODE RRAX_T
600 MOV #$8000,Y
601 RPT #6
602 RRAX Y
603 SUB #2,PSP
604 MOV TOS,0(PSP)
605 MOV Y,TOS
606 JMP %.
607 ENDCODE
608
609 RRAX_T ; you should see %-100000000 --> %
610
611 PWR_STATE
612
613 ; ================
614 ; RLAX test
615 ; ================
616
617
618 CODE RLAX_T
619 MOV #-1,Y
620 ADDX Y,Y
621 SUB #2,PSP
622 MOV TOS,0(PSP)
623 MOV Y,TOS
624 MOV #.,PC   \ BRANCH to .
625 ENDCODE
626
627 RLAX_T ; you should see -2 -->
628
629 PWR_STATE
630
631 ; ================
632 ; RLAX repeat test
633 ; ================
634
635
636 CODE RLAX_T
637 MOV #-1,Y
638 RPT #0
639 ADDX Y,Y
640 SUB #2,PSP
641 MOV TOS,0(PSP)
642 MOV Y,TOS
643 MOV #.,PC   \ BRANCH to .
644 ENDCODE
645
646 RLAX_T ; you should see -2 -->
647
648 PWR_STATE
649
650 CODE RLAX_T
651 MOV #-1,Y
652 RPT #1
653 ADDX Y,Y
654 SUB #2,PSP
655 MOV TOS,0(PSP)
656 MOV Y,TOS
657 MOV #.,PC   \ BRANCH to .
658 ENDCODE
659
660 RLAX_T ; you should see -4 -->
661
662 PWR_STATE
663
664 CODE RLAX_T
665 MOV #-1,Y
666 RPT #2
667 ADDX Y,Y
668 SUB #2,PSP
669 MOV TOS,0(PSP)
670 MOV Y,TOS
671 MOV #.,PC   \ BRANCH to .
672 ENDCODE
673
674 RLAX_T ; you should see -8 -->
675
676 PWR_STATE
677
678 CODE RLAX_T
679 MOV #-1,Y
680 RPT #7
681 ADDX Y,Y
682 SUB #2,PSP
683 MOV TOS,0(PSP)
684 MOV Y,TOS
685 MOV #.,PC   \ BRANCH to .
686 ENDCODE
687
688 RLAX_T ; you should see -256 -->
689
690 PWR_STATE
691
692 ; ================
693 ; ADDX test
694 ; ================
695
696
697 CODE ADDX_T
698 MOV #0,Y
699 MOV #-1,X
700 ADDX X,Y
701 SUB #2,PSP
702 MOV TOS,0(PSP)
703 MOV Y,TOS
704 MOV #.,PC   \ BRANCH to .
705 ENDCODE
706
707 ADDX_T ; you should see -1 -->
708
709 PWR_STATE
710
711 ; ================
712 ; ADDX repeat test
713 ; ================
714
715
716 CODE ADDX_T
717 MOV #0,Y
718 MOV #-1,X
719 RPT #0
720 ADDX X,Y
721 SUB #2,PSP
722 MOV TOS,0(PSP)
723 MOV Y,TOS
724 MOV #.,PC   \ BRANCH to .
725 ENDCODE
726
727 ADDX_T ; you should see -1 -->
728
729 PWR_STATE
730
731 CODE ADDX_T
732 MOV #0,Y
733 MOV #-1,X
734 RPT #1
735 ADDX X,Y
736 SUB #2,PSP
737 MOV TOS,0(PSP)
738 MOV Y,TOS
739 MOV #.,PC   \ BRANCH to .
740 ENDCODE
741
742 ADDX_T ; you should see -2 -->
743
744 PWR_STATE
745
746 CODE ADDX_T
747 MOV #0,Y
748 MOV #-1,X
749 RPT #7
750 ADDX X,Y
751 SUB #2,PSP
752 MOV TOS,0(PSP)
753 MOV Y,TOS
754 MOV #.,PC   \ BRANCH to .
755 ENDCODE
756
757 ADDX_T ; you should see -8 -->
758
759 PWR_STATE
760
761
762 ; ================
763 ; SUBX test
764 ; ================
765
766
767 CODE SUBX_T
768 MOV #0,Y
769 MOV #-1,X
770 SUBX X,Y
771 SUB #2,PSP
772 MOV TOS,0(PSP)
773 MOV Y,TOS
774 MOV #.,PC   \ BRANCH to .
775 ENDCODE
776
777 SUBX_T ; you should see 1 -->
778
779 PWR_STATE
780
781 ; ================
782 ; SUBX repeat test
783 ; ================
784
785
786 CODE SUBX_T
787 MOV #0,Y
788 MOV #-1,X
789 RPT #0
790 SUBX X,Y
791 SUB #2,PSP
792 MOV TOS,0(PSP)
793 MOV Y,TOS
794 MOV #.,PC   \ BRANCH to .
795 ENDCODE
796
797 SUBX_T ; you should see 1 -->
798
799 PWR_STATE
800
801 CODE SUBX_T
802 MOV #0,Y
803 MOV #-1,X
804 RPT #1
805 SUBX X,Y
806 SUB #2,PSP
807 MOV TOS,0(PSP)
808 MOV Y,TOS
809 MOV #.,PC   \ BRANCH to .
810 ENDCODE
811
812 SUBX_T ; you should see 2 -->
813
814 PWR_STATE
815
816 CODE SUBX_T
817 MOV #0,Y
818 MOV #-1,X
819 RPT #7
820 SUBX X,Y
821 SUB #2,PSP
822 MOV TOS,0(PSP)
823 MOV Y,TOS
824 MOV #.,PC   \ BRANCH to .
825 ENDCODE
826
827 SUBX_T ; you should see 8 -->
828
829 PWR_STATE
830
831 CODE SUBX_T     \ W register = R10
832 MOV #15,W       \ RPT [W] times, modulo 16 <--> RPT #15
833 MOV #0,Y
834 MOV #-1,X
835 RPT W
836 SUBX X,Y
837 SUB #2,PSP
838 MOV TOS,0(PSP)
839 MOV Y,TOS
840 MOV #.,PC   \ BRANCH to .
841 ENDCODE
842
843 SUBX_T ; you should see 16 -->
844
845 PWR_STATE
846
847 CODE SUBX_T
848 MOV #32,W       \ RPT [W] times, modulo 16 <--> RPT #0
849 MOV #0,Y
850 MOV #-1,X
851 RPT W
852 SUBX X,Y
853 SUB #2,PSP
854 MOV TOS,0(PSP)
855 MOV Y,TOS
856 MOV #.,PC   \ BRANCH to .
857 ENDCODE
858
859 SUBX_T ; you should see 1 -->
860
861 PWR_STATE
862
863 CODE SUBX_T
864 MOV #33,W       \ RPT [W] times, modulo 16 <--> RPT #1
865 MOV #0,Y
866 MOV #-1,X
867 RPT W
868 SUBX X,Y
869 SUB #2,PSP
870 MOV TOS,0(PSP)
871 MOV Y,TOS
872 MOV #.,PC   \ BRANCH to .
873 ENDCODE
874
875 SUBX_T ; you should see 2 -->
876