Программное изменение настроек биоса

Тема в разделе "WASM.ELECTRONICS", создана пользователем RedRam, 20 апр 2008.

  1. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    http://www.wasm.ru/forum/viewtopic.php?id=26254&p=2
    Там архив с исходным тестом, для твоего случая будет попроще, т.к. не затрагивает RTC
    - Записываешь в регистр, где содержится FirstBootDevice номер первого загрузочного устройства(там вроде не все биты за это отвечают, я не смотрел).
    - Корректируеш контрольную сумму BIOS в CMOS.
     
  2. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Код (Text):
    1. BIOS_BOOT_DEVICE_REGISTER equ ?
    2. ; x x x x x x x x
    3. ;|_______|_______|
    4. ;    |       |_____ First Boot Device
    5. ;    |_____________ Next Boot Device
    6.  
    7. BiosCheckAmountOffset   equ ?   ;[BiosCheckAmountLo%BiosCheckAmountHi]
    8. BiosCheckAmountLo       equ ?
    9. BiosCheckAmountHi       equ ?
    10.  
    11. SetFirstBootDevice proc C
    12. ;In:    al=First BootDevice
    13. ;Out:   al=Old First Boot Device
    14.     mov edx,eax
    15.     mov eax,BIOS_BOOT_DEVICE_REGISTER
    16.     out 70h,al
    17.     Delay
    18.     in al,71h
    19.     Delay
    20.     push eax
    21.     and eax,11110000b
    22.     and edx,00001111b
    23.     or edx,eax
    24.     mov eax,BIOS_BOOT_DEVICE_REGISTER
    25.     out 70h,al
    26.     Delay
    27.     mov eax,edx
    28.     out 71h,al
    29.     Delay
    30.     mov edx,BiosCheckAmountLo
    31.     xor ecx,ecx
    32. loop_:
    33.     mov eax,edx
    34.     out 70h,al
    35.     Delay
    36.     in al,71h
    37.     Delay
    38.     inc edx
    39.     add ecx,eax
    40.     cmp edx,BiosCheckAmountHi + 1
    41.     jc loop_
    42.     mov eax,BiosCheckAmountOffset
    43.     out 70h,al
    44.     Delay
    45.     mov al,ch       ;Lo word
    46.     out 71h,al
    47.     Delay
    48.     mov eax,BiosCheckAmountOffset + 1
    49.     out 70h,al
    50.     Delay
    51.     mov eax,ecx     ;Hi word
    52.     out 71h,al
    53.     Delay
    54.     pop eax
    55.     and eax,1111b
    56.     ret
    57. SetFirstBootDevice endp
    Для твоей платы надо определить четыре параметра, для этого тебе и надо кмос дампить было.
     
  3. VaStaNi

    VaStaNi Member

    Публикаций:
    0
    Регистрация:
    1 июн 2004
    Сообщения:
    203
    Адрес:
    Ukraine
    Будет и из под винды работать, только если умеючи. Чтобы заюзать CMOS, а это порты 70h, 71h (в основном, хотя есть и расширенные) тебе надо получить к ним доступ четез драйвер нулевого кольца защиты ядра. Короче поищи тут и пр. погугли на тему "владения" LPT порта из под Win32 приложений. Есть готовые драйвера в принципе, а я даже использовал из программы Bilarm для доступа в CMOS...
    "LPTWDMIO" - ключевое слово для гугленья, у тамошнего драйвера принцип "оживания" SYS драйвера для приложения использовал. Вообщем там есть, что почитать.
    Принцип один и тот же, только там 378h порт базовый, а у тебя 70h.
     
  4. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Это какие если не секрет ?
     
  5. RedRam

    RedRam New Member

    Публикаций:
    0
    Регистрация:
    20 апр 2008
    Сообщения:
    28
    Воо спасибо.Только вот тут возник ещё вопрос.
    Котрольная сумма, я помню где то попадалась инфа о том что это hex сумма всех адресов.Мда...Так как её корректировать?
     
  6. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Да уж.. SetFirstBootDevice - этого мало ?
     
  7. VaStaNi

    VaStaNi Member

    Публикаций:
    0
    Регистрация:
    1 июн 2004
    Сообщения:
    203
    Адрес:
    Ukraine
    аналогичные в использовании пары 72-73, 74-75 как, что, зачем - читается в доках на чипсет(южный мост)

    После изменения занчения заново рассчитай и запиши, например делал так когдато
    Код (Text):
    1.         mov     bl, $40
    2.         xor     eax, eax
    3.         xor     edx, edx
    4. @rep2:
    5.         mov     al, bl
    6.         out     $70, al
    7.         in      al, $71
    8.         add     dx, ax
    9.         inc     bl
    10.         cmp     bl, $7D
    11.          jne    @rep2
    12.         mov     al, bl
    13.         out     $70, al
    14.         mov     al, dh
    15.         out     $71, al
    16.         inc     bl
    17.         mov     al, bl
    18.         out     $70, al
    19.         mov     al, dl
    20.         out     $71, al
     
  8. RedRam

    RedRam New Member

    Публикаций:
    0
    Регистрация:
    20 апр 2008
    Сообщения:
    28
    Ладно думаю пока хватит)