]> git.sur5r.net Git - cc65/blob - libsrc/runtime/mul.s
Add interrupt handling code from Stefan Haubenthal
[cc65] / libsrc / runtime / mul.s
1 ;
2 ; Ullrich von Bassewitz, 07.08.1998
3 ;
4 ; CC65 runtime: multiplication for ints
5 ;
6
7         .export         tosumula0, tosumulax, tosmula0, tosmulax
8         .import         popsreg
9         .importzp       sreg, tmp1, ptr4
10
11 tosmula0:
12 tosumula0:
13         ldx     #0
14 tosmulax:
15 tosumulax:
16 mul16:  sta     ptr4
17         stx     ptr4+1          ; Save right operand
18         jsr     popsreg         ; Get left operand
19
20 ; Do ptr4*sreg --> AX (see mult-div.s from "The Fridge").
21
22         lda     #0
23         sta     tmp1
24         ldx     sreg+1          ; Get into register for speed
25         ldy     #16             ; Number of bits
26 L0:     lsr     tmp1
27         ror     a
28         ror     ptr4+1
29         ror     ptr4
30         bcc     L1
31         clc
32         adc     sreg
33         pha
34         txa                     ; hi byte of left op
35         adc     tmp1
36         sta     tmp1
37         pla
38 L1:     dey
39         bpl     L0
40         lda     ptr4            ; Load the result
41         ldx     ptr4+1
42         rts                     ; Done
43