当我们用BIOS服务获得一些关于VGA的视频信息后,一定要注意的一点是:BIOS会对齐每一行的线性帧地址,换句话说,我们需要把每行的像素数(x)以0x10为单位进行向上舍入,否则就会出现错位现象。
比如说,屏幕分辨率为1366*768,也就是x为556H,那么我们就把它向上舍入,这个方法有很多,比如用if(这里就不贴代码了😃),但我们可以用跟更加简洁的写法(非三目:
x = (x + 0x0f) & 0xfff0; //x为每行的像素数
这个其实很容易理解:加上0fH的作用和if是一样的,即判断它的个位数是否为零,若是则进一位;然后在再向下舍入,即把个位清零,这个技巧十分有用,不过不是笔者想出来的,而是笔者在书上看到的。
最后上几张图😉
错位
错位放大图·1
错位放大图·2
正确