Uniflash 1.40 при запуске выдает PCI

>Uniflash 1.40 при запуске выдает "PCI chipset: (1022,1100,00)+(10DE,0261,A2)"

Отлично, как раз то, что нужно!

>rd480 интересен?

Конечно (и еще более, чем нВидиа), повторюсь, как и все другие атишные чипсеты (в том числе с неатишными южниками).

Добавлено спустя 19 минут 41 секунду:

Добавляем полученные айдишники - например, детект южников будет теперь выглядеть так:

 If SouthMan = $10DE {nVidia} then {v1.30}
  Begin
   SouthFunc:=$1600;
   case SouthId of
    $01B2: begin SouthName:='nVidia MCP/MCP-D';                 SouthFunc:=$1601; end; {v1.41re}
    $0060: begin SouthName:='nVidia MCP2';                      SouthFunc:=$1602; end; {v1.41re}
    $0080: begin SouthName:='nVidia MCP2A/MCP2S';               SouthFunc:=$1602; end; {v1.41re}
    $00D0: begin SouthName:='nVidia nForce3 LPC Bridge';        SouthFunc:=$1602; end; {v1.41re}
    $00E0: begin SouthName:='nVidia nForce3 250Gb LPC Bridge';  SouthFunc:=$1602; end; {v1.41re}
    $0050: begin SouthName:='nVidia nForce4 LPC Bridge';        SouthFunc:=$1602; end; {v1.45re}
    $0030: begin SouthName:='nVidia MCP-04';                    SouthFunc:=$1602; end; {v1.45re}
    $0261: begin SouthName:='nVidia MCP51';{добавлено}          SouthFunc:=$1602; end; {v1.46re}
   end;
  End;

Добавлено спустя 2 часа 35 минут 20 секунд:

Продолжим разбирать юнифлеш. Мы остановились на размапливании нехабовых интеловских южников. "Классическое" размапливание уже разобрано, теперь много более сложный кусок, который очень важен для понимания принципов снятия защиты от записи у "брэндов". Т.е. кусок "шаманских действий", которые нужны, чтобы забороть добавленные "продвинутыми" производителями _дополнительные_ (т.е. помимо "стандартно" имеющихся) железные способы защиты флэшки от перезаписи, без которых невозможно "добраться" (корректно размапить) до флэши.
Именно этот _дополнительный_ код обычно отличает "брэндовые" системы от "простых". И именно поэтому в моих рекомендациях всегда я обязательно советовал - шить только на "небрэндовых" платах (где, соответственно, нет этой _дополнительной_ защиты).

           PIIXReg4:=0;
           if Lo(SouthFunc)=3 then {v1.29}
            begin
              if (BIOSID='6A69KA19') {Abit BF6, BE6-II v1.0 and v1.1}
               or (BIOSID='6A69KA1B') {Abit BE6-II v1.2}
               or (BIOSID='6A69KA1C') {Abit BE6-II v2.0 and BX133-RAID}
               or (BIOSID='2A69KA1Q') {Abit ZM6}
               or (BIOSID='2A69KA1U') then {Abit BE6}
               begin
                 PIIXReg2 := GetPCIRegD( $00, SouthPos shr 3, 4, $40 ); {v1.29}
                 LogWrite('Intel method: PM Base = '+Hl(PIIXReg2));
                 if PIIXReg2=-1 then
                  begin
                    PIIXReg4:=1;
                    SetPCIRegD($00,SouthPos shr 3,3,$40,$6101);
                    SetPCIRegD($00,SouthPos shr 3,3,$80,GetPCIRegD($00,SouthPos shr 3,3,$80) or 1);
                    LogWrite('Intel method: PM Base set to '+Hl(GetPCIRegD($00,SouthPos shr 3,3,$40)));
                    PIIXReg3:=Port[$6134] or LongInt(Port[$6135]) shl 8
                                                             or LongInt(Port[$6136]) shl 16 or LongInt(Port[$6137]) shl 24;
                    LogWrite('Intel method: GPO status '+Hl(PIIXReg3));
                    Port[$6135]:=Port[$6135] and $FD;
                    Port[$6137]:=Port[$6137] and $FB; {Abit BX133-RAID v1.29}
                    LogWrite('Intel method: GPO changed to '+Hl(Port[$6134] or LongInt(Port[$6135]) shl 8
                      or LongInt(Port[$6136]) shl 16 or LongInt(Port[$6137]) shl 24));
                  end;
               end;
             end;
          End else

