llamasofthistorypart3

Llamasoft History Part3

ジェフ・ミンターが語るLlamasoftの歩み

機械の世界にようこそ

11

最大の問題は、相変わらず、速度だった。 確かに、スクリーンメモリを直接扱えるようになって効率がはるかによくなったが、それでもマシンのスピードが純粋に足りなかった。 複数文字のオブジェクトを動かすことはPOKEを使っても面倒な作業で、スムーズなアニメーションとなるくらい早くは動かせなかった。 グラフィックキャラクタの文字列にカーソル位置を動かす文字を埋め込んでオブジェクトを動かす…大きいオブジェクトになると、この昔ながらの方法がまだ一番だった。 ただ、それでも速度は遅く、私のゲームは貧弱なPETにとって手の余るものになりつつあった。 バイパーが着陸し、サイロンが出撃するアニメーションもあるようなバトルスターギャラクティカのゲームを作った。アニメーションは動きはしたが、スピードが足りないことが痛いくらい明らかだった。

自分のゲームが複雑に野心的になってくると、サイズも大きくなり、PETの8Kのメモリにとっても重荷になってきた。 そのせいでコンピュータを使える時間も食われるようになってきた。PETはプログラムの保存と読み込みをカセットテープで行うが、速くはなかった。 割り当てられた貴重なコンピュータ時間が、最初にコードをマシンに読み込むこと、そして最後に保存することに、費やされてしまうようになった。 朝の出席点呼や授業に息が切れて遅れて駆けつけることが多くなった。重要な保存作業が終わるまで待たなければいけなかったからだ。

私はメモリの限界に近いところでゲームを作っていた…バトルスターギャラクティカのゲームだったかもしれない、あれは大きかった…そしてある朝、カレッジについた自分は、他のギーク仲間が幸せそうなのを見つけた。 カレッジがPETのメモリを8Kから32Kにアップグレードした、と彼らは教えてくれた。 私は喜び、感銘を受けた。当時、32Kのメモリ拡張は500ポンドもして、自分が見かけたものはPET本体と同じくらいの外部ユニットだった。 仲間達がいうことには、PETは内部メモリの増設がされて、プログラム向けの容量が十分に増えたということだった。 そして、確かに、未使用メモリ容量を調べるBASICをコマンドを打ち込んでみると…

?FRE(0)

…マシンはこう返答した

31740

つまり、本当に32Kのメモリが使用可能ということだ。 熱狂に突き動かされながら、私は大きなゲームが入ったテープを取り出し、読み込ませて、嬉々としてプログラミングをはじめた。元々の8KのシステムRAMでは実現できないと思っていた新しいモジュールをどんどん加えていった。

しばらくすると、奇妙なことが起こってきた。 プログラムを数行打ち込んでいると、画面の底にゴミのような文字が現れるようになった。 さらに打ち込むと、ランダムなゴミがさらに増えていった。 私は困惑して、誰か教師を見つけて、この新しいメモリ拡張がうまく動いていないと報告しにいこうとした。その時だった、仲間達が、これは冗談だと明かしてくれたのは。 誰かがBASICがシステムのメモリ容量の情報を読み込むゼロページメモリのアドレスを発見した。 電源を最初にいれたときに、マシンはメモリを自己診断して、メモリサイズの値をここに書き込む。 BASICでFRE(0)コマンドを打ち込んでメモリの残りを調べるときには、BASICはここのアドレスで最大メモリサイズを調べて、計算して結果を出す。

しかし、この値は最初に電源が入ったときだけ設定されるため、いたずら好きのハッカー…そう、ミスター・「ラプチャード」・ローリンソン、君のことだ…がPOKEコマンドを使って後から値を書き換えることを止めることは不可能だった。そしてPETと、だまされやすい誰か…そう自分のことだ…その両方に、実際より多くのメモリがあると思い込ませることができた。 画面の下のほうに出てきたゴミは幸せな私がコードを大量に足していった結果、かわいそうなPETのメモリがスクリーンRAMに溢れてしまったものだったのだろう。 私は騙されてしまった。

