Tachibana

Phosphoric — 機能の詳細

サイクル精度の ORIC-1 / Atmos エミュレータ · C11 で記述 · MIT ライセンス

このページは Phosphoric のすべての機能を、各機能の説明と対応するコマンドラインオプションとともに列挙します。最新の正となる情報は GitHub リポジトリです。各サブシステムの詳細は技術ドキュメントを参照してください。

目次

1. エミュレーションコア

コアはマシンをサイクル単位で再現します。各チップはオリジナルのシリコンと同じ速度で進みます — デモやラスタ依存コードに必須です。

MOS 6502 CPU

151 の公式オペコード、13 のアドレッシングモード、十進演算(BCD)、レベルトリガの IRQ をサイクル精度でエミュレーション。テストスイートは非公式 NMOS オペコードもカバーします。

64 KB メモリ

RAM $0000-$BFFF、ROM $C000-$FFFF、バンク切替、I/O ルーティングを Oric のメモリ構成に忠実に。

VIA 6522

16 レジスタ、Timer 1/2、IFR/IER 割り込み、キーボードマトリクス、シフトレジスタ(8 モード)、T2 パルス計数、完全な CA2/CB2 PCR モード(入力エッジ、独立割り込み、ハンドシェイク — シリコンと同様に CB2 は書き込み専用 —、1 サイクルパルス、手動)、IRA/IRB 入力ラッチ(ACR ビット 0-1)。

ULA ビデオ

テキストモード(40×28)と HIRES(240×200)、シリアル属性、PAL タイミング(312 ライン × 64 サイクル)。

AY-3-8910 PSG

3 トーンチャンネル、ノイズ、16 のエンベロープ形状、SDL2 オーディオ出力。

2. 周辺機器とカード

Microdisc(WD1793 コントローラ)

WD1793 FDC、4 ドライブ(A-D)、オーバーレイ ROM、Sedoric 起動。デフォルトで実機の機械的タイミング(ステップレート 6/12/20/30 ms、300 rpm の回転レイテンシ、5 インデックスパルス後の Record-Not-Found、ライブ Type I インデックスパルス)。堅牢性検証用の不良セクタ注入:損傷はドライブ切替をまたいでメディアに追従し、セーブステートに保存されます。

カセット(TAP 形式)

ROM パッチによる CLOAD/CSAVE、高速ロード、マルチブロック、CLOAD 後の再連結、そして信号レベル再生--tape-signal:ROM が読む実際の VIA CB1 波形、独自・保護ローダ向け)。

ACIA 6551(シリアル)

$031C-$031F(LOCI 下では $0380)のシリアルコントローラ。トランスポートは loopback / TCP / PTY / COM / ファイル、加えてプロトコルバックエンド(Hayes AT モデム、PicoWiFiModemUSB)、V23 モード(Minitel / Digitelec)。チップ × トランスポート表を参照。

Digitelec DTL 2000

$03F8-$03FD の忠実な PIA 6821 + ACIA 6850 モデムカード(当時の資料から OCR で検証したレジスタ)、V23 75/1200 と対称 1200、回線/キャリア制御、IRQ 配線。当時の OTRM 端末に対して検証済み。

Mageco / ORICON MIDI

MIDI DIN 端子を駆動する MC6850 ACIA(31250 ボー、8-N-1)。Oric フォーラム由来の 2 設計:$03FE-$03FF のオリジナル Mageco カード(--mageco)と、$031C-$031D + クロック生成器の現代版 ORICON(LOCI 互換、--oricon)。生 MIDI ストリームの記録/再生、Standard MIDI File を(テンポで)Oric 再生、または MIDI=1 ビルドではライブのホスト MIDI ポート(ALSA / CoreMIDI / WinMM)を開き FluidSynth や DAW を駆動。

PicoWiFiModemUSB

sodiumlb の WiFi モデム(Pico W、USB CDC ↔ WiFi)のエミュレーションで、LOCI により $0380 の ACIA として公開。完全な AT コマンドセット v0.1.0;WiFi はシミュレート、データ接続は実 TCP。

LOCI — Lovely Oric Computer Interface

