Speccy - наш выбор!

Speccy - наш выбор! (http://zx-pk.ru/index.php)
-   Программирование (http://zx-pk.ru/forumdisplay.php?f=14)
-   -   Видеорежимы и работа с ними (http://zx-pk.ru/showthread.php?t=1171)

icebear 20th July 2005 13:23

Видеорежимы и работа с ними
 
Возникли вот вопросы у меня. В клонах Спектрума есть уже куча "видеорежимов", позволяющих хоть как-от расширить графические возможности. Линейной адрессацией обладают только видеорежимы Спринтера (хотя может я ошибаюсь?). 512х192 подразумевает деление точек на чётные/нечётные и соотвественно различное местоположение в памяти. Так же это вроде сделано в АТМ. Во всех "случаях" возможна работа с этой "видеопамятью" напрямую, но из-за размера адресной шины это можно осуществить только через банки.
Вопросы следующие:
- это удобно с точки зрения программирования иметь экран, делённый на участки и тем самым с возможностью работы только в выбраном участке?
- скорость вывода графики приемлема при работе с участками экрана через банки?
- нужен ли прямой доступ к видеопамяти или может вместо него лучше иметь возможность управлять неким гипотическим видеопроцессором (давать ему команды на вывод граф. примитивов, текста и т.п.) и не иметь при это никакого прямого доступа?
- если допустить наличие такого спецпроцессора, какие функции он должен выполнять (если можно, то в виде списка)?

Я надеюсь что понятно сформулировал вопросы :)

icebear 21st July 2005 12:19

Я так понял, это никому не надо?
 
Или не интересно? Или я вопросы поставил непонятно?

spensor 21st July 2005 12:37

ИМХО, не в тот раздел запостил. В программирование нужно было.

icebear 21st July 2005 12:49

Quote:

Originally Posted by spensor
ИМХО, не в тот раздел запостил. В программирование нужно было.

Хм, действительно :)

Господа модераторы, как перенести это в другой раздел? Или заново писать?

CHRV 21st July 2005 13:03

Quote:

Originally Posted by icebear
Хм, действительно :)

Господа модераторы, как перенести это в другой раздел? Или заново писать?

Вышла дока по АТМ , в том числе и по програмированию расширенных видеорежимов. Можно скачать и прочитать.
Смотрите на http://atmturbo.narod.ru

icebear 21st July 2005 13:14

Quote:

Originally Posted by CHRV
Вышла дока по АТМ , в том числе и по програмированию расширенных видеорежимов. Можно скачать и прочитать.
Смотрите на http://atmturbo.narod.ru

Качал, читал. Собственно вопрос возник именно из-за подобных организаций экранов.

Максагор 22nd July 2005 04:57

Quote:

Originally Posted by icebear
Возникли вот вопросы у меня. В клонах Спектрума есть уже куча "видеорежимов", позволяющих хоть как-от расширить графические возможности. Линейной адрессацией обладают только видеорежимы Спринтера (хотя может я ошибаюсь?).

Линейная, но зато нет одновременного доступа сразу ко всему экрану, а только к одной текущей строчке (256 байт, если я не ошибаюсь). Надо черех пот обращаться к видеоконтроллеру и щелкать строчками через него.

Quote:

512х192 подразумевает деление точек на чётные/нечётные и соотвественно различное местоположение в памяти. Так же это вроде сделано в АТМ.
Да, именно так.

Quote:

Во всех "случаях" возможна работа с этой "видеопамятью" напрямую, но из-за размера адресной шины это можно осуществить только через банки.
И здесь верно.

Quote:

