« Arquitectura Game Boy Advance (index)

Arquitectura Game Boy Advance

Chapter 3: CPU


Tabla de contenidos

  1. El milagro de Cambridge
    1. El auge de Acorn Computers
    2. Una nueva empresa de CPU
  2. La asociación con Nintendo
  3. El ARM7TDMI
    1. Comandando la CPU
    2. El paquete
      1. El núcleo
      2. El pipeline
      3. Exprimir el rendimiento
      4. Los extras
  4. Áreas de memoria
  5. Convirtiéndose en una Game Boy Color

La mayoría de los componentes se combinan en un único paquete denominado CPU AGB. Este contiene dos CPU completamente diferentes:

Ten en cuenta que ambas CPU nunca funcionarán al mismo tiempo ni realizarán ningún co-procesamiento extravagante. La única razón para incluir el muy antiguo Sharp es la retrocompatibilidad.

Dicho esto, adentrémonos en el chip ARM. Sin embargo, como es la primera CPU ARM que se trata en esta serie, déjame empezar por los antecedentes históricos de esta familia. ¡Prometo que vale la pena!

El milagro de Cambridge

La historia de los orígenes de la CPU ARM y su posterior ascenso a la fama es fascinante. Aquí encontramos una combinación de inversión pública, crecimiento exponencial, decisiones desacertadas y asociaciones de largo recorrido.

El auge de Acorn Computers

Image
El BBC Micro (1981) con una caja de discos de 5¼ encima , el primer disco incluye el juego Elite (1984).

Image
La placa ARM Evaluation Board (1986), un módulo 'Tube' con una CPU ARM1. La encontré en The Centre for Computing History (Cambridge, Reino Unido).

Los predecesores de la primera CPU ARM comercial, la ARM2.

A finales de los años 70, Reino Unido vivía tiempos convulsos. La economía intervencionista construida sobre los ideales de posguerra había llegado a su fin, y el péndulo pronto osciló hacia las reformas de libre mercado. En medio de esta tormenta, iniciativas con sede en Cambridge como Acorn Computers, junto con Sinclair y otras similares, vendían kits de ordenador a laboratorios y aficionados. Al igual que las empresas estadounidenses y japonesas, los ordenadores de Acorn dependían de la CPU 6502 y un dialecto propietario de BASIC.

Al entrar en los años 80, los intereses ministeriales dentro del nuevo gobierno británico llevaron a la creación de un proyecto para mejorar la alfabetización en informática en las escuelas . Gracias al próximo 'Proton' de Acorn, la empresa obtuvo el contrato para construir un ordenador asequible que cumpliera con la visión del gobierno. El resultado fue el BBC Micro (apodado el 'Beeb'), que disfrutó de un éxito significativo entre escuelas, profesores y estudiantes. Dentro del Micro, Acorn incorporó una interfaz vanguardista 'Tube' que podía ampliar el ordenador con un segundo procesador. Esto allanaría el camino para la próxima gran inversión de Acorn.

Durante el desarrollo de su próximo producto, esta vez enfocado a empresas, Acorn no encontró una CPU adecuada para suceder a la 6502. La presión por innovar contra la competencia japonesa y estadounidense, combinada con una planificación desafortunada, colocó a Acorn en una situación financiera complicada. Por lo tanto, se encargó a una nueva división de Acorn la producción de una CPU convincente. Para sortear las restricciones recientes de Acorn, el equipo de CPU basó su arquitectura en las enseñanzas de un artículo de investigación llamado The Case for the Reduced Instruction Set Computer y su prototipo, el CPU RISC . Finalmente, en 1985, Acorn entregó la CPU ARM1 como un módulo Tube para el BBC Micro, pero solo se comercializó para fines de I+D. No sería hasta 1987, con la introducción del primer ordenador Acorn Archimedes, cuando los chips ARM (para entonces, la CPU ARM2) tomarían un papel central.

Una nueva empresa de CPU

Image
Un modelo tardío del Newton... después de jugar con él.

Durante la comercialización del Acorn Archimedes, Apple se sintió cautivada por las CPUs energéticamente eficientes de Acorn, pero la empresa estadounidense aún no estaba convencida de que la última ARM3 de Acorn fuera adecuada para el nuevo proyecto estrella de Apple, el Newton. Sin embargo, en lugar de alejarse (después de todo, Acorn era un competidor), ambos exploraron la posibilidad de evolucionar la ARM3 para cumplir los requisitos de Apple , a saber, frecuencia de reloj flexible, MMU integrada y direccionamiento completo de 32 bits.

Esta colaboración pronto se convirtió en una asociación en la que Acorn, Apple y VLSI (fabricante de chips ARM) crearon una nueva empresa dedicada exclusivamente al desarrollo de CPUs ARM. Apple proporcionó la inversión (obteniendo el 43% de la participación), Acorn compartió su personal y VLSI se encargó de la fabricación. En 1990, Advanced RISC Machines (ARM) Ltd surgió con Robin Saxby como su presidente ejecutivo.

