lundi 23 septembre 2019

AmiQuake2 1.15 RTG

Le code spécifique RTG a été rajouté au source 1.15 de la version AGA, plus pratique d'avoir un seul listing générant au choix la version voulue...

Dans cette nouvelle 1.15 RTG, ma fantastique _CopyToScreen a été inséré bien évidement. N'en déplaise à Anomyme qui me critiquait en commentaire, cette routine d'origine toute pourrie de gcc a bien vite dégagé...
     
Comme d'habitude, tout est disponible ici de façon gratuite...
    

mercredi 11 septembre 2019

_TransformVector (AQ2)

Un nouveau mini cours à but éducatif avec la petite routine utilisant cette fois la Fpu _TransformVector d'AmiQuake2 et même de Quake 1 puisqu'elles sont identiques :

Commençons déjà par _DotProduct.

La version produite par gcc est catastrophique comme bien souvent, avec un code pesant 60 octets :

Une simple petite loop toute conne et nous voilà avec du code moins obèse, à maintenant 34 octets, économisant ainsi du précieux code cache ! Deux versions sont possibles avec un bne et un bcs, ce dernier étant bien utile pour la suite... Le fmove.s avec le d0 sera arrondi automatiquement à zéro par le processeur. Bref, rien de bien compliqué.

Bien sûr, les minuscules routines comme cette _DotProduct doivent être inlinées, et voici une routine trouvée sur le net :

Routine intéressante, mais me chagrinant tout de même : les deux fmovem.x sont couteux en cycles Fpu et la routine dans son ensemble pèse tout de même 148 octets.

Voici donc une autre approche en utilisant toujours les boucles :

Résultat : 70 octets avec une belle cerise à la fin !

Là encore tout est très simple, il s'agit de grouper trois loops en changeant d'in dans a1 à chaque fois. Le barillet dans d0 coordonne le tout :
  1. %011 = les 3 loops du _DotProduct pour _vright
  2. %1 = la 2ème loop pour _vup
  3. %011 = les 3 loops pour _vup
  4. %0= accès à la 3ème loop pour _vpn
  5. %11 = les 3 loops pour _vpn
La très belle astuce est dans le dernier bne utilisant toujours le même code condition que le précédent bcs. Bref, les deux horribles fmovem.x ont disparus et la routine dans son ensemble est bien plus mince.

Voilà, j'espère que cet exemple vous donnera envie d'apprendre l'assembleur 68k. J'avais d'ailleurs commencé des cours ici qui vous donneront quelques bases.
      

lundi 2 septembre 2019

c2pbest_jd.asm fix

La routine c2p originale d'AmiQuake2 AGA choisie par NovaCoder était celle d'un certain Aki Laukkanen (du fichier c2p8_040_amlaukka.s).

Or, le célèbre Jim Drew affirme que la sienne est la plus rapide pour 040/060.

Petit soucis toutefois une fois intégrée, ça bug :

Après une journée de recherche, j'ai trouvé et fixé le bug.

Le nouveau fichier est dispo ici !