Экзотика NEC не хочет принимать видеокарту
View topic as plain text
Show poster names


#1: Экзотика NEC не хочет принимать видеокарту Автор: RRAОткуда: Мск обл СообщениеДобавлено: Вт Авг 22, 2006 6:14 am
    —
Попалась вот в руки экзотика на чипсете NEC
Производитель материнки Eagles
Описывать не буду, уже подробно описывали - она на форуме уже попадалась

http://www.rom.by/phpBB2/viewtopic.php?p=13120

и вот здесь поругали её BIOS
http://www.rom.by/phpBB2/viewtopic.php?t=5123

Проблема в какой-то индивидуальной непереносимости к видеокарте Asus V3000 (Riva128) PCI

Если вставить ISA видеокарту то материнка стартует и грузится ОС
Если же поставить PCI то выдает ошибку видео (8 коротких пиков спикера)

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

Сначала думал что есть несовместимость версий PCI - на видео то она PCI 2.1 а на материнке хрен знает, но если загрузиться при вставленной ISA и PCI то операционка распознает её корректно и проблема остается лишь в конфликте 2х видеокарт

Тоесть получается контроллер PCI работает и видеокарта работает, но POST с ней проходить BIOS не желает

BIOS у материнки собственный, меню нестандартное, словами не передать
Все что по теме (настройки контроллера в том числе и Assign IRQ for PCI VGA) уже перепробовал

Вот теперь надо решить вопрос кто виноват
Либо BIOS материнки не находит видео
Либо BIOS видеокарты особенный и не хочет подгружаться

В любом случае проблему надо решить одну - чтобы до ОС увидела видеокарту PCI как единственную

Либо нужно исправлять несовместимость и заставить видео проходить POST
Либо заставить пройти POST с ошибкой, чтобы ОС при загрузке подцепила видеокарту (на другой материнке если из видео вытащить флешку то POST пройдет с ошиибкой и пойдет дальше, а когда очередь дойдет до ОС она уже сама её проинициализирует)

Сейчас при ошибке POST останавливается и дальще грузить систему не хочет, что при этом он пишет к сожалению не увидишь

Поменять видеокарту не могу - именна эта нужна
Поменять материнку тем более - её приемущества в том что она очень маленькая (21х16), и в полном обвесе (MB, P1-166, 32MB SDRAM, Video, HDD) требует только +5V при этом ничего не греется и потребляет при этом всего 6Вт - такого больше не найти!

Помогите советом плиз, очень уж хочется поднять, итак уже с того света её вытащил (битый ШИМ, раскачка, мосфеты, отломанная панелька) :)

#2:  Автор: BazaОткуда: С-Петербург СообщениеДобавлено: Вт Авг 22, 2006 10:31 am
    —
А видяха с видео входом и выходом? :)
вариант : скачать у асуса последний биос и обновить, мож. там чего пофиксили.

#3:  Автор: geodimetrОткуда: SPB СообщениеДобавлено: Вт Авг 22, 2006 11:07 am
    —
Ну, сначала стоит определиться с PCI вообще - рассказы о PCI-видеокартах на такой мамке у соседа - это одно, а работа PCI-шины с видео на КОНКРЕТНОМ ЭКЗЕМПЛЯРЕ, плоде долгой и сложной реанимации к тому же - это другое.

-------------------------------------------------------------------

Воткнуть туда самую банальную S3 TRIO 64 - благо, этого "добра" на любом развале по рублю ведро найти можно - и убедиться в нормальной инициализации PCI видео интерфейса как такового. Ну, а после этого... искать вариант чуть другой, но похожей по параметрам видеокарточки будет несложно. Начав, как и предложил Basa, c перешивки видеобиоса.

А об индивиндуальной непереносимости некоторыми мат. платами ASUS-видях серий 3000-3100-3400 известно, сам на такие грабли наступал. Только давно это было, фамилий мат. плат уже не помню...

В Вашем случае наверняка возможен и другой вариант: поспрошать биосоковырятелей поподробнее, КАК ИМЕННО на первопневых мамках было реализовано опознание видеокарты при POST-проверке - наверняка по-тупому, без чтения ее Биоса и прочих P&P, которых тогда еще фактически не было. Значит, возможно "эмулировать" видеокарту в PCI-слоте (дополнительными перемычками ?). Вопрос только, не получим ли при старте "черный экран".


Последний раз редактировалось: geodimetr (Вт Авг 22, 2006 12:05 pm), всего редактировалось 1 раз

#4:  Автор: icbookОткуда: Киев СообщениеДобавлено: Вт Авг 22, 2006 11:41 am
    —
Цитата:
Поменять видеокарту не могу - именно эта нужна. Поменять материнку тем более - её приемущества в том что она очень маленькая (21х16), и в полном обвесе (MB, P1-166, 32MB SDRAM, Video, HDD) требует только +5V при этом ничего не греется и потребляет при этом всего 6Вт - такого больше не найти!

Вы выбрали не самый подходящий объект для поклонения :)
Инициализация видео - один из самых сложных этапов POST. Особенно, в AMIBIOS. На Вашей плате - одно из нелегальных портирований одного из старых ядер AMI.
Код:
41-0000-000000-00101111-070791-
000-0-0000-00-00-0000-00-00-000
000-0-0000-00-00-0000-00-00-00-0

#5: Re: Экзотика NEC не хочет принимать видеокарту Автор: BabashaОткуда: Donetsk (Ukraine) СообщениеДобавлено: Вт Авг 22, 2006 12:22 pm
    —
RRA писал(а):
Попалась вот в руки экзотика на чипсете NEC
Производитель материнки Eagles
Описывать не буду, уже подробно описывали - она на форуме уже попадалась

Не знаю имеет ли это чудо какое-либо отношение к фирме NEC (скорее всего нет, во всяком случае 3д-аксель Nec PowerVR PCI на этой жестянке так и не завелся)... Единственное что я понял после недели траханины с этой мамкой - PCI там реализован АБСОЛЮТНО КРИВО, PCI-Busmastering не поддерживается. Удел этой материнки офисные тачки с видеокартами Trident и CirrusLogic из самых простых.

#6:  Автор: RRAОткуда: Мск обл СообщениеДобавлено: Вт Авг 22, 2006 4:10 pm
    —
Baza писал(а):
А видяха с видео входом и выходом?
вариант : скачать у асуса последний биос и обновить, мож. там чего пофиксили.

Да имеено она, VIVO с флипсовским EVIP SAA7111A
Сейчас зашит биос 1.51B еще точно есть 1.51C и если интернет не врет 1.51H
Зашить попробую бязтельно, nv3flash уже есть, дело только за биосом

geodimetr писал(а):
Ну, сначала стоит определиться с PCI вообще - рассказы о PCI-видеокартах на такой мамке у соседа - это одно, а работа PCI-шины с видео на КОНКРЕТНОМ ЭКЗЕМПЛЯРЕ, плоде долгой и сложной реанимации к тому же - это другое.

Ну что делать, я не могу даже инфу добыть, производители вообще такого не знают
Реанимация то не сложная, ну у панельки ножка обломилась, бывает. А потом паленый AMD с кз по ядру был вставлен и утянул за собой весь ядровый питальник
Это я к чему - повреждения получали цепи, мало имеющие отношение к PCI

geodimetr писал(а):
Воткнуть туда самую банальную S3 TRIO 64

Завтра так и сделаю, пока только PCI сетевуху поставил - работает

geodimetr писал(а):
В Вашем случае наверняка возможен и другой вариант: поспрошать биосоковырятелей поподробнее, КАК ИМЕННО на первопневых мамках было реализовано опознание видеокарты при POST-проверке - наверняка по-тупому, без чтения ее Биоса и прочих P&P, которых тогда еще фактически не было. Значит, возможно "эмулировать" видеокарту в PCI-слоте (дополнительными перемычками ?). Вопрос только, не получим ли при старте "черный экран".

Ой, а вы ходили поссылкам вначале топика, там этот биос за биос не считают - вначале биоса переход на пустующую область :)

icbook писал(а):
Вы выбрали не самый подходящий объект для поклонения
Инициализация видео - один из самых сложных этапов POST. Особенно, в AMIBIOS. На Вашей плате - одно из нелегальных портирований одного из старых ядер AMI.

Посоветуйте альтернативу чтоли. Материнка маленькая очень и кушает мало, ИМЕННО это и нужно, долго мамку такого класса искал

Babasha писал(а):
Не знаю имеет ли это чудо какое-либо отношение к фирме NEC (скорее всего нет, во всяком случае 3д-аксель Nec PowerVR PCI на этой жестянке так и не завелся)... Единственное что я понял после недели траханины с этой мамкой - PCI там реализован АБСОЛЮТНО КРИВО, PCI-Busmastering не поддерживается. Удел этой материнки офисные тачки с видеокартами Trident и CirrusLogic из самых простых.

Ну NEC точно имеет, нарисовал же маркировку на мосте
Не поддерживает BusMastering - ну и пусть, не мешает же это распознать видео-биос и передать управление на него

PCI видеокарта другого образца - это конечно многое даст, по крайней мере узнаем причину, но мне кажется что заработает, не зря же массовых жалоб нет, а ведь у всех стоит PCI

Что-тут все равно не так...

#7:  Автор: apple_romОткуда: Minsk СообщениеДобавлено: Вт Авг 22, 2006 8:09 pm
    —
Не по наслышке зная про сабжевую видеокарту (у самого такая стояла не один год) ОДНОЗНАЧНО рекомендую успокоиться и искать материнскую плату на Intel. То есть даже на VIA сотоварищи проблемы практически гарантированы, а уж, на (опять же, не по наслышке знакомому) НЕКе - тем паче. При чем если с первыми еще можно было попытаться что-то исправить путем шаманских телодвижений, то с последним пространство маневра из-за отсутствия корректных виндовых драйверов под НЕК - минимально.
Итого - даже если каким-то чудом удастся уговорить нормально _стартовать_ подобную систему, то шансы ее нормальной работы под виндами - еще меньше, чем шансы уговорить ее показывать при загрузке.

