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

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

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


Hello, Roman!

Привожу полное описание с мелкими сокращениями. Hабрано тут
не до конца, там еще есть перечень команд, формат паспорта,
назначение контактов разъема итд итп.
Схему кину наверно завтра, просто гдето потерялся список мик-
рух, резюков итд.
Если я где-то наглючил - спрашивай. Почти наверняка что-то
забыл или потерял.

AM - адресный маркер
КЦК - контрольно-циклический код
HOST - управляющий компьютер
ECC - код обнаружения ошибки
CRC - КЦК

Конструктивно контроллер содержит два девайса: контроллер
ОЗУ 512k и контроллер HDD. Hа той же платке есть еще контрол-
лер XT клавы, но он абсолютно независим и тут не описывается.

#FCAF (out) - управление конфигурацией контроллера.

bit 7,1
- старшие биты, формирующие номер видеостраницы выводимой в
режиме 640*200.

bit 0
- (=1) подключение порта конфигурации ОЗУ 512k.

bit 4
- (=1) блокировка reset-а порта конфигурации контроллера.

bit 5
- (=1) блокировка записи и чтения всех портов контроллера.

bit 6
- (=1) аппаратный reset HDD.

#FDAF (out) - порт конфигурации ОЗУ.
Полностью приводить не буду, но фактически можно иметь 4 не-
зависимых 128-х машины. То есть в любой из трех нижних сегмен-
тов может подставляться одна из четырех страниц, а с адреса
#C000 - любая из 32-х имеющихся.

┌─────────┬─────────────┐
│ Сегмент │ Страницы │
├─────────┼─────────────┤
│ #0000 │ 0,8,16,24 │
│ │ │
│ #4000 │ 5,13,21,29 │
│ │ │
│ #8000 │ 2,10,18,26 │
│ │ │
│ #C000 │ любая │
└─────────┴─────────────┘

Далее все про винт.
Сразу скажу: злоупотреблять програмными/аппаратными резетами
не стоит. Винт паркует головы и двигатель отрабатывает оста-
нов/разгон. Жизни ему это не прибавит.
Я вообще аппаратный ресет исключил: оторвал 1-й контакт от
шлейфа, и все О'К.

┌───────┬───────────────────────────┬─────────────────────────────┐
│ │ IN │ OUT │
╞═══════╪═══════════════════════════╪═════════════════════════════╡
│ #FDAF │ Регистр данных D8-D15 │ not used │
│ #FFAF │ not used │ Регистр данных D8-D15 │
│ #FEAF │ Регистр данных D0-D7 │ Регистр данных D0-D7 │
│ #F6AF │ Регистр ошибок │ Регистр предкомпенсации │
│ #EEAF │ Регистр счетчика секторов │ Регистр счетчика секторов │
│ #E6AF │ Регистр номера сектора │ Регистр номера сектора │
│ #DEAF │ Регистр номера цилиндра │ Регистр номера цилиндра │
│ │ (low) │ (low) │
│ #D6AF │ Регистр номера цилиндра │ Регистр номера цилиндра │
│ │ (high) │ (high) │
│ #CEAF │ Регистр накопителя/головки│ Регистр накопителя/головки │
│ #C6AF │ Регистр состояния │ Регистр команд │
├───────┼───────────────────────────┼─────────────────────────────┤
│ #CAAF │ Регистр альтернативного │ Управление состоянием нако- │
│ │ состояния │ пителя │
│ #C2AF │ Регистр адреса накопителя │ not used │
└───────┴───────────────────────────┴─────────────────────────────┘

Регистры данных #FDAF, #FEAF, #FFAF используются при вы-
полнении операций чтения/записи сектора в программном режиме
ввода-вывода. Регистр #FEAF недоступен, пока не начнется опе-
рация чтения или записи. Передача данных осуществляется 16 -
разрядными словами. При чтении из порта #FDAF считываются раз-
ряды D8-D15 регистра данных HDD. Для их корректного считывания
предварительно необходимо считать разряды D0-D7 (порт #FEAF)
регистра данных HDD.

* Такой способ передачи данных принят из-за того, что размер
слова для HDD IDE - 16 бит, а размер шины - 8 бит. Поэтому од-
но слово данных передается/принимается двумя командами IN/OUT.
Однако для ускорения операций ввода-вывода, адреса портов рас-
положены таким образом, что возможно использование команд INI-
/OUTI.

Hапример, чтение одного слова:

LD HL,BUFFER
LD BC,#FEAF
INI
INI

или запись:

LD HL,BUFFER
LD BC,#00AF
OUTI
OUTI

* Адрес #00AF взят из-за того, что команда OUTI делает DEC B
до пересылки в порт.

Jason.

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