bon, je pense que g oas tout compris, mais g essayé, et ça marche po!
voici mon code:
|SINE dc.w 0
|COSINE dc.w 0
|X_BUFFER dc.w 0
|
|Find_Cos MACRO;§
| movem.w d0-d7,-(a7);save_registers
| move.w 1,d1;store angle_value in d0
| add.w d1,d1;§.w -> 2*(§).b
| move.w 0(a2,d1.w),d0
| move.w #10,d1
| lsr d1,d0
| move.w d0,COSINE;store cos(§) in COSINE addr.
| movem.w (a7)+,d0-d7;restore_registers
| ENDM
|Find_Sin MACRO;§
| movem.w d0-d7,-(a7);save_registers
| move.w 1,d1;store angle value in d0
| add.w d1,d1;§.w -> 2*(§).b
| move.w 0(a4,d1.w),d0
| move.w #10,d1
| lsr d1,d0
| move.w d0,SINE;store sin(§) in SINE addr.
| movem.w (a7)+,d0-d7;restore_registers
| ENDM
|
|_main:
| lea costable(pc),a2
| lea sintable(pc),a4
| move.w #30,d3;§=30°
| move.w #10,d0
| move.w #5,d2
| Find_Cos d3;COSINE=cos(§)
| Find_Sin d3;SINE=sin(§)
| move.w COSINE,d4;d4=cos(§)
| move.w SINE,d5 ;d5=sin(§)
| muls.w d0,d4;d4=X*cos(§)
| muls.w d2,d5;d5=Z*sin(§)
| sub.w d5,d4 ;d4=X*cos(§)-Z*sin(§)
| move.w d4,X_BUFFER;X_BUFFER=X*cos(§)-Z*sin(§)
| ...
| rts
|
|costable; int(1024*cos(§))
| dc.w 1024,1023,1023,1022,1021,1020,1018,1016,1014,1011
| dc.w 1008,1005,1001,997,993,989,984,979,973,968
| dc.w 962,955,949,942,935,928,920,912,904,895
| dc.w 886,877,868,858,848,838,828,817,806,795
| dc.w 784,772,760,748,736,724,711,698,685,671
| dc.w 658,644,630,616,601,587,572,557,542,527
| dc.w 512,496,480,464,448,432,416,400,383,366
| dc.w 350,333,316,299,282,265,247,230,212,195
| dc.w 177,160,142,124,107,89,71,53,35,17
| dc.w 0
|sintable; int(1024*sin(§))
| dc.w 0,17,35,53,71,89,107,124,142,160
| dc.w 177,195,212,230,247,265,282,299,316,333
| dc.w 350,366,383,400,416,432,448,464,480,496
| dc.w 512,527,542,557,572,587,601,616,630,644
| dc.w 658,671,685,698,711,724,736,748,760,772
| dc.w 784,795,806,817,828,838,848,858,868,877
| dc.w 886,895,904,912,920,928,935,942,949,955
| dc.w 962,968,973,979,984,979,993,997,1001,1005
| dc.w 1008,1011,1014,1016,1018,1020,1021,1022,1023,1023
| dc.w 1024
ben, voilà, et dans X_BUFFER, g des trucs bizzares...
je sais que les tableaux de sinus et de cosinus peuvent s'optimiser, mais ge voulais d'abord faire marcher l'algo, et là... marche pas
chais pas trop où on doit mettre le move.w #10,d1 lsr d1,d0 pour que ça marche...
[edit]Edité par SbiBI le 28-06-2001 à 17:33:31[/edit]