описание портов HDD [2/3]

ZXNet эхоконференция «real.speccy»

От Valerij Kozhevnikov (500:95/162. Кому All 07.04.1998


Hello, Roman!

Регистр ошибок #F6AF (in) определяет состояное HDD после
выполнения операции. Состояное этого регистра действительно:
- после выполнения команды, если установлен бит "Error" в ре-
гистре состояния.
- после выполнения команды "диагностика" или после выполнения
внутренней диагностики HDD по системному сбросу.

В диагностическом режиме коды регистра ошибок определяют
следующее:
#01 нет ошибки
#02 ошибка микроконтроллера
#03 ошибка буферного ОЗУ
#04 ошибка аппаратуры ECC
#05 ошибка микропроцессора
#8x готовь гроб, копай могилу нахрен.

Значения битов регистра ошибок после выполнения команды:

┌───────┬───────┬──────┬───────┬──────┬───────┬──────┬──────┐
│ 7 │ 6 │ 5 │ 4 │ 3 │ 2 │ 1 │ 0 │
├───────┼───────┼──────┼───────┼──────┼───────┼──────┼──────┤
│ BBK │ UNC │ 0 │ IDNF │ 0 │ ABRT │ T0NF │ AMNF │
└───────┴───────┴──────┴───────┴──────┴───────┴──────┴──────┘

bit 0 - Data Adress Mark Not Found
- устанавливается во время выполнения команды "чтение секто-
ра", если адресный маркер данных сектора не найден после пра-
вильного нахождения идентификатора этого сектора.

bit 1 - Track 0 Not Found
- устанавливается только в команде "рекалибровка", если после
2048 шагов не обнаружена дорожка 0.

bit 2 - Aborted Command
- устанавливается при получении из HDD состояния "Write fa-
ult", "Not seek complete", "Drive not ready" или когда была
загружена недействительная команда. Причина ошибки может быть
определена из регистров состояния и ошибки.

bit 3 - not used (=0)

bit 4 - ID Not Found
- требуемые цилиндр, головка, сектор не могут быть обнаружены
или же произошла ошибка ECC в поле идентификатора.

bit 5 - not used (=0)

bit 6 - Uncorrect Data
- ошибка ECC в поле данных. Устанавливается в случае некор-
ректируемой ошибки.

bit 7 - Bad Mark Block
- в идентификаторе обнаружена метка дефектного сектора.

Регистр предкомпенсации #F6AF (out) использовался для ука-
зания номера цилиндра с которого необходимо выполнить предком-
пенсацию. В современных моделях предкомпенсацией управляет сам
накопитель, поэтому данный регистр может использоваться для
других целей.

Регистр счетчика секторов #EEAF содержит количество секто-
ров для операций чтения/записи. Значение этого регистра
уменьшается на 1 при обработке каждого сектора. Передача 1
сектора происходит при значении 1, при значении 0 - 256 секто-
ров. Если при выполнении мультисекторной передачи произошла
ошибка записи или чтения очередного сектора, то передача прек-
ращается, и в регистре счетчика секторов находится кол-во сек-
торов, которое осталось после обнаружения ошибки. При успешном
завершении команды содержит 0.

Регистр номера сектора #E6AF содержит стартовый номер сек-
тора для операций чтения-записи. После обработки каждого сек-
тора содержимое инкрементируется. После завершения команды со-
держит номер последнего обработанного сектора или номер секто-
ра в котором произошла ошибка.

Регистры младшего #DEAF и старшего #D6AF байтов номера ци-
линдра определяют цилиндр, для которого будет выполняться дан-
ная команда.

Регистр накопителя/головки #CEAF (in/out) имеет вид:

┌───────┬───────┬──────┬───────┬──────┬───────┬──────┬──────┐
│ 7 │ 6 │ 5 │ 4 │ 3 │ 2 │ 1 │ 0 │
├───────┼───────┼──────┼───────┼──────┼───────┼──────┼──────┤
│ 1 │ 0 │ 1 │ DRV │ HS3 │ HS2 │ HS1 │ HS0 │
└───────┴───────┴──────┴───────┴──────┴───────┴──────┴──────┘

bit 0-3 - двоичный код выбранной головки
bit 4 - выбор HDD, 0 - накопитель 0
1 - накопитель 1
bit 5,6 - размер сектора:
00 резерв
01 резерв
10 512 байт/сектор.
11 резерв

bit 7 - резерв

Jason.

Powered by ScorpionZS256turbo+/SMUC/HDD'IDE130Mb/FDD'800/
/CMOS/Covox/ATkbd/Mouse/CDOS...