Author |
Message |
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22735 Location: Silicon Valley
|
Стал подробнее разбираться с IDE/ATAPI
http://www.retroleum.co.uk/ide_interface.html
Как видим не смотря на то, что интерфейс 16-битный, старшие 8 бит используются только по адресу 0, адрес сектора разбит на 4 однобайтовые части и второй набор адресов (/CS1=0) по сути может и не использоваться - отсюда идея: замапить эти адреса не в область портов, а в область памяти! Причём мапить только младший байт у всех адресов кроме 0 - для которого старшую часть замапить на адрес 1, сдвинув "Read: Error code" на адрес 2 при чтении (при записи оно всё также будет "Number Of Sectors To Transfer").
При чтении данных в IDE интерфейс будет выдаваться строб чтения только при обращении к адресу 0, а адрес 1 будет читать содержимое промежуточного регистра, записанного на предыдущем шаге.
При записи данных в IDE интерфейс будет выдаваться строб записи только при обращении к адресу 1, а адрес 0 будет записывать промежуточный регистр, значение которого будет использоваться при записи в адрес 1.
Для всех остальных адресов стробы чтения и записи будут непосредственно браться с шины.
Last edited by Shaos on 11 Jul 2013 05:34, edited 1 time in total.
|
11 Jul 2013 04:10 |
|
|
HardWareMan
Banned
Joined: 20 Mar 2005 13:41 Posts: 2141 Location: От туда
|
Здесь применена хитрая мысль инженеров интела. У винта IDE все регистры 8 бит. И только регистр данных 16 бит. И весь прикол состоит в том, что на ISA есть отдельный сигнал CS16, который сигнализирует об 16ти битном обмене. И этот сигнал декодируется полностью из ног состояния процессора, поэтому контроллер IDE на винте, получив этот сигнал, выставляет полные 16 бит данных при обращении к регистру данных, выключая регистр кода ошибки, который по всем правилам адресации должен был всплыть в пару к порту данных. А второй чипсет - это декодирование ячейки 3x6H-3x7H. 3x6H это альтернативное состояние и управление устройством, а 3х7H не используется. Но я не помню, чтобы я их использовал.
|
11 Jul 2013 04:45 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22735 Location: Silicon Valley
|
Вот тут про старшие регистры написано следующее:
т.е. на них смело можно забить...
P.S. Прямая работа с LBA даёт возможность общаться с дисками размером до 128 гигабайт (137.4 если в степенях десятки) - все IDE-винты начиная с 1996 года обязаны уметь LBA).
P.P.S. Для более больших винтов есть 48-bit LBA, но оно мне пока непонятно...
|
11 Jul 2013 05:03 |
|
|
pfgx
Senior
Joined: 20 Mar 2013 03:36 Posts: 137 Location: Ростов-на-Дону
|
|
11 Jul 2013 07:17 |
|
|
He3HauKo
Senior
Joined: 09 Aug 2012 11:20 Posts: 176 Location: 95.135.174.189
|
ОФФТОП!
Вот кто бы S.M.A.R.T спецификацию хотя на русский перевел!?
_________________Хочу стать всезнайкой
|
11 Jul 2013 12:07 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22735 Location: Silicon Valley
|
Вот это чтоли?
Судя по всему люди просто придумали как по статистике ошибок предсказывать момент, когда хард-драйв должен быть заменён пока он совсем не грохнулся - в случае частных лиц, у которых хард-драйвов меньше десятка, оно не поможет ибо статистика основывается на больших количествах
|
11 Jul 2013 12:33 |
|
|
He3HauKo
Senior
Joined: 09 Aug 2012 11:20 Posts: 176 Location: 95.135.174.189
|
Прошу прощения!
Немножко ошибся, имелось виду команды управления винчестером такие как: пароль, установка уровня шума, остановка шпинделя и тд.
Вот здесь есть описание стандартов ATA, неплохо заиметь на Русском, хотя бы описание ATA-1
_________________Хочу стать всезнайкой
|
11 Jul 2013 12:47 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22735 Location: Silicon Valley
|
Вычитал, что в регистр 1 можно таки писать - при записи оно называется "Features", но не все драйвы это поддерживают (причём одна из фичей - включение 8-битного обмена)...
Можно прикинуть выгоду от расположения ATA-регистров в области памяти, а не портов. Скажем в случае портов побайтное копирование сектора на ассемблере 8080 выглядело бы так:
При этом скорость копирования будет 68 такта на слово или 34 такта на байт - для 2.5 МГц это 73 КБ в секунду (если развернуть цикл, то скорость будет выше - 22 такта на байт или 113 КБ в секунду). Теперь прикинем расположение в памяти (слово отдаётся побайтно): Как видим получается на 6 тактов больше - 74 такта на слово или 37 тактов на байт - 67 КБ в секунду (при развёрнутом цикле 25 тактов на байт или 100 КБ в секунду). Теперь пересылка словами: Получается 74 такта на слово - много (также как и отдельными половинками). Попробуем развернуть цикл:
Выходит 32 такта на слово или 16 тактов на байт - 152 килобайта в секунду при тактовой 2.5 МГц
P.S. Тот же трюк для побайтовых посылок будет длиннее:
LDA buffer ; 13
STA R0L ; 13
LDA buffer+1 ; 13
STA R0H ; 13
т.е. 26 тактов на байт или 20 тактов на байт в случае посылки в порт (OUT на 3 такта быстрее чем STA).
P.P.S. Если же наш буфер будет идти задом-наперёд, то можно сделать ещё быстрее - через стек:
LXI SP,buffer+512
PUSH H ; 11
SHLD R0 ; 16
PUSH H
SHLD R0
...
т.е. 27 тактов на слово или 13.5 тактов на байт - 180 КБ в секунду при 2.5 МГц
P.P.P.S. Буржуйский DivIDE обещает пиковую скорость 218 КБ в секунду на Z80 с 3.5 МГц через INI/OUTI - в нашем случае с развёрнутым циклом такты будут теже что и на 8080 - т.е. 16 тактов на байт что по сути тоже самое (218750 байтов в секунду), но через стек будет ещё быстрее - 259259 байтов в секунду!
Last edited by Shaos on 11 Jul 2013 15:28, edited 3 times in total.
|
11 Jul 2013 14:32 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22735 Location: Silicon Valley
|
Учись читать по английски
А вообще спектрумисты уже вдоль и поперёк всё по русски пообсуждали в разных спековских изданиях
|
11 Jul 2013 14:33 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22735 Location: Silicon Valley
|
А теперь можно прикинуть как нам преобразовать адреса так, чтобы всё заработало как хотелось:
Для нулевого регистра вёздочкой обозначено когда оно не будет обращаться к IDE интерфейсу, а будет записывать вспомогательные регистры - один на выход по адресу 0 и второй на вход по адресу 1 (при этом обязательно сначала работать с младшим байтом, а потом со старшим).
|
11 Jul 2013 18:19 |
|
|
HardWareMan
Banned
Joined: 20 Mar 2005 13:41 Posts: 2141 Location: От туда
|
Я вас умоляю. Вот вам ATA6 (не весь, правда, но большинство что нужно) и книжка, которая есть у меня в бумажном виде: Программирование дисковых подсистем. Про нее я уже тут говорил, она, как говориться "маст хэв". К ней диск идет, если интересно, могу подкинуть тоже.
|
11 Jul 2013 18:37 |
|
|
MC68k
Retired
Joined: 25 Jul 2011 00:14 Posts: 1331 Location: WWW
|
|
12 Jul 2013 01:41 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
А никто не пробовал поиграться вот с такой штукой - IDE2LPT ?
Она как бы известна давно, и ПО её постепенно развивалось...
Сам я не рискнул делать, поскольку пока была необходимость в такой штуке -
с ней пришлось бы таскать отдельный блок питания и драйвер...
А потом уже с ЮСБ-интерфейсом внешние жесткие диски появились.
Но конструкция всё-равно кажется интересной...
_________________ iLavr
|
12 Jul 2013 04:02 |
|
|
vinxru
Retired
Joined: 27 Mar 2013 04:55 Posts: 587 Location: 62.192.229.16
|
Друзья собирали, работало.
|
12 Jul 2013 04:07 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22735 Location: Silicon Valley
|
У меня валяется промышленный LPT2IDE в корпусе куда винт втыкается - с драйверами под дос
Я на нём винт для Спринтера готовил в 2004 году...
|
12 Jul 2013 05:44 |
|
|