:D VESA графика из под виндовс не работает почему кто знает ----- из по DOS работает а из под WINDOWS нет почему ???? ----- при установыке пользуюсь ASM функциями
mov ah,4fh mov al,2h mov bx,10eh ;320*200 65536 color
------ режимов много есть и на 16 млн цветов
Dark
20.04.2003 2:41
Не знаю, ю меня тоже есть модуль, написанный мной, но у меня все работает... Может у тебя видеокарта такая? попробуй этот режим протестировать:
program testmode;
var s:string; p:pointer; ok:byte;
begin p:=ptr(seg(s),ofs(s)); asm les di,p mov ax,4f01h mov cx,010eh int 10h mov [ok],1 cmp ax,4f {Если проблема - здесь будет другой код} jz @exit mov [ok],0
@exit: end;
if (ok=1) then write('Все в порядке') else write('Нифига не пашет :-((');
end.
Если ничего не выйдет пиши, будем думать дальше.
Всего хорошего!
ShadowMaverick
20.04.2003 5:08
SHADOW MAVERICK он же просто SHADOW т.к. пароль про...
да нет в DOSe все пашет я РЕГИСТРЫ смотрю там правильное щначение возвращается --- а в ВИНДЕ WINDOWS просто выкидывает прогу как процесс (убив) --- что делать --- XP WIND у меня
Dark
20.04.2003 9:27
Ну как говорится, если водка мешает работе, бросай нахрен... такую работу ;D
У меня WinXP тоже глючит с досприложениями, т.е. сначало я могу работать в паскале, а через некоторое время я должен переходить в оконный режим - короче фигня!!! >:(
Но слава богу XP у меня на работе, дома - Вий 98(еще названия - вынь 98, маздай короче...) ;D
А ты где берешь документацию, не у того же автора что и я? ;D
Давай еще чего нибудь попишем про VESA?
Shadow
21.04.2003 0:53
:D В.Ю. Пирогов 320 рубл стоит книга интересная но лин ткаим языком написанная
Dark
22.04.2003 19:59
Не, у меня Павел Соколенко - Программирование графики для IBM PC Тоже интересно ;D А давай будем обмениваться идеями и алгоритмами на asm по VESA? :
Shadow
23.04.2003 0:45
:D ню я то непроч моно опыта наберусь т.к. напрямую с видое памятью плохо умею работать как бы то что в у книге было написано такое ощущения что секрет -- например что такое битовые плоскости и с чем их едят ето вроде с VESA ---- они как то за цвет отвечают и их 4
mj
23.04.2003 4:48
Ух блин мучался я с этим, но вроде как добил...
Цитата
например что такое битовые плоскости и с чем их едят ето вроде с VESA ---- они как то за цвет отвечают и их 4
Я ваще не перевариваю зачем эти бытовые плоскости, так как меняя 1 байт, мы меняем сразу 8 пикселов и соответственно чтобы изменить цвет точки приходится читать 4 байта (по 1 из каждой плоскости), менять в них бит отвечающий за нужный нам пиксел и записывать эти 4 байты обратно... Также там есть что то похожее на маску, это чтобы лишний раз бит не читать, задаём маску и потом пишем... Самое хорошее то, что эти плоскости используются тока в 16 цветном режиме :D
Shadow
23.04.2003 14:48
:D да будует проклято все семейство видоеадаптеров с их нестандартными системами записи в видеопамять --- так посмотрел оказывается разный рехим разная система записи ---
Const color : Array [0..10,0..10] Of byte = ((00,00,00,00,00,00,00,00,00,00,00), (00,00,00,00,00,00,00,00,00,00,00), (00,00,16,17,18,19,18,17,16,00,00), (00,00,17,20,23,27,23,20,17,00,00), (00,00,18,23,28,29,28,23,18,00,00), (00,00,19,27,31,15,31,27,19,00,00), (00,00,18,23,28,29,28,23,18,00,00), (00,00,17,20,23,27,23,20,17,00,00), (00,00,16,17,18,19,18,17,16,00,00), (00,00,00,00,00,00,00,00,00,00,00), (00,00,00,00,00,00,00,00,00,00,00));
var gr,gr1,d,r,e,x:Integer; y:Word; b,bb,c,co:byte; label we,we1,we2,we3;
BEGIN {gr1:=0; gr:=InstalluserDriver('svga256',nil); Initgraph(gr,gr1,'');}
end; for e:=0 to 10 do for x:=0 to 10 do begin c:=color[e,x]; asm mov al,c
cmp bx,10011 je we cmp bx,10331 je we cmp bx,10651 je we cmp bx,10971 je we cmp bx,11291 je we cmp bx,11611 je we cmp bx,11931 je we cmp bx,12251 je we cmp bx,12571 je we cmp bx,12891 je we jmp we1
we: add bx,320 sub bx,11
we1: inc bx mov es:[bx],al
end; end; asm mov ah,0 int 16h end; end.
вот как можно улучшить ету блин хр... --- и еще если сменить разрешение на 800*600 256 цветов то почемуто до конца экрана его не довести и он в нескольких местах сразу появляется ----
GLuk
23.04.2003 19:48
Цитата
Самое хорошее то, что эти плоскости используются тока в 16 цветном режиме :D
И в ближайшее будущее, больше такой херни не ожидается... :) Когда писал первую прогу для широкого употребления, выбрал mode 13h, но мне сказали, что это несерьезно, следственно оставался только 640х480х16 и пришлось сильно повыпендриваться, чтобы осознать как записать этот проклятый пиксель, а не сразу 8. Инфы на тот момент вообще не было (no inet), учебника Фаронова тоже...
Вообще, самое удобное в этом режиме было очищать экран или рисовать прямоугольники...
GLuk
23.04.2003 19:50
Цитата
Самое хорошее то, что эти плоскости используются тока в 16 цветном режиме :D
И в ближайшее будущее, больше такой херни не ожидается... :) Когда писал первую прогу для широкого употребления, выбрал mode 13h, но мне сказали, что это несерьезно, следственно оставался только 640х480х16 и пришлось сильно повыпендриваться, чтобы осознать как записать этот проклятый пиксель, а не сразу 8. Инфы на тот момент вообще не было (no inet), учебника Фаронова тоже...
Вообще, самое удобное в этом режиме было очищать экран или рисовать прямоугольники...
Shadow плюнь ты на это, это нужно только в плане ознакомления...
Shadow
24.04.2003 0:19
:D хыть тфу ---- но всетаки интересно тем что ето быстро работает
Dark
24.04.2003 3:07
Ну в общем-то я делал бы это так:... :D
Const color : Array [0..10,0..10] Of byte = ((00,00,00,00,00,00,00,00,00,00,00), (00,00,00,00,00,00,00,00,00,00,00), (00,00,16,17,18,19,18,17,16,00,00), (00,00,17,20,23,27,23,20,17,00,00), (00,00,18,23,28,29,28,23,18,00,00), (00,00,19,27,31,15,31,27,19,00,00), (00,00,18,23,28,29,28,23,18,00,00), (00,00,17,20,23,27,23,20,17,00,00), (00,00,16,17,18,19,18,17,16,00,00), (00,00,00,00,00,00,00,00,00,00,00), (00,00,00,00,00,00,00,00,00,00,00));
BEGIN asm mov ax,0013h int 10h mov ax,0a000h mov es,ax push ds push seg color pop ds push offset color pop si mov di,10000 mov cx,11 mov dx,11 @l2: push cx mov cx,dx @l1: movsb {<=> mov es:di, ds:si} loop @l1 add di,309 pop cx loop @l2 pop ds mov ah,0 int 16h mov ax,0003h int 10h end; end.
Почти чистый ассемблер получился ;D Если чего не ясно - могу пояснить... {только не панимаю, зачем указывать точку вывода через прямое число, а не через x,y... вроде понятнее и юзабельнее ???}
Shadow
24.04.2003 3:51
Const color : Array [0..10,0..10] Of byte = ((00,00,00,00,00,00,00,00,00,00,00), (00,00,00,00,00,00,00,00,00,00,00), (00,00,16,17,18,19,18,17,16,00,00), (00,00,17,20,23,27,23,20,17,00,00), (00,00,18,23,28,29,28,23,18,00,00), (00,00,19,27,31,15,31,27,19,00,00), (00,00,18,23,28,29,28,23,18,00,00), (00,00,17,20,23,27,23,20,17,00,00), (00,00,16,17,18,19,18,17,16,00,00), (00,00,00,00,00,00,00,00,00,00,00), (00,00,00,00,00,00,00,00,00,00,00));
BEGIN asm mov ax,0013h int 10h mov ax,0a000h mov es,ax push ds ;сохран в стеке ds push seg color ;сохраняем массив adres pop ds ;в ds запихив адрес color push offset color ; сохран аддрес color pop si ;in si addr начальный color mov di,10000 ;???? mov cx,11 ; mov dx,11 ; @l2: push cx ;cx в стек 11 ;10 mov cx,dx ;in cx<dx ; cx=11 @l1: ;?????персылка строки байтов 11 из сolor ds в видео es ;по x смещение что ли movsb {<=> mov es:di, ds:si}
loop @l1 ;cx-1 add di,309 ;1000+309 по y смещен pop cx ;in cx<11 loop @l2 ;cx-1 pop ds ;uerase ds mov ah,0 ;wait int 16h ;key mov ax,0003h ;colse int 10h ;graph end; end.
--------- там где вопросы по подробнее пожалуйста
Dark
24.04.2003 4:21
Обьясняю так:
Я сохраняю адрес картинки в ds:si, адрес точки куда выводить - es:di
mov di,10000 - это то же, что в твоем примере mov bx,10000 т.е. будет выводиться по адресу A000h:10000 (адрес первой точки)
Значение сегмента ds сохраняется потому, что если его потом не востановить - будут глюки в паскале (можешь попробовать его закоментировать)
Далее собственно у меня цикл типа
for i:=0 to 10 do for j:=0 to 10 do
команда movsb помещает содержимое ds:[si] в es:[di] и увеличивает si и di на 1. Т.е я фактически помещаю точку из массива color на экран :-)
в сх я храню кол-во линий, в dx - колво точек в линии.
Рисую я по линиям: @l1: movsb loop @l1
И еще : заметь, у меня команда
pop cx loop @l2
уменьшает cx на 1, а далее я это изменение СОХРАНЯЮ! (push cx)
add di,309 - адрес следующей строки (320-11)
Ну разбирайся... ;D
Shadow
24.04.2003 15:31
в cx колво байтов :D моно rep movsb поставить
GLuk
26.04.2003 8:12
Цитата
в cx колво байтов :D моно rep movsb поставить
Или rep movsd... :)
Dark
8.05.2003 6:51
Вот твой вывод точки в режиме 320*200, а я тебе предлагаю свой, чуть быстрей:
Procedure PixelOut(x,y:Word;c:Byte); label we,exit; Begin y:=y*320; {rachet coordin for Y}
asm xor ax,ax {AX in zero} mov bx,x {in di 1000 smeshenie v video memory} mov cx,y {in CX znachen y } add bx,cx {sum BX and CX} mov al,c {in AL color} cmp bx,63999 {conez video buff} je we {then exit} mov es:[bx],al {in vid memory es:di out ds:si} we: end; end;
неправильно, так как если указан адрес, выходящий за рамки сегмента, то bx=0+то, что за сегментом... а ты сравниваешь РАВЕНСТВО вх и 63999... а надо так:
cmp bx,63999 {conez video buff} ja we {then exit} {jamp above}
;D
Shadow
9.05.2003 7:25
:D =-=-= да базара нет все путем =-=-=-= согласен чуть ошибся с флажками с кем не бывает -=-= :-/
BlackShadow
16.05.2003 22:04
Люди у меня такая же проблема! WinXP мне позволяет получать инфу о VESA и о режимах через INT10h. Но не более. Win98 даёт мне возможность даже установить какой-либо режим. И всё. При попытке вывода изображения... Насколько я разобрался видеопамять у меня делится в совсем уж загадочном порядке : банк по 64кб, в банке по 64 блока (1кб) в блоке по четыре строки (256б), а вот сколько пикселёв в строке зависит от режима. Причём в режиме, где 24 BPP я вообще ничего не понял.
Может кто-нибудь объяснить что тут к чему, куда это сувать и как с этим бороться???
Dark
17.05.2003 4:18
Кинь исходник сюда или на darkmaze@yandex.ru - посмотрю... ;D
GLuk
17.05.2003 15:55
2 BlackShadow: Выложи исходник, посмотрим...
Shadow
18.05.2003 0:12
:D -=-=-= запрыгнив ASM раздел -=-=-=- там и точка есть и просмотр 24 битного файла BMP
Sergeuz
15.10.2003 11:36
Хай. Случайно сюда забрёл. Два года назад написал паскалевский юнит VESA64k; Работает, правда, только в реальном режиме проца и с шестнадцатибитными модами, но есть всякие прикольные примочки вроде регулируемого уровня прозрачности для всех процедур вывода, антиалиасинга, курсора мыши с тенью (как Win2k), поддержки XMS и ещё много чего... Если нужны исходники сообщите.
Да, как заставить всё это работать в WinXP мне тоже интересно.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.