sodiumlb のインターフェース(2024):MIA バス $03A0-$03BF、36/36 の API 操作(ファームウェア準拠 ABI)、USB HID、サイクル精度の WD1793、FAT16/32 SD イメージ、実行時 ROM 切替。アクションボタン(F8):短押し → セッションスナップショット + LOCI メニュー;長押し(≥ 2 秒)→ Mike Brown の診断 ROM。ホストの実 USB キーを Oric に提供、MIA バスのタイミング調整可。LOCI ファームウェア経由で完全な Sedoric V4 マスターを起動。

3. ORIC-1 と Atmos のモデル

モデルの自動判別

ROM ヘッダから BASIC 1.0(ORIC-1)と 1.1(Atmos)を判別し、各版に正しいカセットパッチアドレスを使用。モデルは強制も可能。

4. ジョイスティック・プリンタ・プロッタ

IJK ジョイスティック

IJK インターフェース(最も一般的なアダプタ、PSG ポート A でアクティブロー)。キーボードモード(矢印キー + RCtrl/RAlt で発射)または SDL2 ゲームパッド(D-pad、アナログスティック、A/B/X ボタン)、ホットプラグ対応。ジョイスティックとキーボードの信号はポート A で合成。

Centronics プリンタと MCP-40 プロッタ

LPRINT/LLIST をテキストファイルにキャプチャ、または 4 色の MCP-40 ペンプロッタをエミュレート(コマンド H/D/M/J/P/L、480×400 フレームバッファ、Bresenham 直線描画、5×7 フォント、BMP エクスポート)。VIA ポート A + CA2(STROBE)エッジによる Centronics プロトコル。

5. セーブステート

.ost 形式

CRC32 整合性チェック付きの完全なバイナリ状態を 13 セクション(CPU, MEM, VIA, PSG, VID, KBD, FDC, MDC, DSK, BAD, TAP, SER, META)に分割。未知のセクションは無視されます:前方・後方互換。

6. 対話型デバッガ

ブレークポイントとウォッチポイント

最大 16 の PC ブレークポイント、条件付き(b ADDR if EXPR)、8 のラスタライン・ブレークポイント、8 のメモリ書き込みウォッチポイント。

実行と検査

step、next、step-out、continue、undo(CPU+RAM の 16 スナップショットを巻き戻し)、レジスタ、シンボル解決オペランド付きのページ送り逆アセンブル、メモリのダンプ/編集、インラインアセンブラa ADDR MNEMONIC [operand])、メモリ検索find バイトまたはテキスト)、スタック。周辺機器のライブ検査(viapsgdiskaciatapeloci)。

シンボル・TUI・GDB

シンボルテーブルの読み込み(.sym/.lab/EQU/VICE)、6 ペインの ncurses TUITUI=1 ビルド)、そして何より gdb・lldb・IDE(VS Code、CLion)から RSP プロトコル経由で 6502 をデバッグできるリモート GDB スタブ他の Oric エミュレータにはない機能

7. 制御と自動化

IPC 制御モード OricForge

--control を付けると、Phosphoric は stdin/stdout でテキストプロトコルを話します(ログは stderr):40 を超えるコマンド(helloregsreadwritepeekbreakstepload-tapload-romload-disk…)と 3 種類のイベント。実行中の非同期ポーズ、機能ネゴシエーション。OricForge IDE 向け設計。

HTTP API(REST)

同じコマンドセットを HTTP/JSON で公開(HTTPAPI=1 ビルド、既定ポート 8888)。スクリプト、ブラウザダッシュボード、エンドツーエンドテスト向け。エンドポイント GET /hello /regs /mem /peek/…POST /reset /mem /keys /tape /disk /exec/…リモートでキーボード入力も可能(POST /keystext=…)。既定で 127.0.0.1 にバインド、ファイル操作はサンドボックスのディレクトリに限定。

決定論的な記録/再生(「TAS movie」)

キーボード入力を記録しビット単位で決定論的に再生:ツールアシスト実行、バグ再現、CI 回帰。他の Oric エミュレータにはない機能。

キーボード自動入力

エスケープ付きの入力シミュレーション(\n Return、\e Esc、矢印、\Cx Ctrl+x、\Fx Funct+x…)。ペースは実際のキーボードスキャナに同期(VIA PB3 マトリクス走査):キー取りこぼしなし。推測したサイクルではなくメモリ状態でアーム可能。

