vendredi 16 août 2019

_CopyToScreen (AQ2)

Quand je mourrai, j'espère qu'il restera mon blog Amiga ! En attendant, voici quelques unes de mes techniques d'amélioration de code, que mes expériences servent à d'autres, serait dommage que tout cela se perde...

Rassurez-vous, les 68k sont éternels, car trop bien. Les V2 et V4 ont été développées pour empêcher tout retour des vrais CPUs mythiques, pomper l'énergie de la communauté Amiga Classic, et bien sûr mettre leur éventuel futur sous contrôle des franc-maçons/illuminati de l'Apollo Team. Le tout pour obliger l'achat de leur carte V2 et ainsi forcer les acheteurs à devenir complice de cette trahison qui ne mènera nulle part, tout comme d'ailleurs MorphOS, OS4, Aros... Des voies sans issue voulues depuis le tout début...

Bref, voici la routine RTG d'AmiQuake2 générée par gcc :
 
L'air de rien, il y a à faire. Commençons par les disgracieux link a5/unlk qui peuvent aisément être remplacer par des accès directs à la pile. Il suffit d'inverser en commençant par la fin :

Ensuite, les deux move/muls peuvent être remplacés par un move.l #320x200,d0 puisque nous savons que l'unique écran RTG disponible pour le jeu fait 320x200 pixels. Récupérons aussi le pointeur de _LockBitMapTagList sur la pile pour éliminer définitivement a5 :

Ensuite, il est tout à fait possible et conseillé d'inliner le _CopyMemQuick et de ce fait supprimer le chargement de l'ExecBase dans a6. Ensuite, le __CyberGraphXBase,a6 peut être éliminé. d2 également, plus besoin puisque le résultat d0 est toujours dans d0 :

Voilà le résultat des courses avec tout de même 34 octets de code à la poubelle. Et avec le _CopyMemQuick supprimé qui permet de gagner encore de nombreux octets :
  
Cette routine est maintenant épurée de tout l'inutile. Il est possible peut-être de gagner quelques cycles en préloadant 4 lignes de data cache pour ensuite faire les copies. J'ignore si le gain est négligeable ou important :

Alors, dans le code réel, est-ce qu'un speed up est observable pour l'oeil humain ou dans quelques benchmarks ? Difficile de répondre à cette question, car de nombreux paramètres software et hardware entrent en jeu. Le principal but de cet article est aujourd'hui ici surtout pédagogique...
   
EDIT : mon testeur me donne un nouveau screenshot avec un gain de seulement 0.1 fps avec cette nouvelle routine, ce qui est fort peu ! Et même résultat avec le preload :

Sa config : A3000T avec CyberStormPPC 060@72 et Prometheus avec Voodoo3
  

dimanche 11 août 2019

AmiQuake2 1.14 RTG

NovaCoder avait stoppé la version RTG d'AmiQuake2 à la version 1.06 mais avait continué sa version AGA jusqu'à la 1.14 !

Voici donc une nouvelle 1.14 RTG, basée sur l'AGA avec quelques modifications.

Voici quelques benchmarks d'un A3000T équipé d'une CyberStorm MK3, d'un Prometheus Zorro 3 et d'une Voodoo 3 avec la version 1.06 :
    
Maintenant avec la version 1.14 :
  
Merci à James sur a1k.org pour son aide...

Disponible ici