runiflash

Похоже, проект Uniflash загнулся - полтора года без обновлений. Потому, чтобы убить сразу несколько зайцев завожу тут подобную тему, которая не только есть продолжение юнифлеша, но и разбор на его базе процесса перешивки на "атомном" уровне, которое когда-то давно предполагалось при написании статьи по перешивке.
Чтобы отличать его от проекта uniflash, но в то же время отражать прямую преемственность не напрягая фантазию назвал как runiflash.

Итак, приступим. (Скачать исходники юнифлеша можно на родном сайте или здесь.) Излагать буду в "черновом" варианте, потому исправления, дополнения и опровержения приветствуются. После все внесется в статью по перешивке биос.

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

1. Переходим в линейный режим памяти. У него могут быть разные названия (Linear/UnReal/Flat), но смысл один и тот же - 32-битный доступ. (в досе, ко всей памяти).
2. "Размапливаем" северный мост (если требуется).
3. "Размапливаем" южный мост (если требуется).
4. "Размапливаем" мультик (если требуется).
5. "Размапливаем" GPIO (если требуется).
Операция "размапливания" подразумевает программирование логики на доступ к самой FlashROM. Все эти процедуры "железозависимые" и с претензиями на реальную универсальность требуют учета всех возможных вариантов использования "защиты от записи". В частности, именно поэтому "размапливание" делится на подобны градации - специфичные для северника-южника-мультика-гпио (в "стандартном" случае размапливание подразумевает лишь южник).

Далее идут процедуры уже конкретно работы с микросхемой, которые так же специфичны для различных типов-производителей флэшек.

После для возможности корректной работы при выходе нужно будет "замапить" все до этого "размапленные" пункты и вернуться в "нормальный" режим (адресации, 16 бит).

Вот коротко так выглядит работа юнифлеша для нашей темы. Главный файл, который ответственный за прошивку - PCI.pas - его и по-тихоньку начнем разбирать.

{$R-}
unit PCI;  { Unit to communicate with chipsets }
interface

Здесь и дальше я буду описывать имеющуюся у себя версию 1.45re.
uses Award, AMIBIOS, AsusBIOS, Phoenix;
... в которой как раз и добавлены другие биосы.
Const
PCICfIdx    = $CF8;
PCICfData   = $CFC;

Стандартные регистры работы с PCI. Здесь и дальше, повторю, приветствуются уточнения разряда "от знающих - малознающим".
Var
NorthFunc, SouthFunc, LPCFunc: Word;
NorthPos,SouthPos,PMUPos,CurPCIROM,PCIROMBus,PCIROMDev,PCIROMFun,LPCBase: Byte;
CurrentChipset, CurrentPCICard: string;
WantToUseAMI, AMIUsed, ChipsetFound, ROMEnabled, PCIROMEnabled: Boolean;
WantToUseAsus, AsusUsed: Boolean;
AwardUsed: Boolean;  {1.42re}
PhoenixUsed: Boolean;{1.43re}

Из названия большинства переменных можно понять их назначение. Наши главные теперь - хххFunc - процедуры размапливания для северника, южника и мультика (которые LPC).
PCIROMs: array[1..20] of
          record
            MaxSize      : LongInt;
            VenID, DevID : Word;
            Bus, Pos     : Byte;
          end;
BIOSID: array[1..8] of Char; {v1.34}

Зачем PCIROMs сейчас не скажу (д.з.:) ), а биосайди, думаю, ясно - авардовский 8-символьный идентификатор биоса.
Procedure OPortD( Prt : Word; Val : LongInt );
Function  IPortD( Prt : Word ) : LongInt;
Function  GetPCIRegD( Bus, Dev, Func, Reg : Byte ) : LongInt;
Procedure SetPCIRegD( Bus, Dev, Func, Reg : Byte; Value : LongInt );
Function  LocatePIIX : {byte}Boolean; {v1.22 byte->boolean}
procedure GetBIOSID;
Procedure RomEnable( Map : boolean);
procedure ShadowDisable_Aladdin; {v1.31}
procedure ShadowRestore_Aladdin; {v1.31}

