Il faut faire la distinction entre l'algorithmique de base aussi appelée "game logic" (si obstacle = mortel, alors game = over) qui est facilement transposable à n'importe quelle architecture, et la programmation spécifique à chaque machine (les Apple II, Atari XL, C64, NES, SNES, PCE et d'autres partagent les mêmes instructions CPU 6502, mais n'ont rien à voir au niveau graphique, sonore et organisation de la RAM). Il faut aussi prendre en compte les différences de vitesse. La PCE tourne à 7.2 MHz quand la SNES plafonne à 3.6 MHz et la NES à 1.8 MHz, ce qui fait qu'un programme optimisé pour la PCE peut être poussif sur une SNES. Il faudrait donc dans ce cas réécrire la "game logic" elle-même !
Un jeu NES ne peut pas tourner tel quel sur PCE. Les instructions CPU de base sont compatibles, mais toute la partie graphique et sonore doit être réadaptée au hardware de la PCE.
Tomaitheous (TurboXray) a ainsi dû développer un code spécifique pour chaque jeu NES qu'il a voulu supporter, notamment pour l'audio. On ne parle plus de portage mais d'une émulation partielle !
Reprendre les assets graphiques d'une machine à l'autre est relativement trivial. Toutes les consoles et bornes d'arcade 16 bits de l'époque fonctionnent sur le même principe : 1 palette par objet (sprite ou tuile), et 16 couleurs par palette. En revanche, le nombre maximum de palettes peut faire une énorme différence — seulement 4 palettes pour la MD contre 32 pour la PCE et 200 pour le CPS ! Sans parler du nombre de couleurs sélectionnables (512 teintes pour la PCE, 32768 pour la SNES). Il y a donc nécessairement un gros travail d'adaptation graphique à opérer si on ne veut pas se contenter d'un portage en 16 couleurs sur chaque machine ciblée.
L'adaptation du code dépendra surtout du langage utilisé. Il est à mon avis plus facile de convertir un programme écrit en C (par exemple entre le kit SGDK de la MD et le kit HuCC de la PCE) que de convertir un programme écrit en assembleur, même entre deux machines à base de 6502. Quand on voit un jeu comme Street Fighter 2, porté sur SNES et PCE par les mêmes développeurs d'Alfa System, on imagine qu'il doit y avoir du code commun entre les deux versions, notamment sur la "game logic". Mais la partie programmation hardware a dû être clairement spécifique. Les capacités (ou non) en matière de parallaxe, par exemple, dictent la manière dont les décors vont être redessinés pour chaque machine. Les capacités en matière de sprites impliquent également des choix différents : la SFC ne peut manipuler que des sprites de 8x8 ou 16x16 pixels, tandis que la PCE gère facilement des sprites jusqu'à 32x64 pixels (mais avec une taille minimum de 16x16). Des persos comme Zangief ne sont donc pas graphiquement "fabriqués" de la même façon sur les deux machines.