Продолжим. Дальше идет детект южников. Смысл последовательности понятен

Продолжим. Дальше идет детект южников. Смысл последовательности понятен - детектируем само железо, чтобы знать как "добраться" ("размапить") до флэшки.

{Id southbridge}
 If SouthMan = $8086 {Intel} then
  Begin
   if (Hi(SouthId)=$24) or (Hi(SouthId)=$25) then SouthFunc := $0200
     else SouthFunc := $0100; {v1.21}
   if Hi(SouthId)=$26 then SouthFunc := $1700; {v1.37}
   if Hi(SouthId)=$27 then SouthFunc := $1700; {v1.46re}
   if Hi(SouthId)=$28 then SouthFunc := $1700; {v1.46re}
   case SouthId of {case v1.21}
     $484: Begin
            if SouthRev<$88 then SouthName:='i82378ZB SIO' else
             SouthName:='i82379AB SIO.A';
            SouthFunc:=$0104; {v1.29}
           End;
    $122E: Begin
            SouthName:='i82371FB PIIX';
            Inc( SouthFunc ); {v1.23}
           End;
    $1234: SouthName:='i82371MX MPIIX';
    $7000: Begin
            SouthName:='i82371SB PIIX3';
            Inc( SouthFunc );
           End;
    $7110: Begin
            SouthName:='i82371AB/EB PIIX4(E)';
            Inc( SouthFunc, 3 );
            if NorthName='i82439TX' then SouthFunc:=SouthFunc+$10; {v1.33}
           End;
    $2410: SouthName:='i82801AA ICH';
    $2420: SouthName:='i82801AB ICH0';

    $2440: SouthName:='i82801BA ICH2';
    $244C: SouthName:='i82801BAM ICH2-M';

    $248C: SouthName:='i82801CAM ICH3-M';
    $2480: SouthName:='i82801CA ICH3-S';

    $24C0: SouthName:='i82801DB ICH4';
    $24CC: SouthName:='i82801DBM ICH4-M';

    $24D0: SouthName:='i82801EB ICH5(R)';

    $2640: SouthName:='i82801FB/R ICH6(R)'; {v1.37}
    $2641: SouthName:='i82801FBM ICH6-M'; {v1.39}
    $2642: SouthName:='i82801F(R)W ICH6(R)W'; {v1.37}

    $27B0: SouthName:='i82801GH ICH7DH'; {v1.46re}
    $27B8: SouthName:='i82801GB/R ICH7(R)'; {v1.46re}
    $27B9: SouthName:='i82801GBM ICH7-M'; {v1.46re}
    $27BD: SouthName:='i82801GHM ICH7-M DH'; {v1.46re}

    $2810: SouthName:='i82801HB/R ICH8(R)'; {v1.46re}
    $2811: SouthName:='i82801HBM ICH8-M'; {v1.46re}
    $2812: SouthName:='i82801HH ICH8DH'; {v1.46re}
    $2814: SouthName:='i82801HO ICH8DO'; {v1.46re}
    $2815: SouthName:='i82801HHM ICH8DH-M'; {v1.46re}

    $25A1: SouthName:='i6300ESB ICH'; {v1.39}
    $2670: SouthName:='i631xESB/632xESB/3100 ICH'; {v1.46re}

   End;
  End else

Для старых ("нехабовых") южников назначаем первую процедуру, хабовым - вторую. Начиная с ICH6 (приходом PCIe) процедура размапливания изменилась, потому им даем 17-ую процедуру.
Здесь и дальше номера берутся из самого унифлеша, стиль не изменяется, даже если он имеет "неоптимизированный ("кривой":) ) вид. В том числе и изменения, типа:
if Hi(SouthId)=$27 then SouthFunc := $1700; {v1.46re}
if Hi(SouthId)=$28 then SouthFunc := $1700; {v1.46re}
... продолжают такой "неуклюжий" код, чтобы проще были видны изменения.
В частности, не изменились ли процедуры размапления в добавленных 7 и 8-м ICH я еще не смотрел - разберемся вместе по ходу.
 If SouthMan = $1106 {VIA} then
  Begin
   SouthFunc := $0300; {VIA/AMD method}
   case SouthId of {case v1.21}
     $586: SouthName:='VT82C586(A|B)/AMD-645';
     $596: Begin SouthName:='VT82C596(A|B)'; Inc( SouthFunc ); End;
     $686: Begin SouthName:='VT82C686(A|B)'; Inc( SouthFunc ); End;
    $8231: SouthName:='VT8231';
    $3074,$3147: begin SouthName:='VT8233(A|C)'; SouthFunc := $0310; LPCFunc:=LPCDetect; end;
    $3177: begin SouthName:='VT8235'; SouthFunc := $0310; LPCFunc:=LPCDetect; end;
    $3227: begin SouthName:='VT8237'; SouthFunc := $0310; LPCFunc:=LPCDetect; end; {v1.39}
   End;
  End else

Виашке назначаем 3-ю функцию. С приходом Vlink (первые DDR-платы) изменилась процедура - даем 10-ю подфункцию.
 If SouthMan = $1022 {AMD} then {v1.20}
  Begin
   SouthFunc := $0300; {AMD/VIA method}
   case SouthId of {case v1.21}
    $7408: SouthName:='AMD-756';
    $7410: SouthName:='AMD-766';
    $7440: SouthName:='AMD-768';
    $7468: SouthName:='AMD-8111'; {v1.36}
   end;
  End else

