mirror of
https://github.com/cc65/cc65.git
synced 2025-01-11 11:30:13 +00:00
55 lines
1013 B
ArmAsm
55 lines
1013 B
ArmAsm
|
;
|
||
|
; 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
|