Où en est Phosphoric
Phosphoric en est à la version 2.30.0, du 5 octobre 2026. Voici ce que le projet affirme, le test qui le prouve, ce qu’il ne prétend pas, et le chemin parcouru depuis janvier.
Dans cette page
Ce qui est prouvé
| Affirmation | Le test qui la ferait tomber |
|---|---|
| Le 6502 est exact au cycle : 100,00 % de séquences bus exactes sur 2 440 000 cas | make test-cycle CYCLE_MAX_CASES=0 |
Le test fonctionnel 6502_functional_test passe en entier (environ 96 millions de cycles) | sa cible dans make tests |
| La machine est cadencée au cycle : un appel de l’horloge, un cycle de tout, jamais à vide | make test-clock (14 tests) |
| Les minuteries du VIA comptent au cycle (période N+2, PB7, CA2) | make test-io |
| L’ULA lit une cellule par cycle, après l’accès du CPU du même cycle | make test-raster-split, make test-clock |
| Le PSG tourne à horloge/8, sortie intégrée, sans repliement | make test-audio (mesure du signal) |
| Une sauvegarde d’état prise en pleine trame reprend exactement au même point | make test-savestate-determinism |
| À cycle égal, les programmes du corpus local donnent la même image | make test-corpus |
| Une trame coûte moins de 1 000 µs sur la machine de référence | make test-bench |
Toute la suite : 70 suites, 1 362 vérifications, au vert. Le détail est dans Les tests.
Ce qui reste approché, et qu’on ne cache pas
- Le contrôleur de disquette (WD1793) est au niveau N1+ : il est cadencé en cycles, avec une vraie latence de rotation, mais ses délais de transfert sont forfaitaires, et l’image du disque est plate (pas de flux magnétique). Une vraie perte d’octet ou une erreur de CRC ne peut donc pas se produire.
- Le demi-cycle du mode « one-shot » du VIA (N + 1,5) n’est pas représenté.
- La bordure et le blanking ne sont pas dessinés : l’image fait toujours 240 × 224 pixels.
- La phase absolue entre le balayage et le processeur n’est pas modélisée. Elle n’est observable sur un Oric non modifié qu’avec une modification matérielle, le « VSYNC hack », qui n’est pas émulée.
- La cassette se charge par défaut en corrigeant la ROM (chargement rapide). Le mode au signal
existe (
--tape-signal) et il est exact au cycle, mais ce n’est pas le défaut, par choix : même contenu chargé, 2,4 fois moins de cycles.
Le classement complet, composant par composant, est dans La précision, mot à mot.
Les programmes essayés
La liste de compatibilité du dépôt date du 30 août 2026 (version 1.110). À cette date : 26 cassettes et 11 disquettes fonctionnaient, dont des jeux d’époque chargés en rapide, et Sedoric 3 et 4. Un seul cas demande le chargement au signal : un jeu dont le chargeur maison déchiffre les données en lisant la cassette lui-même.
Lors du passage au nouveau cœur 6502, treize programmes réels (six disquettes Sedoric, sept cassettes) ont donné le même écran avec l’ancien et le nouveau cœur, et les démarrages de l’Oric-1 et de l’Atmos sont identiques octet pour octet.
Les plates-formes
| Plate-forme | Construction | Vérifiée par |
|---|---|---|
| Linux | make (GCC ou Clang, SDL2) | la référence ; toute la suite de tests |
| Windows 11 | .exe construit sur Linux par la CI, ou MinGW-w64 | CI windows-build (construction et tests) |
| macOS (Intel et Apple Silicon) | clang d’Apple et SDL2 de Homebrew | CI macos-build, sur un vrai Apple Silicon |
| Navigateur | make wasm (Emscripten) | tests de bout en bout dans Chrome sans affichage |
Sous Windows, quelques fonctions restent propres à Linux et WSL2 : certains transports série, le
serveur GDB, la pause asynchrone de --control, la diffusion Chromecast et le MIDI de l’hôte.
La chronologie
| Version | Date | Ce qu’elle apporte |
|---|---|---|
| 0.1.0 | 31 janvier 2026 | la structure du projet |
| 1.0.0-alpha | 22 février | processeur, mémoire, entrées-sorties, image, son et stockage réunis |
| 1.67 | 16 juillet | l’affichage SDL2 devient le défaut |
| 1.110 | 30 août | la construction native sous macOS |
| 1.122 | 10 septembre | l’oracle 65x02 : 44,26 % de séquences bus exactes, le point de départ chiffré |
| 1.124 | 11 septembre | le cœur micro-séquencé par défaut : 100 % |
| 2.0.0 | 11 septembre | la machine cadencée au cycle : horloge maître, VIA, ULA, PSG, FDC, cassette |
| 2.0.2 | 12 septembre | l’ordre CPU puis ULA dans le cycle, pris sur des mesures du matériel |
| 2.5.0 | 30 septembre | le menu des périphériques (F1) |
| 2.6 et 2.7 | 30 septembre | le VIA mesuré sur un vrai 6522, puis son chemin « paresseux » exact |
| 2.13 à 2.19 | 3 octobre | les cartes d’extension en modules |
| 2.27 | 5 octobre | la LOCI-USB branchée est prise d’office |
| 2.28 | 5 octobre | le menu F1 en français ou en anglais |
| 2.30.0 | 5 octobre | la LOCI-USB lit par blocs : retour au BASIC en 4 s au lieu de 12 |
Ce qui est prévu
Le dépôt garde ouverts, entre autres :
- un modèle de piste magnétique pour le contrôleur de disquette (perte réelle d’octets,
READ TRACK, CRC) ; - l’horodatage sous le cycle de tous les accès du processeur, puis la calibration des constantes du bus d’extension sur du matériel ;
- faire tourner, dans la CI de Phosphoric, les programmes de test du VIA venus d’un autre émulateur.