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

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

  1. _BC_

    _BC_ БЦ

    Публикаций:
    0
    Регистрация:
    20 янв 2005
    Сообщения:
    759
    в общем. Но тебе в общем и надо, считай, обычная настройка ресурсов PCI-устройства.
    скажем так, в большинстве случаев DRAM по адресу A0000h-BFFFFh тебе будет и так недоступен, независимо от того, используется он (т.е. диапазон A0000h-BFFFFh) под видеопамять или нет. ;)
     
  2. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    shi
    Есть гарантии что LFB(это и есть вся видео память) окажется выше 2ГБ с вероятностью 99%. Выше 3ГБайт с вероятностью 90%.

    Всю не выйдет, а вот ограничение на одну две видео страница можно сделать. Лучше сделать через виртуальную память, о чем сказал Mika0x65.

    Про BAR расписана в спецификации на PCI. LFB это и есть вся память видео карты. Двигается путем переписывания BAR регистра в конфигурационном пространстве PCI. Разумеется в VBE про это не написано. LFB - это не буфер в основной памяти, это вся память видео карты. Так что подвинуть то можно, но сдвинуться все содержимое.
    Для древних видео карт драйвер эмулировал LFB, разумеется через основную память компьютера и подвинуть ее не возможно.

    FUNCTION 07H - SET/GET DISPLAY START может задать координаты откуда будут браться данные для отображения на экран. Координаты задаются относительно начала видео памяти. Можно вызывать из защищенного режима начиная с VBE2 при использовании FUNCTION 0AH.

    А еще есть GART. Когда основная память компьютера используется в качестве памяти видео карты. Причем можно настраивать адреса. Правда про это я мало что знаю.

    Я вот что вспомнил, у северного моста. Есть возможность отдать диапазоны
    A0000-AFFFF
    B0000-BFFFF
    основной памяти компьютера. Хотя вроде эта часть и стандартизирована. Но все-таки возможно у разных материнских карт по-разному.

    Не помню, читай VBE3.

    Не понял, что за dma ты хочешь засунуть в первый мегабайт? DMA- Direct Memory Access прямой доступ к памяти. Старый DMA контролер может адресовать к 16МБайтам, адреса физические. Смысла в этом я не вижу.
    Причем учти в твоем распоряжении только 640КБайт далее идет видео память и БИОС.
     
  3. shi

    shi New Member

    Публикаций:
    0
    Регистрация:
    27 июл 2006
    Сообщения:
    41
    Pavia
    Хочу засунуть туда буферы dma. 4 по 64к, 3 по 128к. итого 640к, впритык, о чем и речь.
    Если бы удалось освободить хоть 32к от a0000-bffff, то все будет ок. можно, конечно, один 32-разрядный dma-канал засунуть выше 1м, только приспичило мне все вместить в 1м...
     
  4. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    почему сразу винда. если просто инициализировать защищенный режим и не включать страничное преобразование, оставив линейную модель памяти. че будет при обращении к тем адресам?
     
  5. Y_Mur

    Y_Mur Active Member

    Публикаций:
    0
    Регистрация:
    6 сен 2006
    Сообщения:
    2.494
    Great
    Винда потому что Flat модель - все сегменты спроецированы в один и 4Г - предел, это даже чуть меньше чем в ДОС, но когда создавалась win32 платформа оно казалось безграничным простором :)
    А без винды и защищённый режим необязательно инициализировать ;) - в реал моде из любого сегмента доступ к 4м гигам свободен.
    shi
    Вообще-то биос при старте сам двигает видеопамять за пределы обычной, но как он поведёт себя если её больше 4Гиг не знаю.
    Но раз как пишет Pavia есть открытая да ещё и стандартизированная инфа то решение должно быть, тем более что каждый сегмент может адресовать 4Гига, а их если я не ошибась по прежнему может быть 65535 штук.
    В реал моде они расположены с перекрытием, каждый последующий сдвинут относительно предидущего на параграф (16 байт). Но в протекте их можно располагать и без перекрытия, т.е. 4Гига первого сегмента, за ним 4Гига второго, и так 65535 раз.
     
  6. shi

    shi New Member

    Публикаций:
    0
    Регистрация:
    27 июл 2006
    Сообщения:
    41
    тьфу, то есть, 16-разрядный )
     
  7. cppasm

    cppasm New Member

    Публикаций:
    0
    Регистрация:
    18 июл 2006
    Сообщения:
    923
    Нельзя так сделать.
    У сегмента в дескрипторе база 32-битная.
    Поэтому ты не сделаешь чтобы второй сегмент начинался на 4Гб.
     
  8. Y_Mur

    Y_Mur Active Member

    Публикаций:
    0
    Регистрация:
    6 сен 2006
    Сообщения:
    2.494
    cppasm
    Обидна :dntknw:(, но как раз из
    следует, что можно
    это 65535 раз не получится, но и 8 Гиг тоже кое что.
    ЗЫ: давненько я в докментацию по этому поводу не лазил.
     
  9. Nouzui

    Nouzui New Member

    Публикаций:
    0
    Регистрация:
    17 ноя 2006
    Сообщения:
    856
    не получится - попытка загрузить такой селектор вызовет исключение
     
  10. shi

    shi New Member

    Публикаций:
    0
    Регистрация:
    27 июл 2006
    Сообщения:
    41
    Y_Mur
    подозреваю,что она замкнется в кольцо, и будет все равно 4г
    Там как-то можно заюзать 36бит, только я не помню, это физического или линейного адр.пространства. вопрос, кстати..
     
  11. Nouzui

    Nouzui New Member

    Публикаций:
    0
    Регистрация:
    17 ноя 2006
    Сообщения:
    856
    физического
    не помню как
     
  12. shi

    shi New Member

    Публикаций:
    0
    Регистрация:
    27 июл 2006
    Сообщения:
    41
    Nouzui
    зато я помню. примерно)
    там надо установить какой-то бит в cr0, тогда вводится еще один уровень каталогизации страниц. элементы таблиц становятся по 8 байт, туда все, что нужно, влезает
     
  13. cppasm

    cppasm New Member

    Публикаций:
    0
    Регистрация:
    18 июл 2006
    Сообщения:
    923
    Прально подозреваешь :)
    Адреса "заворачиваться" будут - всё равно больше 4Гб не получить.
    Можно включить 36-битную адресацию как выше писали, но только начиная с Pentium Pro.