Today アクセスカウンター Yesterday アクセスカウンター

Ads by Google

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

ファミコンプログラミング

一番身近な 8 bit CPU ということで.

しかし,思ったよりも情報が少ない.以下のサイトが有名らしい.というか,非常に素晴らしい決定版サイト.

ギコ猫でもわかるファミコンプログラミング

まだオープンソースの時代とかじゃなかったし,極めて厳しいハードウェアリソース上でのプログラミングにならざるを得ないため,ロストテクノロジーの塊.リソースが厳しすぎるので,C コンパイラとかもあるにはあるけど,使えない感じ… あと,こういうゲーム機の hack は,どうしてもアングラ的になってしまうのでいろいろアレ.さすがにファミコンぐらい枯れてると,生々しさは消えてくるけど.

ファミリーコンピュータ : wikipedia.ja

1.8 MHz の 6502 互換 CPU に,2 KB の RAM + 2 KB の VRAM.よくこんなハードで,女神転生とかドラクエが実装できたものだと,驚愕するしかない.

とりあえず,アセンブラとエミュレータを用意する.

・ アセンブラ

MagicKit Homepageから,DOS 版と LINUX 版 (ファミコンは,海外では NINTENDO ENTERTAINMENT SYSTEM ; NES と呼ばれている) がダウンロードできる.

うちの Debian lenny + kernel 2.6 環境では,最新の LINUX 版を解凍して実行権を与えただけで (chmod +x BIN/NESASM) そのまま動いた.

・ エミュレータ

Debian ならば

$apt-get install fceu

とかで入る.ゲームパッドが使いたかったら,/dev/input/js0 とかが jstest でちゃんと動くように設定しておいて (xserver-xorg-input-joystic とかが必要かもしれない)

$ fceu -inputcfg gamepad1 /dev/input/js0

とかで,順番に A ボタン B ボタン 上下左右に割り当てたいボタンを押していけば設定できる (fceu デフォルトのキーバインドは,かなり変態的) うちの場合,最後にエラーが出たけど,なんかちゃんと動いてるみたい (動作検証は,ちゃんと合法の rom でやりましょう)

ちなみに,うちのゲームパッドは,札幌駅前の電気屋で買った ELECOM JC-U2410TBK とかいう usb のやつ.「ゲームコントローラー 3 年連続 No.1」 とか書いてあって,いっぱい置いてあった 980 円ぐらいのもの.刺すだけで認識された.

ギコ猫さんのところのサンプルコードや,NESASM のデモプログラムなどをアセンブルしてみて,

$ fceu giko005.nes
$ fceu JUNKDEMO.NES

ちゃんと動いたら成功.とりあえず,今日はここまで.

# ちなみに,最近ブログの誤字脱字が多いのは,fc2 のエディタが重く,使い難くなったため… 読み返すのが面倒.




ううう,夜中に勢いだけで書いたから,本当に誤字脱字が酷すぎた… あと,fc2 のエディタのせいだけじゃなくて,単に脳味噌が劣化してきただけという疑惑も.




追記ですが,ファミコンの特許は 2003 年で切れたそうです.

DSLiteでファミコンがプレイ可能に
FC互換機(ファミコン互換機) 比較コーナー

日本の特許法の有効期限は 20 年らしいです.ちなみに,僕とファミコン様は同じ歳 (1983 年生まれ) .お互い歳を取ったものです.スーパーファミコンは,1990 年 11 月生まれなので,あと 2 年半ぐらい期間が残ってますね.

なので,最近 (?) やたらゲームセンターの景品などで,ファミコン互換景品を見かけるわけですが,あれは違法な海賊版じゃなくて合法 (?) だったわけなんですね.

当然,エミュレータとかも (逆アセンブルしたプロプライエタリなコードなどが入って無ければ),ドキュメントを見て作るぶんには,特許料を払わなくても合法と.

もちろん,海外の怪しげなサイトなどから rom イメージをダウンロードするのは (そのソフトウェアを持って無い人は) 非合法ですが.

NES Info, programs, and demos
「Nintendo Entertainment System Documentation」

エミュレータやジョイスティックの動作確認などは,有志の手によって公開されている自作ゲーム (これらもまた,音楽などが,耳コピとはいえ,微妙にグレーな気もするのですが…) などで行いましょう.

このゲームとか,音源とかゲームシステムとか,いろいろ著作権的に危ない感じもしますが,面白そうです.ボタンだけじゃなくて,十字キーでも入力する音ゲーらしいので,ムズそうですけど…




参考サイト追記

NES研究室
ファミコンらしく!forFF7スレ

当時の話など

ファミコンの詳しい話
hiromasa.another :o) : 限界を超えるテクニック(ファミコン編)
ま、どうでもイイっちゃぁ、どうでもイイよね : ゲーム機の話 その1 ファミコン編

コメント

Secret

RubyKaigi2007

RubyKaigi2007 で「ファミコンはVMだ!」を合い言葉に、
こんな発表をされた方がいらっしゃいました。

http://d.hatena.ne.jp/takkaw/20070609/p2

> tmaeda さん

C すら厳しいらしいのに (小規模の RPG なら何とか,アクションとかシューティングは絶望らしいです) Ruby っていうチャレンジ精神が凄いですね.

確かに,プレゼンツールみたいなネタを,Ruby とかでサクっと書けると楽しいと思います (笑)

