Переполнение буфера клавиатуры

Тема в разделе "Другие", создана пользователем APTEM, 30 апр 2004.

Статус темы:
Закрыта.
  1. APTEM

    APTEM Гость

    Простейшая музыкальная программа. Проблема в том, что при долгом нажатии на клавишу (музыка активируется при нажатии на 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);
    (46):sound(ch1,5,590);
    (49):sound(ch1,6,650);
    (50):sound(ch1,7,720);

    end;
    until ch1=27;

    closegraph;
    end.
     
  2. deeka

    deeka Гость

    А зачем просто SetFillStyle? или вы просто не понимаете значение этой команды? И что вы хотите? В целом?
    Легче format c:
     
  3. logosman

    logosman Гость

    Несомненно переполнение!!! И вообще при работе с 60h портом желательно вешать свой обработчик на IRQ 1.
    Но для этого случая посоветую поставить:

    ...
    repeat
    asm
    push 40h
    pop es
    mov al,es:[1ch]
    mov es:[1ah],al
    end;

    ch1:=port[$60];
    ...

    {}{}{}{}{}{}{}{}{}{}{}{}{}{}{}
    Или равносильно:
    ...
    repeat
    mem[$40:$1a]:=mem[$40:$1c];
    ch1:=port[$60];
    ...

    GRAPH.TPU сегодня должно быть стыдно использовать!!! Надо делать самому!!!
     
  4. kagor

    kagor Гость

    deeka
    :D :D :D
     
  5. klizardin

    klizardin Гость

    проблемка в том что нужно не только читать из порта 60h но еще и сообщать о том что код клавиши прочитан и соответственно можно выдавать вам на прочтение следующий кажись за это отвечает порт 61h. А чем были не доспадобы стандартные функции чтения с клавиатуры ?
     
Загрузка...
Статус темы:
Закрыта.

Поделиться этой страницей