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

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

7 сентября 2016, 13:10 (1269 дней назад) № 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 она не будет вам доступна - видимость ограничена)

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

6865 дней назад, 23:5913 мая 2001 CellVic - серия PDA машинок, чрезвычайно напоминающих Palm. Там, правда, не написано что это PalmOS (называется CellVic OS), но тем не менее. По своим техническим характеристикам машинки ничем особо не выделяются, но очень компактны. Есть вариант со сканером штрихкода. На сайте есть SDK. Продается также Application Development Board Сайты: ссылка ...далее

Избранное

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

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