mardi 30 octobre 2012

Quake bug (II)

Voici une nouvelle version de Quake, basée sur la version 68020 (celle sur le CD) puisque la version 68060 a un léger problème...

La version du CD contient donc beaucoup d'instructions émulées par la 68060.library sur un vrai CPU 060. Avec Oxypatcher, c'est très pratique, nous pouvons les voir :

Il faut savoir aussi que lorsqu'une instruction non-présente dans le 060 est émulée par la librairie, le multitâche est coupé : pas cool ça !

Ma nouvelle v1.10 en ôte maintenant beaucoup. Une vérification de Fpu a été aussi ajouté pour éviter un crach du programme si absent ainsi que la stack présente dans le .info ! Plus besoin de lancé un 'stack 16384' avant le jeu dans un cli, ce qui est bien pratique : 

Mais les plus importantes et aussi les plus lentes sont encore là...

Pas de speedup pour le moment : mais même en supprimant toutes les instructions émulées, est ce qu'il sera possible d'avoir un gain de rapidité ?

Voici quelques benchmarks, d'abord en AGA avec mon Apollo 1260@95 en 320x256 avec la version 020 :

Et avec la version 060 buggée sous l'eau :

Bof, pas grand changement. Pourtant tous les sinus et cosinus ont disparus avec cette version spéciale, les gars de PXL avaient bien bossé :

Un autre test en RTG cette fois avec une MK3@72 et sa CyberVisionPPC en 320x240. Ici avec la version 020 :

Et là avec la 060 buggée under water :

La nouvelle version est disponible ici.
 

dimanche 28 octobre 2012

Quake bug (I)

PXL Computers avait publié une version commerciale de Quake 1 sur CD pour 68020+. Peu de temps après, une version spéciale pour 68060 vit le jour en téléchargement.

Or cette version présente des bugs graphiques à certains endroits sous l'eau alors que la version d'origine 020 sur le CD fonctionne parfaitement :

Pour voir les bugs apparaitre, il faut déjà avoir sélectionné une résolution supérieure à 320x200 ou 320x256. Ensuite, beaucoup pensait que ce bug venait des 68060.library installées.

Après plusieurs tests sur une Apollo et une Blizzard avec les MMULibs (v43.1) ainsi qu'avec leurs librairies respectives d'origines (v60.10 et v46.15), les glitchs surviennent tout le temps aux mêmes endroits que ce soit en AGA ou en RTG d'ailleurs... Même constat avec mes librairies débuguées.

Il semblerait donc que ces soucis graphiques soient imputables à la version 060 de Quake, plutôt qu'à une librairie externe.
    

samedi 27 octobre 2012

68060.library (Phase5) (II)

Voici une nouvelle version avec un léger ajustement pour les émulateurs Mac qui ne patchent R_Switch que partiellement. Avec ma précédente version (v46.16), ils plantaient lors du chargement du Finder. Notez que patcher l'exec.library si profondément par les émulateurs n'est pas vraiment autorisé...

Cette version 46.17 contient aussi une optimisation intéressante pour la taille des fichiers. En effet, lorsque trois routines identiques ont seulement une ligne de différence à leurs débuts, il convient de garder l'important corps commun et d'aménager le code de cette façon, avec deux simples bra (équivalent de goto en basic) :

L'air de rien, environ 6 Ko ont été sauvé avec cette très simple astuce sur l'ensemble des routines concernées. Pas de gain de vitesse, par contre !

Quelques autres améliorations diverses, déjà détaillées dans la version Apollo ici même dans les précédents articles.

La nouvelle version de la 68060.library v46.17 est disponible ici et concerne les Blizzard 1260 et 2060, les CyberStorm MK1, MK2 et MK3, ainsi que la CyberStormMK3 PPC.
   

mercredi 24 octobre 2012

68060.library (Phase5) (I)

Après les cartes Apollo et pendant que je suis encore chaud sur ces librairies, continuons tout naturellement avec celle de Phase5 !

Là encore, beaucoup de temps et d'énergie à recréer un source compréhensible et donc ensuite modifiable. Pour vous donnez une idée, le source obtenu fait tout de même 48 543 lignes !

Si je compte bien, il y a eu sept versions de cette librairie :
  1. Apollo
  2. Aros 68k
  3. Draco
  4. GVP
  5. MMULib
  6. Phase5
  7. Quikpak
Que de temps perdu à refaire plusieurs fois quasi la même chose à partir des sources mathématiques Motorola de 1990/91 : les mecs sur PC et Mac, ils rigolent c'est certain...

Ca fait bien sept versions + les deux miennes = neuf : Clair, nous sommes la risée de toute la communauté mondiale informatique. Comment voulez-vous attirer des nouveaux utilisateurs avec ça ?
  
D'ailleurs, fort de ce constat de non partage et de non entre-aide à pleurer, le gros Cosmos sait très bien les décisions qu'il va prendre dans les mois qui viennent...

En désassemblant la librairie, quelques bugs ont été trouvé :

Le "lea L_0_96E(PC),a1" coupe le "bra.l _fpsp_snan" :

Il y a aussi plus loin, un autre "bra.l" qui donne cette fois sur "JL_0_96C" : il s'agit là très certainement de deux bugs humainement involontaires de décalage crées par l'assembleur utilisé (Barfly ?). Les fix ont tout simplement consisté à bien pointer sur "go_fpsp_snan" pour le bra.l et "go_fpsp_snan+2" pour le lea.

Cette librairie est bien plus aboutie et réfléchie que celle des cartes Apollo : en effet, les fonctions trigonométriques ainsi que les opérations entières 64 bit du Kickstart sont bien patchées, ce qui permet l'unification des programmes dont il était question dans le dernier article de ce Blog. De cette manière, un exécutable unique utilisera automatiquement les bonnes instructions du CPU dont l'Amiga est équipé.

Il faut maintenant que les compilateurs C/C++ utilisent les fonctions du Kickstart
lorsqu'un sinus par exemple se présente à eux. Pareil pour les codeurs
assembleur, ils doivent dorénavant appeler ces mêmes fonctions
dans leurs sources, et surtout plus directement un fsin.x

Deux autres bugs ont été débusqués : les deux coshsd étaient patchés par des atansd ! Gloups !!

Pour finir, mon R_Switch_060_Fpu très rapide est intégré dans cette nouvelle version puisque c'est exactement le même que pour les cartes Apollo.

Le débug hunk a été ôté puisqu'il est inutile pour les utilisateurs : environ 50 Ko de gagné rien qu'avec ça !

La nouvelle version de la 68060.library v46.16 est disponible ici et concerne les Blizzard 1260 et 2060, les CyberStorm MK1, MK2 et MK3, ainsi que la CyberStormMK3 PPC.