【发布时间】:2017-05-22 00:30:21
【问题描述】:
我正在开发一个操作系统内核。在将扩展的 ASCII 字符打印到屏幕时遇到问题。当我尝试在屏幕上打印字符时,一般的 ascii 字符很容易以白色打印。但是当我尝试打印扩展的 ASCII 字符(如块、西格玛等)时,它会以黄色打印。而是使用color's number - 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));
输出是 -
我本可以使用 color+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;
}
【问题讨论】:
-
嗯……
putChar()中有什么内容? -
@duskwuff 我已经添加了代码
-
这只是符号扩展 - 要么将
character设为unsigned char,要么在将其添加到attr<<8之前屏蔽高位。 -
谢谢,现在可以正常使用了!!