
Suivant ce qu'on cherche à remplacer, ils sont plus courts ("unsigned short int" -> "uint16_t") ou plus longs (char -> uint8_t) à écrire, mais plus précis.
Aussi, ta fonction GetPixel me paraît curieuse (copier-coller ?), je penserais plutôt à "uint16_t GetPixel(int x, int y);"

(ou même en utilisant typedef uint16_t Color; pour masquer le type)
Un truc qui n'a à ma connaissance pas vraiment été essayé, c'est de piloter en 16 bpp l'horrible écran des Clickpad & Touchpad. On sait qu'il supporte 8 bpp, nDOOM l'utilise ainsi. Mais il y a des chances qu'on ne puisse quand même pas, par ce biais, utiliser les mêmes graphismes sur CX / CM et sur Clickpad / Touchpad.
Pour info, j'ai fait des routines de tile (sprite aligné) 8x8 en 4 bpp, et j'ai commencé une routine de sprite 8x8

Bien sûr, en essayant de tirer parti du retour d'expérience d'ExtGraph, ce qui veut dire: utilisation de macros dans le code ASM !!
La conversion R5G6B5 -> G4 coûte cher. Aucune lib performante ne peut chercher à gérer les modes 4 bpp et 16 bpp avec les mêmes fonctions; mais d'un autre côté, séparer les jeux de fonctions et de sprite veut dire que les possesseurs de Clickpad / Touchpad vont vite se trouver ostracisés, à cause de l'écran à pleurer, et du boulot supplémentaire que nécessite l'utilisation de deux jeux de graphismes.
Et en effet, nous sommes plusieurs à avoir suggéré SDL.