oui c'est possible de faire ce que tu décris, par contre je vois pas bien où tu veux en venir en parlant de multithread

à moins que tu aies des impératifs de latence maximale acceptable en réponse par exemple à une touche ou une commande venant du link (mais dans ce cas-là ce n'est de toute façon pas une bonne idée de charger du code à la volée, parce que ça ajoute plein d'imprévus), tu n'as aucun intérêt à charger une page de code avant le dernier moment, tu risques juste de te planter en chargeant une page qui ne sera finalement pas utilisée (l'archive se lit tout aussi rapidement que la RAM, c'est pas comme un disque dur où il faut lancer le transfert en tâche de fond le plus tôt possible

)
et puis si tu ne charges pas tes fonctions à une adresse fixe (ce qui est assez probable, à moins que ton programme se divise en quelques parties très séparées) tu vas devoir gérer tout un système de relocations pour pouvoir accéder aux différentes pages à partir d'une page donnée
note aussi qu'il faut de préférence un moyen de parcourir la pile pour connaître le stack trace des fonctions en cours d'exécution, pour éviter d'avoir à faire la vérification qu'une page n'a pas été é#vincé#e du cache à *chaque* rts et qu'on ne saute donc pas n'importe où (avec la possibilité de parcourir les stack frame, on peut patcher les adresses de retour correspondant à des fonctions dans des pages supprimées pour qu'elles appellent une fonction de "résurrection" de la page en question et qu'on puisse revenir dans la fonction comme si de rien n'était

)
je n'ose même pas parler des pointeurs de callback, parce que là c'est complètement gore puisque l'adresse d'une fonction peut changer n'importe quand

(il faudrait quasiment que le compilateur les remplace par un index dans un tableau prédéfini de fonctions callback-ables, pour ne déréférencer l'adresse qu'au tout dernier moment, celui de l'appel de la fonction à proprement parler)
bref ça pourrait ressembler à :
myfunc:
move.w a6,21*2(a6) ; notify cache system LRU that page 21 has just been used
...
moveq #123,d0
reloc_foo
jsr _missing_page7.l ; call function 'foo'
reloc_bar
jsr _missing_page6.l ; call function 'bar'
...
rts
page7_relocations:
dc.w 21,reloc_foo-page21_start,foo-page7_start
dc.w 0
page6_relocations:
dc.w 21,reloc_bar-page21_start,bar-page6_start
dc.w 0
(c'est vrai que ça pourrait être cool de faire un compilo qui se charge de faire ça automatiquement

)