Pull to refresh

Comments 58

А в текстовом режиме не пробовали ее завести?
Нет, не пробовал. Мне хотелось графики. :) Текст можно и без ISA-видеокарты выводить легко. Но вот по ссылке, откуда я взял код инициализации, там человек заводил в разных режимах.
Не плохо было бы вместо регистра адреса счётчик добавить, что бы легко можно было инкрементировать адрес, когда пишешь пакетом, так быстрее будет работа с картой.
Верно. :) Есть счётчики с установкой значения — они бы отлично подошли.
ИЕ7 :)
ps вот так и рождается GPU :)
UFO just landed and posted this here
Верно. На youtube в описании я указал, что оговорился. :) Надо и тут написать.
UFO just landed and posted this here

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

Слабые МК надо просто выбрасывать. STM32F030 не сказать чтобы дорого стоит, а скорость обеспечивает на порядок быстрее.
как активный пользователь STM32F030 (уважающий старые микроконтроллеры) скажу —
ну не на порядок, а в разы
На 320х240@16bit (ILI9341) у меня что-то около 20 fps получалось, сможете на атмеге хотя бы 5 fps? Большие STM32 c FSMC конечно повеселее работают, но и так неплохо…
Отображаю >60 fps на ssd1306 на xmega128.
Просто использую DMA
ssd1306 — однобитный, с разрешением 128х64. Полный кадр занимает всего 1 кб (против 150 кб на ILI9341) При максимальной скорости(для ssd1306) 10 Мгц на SPI шине на нем легко получить несколько сотен fps. Так что 60 fps — как то жидко, что с DMA, что без DMA.
Вдогонку, частота GPIO у STM32F0 — 2 Мгц, чтобы залить один пиксель при параллельном подключении ILI9341 нужно 2 раза переключить WR, получаем где-то 1 Мпикс/с, для ssd1306@10МГц — где-то 12 Мпикс/с.
В смысле, медленно? Вы не смотрите, что там на видео картинка медленно рисуется — тут не видеокарта и не микроконтроллер виноваты — тут передача данных сделана через LPT-порт компьютера, который эмулирует SPI с использованием библиотеки inpout32.h — она позволяет напрямую дёргать ножками LPT-порта в Windows, но делает это весьма небыстро. Отсюда и медленная скорость передачи данных. Микроконтроллер, конечно, тоже не очень быстр — у него частота всего 16 МГц, но если взять мощный STM32 последних серий…

А так — смысл видеокарты — отображать картинку. Эти видеокарты не имеют на борту ускорителей, что вполне логично — они конца 80 начало 90 годов. Зато с помощью такой карты вполне себе прилично идёт Doom на старом компьютере типа i486. А это довольно хороший FPS. То есть, активировав такую видеокарту с микроконтроллера можно с неменьшей скоростью рисовать всю нужную графику с множеством цветов (для VGA — максимум 256 цветов), что часто и требуется.
Вроде бы данные видеокарты и 16 битный цвет держат, возможно для больших разрешений надо ещё памяти добавить.
не отрицая познавательности вашей информации, всё же спрошу —
если не секрет, а в чем практический смысл данной работы?
Для меня он был в применении старой видеокарты. :) Как видите, оказалось удобно подключить к этому блоку сенсор от мышки и смотреть на экране, что же он видит. Также можно подключить всё что угодно — было бы желание. :)
Да и вообще люблю я старую электронику. :)

А так — делал я и VGA видеокарту на atmeag48. Просто из интереса. Можно и на FPGA сделать — там же просто нужно времена счётчиками отработать, а ЦАП'ом выдать сигнал.
А так — делал я и VGA видеокарту на atmeag48.

А можете рассказать? Интересная тема.

Завидую по белому вашему энтуазизму и опыту (:


Спасибо что воодушевили меня на пару дней!

Не завидуйте. :) Тут опыта нет. Это жутчайший примитив — это вам любой FPGA-шник скажет.

В конце августа была статья "Видеокарта VGA для микроконтроллера"

https://habr.com/ru/companies/timeweb/articles/756430/

ПЛИС MAX II Altera EPM240

и рисованием занята сама stm32. ну и для размещения видеопамяти придется взять далеко не самую бюджетную stm.
Отличная статья. Много лет думал ISA-видюхи так помучать, да руки так и не дошли. Спасибо!
У меня есть второй пенёк, там есть все слоты — и ISA, и AGP, и PCI.
На нём сейчас стоит WinXP.
Нашёл такую ISAшную видеокарту (1990-й год, вроде 512 кб видеопамяти), решил попробовать, будет ли работать. Работает, но вот загрузка компьютера почему-то стала идти втрое дольше, чем с AGP- или PCI-видеокартой.
Между окончанием теста BIOS и стартом винды проходит секунд 30-40.
Ну, и ещё очень прикольно выглядит запуск какого-нибудь видеоролика с очень низким FPS и в режиме 16 цветов.
И вообще интерфейс винды отрисовывается на этой видеокарте неспешно, успеваешь заметить отрисовку всяких элементов окон.

