Графический "сопроцессор" на ардуино - реально ли?

Старый спектрумистский форум

Moderator: Shaos

Santa
Novelist
Posts: 25
Joined: 18 Feb 2006 08:19

Графический "сопроцессор" на ардуино - реально ли?

Post by Santa »

Вспомнилась старая идея - прикрутить ардуину или что-то пошустрей к Спектруму для ускорения отрисовки графики.
Например, нужно быстро нарисовать окружность - отправляем в отдельный порт код "окружность", X, Y и R, ардуинка это ловит, рассчитывает, и кладёт получившиеся байтики напрямки в видеопамять.
С электроникой сто лет не игрался, всё позабыл, так что даже не знаю, с какой стороны подойти.
Такое вообще реально реализовать?

Было бы интересно, если бы реализовать не только графические примитивы типа окружности и линий, но и заштрихованные треугольники - было бы отлично для быстрой 3D графики. Послал X1,Y1,X2,Y2,X3,Y3, код заливки, и у тебя уже на экране закрашенный треугольник.
User avatar
Lavr
Supreme God
Posts: 16682
Joined: 21 Oct 2009 08:08
Location: Россия

Re: Графический "сопроцессор" на ардуино - реально ли?

Post by Lavr »

Santa wrote:Вспомнилась старая идея - прикрутить ардуину или что-то пошустрей к Спектруму для ускорения отрисовки графики.
Например, нужно быстро нарисовать окружность - отправляем в отдельный порт код "окружность", X, Y и R, ардуинка это ловит, рассчитывает, и кладёт получившиеся байтики напрямки в видеопамять.
С электроникой сто лет не игрался, всё позабыл, так что даже не знаю, с какой стороны подойти.
Такое вообще реально реализовать?
Вполне реально. Почему бы и нет? Но вылезет много подводных камней с разделением памяти и т.п.
Ещё в далёкое время, когда ардуинок не придумали, и был у меня лишь "Специалист" на 580ВМ80,
мне тоже очень хотелось поставить второй 580ВМ80 для ускорения отрисовки графики...
Но не срослось...

На эту тему мы тут уже много лет рассуждаем вот где:
viewtopic.php?f=46&t=7540
iLavr
Santa
Novelist
Posts: 25
Joined: 18 Feb 2006 08:19

Re: Графический "сопроцессор" на ардуино - реально ли?

Post by Santa »

Lavr wrote: Вполне реально. Почему бы и нет? Но вылезет много подводных камней с разделением памяти и т.п.
Мне бы кто схемку нарисовал, а с программщиной я буду дальше сам разбираться.
Я так понимаю, на время записи в ОЗУ надо проц как-то паузить?
И как правильно прикрутить ардуинку к работающей ОЗУ, чтобы ничего не спалить?
И уж самое для меня недоступное - как организовать новый порт, и прикрутить его к ардуинке?
У меня есть живая "Дельта-С02"
User avatar
Lavr
Supreme God
Posts: 16682
Joined: 21 Oct 2009 08:08
Location: Россия

Re: Графический "сопроцессор" на ардуино - реально ли?

Post by Lavr »

Santa wrote:Мне бы кто схемку нарисовал, а с программщиной я буду дальше сам разбираться.
Схемку нарисовать - это надо ориентироваться на то, какая память, какое её быстродействие.
Santa wrote:Я так понимаю, на время записи в ОЗУ надо проц как-то паузить?
Опять же - смотря как сделана память.
Общая вся память, или видео-память отдельно. Есть ли к ней доступ ЦП, или всё - через ардуинку...
Santa wrote:И как правильно прикрутить ардуинку к работающей ОЗУ, чтобы ничего не спалить?
Лучше всего, конечно, АККУРАТНО! :ebiggrin:
Santa wrote:И уж самое для меня недоступное - как организовать новый порт, и прикрутить его к ардуинке?
Это и для меня сейчас недоступно, пока не определились со всем остальным. 8)
Santa wrote:У меня есть живая "Дельта-С02"
Единственное, что без лишних вопросов радует... :wink:

P.S. В принципе можно вот это почитать: https://demid.net/2018/07/26/графический-vga-модуль-для-микроконтрол/
iLavr
User avatar
Shaos
Admin
Posts: 24028
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Графический "сопроцессор" на ардуино - реально ли?

