章 – 9
大型ハードディスクの取り扱い
大型ハードディスクの取り扱い
前の章では、BIOSディスクの機能と、ハードディスクの物理メディアにアクセスするための割り込みの使用について説明しました。そこでINT13H関数を使用してハードディスクにアクセスしました。
INT 13Hインターフェイスは、BIOSに提供できる読み取り、書き込み、フォーマット、検証などのさまざまなコマンドをサポートしており、BIOSはそれらをハードディスクに渡します。 INT13HはDOSで長い間使用されてきたため、長年にわたって標準となっています。
INT 13Hは、ドライブのジオメトリの指定に24ビットを割り当て、呼び出し側プログラムがハードディスクの特定のパラメータを認識し、ディスクアクセスを可能にするためにルーチンに正確なヘッド、シリンダー、およびセクターのアドレス指定を提供する必要があります。
BIOSは、BIOSセットアッププログラムでセットアップされたハードディスクのジオメトリを使用します。ドライブジオメトリの指定のためにINT13Hインターフェイスによって割り当てられた24ビットは、次のように分割されます。
- シリンダー番号は10ビット。したがって、総シリンダー数の上限は最大1,024シリンダーになる可能性があります。
- ヘッド番号は8ビット。したがって、総ヘッド数の上限は最大256です。
- セクター番号は6ビット。したがって、セクターの最大合計は最大63セクターになる可能性があります。
したがって、このアプローチでサポートされる最大セクターは、最大1024 * 256 * 63 = 16515072になる可能性があります。
これは、INT13Hインターフェイスが最大約1650万セクターを含むディスクをサポートできることを意味し、セクターあたり512バイトで最大8.46GBになります。それはまさに私が説明したいことです。したがって、これらすべての機能またはINT 13Hを使用することにより、最大8.46GBのディスクにのみアクセスできます。
そのため、この章で次に説明するように、近年、この古いインターフェイスの制限により、ハードディスクをアドレス指定する新しい方法を優先して、このインターフェイスが廃止されました。
まず、ストーリーをお話ししましょう!
11年前、私が7番目の標準にいたとき、私の学校で、42MBの容量のハードディスクについて聞いたことがあります。おそらくそれはIBMのWDA-L42でした。当時、私や友人にとって、これほど大容量のハードディスクを想像するのは非常に困難でした。
INT 13H方法論は、今日から約20年前に開発されました。これで、8 GBのハードディスクは、その時代の夢にも収まるほどはるかに大きかったことがわかります。しかし、今日、私たちが8 GBのハードディスクについてパーソナルコンピュータのユーザーに話す場合、彼はそれをストレージ容量が小さいと言って使用したくないかもしれません。
これが、INT13Hインターフェースが現代のシステムでの有用性をようやく終わらせた理由です。 INT 13Hは24ビットを使用してディスクジオメトリを割り当てましたが、残念ながら、既存のINT 13H BIOSインターフェイスを拡張することはできませんでした。これを行うと、多くの古いハードウェアとソフトウェアが機能しなくなり、今日のコンピューター市場が理解できるようになります。何百万もの古いソフトウェアやハードウェア製品が機能しなくなるという大きな変化に耐えることはできません。
この条件を念頭に置いて、INT13HはINT13H拡張機能と呼ばれる新しいインターフェースに置き換えられました。ただし、INT 13Hは、DOSやその他の古いオペレーティングシステムやその他の互換性の目的で使用される場合があります。
新しいINT13Hインターフェイスは、アドレス指定に24ビットではなく64ビットを使用し、ハードドライブの最大サイズを9.4 * 1021バイトにします。これは、実際には9.4兆ギガバイトまたは9400000000000ギガバイトです。この制限が破られるまで、しばらくリラックスできることを願っています。
次に、割り込み13Hの拡張機能のいくつかの重要な機能について説明します。 INT 13Hの機能と同じように、プログラミングでこれらの機能を使用することができます。これは、これらの関数がINT13Hの拡張機能と呼ばれる理由でもあります。
INT 13H拡張機能:
INT 13H (0x13)
機能1BH(0x1Bまたは27) --> 製造ヘッダーの取得(ESDI固定ディスク)
Call with: AH = 1BH
AL = number of sector(s) to read
DL = drive
ES: BX = buffer for manufacturing header
(defect list)
Returns: If function successful
Carry flag = clear
AH = 00H
If function unsuccessful
Carry flag = set
AH = status
Comments:
この関数は、固定ディスクの製造ヘッダーを取得するために使用されます。最初に読み取られたセクターには、欠陥エントリの数と欠陥マップの先頭を含む製造ヘッダーが含まれています。残りのセクターには、欠陥マップの残りが含まれています。製造ヘッダー形式(欠陥マップレコード形式)は、IBM 70MB、115MB固定ディスクドライブテクニカルリファレンスに記載されています。
INT 13H (0x13)
機能1BH(0x1Bまたは27) --> SCSIディスク情報ブロックへのポインタを取得する(将来のドメインSCSIコントローラ)
Call with: AH = 1BH
DL = hard drive ID
Returns: If function successful
Carry flag = clear
AH = 01H
If function unsuccessful
Carry flag = set
AH = status
ES:BX = SCSI disk information block
Comments:
この関数は、SCSIディスク情報ブロックへのポインタを取得するために使用されます。これにより、リセット不可能なフラグも設定され、一部のコントローラーメッセージが表示されなくなります。
INT 13H (0x13)
機能1CH(0x1Cまたは28) --> Free Controller Ram(Future Domain SCSI Controller)へのポインターを取得します
Call with: AH = 1CH
DL = hard drive ID for any valid SCSI
hard disk
Returns: If function successful
Carry flag = clear
AH = 01H
If function unsuccessful
Carry flag = set
AH = status
ES:BX = first byte of free RAM on controller
Comments:
この関数は、無料のコントローラーRamを取得するために使用されます。 ES:BXは、他の用途に使用できる、コントローラー上の空きRAMの最初のバイトを指します。 ESには、コントローラーが存在するセグメントが含まれています。コントローラの2つのメモリマップドI / Oポートは、オフセット1C00Hと1E00Hにあります。
INT 13H (0x13)
機能1C08H(0x1C08) --> コマンド補完ステータスの取得(ESDI固定ディスク)
Call with: AX = 1C08H
DL = drive
ES:BX = buffer for Command Complete
Status Block
Return: If function successful
Carry flag = clear
AH = 01H
If function unsuccessful
Carry flag = set
AH = status
Comments:
この関数は、コマンド完了ステータスを取得するために使用されます。関数が成功した場合、キャリーフラグはクリアされ、失敗した場合、キャリーフラグが設定されます。
INT 13H (0x13)
機能1C09H(0x1C09) --> デバイスステータスの取得(ESDI固定ディスク)
Call with: AX = 1C09H
DL = drive
ES:BX = buffer for Device Status Block
Return: If function successful
Carry flag = clear
AH = 01H
If function unsuccessful
Carry flag = set
AH = status
Comments:
この関数は、デバイスステータスを取得するために使用されます。関数が成功した場合、キャリーフラグはクリアされ、失敗した場合、キャリーフラグが設定されます。
INT 13H (0x13)
機能1C0AH(0x1C0A) --> デバイス構成の取得(ESDI固定ディスク)
Call with: AX = 1C0AH
DL = drive
ES:BX = buffer for Drive Configuration Status
Block
Return: If function successful
Carry flag = clear
AH = 01H
If function unsuccessful
Carry flag = set
AH = status
Comments:
この関数は、ディスクのデバイス構成を取得するために使用されます。機能が成功した場合、キャリーフラグはクリアされ、AHレジスタは01Hです。それ以外の場合、キャリーフラグが設定され、AHレジスタはステータスを返します。次の表に、ESDIドライブ構成ステータスブロックの形式を示します。
Offset
|
Size
|
Description
|
00H
|
Byte
|
09H
|
01H
|
Byte
|
number of words in block (06H)
|
02H
|
Byte
|
flags
|
03H
|
Byte
|
number of spare sectors per cylinder
|
04H
|
Double Word
|
total number of usable sectors
|
08H
|
Word
|
total number of cylinders
|
0AH
|
Byte
|
tracks per cylinder
|
0BH
|
Byte
|
sectors per track
|
INT 13H (0x13)
機能1C0BH(0x1C0B) --> アダプター構成の取得(ESDI固定ディスク)
Call with: AX = 1C0BH
ES:BX = buffer for Controller Configuration
Status Block
Return: If function successful
Carry flag = clear
AH = 01H
If function unsuccessful
Carry flag = set
AH = status
Comments:
この関数は、アダプター構成を取得するために使用されます。関数が成功した場合、キャリーフラグはクリアされ、AHは01Hです。失敗したキャリーフラグが設定され、AHがステータスを返します。
INT 13H (0x13)
機能1C0CH(0x1C0C) --> POS情報の取得(ESDI固定ディスク)
Call with: AX = 1C0CH
ES:BX = buffer for POS Information Status
Block
Return: If function successful
Carry flag = clear
AH = 01H
If function unsuccessful
Carry flag = set
AH = status
Comments:
この関数は、POS情報を取得するために使用されます。関数が成功した場合、キャリーフラグはクリアされ、AHは01Hです。失敗したキャリーフラグが設定され、AHがステータスを返します。
INT 13H (0x13)
機能1C0EH(0x1C0E) --> RBAをABA(ESDI固定ディスク)に変換します
Call with: AX = 1C0EH
CH = low 8 bits of cylinder number
CL = sector number (high two bits of
cylinder number in bits 6 and 7)
DH = head number
DL = drive number
ES:BX = ABA (Absolute Block Address)
number
Return: If function successful
Carry flag = clear
AH = 01H
If function unsuccessful
Carry flag = set
AH = status
Comments:
この関数は、RBA(相対ブロックアドレス)をABA(絶対ブロックアドレス)に変換します。機能が成功した場合、キャリーフラグはクリアされ、AHレジスタは01Hです。それ以外の場合、キャリーフラグが設定され、AHはステータスを返します。
INT 13H (0x13)
機能20H(0x20または32) --> 現在のメディアフォーマットを取得する(Compaq ATAPIリムーバブルメディアデバイス)
Call with: AH = 20H
DL = drive number
Return: If Function Successful,
Carry Flag = clear
AL = media type
AH = 00H
If Function Unsuccessful,
CF = set
AH = error code
Comments:
この関数は、現在のメディア形式を取得するために使用されます。 Compaq / ATAPIディスケットメディアタイプの値は、次の表に示されています。
Value
|
Media
|
03H
|
720K (1M unformatted)
|
04H
|
1.44M (2M unformatted)
|
06H
|
2.88M (4M unformatted)
|
0CH
|
360K
|
0DH
|
1.2M
|
0EH
|
Toshiba 3mode
|
0FH
|
NEC 3mode (1024 bytes per sectors)
|
10H
|
ATAPI Removable Media Device
|
INT 13H (0x13)
機能21H(0x21または33) --> 複数のディスクセクター(PSおよびPS / 2、ハードディスク)を読み取る
Call with: AH = 21H
AL = number of sectors to Read
CH = low byte of 12-bit cylinder number
CL = starting sector (bits 0 to 5) and bits 8
and 9 of cylinder (bits 6 and 7)
DH = head number (bits 0 to 5) and bits 10
and 11 of cylinder (bits 6 and 7)
DL = drive number
ES:BX = Data buffer to be read
Return: If Function Successful,
Carry flag = clear
ES:BX = Filled Data Buffer
If Function Unsuccessful,
Carry flag = set
AH = status
Comments:
この関数は、マルチブロックモードを使用して複数のディスクセクターを読み取るために使用されます。このモードでは、各セクターの後ではなく、セクターのグループの転送が終了した後にのみ割り込みが生成されます。
INT 13H (0x13)
機能22H(0x22または34) --> 複数のディスクセクターの書き込み(PSおよびPS / 2、ハードディスク)
Call with: AH = 22H
AL = number of sectors to be written
CH = low byte of 12-bit cylinder number
CL = starting sector (bits 0 to 5) and bits 8
and 9 of cylinder (bits 6 and 7)
DH = head number (bits 0 to 5) and bits 10
and 11 of cylinder (bits 6 and 7)
DL = drive number
ES:BX = buffer containing data to be written
Return: If function Successful,
Carry Flag = clear
AH = 01H
If function Unsuccessful,
Carry Flag = Set
AH = Status
Comments:
この関数は、マルチブロックモードを使用して複数のディスクセクターを書き込むために使用されます。このモードでは、各セクターの後ではなく、セクターのグループの転送が終了した後にのみ割り込みが生成されます。
INT 13H (0x13)
機能22H(0x22または34) --> キャッシュの有効化/無効化(QuickCache II v4.20)
Call with: AH = 22H
AL = new state (00H, if disabled and 01H,
if enabled)
Return: If Function Successful,
AX = 0000H
If Function Unsuccessful,
AX = status
Comments:
この関数は、すべてのドライブのキャッシュを有効または無効にします。関数が成功した場合、AXレジスタは0000Hです。それ以外の場合は、ステータスを返します。
INT 13H (0x13)
機能23H(0x23または35) --> コントローラ機能レジスタの設定(PSおよびPS / 2、ハードディスク)
Call with: AH = 23H
AL = feature number
DL = drive number
Return: If Function Successful,
Carry Flag = Clear
If Function Unsuccessful,
Carry Flag = Set
AH = Status
Comments:
この機能は、コントローラ機能レジスタを設定するために使用されます。関数が成功した場合、キャリーフラグはクリアされ、失敗した場合、キャリーフラグが設定され、AHレジスタがステータスを返します。
INT 13H (0x13)
機能24H(0x24または36) --> 複数設定–転送モード(ハードディスク、PS、PS / 2)
Call with: AH = 24H
AL = number of sectors per block
DL = drive number
Return: If Function Successful,
Carry Flag = Clear
If Function Unsuccessful,
Carry Flag = Set
AH = Status
Comments:
この機能は、複数転送モードを設定するために使用されます。複数転送モードを無効にする場合は、セクター数を0に設定します。ブロックサイズの最大値(2、4、6、8、16など)は、固定ディスクドライブのタイプによって異なります。
値は、POST(Power On Self-Test)によって作成された固定ディスクドライブパラメータテーブルのバイト15Hに格納されます。アドレス0040H:0074Hのバイトが動作状態に設定されます。 PS / 1ハードディスクの機能番号の値を次の表に示します。
Value
|
Description
|
01H
|
Select 8-bit data transfers instead of 16-bit
|
02H
|
Enable write cache
|
22H
|
Write Same, user-specified area
|
33H
|
Disable retries
|
44H
|
Set number of ECC bytes for read long/write long
|
54H
|
Set cache segments
|
55H
|
Disable look ahead
|
66H
|
Disable reverting to power-on defaults
|
77H
|
Disable error correction
|
81H
|
Select 16-bit data transfers (default)
|
82H
|
Disable write cache
|
88H
|
Enable error correction (default)
|
99H
|
Enable retries (default)
|
AAH
|
Enable look ahead
|
BBH
|
Set ECC length for read long/write long to four bytes
|
CCH
|
Enable reverting to power-on defaults
|
DDH
|
Write Same, entire disk
|
INT 13H (0x13)
機能24H(0x24または36) --> セクターの設定(QuickCache II v4.20)
Call with: AX = 24H
BX = New number of sector buffers in
cache
Return: If Function Successful,
AX = 0000H
If Function Unsuccessful,
AX = Status
Comments:
この関数は、セクターを設定するために使用されます。関数が成功した場合、AXレジスタは0000Hです。それ以外の場合、AXはステータスを返します。
INT 13H (0x13)
機能25H(0x25または37) --> ドライブを特定する(ハードディスク、PS、PS / 2)
Call with: AH = 25H
DL = Drive number
ES:BX = Buffer of 512 bytes for reply packet
Return: If Function Successful,
Carry Flag = Clear
Buffer filled with drive information block
If Function Unsuccessful,
Carry Flag = Set
AH = Status
Comments:
この機能は、ドライブを識別するために使用されます。アドレス0040h:0074hのバイトは、操作のステータスに設定されます。 IBMは、この機能をオプションとして公式に分類しています。一般的なドライブ構成のビットフィールドを次の表に示します。
Bit(s)
|
Description
|
0
|
Reserved (0)
|
1
|
Hard sectored
|
2
|
Soft sectored
|
3
|
Not MFM encoded
|
4
|
Head switch time greater than 15msec
|
5
|
Spindle motor control option implemented
|
6
|
Fixed drive
|
7
|
Removable cartridge drive
|
8
|
Disk transfer rate is less than or equal to 5Mbs
|
9
|
Disk transfer rate is greater than 5Mbs but less than or equal to 10Mbs
|
10
|
Disk transfer rate is greater than 10Mbs
|
11
|
Rotational speed tolerance is greater than 0.5%
|
12
|
Data strobe offset option available
|
13
|
Track offset option available
|
14
|
Format speed tolerance gap required
|
15
|
Reserved for non-magnetic drives (0)
|
ATA(ATアタッチメント)仕様に記載されているドライブ情報ブロックのフォーマットの説明は、次の表に記載されています。
Offset
|
Size
|
Description
|
00H
|
WORD
|
General drive configuration
|
02H
|
WORD
|
Number of cylinders
|
04H
|
WORD
|
Reserved
|
06H
|
WORD
|
Number of heads
|
08H
|
WORD
|
Number of unformatted bytes per track
|
0AH
|
WORD
|
Number of unformatted bytes per sector
|
0CH
|
WORD
|
Number of sectors per track
|
0EH
|
6 BYTES
|
Vendor unique
|
14H
|
20 BYTES
|
Serial number in ASCII, (0000H=not specified)
|
28H
|
WORD
|
Buffer type
|
2AH
|
WORD
|
Buffer size in 512 byte increments (0000H=not specified)
|
2CH
|
WORD
|
Number of ECC bytes passed on Read/Write Long commands 0000H = not specified
|
2EH
|
8 BYTES
|
Firmware revision in ASCII, 0000H=not specified
|
36H
|
40 BYTES
|
Model number in ASCII, 0000H=not specified
|
5EH
|
WORD
|
Bits 15-8 Vendor Unique, bits 7-0, (if 00H = Read/Write Multiple commands not Implemented, else xxH = Maximum number of sectors that can be transferred per interrupt on Read and Write Multiple Commands)
|
60H
|
WORD
|
0000H = Cannot perform Doubleword I/O,
0001H = Can perform Doubleword I/O.
|
62H
|
WORD
|
Bit 15-9 (0=reserved),
bit 8 (1=DMA Supported),
Bit 7-0 Vendor Unique.
|
64H
|
WORD
|
Reserved
|
66H
|
WORD
|
Bits 15-8 PIO data transfer cycle timing mode, Bits 7-0 Vendor Unique
|
68H
|
WORD
|
Bits 15-8 DMA data transfer cycle timing mode, Bits 7-0 Vendor Unique
|
6AH
|
WORD
|
Bits 15-1 reserved,
bit 0 (1=the fields reported in translation mode are valid,
0=the fields reported in translation mode may be valid)
|
6CH
|
WORD
|
Number of current cylinders
|
6EH
|
WORD
|
Number of current heads
|
70H
|
WORD
|
Number of current sectors per track
|
72H
|
DWORD
|
Current capacity in sectors
|
76H
|
>WORD
|
Reserved
|
78H
|
136 BYTES
|
Not defined
|
100H
|
64 BYTES
|
Vendor unique
|
140H
|
96 BYTES
|
Reserved
|
INT 13H (0x13)
機能25H(0x25または37) --> フラッシュ間隔の設定(QuickCache II v4.20)
Call with: AH = 25H
BX = Interval of Flush
Return: If Function Successful,
AH = 0000H
If Function Unsuccessful,
AH = status
Comments:
この機能は、フラッシュ間隔を設定するために使用されます。関数が成功した場合、AHは0000Hです。それ以外の場合、AHはステータスを返します。
INT 13H (0x13)
機能26H(0x26または38) --> QuickCache IIv4.20アンインストール
Call with: AH = 26H
Return: If Function Successful,
AX = 0000H
If Function Unsuccessful,
AX = status
Comments:
AXは、別のTSRによってフックされた割り込みベクトルのステータスを0001Hから00FFHに返します。
INT 13H (0x13)
機能27H(0x27または39) --> インストールチェック(QuickCache II v4.20)
Call with: AH = 27H
BX = 0000H
Return: BH = Major Version
BL = Binary Minor Version
If installed,
AX = 0000H
BX = Non-zero
Comments:
インストールされている場合、AXレジスタは0000Hであり、BXはゼロ以外の値を返します。
INT 13H (0x13)
機能28H(0x28または40) --> 自動マウント解除の設定(QuickCache II v4.20)
Call with: AH = 28H
AL = New State
Return: If Function Successful,
AX = 0000H
If Function Unsuccessful,
AX = Status
Comments:
AL = 00Hで無効に、AL = 01Hで有効に関数を呼び出します。
INT 13H (0x13)
機能29H(0x29または41) --> 操作なし(QuickCache II v4.20)
Call with: AH = 29H
Return: AX = 0000H
INT 13H (0x13)
機能2AH(0x2Aまたは42) --> バッファサイズの設定(QuickCache II v4.20)
Call with: AH = 2AH
AL = Buffer Size
Return: If Function Successful,
AX = 0000H
If Function Unsuccessful,
AX = Status
Comments:
この関数は、バッファサイズを設定するために使用されます。関数が成功した場合、AXは0000Hであり、失敗した場合、AXはステータスを返します。
INT 13H (0x13)
機能2BH(0x2Bまたは43) --> ドライブアクセスサウンド(QuickCache II v4.20)
Call with: AH = 2BH
AL = new state (00h disabled, 01h
enabled)
Return: If Function Successful,
AX = 0000H
If Function Unsuccessful,
AX = Status
Comments:
関数が成功した場合、AXは0000Hであり、失敗した場合、AXはステータスを返します。ドライブアクセスサウンドを無効にするにはAL = 00H、有効にするにはAL = 01Hで関数を呼び出します
INT 13H (0x13)
機能2CH(0x2Cまたは44) --> バッファ書き込みの設定(QuickCache II v4.20)
Call with: AH = 2CH
AL = new state
Return: If Function Successful,
AX = 0000H
If Function Unsuccessful,
AX = Status
Comments:
この機能は、すべてのドライブの遅延書き込みを有効または無効にします。 AH = 38Hを使用して、単一のドライブを変更します。 AL = 00Hを使用して無効にし、01Hを使用して有効にします。
INT 13H (0x13)
機能2DH(0x2Dまたは45) --> バッファリードの設定(QuickCache II v4.20)
Call with: AH = 2Dh
AL = new state (00h disabled, 01h
enabled)
Return: If Function Successful,
AX = 0000H
If Function Unsuccessful,
AX = Status
Comments:
この機能は、すべてのドライブの先読みを有効または無効にします。無効にするにはAL = 00Hを使用し、有効にするにはAL = 01Hを使用します。 AH = 37Hを使用して、単一のドライブを変更します。
INT 13H (0x13)
機能2EH(0x2Eまたは46) --> フラッシュカウントの設定(QuickCache II v4.20)
Call with: AH = 2EH
BX = Flush count
Return: If Function Successful,
AX = 0000H
If Function Unsuccessful,
AX = Status
Comments:
この機能は、フラッシュカウントを設定するために使用されます。関数が成功した場合、AXは0000Hであり、失敗した場合、AXはステータスを返します。
INT 13H (0x13)
機能2FH(0x2Fまたは47) --> 即時インクリメンタルフラッシュを強制する(QuickCache II v4.20)
Call with: AH = 2FH
Return: If Function Successful,
AX = 0000H
If Function Unsuccessful,
AX = Status
Comments:
関数が成功した場合、AXは0000Hであり、失敗した場合、AXはステータスを返します。
INT 13H (0x13)
機能30H(0x30または48) --> 情報を入手する(QuickCache II v4.20)
Call with: AH = 30H
AL = Information Number (See Table in
Comments)
DS:DX = buffer for info
Return: If Function Successful,
AX = 0000H
If Function Unsuccessful,
AX = Status
Comments:
この関数は、ALで指定されたシステムに関するさまざまなタイプの情報を取得するために使用されます。関数が成功した場合、AXは0000Hであり、失敗した場合、AXはステータスを返します。 AX = 8000Hは、無効な情報指定子を示します。 ALに指定する情報番号を次の表に示します。:
Value
|
Description
|
00H
|
System information
|
01H
|
Drive information
|
02H
|
Access frequency (Array of 30 words)
|
03H
|
Drive Index (Array of 32 bytes indicating BIOS drive for DOS drive)
|
INT 13H (0x13)
機能31H(0x31または49) -->メモリの予約(QuickCache II v4.20)
Call with: AH = 31H
BX = Number of paragraphs of
conventional memory to reserve for
Applications.
Return: If Function Successful,
AX = 0000H
If Function Unsuccessful,
AX = Status
Comments:
この関数は、アプリケーション用にメモリを予約するために使用されます。関数が成功した場合、AXは0000Hであり、失敗した場合、AXはステータスを返します。
INT 13H (0x13)
機能32H(0x32または50) --> Enable Caching For Specific Drive(QuickCache II v4.20)
Call with: AH = 32H
AL = drive number
Return: If Function Successful,
AX = 0000H
If Function Unsuccessful,
AX = Status
Comments:
この関数は、特定のドライブのキャッシュを有効にするために使用されます。たとえば、A:などに対してAL = 00HでFunctionを呼び出します。関数が成功した場合、AXは0000Hであり、失敗した場合、AXはステータスを返します。
INT 13H (0x13)
機能33H(0x33または51) --> 特定のドライブのキャッシュを無効にする(QuickCache II v4.20)
Call with: AH = 33H
AL = drive number
Return: If Function Successful,
AX = 0000H
If Function Unsuccessful,
AX = Status
Comments:
この関数は、特定のドライブのキャッシュを無効にするために使用されます。たとえば、A:などに対してAL = 00HでFunctionを呼び出します。関数が成功した場合、AXは0000Hであり、失敗した場合、AXはステータスを返します。
INT 13H (0x13)
機能34H(0x34または52) --> セクターのロック/ロック解除(QuickCache II v4.20)
Call with: AH = 34H
AL = Locking/Unlocking function number
(See the Table Given in Comments)
Return: If Function Successful,
AX = 0000H
If Function Unsuccessful,
AX = Status
Comments:
この関数は、ALで指定されたセクターのロック/ロック解除関数を呼び出すために使用されます。関数が成功した場合、AXは0000Hであり、失敗した場合、AXはステータスを返します。次の表に、ALで呼び出されるさまざまな関数番号を示します。
Value
|
Function
|
00H
|
End sector locking/unlocking
|
01H
|
Lock all accessed sectors into cache
|
02H
|
Unlock all accessed sectors and discard from cache
|
INT 13H (0x13)
機能35H(0x35または53) --> ロックプールサイズの設定(QuickCache II v4.20)
Call with: AH = 35H
BX = Number of sectors in lock pool
Return: If Function Successful,
AX = 0000H
If Function Unsuccessful,
AX = Status
Comments:
この関数は、ロックプールのサイズを設定するために使用されます。関数が成功した場合、AXは0000Hであり、失敗した場合、AXはステータスを返します。
INT 13H (0x13)
機能36H(0x36または54) --> トレースバッファサイズの設定
Call with: AH = 36H
AL = New size of trace buffer
Return: If Function Successful,
AX = 0000H
If Function Unsuccessful,
AX = Status
Comments:
この関数は、トレースバッファサイズを設定するために使用されます。関数が成功した場合、AXは0000Hであり、失敗した場合、AXはステータスを返します。この関数は通常、AL = 05HのINT13Hの関数24Hで呼び出されます。
INT 13H (0x13)
機能37H(0x37または55) --> 特定のドライブのバッファ読み取りを設定する(QuickCache II v4.20)
Call with: AH = 37H
AL = New state
DL = Drive number
Return: If Function Successful,
AX = 0000H
If Function Unsuccessful,
AX = Status
Comments:
この関数は、特定のドライブのバッファ読み取りを設定するために使用されます。 AL = 00Hの場合、状態は有効です。それ以外の場合は無効です。関数が成功した場合、AXは0000Hであり、失敗した場合、AXはステータスを返します。
INT 13H (0x13)
機能38H(0x38または56) --> 特定のドライブのバッファ書き込みを設定する(QuickCache II v4.20)
Call with: AH = 38H
AL = New state
DL = Drive number
Return: If Function Successful,
AX = 0000H
If Function Unsuccessful,
AX = Status
Comments:
この関数は、特定のドライブのバッファ書き込みを設定するために使用されます。 AL = 00Hの場合、状態は有効です。それ以外の場合は無効です。関数が成功した場合、AXは0000Hであり、失敗した場合、AXはステータスを返します。
INT 13H (0x13)
機能39H(0x39または57) --> 特定のドライブの読み取りバッファサイズを設定する(QuickCache II v4.20)
Call with: AH = 39H
AL = New size of read buffer
DL = Drive number
Return: If Function Successful,
AX = 0000H
If Function Unsuccessful,
AX = Status
Comments:
この関数は、A:のDL = 00Hなど、特定のドライブの読み取りバッファサイズを設定するために使用されます。関数が成功した場合、AXは0000Hであり、失敗した場合、AXはステータスを返します。
INT 13H (0x13)
機能3AH(0x3Aまたは58) --> 特定のドライブの書き込みバッファサイズを設定する(QuickCache II v4.20)
Call with: AH = 3AH
AL = New size of Write buffer
DL = Drive number
Return: If Function Successful,
AX = 0000H
If Function Unsuccessful,
AX = Status
Comments:
この関数は、A:のDL = 00Hなど、特定のドライブの書き込みバッファサイズを設定するために使用されます。関数が成功した場合、AXは0000Hであり、失敗した場合、AXはステータスを返します。
INT 13H (0x13)
機能3DH(0x3Dまたは61) --> ドライブのシリンダーフラッシュの有効化/無効化(QuickCache II v4.20)
Call with: AH = 3DH
AL = New state
DL = drive number
Return: If Function Successful,
AX = 0000H
If Function Unsuccessful,
AX = Status
Comments:
この機能は、A:のDL = 00Hなどの特定のドライブのシリンダーフラッシュを有効/無効にするために使用されます。関数が成功した場合、AXは0000Hであり、失敗した場合、AXはステータスを返します。 ALレジスタが01Hに設定されている場合、状態は有効になり、そうでない場合は無効になります。
INT 13H (0x13)
機能3EH(0x3Eまたは62) --> シングルセクターボーナスの設定(QuickCache II v4.20)
Call with: AH = 3EH
AL = New value for bonus
Return: If Function Successful,
AX = 0000H
If Function Unsuccessful,
AX = Status
Comments:
この関数は、シングルセクターボーナスを設定するために使用されます。関数が成功した場合、AXは0000Hであり、失敗した場合、AXはステータスを返します。
INT 13H (0x13)
機能3FH(0x3Fまたは63) --> ボーナススラッシュの設定(QuickCache II v4.20)
Call with: AH = 3FH
AL = New value for bonus threshold
Return: If Function Successful,
AX = 0000H
If Function Unsuccessful,
AX = Status
Comments:
この関数は、ボーナスしきい値を設定するために使用されます。関数が成功した場合、AXは0000Hであり、失敗した場合、AXはステータスを返します。
INT 13H (0x13)
機能41H(0x41または65) --> インストールチェック(IBM / MS INT 13H拡張機能)
Call with: AH = 41H
BX = 55AAH
DL = Drive number (80H-FFH)
Return: If Extensions Supported and Function Successful,
Carry Flag = Clear
BX = AA55H
AH = Major version of extensions (See the
table in Comments)
AL = Internal use
CX = API subset support bitmap (See the
Table in Comments)
DH = Extension version (v2.0 and later)
If Extension not Supported or Function Unsuccessful,
Carry Flag = set
AH = 01H (Function Invalid)
Comments:
この関数は、IBM / MS INT13H拡張機能がインストールおよびサポートされているかどうかを確認します。拡張機能のメジャーバージョンの値は、次の表に示されています。
Value
|
Major Version of Extension
|
01H
|
1.x
|
20H
|
2.0 / EDD-1.0
|
21H
|
2.1 / EDD-1.1
|
30H
|
EDD-3.0
|
IBM / MS INT 13H Extensions APIサポートビットマップのビットフィールドは、次の表に示されています。
Bit(s)
|
Description
|
0
|
Extended disk access functions (AH=42H, 43H, 44H, 47h and 48H) supported.
|
1
|
Removable drive controller functions (AH=45H, 46H, 48H, 49H, and INT15/AH =52H) supported.
|
2
|
Enhanced disk drive (EDD) functions (AH=48H and AH=4EH) supported. Extended drive parameter table is valid.
|
3-15
|
Reserved (0)
|
INT 13H (0x13)
機能42H(0x42または66) --> 拡張読み取り(IBM / MS INT 13H拡張機能)
Call with: AH = 42H
DL = Drive number
DS:SI = Disk address packet (See the table in
comments)
Return: If Function Successful,
Carry Flag = Clear
AH = 00H
If Function Unsuccessful,
Carry Flag = Set
AH = error code
Comments:
この機能は、ディスク読み取り機能の拡張機能です。関数が成功した場合、キャリーフラグはクリアされ、AHレジスタは00Hです。それ以外の場合、キャリーフラグが設定され、AHはエラーコードを返します。ディスクアドレスパケットのブロック数フィールドは、正常に転送されたブロック数に設定されます。ディスクアドレスパケットのフォーマットは以下のとおりです。
Offset
|
Size
|
Description
|
00H
|
BYTE
|
Size of Packet (10H)
|
01H
|
BYTE
|
Reserved (0)
|
02H
|
WORD
|
Number of blocks to transfer
|
04H
|
DWORD
|
Transfer buffer
|
08H
|
QWORD
|
Starting absolute block number (LBA)
|
INT 13H (0x13)
機能43H(0x43または67) --> 拡張書き込み(IBM / MS INT 13H拡張機能)
Call with: AH = 43H
AL = write flags (See the table in
comments)
DL = drive number.
DS:SI = disk address packet
Return: If Function Successful,
Carry Flag = clear
AH = 00H
If Function Unsuccessful,
Carry Flag = set
AH = error code
Comments:
この機能は、ディスク書き込み機能の拡張機能です。関数が成功した場合、キャリーフラグはクリアされ、AHレジスタは00Hです。それ以外の場合、キャリーフラグが設定され、AHはエラーコードを返します。ディスクアドレスパケットのブロック数フィールドは、正常にブロック数に設定されます。さまざまなバージョンの書き込みフラグの情報を次の表に示します。
Version 1.0 and 2.0
|
Version 2.1 and later
|
Value
|
Description
|
Value
|
Description
|
Bit 0
|
Verify Write
|
00H and 01H
|
Write without Verify
|
Bits 1 to 7
|
Reserved (0)
|
02H
|
Write with verify
|
INT 13H (0x13)
機能44H(0x44または68) --> セクターの検証(IBM / MS INT 13H拡張機能)
Call with: AH = 44H
DL = drive number
DS:SI = disk address packet
Return: If Function Successful,
Carry Flag = Clear
AH = 00H
If Function Unsuccessful,
Carry Flag = Set
AH = error code
Comments:
この関数は、セクターの検証機能の拡張機能です。関数が成功した場合、キャリーフラグはクリアされ、AHレジスタは00Hです。それ以外の場合、キャリーフラグが設定され、AHはエラーコードを返します。ディスクアドレスパケットのブロック数フィールドが正常にブロック数に設定されている
INT 13H (0x13)
機能45H(0x45または69) --> ドライブのロック/ロック解除(IBM / MS INT 13H拡張機能)
Call with: AH = 45H
AL = Operation Number (See the Table in
comments)
DL = Drive number
Return: If Function Successful,
Carry Flag = Clear
AH = 00H
AL = Lock State (00H = Unlocked)
If Function Unsuccessful,
Carry Flag = Set
AH = Error code
Comments:
この機能は、ドライブをロック/ロック解除するために使用されます。この機能は、80H以上の番号のリムーバブルドライブでサポートされている必要があります。ドライブには最大255個のロックを設定でき、すべてのロックが解除されるまでメディアは物理的にロック解除されません。
関数が成功した場合、キャリーフラグはクリアされ、AHレジスタは00Hです。それ以外の場合、キャリーフラグが設定され、AHはエラーコードを返します。
ドライブのさまざまなロック/ロック解除操作の操作番号を次の表に示します。
Value
|
Function
|
00H
|
Lock media in drive
|
01H
|
Unlock media
|
02H
|
Check lock status
|
INT 13H (0x13)
機能46H(0x46または70) --> メディアのイジェクト(IBM / MS INT 13H拡張機能)
Call with: AH = 46H
AL = 00H (reserved)
DL = Drive number
Return: If Function Successful,
Carry Flag = Clear
AH = 00H
If Function Unsuccessful,
Carry Flag = Set
AH = error code
Comments:
この機能は、メディアを排出するためのものです。関数が成功した場合、キャリーフラグはクリアされ、AHレジスタは00Hです。それ以外の場合、キャリーフラグが設定され、AHはエラーコードを返します。
INT 13H (0x13)
機能47H(0x47または71) --> 拡張シーク(IBM / MS INT 13H拡張機能)
Call with: AH = 47H
DL = Drive number
DS:SI = Disk address packet
Return: If Function Successful,
Carry Flag = Clear
AH = 00H
If Function Unsuccessful,
Carry Flag = Set
AH = error code
Comments:
この関数は、シーク関数の拡張機能です。関数が成功した場合、キャリーフラグはクリアされ、AHレジスタは00Hです。それ以外の場合、キャリーフラグが設定され、AHはエラーコードを返します。ディスクアドレスパケットのブロック数フィールドは、正常にブロック数に設定されます。
INT 13H (0x13)
機能48H(0x48または72) --> ドライブパラメータの取得(IBM / MS INT 13H拡張機能)
Call with: AH = 48H
DL = Drive (80H-FFH)
DS:SI = Buffer for drive parameters
Return: If Function Successful,
Carry Flag = Clear
AH = 00H
DS:SI = Buffer filled
If Function Unsuccessful,
Carry Flag = Set
AH = Error code
Comments:
この関数は、ドライブパラメータを取得するために使用されます。関数が成功した場合、キャリーフラグはクリアされ、AHレジスタは00Hで、DS:SIがFilledバッファになります。それ以外の場合、キャリーフラグが設定され、AHはエラーコードを返します。
INT 13H (0x13)
機能49H(0x49または73) --> 拡張メディア変更(IBM / MS INT 13H拡張機能)
Call with: AH = 49H
DL = Drive number (any drive number, see
Comments)
Return: If media has not been changed,
Carry Flag = Clear
AH = 00H
If media may have been changed,
Carry Flag = Set
AH = 06H (Error code for media change)
Comments:
この機能は、メディア変更機能の拡張機能です。関数が成功した場合、キャリーフラグはクリアされ、AHレジスタは00Hです。それ以外の場合、キャリーフラグが設定され、AHはエラーコードを返します。
この機能とINT13Hの機能AH = 16Hの主な違いは、任意のドライブ番号を指定できることです。ここで、機能16Hは、フロッピーディスクのドライブ番号00H〜7FHのみを許可します。
INT 13H (0x13)
機能4AH(0x4Aまたは74) --> ディスクエミュレーションを開始します(ブータブルCD-ROM)
Call with: AH = 4AH
AL = 00H
DS:SI = Specification packet (see the Table in comments)
Return: If Function Successful,
Carry Flag = Clear
If Function unsuccessful,
Carry Flag = Set
AX = Status Code
Comments:
この関数は、ディスクエミュレーションを開始するために使用されます。機能が成功した場合、キャリーフラグはクリアされます。そうでない場合、キャリーフラグが設定され、AXレジスタがステータスコードを返し、ドライブはエミュレーションモードになりません。
起動可能なCD-ROM仕様パケットのフォーマットを次の表に示します。
Offset
|
Size
|
Description
|
00H
|
BYTE
|
Size of packet in bytes (13H)
|
01H
|
BYTE
|
Boot media type
|
02H
|
BYTE
|
Drive Number
Drive Number
|
Drive Description
|
00H
|
Floppy image
|
80H
|
Bootable hard disk
|
81H to FFH
|
Non bootable or no Emulation
|
|
03H
|
BYTE
|
CD-ROM controller number
|
04H
|
DWORD
|
Logical Block Address of disk image to Emu
|
08H
|
WORD
|
Device Specification
Value
|
Description
|
(IDE) Bit 0
|
Drive is slave instead of master
|
(SCSI) Bits 0 to 7
|
LUN (Logical Unit Number) and PUN (Physical Unit Number)
|
Bits 8 to 15
|
Bus Number
|
|
0AH
|
WORD
|
Segment of 3Kb buffer for caching CD-ROM reads
|
0CH
|
WORD
|
Load segment for initial boot image (if 0000H, load at segment 07C0H)
|
0EH
|
WORD
|
Number of 512-byte virtual sectors to load (only valid for Function 4CH of INT 13H)
|
10H
|
BYTE
|
Low byte of cylinder count (for Function 08H of INT 13H)
|
11H
|
BYTE
|
Sector count, high bits of cylinder count (for Function 08H of INT 13H)
|
12H
|
BYTE
|
Head count (for Function 08H of INT 13H)
|
次の表に、ブータブルCD-ROMブートメディアタイプのビットフィールドを示します。
Bit(s)
|
Description
|
3-0
|
Media type
Value
|
Description
|
0000
|
No emulation.
|
0001
|
1.2M diskette.
|
0010
|
1.44M diskette.
|
0011
|
2.88M diskette.
|
0100
|
Hard disk (drive C:)
|
Other
|
Reserved
|
|
5-4
|
Reserved (0)
|
6
|
Image contains ATAPI driver
|
7
|
Image contains SCSI driver(s)
|
INT 13H (0x13)
機能4B00H(0x4B00) --> ディスクエミュレーションを終了します(ブータブルCD-ROM)
Call with: AX = 4B00H
DL = Drive number (or 7FH to terminate
all emulations)
DS:SI = Empty specification packet
Return: If Function Successful,
Carry Flag = Clear
If Function Unsuccessful,
Carry Flag = Set
AX = Status code
DS:SI = Specification packet filled
Comments:
この関数は、ディスクエミュレーションを終了するために使用されます。すべてのエミュレーションを終了する場合は、DL = 7FHで関数を呼び出します。機能が成功した場合、キャリーフラグはクリアされます。そうでない場合、キャリーフラグが設定され、AXレジスタがステータスコードを返し、ドライブはエミュレーションモードのままになります。
INT 13H (0x13)
機能4B01H(0x4B01) --> ステータスの取得(ブータブルCD-ROM)
Call with: AX = 4B01H
DL = Drive number
DS:SI = Empty specification packet
Return: If Function Successful,
Carry Flag = Clear
If Function Unsuccessful,
Carry Flag = Set
AX = Status code
DS:SI = Specification packet filled
Comments:
関数は、ステータスを取得するために使用されます。関数が成功した場合、キャリーフラグはクリアされます。そうでない場合、キャリーフラグが設定され、AXレジスタがステータスコードを返します。
INT 13H (0x13)
機能4CH(0x4Cまたは76) --> ディスクエミュレーションとブートの開始(ブータブルCD-ROM)
Call with: AH = 4CH
AL = 00H
DS:SI = Specification packet
Return: If Function Successful,
Nothing
If Function Unsuccessful,
Carry Flag = Set
AX = Status code
Comments:
この機能は、ディスクエミュレーションを開始してシステムを起動するために使用されます。関数が成功した場合、キャリーフラグが設定されていること以外は何も返しません。AXレジスタはステータスコードを返します。
INT 13H (0x13)
機能4D00H(0x4D00) --> リターンブートカタログ(ブータブルCD-ROM)
Call with: AX = 4D00H
DS:SI = Command packet (See the Table in
comments)
Return: If Function Successful,
Carry Flag = Clear
If Function Unsuccessful,
Carry Flag = Set
AX = Status code
Comments:
この関数は、ブートカタログを返すために使用されます。関数が成功した場合、キャリーフラグはクリアされます。そうでない場合、キャリーフラグが設定され、AXレジスタはステータスコードを返します。の起動可能なCD-ROMのフォーマット "ブートカタログを取得する" コマンドパケットは次の表に示されています。
Offset
|
Size
|
Description
|
00H
|
BYTE
|
Size of packet in bytes (08H)
|
01H
|
BYTE
|
Number of sectors of boot catalog to read
|
02H
|
DWORD
|
Buffer for boot catalog
|
06H
|
WORD
|
First sector in boot catalog to transfer
|
INT 13H (0x13)
機能4EH(0x4Eまたは78) --> ハードウェア構成の設定(IBM / MS INT 13H Extensions v2.1)
Call with: AH = 4EH
AL = Function Number ( See the Table in comments)
DL = Drive number
Return: If Function Successful,
Carry Flag = Clear
AH = 00H
If Function Unsuccessful,
Carry Flag = Set
AH = error code
AL = Status
Comments:
この機能は、ハードウェア構成を設定するために使用されます。この関数を呼び出すためのALの関数番号は、次の表に示されています。
Value
|
Description
|
00H
|
Enable prefetch
|
01H
|
Disable prefetch
|
02H
|
Set maximum PIO transfer mode
|
03H
|
Set PIO mode 0
|
04H
|
Set default PIO transfer mode
|
05H
|
Enable INT 13H DMA maximum mode
|
06H
|
Disable INT 13H DMA
|
DMAモードとPIOモードは相互に排他的であるため、DMAを選択すると、指定したデバイスまたはそのコントローラー上のすべてのデバイスのPIOが無効になり、PIOを選択するとDMAが無効になります。
INT 13H (0x13)
機能5001H(0x5001) --> パケット送信コマンド(拡張ディスクドライブ仕様v3.0)
Call with: AX = 5001H
DL = Drive number
ES:BX = Command packet (See the Table in
comments)
Return: If Function Successful,
Carry Flag = Clear
AH = 00H
If Function Unsuccessful,
Carry Flag = Set
AH = error code
Comments:
この関数は、パケットコマンドを送信するために使用されます。関数が成功した場合、キャリーフラグはクリアされ、AHレジスタは00Hです。それ以外の場合、キャリーフラグが設定され、AHはエラーコードを返します。拡張ディスクドライブ仕様v3.0コマンドパケットのフォーマットを次の表に示します。
Offset
|
Size
|
Description
|
00H
|
WORD
|
Signature B055H
|
02H
|
BYTE
|
Length of packet in bytes
|
03H
|
BYTE
|
Reserved (0)
|
04H
|
N BYTEs
|
Formatted packet data
|
INT 13H (0x13)
機能5501H(0x5501) --> お問い合わせ(Seagate ST01 / ST02)
Call with: AX = 5501H
DH = Number of bytes to transfer
DL = Drive Number
ES:BX = Buffer for results
Return
ES:BX buffer, filled with the Inquiry results.
Comments:
この関数は、問い合わせを送信するために使用されます。 ST01 / ST02 BIOSは、機能の成功または失敗の表示を返さないため、すべてのコマンドが成功したと見なす必要があります。
ST01 / ST02 BIOSは、0040H:0075HのBIOSドライブ数を変更せずに、常に前のBIOSドライブの後にドライブをマップします。このコマンドは、SCSIInquiryコマンドと同じです。
INT 13H (0x13)
機能5502H(0x5502) --> 予約済み(Seagate ST01 / ST02)
INT 13H (0x13)
機能5503H(0x5503) --> DTQ(デバイスタイプ修飾子)を設定します(Seagate ST01 / ST02)
Call with: AX = 5503H
DH = DTQ byte (See the table in
comments)
DL = Drive Number
Return: Nothing
Comments:
この関数は、DTQ(デバイスタイプ修飾子)を設定するために使用されます。関数は何も返しません。 DTQバイトのビットフィールドを次の表に示します。
Bit(s)
|
Description
|
0
|
Seagate installation software present
|
1
|
Selected drive has been installed
|
2
|
Host Adapter checks parity on the selected drive
|
3
|
Selected drive is ST225N
|
4
|
Selected drive is paired ST225N/NP
|
5
|
Reserved
|
6
|
SCSI drive attached
|
7
|
Reserved
|
INT 13H (0x13)
機能5504H(0x5504) --> 返品ID(Seagate ST01 / ST02)
Call with: AX = 5504H
DL = Drive Number
Return:
AX = 4321H
BL = selected drive number (00H, 01H)
BH = number of drives attached to Host
Adapter
Comments:
関数は、ドライブのIDを返すために使用されます。
INT 13H (0x13)
機能5505H(0x5505) --> パークヘッド(Seagate ST01 / ST02)
Call with: AX = 5505H
DL = Drive Number
DH = Sub function (see the comments)
Return:
Nothing
Comments:
この関数は、ディスクのヘッドをパークするために使用されます。古いハードディスクディスクで使用されていましたが、最新のハードディスクでは、ヘッドをパークするための外部プログラムは必要ありません。
サブ機能00Hはディスクのヘッドをパークし(SCSI停止コマンド)、サブ機能01Hはディスクのヘッドをパーク解除します(SCSI開始コマンド)。
INT 13H (0x13)
機能5506H(0x5506) --> SCSIバスパリティ(Seagate ST01 / ST02)
Call with: AX = 5506H
DL = Drive Number
DH = Sub function Number (See
Comments)
Return:
AL = Status (00H parity checking
disabled, 01H parity checking enabled)
Comments:
DHの次のサブ関数番号を使用して関数を呼び出します。
Value
|
Description
|
00H
|
Disable parity check
|
01H
|
Enable parity check
|
02H
|
Return current parity setting
|
INT 13H (0x13)
機能5507H(0x5507)機能550DH(0x550D)へ --> 予約機能(Seagate ST01 / ST02)
Call with: AX = 5507H to AX = 550DH
Comments:
これらの関数は、正式に次のようにリストされています。 "予約済み"
INT 13H (0x13)
関数A0H(0xA0または160) --> 常駐コードセグメントの取得(Super PC-Kwik v3.20以降)
Call with: AH = A0H
SI = 4358H
Return:
AX = Segment of Resident Code
Comments:
この関数は、常駐コードセグメントを取得するために使用されます。 AXは常駐コードのセグメントを返します。
INT 13H (0x13)
機能A1H(0xA1または161) --> フラッシュキャッシュ(Super PC-Kwik v3.20以降)
Call with: AH = A1H
SI = 4358H
Return:
Carry Flag = Clear
AH = 00H (v5.10)
Comments:
この関数は、キャッシュをフラッシュするために使用されます。
INT 13H (0x13)
機能A3H(0xA3または163) --> キャッシュを無効にする(Super PC- Kwik v3.20以降)
Call with: AH = A3H
SI = 4358H
Return:
Carry Flag = Clear
Comments:
関数は、キャッシュを無効にするために使用されます。
INT 13H (0x13)
機能A4H(0xA4または164) --> キャッシュを有効にする(Super PC-Kwik v3.20以降)
Call with: AH = A4H
SI = 4358H
Return:
Carry Flag = Clear
Comments:
この関数は、キャッシュを有効にするために使用されます。
INT 13H (0x13)
関数EEH(0xEEまたは238) --> 1024シリンダーフラグの設定(SWBIOS)
Call with: AH = EEH
DL = Drive Number
Return:
Carry Flag = Clear
AH = 00H
Comments:
この関数は、1024 –シリンダーフラグを設定するために使用されます。フラグは、AH = EEHおよびAH = EFHを除くすべてのINT13H呼び出しによってクリアされます。 Disk Managerは、これらの呼び出しもサポートしています。この関数は、その呼び出しをサポートするソフトウェアに対して、CX = 0400Hで関数AH = EFHを呼び出すのと同じです。
この機能は、HyperDisk v4.01以降、およびPC-Cache v5.5以降でもサポートされており、SWBIOSを使用してドライブをキャッシュして1024を超えるシリンダーにアクセスできるようにします。
INT 13H (0x13)
関数EFH(0xEFまたは239) --> シリンダーオフセットの設定(オントラックドライブロケット)
Call with: AH = EFH
CX = Cylinder offset for next INT 13H call
DL = Drive Number
Return:
Carry Flag = Clear
AH = 00H
Comments:
この関数は、シリンダーオフセットを設定するために使用されます。この呼び出しをサポートするソフトウェアの場合、関数AH = EEHは、CX = 0400Hでこの関数を呼び出すことと同じです。シリンダーオフセットは、AH = EEHおよびAH = EFHを除くすべてのINT13Hによって0にリセットされます。
INT 13H (0x13)
機能F9H(0xF9または249) --> インストールチェック(SWBIOS)
Call with: AH = F9H
DL = Drive Number
Return: If Function Successful,
Carry Flag = Clear
DX = Configuration Word (see comments)
If Function Unsuccessful,
Carry Flag = Set
Comments:
この機能は、インストールチェックに使用されます。関数が成功した場合、キャリーフラグはクリアされ、DXは構成ワードを返します。それ以外の場合、キャリーフラグが設定されます。
他のSWBIOS拡張が利用可能な場合、ビット15が設定されます。 Disk Managerは、これらの呼び出しもサポートしています。
INT 13H (0x13)
機能FEH(0xFEまたは254) --> 拡張シリンダーカウントを取得(SWBIOS)
Call with: AH = FEH
DL = Drive Number
Return:
Carry Flag = Clear
DX = Number of Cylinders beyond 1024
on drive
Comments:
この関数は、拡張シリンダーカウントを取得するために使用されます。 INT13Hの関数AH = 08Hは、1024に切り捨てられたシリンダーカウントを返します。この拡張機能のないBIOSは、1024をモジュレートするカウントを返します。DiskManagerはこれらの呼び出しもサポートします。
INT 13H (0x13)
関数FFH(0xFFまたは255) --> 公式にプライベートな機能(IBM SurePath BIOS)
INT 13H (0x13)
関数FFFFH(0xFFFF) --> ターボモードの設定(UNIQUE UXターボユーティリティ)
Call with: AX = FFFFH
BH = AAH
BL = Sub Function Number (See the table
in Comments)
Return: If installed,
AX = 1234H
Comments:
この機能は、ターボモードを設定するために使用されます。 BLを使用して関数を呼び出すためのサブ関数番号は、次の表に示されています。
Value
|
Description
|
00H
|
Installation check
|
01H
|
Turn on Turbo mode
|
02H
|
Turn off Turbo mode
|
03H
|
Set Turbo mode according to hardware switch
|
04H
|
Set disk access to Turbo mode
|
05H
|
Set disk access to Normal mode
|
CプログラミングでINT13H拡張機能を使用する方法
前の章で使用したのと同じC関数(int86()、int86x()など)を使用して、INT13Hの拡張関数を呼び出すことができます。例を挙げて学びましょう。
次の例では、3つの機能(拡張機能の存在の確認、拡張読み取り、拡張書き込み)に焦点を当てています。ただし、この章では拡張書き込み機能は使用しません。
プログラムは最初に、拡張機能がサポートされているかどうかをチェックし、拡張機能がINT 13Hに存在するかどうかを確認します。プログラムは、ディスクの絶対セクター0(つまりMBR)を読み取ります。プログラムのコーディングは次のように進行します。
/ * INT 13BIOS拡張機能を使用して8.46GBを超えるセクターにアクセスするプログラム* /
#include<stdio.h>
#include<dos.h>
/* Assigns the identifier to the data type */
typedef unsigned char Byte;
typedef unsigned int Word;
typedef unsigned long DWord;
/* disk_packet structure is loaded in DS:SI and command executed */
struct disk_packet
{
Byte size_pack; // Size of packet must be 16 or 16+
Byte reserved1; // Reserved
Byte no_of_blocks;// Number of blocks for transfer
Byte reserved2; // Reserved
/* Address in Segment:Offset format */
Word offset; //offset address
Word segment; //segment address
/* To Support the Disk Even of Capacity of 1152921504.607 GB */
DWord lba1;
DWord lba2;
}
disk_pack;
/* Function to check if the Extensions are supported */
void check_ext_present()
{
union REGS inregs, outregs; /* Input Registers and
Output */
inregs.h.ah=0x41; /* Function to Check
Extension Present */
inregs.x.bx=0x55AA;
inregs.h.dl=0x80; /* Drive No for first Hard Disk */
int86(0x13,&inregs,&outregs); /*Call interrupt */
if(outregs.x.cflag)
{
/* Extension Not Supported */
printf("\nBios extension not supported");
exit(1);
}
if(outregs.x.bx==0xAA55)
if(outregs.x.cx & 0x1)
/* Extension Present */
printf("\nExtended I/O supported");
}
/* Function to read the Sector */
void read_sectors(void *buffer)
{
union REGS inregs, outregs; /* Input and Output
Registers */
struct SREGS segregs; // Segment Registers
disk_pack.size_pack=16; // Set size to 16
disk_pack.no_of_blocks=1; // One block
disk_pack.reserved1=0; // Reserved Word
disk_pack.reserved2=0; // Reserved Word
disk_pack.segment=FP_SEG(buffer);// Segment of buffer
disk_pack.offset=FP_OFF(buffer); // Offset of buffer
/* request for MBR of hard disk 1 */
/* Read Absolute sector 0 */
disk_pack.lba1=0; /* LBA address, Contains first
32 bits */
/* We normally require( drives < 2.1 T.B) to set
only this */
disk_pack.lba2=0; // Last 32 bit address
inregs.h.ah=0x42; // Function to read
inregs.h.dl=0x80; // Drive Number for First Hard Disk inregs.x.si = FP_OFF(&disk_pack); /*Make DS:SI point
to disk_pack */
segregs.ds = FP_SEG(&disk_pack);
/* Call Interrupt */
int86x(0x13,&inregs,&outregs,&segregs);
if(outregs.x.cflag)
printf("\n\nError %d\n",outregs.h.ah);
else
printf("\n\nI hope Everything is all Right");
}
//// Write Sector Function \\\\
void write_sector()
{
/* It will be written in the same way as read_sectors function, except Function Number, which will be 0x43 in this function. We’ll discuss extended write function in next chapters.
Before Using this Function please check and verify what are you going to do. You should have the proper knowledge of what you are going to do. Use of this function in lack of knowledge or carelessly may destroy your data. */
}
/// Main Function \\\\
void main()
{
int i=0;
/* buffer to hold MBR */
Byte mbr[512];
clrscr();
/* check for BIOS extension present */
check_ext_present();
/* read sector */
read_sectors(&mbr);
printf("\n\n Data of MBR \n");
printf("▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀\n\n\n");
while(i++<512)
{
/* display the MBR buffer */
printf("%c",mbr[i]);
}
}
プログラムのコーディングに関するコメント
typedef typedef unsigned charByte;となるようにデータ型に識別子を割り当てます。データ型charに識別子Byteを割り当てます。同様に、識別子Wordはintに割り当てられ、DWordはlongに割り当てられます。
disk_packet構造体がDS:SIにロードされ、コマンド(拡張読み取り、拡張書き込み、検証など)が実行されます。前述のIBM / MS INT 13H拡張機能(機能41Hから機能49H)の機能を参照してください。
check_ext_present()関数は、拡張機能が使用可能/サポートされているかどうかをチェックします。この関数はBX = 55AAH(inregs.x.bx = 0x55AA;)で呼び出され、拡張機能がサポートされている場合、BXレジスタはAA55Hに設定されます。 (前述の機能41Hを参照)
関数read_sectorsは、disk_pack.lba1で指定されたディスクの絶対セクターを読み取るために使用されます。このプログラムでは、disk_pack.lba1 = 0を指定しているため、絶対セクター0を読み取り(以下の注を参照)、ディスクのMBRを読み取ります。
write_sector関数もread_sectors関数と同じであり、同じ方法で書き込まれますが、関数オプションが異なります。次の章で使用します。
注:
次の2つの方法でディスクセクターを読み取ります。
- 相対セクターの読み取り(または書き込み)
- 絶対セクター読み取り(または書き込み)
相対セクター読み取りでは、ディスクのCHS(シリンダー、ヘッド、セクター)ジオメトリに従ってディスクセクターを読み取ります。相対セクター読み取りでは、ディスクのMBR(ディスクの最初のセクター)はシリンダー0、ヘッド0、セクター1にあります。
ディスクセクターの絶対読み取りでは、プログラムでシリンダー番号またはヘッド番号を指定する必要はありません。絶対セクターは絶対セクター0から数えられます。
したがって、ディスク(ディスクの最初のセクター)のMBRを読み取る場合は、絶対セクター0を読み取ります。絶対セクター番号を対応するシリンダーヘッドに変換するのはBIOSの作業です。およびセクター番号。
絶対セクターの読み取り(または書き込み)と同様に、ディスク全体の読み取りまたは書き込みなどの操作では、ループ内の絶対セクターのみを計算する必要がありますが、相対セクターの読み取り(または書き込み)の場合は、 CHSを計算するために一度に3つのループを実行するため、絶対セクターの読み取り/書き込みは、相対セクターの読み取り/書き込みよりもはるかに高速です。
例えば, 16ヘッド(側面)、12シリンダー、63セクターのハードディスクがある場合、次の表に両方の読み取り方法の手順と違いを示し、絶対セクターアプローチが時間のかかるプログラムをどのように作成するかを示します(ディスク全体の読み取り/書き込みまたはディスク全体のワイププログラムなど)をはるかに高速に実行します。
Relative Sectors Reading
|
Absolute Sector reading
|
Cylinder =0, Head =0, Sector = 1
|
Absolute Sector = 0
|
Cylinder =0, Head =0, Sector = 2
|
Absolute Sector = 1
|
Cylinder =0, Head =0, Sector = 3
|
Absolute Sector = 2
|
.
.
.
.
|
.
.
.
.
|
Cylinder =0, Head =0, Sector = 62
|
Absolute Sector = 61
|
Cylinder =0, Head =0, Sector = 63
|
Absolute Sector = 62
|
Cylinder =0, Head =1, Sector = 1
|
Absolute Sector = 63
|
Cylinder =0, Head =1, Sector = 2
|
Absolute Sector = 64
|
Cylinder =0, Head =1, Sector = 3
|
Absolute Sector = 65
|
Cylinder =0, Head =1, Sector = 4
|
Absolute Sector = 66
|
.
.
.
.
|
.
.
.
.
|
Cylinder =0, Head =1, Sector = 63
|
Absolute Sector = 125
|
Cylinder =0, Head =2, Sector = 1
|
Absolute Sector = 126
|
Cylinder =0, Head =2, Sector = 2
|
Absolute Sector = 127
|
Cylinder =0, Head =2, Sector = 3
|
Absolute Sector = 128
|
.
.
.
.
|
.
.
.
.
|
Cylinder =0, Head =15, Sector = 63
|
Absolute Sector = 1007
|
Cylinder =1, Head =0, Sector = 1
|
Absolute Sector = 1008
|
Cylinder =1, Head =0, Sector = 2
|
Absolute Sector = 1009
|
Cylinder =1, Head =0, Sector = 3
|
Absolute Sector = 1010
|
.
.
.
.
|
.
.
.
.
|
Cylinder =1, Head =0, Sector = 63
|
Absolute Sector = 1070
|
Cylinder =1, Head =1, Sector = 1
|
Absolute Sector = 1071
|
Cylinder =1, Head =1, Sector = 2
|
Absolute Sector = 1072
|
Cylinder =1, Head =1, Sector = 3
|
Absolute Sector = 1073
|
.
.
.
.
|
.
.
.
.
|
Cylinder =1, Head =15, Sector = 63
|
Absolute Sector = 2015
|
Cylinder =2, Head =0, Sector = 1
|
Absolute Sector = 2016
|
Cylinder =2, Head =0, Sector = 2
|
Absolute Sector = 2017
|
Cylinder =2, Head =0, Sector = 3
|
Absolute Sector = 2018
|
.
.
.
.
|
.
.
.
.
|
Cylinder =11, Head =15, Sector = 60
|
Absolute Sector = 12092
|
Cylinder =11, Head =15, Sector = 61
|
Absolute Sector = 12093
|
Cylinder =11, Head =15, Sector = 62
|
Absolute Sector = 12094
|
Cylinder =11, Head =15, Sector = 63
|
Absolute Sector = 12095
|
ディスクMBR分析ツールで表示されるMBRのパーティションテーブルの情報を以下に示します。
上記の情報では、両方のパーティションの開始の相対セクター番号はそれぞれ63と11277630であり、これらはパーティションがなく、ディスクで使用可能なセクターの数に従ってカウントされます。