Вопросы следующие:
- это удобно с точки зрения программирования иметь экран, делённый на участки и тем самым с возможностью работы только в выбраном участке?
- скорость вывода графики приемлема при работе с участками экрана через банки?
Насчет удобства скажу, что большого дискомфорта не испытывал. По крайней мере работать не сложнее, чем с пересчетом адресов для черезполосицы строк ZX-экрана. К тому же, если говорить именно про ATM-1/2/2+, то четные и нечетные столбцы изображения (в текстовом и мультиколорном экранах) расположены и в одной и той же странице, только в разных ее половинках. И только атрибуты лежат в другой странице. Сложнее с EGA-дкраном, где атрибутов нет как класса. Там действительно часть столбцов пикселей лежат в разных страницах. Но не так уж и муторно при выводе графики вовремя переключать страницы, особенно если заранее подготовить для этого нужные регистры. А в случае ATM2/2+ можно вообще запрограммировать диспетчер памяти так, чтобы все необходимые экранные страницы (из всего-то две) одновременно присутствовали в адресном пространстве. Тогда и щелкать портами не надо.

Что касается скорости вывода графики вообще, то размер экрана в 32000 байт оказывает на нее решающее воздействие, а никак не расположение в различных банках. Конечно, тяжеловатые получаются экраны. Ну а в случае с текстовой консолью, полный размер которой всего 4000 байт даже самое тормозное щелканье банками не сможет что-то там сильно затормозить.

Quote:

- нужен ли прямой доступ к видеопамяти или может вместо него лучше иметь возможность управлять неким гипотическим видеопроцессором (давать ему команды на вывод граф. примитивов, текста и т.п.) и не иметь при это никакого прямого доступа?
Желательно в таклм случае было бы иметь и видеопроцессор, и прямой доступ одновременно. Хотя если видеопроцессор очень крутой, то, так и быть, согласен обойтись без него! :) ;)

Quote:

- если допустить наличие такого спецпроцессора, какие функции он должен выполнять (если можно, то в виде списка)?
1) Возможность в любой момент узнать содержимое любого байта видеопамяти (если нет прямого доступа, то через порты). И вообще считывать оттуда любые массивы данных.

2) Работа с различными видеорежимами (консоль, ZX-квадратики, аппаратный мультиколор, каждай точка своим цветом, может быть даже TRUE-color)

3) Вывод спрайта (всего или его части) в любую точку экрана.

4) Морфинг спрайтов, их масштабирование.

5) Автоконвертация спрайтов из одного формата в другой (насколько возможно, без потери качества или с минимальной потерей) - к примеру, надо отобразить цветной спрайт, подготовленный на обычном спеке (цвета квадратиками, черезполосица) на линейный TRUE-COLOR (или обратная ситуация, хе-хе...)

6) Рисование и раскраска графических примитивов.

7) Работа с векторной графикой (ломаные линии, дуги, сокрытие теневых контуров, заливка плоскостей цветом и текстурой, работа с освещением (откуда свет, там плоскость светлее и т.д.)).

8) Может еще что забыл...

Quote:

Я надеюсь что понятно сформулировал вопросы :)
Вполне. :cool:

icebear 22nd July 2005 13:28

В первую очередь хочу поблагодарить за ответ. Теперь по пунктам.


Quote:

Originally Posted by Максагор
Линейная, но зато нет одновременного доступа сразу ко всему экрану, а только к одной текущей строчке (256 байт, если я не ошибаюсь). Надо черех пот обращаться к видеоконтроллеру и щелкать строчками через него.

Другого с 16-ти разрядной шиной не дано. Мог бы спасти eZ80, если бы не его внутренние порты.

Quote:

Originally Posted by Максагор
Насчет удобства скажу, что большого дискомфорта не испытывал. По крайней мере работать не сложнее, чем с пересчетом адресов для черезполосицы строк ZX-экрана.

Понятно. Т.е. работать с кусками видеопамяти через банки труда не составляет. Я почему спросил? Допустим, надо вывести символ или примитив, располагающийся в области экрана, которая приходится на две банки. Это придётся делать bounds check, щёлкать страницами и т.п.

Quote:

Originally Posted by Максагор
К тому же, если говорить именно про ATM-1/2/2+, то четные и нечетные столбцы изображения (в текстовом и мультиколорном экранах) расположены и в одной и той же странице, только в разных ее половинках. И только атрибуты лежат в другой странице. Сложнее с EGA-дкраном, где атрибутов нет как класса. Там действительно часть столбцов пикселей лежат в разных страницах.

