Autor Thema: RM: Hardwareinterrupt funktioniert nur ein Mal  (Gelesen 4215 mal)

arax

  • Beiträge: 27
    • Profil anzeigen
Gespeichert
« 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.

bluecode

  • Beiträge: 1 391
    • Profil anzeigen
    • lightOS
Gespeichert
« Antwort #1 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.
lightOS
"Überlegen sie mal 'nen Augenblick, dann lösen sich die ganzen Widersprüche auf. Die Wut wird noch größer, aber die intellektuelle Verwirrung lässt nach.", Georg Schramm

arax

  • Beiträge: 27
    • Profil anzeigen
Gespeichert
« Antwort #2 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)

 

Einloggen