Программа сборки x86 плохо работает под VirtualBox (XGA Graphics - VBE) - PullRequest
0 голосов
/ 07 марта 2012

Я пытаюсь понять, как виртуализация влияет на мою программу сборки x86.

Обычно я загружаю старый clunker pentium III и загружаю DOS с USB-ключа. Вместо этого я попытался настроить виртуальную коробку и работать таким образом. Кажется, что мои программы работают нормально, но цвета кажутся испорченными.

Это довольно простая программа, собранная под NASM, которая переключает режим видео в XGA 4105h и рисует несколько простых фигур в разных цветах.

Можно ли предположить, что проблема связана с тем фактом, что на самом деле видеорежим моей машины не действительно работает в режиме XGA, поэтому биты для цветов интерпретируются по-разному? (простите за незнание в объяснении, поскольку я мало знаю о том, как виртуализация работает на уровне ISA)

Как я могу обойти эту проблему? Я бы хотел продолжить заниматься программированием для x86, но мне нравится работать на мобильных устройствах.

РЕДАКТИРОВАТЬ: я вижу, что по крайней мере под Windows, при попытке выполнить 16-битный код, Windows работает в виртуализированной среде, которая не дает программе прямой доступ к видеокарте, а вместо этого дает доступ к «виртуальной карте». "который обычно не выходит за пределы VGA ...

Но поскольку я уже нахожусь в виртуальной среде, как это влияет на это? Я полностью обручен?

1 Ответ

1 голос
/ 11 марта 2014

4105h - это стандартизированный модемный номер VBE для BIOS VBE 1, а также для DOSBOX. Но начиная с VBE 2 номера режимов больше не стандартизированы. При использовании BIOS VBE 2 или VBE 3 мы должны получить номера модемов из карты BIOS, если мы не используем DOSBOX.

Для того, чтобы получить эти номера режимов из биографии VBE 2 или VBE 3, мы должны использовать функцию 4B00 VBE для получения информации SVGA VBE в буфере из 512 байт. Внутри этого буфера + 0Eh мы можем найти адрес (OFFSET, SEGMENT) моделиста и по этому адресу мы можем получить номера модов. Моделист заканчивается словом 0FFFF.

Также, если мы используем DOSBOX, с каждым модемом мы можем получить информацию о режиме с помощью функции VBE 4F01h в другом буфере 256 байт. Теперь мы можем проверить атрибуты режима, разрешение, байты на пиксель, байты на строку развертки, положение поля и размер маски красного, зеленого и синего цветов и другие критерии, если они соответствуют требованиям, которые мы ищем .

Dirk

...