Вывод. _Принципиальные_ проблемы несовместимости не позволяют рекомендовать использование матплат на подобных чипах практически ни для каких задач. Исключение, разве только - если нужен голый DOS.

#8:  Автор: RRAОткуда: Мск обл СообщениеДобавлено: Вт Авг 22, 2006 8:41 pm
    —
apple_rom Ну хорошо, допустим есть _Принципиальные проблемы_, но я не могу понять, что в данном случае мешает загрузке? Вот завтра я буду пробовать ставить целую горку различных видеокарт. Скорее всего большинство заработает, но почему тогда Asus отказывает?
Вам, бесспорно, хорошо знаком процесс инициализации видео, подскажите тогда по каким критериям биос может отказываться найти видео? Аппаратная несовместимость? Или совесем уж необычный флеш на видеокарте?
Может вы даже видели этот NEC BIOS, может даже просматривали содержимое, тогда просто подскажите как заставить систему работать БЕЗ видеокарты
Конечно я не вижу что сейчас выводится на экран, но больше чем уверен что стандартное "Press F1 to enter bios setup", причем никакой возможности пропуска ошибки и продолжения загрузки - вот что мне мешает

Ну и уж если получится заставить сие работать под ДОС то за Windows я ручаюсь. Сейчас проблема в том что хоть в Windows и видно видеокарту, ей мешает другая ISAшная
Если устройство будет одно (PCIAsus V3000) - то уже никакая совместимость\драйвера мне нужны не будут
Вся работа будет вестись сторонними утилитами, задача которых активировать чип SAA7111A и включить на видеокарте V-In и V-Out

Если уж не получится заставить материнку признавать видео, то хотя бы нужно как то заставить её грузиться не увидив видеокарты. Когда дело дойдет до загрузки Win, за ней вопрос не станет, ручаюсь :)

Знать бы алгоритм инициализации видео в этом NEC.....

#9:  Автор: LiveRОткуда: SPb СообщениеДобавлено: Вт Авг 22, 2006 8:49 pm
    —
А если попробовать видяху не к монику цеплять, а через видеовыход на телек? Может, хоть инфу об ошибке прочитать можно будет :roll:

#10:  Автор: RRAОткуда: Мск обл СообщениеДобавлено: Вт Авг 22, 2006 9:03 pm
    —
LiveR, видеовыход включится если на VGA она не обнаружит нагрузок по 75 Ом в виде монитора
Да и потом если материнка пищит 8коротких то видео биос она не нашла -> код не выполнился -> Регистры Riva пустые -> Картинки нет

Инфа о сообщении - 99,9 % такая как я писал, если нажать F1 то будет характерный писк входа в BIOS Setup

#11:  Автор: DiVersantОткуда: Kyiv СообщениеДобавлено: Вт Авг 22, 2006 10:32 pm
    —
Если я правильно понял, 3Д будет невостребовано.
В таком случае лучше будет воткнуть какой-нить RageII с вивой и наслаждаться. Riva128 вообще достаточно капризный зверь, особенно под в95, а что-то другое на этого зверя водружать смысла нет - слишком он крив и тормознут.

Что-то вроде
http://cgi.ebay.com/ATI-All-in.....dZViewItem

#12:  Автор: RRAОткуда: Мск обл СообщениеДобавлено: Вт Авг 22, 2006 10:55 pm
    —
DiVersant писал(а):
Если я правильно понял, 3Д будет невостребовано.

Именно !

DiVersant писал(а):
В таком случае лучше будет воткнуть какой-нить RageII с вивой и наслаждаться. Riva128 вообще достаточно капризный зверь, особенно под в95, а что-то другое на этого зверя водружать смысла нет - слишком он крив и тормознут.

Конечно ! Опять же таки если Rage не будет так же капризничать
Ну а пока есть V3000 отлично зарекомендовавший себя под win98 буду пробовать его

Тем более под Rage опять искать дрова\утилиты
Да и найти этот Rage еще надо.....

#13:  Автор: DiVersantОткуда: Kyiv СообщениеДобавлено: Вт Авг 22, 2006 11:08 pm
    —
Глюков в эксплуатации Rage особо замечено не было.
На радиорынке вполне можно найти. Драйвера - на сайте.
Кроме него есть еще пара приемлимых вариантов -
Matrox Mystique 220 или Millennium II+ Rainbow Runner (заодно будет аппаратный MJPEG кодер и MPEG-декодер) и карточки с тюнером и VIVO на базе CL-GD5446. К примеру, PixelView ComboTV Plus
Model name: PV-CL5446P+ / PV-CL544XP+
Драйвера: http://www.prolink.com.tw/chin.....e.htm#5446
Юзал и то, и другое - претензий нет.

Вот еще по раннеру: http://www.dealtime.co.uk/xPF-.....MYST_RRSTI

#14:  Автор: RootОткуда: Saint-Petersburg СообщениеДобавлено: Ср Авг 23, 2006 12:22 am
    —
Цитата:
Да и найти этот Rage еще надо...

