Aller au contenu
Phosphoricwiki
Sommaire

Phosphoric pour les nuls

Jamais entendu parler de l’Oric, ni d’émulation au cycle ? Voici, en quelques minutes, ce que fait Phosphoric et pourquoi il prend la peine de compter chaque microseconde.

Dans cette page

1. Un ordinateur de 1983 dans une fenêtre

L’Oric-1 (1983) et l’Oric Atmos (1984) sont des ordinateurs familiaux 8 bits de la société britannique Tangerine, très répandus en France. On les branchait sur la télévision ; ils démarraient sur un BASIC en ROM, et on y chargeait des programmes depuis une cassette audio, puis depuis une disquette.

Un émulateur est un programme qui fait semblant d’être cette machine. Il reproduit en logiciel chacune de ses puces : le processeur, la mémoire, la puce qui dessine l’image, celle qui fait le son. On lui donne les ROM d’origine, et les programmes de l’époque tournent comme sur la vraie machine.

Écran de démarrage de l'Atmos : ORIC EXTENDED BASIC V1.1, © 1983 TANGERINE, 37631 BYTES FREE, Ready, en noir sur fond blanc
Le démarrage de l’Atmos dans Phosphoric : la ROM BASIC 1.1 d’origine, telle quelle.

2. Pourquoi compter les cycles

Le processeur de l’Oric, un 6502, avance au rythme d’une horloge : un million de cycles par seconde. À chaque cycle, il fait exactement une chose sur son bus, lire ou écrire un octet. Pendant ce temps, les autres puces avancent elles aussi : la puce vidéo lit l’écran en mémoire, les minuteries comptent, le son se fabrique.

Beaucoup d’émulateurs simplifient : ils exécutent une instruction entière d’un coup, puis rattrapent le reste. C’est juste pour la plupart des programmes. Mais certains comptent sur le moment exact d’un accès : une démo qui change la couleur au milieu d’une ligne d’écran, un jeu qui joue un son échantillonné, un pilote de port série. Pour eux, l’à-peu-près ne suffit pas.

Phosphoric est cadencé au cycle : une seule horloge maître fait avancer toute la machine d’un cycle à la fois, toujours dans le même ordre.

Un cycle de la machine, dans l'ordreChaque appel d'emu_cycle() fait vivre un cycle d'une microseconde à toute la machine, dans un ordre figé : d'abord l'unique accès du 6502 au bus, puis les périphériques cadencés par φ2 avancent d'un cycle, enfin l'ULA lit la cellule d'écran de ce même cycle. Une écriture du processeur au cycle c est donc vue par la cellule c ; jusqu'en 2.0.1, l'ordre inverse décalait chaque split d'une cellule vers la droite.Un cycle = 1 µs = un appel d'emu_cycle()début du cyclecycle suivant① 6502l'unique accès busdu cycle : lecture,écriture ou accès factice② périphériques φ2VIA, FDC, ACIA, cassette,cartes : avancésd'exactement un cycle③ ULAlit une cellule de 6 pixels(la colonne du cycle),puis avance le balayageUne écriture du 6502 au cycle c est vue par la cellule c, et pas c + 1.L'ordre vient de mesures faites à l'oscilloscope sur une vraie machine, publiées dans un guide de l'ULA.Jamais d'appel à vide : chaque appel coûte exactement un cycle au processeur.
Dans un cycle : le 6502 fait son accès, les périphériques avancent d’un cycle, puis l’ULA lit la cellule d’écran de ce cycle.

3. Dire exactement ce qui est vrai

Jusqu’en septembre 2026, le projet annonçait une précision au cycle qu’il n’avait pas au sens strict : un audit l’a montré. Phosphoric a alors adopté une échelle de précision en quatre niveaux, où chaque niveau est prouvé par un test qui le ferait tomber, puis a refait son cœur pour l’atteindre.

Aujourd’hui, ce qu’il affirme :

  • le processeur est exact au cycle : 100 % de séquences bus exactes sur 2 440 000 cas de test ;
  • la machine est cadencée au cycle : tout avance d’un cycle à la fois, jamais d’un paquet ;
  • ce qui reste approché est dit, composant par composant. Par exemple, le contrôleur de disquette attend des délais fixes au lieu de suivre la rotation du disque.

Le détail est dans La précision, mot à mot.

4. Ce qu’on peut en faire

  • Jouer et programmer : BASIC 1.0 (Oric-1) ou 1.1 (Atmos), cassettes .tap, disquettes .dsk avec Sedoric, manette, imprimante, et un clavier QWERTY ou AZERTY.
  • Brancher des cartes d’époque : contrôleurs de disquettes Microdisc et Jasmin, modem Minitel, interfaces MIDI, synthèse vocale.
  • Essayer des cartes nouvelles : la cartouche LOCI, et l’ULA-NG, une puce vidéo étendue imaginée pour un futur circuit FPGA.
  • Déboguer un programme 6502 : points d’arrêt, pas à pas, retour en arrière, et même gdb ou VS Code branchés sur l’Oric émulé.
  • Automatiser : sans affichage, Phosphoric charge un programme, tape au clavier, prend des captures et enregistre le son. C’est ainsi que les images de ce wiki ont été faites.

5. Où le trouver

Phosphoric est un logiciel libre (licence EUPL 1.2). Il se compile sous Linux, Windows et macOS, et existe en version WebAssembly qui tourne dans un navigateur sans rien installer. Les téléchargements et le code source sont sur le site principal.

En résumé

QuestionRéponse courte
C’est quoi ?Un émulateur de l’Oric-1 et de l’Atmos, écrit en C11.
Qu’a-t-il de particulier ?Toute la machine avance un cycle à la fois ; le 6502 est exact au cycle.
Sur quoi ?Linux, Windows, macOS, et le navigateur (WebAssembly).
Les ROM sont fournies ?Non : il faut placer basic10.rom et basic11b.rom dans roms/.
Et ensuite ?Voir L’Oric émulé et Où en est Phosphoric.

Les mots techniques sont expliqués dans le glossaire.

Sources dans le dépôt : README.md, docs/ACCURACY.md, docs/articles/v2-cycle-stepped.md.