Moved fixed point multiplication and rounding into an asm module.

git-svn-id: svn://svn.cc65.org/cc65/trunk@4447 b7a2c559-68d2-44c3-8de9-860c34a00d81
This commit is contained in:
uz
2009-11-05 20:16:43 +00:00
parent de6050f21d
commit 787f069738
6 changed files with 75 additions and 17 deletions

View File

@@ -0,0 +1,54 @@
;
; Ullrich von Bassewitz, 2009-11-05
;
; Helper function for functions using sine/cosine: Multiply two values, one
; being an 8.8 fixed point one, and return the rounded and scaled result.
;
.export _tgi_imulround
.import popax, imul16x16r32
.include "zeropage.inc"
;----------------------------------------------------------------------------
;
.code
.proc _tgi_imulround
; Get arguments
sta ptr1
stx ptr1+1 ; Save lhs
jsr popax ; Get rhs
; Multiplicate
jsr imul16x16r32
; Round the result
cmp #$80 ; Frac(x) >= 0.5?
txa
ldy sreg+1 ; Check sign
bmi @L1
adc #$00
tay
lda sreg
adc #$00
tax
tya
rts
@L1: sbc #$00
tay
lda sreg
sbc #$00
tax
tya
rts
.endproc