模式号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没配置的原因!!!!

你可能感兴趣的:(模式号0x105)