1 puntos por GN⁺ 2023-09-24 | 1 comentarios | Compartir por WhatsApp
  • Nintendo 3DS fue una consola portátil de la época en que crecían los smartphones y las tiendas de apps, y reunía 3D estereoscópico sin lentes, doble pantalla, una CPU con retrocompatibilidad y diversas E/S dentro de una compleja estructura de SoC
  • La LCD superior de 800×240 muestra simultáneamente dos cuadros de 400×240 mediante pixeles de medio ancho y una barrera de paralaje; con el deslizador de profundidad y el seguimiento facial de New 3DS, redujo los problemas de ángulo de visión y fatiga
  • El modelo básico usaba un ARM11 MPCore de 2 núcleos a 268 MHz, 128 MB de FCRAM, GPU DMP PICA200 y DSP CEVA TeakLite II; New 3DS sumó 4 núcleos a 804 MHz, 256 MB de FCRAM, NFC y un sistema de visión estereoscópica mejorado
  • En el interior, además del ARM11, incluye un ARM946E-S para DS y un ARM7TDMI para GBA, por lo que puede cambiar entre modos Native 3DS, Nintendo DSi y Game Boy Advance, aunque los desarrolladores normalmente solo tratan directamente con el ARM11 MPCore
  • El sistema operativo y la seguridad estaban compuestos por NATIVE_FIRM, TWL_FIRM, AGB_FIRM, SAFE_FIRM, Boot9/Boot11 y una cadena de confianza basada en AES/RSA/OTP; tras varias vulnerabilidades, se desarrolló un ecosistema de homebrew y firmware personalizado

Familias de modelos y generaciones de hardware

  • Durante el ciclo de vida de 3DS, Nintendo lanzó varios modelos revisados para segmentar precios y tipos de usuarios
  • Desde el punto de vista de la arquitectura, los modelos se dividen en 6 tipos
    • Nintendo 3DS (2011), Nintendo 3DS XL (2012): basados en la arquitectura original; la principal diferencia entre XL y no XL es el tamaño de la pantalla
    • Nintendo 2DS (2013): modelo económico que elimina la pantalla estereoscópica y usa una forma inspirada en Game Boy
    • New Nintendo 3DS (2014), New Nintendo 3DS XL (2015): agregan mejoras de hardware, lector NFC, más botones y un sistema estereoscópico mejorado
    • New Nintendo 2DS XL (2017): modelo económico basado en New Nintendo 3DS XL, pero sin función estereoscópica
  • El punto de referencia común para los juegos es el Nintendo 3DS original, mientras que la familia New tiene diferencias de hardware importantes

Pantalla 3D sin lentes

  • Nintendo 3DS incorpora dos LCD como sucesora de Nintendo DS, y la pantalla superior tiene especificación de 800×240 pixeles para mostrar sensación de profundidad
  • El efecto estereoscópico usa el principio de paralaje estereoscópico (stereoscopic parallax), similar al Virtual Boy
    • Muestra imágenes ligeramente diferentes al ojo izquierdo y al derecho
    • La diferencia en la posición central de ambas imágenes hace que los objetos se perciban como si estuvieran delante o detrás
  • La LCD superior está compuesta físicamente por pixeles de medio ancho y funciona en dos modos
    • Modo 2D: trata dos pixeles horizontales como si fueran uno
    • Modo 3D: usa todos los pixeles individualmente para mostrar dos cuadros de 400×240 al mismo tiempo
  • La barrera de paralaje separa la luz de fondo detrás de los pixeles LCD para hacer que cada ojo vea un subconjunto distinto de pixeles
  • Este método tiene restricciones
    • Requiere más brillo, lo que afecta la duración de la batería
    • Si la pantalla se inclina respecto de los ojos, los dos cuadros con paralaje se mezclan visualmente y puede aumentar la fatiga ocular
    • La postura fija y la rápida fatiga visual pueden hacer que la función 3D resulte incómoda
  • El deslizador de profundidad 3D ajusta el efecto de profundidad aumentando o reduciendo la diferencia entre los dos cuadros
  • New 3DS alivia el problema de inclinación mediante seguimiento facial con la cámara frontal y un LED infrarrojo
  • Los juegos deben renderizar la misma escena como dos cuadros ligeramente desplazados, tal como dibujarían un cuadro normal en la GPU
    • La API oficial proporciona rutinas para configurar dos matrices de proyección

CPU, memoria y estructura de retrocompatibilidad

  • El SoC principal, CPU CTR, contiene la mayor parte del sistema salvo el almacenamiento y la RAM
  • Nintendo colaboró con ARM para configurar un clúster de CPU basado en ARM11 MPCore
    • 3DS original: 2 núcleos MP11, cada uno a 268 MHz
    • New 3DS: 4 núcleos MP11, cada uno a 804 MHz, con 2 MB de caché L2 compartida
  • ARM11 usa el conjunto de instrucciones ARMv6k e incluye componentes como Thumb, Jazelle y VFP
    • ARMv6 proporciona instrucciones SIMD de enteros e instrucciones load/store para sincronización multinúcleo
    • VFP11 acelera operaciones de punto flotante de precisión simple de 32 bits y doble precisión de 64 bits, y cumple con IEEE 754
  • Cada núcleo MP11 tiene una pipeline de 8 etapas, predicción de saltos dinámica y estática, coprocesador de control del sistema CP15, caché de instrucciones de 16 KB y caché de datos de 16 KB
  • Los núcleos ARM11 se conectan mediante el bus AXI de ARM, y la Snoop Control Unit de MPCore mantiene la coherencia de la caché L1
  • Además del ARM11, 3DS incluye dos CPU más
    • ARM946E-S: en modo Native 3DS funciona como procesador auxiliar de seguridad y E/S gestionado por el OS, y al ejecutar juegos de DS/DSi se convierte en el procesador principal
    • ARM7TDMI: en modo DS/DSi funciona como procesador auxiliar, y en modo GBA se convierte en la CPU principal de ejecución
  • Hay tres modos de funcionamiento
    • Native 3DS mode: ARM11 ejecuta los juegos de 3DS, ARM9 gestiona E/S y seguridad, y ARM7 está apagado
    • Nintendo DSi mode: ARM9 y ARM7 ejecutan juegos de DS/DSi, y ARM11 asiste el hardware de DS faltante o reubicado
    • Game Boy Advance mode: ARM7 ejecuta las instrucciones de los juegos de GBA, mientras ARM11 y ARM9 brindan soporte en segundo plano
  • La configuración de memoria es compleja
    • El 3DS original ofrece 128 MB de FCRAM desde el punto de vista del desarrollador, y New 3DS ofrece 256 MB de FCRAM
    • ARM11 tiene 512 KB de SRAM para fines de seguridad
    • ARM9 tiene 1 MB de SRAM, y en New 3DS tiene 1,5 MB de SRAM
    • ARM9 también tiene TCM de instrucciones de 32 KB y TCM de datos de 16 KB
  • FCRAM es Fast Cycle DRAM creada por Fujitsu y Toshiba en 2002, orientada a lograr menor latencia que la DRAM en lecturas no secuenciales
  • También incluye configuración DMA
    • XDMA junto a ARM9 ofrece hasta 4 canales
    • CDMA junto a ARM11 ofrece hasta 8 canales
    • New 3DS agrega un CoreLink DMA-330 más junto al bloque ARM11
  • Los desarrolladores de 3DS por lo general solo acceden a ARM11 MPCore, y los programas se escriben con un modelo de multithreading basado en hilos
  • En New 3DS, si los metadatos del juego indican que está dirigido al nuevo modelo, el OS activa funciones como el reloj más rápido, la RAM adicional y la caché L2
    • De lo contrario, desactiva el hardware exclusivo de New para mantener la compatibilidad
    • El juego puede incluir juntas las bases de código para Old y New

