1

Salut tout le monde,

Juste un ch'tite question en C standard...
Comment inverser les bits d'un mot?

D'avance merci.

Fred.

There is no spoon.

2

3

quelquechose me dit que tu veut flipper des sprites tongue

4

des couleurs.. mais j'ai trouvé wink

Mes nouvelles structures de données me permettent d'afficher quasiment 3x plus rapidement les images sur TI que la première mouture grin
There is no spoon.

5

C'est bien d'avoir optimisé wink

Le complément à 1 des bits: instruction ASM "not", ~ en C.
Flipping horizontal (mirroring) des sprites: l'algorithme est nettement plus facile et efficace à écrire en ASM qu'à écrire en C, à moins qu'on sache exactement indiquer au compilo ce qu'on veut lui faire faire (utilisation du bit C de CCR, shift right + shift left en boucle)... On peut voir trois niveaux d'optimisation:
* méthode Kevin: décalage bit par bit. Le plus petit code, de loin le plus lent => méthode absente d'ExtGraph.
* LUT de 4 bits: 16 octets pour la LUT. Bon compromis entre vitesse d'exécution et taille => méthode fournie depuis longtemps par ExtGraph.
* LUT de 8 bits: 256 octets pour la LUT. Rapide, mais gros => méthode fournie plus récemment dans ExtGraph, pour les bourrins grin
avatar
Membre de la TI-Chess Team.
Co-mainteneur de GCC4TI (documentation en ligne de GCC4TI), TIEmu et TILP.
Co-admin de TI-Planet.

6

LUT?

7

Auteur de Mode7 Engine pour ti68k
Auteur de F-ZERO for TI68k
Membre de Orage Studio
Mon site perso : http://www.tigen.org/lionela/
Le gite de mes parents à coté de Narbonne :
http://chaletdenis.free.fr/

8

9

Ca m'intéresse, ça... Tu pourrais nous en dire plus, STP wink ?
avatar
Membre de la TI-Chess Team.
Co-mainteneur de GCC4TI (documentation en ligne de GCC4TI), TIEmu et TILP.
Co-admin de TI-Planet.

10

je sais pas à quoi Martial pensait en particulier, mais en tout cas on peut tjs rajouter des étapes de taille linéaires en le nb de bits (Kevin-style) avant la table de taille exponentielle en le nb de bits, ça permet de diviser la taille de la LUT par 2 ou 4 sans trop coûter en vitesse...

// 260 octets, 14 cycles
  move.b table(pc,d0.w),d0

// 136 octets, 30 cycles
  lsr.b #1,d0
  move.b table(pc,d0.w),d0
  roxr.b #1,d0

// 78 octets, 45 cycles
  add.b d0,d0
  scs d1
  lsr.b #2,d0
  move.b table(pc,d0.w),d0
  roxr.b #1,d0
  sub.b d1,d0

// 46 octets, 50 cycles
  moveq #15,d1
  and.w d0,d1
  lsr.w #4,d0
  move.b table(pc,d0.w),d0
  or.b table2(pc,d1.w),d0

// 32 octets, 64 cycles
  moveq #15,d1
  and.w d0,d1
  lsr.w #4,d0
  move.b table(pc,d0.w),d0
  lsr.b #4,d0
  or.b table(pc,d1.w),d0

« The biggest civil liberty of all is not to be killed by a terrorist. » (Geoff Hoon, ministre des transports anglais)

11

OK, merci smile
Comme indiqué plus haut, ExtGraph comporte:
* 260 octets (+ le reste de la routine), 14 clocks;
* 32 octets (+ le reste de la routine), 64 clocks.
La méthode utilisant une double LUT de 4 bits - 46 octets (+ le reste de la routine), 50 cycles - me plaît assez. Mais je ne sais ni si ni quand je l'implémenterai...
avatar
Membre de la TI-Chess Team.
Co-mainteneur de GCC4TI (documentation en ligne de GCC4TI), TIEmu et TILP.
Co-admin de TI-Planet.

12

13

Ben, faudrait au moins que je finisse ce qui traîne depuis plus de deux ans - avant que le prochain modèle de chez TI ne soit largement déployé wink
Mes UE de spécialité et mon stage de M2P sont également dans l'embarqué.
Cependant, j'essaie aussi de faire autre chose pour apprendre - des trucs utiles dans l'informatique moderne, mais qu'on ne voit pas à l'école...
avatar
Membre de la TI-Chess Team.
Co-mainteneur de GCC4TI (documentation en ligne de GCC4TI), TIEmu et TILP.
Co-admin de TI-Planet.