La Game Boy de Nintendo fue un auténtico éxito de masas durante los años 90, dicen las malas lenguas que un dia Hiroshi Yamauchi le mostro el prototipo de la Game Boy a Norio Ohga quien por aquel entoces era el presidente de Sony. Ohga quedo fascinado por el dispositivo y decepcionado porque pensaba que Sony podía haber hecho algo así con la tecnologia que tenían, paradojicamente eso sería el inicio del matrimonio con divorcio conflictivo entre Nintendo y Sony que terminaría como todos sabemos que termino.

Diseñada por Gunpei Yokoi, la Game Boy fue al Game&Watch lo que fue la Atari VCS a la Atari Pong. Yokoi para el Game & Watch utilizaba pantallas que no eran las más adecuadas para llevar la experiencia del televisor a un dispositivo de bolsillo y cada pantalla tenía unos gráficos fijos asociados al juego por lo era necesario tomar una tecnología de pantalla completamente distinta.

¿Pero como podían colocar una consola con la pantalla y todo en un dispositivo de bolsillo? Aplicando su filosofia de «Pensamiento Lateral con Tecnología Existente» Yokoi decidió tomar la tecnología «Dot Matrix» que se utilizaba en las pantallas del tipo «Chip on Glass» como pantalla de la que fue la primera consola portátil de Nintendo. Al contrario que las pantallas LCD tradicionales estas carecen de un circuito impreso. En vez de ello el controlador LCD esta directamente conectado al cristal de la pantalla, esto permite colocar una pantalla mucho más pequeña y de menor coste lo cual es ideal para un dispositivo de bolsillo.

El socio para la fabricación de los componentes de la Game Boy fue Sharp. la cual en los años 80 había lanzado la primera calculadora científica con una pantalla «Dot Matrix» en el mercado, la EL-5200.

EL-5200.JPG

Aprovechando la tecnología de pantalla de estas calculadoras Yokoi decidió crear una versión renovada de su concepto de las Game&Watch que internamente tuvo dos nombres diferenciados «Dot Matrix Game» por un lado y por el otro «Famipocket» que es el acortamiento de Famicom Pocket, obviamente una Famicom de Bolsillo.

La pantalla de Game Boy tiene una resolución de 160×144 pixeles y 2 bits de “color”, el motivo de ponerlo entre comillas es porque la consola tenía una pantalla monocromo con 4 valores para representar los gráficos, producto de eliminar el Colorburst de la pantalla del dispositivo, algo que fue muy criticado en su época pero que le dio la victoria en el mercado al durar las pilas 6 veces más que la competencia con 2/3 de las pilas.

#2 El hardware de la Game Boy

G01586549_03_mainboard_front.jpg

Pese a empezar el proyecto como una Famicom Pocket en realidad el proyecto se desvió  a medio camino en un hardware completamente distinto en vez de una versión de bolsillo de su 8 bits, las especificaciones técnicas de la consola son:

  • LSI/SoC que integra todos los componentes menos la RAM y la VRAM
  • Mecanismo DMA integrado (con HDMA), esto le da acceso a la VRAM al GB80.
  • Unidad MMU integrada con la capacidad de direccionar 20 bits (1MB de direccionamiento/8 Megabits) permitiendo cartuchos de hasta 8 Megabits sin necesidad de mecanismos de selección de banco
  • 8KB de memoria RAM y 8KB de VRAM.
  • CPU: GB80 a 4.19 Mhz

La CPU de la consola es coloquialmente conocida como GB80 porque al igual que Z80 es un clon del 8080 pero a su vez no se trata de un Z80 al uso sino de una CPU que creo Nintendo internamente para su portátil basandose en el 8080 de Intel. De la misma manera que el Z80 tiene cambios suficientes para no ser un 8080, el GB80 tiene cambios suficientes como para no ser un Z80 ni un 8080 aunque su funcionamiento deriva de dicha «familia» de CPUs.

En cuanto a la generación de gráficos, su Generador de Patrones/Sprites deriva del creado por Nintendo para la Famicom/NES que deriva del TMS9918/TMS9928A por lo que su funcionamiento general ya lo conocemos aunque hemos de tener en cuenta que el TMS9918A/TMS9928A esta pensado para funcionar en un tubo de rayos catódicos por lo que Yokoi y su equipo tuvieron que adaptar el funcionamiento de la PPU de la Game Boy (Si, Nintendo utilizaba esas siglas y Sega utilizaba VDP) a su tipo de pantalla. Precisamente tanto CPU como PPU funcionan a la misma velocidad, así como la memoria del sistema tanto RAM como VRAM y el slot de cartuchos, unos 4.19 Mhz de velocidad. Esto hace que las especificaciones gráficas de la PPU sean las siguientes:

  • Hasta 10 Sprites por escaneo de linea.
  • 40 Sprites distintos por pantalla almacenados en la OAM, al igual que Famicom/NES esta se encuentra dentro del chip y son transmitidos desde la VRAM y/o el cartucho utilizando un canal DMA especializado para actualizar en cada fotograma.
  • El tamaño de cada sprite es de 8×8 con 4 valores de “color” distintos por Sprite. 4 para fondos y 3+Color Transparente para los Patrones/Sprites en el primer plano.
    GBPalette.PNG
  • Paleta de 3 Colores para Sprites, el color 00 de fondo es tratado como color transparente en el plano de patrones/sprites.

