В настоящее время мне нужно создать собственную ОС для проверки некоторых идей.
У меня вопрос: как установить разрешение видеокарты без прерываний? Моя система поддерживает стандарт мультизагрузки, и ядро запускается в защищенном режиме, поэтому я, вероятно, не могу использовать службы BIOS.
Я не могу найти номер порта и т. Д., Чтобы инициализировать корзину для видео и установить разрешение. Я пытаюсь записать значение слова в графическом адресном пространстве VGA, но ничего не отображается.
Редактировать 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")
);
Я не знаю, где можно разместить исходный код и получить помощь. Я написал выше код, который должен переключиться в реальный режим, установить режим видео и вернуться в защищенный режим. Я не знаю, что я делаю не так. Здесь таблица описаний чистая или что-то еще? Я довольно новичок в программировании ОС.
Моя ОС сбрасывается в этом сегменте кода. Тройные осадки?
Я нашел первую ошибку - вместо xor cl, cl должен быть neg / not cl. В обоих случаях ОС сбрасывается.