03
févr.
'26

C'est l'histoire d'une petite console chinoise...

Publié le 03 février 2026

Je me suis rendu compte récemment que le fait de faire mes projets en stream me bouffait toute mon énergie, ce qui avait pour conséquence un très faible nombre de billets de blog publiés ces dernières années. Il est peut-être temps pour moi de prendre le temps, justement, de documenter certains projets sur ce blog car après tout c'est bien fait pour cela, un blog.

C'est l'occasion de présenter un projet qui m'a occupé une bonne partie de l'année 2025 et qui a commencé comme souvent par un achat inutile et une idée à la noix: le hack d'une console à moins de 10 euros trouvée sur AliExpress.

Une console chinoise à moins de 10€ ?

AliExpress pulule de consoles «rétro-gaming» qui se ressemblent vraiment presque toutes, avec leurs croix directionnelles, leurs 7 boutons et une connectique USB utilisée pour y brancher une manette externe. Elles possèdent une batterie, un écran TFT couleur, et proposent plus de 400 jeux rétro !

En réalité, elles utilisent toutes une puce spécialisée (ASIC, encadrée en vert ci-dessous) capable d'émuler des jeux NES stockés dans une mémoire Flash (encadrée en rouge ci-dessous),

La puce spécialisée est documentée et il doit bien y avoir moyen d'aller bidouiller la mémoire Flash pour modifier les ROMs qui s'y trouvent, mais je trouvais tout de même ça un peu limité. Vu qu'on a un boîtier, des boutons, une batterie et un écran, pourquoi ne pas remplacer la puce spécialisée par un ESP32 et faire de l'émulation de consoles plus funs que la NES, comme la (ou le) Game Boy ou encore une Master System ? L'idée semblait très intéressante, et la perspective de hacker cette console peu onéreuse était très tentante.

