DiscoveryボードでのDoomPlayerでは、SDカードカード上にWADファイルやFLACフォーマットの音楽ファイルを置いておくことにしました。起動時には、まずこれらのファイルがSDカード上に用意されていることを確認します。
SDカード内容の確認ができたならば、次に正規のWADファイルがSPIフラッシュ上に書き込まれているかどうかを、CRCを計算することで確認します。フラッシュの読み出しと CRC計算には数秒かかります。
SPIフラッシュにWADファイルが書き込まれていれば、上図のように緑色ボタンでそのゲームタイトルが表示されます。下側のオレンジ色のボタンリストには、SDカード上に見つかったWADファイルのタイトルが表示されます。緑色ボタンの周囲には青い外枠線が描かれていますが、この外枠は入力フォーカスがあることを示します。DualSenseを使っての操作を可能にするために、Group を使っているのでこのように外枠が描画されます。
オレンジのゲームタイトルをタッチすることで、SPIフラッシュの書き換えを開始することができます。
選択したタイトルへの書き換えを開始することを確認して、Yesを押せば、、
まずは、必要な領域の消去を行なってから、設定ファイルやWADファイルのコピーが行われます。
消去やWADのコピーには時間がかかるので、進行状況表示を入れてあります。
コピーが完了するとリブートのプロンプトが表示されるので、ボタンを押すと再度SDカードの内容確認とSPIフラッシュの内容確認が実行され....
緑ボタンの示すゲームタイトルが変更されていることがわかります。もし、書き込みに失敗したり、まだSPIフラッシュへの書き込みが行われいなければ、
ゲームボタンの部分が無効を意味する灰色表示になり押せなくなります。
上記の画面表示は、すべてLCDのフレームバッファの内容をキャプチャしたものです。最初は、画面表示をカメラで撮影するつもりだったのですが、撮影場所の都合で照明の映り込みが発生する上に、STM32H7B3I-DKのLCDがTNパネルのため、ちょっと斜めから見ると発色が悪くなり、綺麗に画面撮影できないのが不満でした。そこで、フレームバッファの内容(RGB565)をSTM32H7のJPEGエンコーダを用いて、JPEGに変換してSDカードに保存する機能を実装しました。ボード上左側のUSERボタンを押すことで画面をキャプチャするようにしています。
JPEG圧縮する際には、解像度が落ちないように4:4:4でサブサンプリングしていますが、単純な画面構成なので、いずれの画像も20KB以下の大きさに収まっています。
2023/1/23 修正削除:フラッシュのCRC計算に時間がかかっていたのは、フラッシュへのアクセスがOctoモードではなくSPIモードで行われていたことが判明。これを修正して、1秒もかからずにチェックが終了するようになりました。