グリッグのパイショップに向かいながら、みんなでそのことを笑った。 自分は、他の誰より、おどおどしていた。 まったく…

しかし、私に新しい方向性をしめしてくれたのも、そのいたずらを仕掛けたラプだった。それは速度の問題をすべて解決し、マシンが実際どのように機能しているのかを理解することにつながるものだった。 彼は私にSYSコマンドについて教えてくれたのだ。

12

自分にとって、SYSコマンドはまったくの謎だった。 このコマンドはSYSという単語の後に数字がつくという構成になっていて、何が起こることかは予測できなかった。 PETでは、マシンが完全にハングアップして、電源を入れなおさないといけないこともしばしばあった。 TRS-80ではドットとアスタリスクのランダムな文字列が吐き出された。 一体なんのためにSYSコマンドがあるのか、私にはわからなかった。

ラプは私に、SYSコマンドの数字はPEEKやPOKEと同じメモリアドレスだと説明してくれた。ただ、そのアドレスから数字を読み書きするのではなく、SYSコマンドではPETはそのアドレスから「機械語」というものの実行を開始するのだと。 機械語はPETのすべての土台になっている。マシンの電源を入れたときから存在するBASIC自体も、PET内部に元々含まれているように見えてはいたが、実際は機械語で書かれたプログラムにすぎなかった。 それぞれのマシンはCPUの種類に合わせた機械語を使っていた。我々のPETは6502チップだったから、6502の機械語だ。

私が機械語へ強い興味を持ったのは、高速らしい、ということのためだ。 本当に高速だと。

機械語についての情報を見つけるのに最初は苦労した。当時このシックスフォームで機械語を学んでいる人は誰もいないのは明らかだった(まだCESILを教えているような学校だったことを思い出してほしい)ので、図書館には何もなかった。 結局、私が機械語の勉強を始められるように、ラプは6800チップのマニュアルのコピーを貸してくれた。PETのチップとは違うので実際にコードを書き始められるわけではなかったが、それでも機械語がどのように機能するのかを理解していくには十分だった。

6800のマニュアルをカレッジの図書館で目を通して、理解するにはしばらく時間がかかった。コードの例を見て、プログラムのステップを一つ一つ指さしながら何がどのように起こっているか確認していった。そしてようやくわかりだした。 機械語は桁外れに複雑(BASICでは一行のPRINT "HELLO, WORLD!"といった一番単純なことも、機械語では数百ものコマンドが必要)であると同時に、エレガントでシンプル(基本コマンドは数種類だけで、その機能も単純で、すぐに理解可能)だった。

PETのスクリーンメモリを直接いじることから浮かんだ洞察…すべては数字を見て動かすところに単純化できるはず…その考えは完全に一般化できることがわかった。 CPUチップは単純な計算機の一種に過ぎず、コンピュータのメモリは数字をただたくさん集めたものだった。65536個の数字…それが6502のような8bitチップが「見る」ことができる全てだった。 この数字は何を表現することもできた。画面の上の文字、計算時の変数…そして、ここに自分はCPU自体への命令コマンドを理解した。「OPコード」と、機械語で呼ばれているものだ。

CPUはメモリのどの位置にある数字も見ることができる。 CPUは数字を「レジスタ」に読み込む。電卓のメモリと同じような感じだ。そして読み込んだ数字で計算を行う。 その上、CPUが行える計算は、学校で自分たちが慣れている四則演算よりも単純なものだけだ。 かわいそうなことに、CPUは掛け算も割り算もできず、256より大きい数は扱えず、扱えるのは整数だけで、小数は使うことができなかった。 それ以外にもCPUができる機能があった。まだどう役に立つのか理解できていない単純な論理計算だ。そうしたことについては自分でCPUを使いながら学ぶことになった。 しかし、基本は本当にシンプルだ。 CPUがすることは、数字を見て、必要に応じて簡単に変更して、時には数字を動かすということだった。

