Запись в видеопамять

Тема в разделе "WASM.NT.KERNEL", создана пользователем murder, 3 июн 2007.

  1. murder

    murder Member

    Публикаций:
    0
    Регистрация:
    3 июн 2007
    Сообщения:
    628
    Вопреки моим ожиданиям в первых 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
     
  2. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    murder
    Вроде у тебя ошибка в коде, читаешь от туда где лежит "P", а не со следующего байта. Вот и не находит.

    PMID появился в VBE3.
    Не знаю, зачем ты взялся за VESA, я бы использовал пример от Bohdan200 и развивал его дальше.
     
  3. murder

    murder Member

    Публикаций:
    0
    Регистрация:
    3 июн 2007
    Сообщения:
    628
    Pavia
    Тут нет ошибки. Все строковые операции вначале выполняют некоторое действие, а затем изменяют edi (в моём случае edi увеличивается на 1). Видимо проблема в самом BIOS`е (он просто не поддерживает такое).
     
  4. rei3er

    rei3er maxim

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    917
    Адрес:
    minsk
    имхо, нет
    то есть да, но в твоем случае нет: после того, как совпадение было найдено, увеличение edi, имхо, не происходит (надо бы проверить)
     
  5. murder

    murder Member

    Публикаций:
    0
    Регистрация:
    3 июн 2007
    Сообщения:
    628
    rei3er
    Я проверял перед тем, как написать - ничего не находит.

    Исходник сложноват для меня.

    Это MASM не воспринимает
    заменил на
    .const
    GUID_DEVINTERFACE_DISPLAY_ADAPTER dd 05B45201Dh, 0F2F2h, 04F3Bh, 085h, 0BBh, 030h, 0FFh, 01Fh, 095h, 035h, 099h

    в итоге BSOD
     
  6. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    murder
    О том и речь у тебя EDI не увеличивается после того как была найдено "P" ты читаешь с этого же байта.
    mov edx,[edi] в этоги у тебя в edx лежит xxxxxx50h разумеется дальше проверка не идет.
    может там не inc ecx нужно, а inc edi
     
  7. murder

    murder Member

    Публикаций:
    0
    Регистрация:
    3 июн 2007
    Сообщения:
    628
    Ладно - проверю ещё раз.

    Кстати только, что нашёл инфу как получить информацию о PCI устройстве через HalGetBusData.
     
  8. rei3er

    rei3er maxim

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    917
    Адрес:
    minsk
    murder
    ясно, что через конфигурационное пространство :)
    иначе никак (ну может разве что только через ACPI)
     
  9. murder

    murder Member

    Публикаций:
    0
    Регистрация:
    3 июн 2007
    Сообщения:
    628
    PMID я нашёл, контрольная сумма совпала. Немогу вызвать процедуру инициализации. Мне кажется, что она 16-битная. Гляньте исходник.
     
  10. murder

    murder Member

    Публикаций:
    0
    Регистрация:
    3 июн 2007
    Сообщения:
    628