BasicBox : un émulateur de PC x86 écrit intégralement en Visual Basic 6

Un développeur a publié son projet BasicBox sur GitHub : il s’agit d'un émulateur de PC x86 complet, fonctionnel, capable de faire tourner Windows NT 4.0, Linux et DOS. Le tout écrit intégralement en Visual Basic 6.
Eh ouais, vous avez bien lu, mes p’tits potes à la compote. Pas en C, pas en Rust, ni en assembleur. En motherf*cking VB6.
Et vous savez quoi ? Ça marche. Lentement, certes (le README précise d'ailleurs de s'armer de "beaucoup de patience"), mais ça marche.
Le retrocomputing poussé à son paroxysme
Mais pourquoi écrire un émulateur x86 dans un langage dont Microsoft a arrêté le support étendu en 2008 ?
Mike Chambers, le développeur, explique avoir grandi avec VB6, et adorer faire des trucs complètement idiots avec. C'est lui qui le dit, alors on ne va pas lui reprocher sa cohérence.

BasicBox est en réalité un port de PCulator, son émulateur principal écrit en C (ouais, le gars est chaud quand même).
Comme il l’indique lui-même sur l’indémodable (non) VBForums, son projet VB6 a un seul but : prouver qu'on peut écrire à peu près tout et n'importe quoi en VB6, du moment qu'on se fiche éperdument de la vitesse d’exécution (c’est pas faux).
Le développeur n'en est d'ailleurs pas à son coup d'essai avec VB6 : il avait déjà publié un émulateur NES (vbNES) et un émulateur 8086 dans le même langage.
486 raisons d’être impressionné
Sans mauvais jeu de mot, la liste des composants émulés est vraiment FAT.
Le processeur est un 486 enrichi de quelques instructions plus récentes (CMOV, RDTSC), accompagné d'un coprocesseur mathématique 387 porté depuis Tiny386. Pour le stockage, on a un contrôleur ATA/IDE et un contrôleur SCSI BusLogic BT-545S porté depuis 86Box. Le réseau passe par une carte NE2000 portée depuis Bochs, et côté son, une Sound Blaster maison couplée à un OPL3 (NukedOPL porté en VB6).
Ajoutez la VGA et une souris série compatible Microsoft, et vous avez une machine virtuelle complète des années 90, reconstituée dans un langage conçu pour faire des formulaires Windows.

Côté OS testés, Debian 2.2 Potato (oui, celle de l'an 2000) tourne de manière utilisable sur un CPU moderne avec un bon IPC. Windows NT 4.0 fonctionne aussi, à condition de booter sur un disque SCSI (le contrôleur IDE provoque un écran bleu au démarrage de NT). Windows 95, 98 et 2000 refuseraient encore de coopérer.
Mais rendez-vous compte : on peut même faire tourner VB6 dans cet émulateur écrit en VB6 !

Le Select de la Muerte
Sans grande surprise, la performance reste un gros sujet. Mike Chambers indique que même avec un CPU de poste fixe récent, ça tourne correctement, sans plus. Sur un PC portable... beaucoup moins.
Les jeux DOS qui nécessitaient un vrai 486 à l'époque ne sont globalement pas jouables. Après tout, on reste sur de l'émulation logicielle pure dans un langage interprété, sans JIT, sans accès bas niveau au matériel : chaque instruction x86 passe par la moulinette VB6.
Le premier point de sa TODO list pour optimiser le tout ? Voir quel gain de perf il peut obtenir en remplaçant les appels de fonction par un gigantesque Select Case. Miam.
Il y a des projets qu'on admire pour leur utilité. Et il y en a qu'on admire pour l'obstination absurde et admirable qui les porte. Je vous laisse deviner dans quelle catégorie ranger BasicBox.
À propos de l'auteur
Nicolas Lecointre
Chief Happiness Officer des développeurs, ceinture noire de sudo. Pour rire, j'ai créé Les Joies du Code. J'utilise Vim depuis 10 ans parce que je sais pas comment le quitter.
À lire également

Passbolt : le gestionnaire de mots de passe open source que votre équipe mérite vraiment
Je connais l’histoire, vous la connaissez, on la connaît tous. Le stagiaire qui est resté six mois, qui a fini par avoir accès à un peu (beaucoup) plus de choses...
Articles recommandés


Pour surfer sur la crise, un développeur crée un Démineur sur le détroit d'Hormuz

Trivy compromis 2 fois en 3 semaines : quand l'outil de sécurité devient le vecteur d'attaque


Mozilla lance cq, le Stack Overflow des agents IA

Pour surfer sur la crise, un développeur crée un Démineur sur le détroit d'Hormuz

Trivy compromis 2 fois en 3 semaines : quand l'outil de sécurité devient le vecteur d'attaque

OpenAI acquiert Astral, le créateur de uv et Ruff
Plus de contenu
Quand je tombe sur un alert('coucou') en prod

Pas merci les ricains
Quand j'ajoute un try/catch vide juste pour que ça arrête de planter

Quand un client m'appelle pour demander des évols pour son appli qui date des années 2000

Quand je me lance sur le passage en production

Quand le bout de code que j'ai copié en ligne fonctionne du premier coup

Quand j'arrive à faire passer une grosse requête SQL du premier coup
Quand le chef me dit "ce sera rapide à coder, non ?"
Quand je tombe sur un alert('coucou') en prod

Pas merci les ricains
Quand j'ajoute un try/catch vide juste pour que ça arrête de planter

Quand un client m'appelle pour demander des évols pour son appli qui date des années 2000

Quand je me lance sur le passage en production


