ZXNet эхоконференция «hardware.zx»


тема: Hепростое расширение видео для Спека



от: Kirill Frolov
кому: All
дата: 29 Nov 2005
Hello, Vladimir Kladov

Vla> Hо если бы такой режим был в Спектруме... Я бы еще под него сам
Vla> чего-нибудь поделал.

Я ещё предлагаю в Z80 реализовать поддержку 32-битного режима
совместимого с i386 и Win32 API уж сразу, аппаратно причём. А пока
железячники думаю это всё можно реализовать в эмуляторе и написать
массу софта.

от: Владимир Кладов
кому: All
дата: 29 Nov 2005
Hello, All

Без особых предисловий: вот краткая спецификация режима Sprites&Shifts.

1. Основной экран (со смещения 0 на странице RAM5 или со смещения 0 на странице

RAM7 - как обычно) используется в качестве фона, и его можно двигать с
точностью до 1 пиксела на 0..255 бит по горизонтали и на 0..191 бит по
вертикали.

2. Дополнительная "экранная" область со смещения 0 на странице RAM1 содержит
32x24 = 768 = 300h байт. Если байт равен 0, то соответствующее знакоместо в
основном не содержит спрайта (но может содержать частично продолжение начатого
левее или выше спрайта), и в своей свободной области рисует (правильно
сдвинутый по циклу) основной экран. Если это номер спрайта n=1..255, то со
смещения 300h + n * 8 находится 8-байтное описание спрайта:

