ポケコン(G850)用拡張基板(その8)CP/MでBadApple!! [ポケコン]
前回の記事で仮想画面環境を構築することにより、PC-G850V(以降、G850と記す)の狭い LCD 表示でもそれなりに CP/M が使えそうであることを書きました。
今回は、CP/M が動いたことでSDカードにある程度大きなデータを置けるようになったので、その狭い LCD 画面に動画を表示させてみたいと思います。
動画自体から作成するのは大変なので今回の実験では影絵動画で有名な BadApple!! のデータを使用させていただきました。
使ったツールは ffmpeg と自作ツールで G850 で再生する動画データは次の手順で作成しました。
上記の圧縮処理によりサイズが 1/5 程度になり、ディスクアクセスとデータコピー量が低減したことで再生速度も4倍程度速くなりました。
★変更 2022/01/12 全体で再計算し、圧縮率を1/10から1/5に変更
6,572 個の bmp ファイルから変換した G850 用のファイルのサイズは 1.08MB で、一つのディスクドライブに収まるサイズになりました。因みに今回の CP/M では A ~ F の6ドライブ実装し、1ドライブの容量は約 1.55MB です。
気になる動画再生時のフレームレートですが 3分39秒 の動画の再生時間が4分20秒 3分46秒 だったのでフレームレートは 29 fps (=30*219/226) と言うことになります。
★変更 2022/01/11 若干高速化し、再生時間を3分51秒に変更
★変更 2022/01/12 更に微妙に高速化し再生時間を3分46秒に変更
SDカードのセクタサイズは 512 バイトで CP/M のセクタサイズが 128バイト固定なので ブロッキング/デブロッキング処理で SD から読みだしたデータは SD用バッファに読込まれた後に CP/M の DMA エリアにコピーされること、及び今回の拡張ボードでは SD アクセスのための SPI インターフェースを G850 の Z80 がソフトウェア処理していて、シリパラ変換も含めソフトで行っていること等を考慮すると 29 fps というのは非力な Z80 を使用した割には結構速く処理できたのではないかと思います。
CP/M のファイルアクセスがたまにディレクトリ情報を辿る際にカクッとした動きになることがあります。CP/M を介さずに SD カードの特定の未使用エリアに動画ファイルを置いて、直接アクセスすれば改善できるとは思いますが、そこまでやるとメリットよりもディメリットの方が大きいと思います。
Twitterに投稿した動画付きメッセージを貼っておきます。
★追記 2022/01/22
「ポケコン(G850)ポリラインで動画再生」の記事に高速ライン描画処理を使ったポリラインによる動画再生について記載しました。
[TOP] [ 前へ ] 連載記事 [ 次へ ]
今回は、CP/M が動いたことでSDカードにある程度大きなデータを置けるようになったので、その狭い LCD 画面に動画を表示させてみたいと思います。
動画自体から作成するのは大変なので今回の実験では影絵動画で有名な BadApple!! のデータを使用させていただきました。
使ったツールは ffmpeg と自作ツールで G850 で再生する動画データは次の手順で作成しました。
- 動画のリサイズ
ffmpeg で動画データを G850 の LCD サイズと同じ 144x48 のサイズの mp4 ファイルに変換
- 画像ファイルの抽出
再度 ffmpeg で動画ファイルから bmp ファイルを抽出
3分39秒の動画ファイルから 6,572 個の bmp ファイルが生成された(計算すると 30フレーム/秒となる)
- 画像ファイルの連結
動画ファイルから分離した連続する bmp を連結して G850 用のファイルに変換するツールを自作した
変換処理としては 二値化後、G850 の LCD イメージに変換し、0x00 と 0xff のデータについてはランレングス圧縮処理を行っている
上記の圧縮処理によりサイズが 1/5 程度になり、ディスクアクセスとデータコピー量が低減したことで再生速度も4倍程度速くなりました。
★変更 2022/01/12 全体で再計算し、圧縮率を1/10から1/5に変更
6,572 個の bmp ファイルから変換した G850 用のファイルのサイズは 1.08MB で、一つのディスクドライブに収まるサイズになりました。因みに今回の CP/M では A ~ F の6ドライブ実装し、1ドライブの容量は約 1.55MB です。
気になる動画再生時のフレームレートですが 3分39秒 の動画の再生時間が
★変更 2022/01/11 若干高速化し、再生時間を3分51秒に変更
★変更 2022/01/12 更に微妙に高速化し再生時間を3分46秒に変更
SDカードのセクタサイズは 512 バイトで CP/M のセクタサイズが 128バイト固定なので ブロッキング/デブロッキング処理で SD から読みだしたデータは SD用バッファに読込まれた後に CP/M の DMA エリアにコピーされること、及び今回の拡張ボードでは SD アクセスのための SPI インターフェースを G850 の Z80 がソフトウェア処理していて、シリパラ変換も含めソフトで行っていること等を考慮すると 29 fps というのは非力な Z80 を使用した割には結構速く処理できたのではないかと思います。
CP/M のファイルアクセスがたまにディレクトリ情報を辿る際にカクッとした動きになることがあります。CP/M を介さずに SD カードの特定の未使用エリアに動画ファイルを置いて、直接アクセスすれば改善できるとは思いますが、そこまでやるとメリットよりもディメリットの方が大きいと思います。
動画再生時の様子 |
|
Twitterに投稿した動画付きメッセージを貼っておきます。
ポケコン(PC-G850)でCP/Mが動いたことでSDカードにある程度大きなデータを置けるようになったので狭い LCD 画面での動画再生にチャレンジしてみました
— skyriver (@wcinp) January 9, 2022
SDからデータを読み出しながらの再生でフレームレートは25fps程度でしたhttps://t.co/jLqzOOXM6z#G850 #ポケコン #Eborsy #CPM80 pic.twitter.com/HY2EKJngIi
★追記 2022/01/11
最新バージョンで動画を取り直して、フル再生でYouTubeにアップしました。
最新バージョンで動画を取り直して、フル再生でYouTubeにアップしました。
★追記 2022/01/22
「ポケコン(G850)ポリラインで動画再生」の記事に高速ライン描画処理を使ったポリラインによる動画再生について記載しました。
[TOP] [ 前へ ] 連載記事 [ 次へ ]
コメント 0