メガドライブの拡張ユニットである「メガCD」向けに1993年に発売されたポリゴンシューティング「シルフィード」のムービーを再生するソフトをFM TOWNS / X68000向けに開発しました。その名も「見るフィード」。
FM TOWNS版はFM TOWNS II HR(486 20MHz)以上推奨、X68000版は音声なしの場合X68030以上推奨・PCM8Aを組み込むと音声出力もなされますがその場合は68060(PhantomX)アクセラレータ搭載機推奨、どちらの機種でもハードディスク上にコピーした動画ファイルを再生してください。
80386・68000機でも再生可能ではあるけど、フレームレートは低いです。
Github 「見るフィード」 - ソースコードと実行ファイル
GithubのReleaseページから各機種向けの実行ファイルをダウンロードしてきて解凍、
FM TOWNSなら「run386 milpheed (動画ファイル名)」
X68000なら「milpheed (動画ファイル名)」
とコマンドラインから実行すれば再生が開始されます。
動画ファイルはシルフィードのCD内にあるA00~A24がそれになります。
例としてA21がゲームアーツロゴ~オープニング、A12がゲームスタートの発射シーン、A23がステージ1クリア後のデモ、A13がエンディング
デフォルト以外の動画ファイルを再生する場合は、コマンドラインオプションに -c #(#には0~2のビデオフォーマット番号)を入れてください。
コマンドラインオプション -v #(TOWNS版は0~127、X68000版は0~72)により音量設定も可能。0の場合はPCM音再生自体を停止するので速度が足らない場合は指定してみてください。
FM TOWNS版「見るフィード」のプレイデモ(エミュ「津軽」上で実行)



ムービープレーヤーといっても、インゲーム中の背景表示も実はムービーなのでそのまま再生可能です。A00~A11までのファイルが各ステージの動画となります。
以下現時点の問題点とか
両機種共通
- 本来ならインゲーム背景ムービーもPCM音が収録されているものの、うまい再生方法が思いつかなかったので現時点では無音のままです。
- メガCDは標準速ドライブだが、ファイル読み込み方法を最適化していない、OS標準のファイル読み込みを使用しているのもあって、CD-ROMからの読み込みだと2倍速(白TOWNSの内蔵ドライブの速度)ドライブでも読み込みが間に合わずフレートレートが低下します。
FM TOWNS版特有の問題
- MS-DOS 6.2を組み込んだTownsOSの場合かもしれませんが、動画の再生が終了しコマンドラインに戻ってきても何も表示されません。表示自体が無効なだけなので「d:」「tmenu」などと入力してTMENUに戻れば正常に表示されます。BATファイルなどを作成して、TMENUから直接実行することを推奨(サンプルのBATファイル群を実行ファイルと一緒に同梱)
X68000版特有の問題
- メガCDのPCM音源とは違い、X68000はADPCM音源なのでPCM8Aを使用して音声出力。動作速度の低下、ADPCMの問題として音量が低い時にノイズが目立つ、モノラル出力など音質はオリジナルより低下しています。
- 再生レートの差異(メガCD版のPCMはおそらく約15.4KHz、たいしてX68000のADPCMは15.6KHzと微妙に違う)により、再生してから20~30秒ほどするとPCMリングバッファの書き込みポイントが再生ポイントに追いつき始め、音声が乱れ始めます。リサンプリングなどを行えばいいでしょうが、現時点で実装未定。
X68000はメガドライブと同じCPUである68000、更にBG面もあるので似たようなハードウェア構成だから有利に思えそうだけど、実際にはFM TOWNSの方が圧倒的に有利なプログラムになっています。
メガCD版では読みこんだグラフィックデータをBGパターンに展開するものの非圧縮動画だと約600枚近くまで展開するフレームが存在するが、X68000は256枚までしか定義できないので結局グラフィック面にVRAM直書きで描画する必要がある。
だが、X68000のVRAM構成はどの色数モードにしても1ワード(16bit)あたり1ドットとなるようになっている。対してFM TOWNSは16色モード時は1バイト(8bit)につき2ドット(上下4bitずつに色が入る)になっており、8*8ドット相当のBGパターンをCPUで描くとなると単純にFM TOWNSなら32bit転送8回すれば完了するが、X68000は16bit転送64回も行わなくてはいけない。
更にFM TOWNSとメガCDは同じPCM音源チップを搭載しており、動作周波数こそ違う(FM TOWNS: 8MHz / 384 = 20.833KHz - メガCD: 12.5MHz / 384 = 32.554KHz)もののシルフィードで再生されるPCMデータはデータ量の問題でFM TOWNSの最大再生レートとなる20.833KHzを超えない約15.4KHz再生、FM TOWNSのPCM音源自体は98Hz単位で再生レートを調整可能なので大体同じ15.4KHz相当での再生が可能。対してX68000は問題点でも書いたように全く異なるADPCMなのでPCM8Aを利用してPCM音の変換を行ったが更なる速度低下、ADPCM自体の問題で音質低下、再生レートも4段階程度しか調整不可なため再生レートの不一致を引き起こしている。
もう一つオマケに、メガCD版シルフィードの動画フォーマットの解説。
Doom・Quakeエンジンや各種技術解説を行っているFabien Sanglard氏のサイトで技術解説が載っていたので、それを見て単純だしFM TOWNSで再生できるんじゃと思い立って作った。
FABIEN SANGLARD'S WEBSITE - The art and engineering of Sega CD Silpheed
使用しているスクリーンショットはFabien Sanglard氏のサイトから引用しています。
サイトの解説と、見るフィードの実装が異なっており、実装のほうで上手く再生できているので実装を基準に解説します。
まず、メガCDのCDドライブは標準速 = 150KB/秒の転送速度しかないという基本的な情報を覚えておこう。
動画は解像度256*192ドット 16色 15fpsを基準としているが、これでも((256 * 192) / 2 ) * 15 = 約368KB、更に映像だけでなくストリーミングで8bit・15KHz・ステレオ = 約31KBの音声データも含まれており、何も考えないと合計400KBと標準速ドライブの転送速度を大きく超す容量となってしまう。
音声の圧縮は考えないとして、動画データをどうにかして150 - 31 = 約119KBに圧縮する術を出さないといけない。だが、メガドライブのCPUは68000 7.67MHz、メガCDに搭載されているサブCPUも68000 12.5MHzとかなり非力で凝った圧縮アルゴリズムは使えない。動画をやめてリアルタイム3Dという手ももちろん使えない。
圧縮アルゴリズムは以下の二通り
シルフィードのスタートムービーの44フレーム目を例にとってBGパターンの区切りとなる8*8ドット単位のグリッドを追加して見てみると、

