首页 > 解决方案 > 使用VGA将消息打印到屏幕上

问题描述

我正在尝试编写一个函数,该函数将使用 VGA 文本模式缓冲区将消息打印到屏幕上。这是打印单个字符的函数:

void putc(uint8_t c, enum Color term_color)
{
    uint8_t *vidptr = (uint8_t*)0xB8000;

    *vidptr = c;
    vidptr++;
    *vidptr = (uint8_t*)term_color;
    vidptr++;
}

这是我要打印字符串的函数:

void puts(const uint8_t* str, enum Color term_color)
{
    for(size_t i = 0; i != '\0'; i++) {
        putc(str[i], term_color);
    }
}

但它不打印任何东西。只有黑屏和闪烁的光标。

编辑:打印单个字符的第一个功能有效。

标签: coperating-systemkernelosdevvga

解决方案


功能

putc(uint8_t c, 枚举颜色 term_color)

始终将字符放在相同的位置(0xB8000)。
你需要声明

uint8_t *vidptr

在函数外部正确递增每次调用。


推荐阅读