La programación es generica para cualquier dispositivo, cuando haces un programa uno ya lo hace pensando en separar la lógica de la presentación. Cuando haces un programa, prácticamente el 80% o 90% es código puro y duro con toda la lógica de lo que hagas, y solo ese 10% que queda es lo que lleva a una plataforma concreta.
De hecho ten en cuenta que la mayoría de estudios desarrollan el juego conjuntamente para todas las plataformas, eso es porque por debajo ellos hacen su lógica de juego, y luego tienen una implementación de la capa visual para cada consola... por eso al principio los juegos de PS3 parecían tan pobres en comparación con la XBOX, porque al salir mas tarde al mercado los estudios se preocupaban de que fuera fluida en la Xbox sin entrar a optimizar los recursos que le ofrecía la ps3... luego una vez que ya tenían el juego en el mercado ven que no funciona muy bien en la PS3, pero ya no pueden cambiar la lógica (porque afecta a otras cosas) .. asi que cambian la forma en que se representa en pantalla para hacerlo mas ligero
Lo mas fácil de portar, aunque no lo creas, son los emuladores, precisamente porque ya existen para todas las plataformas, y toda su lógica está perfectamente aislada de la plataforma donde se ejecuta. Es decir ... ellos tienen un CORE que hace todo el trabajo, renderiza todas las pantallas en un buffer de memoria, y renderiza todo el audio en otro buffer, y luego simplemente se lo dan a la consola para que lo dibuje en pantalla, o lo tire por la salida de audio que tenga. De forma que portar esto a la PS3 se traduce en implementar esas funciones.
Lógicamente tiene mas trabajo que eso ... los accesos a disco, accesos al pad ....etc etc .. pero la filosofía viene a ser esa.