Inferno #08
30 ноября 2005
  Софт  

Sofтинка - Описания и история изменений программы для работы с жестким диском HDDoctor v0.9.


Программное обеспечение Описание Дисковые утилиты

                 Изменения

0.9, 29.11.05: 
+для CD-ROM можно считать таблицу сессий,
если ввести номер цилиндра FFFF (точнее,
FFxx). Таблица в следующем виде:
 +0 2 длина таблицы в байтах (сначала 
     старший байт длины, потом младший)
+2 1 номер первой сессии 
 +3 1 номер последней сессии 
  далее для каждой сессии:
  +0 1 пусто
  +1 1 тип сессии
  +2 1 номер сессии
  +3 1 пусто
  +4 4 номер сектора начала сессии (сначала
      старший байт)
Команда работает либо со 2-го раза, либо
после чтения сектора с CD!

0.8 (thanx to Jason Frost, AnoNik, SMT): 
-команда #08 возвращена.
-значения Device control register для SMUC
исправлены.

0.7 (thanx to ZET-9, Kury): 
-команды #08 и #0C убраны, вместо них
сброс по Device control register.

0.6 (thanx to SMT, ZET-9, Budder): 
-команды #08 (сброс) и #0C (снятие сброса)
давались в обратном порядке.
-после инициализации не считывался
идентификационный сектор - команда #EC не
была завершена (было заметно только под
эмулятором!).
+можно посмотреть идентификационный пакет:
нажать Break после инициализации
устройства. Длина пакета 512 байт.

0.5 (big thanx to SMT!!!): 
*вводить "R" больше не надо.
-исправлена инициализация и чтение с CD.
+при выборе CD-ROM'а он полностью
сбрасывается - вам, наверно, знакома
ситуация, когда CD-ROM входит в непонятное
состояние, и ни одна программа его больше
не видит? Теперь такого не будет!
-исправлена длина сектора на CD (2k).
+можно задавать скорость CD (1x или 8x).
Диск больше не лопнет! Скорость
устанавливается после выполнения чтения
сектора. Заметите на слух.
+поскольку у многих на IDE-контроллер
заведён сигнал сброса от компьютера, а
другие ZX программы для CD не
устанавливают скорость (зато и не
сбрасывают CD-ROM), то предусмотрен выход
в TR-DOS по ssA ("STOP"), чтобы потом
запускать другие программы для CD (CD-Walk
или WDC).

0.4: 
+поддержан CD-ROM!!!
+операции чтения/записи можно прерывать
кнопкой Space.
+по ssS можно сохранить текущий сектор на
дискету, с именем файла типа Y1222233.0,
где Y - режим LBA, 1 - головка, 2222 -
цилиндр, 33 - сектор (в данном случае
1222233 - LBA-адрес), 0 - номер устройства
на шлейфе.
+по ssL можно загрузить такой файл с
дискеты. При этом имя файла проверяется на
соответствие, заносится в поля адреса
сектора (устройство выбирается, но не
инициализируется!), после чего сектор с
винта читается в буфер "старого сектора"
(для возможности частичного восстановления
по cs9, cs0 ), а файл с дискеты - в буфер
"нового сектора" (и теперь его легко можно
записать на винт кнопками csEnt ).
+ cs9 - восстановление информации из
буфера "старого сектора" вперёд (а cs0
было - назад).
* cs0 не зациклена ( cs9 тоже).
+при достижении границ сектора
предлагается загрузить следующий или
предыдущий сектор ( Break - отмена).
+на бордюр (или на поребрик - у кого как:)
выводятся ошибки:
 красный=операция прервана;
 белый=неверное имя файла.

0.3: 
-ошибка в cs0.
*сохранение не по ssS, а по csEnt.

                 Описание

   Обычный  дискдоктор, только на винте (и
CD-ROM'е).Секторы на винте 512-байтные (на
CD-ROM'е 2048-байтные). Из-за  разного ко─
личества  секторов  на  дорожке для разных
винтов я предпочёл реализовать загрузку по
одному сектору. (Винты быстрые,поэтому то─
рмозов в этом случае нет.) Координаты это─
го  сектора  вводятся  в столбике слева от
дампа  (при  запуске программы дамп ещё не
появился, он появится после успешного чте─
ния  сектора). По  кнопке  Enter параметры
принимаются - и происходит чтение.Про чте─
ние и редактирование см. ниже.

             Параметры такие:

DRV - номер устройства. 0=MASTER, 1=SLAVE. 
   Если  вводить что-то в поле этой цифры,
то выбранное устройство сразу проинициали─
зируется (по странному алгоритму,который я
позаимствовал у Дмитрия Авряты, а тот - из
драйвера  для iS-DOS ). Если инициализация
не  получается  (вясиииим...), то  кнопкой
Space процесс можно прервать. 

LBA - включен (Y)  или выключен (N)  режим 
адресации  LBA. (Для  CD-ROM'ов  тут выбор 
скорости: 1x или 8x .) 
   Нумерация  секторов в режиме LBA совер─
шенно другая.В обычном (устаревшем) режиме
(LBA=N) и сектор,и цилиндр,и головка - все 
имели свои границы изменения,о которых на─
писано  на  корпусе  винта и которые можно
было прочитать программным путём из дигно─
стической информации винта (иногда,правда,
эта  диагностическая  информация  сообщала
неправду). Сектора  нумеровались от 1, ци─
линдр и головка - от 0. При чтении больших
объёмов данных эти данные брались в поряд─
ке  возрастания  номеров секторов, а когда
эти  номера кончались, брали 1-й сектор на
следующей головке, а когда кончались голо─
вки, то переходили  к следующему цилиндру.
Пересчёт  абсолютного номера сектора в эти
три параметра довольно напряжный.
   А в режиме LBA=Y (сейчас по ATA станда─
рту  это  единственный разрешённый способ)
нужно  просто  указывать абсолютный номер.
Номер (от 0 до сколькототам) раскидывается
по регистрам сектора (туда летят младшие 8
бит), цилиндра  (туда летят биты 8..23 ) и
головки (биты 24..27 ).
   Для  особо крутых винтов, которые весят
больше  32G, предусмотрена  более  широкая
48-битная  адресация, идущая в два приёма.
То  есть, это она у них предусмотрена, а у
меня в программе  не предусмотрена. У меня
есть  такой винт, но я выключил перемычкой
этот режим, поскольку его не понимает даже
 мой пц :)
   (Почему  32G? Потому  что  пц больше 64
секторов  на дорожке тоже не понимает! Со─ 
ответственно, винтов с CHS адресацией шире 
64 секторов не выпускается. Разумеется,ло─ 
гические сектора не имеют никакого отноше─ 
ния к физическим, о количестве которых нам 
с вами никто ничего не скажет.) 

