[NEWS] info sur daedalus r11
StrmnNrmn a donc dit, sur son Blog::
"Wow, ça faisait longtemps que je voulais fournir cette mise à jour. J'ai passé du bon temps en Espagne, et après être revenu, j'ai passé de bonne soirée sur Crackdown (jeu Xbox360). Cela m'a fait du bien de faire une petite pause pendant quelques jours.
Depuis ça, j'ai travaillé sur les diverses fonctions que j'avais promis pour la R11.
J'ai parlé un peu au sujet de la mise en tampons de textures, étant le coupable principal pour avaler vers la mémoire pendant l'émulation. Quand j'ai commencé à profiler ceci en détail, je me suis rendu compte qu'un des plus mauvais point pour la consommation de mémoire était le support des texture mirroir de 4 ou de 8 bits sur la palette de textures. Il y avait réellement deux problèmes principaux qui aggravaient le problème.
Premièrement, je n'avais jamais pris en main une palette de texture directement dans Daedalus. Je veux dire, au lieu de convertir une palette de texture de la n64 sur une palette de texture sur la PSP, je l'ai convertit vers des textures 32-bit RGBA. Ce qui veux dire que sur la n64, 64x64 pixels avec une palette de texture de 4-bit prendra 2KiB. En convertissant vers des textures 32-bit RGBA, ça prendra 16KiB - la mémoire est utilisé 8 fois plus.
La deuxième soucis qui compliquait le problème était que la PSP ne supporte pas des textures mirroir. Afin de supporter cette fonction, j'ai du manuellement reproduire et faire la texture mirroir. Ceci signifie qu'une texture 64x64 mirroir le long des axes S et de T sur le n64 deviendra une texture 128x128 sur la PSP.
Le problème principal que j'ai rencontré dû au manque de mémoire était dû à une lourde utilisation des palettes de texture mirroir 4-bit dans certains jeux. Une palette de texture 64x64 4-bit qui prend 2KiB sur la n64 consommerait un énorme 64KiB sur la PSP - 32 fois l'augmentation ! Le problème était que certains jeux employaient des douzaines de telles textures dans une simple liste d'affichage, et la mémoire disponible était rapidement épuisée.
Ainsi, les couples de semaines où je travaillais à récrire les textures de Daedalus, c'était pour le support des palettes de texture 4-bit et de 8 bits directement. Ceci a pris beaucoup plus du temps que je pensais en raison du nombre d'endroits dans le code qui doivent communiquer autour des données de texture directement. J'ai également passé une semaine en essayant de dépister deux bugs horribles (dont tous les deux se sont avérés être des erreurs de logique de ma part).
L'autre bonne nouvelle à propos de mon travail est que non seulement le support des palettes de texture économisait beaucoup de mémoire, mais également un petit bénéfice au niveau des performances. Produire moins de données de texture signifie généralement un peu moins de travail pour le CPU (la mémoire cache est moins utilisée), ainsi convertir des palettes de texture se fait maintenant un peu plus rapidement. Les palettes de textures sont également beaucoup plus efficaces au rendu (la plupart du temps étant donné qu'ils consomment moins de bande passante du bus et peuvent faire une meilleure utilisation de la cache des textures de la PSP.)
L'autre grand gros morceau du travail est d'améliorer la manière dont je manipule les préférences pour chaque ROM. Un des grands problèmes avec l'installation actuelle de Daedalus est que le principal daedalus.ini se compose de détails à la rom spécifique (comme le nom de la ROM, type de sauvegarde, commentaires, etc..) et des préférences définies par l'utilisateur (telle que la synchro de vitesse, désactiver le dynarec etc..). Ceci signifie que je ne peux pas mettre une nouvelle version de daedalus.ini sans éliminer les préférences locales des utilisateurs.
Ce que j'ai fait maintenant est de couper daedalus.ini en deux fichier : roms.ini contiendra les détails spécifique à chaque roms, et une version mise à jour sera distribuée avec chaque version de Daedalus à partir de maintenant. Si je sais que le dynarec cause à certaine ROM de se lancer, je peux ajouter une correction pour ceci dans roms.ini, et chacun pourra en profiter dans la prochaine sortie. Un autre bon exemple est le champ de SaveType ; chaque version de Super Mario 64 emploie 4k EEPROM, et ainsi une fois que ceci est configuré dans roms.ini, elle devrait ne jamais avoir besoin d'être modifié.
L'autre fichier que j'ai créé s'appelle preferences.ini. Ce fichier n'ira pas avec Daedalus - l'émulateur le créera la première fois que vous changez quelques parametres en jouant à une rom, et les mettra à jour avec les changements que vous ferez dans le futur. Ceci signifie que quand vous copiez une version "fraiche" de Daedalus sur votre Memory Stick, la nouvelle version prendra votre fichier existant de preferences.ini et ainsi se rappellera de tous vos paramètres.
Les paramètres que Daedalus pourra se rappeler pour chaque rom sont :
*
Vérification des mises à jour des textures
*
Frameskip
*
Limiter les Framerates
*
Recompilation dynamique (utilisé pour remplacer les paramètres dans roms.ini si vous avez un soucis avec le dynarec)
*
Audio
*
Ajuster la Fréquence
*
Contrôleur
Dans les prochains mois, encore plus d'options seront configurables
Les autres paramètres qui sera stocké dans preferences.ini (que je n'ai pas codé) sont toute les options depuis la page "Paramètres Globaux" - comme la taille du viewport, montrer les zones mortes, choisir d'afficher le framerate ou non, etc...
Donc R11 s'affiche plutôt bien, même si cela prend un peu plus de temps que je ne l'avais prévu. J'ai encore quelques points sur lesquels travailler, mais j'essayerais de vous tenir au courant fréquemment des avancées pour la prochaine version.
source: pspgen
|