Le LOCI
Le LOCI est une cartouche moderne pour l’Oric, bâtie sur un RP2040. Phosphoric l’émule de trois façons : par un modèle intégré, en faisant tourner son vrai firmware, ou en parlant à une vraie carte par l’USB.
Dans cette page
Ce qu’est le LOCI
Le LOCI (Lovely Oric Computer Interface, 2024) est une cartouche qui se branche sur le port d’extension de l’Oric. Son cœur est un microcontrôleur RP2040, qui lit le bus du 6502 par ses PIO et répond à sa place. Il apporte :
- du stockage de masse : sa flash interne, une clé USB, une carte SD ;
- des périphériques USB : clavier, souris, manettes ;
- un modem Wi-Fi (PicoWiFiModemUSB), vu par l’Oric comme un ACIA en
$0380; - un menu intégré, et l’échange de la ROM de l’Oric à chaud ;
- l’émulation d’un contrôleur de disquette, pour démarrer Sedoric sans Microdisc.
L’émulation suit le code source du firmware (version de référence 0.3.1) et a été vérifiée sur une vraie carte. Les écarts connus sont listés en fin de page.
Trois modes
| Mode | Option | Ce qui tourne |
|---|---|---|
| intégré | --loci | un modèle écrit dans Phosphoric |
| firmware | --loci-emu ELF | le vrai firmware du LOCI, exécuté par un émulateur de RP2040 |
| usb | --loci-hw PORT | une vraie LOCI-USB branchée sur l’hôte |
Un même binaire contient les trois, et le menu F1 ne propose que ceux qui étaient disponibles à la compilation.
La LOCI-USB
Une LOCI-USB est une LOCI sans interface Oric, avec un second port USB. Aujourd’hui, c’est une carte Adafruit Feather RP2040 USB Host qui fait tourner le firmware du LOCI. Ce n’est pas un pont vers une cartouche LOCI : c’est la LOCI elle-même. Phosphoric joue l’Oric : son 6502 émulé envoie ses accès à la page 3 et à la ROM par l’USB, et le firmware les rejoue dans son chemin de bus habituel. Le port USB-A de la carte sert de ports USB de la LOCI (clé, clavier, modem).
Lancé sans carte disque, Phosphoric prend d’office une LOCI-USB branchée, après trois vérifications :
- le matériel : un produit USB dont le nom commence par « LOCI-USB » (lu dans
/sys, sans ouvrir le port) ; - le protocole : la carte répond à
PING; - le firmware : l’adresse
$0319se lit'L'.
Le port n’est pas pris s’il est déjà ouvert par un autre programme. Jamais sans affichage, ni sous
make tests. --no-auto-loci désactive cette prise d’office.
La carte de la mémoire
| Fenêtre | Contenu |
|---|---|
$0310-$031F | contrôleur de disquette WD1793 du LOCI ; $0319 se lit 'L' |
$0315-$0317 | protocole cassette de bas niveau |
$0380-$0383 | l’ACIA 6551 du modem Wi-Fi |
$03A0-$03BF | la MIA : console, registres de l’API, pile d’échange ($03AC), opération ($03AF), boucle d’attente ($03B0) |
L’API compte 36 opérations sur 36 : système, horloge, fichiers, répertoires, montage, cassette,
démarrage et réglage du bus. Ses conventions sont celles du firmware, vérifiées sur sa source : les
erreurs de fichier valent 32 + FRESULT de FatFS, les descripteurs de fichier vont de 3 à 18 et ceux
de répertoire à partir de 64, la pile d’échange fait 512 octets.
Le stockage
| Sur la vraie carte | Dans Phosphoric |
|---|---|
| la flash interne | un dossier : --loci-flash DOSSIER (par défaut, le dossier courant) |
| une clé USB | --loci-usb DOSSIER (jusqu’à 4), ou les médias montés dans /media/$USER, détectés au lancement |
| une carte SD | une image FAT16 ou FAT32 brute : --loci-sdimg IMAGE |
Le sélecteur du menu du LOCI liste les périphériques comme le vrai firmware : « 0: Internal storage », puis une ligne par périphérique USB.
Le bouton Action (F8)
- Appui court : la session est sauvegardée, puis le menu du LOCI démarre. Comme le vrai firmware, Phosphoric écrit la version du firmware et les réglages du bus dans la ROM du menu. L’entrée resume du menu remet la ROM d’avant et restaure la session.
- Appui long (2 secondes ou plus) : une ROM de diagnostic démarre et teste pas à pas le processeur, l’ULA, la mémoire, le VIA et le PSG.
- Sur un clavier où F8 est une touche multimédia, Ctrl+Alt+M et Ctrl+Alt+D font l’appui court et l’appui long.
La ROM de diagnostic attend un appui sur le bouton NMI pour continuer : c’est Maj+F5 depuis la version 2.29.
La course contre le 6502
Le port d’extension de l’Oric n’a pas de ligne RDY : un périphérique ne peut pas demander au 6502 d’attendre. Le LOCI doit lire l’adresse par ses PIO, la traiter en logiciel, puis poser la donnée, le tout avant l’instant où le 6502 la saisit. S’il est en retard, personne ne pilote le bus, et le 6502 lit n’importe quoi.
À l’échelle du cycle entier, ce phénomène est invisible. Phosphoric a donc, pour ce seul endroit,
une base de temps en nanosecondes (include/io/bus_timing.h) :
| Étape | Instant |
|---|---|
| PHI2 de l’Oric | bas pendant les deux premiers tiers du cycle, haut pendant le dernier |
| donnée sur le bus | 708 ns avec les réglages par défaut, tant que le firmware répond en 58 cycles au plus |
| le 6502 la saisit | 900 ns : la période moins 100 ns de préparation |
| la limite | 81 à 82 cycles de réponse du firmware |
Mesuré sur la carte Feather : le firmware répond en 23 cycles, la donnée est sur le bus vers 708 ns, la marge est d’environ 190 ns.
Deux modèles de fiabilité coexistent : WINDOW (le défaut), où une lecture est fiable si le réglage
tior du firmware tombe dans une plage, comme la calibration carte par carte du vrai firmware ; et
PHASE (--loci-serve-timing), qui suit la chronologie ci-dessus, avec une gigue en option. C’est
le seul endroit de Phosphoric qui atteint, en partie, le niveau N4.
Par l’USB, plus vite
Avec une LOCI-USB, chaque accès à la page 3 est un aller-retour USB pendant lequel le 6502 émulé est figé. La version 2.29.3 regroupe les écritures (par paquets de 256), la 2.30.0 lit d’avance par blocs de 256 octets quand le firmware le permet. Mesuré sur la carte : la sauvegarde puis le retour au menu passent d’une ou deux minutes à environ 4 secondes, et le retour au BASIC de 12 à 4 secondes.
Dans le navigateur
La version web sait démarrer le menu du LOCI (?loci=1, ou le bouton LOCI), avec une flash interne
gardée dans le navigateur (IndexedDB). Le modem Wi-Fi, les clés USB et les images SD n’y sont pas.
Voir Dans le navigateur.
Les écarts connus
- La flash interne de la vraie carte (un système LittleFS) n’est pas émulée telle quelle : un dossier joue ce rôle, avec la logique d’un système FAT.
- Les clés USB sont détectées au lancement seulement : pas de branchement à chaud.
- Le contrôleur de disquette du LOCI garde des délais courts. C’est fidèle : sur la vraie carte, son « lecteur » est le RP2040 et une carte SD, sans mécanique.