我正在为键盘输入工作,我正在开发一个非常基本的内核,而且我完全卡住了.我似乎无法在网上找到任何可以向我显示我需要知道的信息.
我的内核现在正在保护模式下运行,所以我无法使用实模式键盘例程而不会跳转到实模式和后退,这是我试图避免的.我希望能够从保护模式访问我的键盘.有谁知道如何做到这一点?到目前为止我唯一发现的是它涉及使用输入/输出端口直接与控制器通信,但除此之外我感到难过.当然,这不是经常出现的事情.通常,Assembly教程假设您正在运行下面的操作系统.
我是x86程序集的新手,所以我只是在寻找一些好的资源来处理来自保护模式的标准硬件.我正在用NASM编译汇编源代码并将其链接到用DJGPP编译的C源代码.有什么建议?
我正在尝试编写一个非常简单的内核用于学习目的.在阅读了大量有关x86架构中PIC和IRQ的文章后,我发现这IRQ1是键盘处理程序.我正在使用以下代码打印正在按下的键:
#include "port_io.h"
#define IDT_SIZE 256
#define PIC_1_CTRL 0x20
#define PIC_2_CTRL 0xA0
#define PIC_1_DATA 0x21
#define PIC_2_DATA 0xA1
void keyboard_handler();
void load_idt(void*);
struct idt_entry
{
unsigned short int offset_lowerbits;
unsigned short int selector;
unsigned char zero;
unsigned char flags;
unsigned short int offset_higherbits;
};
struct idt_pointer
{
unsigned short limit;
unsigned int base;
};
struct idt_entry idt_table[IDT_SIZE];
struct idt_pointer idt_ptr;
void load_idt_entry(char isr_number, unsigned long base, short int selector, char flags)
{
idt_table[isr_number].offset_lowerbits = base & 0xFFFF;
idt_table[isr_number].offset_higherbits …Run Code Online (Sandbox Code Playgroud)