Может кому пригодится, в доках по Спектруму найти этого не удалось, может плохо искал, а может этого и нету.
Полностью описывать регистры 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.




Ответить с цитированием