En cuanto a la tabla de atributos de los patrones/sprites (la cual se almacena en la OAM) tiene la siguiente configuración:

  • Byte 0: Posición Vertical del pixel -16.
  • Byte 1 ­: Posición Horizontal del Pixel -8
  • Byte 2: Patrón/Tile de la lista de 256 ­Patrones/Sprite al que hace referencia la tabla.
  • Byte 3 (bits 0-4): No se utilizan
  • Byte 3 (Bit 5): El Patrón/Sprite se dibuja verticalmente a la inversa
  • Byte 3 (bit 6): El Patrón/Sprite se dibuja horizontalmente a la inversa
  • Byte 3 (bit 7): Bit de Prioridad.

A diferencia de la Colecovision, SMS/Mark III, Game Gear, MSX1, NES… donde para escribir en la VRAM es necesario escribir en 3 registros del TMS9918A/TMS9928A. En el caso de Game Boy la VRAM esta dentro del espacio de memoria de la CPU permitiendo crear la Name Table de manera mucho más fácil y rápida. El GB80 puede por tanto generar la Name Table en la VRAM sin tener que escribir en los engorrosos registros derivados del TMS9918A/TMS9928A. Por lo que el GB80 de GameBoy no necesitaba los engorrosos 12 ciclos de reloj para transmitir un byte de información a la VRAM sino solamente 4 dado que podia escribir sobre la misma de manera directa. Esto se consigue con una unidad DMA integrada en el GB80 y al hecho que la VRAM de Game Boy es de doble puerto (1 puerto para la PPU y 1 puerto para el DMA) pero no es recomendable por parte del DMA acceder a VRAM fuera del periodo VSync.

La PPU de Game Boy maneja 2 Name Tables (Sprite y Fondo) siendo cada una de 32×32 patrones/sprites (256×256 pixeles). Al contrario que en la Famicom/NES donde existía al CHR-ROM/CHR-RAM donde estaban almacenados los patrones/sprites aquí estos se vuelcan en la VRAM como el resto de sistemas basados en el  TMS9918A/TMS9928A y es que la Famicom/NES era más bien la excepción a la regla.

En Game Boy al igual que el resto de sistemas de 8 bits uno de los patrones/sprites es de 8×8 pixeles con 2 bits de color por lo que tenemos unos 16 bytes por patrón/sprite y dado que podemos tener un total de 256 distintos esto hacen un total de 4KB en laVRAM que sumados a las 2 Name Tables son unos 6KB en total de la VRAM ocupados en las Name tables y los Patrones/Sprites.

Para terminar, el hardware de la Game Boy tiene un mecanismo HDMA que permite enviar datos a la VRAM y a la PPU durante el periodo HBlank pero solo unos 16 bytes por envió. ¿Que utilidad tiene eso? Pues os dare un ejemplo:

El hecho de acceder a la PPU/VDP y a la VRAM es lo que permite efectos tipo Modo 7 en las consolas. Es una de las carácteristicas más desconocidas de Game Boy.  Los mecanismos DMA y HDMA terminarían siendo implementados también en la CPU de SNES, pero dicha consola ya tendra su entrada correspondiente.

#3 Game Boy Color

En 1998 Nintendo lanzo en Japón la versión con pantalla a color de la Game Boy que supuso algunos cambios respecto al hardware original.

  • El GB80 puede funcionar a 4.19 Mhz (Modo GB y Modo Mixto) o a 8.38 Mhz (Modo GBC).
  • Mecanismo HDMA integrado en el GB80.
  • 32KB de RAM
  • 16KB de VRAM.
  • La MMU ha sido mejorada para soportar cartuchos de hasta 32 Mbits/4MB.
  • El resto de especificaciones técnicas son como la Game Boy Original

Los cambios  respecto a la Game Boy realmente son leves pero son lo suficientemente importantes como hacerlos destacar. Empezando por la tabla de atributos de los patrones/sprites (almacenada en la OAM) tiene la siguiente configuración:

  • Byte 0: Posición Vertical del pixel -16.
  • Byte 1 ­: Posición Horizontal del Pixel -8
  • Byte 2: Patrón/Tile de la lista de 256 ­Patrones/Sprite al que hace referencia la tabla.
  • Byte 3 (bits 0-2): Número de Paleta (8 en total)
  • Byte 3 (bit 3): Selección de banco de patrones/sprites.
  • Byte 3 (bit 4): No se utiliza
  • Byte 3 (Bit 5): El Patrón/Sprite se dibuja verticalmente a la inversa
  • Byte 3 (bit 6): El Patrón/Sprite se dibuja horizontalmente a la inversa
  • Byte 3 (bit 7): Bit de Prioridad.

La consola tiene unas 8 paletas distintas, cada una de unos 8 Colores (7 Colores+Transparente) por lo que puede mostrar hasta unos 56 colores en pantalla. Dado que tenemos unas 8 paletas esto significa que los patrones/sprites son de 3 bits por pixel, pero eso solo en los juegos «Solo para Game Boy Color». En el caso de los juegos de Game Boyque  tienen modo de compatibilidad con Game Boy Color (modo mixto) dado que sus patrones/sprites solo tienen 2 bits por pixel alcanzan como mucho los «32» colores en pantalla. Dado que el tamaño de los patrones/sprites no cambia pero tenemos 2 bancos y 3 bits por patrón/sprite esto significa que 12KB de lo 16KB de VRAM se utilizan para almacenar los patrones/sprites, dejando 2KB de la VRAM de GBC sin utilizar.

Y con esto termino la entrada sobre Game Boy, espero que os haya resultado didáctica.