Как-нибудь руки дойдут — поставлю на этот ПК Win98 и ещё добавлю ISAшную звуковуху и ISAую сетевую карту с BNC-разъёмом, там как раз 3 слота ISA. Будет чудный комп))
ISA не PnP шина. возможно при наличии устройств на ISA умный BIOS (уже эпохи PnP) что то пытается просканировать.
PnP кстати не характеристика шины, а протокол и принцип конфигурирования устройства, для «не PnP» устройств характерно наличие обильного количества джамперов с помощью которых выставлялись номера прерываний, базовый адрес портов ввода вывода и тп, и нужно следить самому чтобы не попасть на конфликт с другими платами/устройствами.
PS сомневающимся гуглить «Plug and Play ISA Specification»
честно говоря наверн просто не встречал PnP ISA плат. да и знакомство с железом этого поколения было больше в виде разработки ISA платы и никакого PnP там конечно же не было
Странно. У меня есть видео загрузки AMD 486DX2-66 с 8 МБ ОЗУ, этой видеокартой и Windows 95. :)
Вот:

Время загрузки — около 30 секунд. :)
Извиняюсь. :) Действительно — забыл за давностью лет. Но с Trident 9000i всё точно с такой же скоростью грузится. :)
Современные карты позволяют проецировать свою память на адресное пространство процессора (началось это на картах поддерживающих спецификацию VESA 2.0 вроде, но в любом случае уже PCI). Старые карты работали с графикой через окно в 128 кб в первом мегабайте памяти (A000-BFFF). Так как цветные режимы очень прожорливы, то для отображения точек может потребоваться активное переключение окна проецирования.
Графический режим 640х480 в сумме это 307200 точек, требуемый объем памяти для разных цветовых палитр:
16 цветов — 153600 байт
256 цветов — 307200 байт
32768/65536 цветов — 614400 байт
Как видно, для работы через окно потребуется лишнее действие по проверке активного проецирования и переключения окон.
А подсмотреть в ядре Линукса драйвера?
Вряд ли поможет. Дело в том, что карты инициализируются самостоятельно — для этого у них стоит BIOS на плате. Собственно, поэтому раньше, когда Mac был не на Intel, карты с PC на Mac не работали и наоборот — в этой микросхемке должен быть код под нужный процессор и в нужных адресах. При запуске BIOS вызывает этот код, и карта сама себя запускает. А вот дальше уже грузится Linux, Windows и т.п. системы и они дальше уже работают с картой либо через стандартные VGA-SVGA режимы, либо используют данные для конкретной платы.
Когда откомментил — сам засомневался уже, спасибо, что объяснили подробней, я то глубже чем LPT подёргать на linux ничего не пробовал
Мы очень плотно занимались как раз именно этой темой — запуск видеокарте в линуксе, когда её видео биос не отработал на старте.
Делали такое для видеокарт 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 такое не пройдет, т.к. индекс и значение пишутся в один порт.

Огромное спасибо! Надо попробовать достать снова эту игрушку и поиграть с инициализацией.
Насколько я помню, у Трайдента 8900 по жизни была проблема с «отвалом цветов» на SVGA-мониторах — иногда после загрузки включался черно-белый режим. Исправлялось в те времена какой-то очень простой утилитой с названием вроде vgacolor.com
или хардварное решение: ногу в VGA разъеме от земли откусывали))
Для некоторых видеокарт нужно подключить -5 В и -12 В и сигнал OSC его можно генерировать простейшим генератором на К155ЛН1
javascript obfuscator
Мдя… такое ощущение, что микроконтроллер отсылает данные на видюху почтой россии…
Он так медленно получает. Добавить бы в регистры инкремент. Да и видюху поменять, насколько знаю, циррус лоджики были тогда самые быстрые, а трайдент такой есть, он даже не можер реализовать всю скорость ISA шины.
Да, цайрус быстрый был. У меня десять лет назад была и WD какая-то. Но в том-то и дело, что я, когда это всё заполучил, часть пустил на детали. Ой, дурак! :( И остались только трайдент и вот эта OKI да ещё несколько EGA с чипом Paradise — эти даже пробовать не хочу — не к чему EGA подключать, да и 16 цветов совсем несерьёзно. О! Вспомнил. Есть ещё одна у меня — там EGA+VGA видеовыход. Чистая 8 бит. Но марку не помню — сейчас все карты и матплаты лежат в коробке, которая заставлена столом и прочим, так что и не достать.

А вот если stm32 поставить, то что-то мне кажется, нужно контакты с поддержкой 5 В подключать — шина всё-таки 5 В и stm32 там не только писать на неё будет.
А я как-то на досуге придумывал схему моста шины ISA на CPLD для stm32f103. Много разного железа валяется, хочется заюзать его в своих проектах. Да и текстовый режим рулит!
Тот случай когда дома лежит рабочий 286-й с видеокартой Trident :)
image

UFO just landed and posted this here
UFO just landed and posted this here
В стародавние времена книжка Robert Jourdain была настольной библией для низкоуровневого программирования. Там расписаны все прерывания и порты в IBM PC. Вот первый попавшийся линк с книжкой — Справочник программиста на IBM PC Правда боюсь, что самый поздний адаптер там это EGA (предшественник VGA) Но по портам для одинаковых графических режимов они должны быть совместимы.
Sign up to leave a comment.

Articles