Años después, Apple finalmente lanzó el Newton MessagePad con un ARM610, perteneciente a la siguiente generación de chips ARM, moldeada por las aportaciones de Apple. Mientras tanto, Acorn también lanzó el RiscPC utilizando las nuevas CPUs.

Ahora, mientras Acorn y Apple seguían rezagados en el mercado de ordenadores y dispositivos portátiles, ARM ideó un modelo de negocio radical. Sin involucrarse en la fabricación, la visión de Saxby consistía en licenciar la propiedad intelectual de ARM, en forma de diseños de CPU y su set de instrucciones . Esto otorgó a ARM clientes más allá del ámbito de los ordenadores, como Texas Instruments , que más tarde conectó a la empresa con el emergente mercado móvil (culminando en el Nokia 6110) y las cajas decodificadoras. Los años siguientes verían la tecnología de ARM incorporada en miles de millones de dispositivos móviles .

La asociación con Nintendo

De vuelta en Japón, y gracias al análisis de Game Boy, aprendimos que la estrategia de hardware de Nintendo para sistemas portátiles favorece un modelo de System On a Chip (SoC). Esto ha permitido a la compañía camuflar tecnología de catálogo asequible y combinarla con desarrollos internos. Al hacerlo, la nueva consola podría ser única y competitiva. Afortunadamente, el modelo de licencias de ARM encajaba perfectamente con esas necesidades.

Image
El chip CPU AGB, que integra la CPU ARM7TDMI (entre otros muchos componentes).

Ambas empresas mantuvieron conversaciones desde 1994 (un año antes del lanzamiento del Virtual Boy), probablemente en el marco del 'Proyecto Atlantis', durante el cual Nintendo estudió la ARM710 . Sin embargo, nada se materializó hasta muchos años después , y la razón era simple: los japoneses consideraban prohibitiva la densidad de código de ARM y la necesidad de 32 cables de datos (algo que la CPU del Virtual Boy ya había logrado evitar). No obstante, el nuevo diseñador de CPU de ARM — Dave Jaggar — respondió rápidamente con el ARM7TDMI, un nuevo diseño centrado en maximizar el rendimiento bajo restricciones de energía y almacenamiento. Este fue un punto de inflexión para ARM, ya que este nuevo producto no solo complació a Nintendo, sino que también atrajo la atención de Texas Instruments, Nokia y otros competidores en el ámbito de la telefonía móvil.

No es de extrañar que, al comenzar Nintendo a trabajar en el sucesor del Game Boy Color, su elección recayera en el ARM7TDMI.

El ARM7TDMI

Veamos ahora qué tiene para ofrecer este chip.

Comandando la CPU

Para empezar, el ARM7TDMI implementa el set de instrucciones ARMv4, el sucesor del ARMv3. Esto implica:

El paquete

Ahora que sabemos cómo los desarrolladores se comunican con este chip, vamos a ver qué hay dentro del silicio.

El núcleo

En términos de circuitería, el ARM7TDMI es una versión reducida del ARM710 con adiciones interesantes. El núcleo incluye :

Finalmente, todo esto puede operar con una fuente de alimentación de 3 voltios . Esto es un evidente paso hacia la computación móvil, ya que los núcleos anteriores requerían una fuente de 5 V.

El pipeline

Desde su primera iteración, ARM ha implementado una pipeline en tres etapas para ejecutar código. En otras palabras, la ejecución de las instrucciones se divide en tres pasos o etapas. La CPU captura, decodifica y ejecuta hasta tres instrucciones simultáneamente. Esto permite aprovechar al máximo los recursos de la CPU (lo que reduce el silicio inactivo) al mismo tiempo que aumenta el número de instrucciones ejecutadas por unidad de tiempo.

Al igual que dos contemporáneos muy similares, las CPUs ARM son susceptibles a peligros de datos. Sin embargo, ni el programador ni el compilador lo notarán ya que, en este caso, la CPU detendrá automáticamente la pipeline cada vez que sea necesario.

También están presentes los peligros de control, pero ARM los abordó con un enfoque eficiente llamado anulación condicional: Cada vez que una instrucción de rama está en la segunda etapa (Decode), la CPU calculará la condición de la rama . En función del resultado, si la rama debe ejecutarse, la CPU anulará automáticamente la instrucción posterior (convirtiéndola en un relleno). Ahora, esto puede parecer ineficiente en comparación con el enfoque de MIPS (ya que un compilador MIPS puede insertar instrucciones útiles, no solo rellenos). Por lo tanto, aparte de la bifurcación, ARM proporciona ejecución condicional. Esta última convierte este diseño de pipeline en una ventaja, ya que ARM puede decodificar una instrucción y calcular su condición incorporada en la misma etapa. Por lo tanto, en este caso, no se añadirán rellenos. De ahí que la ejecución condicional sea preferible a las bifurcaciones al programar para CPUs ARM .

Exprimir el rendimiento

