]> git.sur5r.net Git - cc65/blob - libsrc/runtime/udiv32by16r16.s
Removed (pretty inconsistently used) tab chars from source code base.
[cc65] / libsrc / runtime / udiv32by16r16.s
1 ;
2 ; Ullrich von Bassewitz, 2009-11-04
3 ;
4 ; CC65 runtime: 32by16 => 16 unsigned division
5 ;
6
7         .export         udiv32by16r16, udiv32by16r16m
8
9         .include        "zeropage.inc"
10
11
12 ;---------------------------------------------------------------------------
13 ; 32by16 division. Divide ptr1:ptr2 by ptr3. Result is in ptr1, remainder
14 ; in sreg.
15 ;
16 ;   lhs         rhs           result      result also in    remainder
17 ; -----------------------------------------------------------------------
18 ;   ptr1:ptr2   ptr3          ax          ptr1              sreg
19 ;
20
21
22 udiv32by16r16:
23         sta     ptr3
24         stx     ptr3+1
25 udiv32by16r16m:
26         lda     #0
27         sta     sreg+1
28         ldy     #32
29
30 L0:     asl     ptr1
31         rol     ptr1+1
32         rol     ptr2
33         rol     ptr2+1
34         rol     a
35         rol     sreg+1
36
37         pha
38         cmp     ptr3
39         lda     sreg+1
40         sbc     ptr3+1
41         bcc     L1
42
43         sta     sreg+1
44         pla
45         sbc     ptr3
46         pha
47         inc     ptr1
48
49 L1:     pla
50         dey
51         bne     L0
52         sta     sreg
53         lda     ptr1
54         ldx     ptr1+1
55         rts
56