如何实现终端滚动

时间:2015-01-11 04:39:59

标签: c scroll terminal osdev bare-metal

我遵循了Bare Bones教程并创建了一个内核。我添加了一些支持终端搜索,但它没有真正起作用。当我在VirtualBox中运行我的最终ISO映像时,它给了我一个严重的错误。日志文件充满了胡言乱语。目前,我的终端滚动功能是:

void terminal_scroll()
{
    uint8_t attribyte = (0 << 4) | (15 & 0x0F);
    uint16_t blank = 0x20 | (attribyte << 8);

    unsigned int i;
    for (i = 0*80; i < 24*80; i++)
        terminal_buffer[i] = terminal_buffer[i + 80]

    for (i = 24*80; i < 25*80; i++)
        terminal_buffer[i] = blank;
}

1 个答案:

答案 0 :(得分:4)

这就是我这样做的方式:

void terminal_scroll(){
    for(int i = 0; i < vga_height; i++){
        for (int m = 0; m < vga_width; m++){
            terminal_buffer[i * vga_width + m] = terminal_buffer[(i + 1) * vga_width + m];
        }
    }
}

希望这会有所帮助。