опять же знаем где найти, но, увы, человек "за так" ее не отдаст, а платить рублев 500-700 за такой раритет особого смысла не представляет :(

#15:  Автор: DiVersantОткуда: Kyiv СообщениеДобавлено: Ср Авг 23, 2006 12:26 am
    —
Ну...
Я так понимаю, это принципиальный интерес - из г. слепить пулю?
Могу сказать, что это будет г-ная пуля.
Задачи хоть какие стоят?

#16:  Автор: RRAОткуда: Мск обл СообщениеДобавлено: Ср Авг 23, 2006 2:39 am
    —
Diversant писал(а):
Ну...
Я так понимаю, это принципиальный интерес - из г. слепить пулю?

Так и есть !

Diversant писал(а):
Могу сказать, что это будет г-ная пуля.

Ну не скажите, далеко не всегда... Я бы сказал редко

Diversant писал(а):
Задачи хоть какие стоят?

Задача пока стоит одна - собрать микропроцессорную систему, обладающую минимальным энегопотреблением и физическими размерами, имеющую видео вход\выход
Реально для чего все это надо скажу если все получится ;)

Везде, где ставиться задача построить нечто подобное за деньги, конечно можно пойти и закупиться комплектующими, но тут я бы сказал профинтерес

Root писал(а):
опять же знаем где найти, но, увы, человек "за так" ее не отдаст, а платить рублев 500-700 за такой раритет особого смысла не представляет

Вот именно!


Что самое интересное - подобный "принципиальный интерес" возникает всякий раз когда в руки попадает что то неординарное! :)

Со стороны это выглядит, наверное, как безумие - разбираться в какой то проблеме, когда есть более удачные\готовые решения - успевай только бало отваливать :)

Можно конечно пойти еще более сложным и интересным путем - выпаять этот SAA7111A а с ним и 7003 заодно, к этому ATмегу, памяти, и.т.д. На это просто времени уйдет немерянно, с одним только протоколом CompactFlash разбираться сколько...

Сейчас проще использовать готовую платформу (DOS\Win), я не думаю что несовместимость окажется настолько принципиальной. Тем более что использовать DOS\Win гораздо разумнее чем строить свою систему и разрабатывать свою платформу с претензией на универсальность...

Ну, да это уже оффтоп... :)

#17:  Автор: icbookОткуда: Киев СообщениеДобавлено: Ср Авг 23, 2006 11:56 am
    —
Цитата:
...но я не могу понять, что в данном случае мешает загрузке?

А Вы установите POST-карту, и сообщите код останова, т.к. есть два варианта: 2Ah и 32h.

#18:  Автор: RRAОткуда: Мск обл СообщениеДобавлено: Чт Авг 24, 2006 8:33 pm
    —
icbook писал(а):
А Вы установите POST-карту, и сообщите код останова, т.к. есть два варианта: 2Ah и 32h.


ISA Post карта останавливается на 31h

AMIBIOS POST Checkpoint Codes писал(а):
31h:
The display memory read/write test or retrace checking failed. Performing the alternate display memory read/write test next.


Все-таки кривой PCI ???

Добавлено спустя 8 часов 33 минуты 49 секунд:

icbook, а для AMIшного биоса видеоадаптер - это всего лишь ROM с сигнатурой 55AA в области C000 или еще какие проверки идут ?

Вот с ISA в\к можно всю память из панелек поснимать, адаптер не работает, а POST проходит
Но если вытащить BIOS то POST останавливается на 31h
Значит видео-памть не проверяется?

И по какому адресу видео-биос передается управление? (мне нужно иниц. облать найти в видео-биос)

Добавлено спустя 12 часов 49 минут 51 секунду:

2ALL , у кого если есть BIOS от этого игла - просьба - отмыльте пожалуйста, почему-то не получается слить дамп :(

#19:  Автор: DiVersantОткуда: Kyiv СообщениеДобавлено: Пт Авг 25, 2006 1:59 am
    —
RRA писал(а):
Diversant писал(а):
Ну...
Я так понимаю, это принципиальный интерес - из г. слепить пулю?

Так и есть !

Безумству храбрых...

И всё-таки, что это должно получиться в результате?
Есть нездоровые подозрения, что кривая PCI и полное отсутствие BM не дадут реализовать задуманное. Всё-таки речь идет о video-in, а это накладывает определённые требования к промзводительности...

#20:  Автор: RRAОткуда: Мск обл СообщениеДобавлено: Сб Авг 26, 2006 6:55 am
    —
Определилась суть проблемы.
Вся подсистема PCI работает исправно.
Ошибка, скорее всего, в коде BIOS.

Дело в том что BIOS не может найти видео-биос карты.
При этом в\к можно инициализировать принудительно, если ссорудить следуюшее:

1)Слить с ASUS видеокарты видео-биос и записать в отдельную флешь
2)Эту флешь размесить в адресном пространстве Optional Boot ROM, вставив её в сетевую карту с DIP32 панелью
3)Вставить сетевую карту в слот PCI
4)Вставить ASUS видеокарту (без биоса) в слот PCI
5)В ISA поставить всё ту-же видео Trident9000
6)В оставшийся слот - POST-кодер

