高校生のとき

高校入学と同時に買ってもらったPC8801mk2モデル30は、その後大学入学するまでの5年間(2年浪人している)使い込むことになる。買ったのは秋葉原の九十九電機で、14インチのディスプレイ(といってもディジタルRGB入力付きの普通のテレビ)、そしてゲーム数本と込みで購入した。実はこのテレビは2001年7月現在、我が家の食卓で現役で使われている。

当時のパソコンセットでは、ゲームソフトと込みで売っていることが多かった。私の買ったPC8801mk2にはミサイルコマンドっぽいゲームと、横スクロール型のゲーム(内容はよく覚えていません…)、それにもう一本くらいあったような気がする。最初のころはこれらのゲームでかなり遊んだ。そしてプログラミングも楽しんだ。

PC88以前はカセットテープでプログラムのロード・セーブを行っていたのだが、PC88になって初めてフロッピーディスクに触れる。そのあまりの高速さに感動したものである。

思い出に残っている自作プログラムとして次の四つが挙げられる。

  • 複数の星がお互いに万有引力を受けながらどのように運動するかのシミュレータ
  • 磁性流体という、磁石にひきつけられる液体中で浮きがどのような動きをするかのシミュレータ
  • ユーザが入力した数式に対してグラフを描くプログラム
  • 音楽演奏プログラム

最初の星運動シミュレータは、星を一つの点とみなして、複数の星がお互いに万有引力を受けながら、ディスプレイ上でどのように運動するかをシミュレートするものである。星同士の衝突は考慮していない(素通りする)。複数といっても、計算速度の関係から3星から4星程度が限界であった。最初は点の動きを見て楽しんでいたが、もうちょっと凝ったものにしようと星に大きさを持たせ、星が一定の距離に近づくと衝突する。衝突すると星が破壊される、とはならずに、ビリヤードの玉のように反射するという非現実的な現象が起こる。ここまでくると3星でもシミュレーション時間がかかりすぎ、2星でいっぱいいっぱいであった。しかし個人的には非常に満足した。

次の磁性流体シミュレータは、高校の文化祭で、当時私が所属していた化学部のデモの一つとして作成したものである。磁性流体とは磁石に引き寄せられる黒い不透明の液体である。実験の詳細は当時の文化祭資料を発掘し次第紹介する。文化祭のために私のPC88とディスプレイを部室(理科室)に持ち込んでデモ機として使っていたのだが、同じグループの友人が私がいない間に磁性流体をキーボードの上にぶちまけてしまった。すぐに掃除したため幸いにもキーボードに致命的なダメージを与えることはなく、その後も問題なく使えている。

このころ、数学で習った新しい関数(三角関数や対数関数など)のグラフを描いてみたいという欲求があり、PC88の上でBASICでプログラムを書いて表示させていた。当初はプログラム中に関数を埋め込んでいたのだが、そのうちプログラム実行時に入力した関数を描かせてみたいと思うようになった。プログラムを組んだことのある人なら分かると思うが、これはけっこう難しい。プログラム言語の理論を知っている今なら字句解析・構文解析のための技術を駆使して処理するのだが、当時はまだそんな理論があることをまったく知らなかったため、力技で解決することにした。つまり、INPUT文で入力された数式(文字列)をBASICの文とみなして自分自身のプログラムに上書きするという技である。例を挙げて説明する。グラフを描くプログラムの特定の行番号を予約しておき、最初はそこに適当なBASICの文を書いておく。

1000 Y = X

次にこのプログラムの実行時にユーザが入力した文字列をBASICの文とみなして、メモリ上に存在する自分自身のプログラムの行番号1000に相当する部分に上書きしてしまう。つまりプログラム終了後リストを取ると、

1000 Y = SIN(X)

のようにプログラムが書き換えられていることになる。このようなことをするために注意しなければならないことは、

  1. BASICのプログラムがメモリ上でどのように表現されているか
  2. BASICの数学関数の中間語表現がどのようになっているか

といったことが挙げられる。1.はユーザが入力する数式文字列の長さは一定ではないということである。つまり自分自身のプログラムに上書きする際に、一つの文が伸びたり縮んだりするため、行番号1000以降のプログラムを前に詰めたり後ろに移動したりといった処理が必要になる。またインタプリタ実行されるBASICの文は入力された文字列そのものがメモリ上に置かれているということはなく、より短いバイト数の中間語に変換されて格納されているため、BASICの関数がどのような中間語に対応しているかを知っていなければならない、というのが2.である。

以上のように、このプログラムにより始めてパソコン内部のハッキングを行い、また自身のプログラミングテクニックを磨いくことになった記念碑となった。

最後の音楽演奏プログラムも思い出に残るものである。プログラム技術としては何もおもしろいところはない。しかし、小学生の時代からコンピュータによる音楽演奏に興味を持っていて、PC88でもそれを試したというものである。PC88には内蔵のBEEP音源もあるのだが、PSG(Programmable Sound Generator)チップを搭載した拡張カードがオプションで用意されていて、小遣いをためて購入した。それは3和音を出せるチップを2個載っているという、それまで私が経験したどのマシンよりも和音数が多い画期的な演奏機械であった。喜び勇んで、貯めてあった音楽の教科書や歌謡曲の楽譜を打ち込んでは満足し、勢いあまって作曲までしてしまった。この若気の至り曲は、私の弟の音楽の宿題として小学校デビューすることになったのだった。曲の評価がどうだったかは覚えていない。

その後もMIDI対応の音源カードとMIDIキーボードを買ってきて、PSG音源よりも多様な音色を楽しんだり、独学でピアノの練習をしたりと、音楽演奏に関してはこだわってきた。

高校3年で大学受験に失敗した後、次第にプログラミングの世界から離れてしまう。浪人を2年経験して大学に入学した後、BASICとは違う新しいプログラミング言語の世界、計算機科学の世界を知るようになり、再びプログラミングの楽しさを思い出すことになる。

タイトルとURLをコピーしました