[asm/pascal] Ujarzmić klawiature !!! Kto umie ??

0

Pisze gierke w pascalu i wykorzystuje troche asemblera.
I np mam problem przy odczytywaniu danych z klawiatury - probowalem juz na kilka sposobów. Generalnie chodzi o to że musze miec informacje o tym czy dany klawisz jest wcisniety czy przytrzymany czy zwolniony - no wiec jak wszyscy wiemy najlepiej do tego nadaje sie czytanie z portu 60h. Tak tez czynie po uprzednim zbadaniu portu 64h czyli rejestru sterującego.
Wygląda to tak:

procedure pobierz_skankod(var skankod:byte);
var
temp:byte;
begin
temp:=port[$64];
if (temp and $01)=0 then {jesli port 60h jest pusty}
begin
skankod:=0;
exit;
end;
if (temp and $20)=$20 then {jesli port zawiera dane od jednostki dodatkowej}
begin
temp:=port[$60];
skankod:=0;
exit;
end;
skankod:=port[$60]; {pobiera kod wcisnietego klawisza}
end;

No i wszystko dziala fajnie do momentu gdy zaczynam przytrzymywac np kursorki. Zaczynaja sie przeklamania. Kiedy zwolinie kursor potem naciskam klawisz np ESC to odczytuje mi jakies niezidentyfikowane kody skaningowe <ort>w ogóle</ort> nie odpowiadajace ESC - dopiero po trzecim nacisnieciu ESC wraca do normy. I chyba nie wynika to z tego ze port 60h jest zapchany gdyz gdyby tak bylo procedura czytala by z niego. A nic sie nie dzieje - dopiero po nacisnieciu danego klawisza pojawiaja sie przeklamania.
poza tym spowolnilem czytanie klawiszy:

procedure czestotliwosc_klawiszy(ilosc,opoznienie:byte);
begin
asm
mov ah,03h
mov bl,ilosc
mov bh,opoznienie
int 16h
end;
end;

i odciolem system od klawiatury:

procedure przerwanie_klawiatury(wart:boolean);
begin
if wart=false then
port[$21]:=$02
else
port[$21]:=$00;
end;

No i wlasnie dzieja mi sie takie szopki.

Zdecydowalem sie pojsc inna storna - przerwania BIOSU !!! przerwanie 16h i sprawdzilem wszystkie funkcje odczytujace klawisze. Dzialala tylko jedna :/ 00h bodajze ktora odczytywala klawisze jednak tylko jeden w danym momencie szlo okreslic a nie o to mi chodzi. Probwalem tez funkcji 01h,10h,11
h i nic .

Macie jakies pomysly?? Pomozcie bo stoje w miejscu i wkurzam sie tylko na ta klawiature ... Z gory dzieki

0

Odpalasz do pod czystym DOSem, czy pod Windows? Może tu tkwi problem? :|

0

hmm odpalam w kompilatorze Turbo Pascala czyli pod winem. Ale odcinam system od klawiatury czytając z portu 60h

FAKTYCZNIE !!! Uruchomilem pod dosem ten programik do odczytywania z portu 60h i dziala bez zarzutu - jednak w windowsie straszne przeklamania w liczbach. Czyli niby problem rozwiązany jednak nie do końca - Czy wiecie co zrobić aby działało pod winem może trzeba coś jeszcze założyć coś przeoczyłem itp ??

1 użytkowników online, w tym zalogowanych: 0, gości: 1