Japanese text only

素敵な DCPPRIP の使い方

ある時、何気なくググっているとすごいソフトを発見。
JJ1ODM のチャオ様開発の、DCPPRIP です!

なんと、DC のシリアルポートと、PC のパラレルポートを繋げて吸い出す
という物で、ゲームを 2 時間半で吸いだせるというスグレモノです。

今回は、それの紹介記事です。

マニュアル編

条件

吸出し

  1. まずは、DCPPRIP をココから DL してください。
  2. ファイルは、C:¥dcrip に置いてください。
  3. 回路図は、DCPPRIP を DL したサイトに掲載されています。
    注意!
    パラレルポートとシリアルポートをつなげる時、一番最初に
    DC の電源を最初に入れてからつながないと、DC が起動しない。
  4. dcpprip¥dc ディレクトリのツールを焼いて DC で起動してください。
    焼き方は、検索すれば分かります。
  5. 準備が整ったら、いよいよ吸出しです。
    MS-DOS プロンプトを起動。[スタート]-[プログラム]-[MS-DOSプロンプト]
  6. 起動後、

    C:¥Windows>

    と出るので、
     
  7. C:¥Windows>cd C:¥dcrip

    と打ち、Enter を押してください。
  8. GD-ROM を吸出す時は

    C:¥dcrip>dcpprip

    これで大丈夫です。

ハード制作上のポイント

a. 信号線は GND との対撚り線にする。その時、割合は 1 対 1 にする。
b. GND は、出来たら太くする。
c. 配線は極力短くし、なるべく配線の長さを揃える。
d. ダンピング抵抗は必ずつける。
e. ダンピング抵抗とプルアップ抵抗の値は、PC に合わせて調整する。
f. プルアップ抵抗は、全てに付ける方が良いが、特に STB にはつける。
g. ついでなので、商用電源の向きを合わせる。

dcpprip コマンド集

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 の生みの親であるチャオさんによれば、手軽に早く吸い出す事を
目標に作られたそうですが...。

なぜこんなにシビアなのでしょう?
どうせなので、一緒にその疑問を解いていきましょう。

(素人が書いてるので鵜呑みしないように。)

Win9x でのみ動く、その理由

作者のチャオ様曰く、次のように述べられています。


> 動作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 にはつける事を推奨しています。
理由はオープンコレクタ信号だから、だそうです。

PC のパラレルポートが、ご機嫌斜めで通信できない件。

不安定な時、ドライバを止めれば OK!という時もあれば、
実装の仕方が違う為なので、対処不可能という時もあるとの事。
そんなに違うものなのかと筆者は思ったのですが、実はある落とし穴が
あるのです。

よく、xx 準拠って書いてあると思いますが、この「準拠」という
のが曲者で、意味は真似て作っただけよ、という意味です。
つまり、本来あるはずの信号が省略されていても
信号が規格に合致しておらず基準以下の精度でも、
bios 等の実装がカスでも「準拠」になります。
そのため、万一うまく行かなくても文句は言えません。

一般に売られている PC は、どの規格にも大体「準拠」です。
「相性が悪い」といわれるのは、準拠であるが為に起こる現象です。
とても面倒です。

これら以外に通信が不安定な機器では、
「I/O の範囲」が2つ表示されるという現象が確認されています。

I/O の範囲 0378 - 037F
I/O の範囲 0778 - 077F

調べてみると、これは BIOS の設定で「EPP/ECP モード」というのが
ある時、それが実際には単なる ECP モードだ、という時の現象のようです。

詳しく書くと、ECP モードはいくつか切り替えが可能で、
0x77a の上位 3 ビットを使って切り替えています。
その中には、EPP をエミュレートするモードがあるので、
それが原因となってしまってしるようです。

こうなると諦めるしかないようです。

なんで dcpprip はコケやすいのか?

チャオ様から、その理由を教えていただきました。

先程のダンピング抵抗とかぶるのですが、ひとつは、SH4 の信号をそのまま
使っているという事。実は DC のシリアルポートというのは、SH4 の
SCI インターフェースをそのまま使っているらしいです。

SH4のみならず殆どの CPU では、信号線の種類は基本的に 1 種類しかなくて、
それを相手に合わせてウェイトをかけて調整しているんだそうです。

勘の良い人はお気づきになると思いますが、
メインメモリとのやりとりも、同じところで扱っています。

つまり、管理が大変難しいんですね。
管理に失敗するとそれこそ、玉突き事故になってします。

もうひとつはパラレルポートの波形です。
パラレルポートは、本来はプリンターと繋ぐものです。(当たり前)
間違っても SH4 のようなデリケートな物と繋ぐ事なんて考えていません。
なので、パラレルポートの品質はピンからキリまであり、品質がよければ
かなり綺麗なんですが、手抜きしているとそれはもう、汚いです。

これを SH4 でも受け付ける信号にするには CPLD を使って回路を
組まないといけないそうです。

また、供給されているクロック周波数の違いにより、
コケやすくなっているようです。



どうですか?なんだか難しそうだと思いません?

これら全てを考えながら作られているのが DCPPRIP です。
あまりに無理なお願いするのは止しましょうね



編集後記

DCPPRIP が開発されたのは、2005 年 10 月の事でありますが、
当時、まさか新しい吸出し法が開発されるとは!!と、驚いていました。

あれから 2 年以上が経ちましたが、今、チャオ様は壮大な
プロジェクトを行われています。

それは、BBA のクローンを作るというもので、現在は PCI バス
周りの配線がひと段落した段階だそうです。
まだ、ping などに反応しないとの事で、苦労されているようです。

これは並大抵の技術で出来るものではありません。
相当高い技術をお持ちであるからこそ、挑戦できるんでしょうね。

BBA クローン開発の成功を祈って、編集後記とさせていただきます。

Copyright (C) 試運転