Я проектирую мини-комбо-загрузчик-ядро в 1 файле как забавный проект, но я всегда задавался вопросом, как настроить пользовательский режим отображения под размер моего экрана вместо предварительно настроенных режимов отображения. Мой размер экрана 1366x768, и я просмотрел список прерываний Ральфа Брауна на ctyme.com :
int 10h/ah=0
, похоже, не работает для меня, потому что нет разрешения 1366x768 для выбора.
int 10h/ax=00F2h
также не имеет опции 1366x768. Я рассмотрел вариант bx=11Bh
, так как он близок к тому, что мне нужно для проекта с большим разрешением и множеством цветов, но я хотел бы знать, возможно ли получить разрешение идеально, как почти все основные ОС удалось сделать.
int 10h/ax=007Eh
выглядел чрезвычайно многообещающим на веб-сайте ctyme, но когда я попробовал это ...
[BITS 16]
org 0x7C00
mov ax, 0
mov es, ax
mov ah, 2
mov al, 1
mov ch, 0
mov dh, 0
mov cl, 2
mov bx, stage2
int 0x13
jmp stage2
times 510-($-$$) db 0
dw 0xAA55
stage2:
mov ax, 0x007E
mov bx, 1366
mov cx, 768
mov dx, 256 ;placeholder, was going to replace it with a higher number
int 10h
jmp $
... ничего не случилось.
Я собрал его с помощью nasm и запустил программу на qemu (моя ОС - последняя версия Ubuntu, 64-битная, кстати), выполнив:
nasm boot.asm
qemu-system-x86_64 boot
Я не запускал его для файла .iso, потому что qemu может запускать файлы bin, и я планировал поместить его в .iso, как только добился большого прогресса в ОС.
Примечание:
У меня работают готовые графические режимы (или, по крайней мере, некоторые из них, как обычные, но архаичные int 10h/ah=0/al=13h
)
Я задавался вопросом, является ли int 10h/ah=007Eh
просто еще одним способом загрузки готового графического режима, но затем я ввел разрешение и цвета для int 10h/ah=0/al=13h
, и он все еще не работал.
Я знаю, что на ctyme сказано, что int 10h/ax=4F02h/bx=81FFh
заполняет весь экран, но я попробовал это, и ничего не произошло.
ДРУГОЕ ПРИМЕЧАНИЕ:
В каждом случае, когда режим не работал, не отображалось никаких ошибок, просто ничего не происходило. Я знаю, когда это работает, потому что очищает исходный текст, который qemu пишет о загрузке при успешной загрузке режима.