4Fermer6
deleted2Le 12/04/2013 à 23:22
En fait, il est étonnant que PreOS soit designé pour permettre l'exécution en ROM. Si le but premier est en effet de récupérer des données en ROM sans passer par la RAM, très bien. C'est très bien vu. Mais à ce moment-là, on a juste besoin d'un pointeur sur les données. Et le seul moyen de récupérer ce pointeur par ce biais à une époque était un relogement. PreOS a fait mieux : kernel::LibsPtr. On évite le relogement, et le kernel garde le travail de fournir le pointeur.
J'ai exploité ça dans PedroM, car avec la ROM déprotégée en exécution, on peut alors écrire des programmes sans relogements exécutable en ROM. Gros progrès grâce à PedroM.
Mais du coup, impossible d'avoir une compatibilité binaire entre un programme designé pour PedroM et un pour AMS, car ça va planter à la première instruction de _main, et ça c'est très dommage.

La solution qui me paraitrait la plus propre :
- ne pas tenir compte du flag ro sous AMS, dans le cas d'un kernel::exec, kernel::LibsExec ou kernel::LibsCall, car nécessairement ça va planter, on le sait d'avance.
- laisser le programme en ROM s'il est ro lors d'un kernel::LibsPtr, ou d'un relogement à résoudre, car ça ressemble tout à fait à de l'accession de données, pas de code.
Cette solution serait totalement transparente pour les anciens programmes, dont les utilisations de libs de données sont très probablement basées sur des relogements.

Donc pour tourner une lib readonly (donc designées spécifiquement pour PedroM) sous AMS, un programme n'aura qu'à appeler la lib en tant que programme, qui en s'auto-référençant à nouveau dans _main, ne sera pas dérelogée en RAM à l'exit, et donc sera utilisable de manière transparente en RAM par le programme, qui croira de bonne foi que la lib est peut-être en ROM.

Ca demande juste un code d'init dans un programme "pedrom" à écrire, et un simple kernel::exec pour chaque lib utilisée dans les programmes "PedroM-only". L'overhead est donc vraiment minime pour un tel programme, s'il veut également tourner sous AMS.