Войти

Показать полную графическую версию : графика на ассемблере под дос


JCooper
23-07-2003, 22:12
Почти дописал на паскале прогу - просмотрщик файлов
в формате pcx но есть одна проблема. Алгоритм обработки файла пашет
без глюков, есть проблемы с отображением, а точнее с передачей цветов.
Цвета где более чётко выражены компоненты цвета R,G,B передаются нормально,
а всякие там серенькие, извиняюсь поносные и др., на экране неограниченно стремяться
к черному. Ну например цвет 808080 (R=80h, G=80h, B=80h) это серый, даже
ближе к светло-серому, а у меня гад черный. Так же и с другими. Но повторюсь
алгоритм в порядке, все дело в передаче цвета. Привожу упрощенный ассемблерный кусок, т.к.
стандартные средства паскаля не покатили в силу их ограниченности.

инициализирую граф. режим 256 цветов, 320*200
mov ax,0013h
int 10h

тут цикл, заношу считанную из файла палитру
mov dh,R
mov ch,G
mov cl,B
mov bx,color
mox ax,1010h
int 10h

поточечный цикл вывода на экран
(с видеостраницами не парюсь пока не отлажу все до конца)
mov ah,0ch
mov al,color
mov cx,x
mov dx,y
int 10h

Заранее благодарен за ответы.
Т.к. ассемблерщик я начинающий, то буду весьма признателен любым советам.

XXXX Pro
28-07-2003, 02:23
Дело в том, что при задании палитры в режиме 13h для каждого цвета используется только 6 бит, причем младших, а старшие просто отбрасываются. (Соответственно 80h становиться 00h и ты видишь черный.) Поэтому сдвигай dh,dl,cl вправо на 2 разряда каждый перед вызовом функции 1010h, и все станет нормально.

JCooper
29-07-2003, 13:51
XXXX Pro все класс! shr и готово! :up

Guest
22-10-2003, 17:27
а скорость вывода графики тебя не беспокоит? ведь 10h интеррапт он же медленный как зараза (как и все интеррапты). на прямую в память писать не пробовал?

видеопамять обычно начинается с 0хА000. делаешь так:

push 0a000h
pop es
mov al,color   ; 0-255 index of  palette array
mov es:[di],al


в 0х13 режиме видеопамять только 64К так что DI'я хватит вполне. Да и заполнение всего экрана происходит мгновенно.

Guest
22-10-2003, 22:49
Guest конечно же тормозит, я для простоты так написал, меня в тот момент беспокоила не скорость а передача цветов. С видеопамятью давным давно разобрался, заваял уже прсмотрщик под дос 24-битного bmp в SVGA-режиме (у pcx дальше 256 цветов не пошло, 24-битный pcx - формат убитый, влом писать обработчик)

JCooper
22-10-2003, 22:51
блин забыл авторизоваться...в общем это я написал :)

lss007
17-09-2004, 12:30
Помогите советом, кто может! Подскажите пожалуйста, как запрограммировать 16- или 32-разрядный цвет под ДОС. Заранее спасибо.

hasherfrog
17-09-2004, 13:02
lss007
Во-первых, приветствуем на форуме :)

Что же касается графики для SVGA под DOS, то тут такая история, емнип:
Давным-давно :), когда ещё не было Win95, существовало много видеокарт от разных производителей. Все они могли работать как SVGA, но аппаратные реализации поддержки больших разрешений и многоцветности были разными. Поэтому писать игрушки стало трудно. В результате был разработан специальный "пакет" VESA, который был неким API для DOS-программеров, что-то типа GDI. Универсальность и поддержка большого количества видеоадаптеров привела к большой популярности этого пакета и в последние годы существования DOS как распространённой операционки все игры шли в комплекте с vesa-драйвером. Он запускался как экзешник или был вшит в саму игрушку.

К чему это я? К тому, что: Ищите VESA. К сожалению, я не смог зайти на сайт разработчиков, может они и скопытились :(

lss007
21-09-2004, 09:46
Спасибо hasherfrog'у за информацию:)




© OSzone.net 2001-2012