![]() |
|
![]() ![]() ![]() |
|
xach |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 74 Регистрация: 22.10.2004 Где: СПб Репутация: нет Всего: нет |
всем превед!
я написал резидентную программу, которая выводит на экран список номеров аппаратных прерываний у которых есть обработчики. Делал я это следующим образом: 1 - считывал по номеру вектора прерывания 4-х байтный адрес обработчика в формате сегмент-смещение 2 - считывал первый байт обработчика и сравнивал его с опкодом iret. Если первый оператор обработчика - iret, значит это заглушка и обработчика не существует, в противном случае существует а теперь вопрос: как узнать какие обработчики аппаратных прерываний есть в системе средствами dos, bios или иными (может просто где-то в памяти лежит)? В общем проверить работоспособность программы мерси за внимание! |
|||
|
||||
Akina |
|
|||
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 1 Всего: 454 |
Этот алгоритм неправильный. Заглушка АППАРАТНОГО прерывания в принципе не может быть голым IRET. а зачем - резидентную? Вручную. -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
xach |
|
||||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 74 Регистрация: 22.10.2004 Где: СПб Репутация: нет Всего: нет |
нужно ещё сбрасывать заявку?
такое задание дали в универе =)
я понимаю, что не само всё получится. хотелось бы поконкретнее... |
||||||
|
|||||||
SABROG |
|
|||
![]() Hacker ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2481 Регистрация: 18.9.2006 Репутация: нет Всего: 91 |
Может быть я путаю, попробуй функцию 35h (ah=35h, al=номер прерывания, 0-ffh). Результатом в bx будем вектор прерывания.
На всякий случай вот тебе TechHelp - http://alexfru.narod.ru/miscdocs/techhelp/techhelp.zip |
|||
|
||||
xach |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 74 Регистрация: 22.10.2004 Где: СПб Репутация: нет Всего: нет |
SABROG, не...мне не нужно получать сам вектор...с этим проблем нет...про эту функцию я знаю. проблема в методе определения того, что в системе присутствует обработчик аппаратного прерывания (08-0fh and 70-77h) ...вотъ...я думал, что с iret - правильный подход...похоже - нет =(
|
|||
|
||||
xach |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 74 Регистрация: 22.10.2004 Где: СПб Репутация: нет Всего: нет |
вотъ...откопал в талмуде о прерываниях
INT 21 - DOS 2+ - IOCTL - GET DEVICE INFORMATION AX = 4400h BX = handle Return: CF clear if successful DX = device information word (see #01423) AX destroyed CF set on error AX = error code (01h,05h,06h) (see #01680 at AH=59h/BX=0000h) с помощью этой функции (судя по названию =) ) можно получить инфу об устройствах. но что вписывать в поле handle (bx)?..а так можно было бы по ошибке (CF=1) определить отсутствие в системе устройства |
|||
|
||||
SABROG |
|
|||
![]() Hacker ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2481 Регистрация: 18.9.2006 Репутация: нет Всего: 91 |
Сомневаюсь что это для любых устройств.
А можно почитать задачу слово в слово ? Просто все прерывания так или иначе имеют заглушки. Причем они скорее всего разные для ДОСа и Windows. |
|||
|
||||
Akina |
|
|||
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 1 Всего: 454 |
SABROG дал правильный путь.
Во-первых, ты можешь определить сам факт наличия или отсутствия обработчика. При отсутствии вектор будет (во всяком случае должен быть) нулевой. Во-вторых, если обработчик есть, ты можешь определить, находится обработчик в ROM компьютера, ROM расширения или в RAM. По адресу точки входа. В третьих, если обработчик в RAM, ты можешь определить, установлен он как драйвер устройства или как резидентный обработчик. И даже, возможно, определить имя модуля, из которого он установлен. По принадлежности MCB. Вот, пожалуй, и все... -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
xach |
|
||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 74 Регистрация: 22.10.2004 Где: СПб Репутация: нет Всего: нет |
вы в этом уверены?..ведь процессор делает переход по факту аппаратного прерывания...представляю что получится если он перейдёт на адрес 0000h...
а какой диапазон адресов ROM? это лишнее (с учётом задачи) SABROG, как таковой задачи нет, она была озвучена мне устно: определить у каких аппаратных прерываний есть обработчик. Очень не корректно поставленная задача...скорее всего имелось ввиду отличить неиспользуемые устройства, от используемых. Всё для чистого dos. |
||||
|
|||||
SABROG |
|
|||
![]() Hacker ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2481 Регистрация: 18.9.2006 Репутация: нет Всего: 91 |
Запусти ДОС и посмотри, ты же вроде написал вывод обработчиков ? Под виндой то там все перехватывается. Если действительно будут нули, то твоя задача решена. Вот распределение памяти, пните меня, если я ложанулся ![]() |
|||
|
||||
Akina |
|
|||
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 1 Всего: 454 |
Нет, не лажанулся, все верно. Но тут все крупными мазками, ему надо (?) более детально. С учетом массы спецификаций (см. напр. описание технологий QEMM), позволяющих переадресовывать блоки оперативной памяти в незанятую область верхней памяти и в видеопамять граф. режима (А000-В7FF). Например, обработчик прерывания с адресом C200:0005 может быть как в ROM, так и в RAM. И в любом из этих случаев он может быть заглушкой. Добавлено через 4 минуты и 10 секунд Для CPU - да. А для FPU - само собой нет. -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
xach |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 74 Регистрация: 22.10.2004 Где: СПб Репутация: нет Всего: нет |
1 - я переправил прогу. теперь она выводит номера тех прерываний, у который пара сегмент:смещение (считанные по вектору) равны нулю
2 - загрузился с дискеты под дос ни одного прерывания с парой 0000h:0000h нету...хотя устройства у меня не все (взять хотя бы стриммер) |
|||
|
||||
Akina |
|
|||
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 1 Всего: 454 |
xach напишите простейший код, который можно подсунуть вместо бут-сектора дискеты и выводящий текущее состояние векторов, что-то типа:
закатайте его в бут-сектор, загрузитесь и посмотрите состояние векторов. На момент старта ОС... -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
SABROG |
|
|||
![]() Hacker ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2481 Регистрация: 18.9.2006 Репутация: нет Всего: 91 |
Я тоже об этом думал, но все-таки таким образом не узнать какие вектора не будут никогда вызываться, потому что нет устройств которые генерировали бы IRQ. И потом я думаю никакой преподаватель не станет подобное задавать. Скорее всего где-то недопонимание.
|
|||
|
||||
Akina |
|
|||
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 1 Всего: 454 |
что-о-о??? таймер-клавиатура-сопроцессор-прочая дрянь... -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
SABROG |
|
|||
![]() Hacker ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2481 Регистрация: 18.9.2006 Репутация: нет Всего: 91 |
Да нет, все 2 контроллера врятли используются на полную. Т.е. есть свободные IRQ на которых не висит пока ничего. Как узнать человеку, что IRQ свободен ? Опрашивать вручную все известные порты ?
|
|||
|
||||
xach |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 74 Регистрация: 22.10.2004 Где: СПб Репутация: нет Всего: нет |
ух...получил я зачёт...достало это СПО, из-за него нормальным и интересным ни чем не заняться =(...но вот теперь-то можно будет вернуться к теме music in dos!..
![]() Всем спасибо за помощь! |
|||
|
||||
Akina |
|
|||
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 1 Всего: 454 |
Сведения о выделении аппаратных прерываний находятся в таблицах БИОС - ведь эта инфа, об использовании распределяемых IRQ, выводится таблицей при старте компа... в принципе надо сканировать DMI, но уж больно гиморно и реализационно-зависимо. -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
SABROG |
|
|||
![]() Hacker ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2481 Регистрация: 18.9.2006 Репутация: нет Всего: 91 |
Ну вот я потому и говорю, подобные задачи на дипломные работы скорее тянут, чем на курсовые ![]() |
|||
|
||||
xach |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 74 Регистрация: 22.10.2004 Где: СПб Репутация: нет Всего: нет |
SABROG, это не курсовая, а дополнительное задание к лабораторным.
|
|||
|
||||
SABROG |
|
|||
![]() Hacker ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2481 Регистрация: 18.9.2006 Репутация: нет Всего: 91 |
Тем более, тут достаточно человеку рассказать почему не получилось определить, какие попытки предпринимались и что мешало, после такого доклада не только зачет бы поставили, да еще бы похвалили и поставили другим в пример
![]() |
|||
|
||||
MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: нет Всего: 207 |
просмотреть таблицу перенаправлений APIC все, что замаскировано, то не используется -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
SABROG |
|
|||
![]() Hacker ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2481 Регистрация: 18.9.2006 Репутация: нет Всего: 91 |
Я думал об этом, но не был уверен (да и сейчас не уверен), к тому же мало ли кто замаскировал прерывание.
|
|||
|
||||
MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: нет Всего: 207 |
да, такая ситуация возможна линия IRQ может быть замаскирована если она не используется или активен обработчик соответствующего прерывания можно попробовать просканировать таблицу несколько раз через некоторые промежутки времени -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
xach |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 74 Регистрация: 22.10.2004 Где: СПб Репутация: нет Всего: нет |
MAKCim, если обработчик активен, то твоя прога не активна и нестыковки не произойдёт...
c unix.ginras.ru: Функция APIC предоставила возможность без конфликтов работать двум устройствам на одном IRQ. Работая в паре, эти две опции прекрасно дополняют друг друга и "разводят" конфликлы оборудования на почве IRQ. НО! Процесс этот закрыт и на него нет специфической документации. Основное при работе ACPI и APIC - это таблица DSDT, определяющая правила их работы. Она имеется в любой прошивке BIOS в бинарном виде. Intel открыла спецификацию на свои материнские платы и на алгоритм работы ACPI и APIC. Остальные производители - нет. eof а как эту таблицу DSDT посмотреть и где она лежит? |
|||
|
||||
MAKCim |
|
||||||||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: нет Всего: 207 |
неа чисто гипотетически допустим в обработчике происходит исключение и управление передается на другой участок кода в котором идет проверка APIC т. к обработчик прерывания не завершен, то и соответствующая линия IRQ может быть замаскирована
да, и что?
только в BIOS, который поддерживает ACPI кроме того DSDT ничего не определяет в ней содержится AML код, интерпретируемый AML-интерпретатором ядра (в случае если система является ACPI-совместимой) возможно, вы имели в виду MADT (Multiple APIC Description Table) Добавлено через 6 минут и 7 секунд
RSDP содержит указатель на RSDT RSDT содержит адреса других таблиц, в том числе и DSDT Это сообщение отредактировал(а) MAKCim - 12.1.2008, 17:31 -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
||||||||
|
|||||||||
xach |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 74 Регистрация: 22.10.2004 Где: СПб Репутация: нет Всего: нет |
это я для полноты описания. возможно...как я понял есть таблица в которой прописано какие устройства присутствуют, а какие - нет. точнее на какие из них нужно генерировать прерывание, а на какие - нет. |
|||
|
||||
MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: нет Всего: 207 |
нет она описывает APIC-и (Local APIC, I/O APIC, Local SAPIC, I/O SAPIC) -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
xach |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 74 Регистрация: 22.10.2004 Где: СПб Репутация: нет Всего: нет |
т.е. по адресу 40:0Eh лежит 2-х байтовый RSDP, по какому-то смещению лежит RSDT, который укажывает на таблицу в которой тоже по какому-то смещению лежит DSDT?..
а при использовании 2-х байтного указателя юзать так: 0:ptr? т.е. сегмент=0, а смещение этому 2-х байтному указателю? |
|||
|
||||
MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: нет Всего: 207 |
нет вот код поиска RSDP
Это сообщение отредактировал(а) MAKCim - 12.1.2008, 18:10 -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
SABROG |
|
|||
![]() Hacker ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2481 Регистрация: 18.9.2006 Репутация: нет Всего: 91 |
Если в RSDP -> RSDT -> DSDT, а
То зачем вы ищите вообще RSDP ? |
|||
|
||||
MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: нет Всего: 207 |
MADT находится через RSDT, как и DSDT -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
SABROG |
|
|||
![]() Hacker ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2481 Регистрация: 18.9.2006 Репутация: нет Всего: 91 |
Похоже еще придется учитывать все спецификации ACPI, определять каким-то образом. Вот тут
http://acpi.info/presentations/S01USMOBS169_OS%20new.ppt перечеркивается старая структура RSDP и определяется новая. Получается в данный момент мы можем адаптироваться только под один вид платформы. ![]() Реально это уже такие дебри пошли, которые на диплом потянут ![]() |
|||
|
||||
MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: нет Всего: 207 |
-------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
xach |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 74 Регистрация: 22.10.2004 Где: СПб Репутация: нет Всего: нет |
MAKCim, а нет ли какой-нибудь информации об этих всех указателях, структурах, их адресах, их поиске (если они начинаются (как было описано выше) с сигнатуры) и т.д.?
|
|||
|
||||
MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: нет Всего: 207 |
-------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
mb78 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 19 Регистрация: 11.7.2008 Репутация: нет Всего: нет |
Решали какие DOS ,какие Bios ,разработчки компьютеа IBM.Поэтому что есть что легче всего узнать из описания. докуметации.
В универе можете сказать,что программно это не определить,за исключением того случая ,если сразу тоит iret а если надо просто выяснить ,то MS-DOS это int &H21, остальные ,по-моему до &H60-го -Bios Это сообщение отредактировал(а) mb78 - 12.7.2008, 21:43 |
|||
|
||||
AndNot |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 55 Регистрация: 28.2.2008 Репутация: нет Всего: нет |
Ну надо же, даже до ACPI добрались, хотя задача в принципе решается проще
![]() |
|||
|
||||
Evgeniy22 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 1 Регистрация: 6.2.2010 Репутация: нет Всего: нет |
подскажите пожалуйста как с помощью ACPI выключить комп, тоесть перевести его в состояние G3. Все таблицы и адреса регистров я нашёл. Функцию ресет тоже сделал. С языком AML не разбирался... Подскажите как сделать это и нужно ли для етого знать AML?
|
|||
|
||||
![]() ![]() ![]() |
Правила форума "Asm для Windows/DOS" | |
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Asm для Windows/Dos | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |