;; ;; function: div10_unsigned ;; ;; argument: y ;; return: a ← y / 10 ;; maximum y is somewhere between 2 ^ 21 and 2 ^ 22 div10_unsigned: ;; 1 / 10 * (2 ^ 24) ~= 1677722 = 0x19999a mvi 1677722,rx mov mul,p clr a ad2 mov alu,a ;; ALH: [nmlkjihgfedcba9876543210________] ;; ALL: [76543210________________________] clr a mov alh,pl ; alh is (a >> 16) add mov alu,a ;; ALL: [nmlkjihgfedcba9876543210________] ;; rotate left 24 requires fewer cycles than shift right 8 rl8 mov alu,a rl8 mov alu,a rl8 mov alu,a ;; ALL: [________nmlkjihgfedcba9876543210] ;; mask 24 bit result mvi 0xffffff,pl ;; return to caller; reset caller's ct2 btm and mov alu,a mov 0,ct2