| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Asm: Общие вопросы > Переполнение буфера клавиатуры |
| Автор: APTEM 30.4.2004, 16:54 |
| Простейшая музыкальная программа. Проблема в том, что при долгом нажатии на клавишу (музыка активируется при нажатии на z,x,c,v,b,n) звук ведет себя очень странно. Кажется переполнение буфера клавиатуры. Как можно решить эту проблему? uses crt,graph; var ch:char; i,j:integer; ch1: byte; procedure Sound(cc: byte; i:integer;F:single); var k:word; c:byte; begin k:=round(1.193e6/f); port[$43]:=$be; port[$42]:=lo(k); port[$42]:=hi(k); setfillstyle(1,12); bar(i*50,100,(i+1)*50-5,300); c:=port[$61]; port[$61]:=c or 3; repeat until (port[$60]<>cc); port[$61]:=c and (not 3); setfillstyle(1,i); bar(i*50,100,(i+1)*50-5,300); end; begin i:=detect; initgraph(i,j,'d:\tp7');{pri zapisi na disk C:\ zamenit d:\tp7 na c:\tp7} for i:=1 to 7 do begin setfillstyle(1,i); bar(i*50,100,(i+1)*50-5,300); end; repeat ch1:=port[$60]; (* writeln(port[$60]);*) case ch1 of (44):sound(ch1,1,440); (45):sound(ch1,2,460); (46):sound(ch1,3,490); (47):sound(ch1,4,530); (4:sound(ch1,5,590); (49):sound(ch1,6,650); (50):sound(ch1,7,720); end; until ch1=27; closegraph; end. |
| Автор: Jin X 30.4.2004, 22:08 | ||
Перед until поставь
|
| Автор: Lonley 1.5.2004, 21:40 | ||
| Можно попробовать очищать буфер клавиатуры полсле вывода звука ну подумай когда его личшу поставить
Код не мой а из книги В.Ю.Пирогова |
| Автор: APTEM 2.5.2004, 17:16 |
| Jin X Спасибо, это частично решило проблему... Попробую добить до конца... |
| Автор: YAA 19.7.2004, 23:09 |
| Странно в смысле прерывается? Так это же гудок биос!!! Можно или расширить буффер клавы, или перехватить 09h - один из обработчиков клавы (2ой). |
| Автор: Uri 27.7.2004, 14:39 | ||
Пример _правильного_ чтения символа с клавиатуры:
|