По названию процедур также можно понять, для чего они.
implementation
Uses Tools,Flash,Crt,DMI;

Исходники разделены в много файлов, чтобы логично выделить нужное. Суть каждого опишу позже.
{ PortD[ x ] := y }
Procedure OPortD( Prt : Word; Val : LongInt ); Assembler;
Asm
 DB     66H
 MOV    AX,WORD PTR Val
 MOV    DX,Prt
 DB     66H
 OUT    DX,AX
End;

Вывод в порт, все просто.
{ y := PortD[ x ] }
Function IPortD( Prt : Word ) : LongInt; Assembler;
Asm
 MOV    DX,Prt
 DB     66H
 IN     AX,DX
 DB     66H
 MOV    DX,AX
 DB     66H
 SHR    DX,16
End;

Чтение из порта.

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

Begin
 if Port[$CFB]<>$FF then {v1.26}
  Port[$CFB]:=Port[$CFB] or $1; {Set PCI configuration mechanism #1}

Хм, самому интересно.;)
 {Locate north bridge}
 For Pos_ := 0 to $FF do
  If ( GetPCIRegD( $00, Pos_ shr 3, Pos_ and $07, $00 ) and $FFFF ) <> $FFFF then
   If ( GetPCIRegD( $00, Pos_ shr 3,
                    Pos_ and $07, $08 ) shr 8 ) = $60000 then Break;
 If Pos_ = $FF then {v1.22}
  Begin
   LocatePIIX := False;
   Exit;
  End
 else LocatePIIX:=True;
 NorthPos := Pos_;
 {Get north bridge MID & DID}
 NorthMan := GetPCIRegD( $00, NorthPos shr 3, NorthPos and $07, $00 );
 NorthId  := GetPCIRegD( $00, NorthPos shr 3, NorthPos and $07, $00 ) shr 16;
 {Get north bridge rev ID}
 NorthRev := GetPCIRegD( $00, NorthPos shr 3, NorthPos and $07, $08 );

Ищем на PCI "координаты" северного моста и если его находим, то получаем NorthMan (North Manufacturer ID) и NorthRev (North Revision ID).
{Locate south bridge}
 For Pos_ := 0 to $FF do
  If ( GetPCIRegD( $00, Pos_ shr 3, Pos_ and $07, $00 ) and $FFFF ) <> $FFFF then
   If ( GetPCIRegD( $00, Pos_ shr 3,
                    Pos_ and $07, $08 ) shr 8 ) = $60100 then Break;
 If Pos_ = $FF then {v1.22 for i430MX}
  For Pos_ := 0 to $FF do
   If ( GetPCIRegD( $00, Pos_ shr 3, Pos_ and $07, $00 ) and $FFFF ) <> $FFFF then
    If ( GetPCIRegD( $00, Pos_ shr 3,
                     Pos_ and $07, $08 ) shr 8 ) = $68000 then Break;
 If Pos_ = $FF then {v1.31 for old chipsets}
  For Pos_ := 0 to $FF do
   If ( GetPCIRegD( $00, Pos_ shr 3, Pos_ and $07, $00 ) and $FFFF ) <> $FFFF then
    If ( GetPCIRegD( $00, Pos_ shr 3,
                     Pos_ and $07, $08 ) shr 8 ) = $00000 then Break;
 SouthPos := Pos_;
 {Get south bridge MID & DID}
 SouthMan := GetPCIRegD( $00, SouthPos shr 3, SouthPos and $07, $00 );
 SouthID := GetPCIRegD( $00, SouthPos shr 3, SouthPos and $07, $00 ) shr 16;
 {Get south bridge rev ID}
 SouthRev := GetPCIRegD( $00, SouthPos shr 3, SouthPos and $07, $08 );

