Releases: kunichiko/RetroCastX
Release list
v0.6.0
v0.6.0: 1プロセス・複数ウィンドウ
- 1プロセス・複数ウィンドウにした。⌘Q はアプリ全体、⌘W はこのウィンドウで、
macOS の作法がそのまま効く。以前はウィンドウごとに別プロセスだったため、
⌘Qが1つしか閉じず、Dockに複数並び、1つでも生きていると起動し直せなかった - 起動すると前回の並びが戻る。 ウィンドウごとに番号(0〜9)を持ち、位置・
大きさ・接続先・画枠パラメータをその番号ごとに覚える。3画面筐体を3窓×3台で
見る使い方を想定している - 追加ウィンドウが画面の下へ歩いていくのを直した(位置の書き戻しと、
内枠/外枠の取り違え) - 重い処理(受信・再構成・NTSC復調・音声)はセッションごとのスレッドに残るので、
ウィンドウを増やしてもGUIスレッドに集中しない
v0.5.0
v0.5.0: 複数台・複数ウィンドウ
- ボードの指名と個体設定(名前 / 固定IP)をUIから変えられるようにした。
EEPROMへ焼けば次の電源投入から有効 - ウィンドウに番号(0〜9)を持たせ、前回の並び・位置・接続先を復元する。
3画面筐体(ダライアス等)を3窓×3台で見られる - 1つのボードを2つのウィンドウが取り合わないようにした。
ボードの映像送り先はプロトコル上1つだけなので、掴めた側だけが購読する - macOSの.appでも⌘Nで2つ目を開ける(LaunchServicesの単一インスタンス回避)
- 「ボード」節をパネル最上部へ。簡易スキャン/詳細はタイトル直下へ
ゲートウェア v0.9.3
gw-v0.9.3: 個体ごとのMAC/IPと、版の識別
- MAC を基板の EUI-48 EEPROM から読む。全基板が同じ MAC だと、同じ LAN に
2枚繋いだ時点で両方通信できなくなる - 既定 IP を MAC 由来のリンクローカル(169.254.x.y)にする。固定の
192.168.10.50 は繋ぐ相手を選んだ - fw_version を git のタグから作る(4/6/6 encoding)。焼いた版が実機から分かる
- build_id (key 0x09) でビルド元コミットまで特定できる
- caps bit0 = MAC を EEPROM から読めた。出荷検査は discover 一発で済む
ビルド: seed 4 / oss-cad-suite 2026-09-03 / litex 93c8d230e
v0.4.0
v0.4.0: S/PDIF(デジタル音声入力)への対応
-
S/PDIF を、いま選んでいる音声に重ねて鳴らせるようにした。ON/OFF と、
主系統とは独立した音量を持つ(「入力」の S/PDIF 行)。ボード側は3系統とも
常に送っているので、混ぜるのは再生側の設定だけで済む -
サンプルレート変換を実レートに対応させた。以前はクロックのppmずれしか
吸収できなかったので、44.1kHz の入力も、44.1kHz の出力デバイスも扱えなかった -
レートを「標準レート + ずれ[ppm]」で表示する(44101Hz → 44.1kHz (+22ppm))。
標準から外れた値は丸めずそのまま出す——復号が壊れたときに見逃さないため -
S/PDIF を音声入力そのものに選んでいるときは「混ぜる」を無効にする
-
起動時から設定のデバイスで開くようにした。以前は常に既定デバイスで開き、
UIが切替要求を出すまで設定と違うデバイスで鳴っていた -
選んだデバイスを開けなかったときに黙って既定へ落ちるのをやめた。警告を出し、
開けるようになったら自動で切り替わる(後から挿したデバイスにも追従する) -
配信出力ウィンドウをリサイズ不可にした。キャプチャ元はサイズが動かないことの
方が価値が高く、モード切替で動かさないのと同じ理由
★このバージョンの S/PDIF は、ゲートウェア gw-v0.9.2 以降と組で使うこと。
それ以前は 44.1kHz のフレームを4割取りこぼす。
v0.3.0
v0.3.0: 配信用のクリーン出力と、パネルの再構成
-
映像だけを描く別ウィンドウを追加(「入力」の下の「配信出力」)。
OBS の「ウィンドウキャプチャ」でこれを掴めば、調整UIやベゼルを写さずに
配信ソースにできる。macOS なら音声も同じソースに含まれる -
既定で枠なし。OBS はタイトルバーごと取り込むため。枠なしのときは映像の
どこを掴んでもウィンドウを動かせる -
ウィンドウのサイズは映像の解像度が変わっても動かさない(OBS 側のソース
サイズが動くと配信が崩れるため)。中の映像はアスペクトを保って収める -
「よく使う順」に並べ替えた: 状態表示 → 入力(映像ソース/音声/音量) →
配信出力 → Mode/Stats/...。映像ソースは Tune から出した -
入力を切り替えると音声も追従する。基板の音声入力は3系統で、どれと
組になるかは配線で決まっているため(X68000 は RGB端子、他は LINE入力)。
音声の既定を「自動」にした -
「詳細」トグルを追加。調査用の数値と細かい設定を既定で畳む
-
簡易スキャンを最上部へ出し、S キーでも実行できるようにした
-
配色をアプリアイコンに合わせた(teal を主アクセント)
-
スライダーとラベルの列を揃えた
-
自動で書き込んだ入力設定の通知を、消えるスナックバーにした
v0.2.1
コンポジット/S端子のフィールド極性と、電源投入直後の pll_divide 上書きを直す
★ゲートウェア gw-v0.9.1 以降と対で使ってください。 この Viewer は
CONFIG キー 0x6A を書きますが、古いゲートウェアはそれを知らないため無視します。
コンポジット/S端子で絵が周期的に上下へ1ライン震える
映像ソースごとに no_raw_phase(key 0x6A)を書くようにしました。生同期を繋がない
方式(コンポジット/S端子/MSX)では、浮いた同期入力の自己発振でフィールド極性が
壊れます。詳細は gw-v0.9.1 のリリースノート。
効果: 震えが消え、有効映像の高さが 217/240 → 432 になります。
電源を入れ直すとコンポジットが白黒になる
入力設定の自動書き込みと帯域ごとの復元が同じフレーム内で競合し、pll_divide が
15kHz帯の保存値(MSX と共有の 1368)で上書きされて、副搬送波が 8サンプル/周期に
ならず復調が未ロックになっていました。「一度モードを切り替えて戻すと直る」のは
そのときは既に YC8 だったためです。選択中の映像ソースが YC8 を要求するかも見る
ようにして、書き込みと復元の順序に依存しないようにしました。
Tune パネルに「同期の切り方」。「絵は出ているのに震える」を切り分けるための道具です。
sog_th / sync22h / sog_vth / fld_inv / no_raw 実行時に振れるつまみ
lines/frame と P/I 判定 TVPの同期セパレータの実測値
il: raw / rawok / P/I / frame フィールド極性の材料の内訳
SOG lowmax / hlen 飽和していると橙色
閾値の合わせ方は「lines/frame が 262/263 に安定する範囲を見つけて中央を採る」。
絵の震えを目で追うより速くて確実です。
- 入力設定を書いたときに Tune 欄の表示も更新するようにしました。以前は表示が
古いまま残り、そこで伝送形式やゲインの send を押すと画面に見えている古い値が
ボードへ飛んで絵が消える状態でした - MSX の SOGスライス閾値は v0.9.0 の 1/2分圧後も 0x0B のままでよいことを実機確認
ゲートウェア v0.9.2
gw-v0.9.2: S/PDIFデコーダの修正と診断
実機で S/PDIF の音だけが止まる事象を2件直した。どちらも 48kHz では表面化せず、
44.1kHz を入れて初めて露見したもの。
UI長の追従が一方通行で、短いグリッチで ui が縮むと本物の1UIが is_s に
ならなくなり、二度と戻れなかった。光ケーブルの抜き差しで起きる。
1秒間に1フレームも出ていなければ立て直すウォッチドッグを入れた。
現象時: rate=0 / fifo_level=43 のまま凍結。電源再投入まで復帰しない
修正後: 抜き差ししても1秒で自動復帰
UI長は整数では表せない。45MHz での1UIは 48kHz で 7.32、44.1kHz で 7.97
サイクルだが、整数のEWMAは切り捨てのせいで 7 が吸収状態になる。44.1kHz を
ui=7 で復号すると2UIと閾値の余裕が1.6サイクルしかなく、量子化のたびに
プリアンブルと誤判定してフレームを落としていた。
修正前: rate=24645(44100の56%)
修正後: rate=44101 / ui×16=125(=7.81)。全フレーム復号
小数部4bitの固定小数点にした。48kHz の 7.32 も正しく載る。
0x0002 spdif_rate_hz 実測レート。0=デコーダがサンプルを出していない
0x0003 spdif_fifo_level 送出FIFOの滞留。レートが出ているのに0なら後段
0x0004 spdif_ui UI長×16。48kHz≒117 / 44.1kHz≒128
0x0005 spdif_resyncs 立て直した回数
上の2件は、これが無いと「ボードが送っていない」までしか分からなかった。
ビルド: seed 4 / oss-cad-suite 2026-09-03 / litex 93c8d230e
ゲートウェア v0.9.1
コンポジット/S端子のフィールド極性を直す
コンポジット/S端子で「絵は出ているのに周期的に上下へ1ライン震える」症状を直します。
★Viewer 0.2.1 以降と対で使ってください。 古い Viewer は下記の CONFIG キーを
書かないので、このゲートウェアだけでは修正が効きません。
コンポジット/S端子/MSX では D-SUB の HSYNC/VSYNC に何も繋がりませんが、5Vトレラントの
シュミットバッファの入力が浮いて自己発振し、その周期が捕捉側の raw_ok の窓に入って
しまいます。すると存在しない同期の位相でフィールド極性が決まり、極性が交互に
ならないので両フィールドが同じスロットへ交互に上書きされていました。
絵は出るので気づきにくく、1ライン分の位置がフィールドごとに入れ替わって震えます。
実機の内訳(Viewer 0.2.1 の「同期の切り方」に表示されます):
il: raw0 rawok1 P/I1 frame0 生同期は来ていないのに rawok が立っている
SOG lowmax 773 垂直ブロードパルス27µs。SOG経路は健全だった
CONFIG キー 0x6A(no_raw_phase)を追加しました。1 にすると生同期の位相を使わず、
SOGOUT から取った位相でフィールド極性を決めます。Viewer は映像ソースごとに
自動で書きます(コンポジット/S端子/MSX = 1、X68000 = 0)。
効果(v0.9.0 実機、コンポジット480i): 震えが消え、有効映像の高さが 217/240 → 432 に
なりました(それまで片フィールドぶんしか無く、織り込みが成立していませんでした)。
論理段数は増えていません(既に式の中にあった信号を定数から実信号にしただけ)。
1回目の配置(seed 4)で収束: eth_rx 128.97MHz / sys 51.08MHz / dataclk 88.51MHz。
rawok は修正後も 1 のままです(浮いた入力は発振し続けるため)。効いているかは
rawok ではなく「織り込みが成立しているか」で判断してください。
根本は同期入力が浮いていることなので、次の基板ではバッファ入力にプルダウンを
入れます(docs/TODO.md の 10-5b)。
ビルド: seed 6 / oss-cad-suite 2026-09-03 / litex 93c8d230e
v0.2.0
v0.2.0: 校正まわりの機能追加と表示の修正
v0.9.0 基板での bring-up を通して入った機能と修正。v0.1.0 (2026-08-12) 以来の
リリースで、client/ の 50 コミット分が入っている。
- 簡易スキャンを追加(全候補を測って位相感度が最強の点を採る)
- ドット復元、細ゲイン調整UI、伝送形式の表示と切り替え
- SUBSCRIBE を NIC ごとのサブネット宛に出す(VPN下で届かない件)
- --bind オプションを追加
- 768x512 が 768x1024 と表示される不具合を修正
- 暗部が潰れる件を修正(映像テクスチャのsRGB性を描画先に合わせる)
- 入力設定の書き込み漏れと Tune 欄の表示ずれを修正
ゲートウェア v0.9.0
gw-v0.9.0: v0.9.0 基板での実機動作
v0.9.0 基板(TVP7002 + Colorlight i5)で実際に映像・音声を取得できる最初の版。
- RGB888 伝送を追加し、伝送形式をCONFIGで実行時に切り替えられるようにした
- ラインバッファを8bit RGB保持にして、形式変換を送出側へ寄せた
- 黒判定の閾値と細ゲインを実行時に振れるようにした(機種ごとの校正用)
- インターレース判定を生同期からも取れるようにした
- Ethernet の PHY index がコネクタ表記 ETH1/ETH2 と逆だったのを訂正
ビルド: seed 7 / oss-cad-suite 2026-09-03 / litex 93c8d230e