OS DEV Нежелательный текст при попытке получить информацию о биографии VBE - PullRequest
0 голосов
/ 08 октября 2019

Я пытаюсь разработать собственное доказательство концепции операционной системы. Просто некоторые основы. Я только вошел в графику с VBE. Одна проблема у меня была получить поддерживаемые режимы видео. После интенсивных исследований я обнаружил, что vbe получает информацию о биосе (ax = 4f00 int 10) и реализовал ее следующим образом:

Это реальный режим

    mov ax, 0
    mov es, ax
    mov ax, [vbe_info_structure]
    mov di, ax

    mov ax, 0x4f00

    int 0x10

    cmp ax, 0x004F
    jne notOK

, и объявил структуру vbe_info следующим образом также в реальномmode

vbe_info_structure:
    .signature      db "VESA"   ; indicate support for VBE 2.0+
    .table_data:        resb 512-4  ; reserve space for the table below


Затем я передал его адрес своему ядру в качестве параметра (32 бита !!!)

mov eax, [vbe_info_structure]
    push eax

    call _kmain

, и мой простой код ядра такой (32 бита))


struct VbeInfoBlock {
   char VbeSignature[4];             // == "VESA"
   uint16_t VbeVersion;                 // == 0x0300 for VBE 3.0
   uint16_t OemStringPtr[2];            // isa vbeFarPtr
   uint8_t Capabilities[4];
   uint16_t VideoModePtr[2];         // isa vbeFarPtr
   uint16_t TotalMemory;             // as # of 64KB blocks
} __attribute__((packed));

int kmain(struct VbeInfoBlock *vbeinfo)
{


    init_idt();
    SetPITSpeed(100);

    init_DTCursor();

    printf(vbeinfo->VbeSignature[0]);

    while(1);
}

Исключительным вводом из printf должно быть "V", но я получаю ненужный S и некоторые нежелательные символы только 2 символа.

...