富士通のパソコン「FM TOWNS」用のデモ「Bad Apple!!」

富士通が1989年に発売したパソコンFM TOWNS用にDOOMを移植した後、TOWNSエミュレータ津軽」の開発者である山川氏からデモシーンへの参加を誘われたものの、アイディアも思い浮かばずもし浮かんで実装するにしても時間がかかりそうで一旦断ってしまったが、そういえば移植ゲームの代名詞になっているDOOM以外にもレトロPC/レトロゲーム機での再生デモの代名詞「Bad Apple!!」もFM TOWNSでは作られていないことに気づき、実装自体そこまで凝らずにできそうだったので作ってみた。

Googleドライブ - Bad Apple!! for FM TOWNS

※9月16日更新:全フレーム横2ドット圧縮はやめてサイズが4KB以下であれば320ドット表示するように変更。

FM TOWNS全機種(HDDが接続できないマーティーは除く)、メモリ2MB以上、HDD必須、TownsOS V2.1 L31以上用

FM TOWNSのHDD上の任意のフォルダにBADAPPLE.EXP、BADAPPLE.DAT、BADAPPLE.PCMの三つのファイルをコピーして、BADAPPLE.EXPを実行すれば再生されるはず。

FM TOWNS実機ではFM TOWNS II MXで動作確認(山川機長さんの報告)、エミュレータ「うんづ」で互換モード設定(初代機相当の動作速度)・高速モード設定にして問題なく再生されることを確認、エミュレータ津軽」だと最新ソース版で再生可能。

 

再生例(エミュレータ「うんづ」を使用)

www.youtube.com

 

ちなみに、こちらがオリジナルのBad Apple!!の影絵動画

 

最初「津軽」上の開発環境で制作して直接テストしていたのだが、何をどうやっても映像と音声がズレてしまい音質も元の音声データに比べて劣化、一定周期毎に垂直同期を飛ばすといった環境依存のプログラムにでもしない限りちゃんと動いてくれないという状態で1カ月くらい悩んでしまったが、結局「津軽」側がTOWNS実機と再現性が違う箇所があるという結論。デモプログラムが完成後、津軽作者の山川氏に連絡して修正してもらいました。

プログラム的にはFM TOWNSDOOMのノウハウをそのまま使ったようなもの。

High C コンパイラを使用してC言語のみでのプログラミング、拡大表示機能を使って640*480 16色の画面モードを320*120相当に変換、割り込み支援ライブラリ「HIS」で垂直同期毎に指定の関数を読み出すようにして偶数フレーム毎にEGB_putBlockでバッファ上にある画像データをVRAMに書き込み、ランレングス圧縮されたデータをバッファ上に解凍していくが1ドット分しか変化しない箇所は2ドット処理して圧縮効率を上げているので実質横160ドット。その後、見直して先に4階調化でデータを圧縮できないか確認して最終手段として横160ドット化するように修正。

 

データ仕様

映像:320・160*120ドット 16階調(一部4階調) 30fps 1フレーム当たり4KBのデータとして収録

音声:11KHz 8ビット ステレオPCM

 

初代機でもストリーミングで音声を再生かつ映像も30fpsを維持し続けるために解像度や音声レートが低く、白TOWNSでの再生や音声をCD-DA化すれば320*240 256階調とか高音質化とかもできるだろうけど、今回は試していない。

一秒間のデータ容量的に映像( 4KB * 30fps) + 音声(22KB)で142KBとなり、等倍速(150KB/s)のCDドライブでも理論上は直接読み込みでもデータ転送が間に合うはずなので、映像・音声データの1ファイル化と配列も工夫して読み込む方法を変えれば可能かもしれない。