当前,我需要创建自定义操作系统来测试一些想法。 我的问题是:如何设置视频卡的分辨率而不会中断?我的系统支持多重引导标准,并且内核以保护模式启动,因此我可能无法使用BIOS服务。
我找不到端口号等来初始化视频购物车并设置重新布置。我尝试在VGA图形地址空间中写入dword值,但是什么也没显示。
修改1: 我发现此代码片段: http://bos.asmhackers.net/docs/vga_without_bios/snippet_5/vga.php
我不知道它以哪种许可证发布,所以我不能使用它。另外,我更喜欢用C编写自定义代码。
我将用C重写它并告诉您它可以工作,但是有人可以告诉我它很好(禁忌症是什么)。我问,因为您问我是否可以在内核中内置虚拟机。
Edit2
__asm__ (
"cli\n \
mov %%cr0,%%eax\n\
mov $1,%%cl \n\
xor %%cl,%%cl \n\
and %%cl, %%al \n\
mov %%eax,%%cr0\n \
sti \n\
xor %%ax,%%ax\n \
mov $0x12,%%ah\n \
int $0x10\n \
cli\n \
mov %%cr0,%%eax\n \
or $1,%%al\n \
mov %%eax,%%cr0\n \
sti \
" : : : "eax", "ecx")
); 我不知道将我的源代码放在那里并寻求帮助会受到赞赏。我写了上面的代码,应该切换到实模式,设置视频模式并返回保护模式。我不知道我在做什么错。这里的描述表是否干净?我是OS编程的新手。 我的操作系统在此代码段中重置。三重后果? 我发现了第一个错误-而是xor cl,cl应该为ne / not cl。在这两种情况下,操作系统都会重置。