Система стартует...
1) Находится видео-биос Trident9000 и выполняется на коде 2C
2) Находится биос сетевой карты (на самом деле видео :) ) на коде 91 и передается управление ему
3) Код 97. Наш видео-биос выполняется!! Инициализируется видеокарта ASUS, при этом происходит крах Tridenta

Возникает проблема - видео-биос не хочет передавать управление назад - система стоит :(
Может последствия инициализации Trident мешают???
-------------------------------

Тоесть проблема, имхо, в том, что BIOS материнки не может найти набортный видео-биос карты

Нужно чтобы биос Riva выполнился раньше

Остается 2 способа:

1. Аппаратный - ставим рядом с панелькой BIOS на материнкскую плату еще одну панельку, под видео-биос. С помощью нехиторй логики размещаем её в адресном пространстве VGABIOS и сажаем на шину ISA

2. Программный - микрокод Видео-биос встраиваем вместо процедур поиска Video-ROM, таким образом система получит как-бы встроенную видеокарту

[off] однако почитав такие топики - http://rom.by/phpBB2/viewtopic.php?t=8956 - начнешь относиться к этой идее с опаской - как далеко можно уйти от такого простого, как казалось, вопроса как внедрение видое-биос в системный :)
[/off]

Ситуация осложняется несколькими факторами
- на плате AMI Bios
- он сильно покалеченный
- непакованный (+?)

Кто может что посоветовать? Мне конечно интереснее способ программный, сейчас начну понемножку изучать код биоса, хотя понимаю что допаять доп. панель будет быстрее.

Стоит ли оно того?
Кто смотрел код Eagle BIOS под NEC Power TX, сильно запутанный код?

#21:  Автор: RRAОткуда: Мск обл СообщениеДобавлено: Пт Сен 01, 2006 9:26 pm
    —
Возникло несколько вопросов к уважаемым гуру...
Вопросы касаются ROMSCAN, а точнее той части что копирует код из микросхемки в основную память

Вот сам ROMSCAN
Код:

Параметры - BX=Очередной адрес ROM (С000-С800 или C800-E000 или E000-E800)

ROMSCAN:
     cli              Запрет прерываний
     cld              Прямое направление
     push ds          Сохраняем DS
     mov ds, bx       Загрузка адреса ROM
     xor si, si       si=0 начало ROM
     lodsw            Загрузка сигнатуры
     xor ax, AA55     Сигнатура 55AA ??
     jne NO_SIGN      Если НЕТ - выход для поиска в след. 512
     mov cx, 0080     По умолчанию размер ROM = 80x200 = 64K
     cmp bx, E000     Адрес ROM=E0000 ?
     je DEFSIZE       Если ДА - оставим 64К
     lodsb            НЕТ - загружаем реальный размер
     mov cx, ax       Размер (в блоках х512) в CX
     
DEFSIZE:
     shl cx, 05       Умножаем CX*32
     add bx, cx       И переносим в BX
     shl cx, 04       Домножаем на 16 - CX теперь реальный размер в байтах
     xor si, si       si=0 - Начало ROM
     
CHECKSUM:
     lodsb            Загружаем байт в AL
     add ah, al       AH = AH + AL - Подсчет CRC по модулю 256
     loop CHECKSUM    Повторяем для всего ROM
     jne CRCFAIL      CRC=0 ? Если НЕТ - выход
     sti              Разрешаем прерывания
     push es          Сохраняем ES-BX-BP
     push bx
     push bp

     push cs          Создаем точку возврата из ROM - сегмент
     push ROM_RET     И смещение

     push ds          Создаем искуственный переход в ROM - сегмент
     push 0003        И смещение

     call PREPARE     Подготовка к переходу
     retf             Передача управления в ROM
     
ROM_RET:
     cli              Возврат из ROM - Запрет прерываний
     cld              Прямое направление
     pop bp           Восстанавливаем ES-BX-BP
     pop bx
     pop es
     pop ds           Восстанавливаем DS
     cmp sp, sp       Стек сбалансирован?
     ret              Выход

NO_SIGN:
     add bx, 0080     Сигнатура не найдена - прибавляем 512 байт и ищем дальше

CRCFAIL:
     pop ds           Восстанавливаем DS
     ret              Выход


Вот непонятная процедура проверки
Код:

PREPARE:
     push ds               Сохраняем регистры
     push es
     push ax
     push bx
     push cx
     push dx
     push si
     push di

     mov ax, ds            В AX - Адрес ROM
     cmp ax, C000          Видео-ROM ?
     jne EXIT              Если НЕТ - выход
     mov ax, cs            Перегружаем CS->DS
     mov ds, ax
     mov cx, cs:[3BF6]     Загружаем счетчик (в прошивке = 4)
     mov si, 3AC2          Смещение

CYCLE:
     lea bx, [si+09]       Загружаем Адрес //?????
     cmp word ptr[bx],FFFF По Адресу слово = FFFF ?
     je CONTINUE           Если ДА - продолжаем цикл
     cmp byte ptr[bx+0B],03 По Адресу+И байт = 3 ?
     je EXITERR            Если ДА - Выходим с ошибкой

CONTINUE:
     add si, 004D          Смещение + 4D
     loop CYCLE            Продолжаем цикл
     call COPYROM          Копирование ROM в основную память

EXIT:
     pop di                Восстанавливаем регистры
     pop si
     pop dx
     pop cx
     pop bx
     pop ax
     pop es
     pop ds
     ret                   Выход

EXITERR:
     mov ah, 00            В AH=0
     mov al , [si+04]      В AL=?
     pop di                Восстанавливаем регистры
     pop si
     pop dx
     pop cx
     pop bx
     pop es
     pop es
     pop ds
     ret                   Выход


А вот и само копирование
Код:

COPYROM:
     push ds                    Сохраняем регистры
     push es
     pushad
     mov ax, C000               Загружаем адрес видео-ROM в AX
     mov ds, ax                 И перегружаем его в DS
     mov es, ax                 И в ES
     mov bx, 0000               Смещение = 0 - начало ROM
     cmp word ptr [bx], AA55    Проверяем сигнатуру
     jne SIG_ERR                Неверная сигнатура - выход
     mov bx, 0002               Смещение = 2 - размер ROM (x512)
     mov al , [bx]              Загружаем размер
     
     cmp al, 20                 Размер больше 20 (16K) ?
     ja ABOVE20                 Если ДА - сравниваем со следуюшим
     mov cx, 2000               Округляем размер до 16K
     mov bx, FC01               В BX - непонятные флаги
     jmp SIZEOK                 Размер определен
     
ABOVE20:
     cmp al, 40                 Размер больше 40 (32K) ?
     ja ABOVE40                 Если ДА - сравниваем со следующим
     mov cx, 4000               Округлям размер до 32K
     mov bx, F005               В BX - непонятные флаги
     jmp SIZEOK                 Размер определен
     
ABOVE40:
     cmp al, 60                 Размер больше 60 (48K) ?
     ja ABOVE60                 Если ДА - к следующему
     mov cx, 6000               Округляем размер до 48K
     mov bx, C015               В BX - непонятные флаги
     jmp SIZEOK                 Размер определен

ABOVE60
     mov cx, 8000               Округляем размер до 64K
     mov bx, 0055               В BX - непонятные флаги
SIZEOK:                         Размер определен

     mov al, 1C                 Шаманство с флагами и портами E0\E1
     out E0, al
     in al, E1
     and al , bh
     or bl , al
     mov al, 1C
     out E0, al
     mov al , bl
     mov ah, 1C
     xchg ah, al
     out E0, ax

                                Начинаем копирование
     mov si, 0000               Индекс источника = 0
     mov di, 0000               Индекс приемника = 0
     cld                        Прямое направление
     repz                       Повтор по размеру ROM
     movsw                      Копирование

     mov al, 1C                 Шаманство с флагами и портами E0\E1
     out E0, al
     in al, E1
     and al , bh
     not bx
     and bl , bh
     or bl , al
     mov al, 1C
     out E0, al
     mov al , bl
     mov ah, 1C
     xchg ah, al
     out E0, ax
     
SIG_ERR:
     popad                     Восстанавливаем регистры
     pop es
     pop ds
     ret                       Выход



Непонятен сам механизм
К какому устройству относятся порты E0,E1 ?
И что можно перенастроить таким образом, чтобы обычная пересылка из области памяти в саму себя превратилась вдруг в копирование из памяти устройства на шине в системную память??

Добавлено спустя 21 час 20 минут 13 секунд:

Я неправильно интерпретировал процедуру PREPARE - то что я считал ошибкой на самом деле - успешное выполнение :)
Должно быть так
Код:

     mov cx, cs:[3BF6]     Загружаем количество слотов PCI (в прошивке = 4)
     mov si, 3AC2          Смещение на область конфигурации

