Проблема с отображением VGA в моем ядре ОС - PullRequest
0 голосов
/ 03 февраля 2019

Я разрабатываю операционную систему как хобби-проект.Я подключил VGA-дисплей по адресу 0xB8000, количество строк равно 25, а столбцам - 80. Я использовал следующую функцию очистки экрана:

void vga_init(void) {

    // Initialise the VGA variables and clear the screen : :
    vga_buffer_pointer = (uint16_t *)  VGA_MEMORY_LOCATION;

    //start clear using 2 pass loop : 
    uint8_t iter_i = 0;
    uint8_t iter_j = 0;

    for(iter_i = 0; iter_i < VGA_ROWS; iter_i ++) {

        for(iter_j = 0; iter_j < VGA_COLS; iter_j++) {
            uint8_t index  = (VGA_COLS *  iter_i) + iter_j;

            vga_buffer_pointer[index] = ((uint16_t)color << 8) | ' ';
        }
    }

    enable_cursor(14,15);
} 

Я инициализирую экран зеленым цветом,Дисплей занимает только порт экрана терминала qemu, как показано ниже:

a busy cat

Но я хочу, чтобы весь терминал был зеленым.И дисплей должен использовать весь терминал.Любая помощь наиболее ценится.Спасибо

Я приложил суть моего кода.

VGA.c

1 Ответ

0 голосов
/ 03 февраля 2019

Изменение:

uint8_t index = (VGA_COLS * iter_i) + iter_j; 

на:

uint16_t index = (VGA_COLS * iter_i) + iter_j; 

A uint8_t недостаточно велико для хранения вычисления индекса, поэтому оно усекается, вызывая только частьстираемый дисплей.

...