Здравствуйте, как связать подпункт меню с каким-либо действием ?
Например -> если выбрано Enable, то те регистры установить в такое положение, а если Disable, то....?
Чтите доки - они рулезззз Функцию находим прибавлением чисел 1-7 к dev, т.е. если 98h=dev 13h, func 0, тогда 9Fh=dev 13h, func 7 (хинт - почему именно так можно понять, взглянув на двоичную маску). А вот значение bus в рамки xxxxh уже не влезает, увы - искать придется за пределами (а это я из чистой вредности оставляю на самостоятельную работу).
ЗЫ Ну вот, пока я отвлекся - пришел Савелий и испортил малину... :twisted:
Настоящий джентльмен назовет кошку кошкой, даже наступив на нее в темноте. Что-то ищем? Google в помощь
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
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о всю перерыл, но там ничего нет о работе с меню.
Чтите доки - они рулезззз Функцию находим прибавлением чисел 1-7 к dev, т.е. если 98h=dev 13h, func 0, тогда 9Fh=dev 13h, func 7 (хинт - почему именно так можно понять, взглянув на двоичную маску). А вот значение bus в рамки xxxxh уже не влезает, увы - искать придется за пределами (а это я из чистой вредности оставляю на самостоятельную работу).
ЗЫ Ну вот, пока я отвлекся - пришел Савелий и испортил малину... :twisted:
Настоящий джентльмен назовет кошку кошкой, даже наступив на нее в темноте.
Что-то ищем? Google в помощь
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
Вот как должно быть :
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о всю перерыл, но там ничего нет о работе с меню.
Дело сдвинулось с "мёртвой точки", выражаю благодарность Apple_rom`у.
Добавлено спустя 1 день 4 часа 27 минут 42 секунды:
Вот и первая ласточка !
Релизнулся новый биос для 8RDA+ !
Новые возможности :
1. Добавлены пункты меню : Command per Clock и CPU Bus Disconnect.
2. Romsip из биоса DFI.
cp.people.overclockers.ru/cgi-bin/dl.pl?id=16997&filename=8RDA_For_2B.7z
Т.к. у меня в данный момент нет компа (пользуюсь старым ноутом), то проверить биос не было возможности. На CRC не ругаеться.
Отправить комментарий