Présentation du projet

Frank‑386 est un firmware qui transforme un microcontrôleur RP2350 (Raspberry Pi Pico 2) en un ordinateur compatible i386. Le projet s’appuie sur le code Tiny386 de Chunhui He et ajoute la prise en charge du son AdLib, Sound Blaster 16, PC Speaker et d’autres périphériques classiques. Il cible plusieurs cartes : FRANK, Murmulator, Olimex PICO‑PC, Waveshare RP2350‑PiZero et tout module RP2350 disposant d’une sortie VGA/HDMI, d’une carte SD et d’un clavier.

Architecture et performances

Le cœur de l’émulateur reproduit l’ensemble du jeu d’instructions i386 et, de façon partielle, les extensions i486/i586, avec la possibilité d’activer le coprocesseur flottant x87. La mémoire maximale est de 8 MiB, fournie par une PSRAM externe de même capacité. Le processeur RP2350 fonctionne à 504 MHz (paramètre cpu_freq) tandis que la PSRAM est réglée à 166 MHz, ce qui représente le compromis choisi entre consommation et débit d’accès mémoire. L’affichage utilise les sorties VGA ou HDMI du RP2350 et supporte les modes texte ainsi que le mode graphique 640×480, limité par la bande passante du contrôleur vidéo intégré.

Le sous‑système audio émule plusieurs cartes son historiques, chacune accessible via les ports I/O standard de l’i386. Le choix d’une sortie I2S DAC ou d’un PWM simple dépend du circuit audio du board. L’ensemble du système repose sur le SDK Pico 2.0+ et le compilateur ARM GCC, garantissant la compatibilité avec les outils de développement habituels.

Gestion des disques et configuration

[pc]
mem=8M
bios=bios.bin
vga_bios=vgabios.bin

[frank-386]
cpu_freq=504
psram_freq=166

Les images de disques (floppy 1.44 MiB, HDD jusqu’à 2 GiB, ISO) sont placées dans le répertoire 386/ de la carte SD. Le gestionnaire de disques, accessible avec Win+F12, permet d’insérer ou d’éjecter les images à chaud, sans redémarrage. Les modifications sont écrites automatiquement dans le fichier config.ini, ce qui simplifie le test de multiples systèmes d’exploitation (DOS, Windows 3.x, Windows 95, Linux).

# Clone du dépôt
git clone https://github.com/rh1tech/frank-386.git
cd frank-386
# Construction par défaut (board M2, 378 MHz, clavier PS/2)
./build.sh
# Variante avec clavier USB
./build.sh --usb-hid

Le script release.sh génère les fichiers UF2 nommés selon la cible (M1, M2, PC, Z2) et le numéro de version, prêts à être flashés via le mode BOOTSEL du RP2350.

Limites et perspectives

Le plafond de 8 MiB de RAM empêche l’exécution fluide de systèmes modernes ; les tests restent confinés aux OS des années 1990. Le débit de la PSRAM, limité à 166 MHz, crée un goulot d’étranglement lors de l’accès intensif à la mémoire vidéo ou aux buffers audio. L’émulation du coprocesseur x87, bien que disponible, reste partielle et peut entraîner des écarts de précision dans les calculs flottants. Enfin, l’absence de support natif pour le réseau Ethernet ou Wi‑Fi contraint les scénarios d’utilisation à des environnements isolés.

Malgré ces contraintes, Frank‑386 démontre la capacité du RP2350 à héberger un processeur x86 complet, ouvrant la voie à d’autres projets d’émulation embarquée et à l’étude pédagogique de l’architecture i386 sur du matériel à faible coût.