mirror of
https://github.com/cc65/cc65.git
synced 2024-12-27 15:29:46 +00:00
Added new div() function written by Greg King
git-svn-id: svn://svn.cc65.org/cc65/trunk@1469 b7a2c559-68d2-44c3-8de9-860c34a00d81
This commit is contained in:
parent
82684d98fb
commit
1ee3ccfdc2
@ -54,6 +54,7 @@ OBJS = add.o \
|
|||||||
decsp7.o \
|
decsp7.o \
|
||||||
decsp8.o \
|
decsp8.o \
|
||||||
div.o \
|
div.o \
|
||||||
|
divt.o \
|
||||||
enter.o \
|
enter.o \
|
||||||
eq.o \
|
eq.o \
|
||||||
ge.o \
|
ge.o \
|
||||||
|
43
libsrc/runtime/divt.s
Normal file
43
libsrc/runtime/divt.s
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
; 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);
|
||||||
|
;
|
||||||
|
; Both sides of an assignment-expression must be cast to (long)
|
||||||
|
; because cc65 functions can't return structures -- yet. Example:
|
||||||
|
;
|
||||||
|
; #include <stdlib.h>
|
||||||
|
; div_t answer;
|
||||||
|
;
|
||||||
|
; (long)answer = (long)div(-41, +3);
|
||||||
|
; printf("The quotient is %d, and the remainder is %d.\n",
|
||||||
|
; answer.quot, answer.rem);
|
||||||
|
|
||||||
|
.export _div
|
||||||
|
|
||||||
|
.import tosdivax, negax
|
||||||
|
.importzp sreg, ptr1, tmp1
|
||||||
|
|
||||||
|
_div: jsr tosdivax ; Division-operator does most of the work
|
||||||
|
sta sreg ; Quotient is in sreg
|
||||||
|
stx sreg+1
|
||||||
|
lda ptr1 ; Unsigned remainder is in ptr1
|
||||||
|
ldx ptr1+1
|
||||||
|
|
||||||
|
; Adjust the sign of the remainder.
|
||||||
|
; It must be the same as the sign of the dividend.
|
||||||
|
;
|
||||||
|
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
|
||||||
|
|
||||||
|
Pos: rts
|
||||||
|
|
Loading…
Reference in New Issue
Block a user