Émulateur MSX2+ sur ESP32-S3 : Performance et Optimisations Techniques

MSX2+ Emulator for ESP32-S3

Selon cnx-software, le projet open source S3-MSX-PC, dirigé par Ivan Svarkovsky, propose un émulateur MSX2+ nu qui fonctionne sur un microcontrôleur ESP32-S3. Cet émulateur génère une sortie VGA affichant jusqu’à 64 couleurs grâce à un réseau de résistances R-2R. Il s’agit d’une version dérivée de l’émulateur Retro-Go destiné aux appareils comme l’ODROID-GO, proposant plusieurs améliorations.

S3-MSX-PC basé sur ESP32-S3 et 64 couleurs : une émulation de jeu améliorée

Pour ses tests, Ivan a utilisé une carte ESP32-S3 classique, à deux cœurs : l’un dédié à la logique du jeu et l’autre s’occupant de la sortie vidéo et audio. La connexion VGA est réalisée via un réseau de résistances qui transforme les données numériques en signaux analogiques pouvant être interprétés par des moniteurs anciens. Côté audio, l’émulateur utilise un système de modulation Sigma-Delta avec un filtre PDM sophistiqué. La carte dispose également d’un port USB permettant le branchement de claviers.

Émulateur MSX2+ pour ESP32-S3

Émulateur fMSX 6.0 et la latence d’entrée de 2 à 4 ms : une expérience de jeu optimisée

Le micrologiciel S3-MSX-PC se base sur fMSX 6.0, offrant un support ininterrompu pour MSX1, MSX2 et MSX2+. En matière de sortie vidéo, il fournit une qualité VGA de 640 × 480 à 60 Hz, en utilisant un RVB parallèle de 16 bits accessible via LCD_CAM, tout en permettant une profondeur de couleur de 64 nuances (2 bits par canal R, V, B). En ce qui concerne l’audio, le système stéréo PDM est conçu pour contrecarrer les problèmes de sous-utilisation.

La connectivité USB est facilitée par un système Plug-and-Play permettant de connecter des claviers. La latence d’entrée présentée a été mesurée entre 2 et 4 ms, grâce à un démarrage piloté par interruption USB et une gestion logicielle anti-rebond.

Dans le but de surmonter les défis rencontrés avec l’ESP32-S3, des optimisations spécifiques ont été implémentées. Par exemple, un ajustement du cœur Z80 a été réalisé, remplaçant l’ancien système d’interprétation d’opcode par des Computed Gotos, permettant ainsi l’enregistrement des variables qui s’intègrent directement dans les registres physiques de 32 bits. En matière de latence PSRAM, les tables de recherche ont été remplacées par des méthodes d’optimisation directe, réduisant le besoin en mémoire.

ESP32-S3 à 4 $ et 12 $ : un budget abordable pour de grandes possibilités

Le projet S3-MSX-PC utilise le framework ESP-IDF v5.4.4. Le micrologiciel a été testé sur une carte de développement DIYables ESP32-S3 équipée d’un module ESP32-S3-WROOM-1-N16R8, coûtant environ 4 $ sur AliExpress et 12 $ sur Amazon. Bien que conçu pour cette configuration, il est susceptible de fonctionner sur d’autres cartes ESP32-S3 affichant des caractéristiques similaires, à condition d’ajouter quelques résistances et condensateurs pour les sorties vidéo et audio, suivant précisément les indications du schéma fourni ci-dessous.

Micrologiciel S3-MSX-PC Câblage audio ESP32-S3 VGA
Schémas

Bien que le résultat puisse paraître un peu désordonné, il est possible d’apporter des améliorations avec quelques ajustements. Ivan a initialement envisagé d’utiliser la carte Olimex ESP32-SBC-FabGL, qui comprend déjà un connecteur VGA. Toutefois, celle-ci repose sur un ESP32 avec des cœurs LX6, et Ivan a précisé que l’ordre du code de l’émulateur, alors conçu pour fMSX, nécessitait d’éventuelles modifications importantes pour une opération fluide sur l’ESP32-S3 en raison de problèmes de latence et de blocages rencontrés avec le pipeline Xtensa LX7.

Connecteur VGA de la carte DIYables ESP32-S3

Pour les développeurs intéressés, le code source, la version binaire, ainsi que des instructions détaillées et une analyse technique complète, comprenant des extraits de code et des statistiques de compilation, sont disponibles sur GitHub. Des vidéos démontrant le bon fonctionnement du firmware sont également accessibles, permettant une visualisation rapide des capacités de l’émulateur.

  • diymore Lot de 2 modules pour ESP32-S3 DevKitC-1 N16R8, pour Carte de développement ESP32 S3 1-N16R8 avec WiFi, Bluetooth 5.0, antenne connectable USB C
  • diymore Lot de 2 modules ESP32-S3 DevKitC-1 N16R8, autorité d'expansion pour les autorités de développement, carte de développement ESP32 S3 1-N16R8 avec WiFi, Bluetooth 5.0, antenne connectable USB C