古籏一浩氏の昔話【前篇】 ~ MZ-700版タイニーゼビウスの開発話
昔話:ゼビウスの森が表示できたら次は自機(ソルバルウ)を動かしたいと思った。が、この段階でもまだ純粋なマシン語。アセンブラという便利なものがないのでとにかく機械語のコードを覚える状態。かなり理解できずに手間どったのがHLレジスタとAレジスタ。
2010-03-06 00:46:46昔話:一体何が理解できなかったのかというとHLレジスタは8bit+8bitで16bit。Aレジスタは8bit。ここで何を思ったかHL→AとしてHLレジスタの値をAレジスタに入れようと。何をしたかったのか忘れたけどとにかく入れたかった。何週間か悩んだ挙げ句「できない」事を理解した。
2010-03-06 00:50:27昔話:どうして、こんなHL→Aということをやろうかと思ったのか。それは、もう機械語信仰というか本に「機械語を使えば何でもできる」といったような言葉が結構あったから。でも、何でもできる機械語にもやはりできない事はたくさんあった。機械語は万能ではなかった。
2010-03-06 00:52:56昔話:ゼビウスのタイトルと森はできた。自機を移動させるのだけどmz-700のROMモニタに用意されているキー入力を行うルーチンは1文字しかキーを受け付けてくれない。自機が斜め移動する際には、どうしてもカーソルキーを同時に押さないといけない。
2010-03-07 01:57:00昔話:キーの同時入力はとにかく何ヶ月もわからず自機はロクに移動しなかった。電波新聞社の月刊マイコンなども読んだけど結局分からず。Oh!mzに至っては余計に分からない。実はキーボードからの入力はmz-700に限らずX1でもFM-7でも難しい入力デバイスの1つだった。
2010-03-07 02:03:03昔話:3E F7 32 00 E0 00 3A 01 E0、これでキー入力を読み出せる。あとは、ビット処理を行ってそのキーが押されたかどうかを調べるだけだった。一方向にしか動かなかったソルバルウ(自機)が、ようやく斜めに移動できた。感動してずっと動かして遊んでいた。
2010-03-07 02:12:40昔話:自機が移動するようになったので次にやってみたくなるのが弾(ザッパー)の発射。ザッパーは三連射。でも、三連射のやり方がわからず。とりあえず、弾1つから始めた。キーを押した時に弾が発射されていなければ出す、という処理なので簡単に実現できた。
2010-03-08 01:28:46昔話:ブラスターが小さくなるようにするためにカウンタを用意して、その値に応じて弾が小さくなるようにした。これで背景は森だけだけど弾が撃てるようになって、なんとなくゼビウスの雰囲気だけは味わえた。せっかくなので背景もちょっとやってみようかと思った。
2010-03-10 03:55:47昔話:ゼビウスの背景もタイトル同様に画面に描いておいてメモリに転送する、という方法だった。マップは5mmの方眼紙を買ってきてつなぎ合わせて、大きなマップをマジックインキで描いてから入力した。当時は「ツール」という便利なものの存在自体を知らなかった。
2010-03-10 03:59:35昔話:ゼビウスのマップは一部分だけ作った。マップができればスクロールさせたくなるというもの。スクロールといってもBASICでの方法とは違うし、森田和郎氏が作ったアルフォスのような部分スクロールとも違って非常に単純なものでメモリからVRAMにアドレスを変えて転送するだけ。
2010-03-11 02:01:36昔話:多くの8bitマシンはグラフィック画面を2枚合成表示する機能がなかった。グラフィック画面は1枚しかないが、都合良くRed, Green, Blueの3面に分かれていた。そこで色を変更するパレット機能を利用し合成表示する方法が登場した。それをうまく使ったのがアルフォスだった。
2010-03-12 21:26:41昔話:例えば地面を緑一色にする。実際には黒も使えるのでディザを使って緑、黒、黒緑が表現できる。緑(G)=4であれば、G+Rの色を6でなく7(白)に、G+Bの色を5(水色)でなく7のようにしておけば、緑画面と合成できる。使える色は減るが合成は簡単にできる。
2010-03-12 21:32:44昔話:画面の合成ができない、つまり背景とキャラクタをミックスして表示できない。でも、他機種でもmz-700でも通常は直接画面に描くのが普通だった。なんせZ80の3.58MHzなので表示する事自体に時間がかかる。おまけに画面に書き込みを行うとウェイトが発生するのが当時は普通だった。
2010-03-15 00:54:57昔話:どうすればよいのか分からないまま時間が過ぎた。それで月刊マイコンか他の雑誌で「裏画面を利用する」という記事か何かがあった。つまり裏画面に描いておいて、表画面になるようにアドレスを切り替えれば、ちらつきもなく瞬時に描画したように見える、という方法だった。
2010-03-15 00:57:35昔話:しかし画面を瞬時に切り替えることができるような機能はmz-700にはない。そもそも裏画面なんてないじゃないか、とずっと思っていた。が、松本駅前でいきなりひらめいた。確か9月頃だったか部活の帰りに思いついた。$D000でなく$D400から1KB余ってる画面がある!
2010-03-15 00:59:37昔話:$D400から$D000に文字を転送、そして$DC00から$D800に色を転送。ここでもいつものLDIRを使った。当時はVRAM表示の際にウェイトがかかるという事を知らなかったので、ソルバルウや敵が動くとちょっと色がずれたりする。でも、十分動くし遊べそうな感じになった。
2010-03-15 01:06:26昔話:そして、確かこの頃にアセンブラがあると便利だと知った。都合良くOh!mzにEDASM(エディタアセンブラ)が掲載された。頑張って掲載されていたダンプリストを入力した。さすがに一発では動かずチェックサムを見比べつつ修正。どうにか無事にアセンブラを使える環境ができた。
2010-03-15 01:09:23昔話:Oh!mzに掲載されたEDASM。mz-700の最後の開発までこれを使っていた。空きメモリが大きいというのが一番の理由だった。全機種共通のOS「S-OS」に掲載されたアセンブラでは、どうしても空きメモリが少なかったのでいまいち使う気になれなかった。
2010-03-17 04:19:23昔話:簡単に機械語を生成してくれるアセンブラのおかげで開発速度は劇的にアップした。と言っても、マップが表示されてソルバルウが動いている段階では「ちゃんと移植する気はなかった」 単に動かして気分がいい程度で移植して稼ぐとかいうのもなかった。
2010-03-17 04:22:18昔話:致命的だったのが先にPC-6001のタイニーゼビウスで遊んでしまった事。現物のゼビウスをプレイしたのはタイニーゼビウスをプレイしてから3ヶ月後くらい。初めて見たゼビウスの画面は感動するほど綺麗だった。高校一年の4月末くらいに初めてプレイしたが3分で終わった。
2010-03-17 04:25:01昔話:ゼビウスは難しかった。パックマンも1面をクリアできるかどうか、インベーダーゲームは全く1面もクリアできず。ナムコのポールポジションは1周くらいが限度。ドンキーコングは2段目で死ぬ始末。ゲームはかなり下手だった。移植する前にゲームで遊んで上達する必要があったのだ。
2010-03-17 04:28:17昔話:ゲームを移植するには元のゲームを知っておく方がよい。しかしゼビウスは全く上達しなかった。敵の弾がやってくる方に移動し、やられてしまう。エリア4の巨大要塞アンドアジェネシスを見ることなどとても無理な話だった。という事でmz-700のゼビウスで最初に移植したのはザカートだった。
2010-03-19 02:16:04昔話:ゼビウスのザカートはワープして出現した後に、時々弾を発射して再度消える。ということで、弾を発射して動かすようにしてみた。が、技術力がなかったので弾は8方向にしか移動しない。本物は16方向。8方向しかないならよけるのも簡単だと思ったら大間違いだった。
2010-03-21 01:33:52