Una de las cosas que se están discutiendo es el hecho que los problemas del colorido de la consola virtual de NES en Wii y Wii U ha desaparecido en la NES Classic Mini.

Lo cual es una excelente noticia pero… ¿Que es lo que llevaba a que la consola virtual tuviese el problema del color? El «problema» del color viene simple y llanamente porque tanto Wii como Wii U envían los datos a pantalla en forma YUV y no en formato RGB, es decir. Utilizan otro espectro de color distinto. En GameCube/Wii cuando se copían los datos del eFB (que contiene el búfer de imagen trasero de imagen y color) al xFB (que contiene el búfer delantero) entonces se hace una conversión interna de RGB a YUV:

gcnyuv

Dado que el hardware de Wii y el de GameCube es el mismo este cambio en el formato de color se hereda. Es más, la gente olvida que el emulador de la consola virtual tiene sus origenes en Gamecube ya que dicho emulador era utilizado en Animal Crossing y Zelda: Collector Edition.

¿Y que ocurre con Wii U? Empezando por el Wii U Gamepad que es una de las fuentes de salida de imagen el SDK no podemos olvidar que realmente no procesa nada en absoluto sino que lo que hace es descodificar el video que le es enviado a través de WiFi en canal exclusivo entre la consola y el Wii U Gamepad. Es decir, la GPU de la consola genera el búfer de imagen que es codificado por el chip encargado de ello en Wii U y enviado de esta manera al Wii U Gamepad que lo descodificara. Pues bien, si jugamos en el Wii U Gamepad el formato de salida es YUV:

wiiucp

Y si, el formato de color del HDMI esta limitado a 8 bit. En televisión analógica (clasica pantalla de tubo y por tanto 480P) utiliza el mismo formato que Wii… ¿Pero que es el DRC? Es el  nombre que el SDK le da al Wii U Gamepad.

wiiudrc

Pero hemos visto como el formato de emisión del HDMI es RGB y no YUV y el problema en el HDMI de Wii U sigue existiendo, para ello tenemos que entender el proceso.

wiiuscanbuffer

El controlador de pantalla es el chip de Philipps que en la placa base de la consola se sienta entre el bloque MCM y la salida HDMI.

scanbuffer

En Wii U al contrario de Wii el búfer frontal no se almacena en la memoria principal sino en la MEM1 y a través de una interfaz de comunicación en el Latte los datos pueden ser accedidos por el Scanbuffer de dos maneras distintas.

validusecase

El Linear Scan Buffer lo que hace es leer y enviar el búfer de salida por linea al estilo de los televisores antiguos de tubo en vez de enviar todo el búfer de imagen entero. Precisamente el emulador de NES de la Consola Virtual es exactamente el mismo que había en Wii y en dicho modo el scanbuffer funciona de manera lineal.

linearscanbufferwiiu

La propia Nintendo te dice que utilices los shaders para corregir el color pero el problema es que el emulador de NES al ser heredado de Wii no tiene ninguna llamada a los shaders por lo que la aplicación no corrige el problema del color corrigiendo el gamma y paradojicamente ocurre que el color se emite de manera incorrecta. ¿Y de donde viene el problema del gamma? Pues paradojicamente es un problema heredado del hardware de GameCube/Wii.

gammagx

Lo ideal sería que la corrección del Gamma en la aplicación original para GameCube/Wii fuese de 2.2 para que así no hubiese problemas en el espacio de color, si miráis el primer diagrama veréis que la corrección en el espacio de color se hace en el caso de GameCube/Wii antes del paso al formato YUV por lo que incluso manteniendo el RGB si el formato gamma no coincide con el de la TV continuara existiendo el problema a no ser que un elemento externo lo corrija y de ahí que Nintendo hable de utilizar los shaders para corregir el color en estos casos.

Esto es todo, me ha llamado la atención y he creido que sería bueno comentarlo como curiosidad. Por otro lado esto descarta lo que comentaba alguna gente de que el hardware interno de la NES Classic Mini era hardware reciclado de Wii.