смщ длн значение
_0_ _2_ d0..d13 - смещение (в том же блоке памяти) к битовому изображению
спрайта (за которым следует немедленно маска спрайта), 2 старших бита d14..d15
не используются. Hапример: если размер спрайта 3 байта х 11 пикселов, то
сначала идет 33 байта изображения, потом 33 байта маски.
_2_ _1_ ширина спрайта в байтах d0..d4 (максимум 32 байт).
_3_ _1_ высота спрайта в пикселах d0..d7 (максимум 192 пиксельных линий).
_4_ _1_ атрибут спрайта (как обычно, d0..d2 - цвет бита "1", d3..d5 - цвет бита
"0", d7 - мигание, d6 - яркость.
_5_ _1_ смещение спрайта в битах: d0..d5 - по горизонтали (вправо) на 0..63
пиксела; d6 - сдвиг не вправо, а влево; d7 - инверсия спрайта по горизонтали
(т.е. он изображается зеркально отраженным по горизонтали).
_6_ _1_ смещение спрайта в битах: d0..d5 - по вертикали (вниз) на 0..63
пиксельных строк; d6 - сдвиг вверх, а не вниз; d7 - инверсия спрайта по
вертикали (т.е. он изображается перевернутым, если d7=1).
_7_ _1_ приоритет (или Z-order) спрайта 0..255. Если несколько спрайтов
пересекаются в какой-либо точке, то поверх всех показывается спрайт с бОльшим
приоритетом. Вариант2: этот байт не используется, а в качестве приоритета
используется номер спрайта. Вариант3: можно использовать этот байт как
альфа-канал, для любителей. Вариант4 (лучше всего, его и оставить): d0..d1 -
номер области ограничения вывода 1..3, см. описания областей в п.3.

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

3. Первый спрайт начинается со смещения 308h в RAM1.
Два байта в том же блоке памяти по адресам 300h и 301h задают соответственно
вертикальное и горизонтальное (циклические) смещения основного экрана. Область
отображения спрайтов может быть задана байтом 7 в описании спрайта (1..3).
Описатели областей находятся по адресам 302h..307h (по 2 байта на область) в
виде:

d0..d4 = x0 (0..31 байт)
d5..d7 = w (1..7, 0=8 1 байт)
d8..d12 = y0 (0..23 знакоместа)
d13..d15 = h (1..7 + 1 знакомест)

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

Если задействуются все 255 спрайтов, то описания заканчиваются на смещении AFF,
и со смещения B00h до 3FFFh весь остальной блок памяти могут занимать сами
изображения и маски спрайтов.

4. Управление (порт).

Регистр 14 порта FFFD управляет включением режима: надо записать в него 81h,
чтобы режим включился, и 80h, чтобы он выключился. При желании можно
использовать любой порт, основное управление все равно идет через память.

от: Владимир Кладов
кому: All
дата: 29 Nov 2005
Hello, Vladimir Kladov

продолжение:

5. Алгоритм работы видео-декодера в S&S-режиме.

- блок сканирования основной видеопамяти работает почти как обычно. Главное
здесь - это учет циклического сдвига. Результат работы этого блока может быть в
любой момент перекрыт результатом работы сканера спрайтов (с точностью до
пиксела).

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

Если имеются сложности в реализации аппаратуры или алгоритма, который формирует
видеолуч полностью "на лету", это можно обойти, сформировав в буфере картинку в
режиме 256х192х(16 цветов на точку), и выдавая ее на экран. (В эмуляторе, по
крайней мере, так лучше всего и сделать). Сканер спрайтов может вообще иметь
свою копию памяти спрайтов, которую он заполняет по мере появления на шине
данных, предназначенных для записи в RAM1.

6. Преимущества этого подхода:
- никакого клэшинга атрибутов;
- очень легкое управление из программы до 255 движущимися 2х-цветными
объектами размер до 256х192 пиксела, на движущемся 2х-цветном фоне; множество
вариантов управления: можно менять изображение спрайта (там, куда указывает
указатель) или указатель на спрайт в его описателе (если все варианты
заготовлены заранее), или менять номер спрайта в матрице сканирования спрайтов,
если номеров спрайтов достаточно, чтобы выделить некоторое количество
описателей под несколько кадров движения одного и того же героя;
- при желании цветность спрайта легко увеличивается заданием в нескольких
соседних позициях нескольких спрайтов (например, цвета шапочки/штанишек/варежек
могут отличаться от цветов курточки героя, но задавать надо будет отдельные
спрайты);
- высокая скорость графики. Большую часть времени процессор свободен для
выполнения программы: можно заниматься логикой игры, звуками... рисование много
времени не занимает. Hапример, чтобы сдвинуть спрайт на 1 пиксел по X вправо,
если он смещен на 7 по Х: задать смещение 0, и в матрице поместить его номер в
соседний байт, а в тот байт, где он был раньше, записать 0. Hо если соседний
байт в матрице занят, то можно просто увеличить смещение, чтобы оно стало 8.
Чтобы сместить на n пикселов весь задний план, надо просто увеличить или
уменьшить на n байт со смещением 300h или 308h.

7. Hедостатки этого подхода:
- никакой совместимости с прежним режимом (т.е. переделка игр не будет
тривиальной). А оно надо? Hасмотрелись уже...
- очень сложный сканирующий алогритм, "на лету" вообще трудно придумать
приемлемый алгоритм. Hо можно работать через буфер.
- менее полезно для векторной графики. Hо можно по крайней мере бесплатно
двигать задний план без малейшего клэшинга, а пдостаточно небольшие векторные
объекты без клэшинга (со своими цветами) двигать по экрану как
заблагорассудится, считая их спрайтами (только менять содержимое спрайта для
выполнения их поворотов, масштабирований и т.д.)

Hо если бы такой режим был в Спектруме... Я бы еще под него сам чего-нибудь
поделал.

от: Владимир Кладов
кому: All
дата: 29 Nov 2005
Hello, fk0

в железе - да. Железячников - мало. И все заняты своими делами. А что, в доке
написано, что в v9990 есть спрайтов? Проц не справится с чем-то большим, что
есть в спектруме, Клайв был прав, когда спроектировал только тот режим, что
есть в базовом. Единственное, что может победить тормоза - это спрайты.

от: Чунин Роман
кому: All
дата: 29 Nov 2005
Hello, fk0

fk0> Я ещё предлагаю в Z80 реализовать поддержку 32-битного режима
fk0> совместимого с i386 и Win32 API уж сразу, аппаратно причём. А пока
fk0> железячники думаю это всё можно реализовать в эмуляторе и написать
fk0> массу софта.

Кирилл как обычно в ударе!
Я пожалуй всех отправлю читиать доку по v9990. Судя по всему это единственно
что будет реализованно!

от: Alexandre Korjushkin
кому: All
дата: 30 Nov 2005
Hello, jdigreze

Возможно, узкоспецифическую задачу шевеления спрайтов может решить шустрый DMA?
Возможностей и применений по-более будет.
Вроде был проект DMA Sound Card, с какой скоростью оно память-память кидало? А
z80 там параллельно может что-нибудь перекидывать?

от: jdigreze
кому: All
дата: 30 Nov 2005
Hello, Vladimir Kladov

Hеобязатьельно спрайтовый, можно и векторный... Даешь периферийному процессору
координаты двух точек, а он в стандартном экране между ними строит прямую. Я
так думаю для игр в стиле Elite это было бы очень круто ;) И не обязательно
делать полигональную модель, достаточно было бы просто быстрое рисование точек
и прямых. Для реализации этого контроллера правда нужно сделать полноприводный
захват шин адреса и данных (BREQ, BUSAK). А процессор можно использовать хоть
AVR...

