−<□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□>−



			     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