Я пытаюсь собрать воедино первые части ядра. В настоящее время у меня есть все ядро, скомпилированное как код C, и мне удалось заставить его отображать текст в окне консоли и все это прекрасное совершенство. Теперь я хочу начать принимать ввод с клавиатуры, чтобы я действительно мог немного использовать эту вещь и приступить к управлению процессами.
Я использую DJGPP для компиляции и загрузки с помощью GRUB. Я также использую небольшую часть сборки, которая в основном переходит прямо в мой скомпилированный код C, и я счастлив от этого.
Все исследования, которые я провел, похоже, указывают на ISR по адресу $ 0x16 для чтения следующего символа из буфера клавиатуры. Насколько я могу судить, здесь предполагается хранить значение ASCII в ah, а код клавиши - в al или что-то в этом роде. Я пытаюсь закодировать это, используя следующую процедуру во встроенной сборке:
char getc(void)
{
int output = 0;
//CRAZY VOODOO CODE
asm("xor %%ah, %%ah\n\t"
"int $0x16"
: "=a" (output)
: "a" (output)
:
);
return (char)output;
}
При вызове этого кода ядро сразу вылетает. (Я запускаю его на VirtualBox, я не чувствовал необходимости пробовать что-то столь простое на реальном оборудовании.)
Теперь у меня есть пара вопросов. Никто не смог мне сказать, работаю ли я (с тех пор, как мой код был запущен из GRUB) в настоящий момент, в реальном или защищенном режиме. Я так или иначе не совершил прыжок, я планировал работать в реальном режиме, пока не настроил обработчик процесса.
Итак, если я работаю в реальном режиме, что я делаю не так и как это исправить? Мне просто нужна базовая процедура getc, желательно неблокирующая, но я буду проклят, если Google поможет в этом вообще. Как только я смогу это сделать, я смогу сделать все остальное оттуда.
Думаю, я спрашиваю, нахожусь ли я на правильном пути? Как вообще добиться ввода с клавиатуры на этом уровне?
РЕДАКТИРОВАТЬ: OOhh ... так что я работаю в защищенном режиме. Это определенно объясняет сбой при попытке доступа к функциям реального режима.
Итак, я думаю, я ищу, как получить доступ к вводу-выводу клавиатуры из защищенного режима. Возможно, я смогу найти это самостоятельно, но если кто-то узнает, не стесняйтесь. Еще раз спасибо.