То есть в первом отрезке памяти длиной 256 байтов размещены первые строки спрайтов нескольких спрайтов (256/SIZE_X) , в следующих 256 байтов - вторые строки этих же спрайтов и т.д.?
Вид для печати
При произвольном размере спрайтов каждый конкретный спрайт может начинаться с любой строки.
Уточню еще. Мы до этого обсуждали, как определить адрес начала спрайта в ОЗУ спрайтов по его номеру. Для этого предлагалась формула: BASE + N * SIZE_X * SIZE_Y.
А вы вроде говорите про адрес на экране? У нас адрес начала первого столбца спрайта в ОЗУ экрана задается по формуле: 256 * X + Y, второго столбца 256 * (X+1) + Y и т.д. Копируются спрайты на экран столбиками слева-направо, в столбике точки копируются сверху-вниз.
Я говорю про адрес в битмапе спрайтов.
А не проще ли просто взять доку на V9990 или спрайты тслабса (№2) и повторить, как там сделано? Зачем нам ещё одна ветка без софта? Программистов на платформе и там можно по пальцам пересчитать - зачем дальше дробить платформу? Или у существующих веток фатальный недостаток "сделано не мной"?
Кто конкретно будет писать эти несовместимые игры?
Если писать будет легко и скорость будет большая, писать смогут многие. Тогда игра будет лучшего качества, по сравнению с играми, которые писать трудно. К тому же предлагаемый режим можно реализовать в клонах на FPGA.
Прошу дать прямые ссылки для ознакомления с указанными выше режимами.
http://alonecoder.nedopc.com/zx/books/V9990RUS.rar
http://tslabs.info/forum/viewtopic.php?f=6&t=178 (начало, а продолжения, похоже, не будет - дальше спрашивать тслабса)
Обе системы уже реализованы и имеют софт. На клонах с FPGA/CPLD, скорее всего, будет только вторая, но с АТМ портами, ибо другой вариант поддержки её и АТМ одновременно не влезает в ZX Evo. Сейчас эту проблему DDp решил переключением прошивок, но это, во-первых, не универсальное решение с точки зрения разного железа, а во-вторых, полностью неприемлемое решение с точки зрения ОС.
Почитал у TSLABA - кто такое ослит ? Сделайте простые режимы с одним слоем. Конечно игр не дождетесь под такое сложное программирование. Мы тут придумали достаточно элегантное программирование игр без лишних сложностей. Такое бы на ZXEvo сделать - сразу бы стало игра в 10 раз больше.
Давайте продолжим обсуждение.
Было предложение сделать координаты X и Y по два байта. Если X от 0 до 255 (319), а Y от 0 до 191 (239) - точку спрайта копировать на экран. Иначе - нет, эта точка за границами экрана.
Тогда для изображения части спрайта у левой границы экрана нужно...
Ветка конкретно по расколу платформы. Любые просьбы о совместимости автор отметает.
Я сказал по технической части больше, чем любой другой в этой теме. И я не хрен с горы.
Для таких решений нужна серьёзная аргументация.
И да, в V9990 блиттер есть. Как насчёт совместимости?
Совместимость с огромным количеством программ для ZX SPECTRUM остается, даже более, чем в других клонах. Добавляется совместимость с демами Pentagon-128.
Ваши замечания ценны, но вы уперлись в АТМ и несколько игр для него. Возможно на тот момент это было единственно верное расширение графики. Но на данный момент, можно уже и сменить свое мнение. Давайте вернемся к первоисточнику - ZX SPECTRUM и начнем заново, а не будем повторять тупиковые ветви по развитию железа.Цитата:
Я сказал по технической части больше, чем любой другой в этой теме. И я не хрен с горы.
Мы предлагаем новую графику без портов, без страниц и т.п. сложностей. Обычные координаты на экране и номера спрайтов. Вы что не видите ни одного достоинства? Например, спрайты могут быть произвольного размера, а не 16 х 16.
Посмотрел бегло. Там спрайты фиксированного размера 16 х 16. Мы же предлагаем выбор в размере спрайтов, 256 цветов без палитры, один слой, на котором можно наложить несколько объектов.Цитата:
Для таких решений нужна серьёзная аргументация.
И да, в V9990 блиттер есть. Как насчёт совместимости?
Почему вы все критикуете. Давайте сделаем НОВЫЙ РЕЖИМ без оглядки на предыдущие разработки.
Кроме этого, старые расширения графики можно добавить ПОТОМ.
По программированию игр вам виднее. Как хранится уровень в памяти, я только предполагаю. Я видел только карту без монстров в виде копий экрана (ftp://ftp.worldofspectrum.org/pub/si...r/R-Type_4.png). Можно предположить, что там спрайты фона размером 8 х 64 точек. Для экономии многие спрайты имеют зеркальную копию.
В первом уровне около 13 экранов ZX SPECTRUM. Видимо есть карта уровня, где указаны номера спрайтов фона. При движении мы получаем карту экрана, где указаны спрайты, которые нужно изобразить и смещение левого спрайта относительно границы экрана.
Для нового режима мы можем загрузить те же спрайты в ОЗУ видеокарты, преобразовывая на ходу их 256-ти цветные. По номерам спрайтов карты экрана мы копируем соответствующие спрайты из ОЗУ спрайтов в ОЗУ экрана. Видеокарте при этом передаем адрес области спрайтов, размер спрайта, номер спрайта и координаты спрайтна на экране. Это нужно делать после прерывания. В результате получаем плавный скроллинг фона.
Поверх фона копируем движущиеся объекты таким же образом, как и спрайты фона. При этом не надо заботиться о клэшинге атрибутов, так как вокруг спрайтов используется прозрачный цвет. Объекты правильно перекрывают друг друга без всяких усилий со стороны программиста. Количество наложенных на одно место объектов не ограничено количеством слоев. Слой всего один. Работаем только с координатами на экране и номерами спрайтов. Нет необходимости в управлении портами и страницами. Чтобы устранить мелькания экрана, можно использовать два экрана, как в ZX SPECTRUM 128 К - на одном готовим изображение, а другой вы это время показываем.
Можно сделать и по 8 бит на каждый канал цвета, как в Speccy2010. Мы то будет работать с 8 битами на точку. Что это изменит ?Цитата:
Можно сразу закапывать. Палитра нужна, и минимум 12 бит.
Ну что, есть в этом что-то разумное ?
zst
Мне непонятно, как рассчитывать адрес начала спрайта номер такой-то, если будут области с разными размерами (банки) спрайтов. А если этих банков будет 100 ?Цитата:
Видеокарте при этом передаем адрес области спрайтов, размер спрайта, номер спрайта и координаты спрайтна на экране.
Идея alone c расположением всех картинок в одну шириной 256 мне нравится, т.к. удобно в редакторе рисовать сразу все спрайты.
Без палитры вообще жуть будет, тем более, ее на внутреннем ОЗУ Циклона сделать несложно.
Тайлы там скорее всего 16х16. То есть для получения плавного скроллинга, надо каждый кадр пересчитывать данные для 204 спрайтов только для одного слоя фона. И это на Z80 3,5 МГц. Не сказал бы что это проще и быстрее, чем на тайловом VDP. Там для скроллинга надо каждый инт менять только TileXOffset, и раз в 16 кадров дорисовывать столбик из 10 тайлов. Процессорного времени это займет намного меньше.
Мы решили, что при переходе к области спрайтов с другими размерами мы сообщаем видеокарте размер спрайтов в этой области и начало области. Дальше ко всем спайтам в этой области можно обращаться по номеру. Адрес спрайта при копировании будет рассчитывать сама видеокарта.
Так сделано в V9990, но это для фиксированного размера спрайтов 16 х 16 точек. Нам же это будет только ограничивать фантазию при разработке игр.Цитата:
Идея alone c расположением всех картинок в одну шириной 256 мне нравится, т.к. удобно в редакторе рисовать сразу все спрайты.
Вы, извиняюсь, не видите преимущества ОДНОВРЕМЕННОГО присутствия 256 цветов на экране по сравнению с оригинальными 15 с атрибутами или с 16 цветами из платры 256 ? Я думаю, что вы шутите.Цитата:
Без палитры вообще жуть будет, тем более, ее на внутреннем ОЗУ Циклона сделать несложно.
А сделать палитру можно, но это не главное. У некоторых компьютеров всего 64 цвета, а какие рисунки получаются. Да и на 15 цветах тоже. Вам что надо для игры палитру BMP - по 6 битов на один канал ? Можно и такую сделать.
---------- Post added at 23:11 ---------- Previous post was at 22:59 ----------
Ну вы сгущаете краски. Нет такой проблемы, ведь в игре Z80 все успевает делать. А с новой видеокартой будет еще быстрее успевать. Там ведь не надо сдвигать каждый байт при движении экрана. Просто сдвигаем координаты каждого спрайта. Если бы такие простые вещи Z80 не успевал делать, то игр бы было очень мало.
Какая разница, если Z80 успеет за кадр вывести все координаты и номера спрайтов в видеокарту. При этом нет ограничений в скорости движений разных планов экрана. Кроме тайлов и спрайтов остается возможность наложить сверху на этот же экран цветные линии, как Элите.Цитата:
Не сказал бы что это проще и быстрее, чем на тайловом VDP. Там для скроллинга надо каждый инт менять только TileXOffset, и раз в 16 кадров дорисовывать столбик из 10 тайлов. Процессорного времени это займет намного меньше.
так как упор делается на спрайты вот полезная ссылка, так сказать на будущее -
вот например спрайты из игры BattleCity:
http://www.spriters-resource.com/nes...y/sheet/11756/
Чтобы наглядно представить нужность палитры, можно сделать следующее: в фотошопе (или подобном граф.редакторе) открыть полноцветную картинку, уменьшить для наглядности ее разрешение, и выбрать режим индексированных цветов - системную (фиксированные 256 цветов) палитру, а потом локальную, когда необходимые 256 оттенков именно для этого изображения будут выбраны из всей доступной палитры. Разница будет видна сразу. Что толку от этих 256 цветов, если в них может не оказаться и трети нужных в определенных условиях оттенков.
zst
Т.е. держать в ОЗУ Спека таблицу начал областей спрайтов. Что не есть хорошо.Цитата:
Мы решили, что при переходе к области спрайтов с другими размерами мы сообщаем видеокарте размер спрайтов в этой области и начало области.
Сочетаний любых размеров, в том-то и дело.Цитата:
Так сделано в V9990, но это для фиксированного размера спрайтов 16 х 16 точек.
С палитрами вы не сталкивались, ясно. Даже 16-цветная палитра 5+5+5 выглядит лучше 256 цветов. Достаточно посмотреть на невыразительные цвета Sam Coupe.Цитата:
Вы, извиняюсь, не видите преимущества ОДНОВРЕМЕННОГО присутствия 256 цветов на экране по сравнению с оригинальными 15 с атрибутами или с 16 цветами из платры 256 ? Я думаю, что вы шутите.
Хе. Не сразу, но плюсанул. Алсо, в таком формате очень удобно использовать прямоугольную ДМА, скроллеры, рисовать графику опять же художникам удобно. Почему же в большинстве игр на пэцэ спрайты лежат на большом прямоугольном битмапе?..
Вы определитесь какие у вас рамки.
Для нищебродских систем типа пентевы концепт движка тсконфы если не оптимальный, то уж один из самых оптимальных. Это уровень амиги/сеги.
А вот для вундервафли с 56мгц срам шинами (почему кстати не 100?) - это полное убожество. Для такого размаха можно сделать в 10 раз больше наворотов. Со 100500 слоями, альфой, зумскейлами, чем угодно - я уже писал. Если продумать концепт, кодать под это будеть не сложнее создания презентации в паверпойнте.
А могу дать совет, который мне помог: сделай техническое демо для "сырого" дизайна на каком нибудь этапе его написания. Сразу поймешь, что лучше, а что хуже. Одно дело - теоретизировать, другое - влезть в шкуру кодера.
Признавайтесь, кто перепрошил Алония? :rolleyes:
У тслабса. Джек Воробей.
У меня МИНИМУМ того, что нужно для комофтного кодинга игрух со спрайтовыми наворотами 50фпс. Реализовано на железе из говна и палок. 7мгц 16 бит ДРАМ, ВЕСЬ спектрум в 2800 ЛЕ, асекс1.
Брать ц2 для дизайна и делать на нем унылое не пойми что - как минимум странно.
А позвольте поинтересоваться, как будут отображаться мультиколорные фефекты?
Плюсую и перепощиваю. Без палитры нет НИ ОДНОГО движка 2Д графики. Или найди пруф противоположного.
И да, палитра нужна не для 15ц режима, но и ОБЯЗАТЕЛЬНО для 255ц.
Еще. Одним из весьма удачных дизайнов считаю V6Z80P.
И да, я понял, что делается не спрайтовый процессор, а блиттер. Так вот - определитесь с конечной целью, что вы хотите видеть на экране. Пока что я вижу обычный 2Д двиг, реализованный ОЧЕНЬ странно. У блиттеров другие применения.
Если вы говорите, что Z80 не успеет передать видеокарте за один фрейм все кооординаты и номера спрайтов фона, придется для фона сделать отдельный слой. Тогда его не перестраивать каждый раз, а добавлять новые спрайты с края экрана. Какие варианты управления тут есть? Можно сделать аппаратное копирование прямоугольной области в ОЗУ экрана для сдвига всего или части экрана на нужное количество пикселов. На частоте 56 или 84 МГц это делается быстро и небольшое количество данных от Z80 - он успеет за 1 фрейм дать команду сдвига.
Основная цель - сделать быстрый движок без 3D, и т.п. наворотов. Графика должна остаться похожей на ZX SPECTRUM. Но без клэшинга атрибутов, с плавным скроллингом отдельных областей экрана, а не только всего.
Также для программиста должна быть возможность выбрать размера спрайтов и даже несколько типоразмеров в игре. Управление спрайтами с помощью координат на экране и номеру спрайта. Минимум манипуляций с портами, страницами. Мы должны про них забыть. Максимум удобства и скорости для программиста.
Изображения должны накладываться друг на друга на один слой. Для ускорения скроллинга фона без постонного перестроения фона с помощью спрайтов добавить слой фона.
Спасибо насчет палитры - убедили, не помешает. Тем более ее легко поместить в самой FPGA. Думаю, вы поможете в ее реализации. Я сделаю на каждом канале RGB по 8 бит, как в SPECCY2010.
FPGA используется в минимально необходимых пределах - много ног, большая скорость, PLL, аппаратное умножение, буфер FIFO в ОЗУ для передачи команд из Z80. Нет цели нагрузить ее по максимуму.
Остальные режимы возможны, но ПОТОМ.
Палитру предлагаю 18 бит, по 6 на компоненту. Штуки памяти в ц2 как раз 18-битные.
ОК, пробую представить, как это все работает. Я так понимаю, используется дабл буфферинг? Синхронно с началом фрейма блиттер начинает строить изображение в теневой экранке, обрабатывая очередь объектов, которые надо вывести и копируя их в экранку из ОЗУ с графическими объектами?
Видяха должна эмулировать основное видео спека?
Как будут эмулироваться мультиколорные эффекты?
Ну, что такое "спецификация", это советую погуглить. Первый псто по этим признакам явно не детектится.
А насчет мультиколора, дада, ОЧЕНЬ интересно.
Мультиколор не нужен. Говорю как специалист по мультиколорам. Это изврат и онанизм. Да.
И мастурдрочество.
Так же как POP HL: LDI и прочие вольфы.
И животноводство!
alone
Даже аппаратный ?Цитата:
Мультиколор не нужен.