我一直在关注https://wiki.osdev.org/Bare_Bones上的Bare Bones内核指南,但我不理解这些方法。有人可以解释为什么方法中的按位运算符是必要的吗?预先感谢!
enum vga_color {
VGA_COLOR_BLACK = 0,
VGA_COLOR_BLUE = 1,
VGA_COLOR_GREEN = 2,
VGA_COLOR_CYAN = 3,
VGA_COLOR_RED = 4,
VGA_COLOR_MAGENTA = 5,
VGA_COLOR_BROWN = 6,
VGA_COLOR_LIGHT_GREY = 7,
VGA_COLOR_DARK_GREY = 8,
VGA_COLOR_LIGHT_BLUE = 9,
VGA_COLOR_LIGHT_GREEN = 10,
VGA_COLOR_LIGHT_CYAN = 11,
VGA_COLOR_LIGHT_RED = 12,
VGA_COLOR_LIGHT_MAGENTA = 13,
VGA_COLOR_LIGHT_BROWN = 14,
VGA_COLOR_WHITE = 15,
};
static inline uint8_t vga_entry_color(enum vga_color fg, enum vga_color bg)
{
return fg | bg << 4;
}
static inline uint16_t vga_entry(unsigned char uc, uint8_t color)
{
return (uint16_t) uc | (uint16_t) color << 8;
}
答案 0 :(得分:3)
该代码用于生成VGA Compatible Text Mode,
该枚举指定一个占用四位的颜色表。第一个函数接受前景色和背景色,并对背景色进行位移位,以使这两种颜色适合一个八位无符号整数。
第二个函数接受上面定义的8位uint,并将其附加到8位字符以产生16位值,该值定义字母,背景色和前景色。
答案 1 :(得分:0)
您似乎正在以每像素4位的模式运行。因此,每个字节需要两个值。该位在8位字节中放置了两个4位值。