Аналогичное проделываем для южника, но с учетом особенностей для древних систем. (Кстати - интересно было бы услышать объяснение подобных особенностей).

 CurrentChipset := '';
 NorthFunc := 0; {No special treatment necessary}
 SouthFunc := 0; {Same}
 LPCFunc   := 0; {v1.27}
 NorthName:='';
 SouthName:='';
 LPCName:='';

Задаем "нулевые" значения всем главным параметрам.

Определяем имя и процедуры размапления (если она нужна) северника по его ревизии.

 {Id northbridge}
 If NorthMan = $8086 {Intel} then
  Begin
   case NorthId of {case v1.21}
     $4A3: if NorthRev>=$10 then NorthName:='i82433NX' else NorthName:='i82433LX';
    $122D: NorthName:='i82437FX';
    $1235: NorthName:='i82437MX';
    $1237: NorthName:='i82441FX';
    $1250: NorthName:='i82439HX';
    $7030: NorthName:='i82437VX';
    $7100: NorthName:='i82439TX';
    $7180: NorthName:='i82443LX/EX';
    $7190, $7192: NorthName:='i82443BX/ZX';
    $71A0, $71A2: NorthName:='i82443GX';
    $84C4: NorthName:='i82454KX/GX';
    $7120: NorthName:='i82810';
    $7122: NorthName:='i82810-DC100';
    $7124: NorthName:='i82810E';
    $1130: NorthName:='i82815';
    $2500: NorthName:='i82820';
    $3575: NorthName:='i82830M';
    $1A21: NorthName:='i82840';
    $1A30: NorthName:='i82845';
    $2560: NorthName:='i82845G/P';
    $2530: NorthName:='i82850';
    $3580: NorthName:='i8285xGM';
    $3340: NorthName:='i82855PM';
    $2531: NorthName:='i82860';
    $2570: NorthName:='i82865'; {v1.34}
    $2578: NorthName:='i82875';
    $255D: NorthName:='iE7205';
    $2578: NorthName:='iE7210'; {v1.39}
    $2588: NorthName:='iE7221'; {v1.39}
    $3592: NorthName:='iE7320'; {v1.39}
    $2540: NorthName:='iE7500';
    $254C: NorthName:='iE7501';
    $2550: NorthName:='iE7505';
    $3590: NorthName:='iE7520'; {v1.39}
    $359E: NorthName:='iE7525'; {v1.39}
    $0500: NorthName:='iE8870'; {v1.39}
    $2580: NorthName:='i829xxx'; {v1.37}
    $2590: NorthName:='i829xxxM'; {v1.39}
   End;
  End else

Для Интела. (Крайне приветствуются дополнения по ревизиям новых и уточнения по старым железкам.)
 If NorthMan = $1106 {VIA} then
  Begin
   case NorthId of {case v1.21}
     $505: Begin {v1.37}
            NorthFunc := $0100; {VIA A8/A9 scheme}
            NorthName:='VT82C505';
           End;
     $576: Begin
            NorthFunc := $0100; {VIA A8/A9 scheme}
            NorthName:='VT82C576M';
           End;
     $585: NorthName:='VT82C585VP/VPX';
     $595: NorthName:='VT82C595/AMD-640';
     $597: NorthName:='VT82C597';
     $598: NorthName:='VT82C598(AT)';
     $685: Begin
            NorthFunc := $0100; {VIA A8/A9 scheme}
            NorthName:='VT82C685';
           End;
     $501: NorthName:='VT8501';
     $691: NorthName:='VT82C691/693(A)/694X/T';
     $693: NorthName:='VT82C693(A)';
     $601: NorthName:='VT8601';
     $605: NorthName:='VT8605';
     $391: NorthName:='VT8371';
     $305: NorthName:='VT8363(A)/8365';
    $3099: NorthName:='VT8366(A)';
    $3091: NorthName:='VT8633';
    $3101: NorthName:='VT8653';
    $3102: NorthName:='VT8662';
    $3103: NorthName:='VT8615';
    $3112: NorthName:='VT8361';
    $3133: NorthName:='VT3133';
    $3148: NorthName:='VT8751';
    $3128: NorthName:='VT8753(A)/8754';
    $3189: NorthName:='VT8377';
    $3205: NorthName:='VT8378';
   End;
  End else

