На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Перед отправкой сообщения внимательно прочтите правила раздела!!!
1. Запрещается обсуждать написание вирусов, троянов и других вредоносных программ!
2. Помните, что у нас есть FAQ раздела Assembler и Полезные ссылки. Посмотрите, возможно, там уже имеется решение вашего вопроса.

3. Настоятельно рекомендуем обратить особое внимание на правила форума, которые нарушаются чаще всего:
  3.1. Заголовок темы должен кратко отражать её суть. Темы с заголовками типа "Срочно помогите!" или "Ассемблер" будут отправляться в Корзину для мусора.
  3.2. Исходники программ обязательно выделяйте тегами [code]...[/code] (одиночные инструкции можно не выделять).
  3.3. Нежелательно поднимать старые темы (не обновлявшиеся более года) без веской на то причины.

Не забывайте также про главные Правила форума!

Добро пожаловать и приятного вам общения!!! ;)
 
Модераторы: Jin X, Qraizer
  
> Винт
    Как узнать размер винта через порты.
      С постоянно периодичностью возникает этот вопрос.
      Вот тебе исходник, я там обкомментировался, разберешься:
      http://www.sources.ru/asm/devid32.shtml
      Работает под всё, только с NT есть некоторые ограничения.
      Там даже размер винта вычисляется, но только для Win32, для DOS меня ломало вставить
        Код конечно шороший, но непонятный. Зачем цилиндры надо было трогать?

        Сформулирую, точнее вопрос:
        В каком слове в паспорте винта хранится количество цилиндров?

        Только не говорите, что во втором. Это не верно.
          Не парься, скачай спецификацию IDE.

          Цитата
          Только не говорите, что во втором. Это не верно.


          Ну-у, наглые инсинуации!!! В той самой спецификации написано, что в первом слове (считая от нуля) содержится число цилиндров для нормальной конфигурации винта (NORMAL в Setup'e). Это случай когда количество секторов меньше 16515072 (опять же в соответствии со спецификацией).

          Текущие значения (wCurrCyls и т.д.) я трогать не стал...

          Я сделал, как сделал, но если ты найдешь случай, когда моя программа определяет ошибочно размер винта, я сниму шляпу.

          Вообще внимательней читай спецификацию, и непонятное станет понятным!
          В случае необходимости могу дать ссылку на спецификацию.
          Сообщение отредактировано: rivitna -
            Я тебя не понял. У меня в паспорте в первом слове(считая от нуля) число 0x3fff. У меня
            цилиндров больше(даже больше чем слово).

            Тут возникает ворос не по теме:

            Как работать с далекими цилиндрами, т.е. с теми которые дальше, чем 0xffff ?
              Может, у меня фефекты фикции?

              Буду цитировать спецификацию ATA-3, надеюсь, на ее высокий штиль изложения

              Цитата

              Word 1: Number of cylinders
              The number of user-addressable logical cylinders in the default translation mode. If the value in Words 60 and 61 exceed 16,515,072, this word shall 16,384.

              Word 3: Number of logical heads
              ... this word shall 16.

              Word 6: Number of logical sectors per logical track
              ... this word shall 63.


              По-моему, проще пареной репы.
              Поэтому я проверяю двойное слово (слова 60 и 61) меньше ли оно или равно 16515072? Если меньше или равно 0 (старые винты без поддержки LBA), я использую слова, указанные выше (слова 1, 3, 6), потому что они содержат корректные значения. Иначе, использую число секторов в LBA режиме (слова 60 и 61).
              И что может быть не понятным в этом?

              Насчет цилиндров больше 16383 (3FFFh), есть такой режим LBA, где все эти цилиндры превращаются в дополнительные головки.
              Есть текущие значения цилиндров, головок и секторов (слова 54, 55, 56).

              Еще раз повторяю, прочти спецификацию, чтоб я не парился, объясняя вещи, которые ты сам способен прочитать.
              Сообщение отредактировано: rivitna -
                Спасибо. Я просто не сразу понял тебя. Если не трудно дай сылку на специфекацию.
                  http://195.96.188.4/hardware/ata3.zip
                  http://195.96.188.4/hardware/ata4.zip
                  http://195.96.188.4/hardware/ata5.zip
                    Еще раз спасибо, вещь крутая.
                      А еще есть место http://www.t13.org, это комитет, занимающегося разработкой IDE. Там лежат все спецификации, вплоть до проектного ATA7.

                      2Brand: а как ты хочешь работать с далекими цилиндрами?
                        Ritchie смотри ATA6. Там нет далеких цилиндров, но есть 48-битное LBA, что позволяет работать с винтами более чем 32Gb.
                          Ну ты вообще-то про них, далеких, спрашивал, вот мне и стало интересно, зачем тебе  такое ;)
                            Да, и не 32 G, а 137,5.
                              Подскажите как оптимально скачать из буфера в оперативку n секторов.
                              1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
                              0 пользователей:


                              Рейтинг@Mail.ru
                              [ Script execution time: 0,0356 ]   [ 14 queries used ]   [ Generated: 17.05.24, 09:02 GMT ]