Pipeline gráfica y PICA200

  • Nintendo 3DS fue la primera de la línea portátil de Nintendo en usar un núcleo IP de un proveedor de GPU en lugar de su propia PPU
  • Nintendo licenció la PICA200 de DMP y la integró en el SoC CTR de la CPU; la GPU funciona a 268 MHz
  • PICA200 es un procesador 3D de bajo consumo y usa la arquitectura Maestro 2G, compatible con OpenGL ES 1.1 y con elementos de OpenGL ES 2.0 extendidos
  • La etapa de píxeles tiene una estructura de funciones fijas, pero las Maestro functions ofrecen iluminación de fragmentos, algoritmos de sombras múltiples, subdivisión de polígonos, bump mapping, texturas procedurales y varios efectos de niebla
  • La VRAM dedicada de la GPU es de apenas 6 MB, por lo que los programadores deben poner en VRAM los comandos, buffers y texturas repetidas que requieren acceso inmediato, y ubicar el resto en FCRAM
    • PICA200 cuenta con DMA para transferencias entre FCRAM y VRAM
  • El controlador LCD no entiende directamente el formato de los render buffers de PICA200, por lo que se necesita un framebuffer LCD separado
    • Se requieren al menos 3: ojo izquierdo superior, ojo derecho superior y pantalla inferior
    • Para evitar artefactos, se puede disponer de un conjunto duplicado para page flipping
  • Durante un juego, la GPU normalmente renderiza tres pantallas
    • Ojo izquierdo superior: 400×240
    • Ojo derecho superior: 400×240
    • Inferior: 320×240
    • Todas muestran hasta 16,78 millones de colores con color RGB de 8 bits
  • El pipeline de PICA200 se compone de etapas de comandos, vértices, geometría, rasterizador, fragmentos y posprocesamiento
    • La etapa de comandos lee el command buffer y dibuja polígonos
    • La etapa de vértices usa en paralelo 4 Vertex Processors; si se activa el shader de geometría, solo quedan disponibles 3
    • La etapa de geometría toma un Vertex Processor y lo usa como shader separado
    • La etapa de fragmentos está compuesta por 4 unidades de textura y una unidad de shading
    • No hay pixel shader; se combinan 6 combinadores de color con funciones Maestro
    • La etapa de posprocesamiento puede realizar pruebas de alfa, stencil y profundidad, además de blending y supersampling 2×2
  • En New 3DS parece haberse agregado un DSP llamado MVD, que realiza descompresión H.264/MJPEG y conversión YUV a RGB
    • Al parecer, el navegador web de New 3DS lo usa para reproducción de video acelerada
  • Las PPU para juegos de DS y GBA también están dentro del SoC
    • Los juegos de DS/DSi/GBA usan la PPU como en el hardware original
    • La salida pasa por LgyFB hacia el framebuffer, y PICA200 se encarga de mostrarla
    • Esta estructura añade latencia, pero a un nivel imperceptible para el usuario

Audio e I/O

  • El SoC tiene 2 bloques de audio
    • Un DSP propio para juegos de 3DS
    • CSND de la familia DS, usado por juegos de 3DS, DS y GBA
  • El DSP exclusivo de 3DS es CEVA TeakLite II y funciona a unos 134 MHz
    • Entrega salida estéreo de 2 canales, con muestreo de hasta 32 kHz y resolución de 16 bits
    • Usa 512 KB de RAM como espacio de trabajo del DSP, con doble buffer de 256 KB cada uno
    • El DSP puede mezclar hasta 24 canales de muestras ADPCM y PCM
  • El programa sube en tiempo de ejecución el firmware del DSP escrito por Nintendo e incluido en el SDK oficial, y el servicio de audio del SO abstrae la comunicación con el DSP
  • CSND ofrece 32 canales, el doble que el bloque equivalente de DS
  • El I/O externo tiene una configuración más orientada a competir con smartphones que con consolas portátiles
    • Botones digitales, Circle Pad analógico, sliders de 3D y volumen, interruptor de Wi‑Fi
    • Sensor táctil resistivo, giroscopio, acelerómetro
    • Una cámara frontal y dos cámaras traseras
    • Transceptor infrarrojo, ranura para tarjeta SD, jack de 3,5 mm, lector de tarjetas de juego
  • New 3DS agrega más I/O
    • 2 botones digitales, C-Stick, lector NFC en la pantalla inferior
    • LED infrarrojo para seguimiento facial
    • Ranura microSD en lugar de SD
    • Eliminación del interruptor de Wi‑Fi y control por software
  • Las interfaces internas se dividen en SPI, HID, I²C, periféricos de alta velocidad basados en FIFO y MCU
    • SPI conecta la flash para almacenamiento de las tarjetas de juego, la gestión de energía de DS, parte del Wi‑Fi, la pantalla táctil, el sonido, el micrófono, el Circle Pad, etc.
    • HID lee el keypad digital como un registro de 16 bits
    • I²C conecta las cámaras, el transceptor infrarrojo, NFC, el módulo de seguimiento facial QTM, el giroscopio, el MCU, etc.
    • La eMMC y la ranura SD se conectan como periféricos de 16 MB/s mediante registros FIFO
  • El Auxiliary Microcontroller es un MCU 78K0R diseñado por NEC y fabricado por Renesas, y gestiona el LCD, los LED, la administración de energía, la batería, el RTC, el slider 3D, los botones HOME/encendido, etc.
  • Los servicios basados en I/O incluyen QR Reader, AR Games, Face Raiders, Amiibos, SpotPass, StreetPass y Play Coins