Post by Shaos »

А чего ардуинка то? Она тормозная :roll:
Люди сразу Raspberry Pi ставят - она ведь с HDMI выходом ;)
Там даже можно подать команду "запустить линух" :lol:

P.S. Вообще я хотел чото такое поделать, но на FPGA - чтобы был честный 3D движок (на полигонах с одноцветной заливкой или хотя бы на треугольниках), причём опенсорсный ;)
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 24028
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Графический "сопроцессор" на ардуино - реально ли?

Post by Shaos »

Lavr wrote:Общая вся память, или видео-память отдельно. Есть ли к ней доступ ЦП, или всё - через ардуинку...
в классическом ZX-спектруме с видеопамятью всё просто - на шину (в edge-коннектор сзади) вешается слушатель, который ловит все операции записи в область видеопамяти - этой информации достаточно, чтобы построить нормальную копию экрана для выплёвывания её в нормальный видеовыход (VGA, HDMI и т.д.), а вот под дополнительные команды можно отвести 256-байтовую зону буфера принтера, которая идёт непосредственно за видеопамятью - запись туда тоже можно ловить и если там команда, то можно тормозить проц (либо не тормозить проц, а использовать какой-то порт для индикации головному процу того факта, что команда отрисовки звершилась).

P.S. в 128кб ZX-спектруме и клонах (типа Пентагона) всё несколько запутаннее т.к. там есть теневая видеостраница, запись в которую отловить будет сложнее
Я тут за главного - если что шлите мыло на me собака shaos точка net
Santa
Novelist
Posts: 25
Joined: 18 Feb 2006 08:19

Re: Графический "сопроцессор" на ардуино - реально ли?

Post by Santa »

Lavr wrote:
Santa wrote:Мне бы кто схемку нарисовал, а с программщиной я буду дальше сам разбираться.
Схемку нарисовать - это надо ориентироваться на то, какая память, какое её быстродействие.
Santa wrote:Я так понимаю, на время записи в ОЗУ надо проц как-то паузить?
Опять же - смотря как сделана память.
Общая вся память, или видео-память отдельно. Есть ли к ней доступ ЦП, или всё - через ардуинку...
Видеопамять самого Спектрума, монохром, без области атрибутов. Читаем байтик, накладываем на него наш результат, кладём обратно, читаем следующий байтик, и т.д.
Santa
Novelist
Posts: 25
Joined: 18 Feb 2006 08:19

Re: Графический "сопроцессор" на ардуино - реально ли?

Post by Santa »

Shaos wrote:в классическом ZX-спектруме с видеопамятью всё просто - на шину (в edge-коннектор сзади) вешается слушатель, который ловит все операции записи в область видеопамяти - этой информации достаточно, чтобы построить нормальную копию экрана для выплёвывания её в нормальный видеовыход (VGA, HDMI и т.д.)
Не, это будет слишком сложно, добавлять видеовыход.
Именно сопроцессор - скармливаем ему задание, он просчитывает, и выдаёт результат напрямую в видеопамять.
Shaos wrote:P.S. в 128кб ZX-спектруме и клонах (типа Пентагона) всё несколько запутаннее т.к. там есть теневая видеостраница, запись в которую отловить будет сложнее
Пока лучше ограничиться 48к версией, чтоб не усложнять, а про 128к подумать потом.
User avatar
Shaos
Admin
Posts: 24028
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Графический "сопроцессор" на ардуино - реально ли?

Post by Shaos »

Santa wrote:Видеопамять самого Спектрума, монохром, без области атрибутов. Читаем байтик, накладываем на него наш результат, кладём обратно, читаем следующий байтик, и т.д.
Не - ненадо так делать. Я выше написал как надо - просто слушать шину и в "сопроцессоре" строить копию экрана в памяти "сопроцессора" - вывод на телевизор/дисплей с сопроцессора (т.е. видеовыход самого спектрума повисает в воздухе и никуда не подключается)
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 24028
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Графический "сопроцессор" на ардуино - реально ли?

Post by Shaos »

Santa wrote:
Shaos wrote:в классическом ZX-спектруме с видеопамятью всё просто - на шину (в edge-коннектор сзади) вешается слушатель, который ловит все операции записи в область видеопамяти - этой информации достаточно, чтобы построить нормальную копию экрана для выплёвывания её в нормальный видеовыход (VGA, HDMI и т.д.)
Не, это будет слишком сложно, добавлять видеовыход.
Это как раз самое простое ;)
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Lavr
Supreme God
Posts: 16682
Joined: 21 Oct 2009 08:08
Location: Россия

Re: Графический "сопроцессор" на ардуино - реально ли?

Post by Lavr »

Shaos wrote:
Santa wrote:
Shaos wrote:в классическом ZX-спектруме с видеопамятью всё просто - на шину (в edge-коннектор сзади) вешается слушатель, который ловит все операции записи в область видеопамяти - этой информации достаточно, чтобы построить нормальную копию экрана для выплёвывания её в нормальный видеовыход (VGA, HDMI и т.д.)
Не, это будет слишком сложно, добавлять видеовыход.
Это как раз самое простое ;)
Shaos, мне кажется, ты не понял... это не будет графический сопроцессор.
Потому как процессор как рисовал в памяти ZX-спектрум, так и рисует - а его дублируют.
Человек, насколько я понял, хочет избавить ЦП от рисования графики...
iLavr
User avatar
Shaos
Admin
Posts: 24028
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Графический "сопроцессор" на ардуино - реально ли?

Post by Shaos »

А что же это? Математический сопроцессор? :)
Ведь задача "нужно быстро нарисовать окружность"
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
askfind
Devil
Posts: 800
Joined: 04 Jan 2016 09:15
Location: Russia, S.- Peterburg

Re: Графический "сопроцессор" на ардуино - реально ли?

Post by askfind »

Графические ускорители сейчас имеются в микроконтроллерах.

Например,

The STM32F469 and STM32F479 lines deliver the highest ARM® Cortex®-M4 performance and embed large memories and rich peripherals to enable the most advanced consumer, industrial and medical
applications. The ART Accelerator™ for Flash memory and the Chrom-ART Accelerator™ for graphics coupled with LCD-TFT and MIPI-DSI display interfaces enables an advanced user interface while granting enough resources for demanding real-time processing.

https://www.st.com/content/st_com/en/ec ... rface.html

Использовал в проектах. Скорость вывода > 60 fps.

Включается аппаратный графический вывод области памяти. Далее, как в ZX управляется области памяти SRAM., которое 128 кБ поместить.
"Ученье свет, а неученье — тьма. Дело мастера боится, и коль крестьянин не умеет сохою владеть — хлеб не родится." (С)
Santa
Novelist
Posts: 25
Joined: 18 Feb 2006 08:19

Re: Графический "сопроцессор" на ардуино - реально ли?

Post by Santa »

Lavr wrote:Shaos, мне кажется, ты не понял... это не будет графический сопроцессор.
Потому как процессор как рисовал в памяти ZX-спектрум, так и рисует - а его дублируют.
Человек, насколько я понял, хочет избавить ЦП от рисования графики...
Не избавить, а дополнить.
Пусть Z80 пишет в видеопамять Спектрума чего хочет.
Но тут программа посылает в порт нашей ардуинки серию байтов "код окружности", "Х", У", "R". Ардуинка высчитывает эту окружность, берёт нужный байт из видеопамяти Спектрума, накладываает на него нужные пиксели для рисования окружности, кладёт обратно в видеопамять. И так, пока содержимое видеопамяти не будет модифицировано так, что там появится окружность.
Мне почему-то кажется, что ничего сложного не должно быть. Организовать порт и реализовать прямой доступ ардуинки к видеопамяти. Единственно, по тактам придётся втиснуться, чтобы не сильно замедлялась работа остального добра.
Santa
Novelist
Posts: 25
Joined: 18 Feb 2006 08:19

Re: Графический "сопроцессор" на ардуино - реально ли?

Post by Santa »

Shaos wrote:А что же это? Математический сопроцессор? :)
Ведь задача "нужно быстро нарисовать окружность"
Окружности, линии, треугольники с/без заливкой, можно спрайты заранее подгруженные.
Чтобы освободить проц от большинства нагрузки на графику, не потерять совместимость с уже имеющимися программами, очень быстро рисовать графику. При этом чтобы по минимуму модифицировать сам Спектрум, не добавляя ничего в его ПЗУ, не сложнее подключения AY.