OricTel — fonctionnalités détaillées
Terminal Minitel 1B pour Oric 1 / Atmos · C + assembleur 6502 (cc65) · licence EUPL 1.2
Cette page recense l'intégralité des fonctionnalités d'OricTel, avec une explication de chacune. Le dépôt GitHub reste la référence à jour ; le manuel d'utilisation et la documentation d'architecture détaillent l'usage et la technique.
Sommaire
1. Décodeur Vidéotex
Le cœur d'OricTel est un décodeur du protocole Vidéotex Téletel/Antiope (STUM 1B), implémenté comme une machine à états complète.
Machine à états
Gère ESC, CSI (avec paramètres), US, SS2, REP
(répétition), SEP, et les modes protocole PRO1/PRO2/PRO3.
Positionnement curseur (US ligne/colonne), déplacements, effacements, retour chariot.
Modes PRO2 / PRO3
Rouleau, minuscules, aiguillages appliqués au clavier, clavier étendu / mode curseur. Les flèches
gauche/droite n'envoient les séquences curseur (ESC[D / ESC[C) que si le serveur a
activé le mode curseur (PRO3), comme sur un vrai Minitel 1B.
Identification terminal
L'identification ENQ/ENQROM est volontairement muette : les serveurs modernes (MiniPavi)
échoient la réponse dans le champ de saisie au lieu de la consommer — même comportement que l'émulateur de
référence miedit.
2. Affichage HIRES
Résolution & grille
HIRES 240×200 pixels, soit 40 colonnes × 25 lignes (cellules de 6×8 pixels). Inversion vidéo par le bit 7, attributs série de l'Oric posés par scanline. Une barre de statut occupe la ligne haute.
Moteur de rendu en assembleur
Moteur de plage écrit en 6502 (~300 cycles par cellule). Rafraîchissement par cellules « dirty » : à chaque trame (50 Hz), seules les cellules modifiées sont re-rendues dans le framebuffer HIRES, ce qui réduit fortement la charge CPU. Budget adaptatif : le clavier reste réactif même en plein chargement de page. Écho de frappe ~1 ms (rendu de la cellule seule), page complète ~0,3 s.
3. Jeux de caractères
G0 / G1 / G2
- G0 — alphanumérique (ASCII Minitel, accents français).
- G1 — mosaïques semi-graphiques 2×3 blocs (64 motifs), cache précalculé.
- G2 — CEPT étendu, diacritiques et accents précomposés (minuscules/majuscules).
Bascule G0/G1 par SI/SO ; caractères G2 via SS2.
4. Attributs par cellule
Attributs complets
Couleur d'encre (0-7), couleur de fond (0-7), clignotement (flash), inversion vidéo, soulignement / séparation mosaïque, masquage (concealed), et taille : normal, double hauteur, double largeur, double taille. Une heuristique couleur hybride approxime les couleurs par cellule du Minitel avec les attributs série de l'Oric : attributs posés sur les cellules vides avec regard-avant (couleur du texte qui suit), mosaïques en couleur solide quand l'attribut correspond, dithering par luminance en repli.
5. Modes de rendu (CTRL+D)
L'Oric ne peut pas colorer chaque cellule individuellement comme le Minitel ; OricTel propose trois stratégies commutables à chaud :
| Mode | Comportement |
|---|---|
| AUTO (défaut) | Meilleur compromis, décidé ligne par ligne : couleurs par attributs quand la ligne s'y prête, trame de luminance pour les zones multicolores denses, rendu blanc pour les lignes inadaptées. |
| DITHERING | Tout en trames de densité : la hiérarchie de luminosité des couleurs est préservée en « niveaux de gris » texturés. |
| BRUT | Tout blanc sur noir : lisibilité maximale des formes, aucune couleur. |
6. Connexion
Modem AT (seule méthode)
OricTel pilote un modem Hayes via l'ACIA 6551 à $0380 (PicoWiFiModemUSB, réel ou émulé par
Phosphoric --serial modem/picowifi) : ATZ (reset) puis
ATDT hôte:port (numérotation = connexion TCP). Le serveur se choisit dans le menu, on peut donc en
changer sans relancer l'émulateur.
Config WiFi depuis l'Oric
Sur un montage réel LOCI + PicoWiFiModemUSB, le menu « Config WiFi » configure tout depuis
l'Oric : scan (AT$SCAN) des réseaux 2,4 GHz à portée, sélection, saisie du mot de passe (masqué),
puis association (AT$SSID=/AT$PASS=/ATC1) et sauvegarde en NVRAM du Pico
(AT&W).
Passerelle WebSocket
orictel_bridge.py (Python asyncio) relaie TCP (port 3615) vers un serveur Minitel WebSocket
(ws://3617.fr/ws). Relais binaire transparent, mono-client, statistiques, mode -v.
7. Serveurs Minitel
| Serveur | Adresse | Remarques |
|---|---|---|
| PAVI 3617 | pavi.3617.fr:3617 | recommandé, page d'accueil Téletel |
| MiniPavi | go.minipavi.fr:516 | passerelle multi-services |
| Autre | saisie libre hôte:port | option 3 du menu serveur |
8. Clavier Minitel
OricTel fonctionne sur Oric-1 et Atmos. Les touches de fonction passent par CTRL+lettre (les deux machines) ou FUNCT+lettre (Atmos uniquement).
| Fonction Minitel | Oric-1 & Atmos | Atmos seul | Code envoyé |
|---|---|---|---|
| Envoi | RETURN | SEP $41 | |
| Retour | CTRL+R ou Flèche HAUT | FUNCT+R | SEP $42 |
| Répétition | CTRL+E | FUNCT+E | SEP $43 |
| Guide | CTRL+G | FUNCT+G | SEP $44 |
| Annulation | CTRL+A ou ESC | FUNCT+A | SEP $45 |
| Sommaire | CTRL+S | FUNCT+S | SEP $46 |
| Correction | DELETE | SEP $47 | |
| Suite | CTRL+N | FUNCT+N | SEP $48 |
| Connexion/Fin | CTRL+C | FUNCT+C | SEP $49 |
| Flèches G/D | Flèche GAUCHE/DROITE | ESC[D / ESC[C (mode curseur PRO3) |
Raccourcis locaux (n'envoient rien au serveur) : CTRL+D change le
mode de rendu, CTRL+L efface l'écran localement, CTRL+F réinitialise la liaison série
(ACIA).
9. L'écran & le statut
Zone d'affichage & indicateur de liaison
Lignes 1-24 : la page Vidéotex du serveur (40 colonnes). Ligne de statut (en haut à
droite) : C inversé = données reçues récemment (connecté), F = pas de données depuis
~30 s (liaison probablement coupée). Curseur : barre clignotante sous la cellule courante
lorsque le serveur l'active (zones de saisie). Splash screen au démarrage avec jingle AY-3-8912.
10. Spécifications techniques
Série (ACIA 6551)
ACIA 6551 à la base LOCI ($0380). Registres : donnée $0380, statut/reset
$0381, commande $0382, contrôle $0383. Polling pur du registre STATUS,
aucune IRQ ACIA ; les écritures registres sont protégées SEI/PLP (contrainte MIA du vrai
LOCI). File d'émission logicielle non bloquante drainée par la boucle principale.
Mémoire
TAP ~23 Ko ; code+données sous $9800 (pile cc65 en $0800) ; framebuffer HIRES
$A000-$BF3F. Barre de statut en $BB80+.
Protocole & performance
Vidéotex Téletel/Antiope (STUM 1B). Page complète ~0,3 s, écho de frappe ~1 ms. Référence de validité : l'émulateur JS miedit/telenet.
11. Compilation & exécution
make # compile orictel.tap
make dsk # disquette Sedoric orictel.dsk (MFM_DISK, bootable)
make test # tests hôte (Vidéotex, ACIA/SMC, modem AT, clavier, bridge)
make fuzz # fuzzing du décodeur Vidéotex (ASAN/UBSAN)
make coverage # couverture hôte gcov
make run # lance sous Phosphoric en mode modem AT
make run-ws # lance le bridge WebSocket + l'émulateur
make run-dsk # boot Microdisc de la disquette Sedoric
Prérequis : cc65 (≥ 2.19), Python 3.8+ avec websockets ≥ 12.0 (bridge
uniquement), l'émulateur Phosphoric (ou un LOCI/PicoWiFiModemUSB physique), et les
ROMs Oric (basic11b.rom pour Atmos, basic10.rom pour Oric-1).
12. Limites connues
- Les couleurs par cellule du Minitel sont approximées par les attributs série de l'Oric : sur une ligne sans cellule vide utilisable, la couleur d'un texte peut être perdue (rendu blanc).
- Le mode MIXED (télé-informatique 80 colonnes) n'est pas supporté.
- L'identification terminal (ENQ/ENQROM) est volontairement muette (alignement sur miedit).
- La configuration V23 réelle (1200/75 bauds, 7E1) pour vrai matériel Oric + modem est en feuille de route ; sous émulateur le transfert est instantané.