Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Hardware » Магнитные носители информации » Ремонт накопителей WD (Western Digital). Часть VII

Модерирует : Akam1, Dr_StandBy, vertex4

Akam1 (30-06-2017 04:51): http://forum.ru-board.com/topic.cgi?forum=84&topic=5294  Версия для печати • ПодписатьсяДобавить в закладки
На первую страницук этому сообщениюк последнему сообщению

   

Smyg11



Full Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору

Цитата:
Для доступа к шине PCI используется 2 порта 0CF8 и 0CFC. Оба этих порта имеют размер 32 бита (DWORD)
Порт 0CF8, сновной функцией этого регистра является - выбор определённого регистра конф. пространства одного из устройств на одной из шин PCI
Его формат
0-1 не используется, потому что размер регистра 32 бита
2-7 Номер регистра в пространстве PCI-устройства
8-10 Номер функции устройства (для многофункциональных устройств)
11-15 Номер устройства
16-23 Номер шины
24-30 не используется
31 Всегда должен быть равен 1!!
После выбора конкретного регистра из него можно читать и в некоторые писать, для этого нужен порт 0CFC, он и является отображением данных того выбранного регистра, операции ВСЕГДА ведуться ТОЛЬКО с 32
битными словами
 
Для начала нам нужно выяснить что за производитель у нашей матери
мост всегда находится по адресу $80000000
пример:
PortDWordOut 0CF8 ,$80000000
Brifge:=PortDWordIn 0CFC
мы получили нулевой регистр северного моста, нулевой регистр состоит из двух слов
младшее слово это Vendor, старшее слово это Device
описание можно взять здесь http://rh-software.com/downloads/pcidevs.zip
 
для VIA вендор 1106
для Intel вендор 8086
итак мы знаем производителя нашей матери теперь нам надо узнать где находиться IDE контроллер
для этого мы сканируем PCI-шину для поиска знакомых IDE-контроллеров (ищем знакомый Device уже известного Venodra)
 
for bus:=0 to $ff do
  for dev:=0 to $1f do
    for func:=0 to 7 do begin
      io_cf8:=$80000000+(bus shl 16)+(dev shl 11)+(func shl 8);
      PortDWordOut($CF8,io_cf8);
      io_cfc:=PortDWordIn($CFC);
      if (io_cfc and $0000FFFF)=VID then begin
        Name:=GetIDEName(HIWORD(io_cfc));
        if Name<>'Unknown device' then begin
          Result:=true;
          Conf:=io_cf8;
          exit;
        end;
      end;
    end;
нашли наш IDE-контроллер и запомнили его адрес

Всего записей: 531 | Зарегистр. 29-03-2016 | Отправлено: 15:44 18-10-2016 | Исправлено: Smyg11, 14:10 19-10-2016
   

На первую страницук этому сообщениюк последнему сообщению

Компьютерный форум Ru.Board » Hardware » Магнитные носители информации » Ремонт накопителей WD (Western Digital). Часть VII
Akam1 (30-06-2017 04:51): http://forum.ru-board.com/topic.cgi?forum=84&topic=5294


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru