Автор: FatumNNM , 18 декабря 2005
Здравствуйте, как связать подпункт меню с каким-либо действием ?
Например -> если выбрано Enable, то те регистры установить в такое положение, а если Disable, то....?
Содержимое данного поля является приватным и не предназначено для показа.

BBCode

  • HTML-теги не обрабатываются и показываются как обычный текст
  • You may use the following BBCode tags:
    • [align]
    • [b]
    • [code]
    • [color]
    • [font]
    • [hr]
    • [i]
    • [img]
    • [list]
    • [quote]
    • [s]
    • [size]
    • [spoiler]
    • [sub]
    • [sup]
    • [table]
    • [u]
    • [url]
  • Адреса веб-страниц и email-адреса преобразовываются в ссылки автоматически.

DanZer

19 лет 7 месяцев назад

Чтите доки - они рулезззз :) Функцию находим прибавлением чисел 1-7 к dev, т.е. если 98h=dev 13h, func 0, тогда 9Fh=dev 13h, func 7 (хинт - почему именно так можно понять, взглянув на двоичную маску). А вот значение bus в рамки xxxxh уже не влезает, увы - искать придется за пределами (а это я из чистой вредности оставляю на самостоятельную работу ;)).

ЗЫ Ну вот, пока я отвлекся - пришел Савелий и испортил малину... :twisted:

FatumNNM

19 лет 7 месяцев назад

savely_s и DanZer Благодарю, тогда к Вам такой вопрос :

В биосе Award 6.0 :

Chip_Feature__06_19_Chip_Feature__06_19 MIP <0, _0619, 0FFFFh, 1, 42h, 1, _0001, 0, 1, 84h, 1, 1, 1, 0> ; Memory Auto Precharge


В исходнике Award 6.0 (приблизительный вид):

DEFINE_MENUITEM Chip_Feature_Item, GROUP_ADVANCE, GROUP_CFEATURE, 2
menuitem

Memory Auto Precharge на nForce2 изменяеться PCI 0 Dev 0 Func 0 Reg 86, bit 1 - если он в 0, то выкл., если 1 - то соотвестственно вкл.

Я никак не могу найти тот участок кода, где меняеться этот бит в зависимости от выбора в меню (Memory Auto Precharge -> Enable or Disable).

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

Любой пункт меню - это текстовый ресурс и, по идее, код-обработчик действия подменю может располагаться в любом месте биоса.

И читаються свойства подменю :

Read_Item_Value proc near
seg000:F26B4 push ax ; Get the stack value of specified item
seg000:F26B5 xor ah, ah
seg000:F26B7 mov al, cs:[bx+8]
seg000:F26BB mov si, ax
seg000:F26BD mov dx, [bp+si]
seg000:F26BF mov ax, cs:[bx+9]
seg000:F26C3 and dx, ax
seg000:F26C5 mov cx, 0FFFFh
seg000:F26C8 inc cx
seg000:F26C9 ror ax, 1
seg000:F26CB jnb short near ptr unk_26C8
seg000:F26CD shr dx, cl
seg000:F26CF pop ax
seg000:F26D0 retn
seg000:F26D0 Read_Item_Value endp

А сохраняються :

seg000:F263C Write_Item_Value proc near
seg000:F263C push si ; In:
seg000:F263C ; bx - point to menuitem;
seg000:F263C ; dx - value to set
seg000:F263C ; Out:
seg000:F263C ; 1. NC: [bx].CmosLoc[bp] updated
seg000:F263C ; 2. CF: [bx].CmosLoc[bp] not updated
seg000:F263D push cx
seg000:F263E push dx
seg000:F263F push dx
seg000:F2640 call near ptr unk_26B4
seg000:F2643 pop dx
seg000:F2644 cmp dx, cs:[bx+0Fh]
seg000:F2648 ja short near ptr unk_266D
seg000:F264A cmp dx, cs:[bx+0Dh]
seg000:F264E jb short near ptr unk_266D
seg000:F2650 shl dx, cl
seg000:F2652 mov cx, cs:[bx+9]
seg000:F2656 not cx
seg000:F2658 test word ptr cs:[bx+9], 0FF00h
seg000:F265E jnz short near ptr unk_2666
seg000:F2660 and [bp+si], cl
seg000:F2662 or [bp+si], dl
seg000:F2664 jmp short near ptr unk_266A
seg000:F2664 Write_Item_Value endp

FatumNNM

19 лет 6 месяцев назад

Вот как должно быть :

mov al, 0FFFFFFFh ;
Rom_Call Get_CMOS ; читаем установки в меню
test al, 00001111b ; Memory Auto Precharge -> Enable выбран в меню ?
jz short @F ; нет, Disable
mov cx,( TSC_ID SHL 8 )+086h; PCI 0 Dev 0 Func 0 Reg 86, bit 1
ROM_CALL Get_Pci ;
or al,0Fh ; Memory Auto Precharge -> Enable
ROM_CALL Set_Pci ;

Но подобного я не нашёл в коде биоса, да и IDA не может искать по коду (например по маске "mov cx, xxxxxx86h").

Видимо нужна помощь в этом вопросе Apple_rom...

Я сравнивал "полундру" с оригинальным биосом, но так и не понял, где находиться подобное. И инфу от Pinczakkо всю перерыл, но там ничего нет о работе с меню.

FatumNNM

19 лет 6 месяцев назад

Дело сдвинулось с "мёртвой точки", выражаю благодарность Apple_rom`у.

Добавлено спустя 1 день 4 часа 27 минут 42 секунды:

Вот и первая ласточка !

Релизнулся новый биос для 8RDA+ !

Новые возможности :

1. Добавлены пункты меню : Command per Clock и CPU Bus Disconnect.
2. Romsip из биоса DFI.

http://cp.people.overclockers.ru/cgi-bin/dl.pl?id=16997&filename=8RDA_For_2B.7z

Т.к. у меня в данный момент нет компа (пользуюсь старым ноутом), то проверить биос не было возможности. На CRC не ругаеться.