NESプログラミング事始め
ファミコン戦士になるべく、ファミコン(NES)のプログラミングを始めた。とりあえず、情報収集と環境設定をした。ので覚え書き。
まず一通り読んだのが以下の2サイト。
- ギコ猫でもわかるファミコンプログラミング
- NES研究室 - from id:cojiさん
で、漠然とその仕組みがわかってきた。スプライトや背景とパレットを使って、同じスプライトでも色を変えて表示すると買って仕組みは以前どこかで読んだことがあったし、Z80のアセンブラは昔書いたことがあるので、なんとかなる予感。ところで、ここに6502の命令セットが書かれているけれど、VirtualNESの説明にある「未公開命令」なるものが存在する予感があって、それも含まれているかわからない。ま、まだ今後いろいろ調べていこう。
続いて環境整備。ダウンロードしたものは以下。
コンパイラは、ギコ猫でもわかるファミコンプログラミングはNESASM、NES研究室はcc65を使っていて、どっちがいいのかよくわからなかったので、とりあえずNES研究室のサンプルをコンパイルしてみることにして、cc65の環境を作る。ダウンロードするべきファイルはどうやら、ホストのOS向けのファイル(cc65-win32-2.11.0-1.zip)と、ターゲット別のファイル(cc65-nes-2.11.0-1.zip)を必要とする感じなので、それらをダウンロードして同じディレクトリ(c:\cc65とかにした)に放り込んだ。なんかVBScriptで書かれたインストーラがついていたが、何となく不安だったので、自分でcc65-win32-2.11.0-1.zipのbinディレクトリの場所を環境変数PATHに追加した。
で、サンプルはmakefileがついていたけど、Windows環境にmakeが入ってなかったので、Cygwinで追加して、NES研究室のサンプルをコンパイルし直してみたところ、無事コンパイルできた。includeとかは環境変数には設定していないけど、アセンブラだけだから関係ないか。
続いて、YY-CHRで、サンプル内のcharacter.chrを開いてみると、数字ひらがなカタカナが入っている。しかも、英数字はASCIIのコードと同じ位置になるように置かれているんだな。だから、サンプルのソースコード(sample1.asm)で以下のように文字を指定できるわけだ。
; 表示文字列 string: .byte "HELLO, WORLD!"
なので、これを書き換えれば文字を変更できそうだ。で、変えてみた。
; 表示文字列 string: .byte "Takaaki Mizuno"
同時に、文字列のサイズを設定している部分があったのでそれも書き換える。
ldy #$0e ; 14文字表示
で、コンパイルしたら正しく動作した。こんな感じで第1日目終了。