Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.03.2012, 09:10   #1
Любопытный человек
Пользователь
 
Регистрация: 14.01.2012
Сообщений: 39
По умолчанию IRQ1, обработка прерываний клавиатуры.

Добрый день.
У меня трудности в реализации работы с клавой в своей, скажем так, ос)
Теорию понимаю, в инете копал инфу. За основу взял статью: http://www.wasm.ru/article.php?article=ia32int
С программными прерываниями все путем, вывод int 1 работает. Но прерывания клавиатуры почему-то не обрабатываются. Потестил путем вывода и выходит, что обработчик прерывания клавы вызывается при загрузке "ос", но дальше на нажатия клавишь не реагирует. Есть ли у кого-либо хорошие ресурсы по данной теме(или исходники для изучения), потому что сам я обработку нажатий клавиш так и не смог одолеть. Если лазил в исходниках, то просто тонул в чужой структуре драйвера
P.S. Использую nasm и C.
Любопытный человек вне форума Ответить с цитированием
Старый 24.03.2012, 09:30   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

а вы PIC настраиваете?
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 24.03.2012, 09:39   #3
Любопытный человек
Пользователь
 
Регистрация: 14.01.2012
Сообщений: 39
По умолчанию

Я, следуя статье, сместил IRQ:
Код:
use32
redirect_IRQ:
; BX = { BL = Начало для IRQ 0..7, BH = начало для IRQ 8..15 }
; DX = Маска прерываний IRQ ( DL - для IRQ 0..7, DH - IRQ 8..15 )

        ; APIC Off
        mov     ecx,1bh
        rdmsr
        or      ah,1000b
        wrmsr

        mov     al,11h
        out     0a0h,al
        out     20h,al

        mov     al,bh
        out     0a1h,al
        mov     al,bl
        out     21h,al

        mov     al,02
        out     0a1h,al
        mov     al,04
        out     21h,al

        mov     al,01
        out     0a1h,al
        out     21h,al

        mov     al,dh
        out     0a1h,al
        mov     al,dl
        out     21h,al

        ; APIC On
        mov     ecx,1bh
        rdmsr
        and     ah,11110111b
        wrmsr

        ret
Больше я ничего не делал, только работал с портами.
Любопытный человек вне форума Ответить с цитированием
Старый 24.03.2012, 10:46   #4
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

клава PS/2?
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 24.03.2012, 10:54   #5
Любопытный человек
Пользователь
 
Регистрация: 14.01.2012
Сообщений: 39
По умолчанию

Ну...На ноуте все делаю. Но я подумал, что должно работать, т.к. если много раз тыкать клву, борщ пишет "internal keyboard buffer full, ignoring scancode.<код клавиши>". Сейчас на компе попробую.
Любопытный человек вне форума Ответить с цитированием
Старый 24.03.2012, 11:05   #6
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

http://sasm.narod.ru/docs/pm/pm_main.htm
не ахти мне тот код, посмотрите по ссылке.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 24.03.2012, 11:17   #7
Любопытный человек
Пользователь
 
Регистрация: 14.01.2012
Сообщений: 39
По умолчанию

В общем не робит с пс2. Спасибо за ссыль, уже смотрю. А не могли бы вы пояснить код из 6 части? :
http://sasm.narod.ru/docs/pm/pm_int/chap_6.htm
В частности не пойму:
Код:
init_set_IDT_descriptor	macro

set_IDT_descriptor	proc	near
; Установка IDT-дескриптора.
; DS:BX = дескриптор в IDT
; DX = селектор сегмента кода обработчика
; EAX = смещение в сегменте кода
; CX = access_rights (права доступа)

	push	eax
	push	ecx

	push	cx
	mov	cx,dx
	shl	ecx,16
	mov	cx,ax		; ECX = dw Селектор & dw offset_low
	mov	[ bx ],ecx

	pop	ax
	mov	[ bx + 4 ],eax  ; EAX = dw offset_hi & db access_rights & db 0

	add	bx,8

	pop	ecx
	pop	eax

	ret

endp

endm
Для чего просто в регистры сохранять? И не понимаю как тут вообще работа с idt происходит.
Любопытный человек вне форума Ответить с цитированием
Старый 24.03.2012, 11:37   #8
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
Для чего просто в регистры сохранять?
Код:
mov	[ bx + 4 ],eax
mov	[ bx ],ecx
и где просто в регистры?
там все записи в IDT формируются именно этой процедурой.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 24.03.2012, 11:39   #9
Любопытный человек
Пользователь
 
Регистрация: 14.01.2012
Сообщений: 39
По умолчанию

Ок, значит в bx надо передать адрес idt... Посмотрим что получится Скоро отпишусь о результатах
Любопытный человек вне форума Ответить с цитированием
Старый 24.03.2012, 11:46   #10
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

одно но, не в bx, а в ds:bx(ну это на всякий)
просто не стоит забывать про сегментные регистры.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Обработка прерываний клавиатуры в резидентной программе Vilgelm Помощь студентам 3 30.06.2011 12:09
Обработка прерываний клавиатуры. Borland Pascal. Kingdom_Reborn Помощь студентам 0 19.02.2011 18:02
Дизассемблировать Обработчик прерываний Bios для клавиатуры Subaru Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 3 28.11.2010 19:22
Обработка прерываний Syn-McJ Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 4 27.09.2010 07:15
Перехват прерываний от клавиатуры и работа с видеопамятью sunlightik Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 2 26.02.2010 00:32