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

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

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

Добро пожаловать и приятного вам общения!!! ;)
 
Модераторы: Jin X, Qraizer
Страницы: (51) « Первая ... 48 49 [50] 51   ( Перейти к последнему сообщению )  
> Желающим USB под ДОС , Welcome!!!
    Удалось убрать зависание при старте контроллера при отключенной мыше.
    Но параллельно появилась не понятка.

    читаю

    mov cx,0
    mov ax,0b108h
    mov di,0c1h
    int 1ah


    имеем cl=2F

    mov cl,0fh

    ;записываю
    mov ax,0b10bh
    int 1ah

    читаю заново
    в итоге cl =0Dh
    хотя я записывал 0Fh

    Посему вопросы:
    1) Правильно ли устанавливать значение 0fh по адресу 0С1h(или же корректно сбрасывать другие биты?)
    2) По какой причине установилось не 0fh, а 0Dh
    Сообщение отредактировано: Krom -
      Ты пишешь в C1, это старший байт. Там только индикаторы событий - что было такое-то прерывание. Записью 1 они сбрасываются, а потом контроллер их снова выставляет.
      Чтобы запретить SMI, надо писать нули в младший байт (C0). Я писал слово 9f00 по адресу C0 - сбрасывал индикаторы и одновременно запрещал SMI.
      Только возможно, что при этом у тебя все отрубится - и клава, и мышь. Это если на мамке нет настоящего контроллера PS/2, а его порты просто эмулируются.
      Сообщение отредактировано: zakharo -
        понял, спасибо.
          Цитата zakharo @
          Только возможно, что при этом у тебя все отрубится - и клава, и мышь.

          Это не то что возможно, это на 146% гарантировано!
          Сообщение отредактировано: shm -
            Оставил как есть. Клава с мышой не отрубались. Изучаю дальше. Спасибо.
              Цитата Krom @
              Оставил как есть.

              Зря.
                Как тихо все.. Давно никто не пишет.
                А вот я оживлю немного. Вопрос к знающим.
                Вдруг неожиданно столкнулся с проблемой. При определенных условиях флешки вдруг не полностью отвечают на команды SCSI. Ну, например, даю INQUIRY, ожидаю получить 36 байт, а получаю, например, 7. Потом получаю CSW, в котором честно указано, что остались непереданные байты (dCSWDataResidue=29). И нигде я не нашел, что дальше-то делать? Как дополучить эти недополученные байты? Эксперименты ничего не дали - на просто BulkIn флешка молчит (ну, без команды-то чего же ей отвечать), а на повтор команды присылает те же 7 байт.
                Конкретно "определенные условия" состоят в том, что флешку я подключаю через хаб. Вся инициализация проходит, а вот на первой же команде INQUIRY имею проблему. Причем дальнейшие операции проходят без проблем - чтение/запись секторов идут в лучшем виде.
                Короче, вопрос в следующем - если я получаю в CSW поле dCSWDataResidue, отличное от 0, то что делать? Как исполнить команду?
                  Кто знает, как полностью запретить SMI не под ОС, а через аппаратные порты/MMIO?
                  Оторвать SMI у живых EHCI можно, но этого недостаточно. Нужно чтобы UEFI BIOS никогда не получил управления.
                    Универсального способа нет, смотри документацию на чипсет. Более того, я не уверен, что на всех чипах это можно сделать.

                    Добавлено
                    ЗЫ: а зачем оно надо-то?
                      Жаль.

                      Цитата shm @
                      ЗЫ: а зачем оно надо-то?

                      Для точного определения времени выполнения отдельных участков программы (бесспорно, оффтопик). А именно, нужно для оптимизации вывода графики на экран. Значения от rdtsc заметно "гуляют" даже на одном ядре. Поднял остальные - будет ещё сложнее оценить результат.

                      Кроме того, непонятно как измерять время: порты 60h+ использует что-то, менее всего похожее на 8253 и 8242. С HPET не разбирался, но прерывания мне не нужны. Адекватные механизмы обнаружил на борту видеокарты от NVidia, но вообще-то не для того она. У чипсета должны быть часы получше RTC, вопрос как до них добраться?
                        Так HPET чем не угодил? Есть APIC таймер. Есть ACPI таймер. Есть просто PIT. А в общем и целом вывод графики программно, с помощью ЦП не сопоставимо медленнее, чем это делать через gpu.
                          PIT умер. Опорная частота APIC недокументирована (тот же rdtsc). Частота HPET читается в runtime. Можно обойти SMI, сливая периодические прерывания от HPET на программный счётчик, но точность его будет непредсказуема. А вот про ACPI таймер я ничего не знаю. Это часы? Поделитесь, пожалуйста, информацией или ссылкой.

                          Что же до графики, в общем Вы правы. В частности, я просто не умею, к примеру, шейдерами имитировать текстовые видеорежимы.
                            Цитата t0serg @
                            Опорная частота APIC недокументирована

                            У APIC нету никакой стандартной опорной частоты (если быть точнее, то его частота связана с частотой процессора). APIC Timer надо синхронизировать по другим часам.
                            Цитата t0serg @
                            Частота HPET читается в runtime

                            И что в этом плохого?
                            Цитата t0serg @
                            Можно обойти SMI, сливая периодические прерывания от HPET на программный счётчик, но точность его будет непредсказуема.

                            Ни черта не понял причем тут SMI.
                            Цитата t0serg @
                            А вот про ACPI таймер я ничего не знаю. Это часы?

                            Нет, это ACPI таймер. Спецификация ACPI есть в открытом доступе. Сам я этот таймер не юзал, так что советов не дам.

                            Добавлено
                            Цитата t0serg @
                            В частности, я просто не умею, к примеру, шейдерами имитировать текстовые видеорежимы.

                            Эт самое. Чтобы до шейдеров добраться нужно драйвер gpu делать, а там все проприетарно.
                            Сообщение отредактировано: shm -
                              Цитата shm @
                              Ни черта не понял причем тут SMI.
                              При обработке SMI аппаратный таймер будет тикать, отсчитывая физическое время, а программный приостановится, отражая искомое время выполнения прикладной задачи. Других причин глушить SMI у меня нет. Если я правильно понимаю, по SMI отрывается от работы лишь одно ядро, BSP.

                              Цитата shm @
                              Нет, это ACPI таймер.
                              Мне казалось что этот таймер доступен только коду управления питанием, в SMM. Может, я читал невнимательно.

                              Цитата shm @
                              Чтобы до шейдеров добраться нужно драйвер gpu делать, а там все проприетарно.
                              Вот и я о том. Хотя на графические ядра Intel документация вроде есть.
                                Цитата t0serg @
                                При обработке SMI аппаратный таймер будет тикать, отсчитывая физическое время, а программный приостановится, отражая искомое время выполнения прикладной задачи.

                                Не совсем понимаю, что подразумевается под "программный таймер". Но счетчик HPET продолжит нарастать и в SMM. Ну да, возможно конечно нехорошая ситуация вроде:
                                ExpandedWrap disabled
                                  old_time = getTimer();
                                  //тут код
                                  ...
                                  //тут генерируется SMI
                                  ...
                                  delta_time = getTimer() - old_time; //тут получим искаженное время, но тут уж никакой таймер не поможет.


                                Цитата t0serg @
                                Мне казалось что этот таймер доступен только коду управления питанием

                                Не могу сказать точно. Знаю только, что он есть и его используют. Сам его не юзал. Кстати, через ACPI можно отключить все SMI, которые связаны с APM.
                                Сообщение отредактировано: shm -
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:
                                Страницы: (51) « Первая ... 48 49 [50] 51 


                                Рейтинг@Mail.ru
                                [ Script execution time: 0,0761 ]   [ 16 queries used ]   [ Generated: 28.03.24, 12:46 GMT ]