8. Chromecast / Google Cast 配信

Google Cast テレビへ配信

Phosphoric は Oric の画面と音声を Chromecast / Google Cast 機器へ配信できます。HTTP MJPEG サーバ(映像ストリーム /stream、720×672、3 倍拡大)、リアルタイムの PSG WAV 音声/audio)、ネイティブ CASTV2 制御(Google Cast プロトコル)、ネットワーク上の機器の mDNS 検出CAST=1 ビルドが必要。

9. 表示とキャプチャ

スケーリング

整数スケーリング ×1(240×224)〜 ×4(960×896)、最近傍(ピクセルパーフェクト、ぼかしなし)、F3 でその場切替。

スクリーンショットと動画

PPM / BMP / PNG スクリーンショット — 終了時、指定サイクル、またはメモリ状態でトリガRAM[A]==V)。画面テキストダンプ(ASCII)またはフレームバッファの ANSI トゥルーカラー。Motion-JPEG AVI 動画録画(GUI モードでは音声トラック付き)。PSG WAV 音声キャプチャ、画面なしでも CI でテスト可能。

10. ULA-NG(新世代)

FPGA 版 ULA のためのソフトウェア参照

将来の Verilog/FPGA ULA(Sipeed Tang Primer 20K / GW2A-18)のための参照モデル。レジスタ窓 $0340-$035Fリセット時はロック → プログラムがアンロックする($0340'N','G')まで標準の HCS 10017 とビット単位で同一。8 機能:パレット間接(16×12 ビット LUT)、ラスタ IRQ、開始アドレス(ダブルバッファ/スクロール)、スキャンラインごとの copper、細かな X/Y スクロール、並列属性(セルごとの ink+paper、カラークラッシュなし)、16 個のハードウェアスプライト 16×16(優先順位 + 衝突)、そして chunky 4bpp(320×224、16 色)/ 80 桁テキスト モード。各機能に 1 つずつデモを同梱。

11. トレース・プロファイリング・ROM 解析

CPU 命令トレース

各命令を逆アセンブルとレジスタ状態とともにログ(サイクル PC バイト DISASM A= X= Y= SP= P=)。

パフォーマンスプロファイラ

64 KB 全域のアドレスごとのヒット数とサイクル、256 オペコードのヒストグラム、上位 20 のホットスポットレポート。

ROM 解析

ベクタ(RESET, NMI, IRQ)の抽出、サブルーチンマップ(参照数付きの JSR/JMP ターゲット)、ASCII 文字列検出、使用統計(コード/データ/埋め)、パターン検索。

12. 対応オペレーティングシステム

Phosphoric は 3 大デスクトップ OS でネイティブに、ブラウザで、そして自動化向けの headless モードで動作します。同じコードがどこでも同一の出力を生みます。

