私はOSカーネルを開発しています。私は、拡張ASCII文字を画面に印刷する際に問題に直面しています。画面に文字を印刷しようとすると、一般的なASCII文字はWHITEの色で簡単に印刷されます。しかし、ブロック、シグマなどのような拡張ASCII文字を印刷しようとすると、黄色で印刷されます。むしろこれらの文字はcolor's number - 1
で印刷されます。拡張ASCII文字は白色ではなく黄色で表示されます - OSDev
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つのコードを使用することもできましたが、何も白の上にありません。どのように私は白でそれらを印刷できますか?
EDIT - 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
@duskwuff私はコード –
を追加しました。それは単に符号拡張です - '文字'を 'unsigned char'にするか、' attr << 8'に追加する前に上位ビットをマスクしてください。 –