CYCLE:
     lea bx, [si+09]       Загружаем адрес конф. пространства слота
     cmp word ptr[bx],FFFF По Смещение 0 - VendorID - есть устройство в слоте?
     je CONTINUE           Если НЕТ - продолжаем опрос
     cmp byte ptr[bx+0B],03 Смещение B - Base Class - устройство видеоадаптер (3)?
     je EXITOK              Если ДА - Выходим, нашли видеоадаптер

CONTINUE:
     add si, 004D          Смещение + 4D к следующему слоту
     loop CYCLE            Продолжаем цикл
     call COPYROM          Копирование ROM в основную память
.
.
.
.
EXITОК:
                                     Параметры для процедуры ROMINIT :
     mov ah, 00            В AH - номер шины - 0=шина PCI
     mov al , [si+04]      В AL=номер устройства:функции (5:3)


Получается копирование вызывается если в PCI не найден видеоадаптер, а значит это не мой случай

Все предыдущие вопросы пока сняты
Надо искать, где область 3AC2 заполняется

#22:  Автор: RRAОткуда: Мск обл СообщениеДобавлено: Сб Сен 02, 2006 11:15 pm
    —
----------------------------------------------------
Расковырял обработку устройств на шине

Базовый цикл:
Код:

.
.
.
.
    mov cx, [3BF6]       Загружаем количество слотов
    mov di, 3AC2         Загружаем адрес области конфигурации
