Skip to content

Instantly share code, notes, and snippets.

@GOROman
Created August 30, 2026 10:51
Show Gist options
  • Select an option

  • Save GOROman/347253a4ffcd84da19ad98dc554af31c to your computer and use it in GitHub Desktop.

Select an option

Save GOROman/347253a4ffcd84da19ad98dc554af31c to your computer and use it in GitHub Desktop.
PS1 BIOS Audio Ripper SX 2026-08-30 開発・実機検証まとめ

PS1 BIOS Audio Ripper SX — 2026-08-30 開発・実機検証まとめ

考案: はむ(@Imaha486)さん
プロジェクト: PS1 BIOS Audio Ripper SX

到達点

所有する初代PlayStationの512 KiB BIOSをアナログ音声出力からブラウザへ送り、全ブロックの受信、CRC32検証、LZSS展開、最終BIOS CRC32検証、ダウンロードまで完了した。

回収ファイルは同一機種の既知ダンプとバイト単位で一致した。BIOS本体はGitHub、Gist、Pagesへ保存していない。

安定した構成

  • PS1側: FPUを使わない固定小数点処理
  • 音声出力: SPU ADPCM + SPU DMA
  • FSK: 300 baud、1,200/2,400 Hz
  • OFDM: 44.1 kHz、512 FFT、64 CP、96 carriers、QPSK
  • FEC: 16 data + 4 parity shards
  • データ: 独立ブロック、LZSSまたはRAW
  • 検証: packet CRC32、stored/restored block CRC32、whole-image CRC32
  • 受信: AudioWorklet + OFDM/FEC Worker

実機回収成功時点の基準コミットは 32d87fd

400 baud試験

FSKブロックヘッダーを300 baudから400 baudへ高速化したが、エミュレーター上の送信処理と実際の受信安定性に問題が見られたため不採用とした。

400 baud試験以降の変更はstashへ退避し、コードとPS1イメージを実機回収成功版 32d87fd へ戻した。現時点では、わずかなFSK時間短縮より300 baudの安定性を優先する。

Mac StudioでのDockerビルド

メモリ8 GiBの開発MacではDocker/Colimaを動かさず、Mac Studio上だけでPSn00bSDKビルドを行う構成にした。

Apple Silicon上で使用したPS1ツールチェインイメージはx86_64専用なので、--platform linux/amd64 を明示する。

docker run --platform linux/amd64 --rm \
  -v "$PWD":/src -w /src \
  luksamuk/psxtoolchain:latest \
  "cmake --build build --clean-first"

生成した次の成果物だけを開発Macへ戻す。

  • build/ps1sx.exe
  • build/ps1sx.bin
  • build/ps1sx.cue

Dockerビルド成功は実機回収成功とは別の検証段階として扱う。

DuckStationで発生した黒画面

新しい実行ファイルへ更新した後、DuckStationが古い自動再開ステートを読み込み、黒画面と ゲーム: 0 FPS で停止したように見える問題が起きた。

対処は次の通り。

  1. 既存DuckStationプロセスを完全終了する
  2. 古い自動再開ステートを使わない
  3. 生成したCUEを直接指定してコールドブートする
pkill -x DuckStation 2>/dev/null || true
/Applications/DuckStation.app/Contents/MacOS/DuckStation \
  ./build/ps1sx.cue

また、LZSS圧縮や音声生成中はPS1側処理がブロッキングするため、DuckStationが一時的に低FPSまたは0 FPSと表示しても、ブロック番号や進捗が更新されていれば処理は継続している。

検証結果

  • 静的チェック・codec/packet/FECテスト: PASS
  • 合成PCM/SPU ADPCMループバック: PASS
  • エミュレーター起動: PASS
  • CD-R起動: PASS
  • 物理PlayStation音声のブラウザ受信: PASS
  • 512 KiB再構築、全CRC32: PASS
  • 既知ダンプとのバイト比較: PASS
  • 400 baud FSK: 不採用
  • 300 baud成功版への復帰: 完了

関連リンク

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment