Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: 16М цветная графика под DOS
Форум разработчиков электроники ELECTRONIX.ru > Cистемный уровень проектирования > Операционные системы > Программирование
mantech
Приветствую. Собственно встал вопрос, как правильно работать с весовскими режимами(0х112, 0х115 и 0х118) под чистым досом?

Пользуюсь watcom C под98й виндой (в ХР он не работает), работают все 256и цветные режимы, на остальных пишет неверный видеоконтроллер. Сначала думал, что эти режимы просто не работают, но в инете нашел прогу VESA16M, в которой все прекрасно работает. Ответ - сам дурак! Может у кого есть какие-нить исходники под это дело?
garlands
странно. гугл выдает на первом месте: http://sources.codenet.ru/download/1062/VESA16M.html Только не надо говорить, что там асм+кубасик, а надо на си.

mantech
Цитата(garlands @ Feb 21 2014, 22:09) *
странно. гугл выдает на первом месте: http://sources.codenet.ru/download/1062/VESA16M.html Только не надо говорить, что там асм+кубасик, а надо на си.


Да мне все-равно на чем - лишь бы исходники были рабочие и работали c PM(dos4gw).
ЗЫ. И там по этой ссылке только готовый бинарник - исходников нет.
_pv
а для чего?
правда очень интересно.
Pavia
Тоже интересно для чего?
Ведь гораздо проще писать под виндоус.

Цитата
как правильно работать с весовскими режимами(0х112, 0х115 и 0х118) под чистым досом?

Сразу не правильно. Забудьте нет фиксированных режимов. Режимы надо перебирать и искать подходящий.

Цитата
чистым досом?

Пользуюсь watcom C под98й виндой

Вы уж определитесь win98 или чистый DOS. Просто под VDM будет чуть по сложнее.

dos4gw с этой штукой почти не работал не помню, что к чему.
http://www.tenberry.com/dos4g/faq/video.html
Обращаю внимание что для работы с VESA в dos4gw нужно вызывать функции через DPMI.

Если под чистый DOS читай VESA спецификацию. Есть статьи их куча к примеру вот.
http://www.osp.ru/pcworld/1998/07/159374

А теперь про сложности.
1. Графическую библиотеку надо будет создавать или портировать.
2. Баги в железе.

Не удобно работать с банковым режимом, лучше работать с линейным буфером.
Нужно будет отобразить, а это зависит от DPMI и dos4gw реализации. Тут свои тараканы так как под дос одна реализация DPMI под виндоус другой.

По поводу портирования я бы остановился на AGG хотя тут надо смотреть может что по лучше по проще есть.
mantech
Цитата(Paviaa @ Feb 22 2014, 10:59) *
Тоже интересно для чего?
Ведь гораздо проще писать под виндоус.


Ребят, я конечно это понимаю biggrin.gif
Почему? Всеочень просто, пишу программу для промавтоматики, работающей в режиме 24х7 без участия оператора. Сейчас все работает под винду ХР и 7. С самой программой и подключенными к ней контроллерами проблем нет,а вот винда.... Постоянно что-то с ней не так, то экран внезапно "засыпает", хотя все настройки сделаны в режим "никогда", то отваливается усб порт, иногда просто перезагруз или вдруг трей вылезет поверх программы, ну и напоследок - включение-отключение компа - раз 20-30 все проходит на ура, а потом либо не выключится или при включении запускается безопасный режим... wacko.gifвобщем достала меня эта винда!

Цитата(Paviaa @ Feb 22 2014, 10:59) *
Вы уж определитесь win98 или чистый DOS. Просто под VDM будет чуть по сложнее.


А чего тут неопределенного? Программа под чистый дос, а иде у ваткома под дос нет, поэтому работаю из 98й винды laughing.gif
_pv
была библиотека allegro, что-то вроде SDL, старые версии поддерживали DOS. что-то умела с графикой, гляньте, может поможет.

