Lowlevel
Lowlevel => Lowlevel-Coding => Thema gestartet von: thetrue am 20. July 2006, 22:09
-
nabend,
ich habe ein problem mit meinem Tastatur treiber...
wenn ich ne taste loslasse, bekomme ich keinen IRQ1 aufruff ... also kann ich die break scancodes nicht lesen ...
Make ScanCodes functionieren perfect, nja fast ...
hier mein IRQ1:
irq1:
pusha
in al,60h ;Tastaturdaten holen
mov edi, puffer
call num_to_str ; hex to decimal
mov esi, puffer
mov al, 0x00
int 30h ; text ausgabe ... (decimal)
mov al, 0x20 ;EOI-Wert in AL ablegen
out 0x20, al ;EOI an Master-PIC senden
popa
iret
und hier noch die einstellungen:
bcheck3:
in al, 64h
and al, 02h
jnz bcheck3
mov al, 0xF6
out 0x60, al
bcheck:
in al, 64h
and al, 02h
jnz bcheck
mov al, 0x60
out 0x64, al
bcheck2:
in al, 64h
and al, 02h
jnz bcheck2
mov al, 10000111b
out 0x60,al[quote][/quote]
-
hm... was genau macht die Funktion num_to_str? und was sind ihre Inputs/Outputs?
-
hm... was genau macht die Funktion num_to_str? und was sind ihre Inputs/Outputs?
die function wandelt hex, decimal etx in decimal strings ...
num_to_str:
mov cx, 1
clean_puffer:
push esi
mov esi, '0'
mov [edi], esi
inc cx
inc edi
pop esi
cmp cx, 7
jbe clean_puffer
num_to_str2:
mov bx,10
div bx
add dl,30h
mov [edi],dl
xor edx,edx
dec edi
cmp ax, 0
jne num_to_str2
ret
-
hmm... okay
Break Codes?! STRG+C, z.B.? Da sendet der doch mehrere Bytes... das heißt du musst erst port 0x60 abfragen, den als Breakcode identifizieren und dann die restlichen bytes abfragen... Ick hab des aber selber noch nie gecodet...
-
ne, ich bekomme net mal F0h gesendet .. also der erste byte vom break
-
vllt liegt das daran, dass du erst ne Taste, die n breakcode sendet, drücken muss? XD :P
-
:D neee ich drücke schon paar tasten keine angst ;)
-
Also ich habe nie komplexere Tastaturtreiber geschrieben, aber ich bin immer ohne irgendwelche Initialisierungen ausgekommen. Da ein anderer Beitrag vor dir darauf hindeutet, dass du in dem Initialisierungscode auf ein anderes Scancodeset wechselst, (sorry, aber den Wust schau ich mir nicht unkommentiert an) würde ich vorschlagen, dass du einfach bei der Standardeinstellung bleibst.
-
ähmm... ist das erste Byte vom Break net 0xE0?! Kann aber auch seien, dass ich mich irre...
-
nein, das byte 0xE0 kommt vor jedem der erweiterten Scancodes. Er hat schon recht mit 0xF0... aber ich glaube mittlerweile funktioniert es bei ihm, soweit ich des jetzt in ICQ mitgekriegt hab...
-
nagut alles klar ;) ich hab des ja auch noch nie gemacht, mit den breakcodes... aber gelesen habe ick darüber...ist aber auch schon länger her... LoL
-
jop, alles fucntioniert, es hat von anfang an functioniert, nur habe ich es nicht mit gekreigt ^^ da ich die scancodes immer überschreiben habe ... also beim ausgeben