Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Приогаммирование таймера будильника

325
16 августа 2005 года
Franky
723 / / 10.08.2005
Вычитал такую интересную функцию где-то по адресам возле таймера (в БИОСе), мож кто работал? Я не понял одного: как переадресовать вектор на свой обработчик? И как вообще сделать обработчик прерываний? В данном случае заголовок проги-будильника...
Как грится - F1... т.е. ХЕЛП, плиииз :)
2
16 августа 2005 года
squirL
5.6K / / 13.08.2003
Цитата:
Originally posted by Franky
Вычитал такую интересную функцию где-то по адресам возле таймера (в БИОСе), мож кто работал? Я не понял одного: как переадресовать вектор на свой обработчик? И как вообще сделать обработчик прерываний? В данном случае заголовок проги-будильника...
Как грится - F1... т.е. ХЕЛП, плиииз :)


насколько я помню - подменить в таблице прерываний адрес подпрограммы, которая вызывается по этому прерыванию.

299
16 августа 2005 года
3D Bob
885 / / 18.04.2005
Цитата:
Originally posted by squirL
насколько я помню - подменить в таблице прерываний адрес подпрограммы, которая вызывается по этому прерыванию.


Насколько я помню смотри в сторону 25h

2
16 августа 2005 года
squirL
5.6K / / 13.08.2003
Цитата:
Originally posted by 3D Bob
Насколько я помню смотри в сторону 25h


можно. а можно и ручками :)

10
16 августа 2005 года
Freeman
3.2K / / 06.03.2004
Цитата:
Originally posted by squirL
можно. а можно и ручками :)


Ой, вспомнил. В книге Нортона в бородатом году было описано три способа установки прерываний, но только один из них был легальным (т. е. через систему). Тогда упоминмалось, что установка векторов вручную может вызвать конфликт при работе в многозадачной среде. Правда, в то время это были только слова, а сегодня есть реальная возможность проверить на практике, будет работать или нет. Да еще и не в одной многозадачной среде. ;)

2
16 августа 2005 года
squirL
5.6K / / 13.08.2003
Цитата:
Originally posted by Freeman
Ой, вспомнил. В книге Нортона в бородатом году было описано три способа установки прерываний, но только один из них был легальным (т. е. через систему). Тогда упоминмалось, что установка векторов вручную может вызвать конфликт при работе в многозадачной среде. Правда, в то время это были только слова, а сегодня есть реальная возможность проверить на практике, будет работать или нет. Да еще и не в одной многозадачной среде. ;)


а какой третий???? :)
я (не в бородатом году, но тоже не вчера) изучал это дело по справочнику Джордейна для IBM PC... там только два способа было. кстати я тогда думал, что чем сложнее способ, тем он круче и делал все только руками... эх...

10
16 августа 2005 года
Freeman
3.2K / / 06.03.2004
Цитата:
Originally posted by squirL
а какой третий???? :)


Ой, я и не помню уже. Кажется, у него был вариант через MOV и был через STOSW.

2
16 августа 2005 года
squirL
5.6K / / 13.08.2003
Цитата:
Originally posted by Freeman
Ой, я и не помню уже. Кажется, у него был вариант через MOV и был через STOSW.


а... ну это все равно видимо две разновидности ручной подмены адреса в таблице прерываний...

325
16 августа 2005 года
Franky
723 / / 10.08.2005
Цитата:
Originally posted by squirL
насколько я помню - подменить в таблице прерываний адрес подпрограммы, которая вызывается по этому прерыванию.


А как узнать адрес своей подпрограммы? Мож у кого исходники есть?

10
16 августа 2005 года
Freeman
3.2K / / 06.03.2004
Цитата:
Originally posted by squirL
а... ну это все равно видимо две разновидности ручной подмены адреса в таблице прерываний...


Не было бы у него про три способа написано - не запомнил бы.:)

3.8K
16 августа 2005 года
Supervisor
158 / / 29.05.2005
Цитата:
Originally posted by Franky
А как узнать адрес своей подпрограммы? Мож у кого исходники есть?


:D :D :D Более смешного высказывания не слышал никогда! :)

Извиняюсь за оффтоп.

Цитата:
а сегодня есть реальная возможность проверить на практике, будет работать или нет


Работать будет. А возникновение конфликтов возможно только в том случае, если прерывание будильника (irq8 ) уже используется другой программой.

325
17 августа 2005 года
Franky
723 / / 10.08.2005
Цитата:
Originally posted by Supervisor
:D :D :D Более смешного высказывания не слышал никогда! :)


Поясняю на пальцах: может у кого есть исходник этой функции будильника, чтобы был пример перехода на свою подпрограмму.
Так лучше?

2
17 августа 2005 года
squirL
5.6K / / 13.08.2003
Цитата:
Originally posted by Franky
Поясняю на пальцах: может у кого есть исходник этой функции будильника, чтобы был пример перехода на свою подпрограмму.
Так лучше?


а самому слабо поискать? в ветке упоминалось 2 автора. набрать в google "Джордейн IBM PC справочник" не позволяют религиозные убеждения?

3.8K
17 августа 2005 года
Supervisor
158 / / 29.05.2005
Цитата:
Originally posted by Franky
Поясняю на пальцах: может у кого есть исходник этой функции будильника, чтобы был пример перехода на свою подпрограмму.
Так лучше?



Код обработчика прерывания:

 
Код:
push ax

; ----------- твой код ------------- ;

;Send EOI
mov al, 0x20
out 0x20, al

pop ax
iret


Пропиши адрес на этот обработчик в таблице векторов прерываний. Чтобы избежать конфликтов с резидентными программами, необходимо перед изменением таблицы векторов запомнить адрес "старого" обработчика irq8, и делать дальний прыжок на него после выполнения твоего кода.

Поясню, что всё вышесказанное верно только для реального режима.
325
18 августа 2005 года
Franky
723 / / 10.08.2005
Спасибо, попробую разобраться...
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог