Jump to content
Jagware

gloky

Members
  • Content count

    1
  • Joined

  • Last visited

Posts posted by gloky


  1. Salut tout le monde, HALLUCINATOIRE !!! Le Gpu est un truc de FOU !!!! On savait que certaines sequences d'instructions sont a eviter car resultats aleatoires, mais alors la, le Gpu a un principe de fonctionnement que je comprends pas !! Premier exemple :

     movei #140,r3	    ; Met 140 dans le reg r3

    moveq #6,r5 ; Met 6 dans le registre r5

    movei #$f033f8,r4 ; Met la valeur $f033f8 (Adresse) dans r4

    Boucle:

    ma boucle principale (15 lignes)

    ---------

    subq #1,r5 ; On soustrait 1 a r5

    si R5>0 on reboucle sinon on continue a la suite</div>

    et bien vous savez quoi ? Ce code ne fonctionne pas !!! Boucle sans fin, j'ai cherché un moment et en mettant r5 avant movei #140,r3 cela fonctionne !!! Je sais que le Gpu 'pipe line' mais a ce stade !!! On dirait presque un cache !! On a l'impression qu'il recharge R5 avec la valeur 6 d'ou ma boucle sans fin.

    La sequence d'instruction suivante est a mettre dans les annales du Gpu, SI SI !!

     

     

    [code] load (r7),r4 ; Charge le X1

    load (r6),r3 ; Pareil mais pour le X2

     

    Boucle :

    sub r3,r4

    puis une dizaine de ligne et :

    addq #4,r7

    addq #4,r6

    load (r7),r4 ; recharge X1

    load (r6),r3 ; recharge X2

     

    Puis vint une boucle de synchro et après on reboucle a 'boucle'</div>

    Ce code fonctionne MAIS si vous supprimez un 'load' dans la boucle, le code fonctionne encore !! On a l'impression que le Gpu est hanté et joue avec vous !!

    C'est dur a croire mais la j'hallucinais un moment, car je voulais faire un traitement sur r3 et cela ne fonctionnait pas, pour résoudre le problème il faut insérer des Nops après les 'load' avant la boucle !!! Quit dit mieux !! On a l'impression que le Gpu utilisait le 'load' avant la boucle et rechargeait R3, faut que je calcules l'écart necessaire entre les instructions, mais on peut assimilé cela a un cache, mais joueur le cache !!! Sinon une solution, faites de grosses boucles !!

    GT Heureux, j'ai pu debbuger !! :yes:

     

    pour le premier code, je pense plutot que r5 doit valoir 0 a l'entre de la boucle et quand ca reboucle ca passe a -1 et sur 68000 ca s'arrete au bout d'un moment mais ici le registre est plus grand en nombre de bit donc ca dure tres longtemp

×