

Ca doit etre faisable mais faut vraiment se prendre la tete dessus j'ai l'impression

move.l 200,a0 move.l $D*4(a0) jsr (a0)
move.l (a7),a0 move.w -2(a0),d0 and.w #$0FFF,d0
move.l usp,a0 move.w -2(a0),d0 and.w #$0FFF,d0
newLine1010: pea (a0) ; Push a0 lea FirstRun(Pc),a0 ; Test if we are under kernel final undo cmpi.b #-1,(a0) beq CrashHandler ; Yes => Crash Handler move.l 6(sp),a0 ; The crash address cmp.w #$A000+161,(a0) ; Test if it is 'Too long Exec Program' beq.s ERThrow_return cmp.w #$A244,(a0) ; Test if 'Illegal Program Reference' bne.s ERTHrow_no AMS207_P1 cmpi.b #$F3,(a3) ; Check if is an ASM program bne.s ERTHrow_no ; On AMS 2.08, it isn't a3 but a2 (That's why it is patched) AMS207_P2 cmp.l #$200000,a5 ; If the variable is archived, we MUST NOT SKIP THE ERROR bge.s ERTHrow_no ; Otherwise, we crash the calc (It tries to execute archived programs !) ERThrow_return addq.l #2,6(sp) ; Skip the illegal instruction move.l (a7)+,a0 ; Restore a0 rte ; We return to the program, skipping the illegal ERTHrow_no move.l (a7)+,a0 ; Restore a0 OldER_throw jmp ($0).l ; Jump to old ER_throw
spectras :
TIOS se moque royalement de savoir s'il est en mode superviseur ou non.
De toutes façons, il n'y a pas de différence fondamentale entre les deux modes. La pile fonctionne de la même façon même si c'est pas la même, et TIOS n'utilise pas les instructions superviseur hors des fonctions prévues pour, donc y'a pas de raison de changer.
-Chaque module qui veut en appeler un autre repasse la main au gestionnaire, afin que celui-ci vérifie si le module est déjà présent en RAM ou non (gérer tout ça avec une pile d'appels, c'est encore vague dans ma tête mais je pense que c'est faisable). Si le module n'est pas en RAM, il le recopie: il peut facilement connaitre son emplacement s'il a l'adresse par le n° de fonction dans la lib (merci le kernel), ainsi que sa taille (peut par exemple être stockée au début, sous forme (label_fin_module - label_début_module)).
-Toutes les allocations mémoires se font aussi par des fonctions du gestionnaire, afin que celui-ci libère si nécessaire de la RAM en effaçant autant de modules que
nécessaire, sauf le module courant (voire ceux marqués inneffaçables... à voir).
-Impossibilité pour chaque module de conserver des données, vu qu'il peut être déchargé à tout instant. Le launcher doit donc s'occuper de créer un handle, et de réserver un registre d'adresse constamment pour que chaque module ait de la place pour aller écrire ce qu'il veut (handle, diverses données, bref toutes les variables habituelles).
-Inconvénient majeur, que je ne sais pas comment contourner sans hack du format de fichier défini par PpHd (Kernel Format Vx), c'est la question des relogements... :'( Et donc là, pas de BSS et pas de lib dynamique...
D'ailleurs à ce sujet, si tu passes par là PpHd, tu pourrais décrire comment tu gères l'attribut correspondant ?
Et les RAM calls, ils marchent comment? Ils sont résolus en temps d'éxécution ou quand PreOS reloge le programme?
PreOS ne permet pas l'exécution en Flash, parce que sous AMS c'est moyennement possible
Donc à priori on aurait $(3ff-100+1)/4=192 traps disponibles à partir de $100. Je ne me trompe pas?