Next_Dev:
    push cx              Сохраняем счетчик слотов
    call Add_Device      Обрабатываем слот
    pop cx               Восстанавливаем счетчик слотов
    add di, 004D         Переходим с следующему адресу
    loop Next_Dev        Продолжаем цикл           
    mov al, [3C6C]       Флаг "Видеоадаптер найден"
    cmp al, 01           Видеоадаптер найден ?
    je PCIVIDEO          Да - переход
.
.
.
.
.



Вот сама обработка
Вроде ничего подозрительного.....
Код:

Add_Device:                Обработка очередного устройства на шине

    lea bx, [di+09]        Загружаем адрес памяти конфигурации
    mov eax, 00000000      Смещение=0 - VendorID\DeviceID
    call PCI_Read          Читаем дв.слово
    mov [bx], ecx          Запоминаем в свою область памяти
    cmp ecx, FFFFFFFF      Слот не отвечает ?
    je EXIT                Да - выход,переходим с следующему
    mov eax, 00000008      Смещение=8 - RevisionID\DeviceClassCode
    call PCI_Read          Читаем дв.слово
    mov [bx+08], ecx       Запоминаем в свою область памяти
    and ecx, FFFFFF00      Накладываем маску - в ecx теперь DeviceClassCode
    cmp ecx, 01000000      Устройство - SCSI ?
    je SCSI                Да - обрабатываем как SCSI
    shr ecx, 10            Передвигаем ecx - теперь там только BaseClass
    cmp ch, 02             Базовый класс - Сетевой Адаптер ?
    je NET                 Да - обрабатываем как NET
    cmp ch, 03             Базовый класс - Видеоадаптер ?
    je VIDEO               Да - обрабатываем как VIDEO
    cmp ch, 04             Базовый класс - Мультимедиа ?
    je MMED                Да - обрабатываем как MMED
    jmp OTHER              Обрабатываем как Др.
.
.
.Обработка сети, скази, мултимедиа - пропускаем - неинтересно
.
.

VIDEO:
    mov al, [3C6C]         Флаг "Видеоадаптер Есть"
    cmp al, 01             Видео есть?
    jne NEW_VIDEO          Нет - обрабатываем
    jmp EXIT               Есть - хватит и одной, выход

NEW_VIDEO:
    mov eax, 00000010      Смещение=10 - Базовые Адресные Регистры
    lea bx, [di+09]        Заново загружаем указатель на нашу облать
    add bx, 0010           Также смещение = 10
BAR_CYCLE:
    mov ecx, FFFFFFFF      Все биты 1 для записи - проверяем БАР
    call PCI_Write         Записываем еденицы
    call PCI_Read          Читаем регистр
    mov [bx], ecx          Запоминаем содержимое
    cmp ecx, FFFFFFFF      Регистр не отвечает?
    je ROMPR               Да - переходим к обработке ROM
    or ecx, ecx            Регистр пуст?
    je ROMPR               Да - переходим к обработке ROM
    test cl, 01            БАР типа ПАМЯТЬ ?
    je MEMREG              Да - обрабатываем как память
    call GO_IOSpace        В противном случае - обрабатываем как ввод\вывод
    jmp NEXTBAR
MEMREG:
    call GO_MEMSpace       Обрабатываем как память
NEXTBAR:
    add bx, 0004           Переходим с следующему БАР
    add eax, 00000004      Переходим с следующему БАР
    cmp eax, 00000024      БАР кончились?
    jbe BAR_CYCLE          Нет - продолжаем

ROMPR:
    mov eax, 00000030      Смещение=30 - Расширение ROM
    mov ecx, FFFFFFFF      Все биты 1 для записи - проверяем Расширение ROM
    call PCI_Write         Записывем еденицы
    call PCI_Read          Читаем регистр
    lea bx, [di+09]        Заново загружаем указатель на нашу область
    mov [bx+30], ecx       Запоминаем регистр ROM
    cmp ecx, FFFFFFFF      Регистр не отвечает?
    je INTPR               Да - переходим к обработке прерываний
    or ecx, ecx            Регистр пуст?
    je INTPR               Да - переходим к обработке прерываний
    mov si, 3C60           Загружаем в SI смещение ячейки (в прошивке = 000C0000)
    call GO_ROM            Обрабатываем как ROM

INTPR:
    mov ecx, 000000FF      В ecx - 00..11111111     
    mov eax, 0000003C      Смешение = 3С - IntLine\IntPin\MinGnt\MaxLat
    mov [bx+3C], ecx       Запоминаем 00..11111111 (Очищаем InterruptLine)
    call PCI_Write         Пишем это же в регистр
    mov al, [3C68]         Загружаем флаг "Запретить прерывания" (???????????)
    test al, 01            Флаг = 1 ?
    je EDIT_CR             Да - переходим к записи в ControlRegister
                           Нет - все таки обрабатываем прерываение
    mov eax, 0000003C      Смещение = 3C - IntLine\IntPin\MinGnt\MaxLat
    call PCI_Read          Читаем регистр
    mov [bx+3C], ecx       Запоминаем регистр
    or ch, ch              InterruptPin пуст ?
    je EDIT_CR             Да - переходим к записи в ControlRegister
    call GO_IRQ            Нет - обрабатываем прерывание