Cependant, le premier obstacle rencontré est bien l'écran TFT utilisé: impossible de trouver de documentation à partir des marquages, il va donc falloir essayer de discuter avec lui afin de déterminer le contrôleur qu'il emploie (en espérant qu'il soit documenté) mais surtout développer du code sur mesure. En effet, la plupart des projets d'émulation de consoles sur ESP32 utilisent des écrans TFT communiquant en SPI (une interface électronique utilisant 4 fils), alors que le modèle présent dans la console en utilise une vingtaine.

Identification du contrôleur d'écran

Des recherches sur Internet ont permis d'identifier des écrans similaires et notamment le brochage du connecteur. Sur cette base, j'ai pu y connecter un ESP32 supportant l'interface Intel I8080 avec un bus de données de 16 bits car c'est bien celle-ci qui est utilisée. Les commandes étant généralement standards, j'ai pu récupérer le code identifiant le contrôleur et valider qu'il s'agissait bien d'un contrôleur GC9306. Ayant acheté un lot de consoles (une habitude, j'en casse généralement au moins une lors des bidouilles), j'ai aussi pu valider que tous les écrans employaient des écrans avec le même contrôleur !

Afin de me faciliter la vie, j'ai conçu un PCB sur mesure pour y connecter un écran issu d'une console à un ESP32, avec au passage de quoi y connecter des boutons poussoirs pour tester un futur émulateur. La conception du PCB a été un peu laborieuse, il y a eu des ratés dans le routage, mais j'ai pu avoir un système fonctionnel.

Et après beaucoup de tests avec l'environnement ESP-IDF d'Espressif et de tentatives loupées, j'ai réussi à afficher ce que je voulais sur cet écran !

Gestion des contrôles utilisateur

Afficher des images c'est bien mais pouvoir réagir sur des appuis de boutons c'est mieux ! Une fois le contrôleur d'écran contrôlé par l'ESP32, je me suis attaqué aux boutons. Vu le nombre de _GPIOs_ restant, je me suis orienté vers un multiplexeur d'entrées/sorties en I2C que je connaissais assez bien, le MCP23017 (déjà utilisé avec un Raspberry Pi). Le PCB du prototype s'est ainsi vu greffer une version minuscule de ce chip (package VQFN), et le code permettant de gérer les appuis sur les boutons poussoirs reliés au MCP23017 a été assez rapidement écrit.

À partir de là, le plus dur était fait: j'avais terminé le code permettant de dessiner des pixels à l'écran et de savoir si des boutons sont appuyés. Enfin, c'est ce que je croyais jusqu'au moment où je me suis intéressé au logiciel qui allait me servir de base pour l'émulation des jeux...

La galère de l'intégration dans l'émulateur

Le meilleur projet d'émulation que j'ai trouvé est l'excellent Retro-Go (https://github.com/ducalex/retro-go) de Ducalex, et je me suis donc attelé à la création d'un fork pour intégrer mon prototype de console (oui, celui sous forme de grand PCB tout vert). Et ça n'a pas été sans mal.

En effet, afficher une image sur un écran TFT en pilotant le contrôleur GC9306 tout seul se passait plutôt bien, mais il se trouve que Retro-Go n'utilise que des écrans communiquant via une interface SPI et que son code (enfin, celui des composants de retro-core qui fait partie de Retro-Go) est optimisé pour un fonctionnement avec ce type d'écran. Il a donc fallu passer d'un code assez simple à un véritable driver d'écran optimisé permettant d'avoir à la fois une fréquence de rafraîchissement d'écran acceptable tout en s'accomodant du code de base des différents émulateurs et leur façon d'interagir avec l'affichage. Ce n'a pas été une mince affaire, mais après pas mal de galères je suis arrivé à un résultat acceptable. Ce n'est pas parfait car il y a encore quelques artefacts causés par les algorithmes de mise à l'échelle et de lissage, mais une fois le logiciel configuré c'est très fluide et réactif. Le support des boutons a quant à lui été une formalité, ne posant que quelques soucis à cause d'un GPIO mal configuré.

Modding de la console

Afin de m'éviter un long et pénible travail de création de PCB complet permettant de remplacer celui de la console, j'ai pris la tangente et ai créé un ensemble de trois circuits inter-connectés qui viennent se greffer au circuit existant de la console, évitant ainsi de gérer la charge de la batterie et l'alimentation. L'installation de ce mod a été laborieuse, mais les photos ci-dessous donnent une idée du résultat final.

La soudure des fils émaillés utilisés pour aller «piquer» l'état des boutons de la console, le découpage à la barbare du circuit d'origine pour avoir suffisamment d'espace pour y loger un ESP32 et les placements dispersés des différents PCB pour cause d'espace vraiment restreint ont rendu la réalisation de ce mod assez complexe. Au final, ça m'aura coûté moins cher qu'un PCB complet entièrement refait, mais l'utilisation a montré que dans certains cas la console redémarre sans crier gare, certainement à cause d'un mauvais contact. J'ai par ailleurs ajouté la possibilité d'utiliser une carte micro-SD, en utilisant les derniers GPIOs disponibles sur le module ESP32. J'ai mis la console moddée dans les mains de mes ados durant les fêtes de fin d'année, et ils ont bien aimé pouvoir y jouer malgré les quelques défauts identifiés.

Kit de modding ou PCB de remplacement ?

J'ai pris le temps de faire une version bien propre des trois PCBs utilisés dans mon mod, si jamais il prenait l'envie à certains de vouloir reproduire cette bidouille. J'en ai profité pour documenter ce projet sur un site dédié (https://virtualabs.github.io/tsing-tao-console-mod/), la console moddée ayant été baptisée TsingTao sur une idée de Tix.

Cependant, plusieurs choses ne vont pas avec ce mod:

  • il faut avoir des compétences en soudure et en découpe de PCB (pas forcément au niveau de ce que fait Millomaker (https://millomaker.fr) mais pas simple de souder du fil de cuivre émaillé);
  • la place dans la console est très réduite, surtout si on conserve les éléments d'origine;
  • le fait d'utiliser 3 petits PCBs connectés entre eux rend assez difficile l'installation.

J'ai donc entrepris au début de cette année 2026 de voir ce que peut donner un circuit imprimé complet qui viendrait remplacer celui vraiment cheap présent dans la console d'origine. Pour ce faire, j'ai modélisé la console en question sous FreeCAD pour avoir une idée précise de la forme de ce dernier et des emplacements des supports de vis, afin qu'il rentre parfaitement dans la console. C'était l'occasion d'expérimenter un peu plus la modélisation avec FreeCAD et les moyens de le faire collaborer avec KiCad !

Les prochaines semaines seront normalement consacrées à la conception et l'assemblage d'un tel circuit imprimé, avec je l'espère un test concluant !



Les contenus disponibles sur ce blog sont publiés sous licence Creative Commons BY-NC-SA.
Vous pouvez réutiliser tout ou partie de ces contenus à condition de citer l'auteur et l'origine, vous ne pouvez en faire une utilisation commerciale, et enfin vous devez partager tout travail ou œuvre dérivée sous les mêmes conditions — c'est-à-dire avec la même licence d'utilisation Creative Commons.