Продолжим. Дальше идет детект южников. Смысл последовательности понятен - детектируем само железо, чтобы знать как "добраться" ("размапить") до флэшки.
{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
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, т.к. размапливание делается не совсем точно "как надо", но для всех случае, что лично сталкивался - оно четко срабатывает. Потому по закону программизма и не стал "трогать то, что работает".
В будущем посмотрим и внесем добавления по пятому нФорсу.
Так же в будущем добавим раздел для атишек.
Продолжим. Дальше идет детект южников. Смысл последовательности понятен - детектируем само железо, чтобы знать как "добраться" ("размапить") до флэшки.
Для старых ("нехабовых") южников назначаем первую процедуру, хабовым - вторую. Начиная с ICH6 (приходом PCIe) процедура размапливания изменилась, потому им даем 17-ую процедуру.
Здесь и дальше номера берутся из самого унифлеша, стиль не изменяется, даже если он имеет "неоптимизированный ("кривой" ) вид. В том числе и изменения, типа:
if Hi(SouthId)=$27 then SouthFunc := $1700; {v1.46re}
if Hi(SouthId)=$28 then SouthFunc := $1700; {v1.46re}
... продолжают такой "неуклюжий" код, чтобы проще были видны изменения.
В частности, не изменились ли процедуры размапления в добавленных 7 и 8-м ICH я еще не смотрел - разберемся вместе по ходу.
Виашке назначаем 3-ю функцию. С приходом Vlink (первые DDR-платы) изменилась процедура - даем 10-ю подфункцию.
Подтверждение ранее сказанного о процессе разработок небогатой коллекции чипсетов АМД, которые "вытекали" из продуктов от VIA. Идентичные процедуры размапливания (та же 3-я функция) лишнее подтверждение тому.
Внимательный читатель заметит - у сисов нет назначенных функций для южных мостов. Сначала это может показаться странным, но если вспомнить, что в первое время своей деятельности южники не были в почете (известный упор на одночиповые решения), потому и все нужные процедуры были перененены в вышеописанные процедуры размапливания для северников (т.е. см. выше SiS и станет понятно).
Алишкам - 4-ю функцию.
Далее идет экзотика. Шестая функция...
Седьмая...
Восьмая...
Девятая...
Десятая...
Одиннадцатая...
Тоже одиннадцатая. Кто застал-видел Сайриксы (цыриксы, куриксы и куча других словообразований ) - поймут, почему. Все просто - один другого купили.
Продолжение экзотики - двенадцать...
Тринадцать...
Четырнадцать...
Настолько древнее, что даже функции не досталось.
Пятнадцать.
У нВидии - шестнадцатая. В 1.40 для нее не было подфункций, что не есть правильно, ибо размапливание с nForce2 изменилось (потому в моих версиях сделано разделение на первую для nForce(1) и вторую для остальных).
Мне, честно говоря, не до конца понятно, даже почему работает для первого nForce, т.к. размапливание делается не совсем точно "как надо", но для всех случае, что лично сталкивался - оно четко срабатывает. Потому по закону программизма и не стал "трогать то, что работает".
В будущем посмотрим и внесем добавления по пятому нФорсу.
Так же в будущем добавим раздел для атишек.