PpHd 2008-11-28 at 07:03pm 2 programmes (lié dans une pack archive).
Le premier qui est relogé mais tout petit. Qui va récupérer toutes les adresses et les tables qu'il va donné
au second programme, taggué read only, sans relogement, qui sera en flash.
Ce que tu me montres est le premier programme.
C'est exactement ça que je fais quand je code pour PedroM uniquement, et ça marche très bien. Mais ça passera pas sous AMS à cause du tag read-only. Comment faire alors ? Le tag va tout faire foirer, vu que PreOS le respecte également sous AMS (à ma connaissance).
Un truc crade, mais qui devrait marcher, serait de ne pas mettre le tag, puis :
- Sous AMS : kernel::LibsExec ou kernel::exec sous AMS (ça sera relogé en RAM, même si la grosse partie ne contient en fait pas de relogement)
- Sous PedroM : kernel::LibsBegin, puis kernel::LibsPtr(partie principale, fonction 0000), puis un LibsEnd, et enfin un jsr ptr0000. Le pack archive ne bougera pas en archive, ne bougera pas en RAM non plus vu que le loader sera relogé et en cours d'exécution, mais c'est crade quand même, non ?
En tout cas, ça devrait marcher comme ça ?
PpHd 2008-11-28 at 10:42pm Non. Mieux vaut faire deux binaires différents.
PpHd 2008-11-29 at 02:33pm Non, car kernel::LibsExec ne relogera pas en ram.
PpHd 2008-11-29 at 06:06pm A cause du flags read only qui assure aucun relogement.
Ok, donc ça va planter lamentablement si jamais fallait en faire quand même.
La solution est donc de créer un handle en RAM sous AMS, d'y copier le code et de l'exécuter. #tripropre#
PpHd 2008-11-29 at 06:43pm #trideuxprogrammesseraitplussimpleetprendraitmoinsdeplace#
Ce que tu peux faire, c'est coder ton programme comme un programme _nostub, puis rajouter un fake stub qui ne fait que lancer le programme sans passer par le kernel: PedroM reconnaîtra le programme comme un programme kernel et le lancera directement en archive, respectant le flag readonly, AMS lancera le programme comme un programme _nostub avec la recopie en RAM automatique.
PpHd 2008-11-29 at 07:53pm Sauf via un lanceur de programme externe. Mauvais idée.