システム方法備考
Linuxネイティブ SDL2 ビルド(make SDL2=1主要な開発プラットフォーム。全機能:ALSA MIDI、Cast、GDB スタブ、TCP/PTY/COM シリアル。
Windows 11(ネイティブ).exe(CI または MinGW-w64、make WIN=1 SDL2=1v1 の制限:シリアル tcp/pty/modem/com/picowifi、--gdb--control(非同期ポーズ)、Cast とホスト MIDI は Linux のみ
Windows 11(WSL2)WSLg 上の Linux ビルド完全な Linux ビルド、全機能。
macOSネイティブ SDL2 ビルドCoreMIDI 経由のホスト MIDI。
ブラウザWebAssembly(make wasmクロスプラットフォーム(Chrome、Firefox、Safari、Edge)、インストール不要。ネイティブのソケット/スレッドは no-op;コア、映像、音声、キーボード、カセット、ディスクは動作。ブラウザガイドを参照。
CI / サーバheadless モード(make SDL2=0--headless画面なし:テスト、自動化、キャプチャ、CI でテスト可能な WAV 音声。

13. 利便性と移植

クロスプラットフォーム

Linux・Windows・macOS のネイティブ SDL2 ビルド。Windows 11 では:ブラウザ(WebAssembly、インストール不要)、ネイティブ .exe(CI または MinGW-w64)、WSL2(WSLg 上の完全な Linux ビルド)。詳細は上のオペレーティングシステムの節を参照。

WebAssembly ビルド

完全なマシンがタブ内の <canvas> で動作(Web Audio、.tap/.dsk のドラッグ&ドロップ、ROM セレクタ、CRT フィルタ、.ost セーブステート、テープ/ディスク動作 LED、ORIC-1/Atmos の画面キーボード)。ネイティブとバイト単位で同一の出力。これがサイトの「オンライン実行」ボタンを動かすビルドです。

変換ツールなど

bas2tapbin2taptap2sedoric(Sedoric ファイル注入)、sedoric-info(ディスク検査)。QWERTY/AZERTY 配列、headless モード(CI/自動化)、ホストファイルシステム共有(--hostfs)。

14. シリアル通信:チップ × トランスポート

Phosphoric は Oric プログラムが駆動する UART(メモリマップされたチップ)と、ホスト側でバイトを運ぶトランスポートを分離します。チップを 1 つ選び、トランスポートを与えます。

チップ(プログラムが読み書きする場所):

オプションチップアドレス実ハードウェア
--serialACIA 6551(MOS)$031C--loci 下では $0380Oric V23 モデム、Telestrat
--dtl2000PIA 6821 + ACIA 6850$03F8Digitelec DTL 2000 カード
--magecoACIA 6850$03FEMageco MIDI インターフェース(31250 ボー)
--oriconACIA 6850 + クロック生成$031CORICON MIDI(LOCI 互換)
--lociLOCI MIA$03A0-$03BFLOCI インターフェース(sodiumlb)

トランスポート(バイトの行き先)。透過 = 生のバイトパイプ;プロトコル = 独自のコマンド/UART 層を挿入:

トランスポート種類備考
loopback透過TX を RX に戻す(テスト)
tcp:H:P透過BBS / Minitel / telnet / TCP 上の MIDI ルータ
pty透過POSIX 疑似端末(minicom、screen)
com:B,D,P,S,DEV透過実シリアルデバイス(termios)
file:IN[:OUT]透過決定論的な再生(RX)/記録(TX);MIDI キャプチャ
midi[:ターゲット]透過ライブのホスト MIDI ポート(MIDI=1
smf:ファイル[:loop]透過Standard MIDI File → タイミング付き MIDI IN
modem[:H:P]プロトコルHayes AT インタプリタ(--serial のみ)
digitelec:H:Pプロトコル非推奨--dtl2000 を使用
picowifi[:…]プロトコルPicoWiFiModemUSB WiFi モデム(--serial のみ)

--serial の調整オプション:--serial-v23(非対称 1200/75 Minitel)、--serial-buffer N、--serial-baud N、--serial-irq-on-rdrf(WDC 65C51 IRQ モード)、--serial-trace--serial-tcp-backpressure--acia-addr

15. キーボードショートカット

キー機能
F2状態のクイックセーブ
F3表示スケール切替(×1→×2→×3→×4)
F4状態のクイックロード
F5ウォームリセット
F6OSD — カセット/ディスクのホットスワップ
F7メモリダンプ(64 KB RAM をタイムスタンプ付き .bin へ)
F8LOCI アクションボタン — 短押し:スナップショット + メニュー;≥ 2 秒:診断 ROM
F9デバッガを開く
F10終了
F11フルスクリーン
F12PNG スクリーンショット(既存ならタイムスタンプ付き)

16. コンパイル

make                 # SDL2 の標準ビルド(既定)
make SDL2=0          # headless ビルド(SDL2 なし、CI/自動化向け)
make DEBUG=1         # デバッグビルド(-g -O0)
make CAST=1          # Chromecast / Google Cast 対応付き
make MIDI=1          # リアルタイムのホスト MIDI 付き(ALSA/CoreMIDI/WinMM)
make wasm            # WebAssembly / ブラウザビルド(Emscripten が必要)
make tools           # 変換ツール(bas2tap, bin2tap, tap2sedoric, sedoric-info)
sudo make install    # /usr/local へインストール

前提(Debian/Ubuntu):sudo apt install build-essential libsdl2-dev (Chromecast には libssl-dev)。プラットフォーム別の詳細はドキュメントを参照。

← Phosphoric に戻る · 技術ドキュメント →