Видеобуфер в режиме SVGA 1024*768*24bit (118h)

Тема в разделе "WASM.ASSEMBLER", создана пользователем Programer, 15 июл 2008.

  1. Programer

    Programer New Member

    Публикаций:
    0
    Регистрация:
    3 апр 2008
    Сообщения:
    19
    Доброго времени суток )
    Не могу понять как устроен видеобуфер в данном режиме. Подскажите пожалуйста) Или, если можно, то дайте ссылочку (желательно русскую, а то читал уже по-английски, но почти ничего не смог понять :dntknw: ) по которой можно было бы прочитать про место нахождение этого буфера и работы с ним.
    Просто я читал, что он находится в промежутке a0000:bffff , но реально при записи в участок после b0000, записанное не отображается на экран + я могу орудовать приблезительно четырмя-пятью рядками экрана... остальные не знаю как адресовать )))
    Большое спасибо! )
     
  2. q_q

    q_q New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2003
    Сообщения:
    1.706
    Programer
    Переключение банков видеопамяти или линейный кадровый буфер? Или по другому - реальный или защищенный режим?
     
  3. Programer

    Programer New Member

    Публикаций:
    0
    Регистрация:
    3 апр 2008
    Сообщения:
    19
    хм... а есть разница? классно ))) Значит защищённый :)
     
  4. q_q

    q_q New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2003
    Сообщения:
    1.706
    Programer
    Если защищенный, то "... вся видеопамять отображается на непрерывный кусок адресного пространства, но начинающегося не с адреса 0A0000h, а с какого-нибудь другого адреса, так чтобы весь образ видеопамяти, который может занимать несколько мегабайтов, отобразился в один непрерывный массив. В защищенном режиме максимальный размер сегмента составляет 4 гигабайта, поэтому никаких сложностей с адресацией этого буфера не возникает. Буфер LFB можно использовать, только если видеоадаптер поддерживает спецификацию VBE 2.0 ..." Зубков. Ассемблер для DOS, Windows и UNIX.

    ps Что значит "Значит защищённый"? Ты не знаешь (еще не знаешь) в каком режиме работает (будет работать) программа?
     
  5. Programer

    Programer New Member

    Публикаций:
    0
    Регистрация:
    3 апр 2008
    Сообщения:
    19
    ))) Почему же не знаю )) конечно знаю... просто это я от удивления так ответил...
    Обьясните пожалуйста слова "а с какого-нибудь другого адреса". Это значит что я сам могу перепрограммировать буфер на другой адрес? Если да, то как?
    Спасибо.
     
  6. q_q

    q_q New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2003
    Сообщения:
    1.706
    Programer
    Зубков. Ассемблер для DOS, Windows и UNIX. 6.4.3. Вывод на экран через линейный кадровый буфер
     
  7. Programer

    Programer New Member

    Публикаций:
    0
    Регистрация:
    3 апр 2008
    Сообщения:
    19
    ок.... спасибо ))
     
  8. JAPH

    JAPH New Member

    Публикаций:
    0
    Регистрация:
    23 июн 2007
    Сообщения:
    124
    этот "какой-нибудь" адрес мона узнать через функцию получения информации о видеорежмие:
    Код (Text):
    1. mov ax, 0x4F01
    2. mov cx, 0x118
    3. mov di, buffer
    4. push ds
    5. pop es
    6. int 0x10
    7. mov edi, [buffer + 0x28]
     
  9. Programer

    Programer New Member

    Публикаций:
    0
    Регистрация:
    3 апр 2008
    Сообщения:
    19
    ага.... Понятно :) спасибо
     
  10. Programer

    Programer New Member

    Публикаций:
    0
    Регистрация:
    3 апр 2008
    Сообщения:
    19
    Добрый день. Не мог некоторое время попасть в интернет, и за это время уже разобрался с данным режимом... Но в ходе программирования у меня появился вопрос:
    Почему, когда я резервирую память для отображения инфы режима в начале программы, то всё работает:
    Код (Text):
    1. start:
    2. jmp beg
    3. buffer db 256d dup (0)
    4. beg:
    5. push ds
    6. pop es
    7. mov di,buffer
    8. mov ax,4f01h
    9. mov bx,118h
    10. int 10h
    11. ...
    12. end start
    Но если резервировать память после кода программы, то данные туда не выводяться (то есть там остаются нолики)
    Код (Text):
    1. start:
    2. push ds
    3. pop es
    4. mov di,buffer
    5. mov ax,4f01h
    6. mov bx,118h
    7. int 10h
    8. ...тут продолжение программы
    9. buffer db 256d dup (0)
    10. end start
     
  11. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    Programer
    Скорее всего данные оказались в другом сегменте, так что адрес ds:offset(buffer) не указывает на данные
    Лучши воспользуйся командой LES di, buffer для загрузки адресса
     
  12. Programer

    Programer New Member

    Публикаций:
    0
    Регистрация:
    3 апр 2008
    Сообщения:
    19
    Так... помоему я что-то не так делаю или не правильно понимаю))
    просто код
    Код (Text):
    1. jmp beg
    2. buffer db 256d dup (0)
    3. beg:
    4. push ds
    5. pop es
    6. mov di,offset buffer
    7. mov ax,4f01h
    8. mov bx,118h
    9. int 10h
    работает только в том случае правильно, если в момент вызова прерывания значение регистра сх равно значению регистра di (соответственно если значения обеих равно offset buffer). Почему так, и что я не правильно делаю?
    Спасибо.
     
  13. morkster

    morkster New Member

    Публикаций:
    0
    Регистрация:
    12 окт 2005
    Сообщения:
    31
    возможно это связано со спонтанной мутацией cx в bx?
    mov cx, 0x118 -> mov bx,118h
     
  14. Programer

    Programer New Member

    Публикаций:
    0
    Регистрация:
    3 апр 2008
    Сообщения:
    19
    Вполне возможно... Ведь ещё сегодня утром этот код работал, а через некоторое время (просто при смене положения переменной buffer) начались проблемы (кстати, это не первый раз, просто когда это случилось впервые я подумал что возможно что-то перепутал и потому переписал код заново, после чего всё прошло)... Но как избежать данной "спонтанной мутации" и чем она вызвана (всмысле у меня руки кривые, или разработчики не досмотрели)?
    Спасибо
     
  15. Phantom_84

    Phantom_84 New Member

    Публикаций:
    0
    Регистрация:
    6 июн 2007
    Сообщения:
    820
    По возможности быть внимательным и не мутировать понапрасну :)
     
  16. Programer

    Programer New Member

    Публикаций:
    0
    Регистрация:
    3 апр 2008
    Сообщения:
    19
    )) Тоесть это значит руки кривые? :)
    Ладно... Ща буду отдельно с прерыванием експериментировать... Вдруг и правда руки не оттуда и я в самой программе что-то натворил, а жалуюсь на прерывание :)
     
  17. Programer

    Programer New Member

    Публикаций:
    0
    Регистрация:
    3 апр 2008
    Сообщения:
    19
    Бляха... ((((
    Это ж надо было так )))
    Всё... понятно, только теперь понял что имелось ввиду под "спонтанной мутацией".... Я регистры перепутал... )))
    Всем спасибо