Q2 Computer - Division and Modulus
; Divide x2 = x0 / x1, remainder in x3
; Destroys x0, x1, x2, x3, x4, x5 (assumed to be in the zero page).
div:
sta =x5
lea =0
sta =x2 ; quotient
sta =x3 ; remainder
lea =12
div_loop:
add #-1
sta =x4
; x3 <<= 1
lda =x3
add =x3
sta =x3
; x2 <<= 1
lda =x2
add =x2
sta =x2
; x3 = x3 | x0[x4]
lda =x0
add =x0
sta =x0
jfc div_not_set
lea =1
add =x3
sta =x3
div_not_set:
; if x3 < x1 goto div_skip
lda =x1
nor #0
add #1
add =x3
jfc div_skip
; x3 -= x1
sta =x3
; x2 |= 1
lea =1
add =x2
sta =x2
div_skip:
lda =x4
jfc div_loop
jmp @=x5