Скажите пожалуйста, каким образом можно (интересует "технология") перечислить все устройства PCI, установленные на компе? Знаю, сорцы в инете есть, но нужно понять сам процесс нахождения устройств. На данный момент ничего вразумительного не нашел. Целевая ОС - ДОС или Вин98. Для ВинХР есть выход н нулевое кольцо для работы с портами, важен сам процесс перебора. Если можно, с удовольствием почитаю ссылки по теме, где более-менее доходчиво это объясняется. P.S. Вещи Вроде (...) вот кусок кода на 98 для поиска чего-то [ code ]...[ /code ] А вот, для работы с ним [ code ]...[ /code] видел. ХЗ что там...
SpiritFire Скачай спецификацию PCI и почитай. Можно через порты и прерывания. Для работы с PCI устройствами есть два пути через сервис BIOSa или через порты ввода/вывода. Вернее не самими устройствами, а с их конфигурационными пространствами этих устройств. Конфигурационное адресное пространство это 256 байт в каждом PCI устройстве. Предназначенные для идентификации устройства и его настройки. Для доступа к конфигурационному адресному пространству в PC-AT и совместимых машинах выделено два основных порта. 0CF8h -W порт адреса Address 0CFCh RW порт данных Data Оба порта являются 32 битными. Порт адреса представляет собой следующую 32 битную структуру Код (Text): +---+---------+-------+----------+--------+---------------+-+-+ |31 |30 24|23 16|15 11|10 8|7 2|1|0| +---+---------+-------+----------+--------+---------------+-+-+ | С | резерв |шина |устройство| функция|Индекс регистра|0|0| +---+---------+-------+----------+--------+---------------+-+-+ Порт адреса задает шину, устройства, и адрес регистра в конфигурационном пространстве устройства. Грубо говоря, устройство - это физически присутствующее устройство. А функция - это логическое устройство. Пусть вас не удивляет, но большая часть PCI устройств это системные устройства, а не платы расширения PCI. С - флаг доступа к устройству. Выставляется по завершению установки адресса. Карта конфигурационного пространства. Представляет собой 256 байт различной информации. Описание нужно смотреть в соответствующих спецификациях. Если в ответ на запрос нулевого регистра возвращается значение 0FFFFh, то устройства не существует. Vendor ID (ID производителя) - для Intel это 8086h, но не может принимать значение 0FFFFh. Header Type (тип заголовка) – если бит 7 равен 1 то устройство содержит несколько функций. Если бит 6 равен 0 то заголовок стандартный. Стандартные заголовки 00 – стандартный смотри выше. 01 – стандартный для моста PCI-to-PCI 02 – стандартный для моста CardBus. Число шин определяется числом мостов PCI-to-PCI плюс одна главная. Если не путаю то в ранних спецификациях все мосты должны были быть на главной шине, а в последующих не обязательно. Если используешь Int 1ah, то там есть информация о числе шин. Функции следует проверять вначале нуливую и смотерть заголовок если установлин бит 7 то надо перебирать все функции иначи ненадо. Вот и сканируй перебирая все адресса. 1 Читаешь функцию 0, если нулевой регистр(Vendor ID) имеет младшее слово равное 0FFFFh то устройство отсутствует 4. 2 Если есть функция 0 то проверяем тип заголовка на содержание дополнительных функций 3. Да существуют другии функции пробуем читать нулевой регистр с кажой функции. 4. увеличиваем счетчик устрпойств. 5. Если переполнился счетчик устрпойств, то увеличиваем счетчик шин. 6. Проверяем на число шин если меньше переходим на 1 если больше то выходим. На виндоусе уже это все проделанно только бери и читай список. Название функций не помню, но думаю ты найдешь.
Надо руками - это в учебных целях. Буду через порты -- чтобы не зависить от оси. Спасибо, качаю спецификацию, буду разбираться)