Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.117.184.189] |
|
Страницы: (51) « Первая ... 48 49 [50] 51 ( Перейти к последнему сообщению ) |
Сообщ.
#736
,
|
|
|
Удалось убрать зависание при старте контроллера при отключенной мыше.
Но параллельно появилась не понятка. читаю 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 |
Сообщ.
#737
,
|
|
|
Ты пишешь в C1, это старший байт. Там только индикаторы событий - что было такое-то прерывание. Записью 1 они сбрасываются, а потом контроллер их снова выставляет.
Чтобы запретить SMI, надо писать нули в младший байт (C0). Я писал слово 9f00 по адресу C0 - сбрасывал индикаторы и одновременно запрещал SMI. Только возможно, что при этом у тебя все отрубится - и клава, и мышь. Это если на мамке нет настоящего контроллера PS/2, а его порты просто эмулируются. |
Сообщ.
#738
,
|
|
|
понял, спасибо.
|
Сообщ.
#739
,
|
|
|
Цитата zakharo @ Только возможно, что при этом у тебя все отрубится - и клава, и мышь. Это не то что возможно, это на 146% гарантировано! |
Сообщ.
#740
,
|
|
|
Оставил как есть. Клава с мышой не отрубались. Изучаю дальше. Спасибо.
|
Сообщ.
#741
,
|
|
|
Цитата Krom @ Оставил как есть. Зря. |
Сообщ.
#742
,
|
|
|
Как тихо все.. Давно никто не пишет.
А вот я оживлю немного. Вопрос к знающим. Вдруг неожиданно столкнулся с проблемой. При определенных условиях флешки вдруг не полностью отвечают на команды SCSI. Ну, например, даю INQUIRY, ожидаю получить 36 байт, а получаю, например, 7. Потом получаю CSW, в котором честно указано, что остались непереданные байты (dCSWDataResidue=29). И нигде я не нашел, что дальше-то делать? Как дополучить эти недополученные байты? Эксперименты ничего не дали - на просто BulkIn флешка молчит (ну, без команды-то чего же ей отвечать), а на повтор команды присылает те же 7 байт. Конкретно "определенные условия" состоят в том, что флешку я подключаю через хаб. Вся инициализация проходит, а вот на первой же команде INQUIRY имею проблему. Причем дальнейшие операции проходят без проблем - чтение/запись секторов идут в лучшем виде. Короче, вопрос в следующем - если я получаю в CSW поле dCSWDataResidue, отличное от 0, то что делать? Как исполнить команду? |
Сообщ.
#743
,
|
|
|
Кто знает, как полностью запретить SMI не под ОС, а через аппаратные порты/MMIO?
Оторвать SMI у живых EHCI можно, но этого недостаточно. Нужно чтобы UEFI BIOS никогда не получил управления. |
Сообщ.
#744
,
|
|
|
Универсального способа нет, смотри документацию на чипсет. Более того, я не уверен, что на всех чипах это можно сделать.
Добавлено ЗЫ: а зачем оно надо-то? |
Сообщ.
#745
,
|
|
|
Жаль.
Цитата shm @ ЗЫ: а зачем оно надо-то? Для точного определения времени выполнения отдельных участков программы (бесспорно, оффтопик). А именно, нужно для оптимизации вывода графики на экран. Значения от rdtsc заметно "гуляют" даже на одном ядре. Поднял остальные - будет ещё сложнее оценить результат. Кроме того, непонятно как измерять время: порты 60h+ использует что-то, менее всего похожее на 8253 и 8242. С HPET не разбирался, но прерывания мне не нужны. Адекватные механизмы обнаружил на борту видеокарты от NVidia, но вообще-то не для того она. У чипсета должны быть часы получше RTC, вопрос как до них добраться? |
Сообщ.
#746
,
|
|
|
Так HPET чем не угодил? Есть APIC таймер. Есть ACPI таймер. Есть просто PIT. А в общем и целом вывод графики программно, с помощью ЦП не сопоставимо медленнее, чем это делать через gpu.
|
Сообщ.
#747
,
|
|
|
PIT умер. Опорная частота APIC недокументирована (тот же rdtsc). Частота HPET читается в runtime. Можно обойти SMI, сливая периодические прерывания от HPET на программный счётчик, но точность его будет непредсказуема. А вот про ACPI таймер я ничего не знаю. Это часы? Поделитесь, пожалуйста, информацией или ссылкой.
Что же до графики, в общем Вы правы. В частности, я просто не умею, к примеру, шейдерами имитировать текстовые видеорежимы. |
Сообщ.
#748
,
|
|
|
Цитата t0serg @ Опорная частота APIC недокументирована У APIC нету никакой стандартной опорной частоты (если быть точнее, то его частота связана с частотой процессора). APIC Timer надо синхронизировать по другим часам. Цитата t0serg @ Частота HPET читается в runtime И что в этом плохого? Цитата t0serg @ Можно обойти SMI, сливая периодические прерывания от HPET на программный счётчик, но точность его будет непредсказуема. Ни черта не понял причем тут SMI. Цитата t0serg @ А вот про ACPI таймер я ничего не знаю. Это часы? Нет, это ACPI таймер. Спецификация ACPI есть в открытом доступе. Сам я этот таймер не юзал, так что советов не дам. Добавлено Цитата t0serg @ В частности, я просто не умею, к примеру, шейдерами имитировать текстовые видеорежимы. Эт самое. Чтобы до шейдеров добраться нужно драйвер gpu делать, а там все проприетарно. |
Сообщ.
#749
,
|
|
|
Цитата shm @ При обработке SMI аппаратный таймер будет тикать, отсчитывая физическое время, а программный приостановится, отражая искомое время выполнения прикладной задачи. Других причин глушить SMI у меня нет. Если я правильно понимаю, по SMI отрывается от работы лишь одно ядро, BSP.Ни черта не понял причем тут SMI. Цитата shm @ Мне казалось что этот таймер доступен только коду управления питанием, в SMM. Может, я читал невнимательно.Нет, это ACPI таймер. Цитата shm @ Вот и я о том. Хотя на графические ядра Intel документация вроде есть. Чтобы до шейдеров добраться нужно драйвер gpu делать, а там все проприетарно. |
Сообщ.
#750
,
|
|
|
Цитата t0serg @ При обработке SMI аппаратный таймер будет тикать, отсчитывая физическое время, а программный приостановится, отражая искомое время выполнения прикладной задачи. Не совсем понимаю, что подразумевается под "программный таймер". Но счетчик HPET продолжит нарастать и в SMM. Ну да, возможно конечно нехорошая ситуация вроде: old_time = getTimer(); //тут код ... //тут генерируется SMI ... delta_time = getTimer() - old_time; //тут получим искаженное время, но тут уж никакой таймер не поможет. Цитата t0serg @ Мне казалось что этот таймер доступен только коду управления питанием Не могу сказать точно. Знаю только, что он есть и его используют. Сам его не юзал. Кстати, через ACPI можно отключить все SMI, которые связаны с APM. |