Keyboard does not gen IRQ
Posted: Mon Nov 30, 2009 7:43 am
Hey all,
I am new to the x86 and OS development in general. So far, I have setup a GDT and IDT (these appear to work) and transitioned to protected mode. I have also transitioned to graphics mode and written a very simple VGA puts/putc function. However, now I am trying to add keyboard interaction to my OS.
I have looked at the code on the wiki for keyboard interaction and I appear to have done everything correctly (or so I think...). I have also consulted the following link: http://www.computer-engineering.org/ps2keyboard/. I can read 0x64 and 0x60, but the IBUF value is NEVER set and I never generate an interrupt. I know interrupts work because I can manually call one, like 0x09 or 0x10 and print a string to the screen.
I am using the bochs x86 emulator to test my OS and also VMWare (not generating interrupts on either... :'(). I pretty much used http://www.jamesmolloy.co.uk/tutorial_h ... 20IDT.html to setup my GDT and IDT, so I believe them to be correct. I also tried remapping the IRQs using the code on the wiki, but I still didn't get any interrupts. I figure I should get int 0x9 anyway, even without the mapping. I have also tried reading port 0x60 until the OUTBF is cleared in the 0x64 status register, but that didn't seem to help either.
Please let me know what I can provide (code fragments, screenshots, bochs register data, etc.) so that my problem can be best diagnosed. I appreciate any and all help.
Thank you.
I am new to the x86 and OS development in general. So far, I have setup a GDT and IDT (these appear to work) and transitioned to protected mode. I have also transitioned to graphics mode and written a very simple VGA puts/putc function. However, now I am trying to add keyboard interaction to my OS.
I have looked at the code on the wiki for keyboard interaction and I appear to have done everything correctly (or so I think...). I have also consulted the following link: http://www.computer-engineering.org/ps2keyboard/. I can read 0x64 and 0x60, but the IBUF value is NEVER set and I never generate an interrupt. I know interrupts work because I can manually call one, like 0x09 or 0x10 and print a string to the screen.
I am using the bochs x86 emulator to test my OS and also VMWare (not generating interrupts on either... :'(). I pretty much used http://www.jamesmolloy.co.uk/tutorial_h ... 20IDT.html to setup my GDT and IDT, so I believe them to be correct. I also tried remapping the IRQs using the code on the wiki, but I still didn't get any interrupts. I figure I should get int 0x9 anyway, even without the mapping. I have also tried reading port 0x60 until the OUTBF is cleared in the 0x64 status register, but that didn't seem to help either.
Please let me know what I can provide (code fragments, screenshots, bochs register data, etc.) so that my problem can be best diagnosed. I appreciate any and all help.
Thank you.