Проблема вот в чем функция PCI BIOS 0B102h возвращает всегда (Function not support) ah=86h уже перепробывал несколько классов в том числе и клавиатуру(00090000h) он ведь то есть.. а результат один(. Код (Text): .386 mov ecx,00090000h;00090300h ; Scanner Controller .286 xor si,si @@loop: mov ax,0B102h int 1ah jc @@PCI_ERROR test ah,ah jnz @@PCI_ERROR push si call GetScanerInfo pop si inc si jnz @@loop код тестирую в real-mode режиме процессора.
На живом железе или какая-нибудь недо-виртуалка типа dosbox? Если последнее, то афторы вполне могут и забить на такие неведомые для досовых игрух в 90-94 гг функции. Плюс, надо больше золота кода.
живое железо. вот больше кода: Код (Text): mov ax,0B101h int 1Ah jc @@PCI_BIOS_NOT_FOUND cmp dx,'PC' jnz @@PCI_BIOS_NOT_FOUND .386 mov ecx,00090000h;00090300h ; Scanner Controller .286 xor si,si @@loop: mov ax,0B102h int 1ah jc @@PCI_ERROR test ah,ah jnz @@PCI_ERROR push si call GetScanerInfo pop si inc si jnz @@loop к теме прикрепил весь код.
XshStasX Если вам не нужно генерировать какие-нибудь специальные циклы, то почему бы не взаимодействовать с конф. пространством PCI напрямую? https://wasm.ru/article.php?article=hardzen См. Устройства PCI.
XshStasX Читай описание внимательнее. http://ru.osdev.wikia.com/wiki/PCI_BIOS У вас 3 ошибки как минимум 1) ah=86 это устройство не найдено. 2) mov ax,0B102h ищет не по классу, а по CX ID устройства/Device ID (0...65535) DX ID поставщика/Vendor ID (0...65534) 3) mov ecx,00090000h; явно больше 65535 4) С чего вы взяли что этот класс у вас есть? Обычная клавиатура весит на контроллере 8042 который располагается на шине ISA (нынешняя LPC). И к PCI не имеет отношения.
XshStasX Первый вариант. Из спецификаций на компьютер. Второй вариант разработать сканер который получит список всех устройств. К примеру он может быть таким вначале сканируем основные устройства. Находим некоторые "мосты" между шинами и сканируем уже эти шины и так далее. Ближе к практике. Вначале основные шины PCI, и PnP BIOS. Затем в зависимости от того что нашли сканируем USB, IDE, SCSI. Сканер PCI я бы сделал так. Нашел структуру PIR считал от туда максимальное число шин. Потом перебирал бы все шины и устройства по порядку. Если устройство содержит несколько функциональных устройств. То перебирал бы и функции на конкретном устройстве. PnP BIOS делает тоже просто. Находишь точку входа и перебираешь все структуры.
Кстати, а какой философский смысл ты вкладываешь вот в эти инструкции? .386 mov ecx,00090000h;00090300h ; Scanner Controller .286 xor si,si