Jump to content

SebRmv

Level1
  • Posts

    1,553
  • Joined

  • Last visited

  • Days Won

    1

Posts posted by SebRmv

  1. Alors pour renforcer encore un peu mon image de "macro man" :D

    voici le random next au gpu!!

     

    ça complète le code 68000 que j'ai donné au-dessus

     

    un usage typique est

     

    gpu_random_next_init r0

    gpu_random_next r0,r1,r2,r3

     

    ici, r3 contient la nouvelle valeur pseudo aléatoire

     

    Seb

     

    .macro  gpu_random_next_init
           ;; \1 un registre
            movei   #random_seeds,\1
    .endm
    
    .macro  gpu_random_next
           ;; \1, \2, \3, \4 quatre registres
           ;; \1 doit pointer sur random_seeds
           ;; la macro "gpu_random_next_init \1" sert a ca!
           ;; (en fin de macro, il pointe encore la)
           ;; initialiser avec "gpu_random_next_init \1"
           ;; le nouveau nombre pseudo-aleatoire est dans \4
            addq    #RANDGEN_J*4,\1
            moveq   #RANDGEN_K,\2
            load    (\1),\4
            addq    #(RANDGEN_K-RANDGEN_J)*4,\1
            load    (\1),\3
            subq    #4,\1
            add     \3,\4
    .copy_seeds_\~:
            load    (\1),\3
            addq    #4,\1
            store   \3,(\1)
            subq    #1,\2
            jr      ne,.copy_seeds_\~
            subq    #8,\1
            rorq    #RANDGEN_R,\4
            addq    #4,\1
            store   \4,(\1)
    .endm

  2. d'accord donc c'est le load (r14+rn) que j'avais mal interprété

     

    En fait, c'est la phrase "Otherwise like instructions 43 and 44" qui m'a fait extrapoler un peu :whistling:

     

    Seb

  3. Alors autre question en rapport

    (puisque mes index en registre amenaient à cette situation)

     

    Que fait la Jag en cas d'accès non alignés :

    1- en mémoire interne

    2- en mémoire externe

    ??

     

    Pour Project Tempest 0.95

    les accès mémoire non alignés

    1-en mémoire interne : plantent PT

    2-en mémoire externe : font quelque chose (ne plantent pas toujours en tout cas)

     

    Pour la 0.5, les deux font quelque chose (ne plantent pas).

     

    Seb

  4. Le "load (r14+rn),r5" est différent de "load (r14+n),r5"

    dans le premier cas :

    le load lit la valeur a l'adresse r14+rn, dans le second cas, le load lit ce qui est a l'adresse r14+4*n.

    Car n est un offset en long word et non en byte.

    Si tu reprends l'idée de l'adressage de tableau, tes cases de tableau étant en long word tu accedes a la seconde valeur en allant a l'adresse X+4*1.

    C'est ecrit dans la doc :

    "The offset is in long words, not in bytes, therefore a divide by four should be used on any label arithmetic to give the offset."

    ;)

     

    d'accord

    donc c'est le load (r14+rn) que j'avais mal interprété

    merci je comprends mieux alors

    (mais c'est quand même un peu bizarre cette histoire, je ne comprends alors pas pourquoi ça se comporte comme je veux avec les load (r14+rn) alors que je divisais par 4 les valeurs dans rn)

     

    Seb

     

    PS: de toute façon, j'ai changé mon fusil d'épaule et réécrit le code autrement du coup!

  5. Seb,

     

    C'est pas juste parceque le load (RN+n),RN prend le 'n' comme un index de LONG ?

     

    Me suis déjà fait avoir...

     

    oui, c'est ce qu'il y a écrit dans la doc

    moi je comprends donc que si j'ai un tableau de longs mots (tableau aligné évidemment)

    et que r14 pointe au début

    je peux accéder au i-ème élément avec (r14+i)

     

    mais est-ce que ça ne serait pas plutôt (r14+4*i) ?

     

    Seb

  6. Super :huh: D'ou l'imcompatibilité avec certains codes, assemble a la main (dc.w $xxxx) (Heuresement que c'est un Risc) ;)

     

    GT Artisanal dans mon code :blink:

     

    non, je pense que tu m'as mal compris

    je disais juste que pour PT, ma transformation

    de code est valide (comme je m'y attend quoi :D )

     

    Seb

  7. A première vue, ton code est tout a fait juste, MadMac aurait peut ètre du mal a assembler le 'load (r14+n),rn' et le 'load (r14+rn),rn' doit fonctionner, tu as essayé de déssassembler ton code pour voir ce que MadMac a gribouillé ?

    GT Curieux ;)

     

    oui, ça avait l'air d'être bon de ce coté là

     

    j'ai aussi oublié de dire que Project Tempest émule mal

    la Jaguar (on le savait!) puisque ces deux codes sont

    équivalents sous PT!

     

    Seb

  8. J'avais dit que je ne dirai plus de mal du GPU mais là!!

     

    j'ai litéralement ce bout de code au milieu d'une routine au GPU (devinez laquelle!)

     

    ...

    moveq #RANDGEN_J,r4

    load (r14+r4),r5

    ...

     

    maintenant, si je remplace donc ces deux lignes par:

     

    ...

    load (r14+RANDGEN_J),r5

    ...

     

    alors là, tout foire! :blink: (enfin, ça ne se comporte mais alors plus du tout de la même façon)

    si quelqu'un a une explication, je prends!

     

    Seb

  9. En compilant avec les librairies graphiques sous gcc ça ne fonctionne pas ? avec la libjpeg, la libtiff, libpng, libpng, libtga... je ne m'y suis pas lancé, mais ça devrait fonctionner, non ?

     

    hop là, bon, je viens de voir la réponse d'Azrael...

    la librairie camlimages utilise effectivement libjpeg, libtiff, libpng, ...

    à noter que je peux aussi fournir (à la demande) un binaire qui marchera (je l'espère) sous linux (mandriva 2006 mais peut être les autres aussi)

    je peux aussi compiler une version "bytecode" (plus lente) qui marchera probablement sous cygwin aussi

     

    et puis, en fait, je voulais surtout dire que j'avais fait un update qui permet maintenant de traiter les modes palette

     

    Seb

  10. A noter que s'il y a quelqu'un de motivé pour ce projet maintenant, je veux bien l'aider à se familiariser avec les petites bibliothèques que j'ai fait pour Atomic... en parlant de ça, j'ai corrigé un bug dans la création des sprites zoomés et j'ai ajouté quelques macros qui feraient rougir cts :lol:

     

    Voili voilà

     

    Seb

  11. Salut,

     

    comme moi aussi j'ai eu besoin de faire des nombres aléatoires, je vous propose ce petit algo (ça s'appelle ranrot quelque chose)

    Ca donne des résultats pas mal :D

     

    Pour initialiser, appeler random_init (ou mettre les graines que vous voulez dans le tableau), ensuite random_next calcule un nouvelle valeur sur 32 bits...

     

    Enjoy!

     

    Seb

     

    RANDGEN_J       equ     3
    RANDGEN_K       equ     7      ; k > j
    RANDGEN_R       equ     5
    
            .text
            .68000
    random_init:
            move.l  #random_seeds,a0
            move.w  VC,d1
            swap    d1
            move.w  HC,d1
            moveq   #RANDGEN_K,d0
    .init_seeds:
            eor.l   #$31415926,d1
            move.l  d1,(a0)+
            ror.l   #8,d1
            ror.l   #5,d1
            move.w  VC,d2
            swap    d2
            move.w  HC,d2
            add.l   d2,d1
            dbf     d0,.init_seeds
            rts
    
    random_next:
            move.l  #random_seeds,a0
            move.l  RANDGEN_J*4(a0),d0
            add.w   #RANDGEN_K*4,a0
            move.l  (a0),d1
            moveq   #RANDGEN_K-1,d2
    .shift_seeds:
            move.l  -(a0),4(a0)
            dbf     d2,.shift_seeds
            add.l   d1,d0
            ror.l   #RANDGEN_R,d0
            move.l  d0,(a0)
            rts
    
            .bss
            .long
    random_seeds:
            ds.l    RANDGEN_K+1

  12. Salut,

     

    avec GT, on va bientôt rendre disponible la routine de collision "au pixel près" écrite au GPU. Elle marche pour les sprites 16 bits mais ne gère pas les champs PITCH ou REFLECT. La méthode utilisée est inspirée de l'idée de Patrice Mandin sauf qu'elle ne construit pas de masque explicitement :yes:.

     

    Cela dit, je suis persuadé qu'on peut faire une routine plus générale au blitter qui marcherait dans tous les cas de figure (1 bit -> 32 bits, avec gestion de PITCH et FIRSTPIX). L'idée serait de faire générer au blitter le masque (avec un des deux modes de comparaison du blitter). Ensuite, on pourrait probablement refaire le même genre de trucs avec le deuxième sprite mais cette fois en utilisant le mode "collision detection" (qui porte surement bien son nom :D )

    Bon, je ne sais pas si on gagnerait en vitesse par contre, et je ne sais pas non plus si ça serait utile en pratique d'avoir la routine "la plus générale" possible.

     

    Et puis bon, 'faut comprendre notre ami le blitter avant ça :wacko: .

     

    Seb

  13. Avoir une personne qui s'occuperait que de ca, ou presque. On peut s'afficher communauté francophone mais cela n'empeche pas d'acceuillir nos collègues.

     

    Perso j'ai vaguement discuté avec un passant sous le pseudo de TXG/MNG, il serait l'auteur du cinepack avec le trailler de nutty (?) et de doom 3, il s'y connait un peu en technique, quelqu'un le connait bien ? Ou quelqu'un a une autre personne a proposer ?

     

    GT ;)

    forcément, si t'as pas de JagCD, ça te dit rien :D

    bon, apparemment c'est pas un codeur, mais il est plutôt de bonne volonté

    (c'est lui qui est à l'origine de CD encrypté avec Atomic...)

    Il a un kit dév CD et sait donc faire du Cinepak...

    Je l'ai invité à s'inscire ici vu que ça avait l'air de l'intéresser de faire des trucs sur la Jag'

     

    Seb

     

    PS: http://www.u-235.co.uk/index.php?screen=downloads&part=txgcd

    pour le CD en question

  14. Salut,

     

    A tous ceux qui étaient présents hier soir sur la discussion du GPU,

    oubliez l'hypothèse de bug qu'on a soulevé, c'est pas du tout ça!!

    Pardon GPU, je ne douterais plus jamais de toi <_<

     

    Le problème était que je lisais un mot long à une adresse non alignée

    sur 32 bits (mais sur 16 bits)... du coup, en rajoutant un nop, ça corrigeait

    ce problème!

     

    Cette macro peut être utile dans MadMac:

     

    .macro align32nop

    .if (*-\1)%4 == 0

    .print "Adding padding nop"

    nop

    .endif

    .endm

     

    et c'est bizarre, l'* n'a pas l'air d'être l'adresse du nop

    mais l'adresse du nop +/- 2

    ce qui explique le == 0

     

    Seb

     

     

    et c'est bizarre, l'* n'a pas l'air d'être l'adresse du nop

    mais l'adresse du nop +/- 2

    ce qui explique le == 0

     

    non, en fait, c'est juste madmac qui est pourri et qui ignore superbement

    le == 0

    donc la condition est vrai si (*-\1)%4 est non nul

    c'est à dire = 2 si on suppose que * et \1 sont toujours pairs!

     

    Seb

     

    la bonne macro est donc

     

    .macro align32nop

    .if (*-\1)%4

    .print "Adding padding nop"

    .print (*-\1)%4

    nop

    .endif

    .endm

  15. merci !

    je viens de regarder et c'est effectivement le même code que j'utilise, c'est vraiment très étrange !

     

    en fait, la seule différence, c'est le move.l #vbl_flag à la place du lea mais je crois pas du tout à cette hypothèse

  16. ouaip, les sources très très bientôt disponibles...

     

    sinon, je compile avec les flags suivant pour MadMac: -fb -u

    pour Aln: -n -w -rq -a 4000 x x

     

    Seb

     

    bah voilà, c'est fait... rendez-vous sur le site des Removers pour les sources!

     

    Seb

  17. ouai, c bizarre.

    car si SebRmv utilise la même routine de vbl, je vois pas ce qui cloche...

    L'emulateur ne doit pas aimer quelque chose que tu fais a coté peut être ? :huh:

    Mais quoi....

    Il faudrait voir le code de SebRmv qui fonctionne sur emulateur qui utilise les même routines VBL pour voir la différence :)

     

    ouaip, les sources très très bientôt disponibles...

     

    sinon, je compile avec les flags suivant pour MadMac: -fb -u

    pour Aln: -n -w -rq -a 4000 x x

     

    Seb

  18. Je viens de passer sur Jaguar Sector II, un sujet a été ouvert pour parler de la version Jag que SebRmv a faite, voila une recopie :

     

    WOW, that's looks better than a Starcat game Who mad the game?

     

    SebRmv si tu connais pas Starcat, c'est un allemand qui en attendant de sortir un grand jeu d'aventure baptisé Eerival il sort plein de bricoles (Mastermind, etc...) et d'un point de vue général, la phrase précédente est un très grand compliment.

     

    J'ai écrit comme toi il venait de toi, histoire de remettre les choses a leur place, si tu est ok fais signe qu'on le place en news car sinon ton jeu aura fait le tour du monde avant meme d'avoir fait un release public ici !!

     

    GT

     

    Sympa le compliment... bon, pour avoir reçu et essayé Bomb Squad hier, je crois que ça mérite la comparaison en tout cas B)

     

    Pour la news, j'ai ouvert un topic et j'imagine qu'il faut que RaZ le débloque maintenant (ou alors je me suis vautré en créant la news)

     

    Seb

×
×
  • Create New...