nedoPC.org

Community of electronics hobbyists established in 2002
Atom Feed | View unanswered posts | View active topics It is currently 27 Jan 2022 14:43



Reply to topic  [ 47 posts ]  Go to page 1, 2, 3, 4  Next
Графический "сопроцессор" на ардуино - реально ли? 
Author Message
Novelist

Joined: 18 Feb 2006 09:19
Posts: 25
Reply with quote
Вспомнилась старая идея - прикрутить ардуину или что-то пошустрей к Спектруму для ускорения отрисовки графики.
Например, нужно быстро нарисовать окружность - отправляем в отдельный порт код "окружность", X, Y и R, ардуинка это ловит, рассчитывает, и кладёт получившиеся байтики напрямки в видеопамять.
С электроникой сто лет не игрался, всё позабыл, так что даже не знаю, с какой стороны подойти.
Такое вообще реально реализовать?

Было бы интересно, если бы реализовать не только графические примитивы типа окружности и линий, но и заштрихованные треугольники - было бы отлично для быстрой 3D графики. Послал X1,Y1,X2,Y2,X3,Y3, код заливки, и у тебя уже на экране закрашенный треугольник.


27 Nov 2021 13:17
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 09:08
Posts: 7777
Location: Россия
Reply with quote
Santa wrote:
Вспомнилась старая идея - прикрутить ардуину или что-то пошустрей к Спектруму для ускорения отрисовки графики.
Например, нужно быстро нарисовать окружность - отправляем в отдельный порт код "окружность", X, Y и R, ардуинка это ловит, рассчитывает, и кладёт получившиеся байтики напрямки в видеопамять.
С электроникой сто лет не игрался, всё позабыл, так что даже не знаю, с какой стороны подойти.
Такое вообще реально реализовать?

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

На эту тему мы тут уже много лет рассуждаем вот где:
http://www.nedopc.org/forum/viewtopic.php?f=46&t=7540

_________________
iLavr


27 Nov 2021 13:32
Profile
Novelist

Joined: 18 Feb 2006 09:19
Posts: 25
Reply with quote
Lavr wrote:
Вполне реально. Почему бы и нет? Но вылезет много подводных камней с разделением памяти и т.п.

Мне бы кто схемку нарисовал, а с программщиной я буду дальше сам разбираться.
Я так понимаю, на время записи в ОЗУ надо проц как-то паузить?
И как правильно прикрутить ардуинку к работающей ОЗУ, чтобы ничего не спалить?
И уж самое для меня недоступное - как организовать новый порт, и прикрутить его к ардуинке?
У меня есть живая "Дельта-С02"


27 Nov 2021 13:47
Profile
Supreme God
User avatar

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

P.S. В принципе можно вот это почитать: https://demid.net/2018/07/26/графический-vga-модуль-для-микроконтрол/

_________________
iLavr


27 Nov 2021 15:20
Profile
Admin
User avatar

Joined: 09 Jan 2003 00:22
Posts: 20088
Location: Silicon Valley
Reply with quote
А чего ардуинка то? Она тормозная :roll:
Люди сразу Raspberry Pi ставят - она ведь с HDMI выходом ;)
Там даже можно подать команду "запустить линух" :lol:

P.S. Вообще я хотел чото такое поделать, но на FPGA - чтобы был честный 3D движок (на полигонах с одноцветной заливкой или хотя бы на треугольниках), причём опенсорсный ;)

_________________
:eugeek: https://twitter.com/Shaos1973


27 Nov 2021 22:05
Profile WWW
Admin
User avatar

Joined: 09 Jan 2003 00:22
Posts: 20088
Location: Silicon Valley
Reply with quote
Lavr wrote:
Общая вся память, или видео-память отдельно. Есть ли к ней доступ ЦП, или всё - через ардуинку...

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

P.S. в 128кб ZX-спектруме и клонах (типа Пентагона) всё несколько запутаннее т.к. там есть теневая видеостраница, запись в которую отловить будет сложнее

_________________
:eugeek: https://twitter.com/Shaos1973


27 Nov 2021 22:14
Profile WWW
Novelist

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

Видеопамять самого Спектрума, монохром, без области атрибутов. Читаем байтик, накладываем на него наш результат, кладём обратно, читаем следующий байтик, и т.д.


28 Nov 2021 08:27
Profile
Novelist

Joined: 18 Feb 2006 09:19
Posts: 25
Reply with quote
Shaos wrote:
в классическом ZX-спектруме с видеопамятью всё просто - на шину (в edge-коннектор сзади) вешается слушатель, который ловит все операции записи в область видеопамяти - этой информации достаточно, чтобы построить нормальную копию экрана для выплёвывания её в нормальный видеовыход (VGA, HDMI и т.д.)

Не, это будет слишком сложно, добавлять видеовыход.
Именно сопроцессор - скармливаем ему задание, он просчитывает, и выдаёт результат напрямую в видеопамять.
Shaos wrote:
P.S. в 128кб ZX-спектруме и клонах (типа Пентагона) всё несколько запутаннее т.к. там есть теневая видеостраница, запись в которую отловить будет сложнее

Пока лучше ограничиться 48к версией, чтоб не усложнять, а про 128к подумать потом.


28 Nov 2021 08:34
Profile
Admin
User avatar

Joined: 09 Jan 2003 00:22
Posts: 20088
Location: Silicon Valley
Reply with quote
Santa wrote:
Видеопамять самого Спектрума, монохром, без области атрибутов. Читаем байтик, накладываем на него наш результат, кладём обратно, читаем следующий байтик, и т.д.

Не - ненадо так делать. Я выше написал как надо - просто слушать шину и в "сопроцессоре" строить копию экрана в памяти "сопроцессора" - вывод на телевизор/дисплей с сопроцессора (т.е. видеовыход самого спектрума повисает в воздухе и никуда не подключается)

_________________
:eugeek: https://twitter.com/Shaos1973


28 Nov 2021 14:13
Profile WWW
Admin
User avatar

Joined: 09 Jan 2003 00:22
Posts: 20088
Location: Silicon Valley
Reply with quote
Santa wrote:
Shaos wrote:
в классическом ZX-спектруме с видеопамятью всё просто - на шину (в edge-коннектор сзади) вешается слушатель, который ловит все операции записи в область видеопамяти - этой информации достаточно, чтобы построить нормальную копию экрана для выплёвывания её в нормальный видеовыход (VGA, HDMI и т.д.)

Не, это будет слишком сложно, добавлять видеовыход.

Это как раз самое простое ;)

_________________
:eugeek: https://twitter.com/Shaos1973


28 Nov 2021 14:13
Profile WWW
Supreme God
User avatar

Joined: 21 Oct 2009 09:08
Posts: 7777
Location: Россия
Reply with quote
Shaos wrote:
Santa wrote:
Shaos wrote:
в классическом ZX-спектруме с видеопамятью всё просто - на шину (в edge-коннектор сзади) вешается слушатель, который ловит все операции записи в область видеопамяти - этой информации достаточно, чтобы построить нормальную копию экрана для выплёвывания её в нормальный видеовыход (VGA, HDMI и т.д.)

Не, это будет слишком сложно, добавлять видеовыход.

Это как раз самое простое ;)

Shaos, мне кажется, ты не понял... это не будет графический сопроцессор.
Потому как процессор как рисовал в памяти ZX-спектрум, так и рисует - а его дублируют.
Человек, насколько я понял, хочет избавить ЦП от рисования графики...

_________________
iLavr


28 Nov 2021 17:45
Profile
Admin
User avatar

Joined: 09 Jan 2003 00:22
Posts: 20088
Location: Silicon Valley
Reply with quote
А что же это? Математический сопроцессор? :)
Ведь задача "нужно быстро нарисовать окружность"

_________________
:eugeek: https://twitter.com/Shaos1973


28 Nov 2021 20:36
Profile WWW
Maniac
User avatar

Joined: 04 Jan 2016 10:15
Posts: 280
Location: Russia, S.- Peterburg
Reply with quote
Графические ускорители сейчас имеются в микроконтроллерах.

Например,

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/ecosystems/stm32-graphic-user-interface.html

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

Включается аппаратный графический вывод области памяти. Далее, как в ZX управляется области памяти SRAM., которое 128 кБ поместить.

_________________
"Ученье свет, а неученье — тьма. Дело мастера боится, и коль крестьянин не умеет сохою владеть — хлеб не родится." (С)


28 Nov 2021 22:30
Profile WWW
Novelist

Joined: 18 Feb 2006 09:19
Posts: 25
Reply with quote
Lavr wrote:
Shaos, мне кажется, ты не понял... это не будет графический сопроцессор.
Потому как процессор как рисовал в памяти ZX-спектрум, так и рисует - а его дублируют.
Человек, насколько я понял, хочет избавить ЦП от рисования графики...

Не избавить, а дополнить.
Пусть Z80 пишет в видеопамять Спектрума чего хочет.
Но тут программа посылает в порт нашей ардуинки серию байтов "код окружности", "Х", У", "R". Ардуинка высчитывает эту окружность, берёт нужный байт из видеопамяти Спектрума, накладываает на него нужные пиксели для рисования окружности, кладёт обратно в видеопамять. И так, пока содержимое видеопамяти не будет модифицировано так, что там появится окружность.
Мне почему-то кажется, что ничего сложного не должно быть. Организовать порт и реализовать прямой доступ ардуинки к видеопамяти. Единственно, по тактам придётся втиснуться, чтобы не сильно замедлялась работа остального добра.


29 Nov 2021 03:32
Profile
Novelist

Joined: 18 Feb 2006 09:19
Posts: 25
Reply with quote
Shaos wrote:
А что же это? Математический сопроцессор? :)
Ведь задача "нужно быстро нарисовать окружность"

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


29 Nov 2021 03:40
Profile
Display posts from previous:  Sort by  
Reply to topic   [ 47 posts ]  Go to page 1, 2, 3, 4  Next

Who is online

Users browsing this forum: No registered users and 1 guest


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
cron

Powered by phpBB® Forum Software © phpBB Group
Designed by ST Software.