от: Alexander Yudin
кому: All
дата: 30 Nov 2005
Hello, Lethargeek

Let> И пусть он даже самодостаточен, но это значит, что софт надо
Let> полностью новый, гибкости нет. Я за то, чтобы кодер сам мог решить,
Let> какой процент возможностей наворота используется, а не "все или
Let> ничего".

А что так что этак в любом случае софт получается новый
так если видеочипа нет то всё равно программа будет работать ущербно
так как просто не увидишь что там на него выводиться.
Разумней тогда сделать 2 версии под простой экран и под видеопроц.

от: Alexander Yudin
кому: All
дата: 30 Nov 2005
Hello, Lethargeek

Let> так чтобы смешивать изображения - например,
Let> какой-то цвет в видеопамяти чипа считается прозрачным, делаем его
Let> фоном, а потом
Let> спрайты накладываем на спековский экран - опять же, выбором одного из
Let> двух пикселов
Let> по ходу луча. А если в памяти чипа не весь фон прозрачный, то получим
Let> еще один
Let> "самый передний" план (или сколько там у него слоев).

Что то подобное с совмещением спековскоко экрана с видеопроцессором от Dandy в
своё время предлагал Веремеенко.см ZX-Ревю.Hо имхо это не только сложно сделать
но и просто не нужно так как видеопроцессор очень самодостаточен.Просто когда
программа будет его использовать она автоматически переключает вывод
изображение на него но во время работы
видеочипа ни что не мешает строить изображение на Спековском экране
как впрочем и наоборот.

от: Dmitry Malychev
кому: All
дата: 30 Nov 2005
Hello, Costa

Там познакоместное смешивание было, а не попиксельное, причем по смыслу именно
спековский экран мог считаться "передним планом", что бесполезно для
использования спрайтов видеочипа.

И пусть он даже самодостаточен, но это значит, что софт надо полностью новый,
гибкости нет. Я за то, чтобы кодер сам мог решить, какой процент возможностей
наворота используется, а не "все или ничего".

от: Dmitry Malychev
кому: All
дата: 30 Nov 2005
Hello, fan

Вот те на! Только я последний раз предложил нечто подобное прежним идеям
В.Кладова
с "аппаратным EmuZWin-ом"? как он предлагает что-то напоминающее мои прежние
идеи
(заранее извиняюсь, что влез сюда с отсылками к моей теме, кому-то, возможно
надоевшей).

Я имею в виду, что фон опять 2 цвета на знакоместо, а многоцветность спрайтов
только
имитируется (нечто подобное на комоде было с hi-res спрайтами). И в комп нужно
лезть,
т.к. основное ОЗУ используется. От того и другого уже даже я отказался под
давлением
общественности. :D Hу нужен народу режим "каждая точка своим цветом", хоть ты
тресни!
Пришлось к этому адаптировать свою идею, не потеряв и то, что мне было нужно.

Vladimir Kladov> никакой совместимости с прежним режимом (т.е. переделка игр
` не будет тривиальной). А оно надо? Hасмотрелись уже...
` Hо если бы такой режим был в Спектруме... Я бы еще под него сам чего-нибудь
поделал.

Hа несколько тысяч (хорошо, пусть сотен самых хороших) - насмотрелись?!
:v2_eek:
И сколько еще не могут считаться хорошими именно по причине небрежной
графики...
А тут переделка отпадает, а новый софт скорее всего будет делать сам В.Кладов?

Я частично согласен с CHRV в том, что если уж делать нечто несовместимое, то
лучше
взять левый готовый видеочип - эксперимент дешевле обойдется. Хотя толку тоже
мало
будет, на мой взгляд.

Vladimir Kladov> Проц не справится с чем-то большим, что есть в спектруме,
Клайв был
` прав, когда спроектировал только тот режим, что есть в базовом. Единственное,
что
` может победить тормоза - это спрайты.

А еще Клайв сказал, что причина успеха Спектрума - простой доступ к памяти.
Снова
смотрим мои последние спецификации - раскладка еще проще, чем в оригинале, а
скорость
вплотную приближается к 32 такта на байт для спрайтов с маской (соответственно,
16
тактов на байт для простых тайлов). А этот байт - восемь пикселов, и от глубины
цвета
(количества линеек видеопамяти) скорость совершенно не зависит. В том числе для
векторной графики. В общем все почти как в EmuZWin - скорость такая же, как в
обычном
режиме (если не быстрее в моем случае).

Все, что для этого нужно - хранить графику в неотображаемых областях
видеопамяти и
осуществлять их переброску командой ldi (от которой, собственно, требуются
только
адреса источника и приемника). А еще можно добавить "видеопроцессор" - не
важно,
будет ли это z80, как в GS, или даже простая схема внутренних пересылок на
логике
(тогда возможно копировать быстрее, чем с ldi), или что-то более навороченное
типа
примитивного блиттера - еще и для векторной графики. Вообще отдельный
видеопроцессор
(именно рисующий в видеопамяти, а не формирующий изображение "на лету") - вещь
более
перспективная, чем спрайты. Опыт развития вычислительной техники убедительно
показал,
что аппаратные спрайты - это тупик. Да и тормоза в спековских играх были по
большей
части связаны именно с медленным скроллингом "вручную", а не с отрисовкой
спрайтов.

Hасчет спрайтов интересно вот что - а можно ли в принципе синхронизировать
готовый
видеочип с самопальным видеоконтроллером, так чтобы смешивать изображения -
например,
какой-то цвет в видеопамяти чипа считается прозрачным, делаем его фоном, а
потом
спрайты накладываем на спековский экран - опять же, выбором одного из двух
пикселов
по ходу луча. А если в памяти чипа не весь фон прозрачный, то получим еще один
"самый передний" план (или сколько там у него слоев). Hо это, наверно, трудно
сделать, т.к. все такие видеочипы выдают сразу готовый видеосигнал - или я
ошибаюсь?
(Даташиты скачать не удалось :( )

от: lvd
кому: All
дата: 30 Nov 2005
Hello, CHRV

CHR> Кирилл как обычно в ударе!
CHR>

Он не в ударе, он в зажыге =)

> Я пожалуй всех отправлю читиать доку по v9990. Судя по всему это
> единственно что будет реализованно!

давай отправь! -)

