2009年03月17日

ゲームプログラマーへの道 その18 デバッグ

ゲームプログラマー回顧録です。

デバッグについて。

PC88の世界ではメモリ空間は64KBです。たったの64KB。今思うと超小さなメモリですね。でも、当時はこれで画面スクロールまでやってたんです。

このサイズになるとデバッガーなんてものは乗りません。ほとんどメモリめいっぱい使いますから。

なので、すべて頭の中でCPUの動きをシミュレートします。

メモリの内容、レジスタの内容などすべて追っていくわけです。

今回FM音源を使っていますので、当然音楽は割り込み処理です。

ですので、それも追うわけです。

これだけでも大変なんですが、もっと大変なことをしています。

とにかくスピードを上げるために有りとあらゆることをするんです。

マシンサイクルや16進演算を暗算してたくらいですから。。。

たとえば普通データをメモリ上に待避させることを考えます。
でも、後で計算で使うとなると、

・一度メモリ上へ待避
・元に戻す

という2回の処理が必要になります。

で、この無駄を省くために、なんと編み出したのが、

・メモリに待避させるのではなく、プログラム中に書き込んでしまう。

ということです。

要はプログラムの中に直接待避させる数値を書き込んでレジスタに読み込む命令としてしまうわけです。

プログラムがプログラムを書き換える。
こんなことを平気でやっていました。

さらに、レジスタには表レジスタと裏レジスタがあります。

コンピュータをやったことことのある方ならご存じと思いますが、メモリ転送より、レジスタ間転送の方が遙かに速いんです。

なので、裏レジスタを使いまくります。

それに割り込み処理が入ると、今どういうデータになっているか正直混乱します(笑)

まだまだあります。

メモリが足りませんので、V-RAMの空き領域を使ったりもします。

また、PC88の場合、ハード的にメモリをブロック転送できる機能などありましたので、これも駆使。

つまり、スピードの遅さとメモリ領域の少なさをありとあらゆる方法でカバーしていたのがこの時代です。

で、話が戻りますが、頭の中でこれをやるわけです。

正直バグがとれずに数時間かかることもありました。

で、わからなくって寝るんです。しかも机の下に。

zzzz

突然、目が覚めます。

「あ、あそこのプログラミングが間違ってる!」

ごそごそと起き出して、チェックします。

確かに間違ってる。

つまり、眠りながらデバッグしてたということです。


V-RAMまで使っていますので、メモリリークを目の当たりにしたこともあります。メモリスタックが積まれるのを画面上に表示してしまうわけです。これは結構笑えます。

暴走というのを嫌と言うほど体験します。

で、最終的に極めてしまいました。

周りに言うと笑われるのですが、
「コンピュータの気持ちが分かるくらいまでいってしまったんです。」

正直、ハードウェアはほとんど分かっています。自分でI/Oを設計してしまいます。ありあわせの部品で作ってしまいますね。

ソフトウェアもシステムブートの世界から分かっています。

キーボードをたたくとなぜ文字がビデオ上に表示されるのか?
これをきちんと説明出来ます。

プログラムがどう動いているのか、おおよそ手に取るように分かります。

今でも仕事上、システムのテストをするのですが、SEがどうプログラムしたか分かってしまうんです。

で、ピンポイントにテストします。

「コイツは、どうもこの辺の処理が甘そうだから、ここにバグがあるに違いない。」と分かってしまうわけです。

究極のテスターかもしれません(笑)

一度、SEに「こうこうこういうプログラムしたでしょう?こうするとこんな問題が起きるから、こう書き換えた方が良い。」と伝えたことがあります。

そのときの返事、
「え、えぇ、確かにその通りです・・・・。」

マシン語より下の言語はないんですね。これが分かっているとほとんどのことは分かります。

C言語は簡単でしたね。ポインタの概念などはマシン語で嫌というほどやってましたし。

JAVAは直接はプログラムしていませんが、コードを読めば大体わかります。



posted by minoru at 21:52 | Comment(0) | TrackBack(0) | ゲームプログラマー | このブログの読者になる | 更新情報をチェックする

この記事へのコメント

この記事へのトラックバック
×

この広告は90日以上新しい記事の投稿がない ブログに表示されております。