Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Asm для начинающих > Графика в Защищенном режиме


Автор: gMan 16.3.2005, 12:49
Может кто знает как установить графический режим и вывести точку на экран после перехода в защищенный? Или может кто знает где можно узнать?

Заранее спасибо.

Автор: oleg1973 16.3.2005, 13:04
в принципе все описано в спецификации vesa
ну а проще говоря нужно получить адрес LinearFrameBuffer
получить его можно вызвав (не помню номер) функцию прерывания 10 для режимов vesa
http://www.theworld.com/obi/Standards/VGA/vesa.txt

Автор: Chingachguk 16.3.2005, 13:15
gMan

Уточни, что за защищенный режим у тебя: собственный переключатель, используешь dpmi или еще что.

Например, при использовании dpmi можно выполнять через int 31h прерывания реального режима, в тч и BIOS.

Автор: gMan 17.3.2005, 14:28
Нет я неизпользую DPMI следовательно не могу вызывать ф-ии БИОСа. Наверно надо как-то через порты? Да?

Автор: Chingachguk 19.3.2005, 09:13
Все зависит от того, какую задачу ты решаешь.

Если ты изучаешь защищенный режим и учишься программировать, то лучше научиться использовать режим виртуального V86. Об этом можно прочить в книге Финогенова. Благодаря нему можно вызывать подпрограммы BIOS, DOS и т.д.

Если ты решаешь конкретную задачу, то тут может быть много вариантов. В первую очередь непонятен твой отказ от DPMI. Если все же нужно прогрраммировать свой супервизор, то, во-первых, можно переключиться в графику до переключения в защиненный режим, ну а если прямо таки необходимо переключать режимы монитора внутри защищенного режима, то можно действительно изучить команды работы с видеоконтроллером. На эту тему множество документации, можно напрямую вызвать BIOS с функцией переключения режима, и трассируя его в отладчике, посмотреть команды in/out, которые переключают режим монитора.

Автор: Guest 20.3.2005, 11:05
Цитата(Chingachguk @ 19.3.2005, 09:13)
изучить команды работы с видеоконтроллером

Да именно это мне и надо!

Автор: Shura 24.3.2005, 22:31
Люди, помогите!! Поменял железо и VESA уже не пашет, а очень надо. Можно ли как-нибудь по-другому сделать 1024*768*24b или лучше 32b?? Заранее благодарен! smile

Автор: oleg1973 25.3.2005, 15:08
как это vesa не пашет? ты что поставил видюху 1980 года выпуска? smile
давай чуть поподробней

Автор: Guest 28.3.2005, 07:32
А где ссылка от Theworld.com/obi ?

Автор: Guest 28.3.2005, 07:37
Может быть просто VESA другой версии?.

Автор: Shura 28.3.2005, 11:33
Видюха RADEON 9600PRO. Раньше был GF - работало, а сейчас вообще черный экран! Работает VGA, но этого мало! Может я что-то не так делаю?

text segment 'code'
assume CS:text

begin: mov AH,00
mov AL,10h
mov AX,4F02h
mov BX,118h
int 10h
mov SI,0
mov CX,640

line: push CX
mov AH,0Ch
mov AL,255 ; RED
mov BL,100 ; BLUE
mov BH,0
mov CX,SI
mov DX,SI
int 10h
inc SI
pop CX
loop line

mov AH,08h
int 21h
mov AH,00h
mov AL,03h
int 10h
mov AH,00h
mov AL,03h
int 10h
text ends
end begin

Управление цветами я нашел эксперементально, так что может в этом дело? если это верно, то как управлять зеленым? Постучавшимся в аську (288-576-179) буду рад smile А вы вообще как часто появляетесь?

Автор: oleg1973 28.3.2005, 15:50
а зачем ты точки через прерывания ставиш? этоже медленно


Код

mov ax,0x4f02
mov bx,118h
int 0x10

push 0xa000
pop es
xor di,di
mov eax,0x00112233
mov ecx,640
repnz stosd

в данном примере нада установить режим 32 бита на точку
или заменить stosd на stosw если режим 16 на точку
ну и значение в еах тоже подправить smile

Автор: Shura 29.3.2005, 20:53
В EAX, на сколько я понял, ты заносишь RGB, вывод точки осуществляется 5-10 строками, в ECX,EDX заносятся XY точки? А что ты в ES заносишь? Я от такого волосею, так бы все еще smile !
Благодарствую! smile
Добавлено @ 20:56
В EAX, на сколько я понял, ты заносишь RGB, вывод точки осуществляется 5-10 строками, в ECX,EDX заносятся XY точки? А что ты в ES заносишь? Я от такого волосею, так бы все еще smile !
Благодарствую! smile

Автор: oleg1973 29.3.2005, 21:02
в есх скажем так длинна строки
в еs сегмент видеобуфера

Автор: Shura 30.3.2005, 20:08
Слушай, после таких пояснений я что-то затупил... Не мог ли бы ты привести именно функцию вывода, ну, например, линии от 0,0 до 1024,0? От пояснений не откажусь, но можно и без них!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)