; ; Ullrich von Bassewitz, 2009-08-17 ; ; CC65 runtime: multiplication for ints. Short versions. ; .export tosumula0, tosmula0 .export mul8x16, mul8x16a .import popsreg .importzp sreg, ptr4 ;--------------------------------------------------------------------------- ; 8x16 routine with external entry points used by the 16x16 routine in mul.s tosmula0: tosumula0: sta ptr4 mul8x16:jsr popsreg ; Get left operand lda #0 ; Clear byte 1 ldy #8 ; Number of bits ldx sreg+1 ; Get into register for speed beq mul8x8 ; Do 8x8 multiplication if high byte zero mul8x16a: sta ptr4+1 ; Clear byte 2 lsr ptr4 ; Get first bit into carry @L0: bcc @L1 clc adc sreg pha txa ; hi byte of left op adc ptr4+1 sta ptr4+1 pla @L1: ror ptr4+1 ror a ror ptr4 dey bne @L0 tax lda ptr4 ; Load the result rts ;--------------------------------------------------------------------------- ; 8x8 multiplication routine mul8x8: lsr ptr4 ; Get first bit into carry @L0: bcc @L1 clc adc sreg @L1: ror ror ptr4 dey bne @L0 tax lda ptr4 ; Load the result rts ; Done