実際には単色でしか描いていないマス目が多く見受けられるのがわかる。

解像度256*192ドットのBG8*8単位、32*24の768枚のうち328枚が該当する。単純に単色であるなら8*8 16色 = 32バイトで展開させず、初期化時に単色のBGパターンを定義しておいて、後述の2色圧縮や無圧縮のフラグも考えて1バイトだけで色データを読み込み、単色だと判定したらその単色パターンをBGテーブルに並べるだけの処理にしてしまえばいい。32バイトが1バイト、更にこれが1フレームでも何百枚単位とあったりするので一気に100~150KB以上は圧縮できることになる。
次に単色のBGパターンを除いて再度グリッド付のフレームを見てみると、

気付きにくいが、16色で描かなくとも8*8ドット当たり2色しかない部分もある。

もちろんこれも大きな圧縮が行える要因であり、4bit * 2色 = 1バイト・モノクロ 8*8ドット = 8バイトなら合計9バイトとなり8*8 16色 = 32バイトから約28%も削減できることになる。これも1フレーム当たり数百枚単位であったりするので50~100KBは圧縮可能。
CPUでこれをAND命令と分岐でデコードすることも可能とはいえその展開処理に当時のCPUでは時間がかかってしまう。
ここで登場するのがメガCD特有の機能。
メガCDには拡大縮小回転機能を実現するグラフィック補助回路(メモリ上のグラフィックをハードウェアで加工するものの、その後メモリ→VRAMに書き込むのはプログラムで自力にやらないといけない)があるのは有名だが、それとは別にモノクロフォントデータをBGに書き出すための補助機能も用意されていたりする。
0bit時の色番と1bit時の色番をレジスタ1バイトに書き込んで、16bitのモノクロデータをレジスタに書き込むだけで、16色 16ドット相当のグラフィックデータにハードウェアで展開してくれる。もちろん、CPUで処理していたら16回ずつANDと分岐に加えて色書込みしなくてはいけないのが、レジスタ3バイト書き込み分だけで済むので圧倒的に処理も早い。
本来ならフォントデータの展開用に用意されていた機能だが、シルフィードではこれを動画圧縮デコーダとして活用していたのだ。
宇宙が舞台ということで背景は黒一色となるところが多い、あっても星を表現するドットだがこれも単色で済んでしまう、またフラットシェーディングのポリゴンということでオブジェクトも単色・2色になるところが多い、そのため1フレームで圧縮できるところは画面の4分の3近くにまで該当し360KB→約100KBまで圧縮できたのだ。まさにデザインの勝利といったところである。
実際にはムービーパートでは更に圧縮効率上げるためか4*4ドット単位で見ていたりする。ただし、インゲームの動画は上記の通り8*8ドットのBG単位での処理となる。
また、インゲーム1面・9面の冒頭シーンに関してはグラフィックが細かく2色圧縮が難しいために代わりにフレームレートを7.5fpsと半減させて再生されている。











