261 lines
5.0 KiB
NASM
261 lines
5.0 KiB
NASM
|
.FILE 'TRIG.ASM'
|
|||
|
.TITLE 'ROBO-RAMA GAME PROGRAM'
|
|||
|
.WIDTH 132
|
|||
|
.OPTION B,D,L,T
|
|||
|
.MNOLIST
|
|||
|
|
|||
|
|
|||
|
.DEF GETSIN,GETCOS
|
|||
|
|
|||
|
HALFPI .set 102944
|
|||
|
PI .set 205887
|
|||
|
X3HALFPI .set 308831
|
|||
|
X2PI .set 411775
|
|||
|
|
|||
|
|
|||
|
.text
|
|||
|
******************************************************************
|
|||
|
GETSIN:
|
|||
|
; PARMS - A0 = theta in s15.16
|
|||
|
; RETURNS - A0 = sin(theta) in s15.16
|
|||
|
;return A14 = theta normalized to range of 0 to 2Pi
|
|||
|
|
|||
|
mmtm SP,A2
|
|||
|
|
|||
|
;long int getsin (theta)
|
|||
|
;long int theta;
|
|||
|
;{
|
|||
|
;int indx;
|
|||
|
;long int retval;
|
|||
|
|
|||
|
;while (theta < 0) theta += X2PI;
|
|||
|
TRIGLP1:
|
|||
|
move A0,A0
|
|||
|
jrnn TRIGSK1
|
|||
|
addi X2PI,A0,L
|
|||
|
jruc TRIGLP1
|
|||
|
TRIGSK1:
|
|||
|
;while (theta > X2PI) theta -= X2PI;
|
|||
|
TRIGLP2:
|
|||
|
cmpi X2PI,A0,L
|
|||
|
jrn TRIGSK2
|
|||
|
subi X2PI,A0,L
|
|||
|
jruc TRIGLP2
|
|||
|
TRIGSK2:
|
|||
|
move A0,A14 ;A14 theta normalized
|
|||
|
|
|||
|
;if (theta < HALFPI) {
|
|||
|
; indx = ((theta+5) >> 9);
|
|||
|
; retval = sintbl[indx];
|
|||
|
; }
|
|||
|
cmpi HALFPI,A0,L
|
|||
|
jrnn TRIGSK3
|
|||
|
move A0,A2
|
|||
|
addk 5,A2
|
|||
|
sra 9,A2
|
|||
|
sla 5,A2
|
|||
|
addi SINTBL,A2,L
|
|||
|
move *A2,A0,1
|
|||
|
mmfm SP,A2
|
|||
|
rets
|
|||
|
TRIGSK3:
|
|||
|
|
|||
|
;else if (theta <= PI) {
|
|||
|
; indx = (((PI - theta)+5) >> 9);
|
|||
|
; retval = sintbl[indx];
|
|||
|
; }
|
|||
|
cmpi PI,A0,L
|
|||
|
jrp TRIGSK4
|
|||
|
movi PI,A2,L
|
|||
|
sub A0,A2
|
|||
|
addk 5,A2
|
|||
|
sra 9,A2
|
|||
|
sla 5,A2
|
|||
|
addi SINTBL,A2,L
|
|||
|
move *A2,A0,1
|
|||
|
mmfm SP,A2
|
|||
|
rets
|
|||
|
TRIGSK4:
|
|||
|
|
|||
|
;else if (theta < X3HALFPI) {
|
|||
|
; indx = (((theta - PI) + 5) >> 9);
|
|||
|
; retval = sintbl[indx];
|
|||
|
; retval = -retval;
|
|||
|
; }
|
|||
|
cmpi X3HALFPI,A0,L
|
|||
|
jrnn TRIGSK5
|
|||
|
move A0,A2
|
|||
|
subi PI,A2,L
|
|||
|
addk 5,A2
|
|||
|
sra 9,A2
|
|||
|
sla 5,A2
|
|||
|
addi SINTBL,A2,L
|
|||
|
move *A2,A0,1
|
|||
|
neg A0
|
|||
|
mmfm SP,A2
|
|||
|
rets
|
|||
|
TRIGSK5:
|
|||
|
|
|||
|
;else {
|
|||
|
; indx = (((X2PI - theta) + 5) >> 9);
|
|||
|
; retval = sintbl[indx];
|
|||
|
; retval = -retval;
|
|||
|
; }
|
|||
|
movi X2PI,A2,L
|
|||
|
sub A0,A2
|
|||
|
addk 5,A2
|
|||
|
sra 9,A2
|
|||
|
sla 5,A2
|
|||
|
addi SINTBL,A2,L
|
|||
|
move *A2,A0,1
|
|||
|
neg A0
|
|||
|
mmfm SP,A2
|
|||
|
rets
|
|||
|
|
|||
|
******************************************************************
|
|||
|
|
|||
|
|
|||
|
.text
|
|||
|
******************************************************************
|
|||
|
GETCOS:
|
|||
|
; PARMS - A0 = theta in s15.16
|
|||
|
; RETURNS - A0 = cos(theta) in s15.16
|
|||
|
|
|||
|
mmtm SP,A2
|
|||
|
|
|||
|
;long int getcos (theta)
|
|||
|
;long int theta;
|
|||
|
;{
|
|||
|
;int indx;
|
|||
|
;long int retval;
|
|||
|
|
|||
|
;while (theta < 0) theta += X2PI;
|
|||
|
TRIGLP3:
|
|||
|
move A0,A0
|
|||
|
jrnn TRIGSK6
|
|||
|
addi X2PI,A0,L
|
|||
|
jruc TRIGLP3
|
|||
|
TRIGSK6:
|
|||
|
;while (theta > X2PI) theta -= X2PI;
|
|||
|
TRIGLP4:
|
|||
|
cmpi X2PI,A0,L
|
|||
|
jrn TRIGSK7
|
|||
|
subi X2PI,A0,L
|
|||
|
jruc TRIGLP4
|
|||
|
TRIGSK7:
|
|||
|
move A0,A14 ;A14 theta normalized
|
|||
|
|
|||
|
;if (theta < HALFPI) {
|
|||
|
; indx = (((HALFPI - theta) + 5) >> 9);
|
|||
|
; retval = sintbl[indx];
|
|||
|
; }
|
|||
|
cmpi HALFPI,A0,L
|
|||
|
jrnn TRIGSK8
|
|||
|
movi HALFPI,A2,L
|
|||
|
sub A0,A2
|
|||
|
addk 5,A2
|
|||
|
sra 9,A2
|
|||
|
sla 5,A2
|
|||
|
addi SINTBL,A2,L
|
|||
|
move *A2,A0,1
|
|||
|
mmfm SP,A2
|
|||
|
rets
|
|||
|
TRIGSK8:
|
|||
|
|
|||
|
|
|||
|
;else if (theta <= PI) {
|
|||
|
; indx = (((theta - HALFPI) + 5) >> 9);
|
|||
|
; retval = sintbl[indx];
|
|||
|
; retval = -retval;
|
|||
|
; }
|
|||
|
cmpi PI,A0,L
|
|||
|
jrp TRIGSK9
|
|||
|
move A0,A2
|
|||
|
subi HALFPI,A2,L
|
|||
|
addk 5,A2
|
|||
|
sra 9,A2
|
|||
|
sla 5,A2
|
|||
|
addi SINTBL,A2,l
|
|||
|
move *A2,A0,1
|
|||
|
neg A0
|
|||
|
mmfm SP,A2
|
|||
|
rets
|
|||
|
TRIGSK9:
|
|||
|
|
|||
|
|
|||
|
|
|||
|
;else if (theta < X3HALFPI) {
|
|||
|
; indx = (((X3HALFPI - theta) + 5) >> 9);
|
|||
|
; retval = sintbl[indx];
|
|||
|
; retval = -retval;
|
|||
|
; }
|
|||
|
;else if (theta < X3HALFPI) {
|
|||
|
; indx = (((theta - PI) + 5) >> 9);
|
|||
|
; retval = sintbl[indx];
|
|||
|
; retval = -retval;
|
|||
|
; }
|
|||
|
cmpi X3HALFPI,A0,L
|
|||
|
jrnn TRIGSK10
|
|||
|
movi X3HALFPI,A2,L
|
|||
|
sub A0,A2
|
|||
|
addk 5,A2
|
|||
|
sra 9,A2
|
|||
|
sla 5,A2
|
|||
|
addi SINTBL,A2,L
|
|||
|
move *A2,A0,1
|
|||
|
neg A0
|
|||
|
mmfm SP,A2
|
|||
|
rets
|
|||
|
TRIGSK10:
|
|||
|
|
|||
|
|
|||
|
|
|||
|
;else {
|
|||
|
; indx = (((theta - X3HALFPI) + 5) >> 9);
|
|||
|
; retval = sintbl[indx];
|
|||
|
; }
|
|||
|
move A0,A2
|
|||
|
subi X3HALFPI,A2,L
|
|||
|
addk 5,A2
|
|||
|
sra 9,A2
|
|||
|
sla 5,A2
|
|||
|
addi SINTBL,A2,L
|
|||
|
move *A2,A0,1
|
|||
|
mmfm SP,A2
|
|||
|
rets
|
|||
|
|
|||
|
*****************************************************************
|
|||
|
|
|||
|
|
|||
|
;/* Table of sin from 0 through PI/2 Radians in 2**-7 increments */
|
|||
|
.data
|
|||
|
.even
|
|||
|
SINTBL:
|
|||
|
.int 0,511,1023,1535,2047,2559,3070,3582
|
|||
|
.int 4093,4604,5114,5625,6135,6644,7153,7662
|
|||
|
.int 8170,8678,9185,9692,10198,10703,11208,11712
|
|||
|
.int 12216,12718,13220,13721,14221,14721,15219,15717
|
|||
|
.int 16213,16709,17204,17697,18189,18681,19171,19660
|
|||
|
.int 20148,20634,21120,21604,22086,22568,23048,23526
|
|||
|
.int 24004,24479,24953,25426,25897,26367,26835,27301
|
|||
|
.int 27766,28228,28690,29149,29607,30063,30517,30969
|
|||
|
.int 31419,31867,32314,32758,33201,33641,34080,34516
|
|||
|
.int 34950,35382,35812,36240,36665,37088,37509,37928
|
|||
|
.int 38344,38758,39170,39579,39986,40391,40793,41192
|
|||
|
.int 41589,41984,42375,42765,43151,43535,43917,44295
|
|||
|
.int 44671,45045,45415,45783,46148,46510,46869,47226
|
|||
|
.int 47579,47930,48278,48622,48964,49303,49639,49972
|
|||
|
.int 50301,50628,50951,51272,51589,51903,52214,52522
|
|||
|
.int 52827,53128,53426,53721,54013,54301,54586,54868
|
|||
|
.int 55146,55421,55693,55961,56226,56487,56745,56999
|
|||
|
.int 57250,57498,57741,57982,58219,58452,58682,58908
|
|||
|
.int 59131,59349,59565,59776,59985,60189,60390,60587
|
|||
|
.int 60780,60970,61156,61338,61516,61691,61862,62029
|
|||
|
.int 62192,62352,62507,62659,62807,62952,63092,63229
|
|||
|
.int 63361,63490,63615,63736,63854,63967,64076,64182
|
|||
|
.int 64283,64381,64475,64564,64650,64732,64810,64884
|
|||
|
.int 64954,65020,65082,65140,65195,65245,65291,65333
|
|||
|
.int 65371,65406,65436,65462,65484,65503,65517,65527
|
|||
|
.int 65533,65535,65534
|
|||
|
|
|||
|
|