如何实现终端滚动
How to implement terminal scrolling
我已经按照 Bare Bones 教程创建了一个内核。我已经添加了一些对终端 scolling 的支持,但它并没有真正起作用。当我 运行 我在 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;
}
我是这样做的:
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];
}
}
}
希望这会有所帮助。
我已经按照 Bare Bones 教程创建了一个内核。我已经添加了一些对终端 scolling 的支持,但它并没有真正起作用。当我 运行 我在 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;
}
我是这样做的:
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];
}
}
}
希望这会有所帮助。