Закончил я писать программу и провел, так сказать,

Закончил я писать программу и провел, так сказать, анализ.
Результаты меня привели в некоторое замешательство.
Начал еще раз перечитывать спецификацию PCI.

Перечитав Appendix D - Device Class Codes, я понял что никаких фиксированных адресов PCI плате выделяться не может.
По анализам BAR биос может только узнать размер области, необходимой устройству. При этом выбор адреса этой области лежит целиком на биос.
Как оказалось, просто некоторым устройствам стандартного типа (видео например) далжна выделяться область с определенным базовым адресом.


В спецификации прописано что если код класса - 030000, то как видеокарте, устройству полагается память A0000-BFFFF и I\O 3B0-3BB, 3C0-3DF.
Я этого не знал, и полагал что видеокарта должна сама заявлять об требуемых ей ресурсах в BAR. На самом деле в BAR только дополнительная памать.

Теперь о самой видеокарте asus.
Она использует только BAR0 и BAR1, требуя в каждом из них по 16Мб памяти.
Плюс используется BAR-eROM, требующий 4(!) мегабайта под ROM.

Биос платы NEC выделяет ей пространство E0000000-E0FFFFFF и E1000000-E1FFFFFF под память.
Какой адрес выделяется ROM я не знаю - после COPYROM он сброшен в 0.
Но посмотрев в код, можно посчитать, что выделяется пространство 000C0000 - 004C0000 что в принципе странно, хотя работать должно.

Теперь даже не знаю где может быть косяк..... ?

Добавлено спустя 10 минут 29 секунд:

Посмотрел, как выделяется на плате с чипсетом VIA - то же самое.
E2000000-E2FFFFFF
E3000000-E3FFFFFF
ROM=0

Экзотика NEC не хочет принимать видеокарту