Попалась вот в руки экзотика на чипсете NEC
Производитель материнки Eagles
Описывать не буду, уже подробно описывали - она на форуме уже попадалась
https://rom.by/phpBB2/viewtopic.php?p=13120
и вот здесь поругали её BIOS
https://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Вт - такого больше не найти!
Помогите советом плиз, очень уж хочется поднять, итак уже с того света её вытащил (битый ШИМ, раскачка, мосфеты, отломанная панелька) :)
Именно !
Конечно ! Опять же таки если Rage не будет так же капризничать
Ну а пока есть V3000 отлично зарекомендовавший себя под win98 буду пробовать его
Тем более под Rage опять искать дрова\утилиты
Да и найти этот 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/chinese/products/discontinue.htm#5446
Юзал и то, и другое - претензий нет.
Вот еще по раннеру: http://www.dealtime.co.uk/xPF-Matrox_Rainbow_Runner_Studio_MGA_MYST_RRSTI
опять же знаем где найти, но, увы, человек "за так" ее не отдаст, а платить рублев 500-700 за такой раритет особого смысла не представляет :(
Я так понимаю, это принципиальный интерес - из г. слепить пулю?
Могу сказать, что это будет г-ная пуля.
Задачи хоть какие стоят?
Так и есть !
Ну не скажите, далеко не всегда... Я бы сказал редко
Задача пока стоит одна - собрать микропроцессорную систему, обладающую минимальным энегопотреблением и физическими размерами, имеющую видео вход\выход
Реально для чего все это надо скажу если все получится ;)
Везде, где ставиться задача построить нечто подобное за деньги, конечно можно пойти и закупиться комплектующими, но тут я бы сказал профинтерес
Вот именно!
Что самое интересное - подобный "принципиальный интерес" возникает всякий раз когда в руки попадает что то неординарное! :)
Со стороны это выглядит, наверное, как безумие - разбираться в какой то проблеме, когда есть более удачные\готовые решения - успевай только бало отваливать :)
Можно конечно пойти еще более сложным и интересным путем - выпаять этот SAA7111A а с ним и 7003 заодно, к этому ATмегу, памяти, и.т.д. На это просто времени уйдет немерянно, с одним только протоколом CompactFlash разбираться сколько...
Сейчас проще использовать готовую платформу (DOS\Win), я не думаю что несовместимость окажется настолько принципиальной. Тем более что использовать DOS\Win гораздо разумнее чем строить свою систему и разрабатывать свою платформу с претензией на универсальность...
Ну, да это уже оффтоп... :)
А Вы установите POST-карту, и сообщите код останова, т.к. есть два варианта: 2Ah и 32h.
ISA Post карта останавливается на 31h
Все-таки кривой PCI ???
Добавлено спустя 8 часов 33 минуты 49 секунд:
icbook, а для AMIшного биоса видеоадаптер - это всего лишь ROM с сигнатурой 55AA в области C000 или еще какие проверки идут ?
Вот с ISA в\к можно всю память из панелек поснимать, адаптер не работает, а POST проходит
Но если вытащить BIOS то POST останавливается на 31h
Значит видео-памть не проверяется?
И по какому адресу видео-биос передается управление? (мне нужно иниц. облать найти в видео-биос)
Добавлено спустя 12 часов 49 минут 51 секунду:
2ALL , у кого если есть BIOS от этого игла - просьба - отмыльте пожалуйста, почему-то не получается слить дамп :(
Безумству храбрых...
И всё-таки, что это должно получиться в результате?
Есть нездоровые подозрения, что кривая PCI и полное отсутствие BM не дадут реализовать задуманное. Всё-таки речь идет о video-in, а это накладывает определённые требования к промзводительности...
Вся подсистема 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] однако почитав такие топики - https://rom.by/phpBB2/viewtopic.php?t=8956 - начнешь относиться к этой идее с опаской - как далеко можно уйти от такого простого, как казалось, вопроса как внедрение видое-биос в системный :)
[/off]
Ситуация осложняется несколькими факторами
- на плате AMI Bios
- он сильно покалеченный
- непакованный (+?)
Кто может что посоветовать? Мне конечно интереснее способ программный, сейчас начну понемножку изучать код биоса, хотя понимаю что допаять доп. панель будет быстрее.
Стоит ли оно того?
Кто смотрел код Eagle BIOS под NEC Power TX, сильно запутанный код?
Вопросы касаются ROMSCAN, а точнее той части что копирует код из микросхемки в основную память
Вот сам ROMSCAN
[code:1]
Параметры - 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 Выход
[/code:1]
Вот непонятная процедура проверки
[code:1]
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 Выход
[/code:1]
А вот и само копирование
[code:1]
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 Выход
[/code:1]
Непонятен сам механизм
К какому устройству относятся порты E0,E1 ?
И что можно перенастроить таким образом, чтобы обычная пересылка из области памяти в саму себя превратилась вдруг в копирование из памяти устройства на шине в системную память??
Добавлено спустя 21 час 20 минут 13 секунд:
Я неправильно интерпретировал процедуру PREPARE - то что я считал ошибкой на самом деле - успешное выполнение :)
Должно быть так
[code:1]
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)
[/code:1]
Получается копирование вызывается если в PCI не найден видеоадаптер, а значит это не мой случай
Все предыдущие вопросы пока сняты
Надо искать, где область 3AC2 заполняется