Предисловие
Существует проблема при ремонте материнских плат, когда реальна необходимость трассировки POST. Так зачастую возникает зависание при выполнении кода 25h, связанного с вызовом процедуры Ct_Early_Shadow.
(Ниже приводится ситуация: на плате KM400-M2, Rev:1.0 имени ECS/PCChips, BIOS - KM4M2803.BIN, когда имеет место останов на коде 25h.)
Код
Ct_Early_Shadow proc near
F000:2904 call far ptr 1000h:773Dh ; пустая функция
F000:2909 call far ptr 0E000h:0BAEDh
F000:290E call far ptr 0E000h:0B2E3h
F000:2913 call far ptr 1000h:773Eh ; пустая функция
F000:2918 call Pci_IO_Mem_Init
F000:291B call far ptr 0E000h:0BD09h
F000:2920 call far ptr 0E000h:0B6D3h
F000:2925 call far ptr 0E000h:0B75Ah
F000:292A mov eax, 1
F000:2930 cpuid
F000:2932 cmp ax, 660h
F000:2935 jnb End
F000:2937 push cs
F000:2938 push offset loc_F2943
F000:293B push 867Bh
F000:293E jmp far ptr 0E000h:8000h
F000:2943 mov si, 67Bh
F000:2946 mov bx, 200h
F000:2949 mov dh, 1
F000:294B call far ptr 1000h:3E0Fh
F000:2950 mov si, 67Bh
F000:2953 or word ptr cs:[si], 8
F000:2957 mov si, 775h
F000:295A or word ptr cs:[si], 8
F000:295E push cs
F000:295F push offset End
F000:2962 push offset _call_10_ ; SMBUS
F000:2965 jmp far ptr 0E000h:8000h
End:
F000:296A retn
Выполнено
Останов происходит при вызове стандартной подпрограммы Award BIOS, которая называется _GET_SET_CT, по адресу 0E000h:0BBC2h. Таким образом в результате проверки выяснено, что вызов _GET_SET_CT выполняется, а возврат в точку 0E000h:0BBC5h - нет.
Резюме
Хотя в связи с тем, что _GET_SET_CT вызывается неоднократно до найденного адреса, определить конкретную точку останова затруднительно (для этого потребуется продублировать _GET_SET_CT в виде, например, _GET_SET_CT2), по входным параметрам в точке 0E000h:0BBC2h можно сделать вывод о предполагаемой неисправности. Беглый анализ кода привел к тому, что определился "виновник торжества": регистр 48h на Bus=0/Dev=0/Func=0. Документации, как водится, нет, поэтому редактируем код так, чтобы вместо регистра 48h инициализировался регистр 46h (его инициализация выполнилась ранее; он единственный и очевидный ресурс Северного моста). Старт платы - успешный! Операционная система работает со сбоями, что и понятно. Задача диагностики выполнена, далее требуется выполнить ремонт. В данном случае – замену Северного моста.
Послесловие
Для других платформ диагностика может дать совершенно иные результаты, и ремонт может включать в себя либо замену Южного мота, либо другие работы, не связанные с чипсетом.
Предисловие
Существует проблема при ремонте материнских плат, когда реальна необходимость трассировки POST. Так зачастую возникает зависание при выполнении кода 25h, связанного с вызовом процедуры Ct_Early_Shadow.
(Ниже приводится ситуация: на плате KM400-M2, Rev:1.0 имени ECS/PCChips, BIOS - KM4M2803.BIN, когда имеет место останов на коде 25h.)
Код
Ct_Early_Shadow proc near
F000:2904 call far ptr 1000h:773Dh ; пустая функция
F000:2909 call far ptr 0E000h:0BAEDh
F000:290E call far ptr 0E000h:0B2E3h
F000:2913 call far ptr 1000h:773Eh ; пустая функция
F000:2918 call Pci_IO_Mem_Init
F000:291B call far ptr 0E000h:0BD09h
F000:2920 call far ptr 0E000h:0B6D3h
F000:2925 call far ptr 0E000h:0B75Ah
F000:292A mov eax, 1
F000:2930 cpuid
F000:2932 cmp ax, 660h
F000:2935 jnb End
F000:2937 push cs
F000:2938 push offset loc_F2943
F000:293B push 867Bh
F000:293E jmp far ptr 0E000h:8000h
F000:2943 mov si, 67Bh
F000:2946 mov bx, 200h
F000:2949 mov dh, 1
F000:294B call far ptr 1000h:3E0Fh
F000:2950 mov si, 67Bh
F000:2953 or word ptr cs:[si], 8
F000:2957 mov si, 775h
F000:295A or word ptr cs:[si], 8
F000:295E push cs
F000:295F push offset End
F000:2962 push offset _call_10_ ; SMBUS
F000:2965 jmp far ptr 0E000h:8000h
End:
F000:296A retn
Выполнено
Останов происходит при вызове стандартной подпрограммы Award BIOS, которая называется _GET_SET_CT, по адресу 0E000h:0BBC2h. Таким образом в результате проверки выяснено, что вызов _GET_SET_CT выполняется, а возврат в точку 0E000h:0BBC5h - нет.
Резюме
Хотя в связи с тем, что _GET_SET_CT вызывается неоднократно до найденного адреса, определить конкретную точку останова затруднительно (для этого потребуется продублировать _GET_SET_CT в виде, например, _GET_SET_CT2), по входным параметрам в точке 0E000h:0BBC2h можно сделать вывод о предполагаемой неисправности. Беглый анализ кода привел к тому, что определился "виновник торжества": регистр 48h на Bus=0/Dev=0/Func=0. Документации, как водится, нет, поэтому редактируем код так, чтобы вместо регистра 48h инициализировался регистр 46h (его инициализация выполнилась ранее; он единственный и очевидный ресурс Северного моста). Старт платы - успешный! Операционная система работает со сбоями, что и понятно. Задача диагностики выполнена, далее требуется выполнить ремонт. В данном случае – замену Северного моста.
Послесловие
Для других платформ диагностика может дать совершенно иные результаты, и ремонт может включать в себя либо замену Южного мота, либо другие работы, не связанные с чипсетом.