У виашки за полтора года не шибко много нового. Еще раз повторю - просьба знающим добавить, чего нет из нового железа и осветить "интересные" моменты из старого, если они есть-известны.
 If NorthMan = $1022 {AMD} then {v1.20}
  Begin
   case NorthId of {case v1.21}
    $7006: NorthName:='AMD-751';
    $700E: NorthName:='AMD-761';
    $700C: NorthName:='AMD-762';
    $7454: NorthName:='AMD-8151'; {v1.36}
   End;
  End else

Да, верно и АМД делала северники.:) Продвинутые смогут еще сказать, что даже для первых пеньков были амдшные чипсеты, но еще более продвинутые справедливо уточнят, что реально это были перемаркированные виашки, а потому и айдишники были виашные (поэтому и нет их в списке).
 If NorthMan = $1039 {SiS} then
  Begin
   SouthFunc:=$0503; {SiS reg. 45 bits 5,2}
   case NorthId of
     $496: Begin
            NorthFunc := $0200; {SiS reg. D0 scheme}
            SouthFunc := 0;
            NorthName:='SiS 85C496+497';
           End;
     $406: Begin
            SouthFunc := $0501; {SiS internal reg. 80h}
            NorthName:='SiS 501/5101/5501';
           End;
    $5511: Begin
            SouthFunc := $0502; {SiS internal reg. 50h}
            NorthName:='SiS 5511';
           End;
    $5571: NorthName:='SiS 5571';
    $5591: NorthName:='SiS 5591/5592';
    $5596: Begin
            NorthName:='SiS 5596';
            SouthFunc := $0502; {SiS internal reg. 50h}
            LPCFunc:=LPCDetect; {v1.27}
           End;
    $5597: NorthName:='SiS 5597/5598/5581/5120';
    $0530: NorthName:='SiS 530';
    $0540: Begin
            SouthFunc := $0504; {SiS reg. 45 bits 7,6}
            NorthName:='SiS 540';
           End;
    $5600: NorthName:='SiS 600';
    $0620: NorthName:='SiS 620';
    $0630: Begin
            NorthName:='SiS 630';
            SouthFunc := $0504; {SiS reg. 45 bits 7,6}
            LPCFunc:=LPCDetect; {v1.27}
           End;
    $0635: Begin
            NorthName:='SiS 635';
            SouthFunc := $0504; {SiS reg. 45 bits 7,6}
            LPCFunc:=LPCDetect;
           End;
    $0640: Begin
            NorthName:='SiS 640';
            SouthFunc := $0504; {SiS reg. 45 bits 7,6}
            LPCFunc:=LPCDetect;
           End;
    $0645: Begin
            NorthName:='SiS 645';
            SouthFunc := $0504; {SiS reg. 45 bits 7,6}
            LPCFunc:=LPCDetect;
           End;
    $0646: Begin
            NorthName:='SiS 645DX';
            SouthFunc := $0504; {SiS reg. 45 bits 7,6}
            LPCFunc:=LPCDetect;
           End;
    $0648: Begin {v1.31}
            NorthName:='SiS 648';
            SouthFunc := $0504; {SiS reg. 45 bits 7,6}
            LPCFunc:=LPCDetect;
           End;
    $0650: Begin
            NorthName:='SiS 650';
            SouthFunc := $0504; {SiS reg. 45 bits 7,6}
            LPCFunc:=LPCDetect;
           End;
    $0651: Begin {v1.31}
            NorthName:='SiS 651';
            SouthFunc := $0504; {SiS reg. 45 bits 7,6}
            LPCFunc:=LPCDetect;
           End;
    $0655: Begin {v1.31}
            NorthName:='SiS 655';
            SouthFunc := $0504; {SiS reg. 45 bits 7,6}
            LPCFunc:=LPCDetect;
           End;
    $0730: Begin
            NorthName:='SiS 730';
            SouthFunc := $0504; {SiS reg. 45 bits 7,6}
            LPCFunc:=LPCDetect;
           End;
    $0733: Begin {v1.31}
            NorthName:='SiS 733';
            SouthFunc := $0504; {SiS reg. 45 bits 7,6}
            LPCFunc:=LPCDetect;
           End;
    $0735: Begin
            NorthName:='SiS 735';
            SouthFunc := $0504; {SiS reg. 45 bits 7,6}
            LPCFunc:=LPCDetect;
           End;
    $0740: Begin
            NorthName:='SiS 740';
            SouthFunc := $0504; {SiS reg. 45 bits 7,6}
            LPCFunc:=LPCDetect;
           End;
    $0745: Begin {v1.31}
            NorthName:='SiS 745';
            SouthFunc := $0504; {SiS reg. 45 bits 7,6}
            LPCFunc:=LPCDetect;
           End;
    $0746: Begin {v1.31}
            NorthName:='SiS 746';
            SouthFunc := $0504; {SiS reg. 45 bits 7,6}
            LPCFunc:=LPCDetect;
           End;
    $0748: Begin {v1.31}
            NorthName:='SiS 748';
            SouthFunc := $0504; {SiS reg. 45 bits 7,6}
            LPCFunc:=LPCDetect;
           End;
    $0755: Begin {v1.31}
            NorthName:='SiS 755';
            SouthFunc := $0504; {SiS reg. 45 bits 7,6}
            LPCFunc:=LPCDetect;
           End;
   End;
  End else