Sistema operativo y estructura de arranque

  • Nintendo 3DS almacena varios firmwares para ofrecer ejecución nativa, retrocompatibilidad y modo de mantenimiento
    • NATIVE_FIRM: hace funcionar las funciones nativas de 3DS, con ARM11 ejecutando el programa principal
    • TWL_FIRM: hace que la 3DS funcione como una Nintendo DSi, con ARM9 y ARM7 al frente
    • AGB_FIRM: hace que la 3DS funcione como una Game Boy Advance, con ARM7 ejecutando el programa principal
    • SAFE_FIRM: se usa para tareas de mantenimiento como actualizaciones del sistema
  • En NATIVE_FIRM, ARM9 y ARM11 tienen cada uno roles de SO separados
    • ARM9 ejecuta Kernel9 y Process9, y se encarga de seguridad, cifrado, I/O, sistema de archivos, verificación e instalación de títulos
    • ARM11 ejecuta Kernel11 y varios procesos de usuario, y ofrece red, HOME Menu, lanzamiento de apps y abstracción de servicios de hardware
  • El scheduler de ARM11 no trata los núcleos como núcleos de propósito general normales
    • El primer núcleo, appcore, es para juegos y usa scheduling FIFO
    • El segundo núcleo, syscore, es para tareas del sistema y puede prestar el 30% de su tiempo de ejecución a aplicaciones de usuario
    • El cuarto núcleo MP11 de New 3DS está dedicado al seguimiento facial
    • El tercer núcleo MP11 no se agenda por defecto, por lo que permanece mayormente inactivo
    • El CDMA adicional de New 3DS solo es accesible durante el arranque y no se usa después
  • La RAM que una app puede usar realmente es menor que la FCRAM total
    • 3DS original: 64 MB por defecto de 128 MB
    • New 3DS: 124 MB por defecto de 256 MB
    • Con el flag APPMEMTYPE, se puede arrancar sin cargar el HOME Menu y obtener hasta 96 MB y 176 MB, respectivamente
  • Los medios de almacenamiento se componen de Boot ROM, OTP, eMMC NAND y SD/microSD
    • Boot9 y Boot11 son ROM de arranque y están ocultas por seguridad
    • OTP contiene información única de la consola y claves de cifrado que se graban una sola vez durante la fabricación
    • En la eMMC NAND se almacenan datos del sistema, firmware y datos de usuario de los modos 3DS/DSi
    • En SD/microSD se almacenan software de eShop, datos guardados, fotos, grabaciones, etc., protegidos con AES-128-CTR
  • Al arrancar, Boot9 de ARM9 opera primero, despierta a Boot11 de ARM11 y luego verifica el encabezado NCSD y las particiones de firmware en la NAND
    • Verifica hashes SHA-256 y firmas RSA-2048 para encontrar un firmware válido
    • Si falla, intenta arrancar desde la flash del módulo Wi‑Fi; si eso también falla, muestra una pantalla de error
    • Cuando NATIVE_FIRM queda cargado, la secuencia continúa con Kernel9, Process9, Kernel11, procesos del sistema, NS y HOME Menu o el juego
  • HOME Menu es un shell de navegación de una sola página que muestra las aplicaciones instaladas en una cuadrícula desplazable
    • El módulo NS también ofrece llamadas a Applets como el overlay del botón HOME y el teclado virtual
    • En New 3DS, aunque un juego se ejecute en modo de compatibilidad, los Applets y las rutinas de NS pueden usar todo el hardware
  • Las actualizaciones del sistema pueden realizarse en línea o mediante cartuchos de juego
    • Los cartuchos solo incluyen la actualización del sistema, sin actualizaciones de apps de usuario
    • Las actualizaciones por red incluyen el paquete completo
    • La instalación la realiza System Updater después de reiniciar en SAFE_FIRM

