Tachibana

OricTel — Funktionen im Detail

Minitel-1B-Terminal für den Oric 1 / Atmos · C + 6502-Assembler (cc65) · EUPL-1.2-Lizenz

Diese Seite listet alle Funktionen von OricTel auf, mit einer Erläuterung zu jeder. Das GitHub-Repository ist die maßgebliche, aktuelle Quelle; das Benutzerhandbuch und die Architekturdokumentation behandeln Nutzung und Interna.

Inhalt

1. Videotex-Decoder

Das Herz von OricTel ist ein Decoder für das Teletel/Antiope-Videotex-Protokoll (STUM 1B), implementiert als vollständiger Zustandsautomat.

Zustandsautomat

Behandelt ESC, CSI (mit Parametern), US, SS2, REP (Wiederholung), SEP und die Protokollmodi PRO1/PRO2/PRO3. Cursorpositionierung (US Zeile/Spalte), Bewegungen, Löschungen, Wagenrücklauf.

PRO2- / PRO3-Modi

Roll-Modus, Kleinbuchstaben, Tastaturumschaltungen, erweiterte/Cursor-Tastatur. Die Links/Rechts-Pfeile senden nur dann Cursorsequenzen (ESC[D / ESC[C), wenn der Server den Cursormodus (PRO3) aktiviert hat — wie bei einem echten Minitel 1B.

Terminalidentifikation

Die ENQ/ENQROM-Identifikation ist bewusst stumm: Moderne Server (MiniPavi) spiegeln die Antwort ins Eingabefeld, statt sie zu verbrauchen — dasselbe Verhalten wie der Referenz-Emulator miedit.

2. HIRES-Anzeige

Auflösung & Raster

HIRES 240×200 Pixel, also 40 Spalten × 25 Zeilen (6×8-Pixel-Zellen). Video-Invertierung über Bit 7, serielle Oric-Attribute pro Scanline. Eine Statusleiste belegt die oberste Zeile.

Rendering-Engine in Assembler

Eine 6502-Span-Engine (~300 Takte pro Zelle). „Dirty“-Zellen-Auffrischung: Pro Frame (50 Hz) werden nur geänderte Zellen neu in den HIRES-Framebuffer gerendert, was die CPU-Last stark senkt. Adaptives Budget: Die Tastatur bleibt selbst mitten im Seitenaufbau reaktionsfähig. Tastenecho ~1 ms (Einzelzellen-Rendering), Vollseite ~0,3 s.

3. Zeichensätze

G0 / G1 / G2

G0/G1-Umschaltung über SI/SO; G2-Zeichen über SS2.

4. Attribute pro Zelle

Vollständige Attribute

Tintenfarbe (0-7), Hintergrundfarbe (0-7), Blinken (Flash), Video-Invertierung, Unterstreichung / Mosaiktrennung, Verbergen (concealed) und Größe: normal, doppelte Höhe, doppelte Breite, doppelte Größe. Eine hybride Farbheuristik nähert die Zellenfarben des Minitel mit den seriellen Oric-Attributen an: Attribute auf leeren Zellen mit Vorausschau (Farbe des folgenden Textes), Mosaike in Vollfarbe, wenn das Attribut passt, Luminanz-Dithering als Rückfall.

5. Rendering-Modi (STRG+D)

Der Oric kann nicht jede Zelle einzeln färben wie der Minitel; OricTel bietet drei umschaltbare Strategien:

ModusVerhalten
AUTO (Standard)Bester Kompromiss, zeilenweise entschieden: Attributfarben, wo die Zeile es zulässt, Luminanz-Dithering für dichte Mehrfarbenzonen, Weiß-Rendering für ungeeignete Zeilen.
DITHERINGAlles in Dichteraster: Die Helligkeitshierarchie der Farben bleibt als texturierte „Graustufen“ erhalten.
ROHAlles Weiß auf Schwarz: maximale Formlesbarkeit, keine Farbe.

6. Verbindung

AT-Modem (die einzige Methode)

OricTel steuert ein Hayes-Modem über die ACIA 6551 bei $0380 (PicoWiFiModemUSB, echt oder von Phosphoric emuliert --serial modem/picowifi): ATZ (Reset), dann ATDT Host:Port (Wählen = TCP-Verbindung). Der Server wird im Menü gewählt, sodass man ohne Neustart des Emulators wechseln kann.

WLAN-Konfig vom Oric aus

Auf einem echten LOCI + PicoWiFiModemUSB-Aufbau konfiguriert das Menü „WLAN-Konfig“ alles vom Oric aus: Scan (AT$SCAN) nach 2,4-GHz-Netzen in Reichweite, Auswahl, Passworteingabe (maskiert), dann Zuordnung (AT$SSID=/AT$PASS=/ATC1) und Speichern im NVRAM des Pico (AT&W).

WebSocket-Brücke

orictel_bridge.py (Python asyncio) leitet TCP (Port 3615) an einen WebSocket-Minitel-Server (ws://3617.fr/ws) weiter. Transparentes Binärrelais, Einzel-Client, Statistiken, -v-Modus.

7. Minitel-Server

ServerAdresseHinweise
PAVI 3617pavi.3617.fr:3617empfohlen, Teletel-Startseite
MiniPavigo.minipavi.fr:516Multiservice-Gateway
Anderefreie Eingabe Host:PortOption 3 des Server-Menüs

8. Minitel-Tastatur

OricTel läuft auf Oric-1 und Atmos. Funktionstasten nutzen STRG+Buchstabe (beide Maschinen) oder FUNCT+Buchstabe (nur Atmos).

Minitel-FunktionOric-1 & AtmosNur AtmosGesendeter Code
SendenRETURNSEP $41
ZurückSTRG+R oder Pfeil HOCHFUNCT+RSEP $42
WiederholenSTRG+EFUNCT+ESEP $43
HilfeSTRG+GFUNCT+GSEP $44
AbbrechenSTRG+A oder ESCFUNCT+ASEP $45
InhaltSTRG+SFUNCT+SSEP $46
KorrekturDELETESEP $47
WeiterSTRG+NFUNCT+NSEP $48
Verbinden/EndeSTRG+CFUNCT+CSEP $49
Pfeile L/RPfeil LINKS/RECHTSESC[D / ESC[C (PRO3-Cursormodus)

Lokale Kürzel (senden nichts an den Server): STRG+D wechselt den Rendering-Modus, STRG+L löscht den Bildschirm lokal, STRG+F setzt die serielle Verbindung (ACIA) zurück.

9. Der Bildschirm & Status

Anzeigebereich & Verbindungsanzeige

Zeilen 1-24: die Videotex-Seite des Servers (40 Spalten). Statuszeile (oben rechts): invertiertes C = kürzlich Daten empfangen (verbunden), F = keine Daten seit ~30 s (Verbindung wahrscheinlich getrennt). Cursor: ein blinkender Balken unter der aktuellen Zelle, wenn der Server ihn aktiviert (Eingabefelder). Ein Splashscreen beim Start mit einem AY-3-8912-Jingle.

10. Technische Spezifikationen

Seriell (ACIA 6551)

ACIA 6551 an der LOCI-Basis ($0380). Register: Daten $0380, Status/Reset $0381, Befehl $0382, Steuerung $0383. Reines Polling des STATUS-Registers, kein ACIA-IRQ; Registerschreibvorgänge sind SEI/PLP-geschützt (MIA-Beschränkung des echten LOCI). Eine nicht-blockierende Software-TX-Warteschlange, von der Hauptschleife geleert.

Speicher

TAP ~23 KB; Code+Daten unter $9800 (cc65-Stack bei $0800); HIRES-Framebuffer $A000-$BF3F. Statusleiste bei $BB80+.

Protokoll & Leistung

Teletel/Antiope-Videotex (STUM 1B). Vollseite ~0,3 s, Tastenecho ~1 ms. Gültigkeitsreferenz: der miedit/telenet-JS-Emulator.

11. Bauen & ausführen

make                # baut orictel.tap
make dsk            # Sedoric-Diskette orictel.dsk (MFM_DISK, bootfähig)
make test           # Host-Tests (Videotex, ACIA/SMC, AT-Modem, Tastatur, Brücke)
make fuzz           # Videotex-Decoder-Fuzzing (ASAN/UBSAN)
make coverage       # Host-gcov-Abdeckung
make run            # läuft unter Phosphoric im AT-Modem-Modus
make run-ws         # startet die WebSocket-Brücke + den Emulator
make run-dsk        # Microdisc-Boot der Sedoric-Diskette

Voraussetzungen: cc65 (≥ 2.19), Python 3.8+ mit websockets ≥ 12.0 (nur Brücke), der Phosphoric-Emulator (oder ein physisches LOCI/PicoWiFiModemUSB) und die Oric-ROMs (basic11b.rom für den Atmos, basic10.rom für den Oric-1).

12. Bekannte Einschränkungen

← Zurück zu OricTel · Technische Dokumentation →