Всем привет! Пишу я значит code segment assume cs:code, ss:code, ds:code org 100h start: mov ax,4F02h mov bx,115h int 10h or ah, ah jnz exit mov ax, 4f05h xor bx, bx mov dx, 20 int 10h mov ax, 0a000h mov es, ax xor si, si mov es:[si], byte ptr 0h ; синий mov es:[si+1], byte ptr 0h ; зелёный mov es:[si+2], byte ptr 0ffh ; красный xor ah, ah int 16h exit: mov ax, 4c00h int 21h code ends end start А точка не выводится. Фурычит только, если выводить в первые три банка видеопамяти. Помогите!
в 24-битных режимах некоторые точки разрезаются по разным банкам из-за того, что 655536 на кратно 3-м, может в этом дело?
Всё прекрасно работает. Видеокарта geforce-2 mx400. Попробуй монитор протереть или искать повнимательней ЗЫ Советую в конце возвращать 3-й видеорежим для порядку.
разрешения => 800х600 могут быть не доступны (на разных карточках по разному) надо проверять каждый режим (ах=4F01h) курить VBE от VESA Vov4ick для порядку нада в самом начале сохранять режим, а в конце его восстанавливать ,)
NoResponse, tower120 писал что не выводится только в определённые окна видеопамяти, значит режим скорее всего поддерживается. А так, да, нужно и восстанавливать старый режим (для этого VBE-функция есть) и проверять, поддерживается ли данный режим. Но на большинстве карточек должен поддерживаться (если памяти хватит). Другое дело, что разрядность цвета может не совпадать со стандартом, поэтому опять-таки надо делать проверку.
Я фигею..... Один раз действительно появилась точка. Теперь возвращаю старый видеорежим. Видеокарта x850XT. vov4ick, Вышли мне на tower120@rambler.ru бинарник моей проги. (Может с компилятором что-то). З.Ы. А даже если розрядность не совпадает, всеравно должОн вывести точку,но другого цвета (Ща off в каждом байте цвета). З.Ы.Ы. Отпишитесь, плиз у кого работает!
Надо вызывать INT 10h, AX=4f01h, CX=код режима, в ESI вернёт 256 байт об этом режиме. Дока например здесь: http://www.phys.uu.nl/~0307467/docs/vbe3.pdf А ассемблер не важно какой. ЗЫ Буржуи, су.. гады, мало того, что пдфоманией страдают, так ещё куски текста копировать из него запретили.
Пришла почта. Пример с зарисовкой экрана у меня есть и тоже работают. Но мне нужно вывести только одну точку!
А разница? То же самое, только выводится много точек. Возможно ты её не видешь на мониторе. У меня выводилось, только я нашёл ей с трудом
Я её не вижу, ибо её там нет. Дело в видеокарте. На интегрированых видеокартах, картах фирм ATI и S3 точки тоже нет. На GeForce 6600 точка есть, зато на нём макс. режим, доступный из под Windows 112h. Единственным выходом из сложившейся ситуации я вижу лишь предварительную заливку экрана.
Vov4ick На этих видюшках длина линии больше длины разрешения. Где - то подобное читал про эти видюшки.
По умолчанию на всех карточках ширина экрана равна "ширине" окна, или я не прав? Во всех доках так написано. Тогда как объяснить, что в первые несколько окон выводится...
Ширина окна в байтах нормальная. Кто его знает... Но факт остаётся фактом. З.Ы. При заливке мы последовательно заполняем все точки, переключая буферы один за другим. Видать такой вот способ инициализаци...
Неужели на результат влияет, как их переключать? Не верю. Замени INC на DEC в программке заливки и проверь. Но всё равно, переключать окна сложно и долго. Не лучше ли линейный видеобуфер организовать? Правда NTVDM скажет - что это вы тут вытворяете, не положено!
tower120 А ты рисуешь первый пиксель? Может, он находится за пределами экрана? (по крайней мере, когда-то я сам юзал VESA, и у меня так и было - режимы монитора для таких "древних" разрешений не отрегулированы; у меня тоже один пиксель не рисовался, а заливка работала)
С каких это пор 800х600@32bit стал мега древним режимом Хотя границы действительно могут быть не выставлены. А вообще если экран закрашивается значит всё работает, просто ты точку не видиш. Попробуй нарисовать вертикальную прямую по центру экрана. А используеш что - LFB или банки? Если LFB то может быть такая ерунда если А20 не открыть.
Использую банки. при декрементации заливки и выведении гор., верт. линии тоже нифига не видно. линейный буфер использовать мне нельзя.