User Tag List

Показано с 1 по 10 из 35

Тема: Программная поддержка двух IDE-устройств на одном шлейфе (?)

Комбинированный просмотр

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1

    Регистрация
    04.05.2006
    Адрес
    St.-Petersburg
    Сообщений
    2,235
    Спасибо Благодарностей отдано 
    490
    Спасибо Благодарностей получено 
    994
    Поблагодарили
    642 сообщений
    Mentioned
    6 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Тема с не полностью вычитанным сектором из буфера HDD возымела небольшое продолжение. На тест-драйве, при копировании кучи файлов, посреди процесса случился затык - типа ошибка чтения очередного файла. Повтор считывания прошёл успешно. Далее ещё несколько таких затыков (первый раз ошибка, повтор успешно). Далее замечаю, что эффект 100% стабилен, т.е. в одних и тех же местах. Более того, в другом подкаталоге на том же наборе файлов ровно то же самое. Причём, что характерно, эффект проявляется только на конкретной модели винчестера: Фуджик МПЕ3102АТ с микропрограммой версии 0028. На Фуджике МПЕ3084АЕ высечь эффект не удалось.
    Расследование показало, что после чтения "проблемного" файла, первым сектором на следующем запросе читается "мусор", причём этот мусор представляет собой содержимое сектора, следующего за последним "проблемного" файла. Хотя команды чтения этого сектора в принципе не поступает. Вероятно, это механизм look-ahead чтения "на всякий пожарный". А вот почему его результат "винт" отдаёт по следующему запросу - х/з, видать особенность (или бага?) конкретной микропрограммы.
    Фиг с ним, начал думать как побороть. Первая мысля была - после неполного чтения последнего сектора выдать не NOP, а команду рекалибровки (переход на 0-ю дорожку), она-то уж точно должна всё сбросить. Не прокатило! Головки щёлкают в начало, но предиктивный мусор "винт" по-прежнему отдаёт на следующем запросе.
    Как ни странно, помогла прерванная команда "Чтение буфера". Хотя странно, ведь по факту я ничего не читаю, разумеется. Тем не менее, факт: ReadBuffer + NOP решили вопрос. По скорости это быстрее холостого вычитывания ненужного остатка сектора, и по объёму кода меньше.
    Вот такие костыли
    Критиковать - значит объяснять автору, что он делает не так, как делал бы я, если бы умел

  2. #1
    С любовью к вам, Yandex.Direct
    Размещение рекламы на форуме способствует его дальнейшему развитию

  3. #2
    HardWareMan
    Гость

    По умолчанию

    Цитата Сообщение от Denn Посмотреть сообщение
    ... и по объёму кода меньше.
    Т.е., выдавать +2 команды АТА это меньше простого увеличения счетчика чтения байтов данных?

  4. #3

    Регистрация
    04.05.2006
    Адрес
    St.-Petersburg
    Сообщений
    2,235
    Спасибо Благодарностей отдано 
    490
    Спасибо Благодарностей получено 
    994
    Поблагодарили
    642 сообщений
    Mentioned
    6 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от HardWareMan Посмотреть сообщение
    Т.е., выдавать +2 команды АТА это меньше простого увеличения счетчика чтения байтов данных?
    Мне нужно закончить полезный цикл переноса данных из хдд в ОЗУ и начать отдельный бесполезный цикл холостого вычитывания. При этом ещё добавится код вычисления значения счётчика этих бесполезных байтов, т.к. у меня есть только счётчик полезных, который получен ранее исходя из длины файла. Понятное дело, что это будет 512 минус хвостик, но это вычитание двухбайтовых чисел, т.е. далеко не одна команда. Ещё же нужно обработать ситуацию, когда хвостик равен полному размеру сектора. Можно наоборот увеличивать хвостик и ждать равенства значению 512, но это тоже дофига кода.
    А так всего 9 байт на костыли - дёшево и, главное, быстро
    Последний раз редактировалось Denn; 26.03.2018 в 17:23.
    Критиковать - значит объяснять автору, что он делает не так, как делал бы я, если бы умел

  5. #4
    HardWareMan
    Гость

    По умолчанию

    Denn, т.е. вариант с отсечением сохранения данных при выходе за пределы размера в том же цикле не учитывается? Ну да ладно, не мой проект, не мне и решать, как писать код.

  6. #5

    Регистрация
    04.05.2006
    Адрес
    St.-Petersburg
    Сообщений
    2,235
    Спасибо Благодарностей отдано 
    490
    Спасибо Благодарностей получено 
    994
    Поблагодарили
    642 сообщений
    Mentioned
    6 Post(s)
    Tagged
    0 Thread(s)

    Arrow

    Цитата Сообщение от HardWareMan Посмотреть сообщение
    Denn, т.е. вариант с отсечением сохранения данных при выходе за пределы размера в том же цикле не учитывается?
    Это получается, что в цикле нужно делать две проверки (работать будет медленнее). А по фатку проверки будет четыре, т.к. байты вычитываются из двух разных портов по очереди (тобишь объём кода ощутимо возрастёт). Одни минусы.

    Вот причинный участок кода:
    Код:
    LDHDAT6:
    IN PT_IDE_DATL
    MOV C,A
    MOV A,B
    CALL SVBYTE
    INX H
    DCX D
    MOV A,D
    ORA E
    JZ LDHDAT7
    IN PT_IDE_DATH
    MOV C,A
    MOV A,B
    CALL SVBYTE
    INX H
    DCX D
    MOV A,D
    ORA E
    JNZ LDHDAT6
    
    LDHDAT7:
    ; ПРИНУДИТЕЛЬНОЕ ЗАВЕРШЕНИЕ ОПЕРАЦИИ
    MVI A,0E4h
    CALL SetCMD
    XRA A
    CALL SetCMD
    XRA A
    RET
    В [HL] адрес в ОЗУ куда складываем байты, в [B] номер страницы ОЗУ, в [DE] длина хвоста, регистр [C] используется для передачи записываемого байта процедуре записи в произвольную банку.
    Последний раз редактировалось Denn; 27.03.2018 в 14:07.
    Критиковать - значит объяснять автору, что он делает не так, как делал бы я, если бы умел

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Программная модель Intel 8080/КР580ВМ80А
    от svofski в разделе Эмуляторы отечественных компьютеров
    Ответов: 6
    Последнее: 18.08.2016, 00:24
  2. Ответов: 3
    Последнее: 29.05.2013, 18:03
  3. Два Slave-IDE на одном шнуре
    от Максагор в разделе Внешние накопители
    Ответов: 4
    Последнее: 31.01.2012, 18:00
  4. Программная документация.
    от fk0 в разделе Программирование
    Ответов: 7
    Последнее: 19.01.2006, 16:53

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •