試運転の資料館
玄関 総合案内 電算機部 営繕部 交通部 リンク

This web site is only compatible with Japanese text.

IEEE1284 経由でバックアップ


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

なんと、ドリームキャストのシリアルポートと、PC の IEEE1284 規格に準じたパラレルポートを繋げて吸い出すという物で、ゲームを 2 時間半で吸いだせるというスグレモノです。

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


条件

  • 使用するマシンは、AT 互換機である事。
  • OS は Win98 などの 9x である事。
  • PC のマザーボードにパラレルポートが付いている事。
  • パラレルポートは EPP mode またはBPP ( Bi-directional ) mode が使用可能な事。ただし、これらをサポートしていても問題が発生する場合がある。
  • DC は MILCD 対応型である事。

吸出し

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

ハード制作上のポイント

  1. 信号線は GND との対撚り線にする。その時、割合は 1 対 1 にする。
  2. GND は、出来たら太くする。
  3. 配線は極力短くし、なるべく配線の長さを揃える。
  4. ダンピング抵抗は必ずつける。
  5. ダンピング抵抗とプルアップ抵抗の値は、PC に合わせて調整する。
  6. プルアップ抵抗は、全てに付ける方が良いが、特に STB にはつける。
  7. ついでなので、電源の 1Φ 100V の接地側、非接地側の向きを合わせる。

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を吸い出す

Win9x でのみ動く、その理由

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

> 動作OS はプリンターポートを直接たたく都合で Win9x系のみです。
> (giveIO のよう物もありますが物凄く遅くなりそうなのでNT系は
> 諦めました)

Windows マシンでは通常、デバイスドライバを介してハードを操作します。

このデバイスドライバがとても厄介で、Win9x 系では 16bit のコードで書いて良かったのですが NT 系では完全に 32bit で書かなくてはならず、その上、Win2k以降は WDM でないといけないので、ドライバが肥大化して遅くなってしまうのです。

そのような理由があって、Win9x 系のみの対応のようです。


抵抗は何の為にあるのか ? 

作者のチャオ様曰く、100ohm の抵抗はグランドバウンス対策、1.5Kohm はプルアップ抵抗だそうです。

グランドバウンスというのは、グラウンドの電位が変動して機器類が誤作動する現象の事です。高速になるほど、突入電流が大きいほど、対策の必要性が大きくなります。50ohm から 200ohm の間で最適な値を求める必要があります。

プルアップというのは、電位 ( 電気的な位置エネルギー ) を高い状態で維持しておくのが、目的のようです。チャオ様は特に STB にはつける事を推奨しています。理由はオープンコレクタ信号だから、です。 ( 単なるスイッチみたいな物ですから当たり前ですね !  ) 


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

不具合が起きた時、ドライバを止めれば OK ! という時もあれば、どうにも対処不可能という時もある、との事。詳しく話を聞くと、不具合が起きた機器では、「I/O の範囲」が 2 つ表示されるという現象が確認される事が多いようです。

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

不具合が起きる原因や、なぜ「I/O の範囲」が複数表示されるのか調べてみました。結論としては、パラレルポートの動作モードに関して、不整合が起きている事が原因のようです。以下に、調べた内容を書きます。

パラレルポートの規格である IEEE1284 は元々、1980 年代に業界標準として普及していたセントロニクス仕様がベースとなっていて、規格策定時に存在したいくつかの拡張仕様も取り込まれる事で、複数の動作モードを持っている事が分かります。

動作モードは 5 種類ほど規定されていて、セントロニクス仕様とほぼ同一の SPP ( または互換モード ) 、ニブルモード、バイトモード ( 俗に PS/2 モードとも ) 、EPP モード、ECP モードがあり、このうち EPP モード、ECP モードについては通信プロトコルについても定義されています。

さらに調べてみると、比較的新しい PC では ECP モードを持ちながらも SPP モードやバイトモード、EPP モードをエミュレーションする機能を持っていて、これが「I/O の範囲」が 2 つ表示される原因のようです。

このような PC では、必要に応じて各動作モードを 0x77a の上位 3 ビットを使って切替える必要があるのですが、DCPPRIP 側で切替に関する部分を持っていないか、若しくは PC 側で切替に失敗しているのが原因となって不具合が起きるようです。 ( このような PC でも、デフォルト設定の動作モードが DCPPRIP に適合していれば、動くかもしれません ) 


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

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

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

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

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

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

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

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

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

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


あとがき

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

あれから数年後、今度は SD カードを用いた吸出し法が開発されましたので今更 DCPPRIP を使おう、という方はいらっしゃらないと思いますが歴史的意義を考慮してここに残します。


indexへ戻る

Copyright (C) 2016 "shiunten"