С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
А чем такой генератор лучше ? И какую лучше частоту: 14, 56, 84 или какую другую ? К какому входу FPGA лучше подключать? Вообще-то планировалось брать 14 МГц с материнской платы компьютера. Но у некоторых компьютеров ее нет на разъеме.
Только если останется 6 лишних выводов.
Пока от лишних наворотов я отказался. Цель - максимально ускорить работу копирования спрайтов в область экрана.На мой взгляд, лучше поставить 3-ри SRAM 512K x 8бит вместо двух по 16бит, скорости и так хватит для 256 цветов, а вот возможностей в разы больше появится (вместо 3-ей SRAM возможно лучше поставить SDRAM для подкачки видео строк или использовать как буфер для различного вида видео данных).
Хорошо бы пока сделать новый графический режим в соответствии с указанным набором команд для тех компьютеров на FPGA, где это возможно - Speccy2010 и ReVerSE. Как вы считаете - это возможно ?Попробовал сделать пробные наброски схемы на EP4CE6E22 + 2-ве SRAM 512Kx8 в связке с EPM3064AT100. Пока вроде все получилось.
При разработке ReVerSE II
Спасибо. Хорошо бы почитать теорию, по видеоролику догадаться трудновато. Думаю, раз есть FPGA, может предусмотреть переключаемый видеовыход, как в Speccy2010 - SCART/VGA/S-VIDEO/COMPOSITE/HDMI ? Хотя бы предусмотреть на будущее возможность подпайки через разъем дополнительных разъемов.наткнулся на эти статьи, может пригодятся:
Генерация видео сигнала "Generating NTSC composite video with an FPGA and two resistors"
Генерация аудио сигнала "PWM (Pulse Width Modulation)"
HDMI "HDMI Output"
Может лучше стандартизировать размер для хранения спрайтов 16 х 16 точек ? Тогда рассчитывать адрес в FPGA проще. Указанием начальной и конечной строки/столбца спрайта можно уменьшать до нужного размера. А если нужно изобразить больший объект - то составлять их из нескольких спрайтов. Лишние пикселы закрашивать прозрачным цветом.
Можно будет выложить исходники прошивки в этой теме или на GOOGLECODE.Планируете ли выложить все фалы проекта (или некоторые части) в открытый доступ ?
Может хранить спрайты одинаковых размеров в наборах до 256 спрайтов в наборе ? Тогда на каждый набор нужно видеокарте указывать размеры спрайта и количество спрайтов в наборе. Возможно также начальный адрес каждого набора. Тогда при копировании на экран достаточно будет указать номер набора и номер спрайта. Остальные данные по началу блока и размерам спрайта указать при загрузке.
Возможно FPGA сможет сама вычислять начала каждого спрайта по номеру набора и спрайта. Тогда нужно спроектировать достаточное количество наборов и выделить для этого соответствующие команды и параметры.
Последний раз редактировалось zx-kit; 23.06.2013 в 20:57.
"L-256"
Alex Rider, если спрайты разного размера (пуля и танк, например), то надо иметь таблицу адресов начал спрайтов.
zst, генератор просто меньше по габаритам, меньше элементов. Если будет генерация от ZXBUS, то его вообще можно не ставить (на выбор юзера). 14 МГц достаточно, подавать на PLL вход Циклона(можно посмотреть в даташите или Квартусе). С помощью ФАПЧ можно получить 56 МГц или 84.
ZXM-Phoenix rev.01 2048K, VG93 hw emulator
Сделай пока возможность его установки. А какой именно частоты зависит от того какие видео режимы планируешь, экспериментально можешь попробовать подобрать в MegaWizard (ALTPLL).
Должны остаться, иначе не будет куда развивать конфигурацию.
Наворотами это думаю назвать сложно, корки контроллера SDRAM есть. Перенос данных от спека в видео ускоритель возможно, при наличии простого DMA на счетчиках.
Все закладывать не имеет смысла, т.к. реально использоваться будет всего один видео выход. Но как базовый, я бы распаял VGA, остальное пусть подрубается в интерфейс.
Возможно, но на данных бордах есть ряд архитектурных ограничений.
Эм... А вот я не пойму ни разу. А нельзя ли разве просто сначала грузить спрайты разных размеров вперемешку, а потом выводить их по номеру (возможно, 2-хбайтному)? И не заморачиваться наборами - наборы не нужны при программировании со стороны Спектрума.
Вот это не надо совсем. Спрайты должны быть произвольного размера (ну да, с каким-то разумным верхним ограничением). Потому что железка на карточке в 100500 раз мощнее Z80, а вы хотите на Z80 переложить вот эту вот аппликацию, склеивание спрайтов из кусков. Да еще и проверку того, чтобы вышедшие за пределы экрана куски с другой стороны не поперли. Сделайте простую для программистов штуку - это сильно повысит шансы того, что кто-то что-то под нее напишет.
upd: а номер спрайта обязан быть 2-х байтным. Потому что первым делом я бы загрузил в видеокарту 256 спрайтов букв.
Последний раз редактировалось Alex Rider; 23.06.2013 в 23:30. Причина: upd
Не, это уже лишнее.
Вот сейчас у вас, по проекту, это нормальный классический блитер.
Копирующий спрайты размером до 255x255.
Деление же на блоки по 16x16, просто надуманный момент.
Незачем усложнять жизнь программеру и заставлять его составлять объект из неких кусков 16x16.
Вот каких размеров спрайт нужен, вот таким он и будет.
Ну и нужно сделать, чтобы можно было задавать адрес спрайта, в двух вариантах:
- по 3-ёх байтовому адресу в спрайт памяти
- по 2-ух байтовому номеру (если кодер очень хочет сэкономить)
Т.е. какой именно вариант будет удобен кодеру, такой он и и будет использовать.
---------- Post added at 22:59 ---------- Previous post was at 22:46 ----------
Верно IanPo говорит.
V6Z80P - Back for Good
Согласен, нужно предоставить программисту возможность использовать спрайты разных размеров. Для этого я и предложил идею наборов. Их еще можно назвать банками, блоками и т.п. Важно то, что в банке спрайты одинакового размера. Для простоты нумерации одним байтом количество спрайтов в банке может быть от 1 до 256. Это обеспечит легкость указания спрайта одним байтом.
Например шрифт в кодировке WINDOWS-1251. Рисуем 256 символов размером 8 х 8 точек или другого размера. Это будет банк спрайтов номер 1. Чтобы изобразить текст сначал выбираем банк спрайтов номер 1 с символами. Потом уже используем однобайтный номер спрайта/ символа в банке. Мне кажется это проще, чем каждый раз указывать по два байта.
Второй банк спрайтов может содержать тайлы травы, деревьев, земли и т.п. Он уже может содержать от 1 до 256 спрайтов размером, например, 12 х 12 точек. Это будет банк спрайтов номер 2. Тогда для изображения фона нужно установить текущим банк номер 2 и уже работать с однобайтовым номером спрайта. Это тоже проще, чем каждый раз писать по два байта.
Фактически, старший байт номера спрайта - это номер банка. Банков спрайтов может быть, например, 16. Один для букв, другой для фона, третий для главного героя, четвертый - враги, пятый - пули, шестой взрывы и т.п. Каждый банк нужно описать следующими параметрами: адрес начала, размер спрайта по-горизонтали, размер спрайта по-вертикали. Не обязательно в банке рисовать все 256 спрайтов - только необходимое количество. Адрес следующего банка указывать на следующий байт после последнего байта предыдущего банка.
Последний раз редактировалось zx-kit; 24.06.2013 в 05:14.
"L-256"
Таблица смещений спрайтов не обязательна ни в каком случае. В карточку я могу загрузить спрайты известным в известном мне порядке и рисовать их на экране по номеру - это удобно, исключает указательную арифметику в памяти видеокарты. Оставить прямую адресацию в видеократе стоит, да. Даже без видеокарты при выводе на экран 6912 можно обойтись без таблицы смещений спрайтов если хранить перед каждым спрайтом его размеры.
---------- Post added at 05:22 ---------- Previous post was at 05:19 ----------
Так можно, да. Фактически, номер спрайта всен равно останется 2-хбайтным, только нумерация не сквозная. А как теперь сопоставить загруженный в карточку спрайт и его номер?
Смещение для каждого спрайта указывать не надо - только адрес начала банка. Это можно сделать при загрузке спрайтов в видеокарту.На мой взгляд, удобнее хранить спрайты одинакового размера в одном банке. Это позволит видеокарточке самой рассчитывать адрес начала нужного спрайта по номеру. Для этого видеокарта возьмет адрес начала банка и прибавит к нему смещение (номер спрайта * ширина спрайта * высота спрайта). Программисту остается передать видеокарте номер банка и номер спрайта в этом банке.Так можно, да. Фактически, номер спрайта всен равно останется 2-хбайтным, только нумерация не сквозная. А как теперь сопоставить загруженный в карточку спрайт и его номер?
Вопрос к программистам - что представляет из себя карта уровня для игр типа R-TYPE на логическом уровне ? Достаточно ли 256 спрайтов для такой игры ? Или нужно несколько банков спрайтов по 256 ?
Последний раз редактировалось zx-kit; 24.06.2013 в 05:40.
"L-256"
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)