Я разрабатываю ядро ОС. Перед печатью ASCII-символов на экране появляется проблема. Когда я пытаюсь напечатать символы на экране, общие символы ascii легко печатаются в белом цвете. Но когда я пытаюсь напечатать расширенные символы 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 - The 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 Я добавил код –
Это просто расширение знака - либо сделайте 'character'' unsigned char', либо замаскируйте старшие биты, прежде чем добавить его в 'attr << 8'. –