Peanut-GB es una biblioteca de emulador de Game Boy con encabezado de archivo único basada en este emulador de Gameboy. El objetivo es crear una biblioteca de emuladores de Game Boy (DMG) portátil y de alta velocidad que pueda usarse para cualquier plataforma que tenga un compilador C99.
Este emulador es muy rápido . ¡Tanto es así que puede funcionar a toda velocidad en Raspberry Pi Pico! Consulte BENCHMARK.md para conocer los puntos de referencia de Peanut-GB.
En este momento, solo se admite la Game Boy (DMG) original, pero se ha completado el trabajo preliminar para admitir Game Boy Color (consulte el n.° 50).
Este emulador es un trabajo en progreso y puede ser inexacto (aunque pasa las instrucciones de CPU y las pruebas de sincronización de instrucciones de Blargg). Como tal, algunos juegos pueden ejecutarse incorrectamente o no ejecutarse en absoluto. Busque un emulador alternativo si la precisión es importante.
El ejemplo principal de implementación se proporciona enpeanut_sdl.c, que utiliza SDL2 para dibujar la pantalla y recibir información. Ejecute cmake
o make
en la carpeta ./examples/sdl2/ para compilarlo.
Ejecute peanut-sdl
, que crea una ventana de zona de colocación en la que puede arrastrar y soltar un archivo ROM. Alternativamente, ejecútelo en una terminal usando peanut-sdl game.gb
, que creará automáticamente el archivo guardado game.sav
para el juego si no se encuentra ninguno. O ejecútelo peanut-sdl game.gb save.sav
para especificar un archivo guardado.
Nota: Los GIF animados que se muestran aquí están limitados a 50 fps, mientras que la emulación se ejecutaba a los ~60 fps nativos. Esto se debe a que los decodificadores GIF populares limitan el FPS máximo a 50.
Acción | Teclado | mando |
---|---|---|
A | z | A |
B | incógnita | B |
Comenzar | Devolver | COMENZAR |
Seleccionar | Retroceso | ATRÁS |
pad direccional | Teclas de flecha | DPAD |
Repetir A | a | |
Repetir B | s | |
Velocidad normal | 1 | |
Turbo x2 (Mantener) | Espacio | |
Turbo X2 (alternar) | 2 | |
Turbo X3 (alternar) | 3 | |
Turbo X4 (alternar) | 4 | |
Reiniciar | r | |
Cambiar paleta | pag | |
Restablecer paleta | Mayús + p | |
Pantalla completa | F11/f | |
Saltar fotogramas (alternar) | oh | |
Entrelazar (alternar) | i | |
Volcar BMP (alternar) | b |
Los modos Frameskip y Interlaced están desactivados de forma predeterminada. El Frameskip alterna entre 60 FPS y 30 FPS.
Al presionar 'b' se volcará cada cuadro como un archivo de mapa de bits de 24 bits en la carpeta actual. Consulte /screencaps/README.md para obtener más información.
Sin ningún orden en particular y en una lista no exhaustiva, los siguientes proyectos utilizan Peanut-GB.
La documentación de los prototipos de funciones se puede encontrar en la parte inferior de pean_gb.h.
La implementación del front-end debe proporcionar una serie de funciones a la biblioteca. Estas funciones se configuran al llamar a gb_init.
Se pueden definir las siguientes funciones opcionales para mayor funcionalidad.
Esta función es necesaria para el dibujo LCD. Configure esta función usando gb_init_lcd y habilite la funcionalidad LCD dentro de Peanut-GB definiendo ENABLE_LCD en 1 antes de incluir pean_gb.h. ENABLE_LCD se establece en 1 de forma predeterminada si no se definió previamente. Si no se llama a gb_init_lcd o lcd_draw_line se establece en NULL, entonces el dibujo LCD está deshabilitado.
Los datos de píxeles enviados a lcd_draw_line vienen con datos de sombra y de capa. Los dos primeros bits menos significativos son los datos de tono (negro, oscuro, claro, blanco). Los bits 4 y 5 son datos de capas (OBJ0, OBJ1, BG), que se pueden usar para agregar más colores al juego de la misma manera que Game Boy Color lo hace con los juegos más antiguos de Game Boy.
Estas funciones son necesarias para la emulación y salida de audio. Peanut-GB no incluye emulación de audio, por lo que se debe utilizar una biblioteca externa. Estas funciones deben definirse y la salida de audio debe habilitarse definiendo ENABLE_SOUND en 1 antes de incluir pean_gb.h.
Estas funciones son necesarias para la comunicación en serie. Configure estas funciones usando gb_init_serial. Si estas funciones no están configuradas, la emulación actuará como si no hubiera ningún cable de enlace conectado.
Estas funciones las proporciona Peanut-GB.
Esta función reinicia el juego que se está jugando, como si la consola se hubiera apagado y encendido. gb_init llama a gb_reset para inicializar los registros de la CPU.
Esta función devuelve el tamaño guardado del juego que se está jugando. Esta función devuelve 0 si el juego no utiliza ningún dato guardado.
Esta función ejecuta la CPU hasta que se representa un fotograma completo en la pantalla LCD.
Esta función calcula un hash del título del juego. Este hash se calcula de la misma manera que Game Boy Color para agregar color a los juegos de Game Boy.
Esta función devuelve el nombre del juego.
Configure la hora del reloj de tiempo real (RTC). Algunos juegos utilizan estos datos RTC.
En desuso: no utilizar. El RTC está marcado internamente.
Ejecute una imagen de bootrom al reiniciar. Se debe realizar un reinicio después de llamar a gb_set_bootrom para que estos cambios surtan efecto. Esto se debe a que gb_init llama a gb_reset, pero se debe llamar a gb_set_bootrom después de gb_init. La ROM de arranque debe ser una ROM de arranque DMG o MGB.
Este proyecto está bajo la licencia MIT.