Peanut-GB est une bibliothèque d'émulateur Game Boy à en-tête de fichier unique basée sur cet émulateur gameboy. L'objectif est de créer une bibliothèque d'émulateurs Game Boy (DMG) haute vitesse et portable qui peut être utilisée pour n'importe quelle plate-forme dotée d'un compilateur C99.
Cet émulateur est très rapide . A tel point qu’il peut tourner à plein régime sur le Raspberry Pi Pico ! Consultez BENCHMARK.md pour les benchmarks de Peanut-GB.
Seule la Game Boy originale (DMG) est prise en charge pour le moment, mais des travaux préliminaires ont été réalisés pour prendre en charge la Game Boy Color (voir #50).
Cet émulateur est un travail en cours et peut être inexact (bien qu'il réussisse les instructions CPU et les tests de synchronisation des instructions de Blargg). En tant que tel, certains jeux peuvent ne pas fonctionner correctement ou ne pas fonctionner du tout. Veuillez rechercher un émulateur alternatif si la précision est importante.
L'exemple d'implémentation phare est donné dans peanut_sdl.c, qui utilise SDL2 pour dessiner l'écran et prendre les entrées. Exécutez cmake
ou make
dans le dossier ./examples/sdl2/ pour le compiler.
Exécutez peanut-sdl
, qui crée une fenêtre de zone de dépôt dans laquelle vous pouvez glisser et déposer un fichier ROM. Vous pouvez également l'exécuter dans un terminal en utilisant peanut-sdl game.gb
, qui créera automatiquement le fichier de sauvegarde game.sav
pour le jeu si aucun n'est trouvé. Ou exécutez avec peanut-sdl game.gb save.sav
pour spécifier un fichier de sauvegarde.
Remarque : les GIF animés présentés ici sont limités à 50 ips, alors que l'émulation fonctionnait à environ 60 ips natifs. En effet, les décodeurs GIF populaires limitent le FPS maximum à 50.
Action | Clavier | Joypad |
---|---|---|
UN | z | UN |
B | x | B |
Commencer | Retour | COMMENCER |
Sélectionner | Retour arrière | DOS |
D-Pad | Touches fléchées | DPAD |
Répéter A | un | |
Répéter B | s | |
Vitesse normale | 1 | |
Turbo x2 (Maintenir) | Espace | |
Turbo X2 (bascule) | 2 | |
Turbo X3 (bascule) | 3 | |
Turbo X4 (bascule) | 4 | |
Réinitialiser | r | |
Changer de palette | p | |
Réinitialiser la palette | Maj + p | |
Plein écran | F11/f | |
Saut d'image (bascule) | o | |
Entrelacé (basculer) | je | |
Vider le BMP (basculer) | b |
Les modes Frameskip et Entrelacé sont tous deux désactivés par défaut. Le Frameskip bascule entre 60 FPS et 30 FPS.
En appuyant sur «b», chaque image sera sauvegardée sous forme de fichier bitmap 24 bits dans le dossier actuel. Voir /screencaps/README.md pour plus d'informations.
Sans ordre particulier, et liste non exhaustive, les projets suivants utilisent Peanut-GB.
La documentation des prototypes de fonctions se trouve au bas de peanut_gb.h.
L'implémentation frontale doit fournir un certain nombre de fonctions à la bibliothèque. Ces fonctions sont définies lors de l'appel de gb_init.
Les fonctions facultatives suivantes peuvent être définies pour des fonctionnalités supplémentaires.
Cette fonction est requise pour le dessin LCD. Définissez cette fonction en utilisant gb_init_lcd et activez la fonctionnalité LCD dans Peanut-GB en définissant ENABLE_LCD sur 1 avant d'inclure peanut_gb.h. ENABLE_LCD est défini sur 1 par défaut s'il n'a pas été défini précédemment. Si gb_init_lcd n'est pas appelé ou si lcd_draw_line est défini sur NULL, alors le dessin LCD est désactivé.
Les données de pixels envoyées à lcd_draw_line contiennent à la fois des données de teinte et de calque. Les deux premiers bits les moins significatifs sont les données de teinte (noir, foncé, clair, blanc). Les bits 4 et 5 sont des données de couche (OBJ0, OBJ1, BG), qui peuvent être utilisées pour ajouter plus de couleurs au jeu de la même manière que la Game Boy Color le fait pour les anciens jeux Game Boy.
Ces fonctions sont requises pour l’émulation et la sortie audio. Peanut-GB n'inclut pas d'émulation audio, une bibliothèque externe doit donc être utilisée. Ces fonctions doivent être définies et la sortie audio doit être activée en définissant ENABLE_SOUND sur 1 avant d'inclure peanut_gb.h.
Ces fonctions sont requises pour la communication série. Définissez ces fonctions en utilisant gb_init_serial. Si ces fonctions ne sont pas définies, l'émulation agira comme si aucun câble de liaison n'était connecté.
Ces fonctions sont fournies par Peanut-GB.
Cette fonction réinitialise le jeu en cours, comme si la console avait été éteinte et rallumée. gb_reset est appelé par gb_init pour initialiser les registres du CPU.
Cette fonction renvoie la taille de sauvegarde du jeu en cours de lecture. Cette fonction renvoie 0 si le jeu n'utilise aucune donnée de sauvegarde.
Cette fonction exécute le processeur jusqu'à ce qu'une image complète soit restituée sur l'écran LCD.
Cette fonction calcule un hachage du titre du jeu. Ce hachage est calculé de la même manière que le Game Boy Color pour ajouter de la couleur aux jeux Game Boy.
Cette fonction renvoie le nom du jeu.
Réglez l'heure de l'horloge en temps réel (RTC). Certains jeux utilisent ces données RTC.
Obsolète : ne pas utiliser. Le RTC est coché en interne.
Exécutez une image de bootrom lors de la réinitialisation. Une réinitialisation doit être effectuée après avoir appelé gb_set_bootrom pour que ces modifications prennent effet. En effet, gb_init appelle gb_reset, mais gb_set_bootrom doit être appelé après gb_init. Le bootrom doit être un bootrom DMG ou MGB.
Ce projet est sous licence MIT.