Entry

BASIL - game ROM reader writer

2004年10月25日

この前作ったゲームボーイ ROM リーダの中身を,一応紹介してみます(下図)。名前は「BASIL」といいます(思い付き)。当初は,ゲームボーイリーダを作ったつもりだったんですけれど,使いようによってはゲーム機一般に使えそうなので,「game ROM reader writer」ということにしてみました。

BASIL の外観

この回路の目論見は3つあります。1つは,ゲーム ROM の中身を解析できる環境を構築することで,もう1つは,FreeBSD で吸い出せる環境を作ることです。この2つは,一応吸い出すことができているので,目的達成です。最後の1つは,この頃 PIC に負け気味(というか負けている)なAVR のキラーコンテンツを作る,といったことだったんですけれど……ちょっと弱いかなぁ……。

仕組みは,シリアル経由で AVR(AT90S8515)を操作して,結果を返すというものです。読み出せるから,取り敢えずは問題無いんですけれど,転送速度の遅さは正直実用になりません。いろいろ工夫したんですけれど 64KB を読み出すのに11分かかりました……。スピードは改善しました。

ちなみに,MCU を使ったシリアルリーダには,BASIL の他にも,加島倫さんとこの「GBシリアルリーダー」(KASHIMA HomePage)があります(PIC 使用)。こっちは,MCU がターミナルを持っていたり(汎用のターミナルソフトから操作できる),ゲームボーイに特化した制御を MCU ベースで処理したりしているので,BASIL と比べて圧倒的に高性能です。スピードも 512KB を 64 秒でダウンロードできるらしいので,到底太刀打ちできません。

BASIL が遅いのは,制御ソフトがヘタレなせいだと思います。いろいろ工夫したんですけれど,思いつく手が尽きて発表した状況です……。シリアル制御って難しいです……。

回路図

とにもかくにも回路図です。ゲームボーイのカートリッジソケットが貴重なので,本体のインターフェイスにはピンヘッダを使うことにしました。まずは,本体の回路図から……最上位にある回路図が最新版です。

※ 2004年12月19日以前に掲載していた回路図(旧回路図ということにします)は,誤りもあったので,削除しました。また,冒頭の写真を見て分かるとおり,手元の BASIL では,ゲームボーイカートリッジコネクタと回路本体をフラットケーブルで結線しています。旧回路図では,このコネクタも回路図に含めていましたが,読みにくくなるのでコネクタ部を削除しました。結線は各自で工夫してください。

足をつなげただけなので,特に何か言う程のことでもありませんね……。AVR は内蔵してある Flash ROM にプログラムを焼き込んで使います。つまり AVR ライタを持っていないと焼けないので,あらかじめ作るなり,買っておくなりしておく必要があります。焼き方は……たくさんサイトがあるので適宜参照してください。一応,うちのサイトでも扱っています(参照:「【続】 FreeBSD で動く AVR ライタ」)。

AIAN は AT90S8515 を直接焼くライタを持っていないので,ISP 用のコネクタを作りました。ISP に使う MOSI や MSIO のピンはカートリッジのデータバスと共用しているので,ISP するときは,カートリッジを抜いておく必要があります。

コネクタは,ジャンクのゲームボーイからいただいてきました。コネクタの新品は,国内で売っていないようなので,ジャンクを当たるのが現実的かもしれません。

ファームウェア

回路を作ったら,AVR のファームウェアを書きます。以下に置いておきます。回路図のバージョンに対応したファームウェアを選ぶ必要があります。

操作法は「a」コマンドでアドレスを指定して,「r」や「w」コマンドで読んだり書いたりするのが基本です。ただ,「a」コマンドは引数を2つも取るので,実行するのに3回もアクセスする必要があります。この煩雑さを避けるために,インクリメンタルアドレッシング機能付きの read コマンドも用意しました(「p」コマンド)。これを使えば,1回のアクセスで「現在のアドレスのデータを読んで,アドレスをインクリメントする」ところまでやってくれます。

また,ご存知の通り,ゲームボーイには MBC というバンク切り替え機能があります。ファームウェアを作るにあたって,これを MCU に実装すべきかどうか悩んだんですけれど,取り敢えずは実装しないことにしました。ゲームボーイ専用の回路にすると収拾が付かなくなりそうだったもんで……。

