Toutes mes réponses sur les forums
-
Bon,
Pour le swap, je vient de comprendre…
Il fait un swap pour ne pas avoir à faire deux lsl de suite :
lsl.l #8,d1
lsl.l #8,d1après le swap, la partie basse de d1 n’est pas significative pour le divu (d’où le clr.w en commentaire)
Par contre je ne pige toujours pas pourquoi il met -1 dans d2 à la place du 40500
Salut,
Je remonte ce thread, déjà pour dire que ton algo fonctionne très bien (compile du premier coup avec AsmOne), c’est très rapide (quasi instantané), mais aussi pour poser une question.
Je suis tombé sur une routine de Photon de Scoopex pour faire la même chose.;Bhaskara sine approx by Photon/SCX ;note that this is better than std parabolic so no 2% deviation \o/ ;sin x=4x(180-x)/(40500-x(180-x)) ;changed from 180 to 126 steps for 180 degs steps2 =126 ;orig 180 ampl =-1 ;orig 40500 => $1bd0 ampl, -1 => $1080 ampl, 11909=$7ff7 ampl B: lea Sin(PC),a1 moveq #steps2-1,d0 .l: bsr.s BSine move.w d1,(a1)+ neg.w d1 move.w d1,steps2*2-2(a1) DBF d0,.l RTS BSine: ;d0.w=x (0..steps2=0..179 degs) moveq #steps2,d1 sub.w d0,d1 mulu d0,d1 ;x(180-x) moveq #-1,d2 ;fine-stretch amplitude with this. sub.w d1,d2 swap d1 ;*4*16384ampl/2, lsl.l #8,d1 => 4*64ampl ; clr.w d1 ;@only nec at high amplitudes AND high coord/scr rez. divu d2,d1 ;check if rest works as autorandomvalues. ;) RTS Sin: blk.w steps2*2,0 E:
Visiblement la formule de base est différente, méthode Bhaskara : sin x=4x(180-x)/(40500-x(180-x))
Je n’arrive pas à comprendre pourquoi ces deux lignes :
– Pourquoi il met -1 dans d2 ? il est pas sensé mettre 40500 ??
moveq #-1,d2 ;fine-stretch amplitude with this.– Pourquoi ce swap ? De plus je ne comprend le commentaire…
swap d1 ;*4*16384ampl/2, lsl.l #8,d1 => 4*64amplLe registre d1 est utilisé pour faire une division, pourquoi est t-il d’abord swappé ? J’aurai compris qu’il fasse un lsr à la place du swap, mais là avec le swap, il va y avoir des trucs dans la partie haute de d1 ce qui risque de faire du caca avec le divu….pourtant ca fonctionne
Yes, merci, j’ai commencé à lire la doc mais c’est quand même moins intuitif que le debugger d’AsmOne…
Yes, très bien expliqué merci beaucoup Sam…Il me manquait surtout cette formule : 4x(1-|x|/pi)/pi que je ne connaissais pas
Je vais pouvoir m’amuser maintenant 🙂Je vais encore t’ennuyer un petit peu 🙂
Comment tu arrive de ca : 65536*4*(x/512)*(1-abs(x)/512)
à ca x*(512-abs(x)) ?
Désolé ca fait un bail que j’ai pas fait de maths….
Oui c’est cool merci, j’aurai pas eu l’idée de voir le truc comme ca 🙂
Excuse moi je ne comprend pas cette phrase :
« Ta table fait 1024 entrées pour 0..2PI, donc pi (en x) vaut: 512, et 1 en y est 65536. »
Pourquoi tu remplace pi par 512 ? -> C’est bon j’ai compris 🙂
Wow impressionnant 🙂
Bon je vais devoir digérer tout ca alors…
Merci beaucoup
Pour info j’ai touvé ca aussi, c’est intéressant : https://amycoders.org/tutorials/sintables.html
Salut Sam,
On va dire que j’aimerais générer une table de 1024 valeurs de sinus dont les valeurs vont de 0 à 65535 (une table de word donc)
Flottant ou point fixe, peu importe….une approximation devrait suffire pour un sine scroller…
Je viens de tomber là dessus justement : https://amycoders.org/sources/sinegensource.html
Merci 🙂
aaaah merci l’ami !! J’avais pas vu ce truc là…
Et pour ma carte de 8go t’a une idée ?
NdBigdan : pas deux posts à la suite SVP, il suffisait d’éditer ton post précédent.
ah bon ?
Je laisse WinUAE tourner ? Ca peut durer combien de temps ?Je viens de réessayer avec une carte CF de 4go mais j’ai le même problème : Volume is validating…
J’ai trouvé ce tuto http://obligement.free.fr/articles/installation_amigaos_cf_disquedur_winuae.php
Mais j’ai pas AmigoOS 3.9 … vous savez pas comment faire autrement svp ?