ファミコンの完全自作ROM&カセット作ろう!〜cc65で起動ROMをつくる〜
先日、ファミコンに直差しできるROMカセットを作るというお話をしました。しかし、いくらハードウェアができたとしてもプログラムがないと動かないただの鉄の塊です。 ■cc65は、僕らに新規の6502コンピューターを作らせてくれない そこでプログラムを作って書き込もうとしましたが、問題はcc65でROMに書き込める普通のプログラムデータを作成することが非常に困難であるという点でした。 つまりどういうことかというと、cc65というコンパイラソフトは「新規の」6502ハードウェア開発向けには作られておらず、コモドール64やファミコンのエミュレーター向けの開発を考えられているのです。それがわかる仕様として、アセンブラで書いたプログラムをcc65で書き出す際に、どのハードウェア向けに書き出すかという旨を指定する必要があるのです。 もし指定しなければ自動的にコモドール64向けに書き出されます。そして、プログラムの内容がそれに沿っていなければエラーとして判断され、かきだされることもありません。 ■使いやすさの視点の違いから生まれた仕様 もうひとつ、cc65が抱える問題として ORG命令 が本来の動きとして働かないという点です。 ORG命令 とは、そのプログラムがメモリのどの位置から開始されるのかをしていする重要な命令です。これによってジャンプ命令やラベルがまともに使用できるし、6502においてはリセット割り込み(ゲームを開始する際に読み込まれるメモリ)の情報を書き込むメモリの位置を指定しなくてはいけないので、非常に重要な命令なのですがなんとcc65ではほぼ封印されています。ジャンプ先としては読み込まれきちんとコンパイルされますが プログラムをコンパイルした際に指定した場所にプログラムが書き込まれていないのです。非常にバカバカしくなります。 ではcc65にはORG命令の代わりに何が使われているのかというとSEGMENT命令が利用されています。プログラムをSEGMENTで切り分け、その段階ではまだどこからそのプログラムを配置するのかを指定しません。指定はコンフィグファイルという別のファイルにて指定します。つまり、 アセンブラファイルだけではプログラムを作成することができない のです。また、コンパイルした際にこのコン