.OS .CODE .ADDR x8200 STACK_ADDR .UCONST xBFFF MAIN LC R6, STACK_ADDR ;; copy loop CONST R0, #0 LEA R1, ARRAY LEA R2, ARRAY2 C_LOOP CMPI R0, #32 BRz C_EXIT LDR R3, R1, #0 STR R3, R2, #0 ADD R0, R0, #1 ADD R1, R1, #1 ADD R2, R2, #1 JMP C_LOOP C_EXIT ;; selection sort CONST R0, #0 I_LOOP CMPI R0, #32 BRz I_EXIT CONST R2, xFF HICONST R2, xFF OR R1, R0, R0 J_LOOP CMPI R1, #32 BRz J_EXIT LEA R3, ARRAY2 ADD R3, R3, R1 LDR R3, R3, #0 CMPU R3, R2 BRzp J_SKIP OR R4, R1, R1 OR R2, R3, R3 J_SKIP ADD R1, R1, #1 JMP J_LOOP J_EXIT STR R0, R6, #-1 STR R4, R6, #-2 ADD R6, R6, #-2 JSR SWAP ADD R6, R6, #2 ADD R0, R0, #1 JMP I_LOOP I_EXIT JMP HALT .FALIGN SWAP ;; saving/restoring R7 was creating a PMC condition that was hard to debug STR R7, R6, #-1 STR R0, R6, #-2 STR R1, R6, #-3 STR R2, R6, #-4 STR R3, R6, #-5 LDR R0, R6, #0 LDR R1, R6, #1 LEA R2, ARRAY2 ADD R0, R2, R0 ADD R1, R2, R1 LDR R2, R0, #0 LDR R3, R1, #0 STR R3, R0, #0 STR R2, R1, #0 LDR R3, R6, #-5 LDR R2, R6, #-4 LDR R1, R6, #-3 LDR R0, R6, #-2 LDR R7, R6, #-1 JMPR R7 .DATA ARRAY .FILL #17767 .FILL #9158 .FILL #39017 .FILL #18547 .FILL #56401 .FILL #23807 .FILL #37962 .FILL #22764 .FILL #7977 .FILL #31949 .FILL #22714 .FILL #55211 .FILL #16882 .FILL #7931 .FILL #43491 .FILL #57670 .FILL #124 .FILL #25282 .FILL #2132 .FILL #10232 .FILL #8987 .FILL #59880 .FILL #52711 .FILL #17293 .FILL #3958 .FILL #9562 .FILL #63790 .FILL #29283 .FILL #49715 .FILL #55199 .FILL #50377 .FILL #1946 ARRAY2 .BLKW #32 .CODE .FALIGN HALT JMP HALT