|
1.始め |
|
PC-8801mkII…8bit機です。発売当時既に“拘束グラフィックス”などと異名を取った88mkIIでそんなことできるのかーと思う人もいるでしょうが、
要はパソコンの画面を8mm(フィルム)カメラで1コマ1コマ撮影すればいいのです。
但し、画面に向かってそのままシャッターを切っても奇麗に写りませんーというか、暗くて暗くてとても観るに耐えないシロモノになってしまいます。 そこで、天体写真を撮影するのと同じ要領で長時間露光(ーといっても1秒程でOK)をします。 |
|
2.機材 | ||||||||||
ここで使用した機材の一覧を挙げましょう。
| ||||||||||
|
3.長時間露光 |
|
ZC-1000とゆーか8mmカメラは、普通のカメラと違い、レリーズを押しっぱなしにしても長時間露光は出来ません。 どうするか、というと、ZC本体横のここ のネジ蓋を開けると出てくるシンクロカプラーを半回転させます。ZCはこのシンクロカプラーを半回転させるとシャッターが開き、もう半回転させるとシャッターが閉じ、1回転で1駒撮影されます。すなわち、
|
|
4.PC−8801/mkIIによる8mmカメラ制御 | ||||||||||||||
|
上記の手順を人力でやる…なんてことは考えたくも無いので、当然PC-8801自身に制御させます。
モーターでシンクロカプラーを半回転づつ回すのが良いでしょう。 ここで電気工作に詳しい人だと、8255ボードを作るとかプリンター端子からの信号を使うなりして、 ステッピングモーターを回すらしいのですが、私は少々そちらには疎く“ステッピングモーターって何処に売ってるの?”って人間 なので、もう少し手近の店で手に入る材料で作りました。
![]() 動作原理は、
バーコード端子の状態はI/Oポートで読み取り、カセットインターフェースのリモート端子はBASICの"MOTOR 1", "MOTOR 0"で制御出来ます。 | ||||||||||||||
|
5.正確な露光時間測定 |
|
モーターの回転速度/タイミングは上記の通り甚だいい加減なので、露光時間の制御はディスプレイ側のスクリーンの表示/非表示で行います。BASICの"SCREEN 0"で表示、"SCREEN 2"で非表示になります、が、
実際にはこの部分も含めてマシン語ルーチンで行います。 ちょっとここで、もう一度1駒の撮影の流れを整理しますと、
PC-8801には垂直同期割り込みがあるので(-まー無いパソコン見た事無いけど…)、これを利用しましょう。 具体的には垂直同期割り込みが掛かる度に呼び出されるフックアドレスから、自作のルーチンを呼び出し、 そこでカウンタを増加させていけば、走査線が画面をなめた回数を数えられます。 また、スクリーンの表示/非表示の切り替えも、垂直同期割り込みが掛かったタイミングで行います。 |
|
6.具体的な手順 |
|
PC-8801mkIIはZ-80A(3.58MHz)の8bitパソコンでしてその動作速度たるや、現在のパソコンとは比べ物にならない程遅いので、
実際問題画像を生成しながら撮影は出来ません。あらかじめ画像を生成してフロッピーディスクに保存しておき、
撮影時にはこれを読み出します。ハードディスク? 88には繋がりませ…いや、繋がらない事も無いですけど、価格的に
現実的ではありませんでした。 ちなみに8801mkIIのフロッピーディスクは2D(両面倍密度)です。GVRAMはベタで48Kバイトありますから、無論1枚2枚に 収まる筈もありません。圧縮と言っても、縦方向のランレングス圧縮よりも複雑な圧縮プログラムは組めなかったので、 やはりたかが知れています。ですから撮影中は人間がフロッピー交換係として付きっ切りで見なければなりません…でした。 ここで威力を発揮するのが、普段は1bitたりとも使われない1MByteの増設メモリーです。外部記憶装置全部より大きいこの メモリにあらかじめ画像を貯えてから、撮影を開始するのです。フロッピー交換の頻度が数分の1になり、撮影中に寝る事も 出来ました。 パソコン側の準備が出来たら、カメラと"ロビンちゃん"を接続し、がっちり固定します。ディスプレイの画面をフレームに収め、 ピントを合わせます。 私はディスプレイの輝度を最大、カメラの絞りを開放にして1秒露光しましたが、 露出を絞ってその分長時間露光する手もあります。 その方が被写界深度が深くなってピンぼけが防げるのですが、私は撮影時間の短縮の方を選択しました。 この辺の所は、ディスプレイの状態によっても変わりますので、何度かテスト撮影をしてみて会得してください。 撮影中は余計な光が入らない様に部屋を真っ暗にして、プログラムをRUNすれば撮影開始です。 カメラは絶対に動かさない様に。動かしたら最初からやり直しです。 わたしは撮影を夜中に行い、撮影させている間寝ていたんですが、ギアボックスがガーガーうるさくて良く眠れませんでした。 |
|
7.プログラムリスト |
|
以下に、実行の要となるロビンちゃん制御ルーチン(N88 BASIC)と、指定時間だけスクリーンを表示ルーチン(Z80 マシン語)の
リストを挙げ…る予定だったんですが、あいにくPC-8801mkIIとロビンちゃんは実家の押し入れで眠っていますので今回は割愛させて頂きます。あしからず。 とは言うものの、一応覚えてるとこだけは書きます。(ちなみに、これは当時の記憶を頼りに再コーディングたものです。実際に稼動したものではありません。よってバグはあるかも知れません…というか多分あります。) 先ずは、シャッターを開くBASICルーチンです。バーコードリーダーのI/Oポートが不明なので実用性はありませんが。シャッターを閉じるルーチンもほぼ同じ(30行、90行のバーコードリーダーの状態の判定の論理がそれぞれが逆になるだけ)ですので割愛します。 次にスクリーンを一定時間だけ正確に表示するルーチンです。BASICからの引数を受け取るやり方とか、ちょっと忘れてるかも…。これも、I/Oポートの具体的な番号を忘れてるのでいまいち実用性に欠けてますが。ちなみにZ80ニーモニックだからモニタのアセンブラでは使えませんけど、まぁいいよね。8080ニーモニックは本当に忘れてしまいました。 |
|
8.作製した映像 |
Final Projectの冒頭のCACCのロゴ、Final Project 3のエンディング、4月の雪のエンディングに使用しました。4月の雪の場合は、
普通の画像との合成を行なっています。CGといえばワイヤーフレーム![]() テクスチャーマッピングな板がクルクル回る![]() |
|
9.余談 | ||||||||||||||||||||||
|
実は…って見れば分かりますが、Final Project 3のエンディングでは大きなミスを犯してしまいました。 8801mkIIは8色しか表示出来ないのですが、露光時間と組み合わせて中間色を出せる(例えば赤を30/60秒、黄を30/60秒ずつ撮影すればオレンジ色になる)と考えました。そこで、スタッフ等、スクロールする文字の色を黄→赤→青→…等々ランダムな順番で移り変わらせてみました。
輝度Y = 0.3R + 0.59G + 0.11B となりますから、このYが常に一定にならなければならなかったのです。同じ試みをする(そんな人いるのかなぁ…(笑))方は注意して下さい。 | ||||||||||||||||||||||