8 сентября 2016, 18:29 (2998 дней назад) № 10259
И, наконец, про третью работу:
Однокилобайтное интро под названием Speechtro было написано мной для TI-99/4a вскоре после 99tro и представлено на DiHALT'2016 (где заняло первое место в 1kb low end intro).
В основе были две идеи:
1). Сделать что-то, использующее синтезатор речи (среди владельцев TI-99/4a он весьма распространён, а также хорошо поддержан эмуляторами - MESS/MAME и js99er).
2). Попытаться изобразить визуально большое число цветов с имитацией растровых эффектов.
После некоторых колебаний было решено обе идеи объединить в одну работу.
Речь использует слова, прошитые в ПЗУ синтезатора (так как в случае с прямым LPC сжатием в 1кб столько речи не влезло бы). Поскольку их в ПЗУ весьма немного, ушло порядочно времени, чтобы составить из имеющихся слов связную речь на подходящую тему. К сожалению паузы в словаре синтезатора не предусмотрено. В качестве паузы я использовал довольно случайный адрес, данные с которого звучат как "бульканье". Это во-первых, экономит и упрощает код, во-вторых звучит интереснее, чем просто тишина.
Что касается изображения, то первоначально хотелось попробовать реализовать растровые эффекты (меняя цвет фона в момент, когда луч идёт по нужной строке). Это оказалось технически невозможным, поэтому был выбран другой вариант - имитировать растровые эффекты через манипуляции с памятью атрибутов. В Graphics Mode 2 каждый блок 8x1 может иметь независимый цвет фона и цвет изображения, поэтому каждая полоска высотой в 1 пиксел может иметь разные цвета для фона и текста. Несмотря на то, что цветов всего 15 (а в полосках используется лишь 10), создаётся впечатление, что их гораздо больше.
Отдельные трудности вызвал вывод текста. Особенности конструкции TI-99/4a таковы, что ПЗУ (так называемый GROM) не отображается в адресное пространство процессора, поэтому данные для вывода шрифта извлекаются из GROM только последовательно (побайтно) - заданием начального адреса и чтением одной и той же ячейки памяти.
Выбранный набор "small caps" имеет только буквы A-Z (без цифр), что несложно заметить :)
Звёзды, как и ползущий наискосок баг, реализованы спрайтами 8x8.
В процессе проговаривания слов в двух линейках квадратиков отображается (условно) часть адреса текущего слова в ПЗУ синтезатора.
(возможно, в Facebook она не будет вам доступна - видимость ограничена)