扩展ASCII字符以黄色而不是白色打印-OSDev
我正在开发一个操作系统内核。我在屏幕上打印扩展ASCII字符时遇到问题。当我尝试在屏幕上打印字符时,一般ascii字符很容易以白色打印。但当我试图打印扩展ASCII字符,如块、西格玛等时,它会以黄色打印。而是使用扩展ASCII字符以黄色而不是白色打印-OSDev,c,kernel,osdev,C,Kernel,Osdev,我正在开发一个操作系统内核。我在屏幕上打印扩展ASCII字符时遇到问题。当我尝试在屏幕上打印字符时,一般ascii字符很容易以白色打印。但当我试图打印扩展ASCII字符,如块、西格玛等时,它会以黄色打印。而是使用颜色的数字-1打印这些字符 WHITE -> YELLOW YELLOW -> BRIGHT MAGENTA BRIGHT MAGENTA -> BRIGHT RED . . and so on 有人能告诉我为什么会发生这种情况,并帮助我解决这个问题吗 我的代码就是这
颜色的数字-1
打印这些字符
WHITE -> YELLOW
YELLOW -> BRIGHT MAGENTA
BRIGHT MAGENTA -> BRIGHT RED
.
.
and so on
有人能告诉我为什么会发生这种情况,并帮助我解决这个问题吗
我的代码就是这样-
putChar(0xdb,0,3,color(BLACK,BLACK));
putChar('A',2,3,color(WHITE,BLACK));
putChar(228,0,4,color(B_GREEN,BLUE));
putChar('A',2,4,color(B_GREEN,BLUE));
putChar(228,0,5,color(B_MAGENTA,BLUE));
putChar('A',2,5,color(B_MAGENTA,BLUE));
输出是-
我本可以使用颜色+1代码,但没有任何颜色高于白色。我怎么能把它们印成白色
编辑-putChar代码
void putChar(char character, short col, short row, unsigned char attr) {
volatile unsigned char* vid_mem = (unsigned char *) VIDEO_MEM;
int offset = (row*80 + col)*2;
vid_mem += offset;
if(!attr) {
attr = default_color;
}
*(unsigned short int *)vid_mem = (attr<<8)+character;
}
void putChar(字符、短列、短行、无符号字符属性){
易失性无符号字符*vid_mem=(无符号字符*)VIDEO_mem;
整数偏移=(行*80+列)*2;
vid_mem+=偏移量;
如果(!attr){
attr=默认颜色;
}
*(unsigned short int*)vid_mem=(attr最有可能的问题是:
(attr<<8)+character
(attr最可能的问题是:
(attr<<8)+character
(attrWell…putChar()
中有什么?@dashwuff我添加了代码它只是符号扩展-要么将character
变成一个unsigned char
,要么在添加到attr之前屏蔽高位,谢谢现在它工作正常!!好吧,putChar()中有什么内容
?@Daskwuff我已经添加了代码它只是符号扩展-要么将字符
变成无符号字符
,要么在添加到属性之前屏蔽高位。谢谢,现在它工作正常了!!是的,这就是问题所在。我已经纠正了,现在它工作了。是的,这就是问题所在。我已经纠正了,现在又解决了作品