как перенести видеопамять?

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

  1. shi

    shi New Member

    Публикаций:
    0
    Регистрация:
    27 июл 2006
    Сообщения:
    41
    Можно ли сделать так, чтобы видеопамять переехала на некий произвольный физический адрес? И если можно, то как. Если нет, то интересно, в чем причина
    Заранее спасибо за ответы
     
  2. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    а разве он не фиксирован?
     
  3. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    Ну вообще ведь расположение видеопамяти документировано, и многие проги непосредственно к ней обращаются, было бы странно её перемещать.
     
  4. shi

    shi New Member

    Публикаций:
    0
    Регистрация:
    27 июл 2006
    Сообщения:
    41
    по меньшей мере, его можно двигать с a0000 на b0000 в графическом режиме и с b8000 на b0000 в текстовом, поправьте, если вру. Но в Кулакове, кажецца, видел картинку, где видеопамять вообще где-то ближе к концу 4гб.
    пс: картинку видел точно, кажется, что в кулакове
     
  5. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    shi
    Можно подвинуть LFB. А вот A0000-BFFFF фиксированный диапозон и его не подвинишь.
    Насчет выбора B8000, B0000, A0000 - это вроде возможно.
     
  6. _BC_

    _BC_ БЦ

    Публикаций:
    0
    Регистрация:
    20 янв 2005
    Сообщения:
    759
    это родная видеопамять карты, ее можно перемещать (BAR'ы в pci conf). В 2D, зная разрешение экрана и глубину цвета, можно писать в нее напрямую -- так делает SoftICE в режиме "окошка", т.е. прямое чтение/запись во frame buffer. В текстовом же режиме SoftICE пользует VGA Range, как обычная text-mode прога.
    add:
    и тот самый video buffer SoftICE'а как раз предназначен для сохранения куска из frame buffer'а, в который он собственно и будет рисовать свое окошко, поэтому его "емкость" зависит от глубины цвета экрана -- чем меньше глубина цвета экрана, тем больше пикселов влезет в video buffer айса.
     
  7. Y_Mur

    Y_Mur Active Member

    Публикаций:
    0
    Регистрация:
    6 сен 2006
    Сообщения:
    2.494
    Это адрес линейного видеобуфера, его можно узнать с помощью Vesa, но изменить его боюсь проблематично.
     
  8. shi

    shi New Member

    Публикаций:
    0
    Регистрация:
    27 июл 2006
    Сообщения:
    41
    Y_Mur
    А без весы его как-нибудь можно узнать?

    И еще: если у компа, например, 4 гб оперативки, то как использовать их полностью одновременно с lfb, если последний накладывается на озу?
     
  9. Mika0x65

    Mika0x65 New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2005
    Сообщения:
    1.384
    Если говорить о не аппаратных методах, то можно настроить страничную адресацию в защищенном режиме так, что требуемый вирт. адрес будет указывать в требуемый физический, например, если это подходит для задачи.
     
  10. shi

    shi New Member

    Публикаций:
    0
    Регистрация:
    27 июл 2006
    Сообщения:
    41
    Еще вопрос по теме вспомнил... или не совсем по теме.. )
    можно заюзать a0000-bffff под, скажем, данные для dma?
     
  11. Y_Mur

    Y_Mur Active Member

    Публикаций:
    0
    Регистрация:
    6 сен 2006
    Сообщения:
    2.494
    Без Весы только недокументировано т.е. только в привязке к конкретной видеокарте, если сможешь найти инфу.
    4 гб оперативки в линейном варианте винда полюбому не даст. Можно только получить "плавающее" в ней 2х гиговое окно.
     
  12. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    shi
    Можно определить адрес и размер через конфигурационное пространство PCI видео карты.
    Адрес лежит в одном из BAR регистров. Их там несколько штук. Какой именно из них отвечает за саму память можно определить по размеру. Большее из них по размеру и будет тем адресом.
    Размер узнается путем записи в эти регистры FFFFFFFF и последующего чтения. Видео карта подправит адрес. Так чтобы вся память целиком умещалась. Собственно мы меняем тем самым адрес. Но нужно учитывать, что другие устройства могут использовать эти адреса. В самом верху весит БИУС так что конфликтовать точно будет. Так что нужно будет размещать по другому адресу. Адрес должен быть выровнен по границе соответствующему объему ее объему.

    Если на компьютере установлено 4ГБ. То во-первых компьютер должен поддерживать возможность установки 4ГБ. Во вторых бигус может зарезервирует под устройства PCI 1ГБ. Это по документации, а вот как на практике, черт его знает толи меньше может толи больше. Будет ли доступна в свободных промежутках основная память, компьютера(скорее всего будет)

    Насчет того чтобы полностью задействовать сказать не могу, так как я еще не все знаю.
    Но вроде это не получиться.

    Y_Mur
    Все документировано.


    shi
    Никто не запрещает. Работать с этой областью.
    Но нужно учитывать что либо частично, либо полностью будет отдана под видео память.
     
  13. shi

    shi New Member

    Публикаций:
    0
    Регистрация:
    27 июл 2006
    Сообщения:
    41
    Y_Mur
    а если самостоятельно организовать защищенный режим?

    все
    может, есть у кого-нибудь ссылка на более-менее подробную информацию по работе с vesa из protected32?
     
  14. shi

    shi New Member

    Публикаций:
    0
    Регистрация:
    27 июл 2006
    Сообщения:
    41
    Pavia
    хм.. а если используется lfb в конце памяти где-нить, то область a0000 - bffff все-таки свободна, или в ней зеркалится какая-нибудь часть lfb?
     
  15. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    shi
    Про работу с VESA из protected32 описана в VBE3.pdf. Правдо, это прокатит только для карт поддеживающии расширени "PMID" , а это видео карты с VBE3. Для VBE2 есть FUNCTION 0AH - RETURN VBE PROTECTED MODE INTERFACE
    Но почти не используется из-за малого функционала. Проще перейти в VM86 или Real Mode и оттуда вызвать нужную функцию.
     
  16. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    shi
    Да часть LFB будет закреплена.
    Режим может иметь до двух окон.
    A0000-AFFFF
    B0000-BFFFF
    Может быть задействовано одно или два.
    FUNCTION 05H - DISPLAY WINDOW CONTROL
    Управляет тем какая часть из LFB будет отоброжена в эти окна.
     
  17. _BC_

    _BC_ БЦ

    Публикаций:
    0
    Регистрация:
    20 янв 2005
    Сообщения:
    759
    на части карт кстати, BAR в pci conf -- не единственный способ узнать базу frame buffer'а, на тех же geforce'ах VESA берет базу из одного из расширенных регистров контроллера CRT, притом, что характерно, хранится она там аккурат в том виде, в каком и хранится в pci conf (т.е. с битам IO/Memory, prefetchable, type).
     
  18. shi

    shi New Member

    Публикаций:
    0
    Регистрация:
    27 июл 2006
    Сообщения:
    41
    Pavia
    Как? В vbe3.pdf ничего не нашел, более того, стал подозревать, что это невозможно.
    Нужно подвинуть всю видеопамять, а не ее отображаемую часть.
    Это определяется режимом или это можно задать?
    Я просто хочу в первый метр памяти засунуть всю dma и свой код с данными. Но dma влезает впритык, хотелось бы освободить хотя бы 16к, не снижая функциональности видео в режиме lfb.

    _BC_
    подскажи, где можно почитать?

    Mika0x65
    нет, требуется, чтобы у нескольких задач была своя (полная) видеопамять, и при переключении активной(т.е, focused) задачи, ставить lfb в соответствующее место.
    Т.е, нужно менять именно физический адрес

    все
    Есть какие-нибудь гарантии, что lfb (если он, все-таки, статичный) не окажется, например, в первых 16мб?
     
  19. _BC_

    _BC_ БЦ

    Публикаций:
    0
    Регистрация:
    20 янв 2005
    Сообщения:
    759
    можешь попробовать в pci configuration space поменять адрес в BAR'е и глянуть, что vesa в ячейке 28h по функции 01h возвращает. ;)
    Самому двигать есть смысл только если ты какую-нибудь там самописную ось пишешь -- типа для разруливания ресурсов. ;)
    PCI Local Bus Specification
     
  20. shi

    shi New Member

    Публикаций:
    0
    Регистрация:
    27 июл 2006
    Сообщения:
    41
    _BC_
    как раз, пытаюсь найти.. а там есть конкретно про видео, или в общем?
    %-0 догааадливый )