2002-10-25 20:42:18 +00:00
|
|
|
; divt.s
|
|
|
|
;
|
|
|
|
; 2002-10-22, Greg King
|
|
|
|
;
|
|
|
|
; This signed-division function returns both the quotient and the remainder,
|
|
|
|
; in this structure:
|
|
|
|
;
|
|
|
|
; typedef struct {
|
|
|
|
; int rem, quot;
|
|
|
|
; } div_t;
|
|
|
|
;
|
|
|
|
; div_t __fastcall__ div (int numer, int denom);
|
|
|
|
;
|
|
|
|
|
2013-05-09 11:56:54 +00:00
|
|
|
.export _div
|
2002-10-25 20:42:18 +00:00
|
|
|
|
2013-05-09 11:56:54 +00:00
|
|
|
.import tosdivax, negax
|
|
|
|
.importzp sreg, ptr1, tmp1
|
2002-10-25 20:42:18 +00:00
|
|
|
|
2013-05-09 11:56:54 +00:00
|
|
|
_div: jsr tosdivax ; Division-operator does most of the work
|
2018-07-25 20:38:29 +00:00
|
|
|
lda sreg ; Unsigned remainder is in sreg
|
|
|
|
ldx sreg+1
|
|
|
|
ldy ptr1 ; transfer quotient to sreg
|
|
|
|
sty sreg
|
|
|
|
ldy ptr1+1
|
|
|
|
sty sreg+1
|
2002-10-25 20:42:18 +00:00
|
|
|
|
|
|
|
; Adjust the sign of the remainder.
|
|
|
|
; It must be the same as the sign of the dividend.
|
|
|
|
;
|
2013-05-09 11:56:54 +00:00
|
|
|
bit tmp1 ; Load high-byte of left argument
|
|
|
|
bpl Pos ; Jump if sign-of-result is positive
|
|
|
|
jmp negax ; Result is negative, adjust the sign
|
2002-10-25 20:42:18 +00:00
|
|
|
|
2013-05-09 11:56:54 +00:00
|
|
|
Pos: rts
|
2002-10-25 20:42:18 +00:00
|
|
|
|