Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Переполнение буфера клавиатуры, Кажется... 
:(
    Опции темы
APTEM
Дата 30.4.2004, 16:54 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Простейшая музыкальная программа. Проблема в том, что при долгом нажатии на клавишу (музыка активируется при нажатии на 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 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 157
Регистрация: 5.3.2004

Репутация: 1
Всего: 1



Перед until поставь
Код
while KeyPressed do ReadKey

--------------------
Бойся своей мечты, ибо она осуществима!
PM MAIL   Вверх
Lonley
Дата 1.5.2004, 21:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 597
Регистрация: 7.10.2003
Где: северные ворота М урманск

Репутация: нет
Всего: 4



Можно попробовать очищать буфер клавиатуры полсле вывода звука
ну подумай когда его личшу поставить
Код

CLRBUF PROC
CLI
PUSH AX
PUSH ES
MOV AX,40h
MOV ES,AX
MOV AL,BYTE PTR ES:[1CH]
MOV BYTE PTR ES:[1AH],AL
POP ES
POP AX
STI
RET
CLRBUF ENDP

Код не мой а из книги В.Ю.Пирогова


--------------------
Земную жизнь пройдя до половины,
Я очутился в сумрачном лесу,
Утратив правый путь во тьме долины.
Каков он был, о, как произнесу,
Тот дикий лес, дремучий и грозящий,
PM MAIL ICQ   Вверх
APTEM
Дата 2.5.2004, 17:16 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Jin X
Спасибо, это частично решило проблему... Попробую добить до конца...
  Вверх
YAA
Дата 19.7.2004, 23:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 89
Регистрация: 18.7.2004
Где: Russia< Kuzbas s->Kemerovo.

Репутация: нет
Всего: нет



Странно в смысле прерывается? Так это же гудок биос!!! Можно или расширить буффер клавы, или перехватить 09h - один из обработчиков клавы (2ой).
PM MAIL ICQ   Вверх
Uri
Дата 27.7.2004, 14:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 27.7.2004

Репутация: нет
Всего: нет



Пример _правильного_ чтения символа с клавиатуры:

Код

        push    ax
        in      al,60H            ;read the key
        mov     [ch1],al
        in      al,61H            ;get value of keyboard control lines
        mov     ah,al             ; save it
        or      al,80h            ;set the "enable kbd" bit
        out     61H,al            ; and write it out the control port
        xchg    ah,al             ;fetch the original control port value
        out     61H,al            ; and write it back
        pop     ax

PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Asm: Общие вопросы"
MAKCim
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой КОД.
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim.

 
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Asm: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0658 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.