Пользовательские режимы отображения в сборке - PullRequest
0 голосов
/ 26 апреля 2018

Я проектирую мини-комбо-загрузчик-ядро в 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 пишет о загрузке при успешной загрузке режима.

...