我正在开发一个简单的操作系统内核,并且我正在尝试制作一个可以工作的视频库,以便以后可以使用它。(VBE 版本 3.0,1920 * 1080px,32bpp)。
我在 C 中编写了一个像素绘图函数,它似乎工作正常:
void putPixelRGB(struct MODEINFOBLOCK mib, short x, short y, int color) {
int *pos = (char *)mib.framebuffer + x * 4 + y * 7680;
*pos = color;
}
for
然后我尝试使用这个函数和两个循环来填充整个屏幕:
for(int i = 0; i < 1920; i++) {
for(int j = 0; j < 1080; j++) {
putPixelRGB(mib, i, j, 0xFFFFFF);
}
}
(我什至尝试用 0xFF 填充视频内存中的每个单个字节,以确保我没有改变其他像素或东西:P......而且,呃......我得到了相同的结果。)
dloop:
mov byte[eax], 0xFF ;eax contains the address of the FB memory.
inc eax
cmp eax, 829440 ;829440 = 1920 * 1080 * 4
jg done
jmp dloop
done:
hlt
知道为什么这不起作用吗?我是否以错误的方式访问内存?
编辑:
MODEINFOBLOCK
结构:
struct MODEINFOBLOCK {
int attributes;
char windowA, windowB;
int granularity;
int windowSize;
int segmentA, segmentB;
long winFuncPtr;
int pitch;
int resolutionX, resolutionY;
char wChar, yChar, planes, bpp, banks;
char memoryModel, bankSize, imagePages;
char reserved0;
char readMask, redPosition;
char greenMask, greenPosition;
char blueMask, bluePosition;
char reservedMask, reservedPosition;
char directColorAttributes;
char* framebuffer;
long offScreenMemOff;
int offScreenMemSize;
char reserved1 [206];
};