head - номер головки или старшие биты LBA. 

cyl - номер цилиндра  или средние биты LBA 
(а цилиндр старше головки! так что получа─ 
ется сикось-накось). 

sec - номер сектора или младшие биты LBA. 

   Все числа шестнадцатеричные.

   Итак, вы  проинициализировали свой винт
(DRV), ввели номер сектора и нажали Enter. 
Происходит чтение сектора. В исходнике мо─
жно выбрать режим чтения/записи:опрашивать
DRQ  перед  каждым байтом или только перед
всем сектором. Я собрал вам версию,в кото─
рой перед каждым. Кстати,порты в этой вер─
сии  по  схеме  Nemo. Чтобы выбрать другие
порты, лезьте в исходник, там их номера на
видном месте. Там ещё есть режим smuc=1, в
котором  порты  доступны  только в TR-DOS.
Информация  взята  из статьи Веги ("Абз@ц"
#21). 
   Чтобы собрать версию со своими настрой─
ками, сделайте,чтобы было debug=0. Вам по─
надобится автосборщик mrip*.H (он лежит на
каждом углу, например, есть в приложении к
IG#5 ). 
   Вот.Ваш винт,покуда шла речь,успел счи─
тать сектор,а программа показала на экране
половинку  этого сектора (переход к другой
половинке - PgUp/PgDn, а можно стрелками).
В левом поле - числами,в правом - буквами.
Переход  от  поля к полю - кнопкой Extend.
Ещё, как вы можете заметить,на экране выс─
ветились значения,считанные из двух важных
регистров устройства: STAT (регистр состо─
яния, в норме после успешной операции дол─
жен быть равен #50; или #52, если винт со─
общил об индексном отверстии - мой регуля─
рно сообщает) и ERR (регистр ошибки,в нор─
ме равен #00 ).

   Биты STAT такие:
D7 - BSY (занятость); 
D6 - DRDY (готовность); 
D5 - device fault (что-то вроде облома); 
D4 - когда-то означало, что найдена нужная 
дорожка, но  сейчас  уже значит непомнючто 
по поводу  параллельного выполнения команд 
(лучше наплюйте на этот бит); 
D3 - DRQ (запрос данных); 
D2,D1 - ныне не определены (раньше были:), 
в т.ч. упомянутое индексное отверстие); 
D0 - ERR (произошла ошибка). 

   Биты ERR такие (по "Абз@цу" ):
D7 - найден плохой заголовок сектора; 
D6 - ошибка в данных; 
D4 - сектор не найден; 
D2 - операция прервана, или вообще нет та─ 
кой операции; 
D1 - не найдена дорожка 0; 
D0 - не  найдена  какая-то белиберда после 
заголовка сектора. 

        А теперь поредактируем...

   В левом  поле  разрешено  сохранение на
винт (комбинацией csEnt ). В правом запре─
щено. Ещё в левом поле можно кнопкой L пе─
рейти  на выбор сектора (см. начало описа─
ния; Break - отмена выбора сектора). В ос─
тальном  управление  и там, и там особо не
различается. Когда что-нибудь вводите, из─
менения подсвечиваются.Когда стираете (cs0
или cs9 ), берётся старое значение байтов.

   ssQ и ssW (вспомним аласм и протрекер:)
сдвигают и раздвигают байты.
 

   Мой исходник ищите здесь же,я не жадный
:) Удобно на его базе ставить эксперименты 
с процедурами HDDRESET, READ и WRITE. 

Alone Coder 




Темы: Игры, Программное обеспечение, Пресса, Аппаратное обеспечение, Сеть, Демосцена, Люди, Программирование

Похожие статьи:
Softинка - обзор программ для тестирования дисководов, а также настройке магнитных головок дисководов.
Система - Обзор системных программ: копировщик Faster DiskCopyer v 2.0
Система - Обзор системных программ: копировщик Turbo Copier v 2. 0

В этот день...   18 ноября