こうした単純な構成ブロックから…そう、全てが出来上がる。 BASIC、バイオリズム、ゲーム、データベース、画面のグラフィック、スペースインベーダー、ワープロ、リーダーズダイジェストデータベースの住所リスト…全てはただの数字であり、基本的には、コンピュータは、この数字を見て、動かし、時には数学が苦手な人でも理解できるようなちょっとした計算で数字を変化させている。

エレガントでシンプル、これがコンピュータが動く仕組みだ。 この土台になる考えが、なぜコンピュータ科学の授業で教えられていないのか理由がわからなかった。 この基礎を理解して、マトリックスを見通せるようだった。マシンの出力や振る舞いがどれほど複雑に見えても、奥深くでは、実際何が起こっているのかは理解できる。

このことは現代でも変わらない。確かにCPUは早く複雑になり、65536個よりはるかに多い数字を「見る」ことができるようになり、掛け算と割り算ができるようになり、小数も扱えるようになったが、基礎的には変わっていない。 君が見る画面に映るウィンドウズも、君のハードディスクにある画像も、君が昨晩ダウンロードしたmp3ファイルも…全てただの数字で、ギガヘルツのCPUはただ、それを見て、時にはちょっとした変更を加えて、動かしているだけだ。 CPUはただそうしたことを、非常に非常に高速に行っているだけだ。

今では「デジタル」という言葉はお決まりのように何にでもつけられていて、大抵の人にとっては、音がクリアだとか、画質がシャープだとか、そんなことを示すただのマーケティィング用語と思われている。 当時は「デジタル」という言葉は広く知られていなかったので、このシンプルで純粋な理解は、自分にとって目を開かせるものだった。 私はとうとうボードの下の配線を、そして「デジタル革命」を起こすことになる原子たちが行き来するのを、見た。

全てがどう機能しているかを知ったのだ。

13

それでも実際に自分達のCommodore PETで機械語を動かすにはまだちょっとした問題があった。 自分が勉強したのはまったく違うチップの機械語だった。どのCPUでも基本原則は同じといっても、クラッシュ以外のことをさせたいとおもったらそのマシンのCPUのコマンドセット一覧を知る必要があった。

カレッジの図書館にはPET特有の本はまったくなかったが、教師の中、Blake's 7に出てくるチェスを遊ぶエイリアンに見た目が似ていてKluteというあだなの教師が、神聖なるRodnay Zakの6502プログラミングマニュアルを持っていることがわかった。6502は我々のPETのCPUチップだ。 Kluteにつきまとい、ようやく渋る彼から週末の間だけ聖なる本を貸してもらえることになった。月曜の朝には絶対に返さないといけない。 家にその本を持ち帰って詳細に読んだ。そして、CPUのコマンドと数字の対応が書いてある重要な表を書き写した。

PET自体は機械語でプログラムしようとするときに親切にできているわけではなかった。 PETには「アセンブラ」はなかった。アセンブラではコマンドを人間がわかりやすい文字列の「ニモニック表記」を使って機械語のプログラムを入力することができた。 例えば、アセンブラではLD A #8と入力すると、この文字列が「Load accumulator」コマンドに即値は8だという指定だと理解して、正しい機械語が生成される。 アセンブラがなければ、opコード表を自分で使って、load accumulatorは数字169であることを見つけ、その後に即値として8を入れなければならない。

BASICが常に存在しているので、機械語のプログラムをどこにでも配置できるというものではなかった。 BASICは礼儀正しく確認することなしに自分がコードやデータを置いたメモリを使用するかもしれないので、どこにプログラムを置くか自体も問題だった。 幸運なことに「カセットバッファ」と呼ばれるメモリの小さな塊があった。テープを使うSAVEやLOADのときに情報を保管するメモリだ。 そうした時以外はこの場所のRAMは使われていなかったので、私が機械語へのおぼつかない一歩を進める上でのよい実験場となった。