Кстати, из книги я не понял, там (в АТМ) разделение идёт по бит-плейнам (согласно EGA стандарту) или всё-таки постранично (т.е. биты цветов лежат физически в одном куске памяти и располагются в нибле)?

Quote:

Originally Posted by Максагор
А в случае ATM2/2+ можно вообще запрограммировать диспетчер памяти так, чтобы все необходимые экранные страницы (из всего-то две) одновременно присутствовали в адресном пространстве. Тогда и щелкать портами не надо.

Удобное решение, согласен.

Quote:

Originally Posted by Максагор
Что касается скорости вывода графики вообще, то размер экрана в 32000 байт оказывает на нее решающее воздействие, а никак не расположение в различных банках. Конечно, тяжеловатые получаются экраны. Ну а в случае с текстовой консолью, полный размер которой всего 4000 байт даже самое тормозное щелканье банками не сможет что-то там сильно затормозить.

Вот здесь я не совсем понял. 32К тяжелы для основного процессора? Или что имеется в виду под тяжестью экрана?


Quote:

Originally Posted by Максагор
Желательно в таклм случае было бы иметь и видеопроцессор, и прямой доступ одновременно. Хотя если видеопроцессор очень крутой, то, так и быть, согласен обойтись без него! :) ;)

Зачем необходим прямой доступ к видеопамяти? А как насчёт дать возможность видеопроцессору читать любой участок основной памяти (при условии, что видеопамять как таковая не входит в карту основной памяти)?


Quote:

Originally Posted by Максагор
1) Возможность в любой момент узнать содержимое любого байта видеопамяти (если нет прямого доступа, то через порты). И вообще считывать оттуда любые массивы данных.

Опять же, не было бы удобнее это делать не через порты, а через общую память? Например задействовать тотже стандартный экран Спектрума в качестве буфера между основным процессором и видеопроцессором? Порты мне кажется медленно.

Quote:

Originally Posted by Максагор
2) Работа с различными видеорежимами (консоль, ZX-квадратики, аппаратный мультиколор, каждай точка своим цветом, может быть даже TRUE-color)

Вот здесь возникло сразу много вопросов? Зачем несколько видеорежимов? Зачем True Colour? Про аппаратный мультиколор и консоль молчу, ибо не вижу им применения абсолютно. Текстовую консоль всегда можно рисовать и совсем не основной процессор этим должен заниматься :)


Quote:

Originally Posted by Максагор
3) Вывод спрайта (всего или его части) в любую точку экрана.

4) Морфинг спрайтов, их масштабирование.

Ну это само собой, иначе нужен прямой доступ к видеопамяти.

Quote:

Originally Posted by Максагор
5) Автоконвертация спрайтов из одного формата в другой (насколько возможно, без потери качества или с минимальной потерей) - к примеру, надо отобразить цветной спрайт, подготовленный на обычном спеке (цвета квадратиками, черезполосица) на линейный TRUE-COLOR (или обратная ситуация, хе-хе...)

Вот здесь я тоже не вижу особого смысла. Чисто теоретически, при наличие нового видеопроцессора старый экран Спектрума использовать уже совсем не стоит.

Quote:

Originally Posted by Максагор
6) Рисование и раскраска графических примитивов.

7) Работа с векторной графикой (ломаные линии, дуги, сокрытие теневых контуров, заливка плоскостей цветом и текстурой, работа с освещением (откуда свет, там плоскость светлее и т.д.)).

8) Может еще что забыл...

Понятно, ещё раз спасибо. Важными пунктами для меня пока остаются глубина цвета (которую я бы посадил жёстко на 8 бит) и единственный видеорежим. Хотелось бы обсудить это.

Robus 22nd July 2005 14:08

Quote:

Originally Posted by icebear
Возникли вот вопросы у меня. В клонах Спектрума есть уже куча "видеорежимов", позволяющих хоть как-от расширить графические возможности. Линейной адрессацией обладают только видеорежимы Спринтера (хотя может я ошибаюсь?). 512х192 подразумевает деление точек на чётные/нечётные и соотвественно различное местоположение в памяти. Так же это вроде сделано в АТМ. Во всех "случаях" возможна работа с этой "видеопамятью" напрямую, но из-за размера адресной шины это можно осуществить только через банки.