Una de las desventajas de una arquitectura de carga-almacenamiento llevó a que el código de ARM fuera muy disperso. Competidores como x86 podían realizar las mismas tareas usando menores cantidades de código, requiriendo menos almacenamiento. En consecuencia, al examinar Nintendo el último diseño de ARM, el ARM7, este no les convenció. El tamaño de las instrucciones de ARM significaba que supuestos dispositivos con buses de 16 bits, memoria y almacenamiento limitados — todo para ahorrar costes y energía — harían que la CPU fuera ineficiente y crearían un cuello de botella. Por fortuna, Dave Jaggar acababa de terminar de diseñar el ARM7 y no estaba dispuesto a rendirse. Durante su camino de vuelta tras reunirse con Nintendo, se le ocurrió la solución: el set de instrucciones Thumb .

Thumb es un set de instrucciones independiente que funciona como modo alternativo dentro de la CPU. Está compuesto por un subconjunto del set de instrucciones ARM, con instrucciones codificadas en palabras de 16 bits (en lugar de 32 bits) . Al ser de 16 bits, las instrucciones Thumb requieren la mitad del ancho de bus y ocupan la mitad de la memoria. Para conseguirlo, introduce las siguientes concesiones:

En general, dado que las instrucciones Thumb solo ofrecen un subconjunto funcional de ARM, los desarrolladores pueden tener que escribir más instrucciones para conseguir el mismo efecto. En la práctica, Thumb utiliza el 70% del espacio del código ARM. Para memoria de 16 bits de ancho, Thumb ejecuta más rápido que ARM. Si es necesario, las instrucciones ARM y Thumb pueden mezclarse en el mismo programa (lo que se denomina interfuncionamiento) para que los desarrolladores puedan elegir cuándo y dónde utilizar cada modo.

Los extras

El ARM7TDMI es, en esencia, un núcleo compatible con ARMv3 con extras. El nombre (TDMI) hace referencia a estos extras:

En conjunto, esto convierte al ARM7TDMI en una solución atractiva para dispositivos móviles e integrados.

Áreas de memoria

La inclusión de Thumb en particular tuvo una fuerte influencia en el diseño final de esta consola. Nintendo mezcló buses de 16 y 32 bits entre sus distintos módulos para reducir costes, al tiempo que proporcionaba a los programadores los recursos necesarios para optimizar su código.

Image
Arquitectura de memoria del sistema.

La memoria utilizable de la Game Boy Advance se distribuye en las siguientes ubicaciones (ordenadas de más rápida a más lenta) :

En definitiva, aunque esta consola se comercializó como un sistema de 32 bits, la mayor parte de su memoria solo es accesible a través de un bus de 16 bits. Esto significa que los juegos usan principalmente el set de instrucciones Thumb para evitar consumir dos ciclos por lectura de instrucción. Solo en circunstancias muy excepcionales — por ejemplo, al usar instrucciones no disponibles en Thumb o al leer desde la IWRAM — sacan partido del set de instrucciones ARM.

Convirtiéndose en una Game Boy Color

Aparte de la inclusión de hardware GBC (como la CPU Sharp SM83, la BIOS original, los modos de audio y vídeo, y una ranura de cartucho compatible), hay dos funciones adicionales necesarias para que la retrocompatibilidad funcione.

Desde el punto de vista del hardware, la consola se basa en un interruptor eléctrico para detectar si hay un cartucho de Game Boy o Game Boy Color insertado . Un detector de forma en la ranura del cartucho identifica el tipo de cartucho y permite a la CPU ARM7 leer su estado y actuar en consecuencia. Además, la alimentación, junto con los buses del mando, el cartucho y la WRAM, se redirigen físicamente en función del estado de ese interruptor.

Desde el punto de vista del software, existe un registro especial de 16 bits llamado REG_DISPCNT que puede alterar muchas propiedades de la pantalla, pero uno de sus bits pone la consola en 'modo GBC' . Esto hace que el sistema ceda el control a la CPU SM83 y arranque la BIOS de GBC. Eso sí, activar el modo GBC en REG_DISPCNT solo funciona si el sistema está arrancando desde la BIOS de GBA, ya que esta comprueba el valor del contador de programa (el registro PC).

Un aspecto curioso documentado en la Gbdev Wiki y en GBATek es que todas las variantes de Game Boy Advance son técnicamente capaces de ejecutar código de Game Boy . Esto incluye a la Game Boy Micro, que carece de la ranura de cartucho heredada. La razón es que todas las variantes integran el mismo SoC y no necesitan estrictamente el detector de forma para entrar en modo GB. Además, manipulando otros registros, es posible eludir las rutinas de verificación de la GB. Sin embargo, a falta de un cartucho GB, el juego debe residir de algún modo en la VRAM (ya que la CPU leerá ceros hasta llegar a ella), y el mando queda inutilizable (pues el detector de forma debe conmutarse para redirigir el bus al SM83) .


Previous: 2. Una introducción rápida

Next: 4. Gráficos


Rodrigo Copetti © 2026 RSS Feed

Ir a la edición moderna

Inicio · Escritos · Soporte · Acerca del autor · Acerca del sitio web