Можно ли сделать так, чтобы видеопамять переехала на некий произвольный физический адрес? И если можно, то как. Если нет, то интересно, в чем причина Заранее спасибо за ответы
Ну вообще ведь расположение видеопамяти документировано, и многие проги непосредственно к ней обращаются, было бы странно её перемещать.
по меньшей мере, его можно двигать с a0000 на b0000 в графическом режиме и с b8000 на b0000 в текстовом, поправьте, если вру. Но в Кулакове, кажецца, видел картинку, где видеопамять вообще где-то ближе к концу 4гб. пс: картинку видел точно, кажется, что в кулакове
shi Можно подвинуть LFB. А вот A0000-BFFFF фиксированный диапозон и его не подвинишь. Насчет выбора B8000, B0000, A0000 - это вроде возможно.
это родная видеопамять карты, ее можно перемещать (BAR'ы в pci conf). В 2D, зная разрешение экрана и глубину цвета, можно писать в нее напрямую -- так делает SoftICE в режиме "окошка", т.е. прямое чтение/запись во frame buffer. В текстовом же режиме SoftICE пользует VGA Range, как обычная text-mode прога. add: и тот самый video buffer SoftICE'а как раз предназначен для сохранения куска из frame buffer'а, в который он собственно и будет рисовать свое окошко, поэтому его "емкость" зависит от глубины цвета экрана -- чем меньше глубина цвета экрана, тем больше пикселов влезет в video buffer айса.
Это адрес линейного видеобуфера, его можно узнать с помощью Vesa, но изменить его боюсь проблематично.
Y_Mur А без весы его как-нибудь можно узнать? И еще: если у компа, например, 4 гб оперативки, то как использовать их полностью одновременно с lfb, если последний накладывается на озу?
Если говорить о не аппаратных методах, то можно настроить страничную адресацию в защищенном режиме так, что требуемый вирт. адрес будет указывать в требуемый физический, например, если это подходит для задачи.
Еще вопрос по теме вспомнил... или не совсем по теме.. ) можно заюзать a0000-bffff под, скажем, данные для dma?
Без Весы только недокументировано т.е. только в привязке к конкретной видеокарте, если сможешь найти инфу. 4 гб оперативки в линейном варианте винда полюбому не даст. Можно только получить "плавающее" в ней 2х гиговое окно.
shi Можно определить адрес и размер через конфигурационное пространство PCI видео карты. Адрес лежит в одном из BAR регистров. Их там несколько штук. Какой именно из них отвечает за саму память можно определить по размеру. Большее из них по размеру и будет тем адресом. Размер узнается путем записи в эти регистры FFFFFFFF и последующего чтения. Видео карта подправит адрес. Так чтобы вся память целиком умещалась. Собственно мы меняем тем самым адрес. Но нужно учитывать, что другие устройства могут использовать эти адреса. В самом верху весит БИУС так что конфликтовать точно будет. Так что нужно будет размещать по другому адресу. Адрес должен быть выровнен по границе соответствующему объему ее объему. Если на компьютере установлено 4ГБ. То во-первых компьютер должен поддерживать возможность установки 4ГБ. Во вторых бигус может зарезервирует под устройства PCI 1ГБ. Это по документации, а вот как на практике, черт его знает толи меньше может толи больше. Будет ли доступна в свободных промежутках основная память, компьютера(скорее всего будет) Насчет того чтобы полностью задействовать сказать не могу, так как я еще не все знаю. Но вроде это не получиться. Y_Mur Все документировано. shi Никто не запрещает. Работать с этой областью. Но нужно учитывать что либо частично, либо полностью будет отдана под видео память.
Y_Mur а если самостоятельно организовать защищенный режим? все может, есть у кого-нибудь ссылка на более-менее подробную информацию по работе с vesa из protected32?
Pavia хм.. а если используется lfb в конце памяти где-нить, то область a0000 - bffff все-таки свободна, или в ней зеркалится какая-нибудь часть lfb?
shi Про работу с VESA из protected32 описана в VBE3.pdf. Правдо, это прокатит только для карт поддеживающии расширени "PMID" , а это видео карты с VBE3. Для VBE2 есть FUNCTION 0AH - RETURN VBE PROTECTED MODE INTERFACE Но почти не используется из-за малого функционала. Проще перейти в VM86 или Real Mode и оттуда вызвать нужную функцию.
shi Да часть LFB будет закреплена. Режим может иметь до двух окон. A0000-AFFFF B0000-BFFFF Может быть задействовано одно или два. FUNCTION 05H - DISPLAY WINDOW CONTROL Управляет тем какая часть из LFB будет отоброжена в эти окна.
на части карт кстати, BAR в pci conf -- не единственный способ узнать базу frame buffer'а, на тех же geforce'ах VESA берет базу из одного из расширенных регистров контроллера CRT, притом, что характерно, хранится она там аккурат в том виде, в каком и хранится в pci conf (т.е. с битам IO/Memory, prefetchable, type).
Pavia Как? В vbe3.pdf ничего не нашел, более того, стал подозревать, что это невозможно. Нужно подвинуть всю видеопамять, а не ее отображаемую часть. Это определяется режимом или это можно задать? Я просто хочу в первый метр памяти засунуть всю dma и свой код с данными. Но dma влезает впритык, хотелось бы освободить хотя бы 16к, не снижая функциональности видео в режиме lfb. _BC_ подскажи, где можно почитать? Mika0x65 нет, требуется, чтобы у нескольких задач была своя (полная) видеопамять, и при переключении активной(т.е, focused) задачи, ставить lfb в соответствующее место. Т.е, нужно менять именно физический адрес все Есть какие-нибудь гарантии, что lfb (если он, все-таки, статичный) не окажется, например, в первых 16мб?
можешь попробовать в pci configuration space поменять адрес в BAR'е и глянуть, что vesa в ячейке 28h по функции 01h возвращает. Самому двигать есть смысл только если ты какую-нибудь там самописную ось пишешь -- типа для разруливания ресурсов. PCI Local Bus Specification