概要
- DOSBox-X での Sound Blaster 問題や SDL_LoadWAV 高速化の詳細
- バッファリング や fflush() によるパフォーマンス向上策
- SDL3 でのオーディオロック管理や割り込み処理の工夫
- DOS向けSDL の新機能・バグ修正内容のまとめ
- VESA や Sound Blaster 対応の強化、その他周辺機能の改善
DOSBox-XとSDLのオーディオ・レンダリング最適化
- DOSBox-X では Sound Blaster 関連の問題が発生、標準の DosBox は割り込みハンドラから直接正常動作
- バッファサイズ を2倍にせずとも、高速かつ正確な動作を実現
- バッファリング無効化 よりも、 fflush() を利用した方が高速で安全
- SDL_LoadWAV での test/sample.wav 読み込みが数秒から瞬時に短縮、正しいデータ取得
- fseek後の不正なread 問題も回避
- LoadWAV での malloc や転送バッファの変更が原因の可能性、 djgpp のlibcバグの疑いも
- SDL 1.2 for MacOS Classic のトリックを活用、ハードウェア割り込み時のオーディオロック対策
- 割り込み時にロックされていればカウントのみ、ロック解除時に即デバイス処理
- SDL3 では大きなデバイスロックがなく、 SDL_AudioStream 単位のロックカウントで十分
- VESAインターフェース 利用でディスプレイ管理、ソフトウェアレンダラ対応
- イベント未接続のため、毎回 DosBox を手動で終了する必要あり
- SDL_GetBasePath() 利用のレンダリング例も動作、 Quake 1 の手法がよりスマートとの言及
SDL for DOSのビルド・プラットフォーム対応
- SDL_runapp.c で SDL_PLATFORM_DOS を除外リストに追加、DOS専用SDL_RunApp利用
- SDL.c で SDL_Gtk_Quit() をDOSで除外、 GTK 非対応によるリンクエラー回避
- sdlplatform.cmake でDOSプラットフォーム検出を追加、 CMAKE_SYSTEM_NAME=DOS 対応
- i586-pc-msdosdjgpp.cmake に i386-pc-msdosdjgpp-gcc をフォールバックコンパイラとして追加
VESA・ビデオ・キーボード・割り込み処理の改善
- VBEモード でのダブルバッファページフリップ実装、>1イメージページ対応
- VBE状態 の初期化・終了時保存復元でモード切り替えの安定化
- DOSキーボード の拡張スキャンコード・Pauseキー対応強化
- ISR (割り込みサービスルーチン)コード・データのロックで割り込み中のページフォルト防止
- シングルバッファ時は vsync 常時有効化でティアリング低減
オーディオ処理・DMA・Sound Blaster対応の強化
- オーディオミキシングを IRQハンドラ から メインループ に移動、安定性・再入性向上
- SDL_DOS_PumpAudio 関数追加、DMAバッファ処理・サンプルレート22050Hzに調整
- DMAバッファの残留音を消音し、ロード中のスタッター防止
- Sound Blaster バージョン検出、8bitモノラル・16bitステレオ自動切替
- SB16/非SB16 両対応のDMA・DSP設定
- FORCE_SB_8BIT オプション追加でDOSBoxテスト用
- スピーカーON後 は固定ディレイでなく DSPステータス をポーリング
- DPMIメモリ は常時ロック、DMAメモリ割り当て方針のコメント明確化
- 割り込みベクタ復元後は IRETラッパ解放 でリーク防止
ジョイスティック・VBEバンクモード・周辺機能の改善
- ジョイスティック軸のポーリングを約60Hzに制限、BIOSタイミングループ負荷軽減
- ジョイスティックボタンは常時直接ポーリングで応答性向上
- VBE 1.2+ の バンク方式フレームバッファ 対応、バンク切替でデータコピー
- モード設定時にフレームバッファをブランク化、バンクモード時はページフリップ無効化