ICH10 Chipset

Тема в разделе "WASM.ASSEMBLER", создана пользователем maxwelldream, 14 янв 2011.

  1. maxwelldream

    maxwelldream New Member

    Публикаций:
    0
    Регистрация:
    14 янв 2011
    Сообщения:
    9
    Здравствуйте уважаемые Программисты, знающие этот Великолепный язык - Ассемблер! Я начинающий программист в этой области:) У меня возникла проблема, обращаюсь к Вам за помощью как к Старшим товарищам:) Хочу написать на Ассемблере программу (в МАСМЕ) под Windows для чипсета ICH10. По документации Intel нащел смещение под PPO - Port Power Off, как я понял он отключает питание USB, так вот, не могу понять, какой адрес написать в программе? Вот сама программа:
    Код (Text):
    1.  pushad              
    2.   mov eax, 80000064h <= какой адрес сюда вставить?
    3.   mov dx, 0CF8h      
    4.   out dx, eax        
    5.   mov dx, 0CFCh <= какой порт написать здесь?Должен быть адрес порта данных, но какой?
    6.   in eax, dx          
    7.   or eax, 0000h <= это значение по-умолчанию, чтобы отключить питание нужно 0001h?
    8.   out dx, eax        
    9.   popad              
    10.   ret
    Как мне сделать чтобы она исполнялась под Windows? И какие адреса там поставить? Никак не могу найти...
     
  2. cppasm

    cppasm New Member

    Публикаций:
    0
    Регистрация:
    18 июл 2006
    Сообщения:
    923
    Какой не напиши - работать под Windows не будет.
    Для таких вещей надо драйвер писать.

    80000064h - это адрес (Bus:lol: evice:Function) устройства на PCI, если у тебя размещение на шине другое - надо менять.
    0CF8h, 0CFCh - это I/O порты для работы с PCI, не надо их менять.
     
  3. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.552
    Адрес:
    Russia
    Под Windows такое конечно не прокатит, но - пишите драйвер, или открывайте IO Map.
    Судя по документации. В адресном пространстве памяти PPO находится по смещению: 3524–3525h. Значение по умолчанию 0000h. Тип доступа R\W. Как видим - размер 2 байта.
    Чтоб туда, что либо записать, читаем доку по работе с PCI. на сколько помню там есть несколько методов доступа.
    один из них:
    Адрес памяти записывается в порт 0CFBh. Значение которое хочется прочитать или записать - читается или пишется в порт 0CFCh (вроде не напутал, если что - поправьте меня).
    Следовательно:
    Код (Text):
    1. mov ax, 3524h
    2. mov dx, 0CFBh
    3. out dx,ax           ;устанавливаем адрес
    4. mov dx, 0CFCh
    5. in ax,dx            ;читаем значение из контроллера
    6. inc ax
    7. out dx,ax          ;пишем что в контроллер
    А что именно нужно писать - чтобы отключить ? Читаем доку )
    Делаем выводы (ИМХО).
    Вы не читали документацию (наверно даже не скачали, а она тут)
    Но ничего, может быть потом почитаете.
     
  4. maxwelldream

    maxwelldream New Member

    Публикаций:
    0
    Регистрация:
    14 янв 2011
    Сообщения:
    9
    Огромное спасибо за помощь! Я скачал документацию, и даже читал то, что Вы цитируете, но опыта к сожалению маловато... Я извиняюсь за свою некомпетентность в этом вопросе:) А есть ли какой нибудь совсем простой вариант-реализация работы с PCI под виндой, чтобы можно было наглядно показать запись? Заранее спасибо.
     
  5. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.552
    Адрес:
    Russia
    maxwelldream
    Есть драйвер PCI шины. И приложения для чтения и записи в PCI. Приаттачил.
     
  6. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    TermoSINteZ
    Может я чего не понимаю... Не поясните мне, причём здесь вообще работа с PCI, если согласно документации PPO никакого отношения к конфигурационному пространству PCI не имеет, а отмаплен в память?
    Смещение (но не только!) в конфигурационном пространстве записывается в порт 0CF8h. А вот читаются/пишутся данные из/в один из четырёх портов, начиная с 0CFCh, в зависимости от последних двух бит смещения.
    Код в #3 у Вас, разумеется, неверный, т.к. то, что размер данных — два байта, не означает, что в 0CF8h нужно писать двухбайтовый адрес. Не говоря уже о том, что помимо смещения в 0CF8h надо писать номер шины (для устройств чипсета (MCH и ICH) это DMI, т.е. логически нулевая шина PCI), устройства, функции и устанавливать бит разрешения транзакции.
     
  7. maxwelldream

    maxwelldream New Member

    Публикаций:
    0
    Регистрация:
    14 янв 2011
    Сообщения:
    9
    Нет, Вы всё правильно понимаете, работа с PCI - это второй вопрос. TermoSINteZ - большое спасибо за аттач:) Дело в том, что мне нужно было остановить USB, т.е отключить его, а там я так понимаю с PCI всё завязано, но я так понял что windows мне это сделать не даст, а ещё один вопрос заключается в написании простейшего консольного приложения: берем два числа, одно складываем с другим и делаем вывод на экран, однако как я его не делаю, выходит ошибка ассемблирования, в МАСМЕ. Вот такая вот проблема. Может быть у Вас имеется возможность вкратце хотя бы написать такое консольное приложение для МАСМа, с остальными ассемблерами я ещё не научился работать:dntknw:? Спасибо за ответы:)
     
  8. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.552
    Адрес:
    Russia
    l_inc
    Да я немного ошибся, с тем что нужно читать\писать и другие адреса, естественно оно не будет писать сразу 2 байта. А про бит разрешения забыл, спасибо что напомнили.
    Но на счет промаплено в память - хз, не уверен ибо не проверял.

    /ADD
    maxwelldream
    На счет проблемы с масмом - создавайте отдельную тему в беггинерс разделе.
     
  9. maxwelldream

    maxwelldream New Member

    Публикаций:
    0
    Регистрация:
    14 янв 2011
    Сообщения:
    9
    Ок. Спасибо.
     
  10. maxwelldream

    maxwelldream New Member

    Публикаций:
    0
    Регистрация:
    14 янв 2011
    Сообщения:
    9
    А вообще сделать исполнимую программу из этого:
    Код (Text):
    1.  pushad              
    2.   mov eax, 80000064h
    3.   mov dx, 0CF8h      
    4.   out dx, eax        
    5.   mov dx, 0CFCh
    6.   in eax, dx          
    7.   or eax, 0000h
    8.   out dx, eax        
    9.   popad              
    10.   ret
    Возможно? Меня препод уже достал, взял этот кусок кода из книги - BIOS дизассемблирование, и требует от меня его сделать исполнимым, чтобы просмотреть потом в олли, я вообще не понимаю чего он хочет:dntknw: Можно ли его сделать исполняемым?
     
  11. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    maxwelldream
    Для реализации ОС в Процессоре предусмотрены механизмы защиты. Грубо говоря идет деление программ на 2 класса.
    1. Пользовательские.
    2. Системные. (драйвера, ядро , гипервизоры, код БИОСа)


    Так вот первые ограничены в возможностях. Одно из таких ограничений это доступ к портам в/в.
    При вызове
    out dx, eax,
    in eax,dx
    Произойдет исключение. Процессор прервет работу пользовательской программы и вызовит обработчик исключения. Этот обработчик находится в ядре ОС.

    Как быть? Ну тут масса варинтов.
    1) Написать драйвер.
    2) Использовать уже имеющийся драйвер(их много GiveIO.sys, port.sys, inpout32.dll и ид). Делается через вызов драйвера.
    3) "Открыть порты". Получить разрешение на работу с портами в/В для пользовательского приложения. (Были такие программы)

    Вот посмотри.
    http://www.pcports.ru/Articles.php
    http://www.pcports.ru/articles/3.php
     
  12. maxwelldream

    maxwelldream New Member

    Публикаций:
    0
    Регистрация:
    14 янв 2011
    Сообщения:
    9
    Спасибо, разобрался...