Новые видеорежимы как правило не прижываются на Speccy, все привыкают к стандарту. Нужно сделать их легко-доступными, тогда будет смысл их создавать!

Quote:

Originally Posted by icebear
- это удобно с точки зрения программирования иметь экран, делённый на участки и тем самым с возможностью работы только в выбраном участке?

Смотря как сделать выбираемые участки. Например Atari, там сделанно просто велеколепно, для каждой вертикальной линии можно задать собственный режим, то-ли цветной текст, то-ли графика в любых вариациях. Да ещё и можно указать любую точку памяти от куда брать данные. А на Atari-ST, вообще можно скорость горизонтальной развёртки давать для каждой линии разную !!!
Думаю, что для Speccy идеально будет сделать что-то подобное, что я и делал в Wild Speccy ! Там можно всего-то в каждой линии задать свой адрес памяти для графики и для паперов, плюс цвет палитры для пикселов и не пикселов.

Quote:

Originally Posted by icebear
- скорость вывода графики приемлема при работе с участками экрана через банки?

Приемлема, но если есть проблема с одновременным доступом к памяти процессора и видяхи, то можно сделать какой-нибудь битик в порте который выбиралбы ЧИП для записи в видео буфер. То есть пока ты пишешь что-нибудь в ПАМЯТЬ-1 вторая высвечивается на моник, после OUT'а меняются местами. И тормозов не будет, и всякие корявые программеры, любящие не задумываться о дискреции анимации, будут вынуждены по-умнеть !!!

Quote:

Originally Posted by icebear
- нужен ли прямой доступ к видеопамяти или может вместо него лучше иметь возможность управлять неким гипотическим видеопроцессором (давать ему команды на вывод граф. примитивов, текста и т.п.) и не иметь при это никакого прямого доступа?

Конечно стоит сделать процессор, мало того, если сделаете возможность отправить ему собственную прогу и сполнить, то это будет максимально идеально. Так у меня в Wild'е.

Quote:

Originally Posted by icebear
- если допустить наличие такого спецпроцессора, какие функции он должен выполнять (если можно, то в виде списка)?

Для каждой задачи по разному. А какой проц ? Если у него мощная математика, то грех не сделать 3Д. А список может быть ООООООООчень длинный. Например:

-Возможнть аппаратного мультиколора.
-Что-нибудь со спрайтами.
-Изменение частоты кадров.
-Было бы прикольно вставить рисовалку линий, можно на аппаратном уровне сделать ELIT'у да ещё и ONE-FRAME.
-Неплохо вставить какой-нибудь декомпрессор, я имею в виду для распаковки графики в реальном времени, например: спрайтов. Я когда-то такое делал на Speccy в своей игре Mortal Kombat, она валяется где-то разобранная, но за-то на весь экран, и спрайты на 2/3!

Многое можно придумать ... Но лучше всего самому в процессор отправлять программу. НО НЕ ИМЕТЬ ДОСТУП К ПАМЯТИ - ПЛОХО, пусть с торможениями, но лучше вдвоём, чем кто-то там в "тёмной коробочке" !!!

icebear 22nd July 2005 14:36

Quote:

Originally Posted by Robus
Новые видеорежимы как правило не прижываются на Speccy, все привыкают к стандарту. Нужно сделать их легко-доступными, тогда будет смысл их создавать!

Тоже интересная мысль.

Quote:

Originally Posted by Robus
Смотря как сделать выбираемые участки. Например Atari, там сделанно просто велеколепно, для каждой вертикальной линии можно задать собственный режим, то-ли цветной текст, то-ли графика в любых вариациях.

Что понимается здесь под "линией"? Линия знакомест или линия пикселей?

Quote:

Originally Posted by Robus
Да ещё и можно указать любую точку памяти от куда брать данные.

