Bonsoir à tous
Voila les dernières nouvelles d'OS9.
Je me suis attaqué à une tache énorme.
Et pour rien vous cacher, je suis assez fière du travail effectué (Je rentre encore dans mes chaussures, donc ca va
)
Dans mon TO9+, j'ai remplacé le 6809E, par un Hitachi 6309.
Le but étant bien sur de gagner en vitesse.
Mais pour pouvoir faire cela il me fallait deux choses :
- Un assembleur qui soit capable de générer du code 6309
- un émulateur qui soit capable de gérer le 6309
Et donc j'ai fait les deux choses en parallèle :
- D'abord je vérifiais que l'assembleur générait bien le code souhaité avec les nouveaux CodeOp
- Ensuite, je codais l'instruction sur l'émulateur, et je la testais.
Il a fallu que je fasse les codes un par un avec, bien sur la prise en compte des différents mode d'adressage.
Ca m'a pris du temps mais maintenant c'est chose faite.
Je suis donc capable de générer un noyau OS9 avec la prise en compte des nouvelles instructions du 6309.
Grâce à ça j'ai pu commencer à optimiser mes drivers bas niveau d'OS9.
Et grâce à l'émulateur, j'ai pu constater que ça marche bien.
Mais bien sur, les tests n'étaient pas fini.
En effet le 6309 fonctionne dans 2 modes :
- Le mode émulé, ou il gère tout comme un 6809, mais avec des instructions supplémentaire
- le mode natif, ou des spécificités supplémentaires sont disponible (Gestion des IRQ différentes)
L'avantage du mode natif, c'est qu'il y a, en moyenne, un cycle de moins par instruction. Donc on y gagne en vitesse.
Et donc j'ai mis le 6309 en mode natif au démarrage d'OS9, et j'ai tenté de voir ce que ça donnait.
Et c'est la que (pour parler vulgairement) j'en ai chier
Déjà au départ je n'avais rien. Il fallu comprendre pourquoi.
Grâce à l'émulateur j'ai pu voir que c'était quand l’accès au disque virtuel se faisait.
J'ai donc vite compris que les offsets utilisés dans le driver RBF était en dure.
Alors qu'il aurait fallu utiliser des offsets définis dans des fichiers d'assemblage d'OS9 qui sont fonction du mode choisie.
Une fois le code corrigé, OS9 démarrait.
Mais la partie n'était pas fini. J'avais un plantage aléatoire d'OS9.
Et la j'en ai vraiment bavé. J'y ai passé tout mon WE de Pâque dessus.
Il a fallu que j'ajoute des moyens de tests à l’émulateur.
Il a fallu que je fasse afficher toutes les lignes assembleurs exécutées
Il a fallu que je fasse afficher tous les registres du 6309 pour chaque CodeOp exécuté
Il a fallu que j'initialise les registres spécifique du 6309 à des valeurs spécifiques.
Il a fallu faire stopper l'émulateur quand le code exécuté commençait à faire des choses bizarres.
Pour enfin m’apercevoir que les valeurs de ces fameux registres 6309 étaient corrompues.
Mais le pire c'est que le plantage n'était pas immédiat.
Il arrivait après 2 voir 3 RTI, et n'arrivait pas toujours au même moment d’exécution d'OS9.
Il a fallu donc remonter les lignes assembleurs, remonter la pile système pour comprendre ce qu'il se passait
Puis après il fallait mettre le doigts sur le code fautif.
Et j'ai trouvé à 2 endroits du noyau OS9 (sur la gestion des process (fork & sleep)) que la pile était initialisée avec des méthodes qui ne prenne pas du tout en compte le mode natif.
Le pire ont été ces deux lignes :
- pshs u,y,b,a : pour mettre les registres PC,U,Y dans la pile
et quelques lignes plus loin
- pshs u,y,b,a : pour mettre les registres X,DP,B,A,CC dans la pile aussi
Arrivé a comprendre que ces 2 instructions initialisaient la pile pour le futur process à vraiment été une super galère.
Mais maintenant que les 2 points noirs ont été identifiés et corrigés, j'arrive à faire tourner OS9 sur un 6309 en mode natif.
Mais attention, cela n'est que sous émulateur.
Bien sur reste encore le test réel : OS9 sur un VRAI TO9+
Il m'est déjà arrivé d'avoir du code OK sous l'émulateur et KO en vrai.
Mais généralement ce genre de soucis arrivait sur de la gestion de périphérique car le circuit concerné était mal émulé.
C'est ce qui m'était arrivé avec le 6846.
Voila donc mes dernières péripéties, ainsi que mes derniers avancement.
Je crois que j'ai encore pleins de cycles à gratter grâce au 6309.
Affaire à suivre
Jacques
[Edit] Je viens de voir que la fonction en cause est celle que j'ai posté le 7 Mars : FNProc