le 1ko est fait pour garder une zone où des fonctions essentielles seront toujours dispo (écriture VRAM, OUTI etc). Mais cette caractéristique est propre au mapper Sega.
On peut aussi avoir du code dans d'autres banks, ca n'est pas vraiment un souci
mais bcp plus facile (fluide) à faire en ASM qu'en C néanmoins.
En ASM (via WLAdx) on peut sans souci dire, "cette bank sera un slot 0" et donc les adresses et les sauts internes des fonctions & cie seront relatives à cette définition. Cad que les fonctions auront une adresse entre 0 et $3FFF.
Apres rien ne t'empeche d'utiliser un peu de RAM pour avoir des fonctions toujours disponibles, peu importe la bank. Si il n'y a aucun endroit où le code est toujours disponible, il faut extremement bien structurer son code et reswapper toujours ses banks, car on peut appeler ou aller à une adresse non existante/où il n'y a rien... et là c'est le drame
Comme tu l'as soulevé, il y a aussi le fait que tu auras des choses en doublon/triplon du fait de n'avoir pas d'endroit où tout est toujours dispo.
les 3 slots sont "en général" répartis ainsi:
* slot 0 et 1: code (fixe, cad 32k de code linéaire de $0000 à $7FEF / 7FF0 à 7FFF étant réservé au header),
* slot 2: les datas (slot $8000 à $BFFF où les banks seront échangées lorsque necessaire, un swap de bank n'étant que de quelques cycles)
on a aussi 8Ko de RAM, donc on peut tout à fait y mettre des données qui nous seront toujours utile (genre sons, routine de décompression...)
le seul jeu Sega connu qui échange le slot 0 c'est Space Gun,
quelques uns échangent les slot 1 et 2 (genre Sonic 1)
la majorité n'échangent que le slot 2 (avec parfois du code supplémentaire (WB3, R-type) mais généralement que de la datas)