hallo,
so, jetzt hab ich mich auchmal dazu durchgerungen, einen KeyboardTreiber zu bauen. hat bisher auch sehr gut funktioniert, bin gerade dabei, das mit den Lämpchen zu machen... ich hab mir ein byte geschaffen, dass die werte der steuertasten (alt, strg, shift, scroll und num) aufnimmt und im oberen teil (den restlichen 3 bits) die flags für die kleinen lämpchen... das ganze is so aufgebaut:
(7) CapslockLight | (6) NumLight | (5) ScrollLight | (4) Strg | (3) Scroll | (2) Num | (1) Alt(Gr) | (0) Shift
es funktioniert alles wunderbar, er switcht zwischen den tastensets (normal, shift, alt(gr)) und soweiter. nun will ich also die lämpchen schalten und mache das hiermit:
irq0x01_waitforkeyb1:
in al,0x64
and al,0x02
jnz irq0x01_waitforkeyb1
mov al,0xED
out 0x60,al
irq0x01_waitforkeyb2:
in al,0x64
and al,0x02
jnz irq0x01_waitforkeyb2
mov al,[io_keyboard_status]
shr al,0x05
out 0x60,al
problem is, dass er das garnet mag. bochs sagt:
00014900021p[KBD ] >>PANIC<< internal keyboard buffer full (imm)
mein echter PC reagiert einfach nichtmehr. der code schaut, ob der buffer leer is, wenn ja schreibt er seinen command rein, schaut wieder, ob er leer is, und schreibt dann die parameter rein. es funktioniert auch, in real wird das capslocklämpchen angeknipst, wenn ich auf capslock drück, aber leider halt nur einmal und danach regiert er nimmer. wo liegt mein problem? ich hab die infos aus einem buch und einem tut (
http://www.nondot.org/sabre/os/files/HCI/keyboard2.txt) wo es exakt so drinne steht...
danke für hilfe,
J!N[/url]