Lowlevel

Lowlevel => Lowlevel-Coding => Thema gestartet von: arax am 21. July 2008, 14:10

Titel: RM: Hardwareinterrupt funktioniert nur ein Mal
Beitrag von: arax am 21. July 2008, 14:10
Hallo,
ich bin jetzt erstmal wieder im Real Mode und möchte was mit Hardwareinterrupts machen.
Geht das einfach, indem ich das in die IVT eintrage?
Wenn ich diesen Code nehme funktioniert es nur beim ersten Tastendruck, danach nicht mehr:
push es
xor ax, ax
mov es, ax
cli
mov word [es:0x09*4], int09
mov [es:0x09*4+2], cs
sti
pop es

jmp $

int09:
mov ah,0eh
mov al,'0'
int 10h
iret

Ein Thema zu dem Problem, das ich nicht wiedergefunden habe, half mit nicht.
Titel: Re: RM: Hardwareinterrupt funktioniert nur ein Mal
Beitrag von: bluecode am 21. July 2008, 14:47
Du musst das Zeichen natürlich noch von der Tastatur (I/O Port 0x60 & 0x64) lesen, sonst weigert sich die Tastatur nochmal einen IRQ zu signalisieren. Außerdem musst du bei IRQs der PIC sagen, dass du den IRQ behandelt hast (nennt man dann EOI = End of Interrupt) und sie den nächsten an den Prozessoren melden soll.
Titel: Re: RM: Hardwareinterrupt funktioniert nur ein Mal
Beitrag von: arax am 21. July 2008, 19:31
Thanks, hatte ich schonmal was von gelesen aber nie gewusst das der da hin muss:
push es
xor ax, ax
mov es, ax
cli
mov word [es:0x08*4], int08
mov [es:0x08*4+2], cs
sti
pop es

jmp $

int08:
mov ah,0eh
mov al,'0'
int 10h

mov al,20h
out 20h,al

iret

(8; 9 hatte ich nur zum Testen)