]> git.sur5r.net Git - cc65/blob - libsrc/runtime/umul16x16r32.s
Working on the division and multiplication routines.
[cc65] / libsrc / runtime / umul16x16r32.s
1 ;
2 ; Ullrich von Bassewitz, 2010-11-03
3 ;
4 ; CC65 runtime: 16x16 => 32 unsigned multiplication
5 ;
6
7         .export         umul16x16r32, umul16x16r32m
8
9         .include        "zeropage.inc"
10
11
12 ;---------------------------------------------------------------------------
13 ; 16x16 => 32 unsigned multiplication routine.
14 ;
15 ;   lhs         rhs           result          result also in
16 ; -------------------------------------------------------------
17 ;   ptr1        ax            ax:sreg          ptr1:sreg
18 ;
19
20 umul16x16r32:
21         sta     ptr3
22         stx     ptr3+1
23
24 umul16x16r32m:
25         lda     #0
26         sta     sreg+1
27         ldy     #16             ; Number of bits
28
29         lsr     ptr1+1
30         ror     ptr1            ; Get first bit into carry
31 @L0:    bcc     @L1
32
33         clc
34         adc     ptr3
35         pha
36         lda     ptr3+1
37         adc     sreg+1
38         sta     sreg+1
39         pla
40
41 @L1:    ror     sreg+1
42         ror     a
43         ror     ptr1+1
44         ror     ptr1
45         dey
46         bne     @L0
47
48         sta     sreg            ; Save byte 3
49         lda     ptr1            ; Load the result
50         ldx     ptr1+1
51         rts                     ; Done
52