2 ; Ullrich von Bassewitz, 17.08.1998
4 ; CC65 runtime: division for long unsigned ints
7 .export tosudiveax, getlop, udiv32
9 .importzp sp, sreg, tmp3, tmp4, ptr1, ptr2, ptr3, ptr4
12 jsr getlop ; Get the paramameters
13 jsr udiv32 ; Do the division
14 lda ptr1 ; Result is in ptr1:sreg
18 ; Pop the parameters for the long division and put it into the relevant
19 ; memory cells. Called from the signed divisions also.
21 getlop: sta ptr3 ; Put right operand in place
28 ldy #0 ; Put left operand in place
40 jmp addysp1 ; Drop parameters
42 ; Do (ptr1:sreg) / (ptr3:ptr4) --> (ptr1:sreg), remainder in (ptr2:tmp3:tmp4)
43 ; This is also the entry point for the signed division
60 ; Do a subtraction. we do not have enough space to store the intermediate
61 ; result, so we may have to do the subtraction twice.
73 ; Overflow, do the subtraction again, this time store the result
75 sta ptr4+1 ; We have the high byte already
85 inc ptr1 ; Set result bit