Desarrollo, distribución de juegos y Virtual Console

  • El ecosistema de desarrollo de 3DS recibió la influencia de la industria de smartphones basados en ARM y de los avances en compiladores, pero Nintendo aún no proporcionaba una toolchain estándar
  • Los kits de desarrollo de hardware eran suministrados por Intelligent Systems y Kyoto MicroComputers
    • CTR-BOX consistía en una caja metálica con el hardware de 3DS y una carcasa dummy de 3DS
    • Las flashcards oficiales se usaban para distribuir prototipos de juegos a testers externos
    • Para New 3DS se ofrecía el kit SNAKE
  • El SDK oficial incluía armcc para 3DS, depurador, API de servicios de hardware y del SO, librerías gráficas, empaquetador, librerías de red, audio y video, plugin para Visual Studio 2010, herramientas y profiler de PICA200
  • Había cuatro tipos de librerías gráficas
    • GL: API OpenGL ES simple, pero lenta
    • GD: alternativa más rápida que genera comandos de PICA200
    • GR: API de comandos PICA200 más cercana al hardware
    • GX: librería general para administrar PICA200
  • Había tres medios para ejecutar juegos
    • Gamecard: podía contener ROM de 128 MB a 4 GB o Flash de hasta 2 GB y memoria de respaldo para guardado
    • eShop/SD Card: admitía software descargable, preventas y distribución de DLC
    • Local wireless: Download Play continuó en 3DS; el juego transferido se instalaba en la NAND y usaba solo un slot
  • Virtual Console ofrecía juegos de DSiWare, NES/Famicom, Sega Game Gear, Game Boy y Game Boy Color a través de eShop
    • Los usuarios de New 3DS también podían acceder al catálogo de Super Nintendo
    • La mayoría funcionaba como un paquete de app que incluía la ROM y el emulador
  • Los juegos de Game Boy Advance se ofrecían oficialmente solo a usuarios del Ambassador Program
    • No se ejecutaban mediante un emulador ARM11, sino de forma nativa en ARM7 a través de AGB_FIRM
    • Los juegos de GBA se copiaban a FCRAM y luego se reiniciaba en AGB_FIRM para que ARM7 tomara el control
  • Las actualizaciones de juegos se distribuían por eShop y se aplicaban a los tipos de juegos excepto Download Play

Seguridad, protección anticopia y homebrew

  • Los principales objetivos de seguridad de 3DS eran el Game/CTR card reader y el sistema operativo
    • Los datos internos de los cartuchos CTR estaban en formato NCSD, y el SO se encargaba de la autenticación, verificación y descifrado
    • La cadena de confianza real se concentraba en el sistema operativo y la estructura de arranque
  • Incluía hardware de seguridad dedicado
    • El flag XN de ARM11 y la MPU de ARM9 limitaban la ejecución de memoria arbitraria
    • ARM9 actuaba como un procesador dedicado a seguridad y accedía a bloques criptográficos como AES, RSA y PRNG
    • El motor AES admitía cifrado/descifrado AES-128, hasta 64 slots de claves y modos CTR/CCM/CBC/ECB
    • El motor RSA realizaba operaciones RSA basadas en clave pública y tenía 4 slots de claves
    • La OTP contenía claves únicas de la consola y el CTCert, y el CID de eMMC también se usaba para ofuscar claves
  • La cadena de confianza pasaba por verificaciones de Boot9, OTP, eMMC, NCSD, NCCH y Title
    • NCSD y NCCH usaban firmas RSA-2048 + SHA-256
    • El payload de NCCH estaba cifrado con AES-128 CTR
    • Los Title se firmaban con RSA-2048, RSA-4096 o ECDSA y SHA-256
    • El Ticket, la licencia de descarga de eShop, también se firmaba con RSA-2048 + SHA-256
  • También existían debilidades de implementación
    • La configuración de la tabla de páginas AXI WRAM de Kernel11 otorgaba permisos amplios de lectura, escritura y ejecución
    • Antes de la versión 3.0.0 del sistema, la memoria OTP no quedaba oculta
    • No había separación de privilegios entre Process9 y Kernel9
    • No había ASLR ni protección contra downgrade del sistema
    • El navegador web basado en WebKit se convirtió en un blanco recurrente de ataques
  • El homebrew y la copia tempranos partieron de las flashcards de DS
    • DSi y 3DS intentaron bloquear las flashcards mediante una whitelist de tarjetas autorizadas
    • Los fabricantes reprogramaban el encabezado del cartucho para que se identificara como otro juego autorizado
  • En 2013, Gateway3DS apareció como la primera flashcard 3DS realmente práctica
    • Blue Gateway era una flashcard de DS que instalaba el punto de entrada del exploit MSET
    • Red Gateway replicaba tarjetas de juego originales usando una FPGA y una microSD
    • Launcher.dat funcionaba como payload del exploit MSET y como custom firmware
  • Nintendo respondió con actualizaciones
    • 5.0.0-11 corrigió temporalmente el exploit MSET
    • 7.0.0-13 bloqueó el exploit de kernel y agregó un módulo RSA a la cadena de confianza de descifrado de NCCH
    • 9.3.0 parchó el exploit de kernel privado de Gateway3DS
    • Sky3DS fue agregado a la blacklist en 11.0
  • El ecosistema homebrew evolucionó con libctru, nihstro, Ninjhax y Homebrew Launcher
    • Ninjhax usaba la función de códigos QR de Cubic Ninja como punto de entrada
    • GSPWN era una vulnerabilidad que sobrescribía el heap del HOME Menu mediante DMA de la GPU
    • Homebrew Launcher ejecutaba apps homebrew sin firmar en formato .3dsx
  • memchunkhax y memchunkhax2 permitían la escalada de privilegios a Kernel11
    • Al manipular el memchunk header almacenado en FCRAM, se obtenía acceso a AXI WRAM y control de Kernel11
  • Tras la introducción de arm9loader en New 3DS en 2015, apareció arm9loaderhax
    • Era un exploit persistente que permitía la ejecución de código arbitrario con privilegios de Kernel9 durante el arranque
    • Herramientas como Luma3DS, Godmode9, Anemone3DS y nds-bootstrap se volvieron ampliamente usadas
  • Entre 2016 y 2017, el análisis de Boot9 llevó a la aparición de sighax, boot9strap y ntrboot
    • sighax aprovechaba un defecto en la verificación de firmas RSA-2048 de Boot9 para anular la cadena de confianza
    • boot9strap se convirtió en un bootloader alternativo compatible con un payload desde la tarjeta SD o con el arranque normal
    • ntrboot usaba una flashcard de DS, un imán y una combinación de botones para obtener privilegios de Boot9
    • Estas vulnerabilidades estaban en la Boot ROM, por lo que no podían corregirse con una actualización de software
  • Desde 2018, los métodos evolucionaron hacia la simplificación de la instalación de boot9strap
    • seedminer reconstruye movable.sed usando el Friend Code, el nombre de un subdirectorio de la tarjeta SD y un breve brute force
    • BannerBomb3 aprovecha un desbordamiento de pila en la app Settings durante el parseo del title banner de DSiWare
    • Se usaron rutas como unSAFE_MODE y safehax basadas en SAFE_FIRM, y menuhax67 y nimdsphax basadas en HOME Menu
  • La actualización 11.17.0 de mayo de 2023 parchó BannerBomb3, anulando uno de los últimos puntos de entrada que no requerían equipo adicional
    • Desde entonces, los usuarios necesitan un exploit de un juego 3DS legítimo, una flashcard de DS compatible con ntrboot o un exploit de WebKit