SiS поделить на северники и южники сложней из-за любви к одночиповым решениям. Для одночиповых решений происходит детект мультика, чтобы установить для него процедуру размапливания. (Просьба прокомментировать знающим - видимо в "раздельночиповых" решениях бОльшая часть функций мультика была встроена в сам южник).
Плюс по "логике" SiS можно запросто продолжить список нового железа, типа:
$0xxx: Begin NorthName:='SiS xxx';
 If NorthMan = $10B9 {ALi} then
  Begin
   case NorthId of
    $1451: begin
             NorthFunc := $0300; {ALi Aladdin}
             NorthName:='M1451';
           end;
    $1489: begin
             NorthFunc := $0301; {ALi FinALi}
             NorthName:='M1489';
           end;
    $1521: NorthName:='M1521';
    $1531: NorthName:='M1531(B)';
    $1541: NorthName:='M1541/1542';
    $1561: NorthName:='M1561'; {v1.31}
    $1621: NorthName:='M1621';
    $1631: NorthName:='M1631';
    $1632: NorthName:='M1632M';
    $1641: NorthName:='M1641';
    $1647: NorthName:='M1647';
    $1651: NorthName:='M1651'; {v1.31}
    $1671: NorthName:='M1671'; {v1.31}
    $1672: NorthName:='M1672'; {v1.31}
   End;
  End else

ALI. Тоже уже бывший производитель.
 If NorthMan = $1166 {Reliance/ServerWorks} then {v1.25}
  Begin
   case NorthId of
    $0007: NorthName:='Reliance NB6635';
    $0008: NorthName:='Reliance NB6536';
   End;
  End else

Экзотика, не приходилось шить такие.:)
 If NorthMan = $1066 {PicoPower} then {v1.25}
  Begin
   case NorthId of
    $0001: NorthName:='Vesuvius V1-LS';
   End;
  End else

Что-то ужасно древнючее, уже и не помню, вроде, встречал в четверках. В общем - артефакт.
 If NorthMan = $1078 {Cyrix} then {v1.25}
  Begin
   case NorthId of
    $0001: NorthName:='MediaGX';
   End;
  End else

Шил такие. В интернет-приставках.
 If NorthMan = $1045 {OPTi} then {v1.26}
  Begin
   case NorthId of
    $C557: NorthName:='OPTi 82C557(M)'; {v1.37}
    $C567: NorthName:='OPTi 82C567';
   end;
  End else

