Hatena::ブログ(Diary)

へにゃぺんて@日々勉強のまとめ

2014-08-31

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
逆アセンブル結果が標準出力に吐き出されます。

参考記事