Вопреки моим ожиданиям в первых 32 Килобайтах по адресу 0C0000h не оказалось сигнатуры 'PMID'. Не думаю, что я ошибся в коде, но всё же DriverEntry: push edi invoke MmMapIoSpace,0C0000h,0,65536,MmCached mov edi,eax mov al,50 ;'P' mov ecx,65516 ;на всякий случай сканирую первые 64K search: repne scasb inc ecx mov edx,[edi] and edx,0FFFFFFh xor edx,44494dh ;'MID' je initialize ;если структура найдена, то на экран ничего не выводится loop search invoke MmMapIoSpace,0D0000000h,0,65536,MmWriteCombined mov edi,eax mov ecx,16000 rep stosd initialize: pop edi xor eax,eax retn 8
murder Вроде у тебя ошибка в коде, читаешь от туда где лежит "P", а не со следующего байта. Вот и не находит. PMID появился в VBE3. Не знаю, зачем ты взялся за VESA, я бы использовал пример от Bohdan200 и развивал его дальше.
Pavia Тут нет ошибки. Все строковые операции вначале выполняют некоторое действие, а затем изменяют edi (в моём случае edi увеличивается на 1). Видимо проблема в самом BIOS`е (он просто не поддерживает такое).
имхо, нет то есть да, но в твоем случае нет: после того, как совпадение было найдено, увеличение edi, имхо, не происходит (надо бы проверить)
rei3er Я проверял перед тем, как написать - ничего не находит. Исходник сложноват для меня. Это MASM не воспринимает заменил на .const GUID_DEVINTERFACE_DISPLAY_ADAPTER dd 05B45201Dh, 0F2F2h, 04F3Bh, 085h, 0BBh, 030h, 0FFh, 01Fh, 095h, 035h, 099h в итоге BSOD
murder О том и речь у тебя EDI не увеличивается после того как была найдено "P" ты читаешь с этого же байта. mov edx,[edi] в этоги у тебя в edx лежит xxxxxx50h разумеется дальше проверка не идет. может там не inc ecx нужно, а inc edi
Ладно - проверю ещё раз. Кстати только, что нашёл инфу как получить информацию о PCI устройстве через HalGetBusData.
murder ясно, что через конфигурационное пространство иначе никак (ну может разве что только через ACPI)
PMID я нашёл, контрольная сумма совпала. Немогу вызвать процедуру инициализации. Мне кажется, что она 16-битная. Гляньте исходник.