но имхо Linux, *BSD и даже QNX, а то и вообще странные варианты вроде reactOS или haiku.
даже при отсутствии вообще каких-либо знаний об этих ОС, выглядят куда более адекватно чем попытка сделать графику под DOS.
да и описанные проблемы под windows выглядят странно, и вполне решаемо.
на решения beckhoff с их twincat посмотрите, вполне под windows живут и ничего, даже с каким-то realtime.
sasamy
Цитата(mantech @ Feb 22 2014, 20:30) *
Всеочень просто, пишу программу для промавтоматики
Программа под чистый дос, а иде у ваткома под дос нет, поэтому работаю из 98й винды
....
А чего тут неопределенного?


Вы для музея чтоли пишете sm.gif
mantech
Цитата(_pv @ Feb 23 2014, 02:13) *
на решения beckhoff с их twincat посмотрите, вполне под windows живут и ничего, даже с каким-то realtime.


Я не спорю, может и живут, только там скорее всего винда очень урезана и допилена, как например для mach 3 было в свое время. Только мне это не подходит - пользователи аппаратов в случае повреждения винды или диска не смогут сами так все доработать. Мое видение таково - чем проще система - тем стабильнее работа! Согласитесь, куда прощеформатануть флеху, скопировать туда прогу плюс каталог с картинками, вставить в плату промкомпа и включить! Что тут можно испортить? wink.gif
fowler
Была такая контора SciTech, делала SVGAKIT - эту библиотеку использовало множество разработчиков досовых игр.
В принципе, там только инициализация видеорежима и эмуляция части функций VESA BIOS для старых карт,
которые этих функций не имеют. У меня есть сам SDK и демы к нему, к сообщению прикрепил лишь инсталлятор от
SciTech с исходниками, остальное не влезло.
Нажмите для просмотра прикрепленного файла

Что касается Watcom, до того, как он стал open-source - у него была IDE под Дос.
И замените сам DOS4GW - уж больно он большой. Я использовал "ZRDX by Sergey Belyakov".
mantech
Цитата(fowler @ Feb 23 2014, 14:43) *
У меня есть сам SDK и демы к нему, к сообщению прикрепил лишь инсталлятор от
SciTech с исходниками, остальное не влезло.


Спасибо, посмотрю обязательно. А если еще скините хоть один-два рабочих примера - буду очень признателен.

ЗЫ. Режим вроде запустил, единственное - работа через int 10h уж очень медленно...

Цитата(fowler @ Feb 23 2014, 14:43) *
И замените сам DOS4GW - уж больно он большой.


А чем это грозит в защищенном режиме? Просто этот экстендер уже проверен десятилетиями wink.gif
fowler
Если будете рисовать через БИОС - и должно быть жутко медленно.
Вам проще использовать любой 256-цветный палитровый режим (1 байт на точку).
Устанавливаете требуемый режим (он должен иметь поддержку линейного режима - там бит где-то об этом говорит).
Далее отображаете область памяти видеоадаптера на память вашего процесса средствами дос-экстендера (в защищенном режиме).
И потом устанавливаете значение пиксела (Х,У) по адресу (byte*)base_addr+Y*stride+X, где stride - количество байтов в одной строке,
а base_addr - указатель на начало области памяти (видеоадаптера...).
Палитру либо загружаете через порты, либо средствами БИОС.
Как-то так, за давностью лет все уже смутно помнится.

Что касается экстендера - дело ваше. Наверное, у вас нет проблем с размером ПО.
ZRDX, насколько я помню, не обеспечивал полной совместимости с ДОС4ГВ.
Просто он раз в 10 меньше. Плюс я в него еще пихал некоторые свои функции.

В приложении - демы от SciTech SVGAKIT.

mantech
Цитата(fowler @ Feb 23 2014, 21:42) *
Вам проще использовать любой 256-цветный палитровый режим (1 байт на точку).


