J'ai tout gardé
histoire d'être conforme aux sets japan et US
J'ai utilisé le même système pour les 3
!
Salut,
Par curiosité, j'ai regardé comment tu avais fait.
![Undecided :-\](http://www.gamoover.net/Forums/Smileys/guntar/undecided.gif)
Du coup tu as utilisé le CPU pour faire les multiplications.
Par contre pourquoi avoir quand même envoyé les valeurs au PPU ? exemple :
000023A6: 33C0 0080 0140 move.w D0, $800140.l
000023AC: 33C1 0080 0142 move.w D1, $800142.l
000023B2: 3201 move.w D1, D1
000023B4: 3201 move.w D1, D1
000023B6: C0C1 mulu.w D1, D0
Tu pouvais faire des nop à la place des move.W D0 et move.W D1 ?
Car le mulu.w prends au moins 70 cycles machine, autant les économiser avec des nop sur les autres opérations ?
![Wink ;)](http://www.gamoover.net/Forums/Smileys/guntar/wink.gif)
Car lorsque l'op est faite dans le PPU, elle est beaucoup plus rapide.
En fait le problème avec la configuration du PPU de king of dragon est que le résultat des multiplications est accessible à l'envers que la config par défaut du PPU.
Dans l'un on accède en LSB first, dans l'autre en MSB first.
Donc, lorsque le CPU lit le résultat en 32 bits :
000023B2: 2039 0080 0158 move.l $800158.l, D0
Il vient en fait lire à l'adresse $800158 puis ensuite en $80015A pour recréer une valeur en 32 bits.
Mais comme dans la config par défaut le MSB et LSB sont inversés, on ne peut pas lire juste avec un move.l
Il faudrait faire un swap juste après, mais bon, on ne peut pas intercaler une opération dans le code.
De mon côté ce que j'ai fait, c'est créer des subroutines à un endroit libre pour pouvoir faire cette opération tout en continuant à utiliser le PPU pour faire les multiplications en restant relativement proche du fonctionnement d'origine.
A bientôt