Tachibana

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

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 :

ModeComportement
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.
DITHERINGTout en trames de densité : la hiérarchie de luminosité des couleurs est préservée en « niveaux de gris » texturés.
BRUTTout 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

ServeurAdresseRemarques
PAVI 3617pavi.3617.fr:3617recommandé, page d'accueil Téletel
MiniPavigo.minipavi.fr:516passerelle multi-services
Autresaisie libre hôte:portoption 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 MinitelOric-1 & AtmosAtmos seulCode envoyé
EnvoiRETURNSEP $41
RetourCTRL+R ou Flèche HAUTFUNCT+RSEP $42
RépétitionCTRL+EFUNCT+ESEP $43
GuideCTRL+GFUNCT+GSEP $44
AnnulationCTRL+A ou ESCFUNCT+ASEP $45
SommaireCTRL+SFUNCT+SSEP $46
CorrectionDELETESEP $47
SuiteCTRL+NFUNCT+NSEP $48
Connexion/FinCTRL+CFUNCT+CSEP $49
Flèches G/DFlèche GAUCHE/DROITEESC[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

← Retour à OricTel · Documentation technique →