File: divt.s

package info (click to toggle)
cc65 2.19-2
  • links: PTS
  • area: main
  • in suites: forky, sid, trixie
  • size: 20,268 kB
  • sloc: ansic: 117,151; asm: 66,339; pascal: 4,248; makefile: 1,009; perl: 607
file content (38 lines) | stat: -rw-r--r-- 1,132 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
; 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);
;

        .export         _div

        .import         tosdivax, negax
        .importzp       sreg, ptr1, tmp1

_div:   jsr     tosdivax        ; Division-operator does most of the work
        
        ldy     sreg            ; low byte remainder from sreg
        sta     sreg            ; store low byte quotient to sreg
        
        lda     sreg+1          ; high byte remainder from sreg
        stx     sreg+1          ; store high byte quotient to sreg

        tax                     ; high byte remainder to x
        tya                     ; low byte remainder to a

; 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