Подтверждение ранее сказанного о процессе разработок небогатой коллекции чипсетов АМД, которые "вытекали" из продуктов от VIA. Идентичные процедуры размапливания (та же 3-я функция) лишнее подтверждение тому.
 If SouthMan = $1039 {SiS} then
  Begin
   case SouthId of {v1.21}
     $8: SouthName:='SiS South Bridge'; {any SiS South Bridge}
    $18: SouthName:='SiS 950'; {SiS 950 can have $8 or $18}
   $964: SouthName:='SiS 964'; {v1.35}
   End;
  End else

Внимательный читатель заметит - у сисов нет назначенных функций для южных мостов. Сначала это может показаться странным, но если вспомнить, что в первое время своей деятельности южники не были в почете (известный упор на одночиповые решения), потому и все нужные процедуры были перененены в вышеописанные процедуры размапливания для северников (т.е. см. выше SiS и станет понятно).
 If SouthMan = $10B9 {ALi} then {v1.18}
  Begin
   SouthFunc := $0400; {ALi method}
   case SouthId of
    $1449: begin SouthName:='M1449'; SouthFunc:=0; end;
    $1523: SouthName:='M1523(B)';
    $1533,
    $1543,
    $1535: begin SouthName:='M1533/1543/1535'; Inc(SouthFunc); end;
   end;
  End else

Алишкам - 4-ю функцию.
 If SouthMan = $1055 {SMSC} then {v1.21}
  Begin
   If SouthId = $9460 then {SLC90E66} {v1.21}
    Begin
     SouthFunc := $0600; {SMSC method}
     SouthName:='SMSC SLC90E66';
    End;
  End else
Далее идет экзотика.:) Шестая функция...
 If SouthMan = $10AD {Winbond/Symphony Labs} then {v1.21}
  Begin
   If SouthId = $0565 then {W83C553F/4F} {v1.21}
    Begin
     SouthFunc := $0700; {Winbond method}
     SouthName:='Winbond W83C553F/4F';
    End;
  End else
Седьмая...
 If SouthMan = $1283 {ITE} then {v1.21}
  Begin
   case SouthId of
    $8872 : Begin SouthFunc := $0801; SouthName:='ITE IT8871F/2F'; End;
    $8888 : Begin SouthFunc := $0802; SouthName:='ITE IT8888F'; End;
   End;
  End else
Восьмая...
 If SouthMan = $1166 {Reliance/ServerWorks} then {v1.24}
  Begin
   SouthFunc:=$0900;
   case SouthId of
    $0200 : SouthName:='Reliance OSB4';
   End;
  End else
Девятая...
 If SouthMan = $1066 {PicoPower} then {v1.25}
  Begin
   SouthFunc:=$1000;
   case SouthId of
    $0002,$8002 : SouthName:='Vesuvius V3-LS';
   End;
  End else
Десятая...
 If SouthMan = $100B {National} then {v1.36}
  Begin
   SouthFunc:=$1100;
   case SouthId of
    $0500 : begin SouthName:='Geode SCx200'; LPCFunc:=LPCDetect; end;
    $0510 : begin SouthName:='Geode SC1100'; LPCFunc:=LPCDetect; end;
   End;
  End else
Одиннадцатая...
 If SouthMan = $1078 {Cyrix} then {v1.25}
  Begin
   SouthFunc:=$1100;
   case SouthId of
    $0000 : SouthName:='Cyrix Cx5510'; {v1.36}
    $0002 : SouthName:='Cyrix Cx5520'; {v1.36}
    $0100 : SouthName:='Cyrix Cx5530(A)';
   End;
  End else
Тоже одиннадцатая. Кто застал-видел Сайриксы (цыриксы, куриксы и куча других словообразований:) ) - поймут, почему. Все просто - один другого купили.
 If SouthMan = $1045 {OPTi} then {v1.26}
  Begin
   SouthFunc:=$1200;
   case SouthId of
    $C558: SouthName:='OPTi 82C558(M)';
    $C568: SouthName:='OPTi 82C568';
   end;
  End else
Продолжение экзотики - двенадцать...
 If SouthMan = $3388 {HiNT} then {v1.26}
  Begin
   SouthFunc:=$1300;
   case SouthId of
    $8012: SouthName:='HiNT VXPro-II South';
   end;
  End;
Тринадцать...
 If SouthMan = $1060 {UMC} then {v1.28}
  Begin
   SouthFunc:=$1400;
   case SouthId of
    $886A: SouthName:='UMC UM8886BF';
   end;
  End else
Четырнадцать...
 If SouthMan = $1344 {Micron} then {v1.29}
  Begin
   case SouthId of
    $3470: SouthName:='Micron MT7LLN22NCNE';
   end;
  End else
Настолько древнее, что даже функции не досталось.:)
 If SouthMan = $1080 {Contaq/Cypress} then {v1.29}
  Begin
   SouthFunc:=$1500;
   case SouthId of
    $C693: SouthName:='CY82C693(U/UB)';
   end;
  End else
Пятнадцать.
 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}
   end;
  End;

У нВидии - шестнадцатая. В 1.40 для нее не было подфункций, что не есть правильно, ибо размапливание с nForce2 изменилось (потому в моих версиях сделано разделение на первую для nForce(1) и вторую для остальных).
Мне, честно говоря, не до конца понятно, даже почему работает для первого nForce, т.к. размапливание делается не совсем точно "как надо", но для всех случае, что лично сталкивался - оно четко срабатывает. Потому по закону программизма и не стал "трогать то, что работает".
В будущем посмотрим и внесем добавления по пятому нФорсу.
Так же в будущем добавим раздел для атишек.

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 - Подскажи пожалуйста, "поделиться айдишниками вашего железа"