Emulador de Game Boy, Game Boy Color y Game Boy Advance para Android con núcleo nativo C++20 e interfaz Material 3.
Descripción • Características • Requisitos • Compilación • Arquitectura • Créditos
AS GBA Emulator es un emulador de Game Boy, Game Boy Color y Game Boy Advance de código abierto diseñado para dispositivos Android. Su motor de emulación está escrito en C++20 y se ejecuta en un hilo nativo independiente con sincronización contra el reloj de audio del sistema, mientras que la capa de aplicación y la interfaz gráfica están construidas desde cero con Jetpack Compose (Material 3).
La consola se decide sola al abrir un cartucho, por su extensión o por las marcas de su cabecera. Game Boy y Game Boy Color comparten el mismo motor en dos modos de hardware, así que .gb y .gbc no son dos emuladores distintos: la misma implementación decide al cargar la ROM si corre en DMG (160×144, cuatro sombras con el perfil clásico de la pantalla original) o en CGB (160×144 a color).
Note
Este proyecto no incluye ROMs ni BIOS. Es necesario proporcionar archivos propios legalmente adquiridos.
| Característica | Descripción |
|---|---|
| ⚡ Núcleo C++20 Nativo | Emulación en hilo dedicado de CPU, PPU, APU, DMA, temporizadores y cartucho. |
| 🎮 Game Boy y Game Boy Color | Cartuchos .gb y .gbc con el mismo núcleo que la GBA: 160×144, modo DMG monocromo o CGB a color según lo que diga la cabecera. |
| 🔊 Sincronización de Audio | Salida de sonido ajustada al reloj de audio del sistema para evitar cortes y desfases. |
| 🕹️ Controles Táctiles Ajustables | Botones M3 redimensionables y reubicables, con guardado de plantilla independiente para vertical y horizontal. |
| 🎮 Soporte de Mandos Físicos | Reasignación completa para controles Bluetooth y USB OTG (botones, gatillos y palanca analógica). |
| 💾 Detección Real de Guardado | Identificación de Flash (64/128 KiB), SRAM y EEPROM (512 B/8 KiB) inspeccionando los marcadores del SDK oficial. |
| 🚀 Soporte de ROMs Extendidas | Ejecución fluida de ROMs estándar y hackroms de 32 MiB y 64 MiB. |
| 📑 Menú Rápido In-Game | Bottom sheet intuitivo para gestión de salvaguardas y ajustes sin pausar abruptamente la sesión. |
- Android Studio con el siguiente entorno instalado:
- NDK:
28.2.13676358 - CMake:
3.22.1
- NDK:
- JDK: 11 o superior.
- Gradle: 9.3.1 en el sistema (el repositorio no incluye el wrapper
gradlew). - Dispositivo objetivo: Android 7.0 (API Nivel 24) o superior.
-
Clona el repositorio e importa el proyecto en Android Studio:
git clone https://github.com/AndreDev66/AS-GBA-Emulator.git
-
Permite que Gradle sincronice las dependencias del módulo
:app. -
Ejecuta el objetivo
appen un dispositivo físico o emulador.
Para generar el paquete de depuración (Debug APK):
gradle :app:assembleDebugEl binario resultante estará disponible en:
app/build/outputs/apk/debug/app-debug.apk
El proyecto separa de forma estricta la interfaz de usuario en Kotlin del motor de emulación nativo en C++20:
app/src/main/
├── java/com/example/ # Capa de UI (Jetpack Compose) y lógica de la aplicación
└── cpp/
├── ravenemu/ # Núcleo de emulación (C++20): common, gba, gb y gbc
└── asgba_jni.cpp # Puente JNI entre Kotlin y C++
La clase com.example.core.GBACore actúa como el punto de acceso central:
- Posee y gestiona el hilo de emulación dedicado.
- Administra el framebuffer compartido y el flujo de salida de audio.
- Decide la consola al cargar la ROM y cambia de motor nativo si hace falta.
- Serializa la comunicación y las llamadas a la API nativa vía JNI entre el hilo de interfaz y el núcleo.
- Desarrollo principal en interfaz: y Mejoras del Núcleo Andrés Socorro.
- Núcleo de emulación: Motor en C++20 del proyecto RavenEmu, integrado a través del puente JNI (
app/src/main/cpp/ravenemuyapp/src/main/cpp/asgba_jni.cpp). El código de RavenEmu se conserva en su mayoría, pero con múltiples mejoras realizadas por mi.
Este proyecto está bajo la licencia GPL-3.0. Consulta LICENSE y NOTICE.