Tachibana

Dokumentation › Architektur

Technische Architektur — OricTel

Überblick

OricTel besteht aus zwei unabhängigen Subsystemen:

  1. Oric-Programm (6502 C/ASM) — das Minitel-Terminal.
  2. Python-Brücke — ein WebSocket-↔-TCP-Gateway.

Datenfluss

Minitel-Server (ws://3617.fr/ws)
        |
        | WebSocket (Binärframes, rohe Videotex-Bytes)
        v
+-------------------+
| orictel_bridge.py |  Python asyncio
| TCP-Port 3615     |  Transparentes bidirektionales Relais
+-------------------+
        |
        | TCP-Socket (rohe Bytes, kein Framing)
        v
+-------------------+
| Phosphoric        |  Oric-Emulator
| TCP-ACIA-Backend  |  --serial tcp:127.0.0.1:3615
| V23-Modus         |  --serial-v23 (1200/75 Baud)
+-------------------+
        |
        | ACIA-6551-Register @ $0380-$0383 (LOCI-Basis)
        | Taktgenaues Timing
        v
+-------------------+
| OricTel-Programm  |  6502-Code (cc65)
|                   |
| serial_asm.s      |  <-- Low-Level-ACIA-Treiber
| videotex.c        |  <-- Protokoll-Zustandsautomat
| display.c         |  <-- HIRES-Rendering
| keyboard.c        |  <-- Tastaturscan + Mapping
| main.c            |  <-- Hauptschleife
+-------------------+

Oric-Speicherkarte

$0000-$00FB  Zero Page (cc65: $00E2-$00FB)
$0100-$01FF  6502-Stack
$0200-$02FF  Systemvariablen
$0300-$030F  VIA 6522 (Spiegel $0300-$03FF)
$0380-$0383  ACIA 6551 (seriell, LOCI-Basis)
$0400-$0500  Oric-Systembereich
$0501-$97FF  OricTel CODE + DATA (~37 KB)
$9800-$9FFF  BSS / cc65-Stack (2 KB)
$A000-$BF3F  HIRES-Framebuffer (8000 Bytes)
$BB80-$BFDF  Textbildschirm (Zeilen 25-27 = Statusleiste)
$C000-$FFFF  ROM (16 KB)

ACIA-6551-Register (Oric-Seite)

AdresseLesenSchreiben
$0380Empfangene DatenZu sendende Daten
$0381StatusregisterProgramm-Reset
$0382BefehlsregisterBefehlsregister
$0383SteuerregisterSteuerregister

Minitel-V23-Konfiguration

Bits des Status-Registers

Videotex-Protokoll — Zustandsautomat

NORMAL ──ESC($1B)──> ESC_SEQ
       ──US($1F)───> US_ROW
       ──SO($0E)───> (auf G1 umschalten)
       ──SI($0F)───> (auf G0 umschalten)
       ──$20-$7F──> (Zeichen anzeigen)
       ──$08-$0B──> (Cursorbewegung)
       ──$0C─────> (Bildschirm löschen)
       ──$0D─────> (Wagenrücklauf)

ESC_SEQ ──$40-$47──> (Tintenfarbe) -> NORMAL
        ──$50-$57──> (Hintergrundfarbe) -> NORMAL
        ──$48/$49──> (Blinken ein/aus) -> NORMAL
        ──$4C-$4F──> (Größe) -> NORMAL
        ──$5B─────> CSI
        ──$39─────> PRO

US_ROW ──$40-$57──> US_COL (speichert Zeile)

US_COL ──$41-$68──> NORMAL (positioniert Cursor)

CSI ──Params+Buchstabe──> NORMAL (ANSI-ähnlicher Befehl)

HIRES-Anzeige

Attribute pro Zelle

Optimiertes Rendering (Dirty Rectangles)

Jede geänderte Zelle wird „dirty“ markiert. Pro Frame (50 Hz) werden nur die geänderten Zellen neu in den HIRES-Framebuffer gerendert. Das senkt die CPU-Last des 6502 erheblich.

Reproduziert aus docs/ARCHITECTURE.md (maßgebliche, aktuelle Version auf GitHub).

← Dokumentation · Benutzerhandbuch →