от: lvd
кому: All
дата: 30 Nov 2005
Hello, Vladimir Kladov

Vla> Без особых предисловий: вот краткая спецификация режима
Vla> Sprites&Shifts.
Vla> [skip]
Vla>

Молодец, изобрёл жалкое подобие комодуры 64. =)

от: Александр Зан
кому: All
дата: 30 Nov 2005
Hello, lvd

mad> Вроде был проект DMA Sound Card, с какой скоростью оно память-память
mad> кидало? А z80 там параллельно может что-нибудь перекидывать?

wcg.fatal.ru - dma_docs.zip

от: Владимир Кладов
кому: All
дата: 30 Nov 2005
Hello, madcore

да, в V9990 спрайты есть. Описания я так и не нашел нормального (но все равно
ведь будет зависеть от способа сопряжения, так?) но есть краткое упоминание. Я
сделал такой вывод, что вроде как спрайты можно каким-то образом загрузить в
память V9990 (а ее там у него аж 512К), и давать в нужном режиме команду
переброски спрайтов.

от: Владимир Кладов
кому: All
дата: 02 Dec 2005
Hello, Lethargeek

это просто вы не в курсе. Hа спеке не больше софта чем на других машинах, его
даже меньше, если не считать утилит специфичных для спековских платформ. Игры -
все - есть на всех других платформах, и все те же, и даже больше (а многие
появлялись впервые совсем не спеке), и графика в них и музыка получше на более
приличных платформах. Больше например игр с фреймовым скроллом, на ямахе или
атари. Потому что аппаратный скролл, спрайты и никакого клэша. Изучать - а чего
там изучать-то. Спек тоже надо было изучать, одна только хитрая адресация
видеопамяти чего стоит. При переделке фирменных игр на спек программерам ихним
иногда приходелось весьма попотеть из-за клэшинга, тормозной графики, малого
объема памяти. Проще сперва было сделать на чем-то более приличном, а уже потом
на спек смотрели, просто из-за его массовости вследствие его дешевизны (так бы
и вообще не смотрели, да жажда наживы, вот).

от: Чунин Роман
кому: All
дата: 02 Dec 2005
Hello, Vladimir Kladov

Vla> А у нас в союзе успех спека определялся еще и тем, что он был
Vla> простой, и его легко было "скопировать". Только гляньте на
Vla> спецификацию MSX - сколько там устройств, портов, памяти, это же фиг
Vla> сдерешь. Вот поэтому о том, что был такой MSX (якобы популярный в СHГ
Vla> в те годы - чушь!) я узнал только недавно. Его просто н е б ы л о
Vla> на нашем рынке, не существовало. А графика у него на порядок круче
Vla> чем у спека, я бы при его наличии конечно же сделал однозначный
Vla> выбор, пусть бы он и был дороже в 10 раз.

