Comme tu l'écris, les RAM_CALLs en F-Line ne sont vraiment pas top pour la vitesse d'exécution, mais sont effectivement sympa pour l'optimisation taille
A propos du fait d'écrire F000 + ramcall, F000 + ramcall*2 ou F000 + ramcall*4: je pense que ça dépend surtout de l'utilisation de la plage F000-FFFF. Presque toute la plage F800-FFFF est utilisée pour les ROM_CALLs, mais la plage F000-F7FF est libre. Au pire, s'il faut un jour ajouter d'autres F-Line, on pourra prendre F080 ou F100 comme base.
L'interface qui consiste à retourner dans a0 le pointeur sur le RAM_CALL (si c'est une donnée immédiate, comme KEY_LEFT) ou l'adresse (si c'est l'adresse d'une fonction ou d'une donnée comme font_small, par exemple) n'est pas plus bête qu'une autre.
Une autre possibilité est de retourner les valeurs immédiates dans d0 ou les adresses dans a0. Peut-être est elle plus optimisée dans certains cas que celle que tu proposes, mais en revanche, elle est moins optimisée pour le test des touches. Avec ta méthode, on peut faire
F851 (ROM_CALL ngetchx en F-Line)
F??? (RAM_CALL KEY_LEFT)
cmp.w (a0),d0
alors qu'avec l'interface que je décris, il faut faire
F851 (ROM_CALL ngetchx en F-Line)
move.w d0,<ea != d0> (par exemple)
F??? (RAM_CALL KEY_LEFT)
cmp.w <ea>,d0
(Ah, au fait... c'est clair qu'il n'y aurait pas tout le fun pour toi d'optimiser une lib externe consommant zéro RAM, et que le fun, c'est important pour nous passionnés - mais à moyen terme, peut-être que le meilleur endroit pour pexec serait built-in PedroM, non ?)