INT 13H: Дисковий ввід-вивід p>
Цей сервіс надає прямий доступ до адаптерам дискети і твердогодиска.
Рекомендується там, де це можливо, використовувати INT 25H і INT 26H (INT
25H/26H - пряма дискова операція читання/запису: p>
INT 25H читає сектори p>
INT 26H записує сектори), щоб надати драйверів пристроїв
DOS виконувати всю низькорівневий обробку. Зрозуміло, для таких операцій,як форматування диска або установка захисту від копіювання, переривання
INT 13H може виявитися єдиною альтернативою. P>
підфункції: p>
(підфункції> 8 - тільки для твердих дисків) p>
00H скидання контролера 0aH довге читання
01H дати статус 0bH довга запис
02H читати сектори 0cH шукати циліндр
03H писати сектори 0dH альтернативний скидання
04H верифікація
05H форматувати доріжку
08H дати параметри диска
09H ініціалізувати параметри диска
10H перевірити готовність
11H рекалібрація
14H діагностика
15H дати тип диска
16H змінити статус
17H встановити тип диска p>
AH Сервіс
___
____________________________________________________________________________ p>
00H Скидання пристрою. Викликає рекалібрацію контролера. P>
Якщо DL дорівнює 80H або 81H, виконаний скидання контролера твердого диска. P>
___
____________________________________________________________________________ p>
01H Дати статус помилки останньої операції. p>
Вхід: DL = диск. DL <80H = дискета; DL> 7FH = твердий диск p>
Вихід: AL містить код помилки диска (те ж, що значення за адресою
0:0441)
___
____________________________________________________________________________ p>
02H Читати сектори p>
Вхід: DL = номер диска (0 = диск A. ..; 80H = твердий диск 0; 81H = твердийдиск 1) p>
DH = номер головки читання/запису p>
CH = номер доріжки (циліндра) (0-n)? + p>
CL = номер сектора ( 1-n) ?------+- Див зауваження нижче. p>
AL = число секторів (у сумі не більше ніж один циліндр) p>
ES: BX => адреса буфера викликає програми p>
0:0078 => Таблиця параметрів дискети (для гнучких дисків) p>
0:0104 => Таблиця параметрів твердого диску (для твердих дисків) p> < p> Вихід: Carry-прапор = 1 при помилку і код помилки диска в AH. p>
ES: BX буфер містить дані, прочитані з диска p>
Зауваження: на сектор і циліндр відводиться відповідно 6 і 10біт: p>
1 1 1 1 1 1 p>
? 5 +4 +3 +2 +1 +0 +9 +8? 7 +6 +5 +4 +3 +2 +1 +0 +
CX: | cccccccc C c S sssss | p>
+-+-+-+-+-+-+-+-?-+-+-+-+- +-+-+-+ p>
+-+---? ісп. як старші біти номера циліндра p>
___
____________________________________________________________________________ p>
03H Писати сектори p>
Вхід: (аналогічно підфункції 02H) p>
ES: BX => дані, що записуються на диск. p>
Вихід: Carry-прапор = 1 при помилку і код помилки диска в AH.
___
____________________________________________________________________________ p>
04H Перевірити сектори. Перевіряє CRC для зазначених секторів на помилки. P>
Вхід: (аналогічно підфункції 02H. ES: BX краще також надати) p>
Вихід: Carry-прапор = 1 при помилку і код помилки диска в AH.
___
____________________________________________________________________________ p>
05H Форматувати доріжку. Дані на доріжці, якщо є, руйнуються. P>
Вхід: DL, DH, CH = диск, голівка, доріжка (див. подф. 02H) p>
ES: BX => дескриптори секторів (потрібно 512-байтовий буфер) дискета: 1 4-байтовий 'CHNS' (Циліндр, Головка, N сектора,
Розмір) для кожного сектора на доріжці (тобто 36 байт для 9-секторальнихдоріжок); номери секторів д.б.н. впорядковані. p>
'Z' - код розміру сектора: 0 = 128; 1 = 256; 2 = 512;
3 = 1024 p>
_AT_ Твердий диск: 1 2-байтовий 'FN' (Прапор, N сектору) для кожного сектора на доріжці. Послідовність полів 'N' визначає p>
"коефіцієнт прослаіванія" ( "interleave factor "). p>
_XT_ Твердий диск: ES: BX не використовується. Замість цього AL міститьзначення "прослаіванія" між 1 і 16 (10H). p>
Вихід: Carry-прапор = 1 при помилку і код помилки диска в AH. p>
(твердий диск: 'F'- поля встановлені в 80H, щоб позначити поганісектори)
___
____________________________________________________________________________ p>
08H _AT_ _XT_ Дати параметри диска. Повертає інформацію про пристрій. P>
Вхід: DL = диск p>
Вихід: DL = число тв. дисків на першому контролері p>
DH = максимальний номер головки p>
CH = максимальний номер циліндра (молодші 8 біт) p>
CL = максим. номер сектора (і старші біти макс. номерациліндра)
___
____________________________________________________________________________ p>
09H _AT_ ініціалізувати параметри диска. Повідомляє BIOS про будь -динамічному зміні таблиць параметрів пристрою. p>
Вхід: Вектори для INT 41H і INT 46H адресують Табл. параметрів тв.диска відповідно для пристроїв 0 і 1. p>
Зауваження: _XT_ повинен вказувати обидві таблиці через вектор INT 40H.
___
____________________________________________________________________________ p>
0aH _AT_ _XT_ Читання довге: 512 байт + 4-байтоий ECC (код корекціїпомилок). p>
Вхід: (як для подф. 02H) p>
Вихід: Carry-прапор = 1 при помилку і код помилки диска в AH. p>
ES : BX => у буфері (дані сектору + 4 байти) * число секторів
(з AL)
___
____________________________________________________________________________ p>
0bH _AT_ _XT_ Запис довга. Пише 512 байт + 4-байтовий ECC. P>
Вхід: (як для подф. 02H) p>
ES: BX => буфер містить дані сектору + 4 байти на коженсектор p>
Вихід: Carry-прапор = 1 при помилку і код помилки диска в AH.
___
____________________________________________________________________________ p>
0cH _AT_ _XT_ Шукати циліндр. Переміщення голівку до потрібної доріжці. P>
Вхід: DL, DH, CH = диск, голівка, доріжка (див. подф. 02H) p>
Вихід: Carry-прапор = 1 при помилці і код помилки диска в AH.
___
____________________________________________________________________________ p>
0dH _AT_ _XT_ Альтернативний скидання пристрою p>
Вхід: DL = диск
___
____________________________________________________________________________ p>
0eH _AT_ читати буфер секторів p>
Вхід: (як для подф. 02H) p>
Вихід: Carry-прапор = 1 при помилку і код помилки диска в AH.
___
____________________________________________________________________________ p>
0fH _AT_ писати буфер секторів p>
Вхід: (як для подф. 02H) p>
Вихід: Carry-прапор = 1 при помилку і код помилки диска в AH.
___
____________________________________________________________________________ p>
10H _AT_ _XT_ перевірити готовність пристрою p>
Вхід: DL = диск p>
Вихід: код помилки диска (статус) в AH.
___
____________________________________________________________________________ p>
11H _AT_ _XT_ Рекалібровать пристрій p>
Вхід: DL = диск p>
Вихід: код помилки диска (статус) в AH.
___
____________________________________________________________________________ p>
12H _AT_ Діагностика RAM контролера p>
Вихід: код помилки диска (статус) в AH.
___
____________________________________________________________________________ p>
13H _AT_ Діагностика пристрою p>
Вихід: код помилки диска (статус) в AH.
___
____________________________________________________________________________ p>
14H _AT_ _XT_ Внутрішня діагностика контролера p>
Вихід: код помилки диска (статус) в AH.
___
____________________________________________________________________________ p>
15H _AT_ Читати тип диска (недоступна в XT BIOS) p>
Вхід: DL = диск p>
Вихід: AH = код пристрою: p> < p> 0 = пристрій DL відсутній p>
1 = дискета; логіка заміни диску відсутній p>
2 = дискета; логіка заміни диску доступна (більшістьвипадків) p>
3 = твердий диск
___
____________________________________________________________________________ p>
16H _AT_ Читати статус заміни диску p>
Вихід: AH = код статусу: p>
0 = диск не був замінений p>
6 = заміна активна (відкрита дискова двері); p>
DL = номер якого замінюють диска
___
____________________________________________________________________________ p>
17H _AT_ встановити тип дискети (використовується перед операцієюформатування) p>
Вхід: DL = номер пристрою для диску (0 або 1) p>
AL = тип носія диска: p>
0 = не використовується p> < p> 1 = 360K дискета в 360K пристрої p>
2 = 360K дискета в 1.2M пристрої p>
3 = 1.2M дискета в 1.2M пристрої p>
КОДИ ПОМИЛОК ДИСКУ p>
INT 13H повертає Carry-прапор (CF = 1), якщо сталася помилка. При цьому врегістр
AH поміщається один з наведених нижче кодів помилок. Ці ж значення можутьбути повернуті при запиті стану диска (підфункції 00H). p>
Зауваження: при помилку рекомендується скидання підфункції 00H і повторити 3рази. p>
# Ош. Опис
____< br>__________________________________________________________________________< br> 00H остання операція виконана без помилок
01H погана команда: невірний запит до контролера
02H погана адресна марка
03H захист запису: спроба запису на захищену дискету
04H ID сектора запорчен або не знайдено .
05H помилка скидання - _AT_
08H збій DMA
09H перекриття DMA: спроба запису через 64K-байтове кордон.
0bH зустрівся прапор поганий доріжки - _AT_
10H збій CRC: розбіжність контрольної суми даних.
11H дані виправлені; поправна помилка; виправлено алгоритмом ECC -
_AT_
20H збій контролера
40H невдалий пошук. Запрошення доріжка не знайдено
80H Таймаут. Пристрій не відповіло
0bbH невизначена помилка - _AT_
0ffH збій операції опитування (sense) - _AT_ p>
Примітка. P>
_AT_ ...... позначає IBM AT або сумісний; базується на 80286 CPU p>
_XT_ ...... позначає XT (зазвичай посилається на відмінності в BIOS твердогодиска) p>
p>