Вы не видели Pentium-16Mhz??? (или даже 8Mhz, точно уже не помню). Счастливые обладатели подобных чипсетов запросто могли себя таким порадовать.
 If NorthMan = $3388 {HiNT} then {v1.26}
  Begin
   case NorthId of
    $8011: NorthName:='HiNT VXPro-II North';
   end;
  End else

По этому "уникуму" с ходу и не скажу - позже, может чего вспомню или кто подскажет сам.
 If NorthMan = $1060 {UMC} then {v1.28}
  Begin
   case NorthId of
    $8881: NorthName:='UMC UM8881F';
   end;
  End else

То ли северники раньше были простые, как мультики, то ли мультики теперь такие сложные, как раньше северники...;)
 If NorthMan = $1344 {Micron} then {v1.29}
  Begin
   case NorthId of
    $3320: NorthName:='Micron MT8LLN21PADF';
   end;
  End else

Еще один артефакт.
 If NorthMan = $1080 {Contaq/Cypress} then {v1.29}
  Begin
   case NorthId of
    $0600: begin {CY82C599}
             NorthFunc := $0400;
             NorthName:='CY82C599';
           end;
    $C691: NorthName:='CY82C691';
   end;
  End else

Были такие, точно:) . Еще, вроде, их как-то перемаркировывали.
 If NorthMan = $10DE {nVidia} then {v1.30}
  Begin
   case NorthId of
    $1A4: NorthName:='nVidia IGP';
    $1E0: NorthName:='nVidia IGP2';
    $D1: NorthName:='nVidia nForce3 Host Bridge'; {v1.41re}
    $E1: NorthName:='nVidia nForce3 250Gb Host Bridge'; {v1.41re}
   end;
  End else

Просьба знающих и/или просто фанатов нВидиа поделиться айдишниками вашего железа, что нет в этом списке.:)
 If NorthMan = $1002 {ATI} then {v1.46re}
  Begin
   case NorthId of
... тут может быть ваш чипсет ...:)
   end;
  End;

Аналогично (подсказать ревизии мостов) по ATI, которая даже не упоминается в последней официальной версии юнифлеша. При чем не только для А64/Р4, но и для Атлонов, те, что А3-А4 были. У АТИ, вроде как, был чипсет даже для слотовых атлонов (типа А1-А2), но не уверен, что он был выпущен.

некоторые новые нвидии не определит, надо забить DID'ы северников в идентификацию, например 10DEh/03A3h -- северник от 650i SLI под интелы.
added: похоже, что решили пока не добавлять идентификацию северников и чипсетов?

У меня есть 650i, потестю на нем...

doing unexpected things often brings unexpected results

runiflash 1.47 alpha.01

Runtime error 002 at 2167:007E!

m/b Shuttle MB47.

Uniflash 1.40 отлично работает на этом конфиге.

Аватар пользователя apple_rom

Цитата:
added: похоже, что решили пока не добавлять идентификацию северников и чипсетов?

Для А64-платформы нужно менять способ детекта, ибо по "классическому" способу, который использует унифлеш, в таких случаях всегда будет детектиться встроенный контроллер AMD. Потому пока не заморачивался, дабы отладить сначала правильную работу с новыми южниками.

Аватар пользователя apple_rom

В новой версии (1.47re.alpha.02 - в процессе отладки, исходники) добавлена поддержка южных мостов (относительно последней официальной 1.40):

VIA:
VT8233C
VT8251

Intel:
i631xESB/632xESB/3100 ICH
i82801GH ICH7DH'
i82801GB/R ICH7(R)
i82801GBM ICH7-M
i82801GHM ICH7-M DH
i82801HB/R ICH8(R)
i82801HBM ICH8-M
i82801HH ICH8DH
i82801HO ICH8DO
i82801HHM ICH8DH-M
ICH9
Mobile ICH9
i82801IH ICH9DH
i82801IR ICH9R

nVidia:


