Created
May 17, 2019 14:41
-
-
Save lhz/9d6e01536a7a281fb58de2d9add6b827 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
SINE_GEN_LENGTH = 256 | |
SineGenerate: | |
lea SineGenTable + 8, a0 | |
move.l #$7FFF6216, d6 ; 2*cos(π/512) >> 2 | |
move.l #SINE_GEN_LENGTH - 3, d7 | |
.Loop: move.l -4(a0), d0 ; A = sin(i) | |
move.l d6, d1 ; B = 2*cos(π/512) >> 2 | |
move.l d0, d2 | |
move.l d1, d3 | |
swap d2 ; d2.w = Ah | |
swap d3 ; d3.w = Bh | |
mulu.w d2, d1 | |
lsr.l #7, d1 | |
lsr.l #7, d1 ; d1.l = Ah*Bl >> 14 | |
mulu.w d3, d0 | |
lsr.l #7, d0 | |
lsr.l #7, d0 ; d0.l = Al*Bh >> 14 | |
mulu.w d2, d3 | |
lsl.l #2, d3 ; d3.l = Ah*Bh << 2 | |
add.l d0, d1 | |
add.l d3, d1 | |
sub.l -8(a0), d1 ; sin(i)*2*cos(π/512) - sin(i-1) | |
tst.l (a0)+ ; Skip precalculated value | |
bne.s .Skip | |
move.l d1, -4(a0) | |
.Skip: dbf d7, .Loop | |
rts | |
SineScale: | |
lea SineGenTable(PC), a0 | |
lea Sine(PC), a1 | |
lea Sine + 1024(PC), a2 | |
lea Sine + 1024(PC), a3 | |
lea Sine + 2048(PC), a4 | |
lea Sine + 2048(PC), a5 | |
moveq #0, d0 | |
move.l #SINE_GEN_LENGTH - 1, d7 | |
.Mirr: move.l (a0)+, d1 | |
lsr.l #1, d1 ; Scale to signed word | |
move.l d1, d2 | |
neg.l d2 | |
subq.l #1, d2 | |
swap d1 | |
swap d2 | |
move.w d1, (a1)+ | |
move.w d1, -(a2) | |
move.w d2, (a3)+ | |
move.w d2, -(a4) | |
move.w d1, (a5)+ | |
dbf d7, .Mirr | |
rts | |
SineGenTable: | |
dc.l $00C90FC5, $025B2D61 ; sin(0.5*t), sin(1.5*t) [t = π/512] | |
dcb.l SINE_GEN_LENGTH / 2 - 2, 0 | |
dc.l $B592E769, $B6AD7F7A ; sin(0.5*t + π/4), sin(1.5*t + π/4) | |
dcb.l SINE_GEN_LENGTH / 2 - 2, 0 | |
Sine: | |
dcb.w SINE_GEN_LENGTH * 5, 0 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment