Последний раз редактировалось Northwood; 27.05.2012 в 21:11.
С уважением, Александр
Вот тут кой чего писал:
http://zx-pk.ru/showpost.php?p=488218&postcount=29
так же могу дать готовый бинарник включающий в себя драйвер и fatfs
Последний раз редактировалось DimkaM; 13.07.2012 в 09:59.
Берите готовые процедуры из HDDoctor: http://alonecoder.nedopc.com/zx/HDDOCT12.rar
Сами вы времянки и обработку ошибок не отладите, если не попробуете десяток разных винтов. Или ваша программа не будет работать где-нибудь. Официальной документации по ATA/ATAPI недостаточно - там многие тонкости не описаны, тем более что она определяет работу устройств, а не компьютера.
Может кому пригодится, в доках по Спектруму найти этого не удалось, может плохо искал, а может этого и нету.
Полностью описывать регистры HDD не вижу смысла, предполагаю что люди, кто пытается освоить HDD, уже разобрались с инициализацией HDD и с адресацией к дисковому пространству по CHS, опишу лишь различия, необходимые для адресации по LBA, все номера портов буду приводить в соответствии с NemoIDE:
1) После успешной инициализации винчестера, сначала необходимо получить инфу о размере дискового пространства винчестера, подав команду "Identify Drive":
В результате из буфера секторов мы получим 512 байт данных, в которых среди кучи информации (в том числе и название фирмы, модели и прошивки HDD, а так же кроме кол-ва цилиндров, головок и секторов на дорожке по стандарту CHS) будет ещё 32-битное число - количество доступных блоков, т.е. секторов по 512 байт, при объеме HDD до 120 Гб, это число занимает до 28 бит. Грубо говоря, нас интересуют эти 4 байта, и находятся они по смещению #0078, #0079, #007A и #007B от начала блока данных, (если принять во внимание, что данные представлены в виде 2-байтовых слов, то это слово №60 и 61.
Далее, для того чтобы использовать режим LBA, необходимо при выборе привода включить бит LBA в регистре "Привод / Поверхность":
Регистр "Привод / Поверхность" (порт #D0):
- LBA - бит режима LBA. Если LBA=0, то выбран режим CHS,Код:7 6 5 4 3 2 1 0 ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐ │ 1 │ LBA │ 1 │ DRV │ HS3 │ HS2 │ HS1 │ HS0 │ └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘
если LBA=1, то выбран режим LBA.
- DRV - бит выбора накопителя. Если DRV=0, то выбран накопитель
0, если DRV=1, то выбран накопитель 1.
- HS3...HS0, в режиме CHS содержат двоичный код номера головки (начиная с ну-
ля), которая будет выбрана. Hапример, если HS3...HS0=0011b,
то будет выбрана головка 3. HS3 - старший бит. После заверше-
ния команды, этот регистр модифицируется и всегда содержит
текущий номер выбранной головки.
- HS3...HS0, в режиме LBA содержат первые 4 бита
самого старшего байта № 3 номера блока LBA, т.е. биты 24-27 указателя
блока LBA.
Байт №2 указателя блока LBA, т.е. биты 16-23, нужно отправлять в регистр "Цилиндр, старшая часть" (порт #B0)
Байт №1 указателя блока LBA, т.е. биты 8-15, нужно отправлять в регистр "Цилиндр, младшая часть" (порт #90)
Самый младший байт №0 указателя блока LBA, т.е. биты 0-7, нужно отправлять в регистр "Номер сектора" (порт #70).
Во всём остальном (коды команд чтения и записи, ожидание готовности, обработка ошибок) не отличается от чтения и записи в режиме CHS.
Последний раз редактировалось Northwood; 02.05.2013 в 13:02.
С уважением, Александр
С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
Максагор, NedoPC group
ПК ATM-turbo 2+ 1024Kb RAM, 1,7Gb HDD, CD-ROM, Turbo FM, GS-512
[ZX rulezzz 4reva!!!]
http://atmturbo.nedopc.com
http://vk.com/atmturbo
http://maksagor.livejournal.com
http://moskprf.ru
[СССР][Коммунизм][КПРФ] ну [ZX], естественно...
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)