バージョンが上がるごとにコマンドが増えるので,詳細は履歴やソースを読んでください。

ソフトウェア

bgb

BASIL をゲームボーイリーダとして動かすためのプログラムです。BASIL for GB という意味で「bgb」と名付けてみました。

Makefile を添付しておいたので,普通に make すればできるはずです。AIAN は FreeBSD 5.2.1R 上でコンパイルしました。FreeBSD で動かすことを予定しているけれど,シリアルポートのデバイスファイル名なんかを適宜変えれば,比較的簡単に他の OS に移植できると思います。Windows はよく分かりませんが……。

使い方は,ヘルプ(-h オプション)を見てください。bgb-20041218 以後の bgb では,シリアルポートのデフォルトが,/dev/basil になっています。変更する場合は,-p オプションを使ってください。たとえば,/dev/cuaa0 につながっている BASIL からカートリッジ ROM を吸い出す場合は,

% bgb -p /dev/cuaa0 -r

でいけるはずです。セーブするときのファイル名は,カートリッジにあるタイトル情報に,「.gb」の拡張子を付けたものになります。

対応している ROM カートリッジ等は,履歴を参照してください。

ご注意

ゲームメーカーの著作権について

ご存知だと思いますけど,BASIL を使って読み出した ROM データは,私的利用等の範囲を越えて複製等すると,ゲームメーカーの著作権を侵害することになります。

著作権法等,関係諸法令に違反しないよう,利用にあたってはくれぐれもご注意ください。

配布条件

BASIL のファームウェア及び bgb をはじめとした制御プログラムは,広告条項抜きの BSD ライセンスで配布します(いわゆる,修正 BSD ライセンス)。簡単にまとめると,

  • 再配布等にあたっては,著作権等を表示してください。
  • 本ソフトウェアは無保証です。

ということです。正式なライセンス条項は,ソースコード中に書かれている条項をお読みください。

一方,回路図については,著作権を放棄します。同時に,AIAN は,これによって生じたいかなる損害についても免責されるものとします。どうぞご自由にお使いください。

なお,以上の配布条件は,厳密に言うと BASIL 2004-12-18(回路図),basil-20041218(ファームウェア)及び bgb-20041218 以降のリリースについて適用されます。もっとも,それ以前の配布物については,「About qune」によるので,配布条件は大して変わりません。

ライセンス上は,修正・再配布等にあたって AIAN に通知する必要はありません。でも,連絡をいただけたら AIAN が喜びます。

更新履歴

BASIL 回路・ファームウェア

  • [2004-12-19] BASIL 2004-12-18 (該当記事:「BASIL の改良」)
    • XTAL を 4MHz から7.3720MHz に変更。
    • 上記変更に伴って UART を 115200bps (Error rate 0.0%)に変更。
    • 配線を PROTOTYPE から若干変更。
    • ファームウェアに bulk_read コマンドを追加。
  • [2004-10-25] BASIL PROTOTYPE (削除)

bgb

  • [2004-12-19] bgb 2004-12-18 (該当記事:「BASIL の改良」)
    • bgb が ROM ONLY,MBC1,MBC2,MBC3,MBC5 の ROM リードに対応。それ以外の MBC(HuC 等)は動作せず。
    • RAM 書き込みには未対応
    • シリアルポートのデフォルトを /dev/basil に固定。それに伴って,-p オプションでポートを指定できるようにした。
    • ファイル名の作り方がヘタレだったのを修正。
    • bulk_read コマンドを使った新しい読み込み機能を実装(-r オプション)。とても速く読めるようになったです。
    • -s オプションは obsolete 。でも,-S オプションで残ってるよ。
  • [2004-10-25] bgb for PROTOTYPE
Trackback
Trackback URL:
Ads
About
Search This Site
Ads
Categories
Recent Entries
Log Archive
Syndicate This Site
Info.
クリエイティブ・コモンズ・ライセンス
Movable Type 3.36
Valid XHTML 1.1!
Valid CSS!
ブログタイムズ

© 2003-2012 AIAN