OricTel — gedetailleerde functies
Minitel 1B-terminal voor de Oric 1 / Atmos · C + 6502-assembly (cc65) · EUPL 1.2-licentie
Deze pagina somt alle functies van OricTel op, met een toelichting bij elk. De GitHub-repository is de gezaghebbende, actuele bron; de gebruikershandleiding en de architectuurdocumentatie behandelen gebruik en interne werking.
Inhoud
1. Videotex-decoder
Het hart van OricTel is een decoder voor het Teletel/Antiope Videotex-protocol (STUM 1B), geïmplementeerd als een volledige toestandsmachine.
Toestandsmachine
Verwerkt ESC, CSI (met parameters), US, SS2, REP
(herhaling), SEP, en de protocolmodi PRO1/PRO2/PRO3.
Cursorpositionering (US rij/kolom), verplaatsingen, wissen, regelterugloop.
PRO2 / PRO3-modi
Rolmodus, kleine letters, toetsenbordschakelaars, uitgebreid/cursor-toetsenbord. De linker/rechter pijltjes
sturen alleen cursorsequenties (ESC[D / ESC[C) als de server de cursormodus (PRO3) heeft
ingeschakeld, net als een echte Minitel 1B.
Terminalidentificatie
De ENQ/ENQROM-identificatie is bewust stil: moderne servers (MiniPavi) echoën het antwoord naar het
invoerveld in plaats van het te consumeren — hetzelfde gedrag als de referentie-emulator miedit.
2. HIRES-weergave
Resolutie & raster
HIRES 240×200 pixels, oftewel 40 kolommen × 25 rijen (cellen van 6×8 pixels). Video-inversie via bit 7, Oric-seriële attributen per scanline. Een statusbalk beslaat de bovenste regel.
Rendering-engine in assembly
Een 6502-span-engine (~300 cycli per cel). «Dirty»-cel-verversing: elk frame (50 Hz) worden alleen gewijzigde cellen opnieuw gerenderd in de HIRES-framebuffer, wat de CPU-belasting sterk verlaagt. Adaptief budget: het toetsenbord blijft responsief, ook midden in een paginalading. Toetsecho ~1 ms (rendering van één cel), volledige pagina ~0,3 s.
3. Tekensets
G0 / G1 / G2
- G0 — alfanumeriek (Minitel-ASCII, Franse accenten).
- G1 — 2×3-blok-semigraphische mozaïeken (64 patronen), voorberekende cache.
- G2 — uitgebreid CEPT, diakritische tekens en voorgecomponeerde accenten (klein/hoofdletter).
G0/G1-schakelen via SI/SO; G2-tekens via SS2.
4. Attributen per cel
Volledige attributen
Inktkleur (0-7), achtergrondkleur (0-7), flash, video-inversie, onderstreping / mozaïekscheiding, verberging (concealed), en grootte: normaal, dubbele hoogte, dubbele breedte, dubbele grootte. Een hybride kleurheuristiek benadert de kleuren per cel van de Minitel met de seriële attributen van de Oric: attributen op lege cellen met vooruitkijken (kleur van de volgende tekst), mozaïeken in vaste kleur wanneer het attribuut overeenkomt, luminantie-dithering als terugval.
5. Renderingsmodi (CTRL+D)
De Oric kan niet elke cel afzonderlijk kleuren zoals de Minitel; OricTel biedt drie in-de-loop schakelbare strategieën:
| Modus | Gedrag |
|---|---|
| AUTO (standaard) | Beste compromis, regel voor regel bepaald: attribuutkleuren waar de regel dat toelaat, luminantie-dithering voor dichte meerkleurige zones, witte rendering voor ongeschikte regels. |
| DITHERING | Alles in dichtheidsrasters: de helderheidshiërarchie van de kleuren blijft behouden als getextureerd «grijswaarden». |
| RUW | Alles wit op zwart: maximale leesbaarheid van vormen, geen kleur. |
6. Verbinding
AT-modem (de enige methode)
OricTel stuurt een Hayes-modem aan via de ACIA 6551 op $0380 (PicoWiFiModemUSB, echt of geëmuleerd
door Phosphoric --serial modem/picowifi): ATZ (reset) en dan
ATDT host:poort (kiezen = TCP-verbinding). De server wordt in het menu gekozen, dus je kunt wisselen
zonder de emulator te herstarten.
WiFi-config vanaf de Oric
Op een echte LOCI + PicoWiFiModemUSB-opstelling configureert het menu «WiFi-config» alles vanaf
de Oric: scannen (AT$SCAN) naar 2,4 GHz-netwerken binnen bereik, selectie, wachtwoordinvoer (gemaskeerd),
dan koppeling (AT$SSID=/AT$PASS=/ATC1) en opslaan in de NVRAM van de Pico
(AT&W).
WebSocket-brug
orictel_bridge.py (Python asyncio) geeft TCP (poort 3615) door aan een WebSocket-Minitel-server
(ws://3617.fr/ws). Transparant binair relais, één client, statistieken, -v-modus.
7. Minitel-servers
| Server | Adres | Opmerkingen |
|---|---|---|
| PAVI 3617 | pavi.3617.fr:3617 | aanbevolen, Teletel-startpagina |
| MiniPavi | go.minipavi.fr:516 | multiservice-gateway |
| Andere | vrije invoer host:poort | optie 3 van het servermenu |
8. Minitel-toetsenbord
OricTel draait op de Oric-1 en Atmos. Functietoetsen gebruiken CTRL+letter (beide machines) of FUNCT+letter (alleen Atmos).
| Minitel-functie | Oric-1 & Atmos | Alleen Atmos | Verzonden code |
|---|---|---|---|
| Verzenden | RETURN | SEP $41 | |
| Terug | CTRL+R of pijl OMHOOG | FUNCT+R | SEP $42 |
| Herhalen | CTRL+E | FUNCT+E | SEP $43 |
| Gids | CTRL+G | FUNCT+G | SEP $44 |
| Annuleren | CTRL+A of ESC | FUNCT+A | SEP $45 |
| Inhoud | CTRL+S | FUNCT+S | SEP $46 |
| Correctie | DELETE | SEP $47 | |
| Volgende | CTRL+N | FUNCT+N | SEP $48 |
| Verbinden/Einde | CTRL+C | FUNCT+C | SEP $49 |
| Pijltjes L/R | pijl LINKS/RECHTS | ESC[D / ESC[C (PRO3-cursormodus) |
Lokale sneltoetsen (sturen niets naar de server): CTRL+D wisselt de
renderingsmodus, CTRL+L wist het scherm lokaal, CTRL+F reset de seriële verbinding (ACIA).
9. Het scherm & de status
Weergavegebied & verbindingsindicator
Regels 1-24: de Videotex-pagina van de server (40 kolommen). Statusregel (rechtsboven): omgekeerde
C = recent data ontvangen (verbonden), F = geen data sinds ~30 s (verbinding waarschijnlijk
verbroken). Cursor: een knipperende balk onder de huidige cel wanneer de server hem inschakelt
(invoervelden). Een splashscreen bij het opstarten met een AY-3-8912-jingle.
10. Technische specificaties
Serieel (ACIA 6551)
ACIA 6551 op de LOCI-basis ($0380). Registers: data $0380, status/reset
$0381, commando $0382, control $0383. Puur pollen van het STATUS-register,
geen ACIA-IRQ; registerschrijfacties zijn SEI/PLP-beschermd (de MIA-beperking van de echte LOCI).
Een niet-blokkerende software-TX-wachtrij die door de hoofdlus wordt geleegd.
Geheugen
TAP ~23 KB; code+data onder $9800 (cc65-stack op $0800); HIRES-framebuffer
$A000-$BF3F. Statusbalk op $BB80+.
Protocol & prestaties
Teletel/Antiope Videotex (STUM 1B). Volledige pagina ~0,3 s, toetsecho ~1 ms. Validiteitsreferentie: de miedit/telenet JS-emulator.
11. Bouwen & uitvoeren
make # bouwt orictel.tap
make dsk # Sedoric-diskette orictel.dsk (MFM_DISK, opstartbaar)
make test # host-tests (Videotex, ACIA/SMC, AT-modem, toetsenbord, brug)
make fuzz # Videotex-decoder-fuzzing (ASAN/UBSAN)
make coverage # host gcov-dekking
make run # draait onder Phosphoric in AT-modemmodus
make run-ws # draait de WebSocket-brug + de emulator
make run-dsk # Microdisc-boot van de Sedoric-diskette
Vereisten: cc65 (≥ 2.19), Python 3.8+ met websockets ≥ 12.0 (alleen brug), de
Phosphoric-emulator (of een fysieke LOCI/PicoWiFiModemUSB), en de Oric-ROM's
(basic11b.rom voor de Atmos, basic10.rom voor de Oric-1).
12. Bekende beperkingen
- De kleuren per cel van de Minitel worden benaderd met de seriële attributen van de Oric: op een regel zonder bruikbare lege cel kan de kleur van een tekst verloren gaan (wit gerenderd).
- MIXED-modus (80-koloms tele-informatica) wordt niet ondersteund.
- Terminalidentificatie (ENQ/ENQROM) is bewust stil (afgestemd op miedit).
- Echte V23-configuratie (1200/75 baud, 7E1) voor echte Oric + modem-hardware staat op de routekaart; onder de emulator is de overdracht onmiddellijk.