Вывод точки в VESA

Тема в разделе "WASM.ASSEMBLER", создана пользователем tower120, 24 апр 2007.

  1. tower120

    tower120 New Member

    Публикаций:
    0
    Регистрация:
    11 мар 2007
    Сообщения:
    56
    Всем привет!

    Пишу я значит

    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

    А точка не выводится. Фурычит только, если выводить в первые три банка видеопамяти.
    Помогите!
     
  2. Ustus

    Ustus New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2005
    Сообщения:
    834
    Адрес:
    Харьков
    в 24-битных режимах некоторые точки разрезаются по разным банкам из-за того, что 655536 на кратно 3-м, может в этом дело?
     
  3. Vov4ick

    Vov4ick Владимир

    Публикаций:
    0
    Регистрация:
    8 окт 2006
    Сообщения:
    581
    Адрес:
    МО
    Всё прекрасно работает. Видеокарта geforce-2 mx400. Попробуй монитор протереть или искать повнимательней :derisive:
    ЗЫ Советую в конце возвращать 3-й видеорежим для порядку.
     
  4. NoResponse

    NoResponse New Member

    Публикаций:
    0
    Регистрация:
    28 дек 2005
    Сообщения:
    89
    разрешения => 800х600 могут быть не доступны (на разных карточках по разному)
    надо проверять каждый режим (ах=4F01h)
    курить VBE от VESA

    Vov4ick для порядку нада в самом начале сохранять режим, а в конце его восстанавливать ,)
     
  5. Vov4ick

    Vov4ick Владимир

    Публикаций:
    0
    Регистрация:
    8 окт 2006
    Сообщения:
    581
    Адрес:
    МО
    NoResponse, tower120 писал что не выводится только в определённые окна видеопамяти, значит режим скорее всего поддерживается. А так, да, нужно и восстанавливать старый режим (для этого VBE-функция есть) и проверять, поддерживается ли данный режим. Но на большинстве карточек должен поддерживаться (если памяти хватит). Другое дело, что разрядность цвета может не совпадать со стандартом, поэтому опять-таки надо делать проверку.
     
  6. tower120

    tower120 New Member

    Публикаций:
    0
    Регистрация:
    11 мар 2007
    Сообщения:
    56
    Я фигею..... Один раз действительно появилась точка. Теперь возвращаю старый видеорежим.

    Видеокарта x850XT. vov4ick, Вышли мне на tower120@rambler.ru бинарник моей проги. (Может с компилятором что-то).

    З.Ы. А даже если розрядность не совпадает, всеравно должОн вывести точку,но другого цвета (Ща off в каждом байте цвета).
    З.Ы.Ы. Отпишитесь, плиз у кого работает!
     
  7. Vov4ick

    Vov4ick Владимир

    Публикаций:
    0
    Регистрация:
    8 окт 2006
    Сообщения:
    581
    Адрес:
    МО
    Надо вызывать INT 10h, AX=4f01h, CX=код режима, в ES:lol: I вернёт 256 байт об этом режиме.
    Дока например здесь: http://www.phys.uu.nl/~0307467/docs/vbe3.pdf
    А ассемблер не важно какой.
    ЗЫ Буржуи, су.. гады, мало того, что пдфоманией страдают, так ещё куски текста копировать из него запретили.
     
  8. tower120

    tower120 New Member

    Публикаций:
    0
    Регистрация:
    11 мар 2007
    Сообщения:
    56
    Гм... у меня всё нормально копируется...

    З.Ы. А бинарник ты мне, плиз, вышли...
     
  9. tower120

    tower120 New Member

    Публикаций:
    0
    Регистрация:
    11 мар 2007
    Сообщения:
    56
    Пришла почта:). Пример с зарисовкой экрана у меня есть и тоже работают. Но мне нужно вывести только одну точку!
     
  10. Vov4ick

    Vov4ick Владимир

    Публикаций:
    0
    Регистрация:
    8 окт 2006
    Сообщения:
    581
    Адрес:
    МО
    А разница? :) То же самое, только выводится много точек. Возможно ты её не видешь на мониторе. У меня выводилось, только я нашёл ей с трудом :derisive:
     
  11. tower120

    tower120 New Member

    Публикаций:
    0
    Регистрация:
    11 мар 2007
    Сообщения:
    56
    Я её не вижу, ибо её там нет. Дело в видеокарте. На интегрированых видеокартах, картах фирм ATI и S3 точки тоже нет. На GeForce 6600 точка есть, зато на нём макс. режим, доступный из под Windows 112h.

    Единственным выходом из сложившейся ситуации я вижу лишь предварительную заливку экрана.
     
  12. Vov4ick

    Vov4ick Владимир

    Публикаций:
    0
    Регистрация:
    8 окт 2006
    Сообщения:
    581
    Адрес:
    МО
    Хм... Как же объяснить, что закраска экрана работает, а вывод отдельной точки - нет? Есть варианты?
     
  13. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    Vov4ick
    На этих видюшках длина линии больше длины разрешения. Где - то подобное читал про эти видюшки.
     
  14. Vov4ick

    Vov4ick Владимир

    Публикаций:
    0
    Регистрация:
    8 окт 2006
    Сообщения:
    581
    Адрес:
    МО
    По умолчанию на всех карточках ширина экрана равна "ширине" окна, или я не прав? Во всех доках так написано. Тогда как объяснить, что в первые несколько окон выводится...
     
  15. tower120

    tower120 New Member

    Публикаций:
    0
    Регистрация:
    11 мар 2007
    Сообщения:
    56
    Ширина окна в байтах нормальная.

    Кто его знает... Но факт остаётся фактом.

    З.Ы. При заливке мы последовательно заполняем все точки, переключая буферы один за другим. Видать такой вот способ инициализаци...
     
  16. Vov4ick

    Vov4ick Владимир

    Публикаций:
    0
    Регистрация:
    8 окт 2006
    Сообщения:
    581
    Адрес:
    МО
    Неужели на результат влияет, как их переключать? Не верю. Замени INC на DEC в программке заливки и проверь. Но всё равно, переключать окна сложно и долго. Не лучше ли линейный видеобуфер организовать? Правда NTVDM скажет - что это вы тут вытворяете, не положено!
     
  17. maxdiver

    maxdiver Max

    Публикаций:
    0
    Регистрация:
    18 июл 2006
    Сообщения:
    308
    Адрес:
    Саратов
    tower120
    А ты рисуешь первый пиксель?
    Может, он находится за пределами экрана? ;)
    (по крайней мере, когда-то я сам юзал VESA, и у меня так и было - режимы монитора для таких "древних" разрешений не отрегулированы; у меня тоже один пиксель не рисовался, а заливка работала)
     
  18. cppasm

    cppasm New Member

    Публикаций:
    0
    Регистрация:
    18 июл 2006
    Сообщения:
    923
    С каких это пор 800х600@32bit стал мега древним режимом :)
    Хотя границы действительно могут быть не выставлены.
    А вообще если экран закрашивается значит всё работает, просто ты точку не видиш.
    Попробуй нарисовать вертикальную прямую по центру экрана.
    А используеш что - LFB или банки?
    Если LFB то может быть такая ерунда если А20 не открыть.
     
  19. tower120

    tower120 New Member

    Публикаций:
    0
    Регистрация:
    11 мар 2007
    Сообщения:
    56
    Использую банки.
    при декрементации заливки и выведении гор., верт. линии тоже нифига не видно.

    линейный буфер использовать мне нельзя.
     
  20. cppasm

    cppasm New Member

    Публикаций:
    0
    Регистрация:
    18 июл 2006
    Сообщения:
    923
    Это что такое?