]> git.sur5r.net Git - cc65/blob - libsrc/runtime/udiv.s
This commit was generated by cvs2svn to compensate for changes in r2,
[cc65] / libsrc / runtime / udiv.s
1 ;
2 ; Ullrich von Bassewitz, 07.08.1998
3 ;
4 ; CC65 runtime: division for unsigned ints
5 ;
6
7         .export         tosudiva0, tosudivax, udiv16
8         .import         popsreg
9         .importzp       sreg, ptr1, ptr4
10
11 tosudiva0:
12         ldx     #0
13 tosudivax:
14         sta     ptr4
15         stx     ptr4+1          ; Save right operand
16         jsr     popsreg         ; Get left operand
17
18 ; Do the division
19
20         jsr     udiv16
21
22 ; Result is in sreg, remainder in ptr1
23
24         lda     sreg
25         ldx     sreg+1
26         rts
27
28 ; Do (sreg/ptr4) -> sreg (see mult-div.s from "The Fridge").
29 ; This is also the entry point for the signed division
30
31 udiv16: lda     #0
32         sta     ptr1+1
33         ldy     #16
34 L0:     asl     sreg
35         rol     sreg+1
36         rol     a
37         rol     ptr1+1
38         pha
39         cmp     ptr4
40         lda     ptr1+1
41         sbc     ptr4+1
42         bcc     L1
43         sta     ptr1+1
44         pla
45         sbc     ptr4
46         pha
47         inc     sreg
48 L1:     pla
49         dey
50         bne     L0
51         sta     ptr1
52         rts
53
54