(57)【要約】【課題】複数のピックアップを有するドライブであっても、ATAの規格上において、より容易にデータを転送させることができる【解決手段】  テップＳ３４６において、OP０用のクラウド制御処理を実行せず、OP１用のクラウド制御処理を実行すると判定した場合、クラウド処理部は、処理をステップＳ３４８に進め、OP１用クラウド制御処理を実行する。OP１用のクラウド制御処理を実行し、その処理が終了すると、クラウド処理部は、ステップＳ３４２に処理を戻し、次のクラウド処理（今回制御したOP１のクラウド処理に対応する未処理のOP０のクラウド処理も含む）を制御するために、それ以降の処理を繰り返す。【選択図】図６２
2005242412.tif 000002
【特許請求の範囲】
【請求項１】
複数のピックアップを有するATAデバイスのインタフェースを制御するインタフェース制御装置であって、
前記ATAデバイスと、前記ATAデバイスの外部の記憶部との間で行われるデータ転送の関連情報が記述された複数のPRDテーブルのそれぞれに基づいて、各PRDテーブルに対応する前記データ転送に関する処理であるPRD処理を、各PRDテーブルが対応するピックアップ毎に並列分岐させる並列分岐手段と、
前記並列分岐手段により並列分岐された各PRD処理の進行を制御する制御手段と
を備えることを特徴とするインタフェース制御装置。
【請求項２】
前記PRD処理は、前記データ転送に関する複数の処理からなる複数のフェーズにより構成され、
前記制御手段は、前記PRD処理に含まれる複数の前記フェーズの内、所定のフェーズの終了時または開始時に、前記PRD処理を進行させるピックアップを切り替えることにより、各ピックアップに対応する前記PRD処理を並列に進行させる
ことを特徴とする請求項１に記載のインタフェース制御装置。
【請求項３】
前記制御手段は、ピックアップ毎に、書き込み処理を行う前記PRD処理の最後のフェーズが終了してから、次の読み出し処理を行う前記PRD処理の最初のフェーズを開始させるとともに、ピックアップ毎に、読み出し処理を行う前記PRD処理の最後のフェーズが終了してから、次の書き込み処理を行う前記PRD処理の最初のフェーズを開始させる
ことを特徴とする請求項２に記載のインタフェース制御装置。
【請求項４】
前記制御手段は、書き込み処理を行う前記PRD処理の、データ転送を行うフェーズの終了時、または、ステータス報告を行うフェーズの終了時のいずれか一方において、処理を行う前記ピックアップを切り替える
ことを特徴とする請求項３に記載のインタフェース制御装置。
【請求項５】
前記制御手段は、読み出し処理を行う前記PRD処理の、データ転送を指示するコマンドを発行するフェーズの開始時において、処理を行う前記ピックアップを切り替える
ことを特徴とする請求項３に記載のインタフェース制御装置。
【請求項６】
前記制御手段は、全てのピックアップの書き込み処理を行う前記PRD処理の最後のフェーズが終了してから、次の読み出し処理を行う前記PRD処理の最初のフェーズを開始させるとともに、全てのピックアップの読み出し処理を行う前記PRD処理の最後のフェーズが終了してから、次の書き込み処理を行う前記PRD処理の最初のフェーズを開始させる
ことを特徴とする請求項２に記載のインタフェース制御装置。
【請求項７】
前記制御手段は、書き込み処理を行う前記PRD処理の、データ転送を行うフェーズの終了時、または、ステータス報告を行うフェーズの終了時のいずれか一方において、処理を行う前記ピックアップを切り替える
ことを特徴とする請求項６に記載のインタフェース制御装置。
【請求項８】
前記制御手段は、読み出し処理を行う前記PRD処理の、読み出し処理を指示するコマンドを発行するフェーズの終了時、または、ステータス報告を行うフェーズの終了時のいずれか一方において、処理を行う前記ピックアップを切り替える
ことを特徴とする請求項３に記載のインタフェース制御装置。
【請求項９】
前記PRD処理による前記データ転送の許可または禁止を制御し、全ての前記ピックアップの内、いずれか１つのピックアップに対応するPRD処理に対して前記データ転送の許可を与えるとともに、それ以外のピックアップに対応するPRD処理に対して前記データ転送の禁止を与え、前記データ転送の許可を与えたピックアップのPRD処理において前記データ転送が行われた場合、処理を行うピックアップの切り替え時に、データ転送の許可を行うピックアップを切り替え、前記データ転送の禁止を与えたピックアップのPRD処理が終了した場合、そのPRD処理に前記データ転送の許可を与えないように制御するデータ転送制御手段をさらに備え、
前記制御手段は、前記データ転送制御手段により、処理を行うピックアップの切り替え先のPRD処理に対して前記データ転送の許可が与えられていない場合、前記PRD処理を進行させずに、再度、処理を行うピックアップを切り替える
ことを特徴とする請求項８に記載のインタフェース制御装置。
【請求項１０】
複数のピックアップを有するATAデバイスのインタフェースを制御するインタフェース制御装置のインタフェース制御方法であって、
前記ATAデバイスと、前記ATAデバイスの外部の記憶部との間で行われるデータ転送の関連情報が記述された複数のPRDテーブルのそれぞれに基づいて、各PRDテーブルに対応する前記データ転送に関する処理であるPRD処理を、各PRDテーブルが対応するピックアップ毎に並列分岐させる並列分岐ステップと、
前記並列分岐ステップの処理により並列分岐された各PRD処理の進行を制御する制御ステップと
を含むことを特徴とするインタフェース制御方法。
【請求項１１】
複数のピックアップを有するATAデバイスのインタフェースを制御するを、コンピュータに行わせるプログラムにおいて、
前記ATAデバイスと、前記ATAデバイスの外部の記憶部との間で行われるデータ転送に関する第１の処理に対して発行された前記第１の処理の強制終了指示に基づいて、前記第１の処理より派生した処理であり、その処理結果を前記第１の処理において利用する、前記データ転送に関する第２の処理が実行中であるか否かを判定する判定ステップと、
前記判定ステップの処理により前記第２の処理が実行中であると判定した場合、前記強制終了指示に基づく終了処理を、前記第２の処理が終了するまで待機させる待機ステップと、
前記判定ステップの処理により前記第２の処理が実行中でないと判定した場合、前記強制終了指示に基づいて前記終了処理を行い前記第１の処理を終了させる終了ステップと
を含むことを特徴とするプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、インタフェース制御装置および方法、並びにプログラムに関し、特に、ATAデバイスのインタフェースに用いて好適なインタフェース制御装置および方法、並びにプログラムに関する。
【背景技術】
【０００２】
従来、ハードディスクとホストとのインタフェースとして、IDE（Integrated Drive Electronics）があった。IDEは、PC/AT（Personal Computer/Advanced Technology）互換機用ハードディスクのインタフェースの仕様である。IDEの信号線は、PC/AT互換機の仕様として標準化されたISA（Industry Standard Architecture）バスのそれをほぼそのまま利用しており、ハードディスクとホストとの接続には簡単なアドレスデコーダとバッファ程度があればよく、一般にそれまでの標準的なハードディスクインタフェースであるSCSI（Small Computer System Interface）のコントローラと比較して低価格にIDEコントローラを開発することができるので、各社によりIDEコントローラの開発が進み、PC/AT互換機用ハードディスクのインタフェースの仕様として、事実上、標準化された。なお、このIDEは、転送速度の向上や限界容量の増大、接続デバイス数の増加等を目的として、後にEnhanced IDEに拡張された。
【０００３】
しかしながら、初期のIDEには、明確な標準規格がなかったため、各ドライブメーカはそれぞれ独自の機能拡張等を行ったため、異なるメーカ製品同士での互換性問題が発生した。
【０００４】
そのため、ANSI（American National Standards Institute）により、標準規格として、このIDEを利用したATA（AT Attachment interface）が制定された。現在この規格は、ANSIの、SCSI（Small Computer System Interface）の標準化を行っている、X3T92というグループによって管理されている。このATAもまた、改良や拡張が行われ、初期のATA−１から、ATA−２，ATA−３，ATA-４，ATA−５，ATA−６，ATA−７，Serial ATAのように新たな規格が制定されてきた。例えば、最大データ転送速度は、ATA−１は8.33MB/s、ATA−２およびATA−３は16.7MB/s、ATA-４は33.3MB/s、ATA−５は66.7MB/s、ATA−６は100MB/s、ATA−７は133MB/s、Serial ATAは150MB/sである。
【０００５】
また、このような規格に利用されるIDEコントローラに、例えばCD-ROM（Compact Disc - Read Only Memory）等のハードディスク以外のデバイスを接続するためのパケットインターフェイスの標準規格として、ANSIによりATAPI（ATA Pachet Interface）が制定された。ATAPIでは、SCSIコマンドをATAコマンドに変換することができるため、高価なSCSIインタフェースを必要としないCD-ROMドライブを比較的容易に開発できるようになる。このATAPIは、制定当初、ATAと独立した規格であったが、ATA−４の規格以降、それらは統一されている。従って、ATA-４は、ATA/ATAPI−４とも呼ばれている。従って、以下においては、CD-ROM等のハードディスク以外のデバイスもATAデバイスと称する。
【０００６】
このような規格においては、データ転送速度を高速化するために、例えば、CPUがデータ転送を制御するPIO転送（Program I/O transfer）、DMA（Direct Memory Access transfer）コントローラがデータ転送を制御し、１つの処理により１つのデータが転送されるシングルワードDMA転送、DMAコントローラがデータ転送を制御し、１つの処理により複数のデータが連続して転送されるマルチワードDMA転送、より高速なデータ転送を行うUltraDMA転送等、様々な転送方式が用いられている（例えば、非特許文献１参照）。
【０００７】
図１は、PIO転送方式におけるデータ転送の様子の例を説明する図である。
【０００８】
図１において、CPU（Central Processing Unit）１は、SDRAM（Synchronous Dynamic Random Access Memory）２とバス３を介して接続されている。また、バス３には、IDEコントローラを含むATAホストハードウェア４が接続されており、そのATAホストハードウェア４には、さらにATAデバイスであるドライブ５が接続されている。このような装置において、例えば、SDRAM２に保持されているデータをドライブ５に転送し、ドライブ５装着された図示せぬ記録媒体（例えばCD（Compact Disc）やDVD（Digital Versatile Disc）等）に書き込む場合や、逆に、その記録媒体に記録されているデータを読み出し、SDRAM２に転送する場合、PIO転送方式では、CPUが直接データの転送処理を制御する。
【０００９】
すなわち、CPU１は、例えば、IN/OUT命令を実行し、ATAホストハードウェア４のATAレジスタにアクセスし、MOV命令を実行してATAホストハードウェア４のバッファメモリ空間を読み書きする。そして、CPU１は、LOOP命令を実行することによってこのような動作を繰り返す。
【００１０】
つまり、CPU１は、両矢印６および両矢印７に示されるように、データの転送が発生すると、SDRAM２やATAホストハードウェア４にアクセスし、データ転送に関する処理を行う。なお、ドライブ５へのアクセスは、両矢印８に示されるように、ATAホストハードウェア４がCPU１からの命令に基づいて行う。従って、CPU１は、図２に示されるように、その転送処理単位毎（レジスタ毎）に、ATAホストハードウェア４（およびSDRAM２）にアクセスし、処理を指示する。ATAホストハードウェア４は、そのCPU１からの指示に基づいて、レジスタ（PIO）９にアクセスし、CPU１からの指示１つに対して１つのレジスタを処理する。図２において、図中左の５つのレジスタに関する処理は、記録媒体への書き込み処理の例を示したものであり、図中右の５つのレジスタに関する処理は、記録媒体からの読み出し処理の例を示したものである。図２に示されるように、記録媒体からの読み出しの場合、読み出したデータに関する処理が必要となるので、CPU１とATAホストハードウェア４の通信回数は、記録媒体への読み出しの回数と比較して倍増する。
【００１１】
このように、PIO転送方式の場合、CPU１が直接データ転送を制御するので、CPU１による各デバイスへのアクセスや命令フェッチ等の、実際のデータ転送以外にもバス３が頻繁に使用されることになる。また、この場合、CPU１がデータ転送のために、頻繁に処理を実行しなければならない。従って、データ転送に関する処理の負荷が大きくなり、データ転送速度を向上させることが困難であった。
【００１２】
そこで、ATA−２やATA−３においては、シングルワードDMA転送方式やマルチワードDMA転送方式が採用された。シングルワードDMA転送方式やマルチワードDMA転送方式の場合のデータ転送の様子の例を図３に示す。なお、以下において、シングルワードDMA転送方式とマルチワードDMA転送方式を区別する必要が無い場合、シングルワード／マルチワードDMA転送方式と称する。
【００１３】
図３に示されるように、シングルワード／マルチワードDMA転送方式の場合、データ転送の制御は、CPU１ではなく、DMAコントローラであるDMA１１が行う。DMA１１は、CPU１等と同様にバス３に接続されており、両矢印１２および両矢印１３に示されるように、CPU１の代わりに、SDRAM２やATAホストハードウェア４にアクセスし、転送処理を制御する。このようにすることにより、シングルワード／マルチワードDMA転送方式の場合、CPU１にデータ転送による負荷がかからないにし、CPU１の負荷を軽減させることができる。
【００１４】
さらに高速化を目指し、ATA−４以降においては、UltraDMA転送方式が採用されている。UltraDMA転送方式の場合、図４に示されるように、バス３上でバスマスタとなったATAホストハードウェア１４に内蔵されるDMAコントローラであるDMA１５がデータ転送を制御する。すなわち、バス３を介したデータ転送は、通常のバスマスタによりデータ転送そのものとなり、両矢印１６に示されるように、ATAホストハードウェア１４によるSDRAM２へのアクセスのみとなる。このとき、CPU１は、もちろん、転送処理を制御しない。このようにすることにより、データ転送時のCPU１およびバス３の負荷が低減する。
【００１５】
図５は、PIO転送方式とUltraDMA転送方式を組み合わせた場合のCPU１によるアクセスの例を模式的に示した図である。
【００１６】
図５に示されるように、ホストハードウェア４は、PIO転送方式の場合、レジスタ（PIO）１７にアクセスし、レジスタ（PIO）１７に保持された処理を実行し、UltraDMA転送方式の場合、レジスタ（DMA）１８にアクセスし、レジスタ（DMA）１８に保持された処理を実行する。上述したように、PIO転送方式の場合、ATAホストハードウェア４がCPU１の１度の指示に基づいて、レジスタ（PIO）１７の１つの処理を実行するため、データ転送処理単位毎にCPU１がアクセスする必要があったが、UltraDMA転送方式の場合、ATAホストハードウェア４は、レジスタ（DMA）１８に保持された複数の処理を１回のCPU１からの指示により実行することができるので、データ転送処理単位のデータを複数連続して転送することができる。従って、CPU１によるATAホストハードウェア４へのアクセス数が低下する。
【００１７】
【非特許文献１】"ATA(IDE)/ATAPIの徹底研究"、ＣＱ出版社、Ｐ３０−Ｐ３３
【発明の開示】
【発明が解決しようとする課題】
【００１８】
近年、ATAの規格上において、このように複雑な処理を伴う様々なインタフェースの制御方法が規格として提案されている。しかしながら、ATAの規格上においては、ATAデバイスのピックアップの数は１つであり、ATAにより、ピックアップを複数有するデバイスを制御することができないという課題があった。
【００１９】
これに対して、独自のプロトコルを用いることにより、ピックアップを複数有するドライブを制御することが考えられるが、この場合、ドライブのインタフェースの汎用性が低下し、他の装置に接続できない恐れがあった。
【００２０】
本発明は、このような状況に鑑みてなされたものであり、複数のピックアップを有するドライブであっても、ATAの規格上において、より容易にデータを転送させることができるようにするものである。
【課題を解決するための手段】
【００２１】
本発明のインタフェース制御装置は、ATAデバイスと、ATAデバイスの外部の記憶部との間で行われるデータ転送の関連情報が記述された複数のPRDテーブルのそれぞれに基づいて、各PRDテーブルに対応するデータ転送に関する処理であるPRD処理を、各PRDテーブルが対応するピックアップ毎に並列分岐させる並列分岐手段と、並列分岐手段により並列分岐された各PRD処理の進行を制御する制御手段とを備えることを特徴とする。
【００２２】
前記PRD処理は、データ転送に関する複数の処理からなる複数のフェーズにより構成され、制御手段は、PRD処理に含まれる複数のフェーズの内、所定のフェーズの終了時または開始時に、PRD処理を進行させるピックアップを切り替えることにより、各ピックアップに対応するPRD処理を並列に進行させるようにすることができる。
【００２３】
前記制御手段は、ピックアップ毎に、書き込み処理を行うPRD処理の最後のフェーズが終了してから、次の読み出し処理を行うPRD処理の最初のフェーズを開始させるとともに、ピックアップ毎に、読み出し処理を行うPRD処理の最後のフェーズが終了してから、次の書き込み処理を行うPRD処理の最初のフェーズを開始させるようにすることができる。
【００２４】
前記制御手段は、書き込み処理を行うPRD処理の、データ転送を行うフェーズの終了時、または、ステータス報告を行うフェーズの終了時のいずれか一方において、処理を行うピックアップを切り替えるようにすることができる。
【００２５】
前記制御手段は、読み出し処理を行うPRD処理の、データ転送を指示するコマンドを発行するフェーズの開始時において、処理を行うピックアップを切り替えるようにすることができる。
【００２６】
前記制御手段は、全てのピックアップの書き込み処理を行うPRD処理の最後のフェーズが終了してから、次の読み出し処理を行うPRD処理の最初のフェーズを開始させるとともに、全てのピックアップの読み出し処理を行うPRD処理の最後のフェーズが終了してから、次の書き込み処理を行うPRD処理の最初のフェーズを開始させるようにすることができる。
【００２７】
前記制御手段は、書き込み処理を行うPRD処理の、データ転送を行うフェーズの終了時、または、ステータス報告を行うフェーズの終了時のいずれか一方において、処理を行うピックアップを切り替えるようにすることができる。
【００２８】
前記制御手段は、読み出し処理を行うPRD処理の、読み出し処理を指示するコマンドを発行するフェーズの終了時、または、ステータス報告を行うフェーズの終了時のいずれか一方において、処理を行うピックアップを切り替えるようにすることができる。
【００２９】
前記PRD処理によるデータ転送の許可または禁止を制御し、全てのピックアップの内、いずれか１つのピックアップに対応するPRD処理に対してデータ転送の許可を与えるとともに、それ以外のピックアップに対応するPRD処理に対してデータ転送の禁止を与え、データ転送の許可を与えたピックアップのPRD処理においてデータ転送が行われた場合、処理を行うピックアップの切り替え時に、データ転送の許可を行うピックアップを切り替え、データ転送の禁止を与えたピックアップのPRD処理が終了した場合、そのPRD処理にデータ転送の許可を与えないように制御するデータ転送制御手段をさらに備え、制御手段は、データ転送制御手段により、処理を行うピックアップの切り替え先のPRD処理に対してデータ転送の許可が与えられていない場合、PRD処理を進行させずに、再度、処理を行うピックアップを切り替えるようにすることができる。
【００３０】
本発明のインタフェース制御方法は、ATAデバイスと、ATAデバイスの外部の記憶部との間で行われるデータ転送の関連情報が記述された複数のPRDテーブルのそれぞれに基づいて、各PRDテーブルに対応するデータ転送に関する処理であるPRD処理が、各PRDテーブルが対応するピックアップ毎に並列分岐させる並列分岐ステップと、並列分岐ステップの処理により並列分岐された各PRD処理の進行を制御する制御ステップとを含むことを特徴とする。
【００３１】
本発明のプログラムは、ATAデバイスと、ATAデバイスの外部の記憶部との間で行われるデータ転送の関連情報が記述された複数のPRDテーブルのそれぞれに基づいて、各PRDテーブルに対応するデータ転送に関する処理であるPRD処理が、各PRDテーブルが対応するピックアップ毎に並列分岐させる並列分岐ステップと、並列分岐ステップの処理により並列分岐された各PRD処理の進行を制御する制御ステップとをコンピュータに実行させる。
【００３２】
本発明のインタフェース制御装置および方法、並びにプログラムにおいては、ATAデバイスと、ATAデバイスの外部の記憶部との間で行われるデータ転送の関連情報が記述された複数のPRDテーブルのそれぞれに基づいて、各PRDテーブルに対応するデータ転送に関する処理であるPRD処理が、各PRDテーブルが対応するピックアップ毎に並列分岐され、並列分岐された各PRD処理の進行が制御される。
【発明の効果】
【００３３】
本発明によれば、データ転送を制御することができる。特に、複数のピックアップを有するドライブであっても、ATAの規格上において、より容易にデータを転送させることができる。
【発明を実施するための最良の形態】
【００３４】
以下に本発明の実施の形態を説明するが、請求項に記載の構成要件と、発明の実施の形態における具体例との対応関係を例示すると、次のようになる。この記載は、請求項に記載されている発明をサポートする具体例が、発明の実施の形態に記載されていることを確認するためのものである。従って、発明の実施の形態中には記載されているが、構成要件に対応するものとして、ここには記載されていない具体例があったとしても、そのことは、その具体例が、その構成要件に対応するものではないことを意味するものではない。逆に、具体例が構成要件に対応するものとしてここに記載されていたとしても、そのことは、その具体例が、その構成要件以外の構成要件には対応しないものであることを意味するものでもない。
【００３５】
さらに、この記載は、発明の実施の形態に記載されている具体例に対応する発明が、請求項に全て記載されていることを意味するものではない。換言すれば、この記載は、発明の実施の形態に記載されている具体例に対応する発明であって、この出願の請求項には記載されていない発明の存在、すなわち、将来、分割出願されたり、補正により追加される発明の存在を否定したりするものではない。
【００３６】
本発明においては、複数のピックアップを有するATAデバイス（例えば、図６のドライブ２２）のインタフェースを制御するインタフェース制御装置（例えば、図６において内部の構成例が示されるインタフェース制御装置）が提供される。このインタフェース制御装置では、ATAデバイスと、ATAデバイスの外部の記憶部（例えば、図６のSDRAM２４）との間で行われるデータ転送の関連情報が記述された複数のPRDテーブル（例えば、図１３のPRDテーブル）のそれぞれに基づいて、各PRDテーブルに対応するデータ転送に関する処理であるPRD処理（例えば、図５６のPRD処理４５１乃至４５７）を、各PRDテーブルが対応するピックアップ毎に並列分岐させる並列分岐手段（例えば、図６２のステップＳ３４６）と、並列分岐手段により並列分岐された各PRD処理の進行を制御する制御手段（例えば、図６２のステップＳ３４７およびステップＳ３４８）とを備えることを特徴とする。
【００３７】
前記PRD処理は、データ転送に関する複数の処理からなる複数のフェーズ（例えば、第１のフェーズ乃至第６のフェーズ）により構成され、制御手段は、PRD処理に含まれる複数のフェーズの内、所定のフェーズの終了時または開始時に、PRD処理を進行させるピックアップを切り替えることにより、各ピックアップに対応するPRD処理を並列に進行させるようにすることができる。
【００３８】
前記制御手段は、ピックアップ毎に、書き込み処理を行うPRD処理の最後のフェーズが終了してから、次の読み出し処理を行うPRD処理の最初のフェーズを開始させるとともに、ピックアップ毎に、読み出し処理を行うPRD処理の最後のフェーズが終了してから、次の書き込み処理を行うPRD処理の最初のフェーズを開始させる（例えば、図５６のクラウド処理４７１）ようにすることができる。
【００３９】
前記制御手段は、書き込み処理を行うPRD処理の、データ転送を行うフェーズ（Ｒ）の終了時、または、ステータス報告を行うフェーズ（Ｓ）の終了時のいずれか一方において、処理を行うピックアップを切り替える（例えば、図５７の「Write」）ようにすることができる。
【００４０】
前記制御手段は、読み出し処理を行うPRD処理の、データ転送を指示するコマンド（Ｄ）を発行するフェーズの開始時において、処理を行うピックアップを切り替える（例えば、図５９）ようにすることができる。
【００４１】
前記制御手段は、全てのピックアップの書き込み処理を行うPRD処理（例えば、図６９）の最後のフェーズが終了してから、次の読み出し処理を行うPRD処理の最初のフェーズを開始させるとともに、全てのピックアップの読み出し処理を行うPRD処理の最後のフェーズが終了してから、次の書き込み処理を行うPRD処理の最初のフェーズを開始させるようにすることができる。
【００４２】
前記制御手段は、書き込み処理を行うPRD処理の、データ転送を行うフェーズの終了時、または、ステータス報告を行うフェーズの終了時のいずれか一方において、処理を行うピックアップを切り替える（例えば、図７０）ようにすることができる。
【００４３】
前記制御手段は、読み出し処理を行うPRD処理の、読み出し処理を指示するコマンドを発行するフェーズの終了時、または、ステータス報告を行うフェーズの終了時のいずれか一方において、処理を行うピックアップを切り替える（例えば、図７０）ようにすることができる。
【００４４】
前記PRD処理によるデータ転送の許可または禁止を制御し（図７１のData転送許可/禁止）、全てのピックアップの内、いずれか１つのピックアップに対応するPRD処理に対してデータ転送の許可を与えるとともに、それ以外のピックアップに対応するPRD処理に対してデータ転送の禁止を与え、データ転送の許可を与えたピックアップのPRD処理においてデータ転送が行われた場合、処理を行うピックアップの切り替え時に、データ転送の許可を行うピックアップを切り替え、データ転送の禁止を与えたピックアップのPRD処理が終了した場合、そのPRD処理にデータ転送の許可を与えないように制御するデータ転送制御手段（例えば、図６１のクラウド処理部４４１）をさらに備え、制御手段は、データ転送制御手段により、処理を行うピックアップの切り替え先のPRD処理に対してデータ転送の許可が与えられていない場合、PRD処理を進行させずに、再度、処理を行うピックアップを切り替える（例えば、図７３のステップＳ４４７）ようにすることができる。
【００４５】
本発明においては、複数のピックアップを有するATAデバイス（例えば、図６のドライブ２２）のインタフェースを制御するインタフェース制御装置（例えば、図６において内部の構成例が示されるインタフェース制御装置）のインタフェース制御方法が提供される。このインタフェース制御方法は、ATAデバイスと、ATAデバイスの外部の記憶部（例えば、図６のSDRAM２４）との間で行われるデータ転送の関連情報が記述された複数のPRDテーブルのそれぞれに基づいて、各PRDテーブルに対応するデータ転送に関する処理であるPRD処理を、各PRDテーブルが対応するピックアップ毎に並列分岐させる並列分岐ステップ（図６２のステップＳ３４６）と、並列分岐ステップの処理により並列分岐された各PRD処理の進行を制御する制御ステップ（図６２のステップＳ３４７およびステップ３４８）とを含む。
【００４６】
本発明においては、ATAデバイス（例えば、図６のドライブ２２）のインタフェースを制御するインタフェース制御処理を、コンピュータ（例えば、図６において内部の構成例が示されるインタフェース制御装置）に行わせるプログラムが提供される。このプログラムは、ATAデバイスと、ATAデバイスの外部の記憶部（例えば、図６のSDRAM２４）との間で行われるデータ転送の関連情報が記述された複数のPRDテーブルのそれぞれに基づいて、各PRDテーブルに対応するデータ転送に関する処理であるPRD処理を、各PRDテーブルが対応するピックアップ毎に並列分岐させる並列分岐ステップ（図６２のステップＳ３４６）と、並列分岐ステップの処理により並列分岐された各PRD処理の進行を制御する制御ステップ（図６２のステップＳ３４７およびステップ３４８）とを含む。
【００４７】
以下に、本発明の実施の形態について図面を参照して説明する。
【００４８】
図６は、本発明を適用したATA（AT Attachment interface）インタフェース制御装置のATAホストハードウェアの構成例を表している。
【００４９】
図６に示されるATAインタフェース制御装置は、例えば、映像データの記録再生装置等の映像機器であり、ATAホストハードウェア２１は、ATAデバイスであるドライブ２２のIDE（Integrated Drive Electronics）コントローラとして構成されるデバイスであり、例えば、PCI（Peripheral Components Interconnect bus）バス等のバス４２介してCPU（Central Processing Unit）２３と接続されるとともに、バス４２と同様のバス４１を介してSDRAM（Synchronous Dynamic Random Access Memory）２４と接続されている。ATAホストハードウェア２１は、CPU２３に制御され、ATAの規格に準拠する方法を利用して、SDRAM２４とドライブ２２とのデータ転送を制御し、例えば、SDRAM２４が保持するデータを取得し、ドライブ２２に装着されたCD（Compact Disc）やDVD（Digital Versatile Disc）等の記録媒体に書き込んだり、ドライブ２２に装着された記録媒体に記録されているデータを読み出し、それをSDRAM２４に供給して保持させたりする。
【００５０】
ATAホストハードウェア２１は、CPU２３に制御され、ATAホストハードウェア２１全体の動作を制御するATAホスト３１、ATAホスト３１とスルーPIO（Program I/O transfer）制御部３３とIDMA（Intelligence Direct Memory Access transfer）制御部３７とを接続するバス３２、後述するスルーPIO転送モードにおける転送処理を制御するスルーPIO制御部３３、SRAM（Static Random Access Memory）５２に保持されているPIOスクリプト１つ分の処理を実行する単一PIOスクリプト処理部３４、PIO転送モードに関する処理を実行するPIO実行部３５、ドライブ２２に接続され、ドライブ２２のインタフェース処理を行うATAインタフェース処理部３６、後述するIDMA転送モードにおける転送処理を制御するIDMA制御部３７、IDMA転送モードにおけるPIO転送に関する処理を制御するIDMA PIO制御部３８、および、IDMA転送モードにおけるDMA転送に関する処理を実行するDMA実行部３９により構成される。
【００５１】
ATAホスト３１は、内部に、バス４２を介してCPU２３に接続される入出力制御部５１、SRAM５２、およびレジスタ５３を有している。入出力制御部５１は、バス４２を介して行われるCPU２３との通信を制御し、例えば、CPU２３より供給される情報をSRAM５２やレジスタ５３に供給し保持させたり、処理結果等の情報をCPU２３に供給したりする。SRAM５２は、後述するように、入出力制御部５１を介してCPU２３より供給されるデータ転送処理に関する情報を保持したり、その情報を、必要に応じてバス３２を介してスルーPIO制御部３３やIDMA制御部３７に供給したりする。レジスタ５３は、後述するように、入出力制御部５１を介してCPU２３より供給されるATAホストハードウェアやデータ転送処理に関する設定情報を保持したり、その情報を、必要に応じてバス３２を介してスルーPIO制御部３３やIDMA制御部３７に供給したりする。
【００５２】
スルーPIO制御部３３は、CPU２３によって、PIO転送モードの転送処理を連続して実行するスルーPIO転送モードのデータ転送が指示された場合、SRAM５２やレジスタ５３より必要な情報を取得し、単一PIOスクリプト処理部３４を制御して、スルーPIO転送モードによるデータ転送処理を実行させる。
【００５３】
単一PIOスクリプト処理部３４は、スルーPIO制御部３３やIDMA PIO制御部３８に制御され、供給されるPIOスクリプトを１つずつ処理し、そのPIOスクリプトに含まれるPIO転送モードに関する処理をPIO実行部３５に実行させる。
【００５４】
PIO実行部３５は、PIOスクリプト処理部３４に制御され、ATAインタフェース処理部３６を介してドライブ２２にアクセスし、要求されたPIO転送モードに関する処理を実行する。
【００５５】
ATAインタフェース処理部３６は、PIO実行部３５やDMA実行部３９からのドライブ２２へのアクセスを受け付けてドライブ２２に供給したり、ドライブ２２に装着された記録媒体より読み出されたデータを、要求元であるPIO実行部３５やDMA実行部３９に供給したりする。
【００５６】
IDMA制御部３７は、CPU２３によって、PIO転送モードによるデータ転送処理とDMA転送モードによるデータ転送処理を連続して実行するIDMA転送モードのデータ転送が指示された場合、SRAM５２やレジスタ５３より必要な情報を取得し、IDMA PIO処理部３８やDMA実行部３９を制御して、IDMA転送モードによるデータ転送処理を実行させる。
【００５７】
IDMA PIO処理部３８は、IDMA制御部３７に制御され、単一PIOスクリプト処理部３４を制御することにより、IDMA転送モードにおけるPIO転送モードに関する処理を制御する。
【００５８】
DMA実行部３９は、IDMA制御部３７に制御され、IDMA転送モードにおけるDMA転送モードに関する処理を実行する。すなわち、DMA実行部３９には、バス４１を介してSDRAM２４が接続されており、SDRAM２４とATAインタフェース処理部３６（ドライブ２２）とのデータのやり取りを、CPU２３を介さずに制御する。
【００５９】
すなわち、ATAホストハードウェア２１は、スルーPIO転送モードとIDMA転送モードの２つのモードによりデータ転送を行う。各モードの詳細については後述するが、ATAホストハードウェア２１の各部の関係は、スルーPIO転送モードとIDMA転送モードの階層化された処理に対応するように階層化されている。
【００６０】
このような構成は、映像機器以外にも適用することができ、例えばPC/AT（Personal Computer/Advanced Technology）互換機と呼ばれるような汎用のパーソナルコンピュータ等のように、インタフェース規格としてATAを利用している装置であれば何でも適用することができる。
【００６１】
また、以上においては、ATAホストハードウェア２１、ドライブ２２、CPU２３、およびSDRAM２４を１つの装置を構成する処理部として説明したが、これに限らず、上述した各部がそれぞれ互いに異なる装置であるようにしてもよいし、上述した各部の一部が別体として構成されるようにしてもよい。例えば、ATAホストハードウェア２１、CPU２３、およびSDRAM２４がATAインタフェース制御装置として構成され、ドライブ２２がATAインタフェース制御装置に接続された外部の装置であるとしてもよいし、ATAホストハードウェア２１をATAインタフェース制御装置とし、ドライブ２２を記録再生装置とし、CPU２３を制御装置とし、SDRAM２４をデータストレージ装置として構成させ、各装置がATAの規格に基づいて接続されているものとしてもよい。
【００６２】
図７は、図６のATAホストハードウェア２１の、データ転送処理における状態遷移の様子を説明する模式図である。
【００６３】
電源が投入されると、ATAホストハードウェア２１は、ATAデバイスリセット（Reset）モード６１に移行し、ATAデバイスであるドライブ２２のリセット（初期化）する。具体的には、ATAホスト３１がATAインタフェース処理部３６を介してドライブ２２にアクセスし、ドライブ２２の状態を初期化する。デバイスのリセットが終了すると（デバイスReset終了）、ATAホストハードウェア２１は、待機モード（IDLE）６２に移行し、CPU２３からの転送処理開始の指示が来るまで待機する。
【００６４】
ATAホストハードウェア２１が実行する転送処理のモードとしては、PIO転送モードによるデータ転送を連続して実行するスルーPIO転送モード（スルーPIO）６３と、PIO転送モードによるデータ転送とDMA転送モードによるデータ転送の少なくとも一方を連続して実行するIDMA転送モード（IDMA）６４とがある。
【００６５】
CPU２３よりスルーPIO転送モードによるデータ転送が指示されると（スルーPIO Start）、ATAホストハードウェア２１は、スルーPIO転送モード６３の通常モード（Normal）７１に移行し、後述するPIOスクリプトに基づいてPIO処理を実行する。そのPIO処理において、PIOスクリプトの追加が指示されると、ATAホストハードウェア２１は、並行して動作するプロセスの同期を取るためのフラグであるセマフォの獲得処理を行い、そのセマフォを取得すると（セマフォ獲得）、PIOスクリプト追加モード（PIOスクリプト追加）７２に移行し、CPU２３より供給されるPIOスクリプトをSRAM５２に保持させる追加処理を行う。PIOスクリプト追加処理が終了すると、ATAホストハードウェア２１は、獲得していたセマフォを返却し（セマフォ返却）、通常モード７１に移行し、PIO処理を実行する。
【００６６】
なお、ATAホストハードウェア２１がPIOスクリプト追加モード７２に移行し、CPU２３より供給されるPIOスクリプトの追加処理を行っている間も、通常モード７１において実行中であるPIO処理は続行される。このような場合、PIO処理は途中で中断せずに１つの処理が終了した時点で一時停止される。
【００６７】
さらに、ATAホストハードウェア２１は、通常モード７１においてPIO処理を実行中に、例えば読み出し（Read）処理や他のプログラムからの指示により一時停止要求が発生すると（Read Reg値、他プログラムPause）、一時停止モード（Pause）７３に移行し、PIO処理を一時停止する。そして、一時停止解除要求が発生すると、ATAホストハードウェア２１は、一時停止を解除し（Pause解除）、通常モード７１に移行する。
【００６８】
通常モード７１において、全てのPIO処理が終了すると、ATAホストハードウェア２１は、スルーPIOモード６３を正常終了し（正常終了）、待機モード６２に移行する。
【００６９】
また、通常モード７１または一時停止モード７３において、強制終了要求が発生すると（Abort命令）、ATAホストハードウェア２１は、強制終了モード（Abort）７４に移行し、その要求に基づいて強制終了処理を行ってスルーPIOモード６３を異常終了し（異常終了）、待機モード６２に移行する。
【００７０】
待機モード６２において、CPU２３よりIDMA転送モードによるデータ転送が指示されると（IDMA Start）、ATAホストハードウェア２１は、IDMA転送モード６４の通常モード（Normal）８１に移行し、後述するPRDテーブルに基づいたIDMA転送モードによるデータ転送に関する処理であるPRD処理を実行する。そのPRD処理において、PRDテーブルの追加が指示されると、ATAホストハードウェア２１は、セマフォの獲得処理を行い、そのセマフォを取得すると（セマフォ獲得）、PRDテーブル追加モード（PRDテーブル追加）８２に移行し、CPU２３より供給されるPRDテーブルをSRAM５２に保持させる追加処理を行う。PRDテーブル追加処理が終了すると、ATAホストハードウェア２１は、獲得していたセマフォを返却し（セマフォ返却）、通常モード８１に移行し、PRD処理を実行する。
【００７１】
なお、ATAホストハードウェア２１がPRDテーブル追加モード８２に移行し、CPU２３より供給されるPRDテーブルの追加処理を行っている間も、通常モード８１において実行中であるPRD処理は続行される。このような場合、PRD処理は途中で中断せずに１つの処理が終了した時点で一時停止される。
【００７２】
さらに、ATAホストハードウェア２１は、通常モード８１においてPRD処理を実行中に、例えば読み出し（Read）処理や他のプログラムからの指示により一時停止要求が発生すると（Read Reg値、他プログラムPause）、一時停止モード（Pause）８３に移行し、PRD処理を一時停止する。そして、一時停止解除要求が発生すると、ATAホストハードウェア２１は、一時停止を解除し（Pause解除）、通常モード８１に移行する。
【００７３】
通常モード８１において、全てのPRD処理が終了すると、ATAホストハードウェア２１は、IDMAモード６４を正常終了し（正常終了）、待機モード６２に移行する。
【００７４】
また、通常モード８１または一時停止モード８３において、強制終了要求が発生すると（Abort命令）、ATAホストハードウェア２１は、強制終了モード（Abort）８４に移行し、その要求に基づいて強制終了処理を行ってIDMAモード６４を異常終了し（異常終了）、待機モード６２に移行する。
【００７５】
以上のように、ATAホストハードウェア２１は、その処理毎に各モードに移行し、その移行したモードの処理を実行する。また、このようなモードの移行は、ATAホスト３１の制御により実行されるが、ATAホスト３１は、CPU２３より供給される指示に基づいてモードを移行させる。CPU２３からのデータ転送に関する指示コマンド、ステータス、データ等は、SRAM５２およびレジスタ５３に保持される。ATAホストハードウェア２１の各部は、このSRAM５２およびレジスタ５３に保持されている情報に基づいて各種の処理を実行する。
【００７６】
図８は、SRAM５２およびレジスタ５３に保持されるデータの構成例を示す図である。SRAM５２およびレジスタ５３は、実際には、１つのRAM（Random Access Memory）として構成され、そのRAMの記憶領域の一部として構成されるので、以下においては、SRAM５２およびレジスタを図示せぬRAMの互いに異なる領域として説明する。
【００７７】
図８に示されるように、SRAM５２は、アドレス0x0000乃至0x007Fの１２８バイトの領域１０１、アドレス0x0080乃至0x009Fの３２バイトの領域１０２、アドレス0x00A0乃至0x00BFの３２バイトの領域１０３、アドレス0x00C0乃至0x00DFの３２バイトの領域１０４、アドレス0x00EO乃至0x00FFの３２バイトの領域１０５、アドレス0x0100乃至0x01FFの２５６バイトの領域１０６、および、アドレス0x0200乃至0x03FFの５１２バイトの領域１０７により構成される。
【００７８】
領域１０１には、４バイトのスルーPIO用のPIOスクリプトであるスルーPIOスクリプトが３２個記述される。また、領域１０２には、４バイトのPIO CPU割り込み要因発生条件が８個、または、４バイトの読み出し繰り返し/IfGoto条件のテーブルが８個記述される。さらに、領域１０３には、４バイトの読み出し繰り返し/IfGoto条件のテーブルが２個記述される。
【００７９】
領域１０４は、User足し算レジスタとして構成され、4バイトの演算結果が２個保持される。領域１０５は、IDMA用のPRDテーブルまたはSDRAMアドレス追加設定テーブルが記述される領域１０６の拡張領域である。領域１０７には、IDMA用のPIOスクリプトが記述される。
【００８０】
また、レジスタ５３は、アドレス0x0400乃至0x043Fの１２８バイトの領域１１１、アドレス0x0440乃至0x047Fの１６バイトの領域１１２、アドレス0x0480乃至0x04BFの１６バイトの領域１１３、および、アドレス0x04C0乃至0x04FFの１６バイトの領域１１４により構成される。
【００８１】
領域１１１には、ATA全体に関わる設定情報が記述され、領域１１２には、スルーPIO転送モードに関わる設定情報が記述され、領域１１３には、IDMA転送モードに関わる設定情報が記述される。領域１１４は、予備（Reserved）の領域である。
【００８２】
図９は、領域１０１に記述されるスルーPIOスクリプトの構成例を示す図である。
【００８３】
図９において、ビット番号３１の完了フラグ（CPT）１２１は、処理の完了を示すフラグであり、テーブル書き込み時に「０」がセットされ、処理完了時に「１」がセットされる。ATAホスト３１は、Readコマンド発行後にこのフラグを読み込み、値が「１」の場合、後述するATAレジスタ値１２８に記述されるReadコマンド結果が有効とする。ビット番号３０乃至２８のCPU割込条件１２２には、別テーブルに書いているPIO CPU割り込み要因発生条件のうちどの条件を使うかを決定する情報が記述される。
【００８４】
ビット番号２７乃至２４の読み出し繰り返し条件（Rd繰返し条件）１２３には、別テーブルに書いている読み出し繰り返し条件のうちどの条件を使うかを決定する情報が記述される。なお、この設定は、読み出しの場合のみ有効であり、書き込み時は無効である。ビット番号２３のタイムウェイト（TW）１２４は、処理を一時停止するか否かを示すフラグであり、一時停止せずに処理が開始されるようにする場合、値が「０」に設定され、処理が一時停止され、設定されたウェイト時間待機した後、処理が開始されるようにする場合、値が「１」に設定される。
【００８５】
ビット番号２２のINTRQウェイト（IW）１２５は、ドライブ２２より供給されるCPUの割り込み要求を示すINTRQ信号が供給されるまで処理を一時停止するか否かを示すフラグであり、INTRQ信号を待たずに処理が開始されるようにする場合、値が「０」に設定され、処理が一時停止され、INTRQ信号を待ってから処理が開始されるようにする場合、値が「１」に設定される。ビット番号２１のライト/リード設定（RXW）１２６は、書き込み処理を実行するか読み出し処理を実行するかを設定するフラグであり、ドライブ２２の記録媒体の記録領域（以下、ATAレジスタと称する）の情報を読み出す読み出し処理を実行するように設定する場合、この値が「０」に設定され、ATAレジスタに情報を書き込む書き込み処理を実行するように設定する場合、この値が「１」に設定される。
【００８６】
ビット番号２０乃至１６のATAアドレス（ATA Address）１２７には、読み書きするATAレジスタのアドレスが記述される。ビット番号２０にはチップセレクト信号CS1の値が記述され、ビット番号１９にはチップセレクト信号CS0の値が記述され、ビット番号１８にはデバイスアドレス信号DA2の値が記述され、ビット番号１７にはデバイスアドレス信号DA1の値が記述され、ビット番号１６にはデバイスアドレス信号DA0の値が記述される。なお、特別なモードの時に、このATAアドレス１２７の値が「０」である場合、ATAレジスタの読み書きは行われない。また、このATAアドレス１２７の値が「０」であり、読み書きさせるデータの値として「0x0001」が指定された場合、ATAホストハードウェア２１は、PIO一時停止モードに移行し、このATAアドレス１２７の値が「０」であり、読み書きさせるデータの値として「0x0FFF」が指定された場合、スルーPIO転送モードの終了を示す（EOF）。
【００８７】
ビット番号１５乃至０のATAレジスタ値１２８は、ATAレジスタに書き込む内容やATAレジスタより読み出した内容が記述される。なお、データレジスタの内容についてのみ16ビットが使用され、その他のレジスタに関する情報の場合、8ビットのみが有効になる。
【００８８】
以上のようなスクリプトを、CPU２３がSRAM５２の領域１０１に保持させ、スルーPIOスタートを指示すると、ATAホストハードウェア２１は、そのSRAM５２のスクリプト手順どおりにPIO転送モードによるデータ転送処理を実行し、ドライブ２２のATAレジスタにデータを読み書きする。
【００８９】
図１０は、領域１０２に記述されるPIO CPU割り込み要因発生条件の構成例を示す図である。
【００９０】
PIO CPU割り込み要因発生条件１０２のビット番号３１乃至２１のリザーブ（RSV）１３１は予備領域であり、通常使用されない。以下において、リザーブ（予備領域）についてはその説明を省略する。
【００９１】
ビット番号２０のINTRQ設定１３２は、CPU２３からのINTRQ信号を割り込み要因にするか否かを指示する設定情報であり、この値が「１」の場合、PIO CPU割り込み要因がセットされ、この値が「０」の場合、INTRQ信号は無視される。ビット番号１６のアンド/オア設定１３４は、PIO CPU割り込み条件有効ビット設定１３５において複数のビットが有効である場合、それらの割り込み要因発生条件の論理積（アンド）を割り込み要因発生条件とするか、論理和（オア）を割り込み要因発生条件とするかを指定する設定情報である。
【００９２】
ビット番号１５乃至８のPIO CPU割り込み条件有効ビット設定１３５は、PIO Readコマンドに対する応答として保持されたレジスタ値の内、下位８ビットのどのビットをPIO CPU割り込み要因発生条件に使用するかを指定する設定情報である。ビット番号７乃至０のPIO CPU割り込み条件値１３６は、PIO Readコマンドに対する応答として保持されたレジスタ値の内、PIO CPU割り込み条件有効ビット設定１３５で有効なビットがどの値の時にPIO CPU割り込み要因を発生させるかを指定する設定情報である。
【００９３】
すなわち、領域１０２には、領域１０１に記述されるスルーPIOスクリプトのビット番号３０乃至２８のCPU割込条件１２２で指定されるCPU割込み条件の設定内容が記述される。この設定は、複数記述され、CPU割込条件１２２により、どの設定をCPU割り込み要因発生条件として使用するかの指定が行われる。例えば、INTRQ信号を割り込み要因にせずに、ステータスレジスタのBUSYビットとDRQビットの値がともに「０」であり、かつ、ERRビットの値が「１」のとき、割り込み要因として設定する場合、ATAホスト３１は、ステータスレジスタにおいてBUSYビットのビット番号が７であり、DRQビットのビット番号が３であり、ERRビットのビット番号が０であるので、このPIO CPU割込み要因発生条件の値を「+0x00018901」と設定する。
【００９４】
図１１は、領域１０２に記述される読み出し繰り返し/IfGoto条件のテーブルの構成例を示す図である。
【００９５】
ビット番号１６のアンド/オア設定１４２は、読み出し繰り返し/IfGoto条件有効ビット設定１４３において複数のビットが有効である場合、それらの条件の論理積（アンド）を読み出し繰り返し/IfGoto条件とするか、論理和（オア）を読み出し繰り返し/IfGoto条件とするかを指定する設定情報である。
【００９６】
ビット番号１５乃至８の読み出し繰り返し/IfGoto条件有効ビット設定１４３は、PIO Readコマンドに対する応答として保持されたレジスタ値の内、下位８ビットのどのビットを読み出し繰り返し/IfGoto条件に使用するかを指定する設定情報である。ビット番号７乃至０の読み出し繰り返し/IfGoto条件値１４４は、PIO Readコマンドに対する応答として保持されたレジスタ値の内、読み出し繰り返し/IfGoto条件有効ビット設定１４３で有効なビットがどの値の時にPIO Readコマンドの繰り返しを実行させるか、またはIfGotoコマンドを実行させるかを指定する設定情報である。
【００９７】
すなわち、領域１０２には、領域１０１に記述されるスルーPIOスクリプトのビット番号２７乃至２４の読み出し繰り返し条件１２３で指定されるReedコマンドの繰り返し条件の設定内容、または、後述するIDMA PIOスクリプトの２行目（＋４バイト）のビット番号２３乃至２０のIfGoto条件２００で指定されるIfGotoコマンドの実行条件の設定内容が記述される。この設定は、複数記述され、読み出し繰り返し条件１２３またはIfGoto条件２００により、どの設定を条件として使用するかの指定が行われる。例えば、このPIO 読み出し繰り返し/IfGoto条件のテーブルの値が「+0x00000000」である場合、Readコマンドが繰り返しされない。また、例えば、この読み出し繰り返し/IfGoto条件のテーブルの値が「+0x00008888」である場合、繰り返しステータスレジスタにおいてBUSYビットのビット番号が７であり、DRQビットのビット番号が３であるので、繰り返しステータスレジスタのBUSYビットの値が「０」となり、かつ、DRQビットの値が「０」となるまで空読みを繰り返す。
【００９８】
なお、領域１０２は、PIO CPU割り込み要因発生条件と読み出し繰り返し/IfGoto条件のテーブルにより共有され、これらの内、いずれか一方が記述される。また、読み出し繰り返し/IfGoto条件のテーブルは、領域１０３にも記述される。
【００９９】
図１２は、領域１０４に構成されるユーザ足し算レジスタの構成例を示す図である。
【０１００】
ビット番号３１乃至０のユーザ足し算値（User足し算値）１５１は、IDMA転送モード時においてエラーレートの計算等に用いられるレジスタであり、後述するIDMA PIOスクリプトの設定でこのUser足し算値１５１が指定されていると、PIO読み出し値がこのUser足し算値１５１に格納されている値に足しこまれ、その演算結果がUser足し算値１５１に格納される。このUser足し算値１５１の値は、Writeコマンド時に初期値がセットされる。
【０１０１】
図１３は、領域１０５および領域１０６に構成されるIDMA用のPRDテーブルの構成例を示す図である。
【０１０２】
図１３において、１行目（＋０バイト）のビット番号３１の完了フラグ（CPT）１６１は、処理の完了を示すフラグであり、テーブル書き込み時に「０」がセットされ、処理完了時に「１」がセットされる。ATAホスト３１は、Readコマンド発行後にこのフラグを読み込み、値が「１」の場合、そのPRDテーブルに対応するIDMA処理が終了したと判定する。１行目（＋０バイト）のビット番号２８のNo Data Transfer（NDT）１６２は、DMA転送を制御するフラグであり、このフラグの値が「１」である場合、DMA処理は実行されない。なお、その場合も、PIO処理は実行される。
【０１０３】
１行目（＋０バイト）のビット番号２７乃至０のSDRAM０開始アドレス（SDRAM ０ Start Address）１６３、および３行目（＋８バイト）のビット番号２７乃至０のSDRAM１開始アドレス（SDRAM １ Start Address）１６７には、IDMA転送モードにおける処理においてATAホストハードウェア２１がアクセスするSDRAMの開始アドレスが格納される。SDRAM０の設定に基づいてアクセスが行われた後、SDRAM１の設定に基づいたアクセスが行われる。２行目（＋４バイト）のビット番号２７乃至０のSDRAM０レングス（SDRAM ０ Length）１６６には、IDMAがアクセスするSDRAM０の長さの設定が格納される。
【０１０４】
２行目（＋４バイト）のビット番号３１の処理フラグ（Exe）１６４は、その値により、現在処理中であるか否かを示す。この処理フラグ１６４は、異常終了した際に、何の処理を行っていたかを判別するためのフラグである。２行目（＋４バイト）のビット番号２８のコンティニュー（CTN）１６５は、SDRAMアドレスの設定が３アドレス以上続くか（追加のSDRAMのアドレスが存在するか）否かの設定に関する情報が格納される。例えば、このコンティニュー１６５の値が「０」である場合、追加のSDRAMのアドレスが存在せず、値が「１」である場合、追加のSDRAMのアドレスが存在する。
【０１０５】
５行目（＋１６バイト）のビット番号３１乃至０のデバイススタートLBA１６８（デバイスStartLBA）は、ドライブ２２にアクセスする際の開始LBAの情報が格納される。６行目（＋２０バイト）のビット番号３１乃至０のデバイスセクタレングス１６９（デバイスセクタLength）は、ドライブ２２にアクセスする長さをセクタ数で指定する情報が格納される。拡張PRDテーブルの設定が無効の場合、デバイスセクタレングス１６９の値が「０」のときはこのPRDテーブルがEORであることを示す。拡張PRDテーブルの設定が有効の場合、EOFの設定に従う。
【０１０６】
７行目（＋２４バイト）ビット番号２６のテーブルタイプ（TBL Type）１７１は、領域１０６に格納されている情報の種類を示すフラグである。例えば、値が「０」のときは、通常のPRDテーブルが格納されていることを示し、値が「１」のときは、SDRAMアドレス追加設定用テーブルが格納されていることを示す。７行目（＋２４バイト）ビット番号２５のピックアップ選択フラグ（OP）１７２は、後述するように、ドライブ２２のピックアップが複数ある場合にそのピックアップを指定する情報が格納される。
【０１０７】
７行目（＋２４バイト）ビット番号２４のライト/リード設定（RXW）１７３は、DMA処理において、書き込み処理を実行するか読み出し処理を実行するかを設定するフラグであり、ATAレジスタの情報を読み出す読み出し処理を実行するように設定する場合、この値が「０」に設定され、ATAレジスタに情報を書き込む書き込み処理を実行するように設定する場合、この値が「１」に設定される。
【０１０８】
７行目（＋２４バイト）ビット番号５乃至０のDMA実行コマンド用PIOスクリプト番号（DMA ExeコマンドPIOスクリプトNo.）１７４、８行目（＋２８バイト）ビット番号２９乃至２４の単一DMA終了ステータスリード用PIOスクリプト番号（Mono DMA 終了Status Read PIOスクリプトNo.）１７５、８行目（＋２８バイト）ビット番号２１乃至１６の単一DMAコマンド発行用PIOスクリプト番号（Mono DMA コマンド発行 PIOスクリプトNo.）１７６、８行目（＋２８バイト）ビット番号１３乃至８のPRD終了処理用PIOスクリプト番号（PRD終了処理 PIOスクリプトNo.）１７７、８行目（＋２８バイト）ビット番号５乃至０のPRD開始処理用PIOスクリプト番号（PRD開始処理 PIOスクリプトNo.）１７８には、IDMA転送モードにおいて、それぞれのフェーズで実行されるPIOスクリプトの開始番号が格納されている。
【０１０９】
図１４は、領域１０６に構成されるIDMA用のSDRAMアドレス追加設定テーブルの構成例を示す図である。
【０１１０】
図１４において、１行目（＋０バイト）のビット番号２７乃至０のSDRAM１開始アドレス（SDRAM １ Start Address）１８１、３行目（＋８バイト）のビット番号２７乃至０のSDRAM２開始アドレス（SDRAM ２ Start Address）１８３、および、５行目（＋１６バイト）のビット番号２７乃至０のSDRAM３開始アドレス（SDRAM ３ Start Address）１８５には、IDMA転送モードにおける処理においてATAホストハードウェア２１がアクセスするSDRAMの開始アドレスが格納される。SDRAM０の設定に基づいてアクセスが行われた後、SDRAM１の設定に基づいたアクセスが行われる。２行目（＋４バイト）のビット番号２７乃至０のSDRAM１レングス（SDRAM １ Length）１８２、および、４行目（＋１２バイト）のビット番号２７乃至０のSDRAM２レングス（SDRAM ２ Length）１８４には、IDMAがアクセスするSDRAMの長さの設定が格納される。
【０１１１】
２行目（＋４バイト）のビット番号３１の処理フラグ（Exe）１６４は、その値により、現在処理中であるか否かを示す。この処理フラグ１６４は、異常終了した際に、何の処理を行っていたかを判別するためのフラグである。２行目（＋４バイト）のビット番号２８のコンティニュー（CTN）１６５は、SDRAMアドレスの設定が３アドレス以上続くか（追加のSDRAMのアドレスが存在するか）否かの設定に関する情報が格納される。例えば、このコンティニュー１６５の値が「０」である場合、追加のSDRAMのアドレスが存在せず、値が「１」である場合、追加のSDRAMのアドレスが存在する。
【０１１２】
６行目（＋２０バイト）のビット番号３１のノットEOF（NEOF）１８６は、ハードウェアがEOFと認識しないようにする情報が格納される。すなわち、ノットEOF１８６には、固定値「１」が格納される。７行目（＋２４バイト）ビット番号２６のテーブルタイプ（TBL Type）１８７は、図１３のテーブルタイプ１７１と同様であるのでその説明を省略する。図１４の場合、SDRAMアドレス追加設定用テーブルであるので、値「１」が格納される。
【０１１３】
なお、図１３において説明したコンティニュー１６５の値が「１」である場合、その次のテーブルは、必ず、図１４のSDRAMアドレス追加設定用テーブルが格納される。
【０１１４】
なお、領域１０６は、IDMA用のPRDテーブル（テーブル番号８のPRDテーブル）とSDRAMアドレス追加設定用テーブルにより共有される。
【０１１５】
図１５は、領域１０７に構成されるIDMA用のPIOスクリプトの構成例を示す図である。
【０１１６】
図１５において、１行目（＋０バイト）のビット番号３０乃至０の構成は、図９を参照して説明したスルーPIOスクリプトの場合と同様であるのでその説明を省略する。すなわち、１行目において、ビット番号３０乃至２８のCPU割込条件１９２はCPU割込条件１２２に対応し、ビット番号２７乃至２４の読み出し繰り返し条件（Rd繰返し条件）１９３は読み出し繰り返し条件１２３に対応し、ビット番号２３のタイムウェイト（TW）１９４はタイムウェイト１２４に対応し、ビット番号２２のINTRQウェイト（IW）１９５はINTRQウェイト１２５に対応し、ビット番号２１のライト/リード設定（RW）１９６はライト/リード設定１２６に対応し、ビット番号２０乃至１６のATAアドレス（Address）１９７はATAアドレス１２７に対応し、ビット番号１５乃至０のATAレジスタ値１９８はATAレジスタ値１２８に対応する。
【０１１７】
なお、図１５の場合、１行目（＋０バイト）のビット番号３１には、EOF１９１が格納され、このビットの値が「１」であるとき、このスクリプトの実行終了後に１ブロックのPIOスクリプト制御処理が終了される。ただし、IfGoto条件により他のスクリプトに処理が移る場合は、このEOF１９１の値は無視される。
【０１１８】
２行目（＋４バイト）のビット番号２９乃至２４のIfGotoジャンプ先スクリプト番号（IfGoto Jump先 Scr No.）１９９には、各種の状態がIfGoto条件に合致する場合のジャンプ先のスクリプト番号が格納される。２行目（＋４バイト）のビット番号２３乃至２０のIfGoto条件番号（IfGoto条件No.）２００には、そのIfGoto条件として使用される条件テーブルの番号が格納される。
【０１１９】
２行目（＋４バイト）のビット番号１９乃至１６のリードデータ足し算レジスタ（Rd Data足し算Reg）２０１は、エラーレート等を内部レジスタに足し算していく場合に。どのレジスタに値を足すかの設定が格納される。例えば、このレジスタの値が「０」乃至「７」である場合、ATAホスト３１は、その番号の、領域１０４に格納されるユーザ足し算レジスタにリードした値を足す。また、例えば、このレジスタの値が「８」である場合、ATAホスト３１は、足し算を行わず、レジスタの値が「９」乃至「１５」である場合は、リザーブする。
【０１２０】
２行目（＋４バイト）のビット番号１１乃至８のLBA,Tag代入モード２０２は、ATAホストハードウェア２１のATAインタフェース処理部３６がドライブ２２のATAレジスタに書き込みを行う際に、ATAレジスタ値を、IDMA制御部３７が自動的に発生させたLBA値またはTag値に置き換えてATAレジスタに書き込むように指定する情報である。例えば、ATAインタフェース処理部３６は、この値が「０」である場合代入を行わず、値が「１」である場合ATAレジスタ値のビット番号７乃至３にTag値を代入する。また、ATAインタフェース処理部３６は、値が「２」である場合、ATAレジスタ値のビット番号７乃至０にLBA値のビット番号「７」乃至「０」の値を代入し、値が「３」である場合、ATAレジスタ値のビット番号７乃至０にLBA値のビット番号「１５」乃至「８」の値を代入し、値が「４」である場合、ATAレジスタ値のビット番号７乃至０にLBA値のビット番号「２３」乃至「１６」の値を代入し、値が「５」である場合、ATAレジスタ値のビット番号３乃至０にLBA値のビット番号「２７」乃至「２４」の値を代入し、値が「６」である場合、ATAレジスタ値のビット番号７乃至０にLBA値のビット番号「３１」乃至「２４」の値を代入し、値が「７」である場合、ATAレジスタ値のビット番号１５乃至０にLBA値のビット番号「１５」乃至「０」の値を代入し、値が「８」である場合、ATAレジスタ値のビット番号１５乃至０にLBA値のビット番号「３１」乃至「１６」の値を代入し、値が「９」乃至「１５」である場合リザーブする。
【０１２１】
２行目（＋４バイト）のビット番号１のINTRQ一時停止指定情報（IRQPS）２０３は、IDMA転送モードにおけるPIO処理のアクセスにおいて、INTRQ信号によってPIO CPU割込み要因が発生した場合にPIO処理を一時停止するかどうかを指定する情報である。この値が「０」である場合、一時停止は行われずに処理が続行され、この値が「１」である場合、PIO処理は一時停止される。２行目（＋４バイト）のビット番号０のリードデータ一時停止指定情報（RDPS）２０４は、IDMA転送モードにおけるPIO処理のリードデータでPIO CPU割込み要因が発生した場合にPIO処理を一時停止するかどうかを指定する情報である。この値が「０」である場合、一時停止は行われずに処理が続行され、この値が「１」である場合、PIO処理は一時停止される。
【０１２２】
このスクリプトの複数の組み合わせにより、IDMA転送モードの処理であるIDMA処理の単体DMAコマンド発行用PIOスクリプト、単体DMA終了ステータスリード用PIOスクリプト、またはPRD終了用PIOスクリプトに利用される。
【０１２３】
図１６は、レジスタ５３の領域１１１に構成されるATA全体に関わる設定情報の内、モード/ステータス情報の構成例を示す図である。
【０１２４】
領域１１１の一部である領域１１１Ａ（アドレス0x0400乃至0x0403）のモード/ステータス情報においては、ビット番号２８のIDMA処理開始フラグ（IDMSt）２１１は、IDMA処理開始を設定するフラグであり、このフラグの値が「１」のとき、テーブル番号０のPRDテーブルよりIDMA処理が開始される。IDMA処理開始フラグ２１１の値が「０」の場合、IDMA処理は開始されない。例えば、スルーPIO転送モード時にこのフラグの値が「１」に設定されると、IDMA処理が予約され、待機状態になり次第、直ちにIDMA転送モードに移行し、IDMA処理が開始される。ビット番号２４のスルーPIO処理開始フラグ（ThrPIOSt）２１２は、スルーPIO制御処理開始を設定するフラグであり、このフラグの値が「１」のとき、スクリプト番号０のスルーPIOスクリプトよりスルーPIO制御処理が開始される。スルーPIO開始フラグ２１２の値が「０」の場合、スルーPIO制御処理は開始されない。例えば、IDMA転送モード時にこのフラグの値が「１」に設定されると、スルーPIO制御処理が予約され、待機状態になり次第、直ちにスルーPIO転送モードに移行し、スルーPIO制御処理が開始される。ビット番号２乃至０のトップステータス（TOP Status）２１３には、ATAホストハードウェア２１のステータスを示す情報が格納される。このトップステータス２１３の値が「０」の場合、ATAホストハードウェア２１は、待機状態（IDLE）であり、値が「１」の場合、ATAホストハードウェア２１は、スルーPIO制御処理中であり、値が「２」の場合、ATAホストハードウェア２１は、IDMA処理中であり、値が「４」の場合、ATAホストハードウェア２１は、ATAデバイスであるドライブ２２のリセット処理中である。
【０１２５】
すなわち、このモード/ステータス情報には、ATAホストハードウェア２１のトップレベルのステータスと自分が設定しているスタート予約処理に関する情報が格納される。例えば、IDMA処理を実行する場合、このモード/ステータス情報の値は、「0x10000000」に設定される。
【０１２６】
図１７は、レジスタ５３の領域１１１に構成されるATA全体に関わる設定情報の内、一時停止情報の構成例を示す図である。
【０１２７】
領域１１１の一部である領域１１１Ｂ（アドレス0x0404乃至0x0407）の一時停止情報において、ビット番号１５乃至８の読み出し繰り返しウェイト量（Read繰返しWAIT量）２１４は、システムクロック換算で何クロックリード繰返しウェイトを発生させるかを指定する情報である。現在の状況が図９のPIOスクリプトレジスタのビット番号２７乃至２４に格納される読み出し繰返し条件に合致する場合、どれくらいの期間ウェイトを発生させて再度読み出しを行うかを設定する情報が記述される。
【０１２８】
この一時停止情報において、ビット番号７乃至０のタイムウェイト量（TIME WAIT量）２１５は、例えば図９のタイムウェイト１２４において、一時停止するように設定されていた場合に、PIOコマンド発生前にどれぐらいの期間一時停止させるかを設定するためのレジスタである。
【０１２９】
図１８は、領域１１２に構成されるスルーPIO転送モードに関わる設定情報の内、スルーPIO処理設定の構成例を示す図である。
【０１３０】
領域１１２の一部である領域１１２Ａ（アドレス0x0440乃至0x0443）のスルーPIO処理設定において、ビット番号９のアボート設定（ABT）２２１は、スルーPIOの強制終了（アボート）を指定するフラグである。このフラグの値が「１」である場合、安全なタイミングでスルーPIO転送モードから待機状態に移行される。ただし、セマフォが取得されている場合、セマフォが優先されるようにし、セマフォを返却してから強制終了するようにする。
【０１３１】
ビット番号８の一時停止設定（PS Off）２２２は、一時停止に関する動作を指定するフラグであり、このフラグの値が「１」である場合、ATAホストハードウェア２１は、一時停止状態が解除され、通常モードに移行し、このフラグの値が「０」である場合はそのまま一時停止状態が保たれる。
【０１３２】
ビット番号１のINTRQ一時停止設定（IRQ PS）２２３は、スルーPIO転送モードにおけるアクセス処理においてINTRQ信号によりPIO CPU割り込み要因が発生した場合にPIO処理を一時停止するか否かを指定するフラグであり、このフラグの値が「０」である場合、ATAホストハードウェア２１は、一時停止せずにPIO処理を続行し、このフラグの値が「１」である場合、INTRQ信号に基づいてPIO処理を一時停止する。
【０１３３】
ビット番号０のリードデータ一時停止設定（RD PS）２２４は、スルーPIO転送モードにおけるReadデータによりPIO CPU割り込み要因が発生した場合にPIO処理を一時停止するか否かを指定するフラグであり、このフラグの値が「０」である場合、ATAホストハードウェア２１は、一時停止せずにPIO処理を続行し、このフラグの値が「１」である場合、Readデータに基づいてPIO処理を一時停止する。
【０１３４】
図１９は、領域１１２に構成されるスルーPIO転送モードに関わる設定情報の内、セマフォ設定の構成例を示す図である。
【０１３５】
領域１１２の一部である領域１１２Ｂ（アドレス0x0448乃至0x044B）のセマフォ設定のビット番号０のスルーPIOセマフォ２２５は、スルーPIO制御処理を実行中にスルーPIOスクリプトを追加したり、変更したりする権利を示すフラグである。ATAホスト３１が、このセマフォ設定を読み出し、その値が「０」である場合、セマフォ確保に失敗したことになる。逆に、このセマフォ設定を読み出し、その値が「１」である場合、ATAホスト３１は、セマフォ獲得に成功したと判断し、PIOスクリプトに関する処理を行う。セマフォを獲得した場合、ATAホスト３１は、このセマフォ設定を更新し、セマフォを返却する。
【０１３６】
すなわち、ATAホスト３１は、スルーPIO コマンドを追加する場合にセマフォ設定を読み込み、セマフォを確保した後、スルーPIOテーブルの追加を行い、セマフォを返却する。ATAホスト３１がセマフォを確保している間はPIOスクリプトに関する処理は次の単体PIO処理の手前で一時停止することになるので、なるべく早くセマフォを返却する必要がある。なお、ATAホスト３１は、セマフォを確保していればどのPIOスクリプトを更新するようにしてもよいが、現在PIO実行中のテーブルや未実行のテーブルを更新すると処理に矛盾が発生する場合があるので、処理済みのテーブルのみを更新するのが望ましい。
【０１３７】
図２０は、領域１１３に構成されるIDMA転送モードに関わる設定情報に関わる設定情報の１つである第１のIDMA処理設定の構成例を示す図である。
【０１３８】
領域１１３の一部である領域１１３Ａ（アドレス0x0480乃至0x0483）の第１のIDMA処理設定のビット番号３１乃至１６の単一DMAセクタレングス（Mono DMA Sector Length）２３１は、単一のDMA処理１回当たりに何セクタ分のデータを処理するかを設定する情報である。IDMA PIOコマンドLBA代入の計算で１つのDMA処理が終了するとLBAにこの設定の値が加算される。ビット番号９のアボート設定（ABT）２３２は、IDMAの強制終了（アボート）を指定するフラグである。このフラグの値が「１」である場合、安全なタイミングでIDMA転送モードから待機状態に移行される。このとき、ATAホストハードウェア２１は、ステータス報告フェーズ終了時一時停止フラグ２３６の値を参照し、動作モードが、ステータス報告フェーズ終了時一時停止状態にあることを確認してからIDMA処理を強制終了する。なお、IDMA処理において強制終了処理を実行するとDMAコマンド数とDMAデータ転送数に不整合が生じるので必ずデバイスリセットまたはそれに準ずる処理が行われる。
【０１３９】
ビット番号８のIDMA処理一時停止解除設定（PRD PS Off）２３３は、IDMA処理の一時停止を解除し、通常モードに移行するためのフラグであり、このフラグに値「１」を書き込んだ瞬間のみ有効になり、この値により、IDMA処理の一時停止が解除される。
【０１４０】
ビット番号５のピックアップ切り替えタイミング設定（Wr OP Chg Tmg）２３４は、後述するように、ドライブ２２のピックアップが複数存在する場合、書き込み処理において、処理を行うピックアップの切り替えタイミングをどこにするかを指定する情報である。例えば、この設定の値が「０」である場合、切り替え処理は、レポートスクリプト処理前に行われ、この設定の値が「１」である場合、レポートまたはENDスクリプト処理後に行われる。ビット番号４のデバイス番号（Dev Num）２３５は、ATAデバイスであるドライブがどのようなデバイスであるかを示す情報である。例えば、値が「０」である場合、ドライブ２２は、そのドライブ２２が有する２つのピックアップがATAインタフェースにおいて１つのデバイスとして処理される１Dev−２OPであり、が「１」である場合、ドライブ２２が有する２つのピックアップがATAインタフェースにおいて２つのデバイスとして処理される２Dev−２OPである。後述するように、このようなドライブ２２の違いにより、ATAホストハードウェア２１の処理のタイミングが異なる。なお、ドライブ２２のピックアップの数が１つである場合（すなわち、１Dev−１OPである場合）、この値はどちらでもよい。
【０１４１】
ビット番号３のステータス報告フェーズ終了時一時停止フラグ（St End PS）２３６は、PIOスクリプトのステータス報告フェーズ終了時において一時停止された状態を示すフラグであり、この値が「１」である場合、一時停止状態にある。この一時停止は、単一PRDテーブル終了時一時停止割り込みにより行われる。なお、上述したように、このフラグの値は、強制終了（アボート）処理時に参照される。このフラグを参照せずに、単純にアボート処理を行うと、ATAバスを占有したまま強制終了してしまう等の不具合が生じる恐れがある。ビット番号２の単一PRDテーブル終了時一時停止設定フラグ（Mn PRD END PS）２３７は、PRDテーブル１つの処理が終了する毎にIDMA処理を一時停止させるかどうかを指定するフラグであり、その値が「０」である場合は一時停止せず、値が「１」であるばあいは一時停止する。
【０１４２】
図２１は、領域１１３に構成されるIDMA転送モードに関わる設定情報に関わる設定情報の１つである第２のIDMA処理設定の構成例を示す図である。
【０１４３】
領域１１３の一部である領域１１３Ｂ（アドレス0x0484乃至0x0487）の第２のIDMA処理設定のビット番号２８の拡張PRD設定（Ex PRD）２３８は、PRDテーブルの数を拡張するか否かを指定するフラグであり、その値が「０」である場合、拡張せず（８個のPRDテーブル）、その値が「１」の場合、拡張PRDテーブル（９番目のPRDテーブル）が存在する。
【０１４４】
ビット番号２７乃至２４のEOF番号２３９は、EOFとなる最後のPRDテーブルの番号を指定する情報が格納される。このフラグは、拡張PRD設定２３８の値が「１」である場合（拡張PRDテーブルが存在する場合）のみ有効とされる。PRDテーブル（拡張PRDテーブル）は、IDMA用のSDRAMアドレス追加設定テーブルと、その格納される領域を共有する（領域１０６）。この領域１０６において、PRDテーブルに続いてIDMA用のSDRAMアドレス追加設定テーブルが格納されている場合、EOF番号は、PRDテーブルの番号を指定する。
【０１４５】
ビット番号１５乃至０のリードDMAキュー制限数（Read DMA Cue Limit Number[RUB]）２４０は、１つのピックアップあたりの限界キューイング数が格納される。ドライブ２２が1Dev-2OPである場合、この設定の２倍のキューイング数が１デバイスに与えられることになる。従って、この場合、この設定をデバイス限界キューイング数の半分以下に設定する。また、1Dev-2OP時には Tag 番号のMSBにOP番号を入れてOP間の Tag番号が混同しないようになされている。Tag番号は5bitであるので、1OPあたり16個のTagしか与えられない。よって、同一OP内でのTag番号の混同を避けるために、1Dev-2OP時には当設定を16以下にすることが望ましい。2Dev-2OP時にはこれと同様の理由で当設定を３２以下にすることが望ましい。
【０１４６】
図２２は、領域１１３に構成されるIDMA転送モードに関わる設定情報に関わる設定情報の１つである第３のIDMA処理設定の構成例を示す図である。
【０１４７】
領域１１３の一部である領域１１３Ｃ（アドレス0x0494乃至0x0497）の第３のIDMA処理設定のビット番号２７乃至０の1RUBプロセスバイト数設定（DMA 1RUB Prcess Byte Number）２３８は、DMA処理を行う際に、１RUBで何バイト処理されるかをバイト数で指定する情報が格納される。この情報は、デバイス書き込み時において余分なデータをデバイスに送らないようにするために利用され、デバイス読み出し時において分割DMAをされた場合にどのDMAターミネートで１RUBが終了したかを把握するのに利用される。
【０１４８】
図２３は、領域１１３に構成されるIDMA転送モードに関わる設定情報に関わる設定情報の１つであるセマフォ設定の構成例を示す図である。
【０１４９】
領域１１３の一部である領域１１３Ｄ（アドレス0x048C乃至0x048F）のセマフォ設定のビット番号０のIDMA PIOセマフォ（IDM PIO SMF）２４２は、IDMA処理実行中のIDMA PRDテーブル追加または変更の権利を示すセマフォの確保を示すフラグである。このフラグの値が「０」である場合、セマフォ確保に失敗したことを示し、値が「１」である場合、セマフォの確保に成功したことを示す。IDMA処理を実行中である場合、ATAホスト３１は、セマフォを獲得していなければPRDテーブルの追加または変更を行うことができない。ATAホストハードウェア２１の状態が待機モードまはたスルーPIO転送モードである場合、セマフォを獲得しなくてもPRDテーブルの追加または変更を行うことができる。
【０１５０】
ATAホスト３１は、PRDテーブルを追加または変更する場合にセマフォ設定を読み込み、セマフォを確保した後、PRDテーブルの追加を行い、セマフォを返却する。ATAホスト３１がセマフォを確保している間はPRDテーブルに関する処理は次のPRDテーブルに関する処理の手前で一時停止することになるので、なるべく早くセマフォを返却する必要がある。なお、ATAホスト３１は、セマフォを確保していればどのPRDテーブルを更新するようにしてもよいが、現在処理中のテーブルや未実行のテーブルを更新すると処理に矛盾が発生する場合があるので、処理済みのテーブルのみを更新するのが望ましい。
【０１５１】
図２４は、領域１１３に構成されるIDMA転送モードに関わる設定情報に関わる設定情報の１つであるLBA設定の構成例を示す図である。
【０１５２】
領域１１３の一部である領域１１３Ｅ（アドレス0x0490乃至0x0493またはアドレス0x049C乃至0x049F）のLBA設定のビット番号３１乃至０の実行LBA情報（Execute DMA LBA）２４３は、現在実行中若しくは直近にDMA転送モードによるデータ転送を実行したLBAに関する情報が格納される。
【０１５３】
図２５は、領域１１３に構成されるIDMA転送モードに関わる設定情報に関わる設定情報の１つである割り込み要因設定の構成例を示す図である。
【０１５４】
領域１１３の一部である領域１１３Ｆの割り込み要因設定のビット番号１５のIDMA PIO INTRQ割り込み要因（IDM PIO IRQ IRQ）２４４は、その値が「１」である場合、IDMA PIO転送モードのドライブ２２へのアクセスにおいて、ドライブ２２のINTRQ信号によりCPU割り込み要因が発生したことを示すフラグである。ビット番号１４のIDMA PIOリードデータ割り込み要因（IDM PIO RD IRQ）２４５は、その値が「１」である場合、IDMA PIO転送モード時にドライブ２２より読み出したデータによりCPU割り込み要因が発生したことを示すフラグである。
【０１５５】
ビット番号１３の一時停止フラグ（IDM PIO PS）２４６は、その値が「１」である場合、IDMA PIO転送モードの処理中に一時停止が発生したことを示すフラグである。ビット番号１２の単一PRD終了時一時停止フラグ（IDM PIO PS）２４７は、その値が「１」である場合、１PRDテーブルの処理が終了し、一時停止が発生していることを示すフラグである。
【０１５６】
ビット番号９の全PRDテーブル終了フラグ（IDM ALL PRD END）２４８は、その値が「１」である場合、全てのPRDテーブルの処理が終了したことを示すフラグである。ビット番号８の１PRDテーブル終了フラグ（IDM Mn PRD END）２４９は、その値が「１」である場合、１つのPRDテーブルの処理が終了したことを示すフラグである。
【０１５７】
ビット番号３の全スルーPIO処理終了フラグ（THR PIO ALL END）２５０は、その値が「１」である場合、スルーPIO転送モードの転送処理であるスルーPIO制御処理が全てのスクリプトについて終了したことを示すフラグである。ビット番号２のスルーPIO一時停止フラグ（THR PIO PS）２５１は、その値が「１」である場合、スルーPIO制御処理中に一時停止が発生したことを示すフラグである。ビット番号１のスルーPIO INTRQ割り込み要因（THR PIO IRQ IRQ）２５２は、その値が「１」である場合、スルーPIOモード時にINTRQ信号によりCPU割り込み要因が発生したことを示すフラグである。ビット番号０のスルーPIOリードデータ割り込み要因（THR PIO RD IRQ）２５３は、その値が「１」である場合、スルーPIOモード時にドライブ２２より読み出したデータによりCPU割り込み要因が発生したことを示すフラグである。
【０１５８】
ATAホスト３１は、CPU２３に制御されて、以上のようなレジスタ情報を内蔵するSRAM５２およびレジスタ５３に格納し、ATAホストハードウェア２１の各部は、これらのレジスタ情報に基づいて、図７に示されるようなモード遷移を行いながら、スルーPIO転送モードまたはIDMA転送モードによりデータ転送処理を行う。
【０１５９】
次に、スルーPIO転送モードにおけるデータ転送処理（スルーPIO制御処理）について説明する。
【０１６０】
図２６は、スルーPIO転送モードにおけるATAホストハードウェア２１の機能ブロックを示す図である。
【０１６１】
スルーPIO転送モード時の転送処理は、ATAホストハードウェア２１の各部の内、スルーPIO制御部３３単一PIOスクリプト処理部３４、PIO実行部３５、およびATAインタフェース３６よりなるスルーPIO処理ハードウェア２５５により実行される。
【０１６２】
スルーPIO転送モードにおいては、まず、矢印２６１のように、CPU２３がSRAM５２の領域１０１に、複数のPIO転送処理を実行させるスルーPIOスクリプトを格納する。そして、矢印２６２のように、CPU２３によりそのスルーPIOスクリプトの処理の実行開始がスルーPIO処理ハードウェア２５５に指示されると、スルーPIO処理ハードウェア２５５は、矢印２６３に示されるように、SRAM52の領域１０１より実行するスルーPIOスクリプトより必要な情報を取得する。そして、その取得した情報に基づいてスルーPIO制御処理を実行し、矢印２６５に示されるようにドライブ２２にアクセスしてデータ転送処理を行い、矢印２６４に示されるように、必要に応じて情報（例えば、ステータス情報やドライブ２２より読み出したデータ等）をSRAM５２に供給し格納させる。スルーPIO処理ハードウェア２５５矢印２６３乃至２６５のような処理を繰返し、スルーPIOスクリプトに基づくPIO処理を全て完了させる。スルーPIO制御処理が完了すると、矢印２６６に示されるように、処理結果がCPU２３に供給される。
【０１６３】
以上のようなスルーPIO制御処理の具体的な処理の流れの例を、図２７のフローチャートを参照して説明する。
【０１６４】
CPU２３によりスルーPIO制御処理の開始が指示されると、スルーPIO制御部３３は、最初にステップＳ１において、セマフォのロックを解除し、ステップＳ２において、実行するPIOスクリプトの番号を示すPIOスクリプトポインタを初期化し、例えば「０」にリセットする。そして、ステップＳ３においてセマフォを確保したか否かを判定し、確保するまで待機する。セマフォを確保するとスルーPIO制御部３３は、ステップＳ４において、PIOスクリプトポインタに指定されたPIOスクリプトをフェッチ（取得）する。
【０１６５】
そしてステップＳ５において、スルーPIO制御部３３は、フェッチしたPIOスクリプトがスルーPIO制御処理の終了を示すEOFであるか否かを判定し、EOFでないと判定した場合、ステップＳ６に処理を進める。ステップＳ６において、単一PIOスクリプト処理部３４は、スルーPIO制御部３３に制御され、単一PIOスクリプト処理を実行する。単一PIOスクリプト処理の詳細については、図２８のフローチャートを参照して説明する。
【０１６６】
単一PIOスクリプト処理が終了すると、スルーPIO制御部３３は、ステップＳ７において、必要に応じてスクリプトレジスタ（この場合スルーPIOスクリプト）のATAレジスタ値１２８をセットする。例えば、スルーPIO制御部３３は、PIO処理の完了を示す「Complete=1」をATAレジスタ値１２８にセットする。また、例えば、ドライブ２２のATAレジスタよりデータを読み出した場合、スルーPIO制御部３３は、その読み出したデータをATAレジスタ値１２８にセットする。
【０１６７】
ATAレジスタ値１２８をセットしたスルーPIO制御部３３は、ステップＳ８において、スルーPIO INTRQ割り込み要因２５２、スルーPIOリードデータ割り込み要因２５３、およびスルーPIO一時停止フラグ２５１の値に応じて外部用割り込み要因をセットする。この時点で割り込みがCPU２３に供給される。
【０１６８】
外部用割り込み要因をセットするとスルーPIO制御部３３は、処理をステップＳ９に進め、スルーPIO INTRQ割り込み要因２５２、スルーPIOリードデータ割り込み要因２５３、INTRQ一時停止設定２２３、および、リードデータ一時停止設定２２４の設定に応じて、スルーPIO一時停止フラグ２５１の値をセットする。
【０１６９】
ステップＳ１０において、スルーPIO制御部３３は、スルーPIO一時停止フラグ２５１の値が「１」であるか否かを判定し、「１」であると判定した場合、ステップＳ１１に処理を進め、PIO一時停止解除を取得するまで待機する。PIO一時停止解除を取得すると、スルーPIO制御部３３は、処理をステップＳ１２に進める。また、ステップＳ１０において、スルーPIO一時停止フラグ２５１の値が「０」であると判定した場合、スルーPIO制御部３３は、ステップＳ１１の処理を省略し、ステップＳ１２に処理を進める。
【０１７０】
ステップＳ１２において、スルーPIO制御部３３は、PIOスクリプトポインタをインクリメントし、次のPIOスクリプトに対する処理を実行するために、処理をステップＳ３に戻し、それ以降の処理を繰り返す。
【０１７１】
以上のようにして、スルーPIO制御部３３は、SRAM52の領域１０１に格納された複数のPIOスクリプトを順に処理していく。そして、最後のPIOスクリプトをフェッチし、ステップＳ５において、そのスクリプトがEOFであると判定すると、スルーPIO制御部３３は、処理をステップＳ１３に進める。
【０１７２】
スルーPIO制御部３３は、ステップＳ１３において、セマフォをロックし、ステップＳ１４において、全スルーPIO処理終了フラグ２５０、およびスルーPIO INTRQ割り込み要因２５２をセットすると、スルーPIO制御処理を終了する。
【０１７３】
スルーPIO制御処理が終了されると、ATAホスト３１は、ATAホストハードウェア２１の状態をスルーPIO転送モードから待機モードに移行する。
【０１７４】
次に、図２７のステップＳ６において実行される単一PIOスクリプト処理について、図２８のフローチャートを参照して説明する。
【０１７５】
単一PIOスクリプト処理を開始した単一PIOスクリプト処理部３４は、ステップＳ３１において、一時停止情報のタイムウェイト量２１５の設定に基づいて、その待機時間だけ待機する。待機時間が経過すると、単一PIOスクリプト処理部３４は、ステップＳ３２に処理を進め、INTRQウェイト１２５の値が「１」であるか否かを判定し、「１」であると判定した場合、処理をステップＳ３３に進め、ATAデバイス（ドライブ２２）からINTRQ信号を取得するまで待機し、INTRQ信号を取得すると、ステップＳ３４において、領域１０２に格納されるPIO CPU割り込み要因発生条件にINTRQ信号が含まれる場合は、割り込み要因設定のスルーPIO INTRQ割り込み要因２５２の値を「１」にセットし、処理をステップＳ３５に進める。また、ステップＳ３２において、INTRQウェイト１２５の値が「１」でないと判定した場合、単一PIOスクリプト処理部３４は、ステップＳ３３およびステップＳ３４の処理を終了し、ステップＳ３５に処理を進める。
【０１７６】
ステップＳ３５において、単一PIOスクリプト処理部３４は、スルーPIOスクリプトのATAアドレス１２７の値が「00000」であるか否かを判定し、「00000」でないと判定した場合、ステップＳ３６に処理を進める。
【０１７７】
ステップＳ３６において、単一PIOスクリプト処理部３４は、ライト/リード設定１２６の値を確認し、実行する処理が書き込み処理であるか否かを判定し、書き込み処理であると判定した場合、ステップＳ３７に処理を進める。ステップＳ３７において、PIO実行部３５は、単一PIOスクリプト処理部３４に制御されて、ATAインタフェース処理部３６を介してATAレジスタに対する書き込み処理（ドライバ２２に装着された記録媒体に対する書き込み処理）を実行する。そして、PIO実行部３５による書き込み処理が終了すると、単一PIOスクリプト処理部３４は、単一PIOスクリプト処理を終了し、図２７のステップＳ６に処理を戻す。ステップＳ６に処理が戻されると、スルーPIO制御部３３は、上述したようにステップＳ６の処理を終了し、ステップＳ７に処理を進める。
【０１７８】
また、図２８のステップＳ３６において、書き込み処理ではないと判定した場合、単一PIOスクリプト処理部３４は、ステップＳ３８に処理を進める。ステップＳ３８において、PIO実行部３５は、単一PIOスクリプト処理部３４に制御されて、ATAインタフェース処理部３６を介してATAレジスタに対する読み出し処理（ドライバ２２に装着された記録媒体に対する読み出し処理）を実行する。PIO実行部３５による読み出し処理が終了すると、単一PIOスクリプト処理部３４は、処理をステップＳ３９に進め、ATAデバイスから読み出したレジスタ値が、スルーPIOスクリプトの読み出し繰り返し条件１２３により選択された読み出し繰り返し/IfGoto条件に合致するか否かを判定し、合致すると判定した場合、ステップＳ４０に処理を進める。
【０１７９】
ステップＳ４０に処理を進めた単一PIOスクリプト処理部３４は、読み出し繰り返しウェイト量２１４で指定された時間だけ待機し、処理をステップＳ３８に戻し、それ以降の処理を繰り返す。
【０１８０】
ステップＳ３９において、ATAデバイスから読み出したレジスタ値が、読み出し繰り返し/IfGoto条件に合致しないと判定した場合、単一PIOスクリプト処理部３４は、ステップＳ４１に処理を進め、ATAデバイスから読み出したレジスタ値（リードデータ）が領域１０２に格納されるPIO CPU割り込み要因発生条件に合致していれば、割り込み要因設定のスルーPIO リードデータ割り込み要因２５３の値を「１」にセットし、単一PIOスクリプト処理を終了し、図２７のステップＳ６に処理を戻す。ステップＳ６に処理が戻されると、スルーPIO制御部３３は、上述したようにステップＳ６の処理を終了し、ステップＳ７に処理を進める。
【０１８１】
また、図２８のステップＳ３５において、ATAアドレス１２７の値が「00000」であると判定した場合、単一PIOスクリプト処理部３４は、ステップＳ４２に処理を進め、ATAレジスタ値が「0x0001」である場合、ATAレジスタへのアクセスを省略するとともに、割り込み要因設定のスルーPIO一時停止フラグ２５１の値を「１」にセットし、それ以外の場合は、単にATAレジスタへのアクセスを省略する。ステップＳ４２の処理を終了すると、単一PIOスクリプト処理部３４は、単一PIOスクリプト処理を終了し、図２７のステップＳ６に処理を戻す。ステップＳ６に処理が戻されると、スルーPIO制御部３３は、上述したようにステップＳ６の処理を終了し、ステップＳ７に処理を進める。
【０１８２】
以上のようにして、単一PIOスクリプト処理部３４は、単一PIOスクリプト処理を実行する。
【０１８３】
すなわち、スルーPIO転送モードにおいて、ATAホストハードウェア２１のスルーPIO処理ハードウェア２５５は、図２９に示されるように、スルーPIO制御処理を開始すると、最初にステップＳ５１において、SRAM５２の領域１０１に格納されているスルーPIOスクリプトの内、スクリプト番号０のスルーPIOスクリプト１０１−１を実行する。スルーPIOスクリプト１０１−１には、図９を参照して説明したように、完了フラグ１２１、CPU割込条件１２２、読み出し繰り返し条件１２３、タイムウェイト１２４、INTRQウェイト１２５、ライト/リード設定１２６、ATAアドレス１２７、およびATAレジスタ値１２８等の様々な情報が含まれており、スルーPIO処理ハードウェア２５５は、それらの情報等に基づいて、単一PIOスクリプト処理を実行する。
【０１８４】
そして、スルーPIO処理ハードウェア２５５は、スクリプト番号０のスルーPIOスクリプト１０１−１に対する単一PIOスクリプト処理を終了すると、ステップＳ５２に処理を進め、次に、ステップＳ５１の場合と同様の、スクリプト番号１のスルーPIOスクリプト１０１−２に対する処理を開始する。このように、スルーPIO処理ハードウェア２５５は、SRAMの領域１０１に格納されている各スルーPIOスクリプトに対して、単一PIOスクリプト処理を行い、ステップＳ５３において、スクリプト番号ＮのスルーPIOスクリプト１０１−（Ｎ＋１）に対する処理を実行するまで繰り返す。そして、ステップＳ５４に処理を進め、スクリプト番号Ｎ＋１のスルーPIOスクリプト１０１−（Ｎ＋２）よりＥＯＦ２６７を検出すると、スルーPIO処理ハードウェア２５５は、スルーPIO制御処理を終了する。
【０１８５】
以上のように、ATAホストハードウェア２１のスルーPIO処理ハードウェア２５５が複数のスルーPIOスクリプトに基づいて、連続して単一PIOスクリプト処理を実行するため、図３０に示されるように、CPU２３は、最初にATAホストハードウェア２１にアクセスして、スルーPIOスクリプトを供給し、実行を指示するだけで、複数のPIO処理が実行される。
【０１８６】
従って、CPU２３とATAホストハードウェア２１とのアクセスは、最初と最後の２回のみでよく、PIO処理によるバス４２の占有率を低減させることができるだけでなく、CPU２３のデータ転送処理による負荷を軽減させることができ、CPU２３がより容易にデータを転送することができる。
【０１８７】
なお、図７を参照して説明したように、以上のスルーPIO転送モードにおいて、強制終了命令（アボート命令）により、図２８のフローチャートを参照して説明した単一PIOスクリプト処理が強制終了される場合がある。しかしながら、単一PIOスクリプト処理部３４は、PIO実行部３５を制御し、ステップＳ３７およびステップＳ３８の処理をPIO実行部３５に実行させる。このときに、アボート処理（強制終了処理）が行われ、単一PIOスクリプト処理部３４が処理を終了すると、PIO実行部３５は、処理結果を単一PIOスクリプト処理部３４に返却できず、不都合が生じる恐れがある。
【０１８８】
そこで、単一PIOスクリプト処理部３４は、アボート処理を行う際に、PIO実行部３５の処理が完了するのを待機する。
【０１８９】
図３１のフローチャートを参照して、単一PIOスクリプト処理部３４によるアボート処理を説明する。
【０１９０】
アボート命令が発生し、アボート処理を開始した単一PIOスクリプト処理部３４は、ステップＳ６１において、PIO実行部３５に処理を依頼し、その処理が実行中であるか否かを判定する。単一PIOスクリプト処理部３４は、実行中の単一PIOスクリプト処理において、図２８のフローチャートのステップＳ３７およびステップＳ３８の処理を実行中であり、PIO実行部３５に処理を依頼し、その処理が実行中であると判定した場合、処理をステップＳ６２に進め、PIO実行部３５の処理が終了するまで待機する。PIO実行部３５の処理が終了し、処理結果が返却されると、単一PIOスクリプト処理部３４は、ステップＳ６３に処理を進め、実行中の単一PIOスクリプト処理を終了させ、アボート処理を終了する。
【０１９１】
また、ステップＳ６１において、PIO実行部３５に処理を依頼しておらず、その処理が実行中でないと判定した場合、単一PIOスクリプト処理部３４は、ステップＳ６２の処理を省略してステップＳ６３に処理を進め、待機せずに実行中の単一PIOスクリプト処理を終了させた後、アボート処理を終了する。
【０１９２】
以上のように、PIO実行部３５の処理を待機してからアボートすることにより、単一PIOスクリプト処理部３４は、安全に単一PIOスクリプト処理をアボート（強制終了）させることができる。
【０１９３】
次に、IDMA転送モードによるデータ転送処理（スルーPIO制御処理）について説明する。
【０１９４】
図３２は、IDMA転送モードにおけるATAホストハードウェア２１の機能ブロックを示す図である。
【０１９５】
IDMA転送モード時の転送処理は、ATAホストハードウェア２１の各部の内、IDMA PIO制御部３８、単一PIOスクリプト処理部３４、およびPIO実行部３５よりなるPIO処理ハードウェア２７１、IDMA制御部３７よりなるIDMA PRD制御ハードウェア２７２、DMA実行部３９よりなるDMA処理ハードウェア２７３、並びに、ATAインタフェース処理部３６により実行される。
【０１９６】
IDMA転送モードにおいては、PIO処理によるデータ転送と、DMA処理によるデータ転送が行われる。従って、SRAM５２には、IDMA転送モード用のPIOスクリプトであるIDMA PIOスクリプトの他に、PRDテーブルが格納され、PRDテーブルによりPIO処理が選択された場合、IDMA PIOスクリプトに基づいたPIO処理が実行され、PRDテーブルによりDMA処理が選択された場合、DMA実行部３９によるDMA転送が行われる。
【０１９７】
すなわち、まず、矢印２８１のように、CPU２３がSRAM５２の領域１０７に、複数のIDMA PIOスクリプトを格納する。また、CPU２３は、矢印２８２のように、SRAM５２の領域１０５に（必要に応じて領域１０６Ａにも）、複数のIDMA PIOスクリプトを格納する。そして、矢印２８３のように、CPU２３によりIDMA処理の実行開始がIDMA PRD制御ハードウェア２７２に指示されると、IDMA PRD制御ハードウェア２７２は、矢印２８５に示されるように、SRAM５２の領域１０５（または領域１０６Ａ）より実行するPRDテーブルより必要な情報を取得し、その情報に基づいて、IDMA PIO処理を行う場合、矢印２８６に示されるように、PIO処理ハードウェア２７１を制御して、IDMA PIO制御処理を実行させる。PIO処理ハードウェア２７１は、IDMA PRD制御ハードウェア２７２に制御されてIDMA PIO制御処理を開始すると、矢印２８４に示されるように、SRAM５２の領域１０７より実行するIDMA PIOスクリプトより必要な情報を取得し、その取得した情報に基づいてIDMA PIO制御処理を実行し、矢印２８８に示されるようにATAインタフェース処理部３６を介してドライブ２２にアクセスする。ATAインタフェース処理部３６は、矢印２９０に示されるようにドライブ２２のATAレジスタにデータを読み書きする。
【０１９８】
また、IDMA PRD制御ハードウェア２７２は、PRDテーブルより取得した情報に基づいて、DMA処理を行う場合、矢印２８７に示されるように、DMA処理ハードウェア２７３を制御し、DMA処理を実行させる。DMA処理ハードウェア２７３は、矢印２８９に示されるように、ATAインタフェース処理部３６を介してドライブ２２にアクセスする。ATAインタフェース処理部３６は、矢印２９０に示されるようにドライブ２２のATAレジスタにデータを読み書きする。DMA処理ハードウェア２７３は、以上のようにDMA処理を実行し、矢印２９１に示されるようにSDRAM２４とデータのやり取りを行う。
【０１９９】
IDMA PRD制御ハードウェア２７２は、以上のような制御処理を各PRDテーブルについて実行する。なお、CPU２３は、必要に応じて、以上のような一連の処理の途中で新たなPRDテーブルをSRAM５２の領域１０５に追加する。
【０２００】
以上のようにIDMA転送モードにおけるPIOスクリプト制御処理（IDMA PIO制御処理）については、上述したスルーPIOスクリプト処理と基本的に同様であり、各PIOスクリプトに対する処理が連続して実行される。ただし、IDMA PIOスクリプト処理の場合、図３３に示されるように、IfGotoコマンドが存在し、スクリプト番号順以外の順番でPIOスクリプトに対する処理を実行することができるようになされている。
【０２０１】
すなわち、IDMA PIO転送モードにおいて、ATAホストハードウェア２１のPIO処理ハードウェア２７１は、図３３に示されるように、例えば、ステップＳ７１において、SRAM５２の領域１０１に格納されているIDMA PIOスクリプトの内、スクリプト番号ＸのIDMA PIOスクリプト１０７−１を実行する。IDMA PIOスクリプト１０７−１には、図１５を参照して説明したように、EOF（完了フラグ（Complete Flag））１９１、CPU割込条件１９２、読み出し繰り返し条件１９３、タイムウェイト１９４、INTRQウェイト１９５、ライト/リード設定１９６、ATAアドレス１９７、およびATAレジスタ値１９８等の他に、IfGotoジャンプ先スクリプト番号１９９、IfGoto条件番号２００、リードデータ足し算レジスタ２０１、INTRQ一時停止指定情報２０３、およびリードデータ一時停止指定情報２０４等のように様々な情報が含まれており、PIO処理ハードウェア２７１は、それらの情報等に基づいて、IDMA PIO処理を実行する。
【０２０２】
そして、PIO処理ハードウェア２７１は、スクリプト番号ＸのIDMA PIOスクリプト１０７−Ｘに対する処理を終了すると、ステップＳ７２に処理を進め、IDMA PIOスクリプト１０７−Ｘに基づいて、IfGotoジャンプ処理を行い、ステップＳ７３において、ジャンプ先であるスクリプト番号ＭのIDMA PIOスクリプト１０７−Ｍに対する処理を開始する。このように、PIO処理ハードウェア２７１は、SRAM５２の領域１０７に格納されている各IDMA PIOスクリプトに対して、IfGoto処理を行いながら、指定された順番に処理を行い、ステップＳ７４において、スクリプト番号ＮのIDMA PIOスクリプト１０７−Ｎに対する処理を実行する。そして、ステップＳ５５に処理を進め、スクリプト番号Ｎ＋１のIDMA PIOスクリプト１０７−（Ｎ＋１）よりＥＯＦ３００を検出すると、PIO処理ハードウェア２７１は、IDMA PIOスクリプト処理を終了する。
【０２０３】
以上のように、ATAホストハードウェア２１のPIO処理ハードウェア２７１は、スルーPIOスクリプト処理の場合と同様に、複数のIDMA PIOスクリプトに基づいて、連続して単一PIOスクリプト処理を実行することができる。
【０２０４】
次に、図３４のフローチャートを参照して、IDMA PIO制御処理を説明する。
【０２０５】
図３４において、PIO処理ハードウェア２７１のIDMA PIO制御部３８は、IDMA PRD制御ハードウェア２７２に制御され、IDMA PIO制御処理を開始すると、ステップＳ８１において、処理を行うIDMA PIOスクリプトを指定するPIOスクリプトポインタの値を初期化し、開始スクリプト番号の値をセットする。そして、ステップＳ８２においてIDMA PIO制御部３８は、ステップＳ８２において、PIOスクリプトポインタに指定されたIDMA PIOスクリプトをフェッチ（取得）する。
【０２０６】
ステップＳ８３において、IDMA PIO制御部３８は、EOFを取得したか否かを示すEOFレジスタの値が真であるか否かを判定し、真でないと判定した場合、ステップＳ８４に処理を進める。ステップＳ８４において、IDMA PIO制御部３８は、フェッチしたIDMA PIOスクリプトがEOFである場合、そのフェッチしたEOFをEOFレジスタにセットする。すなわち、IDMA PIO制御部３８は、EOFであるIDMA PIOスクリプトを処理した後、EOFであると判定する。なお、フェッチしたIDMA PIOスクリプトがEOFでない場合、IDMA PIO制御部３８は、EOFレジスタを更新しない。
【０２０７】
ステップＳ８４の処理が終了すると、IDMA PIO制御部３８は、ステップＳ８５に処理を進める。ステップＳ８５において、単一PIOスクリプト処理部３４は、IDMA PIO制御部３８に制御され、フェッチしたIDMA PIOスクリプトに対して、図２８のフローチャートを参照して説明したスルーPIO転送モードにおける単一PIOスクリプト処理と同様の単一PIOスクリプト処理を実行する。ただし、この場合、単一PIOスクリプト処理を終了した単一PIOスクリプト処理部３４は、ステップＳ８５に処理を戻す。単一PIOスクリプト処理部３４より処理が戻され、ステップＳ８５の処理が終了したと判定するとIDMA PIO制御部３８は、ステップＳ８６に処理を進める。
【０２０８】
IDMA PIO制御部３８は、ステップＳ８６において、実行するIDMA PIOスクリプトが、PIO Readコマンドであり、かつ、リードデータ足し算するスクリプトである場合、そのリードデータをリードデータ足し算レジスタ２０１の値に足し算し、その値をリードデータ足し算レジスタ２０１に格納し、処理をステップＳ８７に進める。リードデータ足し算するスクリプトでない場合、IDMA PIO制御部３８は、リードデータ足し算レジスタ２０１を更新せずに、処理をステップＳ８７に進める。
【０２０９】
IDMA PIO制御部３８は、ステップＳ８７において、実行するIDMA PIOスクリプトがPIO Readコマンドである場合、リードデータをスクリプトのATAレジスタ値１９８に上書きし、格納する。実行するIDMA PIOスクリプトがPIO Readコマンドでない場合、IDMA PIO制御部３８は、ATAレジスタ値１９８を更新しない。IDMA PIO制御部３８は、ステップＳ８８において、IDMA PIO INTRQ割り込み要因２４４、IDMA PIOリードデータ割り込み要因２４５、および一時停止フラグ２４６の値に応じて外部用割り込み要因をセットし、ステップＳ８９において、IDMA PIO INTRQ割り込み要因２４４、およびIDMA PIOリードデータ割り込み要因２４５の設定に応じて一時停止フラグ２４６の値をセットする。
【０２１０】
そして、ステップＳ９０において、IDMA PIO制御部３８は、一時停止フラグ２４６の値が「１」であるか否かを判定し、「１」であると判定した場合、ステップＳ９１に処理を進め、PIO一時停止解除を取得するまで待機する。PIO一時停止解除を取得すると、IDMA PIO制御部３８は、処理をステップＳ９２に進める。また、ステップＳ９０において、一時停止フラグ２４６の値が「０」であると判定した場合、IDMA PIO制御部３８は、ステップＳ９１の処理を省略し、ステップＳ９２に処理を進める。
【０２１１】
IDMA PIO制御部３８は、ステップＳ９２において、取得した情報がIfGoto条件と一致するか否かを判定し、一致すると判定した場合、処理をステップＳ９３に進め、EOFレジスタをリセットし、PIOスクリプトポインタをIfGotoスクリプト番号にセットする。すなわち、この場合、IDMA PIO制御部３８は、IfGoto処理を行い、次に処理するように指定されたIDMA PIOスクリプトにジャンプし、そのIDMA PIOスクリプトに対して処理を開始する。ステップＳ９３の処理が終了すると、IDMA PIO制御部３８は、処理をステップＳ８２に戻し、それ以降の処理を繰り返す。
【０２１２】
また、ステップＳ９２において、取得した情報がIfGoto条件と一致しないと判定した場合、IDMA PIO制御部３８は、ステップＳ９４に処理を進め、PIOスクリプトポインタをインクリメントし、処理をステップＳ８２に戻す。すなわち、この場合、IDMA PIO制御部３８は、IfGoto処理を行わず、スルーPIO転送モードの場合と同様に、スクリプト番号順に処理を行う。
【０２１３】
以上のように、ステップＳ８２乃至ステップＳ９４の処理を繰り返すことにより、IDMA PIO制御部３８は、指定された順番で、IDMA PIOスクリプトに対する処理を行う。
【０２１４】
そして、ステップＳ８３において、EOFレジスタの値が真であると判定した場合、IDMA PIO制御部３８は、IDMA PIO制御処理を終了する。
【０２１５】
以上のように処理することにより、PIO処理ハードウェア２７１は、スルーPIO転送モードの場合と同様に、IDMA転送モードにおいても、単一PIOスクリプト処理を連続して実行することができる。なお、この場合、IfGoto条件等により、IDMA PIOスクリプトの実行順が定められているので、PIO処理ハードウェア２７１は、その指定された順番で、各IDMA PIOスクリプトに対する処理を行う。
【０２１６】
なお、このIDMA PIO制御処理においてもアボート処理が行われるが、スルーPIO転送モードの場合と同様に、単一PIOスクリプト処理部３４は、図３１のフローチャートを参照して説明したようなアボート処理を実行し、PIO実行部３５に処理を依頼し、PIO実行部３５がその処理を実行中である場合は、終了処理を行わずに待機し、その処理が終了してから終了処理を実行するようにする。
【０２１７】
同様に、IDMA PIO制御部３８も、アボート処理を実行し、図３４のフローチャートを参照して説明したIDMA PIO制御処理のステップＳ８５の処理を実行しているとき、すなわち、単一PIOスクリプト処理部３４に処理を依頼し、単一PIOスクリプト処理部３４がその処理を実行中である場合は、終了処理を行わずに待機し、その処理が終了してから終了処理を実行するようにする。
【０２１８】
図３５のフローチャートを参照して、IDMA PIO制御部３８によるアボート処理を説明する。
【０２１９】
アボート命令が発生し、アボート処理を開始したIDMA PIO制御部３８は、ステップＳ１１１において、単一PIOスクリプト処理部３４に処理を依頼し、その処理が実行中であるか否かを判定する。IDMA PIO制御部３８は、実行中のIDMA PIO制御処理において、図３４のフローチャートのステップＳ８５の処理を実行中であり、単一PIOスクリプト処理部３４に処理を依頼し、その処理が実行中であると判定した場合、処理をステップＳ１１２に進め、単一PIOスクリプト処理部３４の処理が終了するまで待機する。単一PIOスクリプト処理部３４の処理が終了し、処理結果が返却されると、IDMA PIO制御部３８は、ステップＳ１１３に処理を進め、実行中のIDMA PIO制御処理を終了させ、アボート処理を終了する。
【０２２０】
また、ステップＳ１１１において、単一PIOスクリプト処理部３４に処理を依頼しておらず、その処理が実行中でないと判定した場合、IDMA PIO制御部３８は、ステップＳ１１２の処理を省略してステップＳ１１３に処理を進め、待機せずに実行中のIDMA PIO制御処理を終了させた後、アボート処理を終了する。
【０２２１】
以上のように、単一PIOスクリプト処理部３４の処理を待機してからアボートすることにより、IDMA PIO制御部３８は、安全にIDMA PIO制御処理をアボート（強制終了）させることができる。
【０２２２】
上述したように、IDMA転送モードにおいては、以上のようなIDMA PIO制御処理によるPIO処理の他に、DMA処理も行われる。その制御はSRAM５２に格納されたPRDテーブルに基づいて行われる。
【０２２３】
すなわち、図３６に示されるように、IDMA PRD制御ハードウェア２７２は、PRDテーブルの実行を繰り返すことにより、複数のPIO処理を含むフェーズの集合であるGOP（Group Of Phase）単位で処理する。このGOP単位の処理（GOP処理）の場合も、図３６に示されるように、上述したPIO処理を行う場合と同様に、ステップＳ１２１乃至ステップＳ１２３のようにPRDテーブルに関する処理（PRD処理）が1つずつ実行される（複数実行される）が、このとき、各PRD処理において、PRDテーブルの情報に基づいて、それぞれ、上述したIDMA PIO制御処理およびDMA処理が行われる。
【０２２４】
図３７に示されるように、PRDテーブルに対する処理は、いくつかのPIOスクリプトフェーズとDMA実転送フェーズにより構成される。すなわち、ATAホストハードウェア２１は、DMA転送に関するPIOコマンド群をいくつかのフェーズに分けて制御する。すなわち、ATAホストハードウェア２１は、PRD処理の開始するPIOコマンドを発行する第１のフェーズ（PRD Start時PIOコマンド）、書き込み処理または読み出し処理を実行するDMA用PIOコマンドを発行する第２のフェーズ（DMA PIOコマンド）、DMA転送を実行するPIOコマンドを発行する第３のフェーズ（DMA Exeコマンド）、およびDMA転送を行う第４のフェーズ（DMA実行）を実行し、その後、ステータスの報告を行うPIOコマンドを発行する第５のフェーズ（Status Report）を実行し、１PRD処理が完了したことを示すPIOコマンドを発行する第６のフェーズ（１PRD終了PIO）を実行して１つのPRD処理を完了させる。
【０２２５】
PRDテーブルはこのようなPRD処理を複数回連続して実行させるような指示を含んでいる。
【０２２６】
例えば、PRDテーブルとして、SDRAMからLBAへ処理単位３回分のデータ（３RUB）を書き込む指示をするPRDテーブル３１１について処理を行う場合、ATAホストハードウェア２１は、第１のフェーズとして開始コマンド（Start）３２１を発行し、第２のフェーズとして書き込みコマンド（W）３２２を発行し、第３のフェーズとしてDMA実行コマンド（Ｄ）３２３を発行し、そのコマンドによりDMA転送３２４を行う第４のフェーズを実行し、第５のフェーズとしてステータス報告コマンド３２５を発行する。PRDテーブル３１１においては、３RUB、すなわち、３回分の書き込み処理が指示されているので、ATAホストハードウェア２１は、第２のフェーズ乃至第５のフェーズを３回繰り返した後、第６のフェーズとして終了コマンド（END）３２６を発行し、PRDテーブル３１１に対するPRD処理を終了する。
【０２２７】
図３７においては、PRDテーブル３１１の次のテーブルとしてPRDテーブル３１２が存在するので、ATAホストハードウェア２１は、PRDテーブル３１１に対するPRD処理を終了した後、PRDテーブル３１２に対するPRD処理を開始する。このPRDテーブル３１２に対するPRD処理はPRDテーブル３１１に対するPRD処理と基本的に同様であるが、図３７に示されるように、PRDテーブル３１２がSDRAMからLBAへ２RUB分のデータの書き込みを指示するものであるので、ATAホストハードウェア２１は、第１のフェーズを実行した後、第２のフェーズ乃至第５のフェーズを２回繰り返した後、第６のフェーズを実行しPRD処理を終了する。
【０２２８】
なお、図３７においては、各フェーズの処理をそれぞれ１つの四角で示しているが、実際には、それらの各PIOスクリプトフェーズは、複数のPIOアクセススクリプトにより構成されており、複数のPIOコマンドが実行される。
【０２２９】
図３７においては、PRDテーブル３１１およびPRDテーブル３１２がともに書き込み処理を実行させるテーブルである場合、すなわち、書き込み処理を行うPRD処理が連続する場合について説明した。この場合、上述したように、PRDテーブル３１２に対するPRD処理は、PRDテーブル３１１に対する処理が終了してから実行される。
【０２３０】
これに対して、読み出し処理を実行させるPRDテーブルが連続する場合、それらのPRDテーブルに対する各PRD処理は、図３８に示されるように、一部並行して実行される。読み出し処理の場合、ATAホストハードウェア２１は、第２のフェーズにおいて、前のコマンドに対する完了をコマンド毎に待たずに、次のコマンドを発行し、待ち行列に格納させる（キューイング）ことができる。このキューイングできる最大コマンド数（限界キューイング数）は予め定められている。
【０２３１】
従って、ATAホストハードウェア２１は、まず、各PRDテーブルに対するPRD処理の内、第１のフェーズと第２のフェーズを順に実行し、この限界キューイング数に達するまでコマンドを発行する。そして限界キューイング数分のコマンドを発行すると、ATAホストハードウェア２１は、各コマンドに対するDMA転送を１つずつ実行する。このときATAホストハードウェア２１は、DMA転送処理を１回行う毎に（キューイングしたコマンドが１回実行される毎に）新たなコマンドをキューイングさせる。すなわち、ATAホストハードウェア２１は、未発行のコマンドが存在する間、限界キューイング数分のコマンドがキューイングされているようにする。
【０２３２】
例えば、図３８に示されるように、３RUBのデータを読み出すPRDテーブル３３１に対するPRD処理を行う場合、ATAホストハードウェア２１は、そのPRD処理の一連の処理を枠３４１で囲んだような手順で実行する。すなわち、ATAホストハードウェア２１は、第２のフェーズにおいて、先に読み出しコマンド（Ｒ）を３RUB分発行し、その後で、第３のフェーズ、第４のフェーズ、および第５のフェーズの実行を１組として、その１組の処理を３回繰り返す。そしてATAホストハードウェア２１は、最後に第６のフェーズを実行し、PRDテーブル３３１に対するPRD処理を終了する。
【０２３３】
このとき、図３８に示されるように、PRDテーブル３３１の次に処理されるテーブルとして、５０RUB分のデータを読み出すPRDテーブル３３２が存在する。このとき、限界キューイング数が６であるとすると、PRDテーブル３３１のPRD処理において、ATAホストハードウェア２１が３RUB分読み出しコマンドを発行しても、まだ３RUB分キューイングすることができる。そこで、ATAホストハードウェア２１は、PRDテーブル３３１に対するPRD処理の第３のフェーズ以降の処理を実行する前に、PRDテーブル３３２に対するPRD処理の開始コマンドを発行した後、読み出しコマンドを３RUB分キューイングさせる。
【０２３４】
これにより発行したコマンドの数が限界キューイング数に達したので、ATAホストハードウェア２１は、次に、PRDテーブル３３１に対するPRD処理の第３のフェーズ、第４のフェーズ、および第５のフェーズを実行する。これによりキューイングされている読み出しコマンドが１つ減るので、ATAホストハードウェア２１は、次に、PRDテーブル３３２に対するPRD処理の読み出しコマンドを１つ発行する。以上の処理を繰返し、PRDテーブル３３１に対するPRD処理が終了すると、ATAホストハードウェア２１は、次に、PRDテーブル３３２に対するPRD処理の第３のフェーズ、第４のフェーズ、および第５のフェーズを、上述したPRDテーブル３３１の場合と同様に、読み出しコマンドの発行と交互に実行し、PRDテーブル３３２に対するPRD処理を進行させる。
【０２３５】
以上のように、読み出し処理を実行させるPRDテーブルが連続する場合、それらのテーブルに対する各PRD処理は、その一部の処理が並行して実行される。
【０２３６】
また、読み出し処理を実行させるPRDテーブルより書き込み処理を実行させるPRDテーブルに遷移する場合、図３９に示されるように、先に実行される読み出し処理を実行させるPRDテーブルのPRD処理が終了してから、書き込み処理を実行させるPRDテーブルのPRD処理が開始される。
【０２３７】
逆に、書き込み処理を実行させるPRDテーブルより読み出し処理を実行させるPRDテーブルに遷移する場合、図３９に示されるように、先に実行される書き込み処理を実行させるPRDテーブルのPRD処理が終了してから、読み出し処理を実行させるPRDテーブルのPRD処理が開始される。
【０２３８】
すなわち、このような場合、各PRD処理は並行して実行されない。なお、各PRD処理は、それぞれ、図３７および図３８を参照して説明したように実行される。また、図３７の場合と同様に、図３８および図３９においても、各フェーズの処理をそれぞれ１つの四角で示しているが、実際には、それらの各PIOスクリプトフェーズは、複数のPIOアクセススクリプトにより構成されており、複数のPIOコマンドが実行される。
【０２３９】
次に、ATAホストハードウェア２１による以上のようなIDMA処理の具体的な処理の流れについて説明する。
【０２４０】
最初に、以上のようにGOP単位でIDMA処理を制御するGOP処理を図４０のフローチャートを参照して説明する。
【０２４１】
IDMA転送処理モードに移行したATAホストハードウェア２１のIDMA PRD制御部のIDMA制御部３７は、GOP処理を開始すると、最初に、ステップＳ１３１において、初期化処理を行い、各変数の値を初期化する。
【０２４２】
すなわち、IDMA制御部３７は、処理したセクタ数を累積するコマンド処理用の変数であるコマンド累積セクタレングス、予約した（キューイングさせた）RUB数をカウントするコマンド処理用の変数であるコマンド予約RUB数、Tag値を保持するコマンド処理用の変数であるコマンドTag、処理したセクタ数を累積するデータ転送処理用の変数であるデータ転送累積セクタレングス、後述する各ポインタFIFOのリード/ライトポインタ、並びに、Tag値を保持するデータ転送処理用の変数であるデータ転送Tagの値をそれぞれ「０」にセットする。
【０２４３】
初期化処理を実行したIDMA制御部３７は、次に、ステップＳ１３２に処理を進め、コマンド開始準備処理を実行する。コマンド開始準備処理の詳細については、図４１のフローチャートを参照して説明する。コマンド開始準備処理を終了するとIDMA制御部３７は、処理をステップＳ１３３に進め、コマンド開始処理を実行する。コマンド開始処理の少佐については、図４３のフローチャートを参照して説明する。コマンド開始処理を終了したIDMA制御部３７は、ステップＳ１３４に処理を進め、コマンド実行処理を実行する。コマンド実行処理の詳細については図４４のフローチャートを参照して説明する。コマンド実行処理を終了するとIDMA制御部３７は、処理をステップＳ１３５に進める。
【０２４４】
ステップＳ１３５において、IDMA制御部３７は、コマンド実行処理の処理結果に基づいてデータ転送処理に移行するか否かを判定し、移行しないと判定した場合は、ステップＳ１３２に処理を戻し、それ以降の処理を繰り返す。
【０２４５】
また、ステップＳ１３５においてデータ転送処理に移行すると判定した場合、IDMA制御部３７は、処理をステップＳ１３６に進め、データ転送開始準備処理を実行する。データ転送開始準備処理の詳細については、図４５のフローチャートを参照して説明する。データ転送開始準備処理を終了するとIDMA制御部３７は、処理をステップＳ１３７に進め、データ転送サービス処理を実行する。データ転送サービス処理の詳細については図４６のフローチャートを参照して説明する。データ転送サービス処理を終了するとIDMA制御部３７は、処理をステップＳ１３８に進め、データ転送実行処理を実行する。データ転送実行処理の詳細については図４７のフローチャートを参照して説明する。データ転送サービス処理を終了するとIDMA制御部３７は、処理をステップＳ１３９に進め、データ転送状態報告処理を実行する。データ転送状態報告処理の詳細については図４９のフローチャートを参照して説明する。データ転送状態報告処理を終了するとIDMA制御部３７は、処理をステップＳ１４０に進める。
【０２４６】
ステップＳ１４０において、IMDA制御部３７は、データ転送状態報告処理の処理結果に基づいて、データ転送終了処理を実行するか否かを判定し、実行すると判定した場合、処理をステップＳ１４１に進め、データ転送終了処理を実行する。データ転送終了処理の詳細については図５０のフローチャートを参照して説明する。データ転送終了処理を終了するとIDMA制御部３７は、処理をステップＳ１４２に進める。
【０２４７】
また、ステップＳ１４０においてデータ転送処理を実行しないと判定した場合、IDMA制御部３７は、ステップＳ１４１の処理を省略し、ステップＳ１４２に処理を進める。
【０２４８】
ステップＳ１４２においてIDMA制御部３７は、切り替え処理を実行する。すなわち、IDMA制御部３７は、ステップＳ１４２において、ドライブ２２のピックアップが２つあり（１Dev-２OPであり）、リードまたはライト時にOPの切り替えがステータスレポート後の場合、ピックアップを切り替えるターン処理を行い、ターンオフ状態に移行し、ターンオンされるまで待機する。なお、ドライブ２２のピックアップが１つの場合や２Dev-２OPの場合、この処理は省略される。ステップＳ１４２の処理が終了すると、IDMA制御部３７は、ステップＳ１４３に処理を進め、GOP処理を終了するか否かを判定し、終了しないと判定した場合、処理をステップＳ１３２に戻し、それ以降の処理を繰り返す。また、ステップＳ１４３において、GOP処理を終了すると判定した場合、IMDA制御部３７は、GOP処理を終了する。
【０２４９】
次に、図４０のステップＳ１３２において実行されるコマンド開始準備処理の詳細を図４１のフローチャートを参照して説明する。
【０２５０】
コマンド開始準備処理を開始すると、IDMA制御部３７は、ステップＳ１６１において、コマンド累積セクタレングスの値がコマンド最終セクタレングスの値と等しく、かつ、変数CMD ENDの値が偽（FALSE）であるか否かを判定する。コマンド累積セクタレングスの値がコマンド最終セクタレングスの値と等しく、かつ、変数CMD ENDの値が偽（FALSE）であると判定した場合、すなわちコマンド発行に続きがないと判定した場合、IDMA制御部３７は、次のPRDテーブルに対する処理を開始し、ステップＳ１６２に処理を進め、次のPRDテーブルを要求し、ステップＳ１６３において、その処理結果に基づいて、次のPRDテーブルが存在するか否かを判定する。
【０２５１】
要求に基づいてPRDテーブルを正常に取得し、次のPRDテーブルが存在すると判定した場合、IDMA制御部３７は、ステップＳ１６４に処理を進め、新しいPRDテーブルの各情報を保持（ラッチ）し、ステップＳ１６５において、コマンドスタートLBAをラッチし、ステップＳ１６６において、コマンド累積セクタレングスの値を「０」にセットする。
【０２５２】
次に、IDMA制御部３７は、ステップＳ１６７において、データ転送PRDポインタFIFOにPRD番号をセットする。図４２は、データ転送PRDポインタFIFOの構成例を示す図である。データ転送PRDポインタFIFO４０１には、IDMA制御部３７が新たなPRDテーブルを取得する度にそのPRDテーブルの番号（PRD番号）が格納され、PRDデータ転送PRDポインタFIFOポインタ４０２が付加されている。
【０２５３】
データ転送PRDポインタFIFOにPRD番号をセットするとIDMA制御部３７は、ステップＳ１６８において、そのPRDテーブルの処理フラグ１６４に値「１」をセットし、コマンド開始準備処理を終了し、図４０のステップＳ１３２に処理を戻す。ステップＳ１３２に処理が戻されると、IDMA制御部３７は、上述したようにステップＳ１３２の処理を終了し、ステップＳ１３３に処理を進める。
【０２５４】
また、ステップＳ１６３において、ステップＳ１６２の要求に基づいてPRDテーブルを取得できず、次のPRDテーブルが存在しないと判定した場合、IDMA制御部３７は、ステップＳ１６９に処理を進め、変数CMD ENDの値を真（TRUE）にセットし、コマンド開始準備処理を終了し、図４０のステップＳ１３２に処理を戻す。ステップＳ１３２に処理が戻されると、IDMA制御部３７は、上述したようにステップＳ１３２の処理を終了し、ステップＳ１３３に処理を進める。
【０２５５】
さらに、ステップＳ１６１において、コマンド累積セクタレングスの値がコマンド最終セクタレングスの値と等しくない、または、変数CMD ENDの値が真（TRUE）であると判定した場合、すなわちこのPRDテーブルに対するPRD処理において、コマンド発行に続きがあると判定した場合、IDMA制御部３７は、ステップＳ１６２乃至ステップＳ１６９の処理を省略し、コマンド開始準備処理を終了し、図４０のステップＳ１３２に処理を戻す。ステップＳ１３２に処理が戻されると、IDMA制御部３７は、上述したようにステップＳ１３２の処理を終了し、ステップＳ１３３に処理を進める。
【０２５６】
IDMA処理部３７は、以上のようにしてコマンド開始準備処理を実行し、PRDテーブルを取得し、そのPRDテーブルに含まれる必要な情報を取得する。
【０２５７】
次に、図４０のステップＳ１３３において実行されるコマンド開始処理の詳細を図４３のフローチャートを参照して説明する。
【０２５８】
最初に、ステップＳ１８１において、IDMA制御部３７は、コマンド累積セクタレングスの値が「０」であり、かつ、変数CMD ENDの値が偽（FALSE）であるか否かを判定する。
【０２５９】
コマンド累積セクタレングスの値が「０」であり、かつ、変数CMD ENDの値が偽（FALSE）であり、PRDの最初のPIOコマンドに関する処理であると判定した場合、IDMA制御部３７は、処理をステップＳ１８２に進める。ステップＳ１８２において、PIO処理ハードウェア２７１のIDMA PIO制御部３８は、IDMA制御部３７に制御され、図３４のフローチャートを参照して説明したようなIDMA PIO制御処理を実行する。ただし、この場合、ステップＳ８３においてEOFレジスタの値が真であると判定し、IDMA PIO制御処理を終了したとき、IDMA PIO制御部３８は、図４３のステップＳ１８２に処理を戻す。ステップＳ１８２に処理が戻されると、IDMA処理部３７は、コマンド開始処理を終了し、図４０のステップＳ１３３に処理を戻す。ステップＳ１３３に処理が戻されると、IDMA制御部３７は、上述したようにステップＳ１３３の処理を終了し、ステップＳ１３４に処理を進める。
【０２６０】
また、図４３のステップＳ１８１において、コマンド累積セクタレングスの値が「０」でないか、または、変数CMD ENDの値が真（TRUE）であると判定した場合、IDMA制御部３７は、ステップＳ１８２の処理を省略し、コマンド開始処理を終了し、図４０のステップＳ１３３に処理を戻す。ステップＳ１３３に処理が戻されると、IDMA制御部３７は、上述したようにステップＳ１３３の処理を終了し、ステップＳ１３４に処理を進める。
【０２６１】
IDMA制御部３７は、以上のようにしてコマンド開始処理を実行し、PIOコマンドを発行する。
【０２６２】
次に、図４４のフローチャートを参照して、図４０のステップＳ１３４において実行されるコマンド実行処理の詳細を説明する。
【０２６３】
コマンド実行処理を開始したIDMA制御部３７は、最初に変数CMD ENDの値が真（TRUE）であるか否かを判定する。変数CMD ENDの値が偽（FALSE）であり、PIOコマンドに続きがあると判定した場合、IDMA制御部３７は、ステップＳ２０２に処理を進める。ステップＳ２０２において、PIO処理ハードウェア２７１のIDMA PIO制御部３８は、IDMA制御部３７に制御され、図３４のフローチャートを参照して説明したようなIDMA PIO制御処理を実行する。ただし、この場合、ステップＳ８３においてEOFレジスタの値が真であると判定し、IDMA PIO制御処理を終了したとき、IDMA PIO制御部３８は、図４４のステップＳ２０２に処理を戻す。ステップＳ２０２に処理が戻されると、IDMA制御部３７は、ステップＳ２０３に処理を進める。
【０２６４】
ステップＳ２０３において、IDMA制御部３７は、コマンド累積セクタレングスに、１RUBのセクタ数を加算し、コマンド予約RUB数に値「１」を加算し、コマンドTagに値「１」を加算する。そして、IDMA制御部３７は、ステップＳ２０４において、ターンオフ状態に移行し、ターンオン状態になるまで待機する。なお、ドライブ２２のピックアップが１つである場合、この処理は省略される。
【０２６５】
その後、IDMA制御部３７は、ステップＳ２０５において、予約RUB数が限界キュー数より少なく、ライト/リード設定（RXW）１７３の値がリードであり、かつ変数CMD ENDの値が真（TRUE）でないか否かを判定する。予約RUB数が限界キュー数より少なく、ライト/リード設定（RXW）１７３の値がリードであり、かつ変数CMD ENDの値が真（TRUE）でないと判定した場合、IDMA制御部３７は、ステップＳ２０６に処理を進め、再度コマンド開始準備処理を実行するように制御する。ステップＳ２０６の処理を終了するとIDMA制御部３７は、コマンド実行処理を終了し、図４０のステップＳ１３４に処理を戻す。ステップＳ１３４に処理が戻されると、IDMA制御部３７は、上述したようにステップＳ１３４の処理を終了し、ステップＳ１３５に処理を進める。
【０２６６】
また、ステップＳ２０５において、予約RUB数が限界キュー数より多い、ライト/リード設定（RXW）１７３の値が書き込み（Write）である、または、変数CMD ENDの値が真（TRUE）であると判定した場合、IDMA制御部３７は、データ転送処理に移行するために、ステップＳ２０６の処理を省略し、コマンド実行処理を終了し、図４０のステップＳ１３４に処理を戻す。ステップＳ１３４に処理が戻されると、IDMA制御部３７は、上述したようにステップＳ１３４の処理を終了し、ステップＳ１３５に処理を進める。
【０２６７】
さらに、ステップＳ２０１において、変数CMD ENDの値が真（TRUE）であると判定した場合、IDMA制御部３７は、ステップＳ２０２乃至ステップＳ２０６の処理を終了し、コマンド実行処理を終了し、図４０のステップＳ１３４に処理を戻す。ステップＳ１３４に処理が戻されると、IDMA制御部３７は、上述したようにステップＳ１３４の処理を終了し、ステップＳ１３５に処理を進める。
【０２６８】
IDMA制御部３７は、以上のようにしてコマンド実行処理を実行し、PIOコマンドを発行する。
【０２６９】
次に、図４５のフローチャートを参照して、図４０のステップＳ１３６において実行されるデータ転送開始準備処理の詳細を説明する。
【０２７０】
データ転送開始準備処理を開始したIDMA制御部３７は、最初に、ステップＳ２２１において、データ転送累積セクタレングスの値がデータ転送最終セクタレングスと同じであるか否かを判定し、データ転送累積セクタレングスの値がデータ転送最終セクタレングスと同じであると判定した場合、次のPRDテーブルに対する処理を開始するために、ステップＳ２２２に処理を進める。
【０２７１】
ステップＳ２２２において、IDMA制御部３７は、次のデータ転送PRDテーブルが存在するか否かを判定し、存在すると判定した場合、処理をステップＳ２２３に進める。ステップＳ２２３において、図４６に示されるデータ転送SDRAMポインタFIFO４２１のPRD No.1st/2ndをセットし、ステップＳ２２４において、データ転送累積セクタレングスに値「０」をセットし、ステップＳ２２５においてデータ転送最終セクタレングスをセットし、ステップＳ２２６においてデータ転送スタートLBAをセットする。またステップＳ２２７において、この処理に読み出し転送用許可が存在していない場合、ターンオフ（Turn Off）に遷移した後、読み出し転送用許可付きターンオン（Turn On）を取得するまで待機する。取得したターンオンが許可を有していなければ再度ターンオフし、新たな読み出し転送用許可を取得するまで待機する。なお、ドライブ２２のピックアップが１つである場合、この処理は省略される。
【０２７２】
ステップＳ２２７の処理を終了すると、IDMA制御部３７は、データ転送開始準備処理を終了し、処理を図４０のステップＳ１３６に戻す。ステップＳ１３６に処理が戻されると、IDMA制御部３７は、上述したようにステップＳ１３６の処理を終了し、ステップＳ１３７に処理を進める。
【０２７３】
なお、図４６において、１つのPRDテーブルで読み出しまたは書き込みのDMA処理を行うが、SDRAMアドレスはいくつかに分割されている可能性がある。そこで、１つのPRDテーブルの読み出し処理または書き込み処理で分割処理すべきSDRAM情報が１番目から最後までこのFIFOに格納されるようにし、この情報からSDRAMアドレスおよび長さ（セクタ数）がDMA実行部３９に渡されるようにする。SDRAMアドレスが書かれているPRD番号１番目と２番目の情報がこのFIFOに格納されることになる。
【０２７４】
図４５のステップＳ２２１において、データ転送累積セクタレングスがデータ転送最終セクタレングスと等しくないと判定した場合、コマンド発行の続きがあるので、IDMA制御部３７は、ステップＳ２２２乃至ステップＳ２２６の処理を省略し、ステップＳ２２７に処理を進める。
【０２７５】
また、ステップＳ２２２において、次のデータ転送PRDが存在しないと判定した場合、１GOPの処理が終了したので、IDMA制御部３７は、ステップＳ２２８に処理を進め、ターンオフ状態に移行し、データ転送開始準備処理を終了するとともに、図４０のGOP処理を終了する。なお、ドライブ２２のピックアップが１つである場合、ステップＳ２２８の処理は省略される。
【０２７６】
次に、図４７のフローチャートを参照して、図４０のステップＳ１３７において実行されるデータ転送開始準備処理の詳細を説明する。
【０２７７】
データ転送開始準備処理を開始したIDMA制御部３７は、最初にステップＳ２４１において、コマンドが読み出しで読み出し転送用許可が無い場合、ターンオフ状態に移行し、読み出し転送用許可付きターンオン状態に移行するまで待機する。また、ターンオン状態に移行しても、読み出し転送用許可付きでないターンオン状態に移行した場合、IDMA制御部３７は、もう一度ターンオフ状態に移行し、再度読み出し転送用許可付きターンオン状態に移行するまで待機する。
【０２７８】
読み出し転送用許可付きターンオン状態に移行すると、IDMA制御部３７は、ステップＳ２４２に処理を進める。なお、ドライブ２２のピックアップが１つである場合、この処理は省略される。IDMA PIO制御部３８は、IMDA制御部３７に制御され、図３４のフローチャートを参照して説明したようなIDMA PIO制御処理を実行する。ただし、この場合、ステップＳ８３においてEOFレジスタの値が真であると判定し、IDMA PIO制御処理を終了したとき、IDMA PIO制御部３８は、図４７のステップＳ２４２に処理を戻す。ステップＳ２４２に処理が戻されると、IDMA制御部３７は、データ転送サービス処理を終了し、図４０のステップＳ１３７に処理を戻す。ステップＳ１３７に処理が戻されると、IDMA制御部３７は、上述したようにステップＳ１３７の処理を終了し、ステップＳ１３８に処理を進める。
【０２７９】
次に、図４８のフローチャートを参照して、図４０のステップＳ１３８において実行されるデータ転送実行処理の詳細を説明する。
【０２８０】
データ転送実行処理を開始したIDMA制御部３７は、最初にステップＳ２６１において、PRDテーブルのNo Data Transfer１６２の値が「１」であるか否かを判定する。No Data Transfer１６２の値が「１」ではないと判定した場合、IDMA制御部３７は、ステップＳ２６２に処理を進め、DMA処理ハードウェア２７３のDMA実行部３９にSTARTコマンドを供給し、DMAデータ転送を開始させる。
【０２８１】
ステップＳ２６２の処理が終了すると、IDMA制御部３７は、ステップＳ２６３に処理を進め、PRDテーブル（またはSDRAMアドレス追加設定テーブル）を参照し、次のSDRAMアドレスが存在するか否かを判定する。次のSDRAMアドレスが存在すると判定した場合、IDMA制御部３７は、ステップＳ２６４に処理を進め、図４６に示されるデータ転送SDRAM Adrs,LengthポインタFIFOポインタ４２２の値を「１」インクリメントさせ、ステップＳ２６５において、そのデータ転送SDRAM Adrs,LengthポインタFIFOポインタ４２２の値に対応するSDRAMのアドレスおよびレングスの情報をDMA実行部３９に供給する。ステップＳ２６５の処理を終了すると、IDMA制御部３７は、ステップＳ２６３に処理を戻し、それ以降の処理を繰り返す。
【０２８２】
ステップＳ２６３乃至ステップＳ２６５の処理を繰り返し、全てのSDRAMアドレスについて処理を行ったIDMA制御部３７は、ステップＳ２６３において、次のSDRAMアドレスが存在せず、データ転送終了待ちであると判定した場合、データ転送実行処理を終了し、図４０のステップＳ１３８に処理を戻す。ステップＳ１３８に処理が戻されると、IDMA制御部３７は、上述したようにステップＳ１３８の処理を終了し、ステップＳ１３９に処理を進める。
【０２８３】
また、ステップＳ２６１において、PRDテーブルのNo Data Transfer１６２の値が「１」であると判定した場合、IDMA制御部３７は、データ転送実行処理を終了し、図４０のステップＳ１３８に処理を戻す。ステップＳ１３８に処理が戻されると、IDMA制御部３７は、上述したようにステップＳ１３８の処理を終了し、ステップＳ１３９に処理を進める。
【０２８４】
次に、その図４０のステップＳ１３９において実行されるデータ転送状態報告処理の詳細を、図４９のフローチャートを参照して説明する。
【０２８５】
データ転送状態報告処理を開始したIDMA制御部３７は、最初にステップＳ２８１において、コマンドが「Write」であり（実行された処理が書き込み処理であり）、ドライブ２２のOP（ピックアップ）の切り替えタイミングが状態報告前の場合、ターンオフ状態に移行した後、ターンオン状態に移行するまで待機する。なお、ドライブ２２のピックアップが１つである場合、この処理は省略される。
【０２８６】
ターンオン状態に移行した、または、ドライブ２２のピックアップが1つである場合、IDMA制御部７３は、ステップＳ２８２に処理を進める。ステップＳ２８２において、IDMA PIO制御部３８は、IMDA制御部３７に制御され、図３４のフローチャートを参照して説明したようなIDMA PIO制御処理を実行する。ただし、この場合、ステップＳ８３においてEOFレジスタの値が真であると判定し、IDMA PIO制御処理を終了したとき、IDMA PIO制御部３８は、図４７のステップＳ２８２に処理を戻す。ステップＳ２８２に処理が戻されると、IDMA制御部３７は、処理をステップＳ２８３に進める。
【０２８７】
IDMA制御部３７は、ステップＳ２８３において、データ転送累積セクタレングスの値を１RUBのセクタ数分インクリメントし、ステップＳ２８４において、コマンド予約RUB数を「１」デクリメントし、ステップＳ２８５において、データ転送Tag数を「１」インクリメントし、ステップＳ２８６において、データ転送累積セクタレングスがデータ転送PRDセクタに一致するか否かを判定し、一致すると判定した場合、IDMA制御部３７は、図４０のステップＳ１４１において、データ転送終了処理を実行するように制御し、データ転送状態報告処理を終了し、図４０のステップＳ１３９に処理を戻す。ステップＳ１３９に処理が戻されると、IDMA制御部３７は、上述したようにステップＳ１３９の処理を終了し、ステップＳ１４０に処理を進める。
【０２８８】
また、図４９のステップＳ２８６において、データ転送累積セクタレングスがデータ転送PRDセクタに一致しないと判定した場合、IDMA制御部３７は、図４０のステップＳ１４１において、データ転送終了処理を実行しないように制御し、データ転送状態報告処理を終了し、図４０のステップＳ１３９に処理を戻す。ステップＳ１３９に処理が戻されると、IDMA制御部３７は、上述したようにステップＳ１３９の処理を終了し、ステップＳ１４０に処理を進める。
【０２８９】
次に、図５０のフローチャートを参照してデータ転送終了処理の例を説明する。
【０２９０】
ステップＳ３０１において、IDMA PIO制御部３８は、IMDA制御部３７に制御され、図３４のフローチャートを参照して説明したようなIDMA PIO制御処理を実行する。ただし、この場合、ステップＳ８３においてEOFレジスタの値が真であると判定し、IDMA PIO制御処理を終了したとき、IDMA PIO制御部３８は、図５０のステップＳ３０１に処理を戻す。ステップＳ３０１に処理が戻されると、IDMA制御部３７は、処理をステップＳ３０２に進める。
【０２９１】
IDMA制御部３７は、ステップＳ３０２において、PRDテーブルの完了フラグの値を「１」にセットし、処理フラグの値を「０」にセットし、ステップＳ３０３において、１PRD処理終了によるCPU割り込みをセットする。
【０２９２】
ステップＳ３０４において、IDMA制御部３７は、領域１１３Ｆの割り込み要因設定を参照して単一PRD終了時一時停止フラグ２４７の値が「１」であるか否かを判定し、値が「１」であると判定した場合、一時停止中であるので、ステップＳ３０５に処理を進め、一時停止が解除されるまで待機する。
【０２９３】
一時停止が解除されると、IDMA制御部３７は、処理をステップＳ３０６に進める。また、ステップＳ３０４において、単一PRD終了時一時停止フラグ２４７の値が「１」ではなく、一時停止中でないと判定した場合、IDMA制御部３７は、処理をステップＳ３０６に進める。
【０２９４】
ステップＳ３０６において、IDMA制御部３７は、データ転送PRDポインタFIFOポインタの値を「１」インクリメントし、データ転送終了処理を終了し、図４０のステップＳ１４１に処理を戻す。ステップＳ１４１に処理が戻されると、IDMA制御部３７は、上述したようにステップＳ１４１の処理を終了し、ステップＳ１４２に処理を進める。
【０２９５】
以上のように、ATAホストハードウェア２１のIDMA PRD制御ハードウェア２７２が、PIO処理ハードウェア２７１およびDMA処理ハードウェア２７３を制御しながら、複数のPRDテーブルに基づいて、連続してPIO処理やDMA処理を実行するため、図５１に示されるように、CPU２３は、最初にATAホストハードウェア２１にアクセスして、PRDテーブルやDMA PIOスクリプト等を供給し、実行を指示するだけで、複数のPIO処理およびDMA処理が実行される。
【０２９６】
従って、CPU２３とATAホストハードウェア２１とのアクセスは、最初と最後の２回のみでよく、ATAデバイスのPIO用レジスタ（レジスタ（PIO））５３ＡやDMA用レジスタ（レジスタ（DMA））５３ＢへのアクセスはATAホストハードウェア２１がCPU２３のアクセス無しに連続して実行するので、PIO処理やDMA処理によるバス４２の占有率を低減させることができるだけでなく、CPU２３のデータ転送処理による負荷を軽減させることができ、CPU２３がより容易にデータを転送することができる。
【０２９７】
なお、図７を参照して説明したように、以上のIDMA転送モードにおいて、強制終了命令（アボート命令）により、図４０のフローチャートを参照して説明したGOP処理も、IDMA PIO制御処理の場合と同様に、強制終了される場合がある。しかしながら、IDMA PRD制御ハードウェア２７２のIDMA制御部３７は、PIO処理ハードウェア２７１を制御し、GOP処理の途中でIDMA PIO制御処理を実行させたり、DMA処理ハードウェア２７３のDMA実行部３９を制御してDMA処理を実行させたりする。このときに、アボート処理（強制終了処理）が行われ、IDMA制御部３７が処理を終了すると、処理を実行中の各部は、処理結果をIDMA制御部３７に返却できず、不都合が生じる恐れがある。
【０２９８】
そこで、IDMA制御部３７は、アボート処理を行う際に、処理を実行させた各部が、その処理を完了させるまで待機する。
【０２９９】
図５２のフローチャートを参照して、IDMA制御部３７によるアボート処理を説明する。
【０３００】
アボート命令が発生し、アボート処理を開始したIDMA制御部３７は、ステップＳ３２１において、PIO処理ハードウェア２７１のIDMA PIO制御部３８に処理を依頼し、その処理が実行中であるか否かを判定する。IDMA制御部３７は、実行中のGOP処理において、IDMA PIO制御部３８に処理を依頼し、その処理が実行中であると判定した場合、処理をステップＳ３２２に進め、IDMA PIO制御部３８の処理が終了するまで待機する。IDMA PIO制御部３８の処理が終了し、処理結果が返却されると、IDMA制御部３７は、次に、ステップＳ３２３に処理を進め、DMA処理ハードウェア２７３のDMA実行部３９に処理を依頼し、その処理が実行中であるか否かを判定する。IDMA制御部３７は、実行中のGOP処理において、DMA実行部３９に処理を依頼し、その処理が実行中であると判定した場合、処理をステップＳ３２４に進め、DMA実行部３９の処理が終了するまで待機する。DMA実行部３９の処理が終了し、処理結果が返却されると、IDMA制御部３７は、ステップＳ３２５に処理を進め、実行中のGOP処理を終了させ、アボート処理を終了する。
【０３０１】
また、ステップＳ３２１において、IDMA PIO制御部３８に処理を依頼しておらず、その処理が実行中でないと判定した場合、IDMA制御部３７は、ステップＳ３２２の処理を省略してステップＳ３２３に処理を進める。同様に、ステップＳ３２３において、DMA実行部３９に処理を依頼しておらず、その処理が実行中でないと判定した場合、IDMA制御部３７は、ステップＳ３２４の処理を省略してステップＳ３２５に処理を進め、待機せずに実行中のGOP処理を終了させた後、アボート処理を終了する。
【０３０２】
以上のように、IDMA PIO制御部３８およびDMA実行部３９の処理を待機してからアボートすることにより、IDMA制御部３７は、安全にGOP処理をアボート（強制終了）させることができる。
【０３０３】
以上においては、ドライブ２２のピックアップが１つの場合について説明した。しかしながら、これ以外にも、ドライブ２２が、例えば、ピックアップが複数存在する場合であっても上述した処理を行うことができる。ただし、その場合、後述するように、各ピックアップについて上述した処理を行うようにする必要がある。以下においては、ドライブ２２にピックアップが２つ存在する場合について説明する。
【０３０４】
記録媒体にデータを読み書きするためのピックアップを２つ有するドライブは、例えば、両方のピックアップで書き込み処理や読み出し処理を同時に行うようにすることにより、ピックアップを１つ有するドライブと比較して２倍のレートで書き込み処理や読み出し処理を行うことができる。また、２つのピックアップが同じデータを書き込んだり、読み出したりすることにより、このようなドライブは、読み出し処理や書き込み処理の信頼性を向上させることもできる。
【０３０５】
また、一方のピックアップで書き込み処理を行いながら、他方のピックアップでその書き込んだデータの読み出し処理を行うことにより、ドライブは、そのデータが記録媒体に正常に記録されているか否かを確認しながら書き込み処理を行うこともできる。さらに、一方のピックアップが読み出し処理を行っている間に、他方のピックアップがバックグラウンド処理により読み出されているデータと異なるデータの書き込み処理を行うこともできる。
【０３０６】
このようなドライブにおいては、以上のように、各ピックアップは、あるときは連携して動作し、あるときは独立して動作するようにするために、互いに独立して制御される必要がある。すなわち、このようにドライブが複数のピックアップを有する場合、ATAホストハードウェア２１が、上述したスルーPIO転送モードやIDMA転送モードに関する処理を、各ピックアップに対して実行できるようにする必要がある。
【０３０７】
しかしながら、ATAの規格において、ATAデバイスが複数のピックアップを有する場合についてのプロトコルは存在しない。すなわち、２つのピックアップを有するドライブを上述したように動作させることはATAの規格において規定されていない。
【０３０８】
そこで、上述したようにATAの規格に準拠した方法でこのようなドライブを上述したように動作させるためには、２つのピックアップを有するドライブが、ATAの規格上において、図５３Ａに示されるように、１つのピックアップを有する２台のデバイスとして見せかけるように動作させてデータ転送を行うか、図５３Ｂに示されるように、１つのピックアップを有する１台のデバイスとしてみせかけるように動作させてデータ転送を行うかする必要がある。
【０３０９】
図５３Ａにおいて、ATAホストハードウェア２１は、ATAの規格上において、ドライブの２つのピックアップOP０とOP１がデバイス４３１とデバイス４３２の２つのデバイスであるかのようにデータ転送を行うようになされている。これに対して、図５３Ｂの場合、ATAホストハードウェア２１は、ATAの規格上において、ドライブの２つのピックアップOP０とOP１を隠し、1台のデバイス４３３としてデータ転送を行うようになされている。
【０３１０】
実際には、ATAホストハードウェア２１は、いずれの場合においても、図５４に示されるように、ドライブの２つのピックアップ（OP０とOP１）のそれぞれに対して、コマンドを発行し、データ転送を行う。例えば、図５４においては、ピックアップOP０に対してNo.０のGOP処理とNo.３のGOP処理を行い、ピックアップOP１に対してNo.１のGOP処理と、No.２のGOP処理と、No.４のGOP処理を行っているが、このとき、各ピックアップのDMA転送は、見かけ上並行して進行するように、１RUBずつ交互に行われるようになされている。すなわち、ATAホストハードウェア２１は、OP０に対する処理とOP１に対する処理を並行して進行させ、ドライブとやりとりを行う際には、所定の単位で交互に行うことにより、これらの複数のピックアップに対して見かけ上同時に処理を行っているように動作する。
【０３１１】
なお、上述したように、ATAホストハードウェア２１によるデータ転送には、スルーPIO転送モードとIDMAデータ転送モードがある。しかしながら、スルーPIOモードにおいては、各コマンドの発行やデータ転送が独立しており、ATAホストハードウェア２１は、それらの処理を各ピックアップに対して交互に行えばよいので、各PIO処理が対応するピックアップを識別することができるようにすれば、各ピックアップに対する制御を、上述したピックアップが１つの場合と基本的に同様の動作で実現することができる。
【０３１２】
しかしながら、IDMA転送モードにおいては、各DMA処理が複数のフェーズよりなり、さらに読み出し処理においては、各DMA処理の一部を並行して行うので、ATAホストハードウェア２１は、それらの処理の進行を制御（管理）する必要がある。以下においては、ATAホストハードウェア２１による、このようなIDMA転送モードにおける制御について説明する。
【０３１３】
図５５は、ドライブ２２が２つのピックアップOP０およびOP１を有する場合の、IDMA転送モードにおけるATAホストハードウェア２１の機能ブロックを示す図である。
【０３１４】
上述したように、ATAホストハードウェア２１は、各ピックアップに対してそれぞれGOP処理を行い、さらに、それらの処理の手順を制御する必要がある。すなわち、OP０とOP１に割り振られた複数のPRD処理をそれぞれのOPに対して行うように並列分岐（フォーク（fork））し、各処理が終了した後に並列分岐した処理を１つにまとめる処理（ジョイン（join））を行う必要がある。
【０３１５】
IDMA制御部３７は、このような制御処理を行うために、各PRD処理をフォークさせて、処理終了後にジョインさせるように制御するクラウド処理を行うクラウド処理部４４１、フォークされたOP０に対するGOP処理を行うOP０用GOP処理部４４２、フォークされたOP１に対するGOP処理を行うOP１用GOP処理部４４３、OP０用GOP処理部４４２およびOP１用GOP処理部４４３がそれぞれPIO処理ハードウェア２７１の各部およびDMA実行部３９（DMA処理ハードウェア２７３）を制御できるように切り替え処理を行うセレクタ４４４Ａおよび４４４Ｂにより構成される。なお、以下において、セレクタ４４４Ａとセレクタ４４４Ｂとを区別する必要の無い場合、セレクタ４４４と称する。
【０３１６】
なお、ここで、GOP処理とは、１つのピックアップに対する読み出し処理または書き込み処理のいずれか一方のみにより構成されるPRD処理を複数まとめた処理を示すものとする。すなわち、OP０用GOP処理部４４２において実行されるGOP処理は、ピックアップOP０に対する読み出し処理のPRD処理、またはピックアップOP０に対する書き込み処理のPRD処理の少なくとも一方により構成される複数のPRD処理であり、OP１用GOP処理部４４３において実行されるGOP処理は、ピックアップOP１に対する読み出し処理のPRD処理、またはピックアップOP１に対する書き込み処理のPRD処理の少なくとも一方により構成される複数のPRD処理である。
【０３１７】
IDMA制御部３７のクラウド処理部４４１は、SRAM５２に格納されたPRDテーブルを取得すると、OP０用GOP処理部４４２またはOP１用GOP処理部４４３の、そのPRDテーブルによるPRD処理が対応する方を制御してそのPRDテーブルによるPRD処理を実行させる。
【０３１８】
OP０用GOP処理部４４２は、クラウド処理部４４１より制御されて、OP０用の各PRD処理を実行し、PIO処理ハードウェア２７１の各部やDMA実行部３９を制御して、OP０に対するGOP処理を行う。
【０３１９】
OP１用GOP処理部４４２は、クラウド処理部４４１より制御されて、OP１用の各PRD処理を実行し、PIO処理ハードウェア２７１の各部やDMA実行部３９を制御して、OP１に対するGOP処理を行う。
【０３２０】
セレクタ４４４Ａは、必要に応じて、OP０用GOP処理部４４２やOP１用GOP処理部４４２を、PIO処理ハードウェア２７１の各部に接続し、セレクタ４４４Ａは、必要に応じて、OP０用GOP処理部４４２やOP１用GOP処理部４４２を、DMA実行部３９に接続する。
【０３２１】
以下において、上述した１つのピックアップを有する２台のデバイスとして見せかけるように動作させてデータ転送を行う場合と、１つのピックアップを有する１台のデバイスとしてみせかけるように動作させてデータ転送を行う場合との２つの場合について説明するが、最初に、１つのピックアップを有する２台のデバイスとして見せかけるように動作させてデータ転送を行う場合について説明する。
【０３２２】
図５６は、PRDテーブルに基づいて実行されるクラウド処理とGOP処理のスケジュールの例を説明する図である。
【０３２３】
ATAホストハードウェア２１が図５６に示されるPRDテーブル４５１乃至PRDテーブル４５７に対するPRD処理を実行する場合、IDMA制御部３７は、最初に番号０のPRDテーブル（PRD０）を参照する。このPRDテーブルは、OP０用の読み出し処理のテーブルであるので、IDMA制御部３７のクラウド処理部４４１は、このPRDテーブルに対してPRD処理４５１をOP０用GOP処理部４４２に実行させる。
【０３２４】
同様に、クラウド処理部４４１は、番号１のPRDテーブル（PRD１）を参照し、そのPRD処理４５２をOP１用GOP処理部４４３に実行させ、番号２のPRDテーブル（PRD２）を参照し、そのPRD処理４５３をOP０用GOP処理部４４２に実行させ、番号３のPRDテーブル（PRD３）を参照し、そのPRD処理４５４をOP１用GOP処理部４４３に実行させ、番号４のPRDテーブル（PRD４）を参照し、そのPRD処理４５５をOP１用GOP処理部４４３に実行させ、番号５のPRDテーブル（PRD５）を参照し、そのPRD処理４５６をOP０用GOP処理部４４２に実行させ、番号６のPRDテーブル（PRD６）を参照し、そのPRD処理４５７をOP０用GOP処理部４４２に実行させる。
【０３２５】
図５６において、PRDテーブルの左側に示される図は、クラウド処理部４４１によるクラウド処理を示したものであり、上の段の「OP０」に対応する処理がOP０用GOP処理部４４２による処理であり、下の段の「OP１」に対応する処理がOP１用GOP処理部４４３による処理である。
【０３２６】
このとき、PRD処理４５１およびPRD処理４５３がともに読み出し処理（Read）であり、処理の順番が連続しているので、OP０用GOP処理部４４２は、これらの処理を１つのGOP処理４６１として実行する。PRD処理４５６およびPRD処理４５７は、それぞれ、書き込み処理（Write）と読み出し処理（Read）であり、同じ処理が連続していない。従って、OP０用GOP処理部４４２は、PRD処理４５６をGOP処理４６４として実行し、PRD処理４５７をGOP処理４６５として実行する。
【０３２７】
同様にして、OP１用GOP処理部４４３は、読み出し処理（Read）を行うPRD処理４５２を１つのGOP処理４６２として実行し、処理の順番が連続するPRD処理４５４およびPRD処理４５５（いずれも書き込み処理（Write））を１つのGOP処理４６３として実行する。
【０３２８】
クラウド処理部４４１は、このようにGOP処理（PRD処理）を並列分岐させて実行する。すなわち、図５６の例の場合、クラウド処理部４４１は、１つのクラウド処理（Crowd）４７１により、GOP処理４６１乃至GOP処理４６５をフォークさせ、処理後に、分岐されたそれらの処理をジョインさせる。
【０３２９】
このとき、２つのピックアップOP０およびOP１は、ATAの規格上において２つのデバイスとして処理されている。従って、各ピックアップに対する処理間（上の段と下の段）で、GOP処理の開始タイミングは互いに独立している。すなわち、OP０用GOP処理部４４２は、OP１用GOP処理部４４３によるGOP処理の進行に関わらず、GOP処理４６１の終了直後から次のGOP処理４６４を実行することができる。GOP処理４６５の開始タイミングについても同様であり、OP０用GOP処理部４４２は、GOP処理４６４の終了直後から次のGOP処理４６５を開始することができる。OP１用GOP処理部４４３についても同様であり、OP１用GOP処理部４４３は、GOP処理４６２の終了直後から次のGOP処理４６３を開始することができる。換言すると、クラウド処理部４４１は、１回のクラウド処理により、OP０用GOP処理部４４２およびOP１用GOP処理部４４３に複数のGOP処理を実行させることができる。
【０３３０】
なお、図５６に示されるように並行して実行される各ピックアップに対するGOP処理の各DMA転送（コマンドの発行も含む）は、ATA上においては同時に行う（同時に転送する）ことができないので、処理単位レベルにおいては、どちらか１つずつ行う必要がある。
【０３３１】
そこで、具体的には、図５４を参照して説明したように、ピックアップOP０に対応するDMA転送（OP０用GOP処理部４４２によるDMA転送）と、ピックアップOP１に対応するDMA転送（OP１用GOP処理部４４３によるDMA転送）が１RUB毎に交互に行われる。
【０３３２】
このDMA転送に関する処理（DMA処理）は、例えば、図３７等に示されるように、複数のフェーズにより構成される。例えば、図５７に示されるように、DMA処理は、読み出し処理若しくは書き込み処理を指示するDMAコマンド（リードコマンド（Ｒ）またはライトコマンド（Ｗ））を発行するフェーズ、DMAの実行を指示するDMA Exeコマンド（Ｄ）を発行するフェーズ、DMAデータ転送（DMA）を行うフェーズ、並びにステータス（Ｓ）を報告するフェーズにより構成される。
【０３３３】
このようなDMA処理において、DMA転送のフェーズの処理の負荷が、他のフェーズの処理の負荷と比較して一番大きい。ところで、OP０用GOP処理部４４２とOP１用GOP処理部４４３による処理はなるべく偏りなく平均化されるようにすることが望ましい。例えば、いずれか一方に処理が集中した場合、そのGOP処理部の負荷が増大してしまい、その瞬間正常に動作しない恐れもあるので、DMA転送のフェーズの処理が、上述したように１RUB毎に切り替えられるようにする。
【０３３４】
その切り替えタイミングは、例えば、読み出し処理の場合、図５７の図中左側に示されるように、DMA実行コマンドを発行する直前になるようにし、書き込み処理の場合、図５７の図中右側に示されるように、DMA転送終了時、または、ステータス報告終了時のいずれか一方より選択された方となるようにする。
【０３３５】
OP切り替え処理の具体的な例について説明する。
【０３３６】
図５８に示されるように、１クラウド処理内のPRD処理が全て書き込み処理（Write）である場合OP０用GOP処理部４４２によるGOP処理と、OP１用GOP処理部４４３によるGOP処理とは、それぞれのDMA転送フェーズが終了する度に切り替えられて交互に実行される。
【０３３７】
なお、図５８においては、DMA転送終了時に切り替える場合についてのみ説明している。ステータス報告終了時において切り替える場合についても、そのタイミングが異なるだけで、基本的に図５８の場合と同様である。
【０３３８】
図５９に示されるように、１クラウド処理内のPRD処理が全て読み出し処理（Read）である場合、OP０用GOP処理部４４２によるGOP処理と、OP１用GOP処理部４４３によるGOP処理とのそれぞれの最初において、DMAコマンドの発行（キューイング）が行われるが、それ以降は、各GOP処理が、それぞれのDMA実行コマンドの発行直前に切り替えられて交互に実行される。
【０３３９】
なお、処理が進み、例えば、OP０用GOP処理部４４２によるGOP処理が完了し、OP１用GOP処理部４４３においてのみGOP処理が行われている場合に、OP１用GOP処理部４４３が、OP０用GOP処理部４４２の処理からOP切り替えが行われると、OP０用GOP処理部４４２はGOP処理を終了しているので、何もせずにそのまま処理をOP１側に戻し、OP１用GOP処理部４４３にGOP処理を続けさせる。
【０３４０】
図６０に示されるように、読み出し処理（Read）のPRD処理と書き込み処理（Write）のPRD処理とが混在する場合も、基本的にその動作は上述した場合と変化せず、各切り替えタイミングにおいて切り替えられ、DMA転送が、１つずつ実行される。なお、図中OP１の段に示されるように、上述した切り替えタイミング以外にも、１つのGOP処理が終了すると必ず切り替え処理が発生する。
【０３４１】
以上のように、２Dev−２OPの場合、２つのピックアップOP０とOP１は、ATAの規格上、異なるデバイスとして扱われる。すなわち、OP０用GOP処理部４４２によるGOP処理、および、OP１用GOP処理部４４３によるGOP処理は、各処理の内部においてDMAコマンド順やDMAデータ転送順が合っていればよく、互いに独立して実行される。従って、図５６に示されるように、１つのクラウド処理内に、読み出し処理と書き込み処理の両方が含まれるようにすることもできる。
【０３４２】
図６１に、クラウド処理部４４１と、OP０用GOP処理部４４２、OP１用GOP処理部４４３、およびセレクタ４４４との制御関係を示す図である。
【０３４３】
クラウド処理部４４１は、PRD処理をOP０用GOP処理部４４２にフォークする際に、OP０用GOP処理部４４２に対して、GopSTARTコマンド６０１を発行する。OP０用GOP処理部４４２は、GopSTARTコマンド６０１に基づいて、割り当てられたPRD処理を実行し、処理が終了すると、クラウド処理部４４１に対してGopNext Reqコマンド６０２を発行し、次のPRD処理を要求する。クラウド処理部４４１は、この要求に基づいて、GopNext PRDコマンド６０３をOP０用GOP処理部４４２に対して発行し、次のPRD処理を割り当てる。
【０３４４】
また、GOP処理中にTurnOFF状態で待機しているOP０用GOP処理部４４２に対して、クラウド処理部４４１は、所定のタイミングで、TurnONコマンドおよびRdTRNSF許可コマンド６０４を発行し、OP０用GOP処理部４４２をTurnON状態に移行させるとともに、読み出し転送用許可を発行する。OP０用GOP処理部４４２は、TurnONコマンドに基づいてPRD処理を再開し、DMA転送時にこのRdTRNSF許可コマンドに基づいて、RdTRNSF Exeコマンド６０５をリードデータとともにクラウド処理部４４１に供給する。また、その際、OP０用GOP処理部４４２は、TurnOFFコマンドもクラウド処理部４４１に供給し、TurnOFF状態に移行する。
【０３４５】
OP０用GOP処理部４４２に割り当てるPRD処理がなくなると、クラウド処理部４４１は、GopENDコマンド６０６をOP０用GOP処理部４４２に対して発行する。OP０用GOP処理部４４２は、GOP処理を完了すると、クラウド処理部４４１に対してGopFINISHコマンド６０７を発行する。
【０３４６】
なお、クラウド処理部４４１は、OP１用GOP処理部４４３に対しても同様に処理を行い、GopSTARTコマンド６０１に対応するGopSTARTコマンド６１１、GopNext PRDコマンド６０３に対応するGopNext PRDコマンド６１３、TurnONコマンドおよびRdTRNSF許可コマンド６０４に対応するTurnONコマンドおよびRdTRNSF許可コマンド６１４、並びに、GopENDコマンド６０６に対応するGopENDコマンド６１６を、それぞれ、OP０用GOP処理部４４２の場合と同様のタイミングで発行する。
【０３４７】
また、OP１用GOP処理部４４３も、クラウド処理部４４１に対して同様に処理を行い、GopNext Reqコマンド６０２に対応するGopNext Reqコマンド６１２、TurnOFFコマンドおよびRdTRNSF Exeコマンド６０５に対応するTurnOFFコマンドおよびRdTRNSF Exeコマンド６１５、並びに、GopFINISHコマンド６０７に対応するGopFINISHコマンド６１７を、それぞれ、OP０用GOP処理部４４２の場合と同様のタイミングで発行する。
【０３４８】
さらにクラウド処理部４４１は、セレクタ４４４に対して、OPの切り替え処理が行われたことを示すTurnOPコマンド６１８を所定のタイミングで供給する。
【０３４９】
以上のように、IDMA制御部３７内において、クラウド処理部４４１は、クラウド処理を行い、OP０用GOP処理部４４２、OP１用GOP処理部４４３、およびセレクタ４４４を制御して、GOP処理（PRD処理）を実行させる。
【０３５０】
次に、以上のようなクラウド処理を制御するクラウド全体制御処理について、図６２のフローチャートを参照して説明する。
【０３５１】
最初に、ステップＳ３４１において、クラウド処理部４４１は、初期化処理を行い、各変数や設定を初期化する。例えば、クラウド処理部４４１は、ピックアップOP０にPRDテーブル（PRD処理）を割り当てるためのポインタであるOP０＃PRDポインタを「０」にセット（設定）し、同様に、ピックアップOP１にPRDテーブル（PRD処理）を割り当てるためのポインタであるOP１＃PRDポインタを「０」にセット（設定）する。また、クラウド処理部４４１は、クラウド処理が終了されるPRDテーブルを特定するためのCROWD END PRDポインタの値を「０」にセット（設定）する。さらにクラウド処理部４４１は、PRDテーブルをフェッチし、OP０用GOP処理部４４２が現在行っている処理が書き込み処理（ライト）であるか読み込み処理（リード）であるかを示すフラグであるOP０＃CrntRXWの値をセット（設定）し、同様に、OP１用GOP処理部４４３が現在行っている処理が書き込み処理（ライト）であるか読み込み処理（リード）であるかを示すフラグであるOP１＃CrntRXWの値をセット（設定）する。
【０３５２】
初期化処理が終了すると、クラウド処理部４４１は、ステップＳ３４２に処理を進め、セマフォを取得するまで待機し、セマフォを取得した場合、そのセマフォをロックする。セマフォを取得してロックしたクラウド処理部４４１は、ステップＳ３４３に処理を進め、Crowd END PRDポインタを参照し、クラウド全体制御処理の終了を示すEOF、または、クラウド全体制御処理の強制終了を示すAbortを検出したか否かを判定する。EOFまたはAbortのいずれも検出していないと判定した場合、クラウド処理部４４１は、新たなクラウド処理について制御を行うために処理をステップＳ３４４に進め、SRAM５２に格納されている各PRDテーブルを参照し、制御対象となるクラウド処理に対応する各PRDテーブルの処理順を確認し、１つのクラウド処理において最後のテーブルとなるPRDテーブルを特定し、そのテーブル番号をCrowd END PRDポインタにセットする。上述したように２Dev-２OPの場合（２つのピックアップを２つのデバイスに見せかける場合）EOFに設定されたPRDテーブルのテーブル番号がCrowd END PRDポインタにセットされる。
【０３５３】
Crowd END PRDポインタのセットが完了すると、クラウド処理部４４１は、ステップＳ３４５に処理を進め、セマフォのロックを解除する。そして、ステップＳ３４６において、OP０にフォークしたGOP処理を制御するOP０用のクラウド制御処理を行うか否かを判定し、行うと判定した場合、ステップＳ３４７に処理を進め、OP０用のクラウド制御処理を実行する。OP０用のクラウド制御処理の詳細は、図６３乃至６５のフローチャートを参照して後述する。OP０用のクラウド制御処理を実行し、その処理が終了すると、クラウド処理部４４１は、ステップＳ３４２に処理を戻し、次のクラウド処理（今回制御したOP０のクラウド処理に対応する未処理のOP１のクラウド処理も含む）を制御するために、それ以降の処理を繰り返す。
【０３５４】
また、ステップＳ３４６において、OP０用のクラウド制御処理を実行せず、OP１用のクラウド制御処理を実行すると判定した場合、クラウド処理部４４１は、処理をステップＳ３４８に進め、OP１用クラウド制御処理を実行する。OP１用のクラウド制御処理の詳細は、図６６乃至図６８を参照して後述する。OP１用のクラウド制御処理を実行し、その処理が終了すると、クラウド処理部４４１は、ステップＳ３４２に処理を戻し、次のクラウド処理（今回制御したOP１のクラウド処理に対応する未処理のOP０のクラウド処理も含む）を制御するために、それ以降の処理を繰り返す。
【０３５５】
以上のように、ステップＳ３４２乃至ステップＳ３４８の処理を適宜実行しながら繰り返すことにより、クラウド処理部４４１は、全てのクラウド処理を制御する。そして、ステップＳ３４３において、Crowd END PRDポインタよりEOFまたはAbortのいずれかを検出したと判定した場合、クラウド処理部４４１は、処理をステップＳ３４９に進め、全てのクラウド処理に対する制御処理が終了したことを外部に通知するためのALL END IRQ外部用割り込み要因をセットし、クラウド全体制御処理を終了する。
【０３５６】
クラウド処理部４４１は、以上のようにして、各クラウド処理の進行を制御するクラウド全体制御処理を実行する。
【０３５７】
次に、図６２のステップＳ３４７において実行されるOP０用クラウド制御処理の詳細を図６３乃至図６５のフローチャートを参照して説明する。
【０３５８】
最初に、クラウド処理部４４１は、ステップＳ３６１において、ピックアップOP０（ピックアップOP０用GOP処理部４４２）が、GOP処理を実行するモードであるTurnON状態に移行可能になるまで待機する。OP０用GOP処理部４４２とOP１用GOP処理部４４３は、交互にGOP処理を行うため、それぞれ、処理を実行するTurnON状態と待機するTurnOFF状態とを繰り返しながらGOP処理を実行する。
【０３５９】
OP０がTurnON状態に移行可能になると、クラウド処理部４４１は、ステップＳ３６２に処理を進め、OP０用GOP処理部４４２にGopSTARTコマンド６０１を発行し、GOP処理を開始させる。そして、クラウド処理部４４１は、ステップＳ３６３に処理を進め、OP０＃CrntRXWの値を「NULL」に設定し、ステップＳ３６４において、OP０用GOP処理部４４２がTurnOFF状態に移行するか（OP０用GOP処理部４４２よりTurnOFFコマンド６０５を取得するか）、OP０用GOP処理部４４２より次のPRDテーブル（PRD処理）を要求するGopNext Reqコマンド６０２を取得するか、GOP処理の終了を通知するGopFINISHコマンド６０７を取得するまで待機する。
【０３６０】
そして、それらのいずれかのコマンドをOP０用GOP処理部４４２より取得すると、クラウド処理部４４１は、ステップＳ３６５に処理を進め、OP０用GOP処理部４４２がTurnOFF状態に移行したか否かを判定する。取得したコマンドがTurnOFFコマンド６０５であり、OP０用GOP処理部４４２がTurnOFF状態に移行したと判定した場合、クラウド処理部４４１は、ステップＳ３６６に処理を進め、OP１用GOP処理部４４３にTurnONコマンド６１４を発行する等して、Turnを切り替える。
【０３６１】
そして、クラウド処理部４４１は、ステップＳ３６７において、Turnが再度切り替わるまで（OP１用GOP処理部４４３よりTurnOFFコマンド６１５を取得するまで）待機し、OP１用GOP処理部４４３よりTurnOFFコマンド６１５を取得すると、ステップＳ３６８に処理を進め、OP０用GOP処理部４４２にTurnONコマンド６０４を発行する等して、Turnを切り替える。Turnを切り替えたクラウド処理部４４１は、ステップＳ３６４に処理を戻し、それ以降の処理を繰り返す。
【０３６２】
ステップＳ３６５において、取得したコマンドがTurnOFFコマンド６０５ではなく、OP０用GOP処理部４４２がTurnOFF状態に移行していないと判定した場合、クラウド処理部４４１は、処理を図６４のステップＳ３７１に進める。
【０３６３】
図６４のステップＳ３７１において、クラウド処理部４４１は、取得したコマンドがGopNext Reqコマンド６０２であるか否かを判定し、GopNext Reqコマンド６０２であると判定した場合、ステップＳ３７２に処理を進め、次のPRDテーブルをフェッチし、OP０＃PRDポインタを更新する。
【０３６４】
ステップＳ３７２の処理を終了すると、クラウド処理部４４１は、ステップＳ３７３に処理を進め、OP０＃PRDポインタが指定するPRDテーブルがCrowd END PRDポインタで指定されるPRDテーブルと一致するか否かを判定する。OP０＃PRDポインタの値とCrowd END PRDポインタの値が一致せず、OP０＃PRDポインタが指定するPRDテーブルがCrowd END PRDポインタで指定されるPRDテーブルと一致しないと判定した場合、クラウド処理部４４１は、ステップＳ３７４に処理を進め、SDRAM２４のアクセス先のアドレスであるSDRAMアドレスを追加するか、または、フェッチしたPRDテーブルがピックアップOP０用のPRDテーブルでないかを判定する。
【０３６５】
フェッチしたPRDテーブルがピックアップOP０用のPRDテーブルでなく、SDRAMアドレスを追加しないと判定したクラウド処理部４４１は、ステップＳ３７５に処理を進め、OP０＃PRDポインタをインクリメントし、次のPRDテーブルをフェッチするために、ステップＳ３７２に処理を戻し、それ以降の処理を繰り返す。
【０３６６】
また、ステップＳ３７４において、フェッチしたPRDテーブルがピックアップOP０用のPRDテーブルであり、そのPRD処理に対応するSDRAMアドレスを追加すると判定したクラウド処理部４４１は、ステップＳ３７６に処理を進め、OP０＃CrntRXWの値が「NULL」、または、フェッチしたPRDテーブルのRXWであるか否かを判定する。
【０３６７】
OP０＃CrntRXWの値が「NULL」、または、フェッチしたPRDテーブルのRXWであると判定した場合、クラウド処理部４４１は、今回処理するPRDテーブルが前回処理したPRDテーブルと同種である、または、GOP処理の最初のPRDテーブルであると認識し、処理をステップＳ３７７に進め、OP０用GOP処理部４４２に対してGopNEXT PRDコマンド６０３を発行し、OP０用GOP処理部４４２にそのPRDテーブルのPRD処理を実行させる。GopNEXT PRDコマンド６０３を発行すると、クラウド処理部４４１は、ステップＳ３７８において、OP０＃PRDポインタをインクリメントし、図６３のステップＳ３６４に処理を戻し、それ以降の処理を繰り返す。
【０３６８】
また、図６４のステップＳ３７３において、OP０＃PRDポインタの値がCrowd END PRDポインタの値に一致し、OP０＃PRDポインタが指定するPRDテーブルがCrowd END PRDポインタで指定されるPRDテーブルと一致すると判定した場合、クラウド処理部４４１は、１つのクラウド処理が終了したものと認識し、ステップＳ３７９に処理を進め、OP０用GOP処理部４４２に対して、GopENDコマンド６０６を発行し、GOP処理の終了を指示する。GopENDコマンド６０６を発行したクラウド処理部４４１は、図６３のステップＳ３６４に処理を戻し、それ以降の処理を繰り返す。
【０３６９】
さらに、図６４のステップＳ３７６において、OP０＃CrntRXWの値が「NULL」でもなく、フェッチしたPRDテーブルのRXWでもないと判定した場合、クラウド処理部４４１は、今回処理するPRDテーブルの処理の種類が前回と異なるので、１つのGOP処理が終了したと認識し、処理をステップＳ３７９に処理を進め、OP０用GOP処理部４４２に対して、GopENDコマンド６０６を発行し、GOP処理の終了を指示する。GopENDコマンド６０６を発行したクラウド処理部４４１は、図６３のステップＳ３６４に処理を戻し、それ以降の処理を繰り返す。
【０３７０】
また、ステップＳ３７１において、取得したコマンドがGopNext Reqコマンド６０２でないと判定した場合、クラウド処理部４４１は、図６５のステップＳ３８１に処理を進める。
【０３７１】
図６５のステップＳ３８１において、クラウド処理部４４１は、GopFINISHコマンド６０７を取得したか否かを判定し、GopFINISHコマンド６０７を取得したと判定した場合、処理をステップＳ３８２に進め、OP０ FINISHフラグに「１」をセットする。
【０３７２】
OP０ FINISHフラグに「１」をセットするとクラウド処理部４４１は、処理をステップＳ３８３に進め、OP０＃PRDポインタが指定するPRDテーブルがCrowd END PRDポインタで指定されるPRDテーブルと一致するか否かを判定する。OP０＃PRDポインタの値とCrowd END PRDポインタの値が一致し、OP０＃PRDポインタが指定するPRDテーブルがCrowd END PRDポインタで指定されるPRDテーブルと一致すると判定した場合、クラウド処理部４４１は、ステップＳ３８４に処理を進め、クラウド処理を終了し、OP１用クラウド処理が終了するまで待機する。OP１用クラウド処理が終了すると、クラウド処理部４４１は、OP０用クラウド制御処理を終了し、図６２のステップＳ３４７に処理を戻す。ステップＳ３４７に処理が戻されると、クラウド全体制御処理を行っていたクラウド処理部４４１は、上述したように、ステップＳ３４２に処理を戻し、それ以降の処理を繰り返す。
【０３７３】
なお、図６５のステップＳ３８１において、GopFINISHコマンド６０７を取得していないと判定した場合、クラウド処理部４４１は、図６３のステップＳ３６４に処理を戻し、それ以降の処理を繰り返す。また、図６５のステップＳ３８３において、OP０＃PRDポインタの値とCrowd END PRDポインタの値が一致せず、OP０＃PRDポインタが指定するPRDテーブルがCrowd END PRDポインタで指定されるPRDテーブルと一致しないと判定した場合、クラウド処理部４４１は、図６３のステップＳ３６１に処理を進め、次のGOP処理について、それ以降の処理を繰り返す。
【０３７４】
次に、図６２のステップＳ３４８において実行されるOP１用クラウド制御処理の詳細を図６６乃至図６８のフローチャートを参照して説明する。なお、OP１用クラウド制御処理は、基本的に、上述したOP０用クラウド制御処理と同様に行われる。
【０３７５】
すなわち、最初に、クラウド処理部４４１は、図６６のステップＳ４０１において、ピックアップOP１（ピックアップOP１用GOP処理部４４３）が、GOP処理を実行するモードであるTurnON状態に移行可能になるまで待機する。
【０３７６】
OP１がTurnON状態に移行可能になると、クラウド処理部４４１は、ステップＳ４０２に処理を進め、OP１用GOP処理部４４３にGopSTARTコマンド６１１を発行し、GOP処理を開始させる。そして、クラウド処理部４４１は、ステップＳ４０３に処理を進め、OP１＃CrntRXWの値を「NULL」に設定し、ステップＳ４０４において、OP１用GOP処理部４４３よりTurnOFFコマンド６１５を取得するか、GopNext Reqコマンド６１２を取得するか、GopFINISHコマンド６１７を取得するまで待機する。
【０３７７】
そして、それらのいずれかのコマンドをOP１用GOP処理部４４３より取得すると、クラウド処理部４４１は、ステップＳ４０５に処理を進め、OP１用GOP処理部４４３がTurnOFF状態に移行したか否かを判定する。TurnOFFコマンド６１５を取得し、OP１用GOP処理部４４３がTurnOFF状態に移行したと判定した場合、クラウド処理部４４１は、ステップＳ４０６に処理を進め、OP０用GOP処理部４４２にTurnONコマンド６０４を発行する等して、Turnを切り替える。
【０３７８】
そして、クラウド処理部４４１は、ステップＳ４０７において、Turnが再度切り替わるまで（OP０用GOP処理部４４２よりTurnOFFコマンド６０５を取得するまで）待機し、OP０用GOP処理部４４２よりTurnOFFコマンド６０５を取得すると、ステップＳ４０８に処理を進め、OP１用GOP処理部４４３にTurnONコマンド６１４を発行する等して、Turnを切り替える。Turnを切り替えたクラウド処理部４４１は、ステップＳ４０４に処理を戻し、それ以降の処理を繰り返す。
【０３７９】
ステップＳ４０５において、取得したコマンドがTurnOFFコマンド６１５ではなく、OP１用GOP処理部４４３がTurnOFF状態に移行していないと判定した場合、クラウド処理部４４１は、処理を図６７のステップＳ４１１に進める。
【０３８０】
図６７のステップＳ４１１において、クラウド処理部４４１は、取得したコマンドがGopNext Reqコマンド６１２であるか否かを判定し、GopNext Reqコマンド６１２であると判定した場合、ステップＳ４１２に処理を進め、次のPRDテーブルをフェッチし、OP１＃PRDポインタを更新する。
【０３８１】
ステップＳ４１２の処理を終了すると、クラウド処理部４４１は、ステップＳ４１３に処理を進め、OP１＃PRDポインタが指定するPRDテーブルがCrowd END PRDポインタで指定されるPRDテーブルと一致するか否かを判定する。OP１＃PRDポインタの値とCrowd END PRDポインタの値が一致せず、OP１＃PRDポインタが指定するPRDテーブルがCrowd END PRDポインタで指定されるPRDテーブルと一致しないと判定した場合、クラウド処理部４４１は、ステップＳ４１４に処理を進め、SDRAM２４のアクセス先のアドレスであるSDRAMアドレスを追加するか、または、フェッチしたPRDテーブルがピックアップOP１用のPRDテーブルでないかを判定する。
【０３８２】
フェッチしたPRDテーブルがピックアップOP１用のPRDテーブルでなく、SDRAMアドレスを追加しないと判定したクラウド処理部４４１は、ステップＳ４１５に処理を進め、OP１＃PRDポインタをインクリメントし、次のPRDテーブルをフェッチするために、ステップＳ４１２に処理を戻し、それ以降の処理を繰り返す。
【０３８３】
また、ステップＳ４１４において、フェッチしたPRDテーブルがピックアップOP１用のPRDテーブルであり、そのPRD処理に対応するSDRAMアドレスを追加すると判定したクラウド処理部４４１は、ステップＳ４１６に処理を進め、OP１＃CrntRXWの値が「NULL」、または、フェッチしたPRDテーブルのRXWであるか否かを判定する。
【０３８４】
OP１＃CrntRXWの値が「NULL」、または、フェッチしたPRDテーブルのRXWであると判定した場合、クラウド処理部４４１は、今回処理するPRDテーブルが前回処理したPRDテーブルと同種である、または、GOP処理の最初のPRDテーブルであると認識し、処理をステップＳ４１７に進め、OP１用GOP処理部４４３に対してGopNEXT PRDコマンド６１３を発行し、OP１用GOP処理部４４３にそのPRDテーブルのPRD処理を実行させる。GopNEXT PRDコマンド６１３を発行すると、クラウド処理部４４１は、ステップＳ４１８において、OP１＃PRDポインタをインクリメントし、図６６のステップＳ４０４に処理を戻し、それ以降の処理を繰り返す。
【０３８５】
また、図６４のステップＳ４１３において、OP１＃PRDポインタの値がCrowd END PRDポインタの値に一致し、OP１＃PRDポインタが指定するPRDテーブルがCrowd END PRDポインタで指定されるPRDテーブルと一致すると判定した場合、クラウド処理部４４１は、１つのクラウド処理が終了したものと認識し、ステップＳ４１９に処理を進め、OP１用GOP処理部４４３に対して、GopENDコマンド６１６を発行し、GOP処理の終了を指示する。GopENDコマンド６１６を発行したクラウド処理部４４１は、図６６のステップＳ４０４に処理を戻し、それ以降の処理を繰り返す。
【０３８６】
さらに、図６７のステップＳ４１６において、OP１＃CrntRXWの値が「NULL」でもなく、フェッチしたPRDテーブルのRXWでもないと判定した場合、クラウド処理部４４１は、今回処理するPRDテーブルの処理の種類が前回と異なるので、１つのGOP処理が終了したと認識し、処理をステップＳ４１９に処理を進め、OP１用GOP処理部４４３に対して、GopENDコマンド６１６を発行し、GOP処理の終了を指示する。GopENDコマンド６１６を発行したクラウド処理部４４１は、図６６のステップＳ４０４に処理を戻し、それ以降の処理を繰り返す。
【０３８７】
また、ステップＳ４１１において、取得したコマンドがGopNext Reqコマンド６１２でないと判定した場合、クラウド処理部４４１は、図６８のステップＳ４２１に処理を進める。
【０３８８】
図６８のステップＳ４２１において、クラウド処理部４４１は、GopFINISHコマンド６１７を取得したか否かを判定し、GopFINISHコマンド６１７を取得したと判定した場合、処理をステップＳ４２２に進め、OP１ FINISHフラグに「１」をセットする。
【０３８９】
OP１ FINISHフラグに「１」をセットするとクラウド処理部４４１は、処理をステップＳ４２３に進め、OP１＃PRDポインタが指定するPRDテーブルがCrowd END PRDポインタで指定されるPRDテーブルと一致するか否かを判定する。OP１＃PRDポインタの値とCrowd END PRDポインタの値が一致し、OP１＃PRDポインタが指定するPRDテーブルがCrowd END PRDポインタで指定されるPRDテーブルと一致すると判定した場合、クラウド処理部４４１は、ステップＳ４２４に処理を進め、クラウド処理を終了し、OP０用クラウド処理が終了するまで待機する。OP０用クラウド処理が終了すると、クラウド処理部４４１は、OP１用クラウド制御処理を終了し、図６２のステップＳ３４８に処理を戻す。ステップＳ３４８に処理が戻されると、クラウド全体制御処理を行っていたクラウド処理部４４１は、上述したように、ステップＳ３４２に処理を戻し、それ以降の処理を繰り返す。
【０３９０】
なお、図６８のステップＳ４２１において、GopFINISHコマンド６１７を取得していないと判定した場合、クラウド処理部４４１は、図６６のステップＳ４０４に処理を戻し、それ以降の処理を繰り返す。また、図６８のステップＳ４２３において、OP１＃PRDポインタの値とCrowd END PRDポインタの値が一致せず、OP１＃PRDポインタが指定するPRDテーブルがCrowd END PRDポインタで指定されるPRDテーブルと一致しないと判定した場合、クラウド処理部４４１は、図６６のステップＳ４０１に処理を進め、次のGOP処理について、それ以降の処理を繰り返す。
【０３９１】
以上のようにクラウド処理部４４１は、クラウド処理を制御するクラウド全体制御処理（OP０用クラウド制御処理およびOP１用クラウド制御処理を含む）を実行し、各クラウド処理を制御する。これにより、各GOP処理がOP０用GOP処理部４４２またはOP１用GOP処理部４４３の内、GOP処理が対応する方においてそれぞれ実行されるので、ATAハードウェア２１は、２つのピックアップを有するドライブ２２に対して、ATAの規格上において、各ピックアップに対するGOP処理をあたかも２つのデバイスに対するGOP処理のように実行し、転送処理を行うことができる。従って、CPU２３は、ドライブ２２がピックアップを複数有する場合においても、容易にデータを転送させることができる。
【０３９２】
以上においては、２つのピックアップを有するドライブ２２を、１つのピックアップを有する２台のデバイスとしてみせかけるように動作させてデータ転送を行う場合（２Dev-２OP）について説明した。次に、２つのピックアップを有するドライブ２２を、１つのピックアップを有する１台のデバイスとしてみせかけるように動作させてデータ転送を行う場合（１Dev-２OP）について説明する。
【０３９３】
図６９は、PRDテーブルに基づいて実行されるクラウド処理とGOP処理のスケジュールの例を説明する図である。この図６９の構成は、図５６の構成に対応する。
【０３９４】
２つのピックアップを有するドライブ２２を、１つのピックアップを有する１台のデバイスとしてみせかけるように動作させてデータ転送を行う場合も、図５６の場合と同様に、クラウド処理部４４１がクラウド処理を行うことにより、各GOP処理をフォークしてOP０用GOP処理部４４２またはOP１用GOP処理部４４３に実行させる。ただし、この場合、ATAの規格上においては、ピックアップOP０もピックアップOP１も同じ１つのピックアップとして扱われるので、クラウド処理部４４１は、OP０用のGOP処理とOP１用のGOP処理とを独立して制御することができず、図５６の場合と異なり、各クラウド処理において、書き込み処理（ライト）と読み出し処理（リード）が混在しないようにする。
【０３９５】
すなわち、図６９において、図５６の場合と同じテーブルである、図中右側に示されるPRDテーブル群に基づいてPRD処理を実行する場合、クラウド処理部４４１は、OP０用GOP処理部４４２において実行される読み出し処理の、PRD処理６５１およびPRD処理６５３よりなるGOP処理６６１と、OP１用GOP処理部４４３において実行される読み出し処理の、PRD処理６５２よりなるGOP処理６６２との両方が終了するまで、OP０用GOP処理部４４２およびOP１用GOP処理部４４３に対して、次のGOP処理を実行させない。従って、このGOP処理６６１とGOP処理６６２とが１つのクラウド処理６７１として構成される。
【０３９６】
そして、クラウド処理部４４１は、クラウド処理６７１が完了すると（フォークしたGOP処理を一度ジョインしてから）、次のクラウド処理６７２として、GOP処理６６３およびGOP処理６６４をフォークして各部に実行させる。このクラウド処理６７２は、書き込み処理を行うGOP処理のみにより構成される。次のGOP処理６６５は読み出し処理であるので、クラウド処理部４４１は、これをさらに次のクラウド処理６７３とし、クラウド処理６７２が終了してから（GOP処理６６３およびGOP処理６６４が完了し、一度ジョインさせてから）、フォークして実行させる。
【０３９７】
このように制御するためにクラウド処理部４４１は、図７０に示されるように、OP切り替えタイミングを、例えば、読み出し処理の場合、DMAコマンドを発行した直後およびステータス報告終了時の２箇所とし、書き込み処理の場合、DMA転送終了時、または、ステータス報告終了時のいずれか一方より選択された方となるようにする。
【０３９８】
従って、１クラウド処理を構成するGOP処理が全て書き込み処理（ライト）を行うPRD処理により構成される場合のOP切り替えに関する処理は、図５８を参照して説明した、１つのピックアップを有する２台のデバイスとして見せかけるように動作させてデータ転送を行う場合（２Dev-２OP）と同様であるのでその説明を省略する。また、図５８を参照して説明したように、DMA転送終了時に切り替える場合であっても、ステータス報告終了時において切り替える場合であっても、基本的に同様に切り替えられることについても、同様である。
【０３９９】
これに対して、１クラウド処理内のPRD処理が全て読み出し処理（Read）である場合の切り替え処理は、図７１に示されるように、DMAコマンドを発行した直後およびステータス報告終了時の２箇所において行われる。これは、この方法においては、ドライブ２２を１つのピックアップを有する１台のデバイスとしてみせかけるために、リードコマンドをキューイングするために用意されるキューは１つのみであるので、その１つのキューをピックアップOP０に対する処理とピックアップOP１に対する処理とで共有する必要があるからである。従って、この場合、ピックアップOP０に対する処理とピックアップOP１に対する処理のそれぞれの処理における限界キューイング数は、用意されるキューの限界キューイング数の半分の値に設定される。
【０４００】
また、読み出し処理においては、最初にDMAコマンドのキューイングが限界キューイング数に達するまで行われるが、その際に、後のDMA転送が交互に行われるように、クラウド処理部４４１は、ピックアップOP０に対するDMAコマンド（Ｒ）と、ピックアップOP０に対するDMAコマンド（Ｒ）とを交互にキューに格納させる。そのため、読み出し処理の切り替えタイミングとして、DMAコマンドを発行した直後が設定される。
【０４０１】
また、ピックアップOP０とピックアップOP１とでDMA転送を交互に行うために、ステータス報告終了時もさらに、切り替えタイミングとして設定される。従って、この場合のクラウド処理（読み出し処理のみで構成されるクラウド処理）においては、図７１に示されるように、最初に、DMAコマンドを発行した直後の切り替えにより、OP０のDMAコマンドとOP１のDMAコマンドが交互にキューイングされ、ステータス報告終了時の切り替えにより、両方の合計数が限界キューイング数に達すると、OP０に対応するDMA転送とOP１に対応するDMA転送が１回ずつ行われる。その後、DMAコマンドの発行が、それぞれのピックアップに対して１回ずつ行われ、DMA転送により２つ減少したキューイング数を限界キューイング数まで増加させる。
【０４０２】
以上の処理を繰り返すことにより、ATAホストハードウェア２１は、読み出し処理のGOP処理のみで構成されるクラウド処理を実行する。
【０４０３】
なお、読み出し処理のクラウド処理においては、図７２に示されるように、クラウド処理部４４１がRdTRNSF許可コマンド等を用いてData転送の許可や禁止を制御することにより、コマンド順とデータ転送順を正しく対応付けるようにDMA転送が制御される。
【０４０４】
仮に、クラウド処理部４４１がこの制御を行わないとすると、例えば、各ピックアップに対するDMAコマンドのキューイング数が互いに異なる場合、一方のピックアップに対するGOP処理においては、キューイングが続けられているのに、他方のピックアップに対するGOP処理においては、DMA転送が開始されてしまう場合がある。このような事態が発生すると、キューイングされたコマンド順と、データ転送順が異なってしまい、不都合が生じる恐れがある。
【０４０５】
そこで、クラウド処理部４４１が、一方のピックアップのGOP処理においてDMA転送が行われたときに、他方のピックアップのGOP処理に対して、データ転送を許可するRdTRNSF許可コマンドを発行し、各GOP処理は、その許可がないとDMA転送を行うことができないようにすることにより、確実に、OP０に対応するDMA転送とOP１に対応するDMA転送を交互に行うようにする。これによりクラウド処理部４４１は、コマンド順とデータ転送順を正しく対応付けることができる。
【０４０６】
なお、一方のピックアップに対するGOP処理が終了し、他方のピックアップに対するGOP処理のみが残った場合、DMA転送は、そのGOP処理のみしか残されていないので、その場合は、クラウド処理部４４１は、DMA転送が行われても、RdTRNSF許可コマンドを発行しない。
【０４０７】
図７３のフローチャートを参照して、このようなクラウド処理部４４１によるTurn権の遷移を制御するTurn制御処理を説明する。
【０４０８】
最初にクラウド処理部４４１は、ステップＳ４４１において、ピックアップOP０にTurn権を設定し、OP０用GOP処理部４４２をTurnON状態に設定する。次に、クラウド処理部４４１は、ステップＳ４４２において、RdTRNSF許可コマンドをOP０用GOP処理部４４２に発行することによりOP０用GOP処理部４４２にデータ転送許可を与え、データ転送許可先を管理するための変数Read TRNSF許可にOP０をセット（設定）する。
【０４０９】
ステップＳ４４２の処理を終了したクラウド処理部４４１は、ステップＳ４４３に処理を進め、TurnON状態のGOP処理部がTurnOFF状態に移行するまで待機する。TurnON状態のGOP処理部よりTurnOFFコマンドが発行され、そのGOP処理部がTurnOFF状態に移行すると、クラウド処理部４４１は、ステップＳ４４４に処理を進め、変数ReadTRNSF許可にセットされたGOP処理部によりRdTRNSF Exeコマンドが発行された場合は、変数ReadTRNSF許可を更新し、データ転送許可先を切り替える。
【０４１０】
そして、ステップＳ４４５において、クラウド処理部４４１は、Turn権のない側のGOP処理部がクラウド処理を終了（Crowd END）しているか否かを判定し、終了していないと判定した場合、ステップＳ４４６に処理を進め、そのTurn権のない側のGOP処理部に対してTurnONコマンドを発行し、Turn権を切り替える。Turn権を切り替えたクラウド処理部４４１は、ステップＳ４４８に処理を進める。
【０４１１】
また、ステップＳ４４５において、Turn権のない側のGOP処理部がクラウド処理を終了（Crowd END）していないと判定した場合、クラウド処理部４４１は、ステップＳ４４７に処理を進め、ステップＳ４４３においてTurnOFF状態に移行したGOP処理部に対してTurnONコマンドを発行してTurn権を切り替えずに、変数ReadTRNSF許可にそのGOP処理部をセットし、ステップＳ４４８に処理を進める。
【０４１２】
ステップＳ４４８において、クラウド処理部４４１は、Turn制御処理を終了するか否かを判定し、終了しないと判定した場合、処理をステップＳ４４３に戻し、それ以降の処理を繰り返す。また、ステップＳ４４８において、Turn制御処理を終了すると判定した場合、クラウド処理部４４１は、Turn制御処理を終了する。
【０４１３】
以上のようにして、クラウド処理部４４１は、Turn権およびデータ転送許可先の設定を制御する。なお、この場合のクラウド全体制御処理、OP０用クラウド制御処理、およびOP１用クラウド制御処理は、図６２乃至図６８のフローチャートを参照して説明した、１つのピックアップを有する２台のデバイスとして見せかけるように動作させてデータ転送を行う場合（２Dev-２OP）と同様であるので、その説明を省略する。ただし、この場合、DMA転送を行うときに各GOP処理部は、自分自身にデータ転送許可が発行されているか否かを判定し、許可されている場合のみDMA転送を行う。
【０４１４】
このように、クラウド処理部４４１がデータ転送の許可や禁止を制御しながら、クラウド処理を制御することにより、ATAホストハードウェア２１は、２つのピックアップを有するドライブ２２に対して、ATAの規格上において、各ピックアップに対するGOP処理をあたかも１つのピックアップに対するGOP処理のように実行し、転送処理を行うことができる。従って、CPU２３は、ドライブ２２がピックアップを複数有する場合においても、容易にデータを転送させることができる。
【０４１５】
以上のように、本発明のATAホストハードウェア２１は、CPU２３により、ATAホストハードウェア２１が内蔵するSRAM５２やレジスタ５３に格納された、PIOスクリプトやPRDテーブル等の情報に基づいて、PIO処理やDMA処理をCPU２３のアクセス無しに連続して実行することができ、また、その転送するデータサイズは、PIOスクリプトやPRDテーブル等の情報により指定することができる限り、上限がなく、例えば、１度のDMA転送により転送しきれないほど大きな映像データを連続して読み出したり書き込んだりすることを容易に行うことができる。また、このときのCPU２３とATAホストハードウェア２１との間の通信回数（通信データ量）も、PIOスクリプトやPRDテーブル等の情報をSRAM５２やレジスタ５３に格納させる場合と、処理終了を通知する場合に限られるので、CPU２３は、データ転送による負荷を大幅に削減することができる。また、これにより、ATAホストハードウェアは、バスの占有率も低下させることができる。
【０４１６】
上述した一連の処理は、ハードウェアにより実行させることもできるし、ソフトウエアにより実行させることもできる。この場合、例えば、図６のATAホストハードウェア２１は、図７４に示されるようなパーソナルコンピュータの一部として構成されるようにしてもよい。
【０４１７】
図７４において、パーソナルコンピュータ７０１のCPU７１１は、ROM（Read Only Memory）７１２に記憶されているプログラム、または記憶部７２３からRAM７１３にロードされたプログラムに従って各種の処理を実行する。RAM７１３にはまた、CPU７１１が各種の処理を実行する上において必要なデータなども適宜記憶される。
【０４１８】
CPU７１１、ROM７１２、およびRAM７１３は、バス７１４を介して相互に接続されている。このバス７１４にはまた、入出力インタフェース７２０も接続されている。
【０４１９】
入出力インタフェース７２０には、キーボード、マウスなどよりなる入力部７２１、CRT、LCDなどよりなるディスプレイ、並びにスピーカなどよりなる出力部７２２、ハードディスクなどより構成される記憶部７２３、モデムなどより構成される通信部７２４が接続されている。通信部７２４は、インターネットを含むネットワーク１２を介しての通信処理を行う。
【０４２０】
入出力インタフェース７２０にはまた、必要に応じてドライブ７２５が接続され、磁気ディスク、光ディスク、光磁気ディスク、或いは半導体メモリなどのリムーバブルメディア７２６が適宜装着され、それらから読み出されたコンピュータプログラムが、必要に応じて記憶部７２３にインストールされる。
【０４２１】
上述した一連の処理をソフトウエアにより実行させる場合には、そのソフトウエアを構成するプログラムが、ネットワークや記録媒体からインストールされる。
【０４２２】
この記録媒体は、例えば、図７４に示されるように、装置本体とは別に、ユーザにプログラムを配信するために配布される、プログラムが記録されている磁気ディスク（フレキシブルディスクを含む）、光ディスク（CD-ROM(Compact Disk-Read Only Memory),DVD(Digital Versatile Disk)を含む）、光磁気ディスク（ＭＤ（Mini-Disk）（登録商標）を含む）、もしくは半導体メモリなどよりなるリムーバブルメディア７２６により構成されるだけでなく、装置本体に予め組み込まれた状態でユーザに配信される、プログラムが記録されているROM７１２や、記憶部７２３に含まれるハードディスクなどで構成される。
【０４２３】
なお、本明細書において、記録媒体に記録されるプログラムを記述するステップは、記載された順序に沿って時系列的に行われる処理はもちろん、必ずしも時系列的に処理されなくとも、並列的あるいは個別に実行される処理をも含むものである。
【０４２４】
また、本明細書において、システムとは、複数の装置により構成される装置全体を表すものである。
【図面の簡単な説明】
【０４２５】
【図１】従来のPIO転送モードについて説明するブロック図である。
【図２】従来のPIO転送モードにおけるCPUアクセスについて説明する模式図である。
【図３】従来のシングルワード／マルチワードDMA転送モードについて説明するブロック図である。
【図４】従来のUltraDMA転送モードについて説明するブロック図である。
【図５】従来のUltraDMA転送モードにおけるCPUアクセスについて説明する模式図である。
【図６】本発明を適用したATAホストハードウェアの構成例を示すブロック図である。
【図７】図６のATAホストハードウェアのデータ転送処理における状態遷移の様子を説明する図である。
【図８】図６のSRAMおよびレジスタに保持されるデータの構成例を示す図である。
【図９】図８の領域１０１に記述されるスルーPIOスクリプトの構成例を示す図である。
【図１０】図８の領域１０２に記述されるPIO CPU割り込み要因発生条件の構成例を示す図である。
【図１１】図８の領域１０２に記述される読み出し繰り返し/IfGoto条件のテーブルの構成例を示す図である。
【図１２】図８の領域１０４に構成されるユーザ足し算レジスタの構成例を示す図である。
【図１３】図８の領域１０５および領域１０６に構成されるIDMA用のPRDテーブルの構成例を示す図である。
【図１４】図８の領域１０６に構成されるIDMA用のSDRAMアドレス追加設定テーブルの構成例を示す図である。
【図１５】図８の領域１０７に構成されるIDMA用のPIOスクリプトの構成例を示す図である。
【図１６】図８のレジスタ５３の領域１１１に構成されるATA全体に関わる設定情報の内、モード/ステータス情報の構成例を示す図である。
【図１７】図８のレジスタ５３の領域１１１に構成されるATA全体に関わる設定情報の内、一時停止情報の構成例を示す図である。
【図１８】図８の領域１１２に構成されるスルーPIO転送モードに関わる設定情報の内、スルーPIO処理設定の構成例を示す図である。
【図１９】図８の領域１１２に構成されるスルーPIO転送モードに関わる設定情報の内、セマフォ設定の構成例を示す図である。
【図２０】図８の領域１１３に構成されるIDMA転送モードに関わる設定情報に関わる設定情報の１つである第１のIDMA処理設定の構成例を示す図である。
【図２１】図８の領域１１３に構成されるIDMA転送モードに関わる設定情報に関わる設定情報の１つである第２のIDMA処理設定の構成例を示す図である。
【図２２】図８の領域１１３に構成されるIDMA転送モードに関わる設定情報に関わる設定情報の１つである第３のIDMA処理設定の構成例を示す図である。
【図２３】図８の領域１１３に構成されるIDMA転送モードに関わる設定情報に関わる設定情報の１つであるセマフォ設定の構成例を示す図である。
【図２４】図８の領域１１３に構成されるIDMA転送モードに関わる設定情報に関わる設定情報の１つであるLBA設定の構成例を示す図である。
【図２５】図８の領域１１３に構成されるIDMA転送モードに関わる設定情報に関わる設定情報の１つである割り込み要因設定の構成例を示す図である。
【図２６】本発明を適用した、スルーPIO転送モードにおけるATAホストハードウェア２１の機能ブロックを示す図である。
【図２７】スルーPIO制御処理を説明するフローチャートである。
【図２８】単一PIOスクリプト処理を説明するフローチャートである。
【図２９】スルーPIO転送モードのPIOスクリプトに関する処理を説明するフローチャートである。
【図３０】スルーPIO転送モードにおけるCPUアクセスの例を説明する図である。
【図３１】アボート処理を説明するフローチャートである。
【図３２】本発明を適用したIDMA転送モードにおけるATAホストハードウェア２１の機能ブロックを示す図である。
【図３３】IDMA転送モードのIDMA PIOスクリプトに関する処理を説明するフローチャートである。
【図３４】IDMA PIO制御処理を説明するフローチャートである。
【図３５】アボート処理の他の例を説明するフローチャートである。
【図３６】IDMA転送モードのPRDテーブルに関する処理を説明するフローチャートである。
【図３７】PRDテーブルに対する処理の詳細な構成例を説明する図である。
【図３８】READが連続する場合のPRDテーブルに対する処理の例を説明する図である。
【図３９】READとWRITEが混在する場合のPRDテーブルに対する処理の例を説明する図である。
【図４０】GOP単位でIDMA処理を制御するGOP処理を説明するフローチャートである。
【図４１】コマンド開始準備処理の詳細を説明するフローチャートである。
【図４２】データ転送PRDポインタFIFOの構成例を示す図である。
【図４３】コマンド開始処理の詳細を説明するフローチャートである。
【図４４】コマンド実行処理の詳細を説明するフローチャートである。
【図４５】データ転送開始準備処理の詳細を説明するフローチャートである。
【図４６】データ転送SDRAMポインタFIFOの構成例を示す図である。
【図４７】データ転送開始準備処理の詳細を説明するフローチャートである。
【図４８】データ転送実行処理の詳細を説明するフローチャートである。
【図４９】データ転送状態報告処理の詳細を説明するフローチャートである。
【図５０】データ転送終了処理の例を説明するフローチャートである。
【図５１】IDMA転送モードにおけるCPUアクセスの例を説明する図である。
【図５２】アボート処理を説明するフローチャートである。
【図５３】２つのピックアップを有するドライブに対するATAホストハードウェア２１による対応について説明する図である。
【図５４】GOP処理を２つのピックアップに対して並列分岐した場合のDMA転送の様子を説明する図である。
【図５５】ドライブ２２が２つのピックアップOP０およびOP１を有する場合の、IDMA転送モードにおけるATAホストハードウェア２１の機能ブロックを示す図である。
【図５６】PRDテーブルに基づいて実行されるクラウド処理とGOP処理のスケジュールの例を説明する図である。
【図５７】ピックアップの切り替えタイミングについて説明する図である。
【図５８】書き込み処理のみにより構成されるクラウド処理について説明する図である。
【図５９】読み出し処理のみにより構成されるクラウド処理について説明する図である。
【図６０】読み出し処理と書き込み処理が混在するクラウド処理について説明する図である。
【図６１】クラウド処理部とGOP処理部のコマンドのやり取りについて説明する図である。
【図６２】クラウド全体制御処理を説明するフローチャートである。
【図６３】OP０用クラウド制御処理を説明するフローチャートである。
【図６４】OP０用クラウド制御処理を説明する、図６３に続くフローチャートである。
【図６５】OP０用クラウド制御処理を説明する、図６４に続くフローチャートである。
【図６６】OP１用クラウド制御処理を説明するフローチャートである。
【図６７】OP１用クラウド制御処理を説明する、図６６に続くフローチャートである。
【図６８】OP１用クラウド制御処理を説明する、図６７に続くフローチャートである。
【図６９】PRDテーブルに基づいて実行されるクラウド処理とGOP処理のスケジュールの例を説明する図である。
【図７０】ピックアップの切り替えタイミングについて説明する図である。
【図７１】読み出し処理のみにより構成されるクラウド処理について説明する図である。
【図７２】読み出し処理のみにより構成されるクラウド処理について説明する図である。
【図７３】Turn制御処理について説明するフローチャートである。
【図７４】パーソナルコンピュータの構成例を示すブロック図である。
【符号の説明】
【０４２６】
２１  ATAホストハードウェア，  ２２  ドライブ  ２３  CPU，  ２４  SDRAM，  ３１  ATAホスト，  ３３  スルーPIO制御部，  ３４  単一PIOスクリプト処理部，  ３５  PIO実行部，  ３６  ATAインタフェース処理部，  ３７  IDMA制御部，  ３８  IDMA PIO制御部，  ３９  DMA実行部，  ５１  入出力制御部，  ５２  SRAM，  ５３  レジスタ，  ２５５  スルーPIO処理ハードウェア，  ２６８  ATAレジスタ（PIO），  ２７１  PIO処理ハードウェア，  ２７２  IDMA PRD制御ハードウェア，  ２７３  DMA処理ハードウェア，  ４０１  データ転送PRDポインタFIFO，  ４０２  データ転送PRDポインタFIFOポインタ，  ４２１  データ転送SDRAMポインタFIFO，  ４２２  データ転送SDRAM Adrs,LengthポインタFIFOポインタ，  ４２５  レジスタ（PIO），  ４２６  レジスタ（DMA），  ４４１  クラウド処理部，  ４４２  OP０用GOP処理部，  ４４３  OP１用GOP処理部，  ４４４Ａおよび４４４Ｂ  セレクタ，  ７１１  CPU，  ７１２  ROM，  ７１３  RAM，  ７１４  バス，  ７２０  入出力インタフェース，  ７２１  入力部，  ７２２  出力部，  ７２３  記憶部，  ７２４  通信部，  ７２５  ドライブ，  ７２６  リムーバブルメディア
【図１】
2005242412.tif 000003
【図２】
2005242412.tif 000004
【図３】
2005242412.tif 000005
【図４】
2005242412.tif 000006
【図５】
2005242412.tif 000007
【図６】
2005242412.tif 000008
【図７】
2005242412.tif 000009
【図８】
2005242412.tif 000010
【図９】
2005242412.tif 000011
【図１０】
2005242412.tif 000012
【図１１】
2005242412.tif 000013
【図１２】
2005242412.tif 000014
【図１３】
2005242412.tif 000015
【図１４】
2005242412.tif 000016
【図１５】
2005242412.tif 000017
【図１６】
2005242412.tif 000018
【図１７】
2005242412.tif 000019
【図１８】
2005242412.tif 000020
【図１９】
2005242412.tif 000021
【図２０】
2005242412.tif 000022
【図２１】
2005242412.tif 000023
【図２２】
2005242412.tif 000024
【図２３】
2005242412.tif 000025
【図２４】
2005242412.tif 000026
【図２５】
2005242412.tif 000027
【図２６】
2005242412.tif 000028
【図２７】
2005242412.tif 000029
【図２８】
2005242412.tif 000030
【図２９】
2005242412.tif 000031
【図３０】
2005242412.tif 000032
【図３１】
2005242412.tif 000033
【図３２】
2005242412.tif 000034
【図３３】
2005242412.tif 000035
【図３４】
2005242412.tif 000036
【図３５】
2005242412.tif 000037
【図３６】
2005242412.tif 000038
【図３７】
2005242412.tif 000039
【図３８】
2005242412.tif 000040
【図３９】
2005242412.tif 000041
【図４０】
2005242412.tif 000042
【図４１】
2005242412.tif 000043
【図４２】
2005242412.tif 000044
【図４３】
2005242412.tif 000045
【図４４】
2005242412.tif 000046
【図４５】
2005242412.tif 000047
【図４６】
2005242412.tif 000048
【図４７】
2005242412.tif 000049
【図４８】
2005242412.tif 000050
【図４９】
2005242412.tif 000051
【図５０】
2005242412.tif 000052
【図５１】
2005242412.tif 000053
【図５２】
2005242412.tif 000054
【図５３】
2005242412.tif 000055
【図５４】
2005242412.tif 000056
【図５５】
2005242412.tif 000057
【図５６】
2005242412.tif 000058
【図５７】
2005242412.tif 000059
【図５８】
2005242412.tif 000060
【図５９】
2005242412.tif 000061
【図６０】
2005242412.tif 000062
【図６１】
2005242412.tif 000063
【図６２】
2005242412.tif 000064
【図６３】
2005242412.tif 000065
【図６４】
2005242412.tif 000066
【図６５】
2005242412.tif 000067
【図６６】
2005242412.tif 000068
【図６７】
2005242412.tif 000069
【図６８】
2005242412.tif 000070
【図６９】
2005242412.tif 000071
【図７０】
2005242412.tif 000072
【図７１】
2005242412.tif 000073
【図７２】
2005242412.tif 000074
【図７３】
2005242412.tif 000075
【図７４】
2005242412.tif 000076