Flanker
:
je veux pas être méchant, mais ça va pas revenir à la totue première génération de programme kernel, qui contenaient tous le kernel ?
C'était la bonne solution. Les raisons pour lesquelles ça n'avait pas marché:
*
RAM_CALLs. Tous les programmes contenaient les routines de détection de
tous les
RAM_CALLs, utilisés ou non. Et de plus, les
RAM_CALLs proposés étaient souvent des trucs sales pour lesquelles il y a des
ROM_CALLs propres équivalents, et dont la détection intégrée aux programmes échouait avec les mises à jour de AMS. Notre solution à ce problème:
- pas de
RAM_CALLs,
- les pseudo-constantes vraiment utiles sont détectées d'une manière portable, et au besoin seulement,
- les trucs sales de style
FolderListHandle ne sont volontairement pas gérés, il y a des
ROM_CALLs qui permettent de faire la même chose proprement.
* librairies dynamiques. Comme on ne sait pas à l'avance quels types de fonctionnalités du kernel seront utilisées par la librairie dynamique,
tous les programmes contiennent nécessairement
tout le code de relogement pour:
- la détection de
tous les
RAM_CALLs (cf. ci-dessus),
- des fonctionnalités comme les sections BSS, même si le programme ne les utilise pas.
Notre solution à ce problème:
- Les librairies dynamiques (DLLs) ne sont prévues que pour des usages très particuliers (limite de 64 KO).
- Une DLL
ne peut pas utiliser les fonctionnalités avancées qui nécessiteraient du code de relogement dans le programme principal.
- Pour d'autres fonctionnalités avancées (
OPTIMIZE_ROM_CALLS par exemple), la DLL ne peut utiliser ces fonctionnalités
que si le programme principal les utilise aussi.
- Cela garantit que seules les fonctionnalités vraiment utilisées seront gérées dans le code de démarrage.
* relogements personnalisés obligatoires. Les programmes étaient obligés d'utiliser les relogements kernel même si ça augmentait leur taille. Notre solution à ce problème: relogements personnalisés facultatifs.
En résolvant ces 3 problèmes, nous avons fait un code de démarrage utile et efficace en taille, ce que celui de PlusShell 0.99 alpha n'était pas.