Обратите внимание, что новости можно получать по RSS.
X
-

Демосцена, Информационные технологии, История вычислительной техники и IT

7 сентября 2016, 13:10 (3030 дней назад) № 10256
Теперь пара слов про первую интру для TI:

В процессе изучения TI-99/4a мной была написана "99tro" - небольшая invitation intro на Chaos Constructions'2016, представленная на Revision'2016. Дополнительно к её исходникам здесь будут даны некоторые пояснения.

Основная идея состояла в том, чтобы интро по возможности передавало стилистику старых cracktro для Commodore 64, естественно с поправкой на более скромные возможности видео и звукового чипов TI-99/4a.
Грубо говоря, хотелось что-то типа цветного логотипа, плавно скроллящейся текстовой строки, переливающихся цветных полосок и болтающейся надписи из спрайтов.

Вскоре стали ясны следующие существенные ограничения и недостатки компьютера:

- Аппаратного скроллинга нет, его можно сделать только сдвигами и перезаписью видеопамяти

- Обмен с видеопамятью (это касается и спрайтов и графики и текста) очень медленный и сравнительно высокая частота процессора не спасает (равно как и его 16-разрядность, т.к. обмен с VDP идёт по 8-разрядной шине).

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

- Сильно ограниченный функционал спрайтов - только 4 в строчку (что автоматически означает, что ничего шириной в экран спрайтами не сделаешь), одноцветность, большое количество инструкций процессора для простой смены цвета или координаты спрайта.

- Проигрывание музыки (vgm) отнимает весьма существенное время процессора. Как заявлено в исходниках плеера от Tursi, это 2-20% для 30гц версии, взависимости от конкретной музыки. В моём конкретном случае получалось не меньше 10-15%.

- Беда с удобными отладчиками (на самом деле, та же картина была и с эмулятором Vectrex - в обоих случаях есть мощные отладчики, но неудобные настолько, что, по факту, их использование скорее замедляет работу, нежели ускоряет)

- Невозможность быстро проверить код на реальном железе. Для этого нужно всё выключить, вытащить флэшку, воткнуть в PC, скопировать на неё код, вытащить из PC и вставить в TI, включить эмулятор диска и сам TI, выбрать Editor/Assembler, выбрать пункт загрузки программы, набрать DSK1.имя_программы, нажать ENTER, дождаться загрузки (около минуты).

В итоге постепенно от прежних идей осталось только то, что позволяла реализовать железка (конечно, с учётом, что это была моя первая программа для этой платформы и этого процессора):

- Надпись/лого CHAOS CONSTRUCTIONS'2016 с головой робота
- Мигающие в такт музыке глаза и рот робота
- Появляющийся буква за буквой, вслед за пульсирующим курсором, текст в несколько строк
- Плавно скроллящаяся строка текста
- Фоновая музыка (vgm)

Чтобы хоть как-то использовать сильные стороны TI-99/4a, я выбрал режим с максимальным графическим и цветовым разрешением - Graphics mode II (Bitmap). Для игр его используют крайне редко, т.к. он требует всех 16кб видеопамяти и, соответственно, очень медленный с точки зрения обновления изображения.
Однако, в отличии от игр, в моём случае можно было пойти на хитрость (что вообще характерно для demo и intro) - цвета я динамически не обновлял вообще нигде. Всё, что касается цветов, было установлено единственный раз в начале, вне основного цикла.
В цикле же менялся только bitmap и переключались два спрайта.

Верхнее лого было нарисовано сначала в Photoshop, затем преобразовано в дамп видеопамяти для VDP при помощи утилиты Convert9918 и далее эти два этапа циклически повторялись - т.е. в исходную картинку вносились уточнения, чтобы после преобразования (в 15-ти довольно кривых цветах и цветовом разрешении 2 цвета на 8 горизонтальных пикселов) она выглядела максимально адекватно. Надо сказать, что искажения характерные для композитного NTSC сигнала сыграли, как часто в таких случаях бывает, на руку - на CRT мониторе картинка выглядит явно лучше, чем в эмуляторе (к тому же, теплее и ламповее).
Надо сказать, я впервые всерьёз осознал, насколько важен для успеха платформы правильный выбор 16 возможных цветов её (платформы) разработчиками. В случае с TI-99/4a эти цвета крайне неудачны (к тому же, их 15).

Нижний плавный скроллинг был взят из единственного подобного примера (Matthew Hagerty) и модифицирован. Честно говоря. я бы за столь короткий срок вряд ли смог проникнуться ассемблером TMS9900 достаточно глубоко, чтобы повторить некоторые использованные там приёмы, без которых просто не хватило бы общей производительности для всей работы.
В скроллинге достаточно хитро сдвигаются влево части символов и результат копируется в VRAM. Всего скроллится область в 8 пикселов высотой.
Как я уже сказал выше, операции производятся исключительно над bitmap'ом - цветной фон в виде бело-синей полосы нарисован заранее и скроллингом не затрагивается.

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

В средней части экрана пишется текст за курсором. У меня было много идей как это красиво реализовать, но в итоге от всех пришлось отказаться из-за медленной видеопамяти и багов VDP. В результате, за каждую итерацию цикла рисуется одна буква (т.е. обновляется 8 байт видеопамяти). Для всех возможных восьми строк текста заранее установлен фон с плавным переходом между оттенками синего и серым.
Пульсирующий курсор представляет собой спрайт, для которого изображение берётся циклически из четырёх мест памяти - т.е. получается четыре кадра квадратика разного размера.

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

Спрайты и шрифты редактировались в программе Magellan.

В коде используется три разных workspace для регистров процессора - одно для плеера (а он требует себе не только workspace, но и ещё кусок scratchpad - ценной 16-разрядной RAM, из-за чего не удалось увеличить скорость выполнения кода переносом его частей туда), второе для скроллинга и третье для всего остального (счётчики в цикле, координаты курсора и пр.)

В итоге, суммарный размер intro получился в районе 22кб. Основная часть, конечно, это несжатая графика (12kb) и RLE сжатая музыка (1.8кб). Таким образом, сам код занимает где-то в районе 6-7кб (да и то там есть фрагменты, которые использовались лишь для отладки).
Опубликовано: Пётр Соболев

Эта заметка и комментарии к ней в Facebook: ссылка
(возможно, в Facebook она не будет вам доступна - видимость ограничена)

Случайная заметка

9295 дней назад, 05:4514 июля 1999 Оригинальный подход к устройствам отображения информации: луч маломощного лазера рисует картинку непосредственно на сетчатке глаза, что позволяет исключить линзы и дает ряд других преимуществ. Принцип называется VRD. Система (производства Microvision, для военных) уже существует на практике - дает зеленое монохромное изображение ...далее

Избранное

2790 дней назад, 01:575 мая 2017 Часть 1: От четырёх до восьми Я люблю читать воспоминания людей, заставших первые шаги вычислительной техники в их стране. В них всегда есть какая-то романтика, причём какого она рода — сильно зависит от того, с каких компьютеров люди начали. Обычно это определяется обстоятельствами — местом работы, учёбы, а иногда и вовсе — ...далее

2302 дня назад, 20:305 сентября 2018 "Finally, we come to the instruction we've all been waiting for – SEX!" / из статьи про микропроцессор CDP1802 / В начале 1970-х в США были весьма популярны простые электронные игры типа Pong (в СССР их аналоги появились в продаже через 5-10 лет). Как правило, такие игры не имели микропроцессора и памяти в современном понимании этих слов, а строились на жёсткой ...далее