Le 464 et son basic !
Pour le projet Felgon, je souhaitais que le jeu puisse fonctionner sur un 464 pourvu qu'il dispose d'un lecteur de disquettes. A cette fin, j'ai donc pris garde à n'utiliser aucune instruction spécifique au Basic 1.1 et j'ai fait attention quand j'utilisais des RSX à le faire en utilisant la syntaxe propre au basic 1.1 en passant toujours par une variable lorsque je devais passer une chaine en paramètre.
Je n'avais donc à priori pas trop de soucis à me faire pour la compatibilité avec le premier modèle du CPC et je continuais donc à coder sur émulateur en utilisant malgré tout le basic 1.1. Bien mal m'en a pris car je me suis aperçu tardivement que mon moteur ne fonctionnait pas correctement sur un 464. J'ai donc avec l'aide de RetroPoke, cherché dans tous les sens et j'ai effectivement trouvé un bug, et fait des optimisations. Mais ceci ne changeait rien sur CPC 6128 et ne résolvait rien sur CPC 464 !
J'ai donc pris ma dernière version avec tous les correctifs et évolutions précédents et j'ai supprimé tout ce qui était lié à l'affichage à l'interface du jeu. J'ai placé des instructions pour mesurer le temps de chargement des données d'un de mes fichiers CSV de plus de 5000 octets dans plusieurs tableaux. C'est la base de mon moteur et donc s'il y a une différence de comportement à ce niveau là, ça sera gênant.
Et bien en ayant cette fois-ci pris la précaution de désactiver l'accélération des accès disque dans l'émulateur, j'ai obtenu pour ce gros fichier un temps de chargement de 12.31 secondes sur le basic 1.1 et de 19.62 secondes sur basic 1.0 ! C'est un écart colossal ! Et des fichiers aux alentours de cette taille, j'en ai presqu'une trentaine ! Mais le chargement des données n'est pas le seul problème !
En prenant ce moteur séparé de sa partie graphique, si je laisse interprêter les données dans le tableau, en basic 1.1 tout va bien, il reste sagement bloqué sur la première ligne alors qu'en basic 1.0 bizarrement au bout de 16 secondes, il finit par planter en me disant que j'essaie de redimensionner un tableau existant ! Comment un même programme basic peut-il fonctionner si différemment entre ces 2 versions du basic ?
Ce qui me rassure, c'est qu'au moins sur un CPC 664, ou même sur un 464+, le jeu fonctionnera. Il parait même qu'il est possible de changer la version du basic sur son 464, que ça soit en changeant directement la ROM, ou bien via une extension. La gestion d'un type de données structuré serait tellement un plus pour le Basic, mais franchement, je ne vois pas comment on pourrait faire ça avec une RSX. Une structure de données, c'est pour moi l'équivalent d'un struct en C, ou d'un record en Pascal.
Et l'idée c'est donc de ne faire qu'un seul tableau de ce type d'objet et idéalement un mécanisme automatique pour sauvegarder ces objets dans un fichier binaire pour les charger plus vite. Mais bon, vu le système d'allocation dynamique du basic, je doute que ça soit possible. J'ai bien des idées pour sinon permettre de charger des données binaires directement dans des tableaux en Basic qui seraient fixes, mais ça reste dangereux à mon humble avis.
Il serait peut-être temps que je me remette au Turbo Pascal !
Commentaires
Enregistrer un commentaire