Q2 Computer - Sort Example

An implementation of bubble sort.

; Sort x0 words starting at x1
; Destroys x0, x1, x2, x3, x4, x5, x6, x7 (assumed to be in the zero page).
sort:
  sta   =x7         ; Return address in =x7
  lea   =0          ; Outer loop: x2 = 0 .. x0
sort_outer:
  sta   =x2
  nor   #0
  add   =x0
  jfc   @=x7        ; x2 >= x0 - return
  lea   =1
  add   =x2         ; Inner loop: x3 = x2 + 1 .. x0
sort_inner:
  sta   =x3
  nor   #0
  add   =x0         ; x0 - x3
  jfc   sort_next   ; done with inner loop if x3 >= x0
  lda   =x1
  add   =x2
  sta   =x4         ; @=x4 = x1[x2]
  lda   =x1
  add   =x3
  sta   =x5         ; @=x5 = x1[x3]
  lda   @=x5
  nor   #0
  add   @=x4        ; @=x4 - @=x5
  jfc   sort_noswap ; swap if @=x4 < @=x5
  lda   @=x5
  sta   =x6
  lda   @=x4
  sta   @=x5
  lda   =x6
  sta   @=x4
sort_noswap:
  lea   =1
  add   =x3
  jmp   sort_inner
sort_next:
  lea   =1
  add   =x2
  jmp   sort_outer