장 – 9
대용량 하드 디스크 다루기
대용량 하드 디스크 처리
이전 장에서 우리는 BIOS-디스크 기능과 하드 디스크의 물리적 미디어에 액세스하기 위한 인터럽트 사용에 대해 논의했습니다. 우리는 INT 13H 기능을 사용하여 하드 디스크에 액세스했습니다.
INT 13H 인터페이스는 읽기, 쓰기, 포맷 및 확인 등과 같은 다양한 명령을 지원하며 BIOS는 이를 하드 디스크로 전달합니다. 오랫동안 DOS에서 사용했기 때문에 INT13H는 오랫동안 표준이었습니다.
INT 13H는 드라이브 지오메트리 지정을 위해 24비트를 할당하고 호출 프로그램이 하드 디스크의 특정 매개변수를 알고 디스크 액세스를 허용하는 루틴에 정확한 헤드, 실린더 및 섹터 주소를 제공해야 합니다.
BIOS는 BIOS 설정 프로그램에 설정된 하드 디스크의 구조를 사용합니다. 드라이브 구조를 지정하기 위해 INT 13H 인터페이스에 의해 할당된 24비트는 다음과 같이 나뉩니다.
- 실린더 번호는 10비트입니다. 따라서 총 실린더의 최대 한도는 최대 1,024 실린더입니다.
- 헤드 번호의 경우 8비트. 따라서 총 헤드의 최대 제한은 최대 256개입니다.
- 섹터 번호의 경우 6비트. 따라서 섹터의 최대 합계는 최대 63개 섹터가 될 수 있습니다.
따라서 이 접근 방식이 지원하는 최대 섹터는 1024 * 256 * 63 = 16515072.
이는 INT13H 인터페이스가 최대 약 1,650만 섹터를 포함하는 디스크를 지원할 수 있음을 의미하며, 섹터당 512바이트는 최대 8.46GB입니다. 그것이 바로 제가 설명하고 싶은 것입니다. 따라서 이러한 모든 기능 또는 INT 13H를 사용하여 최대 8.46GB의 디스크에만 액세스할 수 있습니다.
이러한 이유로 최근 몇 년 동안 이 오래된 인터페이스의 한계로 인해 이 장의 다음 부분에서 설명하는 것처럼 하드 디스크를 지정하는 새로운 방법을 위해 이 인터페이스를 포기하게 되었습니다.
먼저 이야기를 들려드리겠습니다!
11년 전, 제가 7급이었을 때, 저는 42MB 용량의 하드 디스크에 대해 들었습니다. 아마도 IBM의 WDA-L42였을 것입니다. 그 당시에는 저와 제 친구들이 이렇게 큰 용량의 하드 디스크를 상상하는 것이 정말 어려웠습니다.
INT 13H 방법론은 오늘날로부터 약 20년 전에 개발되었습니다. 8GB 하드 디스크가 그 시대의 꿈에도 들어갈 수 있을 만큼 훨씬 컸다는 것을 이제 이해할 수 있습니다. 그러나 오늘날 개인용 컴퓨터 사용자에게 8GB 하드 디스크에 대해 이야기하면 저장 용량이 작다고 해서 사용하고 싶어하지 않을 수 있습니다.
이것이 INT 13H 인터페이스가 마침내 현대 시스템에서 그 유용성을 끝낸 이유입니다. INT 13H는 24비트를 사용하여 디스크 지오메트리를 할당했으며 불행히도 기존 INT 13H BIOS 인터페이스를 확장할 수 없었습니다. 확장이 완료되면 많은 구형 하드웨어와 소프트웨어가 작동을 멈추고 오늘날의 컴퓨터 시장이 수백만 개의 오래된 소프트웨어 및 하드웨어 제품이 작동을 멈추는 것과 같은 큰 변화를 결코 견딜 수 없습니다.
이 조건을 염두에 두고 INT 13H는 INT 13H 확장이라는 새로운 인터페이스로 대체되었습니다. 그러나 INT 13H는 DOS 및 기타 일부 이전 운영 체제에서 다른 호환성 목적으로 계속 사용할 수 있습니다.
새로운 INT 13H 인터페이스는 주소 지정에 24비트 대신 64비트를 사용하며 최대 하드 드라이브 크기는 9.4 * 1021바이트로, 실제로 9조 4천억 기가바이트 또는 9400000000000기가바이트입니다. 이제 이 제한이 해제될 때까지 잠시 휴식을 취하시기 바랍니다.
Extension for Interrupt 13H의 몇 가지 중요한 기능은 다음과 같습니다. INT 13H의 기능을 사용하는 것과 같은 방식으로 프로그래밍에서 이 기능을 사용할 수 있습니다. 이러한 기능을 INT 13H의 확장이라고 하는 이유이기도 합니다.
INT 13H Extensions:
INT 13H (0x13)
Function 1BH (0x1B or 27) --> Get Manufacturing Header (ESDI Fixed Disk)
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)
Function 1BH (0x1B or 27) --> Get Pointer to SCSI Disk Information Block (Future Domain SCSI Controller)
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)
Function 1CH (0x1C or 28) --> Get Pointer to 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는 컨트롤러가 있는 세그먼트를 포함합니다. 컨트롤러의 두 개의 메모리 매핑된 I/O 포트는 오프셋 1C00H 및 1E00H에 있습니다.
INT 13H (0x13)
Function 1C08H (0x1C08) --> Get Command Completion Status (ESDI Fixed Disk)
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)
Function 1C09H (0x1C09) --> Get Device Status (ESDI Fixed Disk)
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)
Function 1C0AH (0x1C0A) --> Get Device Configuration (ESDI Fixed Disk)
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)
Function 1C0BH (0x1C0B) --> Get Adapter Configuration (ESDI Fixed Disk)
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)
Function 1C0CH (0x1C0C) --> Get POS Information (ESDI Fixed Disk)
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:
이 기능은 어댑터 구성을 가져오는 데 사용됩니다. 기능이 성공하면 캐리 플래그가 지워지고 AH가 01H이고 실패하면 캐리 플래그가 설정되고 AH는 상태를 반환합니다.
INT 13H (0x13)
Function 1C0EH (0x1C0E) --> Translate RBA to ABA (ESDI Fixed Disk)
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)
Function 20H (0x20 or 32) --> Get Current Media Format (Compaq ATAPI Removable Media Device)
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)
Function 21H (0x21 or 33) --> Read Multiple Disk Sectors (PS and PS/2, Hard Disks)
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)
Function 22H (0x22 or 34) --> Write Multiple Disk Sectors (PS and PS/2, Hard Disks)
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)
Function 22H (0x22 or 34) --> Enable/Disable Cache (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)
Function 23H (0x23 or 35) --> Set Controller Features Register (PS and PS/2, Hard Disk)
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)
Function 24H (0x24 or 36) --> Set Multiple – Transfer Mode (Hard Disk, PS and 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)
Function 24H (0x24 or 36) --> Set Sectors (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)
Function 25H (0x25 or 37) --> Identify Drive (Hard Disk, PS and 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)
Function 25H (0x25 or 37) --> Set Flush Interval (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)
Function 26H (0x26 or 38) --> QuickCache II v4.20 Uninstall
Call with: AH = 26H
Return: If Function Successful,
AX = 0000H
If Function Unsuccessful,
AX = status
Comments:
AX는 다른 TSR에 의해 연결된 인터럽트 벡터에 대해 0001H에서 00FFH로 상태를 반환합니다.
INT 13H (0x13)
Function 27H (0x27 or 39) --> Installation Check (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는 0이 아닌 값을 반환합니다.
INT 13H (0x13)
Function 28H (0x28 or 40) --> Set Automatic Dismount (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)
Function 29H (0x29 or 41) --> No Operation (QuickCache II v4.20)
Call with: AH = 29H
Return: AX = 0000H
INT 13H (0x13)
Function 2AH (0x2A or 42) --> Set Buffer Size (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)
Function 2BH (0x2B or 43) --> Drive Access Sounds (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)
Function 2CH (0x2C or 44) --> Set Buffered Write (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)
Function 2DH (0x2D or 45) --> Set Buffered Read (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)
Function 2EH (0x2E or 46) --> Set Flush Count (QuickCache II v4.20)
Call with: AH = 2EH
BX = Flush count
Return: If Function Successful,
AX = 0000H
If Function Unsuccessful,
AX = Status
Comments:
Flush Count를 설정하는 기능입니다. 기능이 성공하면 AX는 0000H이고, 실패하면 AX가 상태를 반환합니다.
INT 13H (0x13)
Function 2FH (0x2F or 47) --> Force Immediate Incremental Flush (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)
Function 30H (0x30 or 48) --> Get Information (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)
Function 31H (0x31 or 49) --> Reserve Memory (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)
Function 32H (0x32 or 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)
Function 33H (0x33 or 51) --> Disable Caching For Specific Drive (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)
Function 34H (0x34 or 52) --> Lock/Unlock Sector(s) (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:
이 Function은 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)
Function 35H (0x35 or 53) --> Set Lock Pool Size (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)
Function 36H (0x36 or 54) --> Set Trace Buffer Size
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인 INT 13H의 함수 24H와 함께 호출됩니다.
INT 13H (0x13)
Function 37H (0x37 or 55) --> Set Buffered Reads For Specific Drive (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)
Function 38H (0x38 or 56) --> Set Buffered Writes for Specific Drive (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)
Function 39H (0x39 or 57) --> Set Read Buffer Size for Specific Drive (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)
Function 3AH (0x3A or 58) --> Set Write Buffer Size for Specific Drive (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)
Function 3DH (0x3D or 61) --> Enable/Disable Cylinder Flush for Drive (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)
Function 3EH (0x3E or 62) --> Set Single-Sector Bonus (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)
Function 3FH (0x3F or 63) --> Set Bonus Thrashold (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)
Function 41H (0x41 or 65) --> Installation Check (IBM/MS INT 13H Extensions)
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 INT 13H Extensions가 설치되어 지원되는지 여부를 확인합니다. 확장의 주요 버전에 대한 값은 다음 표에 나와 있습니다.
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)
Function 42H (0x42 or 66) --> Extended Read (IBM/MS INT 13H Extensions)
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)
Function 43H (0x43 or 67) --> Extended Write (IBM/MS INT 13H Extensions)
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)
Function 44H (0x44 or 68) --> Verify Sectors (IBM/MS INT 13H Extensions)
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)
Function 45H (0x45 or 69) --> Lock/Unlock Drive (IBM/MS INT 13H Extensions)
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)
Function 46H (0x46 or 70) --> Eject Media (IBM/MS INT 13H Extensions)
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)
Function 47H (0x47 or 71) --> Extended Seek (IBM/MS INT 13H Extensions)
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)
Function 48H (0x48 or 72) --> Get Drive Parameters (IBM/MS INT 13H Extensions)
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:
이 기능은 드라이브 매개변수를 가져오는 데 사용됩니다. 기능이 성공하면 캐리 플래그가 지워지고 채워진 버퍼의 DS:SI와 함께 AH 레지스터가 00H이면 캐리 플래그가 설정되고 AH는 오류 코드를 반환합니다.
INT 13H (0x13)
Function 49H (0x49 or 73) --> Extended Media Change (IBM/MS INT 13H Extensions)
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는 오류 코드를 반환합니다.
이 함수와 INT 13H의 함수 AH = 16H의 주요 차이점은 모든 드라이브 번호를 지정할 수 있다는 것입니다. 여기서 함수 16H는 플로피 디스크의 드라이브 번호 00H에서 7FH까지만 허용합니다.
INT 13H (0x13)
Function 4AH (0x4A or 74) --> Initiate disk Emulation (Bootable 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)
Function 4B00H (0x4B00) --> Terminate Disk Emulation (Bootable 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)
Function 4B01H (0x4B01) --> Get Status (Bootable 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)
Function 4CH (0x4C or 76) --> Initiate Disk Emulation and Boot (Bootable 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)
Function 4D00H (0x4D00) --> Return Boot Catalog (Bootable 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 레지스터는 상태 코드를 반환합니다. "Get Boot Catalog"의 부팅 가능한 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)
Function 4EH (0x4E or 78) --> Set Hardware Configuration (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)
Function 5001H (0x5001) --> Send Packet Command (Enhanced Disk Drive Spec 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는 오류 코드를 반환합니다. Enhanced Disk Drive Spec 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)
Function 5501H (0x5501) --> Inquiry (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 드라이브 이후에 드라이브를 매핑합니다. 이 명령은 SCSI Inquiry 명령과 동일합니다.
INT 13H (0x13)
Function 5502H (0x5502) --> Reserved (Seagate ST01/ST02)
INT 13H (0x13)
Function 5503H (0x5503) --> Set DTQ (Device Type Qualifier) (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)
Function 5504H (0x5504) --> Return Identification (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)
Function 5505H (0x5505) --> Park Heads (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)
Function 5506H (0x5506) --> SCSI Bus Parity (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)
Function 5507H (0x5507) To Function 550DH (0x550D) --> Reserved Functions (Seagate ST01/ST02)
Call with: AX = 5507H to AX = 550DH
Comments:
이 기능은 공식적으로 "예약됨"으로 나열되었습니다.
INT 13H (0x13)
Function A0H (0xA0 or 160) --> Get Resident Code Segment (Super PC-Kwik v3.20 and Later)
Call with: AH = A0H
SI = 4358H
Return:
AX = Segment of Resident Code
Comments:
이 함수는 상주 코드 세그먼트를 가져오는 데 사용됩니다. AX는 상주 코드의 세그먼트를 반환합니다.
INT 13H (0x13)
Function A1H (0xA1 or 161) --> Flush Cache (Super PC-Kwik v3.20 and Later)
Call with: AH = A1H
SI = 4358H
Return:
Carry Flag = Clear
AH = 00H (v5.10)
Comments:
함수는 캐시를 플러시하는 데 사용됩니다.
INT 13H (0x13)
Function A3H (0xA3 or 163) --> Disable Cache (Super PC- Kwik v3.20 and Later)
Call with: AH = A3H
SI = 4358H
Return:
Carry Flag = Clear
Comments:
기능은 캐시를 비활성화하는 데 사용됩니다.
INT 13H (0x13)
Function A4H (0xA4 or 164) --> Enable Cache (Super PC-Kwik v3.20 and Later)
Call with: AH = A4H
SI = 4358H
Return:
Carry Flag = Clear
Comments:
이 기능은 캐시를 활성화하는 데 사용됩니다.
INT 13H (0x13)
Function EEH (0xEE or 238) --> Set 1024-Cylinder Flag (SWBIOS)
Call with: AH = EEH
DL = Drive Number
Return:
Carry Flag = Clear
AH = 00H
Comments:
기능은 1024 – 실린더 플래그를 설정하는 데 사용됩니다. 플래그는 AH=EEH 및 AH=EFH를 제외한 모든 INT 13H 호출에 의해 지워집니다. 디스크 관리자는 이러한 호출도 지원합니다. 이 함수는 해당 호출을 지원하는 소프트웨어에 대해 CX=0400H와 함께 함수 AH=EFH를 호출하는 것과 같습니다.
이 기능은 1024개 이상의 실린더에 액세스하기 위해 SWBIOS를 사용하는 드라이브 캐싱을 허용하기 위해 HyperDisk v4.01 이상 및 PC-Cache v5.5 이상에서도 지원됩니다.
INT 13H (0x13)
Function EFH (0xEF or 239) --> Set Cylinder Offset (Ontrack Drive Rocket)
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를 제외하고 호출된 모든 INT 13H에 의해 0으로 재설정됩니다.
INT 13H (0x13)
Function F9H (0xF9 or 249) --> Installation Check (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가 구성 단어를 반환하고 그렇지 않으면 캐리 플래그가 설정됩니다.
비트 15는 다른 SWBIOS 확장을 사용할 수 있는 경우 설정됩니다. 디스크 관리자는 이러한 호출도 지원합니다.
INT 13H (0x13)
Function FEH (0xFE or 254) --> Get Extended Cylinder Count (SWBIOS)
Call with: AH = FEH
DL = Drive Number
Return:
Carry Flag = Clear
DX = Number of Cylinders beyond 1024
on drive
Comments:
이 함수는 확장된 실린더 수를 가져오는 데 사용됩니다. INT 13H의 AH = 08H 함수는 1024로 잘린 실린더 수를 반환합니다. 이 확장이 없는 BIOS는 카운트 모듈 1024를 반환합니다. 디스크 관리자도 이러한 호출을 지원합니다.
INT 13H (0x13)
Function FFH (0xFF or 255) --> Officially Private Function (IBM SurePath BIOS)
INT 13H (0x13)
Function FFFFH (0xFFFF) --> Set Turbo Mode (UNIQUE UX Turbo Utility)
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 프로그래밍에서 INT 13H 확장을 사용하는 방법
이전 장에서 사용한 것과 동일한 C 함수(int86(), int86x() 등)로 INT 13H의 확장 함수를 호출할 수 있습니다. 예를 들어 배워봅시다.
다음 예에서는 세 가지 기능(Check Extensions 존재, 확장 읽기 및 확장 쓰기)에 중점을 둡니다. 그러나 이 장에서는 확장 쓰기 기능을 사용하지 않습니다.
프로그램은 먼저 INT 13H에 대한 확장이 있는 경우 확장이 지원되는지 여부를 확인하고 디스크의 절대 섹터 0(따라서 MBR)을 읽습니다. 프로그램 코딩은 다음과 같은 방식으로 진행됩니다.
/* INT 13 BIOS 확장을 사용하여 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()
{
/* 이 함수에서 0x43이 되는 함수 번호를 제외하고는 read_sectors 함수와 같은 방식으로 작성됩니다. 다음 장에서 확장 쓰기 기능에 대해 논의할 것입니다.
이 기능을 사용하기 전에 무엇을 할 것인지 확인하고 확인하십시오. 당신은 당신이 무엇을 할 것인지에 대한 적절한 지식을 가지고 있어야 합니다. 지식이 부족하거나 부주의하게 이 기능을 사용하면 데이터가 손상될 수 있습니다. */
}
/// 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 char Byte와 같은 데이터 유형에 식별자를 할당합니다. 데이터 유형 char에 대한 식별자 Byte를 할당합니다. 마찬가지로 식별자 Word는 int에 할당되고 DWord는 long에 할당됩니다.
disk_packet 구조가 DS:SI에 로드되고 명령(예: 확장 읽기, 확장 쓰기 또는 확인)이 실행됩니다. 이전에 제공된 IBM/MS INT 13H Extensions(Function 41H에서 Function 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 함수와 동일하며 동일한 방식으로 작성되지만 다른 기능 옵션을 사용합니다. 다음 장에서 사용할 것입니다.
참고:
다음 두 가지 방법으로 디스크 섹터를 읽습니다.
- 상대 섹터 읽기(또는 쓰기)
- 절대 섹터 읽기(또는 쓰기)
상대 섹터 읽기에서는 디스크의 CHS(실린더, 헤드 및 섹터) 지오메트리에 따라 디스크 섹터를 읽습니다. 상대 섹터에서 디스크의 MBR(디스크의 첫 번째 섹터)은 실린더 0, 헤드 0 및 섹터 1에 있습니다.
디스크 섹터의 절대 읽기에서 프로그램의 실린더 또는 헤드 번호를 지정할 필요가 없습니다. 절대 섹터는 절대 섹터 0부터 계산됩니다.
따라서 디스크의 MBR(디스크의 첫 번째 섹터)을 읽으려는 경우 절대 섹터 0을 읽게 됩니다. 절대 섹터 번호를 해당 실린더, 헤드로 변환하는 것은 BIOS의 작업입니다. 및 섹터 번호.
절대 섹터 읽기(또는 쓰기)와 마찬가지로 전체 디스크 읽기 또는 쓰기와 같은 작업에서는 루프 내 절대 섹터만 계산해야 하지만 상대 섹터 읽기(또는 쓰기)의 경우에는 다음을 수행해야 합니다. CHS를 계산하기 위해 한 번에 세 개의 루프를 실행하므로 절대 섹터 읽기/쓰기가 상대 섹터 읽기/쓰기보다 훨씬 빠릅니다.
예를 들어, 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이며 파티션이 없으며 디스크에서 사용 가능한 섹터 수에 따라 계산됩니다.