Это мультиколор, или растровые эффекты. Для них процессору приходится выводить код цвета в регистр $0c синхронно с ходом луча. Для наших целей можно считать, что out 0c выводит цвет прямо в ЦАП. Если на экране черный фон и мы делаем mvi a, $ff \ out $0c в момент, когда луч находится посередине 1-й строки, мы увидим переход с черного на белый несмотря на то, что в видеопамяти по прежнему все нули.
В игре это использовать сложно, потому что это делается процессором, а единственная точка синхронизации -- это кадровое прерывание. Оттуда можно только считать такты. Будет либо колоссальная потеря времени в цикле задержки, либо код должен быть написан так, что все его ветвления занимают одно и то же время, либо на собственно работу программы останется время только от непосредственно после последнего мультиколорного out до следующего прерывания. Сложно, но можно. Можно представить себе игру, в которой обработка требуется минимальная, код разбит на маленькие корутины, которые гарантировано успевают исполниться в нижней половине экрана, а большая часть экрана при этом занята каким-то мультиколорным эффектом.
На самом деле есть еще способ синхронизации, примененный в Exolon (но не для мультиколора) — поскольку таймер считает синхронно с процессором, его можно использовать для определения положения луча на экране. Пока я ни разу не видел, чтобы это было применено для растровых эффектов и боюсь, что может быть не получится попасть ровно в нужное место просто потому, что одна только инструкция in - это 12 тактов и точность определения таким образом получается +/- полстроки.




Ответить с цитированием