Не совсем уклюжий, опять же, но код.:)
Итак, ранее (выше, мы разбирали) был детект BIOSID, который как раз и используеются здесь, для "конкретизации" нашего универсального прошивальщика. Это значит, что авторы юнифлеша просто раскопали, как снимается _дополнительная_ защита от записи для конкретных абитовских плат и добавили ее снятие, которое применяется, как видно, только конкретно к этим платам. И применяется банально просто - по биосайди - если оно такое, то кроме "классического" размапливания проводим и _дополнительную_ процедуру (упомянутые "шаманские действия").
ВАЖНО: Что будет, если мы не проведем эти _дополнительные_ действия сказать сложно (как раз такое и происходит, когда прошивальщие "не до конца" знает плату). Можно точно сказать, что корректно прошить микросхему точно НЕ ПОЛУЧИТСЯ. А в большинстве случаев (если не было _дополнительного_ размапливания) не получится даже просто задетектить флэшку. И никакие принудительные установки типа флэши ("-force XXXX" и др. подобные ключики в прошивальщиках) тут не помогут - мы _не_добрались_ до флеши, потому и прошить не сможем.

Теперь по коду _дополнительного_ размапливания Абитов (BF6/BE6-II/ZM6/BX133). Для защиты используется обычные GPO.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
GPO - General Purpose Output. По-простому это можно описать следующим образом. Помните, в антикварных компьютерах (до Pentium включительно) была просто тьма перемычек? А потом они "куда-то" исчезли, породив ставшие впоследствие стандартными "Jumper Less"-системы. Вот именно "в GPO" они и исчезли. GPO - это те же самые перемычки, только "внутричипсетные". Которые нам и нужно программно переставить в нужное положение. Именно это и делает приведенный _дополнительный_ кусок кода для некоторых абитных плат.


****************************************
Итак, разберем юнифлешовый способ переключения GPO-шных перемычек (установки оных для разрешения записи биоса). Код достаточно странный, но, что есть то есть.:)
Сначала получаем базовый адрес Power Management-a (Rx40 южника, третья функция) для того, чтобы... его потом поменять на свой.:) Почему не пользоваться имеющимся - не знаю, можно предположить - просто для "перестраховки".
Меняем его на свои 6100h (единичка на конце - это ReadOnly бит, потому запишется именно 6100). Теперь мы можем пользоваться областью портов 6100 для "нашего" PowerManagement-a. Предварительно сохраняем "родное" значение базового адреса PM, чтобы после (при выходе и "замапливании") все вернуть на родину.
Включаем доступ к "нашим" регистрам PM - Rx80 (MISCELLANEOUS POWER MANAGEMENT), бит 0 = Power Management IO Space Enable.
Сохраняем на будущее все GPO (т.е. запоминаем положение всех "внутричипсетных" перемычек, чтобы после наших манипуляций вернуть все как было).

GPO лежат смещению 34-37h:
7.2.16. GPOREG—GENERAL PURPOSE OUTPUT REGISTER (IO)
I/O Address: Base + (34h, 35h, 36h, 37h)
Default Value: 7FFFBFFFh
Attribute: Read/Write (Byte accesses only)

