А. Никитин

LUT или "ячейка FAFB"?

В заметке А. Русских "Что может ячейка FAFB" ("ИНФО", 1992/2, с. 67) автор сообщает о своем открытии: оказывается, управлять физическим цветом в Бейсике можно, минуя встроенную команду LUT! Все эффекты при этом связываются с некоей (вероятно, "волшебной") ячейкой FAFB.

Можно только приветствовать самодеятельный поиск, тем более что предлагаемые автором фрагменты программ в принципе работоспособны. И все же находки настолько слабы, а выводы - несостоятельны, что работа "не тянет" даже как доклад на школьном кружке. Главные промахи автора статьи - во второй ее части, где утверждается, что в Бейсике прямое программирование просмотровой таблицы (а ячейка FAFB является портом именно этого устройства) якобы эффективнее, чем стандартный бейсиковский LUT. и по объему памяти, и по времени, и по качеству картинки РОКЕ уступает LUT! Должен заметить - к счастью, уступает, так как обычно именно неэффективность "законных" средств Бейсика толкает на "преступления". В данном же случае такие мотивы могут возникнуть только по неопытности. Главный тезис, который предстоит сейчас подтвердить, заключается в следующем: никогда не следует без крайней нужды выходить за рамки разрешенных системой средств, так же как и использовать их неоговоренным образом. Кстати, это одна из основных идей, выдвигаемых таким авторитетным программистом, каким является Питер Нортон.

Почему программы А. Русских более расточительны по времени, чем LUT? Он даже привел два фрагмента параллельно, и на первый взгляд очевидно, что короткая программа автора заметки, имеющая лишь один цикл, эффективней более длинной, да еще и с тремя циклами, использующей LUT.

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

Из сказанного очевидно, что в Бейсике лучше пользоваться командой LUT. Но можно и дальше бороться за эффективность программы, теперь уже в плане экономии памяти.

Вот одна из таких идей. Обратите внимание на то, что оператор LUT может адресоваться к любому элементу массива. Это позволяет в одной таблице "зарядить" множество цветовых эффектов. Конечно, массив будет больше 16 ячеек, но это, как правило, меньше чем несколько частично повторяющихся таблиц, заготовленных для каждого эффекта в отдельности. Чем лучше будет продумано устройство массива, тем меньше будет использовано памяти и тем удобнее (нагляднее, безошибочнее) будет программа в целом. Программисту останется лишь в нужный момент вызвать LUT с начальным элементом нужного фрагмента. Например, так:

    10 DIM L%(39) :REM Расход всего 80 байт
    20 FOR Z=0 ТО 7
    30 L%(Z)=Z: L%(Z+24)=Z: L%(Z+32)=15
    40 NEXT Z

Заметьте, что можно обойтись одним циклом там, где А. Русских применяет три. Этот фрагмент выполняется один раз в самом начале программы и не влияет на ее критические этапы. Теперь можно создавать множество эффектов одной лишь командой LUT:

    520 LUT L%(0)           :REM Символы погашены, графика видна
    650 LUT L%(24)          :REM Мгновенно зажглись символы
    820 LUT L%(8)           :REM Все погашено (и графика, и символы)
    ...                     :REM Что-то рисуется, пишется...
    950 FOR Z=0 TO 14       :REM Начало цикла постепенного (плавного)
    960 LUT L%(9+Z)         :REM включения экрана
    970 FOR I=0 TO 20:NEXT  :REM Задержка
    980 NEXT Z              :REM Конец цикла

По примеру последнего цикла можно придумать много интересных эффектов. Наши кружковцы исследовали возможности LUT-мультипликации на примере вращающихся объектов (колес, пропеллеров и т.п.). Попробуйте, это короткие (10-15 команд), но очень занимательные эксперименты. К тому же у вас появится объективный критерий для сравнения скорости и качества альтернативных приемов перепрограммирования цвета: чья вертушка быстрее крутится, у кого меньше помех на экране - тот и победил!