Debian 7.6(wheezy)でファミコン(NES)プログラミング(6502アセンブル/逆アセンブル)
Debian 7.6(wheezy)でファミコン(NES)のプログラミング環境を構築したので、そのメモです。
といっても、環境構築からアセンブル、動作確認は以下の記事の受け売りです。
Ubuntu で ファミコン(NES)プログラム その1.1(リローデット)
インストールするもの
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
アセンブル/逆アセンブル
サンプルソースのダウンロード
参考にさせてもらっている上述の記事では、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 逆アセンブル結果が標準出力に吐き出されます。