Мне наконец удалось нарисовать пиксель на экране с помощью VESA B IOS Extensions в защищенном режиме. Но у меня возникла проблема с размещением его в другом положении (например, я хочу, чтобы он был в x = 100, y = 50).
Согласно http://www.brokenthorn.com/Resources/OSDevVid2.html, мы построить пиксели, используя этот код C:
void pixel_16RGB (unsigned short color, unsigned short x, unsigned short y) {
unsigned short* fb = (unsigned short*) _modeInfo.physBasePtr;
unsigned short offset = x + y * (_modeInfo.bytesPerScanLine / 2);
fb [offset] = color;
}
Я попытался записать его в сборке, поэтому результат выглядит так:
;first part
mov si, word[ModeInfoBlock + 10h]
mov edx, 0
lea eax, [si]
mov ecx, 2
div ecx
mov ecx, 100
mul ecx
add eax, 50
;second part
mov edx, dword[ModeInfoBlock + 28h]
add edx, eax
mov ebx, 0x3296fa
mov [edx], ebx
jmp $
Я ожидал синий пиксель отображается в координатах (100, 50), но я вижу только красный в случайном месте.
Думаю, я ошибаюсь в этой части:
add edx, eax
Я прав?