アドベントカレンダーネタ:ispr.xと黎明期のパソコン文化
序章:フリーソフト作家としての始まり
たまには昔話をしよう。
それはまだ、16bitのPCが世界を変えようとしていた頃の話だ。今でこそプログラムの配布はダウンロードが当たり前だが、あの頃はフロッピーディスクが主役だった。遠隔地だったらパソコン通信だ。そんな手法でやり取りするデータは、今のような高速なインターネット回線で自由にアクセスできる無限とも感じられるクラウドの世界とは比べものにならないほど小さく、誰でも簡単に見渡せる程度の広さしかなかった。でも、当時のマニアたちにとってはそれでも十分だった。記憶媒体の進化とともに扱うことができるデータが増えていくことで、技術の進歩をダイレクトに感じることができた。これは、今ではなかなか感じられない感覚だ。
そんな時代に、私はフリーソフト作家として活動を始めた。言葉では簡単に聞こえるかもしれないが、それは夢を形にする挑戦の日々であった。
私が最初に触れたのは8bit PCだった。フリーソフトという言葉もない時代、私たちはそれを「PDS(Public Domain Software)」と呼んでいた。感覚としては、「公共のソフト」というところか。当時は、趣味でパソコンを使っている人がそもそも少なく、そんな趣味人の間でプログラムが流通していた。今では考えられない狭い世界。しかし、「自由」と「創造」の可能性に胸を膨らませていたあの頃は、こんな困難も同じ趣味の人との交流と捉え楽しんでいた。不便を不便と思わず、そんな環境を楽しんでいた。当時の分厚いパソコン雑誌には、16進数のメモリダンプが掲載され、本で紹介されているプログラムで遊びたいのであれば、それをひたすら手入力するのが普通。そんな、今では考えられない苦痛も、その先にある嬉しさ、新しいものを見るために必要な儀式として喜んで受け入れていた。
そんな時代に、私はフリーソフトを作り始めた。
主題:ispr.xという挑戦
8bit PC でのアニメーションへのチャレンジ
メモリから何から何まで制限されている 8bit PC。いろいろな機種が出ていた。私はその中の一つ、X1turbo を使っていた。
もちろん、当時から画面上にキャラクターを表示するゲームはいっぱいあった。でも、それはパターンの制限された模様を画面上の狭いエリアに表示するというもので、自由な動画像を表示するという世界からは遠くかけ離れていた。
そんな時代ではあったが、私は一つのチャレンジをした。VRAM という画像表示用の RAM にデータをひたすら転送することでどれぐらいのアニメーションが表示できるのだろうか?と。
まず、8bit CPU (Z80,4MHz)で VRAM にデータを転送してみた。当時は画面は CRT(ブラウン管)であり、CRTへの表示自体がドットを走査することで画像を表示するという仕組みであり、描画中に次の画面表示が追い付いてくると転送が追い付いていないことがすぐにわかるというなかなか厳しい環境だった。だから、垂直同期信号をチェックし、画像表示が終了し、次の表示が始まるまでの間、もしくは走査線が画像データの書き換えに追いつく前に画像表示を終了させる必要があった。
CPU を使った転送では全く間に合わなかった。マシン語でゴリゴリ書いても、全然スピードが足りない。まったくダメだった。
しかし、X1turbo には DMAC が搭載されていた。これは、データ転送に特化した CPU の周辺チップで、当時のメモリバスを使い切るぐらいの転送が出来た。
そして、160x100 という小さい画像ではあったものの、メモリ上にあらかじめ準備した 30枚程度の画像を表示位置を変えるのでは無く、DMAC を活用したメモリ転送で、垂直同期信号に追い越されることなくアニメーションを表示することが出来た。
私がまだ高校にいた頃の話だ。
動画再生への強い憧れ
X68000という16bit PCの登場は衝撃的だった。パソコンが事務作業の道具だと思っていた人たちを黙らせる、エンターテインメントの塊のようなマシンだった。私の心も、一瞬で惹きつけられた。
「これで、何かすごいことができるかもしれない。」
私には、どうしても叶えたい夢が一つあった。それは、「動画をパソコンで録画・再生・編集する」というものだ。当時、動画は高価な機材やプロ仕様のシステムがなければ扱えないもので、パソコンで動く映像システムは、文字通り夢のまた夢だった。だけど、私はその夢を諦めたくなかった。
VHS, Beta, レーザーディスク、VHDディスク。色々な規格があった。でも、出来るのは録画と再生。編集は違う。ビデオデッキを複数持っていれば編集は出来たが、私はそれをパソコンでやりたかった。伸びたりするテープではなく、いくら編集しても大丈夫なデータとして編集をやりたかった。
あまりにも遠い目標だった。
試行錯誤の日々
最初に試したのは「DoGA」という強力なツールだった。CGを作ることに特化したそのソフトに希望を感じたが、やがて気づいた。それは、動画編集という私の目標とは方向性が異なっていた。圧縮しやすいCGデータをメモリ上に蓄えてなめらかに再生する。それは、ビデオカメラ等の画像を録画するという私のやりたいこととは全く違うものだった。
次に出会ったのが「SiV」というシステム。メモリ上に動画を記録し、再生する仕組みだった。「これなら!」と思ったのもつかの間、当時のPCの限界が私を阻んだ。標準の1MBメモリ、増設して2MB。当時としてはかなりのサイズであるにもかかわらず、動画の数秒でメモリは埋まり、すぐに息切れしてしまう。
そして、いつの間にか、当時のパソコンマニアの界隈で言われていた言葉を思い出した。
「誰も作らないなら、自分で作るしかない。」
覚悟を決めた瞬間だった。これが ispr.x というとても厳しい挑戦の始まりだった。当時のパソコンマニアの間では「なかったら作る」というのが当然という文化だった。だから、わたしもその文化の中で当然の判断をした、それだけだ。でも、今、この判断をする人はほとんどいない。私は、その頃の気持ちを今の人に知ってほしいと強く思っている。遊ぶというのは、与えられたものをただ使うのではなく、何か新しいものを創造すること、それこそがより楽しい遊びであることを知ってほしい。そんな思いをずっと持ち続けている。自分で作り上げた道を進んでいけば、そのゴール地点には他の誰も見たことの無い全く新しい世界が広がっている。この感動を得たいがために挑戦を繰り返してしまう。創造の先にあるものは、それぐらいに魅力的だ。
ispr.xとは?
ispr.xは、私が憧れてやまなかった「動画を録画・再生・編集する」という夢を形にしたソフトだ。民生用PCとしては初めて、HDDへのリアルタイム録画と再生を可能にしたアプリケーションだった。 当然、ノンリニア編集にも対応している。
その特徴は、もちろんスペック的には劣るものの、当時、誰もが出来ると思っていなかった高度な録画再生編集機能群を備えていることだった。誰もX68000でこんなことが出来るなんて思っていなかった。だからこそ、かなりの衝撃を持って迎えられたと思っている。
特徴を簡単に列挙すると以下のようになる。
- リアルタイム録画・再生:HDD上に直接動画を保存し、同時に再生できる革新的な仕組み。
- ノンリニア編集:フレーム単位での編集や合成。もちろん、音声も合わせて編集が可能。
ただし、それを作る道のりは決して平坦ではなかった。当時のPC性能では、普通に C 言語でプログラムを組んだぐらいでは、これを実現するのは不可能だった。だから、とても厳しい挑戦だった。HDDの書き込み速度、メモリの不足、CPUの性能、メモリバスの上限。数々の壁にぶつかりながら、実装を進めていた。時には CPU の命令表のクロック数を眺めてクロック単位で処理の無駄を削り、あるときは HDD の FAT を破壊してデータを全滅させ、その度に一喜一憂しながら、それでも作り続けていた。これは、厳しい修行にも似た辛さもあったが、ゴールしたときに得られるものを考えれば十分に耐えられる辛さだった。
技術的な工夫と試行錯誤
ispr.xの開発では、多くの工夫と試行錯誤が必要であった。たとえば:
-
画像フォーマットの設計
- 画像データと音声をセットで扱い、連続的な動画として再生できる構造を作った。イメージは音声の記録された映画のフィルムそのもの。
- 圧縮形式として、べた塗り、減色、アダマール変換など複数の選択肢を用意。
- 画像切り替えタイミング管理にはPCMの再生時間を用いた。これにより自由なフレームレート変更を可能にした。
-
録画と再生の処理
- 録画ではHDDのセクタを直接指定して書き込み、書き込み遅延を最小限に抑えた。こうすることで、書き込みスピードを下げる原因である HDD のヘッドのシーク等の外乱を最小限に抑えることができた。ただ、シークを無くすことは出来ない。だから、FIFOバッファも使用し、シーク処理発生時にシステムが止まらないようにした。
- 再生時にもFIFOバッファを活用し、シーク等が原因のHDDの読み込みムラを吸収。同時に、読み込みは書き込みに比べてコストが低いのであえて OS 側に任せ、多種多様なメディアにデータを保存できるようにした。だから、録画先はHDD, 再生用データ保存先はMO といった運用も可能だった。
-
圧縮処理
- 減色:クラスタリング技術で256色パレットを作成し、データ量を大幅に削減。
- アダマール変換:浮動小数点演算が使えない中で、加減算のみで圧縮を実現。
- 差分画像:直前フレームとの変化のみを記録し、容量を節約。
- 部分的な解像度の変更:画像の領域ごとの色の変化を調べ、変化量が少ない場合は解像度を落としてデータを削減。
技術的な壁に直面するたび、試行錯誤を繰り返し、少しずつ壁を乗り越え、先へと進んでいった。失敗を重ねたからこそ、動いたときの嬉しさは簡単に表現できるようなものではなかった。そして、そこでの頑張りは、自分の基礎として今もしっかりと生きている。あの当時の精神は、自分が自分であるために必要な要素そのものなんだと今でも強く感じる。
思い出:黎明期のパソコン文化
振り返ると、あの頃のパソコンマニアたちは、今では考えられないほど不便な環境を楽しんでいた。例えば:
- CONFIGファイルをいじりすぎてPCが起動しなくなる。
- フロッピーの読み取りエラーに泣かされる。
私はこんな経験もした。
- モニターが煙を吐いて壊れる。
そんな時代、私たちはどんな困難も「次はどうやって解決しよう?」とワクワクしながら向き合っていた。
そして、ispr.xはその中で、動画編集という新しい世界への扉を開いた。とあるX68000の同人イベントに行ったときのことだ。そこで展示されたX68000のほとんどにispr.xがインストールされていた光景を見たとき、なんとも表現できない感動を覚えた。心が震えたと言ってもいいかもしれない。多くのPCが動画再生をしている光景を見ながら、こみ上げる達成感。「みんな、これが欲しかったんだな!」と実感した。この時の自分は、多分、陳腐な表現では間に合わないぐらい満たされた幸せな気分だったと思う。
まとめ:未来へのメッセージ
ispr.xは時代の波に消え、MPEGなどの新技術に取って代わられた。それでも、自分の手で形にした夢が、多くの人に届いたことは、私の誇りだ。
現代では、パソコンで動画を扱うのは当たり前になった。もう、技術的なチャレンジはあまりなく、私が動画の世界で新しい挑戦をすることもないだろう。
でも、あの頃のように「不可能」を前にして、あれこれ試行錯誤する楽しさは、きっと今もどこかに残っている。
誰もやらないなら、自分でやる。その精神が、誰も気がついていなかった何かを見つけ、次の「当たり前」を作る。
もちろん、誰も成功なんか保証しない。失敗を恐れるのであれば、絶対にやろうとは思わない。でも、それでもやる。だからこそ、次が見つかる。
この記事が、そんな挑戦を始める誰かの一歩になることを願っています。