Я использую Bochs в Linux. Он работает нормально, но есть проблема, с которой мне не удалось справиться. Я получаю vga-info (доступные режимы, адрес линейного фреймбуфера (LFB)), а затем переключается на 1024 * 768 * 24 в реальном режиме. В соответствии с режимом vga-info 118h (1024 * 768 * 24) поддерживается, а LFB - от E000: 0000 (т.е. E0000 из-за сегмента: смещение или 0xE0000000 в плоской адресации, но эта память не существует, поскольку она почти 3.5GB). Позже я переключаюсь в защищенный режим (PM) и записываю данные в E0000, но не отображаются пиксели. Не делайте этого, если я пишу в 0xE0000000. Однако они делают, если я пишу в A0000, но отображается только память A0000-C0000 (128 Кбит). Я бы хотел использовать PM из-за 32 бит и LFB (без пейджинга). Я знаю, что видеокамера с более низкими разрешениями (например, 320 * 200 * 256) сопоставляется с A0000. В Bochs-config vbe включен (vga: extension = vbe). bochsout.txt говорит: «Расширение дисплея VBE Bochs включено».Bochs with graphics
Вопросы: Почему видеозапись от A0000, а не от E0000? Почему существует только 128-килограммовая видеокамера? (Это должно быть: 1024 * 768 * 3 байта, то есть 2,25 Мб)
Таким образом, графика не может быть выполнена в PM без пейджинга или я делаю что-то неправильно.
Спасибо заранее, грабят
Я нашел кое-что на http://wiki.osdev.org/Bochs_Graphics_Adaptor:
«Использование линейного буфера кадра (LFB)
При использовании линейного буфера кадра, BGA выставляет все из графической памяти в линейном режиме.В старых версиях Bochs и QEMU местоположение фиксировано на 0xE0000000 (VBE_DISPI_LFB_PHYSICAL_ADDRESS). Однако, когда Bochs настроен для эмуляции видеокарты PCI, а не ISA, адрес фреймбуфера больше не фиксированный, но может быть прочитан с первого PCI BAR устройства 0x1234: 0x1111 Чтобы включить LFB, используйте флаг VBE_DISPI_LFB_ENABLED (0x40) при включении расширений VBE (так что напишите значение VBE_DISPI_ENABLED | VBE_DISPI_LFB_ENABLED (0x41)).
QEMU не обращает внимания на флаг VBE_DISPI_LFB_ENABLED. Будут доступны как буфер линейного кадра, так и банк памяти. Бочс обращает внимание на флаг. В режиме LFB он игнорирует запросы об изменении банка, и ничего не происходит, когда вы пишете в банковскую память. В банковском режиме ничего не происходит, когда вы пишете в память LFB. "
Я не понимаю этого 0xE0000000, потому что Bochs поддерживает максимальную 1 ГБ памяти, и это намного больше. Кстати, включение vbe путем компиляции Bochs с --enable-vbe лишено," vga: extension = vbe "should . можно использовать вместо этого в Bochs-конфиге
РЕШЕНИЕ найдено (установлено бит "использовать LFB" во время установки режима VBE):
мов топора, 4F02h; режим VBE набора
мы Ого , 118h; режим 1024 * 768 * 24
или bx, 0100000000000000b; Набор бит четырнадцатый (использование LFB)
INT 10h
И LFB от 0xE0000000 в УПУ-modeinfo-блок сказал.