La page 3 et les cartes d'extension
Sur l’Oric, tout ce qui se branche passe par 256 adresses : la page 3. Phosphoric y émule une douzaine de cartes, d’époque ou nouvelles, chacune dans son propre module.
Dans cette page
Qui répond où
Le VIA est câblé en $0300-$030F, mais il répond aussi, en miroir, sur tout le reste de la page 3
quand aucune carte ne prend l’adresse. C’est un piège pour qui veut détecter une carte : lire une
adresse vide renvoie un registre du VIA, pas zéro. L’ULA-NG en tient compte dans
sa poignée de main.
Le contrat d’un périphérique
Avant l’architecture actuelle, main.c aiguillait chaque accès de la page 3 par une cascade de
conditions, avec des priorités croisées. Désormais, chaque périphérique du bus est décrit par une
structure io_device_t (include/io/io_device.h) :
| Champ | Rôle |
|---|---|
claims | cette adresse est-elle à moi ? |
read, write | servir un accès ; write peut décliner et laisser l’écriture retomber sur le VIA |
claims_write | facultatif, quand la carte écoute en écriture une zone plus large qu’en lecture |
peek | lire sans effet de bord (pour le débogueur) |
save, load | sa section dans les sauvegardes d’état |
tick | avancer d’un cycle |
Ce contrat reçoit tout l’émulateur, et pas seulement la carte, parce que les priorités sont réelles : le Microdisc doit savoir si l’ACIA est présente, et l’ACIA du LOCI doit consulter la fiabilité du bus de la cartouche.
Une carte, un fichier, une ligne
Depuis la série 2.13 à 2.19, chaque carte est un module : un fichier src/cards/card_<id>.c
décrit ses fiches pour le menu, ses options, sa configuration, sa mise en route, son contrat de bus,
ses sauvegardes et son son. Une ligne dans include/cards_list.h l’ajoute. Le cœur en dérive tout :
les options de lancement, l’aide, le menu F1, phosphoric.cfg, la table du bus, les ticks, les
sauvegardes et le mixage audio.
Il n’y a pas de chargement dynamique : la liste est explicite, pour rester portable entre GCC,
MinGW, clang sur macOS et Emscripten. La carte d’exemple docs/examples/card_demo.c sert de modèle,
et make test-card-template l’ajoute à une copie de l’arbre pour vérifier qu’elle marche de bout en
bout.
Les cartes émulées
| Carte | Adresse | Ce qu’elle fait |
|---|---|---|
| Microdisc | $0310-$031F | contrôleur de disquette WD1793, quatre lecteurs, ROM en $E000 |
| Jasmin | $03F4-$03FF | contrôleur WD177x, ROM d’amorçage en $F800, disquettes TDOS |
| LOCI | $03A0-$03BF | cartouche moderne : stockage, USB, ROM échangeable ; voir Le LOCI |
| ACIA 6551 | $031C-$031F ($0380 avec le LOCI) | port série : modem V23, Telestrat |
| DTL 2000 | $03F8-$03FD | modem Digitelec : PIA 6821 et ACIA 6850, V23 pour le Minitel |
| Mageco MIDI | $03FE-$03FF | ACIA 6850 vers les prises MIDI, 31 250 bauds |
| ORICON | $031C-$031F | réédition moderne de l’interface MIDI, compatible avec le LOCI |
| SP0256 | $03F1 | synthèse vocale par allophones (carte de Mageco) |
| MEA 8000 | $03FE-$03FF | synthèse vocale par formants (carte TMPI) |
| hostfs | — | un dossier de l’hôte partagé avec l’Oric |
| ULA-NG | $0340-$035F | l’ULA étendue, toujours présente, verrouillée au démarrage |
Les cartes qui se recouvrent sont exclusives : une seule carte disque (Microdisc, Jasmin ou LOCI), une seule carte MIDI (Mageco ou ORICON). Le menu F1 signale les conflits d’adresses.
Le port série : des puces et des transports
Phosphoric sépare la puce que le programme de l’Oric pilote du transport qui porte les octets sur l’hôte. On choisit une puce, puis on lui donne un transport.
| Transport | Genre | Usage |
|---|---|---|
loopback | transparent | ce qui est émis revient (tests) |
tcp:hôte:port | transparent | un BBS, un serveur Minitel, telnet, un routeur MIDI |
pty | transparent | un pseudo-terminal POSIX (minicom, screen) |
com:... | transparent | un vrai port série de l’hôte |
file:entrée[:sortie] | transparent | rejeu déterministe et capture, sans réseau |
midi[:cible] | transparent | un port MIDI de l’hôte (ALSA, CoreMIDI, WinMM) |
smf:morceau.mid | transparent | un fichier MIDI joué dans l’Oric, au tempo du morceau |
modem[:hôte:port] | protocole | un interpréteur de commandes Hayes AT |
picowifi[:...] | protocole | le modem Wi-Fi PicoWiFiModemUSB, commandes AT |
Les transports à protocole ne vont qu’avec --serial (l’ACIA 6551), par choix : le DTL 2000 se
compose par son PIA (un bit de ligne), pas par des commandes AT, et les mettre derrière la carte
fidèle la rendrait infidèle.
file: est précieux pour les tests de protocole : on rejoue un flux de serveur enregistré et on
capture les réponses du programme, sans réseau ni correspondant.
Le MIDI
La carte Mageco d’origine (--mageco) et sa réédition ORICON (--oricon) mettent un ACIA
6850 derrière les prises MIDI, à 31 250 bauds. Phosphoric peut :
- capturer le flux MIDI de l’Oric dans un fichier (
file::sortie.mid) ; - jouer un fichier MIDI standard dans l’Oric, au tempo du morceau (
smf:morceau.mid[:loop]) ; - dans une construction
MIDI=1, ouvrir un vrai port MIDI de l’hôte (« Phosphoric MIDI » sous ALSA) : l’Oric pilote FluidSynth ou un logiciel de musique, et un clavier MIDI joue dans l’Oric.
Ce qui se branche sur les ports
Certains périphériques ne prennent pas d’adresse dans la page 3 : ils se branchent sur les ports du VIA ou du PSG.
- La manette IJK, l’adaptateur le plus courant, sur le port A du PSG (actif à l’état bas) : au
clavier (flèches, Ctrl et Alt droits pour tirer,
-j keys) ou sur une vraie manette (-j gamepad, branchement à chaud). - L’imprimante Centronics : données sur le port A du VIA, impulsion de validation sur CA2.
LPRINTetLLISTsont capturés dans un fichier texte (-p sortie.txt). - La table traçante MCP-40 (
--printer-type mcp40) : quatre stylos, les commandes de tracé (origine, tracer, déplacer, couleur, texte, type de trait), une feuille de 480 × 400 points exportée en BMP. - La cassette, sur l’entrée CB1 du VIA (voir Cassettes, disquettes et sauvegardes).