Lowlevel

Lowlevel => Lowlevel-Coding => Thema gestartet von: FreakyPenguin am 01. June 2005, 18:02

Titel: Tastaturtreiber Problem
Beitrag von: FreakyPenguin am 01. June 2005, 18:02
Hallo mal Wieder
Ich bin dabei meinen Tastaturtreiber zu schreiben. Nun, seit einiger zeit sagt boch nach ca. 40 Tastendrücken immer folgende meldung ausgibt.
nternal keyboard buffer full, ignoring scancode.

ich weiss nicht wo ich den fehler noch suchen könnte.


Hier ist der Code:


int0x21:

xor eax,eax
in al,0x60

push eax
call PutByte
pop eax

cmp al, 0xE0
je .ende
cmp al, 0x00
je .ende
cmp al, 0xff
je .ende


mov al,BYTE [Keycodetable + eax]

call PutByte


.ende



 mov al, 0x20
 out 0x20,al
 
iret


Sieht jemand den Fehler ?

Vielen dasnk im voraus

gruss Togi
Titel: Tastaturtreiber Problem
Beitrag von: drccpp am 01. June 2005, 21:09
warum heist deine interrupt-routine int0x21.? 0x21 ist nicht der Keyboard-Int. Der Keyboard int ist 0x9. Wie hast du den Int installiert? (code)
Titel: Tastaturtreiber Problem
Beitrag von: DarkThing am 01. June 2005, 21:44
Zitat von: drccpp
warum heist deine interrupt-routine int0x21.? 0x21 ist nicht der Keyboard-Int. Der Keyboard int ist 0x9. Wie hast du den Int installiert? (code)

Der Name ist ja im Prinzip egal auch wenn KeyHandler oder so schöner wär.
Wiese ist der Keyboaderd int 0x9? Ich denke 0x1 ist der richtige Int.
Titel: Tastaturtreiber Problem
Beitrag von: joachim_neu am 01. June 2005, 22:04
Nein.

1. KeyboardIRQ ist 0x01
2. KeyboardInt ist im RM 0x09
3. KeyboardInt ist im PM 0x21, wenn man den PIC-Master auf 0x20 gesetzt hat
=> alles richtig.

Selbiges Problem wie er hab ich auch...
Titel: Tastaturtreiber Problem
Beitrag von: drccpp am 01. June 2005, 22:54
Was heißt das?
Ich hab den PM und trotzdem Int9 für keyboard! Wozu und wie könnt ihr den auf int21 machen?
Titel: Tastaturtreiber Problem
Beitrag von: n3Ro am 02. June 2005, 01:32
Man muss den PIC (8259er Chip) umprogrammieren damit die IRQs andere Interrupt-Vektoren ansteuern. Dies geht mit einer bestimmten Befehlssequenz auf die Ports des Programmable Interrupt Controlers ;-) Die genaue Spezifikation findest du in der Cottontail OS Development Library http://www.osdever.net/cottontail/#ISA. Warum man das macht: da die Interrupt-Vektoren von 0x00 bis 0x1f für Prozessor Exceptions reserviert sind (siehe Architekur Specs) ist es sinnvoll  die IRQs der Geräte auf andere Int-Vektoren zu mappen, ganz einfach um IRQs von Exceptions unterscheiden zu können. Dass der Keyboard IRQ sprich IRQ 1 im Realmode auf Int 0x8 gemappt ist, ist historisch gewachsen (Stichwort Kompatibilität), weil dass warscheinlich irgendwann, vor langer langer Zeit, mal nicht anderweitig belegt war. Heutzutage sieht das allerdings anders aus.
Titel: Tastaturtreiber Problem
Beitrag von: Roshl am 02. June 2005, 11:45
Wenn man den PIC nicht umprogrammiert kriegt man 18,2 mal in der Sekunde eine Double Fault, weil der Timer-IRQ (IRQ0) auf Int 8 liegt^^
Im Realmode gibt es eben nur 8 Exceptions (0-7) deswegen legt man die IRQs ab 8 an. Da es aber im PM viel mehr Fehler geben kann, wegen Speicherschutz usw brauchte man mehr, und da man gelernt hat, das man irgendwann sicher nochmehr brauchen wird, hat man sich gedacht gleich ein paar mehr zu reservieren, also gleich 32.^^
Titel: Tastaturtreiber Problem
Beitrag von: joachim_neu am 02. June 2005, 15:11
@Roshl: Richtig. ;) Und wenn man den PIT umprogrammiert hat, dann noch öfters oder weniger oft. ;)
Titel: Tastaturtreiber Problem
Beitrag von: DarkThing am 02. June 2005, 17:15
@PICs: Ich denke mal hier gibts den Code für sein PIC-Umprogrammierung:
http://www.lowlevel.brainsware.org/forum/viewtopic.php?t=771&sid=fbea7e9141b394f17cdda53ee250320f
Titel: Tastaturtreiber Problem
Beitrag von: DDR-RAM am 02. June 2005, 17:37
Zitat von: joachim_neu
@Roshl: Richtig. ;) Und wenn man den PIT umprogrammiert hat, dann noch öfters oder weniger oft. ;)


