![]() |
Почти дописал на паскале прогу - просмотрщик файлов
в формате 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 Заранее благодарен за ответы. Т.к. ассемблерщик я начинающий, то буду весьма признателен любым советам. |
Дело в том, что при задании палитры в режиме 13h для каждого цвета используется только 6 бит, причем младших, а старшие просто отбрасываются. (Соответственно 80h становиться 00h и ты видишь черный.) Поэтому сдвигай dh,dl,cl вправо на 2 разряда каждый перед вызовом функции 1010h, и все станет нормально.
|
XXXX Pro все класс! shr и готово! :up
|
а скорость вывода графики тебя не беспокоит? ведь 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 конечно же тормозит, я для простоты так написал, меня в тот момент беспокоила не скорость а передача цветов. С видеопамятью давным давно разобрался, заваял уже прсмотрщик под дос 24-битного bmp в SVGA-режиме (у pcx дальше 256 цветов не пошло, 24-битный pcx - формат убитый, влом писать обработчик)
|
блин забыл авторизоваться...в общем это я написал :)
|
Помогите советом, кто может! Подскажите пожалуйста, как запрограммировать 16- или 32-разрядный цвет под ДОС. Заранее спасибо.
|
lss007
Во-первых, приветствуем на форуме :) Что же касается графики для SVGA под DOS, то тут такая история, емнип: Давным-давно :), когда ещё не было Win95, существовало много видеокарт от разных производителей. Все они могли работать как SVGA, но аппаратные реализации поддержки больших разрешений и многоцветности были разными. Поэтому писать игрушки стало трудно. В результате был разработан специальный "пакет" VESA, который был неким API для DOS-программеров, что-то типа GDI. Универсальность и поддержка большого количества видеоадаптеров привела к большой популярности этого пакета и в последние годы существования DOS как распространённой операционки все игры шли в комплекте с vesa-драйвером. Он запускался как экзешник или был вшит в саму игрушку. К чему это я? К тому, что: Ищите VESA. К сожалению, я не смог зайти на сайт разработчиков, может они и скопытились :( |
Спасибо hasherfrog'у за информацию:)
|
Время: 13:07. |
Время: 13:07.
© OSzone.net 2001-