Вынос первого мегабайта.

Тема в разделе "WASM.RESEARCH", создана пользователем NoName, 24 ноя 2008.

  1. NoName

    NoName New Member

    Публикаций:
    0
    Регистрация:
    1 авг 2004
    Сообщения:
    1.229
    Может передавать управление через int? Тогда я незнаю какой вектор занять.
     
  2. NoName

    NoName New Member

    Публикаций:
    0
    Регистрация:
    1 авг 2004
    Сообщения:
    1.229
    Была ошибка в коде. Исправил. Ура! Все заработало :) Теперь буду переносить видеопамять.
     
  3. NoName

    NoName New Member

    Публикаций:
    0
    Регистрация:
    1 авг 2004
    Сообщения:
    1.229
    читаю байт из порта 3B9h там BD.
    Записываю байт 100b тудаже, значение не изменяется.
     
  4. NoName

    NoName New Member

    Публикаций:
    0
    Регистрация:
    1 авг 2004
    Сообщения:
    1.229
    Пишу индекс регистра 3B9h в порт 22, читаю данные в 23. Все при запрещенных прерываниях. Получаю результат 100b. Я вообще хотел его таким сделать и думал что там установлены единицы :)
    Если я хочу оставить B8-BF то мне нужно оставить smi так как я их прочитал насколько я понимаю. Осталось найти где это пернаправление на A0000-BFFFF
     
  5. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    NoName
    Откуда 3B9h? Написано что B9h
    Моя вина не пояснил что к чему. Есть обработчик SMI, и есть то что вызывает прерывания SMI.
    Обработчик прячиться по адрессу A0000-BFFFF. А в VGACTL мы отключаем один из десятков источников прерываний SMI.
    Если процессор обратиться к участку A0000-BFFFF то есть три варианта что произойдет. Первый сроботает обработчик SMI. Второе просто перенаправиться в видео память третийй вариант мы попадем ОЗУ-память тут должен прятаться обработчик SMI. Все источники не отключишь нужно будет SMI обработчик двигать. Путем установки базы SMAR.
     
  6. NoName

    NoName New Member

    Публикаций:
    0
    Регистрация:
    1 авг 2004
    Сообщения:
    1.229
    Pavia
    Прошу прощения насчет 3B9. Описался, пробовал на самом деле без тройки. Путаницу внесла страница 149 где регистры написаны с тройками.
    Правильную ли маску показывает мне железо? возвращает 4d => 100b. Это значит что 0xA0000 - 0xB7FFF и так не вызывают исключение #SMI. Я так понимаю что её мне менять ненужно.
    Пойду смотреть как двигать #SMI обработчик.
    Кстати по этой документации SMM System Code лежит в диапазоне 0xA0000h - 0xC0000h
     
  7. NoName

    NoName New Member

    Публикаций:
    0
    Регистрация:
    1 авг 2004
    Сообщения:
    1.229
    Страница 51: "Index CDh, CEh, CFh SMAR: SMM Address Region/Size Register (R/W)"
    Допустим я запускаю дос и меняю базу smar за пределы первого мегабайта. Этого достаточно? Или нужно еще что то сделать? Напомню что хочу оставить видеобуфер 0xB8000 - 0xBFFFF живым для начала.
    Похоже что нужно редактировать не только SMAR но и SMHR.
     
  8. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    NoName
    Достаточно. Только там это хитрым образом делается. Базу можно поменять только в SMM режиме, если не ошибаюсь. Поэтому надо вызвать обработчик SMM прогамно (там есть команда или регистр) и там сменить базу. Вроде так.
    В исходниках Award биоса есть участок установки SMM. Можно его поизучать.

    4h=> 100b. Это значит что 0xA0000 - 0xB7FFF и так не вызывают исключение. Если бы вызывали, тогда надо было бы отключить чтобы доступ получить к памяти. Иначе бы SMI могбы подсовывать что-нибудь.
    0xB8000 - 0xBFFFF он какраз через SMI и работает. При доступе к этой памяти вызываетя обработчик SMI. Он выбирает символ из шрифта и атрибут-цвета заносит в видео память скорее всего в LFB. Если можно перехватить/переписать SMI обработик, то тут можно любые выкрутасы вытворять. К примеру сделать Hi end графику.


    Другой варинт. Это задействовать защищенный режим и включить страничную адрессацию. И перейти в режим V86.
     
  9. NoName

    NoName New Member

    Публикаций:
    0
    Регистрация:
    1 авг 2004
    Сообщения:
    1.229
    Заполняю через ввод вывод ccr1, smar с учетом выравнивания на произвольный мегабайт (возьму третий или второй).
    Насколько я понял (стр. 80) smhr записывать ненужно потому что он автоматически пересчитывается относительно smar.

    вызываю инструкции (стр. 82)
    SMINT (0F 38h)
    и
    RSM (0F AAh), (Resume Normal Mode)
    Все ли правильно?

    Если записать в память по этим адресам dword и считать его то они несовпадают. Насколько я понял поможет изменение smar описанное выше.

    В новой версии ОС я сделаю поддержку vesa, наверное это лучше чем железное разнообразие с использованием LFB.
    Спасибо за второй вариант, лучший будет первый.
     
  10. NoName

    NoName New Member

    Публикаций:
    0
    Регистрация:
    1 авг 2004
    Сообщения:
    1.229
    Можно ли вообще обработчик вынести из области первого метра?
    Я всегда почему-то считал что SMM работает в полной плоской модели памяти.
     
  11. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    NoName
    Думаю можно режим там реальный, но с доступом ко всей памяти.
     
  12. NoName

    NoName New Member

    Публикаций:
    0
    Регистрация:
    1 авг 2004
    Сообщения:
    1.229
    Так перенести можно за первый метр или получается что нельзя из-за адресации?
     
  13. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    NoName
    Так возьми и попробуй. Я думаю что можно. Просто на разных процах это поразному.
     
  14. VaStaNi

    VaStaNi Member

    Публикаций:
    0
    Регистрация:
    1 июн 2004
    Сообщения:
    203
    Адрес:
    Ukraine
    а что с адрессацией? Маны по процу, кажется этого не запрещали или я не в курсе или забыл может быть..., но адрессация наподобие анреала там ведь так?
    И вообще она меняется? Скажем вниз меняется? Если нет, то ищи у себя, стало быть причину.
     
  15. PSR1257

    PSR1257 New Member

    Публикаций:
    0
    Регистрация:
    30 ноя 2008
    Сообщения:
    933
    Насколько я понял по моим исследованиям (возможно, напишу неточно но могу посмотреть результы) основная проблема со SMI - это то, что некоторые чипсеты просто закрывают доступ к SMI - нельзя ни читать, ничего. Если доступ к SMI получен, то проблем с переносом (а перенос идет вроде бы вообще по дефолту с A0000 немного выше после STARTUP) или увеличением памяти SMI-обработчега быть не должно.

    На одном из чипсетов так и было - пришлось сначала дизасмить BIOS, в нем я обнаружил callback-процедуры, на которые в самом BIOS ссылок не было как не было ссылок в оригинальной (==BIOS'овской) таблице прерываний. После того, как я открыл BIOS на запись и перезаписал эти процедуры на свои и принудительно вызвал SMI, я смог сдампить сам обработчег.

    Анализ обработчега показал, что он определенно обладает неким "Экспортом" функций, которые [возможно] вызываются так называемыми "драйверами чипсета" - то, что инсталлируеццо с диска приложенного к компу его vendor'ом - через определенные обращения к портам с определенными значениеми регистров.

    Однако в анализе я не нашел функций типа "установить внешний обработчег" (callback) или "перенести память" или другие "низкоуровневые" функи. Создалось впечатление что через этот интерфейс можно лишь настраивать параметры чипсету, но не более.