# 制限が厳しすぎるので,Ruby らしさはでないコードになると思いますが

ファミコンネタとか,実名で記事を公開している人はほとんどいないので,もしかして NES フォーマットを解析したり,ファミコン互換環境でプログラミングしたりすること自体違法なのかと多少ビクビクしていたのですが.ファミコンって,PC/AT みたいに,共通 VM 仕様として考えられるぐらいオープンな規格なんですかねぇ ?

まぁ,エミュレータのソースの中身を見ないで,エミュレータの上でアセンブラプログラミングしてる程度ならば大丈夫だとは思いますが.

# あと,外国のサイトが多いので,うっかりアングラ系の URL を張ってしまったりするのも怖い (苦笑) バイナリの実行も,ソースが付いてるとついついコンパイルが面倒でそのままやってしまったりするのですが.信用できるサイト以外は,Linux とかでもウイルスの危険性がありますからねぇ… もともとマイナーなネタなので,サイトの信用度がわかりにくいです.

>PC/AT みたいに,共通 VM 仕様として考えられるぐらいオープンな規格なんですかねぇ ?
いくらなんでもそれはないw
特にハードの仕様に関しては公式に公開はしていないはず。
とはいえ解析本がそれこそあろはさんがよちよち歩きの頃から出てたけどね :)
#バッ活とか、ハッカーとか

あと「ファミコンの特許」というのがよくわからない。
ファミコンという機械自体の特許じゃないよね?

あー、それから6502というのはCの言語仕様には激しくマッチしない石じゃないかなあ。
スタックなんて256「バイト」だよ?w
もちろん6502用のコンパイラがあったのは知ってたし、ゲームの開発に使ったところも
あるらしいけど。
とはいえどんなコードを吐いてたのかねえ。
ウォズはこの石好きらしいんだけど(だからAppleで使った)、自分はどうもねえ
#仕事でちょっとつらいことがあったらしい :)

> きむら さん

ん ? 特許と言ったら,ファミコンという機械自体の特許なんじゃないんですか ?

ファミコンの機械自体は,非常にシンプルで美しいアーキテクチャだと思いますよ.6502 も,教育・ホビー用途には良い石だと思います.なので,そもそもハード仕様が必要無かった (見ればわかる) だったのかもしれませんね.

もちろん,仕事なので,ちょっと複雑だったり大規模なプログラミングをしないといけなくなったら,厳しすぎる容量制限に泣かざるを得ないとは思いますけど.スタックも,配列も,一発でアクセスできるメモリブロックの長さは全て 256 バイト制限ですからねぇ.すぐにトリッキーなプログラミングが必要になってしまいます.

いやあ自分の知る限りでは、ファミコンという機械そのものでの特許は
出てなかったはず。ただ、十字コントローラは確か特許が成立していて、
セガとかが自分のところのコントローラに使えなかったのは
結構有名な話。

「カセットを切り替えることによって云々な電子遊具」とかいう感じだと
先行事例がいくらでもあるから、特許として認められないと思うんだけどなあ。
#特許データベースの使い方忘れたなあ、どうやんだっけ

> きむら さん

確かに,言われてみればそうですね.

う〜ん,ファミコンのバイナリフォーマットか何かに特許か何かがあるのでしょうか… ?
それもおかしな話ですが… そんなの聞いたことありませんし.

何か,ファミコンの中で使われている,一部の技術の特許が任天堂に握られていた,あるいは 「ファミコン互換」をうたうこと自体がアウトだったのが,良くなったということなのでしょうか (同じバイナリフォーマットを動かすことができる機械を作ること自体は OK だった ?)

6502はクロックがちょっと面倒じゃなかったっけ? 2相で与えないといけなかったような…別のCPUだったかな?
既にそういうのがケアされてるボードで遊ぶなら関係ないですけど。

ハード方面は疎いのでちと調べてみましたが、6502のクロックは一相のようです。
ベースの6800? は二相のようですけど。

そういえば(わたしは知らないのですが)8bitマイコンの黎明期には、今はなき「マイコン」誌
とかI/Oの「欄外」で、8080派6800派に分かれて論戦が戦われていたとか。
かたや「電圧三つも用意しないといけないじゃないか」とかクロック与えるのが面倒とか。

ソフトの組み方に全然関係ないところがなんとも時代を感じます。

>一部の技術の特許が任天堂に握られていた
具体的なのは調べないとわからないけど、ファミコンを構成する要素に関して
(カセットの形状とか何とか)いえば、片っ端から特許とか実用新案をとっていたはず。
プロフィール
  • Author:あろは (alohakun)
  • 京都のデバッガベンダーに勤めるアラサー会社員。

    本ブログの内容は,あくまでも個人的な感想や意見であり,会社の意見を代表するものでは一切ありません.

    連絡先 : alohakun ___at___ gmail.com
    mixi : http://mixi.jp/show_friend.pl?id=182927
    twitter : http://twitter.com/alohakun













    あわせて読みたい


    この日記のはてなブックマーク数


    スカウター : ホワット・ア・ワンダフル・ワールド


    Map
FC2カウンター
ブロとも申請フォーム

この人とブロともになる

最近のコメント
リンク
最近のトラックバック
人生の残り日数
日本人男性の平均寿命は 28700日.
RSSフィード
カテゴリー
  1. RSSリーダー