Copyright(C) 1994,1995,1996,1997 Terumasa KODAKA , Takeshi KONO ■IDEインターフェース 基礎知識 o IDEインターフェース内蔵機一覧 -----------------------------+----------------------------------------- |機種 -----------------------------+----------------------------------------- 2.5",1.8"IDE HD内蔵(取外不可)|PC-9801NS・UR・P・NL/R・NL/A,PC-9821Ld 2.5"IDE(PC-9801NS/L専用パック) |PC-9801NS/L 2.5"IDE(98NOTE用ハードディスク |98NOTE(PC-9801N・NV・NLと上記98NOTEを除く) パック利用可能機) |PC-9801US, PC-H98T, PC-9821初代・Ce・Ts・Es 3.5"IDE 1台まで |PC-9821Ap・As・Ae・Af・Ap2・As2・An・Cs2・Ce2・ | Cf・Cx・Cb・Xt13・Cx2・Cb2, PC-9801BA・BX 3.5"IDE 2台まで |PC-9821Ap3・As3・Bp・Bs・Be・Bf・ | Xa・Xf・Xn・Xp・Xs・Xe・Xe10・ |PC-9801BA2・BS2・BX2・BX3・BX4 3.5"IDE 4台まで |PC-9821Xa16・Xa13・Xa12・Xa10・Xa9・Xa7・Xa7e |Xv13・Xb10 -----------------------------+----------------------------------------- * PC-9821Cs2・Ce2・Cf・Cx・Cb・Cx2・Cb2では、CD-ROMを2台目IDEとして接続して いる。 * ファイルベイ搭載機では、CD-ROMまたはHDDを2台目IDEとして接続可能。 o IDEハードディスクのBIOSインターフェースはSASIハードディスク互換。この ため、IDEハードディスクを実装した本体では、PC-9801-27(SASI I/Fボード)を 使用することができない。ただし、IDEハードディスクを実装しなければ、 IDEインターフェースを内蔵した機種でもPC-9801-27は使用できる。 o IDEインターフェースを内蔵した機種では、IDEハードディスクを実装すると 拡張ROM領域のD8000〜D9FFFhにIDE BIOSが、DA000〜DBFFFhにIDE BIOSの ワークエリアがマッピングされる。IDEハードディスクを実装しなければ、 IDE BIOSはマッピングされないので、拡張ROM領域やUMBとして利用できる。 ただし、98NOTEとPCIスロット搭載機では、IDEハードディスクを実装して いなくてもD8000〜DBFFFhを拡張ROM領域やUMBとして利用することはでき ない。98NOTEではこの領域にシステム制御用のBIOSが配置されているため。PCI スロット搭載機では、PCI BIOSが配置されているため。 o IDEインターフェースの外部割り込みはINT3(INT 11h)固定。 また、PC-9800のIDEインターフェースでは、IDEドライブとのデータ転送に DMAを使用しない。 u PC-9800では、IDEのMaster/Slaveの切り替えは使用しない。1台目と2台目の ドライブ切り換えは、外部回路でドライブの使用するI/Oポート全体を 切り換えて行う。 o IDEインターフェースが使用するI/Oアドレスは以下の通り。 -----------+----+---+-----------------------------+-------------------- I/Oアドレス|幅 |R/W|内容 |ISAでのI/Oアドレス -----------+----+---+-----------------------------+-------------------- 0430h |BYTE|R/W|IDEドライブ切り替え |なし 0432h |BYTE|R/W|IDEドライブ切り替え |なし 0435h |BYTE|R/W|不明 |なし 0640h |WORD|R/W|Data Register |01F0h 0642h |BYTE| R |Error Register |01F1h 0642h |BYTE| W |Write Precomp Register |01F1h 0644h |BYTE|R/W|Sector Count |01F2h 0646h |BYTE|R/W|Sector Number |01F3h 0648h |BYTE|R/W|Cylinder Low |01F4h 064Ah |BYTE|R/W|Cylinder High |01F5h 064Ch |BYTE|R/W|SDH Register |01F6h 064Eh |BYTE| R |Status Register |01F7h 064Eh |BYTE| W |Command Register |01F7h 074Ch |BYTE| R |Alternate Status Register |03F6h 074Ch |BYTE| W |Digital Output Register |03F6h 074Eh |BYTE| R |Digital Input Register |03F7h -----------+----+---+-----------------------------+-------------------- * 「ISAでのI/Oアドレス」欄は、IBM PC/AT互換機に接続されたIDEドライブが 使用するI/Oアドレス。 関連 0000:0457h 0000:055Ch 0000:0598h 0000:059Ah 0000:05B0h 0000:05B1h 0000:05E8h 0000:05ECh D800:0000〜D800:1FFFh DA00:0000〜DA00:1FFFh INT 11h(外部割り込み) INT 1Bh(IDE) I/O 000Ah bit 1 I/O 0430h 名前 IDEバンク切り替え Undocumented 対象 (2台接続可能な)IDE I/F搭載機 チップ IDE周辺 機能 [READ/WRITE] bit 7〜0: 不明 00h= IDEバンク#1 01h= IDEバンク#2 解説 o 詳細不明 関連 I/O 0432h I/O 0432h 名前 IDEバンク切り替え Undocumented 対象 (2台接続可能な)IDE I/F搭載機 チップ IDE周辺 機能 [READ/WRITE] bit 7〜0: バンク選択 80h= 状態読み出しのためのダミーライト([WRITE]のみ) 00h= IDEバンク#1選択 01h= IDEバンク#2選択 解説 o I/O 0640〜064Eh,074Ch,074Ehで制御するIDEバンクを選択する。 o PC-9800では、バンクの選択はこのポートに接続された外部回路が行い、 ドライブのI/Oポート全体が切り換えられる。 関連 I/O 0430h I/O 0435h 名称 不明 Undocumented 対象 PC-9821An・Ap3・As3・Cf・Cx・Cb・Xa10・Xa9・Xa7・Cx2・Cb2・Xt13・Xe10・Xa12・Xa7e, PC-9801BX4 機能 [READ/WRITE] bit 7〜2: 不明 bit 1: 不明 1= IDE HDDなし 0= IDE HDDあり bit 0: 不明 解説 o IDE HDDの有無によりbit 1が設定されるが、詳細は不明。 関連 I/O 00F0h bit 5 I/O 0640h 名前 Data Register Undocumented 対象 IDE I/F搭載機 チップ IDEドライブ 機能 [READ/WRITE] bit 15〜0: データレジスタ 解説 o データ転送を行う。データレジスタの幅は16ビット。 関連 I/O 0642h 名前 Error Register,Write Precomp Register Undocumented 対象 IDE I/F搭載機 チップ IDEドライブ 機能 [READ] Error Register bit 7: Bad Block Detected 1= IDフィールドにBad Blockマークが検出された 0= 通常 bit 6: Data ECC Error 1= データ領域に回復不可能ECCエラーが発生した 0= 通常 bit 5: Media Changed 1= メディアが交換された 0= メディアは交換されていない * PC-9800は使用しない bit 4: ID Not Found 1= IDが発見できなかった 0= 通常 bit 3: Media Change Requested 1= メディアの交換が要求されている 0= メディアの交換は要求されていない * PC-9800は使用しない bit 2: Aborted Command 1= コマンド実行が中断された 0= 通常 bit 1: Track0 Error 1= Restoreコマンド実行中にTrack0が検出できなかった 0= 通常 bit 0: Address Mark Not Found 1= データ領域のアドレスマークを発見できなかった 0= 通常 解説 o IDEドライブのエラー状態を取得する [WRITE] Write Precomp Register 44h= Read/Write Longコマンド時のECC長さ7バイト 55h= Read Ahead Cache ON AAh= Read Ahead Cache OFF BBh= Read/Write Longコマンド時のECC長さ4バイト 解説 o IDEドライブの各種設定を行う。 関連 I/O 0644h 名前 Sector Count Undocumented 対象 IDE I/F搭載機 チップ IDEドライブ 機能 [READ/WRITE] bit 7〜0: Sector Count 解説 o セクタ数を設定する。 o 00hを指定すると、256が指定されたように動作する。 関連 I/O 0646h 名前 Sector Number Undocumented 対象 IDE I/F搭載機 チップ IDEドライブ 機能 [READ/WRITE] bit 7〜0: Sector Number 解説 o セクタ番号を設定する。 関連 I/O 0648h 名前 Cylinder Low Undocumented 対象 IDE I/F搭載機 チップ IDEドライブ 機能 [READ/WRITE] bit 7〜0: Cylinder Low 解説 o シリンダ番号の下位8ビットを設定する。 関連 I/O 064Ah I/O 064Ah 名前 Cylinder High Undocumented 対象 IDE I/F搭載機 チップ IDEドライブ 機能 [READ/WRITE] bit 7〜0: Cylinder High 解説 o シリンダ番号の上位8ビットを設定する。 関連 I/O 0648h I/O 064Ch 名前 SDH Register Undocumented 対象 IDE I/F搭載機 チップ IDEドライブ 機能 [READ/WRITE] bit 7: 未使用(1にする) bit 6: Binary Encoded Address Mode Select 1= Logical Block Address 0= Cylinder/Head/Sector * PC-9800では通常0に設定する bit 5: 未使用(1にする) bit 4: Drive Select * PC-9800では常に0を設定する bit 3〜0: Head Select 解説 o ヘッド番号を指定する u PC-9800では、LBA方式のアドレッシングは使用しない。 関連 I/O 074Eh I/O 064Eh 名前 Status Register,Command Register Undocumented 対象 IDE I/F搭載機 チップ IDEドライブ 機能 [READ] Status Register bit 7: Controller Busy 1= コントローラはBUSY状態 0= 通常 bit 6: Drive Ready 1= ドライブはREADY状態 0= 通常 bit 5: Write Fault 1= 書き込み異常が発生した 0= 通常 bit 4: Seek Complete 1= シーク動作が正常終了した 0= シーク動作が異常終了した bit 3: Data Request 1= ドライブがデータ転送準備を完了した 0= ドライブがデータ転送準備を完了していない bit 2: Corrected Data 1= 読み取りエラーが発生したがECCによって訂正された 0= 通常 bit 1: Index * ディスクの1回転につき1回出力されるパルス bit 0: Error 1= コマンド処理中に何らかのエラーが発生した 0= 通常 解説 o 各種ステータスを取得する。 [WRITE] Command Register 00h= Get drive Feature byte 1xh= Recalibrate 20h= Read(with Retries) 21h= Read(without Retries) 22h= Read Long(with Retries) 23h= Read Long(without Retries) 30h= Write(with Retries) 31h= Write(without Retries) 32h= Write Long(with Retries) 33h= Write Long(without Retries) 3Ch= Write verify 40h= Read Verify(with Retries) 41h= Read Verify(without Retries) 50h= Format Track 7xh= Seek 8xh= Vendor Unique 90h= Execute Drive Diagnostic 91h= Initialize Drive Parameters 94h= Standby Immediate 95h= Idle Immediate 96h= Standby 97h= Idle 98h= Check Power Mode 99h= Set Sleep Mode 9Ah= Vendor Unique A0h= CD-ROMへSCSIコマンド送出 C0h= Vendor Unique C1h= Vendor Unique C2h= Vendor Unique C3h= Vendor Unique C4h= Read Multiple C5h= Write Multiple C6h= Set Multiple Mode C8h= Read DMA(with Retries) C9h= Read DMA(without Retries) CAh= Write DMA(with Retries) CBh= Write DMA(without Retries) DBh= Acknowledge media change DCh= Boot - post-boot DDh= Boot - pre-boot DEh= Door lock DFh= Door unlock E0h= Standby Immediate E1h= Idle Immediate E2h= Standby E3h= Idle E4h= Read Sector Buffer E5h= Check Power Mode E6h= Set Sleep Mode E8h= Write Buffer E9h= Write same ECh= Identify EFh= Set Features Fxh= Vendor Unique 解説 o IDEドライブにコマンドを出力する。 o ドライブによっては使用できないコマンドがある。どのコマンドが 使用できるかは、Identifyコマンド等で調べる。 関連 INT 1Bh - Function D0h(IDE) INT 1Bh - Function E0h(IDE) INT 1Bh - Function F0h(IDE) I/O 074Ch 名前 Alternate Status Register,Digital Output Register Undocumented 対象 IDE I/F搭載機 チップ IDEドライブ 機能 [READ] Alternate Status Register 解説 o 内容は、I/O 064EhのStatus Registerと同じ。ただし、 割り込み出力をクリアせず、ステータスレジスタを読み出す ことができる。 [WRITE] Digital Output Register bit 7〜4: 未使用(0000bにする) bit 3: 未使用(1にする) bit 2: Reset 1= IDEドライブをリセットする 0= 通常 bit 1: IRQ Enable 1= IDEドライブからの割り込み禁止 0= IDEドライブからの割り込み許可 bit 0: 未使用(0にする) 解説 o IDEドライブのリセット、割り込みの設定を行う。 関連 I/O 064Eh I/O 074Eh 名前 Digital Input Register Undocumented 対象 IDE I/F搭載機 チップ IDEドライブ 機能 [READ] bit 7: 未使用 bit 6: Write Gate 1= 通常 0= ドライブがデータを媒体上に書き込み中 bit 5〜2: Head Select * SDHレジスタのHead Selectの反転 bit 1,0: Drive Set1,Drive Set0 10b= シングルモード/マスタ選択 01b= スレーブ選択 解説 o IDEドライブの各種状態を読み出す。 関連 I/O 064Ch