EDIT_CR:
    mov eax, 00000004      Смещение = 4 - ControlRegister \ StatusRegister
    mov ecx, 00000003      Уст. биты 000.....011 - Рарешить IO, Разрешить MEM, Запретить BusMaster
    call PCI_Write         Пишем в CR
    call 40BA              Вызываем COPYROM !!!
    mov eax, 00000030      Смещение = 30 - Расширение ROM
    mov ecx, 00000000      В ecx=0
    call PCI_Write         Записываем 0 в регистр ROM (Зачеи ?????)
    mov al, 01             В AL - 1
    mov byte ptr [3C6C], al Устанавливаем флаг "Видеоадаптер Есть"
    jmp EXIT               Выход - с следующему устройству

EXIT:
    ret                    Выход


Рассаматривал процедуры GO_IO, GO_MEM и GO_ROM - принцип ясен, непонятны детали
Кажется есть какой-то криминал

Кто может, прошу оказать помощи:
1) Как устройство в одном BAR заявляет и базовый адрес памяти и его размер? Целый час перечитывал абзац в спецификации - не понял :(
Понятно что записав все 111 мы можем по оставшимся 0 определить размер, но как определить нужный адрес памяти? (Пример - видео, адрес 000A0000)

2) COPYROM все-таки вызывается, поэтому всплывает прошлый вопрос - про порты E0, E1 и непривычный механизм копирования

Если кто знает - подскажите пожалуйста, нигде не найду инфу
Заранее благодарен

#23:  Автор: icbookОткуда: Киев СообщениеДобавлено: Вс Сен 03, 2006 11:51 am
    —
Прошу прощения, но вызов ROMSCAN может и не произойти?
Код:
Check_Point   2Ah      ; POST 2A
   call   _DIM
   jz   _oops
Check_Point   2Bh      ; POST 2B
   call   _dummy
   jz   _oops
Check_Point   2Ch      ; POST 2C
   mov   bx,0c000h      ; EGA/VGA ROM segment
_else_:
   call   ROMSCAN
   cmp   bx,0c800h
   jb   _else_
_oops:


Последний раз редактировалось: icbook (Пн Сен 04, 2006 12:06 pm), всего редактировалось 1 раз

#24:  Автор: RRAОткуда: Мск обл СообщениеДобавлено: Вс Сен 03, 2006 9:49 pm
    —
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

#25:  Автор: icbookОткуда: Киев СообщениеДобавлено: Пн Сен 04, 2006 12:10 pm
    —
Цитата:
1) Видеокарта находится - есть переход по проверке КлассаУстройства
2) Есть проход по секциям инициализации BAR,ROM,INT,MEM,IO ...
3) Есть запись в ControlRegister и далее следующий за ним вызов COPYROM

Далее в COPYROM на первой же проверке ... вываливаемся - тоесть не находим сигнатуру

Посмотрю в свободное время.

#26:  Автор: RRAОткуда: Мск обл СообщениеДобавлено: Вт Сен 05, 2006 2:59 am
    —
Закончил я писать программу и провел, так сказать, анализ.
Результаты меня привели в некоторое замешательство.
Начал еще раз перечитывать спецификацию PCI.

Перечитав Appendix D - Device Class Codes, я понял что никаких фиксированных адресов PCI плате выделяться не может.
По анализам BAR биос может только узнать размер области, необходимой устройству. При этом выбор адреса этой области лежит целиком на биос.
Как оказалось, просто некоторым устройствам стандартного типа (видео например) далжна выделяться область с определенным базовым адресом.
В спецификации прописано что если код класса - 030000, то как видеокарте, устройству полагается память A0000-BFFFF и I\O 3B0-3BB, 3C0-3DF.
Я этого не знал, и полагал что видеокарта должна сама заявлять об требуемых ей ресурсах в BAR. На самом деле в BAR только дополнительная памать.

Теперь о самой видеокарте asus.
Она использует только BAR0 и BAR1, требуя в каждом из них по 16Мб памяти.
Плюс используется BAR-eROM, требующий 4(!) мегабайта под ROM.

Биос платы NEC выделяет ей пространство E0000000-E0FFFFFF и E1000000-E1FFFFFF под память.
Какой адрес выделяется ROM я не знаю - после COPYROM он сброшен в 0.
Но посмотрев в код, можно посчитать, что выделяется пространство 000C0000 - 004C0000 что в принципе странно, хотя работать должно.

Теперь даже не знаю где может быть косяк..... :?:

Добавлено спустя 10 минут 29 секунд:

Посмотрел, как выделяется на плате с чипсетом VIA - то же самое.
E2000000-E2FFFFFF
E3000000-E3FFFFFF
ROM=0



Ромбофорум -> Редактирование BIOS


output generated using slightly changed printer-friendly topic mod. Часовой пояс: GMT + 4


Powered by phpBB © 2001 phpBB Group
Хостинг сайта: EOMY.NET