技術解説
実践編 注意点
世の中には、DreamCastのGD-ROMのソフトをCD-ROMに変換したCDイメージがインターネットのどこかに落ちていたり、東南アジアあたりで売られているラシイ。
これらのCDイメージは、いくつかの少数のチームだけが公開しているラシく、どうやって吸い出しているかはチームの秘中の秘で、長い間「謎」とされてきました。
ざっと検索したところ、
等々、様々な噂が流れているようです。
1、については、否定はしきれませんが、成功報告がありません。
2、もうそ臭いです。そんなんでできるんだったらみんなやってるっての。
3、4は両方とも「通常のCD-ROMドライブでGD-ROMが読める」という意味で、ナンセンスです。
5、については、GD-ROMの信号線を解析してうまくPCにつなげれば、不可能ではありません。
DreamCastの中を見ると、GD-ROMにはOTI-9220というチップが使われています。インターネットでメーカーサイトを検索してみると(便利な時代だな)、このチップは、CD-ROMコントローラ、IDE/ATAPIインターフェイスコントローラ、バッファRAM等をワンチップ化したもののようです。ということはIDE/ATAPI用の信号線が出ている可能性があります。
しかしながら、信号線の解析、仮に繋がったとしても、GD-ROMを読むための特殊なコマンドがあるのではないか?等、一筋縄ではいきそうにありません。
残ったのは6.の方法です。
とはいえ、ケーブルだけあっても何の役にも立ちません。
噂を聞いてケーブルを作ったものの、その後どうしたらいいかわからない、という人もいるのではないでしょうか?
このプログラムに相当するのが「DreamRip」です。
DreamCastで自作プログラムを動かす方法については、解析が進み、すでに確立しています。
インターネット上でDC用のエミュレータ、MP3プレイヤー、ムービープレイヤーなど、様々な自作プログラムが公開されているのは、ご存知のとおりです。
「GD-ROMを読み出して転送するプログラム」というのは(少なくともエミュレータの製作に比べれば)比較的簡単なプログラムなので、吸出し方法が長い間「謎」とされていたことのほうが、むしろ謎です。
MIL CDは、通常の音楽CDとして(ゲームショップでなく)CDショップで売られています。
しかし、DreamCastで起動すると、ビデオクリップが見られたり、インターネットでアーチストの公式サイトを見られたりといった「おまけ」のついたCDの一種です。
一年半ほど前にゲーム情報誌に取り上げられたりしたので、覚えている人もいるかもしれません。結局、利用しているCDはあまりないようです。
プレスリリース: http://www.sega.co.jp/sega/corp/news/nr990423_3.html
MIL CDホームページ: http://www.sega.co.jp/milcd/
ここでポイントになるのは、「CDをDreamCastで起動する」という部分です。 つまり、DCにはもともとCD-ROMを動かす仕組みがあるので、MIL-CDと同じ形式でCD-ROMを作成すれば、DCで動作させることができることになります。
なお、ごく最近発売された、「MIL CD非対応」と箱に書かれた本体にはこの仕組みがなく、MIL CDを動かすことはできません。したがって、自作のCD-Rを動かすこともできません。
さて、このMIL-CDですが、CD-Extra規格に従った形式になっています。 CD-Extra規格では、セッション1が通常のCD-DA(音楽トラック)、セッション2がCD-ROM Mode2 Form1形式のデータトラックになっています。これにより、通常のCDプレイヤーでは最初のセッションしか認識しないので音楽CDとして使え、パソコンでセッション2がCD-ROMとして見えることになります。
通常のCD-ROMでは、データトラックの先頭16セクタは未使用になっています。GD-ROMやMIL-CDでは、この部分にDreamCast用の起動コード(初期化コード)が書き込まれています。(ちなみに、PlayStationのCDも同様に先頭16セクタを利用しています)
一般的なライティングソフトでは、先頭16セクタに書き込むことはできないので、一度イメージを作ってから、イメージの先頭16セクタを書き換え、改めてイメージからCD-Rに焼きこむことになります。
この場合、
1. 適当なサウンドでセッション1をAudio CDとして焼きこむ。ただしクローズはしない。
2. 1.のCD-Rへの追記形式として、データトラックのイメージを作成する
3. イメージの先頭16セクタを書き換える
4. イメージをCD-Rに追記する
という流れになります。
1. はたいていのライティングソフトでできるのですが、2. の作業で、「追記形式でイメージを作成する」機能のあるライティングソフトが必要になります。NEROではこれができないようです。Easy CD PROではできますが、イメージ作成時に8.3形式(ISO Level 1)のファイル名しか使えないので、それ以上の長さのファイルがある場合は使用できません。
他のライティングソフトについてはよく知らないのですが、unixから移植されたコマンドラインのライティングソフトである、mkisofs/cdrecordを使えば、これができます。4はcdrecordやCDRWINでできます。
裏返してみるとすぐわかりますが、GD-ROMは2つの部分に分かれています。
内側は通常のCD-ROMと同じで、「これはドリームキャスト用の〜」という音声トラックと、データトラックがあります。パソコンのCD-ROMドライブに入れると、このCD-ROM部分が読めますが、小さいテキストしか入っていません。
外側が重要なGD-ROM部分です。これは特殊な高密度フォーマットで、パソコンのCD-ROMドライブでは読めません。
実際にGD-ROM部分をDreamCastで読んでみると、トラックやセクタの形式はCD-ROMと全く同一です。
市販のDreamCast用ソフトには2つのパターンがあるようです。
ISO MODE1 level2の形式でファイルが格納されています。 実際に使用している部分が少しでも、必ず約1Gバイトのトラックになっています。 未使用部分は0で埋められていて、使用部分はトラックの先頭と最後(外周部)にくるようになっています。
データトラック 音楽トラック 音楽トラック . . . 音楽トラック データトラックのように、最初と最後にデータトラックがあります。
音楽トラックはCD-DAと全く同じ形式で記録されています。つまり、44100hzの16ビットステレオPCMです。
前述したように、DreamCast自体にはCD-ROMを動かす仕組みがあるので、「プロテクトをはずしている」わけではなく、「形式を変換している」だけであることに注意してください。
たとえて言えば、MachintoshではMacフォーマットのフロッピーとMS-DOS(FAT)フォーマットのフロッピーを両方読むことができますが、PCではMS-DOSフォーマットのフロッピーしか読むことができません。この場合、PCでMS-DOSフォーマットで保存すれば、MACでも読めます。ここで、Macintosh = DreamCast、Macフォーマット = GD、MS-DOSフォーマット = CD と理解してください。
とはいうものの、変換の際にいくつか注意する点があります。
CD-ROMが最大650MBであるのに対し、GD-ROMは最大1GB(1000MB)の容量があります。 GD-ROMが650MB以上使用されていれば、CD-ROMに収まるように何らかの対策が必要です。
数十M程度の容量不足であれば、80分メディアを使うことができます。 手元に99分対応のドライブがないので、DreamCastが99分メディアを読むことができるのかどうか、確認できていません。(99分メディアでも動作するという報告がありました)
DPxxx(DPWWW,DPTEX等)のディレクトリは、ソフト内臓のインターネット接続機能で使われているようです。また、2_DP.BINはインターネット接続ソフトです。これらは削除してもゲーム本体の進行には影響ありません。もちろん、インターネット接続機能は利用できなくなります。
イベントシーンでムービーが入るような、ムービーが大量にあるゲームで利用できます。まず、タイトルロゴ等のサイズが小さいムービーを探します。次に、サイズの大きいムービーを探して、小さいムービーで上書きします。これを、全体のサイズがCD-ROMに入る容量になるまで繰り返します。
エクスプローラで作業する場合、
また、公式の開発キットがあれば、画質(音質)を下げて再圧縮すればサイズが小さくなるので焼ける、という報告もありますが、一般的には入手できないでしょう。
GD-ROMの先頭16セクタ(以下IP.BIN)には、GD-ROM用の初期化コードが入っているので、CD-ROM(CD-Extra)用の初期化コードに変更する必要があります。
ちなみに、これをCD-ROM MODE1用の初期化コードにして、CD-ROM MODE1形式のCDに入れ替えて改めて読むようにしたものが、いわゆる"boot cd"です。
さてこのCD-ROM用の初期化コードですが、
一般的なDCソフトでは、データトラックが特定の位置(GD-ROM部分の先頭)から始まっているという前提でプログラムが作られています。
CDに焼くと、データトラックの位置がずれてしまうので、プログラム中の位置情報を修正する必要があります。ゲームプログラム(通常1ST_READ.BIN)がさらに別のプログラム(例えばインターネット接続やミニゲーム等)を呼び出している場合、そちらも修正する必要があります。
なお、ゲームプログラムは1ST_READ.BINというファイル名とは限りません。これはIP.BINの先頭部分に書かれています。
1ST_READ.BIN ゲームプログラム 2_DP.BIN ドリームパスポート SG_DPLDR.BIN ドリームパスポートをロードするもの? WC_DPLDR.BIN MAIGO ドリームパスポートからメインに戻るもの?既存の修正プログラム(binhack等)では、修正が不完全だったり、1ST_READ.BINしか修正できなかったりするので、簡単な修正プログラムを用意しました。
hack 1ST_READ.BIN 11700のように使います。最後の数字は、セッション2の開始セクタです。(省略時は11700) これは、cdrecordで調べることができます。
hack 1ST_READ.BIN 0なお、セッション1の大きさを調整して、セッション2がGDと同じ位置(45000セクタ)から開始するようにすれば、この作業は必要ありません。
mktmp audio.raw 79027200
材料:
DreamCastのSERIAL端子からはシリアル信号がそのまま出ています。ただし、3.3VのCMOSレベルなので、PCのシリアルコネクタに接続するには、12VのRS-232Cレベルに変換する必要があります。
DreamCast側のコネクタには、NeoGeoPokect-DreamCastの通信ケーブル(以下NGP-PCケーブル)を利用します。 このケーブルは真中に箱があり、改造部分をこの箱に入れられるので便利です。 ちなみに、NeoGeoPocket-DreamCast通信ケーブルはDreamCastの周辺機器ではなくNeoGeoPocketの周辺機器なので、売り場を間違えないようにしましょう。
基本的に必要なのはコネクタ部分だけなので、DreamCast用通信ケーブルも利用できると思いますが、入手困難のため確認できていません。DreamCast用のMIDIケーブルは結線されていないピンがあり、ピンの植え替えが面倒です。 海外では、RGBケーブルのコネクタを削ってシリアル用のコネクタを作っている人もいます(http://dcgrendel.8k.com/dreamcast/)。
DreamCastのSERIAL端子は以下のような配列になっています。NGP-DCケーブルの箱を介さずに製作する場合はこれを参考にしてください。
1 2 3 4 5 6 7 8 9 10 5V GND RX2 TX2 RTS CTS 3.3V
シリアルの電圧を変換するチップは、RS-232CレベルコンバータとかRS-232Cトランシーバ/レシーバとか呼ばれています。 MarcusのページではMAX3222CPNというチップを使用していますが、ADM232やSP232等の他のチップも使えます。このチップは秋月電子(http://www.akizuki.ne.jp/)で入手できます。
他のチップを使う場合は、3.3V駆動のチップはDC側10ピン(NGP-DCケーブルを使う場合は基盤のD1)から、5V駆動のチップはDC側1ピン(NGP-DCケーブルでは赤)から電源を取ります。
まず、NGP-DCケーブルのまんなかにある箱を開けます。隙間にマイナスドライバーを入れてこじればすぐに開くと思います。あけると基盤が出てきます。基盤には、幅の広いコネクタ(CON2)と、幅の狭いコネクタ(CON1)があります。CON2側は、5Vを取る場合を除いて、手を加えません。CON2側のコネクタと、NeoGeoPocket側のケーブルの間に、電圧変換用のチップとコンデンサをはさみます。
裏
次に、NeoGeoPocket側のコネクタを切り、ここにPCにつなぐDSUB9ピンコネクタを付けます。
この回路ではストレートケーブルになるので、クロスケーブルをはさんでPCにつなぎます。
あらかじめクロスケーブルにしてPCに直結できるようにするには、DSUB9ピンメスのコネクタを使用して、回路図のDSUB9ピンの2と3、7と8をそれぞれ逆にします。
serial-slaveは、自作ソフトをシリアルケーブル経由でDreamCastに転送して実行するためのDreamCast用のソフトです。これをCD-Rに焼いて、DreamCastで動かします。 自作ソフトを直接CD-Rに焼いて動かすこともできますが、ここでは説明しません。
serial-slaveは http://mc.pp.se/dc/serslave.htmlで公開されています。
serial-slaveのページに、各種ライティングソフト用のイメージが公開されているページへのリンクがあるので、手っ取り早く試したい人はこれを利用することもできます。しかし、GD-ROMから吸い出したデータをCD-Rに焼くには自分でイメージを作成する必要があるので、ここで経験しておくことを薦めます。
ここでは、フリーのライティング/イメージ作成ソフトであるcdrecordとmkisofsを使って説明します。
CDrecord:
http://www.fokus.gmd.de/research/cc/glone/employees/joerg.schilling/private/cdrecord.html
Windows版の実行ファイル:
ftp://ftp.fokus.gmd.de/pub/unix/cdrecord/alpha/win32/
なお、cdrecordの実行には、ASPIが必要です。ASPIはライティングソフトやAdaptecのソフトやSCSIカードに付属しています。Windows95/98ではOSに付属しているので、改めてインストールする必要はありません。
cdrecord -scanbusCD-Rドライブがが何番に割り当てられているか確認します。
第一セッションには、何でもいいので音楽ファイルを用意します。 CDの規格上、4秒以上の長さが必要です。CDでは1秒あたり75セクタで、1セクタ2352バイトなので、4秒のファイルは705600バイトになります。
4秒の無音(全て0)のファイルを用意するには、mktmpを使って
mktmp audio.raw 705600とします。mktmpはhack.lzhに入っています。
cdrecord dev=0,0,0 -speed=4 -multi -audio audio.rawここで、dev=0,0,0の部分は、最初に確認したCD-Rドライブの番号です(以下同じ)。audio.rawは音楽として焼くファイルです。wav形式のファイルも利用できます。-speed=4の部分は焼きこむ速度で、省略すると1倍速になります。
cdrecord dev=0,0,0 -msinfo第1セッションがどこまで使われているか確認します。0,11700と表示されたら、11700セクタまで使われています。
mkisofs -l -C 0,11700 -o serslave.iso READ_ME.TXT-Cのあとの数字は、cdrecordで確認した数字です。-lは小文字のLです。 これで、READ_ME.TXTだけのisoイメージが作成できます。
ippatch serslave.iso ip.bin作成したイメージの先頭部分を、serial-slaveと差し替えます。ippatchはhack.lzhに入っています。
cdrecord dev=0,0,0 -speed=4 -xa1 serslave.isoイメージを実際にCD-Rに焼きます。
焼けたCD-RをDreamCast実機で起動します。うまく焼けていれば、SEGAのロゴが出た後、画面の周りが青に変わってとまります。TVによっては、画面の周りは表示されないかもしれません。
TeraTerm: http://hp.vector.co.jp/authors/VA002416/teraterm.html
ボーレート: 57600bps データ: 8bit パリティ: なし ストップ: 1bit フロー制御: ハードウェア 送信改行コード: CR+LFに設定します。
ボーレート等の設定は、teratermでは [Setup]-[Serial port]で設定します。 ハイパーターミナルでは、[ファイル]-[新しい接続]の「ポートの設定」で設定します。
送信改行コードを設定するには、 teratermでは、[Setup]-[Terminal]で[New-line]の「Transmit」で「CR+LF」を選択します。 ハイパーターミナルでは、[ファイル]-[プロパティ]-[設定]-[ASCII設定]で、[ASCIIの送信]の「行末に改行文字を付ける」をチェックします。
>と表示されたら、ちゃんと動いてます。
通信ソフトで"dreamrip.srec" を送信します。
teratermだと[file]-[Send file]、ハイパーターミナルだと[転送]-[テキストファイルの送信]です。
"please set 115k and hit 'o''k'"と表示されたら、ボーレートを115200にして 'o'と'k'のキーを順に押します。
file: track03.iso.gz track=03 start sector=45150 size=nnnnnとか表示されたら、XMODEM/1kでダウンロードします。
TeraTermでは、'o''k'を押す前に[control][macro]で、dcrip.ttlを実行しておけば、ファイル名の入力を自動的にしてくれます。
1Gbyte目いっぱい使ってるとすると、115200bpsの場合、 bpsはbit per secondつまり秒間115200bitを意味します。1byteは8bitですが、転送の際にstart bitとstop bitが1bitずつつくので10bitになり、115200/10 = 秒間11520byteです。
1Gbyteは1,000,000,000byteなので、1,000,000,000 / 11520 = 86805(秒) = 1466(分) = 24(時間) = まる1日かかります。
てなわけで寝ます。
吸い出した直後のデータは、gzip形式で圧縮されています。これをgzip形式に対応した展開ソフトで展開します。
DreamCastのソフトは、データのみの場合と、データと音楽が入っているものがあります。Dreamripでは、データはtrack03.iso.gz、音楽はtrack04.raw.gzのようなファイル名になります。
次に、解凍したデータトラックのトラックイメージを個々のファイルに分解します。
例えば、c:\dctoolに変換ツールがあって、c:\imageに解凍したtrack03.isoがあり、これをc:\dataに分解するとします。
コマンドプロンプトを開く
C:\>c:\dataに移動
C:\>cd c:\data C:\data>分解
C:\data>C:\dctool\extract c:\image\track03.iso
現在のディレクトリ(ここではC:\data)に、個々のファイルが作られます。 最初に
C:\>PATH C:\dctool;%path%のようにすると、コマンドごとに毎回 C:\dctool をつけなくてもよくなります。これを"PATHを通す"とか"PATHが通っている"といいます。さっきの例だと
分解
C:\data>extract c:\image\track03.iso
のようになります。
ソフトによっては、2つのデータトラックが存在するものがあります。 この場合、
C:\data>extract c:\image\track03.iso c:\image\trackxx.iso 123456のようにします。最後の数字は、2番目のイメージの開始セクタです。 ダウンロード時に通信ソフトに表示される
file = trackxx.iso.gz track=xx start sector=123456 size=nnnnnのstart sector=の部分です。
extractはイメージの使用部分しか展開しないので、イメージが1Gでも展開後のファイルの合計は数100Mにしかならないこともあります。
音楽トラックは"trackxx.raw"という名前になります。 通常、音楽トラックの末尾には2秒(150セクタ)の無音が入ります。
raw2wav track04.rawとか
raw2wav *.rawで、末尾の無音を削除して、wav形式に変換します。
hack 1ST_READ.BIN 0で、プログラム中の開始位置を0にします。必要であればその他のプログラムもhackします。ただし、boot cdは必ず1ST_READ.BINを実行するので、プログラム名が異なる場合は、1ST_READ.BINにファイル名を変更します。
あとは、容量を確認/調整した後、一般的なライティングソフトでCD-ROM MODE1 level2で焼きます。
selfboot(そのまま起動するCD)にする手順は、serial-slaveを焼く手順とほぼ同じです。
cdrecord -scanbusCD-Rドライブがが何番に割り当てられているか確認します。
第一セッションには、何でもいいので音楽ファイルを用意します。 CDの規格上、4秒以上の長さが必要です。CDでは1秒あたり75セクタで、1セクタ2352バイトなので、4秒のファイルは705600バイトになります。
4秒の無音(全て0)のファイルを用意するには、mktmpを使って
mktmp audio.raw 705600とします。
ここで、ファイルの長さを79027200バイトまたは79022496バイトにしておけば、後で開始位置を調整する作業が不要になります。
また、CD-Rの容量を越えないようにできるだけ大きくしておけば、第2セッションのデータ部分が外周寄りになり、アクセスが高速化されます。
cdrecord dev=0,0,0 -speed=4 -multi -audio audio.raw
cdrecord dev=0,0,0 -msinfo第1セッションがどこまで使われているか確認します。0,11700と表示されたら、11700セクタまで使われています。開始位置の調整をしない場合は、0,45000になっていることを確認します。
hack 1ST_READ.BIN 11700最後の数字は、cdrecordで確認した数字の二番目の数です。必要であればその他のプログラムにもhackします。
第一セッションが0,45000セクタの場合は、この作業は必要ありません。
http://www.dcisos.de/等にある「Dreamcast SelfBoot Tutorial」(e-delfbt.zip)の中にあるbinhackというソフトは、「初期化コードの用意」と「開始位置の調整」をしてくれます。このソフトを使う場合は
binhackを実行して
IP.BIN/1ST_READ.BIN Self-Boot Hacker - Echelon 2000 Enter name of binary: 1ST_READ.BIN Enter name of bootsector: IP.BIN Enter msinfo value: 11700 File 1ST_READ.BIN successfully hacked. File IP.BIN successfully created.太字が入力する部分です。 1ST_READ.BINとIP.BINは吸い出して展開したものです。 ただし、binhackは不完全なことがあるので、念のためもうhackも併用したほうがいいでしょう。
mkisofs -l -C 0,11700 -o data.iso c:\data-Cのあとの数字は、cdrecordで確認した数字です。-lは小文字のLです。 -oのあとの"data.iso"は生成するイメージのファイル名です。最後のc:\dataは、extractしたファイルのあるディレクトリです。
ippatch data.iso ip.bin作成したイメージの先頭部分を、用意したIP.BINと差し替えます。ippatchはhack.lzhに入っています。
cdrecord dev=0,0,0 -speed=4 -xa1 serslave.isoイメージを実際にCD-Rに焼きます。
日本の著作権法では、個人的に又は家庭内その他これに準ずる限られた範囲内において使用する場合(私的使用)に限り、複製を認めています。また、プログラムの場合、電子計算機で動作するように翻案(改変)することも認められています。 しかし、レンタルしたものを複製したり、複製/改変したものを配布したりする行為は禁じられていますので、ご注意ください。
Console/Emulator Programming
http://www.geocities.co.jp/Playtown/2004/
で公開されています。