Дак вот в том-то и дело, что 256 не подходит - заказчику нужно полноцветные PNG картинки, с самим форматом проблем нет особых, а вот с видеокартой, совсем другое. Та скорость, с которой отрисовывается через int 10h - 2 сек кадр - тут никуда не годится. crying.gif
Причем я бы понял, еслиб это был какой-нить 486 проц, а тут все-таки pentium M-1,5 ГГц !
fowler
Любой HiColor или TrueColor режим. При линейном доступе разница лишь в адресации.
Адрес пиксела задается как (byte*)base_addr+Y*stride+X*byteperpix, где byteperpix - количество байт на один пиксел.
TrueColor в использовании проще, да и цветов больше (по байту на каждый цвет).

И если вы полностью формируете новый кадр заново, разумнее строить его в оперативной памяти и уже потом
копировать его в видеопамять блочными операциями (двойными словами, выровненными по границе двойного слова).

Если работаете со спрайтами, пишите простенькую процедуру на асме, которая вначале равняет адрес назначения до
границы двойного слова (копирует байтами), потом основной блок двойными словами и остаток снова байтами...

Есть еще всякие средства ускорения типа VBE/AF, но вам это не нужно. Сложности добавит, а на результате не особо скажется.

В общем, если откажетесь от работы через БИОС - раз в 20 как минимум быстрее будет.

mantech
Цитата(fowler @ Feb 24 2014, 01:13) *
В общем, если откажетесь от работы через БИОС - раз в 20 как минимум быстрее будет.


Видимо так и нужно. Посмотрел демки, там почти всепод старую винду, но есть одна под дос, и там как раз то, что нужно - работа с 16м цветов через linear frame buffer по времени укладывается в задачу. Будем копать в эту сторону cool.gif
mantech
Цитата(mantech @ Feb 24 2014, 09:14) *
Видимо так и нужно. Посмотрел демки, там почти всепод старую винду, но есть одна под дос, и там как раз то, что нужно - работа с 16м цветов через linear frame buffer по времени укладывается в задачу. Будем копать в эту сторону cool.gif



PS. Посмотрел я на эти исходники есть одно НО -

Can also be compiled to use the UVBELib linkable library
* version of UniVBE for direct device support. Contact
* SciTech Software for licensing information on this library
.

И где брать эти либы?
fowler
Исходники SVGAKIT были в моем первом посте.
Непосредственно библиотеку смотрите здесь.
mantech
Цитата(fowler @ Feb 24 2014, 11:54) *
Исходники SVGAKIT были в моем первом посте.
Непосредственно библиотеку смотрите здесь.


Спасибо большое. Я вроде как разобрался, скачал в инете какие-то малоизвестные исходники realtech, там всего 5 файлов, и работает!! Заполнение экрана 800х600х32 за 0.05 сек!!
Осталось гуй прикрутить...
Iptash
Цитата(mantech @ Feb 24 2014, 21:51) *
Спасибо большое. Я вроде как разобрался, скачал в инете какие-то малоизвестные исходники realtech, там всего 5 файлов, и работает!! Заполнение экрана 800х600х32 за 0.05 сек!!
Осталось гуй прикрутить...

Ну так поделись с этими малоизвестными исходниками)
LightElf
Да, и не забудьте для видеобуфера включить режим кэширования Write Combine! Скорости записи в видеопамять может легко раз в 20 возрасти на Pentium M
Kopa
Вместо ДОС предлагаю рассмотреть Kolibri OS должна перекрыть ваши потребности программирования Пром Автоматики где варианты её
использования тоже были. На форуме Kolibri OS могут помочь ответами.
Ядро ОС пишется на ассемблере, но также используются разные кросс компиляторы и портированные инструментальные средства.

P.S. Vesa в впилена в ядро. Правда ядро стартует от P100 процессора, но есть возможность и изменить ядро на более ранние и экзотичные CPU
ДОС Box для неё тоже есть rolleyes.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.