· Начало · Статистика · WASM.RU · Noir.Ru ·

 WASM Phorum (Оффлайн - 24.11.2003) —› WASM.WIN32 —› Динамик... :(((

Посл.отвђт Сообщенiе


Дата: Дек 19, 2002 21:16:59

Вот нужно в резиденте при нажимании на клавиши
делать озвучку при помощи динамика.
Так вот написал это без прерываний и
в WinXP гудит ок, а в DOS - вилы...до потери пульса...не останавливается...может читать не так значение сис. таймера надо?..
Что за глюк...
Вот код:
in al,61h
or al,00000011b
out 61h,al
mov al,10110110b
out 43h,al

mov dx,473h
mov al,dl
out 42h,al
mov al,dh
out 42h,al

xor ax,ax
mov ds,ax
mov bx,word ptr ds:046Ch ;берём значение системного таймера
add bx,3
@beep:
mov dx,word ptr ds:046Ch
cmp bx,dx
jne @beep

in al,61h
and al,11111100b
out 61h,al

И ещё: как обрыбатывать клавиши-стрелки, у них ведь 0+скан-код,
как и обычные или нет...???
Заранее благодарен.


Дата: Дек 19, 2002 21:52:19

1. Чтобы значение системного таймера менялось, нужно дать обработчику прерываний таймера возможность работать, т.е.
a) sti - включить обработку прерываний
b) послать контроллеру прерываний команду "конец прерывания"
mov al,20h
out 20h,al
(или вызвать стандартный обработчик int9, который сам это сделает)

2. >как обрыбатывать клавиши-стрелки, у них ведь 0+скан-код
0+скан-код - это на выходе int16, а в обработчике int9 читаются только скан-коды


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.067