Entry

ROM 吸い出し機概観

2004年09月22日

近頃,ゲームボーイの仕組みを少しづつ見ています。ハードウェア的には,ある程度理解してきたんですけれど,やっぱり,マイコンの類は,ソフトウェアを見ないと理解できません。

ゲームボーイのソフトウェアといえば,言わずもがな,ROM カセットに入っているゲームプログラムですよね。あ,一応,CPU の内部にもプログラムがあるんでしたっけ……。電源入れると Nintendo の文字が降りてきて,「コイーンッ」って鳴る部分です。ROM カセット入れなくても「コイーンッ」って鳴りますもんね……。「Everything You Always Wanted To Know About GAMEBOY 」(GameBoy Dev'rs)によると,

0104-0133 Scrolling Nintendo graphic:
CE ED 66 66 CC 0D 00 0B 03 73 00 83 00 0C 00 0D
00 08 11 1F 88 89 00 0E DC CC 6E E6 DD DD D9 99
BB BB 67 63 6E 0E EC CC DD DC 99 9F BB B9 33 3E
( PROGRAM WON'T RUN IF CHANGED!!!)

(snip)

When the GameBoy is powered up, a 256 byte program starting at memory location 0 is executed. This program is located in a ROM inside the GameBoy. The first thing the program does is read the cartridge locations from $104 to $133 and place this graphic of a Nintendo logo on the screen at the top. This image is then scrolled until it is in the middle of the screen. Two musical notes are then played on the internal speaker.

なんてあります。Nintendo のロゴは ROM カセットの内部にあって,これを動かしているのは CPU の内部にある 256byte のプログラム(の一部)ってことでしょうか……。たしかに,カートリッジを入れないで電源を入れないと,Nintendo のロゴは出てきません。「ROM inside the GameBoy」なるものは IC として実装されていないように見えるんだけど,どこにあるんでしょう……。

まぁ,「コイーンッ」はともかく,ゲームボーイのプログラムは,ROM カセットにあるものがメインです。もちろん,ROM カセットを分解して IC をまじまじと見ても,何も分からないので,パソコンに吸い出して観察できると便利です。

ROM のデータをパソコンに取り込むには,パソファミよろしく吸い出し機を作ることになります。ゲームボーイの ROM データは,パソファミでも吸い出せるようなんですけど,制御するソフトウェアが有料なので使いません。ここでは,ゲームボーイ周りのハッキングで有名な C3(Carbon Copy Card)(GIF:回路図)を見てみます。

近頃,作っている暇がないので,吸い出し機の仕組みを見るだけ見てみることにします。

吸い出し機というと,あちこちで似たようなものがいくつか紹介されていて,それぞれ工夫されているように見えますけど,基本的な原理は簡単なものです。ROM カセットの中にある ROM IC を読むだけですから。

ROM IC の種類にはいくつかあるけれど,アドレスバス・データバスの形式で分類して,パラレル方式とシリアル方式があります。ゲームボーイの内部にある ROM はどちらを採用しているのかというと,パラレル方式を採用しています。ゲームボーイの ROM には,「バンク」という概念があるので,これを採用するにはパラレル方式の方が扱いやすいのかもしれません(憶測です)。

パラレル方式の ROM IC は,アクセスが容易だといった利点はあるけれど,なにせパラレルなので,足の数がかなり多くなります。アドレス空間が 16bit なら,アドレスバスだけで16本の足が必要になるわけです。このアドレスに 8bit のデータを格納できるとすると,データバスは8本。加えて,制御用の足が3本くらいです。

そういうわけで,パソコンにデータを取り込むには,27本くらいあるこの足をどうやって処理するのか,ということに頭を悩ませることになるわけです。パソコンに付いているパラレルポートを使う場合,データバス(I/O)は 8bit 分しかないので,どうみても数が足りません(他の制御線もあるけれど)。

パソファミの場合は,4bit のカウンタ(74HC393)を4つつなげて 16bit のアドレスバスを作っています。データは,これまた 8bit のシフトレジスタ(74HC299)を使って節約です。ファミコンの ROM は,CHR ROM と PRG ROM という2つの ROM を切り替えなくちゃいけないので,足をどう節約するかが切実な問題になっているようです。

一方,C3 の場合は,Dタイプ・フリップフロップ(74HC374)を3つ使って,8bit 単位でアドレスバス・データバス(書き込み時)を駆動しているようです。ROM 側のデータ出力は 8bit なので,パソコン側でも 8bit のバスで受けたいものですけれど,ここでも,データセレクタを使って 4bit ずつ受けています。制御線もデマルチプレクサ(74HC138)を使って,5本分を3本にまとめています。涙ぐましいですね……。

バス数を増やすといったら,シフトレジスタなんでしょうけれど,パソコン側の制御プログラムが暗号めいたものになりそうです……(その前に遅いのかな)。なかなか難しいですね……。

とりあえず,C3 は暇を見て作ってみようと思います。ROM の仕組みはゲーム機もその他も大して変わらないので,そのうち汎用の ROM 吸い出し機なんかが作れたらと思っています。

ちなみに,メモリ IC の使い方を解説している書籍ってあまりないんですよね……。あたしは,『メモリICの実践活用法―UV‐EPROM/EEPROM/SRAM/DRAMの構造と使い方』(耼野雅彦,CQ出版社,2001年)が,とても参考になりました。来月のトラ技でもメモリICを特集するようなので,吸い出しに興味がある方は要チェックです。

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