NanoBoyAdvance
NanoBoyAdvance est un émulateur open source dédié à la Game Boy Advance (GBA), développé en C++ avec une approche cycle-accurate pour garantir une fidélité maximale. Il cible les joueurs exigeants grâce à des fonctionnalités avancées comme une qualité audio améliorée (support du moteur MusicPlayer2000), des options de post-traitement (correction des couleurs, upscaling xBRZ, simulation de ghosting LCD), et un système de sauvegarde d’état avec 10 slots.
Sur macOS, il fonctionne via SDL2 et est compatible avec les versions récentes (à partir de macOS 10.15). L’émulateur propose aussi des outils de débogage (visualisation des palettes, tuiles, arrière-plans et sprites) et une émulation précise des composants matériels (CPU, DMA, timers, PPU), validée par des tests rigoureux (AGS, mGBA, ARMWrestler). La configuration nécessite CMake, SDL3 et Qt6, disponibles via Homebrew sur macOS.
Dernière mise à jour :
Plateformes
Architecture
Mac OS X - macOS
Apple Silicon
64 bits
SDL Library
Téléchargement et liens
Historique des versions
v1.8.3
-
Mise à jour majeure de l’infrastructure :
- Passage complet à Qt 6 (impactant potentiellement les performances et la stabilité, avec un avertissement de sauvegarde des fichiers avant mise à jour).
-
Améliorations techniques :
- Ajout de modes de fast-forward (2x, 4x, 8x) et option d’infinite speed pour le jeu en accéléré.
-
Corrections critiques sur macOS :
- Résolution d’un lag des contrôles (manettes/joysticks) sous macOS.
-
Suppression de supports obsolètes :
- Désactivation des builds macOS Intel (seuls les builds Apple Silicon sont maintenus).
-
Mise à jour des dépendances et nettoyage du dépôt (suppression de liens cassés et documentation redirigée).
Changelog complet
v1.8.2
-
Nouveauté majeure :
- Implémentation du shader LCD1x pour une meilleure gestion des effets d'affichage (crédits à @DestinyXZ9).
-
Améliorations techniques (CPU/ARM) :
- Correction d’un conflit logique dans la gestion des instructions LDM en mode utilisateur (bus conflict).
- Fix des accès hors limites lors du basculement entre modes CPU invalides (ex. : transitions invalides).
- Optimisations des lectures des GPR (registres généraux) et du SPSR (Saved Program Status Register).
- Optimisation des opérations arithmétiques LSL, LSR, ASR, ROR (décalages et rotations).
- Implémentation de l’algorithme de multiplication avec retenue pour le CPU ARM (crédits à @zaydlang et @calc84maniac).
-
Corrections DMA/PPU :
- Autorisation des ticks CPU internes pendant les cycles de transition CPUDMA (améliore la synchronisation).
- Réinitialisation correcte du compteur de mosaïque OBJ Y dans le PPU (crédits à @j-mattsson).
(Aucune mention spécifique à macOS ou Apple Silicon dans ce changelog.)
Changelog complet
v1.8.1
-
Correction majeure : Fix de la désérialisation corrompue des directions de ports GPIO (problème récurrent pouvant impacter certains jeux).
-
Correction critique : Prise en charge corrigée des adresses d’informations de vague corrompues dans le MP2K HLE (APU), évitant des plantages ou comportements erratiques.
-
Amélioration UI : Ajout d’une option pour suspendre l’émulateur quand la fenêtre est inactive (utile pour économiser la batterie ou éviter les surchauffes).
-
Correction APU : Remappage obligatoire des volumes PSG (gauche/droite) de la plage 0-7 vers 1-8 (comportement conforme aux spécifications matérielles).
-
Base de données : Ajout de la détection du capteur solaire pour les sorties japonaises de Boktai (correction de métadonnées manquantes).
-
UI : Réponse améliorée aux changements d’entrée dans le visualiseur de sprites quand l’émulateur est en pause.
Changelog complet
v1.8.0
-
Nouveautés majeures en UI et fonctionnalités :
- Ajout du filtre vidéo "Sharp" pour une interpolation nearest-neighbor améliorée aux échelles non entières.
- Intégration de vues PPU (palettes, tuiles, arrière-plans et sprites) dans l’interface utilisateur.
- Option pour ajuster le volume audio directement dans les paramètres.
- Suppression de la pause automatique lors du chargement d’une nouvelle ROM.
-
Corrections critiques en audio/APU et PPU :
- Correction d’une régression d’entrée utilisateur (perte de contrôle) introduite en 1.7.1.
- Migration vers l’API SDL Joystick (remplace SDL Game Controller) pour une meilleure compatibilité des manettes.
- Améliorations majeures dans l’émulation MP2K HLE (enveloppes interpolées, réverbération plus précise, option pour forcer la réverbération).
- Suppression de l’émulation obsolète du mode "Zombie" (inexistant sur GBA).
- Corrections dans le traitement des FIFO audio (écriture in-place, réinitialisation sur débordement) et vérification des écritures IO 16/32 bits.
- Fix des artefacts audio (clics) avec le resampling Sinc et correction de l’interpolation linéaire en Cosine.
-
Précision technique en PPU et DMA :
- Correction de l’affichage de pixels de sprites de la scanline précédente dans la dernière ligne.
- Meilleure émulation des mosaïques horizontales/verticales (fixe les bugs #275 et #322) et gestion des changements mid-frame.
- Correction des requêtes hors limites dans les modes 3–5 du PPU.
- Fix du mappage incorrect des canaux DMA vers les FIFO audio.
-
Améliorations mineures et stabilité :
- Gestion partielle des débordements de timer pendant les délais d’activation.
- Simulation d’un délai EEPROM (~6 ms) après écriture
Changelog complet
v1.7.1
-
Corrections majeures de précision matérielle :
- Correction de la gestion des accès hors limites en mémoire vidéo (VRAM) pour les tuiles de fond (PPU), évitant des comportements indésirables dans certains jeux (fixe un problème récurrent).
- Amélioration du traitement des transferts DMA : le CPU ne saute plus automatiquement à l’événement suivant s’il se réveille pendant une opération DMA (évite des bugs de synchronisation).
-
Stabilité et gestion des entrées/sorties :
- Le système d’IRQ pour le Keypad (clavier) est désormais géré par le thread de l’émulateur (et non celui appelant), réduisant les risques de blocages ou de latence.
- Correction d’une entrée incorrecte dans la base de données de jeux pour plusieurs titres Classic NES et Famicom Mini (affichage ou métadonnées).
-
Robustesse du logging et gestion des erreurs :
- Nettoyage du buffer de logs après chaque message affiché (évite les doublons ou des logs corrompus).
- Flush systématique de STDOUT après chaque message pour garantir une sortie immédiate (utile en cas de logs critiques).
- Gestion de l’erreur
fmt::system_errorsifmt::print()échoue à écrire sur STDOUT (prévention de plantages silencieux).
Changelog complet
v1.7
-
Améliorations majeures de l'émulation :
- Réécriture quasi-cycle-accurate du PPU (Picture Processing Unit), corrigant plusieurs bugs graphiques (références aux issues #241, #230, #229, #208, #141) et ajout du support du registre GREENSWAP pour une meilleure compatibilité visuelle.
-
Nouveautés UI et fonctionnalités utilisateur :
- Ajout d’une option de redimensionnement entier (sans interpolation) et de limitation de l’échelle d’affichage.
- Possibilité d’accéder au menu pendant le plein écran et de définir un dossier personnalisé pour les sauvegardes.
-
Corrections critiques du noyau (Core) :
- Compatibilité des sauvegardes avec mGBA 0.10.0+ et prise en charge basique de son interface de logging.
- Précision accrue des cycles CPU/ARM (correction des alignements PC, gestion des verrouillages bus pour les instructions SWP/SWPB, et parallélisation des cycles CPU/DMA).
- Optimisation du bus et du préchargeur ROM (pénalités pour les accès ROM pendant les cycles de précharge, désactivation précise du buffer de précharge).
-
Corrections matérielles (PPU, IRQ, APU, SIO) :
- Correction des délais d’écriture IRQ (1 cycle) et de mise à jour des registres IE/IF pour le désenclenchement CPU.
- Timing amélioré pour les transferts série (SIO, fixant l’issue #282) et émulation du bit master enable de l’APU.
- Gestion des événements pour les sauvegardes d’état (sérialisation/désérialisation).
Changelog complet
v1.6
-
Nouveautés majeures en UI :
- Sélection et remappage des manettes de jeu intégrés.
- Chargement direct de ROMs depuis des archives (Zip, 7z, RAR4) et par glisser-déposer sur la fenêtre principale.
-
Corrections critiques dans le cœur d'émulation (PPU, IRQ, Timer, etc.) :
- Correction des problèmes de basculement entre modes FIQ et non-utilisateur/système (ARM).
- Retard des IRQ H-blank de 4 cycles (résolution de bugs graphiques).
- Initialisation correcte des états WIN0/1 après réinitialisation (PPU).
- Mise en place d’un rendu PPU sur un thread secondaire pour améliorer les performances.
-
Améliorations fonctionnelles :
- Détection automatique des tailles de sauvegarde EEPROM.
- Support expérimental des save states (états sauvegardés).
- Activation du mode 24h pour le RTC (réglage par défaut).
- Respect des règles WININ/WINOUT pour les objets alpha sans source de mélange (PPU).
-
Corrections mineures mais impactantes :
- Stabilisation du chargement de ROMs (évite les plantages et arrête l’audio en cas d’échec).
- Réinitialisation automatique de l’émulation si une ROM est chargée (dépause).
- Correction des transferts DMA3 vidéo et des timings associés (PPU).
Changelog complet
v1.5
-
Améliorations matérielles et corrections de cycle :
- Correction de l'état du bit 4 des registres CPSR/SPSR sur ARM (fixe des problèmes dans Banjo-Kazooie: Grunty's Revenge).
- Prise en compte d’une pénalité d’un cycle lors de l’accès au Game Pak avec préchargement actif.
- Ajout d’une pénalité de deux cycles pour l’instruction HALT.
- Précision des modèles de DMA (correspondance accrue pour les transferts ROM→ROM et autres cas atypiques, gestion des changements de registre en cours de transfert).
-
Corrections logicielles critiques :
- Réimplémentation de l’émulation des retards d’IRQ (nouvelle itération).
- Correction du FIFO de l’APU (buffer de 7 mots 32-bit au lieu de 8, fixant le bug #101).
- Mise à zéro des bits inutiles de SOUND2CNT_L (APU).
- Synchronisation atomique des mises à jour de KEYINPUT pour éviter des réinitialisations intempestives (liées aux IRQ).
-
Améliorations UI/UX :
- Historique des fichiers récents pour un chargement rapide.
- Chargement de ROMs via arguments de ligne de commande.
- Ajout de raccourcis clavier pour le plein écran et l’échelle de fenêtre.
- Masquage par défaut du compteur FPS (optionnel).
-
Support macOS :
- Build officiel sous forme d’App Bundle (format
.dmg) pour une intégration native. - Pas de mention spécifique pour Apple Silicon (M1/M2/M3) ou une version minimale de macOS dans ce changelog.
- Build officiel sous forme d’App Bundle (format
Changelog complet
v1.4
-
Nouveautés majeures :
- Ajout d’un mélangeur audio haute qualité (HLE) pour le moteur sonore MusicPlayer2000, améliorant la compatibilité des jeux utilisant cette technologie.
-
Corrections critiques (PPU/GPU) :
- Correction du rendu des sprites à l’avance d’une ligne de balayage (fixe un problème visuel récurrent, #130).
- Correction d’une erreur d’indexation (off-by-one) dans la boucle de dessin des objets (OBJ), évitant des artefacts graphiques.
- Mise en œuvre correcte de la limite de dessin OAM (Object Attribute Memory) uniquement aux frontières de l’OAM (et non pixel par pixel), stabilisant les performances.
- Correction de la transparence en Mode 4 (fixe #169), résolvant des problèmes de rendu dans les jeux utilisant ce mode.
- Émulation du délai d’activation des arrière-plans (BG enable delay, fixe #94), améliorant la précision des transitions graphiques.
-
Améliorations CPU/mémoire :
- Gestion des écritures 16-bit sur le registre KEYCNT (fixe #152), crucial pour certains jeux utilisant des mécanismes de verrouillage.
- Restriction des registres HALTCNT et POSTFLG aux écritures depuis le BIOS, conformément au comportement matériel.
- Masquage des deux bits supérieurs du registre IE (interruptions), alignant l’émulation sur le comportement réel du GBA.
- Réorganisation du signal de propagation des IRQ (interruptions) pour respecter les délais matériels, avec une amélioration du timing des exceptions.
- Émulation des conflits de bus en mode utilisateur (user-mode LDM), des restrictions du registre MSR en mode utilisateur, et du démarrage en mode superviseur au lieu de system mode (plus fidèle à l’architecture ARM du GBA).
-
Spécificités macOS :
- Builds officiels : Pas de support natif intégré dans cette version (nécessite une compilation manuelle via Homebrew avec
brew install qt@5). Aucune
- Builds officiels : Pas de support natif intégré dans cette version (nécessite une compilation manuelle via Homebrew avec
Changelog complet
v1.3
-
Améliorations matérielles majeures :
- Gestion correcte des instructions ARM
CMP,CMN,TSTetTEQavecrD = 15(registre R15, lié au PC). - Prise en charge des basculements de mode ARM même lorsque la banque de registres ne change pas.
- Gestion correcte des instructions ARM
-
Corrections critiques sur le PPU (unité graphique) :
- Synchronisation précise du déclenchement des fenêtres (
WIN0/1) avec le matériel. - Correction définitive du timing des IRQ en fin de ligne horizontale (H-blank).
- Meilleure gestion des registres affine et mosaïque internes lors de l'utilisation de plusieurs modes d'arrière-plan dans une même trame.
- Synchronisation précise du déclenchement des fenêtres (
-
Améliorations DMA et périphériques :
- Priorité accordée aux transferts DMA en cours d'exécution CPU (interruption d'instructions).
- Retard de démarrage des DMA de 2 cycles et prise en compte des cycles internes (2I).
- Respect des modes d'adressage source pour les DMA FIFO et forçage des accès en taille mot (word-sized).
-
Corrections audio et IRQ :
- Émulation des bits d'activation du DAC (fixe un problème audio historique, #64).
- Implémentation des IRQ liées au clavier (keypad IRQ) et stub basique pour les IRQ série.
Changelog complet
v1.2
-
Améliorations majeures de l'émulation CPU :
- Optimisation du préchargement du buffer GamePak et activation automatique du préchargeur lors de lectures mémoire.
- Correction critique des IRQ retardés de 4 cycles (résout des problèmes dans James Pond).
- Gestion du pipeline flush pour les lectures en halfword et optimisation des calculs de flags pour les instructions ADC et SBC.
-
Corrections majeures dans les sous-systèmes :
- PPU : Correction de la logique de semi-transparence, gestion des IRQ V-count (déclenchement par front), et respect des limites de cycles par ligne pour le rendu d’objets (OBJ).
- APU : Clampage des échantillons avant conversion en format S16 et amélioration de la qualité audio via un resampler BLEP.
- DMA : Désactivation correcte des transferts FIFO non-répétitifs (fixe #97) et masquage des adresses source/destination en écriture.
-
Stabilité mémoire et périphériques :
- Correction des lectures unaligned (S8/S16) depuis la SRAM et la ROM, gestion des lectures DMA depuis des adresses open bus (fixe #109).
- Emulation améliorée du bus GPIO et alignement forcé des écritures en 16 bits sur la VRAM/PRAM étendue.
-
Base de données de jeux (GameDB) :
- Ajout/suppression de save type overrides pour plusieurs jeux (ex. Acrobat Kid, Baldur’s Gate – Dark Alliance), incluant une correction pour Classic NES – Legend of Zelda.
Changelog complet
v1.1
-
Nouveauté majeure :
- Ajout du support des shaders GLSL pour une personnalisation avancée du rendu graphique.
-
Corrections importantes :
- Réparation du Vsync cassé sur Windows et probablement macOS (à confirmer).
- Correction d’un plantage en l’absence du fichier de configuration
keymap.toml.
-
Spécifique macOS :
- Dépendance obligatoire à SDL2 (à installer via Homebrew :
brew install sdl2). - Aucune mention de support natif pour Apple Silicon (M1/M2/M3) ou de build
.dmgofficiel dans ce changelog.
- Dépendance obligatoire à SDL2 (à installer via Homebrew :
Changelog complet
v1.0
Aucun détail pour cette version.
Captures d'écran