Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Floppy Disk Controller

555
25 декабря 2001 года
AcidJAM
25 / / 20.05.2000
Пиплы !!!
Если кто знает что-нить по стандартам для флопика 3.5" то плз, замыль
мне их, а то у меня контроллер все выдает что не найдена адресная
метка сектора и все тут, и еще хотя я задаю неДМА режим при чтении
в регистре состояния он показывает ДМА - странно да ?

Вот нужные стандарты
Для команды specify (задание параметров накопителя)

SRT - Step Rate Time (Время шага), HUT - Head Unload Time (Время отвода головки после операции чтениязаписи), HLT - Head Load Time
(Время между подводом головки к поверхности и началом чтения)

Для команды чтения
Track Length - последний сектор на дорожке (18? 63?)
GAP - межсекторный промежуток (0x1B для 1.44 ?)

Или кто знает или делал чтение с флопа через
порты а не через ДМА - киньте примеры или доки плз!!!


Best regardz from JAM

mailto [EMAIL]jamk@mail.ru[/EMAIL]

[ Это Сообщение было отредактировано AcidJAM в 2001-12-25 0805 ]
461
07 февраля 2002 года
gerard
102 / / 20.12.1999
Команды и данные в контроллер передаются через порт 3F5h (он так и называется - регистр команд/данных). При этом после отправки очередного байта нужно проверять бит 7 порта 3F4h (регистр состояния) - если он равен 1, то контроллер готов к приему следующего байта.

Для команды specify передаются следующие байты:
1) 03h - код команды specify
2) первый байт параметров:
биты 0-3 - HUT в единицах по 16 мс
биты 4-7 - SRT в единицах по 1 мс, причем В ОБРАТНОМ КОДЕ (F - 1 мс, E - 2 мс и т.д.)
3) второй байт параметров:
бит 0 - ND (1, если режим не-DMA)
биты 1-7 - HLT в единицах по 2 мс

Единицы измерения HUT, SRT и HLT связаны с тактовой частотой контроллера. Приведенные выше значения даны для частоты 8 МГц. Для другой частоты они изменятся пропорционально (чем меньше частота, тем длиннее единичный интервал).

Для команд чтения/записи/сравнения передаются следующие байты:

1) Код команды
биты 0-4 - собственно тип операции
02h - чтение дорожки
05h - запись данных
06h - чтение данных
09h - запись удаленных данных
0Ch - чтение удаленных данных
11h - сравнение на равно
19h - сравнение на меньше или равно
1Dh - сравнение на больше или равно
бит 5 - если он равен 0, то удаленный сектор считается последним в цилиндре, если 1, то удаленные сектора просто пропускаются
бит 6 - плотность (0 - SD, 1 - DD и HD)
бит 7 - многодорожечный режим (последним сектором будет последний сектор стороны 1). Таким образом, например, код 06h - чтение с SD-дискеты, код 46h - чтение с DD-дискеты,
26h и 66h - то же самое, пропуская удаленные сектора, 86h и C6h - то же, но читая обе стороны дискеты
2) номер привода (биты 0,1) и головки (бит 2)
3) номер цилиндра (то есть дорожки)
4) номер стороны
5) номер сектора
6) код размера сектора (0 - 128 байт, 1 - 256 байт, 2 - 512 байт и т.д.)
7) номер последнего сектора на дорожке (8 или 9 для SD, 15 для DD и HD)
межсекторный промежуток GAP, зависящий от размера сектора и плотности дискеты:
Размер SD DD
128 07h -
256 0Eh 0Eh
512 1Bh 1Bh
1024 47h 3Fh
2048 C8h 99h
4096 C8h C8h
9) байт DTL, содержащий число байт, которое нужно обработать в 128-байтном секторе (все байты сверх этого числа будут пропущены). Для секторов больше 128 байт он игнорируется.

Затем нужно последовательно читать байты из регистра данных (команды чтения) или записывать их в регистр данных (команды записи/удаления). Когда будут переданы все байты, бит 5 регистра состояния примет значение 0. После этого нужно считать из регистра данных 8 байт результата:
1) регистр состояния ST0
биты 0,1 - номер привода
бит 2 - номер головки
бит 3 - привод не готов
бит 4 - ошибка поиска 0 дорожки
бит 5 - конец позиционирования
биты 6,7 - код завершения
0 - нормально, 1 - ошибка, 2 - недопустимый код команды, 3 - сброс готовности привода
2) регистр состояния ST1
бит 0 - ошибка поиска адресного маркера
бит 1 - попытка записи на защищенный диск
бит 2 - сектор не найден
бит 3 - всегда 0
бит 4 - таймаут при передача данных
бит 5 - ошибка контрольной суммы
бит 6 - всегда 0
бит 7 - попытка перехода через границу цилиндра
3) регистр состояния ST2
бит 0 - ошибка поиска адресного маркера
бит 1 - плохой цилиндр
бит 2 - не найден сектор при операции сравнения
бит 3 - "равно" при операции сравнения
бит 4 - ошибка адреса цилиндра
бит 5 - ошибка контрольной суммы
бит 6 - чтение сектора удаленных данных
бит 7 - всегда 0
4) регистр состояния ST3
биты 0,1 - номер привода
бит 2 - номер головки
бит 3 - двухсторонний диск
бит 4 - нулевая дорожка
бит 5 - готовность привода
бит 6 - защита записи на диск
бит 7 - ошибка привода
5) номер цилиндра
6) номер стороны
7) номер сектора
код размера сектора

Первые 4 байта позволяют определить причину завершения операции, остальные четыре - на каком секторе она завершилась
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог