Phosphoric — un émulateur ORIC-1 / Atmos cycle-accurate en C11, tout équipé
Bonjour à toutes et à tous,
J'aimerais vous présenter Phosphoric, un émulateur ORIC-1 / Atmos écrit entièrement en C11 portable. L'objectif : la fidélité matérielle d'abord, enveloppée dans une boîte à outils vraiment moderne. SDL2 est optionnel, donc il tourne aussi en mode headless (CI, scripts, automatisation).
Cœur matériel
- MOS 6502 — 151 opcodes officiels, 13 modes d'adressage, timing cycle-accurate, BCD, bug de page du JMP indirect, IRQ à niveau.
- VIA 6522, PSG AY-3-8910 (3 voies + bruit + 16 enveloppes), ULA précise à la scanline (TEXTE 40×28 + HIRES 240×200).
- Microdisc (WD1793, 4 lecteurs, Sedoric) et cassette (.TAP, fast-load optionnel).
- Détection automatique du BASIC 1.0 (ORIC-1) et du BASIC 1.1 (Atmos) d'après la ROM.
Gestion des médias
- Overlay de changement à chaud (F6) — changer cassettes et disquettes (lecteurs A–D), avec éjection et write-back des écritures disque du jeu, sans quitter l'émulateur.
- Write-back disque optionnel vers les fichiers .dsk (--disk-writeback, en place, opt-in).
Périphériques & connectivité — c'est là que ça s'élargit
- Série (ACIA 6551) : loopback, TCP, PTY, modem Hayes, port COM réel, pipe fichier.
- Digitelec DTL 2000 (PIA 6821 + ACIA 6850 fidèles) et V23 / Minitel / Prestel 1200/75.
- Modem PicoWiFi avec terminaison TLS réelle (HTTPS pour l'Oric).
- LOCI (RP2350) : bac à sable flash ou image SD FAT16/32 brute.
- MIDI Mageco (MC6850) : entrée/sortie ALSA en temps réel, lecture de Standard MIDI Files dans l'Oric, plus la variante ORICON.
- Joystick IJK (flèches ou manette SDL2), imprimante Centronics, traceur 4 couleurs MCP-40 (export BMP).
Vidéo & graphismes
- Profil OCULA d'ULA étendue (--ula ocula) : palette redéfinissable, texte 80 colonnes, HIRES 320×200, palette par scanline, bordure overscan animée.
- Mise à l'échelle x1–x4, plein écran, rendu logiciel de secours pour les configs GPU/pilotes capricieuses.
Capture & streaming
- Captures d'écran (PPM/BMP), dump de trames, enregistrement vidéo Motion-JPEG AVI.
- Chromecast — serveur MJPEG intégré et client CASTV2 natif avec découverte des appareils.
- Build WASM / web.
Débogage & outillage développeur
- Débogueur REPL interactif (breakpoints, watchpoints, pas-à-pas), TUI ncurses et stub GDB distant.
- Trace d'instructions CPU, trace IRQ, profileur, dump RAM, analyse de ROM, chargement de table de symboles (.sym/.lab).
- Enregistrement/rejeu d'entrées déterministe (movies), save-states binaires (.ost), protocole de contrôle IPC pour intégration IDE, et benchmark de débit headless.
- Partage du système de fichiers hôte (--hostfs), dispositions AZERTY/QWERTY.
- Outils de conversion : bas2tap, bin2tap, tap2sedoric.
Qualité
~800+ tests unitaires/d'intégration autonomes (tous au vert), propre sous Valgrind, avec cibles de couverture et d'analyse statique — chaque commit garde la suite passante.
Dépôt & build
👉 https://github.com/benedictemarty/Phosphoric
make SDL2=1 # build standard
make tests # lancer la suite de tests
Un mot pour Oricutron 🙏
Phosphoric ne serait pas là sans le travail de référence de la communauté, et tout particulièrement Oricutron de Pete Gordon et ses contributeurs : un émulateur formidable qui a fixé la barre, documenté tant de subtilités du matériel Oric et accompagné des années de homebrew. Le file-requester F6 de Phosphoric s'en inspire directement (réécrit en clean-room, sans copier son code). Merci, chapeau bas.
C'est un projet fait par passion pour l'Oric, et vos retours / rapports de bugs compteraient énormément. Je réponds avec plaisir à toute question technique.
À bientôt,
Béné