Metropoli BBS
VIEWER: sincos.asm MODE: TEXT (ASCII)
; $$TABS=8

	include	"demo.i"
sin::
; input d0=angle output d0=sin(d0)
; trashes d1/d2,a0
	clr	d2
	move.b	d0,d2
	lsr	#8,d0
	add	d0,d0
	lea	sin_table(pc),a0
	move	2(a0,d0.w),d1
	move	0(a0,d0.w),d0
	sub	d0,d1
	muls	d2,d1
	asr.l	#8,d1
	add	d1,d0
	rts
cos::
; input d0=angle output d0=cos(d0)
; trashes d1/d2,a0
	clr	d2
	move.b	d0,d2
	lsr	#8,d0
	add	d0,d0
	lea	sin_table(pc),a0
	move	2(a0,d0.w),d1
	move	0(a0,d0.w),d0
	sub	d0,d1
	muls	d2,d1
	asr.l	#8,d1
	add	d1,d0
	rts


sincos::
; input d0=angle -32768 to 32767
; output d0=sin d1=cosine
; uses interpolation
; trashes d0,a0,d1,d2,d3
	move	d0,d2
	and	#$ff,d2
	lsr	#8,d0
	add	d0,d0
	lea	cos_table(pc),a0
	move	0(a0,d0.w),d1
	move	2(a0,d0.w),d3
	sub	d1,d3
	muls	d2,d3
	asr.l	#8,d3
	add	d3,d1

	lea	sin_table(pc),a0
	move	2(a0,d0.w),d3
	move	0(a0,d0.w),d0
	sub	d0,d3
	muls	d2,d3
	asr.l	#8,d3
	add	d3,d0
	rts

fast_sincos::
; input d0=angle -32768 to 32767
; output d0=sin d1=cosine
; no interpolation
; trashes d0,a0,d1
	lsr	#8,d0
	add	d0,d0
	lea	cos_table(pc),a0
	move	0(a0,d0.w),d1
	lea	sin_table(pc),a0
	move	0(a0,d0.w),d0
	rts



sin_table	dc.w	0
	dc.w	804
	dc.w	1608
	dc.w	2411
	dc.w	3212
	dc.w	4011
	dc.w	4808
	dc.w	5602
	dc.w	6393
	dc.w	7180
	dc.w	7962
	dc.w	8740
	dc.w	9512
	dc.w	10279
	dc.w	11039
	dc.w	11793
	dc.w	12540
	dc.w	13279
	dc.w	14010
	dc.w	14733
	dc.w	15447
	dc.w	16151
	dc.w	16846
	dc.w	17531
	dc.w	18205
	dc.w	18868
	dc.w	19520
	dc.w	20160
	dc.w	20788
	dc.w	21403
	dc.w	22006
	dc.w	22595
	dc.w	23170
	dc.w	23732
	dc.w	24279
	dc.w	24812
	dc.w	25330
	dc.w	25833
	dc.w	26320
	dc.w	26791
	dc.w	27246
	dc.w	27684
	dc.w	28106
	dc.w	28511
	dc.w	28899
	dc.w	29269
	dc.w	29622
	dc.w	29957
	dc.w	30274
	dc.w	30572
	dc.w	30853
	dc.w	31114
	dc.w	31357
	dc.w	31581
	dc.w	31786
	dc.w	31972
	dc.w	32138
	dc.w	32286
	dc.w	32413
	dc.w	32522
	dc.w	32610
	dc.w	32679
	dc.w	32729
	dc.w	32758
