Japanese text only
ある時、何気なくググっているとすごいソフトを発見。
JJ1ODM のチャオ様開発の、DCPPRIP です!
なんと、DC のシリアルポートと、PC のパラレルポートを繋げて吸い出す
という物で、ゲームを 2 時間半で吸いだせるというスグレモノです。
今回は、それの紹介記事です。
a. 信号線は GND との対撚り線にする。その時、割合は 1 対 1 にする。
b. GND は、出来たら太くする。
c. 配線は極力短くし、なるべく配線の長さを揃える。
d. ダンピング抵抗は必ずつける。
e. ダンピング抵抗とプルアップ抵抗の値は、PC に合わせて調整する。
f. プルアップ抵抗は、全てに付ける方が良いが、特に STB にはつける。
g. ついでなので、商用電源の向きを合わせる。
dcpprip コマンド集 | |
---|---|
コマンド | 説明 |
dcpprip | GD-ROM をすべて吸い出す。 |
dcpprip -i | 導通試験 |
dcpprip -t | TOC を調べる |
dcpprip -t x | GD-ROM の x トラックを吸い出す。 |
dcpprip -h | ヘルプ |
dcpprip -m 0,0x200000 bios.bin | BIOSを吸い出す |
dcpprip -m 0x200000,0x20000 flash.bin | Flashを吸い出す |
というか、単にログをまとめただけです。
まずは、DKさん(ID:M2jYzAbA)の場合 使用したPC: FUJITSU FMV C4/665 OS: Win98SE CPU: PentiumV667M メモリ: 64MB チップセット: Intel 810E BIOS: ? parallel port: セントロニクス準拠 D-SUB25 ピンx1 (ECP/EPP対応) 設定は EPP 使用したDC: ? 使用したゲーム: SOULCALIBUR 719M 120分 REVIVE 660M 100分 使用した回路: 必要な回路に、74HC4066 を追加して起動時にリセット 出来るようにした物。 -iで応答なしのマシンもあったとの事。 お次は、丸チャンさん (ID:xiuqXhow) の場合 使用したPC: FUJITSU FMV OS: WinME CPU: PentiumU 266MHz メモリ: ? チップセット: Intel 440LX BIOS: ? parallel port: セントロニクス準拠 D-SUB25 ピンx1 (ECP/EPP対応) 設定は? 使用したDC: ? 使用したゲーム: Dream Passport 2 セガラリー2 使用した回路: 基本になる回路 ↑これは吸出しに成功。 使用したPC: TOSHIBA Dynabook2540 OS: Win98 CPU: AMD-K6 333MHz メモリ: ? チップセット: ? BIOS: ? parallel port: パラレル(セントロニクス、25ピンD-sub ECP対応)x1 設定は? 使用したDC: ? 使用したゲーム: Dream Passport 2 セガラリー2 使用した回路: 基本になる回路 ↑これはとても不安定だとの事。 そして最後に、筆者の実験結果 使用したPC: 日電 VALUESTAR NX VU45L15A OS: Win98SE OEM CPU: K6-2 450M メモリ: 128M チップセット: SiS 530 BIOS: AMI ER520 ver00.01.24J parallel port: EPP/ECP 互換?設定はEPP 使用したDC: 後期型。ピックアップのみ前期型からの移植。 (韓国産のピックアップ、やたらと死亡するのは 何故...?既に経年劣化で3個ぐらい死亡。) 使用したゲーム: Dream Passport 3 (詳しいバージョンは分からず...) ラブひな スマイル・アゲイン 650M ちょうど、友人からパクったのがあったので。 使用した回路: 基本となる回路 ケーブルは対撚り線にしてある。 基本通りに 1:1 で撚ってある。 でもシールドはしてない。
結果は次の通り
1 回目
BIOS と Flash は吸い出せたが、GD-ROM は途中(450M 付近)でコケた。
-t オプションを使い、コケたトラックだけやり直そうとしたが、
結果は同じ。
2 回目
もしやと思い、OS を再インスコしてまた吸い出してみる。
しかし、何度やっても途中(250M 付近)でコケた。
3 回目
まさかとは思いつつ、今度は DP3 を吸い出してみる事に。
結果、2 時間半ほどで吸い出せた。
くやしいので前回のゲームを吸い出してみるが、またコケる。(450M付近)
だが、昔シリアルポートで吸い出せたのでリードエラーは無いはず。
ちなみに、この時 DC の電源を入れる前にケーブルを繋いでおいたのだが、
起動しなくてあせった。
4 回目
どうやら、DC 側に何かあるようなので、弄くりながら吸い出してみる。
結果、GD-ROM ドライブを前期型に変えてもまたコケる(850M 付近)
電源も、出っ張りのあるやつ、ないやつを変えてやってみたが
これは変化なし。
しかし、出っ張りのないやつをアナログテスターで調べてみると、
出力がふらふらしている。どうもある程度負荷がないと安定しないらしい。
負荷をある程度以上にするようにした方が良いのかも?
以上、人柱たちの記録でしたw
こうして記録を見てみると、なんだか要求される条件がシビアですね。
dcpprip の生みの親であるチャオさんによれば、手軽に早く吸い出す事を
目標に作られたそうですが...。
なぜこんなにシビアなのでしょう?
どうせなので、一緒にその疑問を解いていきましょう。
(素人が書いてるので鵜呑みしないように。)
作者のチャオ様曰く、次のように述べられています。
> 動作OS はプリンターポートを直接たたく都合で Win9x系のみです。
> (giveIO のよう物もありますが物凄く遅くなりそうなのでNT系は
> 諦めました)
Windows マシンでは普通、ハードを操作する時には win を介して
操作します。win を介せずにハードウェアを直に叩く事は、
本来は禁止されています。
(誤解されがちですが、MS-DOS も同じです。)
ですが、直に操作する事も不可能な訳ではないようで、実際 dcpprip も
直に操作しているようです。
直に操作すると機種依存(!)が絡んでやっかいになりますが、
昔は、速度を稼ぐ為に敢えてやる事がありました。
こう説明されると、WinXP をはじめとした NT 系でも動くんじゃないか?
と思いますよね?ところがそうは行きません。
最初、MicroSoft は BASIC を販売していました。
のちに IBM の依頼により、PC-DOS を製作します。
これが後に全世界で 1 億本販売された、MS-DOS です。
元々この MS-DOS というのは、現在主流の PC/AT 互換機のご先祖様に当たる
IBM PC ファミリ用に製作された物で、本来は同ファミリでなければ
動かす事はできませんが、かつては、同じ x86 アーキテクチャの CPU を
用いている NEC の PC-9800 シリーズ、富士通の FMR/TOWNS シリーズでも
各社、移植していました。 (共に販売終了)
今では Mac もそうですが、あれは BIOS ではなく EFI を用いているので、
MS-DOS を動かす事は、不可能か相当な困難がある事が予想されます。
この MS-DOS、保護機能だとかチェック機構だとかの類は
ほとんど実装されていませんでした。
(当時の技術ではそうせざるを得ませんでした。)
で、MS-DOS Ver3 の頃に初代 Windows が発売されます。
Mac や、NEC の PC-100 の影響で作られた、と言われています。
これと互換性を持たせて設計したのが 9x 系 Windows で、
その関係上、MS-DOS 時代のように直叩き出来る、というわけです。
一方、NT 系は Windows3.1 の頃に最初の WindowsNT 3.1
(DOS 系 Windows とバージョンを合わせてある) が発売されました。
この NT 系は、DOS との互換性を考えて作ってある為に固まりやすいと
言う欠点を持つ 9x 系 Windows に変わる新しい Windows として開発され、
MS-DOS を起源とする 16bit コードを削除しつつも、
保護機能やチェック機構が 9x 系より強化されています。
当初はどのアーキテクチャにも移植できるよう、設計されていました。
(但し、Win2000 以降は x86 系向けしか販売していません。)
つまり、9x 系はチェックが甘いからヤリ放題だが、NT 系はチェックが
厳しいから手を出す事は困難、という事です。
dcpprip のようなツールにとっては迷惑な話ですが、
安定性が良くなったり、機種依存性が低くなるので、
なんとも言えません。
身近な例で書くと、PS3 のゲームって PC じゃ遊べませんね?
その逆も出来ませんね?こういうのを機種依存といいます。
作者のチャオさん曰く、100ohm の抵抗はグランドバウンス対策、
1.5Kohm はプルアップ抵抗だそうです。
よく分からないのですが、グランドバウンス対策というのは
どうやら信号についている「トゲ」をとるのが目的のようです。
50ohm から 200ohm の間で最適な値を求める必要があります。
プルアップというのは、電位(電気的な位置エネルギー)を高い状態
で維持しておくのが、目的のようです。
チャオ様は特に STB にはつける事を推奨しています。
理由はオープンコレクタ信号だから、だそうです。
不安定な時、ドライバを止めれば OK!という時もあれば、
実装の仕方が違う為なので、対処不可能という時もあるとの事。
そんなに違うものなのかと筆者は思ったのですが、実はある落とし穴が
あるのです。
よく、xx 準拠って書いてあると思いますが、この「準拠」という
のが曲者で、意味は真似て作っただけよ、という意味です。
つまり、本来あるはずの信号が省略されていても
信号が規格に合致しておらず基準以下の精度でも、
bios 等の実装がカスでも「準拠」になります。
そのため、万一うまく行かなくても文句は言えません。
一般に売られている PC は、どの規格にも大体「準拠」です。
「相性が悪い」といわれるのは、準拠であるが為に起こる現象です。
とても面倒です。
これら以外に通信が不安定な機器では、
「I/O の範囲」が2つ表示されるという現象が確認されています。
I/O の範囲 0378 - 037F
I/O の範囲 0778 - 077F
調べてみると、これは BIOS の設定で「EPP/ECP モード」というのが
ある時、それが実際には単なる ECP モードだ、という時の現象のようです。
詳しく書くと、ECP モードはいくつか切り替えが可能で、
0x77a の上位 3 ビットを使って切り替えています。
その中には、EPP をエミュレートするモードがあるので、
それが原因となってしまってしるようです。
こうなると諦めるしかないようです。
チャオ様から、その理由を教えていただきました。
先程のダンピング抵抗とかぶるのですが、ひとつは、SH4 の信号をそのまま
使っているという事。実は DC のシリアルポートというのは、SH4 の
SCI インターフェースをそのまま使っているらしいです。
SH4のみならず殆どの CPU では、信号線の種類は基本的に 1 種類しかなくて、
それを相手に合わせてウェイトをかけて調整しているんだそうです。
勘の良い人はお気づきになると思いますが、
メインメモリとのやりとりも、同じところで扱っています。
つまり、管理が大変難しいんですね。
管理に失敗するとそれこそ、玉突き事故になってします。
もうひとつはパラレルポートの波形です。
パラレルポートは、本来はプリンターと繋ぐものです。(当たり前)
間違っても SH4 のようなデリケートな物と繋ぐ事なんて考えていません。
なので、パラレルポートの品質はピンからキリまであり、品質がよければ
かなり綺麗なんですが、手抜きしているとそれはもう、汚いです。
これを SH4 でも受け付ける信号にするには CPLD を使って回路を
組まないといけないそうです。
また、供給されているクロック周波数の違いにより、
コケやすくなっているようです。
どうですか?なんだか難しそうだと思いません?
これら全てを考えながら作られているのが DCPPRIP です。
あまりに無理なお願いするのは止しましょうね
DCPPRIP が開発されたのは、2005 年 10 月の事でありますが、
当時、まさか新しい吸出し法が開発されるとは!!と、驚いていました。
あれから 2 年以上が経ちましたが、今、チャオ様は壮大な
プロジェクトを行われています。
それは、BBA のクローンを作るというもので、現在は PCI バス
周りの配線がひと段落した段階だそうです。
まだ、ping などに反応しないとの事で、苦労されているようです。
これは並大抵の技術で出来るものではありません。
相当高い技術をお持ちであるからこそ、挑戦できるんでしょうね。
BBA クローン開発の成功を祈って、編集後記とさせていただきます。
Copyright (C) 試運転