MCP
MCP-D
MCP2
MCP2A
MCP2S
nForce3 LPC Bridge
nForce3 250Gb LPC Bridge
nForce4 LPC Bridge
MCP-04
MCP55
MCP61
MCP65
MCP67
MCP72
MCP73

SiS:
961
962
963
965
966
968

ALi:
M1563
M1567
M1573
M1575

AMD:
8131 PCI-X
8132 PCI-X 2.0
8151 System Controller

ATI:
SB400
SB600

Добавлено спустя 17 часов 16 минут 34 секунды:

В новой версии (1.47re.alpha.03, исходники), относительно 1.47re.a.02:
- добавлена поддержка VT8375 (который "по-русски" - KM266/KL266)
- добавлены идентификаторы SST25LF020A/SST25LF040A (SPI)
- исправлена ошибка, которая приводила к принудительному включению поддержки Phoenix BIOS

Добавлено спустя 53 минуты 12 секунд:

В новой версии (1.47re.alpha.04, исходники), относительно 1.47re.a.03:
- добавлена поддержка SST49LF040B(LPC)

Аватар пользователя apple_rom

1.47re.alpha.05, исходники


Добавлена поддержка:
i945G/GZ/P/PL
i945GM/PM/GMS/GT/i943/i940GML
i946GZ/PL/GL
i965 G1
iQ963/Q965
iP965/G965
iG33/G31/P35
iPM965/GM965/GL960
A49LF004/3V

Было-бы не плохо добавить А49LF040TL

Аватар пользователя Compiller

Запустить runiflash -save 1.bin -log
В логе будут строки

Chipset detected: (1022,1100,00) + nVidia MCP51 LPC Bridge [AWARD BIOS] [ASUS FLASH]
Flash ROM chip detected: PMC Pm49FL004/3.3V (LPC/FWH)
Flash ROM ID: 9D6E,FFFF

ну и соответственно те же данные можно взять из утилит типа Everest или Sandra.

Дрессируем коров :)

Огромная благодарность всем разработчикам и участникам проекта Runiflash! Имелись две Epox 8RDA3I и 8RDA+ (nForce2). На двоих одна flash Winbond 49V002, которая работала и прошивалась в обеих платах. И предположительно дохлая PM49FL002T, хот-свап с которой не прокатывал. Пробовал все прошивальщики, что нашел: Winflash c 1.51 до 1.76, Awdflash вплоть до 8.82, Uniflash 1.40, Awdflash + Uniflash и наоборот. Определялась правильно только Uniflasheм. Не прошивалась ни где. Сообщения от "некоректной версии биос" до "ошибка верификации". С Runiflash 1.47 alfa 05 прошилась на ура с первого раза.

Apple_rom, спасибо за поддержку Runiflash!! Преклоняюсь перед таким энтузиазмом!



Запустил версию 1.47 alpha.05 на материнке Asus P5WD2-Premium.    Выдала следующий результат

(DAD3,FFFF)

FlashRom Chip: Unknown

FlashChipSet (8086,2774,81)+i82801GB/R ICH7(R)

и соответственно зависла. Что-то не так? Или чем-то могу помочь?



И вопросец. Запустил там же с параметром CMOSS (сохранить CMOS), программа сохранила. Но когда посмотрел и сравнил с результатами, получаемыми своей программой, то оказалось, что они не совпадают. Это нормально?

Подскажите еще, откуда вообще узнаются всякие мелкие подробности? Например в функции LocatePIIX есть GetPCIRegD=$68000, потом 68100..., или проверяются разные места хранения идентификаторов... Неужели создатель Runiflasha перелопатил даташиты всех мат плат. Или это все есть в каких-то общих даташитах?

Отправить комментарий

Содержание этого поля является приватным и не предназначено к показу.
  • Разрешённые HTML-теги: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd> <img>
  • You can use BBCode tags in the text. URLs will automatically be converted to links.

Подробнее о форматировании текста

Антибот - введите цифру.
Ленты новостей