Tachibana

ドキュメント › アーキテクチャ

技術アーキテクチャ — OricTel

概要

OricTel は 2 つの独立したサブシステムから成ります:

  1. Oric プログラム(6502 C/ASM)— Minitel 端末。
  2. Python ブリッジ — WebSocket ↔ TCP ゲートウェイ。

データフロー

Minitel サーバ (ws://3617.fr/ws)
        |
        | WebSocket(バイナリフレーム、生の Vidéotex バイト)
        v
+-------------------+
| orictel_bridge.py |  Python asyncio
| TCP ポート 3615   |  透過的な双方向中継
+-------------------+
        |
        | TCP ソケット(生バイト、フレームなし)
        v
+-------------------+
| Phosphoric        |  Oric エミュレータ
| TCP ACIA バックエンド |  --serial tcp:127.0.0.1:3615
| V23 モード        |  --serial-v23 (1200/75 ボー)
+-------------------+
        |
        | ACIA 6551 レジスタ @ $0380-$0383(LOCI ベース)
        | サイクル精度のタイミング
        v
+-------------------+
| OricTel プログラム |  6502 コード (cc65)
|                   |
| serial_asm.s      |  <-- 低レベル ACIA ドライバ
| videotex.c        |  <-- プロトコルのステートマシン
| display.c         |  <-- HIRES 描画
| keyboard.c        |  <-- キーボードスキャン + マッピング
| main.c            |  <-- メインループ
+-------------------+

Oric メモリマップ

$0000-$00FB  Zero Page (cc65: $00E2-$00FB)
$0100-$01FF  6502 スタック
$0200-$02FF  システム変数
$0300-$030F  VIA 6522(ミラー $0300-$03FF)
$0380-$0383  ACIA 6551(シリアル、LOCI ベース)
$0400-$0500  Oric システム領域
$0501-$97FF  OricTel CODE + DATA(~37 KB)
$9800-$9FFF  BSS / cc65 スタック(2 KB)
$A000-$BF3F  HIRES フレームバッファ(8000 バイト)
$BB80-$BFDF  テキスト画面(25-27 行 = ステータスバー)
$C000-$FFFF  ROM(16 KB)

ACIA 6551 レジスタ(Oric 側)

アドレス読み書き
$0380受信データ送信データ
$0381ステータスレジスタプログラムリセット
$0382コマンドレジスタコマンドレジスタ
$0383コントロールレジスタコントロールレジスタ

Minitel V23 設定

Status レジスタのビット

Vidéotex プロトコル — ステートマシン

NORMAL ──ESC($1B)──> ESC_SEQ
       ──US($1F)───> US_ROW
       ──SO($0E)───> (G1 へ切替)
       ──SI($0F)───> (G0 へ切替)
       ──$20-$7F──> (文字を表示)
       ──$08-$0B──> (カーソル移動)
       ──$0C─────> (画面消去)
       ──$0D─────> (復帰)

ESC_SEQ ──$40-$47──> (インク色) -> NORMAL
        ──$50-$57──> (背景色) -> NORMAL
        ──$48/$49──> (点滅 on/off) -> NORMAL
        ──$4C-$4F──> (サイズ) -> NORMAL
        ──$5B─────> CSI
        ──$39─────> PRO

US_ROW ──$40-$57──> US_COL (行を記憶)

US_COL ──$41-$68──> NORMAL (カーソル位置指定)

CSI ──params+文字──> NORMAL (ANSI 風コマンド)

HIRES 表示

セルごとの属性

最適化描画(dirty rectangles)

変更された各セルは「dirty」と印されます。各フレーム(50 Hz)で、変更されたセルのみが HIRES フレームバッファに再描画されます。これにより 6502 の CPU 負荷が大幅に低減します。

docs/ARCHITECTURE.md から再掲(正となる最新版は GitHub)。

← ドキュメント · ユーザーマニュアル →