Tachibana

Documentatie › Architectuur

Technische architectuur — OricTel

Overzicht

OricTel bestaat uit twee onafhankelijke subsystemen:

  1. Oric-programma (6502 C/ASM) — de Minitel-terminal.
  2. Python-brug — een WebSocket ↔ TCP-gateway.

Datastroom

Minitel-server (ws://3617.fr/ws)
        |
        | WebSocket (binaire frames, ruwe Videotex-bytes)
        v
+-------------------+
| orictel_bridge.py |  Python asyncio
| TCP-poort 3615    |  Transparant bidirectioneel relais
+-------------------+
        |
        | TCP-socket (ruwe bytes, geen framing)
        v
+-------------------+
| Phosphoric        |  Oric-emulator
| TCP ACIA-backend  |  --serial tcp:127.0.0.1:3615
| V23-modus         |  --serial-v23 (1200/75 baud)
+-------------------+
        |
        | ACIA 6551-registers @ $0380-$0383 (LOCI-basis)
        | Cyclusnauwkeurige timing
        v
+-------------------+
| OricTel-programma |  6502-code (cc65)
|                   |
| serial_asm.s      |  <-- Laag-niveau ACIA-driver
| videotex.c        |  <-- Protocol-toestandsmachine
| display.c         |  <-- HIRES-rendering
| keyboard.c        |  <-- Toetsenbordscan + mapping
| main.c            |  <-- Hoofdlus
+-------------------+

Oric-geheugenkaart

$0000-$00FB  Zero Page (cc65: $00E2-$00FB)
$0100-$01FF  6502-stack
$0200-$02FF  Systeemvariabelen
$0300-$030F  VIA 6522 (spiegel $0300-$03FF)
$0380-$0383  ACIA 6551 (serieel, LOCI-basis)
$0400-$0500  Oric-systeemgebied
$0501-$97FF  OricTel CODE + DATA (~37 KB)
$9800-$9FFF  BSS / cc65-stack (2 KB)
$A000-$BF3F  HIRES-framebuffer (8000 bytes)
$BB80-$BFDF  Tekstscherm (regels 25-27 = statusbalk)
$C000-$FFFF  ROM (16 KB)

ACIA 6551-registers (Oric-zijde)

AdresLezenSchrijven
$0380Ontvangen dataTe verzenden data
$0381StatusregisterProgramma-reset
$0382CommandoregisterCommandoregister
$0383ControlregisterControlregister

Minitel V23-configuratie

Bits van het Status-register

Videotex-protocol — toestandsmachine

NORMAL ──ESC($1B)──> ESC_SEQ
       ──US($1F)───> US_ROW
       ──SO($0E)───> (schakel naar G1)
       ──SI($0F)───> (schakel naar G0)
       ──$20-$7F──> (toon teken)
       ──$08-$0B──> (cursorverplaatsing)
       ──$0C─────> (scherm wissen)
       ──$0D─────> (regelterugloop)

ESC_SEQ ──$40-$47──> (inktkleur) -> NORMAL
        ──$50-$57──> (achtergrondkleur) -> NORMAL
        ──$48/$49──> (flash aan/uit) -> NORMAL
        ──$4C-$4F──> (grootte) -> NORMAL
        ──$5B─────> CSI
        ──$39─────> PRO

US_ROW ──$40-$57──> US_COL (bewaart rij)

US_COL ──$41-$68──> NORMAL (positioneert cursor)

CSI ──params+letter──> NORMAL (ANSI-achtig commando)

HIRES-weergave

Attributen per cel

Geoptimaliseerde rendering (dirty rectangles)

Elke gewijzigde cel wordt «dirty» gemarkeerd. Elk frame (50 Hz) worden alleen de gewijzigde cellen opnieuw gerenderd in de HIRES-framebuffer. Dit verlaagt de CPU-belasting van de 6502 aanzienlijk.

Gereproduceerd uit docs/ARCHITECTURE.md (gezaghebbende, actuele versie op GitHub).

← Documentatie · Gebruikershandleiding →