時、巻き戻った後6
ファミコンでのソフト開発について考えます。その2
問題は次のハードルだ。
プログラム開発にあたっての環境を整える難易度である。
ファミコンで動作するゲームを作るには、ファミコンのハードに対応したプログラムを組む必要がある。
ファミコンはゲーム機であるため、単独でBASICのようなプログラム言語を持たない。(単体販売を想定しているのでファミリーベーシックは除外する)
よって、使えるのはファミコンのCPUが理解できるマシン語で書かれたプログラムだけになる。
マシン語とはその機械のCPUが理解できる命令番号と、その命令を実行する際に必要な引数(CPUで命令を処理する際に引渡す条件値の事)の組を順番に書き連ねたものを言う。
命令番号も引数も基本的には数字であるので、見た目は完全な2進数を用いた数字の連なりである。
ファミコンの場合、このマシン語による実行ファイルがカセットの中に記録されている。
そして、カセットを刺してファミコンに電源を入れると、カセットの中の決まった場所からマシン語のプログラムが順に呼び出され、CPUに引き渡されてゲームが始まる形だ。
さて、このマシン語であるが、見た目は完全な数字の並びだとしても、実際には数字だけを並べて直接組み上げるのは難易度が高い。
確かに、理論上は使うハードのCPU用の命令セットの表さえあれば、直接数字を並べてプログラムを書く事は出来る。
しかし、それで出来上がるのは先ほども書いた通り、完全な数字列でしかない。
そのため、一般的な人間にとって、その数字の並びがどういう処理にあたるのかを見ただけで理解するのは難しい。
当然、プログラム自体は出来ても、作成済みのプログラムを何らかの理由で修正しなくてはならなくなった際、非常に大変なことになる。
だから、直接マシン語でプログラムを書くのではなく、一段階おいてプログラムを書くことになる。
その1段階というのがマシン語のアセンブラ言語化である。
アセンブラ言語とはマシン語の命令を読みやすいよう文字であらわしたものである。
この文字による命令はマシン語で使用される命令番号と1対1になるよう設計されており、プログラマーは文字による命令と数字による引数を連ねてプログラムを作成する。
その後、書いたプログラム中の命令をそのまま命令番号に置き換え、各命令の引数を適切な形に置き換えればそのままマシン語の実行ファイルが完成する。
これがアセンブラ言語の基本的な考え方だ。
ファミコンのプログラムは、ほぼこのアセンブラ言語で作成されている。
要するに、数字だけであるため見ただけで処理内容が把握できない、のであれば、命令部分の数字を文字列に置き換えて見やすくすればいい。
実際には文字による命令と命令番号は1対1の関係であるので、置き換えればマシン語になる、というわけだ。
このような関係の言語をアセンブラ言語と呼び、変換を行ってくれるプログラムをアセンブラと呼ぶ。
注意すべきは、こうした変換を行うアセンブラはCPUに対応したものが個別に必要であることだ。
命令番号と実際の処理内容の組は特に互換性を持たせて作らない限り、CPUごとに組み合わせが異なる。
(逆に言うと、派生や上位互換のCPUではこの機能と命令番号の組が同じになるよう設計されている。)
アセンブラのルールは「”CPUの命令番号”に対して1対1になるよう文字列の命令を割り当る」であって、CPUが異なると正しい結果にはならない。
そのため、同じアセンブラ言語で同じ文字列が割り当てられていても、CPUが異なれば帰ってくる命令番号は別になり、出力されるマシン語も別になるからだ。
さて、先ほど書いた通り、ファミコンのCPUはMOS 6502というチップのカスタムチップだ。
つまりファミコン用のプログラムを作りたい場合、このMOS 6502に対応したアセンブラが必要になる。
当時、このMOS 6502に対応したアセンブラとして実績があったものにACT65というソフトがあった。
このアセンブラはCP/Mという8Bit時代のデファクトスタンダードだったOSの上で動くプログラムで、当然、国産のソフトではない。
インターネットどころかパソコン通信もない時代なので、まずはこのソフトを物理的に入手しなくてはならない。
当時、CP/M用の開発言語についてはシャープから調達することが可能だった。
これは当時、LIFEBOAT社という米国ソフトハウスの日本支社があり、ここがCP/M向けの開発言語の国内販売を行っていたこと、そして、このLIFEBOAT社がシャープと提携していたことによるものだ。
当然、そこから入手する事になる。この時点で結構な金額の支出になる。
次に必要なのが開発用のコンピュータだ。
ACT65を使う以上、OSにはCP/Mを選択する必要がある。
当時、国産PCでCP/Mが動作する機種はSharpのX1やX1 Turbo、NECのPC-8001やPC-8801等が該当した。
だから当然、ファミコンソフトの開発にはこの辺のCP/M対応マシンが必要になる。
このうち、初期の段階で使われた実績があるのはSharpのX1だ。
シャープはX1シリーズ向けのCP/MをランゲージマスターCP/Mという名で独自開発しており、他機種用のCP/M OSよりは比較的安価で販売していた。
よって、X1の実機とACT65さえ入手できれば、比較的安価に環境が構築できた。
とは言え、X1の実機も安価とは言えない。
当時のX1だと本体(CZ-800C)+専用ディスプレイテレビに+グラフィックRAMの追加が必要で、この場合、定価で合計30万円コースである。
つまり、最初期における非任天堂環境でのファミコンプログラムでは、まずCP/Mが動作する機材(X1)を入手し、OSとしてCP/Mを導入した上で、同OS上で動作するMOS 6502用のアセンブラ(ACT65)を調達しなければ、そもそも開発環境が作れなかった。
後にMSX DOS上でもACT65が動作することが解ると開発環境も低価格化していくのだが…。
まあ、正直言って、小学生が自力で揃えられる環境じゃないよなあ。
開発環境だけでもいいお値段としか言いようがない。
特にX1+ACT65。自力で調達できるのはOSのCP/M 位だ。
まあ、入手可能なPC次第ではACT65相当のアセンブラ自体を自作してプログラム出来る環境までは作れるかもしれないが…。
(実際、ハドソンなどではファミコン専用のアセンブラを自作した例もある)
Apple II用のデータシートとか、今から入手出来たりするもんだろうか?
完全なデータシートとなると、Apple II付属のReference Manualでも手に入れないと無理じゃないかな。
プログラムが完成してデバッグを考えずに販売するとしても、これに追加でカセットの製造コストとか乗ってくるんだよなあ…。
まあ、最後のハードルまで考えてから結論は出すべきか。




