Я пытаюсь собрать воедино первые кусочки ядра. В настоящее время у меня есть все ядро, скомпилированное как код C, и мне удалось отобразить текст в окне консоли и все такое хорошее. Теперь я хочу начать принимать ввод с клавиатуры, чтобы реально использовать эту вещь и приступить к управлению процессами.
Я использую DJGPP для компиляции и загрузки с GRUB. Я также использую небольшую сборку, которая в основном переходит непосредственно в мой скомпилированный код C, и я счастлив оттуда.
Кажется, что все исследования, которые я провел, указывают на ISR в $ 0x16 для чтения следующего символа из буфера клавиатуры. Из того, что я могу сказать, это должно хранить значение ASCII в ах, и код ключа в 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 поможет в этом. Как только я смогу это сделать, я смогу сделать все остальное.
Я предполагаю, что я спрашиваю здесь, я где-нибудь рядом с правильным путем? Как вообще можно получить ввод с клавиатуры на этом уровне?
РЕДАКТИРОВАТЬ: Оооо ... так что я работаю в защищенном режиме. Это, безусловно, объясняет сбой при попытке получить доступ к функциям реального режима.
Итак, я думаю, что я ищу, как получить доступ к вводу-выводу клавиатуры из защищенного режима. Я мог бы найти это сам, но если кто-то узнает, не стесняйтесь. Еще раз спасибо.