Hm, es geht mit niedriegerer Frequenz als 18,2 Hz ?
Ich dachte, das ist schon die niedrigste ...
Titel: Tastaturtreiber Problem
Beitrag von: joachim_neu am 02. June 2005, 17:40
Kann sein, jedenfalls kann man ihn umprogrammieren.
Titel: Tastaturtreiber Problem
Beitrag von: FreakyPenguin am 02. June 2005, 19:43
hat jemand ne ahnung wo es lieien könnte ?
Titel: Tastaturtreiber Problem
Beitrag von: Roshl am 03. June 2005, 11:17
18,2 ist das niedrigste, könnte euch das jetzt vorrechnen bin aber zu faul.

Zum umproggen kann man dat hier ganz einfach machen, als Parameter einfach angeben wo die IRQ loslegen sollen:

void remap_PIC(db ivec)
{
   outb(0x20,0x11);
   outb(0xA0,0x11);
   outb(0x21,ivec);
   outb(0xA1,ivec+8);
   outb(0x21,0x04);
   outb(0xA1,0x02);
   outb(0x21,0x01);
   outb(0xA1,0x01);
}
Titel: Tastaturtreiber Problem
Beitrag von: FreakyPenguin am 04. June 2005, 18:36
Hallo,

cih habs jetzt hingekriecht. doch nun habe ich ein anderes Problem, ich hab ne tabelle gemach um die Scancodes in keycodes umzuwandeln. Doch die umwandlung funkioniert nur bis zur Backspacetaste, danach bekomme ich einfach null, die Scancodes, jedoch werdenm korrekt ausgegeben.

Hier ist die Tabelle:

keycode:
db 0 ;0
db 110 ;1
db 2 ;2
db 3 ;3
db 4 ;4
db 5 ;5
db 6 ;6
db 7 ;7
db 8 ;8
db 9 ;9
db 10 ;0a
db 11 ;0b
db 12 ;0c
db 13 ;0d
db 15 ;0e
db 16 ;0f
db 17 ;10
db 18
db 19
db 20
db 21
db 22
db 23
db 24
db 25
db 26
db 27
db 28
db 43 ;1c
db 58
db 31
db 32
db 33
db 34
db 35
db 36
db 37
db 38
db 39
db 40
db 41
db 0
db 44
db 42
db 46
db 47
db 48
db 49
db 50 ;30
db 51
db 52
db 53
db 54
db 55
db 57
db 100 ;37
db 60
db 61
db 30 ;3a
db 112 ;3b
db 113 ;3c
db 114 ;3d
db 115 ;3e
db 116 ;3f
db 117 ;40
db 118 ;41
db 119 ;42
db 120 ;43
db 121 ;44
db 90 ;45
db 0 ;46
db 91 ;47
db 0 ;48
db 0 ;49
db 105 ;4a
db 92 ;4b
db 0 ;4c
db 0 ;4d
db 106 ;4e
db 93 ;4f
db 98 ;50
db 103 ;51
db 99 ;52
db 104 ;53
db 0 ;54
db 0 ;55
db 0 ;56
db 122 ;57
db 123 ;58




Und hier noch die KeyhandlerRoutine:


;De Keyhandler Routine, die in der Idt eingetragen ist
keyhandler:

xor eax,eax
in al,0x60
PushAll
call PutByte
PopAll
mov al, [keycode+eax]

call PutByte



.ende
 mov al, 0x20
 out 0x20,al

iretd


Wo könnte ich den Fehelr suche, ich hab echt keine Ahnung wo er ist.

Vielen Dank schon im Voraus.

LG Togi
Titel: Tastaturtreiber Problem
Beitrag von: joachim_neu am 05. June 2005, 09:43
Erstma musste alle Register sichern! Sehr wichtig.
Dann brauchste mindestens 3 Tabellen, eine bei normal, eine bei shift und eine bei alt. und dann musste diese tasten noch checken und die tabellen dann umstellen.
Titel: Tastaturtreiber Problem
Beitrag von: n3Ro am 14. June 2005, 13:46
Wie kommst du eigentlich auf die Keycode Tabelle, die passt nämlich scheinbar auf kein Scancodeset das ich kenne, woraus sich die nächste Frage ergibt: Welches Scancodeset benutzt du?
Noch ein Tipp: verwende doch mal mov al, [keycode+al]