драйвер ввода-вывода - PullRequest
0 голосов
/ 17 марта 2020

Я написал небольшое ядро ​​NASM, настроил IDT, переназначил PI C и PIT и замаскировал все прерывания, кроме клавиатуры IRQ1. Я хочу сделать драйвер клавиатуры, который печатает символы, введенные пользователем. Я пытался следовать учебным пособиям, но я просто запутался и не знаю, с чего начать. Я знаю, что есть порт управления (0x64) и порт данных (0x60). Я попробовал следующий подход:

irq1_h:                  ;irq1 handler
    pusha                ;save registers by placing on stack
    sti                  ;restore interrupts
    in al, 0x60          ;read input charcter from keyboard data port 0x60
    mov [string], al     ;save it in string
    mov ebx, string      ;print string character
    call print_string
    popa                 ;get registers back
    mov al, 0x20         ;send End of Interrupt to PIC
    out 0x20, al

Когда я запускаю код, все работает нормально, пока я не нажму клавишу. Я получаю проверку границ исключительных ситуаций (исключение № 5, мой собственный запрограммированный экран ошибок). Я запускаю это в QEMU. Помимо этого все работает хорошо.

РЕДАКТИРОВАТЬ: Добавление ret в конце остановил сбой. Напечатанные символы не являются напечатанными, хотя, потому что я должен преобразовать коды сканирования от клавиатуры до символов ASCII?

...