自然なことだが、単純なものからはじめようとおもった。スクリーンRAMの存在を確かめるために使ったちょっとしたBASICプログラムのことを思い出した。 この単純なループは機械語で実装するのも簡単という利点もあり、さらにBASICに比べてどの程度機械語が早いのか見るいい機会でもあった。BASICではこの実行に3、4秒かかっていた。

当時、授業での私は特に勤勉に細かくノートを取っているように見えただろう。 しかし誰かが近くで何をノートに書いているかを見たら気づいたはずだ。自分が書いていたのは「A9 00 AA 9D 00 80 E8 D0 FB」といったものと奇妙な小さい図表だった。 英文学の授業なのに。

とうとう、自分のプログラムを試す準備ができた。 プログラムを紙に書き出した。奇妙に見えるプログラムだった。 ぱっと見た感じではランダムな数字の羅列に、この数字を読んでカセットバッファーにPOKEしてつっこむループに、そして最後に一つのSYSコマンドだった。このSYSコマンドがうまくいけばCPUが数字をコマンドとして解釈し、仕事をすることになる。

ある昼食時にコンピュータの前に座り、この奇妙なプログラムを入力して、まず保存した。(マシンをクラッシュしてももう一度入力しなくてすむように。こんな状況ではクラッシュする可能性が非常に高いと思った)

私はそしてRUNで実行した…そして完全に圧倒された。 まさに驚きの瞬間だった。 前述のように、このプログラムはBASICでは実行するのに数秒かかっていた。スクリーンメモリにPOKEされたキャラクタが順番にでてくるのを見ることができた。 しかし、いまRUNで機械語版を実行したら…

…すべてのキャラクタが一瞬で画面に現れた。 即座に。 ただそこに現れた。 BASICではPETの実行がもたもたと数秒だった同じプログラムが、機械語では時間を計れないほどだった。 瞬間的といっていいほどだ。 機械語は少なくともBASICより1000倍は早いに違いない。

これが本当か確かめるために、この小さいプログラムを書き換えて、白背景に黒い文字と、黒背景に白い文字というのを交互に繰り返す無限ループにした。 実行すると、目が見分けがつく速度をこえて再描画が繰り返され、点滅してぼやけたキャラクタが画面にあらわれた。

BASICより1000倍早い? ここにあるのは勉強するに値する力だった…

14

週に何日か、夜に、ランシングバグネルという町外れの大きなフォークリフト車工場でオフィス掃除とトイレ掃除のバイトをすることになった。 バイトの夜には、ティーバックを持って出かけた。ウォークマンは買えないので安物のモノラルテープデッキにソニーのMDR-5ヘッドホンをつけて、崇高なGazzaのPleasure Principleを聞きながら、数時間楽しく空っぽのオフィスで掃除機かけをした。

オフィスを全部回っても少し時間が余るので、最後の20分くらいは、その階のオフィスで一番上等な重役らしい椅子に座り、机に足をのせて、お茶をしていた。 ある時、オフィスのゴミ箱を片付けていたら、その一つに本がまるごと一冊捨ててあるのを見つけた。 当然ながら、これを拾い上げて、見てみた。アナイス・ニンという作家の、いかがわしい小説の本のようだった。 このオフィスで働いてる誰かが、仕事時間中に机の下でこっそりこんな本を読んでいたんだろうなあ、と考えつつ、なぜ捨ててしまったんだろう、と疑問に思った。

ゴミ箱にはもったいない、と判断して、「将来の参考のために」その本を保管することにした。 それから熟読してみた結果、確かにかなりそうした内容ではあるとはいえ、書き手は下手ではないと感じた。 話の中の一節で、ビキューナという動物が短く言及されていた(どのような文脈で登場したかはここでは説明しない)。そんな名前の動物は聞いたことがなかったので興味をそそられ、本で調べてみた。そして、ビキューナは南アメリカのラクダ科の仲間であることがわかった…ビキューナ、アルパカ、グアナコ、そしてラマ…全て一風変わった、印象的な姿をした動物達だ。