Т.е. можно было разбить видеопамять по "кускам" и сказать видеоконтроллеру, где эти куски находятся? Что-то похоже видимо можно сделать в АТМ с его возможностью включать видеостраницы в соседних банках.

Quote:

Originally Posted by Robus
А на Atari-ST, вообще можно скорость горизонтальной развёртки давать для каждой линии разную !!!

А зачем это? И не похоже ли это на возможности Спринтера иметь "окна" на экране в раличных разрешениях?

Quote:

Originally Posted by Robus
Думаю, что для Speccy идеально будет сделать что-то подобное, что я и делал в Wild Speccy ! Там можно всего-то в каждой линии задать свой адрес памяти для графики и для паперов, плюс цвет палитры для пикселов и не пикселов.

Какое практическое применение есть этой сегментации видеопамяти? Wild Speccy - это клон?

Quote:

Originally Posted by Robus
Приемлема, но если есть проблема с одновременным доступом к памяти процессора и видяхи, то можно сделать какой-нибудь битик в порте который выбиралбы ЧИП для записи в видео буфер. То есть пока ты пишешь что-нибудь в ПАМЯТЬ-1 вторая высвечивается на моник, после OUT'а меняются местами. И тормозов не будет, и всякие корявые программеры, любящие не задумываться о дискреции анимации, будут вынуждены по-умнеть !!!

Понятно. У меня по этому поводу есть своё мнение, а именно видеоконтроллер должен решать абсолютно все вопросы графики. Т.е. например роль основого процессора сводится к заданию команд видеопроцессору, а последний уже сам должен решать вопросы конфликтов и прочего. А программист не должен задумываться о дискреции анимации - это дело железки.

Quote:

Originally Posted by Robus
Конечно стоит сделать процессор, мало того, если сделаете возможность отправить ему собственную прогу и сполнить, то это будет максимально идеально. Так у меня в Wild'е.

Похожая идея есть (или даже такая же): иметь стандартный софт для видеопроцессора но с возможностью менять его на custom.

Quote:

Originally Posted by Robus
Для каждой задачи по разному. А какой проц ? Если у него мощная математика, то грех не сделать 3Д. А список может быть ООООООООчень длинный. Например:

-Возможнть аппаратного мультиколора.
-Что-нибудь со спрайтами.
-Изменение частоты кадров.
-Было бы прикольно вставить рисовалку линий, можно на аппаратном уровне сделать ELIT'у да ещё и ONE-FRAME.
-Неплохо вставить какой-нибудь декомпрессор, я имею в виду для распаковки графики в реальном времени, например: спрайтов. Я когда-то такое делал на Speccy в своей игре Mortal Kombat, она валяется где-то разобранная, но за-то на весь экран, и спрайты на 2/3!


Насчёт процессора не знаю, пока я просто собираю информацию и мнения по работе с графикой на Спектруме. Что из этого выйдет - неизвестно, но GF или Radeon не выйдут точно :)
Аппаратный мультиколор мне кажется абсолютно ненужным, ибо мультиколор как таковой родился из-за убогих граф. возможностей (как структура экрана, которая должен признать сделана очень умно для своего времени/целей/возможностей, так и глубина цвета).
Изменение частоты кадров - это зачем?
Рисовалки линий и т.п. - для реализации на аппартном уровне я глуп, программно могу, но т.к. я не пуп Земли, любой другой сможет использовать собственную реализацию.
По поводу декомпрессора: упирается в реализацию спрайтов и их формата, пока ещё совсем рано об этом говорить.

Quote:

Originally Posted by Robus
Многое можно придумать ... Но лучше всего самому в процессор отправлять программу. НО НЕ ИМЕТЬ ДОСТУП К ПАМЯТИ - ПЛОХО, пусть с торможениями, но лучше вдвоём, чем кто-то там в "тёмной коробочке" !!!

Да, я вижу аппетит вполне здоровый :) Прелесть "чёрной коробчки" в предсказуемости её поведения и стабильность. А так же некая базовая абстракция.

Спасибо за ответ.


All times are GMT +4. The time now is 17:15.

Powered by vBulletin® Version 3.8.3
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.