C получить сырое нажатие клавиши без stdlib - PullRequest
1 голос
/ 16 марта 2019

Я работаю над очень простой операционной системой для обучения и пытаюсь начать с нажатия клавиш. Я делаю автономный исполняемый файл, поэтому нет стандартной библиотеки. Как бы я взял ввод с клавиатуры? Я разобрался, как печатать на экран через видеопамять.

/*
* kernel.c
* */

void cls(int line) { // clear the screen
    char *vidptr = (char*) 0xb8000;
    /* 25 lines each of 80 columns; each element takes 2 bytes */
    unsigned int x = 0;
    while (x < 80 * 25 * 2) {
        // blank character
        vidptr[x] = ' ';
        // attribute-byte - light grey on black screen
        x += 1;
        vidptr[x] = 0x07;
        x += 1;
    }
    line = 0;
}

void printf(const char *str, int line, char attr) { // write a string to             video memory
    char *vidptr = (char*) 0xb8000;
    unsigned int y =0, x = 0;
    while (str[y] != '\0') {
        // the character's ascii
        vidptr[x] = str[y];
        x++;
        // attribute byte - give character black bg and light gray fg
        vidptr[x+1] = attr;
        x++;
        y++;
    }
}

void kmain(void) {
    unsigned int line = 0;
    cls(line);
    printf("Testing the Kernel", line, 0x0a);
}

и моя сборка:

    ;; entry point
bits 32                          ; nasm directive - 32 bit
global entry
extern _kmain                    ; kmain is defined in the c file

section .text
entry:  jmp start

    ;multiboot spec
    align 4
    dd 0x1BADB002            ; black magic
    dd 0x00                  ; flags
    dd -(0x1BADB002 + 0x00)  ; checksum. m+f+c should be zero

start:
    cli                      ; block interrupts
    mov esp, stack_space     ; set stack pointer
    call _kmain
    hlt                      ; halt the CPU

section .bss
resb 8192                        ; 8KB for stack
stack_space:
...