Видимо больше по приколу (хотя может и из маниакально-педантических соображений - для "экономии памяти"), но все четыре байта GPO засовываем в одну временную переменную PIIXReg3 (которая Dword).
И, наконец, виртуально снимаем перычку(-и) защиты от записи:
Port[$6135]:=Port[$6135] and $FD;
Port[$6137]:=Port[$6137] and $FB;
Все, "шаманские действия" закончились (про постоянное логгирование по ходу юнифлеша - думаю понятно, потому не комментирую).

Операция получилась мудреная, но, видимо, сказался опыт работы с большим количеством систем, потому логичная привычка максимальной перестраховки и породила такой достаточно "заумный" код.:)
Для сравнения приведу "реальный" код размапливания в самом биосе:

Abit BE6 (ver. 07/05/2000), original.tmp.

15972: pushad
15974: mov    cx,0384Eh ; Rx4E - управление защитой от записи для i82371 (PIIX4)
15977: call   GetPCI
1597A: or     al,004    ; Снимаем "классическую" защиту от записи
1597C: call   SetPCI
1597F: mov    dx,04037h ; Считываем GPO (обычно принятый адрес PM - 4000h)
15982: in     al,dx
15983: jmps   000015985 ; Небольшая задержка
15985: jmps   000015987
15987: and    al,0FBh   ; Снимаем "абитовскую" защиту от записи
15989: out    dx,al
1598A: jmps   00001598C ; Небольшая задержка
1598C: jmps   00001598E
1598E: popad
15990: retf

Как видно, все проще. Но мы же не ищем простых путей.:)

runiflash
  • "Массивчик" данных SPD находится в ЕПРОМ на модуле
  • Привет всем runiflash `ерам! Тема интересная, но
  • 2 Cyrix. Вот темка Выручает:)
  • Господа, подскажите почему Uniflash не хочет нормально шить
  • Root да, в реале.
  • обнаружил серьезную багу в Uniflash 1.40&URE1.41/1.42: на MSI K7D
  • Тема интереснейшая...
  • savely_s Скинул...
  • Кстати - у ivp есть KT7A.
  • То есть снимать лучше самим UniFlash? Тестить уже
  • Uniflash не пашет на KT7A & Co
  • Все понял, модели напишу/анкноун уберу (едит)
  • Мои выкладки были не совсем правильно
  • В копилку (если надо): Материнская плата ASUS A8N-E (чипсет
  • Можно внести посильный вклад в общее дело?
  • ECS RS482-M RS482 (CPU-PCI от ATI, остальные -
  • Просьба не воспринимать етот пост как "понт сцылками"
  • VIA c3m266-l: VT8623 Rev. 00 VEN_1106 DEV_3123 SUBSYS_00000000
  • вспомнил что же за матери Uniflash - не
  • Подсоединил тут Jetway K8T8AS (K8T800Pro/VT8237). U1.40 опознает чипсет
  • и про MSI не забудьте
  • apple_rom там надо будет в специфических типах
  • >Uniflash 1.40 при запуске выдает "PCI chipset: (1022,1100,00)+(10DE,0261,A2)" Отлично,
  • А подружите с 6100, плз! :) Имеется Foxconn
  • rd480 интересен? :)
  • Все эти ссылки (точней - много больше) у
  • по поводу PCI ID: http://pciids.sourceforge.net/ http://members.datafast.net.au/~dft0802/downloads/pcidevs.txt в этих ресурсах уже есть
  • Далее идет кусок не относящийся конкретно к прошивке,
  • apple_rom, к сожалению, виндовс уже давно не пользуюсь. Гм.
  • Продолжим. Дальше идет детект южников. Смысл последовательности понятен
  • По сему поводу имеется такое: HiNT HB1 Zero-Clock-Latency
  • Смотреть можно чем угодно, даже в свойствах винды
  • P.S. apple_rom , спасибо что начал эту
  • За название респект :) run I flash -
  • apple_rom - Подскажи пожалуйста, "поделиться айдишниками вашего железа"