cos_table	dc.w	32767
	dc.w	32758
	dc.w	32729
	dc.w	32679
	dc.w	32610
	dc.w	32522
	dc.w	32413
	dc.w	32286
	dc.w	32138
	dc.w	31972
	dc.w	31786
	dc.w	31581
	dc.w	31357
	dc.w	31114
	dc.w	30853
	dc.w	30572
	dc.w	30274
	dc.w	29957
	dc.w	29622
	dc.w	29269
	dc.w	28899
	dc.w	28511
	dc.w	28106
	dc.w	27684
	dc.w	27246
	dc.w	26791
	dc.w	26320
	dc.w	25833
	dc.w	25330
	dc.w	24812
	dc.w	24279
	dc.w	23732
	dc.w	23170
	dc.w	22595
	dc.w	22006
	dc.w	21403
	dc.w	20788
	dc.w	20160
	dc.w	19520
	dc.w	18868
	dc.w	18205
	dc.w	17531
	dc.w	16846
	dc.w	16151
	dc.w	15447
	dc.w	14733
	dc.w	14010
	dc.w	13279
	dc.w	12540
	dc.w	11793
	dc.w	11039
	dc.w	10279
	dc.w	9512
	dc.w	8740
	dc.w	7962
	dc.w	7180
	dc.w	6393
	dc.w	5602
	dc.w	4808
	dc.w	4011
	dc.w	3212
	dc.w	2411
	dc.w	1608
	dc.w	804
	dc.w	0
	dc.w	-804
	dc.w	-1608
	dc.w	-2411
	dc.w	-3212
	dc.w	-4011
	dc.w	-4808
	dc.w	-5602
	dc.w	-6393
	dc.w	-7180
	dc.w	-7962
	dc.w	-8740
	dc.w	-9512
	dc.w	-10279
	dc.w	-11039
	dc.w	-11793
	dc.w	-12540
	dc.w	-13279
	dc.w	-14010
	dc.w	-14733
	dc.w	-15447
	dc.w	-16151
	dc.w	-16846
	dc.w	-17531
	dc.w	-18205
	dc.w	-18868
	dc.w	-19520
	dc.w	-20160
	dc.w	-20788
	dc.w	-21403
	dc.w	-22006
	dc.w	-22595
	dc.w	-23170
	dc.w	-23732
	dc.w	-24279
	dc.w	-24812
	dc.w	-25330
	dc.w	-25833
	dc.w	-26320
	dc.w	-26791
	dc.w	-27246
	dc.w	-27684
	dc.w	-28106
	dc.w	-28511
	dc.w	-28899
	dc.w	-29269
	dc.w	-29622
	dc.w	-29957
	dc.w	-30274
	dc.w	-30572
	dc.w	-30853
	dc.w	-31114
	dc.w	-31357
	dc.w	-31581
	dc.w	-31786
	dc.w	-31972
	dc.w	-32138
	dc.w	-32286
	dc.w	-32413
	dc.w	-32522
	dc.w	-32610
	dc.w	-32679
	dc.w	-32729
	dc.w	-32758
	dc.w	-32767
	dc.w	-32758
	dc.w	-32729
	dc.w	-32679
	dc.w	-32610
	dc.w	-32522
	dc.w	-32413
	dc.w	-32286
	dc.w	-32138
	dc.w	-31972
	dc.w	-31786
	dc.w	-31581
	dc.w	-31357
	dc.w	-31114
	dc.w	-30853
	dc.w	-30572
	dc.w	-30274
	dc.w	-29957
	dc.w	-29622
	dc.w	-29269
	dc.w	-28899
	dc.w	-28511
	dc.w	-28106
	dc.w	-27684
	dc.w	-27246
	dc.w	-26791
	dc.w	-26320
	dc.w	-25833
	dc.w	-25330
	dc.w	-24812
	dc.w	-24279
	dc.w	-23732
	dc.w	-23170
	dc.w	-22595
	dc.w	-22006
	dc.w	-21403
	dc.w	-20788
	dc.w	-20160
	dc.w	-19520
	dc.w	-18868
	dc.w	-18205
	dc.w	-17531
	dc.w	-16846
	dc.w	-16151
	dc.w	-15447
	dc.w	-14733
	dc.w	-14010
	dc.w	-13279
	dc.w	-12540
	dc.w	-11793
	dc.w	-11039
	dc.w	-10279
	dc.w	-9512
	dc.w	-8740
	dc.w	-7962
	dc.w	-7180
	dc.w	-6393
	dc.w	-5602
	dc.w	-4808
	dc.w	-4011
	dc.w	-3212
	dc.w	-2411
	dc.w	-1608
	dc.w	-804
	dc.w	0
	dc.w	804
	dc.w	1608
	dc.w	2411
	dc.w	3212
	dc.w	4011
	dc.w	4808
	dc.w	5602
	dc.w	6393
	dc.w	7180
	dc.w	7962
	dc.w	8740
	dc.w	9512
	dc.w	10279
	dc.w	11039
	dc.w	11793
	dc.w	12540
	dc.w	13279
	dc.w	14010
	dc.w	14733
	dc.w	15447
	dc.w	16151
	dc.w	16846
	dc.w	17531
	dc.w	18205
	dc.w	18868
	dc.w	19520
	dc.w	20160
	dc.w	20788
	dc.w	21403
	dc.w	22006
	dc.w	22595
	dc.w	23170
	dc.w	23732
	dc.w	24279
	dc.w	24812
	dc.w	25330
	dc.w	25833
	dc.w	26320
	dc.w	26791
	dc.w	27246
	dc.w	27684
	dc.w	28106
	dc.w	28511
	dc.w	28899
	dc.w	29269
	dc.w	29622
	dc.w	29957
	dc.w	30274
	dc.w	30572
	dc.w	30853
	dc.w	31114
	dc.w	31357
	dc.w	31581
	dc.w	31786
	dc.w	31972
	dc.w	32138
	dc.w	32286
	dc.w	32413
	dc.w	32522
	dc.w	32610
	dc.w	32679
	dc.w	32729
	dc.w	32758
	dc.w	32767
	dc.w	32767


[ RETURN TO DIRECTORY ]