Debian 7.6(wheezy)でファミコン(NES)プログラミング(6502アセンブル/逆アセンブル)

Debian 7.6(wheezy)でファミコン(NES)のプログラミング環境を構築したので、そのメモです。


といっても、環境構築からアセンブル、動作確認は以下の記事の受け売りです。
Ubuntu で ファミコン(NES)プログラム その1.1(リローデット)

  • Ubuntu向けの記事ですが、Debianでも動作します

インストールするもの

Cコンパイラ/クロスアセンブラ

NESのCPUである6502のCコンパイラ/クロスアセンブラ(CC65)をインストールします。


デフォルトではAPTリポジトリ上に存在しないので、まずはリポジトリを登録します。
以下の2行を「/etc/apt/sources.list」に追加してください。

deb http://debian.trikaliotis.net/ stable contrib
deb-src http://debian.trikaliotis.net/ stable contrib

そして、以下のコマンドで認証キーを取得・設定してください。

$ wget -O - http://www.trikaliotis.net/spiro.pgp | sudo apt-key add -


APTのリポジトリ情報を更新して、CC65をインストール。

$ sudo apt-get update
$ sudo apt-get install cc65
NESエミュレータ

NESエミュレータにはmednafenを使用しました。
何でも良いのですが、Debianリポジトリ上にはコレとfceuくらいしか無いと思います。

$ sudo apt-get install mednafen

アセンブル/逆アセンブル

サンプルソースのダウンロード

参考にさせてもらっている上述の記事では、CC65でビルドできるサンプルソースをBitbucket上で公開されています。
https://bitbucket.org/symfo/nes_sample/src


Mercurial(hgコマンド)をインストールしていれば、
以下のコマンドでクローンできます。

hg clone https://bitbucket.org/symfo/nes_sample


hgコマンドをインストールしていなければ、
ページ左側の「NAVIGATION」の「ダウンロード」からZIP形式でダウンロードできるので、
ダウンロード・展開してください。

アセンブル・動作確認

sample1で動作確認しました。


アセンブル

$ cd サンプルソースのパス/sample1/
$ make


【動作確認】

$ mednafen sample1.nes

「HELLO, WORLD!」と表示されれば成功です。

アセンブル

CC65のパッケージには逆アセンブラ(DA65)も付属していて、以下のコマンドで逆アセンブルが行えます。

$ da65 sample1.nes
逆アセンブル結果が標準出力に吐き出されます。
番外編:MD6502で逆アセンブル

当初、CC65のパッケージに逆アセンブラが付属しているのを知らなくて、
Windows向けに公開されているMinachun Disassembler for 6502(MD6502)がソースコードも公開しているので、それをビルドして使用していました。

こちらから、md6502.zipをダウンロードして、以下のように展開します。
ディレクトリをZIPにしていないので、自分で展開用のディレクトリを作成して展開します。

$ cd ダウンロードしたパス/
$ mkdir md6502
$ mv 6502.zip md6502/
$ cd md6502/
$ unzip md6502


そして、以下のようにソースをビルドします。

$ g++ -o md6502 md6502.cpp

たくさんワーニングが吐かれますが、エラーは発生せず、実行ファイルが生成されていると思います。

$ ls md6502
md6502


アセンブルは以下のように行います。

$ ./md6502 sample1.nes
逆アセンブル結果が標準出力に吐き出されます。