模式号0x105

在BIOS中设置

mov bx, 0x4105
mov ax, 0x4f02
int 0x10

分辨率:1024x768
颜色:8位,就是1个像素占1个字节
显存物理地址:0xe0000000

在保护模式中,写显存

int vram = 0xe0000000;
int width = 1024;
int height = 768;

char* p = 0;

void set_background_white(){    
    for(int i = vram; i <= vram+ (1024*768); i++){
        write_mem8(i, 15);
    }
}

效果是:


1024x768

注意点

之前一直在写显存这里就crash了!
猜测是写内存错误。
将写显存那块操作移到loader中,发现还是crash!
猜测应该是段的原因,难道不支持1MB以上的内存写操作?
带着这个猜测试了一下,果然是的。

[SECTION  .gdt]
;GDT
LABEL_GDT:           Descriptor 0, 0, 0                            ;空描述符
LABEL_DESC_FLAT_C:   Descriptor 0,0fffffh, DA_C | DA_32 | DA_LIMIT_4K            ;代码段,32位
LABEL_DESC_FLAT_RW:  Descriptor 0,0fffffh, DA_DRW | DA_32  | DA_LIMIT_4K         ; 0 ~ 4G
LABEL_DESC_VIDEO:    Descriptor 0B8000h, 0ffffh,  DA_DRW           ;显存首地址
; GDT结束

发现是DA_LIMIT_4K没配置的原因!!!!

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容