icbook Спасибо что отозвались Меня сейчас

icbook Спасибо что отозвались

icbook писал(-а):
Прошу прощения, вы вызов ROMSCAN может и не произойти?

Меня сейчас ROMSCAN как таковой пока не интересует
Проблема появляется ещё раньше - после посткода 13 идет обозначенный мною "Базовый цикл" по перечислению устройств на PCI шине
Вызывается Add_Device, натыкается на видеокарту, инициализирует ConfigSpace выдеокарты и, самое интересное, вызывается ROMCOPY которвй, как я понял, что то делает с чипсетом и появляется возможность стянуть из видеокарты ROM в основную память

Я вставлял повсюду отладочные куски
Вот как проходит код

1) Видеокарта находится - есть переход по проверке КлассаУстройства
2) Есть проход по секциям инициализации BAR,ROM,INT,MEM,IO (сами процедуры типа GO_XXXX я еще не дебагил)
3) Есть запись в ControlRegister и далее следующий за ним вызов COPYROM

Далее в COPYROM на первой же проверке


(эта та которая у меня
cmp word ptr [bx], AA55 Проверяем сигнатуру
jne SIG_ERR Неверная сигнатура - выход
)
вываливаемся - тоесть не находим сигнатуру

Вот принципиальная проблема "слепоты" биос - он не имеет доступ к Видео-ROM

Мне кажется что проблема в неправильной инициализации регисров BAR и регистра ROM видеокарты

Сейчас я выложу их код (GO_MEM и GO_ROM) но сам я его понять не могу - читал спецификацию PCI и в инглише и на русском и версии 2.0 и версии 2.2

НИКАК не могу понять механизм выделения памяти !
Записав все 11111 в регистр и считав его содержимое можно узнать размер требуемой памяти, но КАК определить адрес?? Пример - видеопамять 000A0000-000AFFFF всегда именно такая
Вот засада то!
Я уже заканчиваю свою мини прогу по полной расшифровке ConfigSpace включая полный анализ BAR
Только так на практике я смогу порнять механизм
А пока - увы:(

GO_MEM

.3ED8 6650                   push eax
.3EDA 6653                   push ebx
.3EDC 6651                   push ecx
.3EDE 6652                   push edx
.3EE0 80E1F0                 and cl, F0
.3EE3 66BB10000000           mov ebx, 00000010

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|.3EF1(U)
|
.3EE9 6685CB                 test ebx, ecx
.3EEC 7505                   jne 3EF3
.3EEE 66D1E3                 shl ebx, 01
.3EF1 EBF6                   jmp 3EE9



* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|.3EEC(C)
|
.3EF3 6681FB00010000         cmp ebx, 00000100
.3EFA 770C                   ja 3F08
.3EFC 66BB00010000           mov ebx, 00000100
.3F02 66B900FFFFFF           mov ecx, FFFFFF00

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|.3EFA(C)
|
.3F08 668B165C3C             mov edx, [3C5C]
.3F0D 6623D1                 and edx, ecx
.3F10 663B165C3C             cmp edx, [3C5C]
.3F15 7408                   je 3F1F
.3F17 6603D3                 add edx, ebx
.3F1A 6689165C3C             mov [3C5C], edx

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|.3F15(C)
|
.3F1F 66011E5C3C             add [3C5C], ebx
.3F24 8D5D09                 lea bx, [di+09]
.3F27 03D8                   add bx, ax
.3F29 668917                 mov [bx], edx
.3F2C 668BCA                 mov ecx, edx
.3F2F E829FF                 call PCI_Write
.3F32 665A                   pop edx
.3F34 6659                   pop ecx
.3F36 665B                   pop ebx
.3F38 6658                   pop eax
.3F3A C3                     ret

примечание - переменная [3C5C] по умолчанию = E0000000

GO_ROM

.3F86 6650                   push eax
.3F88 6653                   push ebx
.3F8A 6651                   push ecx
.3F8C 6652                   push edx
.3F8E 56                     push si
.3F8F 80E1F0                 and cl, F0
.3F92 66BB00080000           mov ebx, 00000800

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|.3FA0(U)
|
.3F98 6685CB                 test ebx, ecx
.3F9B 7505                   jne 3FA2
.3F9D 66D1E3                 shl ebx, 01
.3FA0 EBF6                   jmp 3F98



* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|.3F9B(C)
|
.3FA2 6681FB00000100         cmp ebx, 00010000
.3FA9 760C                   jbe 3FB7
.3FAB 66B90000FFFF           mov ecx, FFFF0000
.3FB1 66BB00000100           mov ebx, 00010000

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|.3FA9(C)
|
.3FB7 668B14                 mov edx, [si]
.3FBA 6623D1                 and edx, ecx
.3FBD 663B14                 cmp edx, [si]
.3FC0 7406                   je 3FC8
.3FC2 6603D3                 add edx, ebx
.3FC5 668914                 mov [si], edx

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|.3FC0(C)
|
.3FC8 66011C                 add [si], ebx
.3FCB 668BCA                 mov ecx, edx
.3FCE 80C901                 or cl, 01
.3FD1 8D5D09                 lea bx, [di+09]
.3FD4 03D8                   add bx, ax
.3FD6 66890F                 mov [bx], ecx
.3FD9 E87FFE                 call PCI_Write
.3FDC 5E                     pop si
.3FDD 665A                   pop edx
.3FDF 6659                   pop ecx
.3FE1 665B                   pop ebx
.3FE3 6658                   pop eax
.3FE5 C3                     ret

примечание - переменная [si], по умолчанию = 000C0000

Экзотика NEC не хочет принимать видеокарту