1 comentarios

 
GN⁺ 2023-09-24
Opiniones en Hacker News
  • Es realmente sorprendente que, al ejecutar juegos de Gameboy Advance, tenga una CPU GBA física real integrada.
    Leí todos los rumores antes del lanzamiento y reservé el modelo azul; como al principio pagué unos 250 dólares, fui elegible para el Ambassador Program. Cuando Nintendo bajó mucho el precio poco después del lanzamiento, como disculpa regaló varios juegos gratis, incluidos algunos que no estaban en la eShop, y quedé satisfecho.
    Volver a jugar Mario Kart Super Circuit, que disfrutaba de niño, con el excelente slide pad del 3DS fue como un sueño, y saber que corría en una CPU real como en el GBA que usaba antes lo convirtió en un recuerdo aún más especial.

    • La razón es todavía más sorprendente. Como Nintendo fue apilando la retrocompatibilidad como una muñeca matrioshka, la CPU del GBA terminó incluida casi por casualidad.
      El Nintendo 3DS incluye toda la arquitectura del Nintendo DSi, y la CPU del DSi también actúa como CPU supervisora del sistema. El DSi, originalmente, era en gran medida una versión overclockeada de la arquitectura del Nintendo DS, y los dos primeros modelos de Nintendo DS también incluían el ARM7TDMI del GBA para la retrocompatibilidad mediante la ranura de GBA.
      Durante el Ambassador Program, Nintendo distribuyó el firmware AGB_FIRM, que arranca el 3DS en modo Game Boy Advance, y para el modo Nintendo DS estaba TWL_FIRM. Si hoy hackeas un 3DS, también puedes cargar otro software de GBA, así que, salvo por dependencias de periféricos, puede ejecutar juegos de GBA con una precisión prácticamente perfecta.
    • Sony también usó un enfoque parecido.
      La PlayStation 2 necesitaba un chip de entrada/salida, y Sony eligió la CPU de PS1. Al ejecutar juegos de PS1, le pasaba la ejecución a esa parte.
      Si no recuerdo mal, las primeras PlayStation 3 incluían la CPU y la GPU de PS2, pero creo que no cumplían gran función cuando no se ejecutaban juegos de PS2. Es muy probable que luego las quitaran al pasar a emulación para reducir costos.
    • Poner una CPU de Gameboy Advance física real es un truco viejo, pero sigue siendo genial.
      El GBA también incluía la CPU del GBC por retrocompatibilidad, y el modo se cambiaba con un interruptor físico que presionaba el propio cartucho. Si recuerdo bien, la PS2 también reutilizaba la CPU de PS1 como componente de entrada/salida en la placa, lo que permitía usarla para retrocompatibilidad, mientras otros componentes recibían ayuda de emulación.
    • Walmart empezó a venderlo al precio ya rebajado unos días antes de la rebaja oficial y del cierre de solicitudes del Ambassador Program.
      Gracias a un post de Reddit, pude comprarlo al precio bajo y además recibir los juegos gratis. Casi no jugué esos juegos gratuitos, pero me sentí como si hubiera engañado al sistema.
    • La CPU del GBA forma parte de la CPU del NDS, por eso también está dentro del 3DS.
  • El 3DS tuvo un arranque muy lento, pero terminó convirtiéndose en una de mis consolas favoritas.
    Como nunca tuve un N64, jugué Ocarina of Time y Majora’s Mask por primera vez gracias a sus excelentes remasterizaciones en 3D. La retrocompatibilidad completa con DS también era una gran ventaja, y para evitar el feo escalado no entero de la pantalla había que mantener presionado Start al iniciar.
    La variedad de homebrew y emulación que soporta una consola con softmod también es amplia, lo que la vuelve un aparatito muy atractivo. También me encanta el diseño del New 3DS pequeño, uno de mis favoritos de todos los tiempos, y compré muchas faceplates intercambiables con diseños llamativos y juguetones.
    Otra cosa que me encantó fue que, cuando la batería empezó a envejecer, pude llamar a Nintendo y comprar dos baterías originales nuevas para la mía y la de mi esposa. Costaban unas 15 libras cada una y se podían reemplazar sin desarmar la consola. Es algo raro de ver hoy en día.

  • Durante la pandemia, por culpa del ADHD, terminé comprando nada menos que tres New Nintendo 3DS XL.
    Una la importé de Japón y la convertí a ROM de EE. UU. Me encanta para viajar. El efecto 3D es genial, también me gusta que se pueda apagar, y la duración de la batería es excelente.
    Pero, como pasa con cualquier hobby, cuando los objetos se vuelven escasos dan ganas de acapararlos y coleccionarlos, y como no se pueden usar tres consolas a la vez, creo que ahora debería deshacerme de ellas.

    • Si tienes tres consolas, deberías jugar Tri Force Heroes con dos amigos.
    • Si hubiera una forma de evitar que las baterías se arruinen, o si pudiera conseguir baterías de reemplazo en el futuro, creo que simplemente la conservaría.
      Hace tiempo compré una New Nintendo 2DS XL; es la última iteración de la familia DS y ejecuta juegos de DS, DSi y 3DS. Como solo salieron unos pocos juegos exclusivos para la “new” DS, en la práctica soporta unos 15 años de historia de juegos.
      Intento comprar juegos de DS cada vez que los veo, pero ya es difícil encontrar buenos precios, y algunos títulos como Bravely Default todavía cuestan alrededor de 60 euros por aquí. En DS también hay muchísimos juegos mediocres producidos en masa, así que esos los salto.
  • Hacer que el ajuste de profundidad del 3DS se controle con un slider físico de acceso muy fácil fue una decisión de diseño genial.
    No sé qué investigación los llevó a hacer que un elemento central de la función 3D se ajustara de esa manera, pero marcó una diferencia decisiva en la usabilidad del 3D.

    • A estas alturas uno pensaría que las pantallas con sensación de profundidad ya serían una función común en dispositivos con touchscreen.
      Como existe Face ID, se puede saber qué tan separados están los ojos y también se podría ajustar automáticamente ese valor del slider.
  • Este artículo forma parte de una excelente serie: https://www.copetti.org/writings/consoles/

  • Una de mis funciones favoritas en un 3DS con jailbreak es la app NSUI: https://3ds.eiphax.tech/nsui
    Gracias a los lanzamientos oficiales de Virtual Console se podían jugar algunos juegos antiguos de Nintendo en el 3DS, pero se puede usar el mismo wrapper con cualquier juego de los sistemas compatibles. Más que un emulador, es casi un wrapper, así que el rendimiento y la compatibilidad mejoran de inmediato.
    Por eso el 3DS se vuelve una portátil muy buena para disfrutar juegos de NES/SNES/GB/GBC/GBA con precisión a nivel de píxel.
    Otra cosa de la que me di cuenta recién hace unos años es que cuanto más grande es la tarjeta microSD, más lento se vuelve el 3DS. Hasta donde sé, toda la consola escanea el almacenamiento completo bloque por bloque, así que a partir de 64 GB se vuelve dolorosamente lenta. En especial con juegos inyectados de GBA, porque el 3DS prácticamente se reinicia en ese modo y vuelve a escanear el almacenamiento.

  • Recuerdo la parte que decía: “Antes de la versión 3.0.0 del sistema, la memoria OTP no estaba oculta, y si había cualquier vulnerabilidad, se podían extraer las claves OTP sin problema”
    Antes, para hackear una 3DS había que hacer downgrade al firmware 3.0.0 para extraer el OTP. Pero la 3.0.0 no era totalmente compatible con la New 3DS, así que en ese modelo, con solo cerrar la tapa estando en ese firmware antiguo, la consola quedaba brickeada permanentemente. Qué buenos tiempos

  • Esta serie es buenísima
    Si quieres probar homebrew para 3DS, mira https://github.com/devkitPro/libctru

  • Espero que Nintendo nunca abandone la experiencia de consola portátil completa en la palma de la mano
    También me gustaría que crezca la industria más amplia de portátiles indie
    Lo que parece la muerte inminente de los dispositivos portátiles de gama alta es el cloud gaming. Incluso el enfoque de hacer correr la consola de casa y streamear al teléfono
    Al final, todo depende de qué elija cada quien con su billetera. Extraño la GBC

    • No creo que las consolas portátiles vayan a morir. El hardware sigue mejorando, y los requisitos de hardware se están estancando
      Creo que la Switch tuvo un gran éxito con juegos indie 2D como Stardew Valley, Hades y Dead Cells. Ese diseño de juegos funciona bien, y los buenos gráficos 2D nunca se ven viejos
      Dudo que la gente pague por un modelo de streaming desfavorable para el consumidor para jugar excelentes juegos que corren hasta en una papa
    • Me parece muy poco probable. Stadia cerró, pero tanto la Switch como la Steam Deck fueron un gran éxito
      La latencia del cloud gaming y su dependencia de una conexión de red estable todavía son un problema para mucha gente. Además, no creo que la mayoría de los gamers quiera pagar otra suscripción, y es muy probable que el cloud gaming termine ligado a una suscripción
      Si de todos modos necesitas hardware para jugar, mejor usar un buen dispositivo portátil. Incluso fabricantes de PC como Asus están haciendo portátiles como la RoG Ally, y la Switch 2 y la Steam Deck 2 son prácticamente seguras. Más bien parece que las portátiles siguen mejorando y aumentando su cuota de mercado
    • Odio que Sony haya descontinuado la PSP, pero entiendo por qué. Es la misma razón por la que la Steam Deck y sus variantes más potentes tienen éxito
      Hoy los juegos no son tan exclusivos como antes, y si una compañía no integra todo de forma tan estrecha como Nintendo, al punto de unir sobremesa y portátil en un solo dispositivo, termina creando una separación innecesaria
      Si Nintendo hubiera lanzado también una consola de sobremesa aparte de la Switch, no habría sido una estructura sostenible
      Es divertido ver cómo la gente elogia la “genialidad” y la “innovación” de Nintendo por hacer una portátil que se conecta al televisor. Mientras tanto, la PSP Go y su dock para TV están como diciendo: “¿Chicos, no se acuerdan de mí?”. Me gusta mucho la PSP Go; es realmente pequeña y linda
    • Los chips solo se volverán más potentes y más pequeños. Ya se pueden jugar muchos juegos incluso en una Raspberry Pi, y creo que dentro de unos 10 años podremos correr juegos de la generación actual en dispositivos de tamaño similar
      Estoy pensando en hacer, como proyecto divertido, una consola portátil para mi hija
  • Artículos como este son excelentes
    Me interesaba la arquitectura de GB/GBC y quería hacer juegos para esa plataforma, pero todavía no había encontrado este artículo. Gracias por publicarlo y gracias a Rodrigo por escribirlo