Все эти ссылки (точней - много больше) у меня есть. Потому просьба не "понтоваться" ссылками, а указать конкретные ID.
А еще лучше - прямо написать код (на паскале), чтобы соблюсти взятый стиль изложения (и мне легче будет ).
п.с. Думаю, после первых же попыток решить это "простую" задачу (найти PCI ID, особенно с учетом их разных значений и названий в разных источниках) станет понятно, почему я попросил "помощи клуба".
Добавлено спустя 2 часа 36 минут 37 секунд:
Итак, главная часть - размапливание южников.
{Chipset southbridge stuff}
Case Hi( SouthFunc ) of
$01 : Begin {Intel method}
If Map then
Begin
Mask := $00440000; {write & 128k enable}
If ( SouthFunc and 1 ) <> 0 then Mask := Mask or $800000; {512k enable}
If ( SouthFunc and 2 ) <> 0 then Mask := Mask or $2000000; {1M enable}
If ( SouthFunc and 4 ) <> 0 then Mask := $C00000; {v1.29}
PIIXReg := GetPCIRegD( $00, SouthPos shr 3, SouthPos and $7, $4C );
LogWrite('Intel method: reg $4C = '+Hl(PIIXReg)); {v1.23}
SetPCIRegD( $00, SouthPos shr 3, SouthPos and $7, $4C, PIIXReg or Mask );
LogWrite('Intel method: reg $4C changed to '+Hl(GetPCIRegD( $00, SouthPos shr 3, SouthPos and $7, $4C ))); {v1.23}
Итак, подробненько разберем, чего здесь понаписано.
Код реально шибко неудобный, но мы решили от него отталкиваться, потому и на будущее не будем возмущаться и предлагать все переписать, а просто "переведем на нормальный".
Одна из главных неудобностей следующая.
Например, у нас в коде фигурирует Rx4C. И если мы глянем даташит на старенькие нехабовые южники (например, PIIX4 от i430TX/i440LX), как известно, флешка "сидит" на функции "PCI to ISA Bridge", в которой регистр 4С
обозначает "IORT—ISA I/O RECOVERY TIMER REGISTER" --- в результате мы долго будем чесать тыковку, каким боком он тут затесался.
А ларчик открывается просто - нужно учитывать факт работы юнифлешных функций с 32-битными данными для общения по PCI. В результате, если обратить внимание, то видно, что в маске идет работа только с двумя старшими байтами. С учетом 32-битных обращений 00440000h обозначает работу с регистром 4С плюс два байта (пропускаем два младших, что не используются - к ним всегда операция "OR 0"): 4Ch + 2 = 4Eh и 4Dh. Смотрим в даташите:
Rx 4E-4F: X-BUS CHIP SELECT REGISTER (FUNCTION 0) This register enables or disables accesses to an external RTC, keyboard controller, I/O APIC, a secondary controller, and BIOS. Disabling any of these bits prevents the device’s chip select and X-Bus output enable control signal (XOE#) from being generated. This register also provides coprocessor error and mouse functions.
То что нам и нужно. Потому размапливание для нехабовых интелов осуществляется работой с этими двумя регистрами (Rx4E и Rx4F), устанавливая биты: bit 2: BIOSCS# Write Protect Enable (от маски 00440000), при установке в 1 снимается защита от записи. bit 6: Lower BIOS Enable. (от маски 00440000), при установке в 1 разрешается доступ к 1Мбитным биосам (объем флэши = 1Мбит = 128кБайт). bit 7: Extended BIOS Enable. (от Mask or $800000;), при установке в 1 разрешается доступ к 2-4Мбитным биосам (объем флэши = 2Мбит и 4Мбит = 256кБайт и 512кБайт). bit 9: 1-Meg Extended BIOS Enable. (от Mask or $С00000;), при установке в 1 разрешается доступ к 8Мбитным биосам (объем флэши = 8Мбит = 1МБайт).
Это и есть характерный показатель, в нем и заключается главный момент "размапливания" флэшки, а значит и основа для ее корректной прошивки - найти нужные битики, которые отвечают за подобные характерные области адресов - доступ к "верхнему" (а значит - флэшка) мегабиту, двум, четырем, восьми (в самых новых - шестнадцати и больше). После этого (установки данных битов) при обращении по ним (адресам) мы будем иметь дело именно с флэшкой и дальше уже нужно будет, используя специфичные для разных флэшей команды, осуществить ее детект/чтение/запись.
Все эти ссылки (точней - много больше) у меня есть. Потому просьба не "понтоваться" ссылками, а указать конкретные ID.
А еще лучше - прямо написать код (на паскале), чтобы соблюсти взятый стиль изложения (и мне легче будет ).
п.с. Думаю, после первых же попыток решить это "простую" задачу (найти PCI ID, особенно с учетом их разных значений и названий в разных источниках) станет понятно, почему я попросил "помощи клуба".
Добавлено спустя 2 часа 36 минут 37 секунд:
Итак, главная часть - размапливание южников.
Итак, подробненько разберем, чего здесь понаписано.
Код реально шибко неудобный, но мы решили от него отталкиваться, потому и на будущее не будем возмущаться и предлагать все переписать, а просто "переведем на нормальный".
Одна из главных неудобностей следующая.
Например, у нас в коде фигурирует Rx4C. И если мы глянем даташит на старенькие нехабовые южники (например, PIIX4 от i430TX/i440LX), как известно, флешка "сидит" на функции "PCI to ISA Bridge", в которой регистр 4С
обозначает "IORT—ISA I/O RECOVERY TIMER REGISTER" --- в результате мы долго будем чесать тыковку, каким боком он тут затесался.
А ларчик открывается просто - нужно учитывать факт работы юнифлешных функций с 32-битными данными для общения по PCI. В результате, если обратить внимание, то видно, что в маске идет работа только с двумя старшими байтами. С учетом 32-битных обращений 00440000h обозначает работу с регистром 4С плюс два байта (пропускаем два младших, что не используются - к ним всегда операция "OR 0"): 4Ch + 2 = 4Eh и 4Dh. Смотрим в даташите:
Rx 4E-4F: X-BUS CHIP SELECT REGISTER (FUNCTION 0)
This register enables or disables accesses to an external RTC, keyboard controller, I/O APIC, a secondary controller, and BIOS. Disabling any of these bits prevents the device’s chip select and X-Bus output enable control signal (XOE#) from being generated. This register also provides coprocessor error and mouse functions.
То что нам и нужно. Потому размапливание для нехабовых интелов осуществляется работой с этими двумя регистрами (Rx4E и Rx4F), устанавливая биты:
bit 2: BIOSCS# Write Protect Enable (от маски 00440000), при установке в 1 снимается защита от записи.
bit 6: Lower BIOS Enable. (от маски 00440000), при установке в 1 разрешается доступ к 1Мбитным биосам (объем флэши = 1Мбит = 128кБайт).
bit 7: Extended BIOS Enable. (от Mask or $800000;), при установке в 1 разрешается доступ к 2-4Мбитным биосам (объем флэши = 2Мбит и 4Мбит = 256кБайт и 512кБайт).
bit 9: 1-Meg Extended BIOS Enable. (от Mask or $С00000;), при установке в 1 разрешается доступ к 8Мбитным биосам (объем флэши = 8Мбит = 1МБайт).
Это и есть характерный показатель, в нем и заключается главный момент "размапливания" флэшки, а значит и основа для ее корректной прошивки - найти нужные битики, которые отвечают за подобные характерные области адресов - доступ к "верхнему" (а значит - флэшка) мегабиту, двум, четырем, восьми (в самых новых - шестнадцати и больше). После этого (установки данных битов) при обращении по ним (адресам) мы будем иметь дело именно с флэшкой и дальше уже нужно будет, используя специфичные для разных флэшей команды, осуществить ее детект/чтение/запись.