Lowlevel
Lowlevel => Lowlevel-Coding => Thema gestartet 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.
-
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.
-
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)