見出し画像

黎明期のPCゲーム開発記 (4) 〜自分専用のOSを作る〜

前回の「第3回」では、N88-BASIC の MON コマンドを使ってマシン語プログラミングを始めたところまでのお話でした。
第4回は、いよいよ本格的にマシン語でのプログラミングにハマっていきます。

分からないことは聞くしかない

マシン語(Z80)が少しずつ理解でき、2冊の書籍を読み込んだ結果、なんとなくプログラムを書く方法が分かってきましたが、それでもやっぱり分からない・・・というか、じゃあ「ゲームを作る」ためにはどこから手を付けていいのか「分からない」というのが現実でした。私はそこで、今から考えたら "とても迷惑な" 選択をとってしましました・・・それは、

「ソフトハウスにお手紙を出して、何から始めたらいいか聞く」

というものです。第2回でも紹介しましたが、当時すでに多くのパソコンゲームを扱った雑誌が出版されていました。どんなメーカーがどんなソフトをリリースしているのか、そしてそのメーカーの住所なんかも掲載されていたのです。

私は、その雑誌(LOGINだったかな?)に掲載されていた「Yaksa(ヤシャ)」というゲームが以前から気になっていました。そこで Yaksa をリリースしていた「ウルフチーム」という会社に思い切ってお手紙を出しました。手紙の内容は、大まかに次のような内容だったと思います。

・PC-8801 mkII FR を持っている
・マシン語でゲームを作りたい
・本は何冊か購入して Z80 は少しは分かる
・どこから手を付けたらいいか教えてほしい

まあ、最初から答えなんて返って来ないと思ってたのですが、なんと親切にも数枚のフロッピーディスクと共にお返事が返ってきたのです!!
多くの内容をご指導いただきましたが、その中で一番衝撃を受けたのは、

「自分専用の OS を作りなさい」

というもの。一緒に入っていたフロッピーディスクには、PC-8801 で動作する CP/M という OS と、Z80 のニモニックで書いたプログラムをマシン語に変換してくれるアセンブラとリンカ(macro-80 / link-80) が入っていました。

恐らく、私の人生に大きな影響を与えた手紙であることは間違いありません。

自分用の OS を作る

かくして、「ゲーム」を作る前段階として「自分用のOS」を作ることになりました。頂いた助言は、

フロッピーディスクに対するデータの送受信
グラフィックの制御
文字の制御(英数字、漢字の表示)
キーボードの制御

等、どんなゲームを作るのに共通する部分を作るというもの。それが作れれば、後はその上で作ったプログラムを起動するための部分を作れば、ベースが完成するというもの。

その当時、高校生だったと思うのですが、「OSを作る」ということに対して全く抵抗がなく、むしろ「なるほど、そういうことか!」と感じたのを覚えています。「ゲーム」を作るという大きな課題を、「まずOSを作る」という前段を用意してもらい、そして OS を作るために必要な「細かい項目」に分解してくれました。分解された1つ1つであれば、作れそうな気がしたからでしょうね。

ご存じの方もいらっしゃるかもしれませんが、PC-8801 mkII SR シリーズ以降には Z80 CPU が搭載されています。でも実はこの Z80 CPU は、1つではなく「2つ」搭載されているんです。この2つの Z80 を連携動作させつつ、2つの Z80 間でデータ通信を行うための2つ「バス」と呼ばれるものをうまく制御して、N88-BASIC でファイルを読み書きするよりも2倍近い速度が出るようになりました。

また同様に、グラフィックやテキスト、そしてキーボードの制御に関しても1つ1つ作成して、自分用の OS の中に組み込んでいきました。

PC-8801 内部の探検

自分用の OS を作る過程で、

「じゃあ実際の PC-8801 の内部はどんな風に実装されているんだ?」

という疑問が湧き出すのは当然のことです。OS を作りながら並行して、PC-8801 の内部構造を1命令1命令解析して、ノートに記録していきました。そして全てを書き出した頃には(2週間くらいかかったかな?)、PC-8801 が内部でどのような動作をしているのか・・・大方の所は理解できるようになっていきました。きっとこれは、OS を作るというテーマがなければ理解できるようにはならなかったと思います。

後に「マシン語 マスターバイブル (小学館)」という書籍が 1991年に発行されるのですが、そこに書いてあった内容は自分が調べたものと大差なかった事をよく覚えています。

PC-8801 の内部がわかり、自分専用の OS が形になり始めると、次のステップは「ゲームを作る」です。PC-8801 の内部構造を理解できた(と思っていた)私は、あるゲームの内部コードの解析を始めることになります・・・

この記事が気に入ったらサポートをしてみませんか?