Comments 58
вообще нет смысла так медленно работать с графикой и технически неоправданно (ибо надо ещё найти такую завалявшуюся видиюху)
смысл видео карты, убыстрять процессы, а не на оборот
для слабых МК надо специальные решения
ну не на порядок, а в разы
Просто использую DMA
А так — смысл видеокарты — отображать картинку. Эти видеокарты не имеют на борту ускорителей, что вполне логично — они конца 80 начало 90 годов. Зато с помощью такой карты вполне себе прилично идёт Doom на старом компьютере типа i486. А это довольно хороший FPS. То есть, активировав такую видеокарту с микроконтроллера можно с неменьшей скоростью рисовать всю нужную графику с множеством цветов (для VGA — максимум 256 цветов), что часто и требуется.
если не секрет, а в чем практический смысл данной работы?
Да и вообще люблю я старую электронику. :)
А так — делал я и VGA видеокарту на atmeag48. Просто из интереса. Можно и на FPGA сделать — там же просто нужно времена счётчиками отработать, а ЦАП'ом выдать сигнал.
А так — делал я и VGA видеокарту на atmeag48.
А можете рассказать? Интересная тема.
www.artekit.eu/vga-output-using-a-36-pin-stm32
На нём сейчас стоит WinXP.
Нашёл такую ISAшную видеокарту (1990-й год, вроде 512 кб видеопамяти), решил попробовать, будет ли работать. Работает, но вот загрузка компьютера почему-то стала идти втрое дольше, чем с AGP- или PCI-видеокартой.
Между окончанием теста BIOS и стартом винды проходит секунд 30-40.
Ну, и ещё очень прикольно выглядит запуск какого-нибудь видеоролика с очень низким FPS и в режиме 16 цветов.
И вообще интерфейс винды отрисовывается на этой видеокарте неспешно, успеваешь заметить отрисовку всяких элементов окон.
Как-нибудь руки дойдут — поставлю на этот ПК Win98 и ещё добавлю ISAшную звуковуху и ISAую сетевую карту с BNC-разъёмом, там как раз 3 слота ISA. Будет чудный комп))
PS сомневающимся гуглить «Plug and Play ISA Specification»
Вот:
Время загрузки — около 30 секунд. :)
Графический режим 640х480 в сумме это 307200 точек, требуемый объем памяти для разных цветовых палитр:
16 цветов — 153600 байт
256 цветов — 307200 байт
32768/65536 цветов — 614400 байт
Как видно, для работы через окно потребуется лишнее действие по проверке активного проецирования и переключения окон.
Делали такое для видеокарт AMD Caicos и Silicon Motion (sm750).
Т.к. Архитектура у нас не х86, то никакой видеобиос на старте не отрабатывает, в u-boot'е драйверов тоже нет.
Когда ядро уже стартует — оно грузит драйвер видеокарты и прекрасно её запускает.
Так что посмотреть в коде ядра алгоритм инициализации — это вполне себе путь.
Другое дело что, например, в драйвере АМД мегабайты кода, который задолбаешься вкуривать. Но вот для sm750, например, вполне успешно портанули драйвер из ядра в u-boot.
Ещё может в апстрим засабмитим, если начальство добро даст.
Но вот что странно. У контроллера атрибутов нет регистра 0x20! У него регистр последний 0x14. И даже если такой регистр бы был, почему нет записи значения? Должно же быть две записи в порт. А тут она одна.
3C0h: Attribute Controller: Address register
bit 0-4 Address of data register to write to port 3C0h or read from port 3C1h
5 If set screen output is enabled and the palette can not be modified,
if clear screen output is disabled and the palette can be modified.
Отсюда: https://github.com/johnsoft/tower-pc/blob/master/docs/video/vgadoc4b/VGAREGS.TXT
(там кстати есть еще файлы с описанием регистров конкретных видеокарт, и трайдентов в частности)
Т.е. запись этого бита запрещает редактировать палитру.
Это связано с тем, что некоторые карты не могли выводить картинку пока производится запись в палитру, поэтому ее положено редактировать только во время обратного хода луча.
Я поискал в интернете и нашёл, что почему-то (в книгах я этого не нашёл) можно записать, скажем, в регистр 0x10 значение 0x20 за один раз просто объединив биты: System_Out8(ATTRCON_ADDR,0x10|0x20); Тогда указанная запись пишет 0x20 в регистр 0x00? Но почему это работает? И так ли это?
Скорее всего вы спутали это с двухбайтовым out-ом. типа такого:
mov dx, 3d4h
mov ax, 5501h
out dx,ax
это позволяет записать в регистр 1 значение 55.
01 запишется в 3d4
55 в 3d5
С портом 3C0 такое не пройдет, т.к. индекс и значение пишутся в один порт.
javascript obfuscator
А вот если stm32 поставить, то что-то мне кажется, нужно контакты с поддержкой 5 В подключать — шина всё-таки 5 В и stm32 там не только писать на неё будет.
Старые ISA-видеокарты и AVR