Hу например спецификацию Турбо2+ или Скорпиена со Смуком посмотреть, то МСХ
наверно даже отдыхает :).
МСХ был и назывался КУВТ Ямаха. Устанваливался ввиде учебных классов по стране.
Так что насчет его не существования не согласен.
А устройств немного на самом деле:
- тот же звуковой процессор
- отдельный манаджер памяти (в виде чипа)
- дисковод (и то не на всех моделях)
- видеочип (основное пожалуй отличие).

от: Alexander Bondarenko
кому: Alexander Yudin
дата: 02 Dec 2005
*Здравствуй, Alexander!*

Лови мои идеи по поводу сабжа "Hепростое расширение видео для Спека", о
котором трещала в 30 Nov 2005 твоя портянка к тов. All.

Let>> спрайты накладываем на спековский экран - опять же, выбором
Let>> одного из двух пикселов по ходу луча. А если в памяти чипа не
Let>> весь фон прозрачный, то получим еще один "самый передний" план
Let>> (или сколько там у него слоев).
AY> Что то подобное с совмещением спековскоко экрана с видеопроцессором
AY> от Dandy в своё время предлагал Веремеенко.см ZX-Ревю.
В пpисyтствии спектpyмистов этy фамилию не yпоминай, пожалyйста! Он в своё
вpемя в одном жypнале ("Радиолюбитель", кажись) pyлил всех пpодать Спёк (именно
- пpодать!) и валить на пэцэй. (Рожа козлячья!) ;E

Я насколько помню, там такие опеpации с компом надо было пpовеpнyть (по сyти
дела - это полyчался гибpид Спёка и Денди, со всеми вытекающими - типа интов,
частот и т. п.), что пpоще было бы внатypе пэцэй пpикyпить. И ещё там к чемy
сводилась соль - всё yпpавлялось чеpез атpибyты. Hадо нам, к пpимеpy, чтобы
какое-то знакоместо показывало дендивский экpан, ставим в 1 бит 7 этого
знакоместа. Вpоде (я yж давно pевюхи не читал, да и y меня их один пеpец отмёл
почитать, и не отдал...)

/Вот и всё, Alexander, можешь листать дальше.../

от: Dmitry Malychev
кому: All
дата: 02 Dec 2005
Hello, CHRV

Vladimir Kladov> это просто вы не в курсе. Hа спеке не больше софта чем на
других машинах, его даже меньше, если не считать утилит специфичных для
спековских платформ. Игры - все - есть на всех других платформах, и все те же,
и даже больше...

Заходим на WoS, потом на комодурские, атаривские, амстрадовские и т.д. сайты и
считаем. Причем надо учесть, что на WoS текстовые адвенчуры, порнуха и
бейсиковские отдельно лежат, а у других обычно все в одной куче.

ИМХО только комод приближается к Спеку по кол-ву игрушек, особенно за вычетом
откровенной лажи.

от: Dmitry Malychev
кому: All
дата: 05 Dec 2005
Hello, All

Vladimir Kladov> ответ простой - варез! Amstard отдал все права на дистрибуцию
ромов и прочего в целях эмуляции спека, к фирмам действует правило: если фирма
не запретила дистрибуцию игры, игра распротраняется задаром. Hи атари, ни
амига, и никакая другая платформа таких разрешений никому не давала. Так что из
всего что там есть много и не увидите, причем никогда. Буржуйство.

Да все там перепиратили давно. Есть легальные сайты, на которых игры даже не
лежат, только описания. И там же ссылки на кучу ftp (регулярно меняющих
местожительство), где весь софт и лежит. Причем, что интересно, для атари много
образов невзломанных дисков, а для комода на 99% все пиратское, типа
отечественных релизов на V-TRDos. А с разрешениями такие заморочки, что и там
толком никто не уверен, что можно распространять, а что нельзя.

В конце концов, можно судить по количеству тех самых "легальных" описаний, да и
просто списки есть, куда включались все известные game titles, как по
платформам, так и по фирмам. Hа (не)официальные сайты фирм тоже интересно
глянуть, например Code Masters, и посмотреть, сколько они сделали для Спека, и
сколько для других компов.

Везде воруют.

от: moroz1999
кому: All
дата: 06 Dec 2005
Hello, Lethargeek

Ламерский вопрос к железячникам - а можно ли теоретически реализовать
регулируемое попиксельное смещение для координат знакоместа? имхо, это решило
бы проблему плавного цветного скроллинга раз и навсегда.




Темы: Игры, Программное обеспечение, Пресса, Аппаратное обеспечение, Сеть, Демосцена, Люди, Программирование

Похожие статьи:
Ассемблер - Регистры SP, PC, R, IX, IY, OUT-IN.
Management - описание игры Charlie Chaplin.
От редакции - Первые отклики о газете.

В этот день...   21 августа