-<□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□>- SCSI-TARGET IOCS SCSITAI.SYS ver 0.5* Produced 1996-1999,2022,2024 TNB製作所 Based.. SCSI-ROM SHARP TARGET.x COR.氏 ━━□ はじめに □━━ 本ソフトは、内蔵 SCSI 、SHARP SCSI ボード、SACOM SCSI ボードなどいわゆる SCSI-1 専用である。満開製作所 Mach-2 や SASI ポートしかない X68 では使用出 来ない(ただし、Mach-2 から SCSI-TARGET を使っている X68 にアクセスは出来 る)。 ver 0.50 より、ターゲット機能を使わないオプション(単純にバージョンの新 しい SCSI-IOCS にしたい場合など)、更に SCSI-HD を八個 X68000 に繋げられる シングルイニシエータモードも出来るようにした。 ━━□ SCSI、イニシエータとターゲット □━━ SCSI はご存じの通り、最大8個までの SCSI 機器を繋ぐことが出来る。普通は パソコン1台にHD等の SCSI 機器を(最大)7個繋いていると思う。この時、パ ソコンを『イニシエータ』、HDなどを『ターゲット』ととりあえず呼ぶことがで きる。『イニシエータ』とは命令を出す機器、『ターゲット』は命令に従い実行す る(データを返す)機器のことを言う。しかし、パソコンを『イニシエータ』、H Dなどを『ターゲット』を決めつけることは出来ない。 X68 で使われている SCSI の石は『イニシエータ』用と言うわけではない。同様 にHD等に入っている、SCSI の石も『ターゲット』用ではない。実は(性能の善 し悪し、メーカー違いはあるが)同じものなのだ。 そう、X68 も『ターゲット』になることが出来る、SCSI 機器なのである。 ━━□ target.x □━━ COR.氏作の target.x をご存じであろうか。このドライバはまさに、「X68 をタ ーゲットするため」のソフトであった。発表は 1993/10 。残念ながら、動作する 環境が限られていたと同時に、当時 X68 を2台所有しているものも少なく、余り 知られること無く眠ってしまったソフトになっている。 この target.x は、残念ながら、手前の環境でもほとんどまともに動かなかった。 原因を調べているうち、結局、全部やり直した方が速い(単に解析が苦手なせい)、 と言うわけで、今回のドライバを組み立てることにした。 target.x が従来(ROM)の SCSI-IOCS に寄生するのに対し、SCSI-TARGET IOCS (SCSITAI.SYS)はその名の通り SCSI-IOCS をすべてすげ替える。 ━━□ SCSI-TARGET IOCS(SCSITAI.SYS)は.. □━━ SCSITAI.SYS を登録することで、まず、アービトレーションがしっかりされる。 これで SCSI バスに2つ X68 を繋いでも問題無く SCSI アクセス出来るようにな る(補:必ず SCHDPAT.x のドキュメントを参照のこと!)。 更に、X68 など他のパソコンからのセレクションに対応するようになる。例えば、 他のパソコンが、INQUIRY 一覧を表示したら、本機の ID の所に、「Processor SHARP X68000」と表示されるのだ。X68000 が外部からの INQUIRY コマンドに対し 答えているのである。勿論、INQUIRY だけではない。HDと同じ SCSI COMMAND を すべてそろえれば、仮想 SCSI-HD となる(SCTRDISK.x のドキュメント参照)。 デフォルトの状態では、INQUIRY と READ , WRITE など、target.x で装備して いた SCSI COMMAND も一通り用意してある。更に、MEMPEEK , MEMPOKE , IOCSCALL と言う SCSI COMMAND を標準装備している。これは名前の通り、別の X68 から、 SCSITAI.SYS 登録機のメモリを読み出したり書き替えたり、IOCS を実行させたり 出来るものだ(ただし IOCS は SPC 割り込み内で実行されるため使用には注意が 必要である)。 SCSI COMMAND はユーザーが後から簡単に設定し登録することが可能になってい る。SCSI COMMAND は、0~255 有るのだが、このいくつかは SCSI 規格で定めら れているので、実際専用の用途で使って良いのは、$C0~$FF と考えて欲しい。更 に、こちらで設定した SCSI COMMAND もあるので、注意して欲しい。 また、LUN を使用して、最大8個までの別々の機器とすることも可能である。例 えば、LUN 0 は先に書いた仮想 SCSI-HD 。LUN 1 は仮想 CD-ROM(PCM を用いた音 楽専用など)、LUN 7 は PROCESSOR 、と言った具合に出来るのだ。 とにかく、自由に SCSI COMMAND を用意し、高速にデータのやり取りが可能にな るのである。本物の SCSI-HD も所詮コマンドを送りデータをやり取りするだけの 機械。X68 で出来ないわけがないのである。 なお、ターゲットとして動作する時は、SPC 割り込みでプログラムが動作する。 その時のターゲット側の X68 の動作によっては、SPC 割り込みが起きないことも ある(例えば割り込み禁止している場合など)。また、SPC 割り込みのため、その X68000 で実行しているソフトの速度が落ちることもありえる。 ━━□ 共存出来ないソフトなど.. □━━ こちらでは、動作確認をしていないソフトの使用、そしてそれが相性のよくない 物の存在の可能性がないとは言えないので、必ず、システムのバックアップを取っ てから、本ソフト SCSITAI.SYS を使用して欲しい。 SCSITAI.SYS は多少、今までとちがう SPC のモードで動いている。そのため、 従来の SCSI 関係のソフトと共存出来ないものもある。 例えば、HSCSI.x 。SPC アドレスを確認して独自のルーチンで SCSI を動作させ る物はおそらく動かない(アクセスランプがつきっぱなしになる可能性がある)。 おそらく、Filop.x もそうだろう。こういうのは改造するしかない。悪いのは実は 富士通なのだ(SPC のメーカー)。 また、TWOSCSI.x(ver 0.55 以降を使用のこと)と併用する場合、SCSITAI.SYS の対応 ID が極力、ST-SCSI(ID 0~7)になるようにセットして欲しい。SCSITAI.SYS を ST-SCSI、EX-SCSI の両方に登録するのには現在、完全対応していない・・・。 ━━□ X68 の SCSI のバグ.. □━━ これは単なる解析不足なのか設定不足なのか・・・。X680x0 の SCSI 搭載機に はなにやらおかしいところがある(SUPER 以降の機種のこと)。この SCSITAI.SYS は SPC 割り込み(内蔵なのでベクタ $6C だ)を多用している。この SPC 割り込 みが起きるタイミングで、SCSI 搭載機は希にベクタ $63の PRINTER READY が起き てしまうのだ(I・O ポートの SCSI は起きない)。これはどうしても直らない。 SCSITAI.SYS ではベクタ $63 の割り込みが起きても基本的にベクタ $6C(SPC 割 り込み)と同じ処理をするようにした。これで問題がほとんどでなくなった(もち ろんベクタ $63 の割り込みは発生してしまっている)。 この「おかしいもの」は個体差があるかも知れない。ある X68030 で出まくった が、他の機種では動いている、という話もある。 また、これは SCSI に限ることではないが、SPC 割り込みを多用するためか、ス プリアス割り込みも発生することがある。一応、これを回避する VCT18R.x 同梱し ておいた。他に対処するソフトがあるならそれを使って問題無い(やっていること は同じだ)。 ━━□ シングルイニシエータモード □━━ ver 0.50 から新しくシングルイニシエータモードを付けた。これはなにか? SCSI 規格で言う「シングルイニシエータ」というのは、簡単に言って、一つの SCSI バスにイニシエータが一つしかないという条件のもとで使用出来る、プロト コルのことである(これは、SCSI-1 の規格で SCSI-2 では必須ではなくなってい るので、SCSI 装置によってはこのシングルイニシエータモードが使用出来ない場 合もある。しかし、本来 SCSI は過去のプロトコルも問題無く動くように考慮され るべきでありシングルイニシエータに対応出来ないターゲットの方がなんなのであ る)。 シングルイニシエータで、且つ、アービトレーションを行わない場合、イニシエ ータの SCSI-ID というものに全く意味がなくなる。つまり、イニシエータの SCSI-ID と同じターゲット装置が合っても問題がないのだ。 本ソフトのシングルイニシエータモード、というのは、このシングルイニシエー タで、且つ、アービトレーションを行わない場合を指す。 このモードにするとなにが変わるか。それは、ターゲット装置が八個繋がるのだ。 つまり、X68000 と合わせて一つの SCSI バスに SCSI 装置が九個という面白いこ とが出来るのだ(X68000 に HDD や CD-ROM を八個という感じ)。 先にも書いた様に、SCSI-2 からシングルイニシエータに対応していなくても SCSI 規格にな為、ターゲット装置によっては使用出来ない可能性もあるわけだ。なので、 一度、FD 等でチェック専用に SCSITAI.SYS と INQUIRY を見ることの出来るソフト を用意して実験してみるのがいいだろう。そう、シングルイニシエータモードは各 ID 毎に、という分けにはいかないのだ。INQUIRY すら返さず固まってしまう装置 は残念ながらシングルイニシエータに対応していない(この実験で HDD の場合、 データが壊れることはまず無い)。 起動時は SCSITAI.SYS は登録されていない、つまり ROM の SCSI-IOCS が使わ れてしまう。その時、シングルイニシエータモードではないので、X68000 と同じ SCSI-ID が繋がっているのは問題がある。起動時は X68000 と同じ SCSI-ID の装 置の電源を切っておくか、FD 起動するか、あるいは TWOSCSI により Mach2 から 起動するなど、工夫が必要になる。また、SRAM の $ED0071 を $FF にしてしまっ ても起動出来はずだ(実は SCSITAI.SYS のシングルイニシエータモードは基本的 に SRAM の $ED0071 を $FF にしたのと同じだったりする)。 また、知られていないことだが、SxSI の SASIIOCS.SYS でも SCSI ターゲット 装置を八台付けられる。これはシングルイニシエータになっているからだ(そのせ いで、SCSI-2 の装置が繋がらない奴もあるはずだ。逆にこれを直せば動くかも知 れない)。 -<□■□ 登録 □■□>- 登録は CONFIG.SYS で行います。SCSI 起動の場合、起動後 SCSI-IOCS を交換す る形になります( COMMAND `E' を使用)。 [使用法] DEVICE = SCSITAI.SYS [COMMAND] [INQUIRY-NAME] [COMMAND] E ・・・・・ 強制登録。既に SCSI-IOCS が登録しても登録します。 「強制」と言っても危険な物ではありません。 M ・・・・・ イニシエータ動作時、データを CPU で転送します(DMA 使用をしないようになります)。通常は DMA で転送し ます。 L0~L7 ・イニシエータ動作時、指定の ID のみ I_T_L ネクサスし ます。 T0~T7 ・イニシエータ動作時、指定の ID のみ CPU(Command `M' を指定している場合、DMA)転送にします。 C ・・・・・ ターゲット動作時、データを CPU で転送します(DMA 使用をしないようになります)。通常は DMA で転送し ます。 S ・・・・・ SASI を併用します。SASI-HD や SASIIOCS.SYS で DMA を使うための処理を行うようになります。 I ・・・・・ I/O ポートの SCSI のみを対象にします。普通は、内蔵 SCSI を先に探しますが、「I」があれば、I/O ポートの SCSI ボードしかチェックしなくなります。 N ・・・・・ 内蔵 SCSIポートのみを対象にします。 A ・・・・・ ターゲット動作時の、データ転送時 TIMER-LED を点灯 するようにします。 U ・・・・・ ターゲット機能は使用しないようにします。つまり、本 ソフトを単純に拡張 SCSI-IOCS として使用出来ます。 V ・・・・・ シングルイニシエータモードにします。この時、ターゲッ ト機能は使用出来なくなります。また、アービトレーショ ンも行われないので、同じ SCSI バスに複数台イニシエ ータになりうる SCSI 装置を繋ぐことは出来ません。 D ・・・・・ Debug モード。「ひらかな」LED を点灯させておくと、 ターゲットの動作が表示されるようになります。 補足)イニシエータ動作時 普通の動作の時。例えばパソコンから HDにアクセスする時など。 補足)ターゲット動作時 外部から セレクトされ、SPC 割り込 みが発生し、動作する時のこと。 [INQUIRY-NAME] Inquiry の Product 名の後半の文字列を指定出来ます。八文字 までです。 EX1) DEVICE = SCSITAI.SYS EAT5D SCSI-IOCS を上書きし、ターゲット動作時の TIMER-LED を点灯し、Debug モードとする。イニシエータ動作時、 ID 5 に対しては、CPU 転送にする。 Inquiry は「X68000」になる。 EX2) DEVICE = SCSITAI.SYS ECMT1T2 つり1號 SCSI-IOCS を上書きし、ターゲット動作時、データは CPU により転送。イニシエータ動作時、ID 1,2 に対し ては、DMA 転送、他は CPU 転送にする。 Inquiry は「X68000 つり1號」になる。 EX3) DEVICE = TWOSCSI.x DEVICE = SCSITAI.SYS EA レイカ DEVICE = TWOSCSI.x EXG Mach2 と内蔵を併用の例。ブートは Mach2 接続の HDD。 起動後、SCSITAI.SYS を内蔵 SCSI に登録。している。 EX4) DEVICE = SCSITAI.SYS EV SCSI-IOCS を上書きし、ターゲット機能は使用せず、 シングルイニシエータモードにする。これで X68000 の ID に意味がなくなりID7にもデバイスを接続できます。 -<□■□ セッティング&動作テスト方法 □■□>- 簡単に、セッティング方法と動作チェックの方法を挙げます。はじめに、PRO と EXPERT 、どちらも SHARP の SCSI ボードを使用してる場合・・・。 まず、SCSI の両端に PRO,EXPERT を繋ぎます。間には HDD などあっても問題あ りません(ただしケーブル長、質には気を付けて下さい)。 PRO === HDD === HDD === EXPERT この時、SCSI ID が重複しないようにして下さい。X68 本体の ID はもう一方の X68 の電源をきって、SWITCH.x で書き替えて下さい。同じ ID の場合うまく起動 出来ません。うまくいかない場合、SCSI を外して、FD 起動して、SWITCH.x で ID を変更して下さい。普通、SCSI-ID は 7 と 6 を使用します。 これで、同時でなければ、起動出来るはずですが、同時にアクセスすると、SCSI アクセスでこけます(アクセスランプつきっぱなし、とか)。 とりあえず、ここまで繋がれば、あとは両 X68 に SCSITAI.SYS を入れるだけで す。 そうそう、ブートのディスクはわけたほうがいいです。二台の X68 が同じ環境 なほうがいいのは確かですが、SCSI ID も違いますし、使い方も同じではない(ど ちらかがサブになるでしょ?)ですから。片方は、FD 起動や SASI 起動にしたほ うが、ブート時の衝突がなくでいいかも知れません(ブート時はアービトレーショ ンをしていないルーチンが使われてしまうから)。TWOSCSI を使用して別の SCSI から(例えば Mach2 接続の HDD)ブートするのもいいですね。 CONFIG にこんな感じで登録します。 DEVICE = \SYS\SCSITAI.SYS ES DEVICE = \SYS\SCSIF8K.x 6 SCSITAI.SYS のコマンドですが、既に SCSI-IOCS があるので `E' を付けます。 SASI ポートも使う場合 `S'も付けます。SCSIF8K.x の数字は相手の X68 の SCSI ID を書きます(SCSIF8K.x のマニュアルも参照のこと)。SCSIF8K.x はデータ転 送を 8KB 毎に分けて実行するだけでなく、相手(ターゲット)が X68 ゆえに、ア クセス出来ない時だった場合、数回リトライを行うことを自動に行うものです。の で、必ず、使用して下さい。 ASKSCSI.x や VTWOS.x などを使用して、Inquiry を見てみましょう。相手の X68 のところに、 Processor Device SHARP X68000 と言った感じに、現れるはずです。例では PRO と EXPERT と書きましたが、XVI でも SUPER でも 030 でも同じです(本体が X68030 であれば、「X68030」になり ます)。 これで、登録は終了しました。同梱のツールが動くはずです。いつでもリセット 出来る環境(笑)で、いろいろ試してみましょう。 環境によってはソフトの挙動が安定しないことがあります。これは、SCSI 転送 の不安定によることがほとんどです。 動いているだけのように見える場合もありますので、一応、以下のテストを行っ てみて下さい。 一、) ・ターゲット機(SCSITAI.SYS 登録機)に SCTRDISK.x を登録(SCTRDISK.x のマニュアルも参照のこと)。 ・もう一方の X68 で Inquiry をとり、X68k VirRamDisk があるのを確認。 ・VirRamDisk を SUSIE.x で登録して、ファイル書き込み、DSKBENCH.x REFRESHG.x をやりまくる。 一、) ・ターゲット機(SCSITAI.SYS 登録機)になにか PIC ファイルを表示する。 ・もう一方の X68 から SCTVCPY.x -I を実行(SCTVCPY.x のマニュアル も参照のこと)。うまく同じ画像が表示されるかどうか、ゴミは出ない か、すーっと書かれるか、など。 ・同じく SCTVCPY -O を実行。ターゲット側の画像が自機と同じ画像が表 示されるか確認。 うまくいかない理由はいろいろ有りますが、とにかく「かたまる(終了しない)」 という場合は、ターゲット側(SCTRDISK.x 登録側)の SCSITAI.SYS に `D' を付 加し(あるいは SCTMODE -D1 を実行)、「ひらかな」LED を点灯させて実行して みて下さい。ターゲット側の画面に文字がばーっと表示され、どこで止まるかわか ります。 -<□■□ 同梱ソフトに付いて □■□>- SCSITAI.SYS、同梱ソフトを有効に使う場合、双方ともの X68 に SCSITAI.SYS を登録出来るのが一番ですが、現在 SCSITAI.SYS の登録出来ないポート(Mach2 や SASI)や事情で SCSITAI.SYS を登録したくない場合でも、いくつかの同梱ソフ トを使う事は出来ます。しかし、制限はあります(使えないものや使う方向が限定 されるものなど。これは各ツールのドキュメントをご覧下さい)。更に、アービト レーションの関係で、SCSI のアクセスでハングったりするのもあります。 ターゲット側に SCTRDISK 登録しておくとラムディスクとしてメモリを有効に使 えたりしますね(ただし、速くないですが ^^; )。SCTVCPY でターゲット側の画 像を吸い出すことも出来ます。 Mach-2 の場合、SCSITAI.SYS が登録出来ないので、ターゲット側には出来ませ んが、SCSITAI.SYS 登録機(ターゲット側)にアクセスすることは出来ます。また、 Mach2 の ROM の仕様(おそらく開発中の環境の名残)で、SCSI-BUSRESET(SCSI- IOCS $0)を実行すると SPC 割り込みアドレスが書き替えられてしまいます。これ を改善するために M2RPATCH.SYS を同梱しました。TWOSCSI.x で Mach2 と SCSITAI.SYS を併用している人は必ずこれを使用してください(M2RPATCH.SYS の ドキュメントを参照のこと)。ただし、(後述していますが)FORMAT.x での不都 合は M2RPATCH.SYS でも回避出来ません。 SASI ポートを SASIIOCS.SYS で SCSI 化して、SCSITAI.SYS を登録している X68k にアクセスしようとしても、うまく動かないようです。おそらく SASIIOCS.SYS を改良(タイミング調整)すればもしかしたら・・・かもしれません。 極希に「スプリアスエラーが発生しました」という白帯が出ることがあるようで す。SCSITAI.SYS よりも先に同梱の VCT18R.x を登録してみて下さい。 -<□■□ TWOSCSI を使用する場合 □■□>- TWOSCSI と SCSITAI.SYS を併用する場合の注意ですが、SCSITAI.SYS を登録し た SCSI の方を ST-SCSI(ID 0~7)になるようにしてください。もし、「Mach2 と 内蔵 SCSI」を TWOSCSI で使用している場合、Mach2 でブートして、 DEVICE= TWOSCSI.x DEVICE= SCSITAI.SYS DEVICE= TWOSCSI.x EXG と 'EXG' を付けてください。Mach-2 と内蔵 SCSI を併用する場合、M2RPATCH.SYS のドキュメントも参照、使用して下さい。 また、現在は SCSITAI.SYS を 2つ登録することお勧め出来ません。例えば XVI に SCSI ボードを拡張 I・O ポートにさして TWOSCSI している場合などです。 -<□■□ FORMAT.x を使用する場合 □■□>- SHARP の FORMAT.x を実行すると、なぜか FORMAT.x が独自で I・O ポートから SCSI ボード(ROM)を探しだし、バスリセットルーチンを呼びます。もし、Mach2 があると、Mach2 の方のバスリセットが行われます。しかも Mach2 の ROM を直接 呼んでいるため、M2RPATCH.SYS を入れていても先述の通り、例の SPC 割り込みア ドレスがおかしくなってしまいます。Mach2 TWOSCSI SCSITAI.SYS の環境の方は気 を付けて下さい。SCTMODE.x を動かせば戻るようにしてあります。 -<□■□ 注意 □■□>- TNB製作所は この SCSITAI.SYS によるトラブルは一切責任を負わないものとしま す。個人の責任において使用して下さい。 バグ、トラブルの御報告はぜひお願いします。出来る限り対処、対応していきま す。 -<□■□ 使用,参考ツール □■□>- * SUPERED.X ver 1.18 T.Nishikawa氏作 * has.x ver 3.08 YuNK氏作 * hlk.x ver 3.01 SALT氏作 * SCSI-ROM level 1~0xA SHARP作 * target.x ver 1.20 COR.氏作 * HSCSI.x ver 0.27 じゃぎゅあ氏作 * FiloP.x ver 0.05 Gao氏作 文:ひで(TNB製作所) 田圃(TNB製作所) 開発: 文責:ひで(TNB製作所) -<□■□ 連絡先 □■□>- バグ、要望などありましたら、以下までお願いします。 Twitter たんぼ(TNB製作所) @h_koma2