3 ; 2002-10-22, Greg King
5 ; This signed-division function returns both the quotient and the remainder,
12 ; div_t __fastcall__ div (int numer, int denom);
14 ; Both sides of an assignment-expression must be cast to (long)
15 ; because cc65 functions can't return structures -- yet. Example:
20 ; (long)answer = (long)div(-41, +3);
21 ; printf("The quotient is %d, and the remainder is %d.\n",
22 ; answer.quot, answer.rem);
26 .import tosdivax, negax
27 .importzp sreg, ptr1, tmp1
29 _div: jsr tosdivax ; Division-operator does most of the work
30 sta sreg ; Quotient is in sreg
32 lda ptr1 ; Unsigned remainder is in ptr1
35 ; Adjust the sign of the remainder.
36 ; It must be the same as the sign of the dividend.
38 bit tmp1 ; Load high-byte of left argument
39 bpl Pos ; Jump if sign-of-result is positive
40 jmp negax ; Result is negative, adjust the sign