Я пытаюсь написать простую операционную систему, чтобы лучше понять, как работает операционная система, у меня проблема с моей библиотекой экрана, у меня есть функция очистки экрана:
#define VGA_ADDRESS 0xb8000
#define MAX_ROWS 25
#define MAX_COLS 80
#define SUPREMACY_TTY_COLOR 0x0f
#define RED_ON_WHITE 0xf4
/* Screen i/o ports */
#define REG_SCREEN_CTRL 0x3d4
#define REG_SCREEN_DATA 0x3d5
void clear_screen() {
int screen_size = MAX_COLS * MAX_ROWS;
int i;
char* vga_mem = (char*)VGA_ADDRESS;
for (i = 0; i < screen_size; i++) {
vga_mem[i*2] = ' ';
vga_mem[i*2+1] = TTY_COLOR;
}
set_cursor_offset(get_offset(0, 0));
}
int get_offset(int col, int row) { return 2 * (row * MAX_COLS + col); }
Но ОС собирается загрузиться, когдаЯ запускаю эту функцию в ядре, я начал отладку с помощью gdb, и она показывает, что функция была вызвана как:
get_offset(0,0);
, но в функции есть странные значения:
get_offset (col=-268370093, row=-268377405) at kernel/drivers/screen.c:103
Делать кому-либознает, в чем проблема?
@ edit, я добавил определения, единственное, что я делаю, это вызываю clear_screen () из ядра main ()