オフィスでのゴミ箱でそんな本を見つけるという偶然が、間接的に、それでいて非常に大きな影響を自分の人生に与えるなんて、まったく思いもしなかった…

15

放課後のバイトで少しお金を得ることができたので、家にちょっとしたものでもいいのでビデオゲーム機が欲しいと決心した。 自分たちギーク仲間は町で新しいたまり場を見つけていた。「Videotime」という名前の小型家庭用コンピュータ、ビデオゲーム、デジタル時計(まだ素朴だった当時は、デジタル時計をすごいものだと思う人がいるだけではなく、デジタル時計の専門店もあった)を売るお店だ。

Videotimeに集まっては、テレビに接続して出力するケースなしの一つの大きい基盤である「シングルボード」コンピュータのOhio Superboardといったものを羨望の眼差して見たものだった。 このコンピュータはBASICを搭載し、PETのようなグラフィックキャラクタもあり、値段も安い方だったが、それでも自分のバイト代で買える範囲からは程遠かった。

だから、ビデオゲーム機を買うことに興味を持った。 ビデオゲーム機の中のロールスロイスは、非常に魅力的なAtari VCSだったのは疑いようもない。 店の常連になった自分たちは、何度もVCSの「お試し」をしたものだった。 戦車を走らせ相手を消し去ろうとする「Combat」を遊んだ。ある時は、最新のゲームが出たときに店にいった。「スーパーマン」…鋼鉄の男スーパーマンとなって複数画面にわたるレゴのようなメトロポリスを飛び回り、犯罪者を捕まえ、クリプロナイトの隕石をさける。そして奇妙なことに、ロイス・レインは、空中で取ってしまうと、スーパーマンの首からぶさがって懸垂して(キスしているということになっている)、彼女を下ろすまで何も取ることができなくなる。 だからこんな罵りの言葉がでてくるわけだ: 「降りろ、ロイス!」

しかし、VCSですら、自分の予算では無理だった。 市場でまだ新しく、一番進んだコンソール機で、アーケードの伝説であるAtari製だったので、安くはなかった。(本体を買うお金はなかったが、ゲームカタログをいつも持ち歩いていた。ギークの心の本の一例だ) 結局、それほど機能が高くないゲーム機に落ち着いた。「Teleng/Rowtron Television Computer System」というマシンだ。

大きく、角ばった、灰色と黒の箱のマシンで、アナログジョイスティックがあり、スティックの下には安っぽいボタンパッドがついていた。このキーパッドが購入決定に影響を与えた。カタログの「リリース予定タイトル」に「ホームプログラマモジュール」があり、キーパッドでマシン語のプログラムを入力してマシンを好きなようにできるとあったからだ。 自分が学習中であることを考えると、専用ゲーム機において実際にプログラミングができるというのはとても魅力的だった。 残念なことに、このプログラミングモジュールがリリースされることはなく、自分がゲーム機の内部をいじるようになるにはそれから何年もかかった。

無名のゲーム機ではあったものの、これが自分が所有したはじめてのゲーム機で、家のテレビの横に置かれることになった。 それから数か月、お金が入るにつれ、ゲームカートリッジを少しずつ集めることができた。自分が欲しかったAtariのゲームには及ばないとしても、それでも楽しかった。 まともな出来のCombatのクローンに、ポンとブロック崩しの亜種がたくさん入った棒とボールのカートリッジ、迷路ゲーム、巨大ピクセルで描かれたフリッパーが波型カットポテトのようにみえるピンボールゲームなどだ。

ほどなくして、ジョイスティックの取っ手が壊れてしまい、残っていた小さい金属突起部分を操作しないと遊べなくなった。 それでも、このゲーム機で楽しみつづけ、数年楽しむことができた。

しかしまだ私はAtariをあきらめたわけではなかった…