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:
54
libsrc/tgi/tgi_imulround.s
Normal file
54
libsrc/tgi/tgi_imulround.s
Normal 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
|
||||
Reference in New Issue
Block a user