OSDN Git Service

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