Как нарисовать пиксель через видеопамять с помощью C? - PullRequest
0 голосов
/ 09 мая 2019

Проблема:
Я следовал учебному пособию на https://wiki.osdev.org/Drawing_In_Protected_Mode и столкнулся с проблемой рисования пикселя с использованием данной функции.

Что я сделал:
1. Изменен режим видео с использованием BIOS прерывания в загрузчике на 113h (VBE) с http://www.columbia.edu/~em36/wpdos/videomodes.txt стол;
2. Доступ к видеопамяти с использованием заданной функции

/* only valid for 800x600x32bpp */
static void putpixel(unsigned char* screen, int x,int y, int color) {
    unsigned where = x*4 + y*3200;
    screen[where] = color & 255;              // BLUE
    screen[where + 1] = (color >> 8) & 255;   // GREEN
    screen[where + 2] = (color >> 16) & 255;  // RED
}

, взятой из статьи, с видеопамятью в макросе

#define VGA 0xA0000   
И попытался назвать его следующим образом
putpixel(VGA, 10, 10, 3);
Убедитесь, что это не из-за крошечного пикселя, используя цикл, чтобы попытаться отобразить больше из них

Результаты:
Ожидаемый: пиксель наэкран в QEMU
Актуально: Ничего

1 Ответ

1 голос
/ 09 мая 2019

Ваш пиксель почти черный, имеет цвет <0, 0, 3>.Вы могли бы попытаться назвать это как

putpixel(VGA, 10, 10, 0x00FFFFFF); 

Это поместило бы хороший белый пиксель на экран.

...